Explorar el Código

feat(order): 添加微信下单接口并完善中车订单处理流程

- 新增微信下单接口 /wxSubmitOrder
- 实现中车订单审核通过、审核拒绝、创建、取消、支付通知、预确认、收货确认等消息处理
- 集成 JSON 日志记录功能用于调试
- 修复外部商品服务中的策略调用注释问题
- 优化订单商品构建逻辑,使用产品编号而非 ID 进行映射
- 引入 RemoteApiOrderService 服务引用以支持订单操作
肖路 hace 1 semana
padre
commit
3e981a066b
Se han modificado 12 ficheros con 113 adiciones y 81 borrados
  1. 2 2
      ruoyi-api/ruoyi-api-product/src/main/java/org/dromara/product/api/RemoteProductService.java
  2. 2 0
      ruoyi-modules/ruoyi-external/src/main/java/org/dromara/external/controller/zhongche/handle/impl/GoodsAuditPassMessageHandler.java
  3. 2 0
      ruoyi-modules/ruoyi-external/src/main/java/org/dromara/external/controller/zhongche/handle/impl/GoodsAuditRejectMessageHandler.java
  4. 6 0
      ruoyi-modules/ruoyi-external/src/main/java/org/dromara/external/controller/zhongche/handle/impl/OrderCancelMessageHandler.java
  5. 69 64
      ruoyi-modules/ruoyi-external/src/main/java/org/dromara/external/controller/zhongche/handle/impl/OrderCreateMessageHandler.java
  6. 3 0
      ruoyi-modules/ruoyi-external/src/main/java/org/dromara/external/controller/zhongche/handle/impl/OrderPayNoticeMessageHandler.java
  7. 2 1
      ruoyi-modules/ruoyi-external/src/main/java/org/dromara/external/controller/zhongche/handle/impl/OrderPreConfirmMessageHandler.java
  8. 2 0
      ruoyi-modules/ruoyi-external/src/main/java/org/dromara/external/controller/zhongche/handle/impl/OrderReceiveConfirmMessageHandler.java
  9. 3 3
      ruoyi-modules/ruoyi-external/src/main/java/org/dromara/external/service/impl/ExternalProductServiceImpl.java
  10. 9 1
      ruoyi-modules/ruoyi-order/src/main/java/org/dromara/order/controller/mini/MiniOrderController.java
  11. 10 7
      ruoyi-modules/ruoyi-order/src/main/java/org/dromara/order/dubbo/RemoteExternalOrderServiceImpl.java
  12. 3 3
      ruoyi-modules/ruoyi-product/src/main/java/org/dromara/product/dubbo/RemoteProductServiceImpl.java

+ 2 - 2
ruoyi-api/ruoyi-api-product/src/main/java/org/dromara/product/api/RemoteProductService.java

