diff --git a/mall-common/src/main/java/com/suisung/mall/common/modules/order/ShopOrderInfo.java b/mall-common/src/main/java/com/suisung/mall/common/modules/order/ShopOrderInfo.java index 2badae13..4f579b75 100644 --- a/mall-common/src/main/java/com/suisung/mall/common/modules/order/ShopOrderInfo.java +++ b/mall-common/src/main/java/com/suisung/mall/common/modules/order/ShopOrderInfo.java @@ -197,4 +197,13 @@ public class ShopOrderInfo implements Serializable { @ApiModelProperty(value = "取单号,根据每个店铺每天已支付的订单累加+1") private Long order_pickup_num; + + @ApiModelProperty(value = "拣货完成时间戳") + private Long order_picked_time; + + @ApiModelProperty(value = "新建时间") + private Long created_at; + + @ApiModelProperty(value = "更新时间") + private Long updated_at; } diff --git a/mall-common/src/main/java/com/suisung/mall/common/modules/order/dto/MchOrderInfoDTO.java b/mall-common/src/main/java/com/suisung/mall/common/modules/order/dto/MchOrderInfoDTO.java index 195e15fc..72b7bc73 100644 --- a/mall-common/src/main/java/com/suisung/mall/common/modules/order/dto/MchOrderInfoDTO.java +++ b/mall-common/src/main/java/com/suisung/mall/common/modules/order/dto/MchOrderInfoDTO.java @@ -50,6 +50,8 @@ public class MchOrderInfoDTO implements Serializable { private String order_title; @ApiModelProperty(value = "同城配送取单号") private Long order_pickup_num; + @ApiModelProperty(value = "拣货完成时间戳") + private Long order_picked_time; @ApiModelProperty(value = "同城配送取单号字符串方式") private String order_pickup_num_str; @ApiModelProperty(value = "下单时间") diff --git a/mall-common/src/main/java/com/suisung/mall/common/service/impl/UniCloudPushServiceImpl.java b/mall-common/src/main/java/com/suisung/mall/common/service/impl/UniCloudPushServiceImpl.java index da221c74..ea958d62 100644 --- a/mall-common/src/main/java/com/suisung/mall/common/service/impl/UniCloudPushServiceImpl.java +++ b/mall-common/src/main/java/com/suisung/mall/common/service/impl/UniCloudPushServiceImpl.java @@ -8,6 +8,7 @@ package com.suisung.mall.common.service.impl; +import cn.hutool.core.collection.CollUtil; import cn.hutool.core.util.StrUtil; import cn.hutool.json.JSONArray; import cn.hutool.json.JSONObject; @@ -48,7 +49,7 @@ public class UniCloudPushServiceImpl implements UniCloudPushService { */ @Override public Pair sendBatchPush(String cloudFunctionUrl, List clientIds, String title, String content, JSONObject payload) { - if (StrUtil.isBlank(cloudFunctionUrl) || clientIds == null || clientIds.isEmpty() || StrUtil.isBlank(content)) { + if (StrUtil.isBlank(cloudFunctionUrl) || CollUtil.isEmpty(clientIds) || StrUtil.isBlank(content)) { return Pair.of(false, "缺少必要参数"); } diff --git a/mall-common/src/main/java/com/suisung/mall/common/utils/UserInfoService.java b/mall-common/src/main/java/com/suisung/mall/common/utils/UserInfoService.java index 95e78cc9..746edd42 100644 --- a/mall-common/src/main/java/com/suisung/mall/common/utils/UserInfoService.java +++ b/mall-common/src/main/java/com/suisung/mall/common/utils/UserInfoService.java @@ -56,7 +56,7 @@ public class UserInfoService { userDto = getUserByToken(); } - log.info("用户信息:{}", userDto); + log.debug("当前登录用户:{}", userDto); return userDto; } diff --git a/mall-shop/src/main/java/com/suisung/mall/shop/order/controller/admin/ShopOrderInfoController.java b/mall-shop/src/main/java/com/suisung/mall/shop/order/controller/admin/ShopOrderInfoController.java index 237cf29d..f072efa4 100644 --- a/mall-shop/src/main/java/com/suisung/mall/shop/order/controller/admin/ShopOrderInfoController.java +++ b/mall-shop/src/main/java/com/suisung/mall/shop/order/controller/admin/ShopOrderInfoController.java @@ -80,5 +80,18 @@ public class ShopOrderInfoController { return CommonResult.success(shopOrderInfoService.remove(order_id)); } + /** + * 订单拣货完成 + * 拣货完成(商家告知餐品制作完成接口),更新订单拣货时间戳 + * + * @param orderId + * @return + */ + @ApiOperation(value = "拣货完成(仅对顺丰同城)", notes = "拣货完成(仅对顺丰同城)") + @RequestMapping(value = "/picking/completed", method = RequestMethod.POST) + public CommonResult orderPickingCompleted(@RequestParam(name = "store_id", defaultValue = "0") String storeId, @RequestParam(name = "order_id", defaultValue = "") String orderId) { + return shopOrderInfoService.orderPickingCompleted(storeId, orderId); + } + } diff --git a/mall-shop/src/main/java/com/suisung/mall/shop/order/controller/mobile/UserOrderController.java b/mall-shop/src/main/java/com/suisung/mall/shop/order/controller/mobile/UserOrderController.java index ecc66963..75173308 100644 --- a/mall-shop/src/main/java/com/suisung/mall/shop/order/controller/mobile/UserOrderController.java +++ b/mall-shop/src/main/java/com/suisung/mall/shop/order/controller/mobile/UserOrderController.java @@ -330,5 +330,7 @@ public class UserOrderController extends BaseControllerImpl { return CommonResult.success(data); } + + } diff --git a/mall-shop/src/main/java/com/suisung/mall/shop/order/service/ShopOrderInfoService.java b/mall-shop/src/main/java/com/suisung/mall/shop/order/service/ShopOrderInfoService.java index d7b805fa..812ec6d3 100644 --- a/mall-shop/src/main/java/com/suisung/mall/shop/order/service/ShopOrderInfoService.java +++ b/mall-shop/src/main/java/com/suisung/mall/shop/order/service/ShopOrderInfoService.java @@ -1,5 +1,6 @@ package com.suisung.mall.shop.order.service; +import com.suisung.mall.common.api.CommonResult; import com.suisung.mall.common.modules.order.ShopOrderInfo; import com.suisung.mall.core.web.service.IBaseService; @@ -70,4 +71,14 @@ public interface ShopOrderInfoService extends IBaseService { */ Long getOrderCountByStoreId(Integer storeId, List orderStatusIdList, List orderRefundStatusIdList, List deliveryTypeList, Long expireSeconds); + /** + * 订单拣货完成 + * 拣货完成(商家告知餐品制作完成接口),更新订单拣货时间戳 + * + * @param storeId + * @param orderId + * @return + */ + CommonResult orderPickingCompleted(String storeId, String orderId); + } diff --git a/mall-shop/src/main/java/com/suisung/mall/shop/order/service/impl/ShopOrderInfoServiceImpl.java b/mall-shop/src/main/java/com/suisung/mall/shop/order/service/impl/ShopOrderInfoServiceImpl.java index 7a1f03d4..05e13f98 100644 --- a/mall-shop/src/main/java/com/suisung/mall/shop/order/service/impl/ShopOrderInfoServiceImpl.java +++ b/mall-shop/src/main/java/com/suisung/mall/shop/order/service/impl/ShopOrderInfoServiceImpl.java @@ -4,8 +4,11 @@ import cn.hutool.core.convert.Convert; import cn.hutool.core.date.DateUtil; import cn.hutool.core.util.NumberUtil; import cn.hutool.core.util.ObjectUtil; +import cn.hutool.core.util.StrUtil; +import cn.hutool.json.JSONObject; import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; import com.baomidou.mybatisplus.core.conditions.update.UpdateWrapper; +import com.suisung.mall.common.api.CommonResult; import com.suisung.mall.common.api.StateCode; import com.suisung.mall.common.constant.CommonConstant; import com.suisung.mall.common.feignService.AccountService; @@ -19,6 +22,7 @@ import com.suisung.mall.common.modules.order.ShopOrderStateLog; import com.suisung.mall.common.modules.pay.PayPlantformResource; import com.suisung.mall.common.modules.plantform.ShopPlantformFeedback; import com.suisung.mall.common.modules.product.ShopProductComment; +import com.suisung.mall.common.pojo.res.ThirdApiRes; import com.suisung.mall.common.utils.CommonUtil; import com.suisung.mall.core.web.service.impl.BaseServiceImpl; import com.suisung.mall.shop.base.service.AccountBaseConfigService; @@ -31,11 +35,14 @@ import com.suisung.mall.shop.plantform.service.ShopPlantformActivityItemService; import com.suisung.mall.shop.plantform.service.ShopPlantformFeedbackService; import com.suisung.mall.shop.product.service.ShopProductBaseService; import com.suisung.mall.shop.product.service.ShopProductCommentService; +import com.suisung.mall.shop.sfexpress.service.SFExpressApiService; import com.suisung.mall.shop.store.service.ShopStoreBaseService; import com.suisung.mall.shop.store.service.ShopStorePrinterService; +import com.suisung.mall.shop.store.service.ShopStoreSfOrderService; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.context.annotation.Lazy; import org.springframework.stereotype.Service; import org.springframework.transaction.annotation.Transactional; import org.springframework.web.context.request.RequestContextHolder; @@ -97,6 +104,15 @@ public class ShopOrderInfoServiceImpl extends BaseServiceImpl updateWrapper = new UpdateWrapper<>(); + updateWrapper.eq("order_id", orderId); + Long order_picek_time = System.currentTimeMillis(); + updateWrapper.set("order_picked_time", order_picek_time); + + boolean isUpdated = update(updateWrapper); + if (!isUpdated) { + logger.warn("订单拣货时间更新失败,orderId: {}", orderId); + return CommonResult.failed("订单更新失败"); + } + + // 获取顺丰订单号并调用 API 通知 + try { + String sfOrderId = shopStoreSfOrderService.getSfOrderIdByShopOrderId(orderId); + if (StrUtil.isBlank(sfOrderId)) { + logger.warn("未找到对应的顺丰订单号,orderId: {}", orderId); + return CommonResult.failed("未找到对应的顺丰订单号"); + } + + Map requestParams = new HashMap<>(); + requestParams.put("order_id", sfOrderId); + requestParams.put("store_id", storeId); + + ThirdApiRes response = sfExpressApiService.notifyProductReady(requestParams); + if (response == null || !Objects.equals(response.getError_code(), 0)) { + String errorMsg = response != null ? response.getError_msg() : "未知错误"; + logger.error("通知顺丰同城失败,orderId: {}, error: {}", orderId, errorMsg); + return CommonResult.failed("通知顺丰同城失败:" + errorMsg); + } + + } catch (Exception e) { + logger.error("调用顺丰API异常,orderId: {}, error: {}", orderId, e.getMessage(), e); + return CommonResult.failed("调用顺丰API异常,请稍后再试"); + } + + JSONObject data = new JSONObject(); + data.put("order_picked_time", order_picek_time); + + return CommonResult.success(data); + } + // todo 优化多次远程查询 private Map dashboardPlantform() { List order_state = Arrays.asList( diff --git a/mall-shop/src/main/java/com/suisung/mall/shop/page/controller/admin/ShopPageBaseController.java b/mall-shop/src/main/java/com/suisung/mall/shop/page/controller/admin/ShopPageBaseController.java index b6583d17..d7126798 100644 --- a/mall-shop/src/main/java/com/suisung/mall/shop/page/controller/admin/ShopPageBaseController.java +++ b/mall-shop/src/main/java/com/suisung/mall/shop/page/controller/admin/ShopPageBaseController.java @@ -162,18 +162,17 @@ public class ShopPageBaseController extends BaseControllerImpl { if (!user.isPlatform()) { String storeId = user.getStore_id(); ShopPageBase shopPageBase = shopPageBaseService.getById(page_id); -// log.info("storeId:{}", storeId); -// log.info("shopPageBase:{}", shopPageBase); // 页面不存在 或 当前用户无店铺信息 或 页面归属与当前店铺不符,则禁止删除 - if (shopPageBase == null || StrUtil.isBlank(storeId) || !storeId.equals(shopPageBase.getStore_id().toString())) { + if (shopPageBase == null + || StrUtil.isBlank(storeId) + || !storeId.equals(Convert.toStr(shopPageBase.getStore_id()))) { throw new ApiException(ResultCode.FORBIDDEN); } } // 执行删除操作 - boolean isRemoved = shopPageBaseService.remove(page_id); - return isRemoved ? CommonResult.success() : CommonResult.failed(); + return shopPageBaseService.remove(page_id) ? CommonResult.success() : CommonResult.failed(); } catch (ApiException e) { // 已知业务异常,直接抛出 diff --git a/mall-shop/src/main/java/com/suisung/mall/shop/sfexpress/service/impl/SFExpressApiServiceImpl.java b/mall-shop/src/main/java/com/suisung/mall/shop/sfexpress/service/impl/SFExpressApiServiceImpl.java index b0fc8c70..6c4ee639 100644 --- a/mall-shop/src/main/java/com/suisung/mall/shop/sfexpress/service/impl/SFExpressApiServiceImpl.java +++ b/mall-shop/src/main/java/com/suisung/mall/shop/sfexpress/service/impl/SFExpressApiServiceImpl.java @@ -486,7 +486,12 @@ public class SFExpressApiServiceImpl implements SFExpressApiService { return new ThirdApiRes().fail(1003, "请求参数有误!"); } - ShopStoreSameCityTransportBase shopStoreSameCityTransportBase = shopStoreSameCityTransportBaseService.getShopStoreSameCityTransportBaseById((long) params.get("store_id")); + Long storeId = Convert.toLong(params.get("store_id")); + if (storeId == null || storeId <= 0) { + return new ThirdApiRes().fail(1003, "缺少店铺 Id!"); + } + + ShopStoreSameCityTransportBase shopStoreSameCityTransportBase = shopStoreSameCityTransportBaseService.getShopStoreSameCityTransportBaseById(storeId); if (shopStoreSameCityTransportBase == null) { logger.error("无法获取顺丰店铺 Id!"); return new ThirdApiRes().fail(1003, "无法获取店铺Id"); diff --git a/mall-shop/src/main/resources/mapper/order/ShopOrderBaseMapper.xml b/mall-shop/src/main/resources/mapper/order/ShopOrderBaseMapper.xml index 56d6b7a8..c6886647 100644 --- a/mall-shop/src/main/resources/mapper/order/ShopOrderBaseMapper.xml +++ b/mall-shop/src/main/resources/mapper/order/ShopOrderBaseMapper.xml @@ -563,7 +563,6 @@ - @@ -572,6 +571,8 @@ + + @@ -656,6 +657,7 @@ oi.order_pickup_num, oi.delivery_type_id, oi.buyer_user_id, + oi.order_picked_time, IF((SELECT count(*) FROM shop_order_base WHERE buyer_user_id = oi.buyer_user_id AND order_state_id IN (2011, 2013, 2014, 2020, 2030, 2040))>1,2,1) AS is_new_buyer,