lishiqiang 2 veckor sedan
förälder
incheckning
7c8476746d

+ 1 - 0
ship-module-trade/ship-module-trade-api/src/main/java/com/yc/ship/module/trade/enums/TradeOrderOperateTypeEnum.java

@@ -40,6 +40,7 @@ public enum TradeOrderOperateTypeEnum {
     SUPP_TICKET_REFUND(26, "补票退款,操作人:{operPerson}, 金额:{amount}"),
     CANCEL_REFUND(27, "取消退款,退款ID:{refundId}"),
     GUIDE_REFUND(28, "导游代退,退款金额{refundAmount},原订单支付金额{payAmount},变更为{newPayAmount}"),
+    ORDER_MODIFY(29, "修改订单,结果:{result}"),
     ;
 
     /**

+ 3 - 0
ship-module-trade/ship-module-trade-biz/src/main/java/com/yc/ship/module/trade/controller/admin/order/vo/order/ShipTradeOrderCreateReqVO.java

@@ -26,6 +26,9 @@ public class ShipTradeOrderCreateReqVO implements Serializable {
     @Schema(description = "分销商ID", example = "MT1231312")
     private Long distributorId;
 
+    @Schema(description = "订单ID")
+    private Long orderId;
+
     @Schema(description = "第三方订单号,分销商下单", example = "MT1231312")
     @Hidden
     private String externalOrderNo;

+ 2 - 0
ship-module-trade/ship-module-trade-biz/src/main/java/com/yc/ship/module/trade/controller/admin/order/vo/order/TradeVistorReqVO.java

@@ -6,6 +6,8 @@ import lombok.Data;
 
 @Data
 public class TradeVistorReqVO {
+    @Schema(description = "明细ID")
+    private String id;
 
     @Schema(description = "明细ID")
     private Long orderId;

+ 1 - 0
ship-module-trade/ship-module-trade-biz/src/main/java/com/yc/ship/module/trade/service/order/TradeOrderRepositoryService.java

@@ -40,6 +40,7 @@ public interface TradeOrderRepositoryService {
      * @return
      */
     void saveOrder(TradeOrderBO tradeOrderBO);
+    void modifyOrder(TradeOrderBO tradeOrderBO);
 
     /**
      * 更新订单状态

+ 1 - 0
ship-module-trade/ship-module-trade-biz/src/main/java/com/yc/ship/module/trade/service/order/TradeOrderService.java

@@ -46,6 +46,7 @@ public interface TradeOrderService {
     CommonResult<TradeOrderRespDTO> createOrder(TradeOrderCreateReqDTO orderCreateReqDTO);
 
     CommonResult<TradeOrderRespDTO> createShipOrder(ShipTradeOrderCreateReqVO orderCreateReqDTO);
+    CommonResult<TradeOrderRespDTO> modifyShipOrder(ShipTradeOrderCreateReqVO orderCreateReqDTO);
 
     /**
      * 游客补录

+ 34 - 0
ship-module-trade/ship-module-trade-biz/src/main/java/com/yc/ship/module/trade/service/order/impl/TradeOrderRepositoryServiceImpl.java

@@ -144,6 +144,40 @@ public class TradeOrderRepositoryServiceImpl implements TradeOrderRepositoryServ
         }
     }
 
+    @Override
+    @Transactional(rollbackFor = Exception.class)
+    public void modifyOrder(TradeOrderBO tradeOrderBO) {
+        try {
+
+            tradeOrderMapper.insert(tradeOrderBO.getTradeOrderDO());
+            orderJzMapper.insert(tradeOrderBO.getOrderJzDO());
+            tradeOrderUserMapper.insert(tradeOrderBO.getTradeOrderUserDO());
+
+            if(tradeOrderBO.getTradeOrderDeliveryDO() !=null) {
+                tradeOrderDeliveryMapper.insert(tradeOrderBO.getTradeOrderDeliveryDO());
+            }
+
+            tradeOrderBO.getTradeOrderDetailBOList().forEach(tradeOrderDetailBO -> {
+
+                tradeDetailMapper.insertBatch(tradeOrderDetailBO.getTradeDetailDOList());
+                tradeDetailBaseMapper.insertBatch(tradeOrderDetailBO.getTradeDetailBaseDOList());
+                tradeVisitorMapper.insertBatch(tradeOrderDetailBO.getTradeVisitorDOList());
+
+                if(tradeOrderDetailBO.getTradeOrderHotelDO() !=null) {
+                    tradeOrderHotelMapper.insert(tradeOrderDetailBO.getTradeOrderHotelDO());
+                }
+                if(CollUtil.isNotEmpty(tradeOrderDetailBO.getTradeDetailPriceDOList())){
+                    tradeDetailPriceMapper.insertBatch(tradeOrderDetailBO.getTradeDetailPriceDOList());
+                }
+            });
+
+        }catch (Exception e){
+            log.error("订单保存异常",e);
+            //极端情况下会出现,上层会回滚库存
+            throw exception(ORDER_SAVE_EXCEPTION);
+        }
+    }
+
     @Override
     public void updateOrderStatus(TradeOrderDO tradeOrderDO) {
         //订单状态

+ 35 - 1
ship-module-trade/ship-module-trade-biz/src/main/java/com/yc/ship/module/trade/service/order/impl/TradeOrderServiceImpl.java

@@ -217,6 +217,36 @@ public class TradeOrderServiceImpl implements TradeOrderService {
         }
     }
 
+    @Override
+    @TradeOrderLog(operateType = TradeOrderOperateTypeEnum.ORDER_MODIFY)
+    public CommonResult<TradeOrderRespDTO> modifyShipOrder(ShipTradeOrderCreateReqVO shipTradeOrderCreateReqVO) {
+        TradeOrderBO tradeOrderBO = null;
+        try {
+            //1.构建订单
+            tradeOrderBO = buildShipCreateOrder(shipTradeOrderCreateReqVO);
+            //2.下单前处理
+            beforeOrderCreate(tradeOrderBO);
+            //3.保存订单
+            tradeOrderRepositoryService.modifyOrder(tradeOrderBO);
+            //4.2 供应商下单成功回调
+            tradeSupplierCallbackService.afterAllOrderCreate(tradeOrderBO.getTradeOrderDO());
+            //5.下单后处理
+            afterOrderCreate(tradeOrderBO);
+            TradeOrderRespDTO tradeOrderRespDTO = new TradeOrderRespDTO().setOrderId(tradeOrderBO.getTradeOrderDO().getId()).setOrderNo(tradeOrderBO.getTradeOrderDO().getOrderNo())
+                    .setPayAmount(tradeOrderBO.getTradeOrderDO().getPayAmount()).setOriginPayAmount(tradeOrderBO.getExtraInfo().getOriginPayAmount())
+                    .setDiscountAmount(tradeOrderBO.getExtraInfo().getDiscountAmount()).setMarketingId(tradeOrderBO.getExtraInfo().getMarketingCouponCodeId())
+                    .setMarketingName(tradeOrderBO.getExtraInfo().getMarketingName());
+            return CommonResult.success(tradeOrderRespDTO);
+        } catch (ServiceException e) {
+            ExceptionUtils.log(log, "下单失败:", e);
+            handleAfterOrderCreateFail(e.getCode(), tradeOrderBO);
+            return CommonResult.error(e);
+        } catch (Exception e) {
+            log.error("下单失败:", e);
+            return CommonResult.error(ORDER_CREATE_FAIL);
+        }
+    }
+
     @Override
     @Deprecated
     public CommonResult<?> bindVisitor(TradeBindVisitorReqDTO tradeBindVisitorReqDTO) {
@@ -752,7 +782,11 @@ public class TradeOrderServiceImpl implements TradeOrderService {
                 tradeOrderDO.setVisitorType(0);
             }
         }
-        tradeOrderDO.setId(IdWorker.getId());
+        if(orderCreateReqDTO.getOrderId()!=null) {
+            tradeOrderDO.setId(orderCreateReqDTO.getOrderId());
+        }else{
+            tradeOrderDO.setId(IdWorker.getId());
+        }
         //旅行社编号 +  航次编号 + 3位 旅行社当天订单流水号
         if(org.apache.commons.lang3.StringUtils.isNotEmpty(orderCreateReqDTO.getOrderNo())){
             tradeOrderDO.setOrderNo(orderCreateReqDTO.getOrderNo());

+ 12 - 8
ship-module-trade/ship-module-trade-biz/src/main/java/com/yc/ship/module/trade/service/otc/impl/OtcTradeOrderServiceImpl.java

@@ -287,7 +287,7 @@ public class OtcTradeOrderServiceImpl implements OtcTradeOrderService {
         orderProperty.setSellMethod(sellMethodEnum.getType());
         setShipOrderPropertyFromLoginUser(loginUser,orderProperty,sellMethodEnum);
         otcTradeOrderCreateReqVO.setOrderProperty(orderProperty);
-        return  tradeOrderService.createShipOrder(otcTradeOrderCreateReqVO);
+        return  tradeOrderService.modifyShipOrder(otcTradeOrderCreateReqVO);
     }
 
 
@@ -2277,7 +2277,7 @@ public class OtcTradeOrderServiceImpl implements OtcTradeOrderService {
             if(orderDetail1.getProductType()==0||orderDetail1.getProductType()==1) {
                 List<ShipTradeOrderCreateReqVO.Visitor> visitorList1 = new ArrayList<>();
                 for (String touristId : tradeSpuReqVO.getTourist()) {
-                    TradeVistorReqVO tradeVistorReqVO = createVO.getTourist().stream().filter(v -> v.getOrderId().equals(touristId)).findFirst().get();
+                    TradeVistorReqVO tradeVistorReqVO = createVO.getTourist().stream().filter(v -> v.getId().equals(touristId)).findFirst().get();
                     if(tradeVistorReqVO==null){
                         continue;
                     }
@@ -2415,13 +2415,19 @@ public class OtcTradeOrderServiceImpl implements OtcTradeOrderService {
         if(storeInfo==null) {
             return CommonResult.error(ORDER_STORE_NONE);
         }
-        VoyageRespDTO voyage = productApi.getVoyage(createVO.getVoyageId());
-        String date = DateUtils.format(new Date(),"yyyyMMddmmss");
-        String orderNo = distributorDO.getCode()+"-"+voyage.getCode()+"-"+date;
+        Long orderId = createVO.getOrderId();
+        TradeOrderDO tradeOrderDO = tradeOrderMapper.selectById(orderId);
+        if(tradeOrderDO==null) {
+            return CommonResult.error(ORDER_NOT_EXIST);
+        }
+//        VoyageRespDTO voyage = productApi.getVoyage(createVO.getVoyageId());
+//        String date = DateUtils.format(new Date(),"yyyyMMddmmss");
+        String orderNo = tradeOrderDO.getOrderNo();
         List<TradeOrderCountryReqVO> countryData = createVO.getCountryData();
         ShipTradeOrderCreateReqVO shipTradeOrderCreateReqVO = BeanUtils.toBean(createVO, ShipTradeOrderCreateReqVO.class);
         shipTradeOrderCreateReqVO.setDistributorId(loginUser.getDistributorId());
         shipTradeOrderCreateReqVO.setGroupNo(createVO.getGroupNo());
+        shipTradeOrderCreateReqVO.setOrderId(orderId);
         shipTradeOrderCreateReqVO.setAmount(createVO.getSummary().getOrderMoney());
         shipTradeOrderCreateReqVO.setPayAmount(createVO.getSummary().getOrderMoney());
         shipTradeOrderCreateReqVO.setDicountId(createVO.getSummary().getDicountId());
@@ -2537,9 +2543,7 @@ public class OtcTradeOrderServiceImpl implements OtcTradeOrderService {
 
         shipTradeOrderCreateReqVO.setItemlList(Arrays.asList(orderItem));
 
-//        BigDecimal totalAmount = spuMoney.add(createVO.getSummary().getOrderMoney());
         shipTradeOrderCreateReqVO.setSpuAmount(spuMoney);
-//        shipTradeOrderCreateReqVO.setPayAmount(totalAmount);
 
         CommonResult<TradeOrderRespDTO> result = doShipModifyOrder(loginUser,shipTradeOrderCreateReqVO,SellMethodEnum.WINDOW);
         if (result.isError()) {
@@ -2547,7 +2551,7 @@ public class OtcTradeOrderServiceImpl implements OtcTradeOrderService {
         }
         TradeOrderTotalVO summary = createVO.getSummary();
         TradeOrderTotalDO tradeOrderTotalDO = BeanUtils.toBean(summary, TradeOrderTotalDO.class);
-        Long orderId  = result.getCheckedData().getOrderId();
+//        Long orderId  = result.getCheckedData().getOrderId();
         tradeOrderTotalDO.setOrderId(orderId);
         tradeOrderTotalMapper.insertOrUpdate(tradeOrderTotalDO);