@@ -100,10 +100,10 @@ public interface RemoteProductService {
 
     /**
      * 给订单商品赋值
-     * @param productIds
+     * @param productNos
      * @return
      */
-    List<OrderProductDto> buildOrderProduct(List<Long> productIds);
+    List<OrderProductDto> buildOrderProduct(List<String> productNos);
 
     /**
      * 库存锁定

+ 2 - 0
ruoyi-modules/ruoyi-external/src/main/java/org/dromara/external/controller/zhongche/handle/impl/GoodsAuditPassMessageHandler.java

@@ -1,6 +1,7 @@
 package org.dromara.external.controller.zhongche.handle.impl;
 
 import cn.hutool.core.util.StrUtil;
+import cn.hutool.json.JSONUtil;
 import lombok.RequiredArgsConstructor;
 import lombok.extern.slf4j.Slf4j;
 import org.dromara.external.api.zhongche.domain.bo.MessageBo;
@@ -30,6 +31,7 @@ public class GoodsAuditPassMessageHandler implements MallMessageHandler {
 
     @Override
     public MessageVo handle(MessageBo messageBo) {
+        log.info("处理商品审核通过消息,message={}" , JSONUtil.toJsonStr(messageBo));
         return new MessageVo("1");
     }
     /*@Override

+ 2 - 0
ruoyi-modules/ruoyi-external/src/main/java/org/dromara/external/controller/zhongche/handle/impl/GoodsAuditRejectMessageHandler.java

@@ -1,6 +1,7 @@
 package org.dromara.external.controller.zhongche.handle.impl;
 
 import cn.hutool.core.util.StrUtil;
+import cn.hutool.json.JSONUtil;
 import lombok.RequiredArgsConstructor;
 import lombok.extern.slf4j.Slf4j;
 import org.dromara.external.api.zhongche.domain.bo.MessageBo;
@@ -30,6 +31,7 @@ public class GoodsAuditRejectMessageHandler implements MallMessageHandler {
 
     @Override
     public MessageVo handle(MessageBo messageBo) {
+        log.info("处理商品审核拒绝消息,message={}" , JSONUtil.toJsonStr(messageBo));
         return new MessageVo("1");
     }
     /*@Override

+ 6 - 0
ruoyi-modules/ruoyi-external/src/main/java/org/dromara/external/controller/zhongche/handle/impl/OrderCancelMessageHandler.java

@@ -1,12 +1,15 @@
 package org.dromara.external.controller.zhongche.handle.impl;
 
+import cn.hutool.json.JSONUtil;
 import lombok.RequiredArgsConstructor;
 import lombok.extern.slf4j.Slf4j;
 import org.dromara.external.api.zhongche.domain.bo.MessageBo;
 import org.dromara.external.api.zhongche.domain.vo.MessageVo;
 import org.dromara.external.controller.zhongche.handle.MallMessageHandler;
 import org.dromara.external.enums.MallMessageTypeEnum;
+import org.dromara.product.api.RemoteApiOrderService;
 import org.dromara.product.api.RemoteExternalOrderService;
+import org.dromara.product.api.domain.bo.RemoteOrderBo;
 import org.dromara.product.api.domain.dto.OrderNoDto;
 import org.springframework.stereotype.Component;
 
@@ -22,6 +25,8 @@ public class OrderCancelMessageHandler implements MallMessageHandler {
 
     private final RemoteExternalOrderService remoteExternalOrderService;
 
+    private final RemoteApiOrderService remoteApiOrderService;
+
     @Override
     public MallMessageTypeEnum supportType() {
         return MallMessageTypeEnum.ORDER_CANCEL;
@@ -30,6 +35,7 @@ public class OrderCancelMessageHandler implements MallMessageHandler {
 
     @Override
     public MessageVo handle(MessageBo messageBo) {
+        log.info("处理取消订单消息参数,messageBo={}", JSONUtil.toJsonStr(messageBo));
         String orderNo = (String) messageBo.getContent().get("orderNo");
         String cancelReason = (String) messageBo.getContent().get("cancelReason");
 

+ 69 - 64
ruoyi-modules/ruoyi-external/src/main/java/org/dromara/external/controller/zhongche/handle/impl/OrderCreateMessageHandler.java

@@ -1,5 +1,6 @@
 package org.dromara.external.controller.zhongche.handle.impl;
 
+import cn.hutool.json.JSONUtil;
 import lombok.RequiredArgsConstructor;
 import lombok.extern.slf4j.Slf4j;
 import org.apache.dubbo.config.annotation.DubboReference;
@@ -58,71 +59,75 @@ public class OrderCreateMessageHandler implements MallMessageHandler {
     @Override
     public MessageVo handle(MessageBo messageBo) {
         //获取中车订单号获取订单详情,我们电商平台没有接单功能胡哥说的,然后默认接单 就发起接单的请求
-        String orderNo = (String) messageBo.getContent().get("orderNo");
-        log.info("处理新订单消息,orderNo={}", orderNo);
-        OrderDetailVo orderDetailVo = new OrderDetailVo();
-
-// ===== 基本信息 =====
-        orderDetailVo.setOrderNo("20260210110174145");
-        orderDetailVo.setPurchaserOrderNo("2026021010452505");
-        orderDetailVo.setPreOrder(0);
-        orderDetailVo.setMallOrderNo(null);
-        orderDetailVo.setOrderStatus("1");
-        orderDetailVo.setOrderAmount(new BigDecimal("205.24"));
-        orderDetailVo.setFreight(new BigDecimal("0.00"));
-
-// ===== 收货信息 =====
-        orderDetailVo.setName("111");
-        orderDetailVo.setProvinceId("1");
-        orderDetailVo.setCityId("2800");
-        orderDetailVo.setCountyId("55835");
-        orderDetailVo.setTownId("0");
-        orderDetailVo.setAddress("中车智程");
-        orderDetailVo.setZip(null);
-        orderDetailVo.setMobile("13381115928");
-        orderDetailVo.setPhone(null);
-        orderDetailVo.setEmail("service_yg@bosssoft.com.cn");
-
-// ===== 下单信息 =====
-        orderDetailVo.setMemo("");
-        orderDetailVo.setOrderTime("2026-02-10 17:25:18");
-        orderDetailVo.setBuyer("常恒瑀");
-        orderDetailVo.setBuyerMobile("18801195315");
-        orderDetailVo.setPurchaserName("中国中车");
-        orderDetailVo.setPurchaserDeptName("中国中车-中车科技园发展有限公司-中车智程文化科技(北京)有限公司");
-
-// ===== 支付信息 =====
-        orderDetailVo.setPaymentType("01");
-        orderDetailVo.setVoucher("0");
-        orderDetailVo.setPayClient("0");
-        orderDetailVo.setPaySerialNum(null);
-        orderDetailVo.setPayAccount(null);
-        orderDetailVo.setPayMoney(null);
-        orderDetailVo.setPayPrestore(null);
 
-        OrderGoodsItem goodsItem = new OrderGoodsItem();
-        goodsItem.setGoodsId("362032");
-        goodsItem.setNum(new BigDecimal("7.0000"));
-        goodsItem.setPrice(new BigDecimal("29.3200"));
-        goodsItem.setSubAmount(new BigDecimal("205.24"));
-        goodsItem.setWishDeliveryDate(null);
-
-        orderDetailVo.setOrderGoods(Collections.singletonList(goodsItem));
-        ZhongCheOrderInvoice invoice = new ZhongCheOrderInvoice();
-        invoice.setInvoiceType("2");
-        invoice.setSelectedInvoiceTitle("5");
-        invoice.setCompanyName("中车智程文化科技(北京)");
-        invoice.setInvoiceContent("1");
-        invoice.setInvoiceName("王琳");
-        invoice.setInvoicePhone("15249101907");
-        invoice.setInvoiceFullAddress("北京海淀区羊坊店街道北京市海淀区羊坊店路11号");
-        invoice.setRegCompanyName("中车智程文化科技(北京)");
-        invoice.setRegCode("91110108MAC4385K6J");
-        invoice.setRegAddr("北京市海淀区羊坊店路11号四层428室测试");
-        invoice.setRegPhone("010-51891021");
-        invoice.setRegBank("中国工商银行股份有限公司北京玉渊潭支行测试");
-        invoice.setRegBankAccount("111111111");
-        orderDetailVo.setOrderInvoice(invoice);
+        String orderNo = (String) messageBo.getContent().get("orderNo");
+        log.info("处理新订单消息参数,messageBo={}", JSONUtil.toJsonStr(messageBo));
+        OrderDetailBo orderDetailBo = new OrderDetailBo();
+        orderDetailBo.setOrderNo(orderNo);
+        OrderDetailVo orderDetailVo = zhongChePullController.mallOrderDetail(orderDetailBo);
+//        OrderDetailVo orderDetailVo = new OrderDetailVo();
+//
+//// ===== 基本信息 =====
+//        orderDetailVo.setOrderNo("20260210110174145");
+//        orderDetailVo.setPurchaserOrderNo("2026021010452505");
+//        orderDetailVo.setPreOrder(0);
+//        orderDetailVo.setMallOrderNo(null);
+//        orderDetailVo.setOrderStatus("1");
+//        orderDetailVo.setOrderAmount(new BigDecimal("205.24"));
+//        orderDetailVo.setFreight(new BigDecimal("0.00"));
+//
+//// ===== 收货信息 =====
+//        orderDetailVo.setName("111");
+//        orderDetailVo.setProvinceId("1");
+//        orderDetailVo.setCityId("2800");
+//        orderDetailVo.setCountyId("55835");
+//        orderDetailVo.setTownId("0");
+//        orderDetailVo.setAddress("中车智程");
+//        orderDetailVo.setZip(null);
+//        orderDetailVo.setMobile("13381115928");
+//        orderDetailVo.setPhone(null);
+//        orderDetailVo.setEmail("service_yg@bosssoft.com.cn");
+//
+//// ===== 下单信息 =====
+//        orderDetailVo.setMemo("");
+//        orderDetailVo.setOrderTime("2026-02-10 17:25:18");
+//        orderDetailVo.setBuyer("常恒瑀");
+//        orderDetailVo.setBuyerMobile("18801195315");
+//        orderDetailVo.setPurchaserName("中国中车");
+//        orderDetailVo.setPurchaserDeptName("中国中车-中车科技园发展有限公司-中车智程文化科技(北京)有限公司");
+//
+//// ===== 支付信息 =====
+//        orderDetailVo.setPaymentType("01");
+//        orderDetailVo.setVoucher("0");
+//        orderDetailVo.setPayClient("0");
+//        orderDetailVo.setPaySerialNum(null);
+//        orderDetailVo.setPayAccount(null);
+//        orderDetailVo.setPayMoney(null);
+//        orderDetailVo.setPayPrestore(null);
+//
+//        OrderGoodsItem goodsItem = new OrderGoodsItem();
+//        goodsItem.setGoodsId("362032");
+//        goodsItem.setNum(new BigDecimal("7.0000"));
+//        goodsItem.setPrice(new BigDecimal("29.3200"));
+//        goodsItem.setSubAmount(new BigDecimal("205.24"));
+//        goodsItem.setWishDeliveryDate(null);
+//
+//        orderDetailVo.setOrderGoods(Collections.singletonList(goodsItem));
+//        ZhongCheOrderInvoice invoice = new ZhongCheOrderInvoice();
+//        invoice.setInvoiceType("2");
+//        invoice.setSelectedInvoiceTitle("5");
+//        invoice.setCompanyName("中车智程文化科技(北京)");
+//        invoice.setInvoiceContent("1");
+//        invoice.setInvoiceName("王琳");
+//        invoice.setInvoicePhone("15249101907");
+//        invoice.setInvoiceFullAddress("北京海淀区羊坊店街道北京市海淀区羊坊店路11号");
+//        invoice.setRegCompanyName("中车智程文化科技(北京)");
+//        invoice.setRegCode("91110108MAC4385K6J");
+//        invoice.setRegAddr("北京市海淀区羊坊店路11号四层428室测试");
+//        invoice.setRegPhone("010-51891021");
+//        invoice.setRegBank("中国工商银行股份有限公司北京玉渊潭支行测试");
+//        invoice.setRegBankAccount("111111111");
+//        orderDetailVo.setOrderInvoice(invoice);
         OrderNoDto orderNoDto = remoteExternalOrderService.createZhongCheOrder(orderDetailVo);
         if (orderNoDto.getSuccess()){
             return new MessageVo("1");

+ 3 - 0
ruoyi-modules/ruoyi-external/src/main/java/org/dromara/external/controller/zhongche/handle/impl/OrderPayNoticeMessageHandler.java

@@ -1,5 +1,6 @@
 package org.dromara.external.controller.zhongche.handle.impl;
 
+import cn.hutool.json.JSONUtil;
 import lombok.RequiredArgsConstructor;
 import lombok.extern.slf4j.Slf4j;
 import org.apache.dubbo.config.annotation.DubboReference;
@@ -36,6 +37,8 @@ public class OrderPayNoticeMessageHandler implements MallMessageHandler {
 
     @Override
     public MessageVo handle(MessageBo messageBo) {
+        log.info("处理订单支付消息参数,messageBo={}", JSONUtil.toJsonStr(messageBo));
+        String orderNo = (String) messageBo.getContent().get("orderNo");
         return new MessageVo("1");
     }
     /*@Override

+ 2 - 1
ruoyi-modules/ruoyi-external/src/main/java/org/dromara/external/controller/zhongche/handle/impl/OrderPreConfirmMessageHandler.java

@@ -1,5 +1,6 @@
 package org.dromara.external.controller.zhongche.handle.impl;
 
+import cn.hutool.json.JSONUtil;
 import lombok.RequiredArgsConstructor;
 import lombok.extern.slf4j.Slf4j;
 import org.apache.dubbo.config.annotation.DubboReference;
@@ -38,7 +39,7 @@ public class OrderPreConfirmMessageHandler implements MallMessageHandler {
     public MessageVo handle(MessageBo messageBo) {
         //获取中车订单号获取订单详情,我们电商平台没有接单功能胡哥说的,然后默认接单 就发起接单的请求
         String orderNo = (String) messageBo.getContent().get("orderNo");
-        log.info("处理新订单消息,orderNo={}", orderNo);
+        log.info("处理预设订单消息参数,messageBo={}", JSONUtil.toJsonStr(messageBo));
         return new MessageVo("1");
     }
 

+ 2 - 0
ruoyi-modules/ruoyi-external/src/main/java/org/dromara/external/controller/zhongche/handle/impl/OrderReceiveConfirmMessageHandler.java

@@ -1,5 +1,6 @@
 package org.dromara.external.controller.zhongche.handle.impl;
 
+import cn.hutool.json.JSONUtil;
 import lombok.RequiredArgsConstructor;
 import lombok.extern.slf4j.Slf4j;
 import org.dromara.external.api.zhongche.domain.bo.MessageBo;
@@ -34,6 +35,7 @@ public class OrderReceiveConfirmMessageHandler implements MallMessageHandler {
     }*/
     @Override
     public MessageVo handle(MessageBo messageBo) {
+        log.info("处理订单收货消息参数,messageBo={}", JSONUtil.toJsonStr(messageBo));
         String orderNo = (String) messageBo.getContent().get("orderNo");
         String outgoingCode = (String) messageBo.getContent().get("outgoingCode");
         boolean b = remoteExternalOrderService.confirmReceive(orderNo, outgoingCode);

+ 3 - 3
ruoyi-modules/ruoyi-external/src/main/java/org/dromara/external/service/impl/ExternalProductServiceImpl.java

@@ -256,9 +256,9 @@ public class ExternalProductServiceImpl  extends ServiceImpl<ExternalProductMapp
         if (ObjectUtil.isNotEmpty(productIds)) {
             //获取需要推送的商品数据
             List<ProductVo> productDetails = remoteProductService.getProductDetails(productIds);
-//            strategy.updateDetail(itemId,productDetails);
-//            strategy.updatePrice(itemId,productDetails);
-//            strategy.updateProperties(itemId,productDetails);
+            strategy.updateDetail(itemId,productDetails);
+            strategy.updatePrice(itemId,productDetails);
+            strategy.updateProperties(itemId,productDetails);
             strategy.updateImages(itemId,productDetails);
         }
         return baseMapper.update(Wrappers.lambdaUpdate(ExternalProduct.class)

+ 9 - 1
ruoyi-modules/ruoyi-order/src/main/java/org/dromara/order/controller/mini/MiniOrderController.java

@@ -229,7 +229,6 @@ public class MiniOrderController extends BaseController {
             // 设置仓库(假设默认仓库)
             mainBo.setWarehouseId(1L); // TODO: 后续可配置或根据客户动态获取
 
-
             // 设置订单状态为待支付
             mainBo.setOrderStatus(OrderStatus.PENDING_PAYMENT.getCode());
 
@@ -408,4 +407,13 @@ public class MiniOrderController extends BaseController {
                 .orderByAsc(OrderCustomerFlowNodeLink::getSort)
         ));
     }
+
+    /**
+    * 微信下单
+    * */
+    @Log(title = "微信端-下单", businessType = BusinessType.INSERT)
+    @PostMapping("/wxSubmitOrder")
+    public R<Long> wxSubmitOrder(@RequestBody @Validated PcSubmitOrderBo bo) {
+        return submitOrder(bo);
+    }
 }

+ 10 - 7
ruoyi-modules/ruoyi-order/src/main/java/org/dromara/order/dubbo/RemoteExternalOrderServiceImpl.java

@@ -35,6 +35,7 @@ import org.dromara.order.utils.kd100.Kd100Util;
 import org.dromara.order.utils.kd100.domain.QueryTrackDTO;
 import org.dromara.order.utils.kd100.domain.TrackData;
 import org.dromara.order.utils.kd100.domain.TrackVO;
+import org.dromara.product.api.RemoteApiOrderService;
 import org.dromara.product.api.RemoteExternalOrderService;
 import org.dromara.product.api.RemoteProductService;
 import org.dromara.product.api.domain.ProductVo;
@@ -86,6 +87,9 @@ public class RemoteExternalOrderServiceImpl implements RemoteExternalOrderServic
      @DubboReference
      private final RemoteProductService remoteProductService;
 
+    @DubboReference
+    private final RemoteApiOrderService remoteApiOrderService;
+
      private final IOrderMainCrrcExtService orderMainCrrcExtService;
 
      private final IOrderInvoiceService orderInvoiceService;
@@ -513,27 +517,26 @@ public class RemoteExternalOrderServiceImpl implements RemoteExternalOrderServic
         }
         //商品订单
         List<OrderGoodsItem> orderGoods = orderDetailVo.getOrderGoods();
