浏览代码

取消状态订单关闭

yuhongqi 14 小时之前
父节点
当前提交
50eed55c01
共有 1 个文件被更改,包括 161 次插入5 次删除
  1. 161 5
      fs-service/src/main/java/com/fs/erp/service/impl/JSTErpOrderServiceImpl.java

+ 161 - 5
fs-service/src/main/java/com/fs/erp/service/impl/JSTErpOrderServiceImpl.java

@@ -555,8 +555,6 @@ public class JSTErpOrderServiceImpl implements IErpOrderService {
             List<ErpOrderQuery> erpOrders = query.getOrders().stream()
                     .map(this::convertToErpOrderQueryScrm)
                     .collect(Collectors.toList());
-            if ("Cancelled".equals(query.getOrders().get(0).getStatus()))
-                fsStoreOrderScrmService.cancelOrderByCode(query.getOrders().get(0).getOuterPayId());
             response.setOrders(erpOrders);
         } else {
             response.setOrders(Collections.emptyList());
@@ -603,9 +601,9 @@ public class JSTErpOrderServiceImpl implements IErpOrderService {
             List<ErpOrderQuery> erpOrders = query.getOrders().stream()
                     .map(this::convertToErpOrderQueryLive)
                     .collect(Collectors.toList());
-            if ("Cancelled".equals(query.getOrders().get(0).getStatus())) {
-                liveOrderMapper.cancelOrderByCode(query.getOrders().get(0).getOuterPayId());
-            }
+//            if ("Split".equals(query.getOrders().get(0).getStatus())) {
+//                this.splitLiveOrder(query.getOrders().get(0));
+//            }
             response.setOrders(erpOrders);
         } else {
             response.setOrders(Collections.emptyList());
@@ -614,6 +612,164 @@ public class JSTErpOrderServiceImpl implements IErpOrderService {
         return response;
     }
 
+    private void splitLiveOrder(OrderQueryResponseDTO.Order order) {
+        // ① 首先查询原来的订单
+        LiveOrder liveOrder = liveOrderMapper.selectLiveOrderByOrderCode(order.getSoId());
+        if (liveOrder == null) {
+            log.error("直播拆分订单:未查询到数据,{}", order.getSoId());
+            return;
+        }
+
+        try {
+            // ② 重新组装请求,使用 OrderQueryRequestDTO 查询拆分订单
+            OrderQueryRequestDTO requestDTO = new OrderQueryRequestDTO();
+            requestDTO.setOrderItemFlds(Arrays.asList("status"));
+            requestDTO.setSoIds(Collections.singletonList(order.getSoId()));
+
+            // 调用ERP服务查询拆分订单
+            OrderQueryResponseDTO query = jstErpHttpService.query(requestDTO);
+
+            if (query == null || query.getOrders() == null || query.getOrders().isEmpty()) {
+                log.error("直播拆分订单:查询拆分订单失败, orderCode={}", order.getSoId());
+                return;
+            }
+
+            // ③ 把原来的订单状态修改为 6(被拆分)
+            liveOrder.setStatus(6);
+            liveOrderMapper.updateLiveOrder(liveOrder);
+            log.info("直播拆分订单:原订单状态已更新为被拆分, orderCode={}, orderId={}", order.getSoId(), liveOrder.getOrderId());
+
+            // ④ 查询出来的订单里面,除了原来的订单,将查询出来的订单新增到数据库里面
+            for (OrderQueryResponseDTO.Order splitOrder : query.getOrders()) {
+                // 跳过原来的订单(状态为 Split 的订单)
+                if ("Split".equals(splitOrder.getStatus())) {
+                    continue;
+                }
+
+                // 检查是否已经存在该拆分订单
+                LiveOrder existingOrder = liveOrderMapper.selectLiveOrderByOrderCode(splitOrder.getSoId());
+                if (existingOrder != null) {
+                    log.info("直播拆分订单:拆分订单已存在,跳过, orderCode={}", splitOrder.getSoId());
+                    continue;
+                }
+
+                // 创建新的拆分订单
+                LiveOrder newOrder = new LiveOrder();
+                // 复制原订单的基本信息
+                newOrder.setLiveId(liveOrder.getLiveId());
+                newOrder.setStoreId(liveOrder.getStoreId());
+                newOrder.setOrderCode(splitOrder.getSoId()); // 保存订单ID(soId)
+                newOrder.setUserId(liveOrder.getUserId()); // buyerId -> userId
+                newOrder.setUserName(liveOrder.getUserName());
+                newOrder.setRealName(liveOrder.getRealName());
+                newOrder.setUserPhone(liveOrder.getUserPhone());
+                newOrder.setUserAddress(liveOrder.getUserAddress());
+                newOrder.setCompanyId(liveOrder.getCompanyId());
+                newOrder.setCompanyUserId(liveOrder.getCompanyUserId());
+
+                // 设置支付金额
+                if (splitOrder.getPayAmount() != null) {
+                    newOrder.setPayMoney(splitOrder.getPayAmount());
+                    newOrder.setPayPrice(splitOrder.getPayAmount());
+                }
+
+                // 根据订单状态枚举设置状态
+                ErpQueryOrderStatusEnum statusEnum = ErpQueryOrderStatusEnum.getByCode(splitOrder.getStatus());
+                if (statusEnum != null) {
+                    // 根据状态类型设置订单状态
+                    // WaitPay -> 1 (待支付)
+                    // Sent -> 3 (待收货)
+                    // Cancelled -> 0 (已取消)
+                    // 其他状态根据业务需求设置
+                    if ("WaitPay".equals(splitOrder.getStatus())) {
+                        newOrder.setStatus(1); // 待支付
+                    } else if ("Sent".equals(splitOrder.getStatus())) {
+                        newOrder.setStatus(3); // 待收货
+                    } else if ("Cancelled".equals(splitOrder.getStatus())) {
+//                        newOrder.setStatus(0); // 已取消
+                    } else {
+                        newOrder.setStatus(2); // 默认待发货
+                    }
+                } else {
+                    newOrder.setStatus(2); // 默认待发货
+                }
+
+                // 设置物流信息
+                if (StringUtils.isNotEmpty(splitOrder.getLogisticsCompany())) {
+                    newOrder.setDeliveryName(splitOrder.getLogisticsCompany());
+                }
+                if (StringUtils.isNotEmpty(splitOrder.getLId())) {
+                    newOrder.setDeliverySn(splitOrder.getLId());
+                }
+                if (StringUtils.isNotEmpty(splitOrder.getLcId())) {
+                    newOrder.setDeliveryCode(splitOrder.getLcId());
+                }
+
+                // 设置发货时间
+                if (StringUtils.isNotEmpty(splitOrder.getSendDate())) {
+                    try {
+                        SimpleDateFormat formatter = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
+                        Date sendDate = formatter.parse(splitOrder.getSendDate());
+                        newOrder.setDeliverySendTime(sendDate);
+                        newOrder.setDeliveryTime(splitOrder.getSendDate());
+                    } catch (Exception e) {
+                        log.error("解析发货时间失败: {}", splitOrder.getSendDate(), e);
+                    }
+                }
+
+                // 设置支付时间
+                if (StringUtils.isNotEmpty(splitOrder.getPayDate())) {
+                    try {
+                        SimpleDateFormat formatter = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
+                        Date payDate = formatter.parse(splitOrder.getPayDate());
+                        newOrder.setPayTime(payDate.toInstant().atZone(java.time.ZoneId.systemDefault()).toLocalDateTime());
+                    } catch (Exception e) {
+                        log.error("解析支付时间失败: {}", splitOrder.getPayDate(), e);
+                    }
+                }
+
+                // 设置扩展订单ID
+                newOrder.setExtendOrderId(String.valueOf(splitOrder.getOId()));
+
+                // 计算订单总数量
+                if (splitOrder.getItems() != null && !splitOrder.getItems().isEmpty()) {
+                    int totalQty = splitOrder.getItems().stream()
+                            .mapToInt(OrderQueryResponseDTO.OrderItem::getQty)
+                            .sum();
+                    newOrder.setTotalNum(String.valueOf(totalQty));
+                }
+
+                // 设置订单总价
+                if (splitOrder.getAmount() != null) {
+                    newOrder.setTotalPrice(splitOrder.getAmount());
+                }
+
+                // 设置创建时间和更新时间
+                newOrder.setCreateTime(new Date());
+                newOrder.setUpdateTime(new Date());
+
+                // 插入订单
+                liveOrderMapper.insertLiveOrder(newOrder);
+
+                // 保存订单项(SKU)
+                if (splitOrder.getItems() != null && !splitOrder.getItems().isEmpty()) {
+                    for (OrderQueryResponseDTO.OrderItem item : splitOrder.getItems()) {
+                        LiveOrderItem orderItem = new LiveOrderItem();
+                        orderItem.setOrderId(newOrder.getOrderId());
+                        orderItem.setOrderCode(splitOrder.getSoId());
+                        orderItem.setNum(item.getQty() != null ? item.getQty().longValue() : 0L);
+                        // 可以根据需要设置其他字段,如 productId, goodsId 等
+                        // 这里需要根据业务逻辑从 item 中获取或从原订单项中复制
+                        liveOrderItemMapper.insertLiveOrderItem(orderItem);
+                    }
+                }
+            }
+
+        } catch (Exception e) {
+            log.error("直播拆分订单处理异常, orderCode={}", order.getSoId(), e);
+        }
+    }
+
     /**
      * 将OrderQueryResponseDTO.Order转换为ErpOrderQuery
      *