Преглед на файлове

Merge branch 'main' of http://117.174.100.38:3000/lishiqiang/ship-ota-server into main1

luofeiyun преди 1 месец
родител
ревизия
51f700af2b

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

@@ -40,7 +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}"),
+    ORDER_MODIFY(29, "修改订单,修改记录:{content},结果:{result}"),
     ORDER_AUDIT(30, "订单审核,结果:{result}"),
     ;
 

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

@@ -2,8 +2,11 @@ package com.yc.ship.module.trade.controller.admin.order.vo.order;
 
 import com.yc.ship.framework.common.validation.IntEnum;
 import com.yc.ship.framework.common.validation.Mobile;
-import com.yc.ship.module.trade.dal.dataobject.order.TradeOrderBindDO;
+import com.yc.ship.module.trade.dal.dataobject.order.*;
+import com.yc.ship.module.trade.dal.dataobject.orderjz.OrderJzDO;
 import com.yc.ship.module.trade.enums.CredentialTypeEnum;
+import com.yc.ship.module.trade.service.order.bo.TradeOrderBO;
+import com.yc.ship.module.trade.service.order.bo.TradeOrderDetailBO;
 import io.swagger.v3.oas.annotations.Hidden;
 import io.swagger.v3.oas.annotations.media.Schema;
 import lombok.Data;
@@ -163,6 +166,9 @@ public class ShipTradeOrderCreateReqVO implements Serializable {
     @Schema(description = "订单审核信息")
     private TradeOrderBindDO tradeOrderBindDO;
 
+    @Schema(description = "修改内容")
+    private String changedFields1;
+
 
     @Schema(description = "订单项")
     @Data
@@ -419,4 +425,8 @@ public class ShipTradeOrderCreateReqVO implements Serializable {
         private Long linkId;
     }
 
+
+    private TradeOrderDO oldtradeOrderDO;
+    private TradeOrderTotalDO oldtradeOrderTotalDO;
+
 }

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

