From 2daca091036fba43f64f77664710c81aff6782aa Mon Sep 17 00:00:00 2001 From: Jack <46790855@qq.com> Date: Sun, 15 Dec 2024 00:55:42 +0800 Subject: [PATCH] =?UTF-8?q?=E4=BF=AE=E6=94=B9=E8=AE=A2=E5=8D=95bug?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../suisung/mall/common/api/StateCode.java | 2 +- .../impl/ShopBaseStateCodeServiceImpl.java | 2 + .../suisung/mall/shop/config/CacheConfig.java | 2 - .../order/listener/OrderPayedListener.java | 69 +++++++++++-------- .../order/service/ShopOrderInfoService.java | 10 ++- .../impl/ShopOrderBaseServiceImpl.java | 24 ++++++- .../impl/ShopOrderInfoServiceImpl.java | 55 ++++++++++++++- .../service/impl/SFExpressApiServiceImpl.java | 35 ++++++---- .../impl/ShopStoreSfOrderServiceImpl.java | 2 +- 9 files changed, 147 insertions(+), 54 deletions(-) diff --git a/mall-common/src/main/java/com/suisung/mall/common/api/StateCode.java b/mall-common/src/main/java/com/suisung/mall/common/api/StateCode.java index 21aaa690..49605225 100644 --- a/mall-common/src/main/java/com/suisung/mall/common/api/StateCode.java +++ b/mall-common/src/main/java/com/suisung/mall/common/api/StateCode.java @@ -521,7 +521,7 @@ public class StateCode { // 打票机模版分类:1-下单打印模版;2-退货打印模版; public static final int PRINTER_TEMP_CATE_REFUND = 2; - // 顺丰同城订单状态:1-订单创建;2-订单取消;10-配送员接单/配送员改派;12-配送员到店;15配送员配送中(已取货);17-配送员妥投完单;22-配送员撤单;31-取消中;91-骑士上报异常; + // 顺丰同城订单状态:1-订单创建;2-订单取消;10-配送员接单/配送员改派;12-配送员到店;15-配送员配送中(已取货);17-配送员妥投完单;22-配送员撤单;31-取消中;91-骑士上报异常; public static final int SF_ORDER_STATUS_CREATED = 1; public static final int SF_ORDER_STATUS_CANCELED = 2; public static final int SF_ORDER_STATUS_RECEIVING = 10; diff --git a/mall-shop/src/main/java/com/suisung/mall/shop/base/service/impl/ShopBaseStateCodeServiceImpl.java b/mall-shop/src/main/java/com/suisung/mall/shop/base/service/impl/ShopBaseStateCodeServiceImpl.java index c482b347..0f52b727 100644 --- a/mall-shop/src/main/java/com/suisung/mall/shop/base/service/impl/ShopBaseStateCodeServiceImpl.java +++ b/mall-shop/src/main/java/com/suisung/mall/shop/base/service/impl/ShopBaseStateCodeServiceImpl.java @@ -33,6 +33,8 @@ public class ShopBaseStateCodeServiceImpl extends BaseServiceImpl order_id_row = Convert.toList(String.class, data); String messageId = message.getMessageProperties().getMessageId(); + + List order_id_row = Convert.toList(String.class, data); try { boolean flag = false; - logger.info("收到微信异步通知消息data:{}-chanel:{}-message:{},订单ID:{}", data, channel, message, order_id_row); for (String orderId : order_id_row) { //判断是否为线下支付订单 ShopOrderInfo orderInfoOld = shopOrderInfoService.get(orderId); + if (orderInfoOld == null) { + continue; + } - if (orderInfoOld.getOrder_state_id().intValue() == StateCode.ORDER_STATE_WAIT_PAY) { + // 订单状态 + int order_state_id = orderInfoOld.getOrder_state_id().intValue(); + logger.info("#### 当前订单状态: {} ####", order_state_id); + + if (order_state_id == StateCode.ORDER_STATE_WAIT_PAY) { // 待支付状态 logger.info("#### 待支付业务分支 ####"); flag = shopOrderBaseService.setPaidYes(Collections.singletonList(orderId)); @@ -79,33 +89,32 @@ public class OrderPayedListener { // 生成取单号和打印小票 if (flag) { // TODO 以下仅处理下单打印的情况,还需要处理退单打印分支。 - logger.info("####开始生成订单{}的取单号####", orderId); - ShopOrderInfo orderInfo = new ShopOrderInfo(); - orderInfo.setOrder_id(orderId); - // 生成取单号,写入order_info - Long orderPickupNum = shopOrderInfoService.genTodayPickupNum(orderInfoOld.getStore_id()); - orderInfo.setOrder_pickup_num(orderPickupNum); - shopOrderInfoService.edit(orderInfo); + // 原始状态 2010-待付款;2011--待订单审核;2013-待财务审核 变成 2020-待配货;2016-已经付款 的时候 + // 生成取单号,打票机打印订单,向顺丰同城下单 + if (order_state_id == StateCode.ORDER_STATE_WAIT_PAY + || order_state_id == StateCode.ORDER_STATE_WAIT_REVIEW + || order_state_id == StateCode.ORDER_STATE_WAIT_FINANCE_REVIEW) { + // 已支付的订单,生成取单号,打票机并打印订单 + Long orderPickupNum = shopOrderInfoService.isPaidOrderGenPickNumAndPrint(orderInfoOld.getStore_id(), orderId); - // 订单状态处理成功之后,打印小票 - shopStorePrinterService.printShopStoreOrder(orderId); + // 如果配送方式是 顺丰同城下单 + if (orderInfoOld.getDelivery_type_id() != null && orderInfoOld.getDelivery_type_id().equals(StateCode.DELIVERY_TYPE_SAME_CITY) + && orderPickupNum > 0) { + // 发送顺丰同城快递 + Pair pairCreateSfOrder = sfExpressApiService.innerCreateSfExpressOrder(orderId, orderPickupNum); + if (pairCreateSfOrder == null) { + logger.error("顺丰同城下单失败!pairCreateSfOrder 返回空值"); + return; + } - // 如果配送方式是 同城配送,直接同城顺丰下单 - if (orderInfoOld.getDelivery_type_id() != null && orderInfoOld.getDelivery_type_id().equals(StateCode.DELIVERY_TYPE_SAME_CITY)) { - // 发送顺丰同城快递 - Pair pairCreateSfOrder = sfExpressApiService.innerCreateSfExpressOrder(orderId, orderPickupNum); - if (pairCreateSfOrder == null) { - logger.error("顺丰同城下单失败!pairCreateSfOrder 返回空值"); - return; + if (!pairCreateSfOrder.getFirst()) { + logger.error("顺丰同城下单失败:{}", pairCreateSfOrder.getSecond()); + return; + } + + logger.info("顺丰同城下单成功"); } - - if (!pairCreateSfOrder.getFirst()) { - logger.error("顺丰同城下单失败:{}", pairCreateSfOrder.getSecond()); - return; - } - - logger.info("顺丰同城下单成功"); } } } 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 0cc291a6..17a2c539 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 @@ -40,6 +40,14 @@ public interface ShopOrderInfoService extends IBaseService { * @param orderIsShippedStatus 发货状态,约定0值不更改 * @return */ - Boolean changeOrderStatus(String orderId, Integer orderStatus,Integer orderIsOutStatus,Integer orderIsShippedStatus); + Boolean changeOrderStatus(String orderId, Integer orderStatus,Integer orderIsOutStatus, Integer orderIsShippedStatus); + + /** + * 已支付的订单,生成取单号,打票机并打印订单 + * @param storeId + * @param orderId + * @return 取货单号 + */ + Long isPaidOrderGenPickNumAndPrint(Integer storeId, String orderId); } diff --git a/mall-shop/src/main/java/com/suisung/mall/shop/order/service/impl/ShopOrderBaseServiceImpl.java b/mall-shop/src/main/java/com/suisung/mall/shop/order/service/impl/ShopOrderBaseServiceImpl.java index df0ad2b5..f95c40a4 100644 --- a/mall-shop/src/main/java/com/suisung/mall/shop/order/service/impl/ShopOrderBaseServiceImpl.java +++ b/mall-shop/src/main/java/com/suisung/mall/shop/order/service/impl/ShopOrderBaseServiceImpl.java @@ -7689,6 +7689,13 @@ public class ShopOrderBaseServiceImpl extends BaseServiceImpl orderInfoPage = shopOrderInfoService.lists(fixColumn(params), page, rows); @@ -7813,7 +7820,9 @@ public class ShopOrderBaseServiceImpl extends BaseServiceImpl updateWrapper = new UpdateWrapper<>(); updateWrapper.eq("order_id", orderId); - if (orderStatus > 0 && !orderIsOutStatus.equals(orderStatus)) { + if (orderStatus > 0) { updateWrapper.set("order_state_id", orderStatus); } @@ -259,6 +268,15 @@ public class ShopOrderInfoServiceImpl extends BaseServiceImpl updateShopOrderBaseWrapper = new UpdateWrapper<>(); + updateShopOrderBaseWrapper.eq("order_id", orderId); + if (orderStatus > 0) { + updateShopOrderBaseWrapper.set("order_state_id", orderStatus); + if (!shopOrderBaseService.update(updateShopOrderBaseWrapper)) { + return false; + } + } + // 远程调用 更改交易订单状态 if (!payService.changePayConsumeTradeState(orderId, orderStatus, 0)) { logger.error("远程调用更改交易订单状态失败!"); @@ -280,6 +298,41 @@ public class ShopOrderInfoServiceImpl extends BaseServiceImpl 0) { + // 已打印过,无需打印 + logger.info("####以前生成的订单{}的取单号####", orderInfoOld.getOrder_pickup_num()); + return orderInfoOld.getOrder_pickup_num(); + } + + ShopOrderInfo orderInfo = new ShopOrderInfo(); + orderInfo.setOrder_id(orderId); + // 生成取单号,写入order_info + Long orderPickupNum = genTodayPickupNum(storeId); + orderInfo.setOrder_pickup_num(orderPickupNum); + orderInfo.setOrder_express_print(CommonConstant.Enable); // 打印标记 1-已打印 + if (!edit(orderInfo)) { + return 0L; + } + + // 订单状态处理成功之后,打印小票 + shopStorePrinterService.printShopStoreOrder(orderId); + logger.info("####新生成订单{}的取单号####", orderPickupNum); + return orderPickupNum; + } + // todo 优化多次远程查询 private Map dashboardPlantform() { List order_state = Arrays.asList( 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 507510fb..068b1976 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 @@ -153,10 +153,10 @@ public class SFExpressApiServiceImpl implements SFExpressApiService { // 检查 shop_store_sf_order 订单是否已存在? if(shopStoreSfOrderService.exists(devId,shopOrderId)){ - return Pair.of(false, "顺丰同城下单时,发现订单已存在!"); + return Pair.of(true, "顺丰同城已下单过!"); } - // 从商家订单中,组件顺丰的订单信息,注:关键的函数 + // 从商家订单中,组建顺丰的订单信息,注:关键的函数 SFCreateOrderReq sfCreateOrderReq = shopOrderBaseService.buildSFOrderData(devId, shopOrderId, orderPickupNum); if (sfCreateOrderReq == null) { logger.error("顺丰同城下单异常,无法获取下单记录!"); @@ -165,10 +165,10 @@ public class SFExpressApiServiceImpl implements SFExpressApiService { // 请求参数转换 json 字符串参数 String paramJSON = JsonUtil.toJSONString(sfCreateOrderReq); - // 根据参数生成请求签名 String send_url = buildUrl("createorder", paramJSON); + // 向顺丰同城 创建一个顺丰同城配送订单 String retRespStr = HttpUtil.post(send_url, paramJSON); if (StrUtil.isEmpty(retRespStr)) { logger.error("创建顺丰同城订单异常,无返回值!"); @@ -199,11 +199,8 @@ public class SFExpressApiServiceImpl implements SFExpressApiService { return Pair.of(false, "保存顺丰同城下单失败!"); } - // 取件码。在顺丰同城商户侧配置,配置后有此字段。 - // String pickupCode = shopStoreSfOrder.getPickup_code() != null ? shopStoreSfOrder.getPickup_code().toString() : ""; - - // 商城订单状态:从 2020-待配货/待出库审核 到 2030-待发货 - shopOrderInfoService.changeOrderStatus(shopOrderId, StateCode.ORDER_STATE_WAIT_SHIPPING, 0, 0); + // 商城订单状态:2020-待配货/待出库审核 + shopOrderInfoService.changeOrderStatus(shopOrderId, StateCode.ORDER_STATE_PICKING, 0, 0); return Pair.of(true, "顺丰同城下单成功!"); } @@ -547,19 +544,27 @@ public class SFExpressApiServiceImpl implements SFExpressApiService { Integer orderIsOutStatus = 0; Integer orderIsShippedStatus = 0; if (shopStoreSfOrder.getOrder_status().equals(StateCode.SF_ORDER_STATUS_RECEIVING) - || shopStoreSfOrder.getOrder_status().equals(StateCode.SF_ORDER_STATUS_ARRIVED)) {// 配送员已取单配送中 - // 商城订单状态:从 2020-待配货 到 2030; //待发货 - orderStatus = StateCode.ORDER_STATE_WAIT_SHIPPING; + || shopStoreSfOrder.getOrder_status().equals(StateCode.SF_ORDER_STATUS_ARRIVED)) { + // 顺丰同城状态:10-配送员接单/配送员改派; + // 商城订单状态:从 2016-已经付款 到 2020-待配货; + orderStatus = StateCode.ORDER_STATE_PICKING; orderIsOutStatus = 0; orderIsShippedStatus = 0; - } else if (shopStoreSfOrder.getOrder_status().equals(StateCode.SF_ORDER_STATUS_RECEIVED)) {// 配送员已取单配送中 + } else if (shopStoreSfOrder.getOrder_status().equals(StateCode.SF_ORDER_STATUS_ARRIVED)) { + // 顺丰同城状态:12-配送员到店; + // 商城订单状态:从 2020-待配货 到 2030; //待发货 + orderStatus = StateCode.ORDER_STATE_WAIT_SHIPPING; + orderIsOutStatus = StateCode.ORDER_PICKING_STATE_YES; // 已出库 + orderIsShippedStatus = 0; + } else if (shopStoreSfOrder.getOrder_status().equals(StateCode.SF_ORDER_STATUS_RECEIVED)) { + // 顺丰同城状态:15-配送员配送中(已取货) // 商城订单状态:从 2030-待发货 到 2040-已发货/待收货确认 orderStatus = StateCode.ORDER_STATE_SHIPPED; - orderIsOutStatus = StateCode.ORDER_PICKING_STATE_YES; - orderIsShippedStatus = StateCode.ORDER_SHIPPED_STATE_YES; + orderIsOutStatus = 0; + orderIsShippedStatus = StateCode.ORDER_SHIPPED_STATE_YES; // 已发货 } - success = shopOrderInfoService.changeOrderStatus(shopStoreSfOrder.getShop_order_id(), orderStatus, orderIsOutStatus, orderIsShippedStatus); + success = shopOrderInfoService.changeOrderStatus(shopStoreSfOrder.getShop_order_id(), orderStatus, orderIsOutStatus, orderIsShippedStatus); if (!success) { throw new ApiException(I18nUtil._("状态处理失败!")); diff --git a/mall-shop/src/main/java/com/suisung/mall/shop/store/service/impl/ShopStoreSfOrderServiceImpl.java b/mall-shop/src/main/java/com/suisung/mall/shop/store/service/impl/ShopStoreSfOrderServiceImpl.java index abdcf513..cdb70b72 100644 --- a/mall-shop/src/main/java/com/suisung/mall/shop/store/service/impl/ShopStoreSfOrderServiceImpl.java +++ b/mall-shop/src/main/java/com/suisung/mall/shop/store/service/impl/ShopStoreSfOrderServiceImpl.java @@ -191,7 +191,7 @@ public class ShopStoreSfOrderServiceImpl extends BaseServiceImpl wrapper = new QueryWrapper<>(); - wrapper.eq("sf_order_id", shopOrderId); + wrapper.eq("shop_order_id", shopOrderId); wrapper.eq("dev_id", devId); return count(wrapper) > 0;