Kaynağa Gözat

小程序订单调试

skyline 1 ay önce
ebeveyn
işleme
180519a162

+ 28 - 26
haha-service/src/main/java/com/haha/service/impl/OrderServiceImpl.java

@@ -13,6 +13,7 @@ import com.haha.common.enums.PayStatus;
 import com.haha.common.enums.PaymentChannel;
 import com.haha.common.exception.BusinessException;
 import com.haha.common.utils.EntityLabelUtils;
+import com.haha.common.utils.OrderUtils;
 import com.haha.common.vo.OrderItemVO;
 import com.haha.common.vo.OrderVO;
 import com.haha.entity.Device;
@@ -52,7 +53,7 @@ public class OrderServiceImpl extends ServiceImpl<OrderMapper, Order> implements
 
     private final DeviceMapper deviceMapper;
     private final ShopMapper shopMapper;
-    
+
     @Autowired
     @Lazy
     private PaymentService paymentService;
@@ -70,7 +71,7 @@ public class OrderServiceImpl extends ServiceImpl<OrderMapper, Order> implements
     private InviteActivityService inviteActivityService;
 
     @Override
-    public IPage<Order> getPage(int page, int pageSize, String orderNo, String deviceId, 
+    public IPage<Order> getPage(int page, int pageSize, String orderNo, String deviceId,
                                  String payStatus, Integer status, String startDate, String endDate) {
         // 确保分页参数有效(MyBatis-Plus 要求页码从 1 开始)
         if (page < 1) {
@@ -79,11 +80,11 @@ public class OrderServiceImpl extends ServiceImpl<OrderMapper, Order> implements
         if (pageSize < 1 || pageSize > 100) {
             pageSize = 10;  // 默认每页 10 条,最大 100 条
         }
-        
+
         log.info("订单分页查询:page={}, pageSize={}, orderNo={}, deviceId={}", page, pageSize, orderNo, deviceId);
-        
+
         LambdaQueryWrapper<Order> wrapper = new LambdaQueryWrapper<>();
-        
+
         // 构建查询条件
         wrapper.like(orderNo != null && !orderNo.isEmpty(), Order::getOrderNo, orderNo)
                .like(deviceId != null && !deviceId.isEmpty(), Order::getDeviceId, deviceId)
@@ -105,10 +106,10 @@ public class OrderServiceImpl extends ServiceImpl<OrderMapper, Order> implements
 
         // 分页查询
         IPage<Order> orderPage = this.page(new Page<>(page, pageSize), wrapper);
-        
+
         // 填充标签字段和关联信息
         orderPage.getRecords().forEach(this::fillOrderLabels);
-        
+
         return orderPage;
     }
 
@@ -128,7 +129,7 @@ public class OrderServiceImpl extends ServiceImpl<OrderMapper, Order> implements
         if (order == null) {
             return null;
         }
-        
+
         OrderVO vo = new OrderVO();
         vo.setId(order.getId());
         vo.setOrderNo(order.getOrderNo());
@@ -145,10 +146,10 @@ public class OrderServiceImpl extends ServiceImpl<OrderMapper, Order> implements
         vo.setPayTime(order.getPayTime());
         vo.setVideoUrl(order.getVideoUrl());
         vo.setConfidence(order.getConfidence());
-        
+
         List<OrderItemVO> products = orderGoodsService.getVOByOrderId(id);
         vo.setProducts(products);
-        
+
         return vo;
     }
 
@@ -231,8 +232,8 @@ public class OrderServiceImpl extends ServiceImpl<OrderMapper, Order> implements
         statistics.put("todayAmount", todayAmount != null ? todayAmount.setScale(2, RoundingMode.HALF_UP).toString() : "0.00");
 
         // 平均订单金额
-        BigDecimal averageAmount = completedOrders > 0 && totalAmount != null 
-            ? totalAmount.divide(BigDecimal.valueOf(completedOrders), 2, RoundingMode.HALF_UP) 
+        BigDecimal averageAmount = completedOrders > 0 && totalAmount != null
+            ? totalAmount.divide(BigDecimal.valueOf(completedOrders), 2, RoundingMode.HALF_UP)
             : BigDecimal.ZERO;
         statistics.put("averageAmount", averageAmount.toString());
 
@@ -302,18 +303,18 @@ public class OrderServiceImpl extends ServiceImpl<OrderMapper, Order> implements
 
     /**
      * 从AI识别结果创建订单
-     * 
+     *
      * 业务流程:
      * 1. 幂等性检查:防止重复创建订单
      * 2. 保存商品识别信息(此时不计算金额,因为AI识别结果不包含价格)
      * 3. 解析视频URL等资源信息
      * 4. 创建订单记录,状态为待支付,金额为0(等待订单回调时由设备端提供实付金额)
-     * 
+     *
      * 注意:
      * - AI识别结果(sku_list)只包含商品编码(code)和数量(quantity),不包含价格
      * - 商品价格在订单回调时由设备端计算并传来
      * - 此方法只创建订单框架,实际金额在handleOrderCallback中更新
-     * 
+     *
      * @param activityId 活动ID(设备开门会话ID)
      * @param deviceId 设备ID
      * @param userId 用户ID
@@ -334,7 +335,7 @@ public class OrderServiceImpl extends ServiceImpl<OrderMapper, Order> implements
                 return existingOrder;
             }
         }
-        
+
         // 【步骤2】解析视频URL等资源信息
         String videoUrl = null;
         if (resourceInfoStr != null && !resourceInfoStr.isEmpty()) {
@@ -349,6 +350,7 @@ public class OrderServiceImpl extends ServiceImpl<OrderMapper, Order> implements
         // 3. 设备端会根据商品编码查询价格,并计算优惠后得到最终实付金额
         if (userId != null && deviceId != null) {
             Order order = new Order();
+            order.setOrderNo(OrderUtils.getOrderNo());
             order.setActivityId(activityId);                          // 开门会话ID
             order.setUserId(Long.parseLong(userId));                  // 用户ID
             order.setDeviceId(deviceId);                              // 设备ID
@@ -390,7 +392,7 @@ public class OrderServiceImpl extends ServiceImpl<OrderMapper, Order> implements
             var statusLabel = EntityLabelUtils.getStatusLabel("order", order.getStatus());
             order.setStatusLabel(statusLabel.getLabel());
         }
-        
+
         // 如果 payType 为空但 payChannel 有值,从 payChannel 获取描述
         if (order.getPayType() == null || order.getPayType().isEmpty()) {
             if (order.getPayChannel() != null && !order.getPayChannel().isEmpty()) {
@@ -404,7 +406,7 @@ public class OrderServiceImpl extends ServiceImpl<OrderMapper, Order> implements
                 order.setPayType("免费");
             }
         }
-        
+
         // 根据 deviceId 查询设备信息,获取门店名称
         if (order.getDeviceId() != null && !order.getDeviceId().isEmpty()) {
             try {
@@ -432,9 +434,9 @@ public class OrderServiceImpl extends ServiceImpl<OrderMapper, Order> implements
     public Order createOrderWithPayScore(String activityId, String deviceId, String userId,
                                           String skuListStr, String resourceInfoStr, BigDecimal confidence,
                                           String openId) {
-        Order order = createOrderFromRecognition(activityId, deviceId, userId, 
+        Order order = createOrderFromRecognition(activityId, deviceId, userId,
                 skuListStr, resourceInfoStr, confidence);
-        
+
         if (order == null) {
             return null;
         }
@@ -446,9 +448,9 @@ public class OrderServiceImpl extends ServiceImpl<OrderMapper, Order> implements
 
         try {
             PayScoreResult result = payScoreService.createPayScoreOrder(order.getId(), openId);
-            
+
             if (result.isSuccess()) {
-                log.info("[支付分集成] 支付分服务订单创建成功 - orderId: {}, outOrderNo: {}", 
+                log.info("[支付分集成] 支付分服务订单创建成功 - orderId: {}, outOrderNo: {}",
                         order.getId(), result.getOutOrderNo());
                 order.setPayScoreOrderId(result.getOutOrderNo());
                 order.setPayScoreState(result.getState());
@@ -456,7 +458,7 @@ public class OrderServiceImpl extends ServiceImpl<OrderMapper, Order> implements
                 order.setPayType("微信支付分");
                 this.updateById(order);
             } else {
-                log.warn("[支付分集成] 支付分服务订单创建失败 - orderId: {}, errorCode: {}, errorMsg: {}", 
+                log.warn("[支付分集成] 支付分服务订单创建失败 - orderId: {}, errorCode: {}, errorMsg: {}",
                         order.getId(), result.getErrorCode(), result.getErrorMsg());
             }
         } catch (Exception e) {
@@ -468,17 +470,17 @@ public class OrderServiceImpl extends ServiceImpl<OrderMapper, Order> implements
 
     /**
      * 使用支付分完结订单(扣费)
-     * 
+     *
      * 业务流程:
      * 1. 验证订单是否存在
      * 2. 检查是否创建了支付分服务订单
      * 3. 调用微信支付分完结接口进行扣费
      * 4. 扣费成功后触发邀请激活逻辑(异步)
-     * 
+     *
      * 注意:
      * - 如果订单未使用支付分,直接更新订单状态
      * - 优惠金额已在设备端计算,totalAmount为实付金额
-     * 
+     *
      * @param orderId 订单ID
      * @param totalAmount 订单总金额(设备端已计算优惠后的实付金额)
      * @return 是否完结成功