-        List<Long> goodsIds = orderGoods.stream()
+        List<String> goodsIds = orderGoods.stream()
             .map(OrderGoodsItem::getGoodsId)
             .filter(StrUtil::isNotBlank)
-            .map(Long::valueOf)
             .distinct()
             .toList();
         List<OrderProductDto> orderProductDtos = remoteProductService.buildOrderProduct(goodsIds);
-        Map<Long, OrderProductDto> productMap =
+        Map<String, OrderProductDto> productMap =
             orderProductDtos.stream()
                 .collect(Collectors.toMap(
-                    OrderProductDto::getProductId,
+                    OrderProductDto::getProductNo,
                     Function.identity()
                 ));
         List<OrderProduct> orderProductList = new ArrayList<>();
         for (OrderGoodsItem item : orderGoods) {
 
-            Long productId = Long.valueOf(item.getGoodsId());
-            OrderProductDto productDto = productMap.get(productId);
+            String productNo = item.getGoodsId();
+            OrderProductDto productDto = productMap.get(productNo);
             OrderProduct orderProduct = new OrderProduct();
             orderProduct.setOrderId(id);
-            orderProduct.setProductId(productId);
+            orderProduct.setProductId(productDto.getProductId());
             orderProduct.setOrderNo(orderNo);
 
             // ===== 商品中心冗余字段 =====

+ 3 - 3
ruoyi-modules/ruoyi-product/src/main/java/org/dromara/product/dubbo/RemoteProductServiceImpl.java

@@ -562,14 +562,14 @@ public class RemoteProductServiceImpl implements RemoteProductService {
         }).toList();
     }
 
-    public List<OrderProductDto> buildOrderProduct(List<Long> productIds){
-        if (CollUtil.isEmpty(productIds)) {
+    public List<OrderProductDto> buildOrderProduct(List<String> productNos){
+        if (CollUtil.isEmpty(productNos)) {
             return Collections.emptyList();
         }
         // ① 查商品基础表
         List<ProductBase> productList = productBaseService.list(
             new LambdaQueryWrapper<ProductBase>()
-                .in(ProductBase::getId, productIds)
+                .in(ProductBase::getProductNo, productNos)
         );
 
         if (CollUtil.isEmpty(productList)) {