|
|
@@ -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
|
|
|
*
|