@@ -17,6 +17,9 @@ public class TradeOrderOtcCreateVO {
     @Schema(description = "订单ID")
     private Long orderId;
 
+    @Schema(description = "订单号")
+    private String orderNo;
+
     @Schema(description = "客户名称")
     private String customerName;
 

+ 15 - 0
ship-module-trade/ship-module-trade-biz/src/main/java/com/yc/ship/module/trade/dal/dataobject/order/TradeOrderDO.java

@@ -6,6 +6,7 @@ import com.yc.ship.framework.tenant.core.db.TenantBaseDO;
 import com.yc.ship.module.trade.enums.SellMethodEnum;
 import com.yc.ship.module.trade.enums.TradeOrderStatusEnum;
 import com.yc.ship.module.trade.enums.invoice.InvoiceStatusEnum;
+import com.yc.ship.module.trade.framework.annotation.ForUpdate;
 import io.swagger.v3.oas.annotations.media.Schema;
 import lombok.*;
 
@@ -57,10 +58,12 @@ public class TradeOrderDO extends TenantBaseDO {
     /**
      * 游客类型
      */
+    @ForUpdate(fieldName = "游客类型")
     private Integer visitorType;
     /**
      * 游玩日期
      */
+    @ForUpdate(fieldName = "游玩日期")
     private Date travelDate;
     /**
      * 销售方式
@@ -94,15 +97,18 @@ public class TradeOrderDO extends TenantBaseDO {
     /**
      * 订单金额
      */
+    @ForUpdate(fieldName = "订单金额")
     private BigDecimal amount;
     /**
      * 支付金额
      */
+    @ForUpdate(fieldName = "支付金额")
     private BigDecimal payAmount;
     /**
      * 订单状态
      * 关联 {@link TradeOrderStatusEnum}
      */
+    @ForUpdate(fieldName = "订单状态")
     private Integer orderStatus;
     /**
      * 支付时间
@@ -120,12 +126,16 @@ public class TradeOrderDO extends TenantBaseDO {
     /**
      * 备注
      */
+    @ForUpdate(fieldName = "备注")
     private String remark;
 
+    @ForUpdate(fieldName = "联系人")
     private String linkMan;
 
+    @ForUpdate(fieldName = "联系人电话")
     private String linkMobile;
 
+    @ForUpdate(fieldName = "联系人邮箱")
     private String linkEmail;
 
     /**
@@ -232,6 +242,7 @@ public class TradeOrderDO extends TenantBaseDO {
     /**
      * 团号
      */
+    @ForUpdate(fieldName = "团号")
     private String groupNo;
 
     /**
@@ -269,11 +280,13 @@ public class TradeOrderDO extends TenantBaseDO {
     /**
      * 航次ID
      */
+    @ForUpdate(fieldName = "航次")
     private Long voyageId;
 
     /**
      * 游轮ID
      */
+    @ForUpdate(fieldName = "游轮")
     private Long shipId;
     /**
      * 折扣ID
@@ -284,10 +297,12 @@ public class TradeOrderDO extends TenantBaseDO {
     /**
      * 币种 字典trade_order_currency
      */
+    @ForUpdate(fieldName = "币种")
     private String currency;
 
     /**
      * 客户名称
      */
+    @ForUpdate(fieldName = "客户名称")
     private String customerName;
 }

+ 15 - 0
ship-module-trade/ship-module-trade-biz/src/main/java/com/yc/ship/module/trade/framework/annotation/ForUpdate.java

@@ -0,0 +1,15 @@
+package com.yc.ship.module.trade.framework.annotation;
+
+import java.lang.annotation.*;
+
+/**
+ * @author :qsl
+ * @description:TODO
+ * @date  :2026/1/12 16:04
+ **/
+@Target(ElementType.FIELD)
+@Retention(RetentionPolicy.RUNTIME)
+@Documented
+public @interface ForUpdate {
+    String fieldName() default "";
+}

+ 3 - 2
ship-module-trade/ship-module-trade-biz/src/main/java/com/yc/ship/module/trade/service/order/bo/TradeOrderBO.java

@@ -16,6 +16,7 @@ import java.util.List;
 /**
  * @Description :订单BO
  * @Date :2025/6/6 21:45
+ *
  * @author qsl
  */
 @Data
@@ -23,7 +24,7 @@ public class TradeOrderBO {
 
     private TradeOrderDO tradeOrderDO;
     private TradeOrderUserDO tradeOrderUserDO;
-    private List<TradeOrderDetailBO>  tradeOrderDetailBOList;
+    private List<TradeOrderDetailBO> tradeOrderDetailBOList;
     private TradeOrderDeliveryDO tradeOrderDeliveryDO;
     private ExtraInfo extraInfo;
     private OrderJzDO orderJzDO;
@@ -33,7 +34,7 @@ public class TradeOrderBO {
     private Date updateTime;
 
     @Data
-    public static class ExtraInfo{
+    public static class ExtraInfo {
         @Schema(description = "个人分销ID", example = "123")
         private Long personalDistributorId;
         @Schema(description = "优惠券码ID", example = "123")

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

@@ -50,6 +50,7 @@ import com.yc.ship.module.trade.service.supplier.TradeSupplierService;
 import com.yc.ship.module.trade.service.supplier.bo.TradeSupplierOrderRespBO;
 import com.yc.ship.module.trade.service.thirdsystem.ThirdGateSystemService;
 import com.yc.ship.module.trade.utils.AgencyAuthUtils;
+import com.yc.ship.module.trade.utils.BeanUtils;
 import com.yc.ship.module.trade.utils.TradeUUCodeUtils;
 import lombok.extern.slf4j.Slf4j;
 import org.springframework.stereotype.Service;
@@ -201,11 +202,14 @@ public class TradeOrderServiceImpl implements TradeOrderService {
             beforeOrderCreate(tradeOrderBO);
             //3.保存订单
             tradeOrderBO.setUpdateTime(shipTradeOrderCreateReqVO.getUpdateTime());
+
+            String changedFields = BeanUtils.getChangedFields(shipTradeOrderCreateReqVO.getOldtradeOrderDO(), tradeOrderBO.getTradeOrderDO());
+            System.err.println("changedFields=" + changedFields + shipTradeOrderCreateReqVO.getChangedFields1());
             tradeOrderRepositoryService.modifyOrder(tradeOrderBO);
             //4 下单成功回调
             tradeSupplierCallbackService.afterAllOrderCreate(tradeOrderBO.getTradeOrderDO());
             //5.下单后处理
-            afterOrderCreate(tradeOrderBO);
+            afterOrderModify(tradeOrderBO, changedFields + shipTradeOrderCreateReqVO.getChangedFields1());
             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())
@@ -524,11 +528,6 @@ public class TradeOrderServiceImpl implements TradeOrderService {
             }
         }
         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());
@@ -961,9 +960,6 @@ public class TradeOrderServiceImpl implements TradeOrderService {
 
     /**
      * 验证订单 产品规则验证
-     *
-     * @param tradeOrderDO
-     * @param productSpuRespDTO
      */
     private void validateOrder(TradeOrderCreateReqDTO orderCreateReqDTO, TradeOrderDO tradeOrderDO, TradeOrderCreateReqDTO.OrderItem orderItem, ProductSpuRespDTO productSpuRespDTO) {
         Asserts.isTrue(productSpuRespDTO != null, "产品不存在,{}", orderItem.getProductId());
@@ -976,19 +972,14 @@ public class TradeOrderServiceImpl implements TradeOrderService {
                 //获取产品sku价格
                 ProductSkuRespDTO productSku = getProductSku(orderDetail.getSpecType(), productSpuRespDTO);
                 //如果是小程序酒店产品,单独判断
-                BigDecimal packProductPrice;
                 BigDecimal price;
                 if (ObjectUtils.equalsAny(tradeOrderDO.getSellMethod(), SellMethodEnum.MINI_APP.getType())) {
                     //获取住宿期间的日历价格
                     if (ObjectUtil.equal(productSpuRespDTO.getProductType(), ProductTypeEnum.Hotel.getValue())) {
                         //暂时不验证酒店产品
                         break;
-                    } else {
-//                        packProductPrice = getPackProductPrice(orderItem.getPackProductId(), Long.parseLong(orderItem.getProductId()), orderDetail.getSpecType());
-                        packProductPrice = null;
                     }
-
-                    price = packProductPrice == null ? (productSku == null ? BigDecimal.ZERO : productSku.getSalePrice()) : packProductPrice;
+                    price = productSku == null ? BigDecimal.ZERO : productSku.getSalePrice();
                 } else {
                     price = productSku == null ? BigDecimal.ZERO : productSku.getSalePrice();
                 }
@@ -1083,33 +1074,22 @@ public class TradeOrderServiceImpl implements TradeOrderService {
         tradeOrderHandlers.forEach(handler -> handler.afterOrderCreate(tradeOrderBO));
         tradePublishUtils.publishOrderCreateSuccessMsg(tradeOrderBO.getTradeOrderDO().getId().toString());
         //支付倒计时--不超时,有预订单
-        TradeOrderLogUtils.setOrderInfo(tradeOrderBO.getTradeOrderDO().getId(), null, tradeOrderBO.getTradeOrderDO().getOrderStatus(), TradeOrderLogUtils.append("result", "成功"));
+        Map<String, Object> append = TradeOrderLogUtils.append("result", "成功");
+        append.put("content", "");
+        TradeOrderLogUtils.setOrderInfo(tradeOrderBO.getTradeOrderDO().getId(), null, tradeOrderBO.getTradeOrderDO().getOrderStatus(), append);
     }
 
-
-    public void afterOrderDispatch(List<TradeOrderDispatchDO> dispatchList) {
-        List<TradeOrderDO> tradeOrderDOList = new ArrayList<>();
-        for (TradeOrderDispatchDO tradeOrderDispatchDO : dispatchList) {
-            //不跟基础产品关联,只要有相同项目的计调了就算计调了
-            Map<String, Long> dispatchCountMap = tradeOrderRepositoryService.getDispatchCount(tradeOrderDispatchDO.getOrderId());
-            Long totalCount = dispatchCountMap.get("totalCount");
-            Long dispatchCount = dispatchCountMap.get("dispatchCount");
-            TradeOrderDO tradeOrderDO = new TradeOrderDO();
-            tradeOrderDO.setId(tradeOrderDispatchDO.getOrderId());
-            if (totalCount == 0) {
-                continue;
-            }
-            if (ObjectUtil.equal(totalCount, dispatchCount)) {
-                //全部出票
-                tradeOrderDO.setDispatchStatus(ORDER_DISPATCH_STATUS_FINISH);
-            } else {
-                tradeOrderDO.setDispatchStatus(ORDER_DISPATCH_STATUS_PART);
-            }
-            tradeOrderDOList.add(tradeOrderDO);
-        }
-        tradeOrderRepositoryService.updateOrderBatch(tradeOrderDOList);
+    private void afterOrderModify(TradeOrderBO tradeOrderBO, String content) {
+        //执行下单后处理器
+        tradeOrderHandlers.forEach(handler -> handler.afterOrderCreate(tradeOrderBO));
+        tradePublishUtils.publishOrderCreateSuccessMsg(tradeOrderBO.getTradeOrderDO().getId().toString());
+        //支付倒计时--不超时,有预订单
+        Map<String, Object> append = TradeOrderLogUtils.append("result", "订单修改");
+        append.put("content", content);
+        TradeOrderLogUtils.setOrderInfo(tradeOrderBO.getTradeOrderDO().getId(), null, tradeOrderBO.getTradeOrderDO().getOrderStatus(), append);
     }
 
+
     private void batchCheckVisitorBuyLimit(List<TradeDetailDO> tradeDetailDOList, List<TradeOrderCreateReqDTO.OrderDetail> orderDetailList, List<TradeVisitorDO> tradeVisitorDOList, List<TradeDetailBaseDO> tradeDetailBaseDOList, ProductSpuRespDTO productSpuRespDTO, Long excludeOrderId) {
         TradeDetailDO tradeDetailDO = tradeDetailDOList.get(0);
         if (CollUtil.isEmpty(tradeVisitorDOList) || tradeDetailDO.getUseDate() == null) {

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

@@ -7,6 +7,7 @@ import cn.hutool.core.util.ObjectUtil;
 import cn.hutool.core.util.StrUtil;
 import cn.hutool.extra.spring.SpringUtil;
 import com.alibaba.excel.util.DateUtils;
+import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
 import com.baomidou.mybatisplus.core.conditions.update.LambdaUpdateWrapper;
 import com.baomidou.mybatisplus.core.conditions.update.UpdateWrapper;
 import com.baomidou.mybatisplus.core.metadata.IPage;
@@ -57,8 +58,6 @@ import com.yc.ship.module.system.api.dict.dto.DictDataRespDTO;
 import com.yc.ship.module.system.api.user.AdminUserApi;
 import com.yc.ship.module.system.api.user.dto.AdminUserRespDTO;
 import com.yc.ship.module.trade.api.dto.*;
-import com.yc.ship.module.trade.controller.admin.order.vo.check.TradeCheckReqVO;
-import com.yc.ship.module.trade.controller.admin.order.vo.check.TradeCheckRespVO;
 import com.yc.ship.module.trade.controller.admin.order.vo.order.*;
 import com.yc.ship.module.trade.controller.admin.order.vo.otc.PrintRespVO;
 import com.yc.ship.module.trade.controller.admin.order.vo.refund.*;
@@ -2294,12 +2293,21 @@ public class OtcTradeOrderServiceImpl implements OtcTradeOrderService {
             Asserts.isTrue(false, "已过最晚修改时间");
         }
         shipTradeOrderCreateReqVO.setUpdateTime(updateTime);
+        shipTradeOrderCreateReqVO.setOldtradeOrderDO(tradeOrderDO);
+        TradeOrderTotalDO oldTradeOrderTotal = tradeOrderTotalMapper.selectOne(new LambdaQueryWrapper<TradeOrderTotalDO>().eq(TradeOrderTotalDO::getOldOrderId, orderId));
+        shipTradeOrderCreateReqVO.setOldtradeOrderTotalDO(oldTradeOrderTotal);
+        TradeOrderTotalDO tradeOrderTotalDO = BeanUtils.toBean(summary, TradeOrderTotalDO.class);
+
+        String changedFields1 = com.yc.ship.module.trade.utils.BeanUtils.getChangedFields( oldTradeOrderTotal,tradeOrderTotalDO);
+        System.err.println("changedFields1="+changedFields1);
+
+        shipTradeOrderCreateReqVO.setChangedFields1(changedFields1);
         CommonResult<TradeOrderRespDTO> result = doShipModifyOrder(loginUser, shipTradeOrderCreateReqVO);
         if (result.isError()) {
             return CommonResult.error(result);
         }
         Long neworderId = result.getCheckedData().getOrderId();
-        TradeOrderTotalDO tradeOrderTotalDO = BeanUtils.toBean(summary, TradeOrderTotalDO.class);
+
         tradeOrderTotalMapper.update(new LambdaUpdateWrapper<TradeOrderTotalDO>()
                 .set(TradeOrderTotalDO::getDeleted, 1)
                 .set(TradeOrderTotalDO::getUpdateTime, updateTime)
@@ -2313,9 +2321,11 @@ public class OtcTradeOrderServiceImpl implements OtcTradeOrderService {
         //创建订单房型数据
         List<TradeOrderRoomModelDO> list = new ArrayList<>();
         List<TradeOrderRoomModelVO> roomModelList = createVO.getRoomModelList();
-        roomModelList.stream().forEach(item -> {
+        roomModelList.forEach(item -> {
             TradeOrderRoomModelDO tradeOrderRoomModelDO = BeanUtils.toBean(item, TradeOrderRoomModelDO.class);
-            tradeOrderRoomModelDO.setOrderId(IdWorker.getId());
+            tradeOrderRoomModelDO.setId(IdWorker.getId());
+            tradeOrderRoomModelDO.setOrderId(neworderId);
+            tradeOrderRoomModelDO.setOrderNo(orderNo);
             list.add(tradeOrderRoomModelDO);
         });
 

+ 48 - 0
ship-module-trade/ship-module-trade-biz/src/main/java/com/yc/ship/module/trade/utils/BeanUtils.java

@@ -0,0 +1,48 @@
+package com.yc.ship.module.trade.utils;
+
+import com.yc.ship.module.trade.framework.annotation.ForUpdate;
+
+import java.lang.reflect.Field;
+import java.util.Objects;
+
+/**
+ * @author :qsl
+ * &#064;description:TODO
+ * &#064;date  :2026/1/12 16:10
+ **/
+public class BeanUtils {
+
+    /**
+     * 获取变更内容
+     *
+     * @param newBean 更改前的Bean
+     * @param oldBean 更改后的Bean
+     * @param <T>
+     * @return
+     */
+    public static <T> String getChangedFields(T newBean, T oldBean) {
+        Field[] fields = newBean.getClass().getDeclaredFields();
+        StringBuilder builder = new StringBuilder();
+        for (Field field : fields) {
+            field.setAccessible(true);
+            if (field.isAnnotationPresent(ForUpdate.class)) {
+                try {
+                    Object newValue = field.get(newBean);
+                    Object oldValue = field.get(oldBean);
+                    if (!Objects.equals(newValue, oldValue)) {
+                        //获取字段名称
+                        builder.append(field.getAnnotation(ForUpdate.class).fieldName());
+                        builder.append(": 【更改前:");
+                        builder.append(newValue);
+                        builder.append(", 更改后:");
+                        builder.append(oldValue);
+                        builder.append("】\n");
+                    }
+                } catch (Exception e) {
+                    System.out.println(e);
+                }
+            }
+        }
+        return builder.toString();
+    }
+}