Explorar el Código

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

 Conflicts:
	ship-module-trade/ship-module-trade-biz/src/main/java/com/yc/ship/module/trade/controller/admin/order/OtcTradeOrderController.java
	ship-module-trade/ship-module-trade-biz/src/main/java/com/yc/ship/module/trade/service/otc/OtcTradeOrderService.java
luofeiyun hace 6 días
padre
commit
e8fc90ea7b
Se han modificado 29 ficheros con 398 adiciones y 239 borrados
  1. 3 1
      ship-module-trade/ship-module-trade-biz/pom.xml
  2. 3 0
      ship-module-trade/ship-module-trade-biz/src/main/java/com/yc/ship/module/trade/controller/admin/audituser/vo/AuditUserSaveReqVO.java
  3. 30 7
      ship-module-trade/ship-module-trade-biz/src/main/java/com/yc/ship/module/trade/controller/admin/order/OtcTradeOrderController.java
  4. 7 1
      ship-module-trade/ship-module-trade-biz/src/main/java/com/yc/ship/module/trade/controller/admin/order/vo/order/TradeOrderTotalVO.java
  5. 10 1
      ship-module-trade/ship-module-trade-biz/src/main/java/com/yc/ship/module/trade/controller/admin/orderjzdetail/OrderJzDetailController.java
  6. 2 1
      ship-module-trade/ship-module-trade-biz/src/main/java/com/yc/ship/module/trade/controller/admin/orderjzdetail/vo/OrderJzDetailPageReqVO.java
  7. 3 0
      ship-module-trade/ship-module-trade-biz/src/main/java/com/yc/ship/module/trade/controller/admin/orderjzdetail/vo/OrderJzDetailRespVO.java
  8. 2 0
      ship-module-trade/ship-module-trade-biz/src/main/java/com/yc/ship/module/trade/controller/admin/smsSendconfig/vo/SmsSendconfigQueryRespVO.java
  9. 12 0
      ship-module-trade/ship-module-trade-biz/src/main/java/com/yc/ship/module/trade/dal/dataobject/order/TradeOrderTotalDO.java
  10. 1 0
      ship-module-trade/ship-module-trade-biz/src/main/java/com/yc/ship/module/trade/dal/mysql/order/TradeDetailMapper.java
  11. 1 1
      ship-module-trade/ship-module-trade-biz/src/main/java/com/yc/ship/module/trade/dal/mysql/order/TradeVisitorMapper.java
  12. 3 0
      ship-module-trade/ship-module-trade-biz/src/main/java/com/yc/ship/module/trade/dal/mysql/orderjzdetail/OrderJzDetailMapper.java
  13. 9 5
      ship-module-trade/ship-module-trade-biz/src/main/java/com/yc/ship/module/trade/framework/mq/TradeMqReceiver.java
  14. 27 1
      ship-module-trade/ship-module-trade-biz/src/main/java/com/yc/ship/module/trade/job/OrderSmsJob.java
  15. 1 0
      ship-module-trade/ship-module-trade-biz/src/main/java/com/yc/ship/module/trade/service/order/TradeOrderRepositoryService.java
  16. 7 8
      ship-module-trade/ship-module-trade-biz/src/main/java/com/yc/ship/module/trade/service/order/handler/MoblieMessageAliyunUtil.java
  17. 45 139
      ship-module-trade/ship-module-trade-biz/src/main/java/com/yc/ship/module/trade/service/order/handler/SmsHandler.java
  18. 2 2
      ship-module-trade/ship-module-trade-biz/src/main/java/com/yc/ship/module/trade/service/order/impl/AdminTradeOrderServiceImpl.java
  19. 5 0
      ship-module-trade/ship-module-trade-biz/src/main/java/com/yc/ship/module/trade/service/order/impl/TradeOrderRepositoryServiceImpl.java
  20. 2 3
      ship-module-trade/ship-module-trade-biz/src/main/java/com/yc/ship/module/trade/service/order/impl/TradeOrderServiceImpl.java
  21. 2 0
      ship-module-trade/ship-module-trade-biz/src/main/java/com/yc/ship/module/trade/service/orderjzdetail/OrderJzDetailService.java
  22. 52 9
      ship-module-trade/ship-module-trade-biz/src/main/java/com/yc/ship/module/trade/service/orderjzdetail/OrderJzDetailServiceImpl.java
  23. 19 2
      ship-module-trade/ship-module-trade-biz/src/main/java/com/yc/ship/module/trade/service/otc/OtcTradeOrderService.java
  24. 82 33
      ship-module-trade/ship-module-trade-biz/src/main/java/com/yc/ship/module/trade/service/otc/impl/OtcTradeOrderServiceImpl.java
  25. 25 1
      ship-module-trade/ship-module-trade-biz/src/main/resources/mapper/order/TradeDetailMapper.xml
  26. 2 2
      ship-module-trade/ship-module-trade-biz/src/main/resources/mapper/order/TradeOrderMapper.xml
  27. 4 4
      ship-module-trade/ship-module-trade-biz/src/main/resources/mapper/order/TradeVisitorMapper.xml
  28. 25 3
      ship-module-trade/ship-module-trade-biz/src/main/resources/mapper/orderjzdetail/OrderJzDetailMapper.xml
  29. 12 15
      ship-module-trade/ship-module-trade-biz/src/main/resources/mapper/smsSendconfig/SmsSendconfigMapper.xml

+ 3 - 1
ship-module-trade/ship-module-trade-biz/pom.xml

@@ -47,6 +47,8 @@
             <version>1.0.0</version>
         </dependency>
 
+
+
         <!-- 业务组件 -->
         <dependency>
             <groupId>com.yc.ship</groupId>
@@ -195,7 +197,7 @@
         <dependency>
             <groupId>com.aliyun</groupId>
             <artifactId>aliyun-java-sdk-dysmsapi</artifactId>
-            <version>1.1.0</version>
+            <version>2.1.0</version>
         </dependency>
     </dependencies>
 

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

@@ -18,6 +18,9 @@ public class AuditUserSaveReqVO {
     @Schema(description = "审核人")
     private Long auditUser;
 
+    @Schema(description = "当前审核类型")
+    private Integer auditStatus;
+
     @Schema(description = "审核备注信息", example = "随便")
     private String remark;
 

+ 30 - 7
ship-module-trade/ship-module-trade-biz/src/main/java/com/yc/ship/module/trade/controller/admin/order/OtcTradeOrderController.java

@@ -34,7 +34,11 @@ import com.yc.ship.module.trade.dal.dataobject.order.TradeOrderTotalDO;
 import com.yc.ship.module.trade.framework.annotation.PlatTenantEnv;
 import com.yc.ship.module.trade.framework.annotation.RequestDecryption;
 import com.yc.ship.module.trade.framework.annotation.TradeRateLimit;
-import com.yc.ship.module.trade.service.order.*;
+import com.yc.ship.module.trade.service.order.AdminTradeOrderService;
+import com.yc.ship.module.trade.service.order.TradeOrderCountryService;
+import com.yc.ship.module.trade.service.order.TradeOrderRoomModelService;
+import com.yc.ship.module.trade.service.order.TradeOrderService;
+import com.yc.ship.module.trade.service.order.TradeOrderTotalService;
 import com.yc.ship.module.trade.service.otc.AppOtcTradeOrderService;
 import com.yc.ship.module.trade.service.otc.OtcTradeOrderService;
 import com.yc.ship.module.trade.service.pay.TradeOrderPayService;
@@ -43,8 +47,14 @@ import io.swagger.v3.oas.annotations.Operation;
 import io.swagger.v3.oas.annotations.tags.Tag;
 import lombok.extern.slf4j.Slf4j;
 import org.apache.commons.io.IOUtils;
+import org.springframework.security.access.prepost.PreAuthorize;
 import org.springframework.validation.annotation.Validated;
-import org.springframework.web.bind.annotation.*;
+import org.springframework.web.bind.annotation.GetMapping;
+import org.springframework.web.bind.annotation.PostMapping;
+import org.springframework.web.bind.annotation.RequestBody;
+import org.springframework.web.bind.annotation.RequestMapping;
+import org.springframework.web.bind.annotation.RequestParam;
+import org.springframework.web.bind.annotation.RestController;
 
 import javax.annotation.Resource;
 import javax.servlet.http.HttpServletResponse;
@@ -60,7 +70,9 @@ import java.util.concurrent.atomic.AtomicReference;
 import java.util.stream.Collectors;
 
 import static com.yc.ship.framework.common.pojo.CommonResult.success;
-import static com.yc.ship.framework.operatelog.core.enums.OperateTypeEnum.*;
+import static com.yc.ship.framework.operatelog.core.enums.OperateTypeEnum.API;
+import static com.yc.ship.framework.operatelog.core.enums.OperateTypeEnum.EXPORT;
+import static com.yc.ship.framework.operatelog.core.enums.OperateTypeEnum.TRADE;
 
 
 /***
@@ -569,10 +581,10 @@ public class OtcTradeOrderController {
     @PlatTenantEnv
     public void exportOrderExcel(@Valid TradeOrderPageReqVO pageReqVO, HttpServletResponse response) throws IOException {
         pageReqVO.setPageSize(10000);
-        if (pageReqVO.getVoyageId() == null) {
-            ExcelUtils.exportError(response, "游客列表.xls");
-            return;
-        }
+//        if (pageReqVO.getVoyageId() == null) {
+//            ExcelUtils.exportError(response, "游客列表.xls");
+//            return;
+//        }
         List<TradeOrderRespExcelVO> list = tradeOrderService.getExportVisitorList(pageReqVO);
         ExcelUtils.write(response, "游客列表.xls", "数据", TradeOrderRespExcelVO.class, list);
     }
@@ -591,6 +603,17 @@ public class OtcTradeOrderController {
         IOUtils.copy(is, response.getOutputStream());
     }
 
+
+    @GetMapping("/window/update-status")
+    @OperateLog(type = API)
+    @Operation(summary = "win-订单列表[分页]", description = "修改订单状态")
+    @PreAuthorize("@ss.hasPermission('trade:order:status-update')")
+    public CommonResult<?> updateStatus(@RequestParam Long orderId, @RequestParam Integer status) {
+        return success(otcTradeOrderService.updateStatus(orderId, status));
+    }
+
+
+
     @PostMapping("/getOrderTotal")
     @Operation(summary = "获取订单统计")
     @OperateLog(type = API, enable = false)

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

@@ -83,7 +83,13 @@ public class TradeOrderTotalVO {
      * 领队费用
      */
     @Schema(description = "领队费用")
-    private BigDecimal leaderTotalMoney;
+    private BigDecimal leaderAmount;
+
+    /**
+     * 陪同费用
+     */
+    @Schema(description = "陪同费用")
+    private BigDecimal withAmount;
 
     /**
      * 包含服务费

+ 10 - 1
ship-module-trade/ship-module-trade-biz/src/main/java/com/yc/ship/module/trade/controller/admin/orderjzdetail/OrderJzDetailController.java

@@ -177,11 +177,20 @@ public class OrderJzDetailController {
   @GetMapping("/visitor/query")
   @Operation(summary = "获得订单接站人员名单分页")
   @PreAuthorize("@ss.hasPermission('trade:order-jz-detail-sign:query')")
-  public CommonResult<PageResult<OrderJzDetailRespVO>> queryOrderJzDetailPage(@Valid OrderJzDetailPageReqVO pageReqVO) {
+  public CommonResult<PageResult<OrderJzDetailRespVO>> queryOrderVisitorPage(@Valid OrderJzDetailPageReqVO pageReqVO) {
     PageResult<OrderJzDetailDO> pageResult = orderJzDetailService.getOrderJzDetailPage2(pageReqVO);
     return success(BeanUtils.toBean(pageResult, OrderJzDetailRespVO.class));
   }
 
+
+  @GetMapping("/order/query")
+  @Operation(summary = "获得订单接站人员订单分页")
+  @PreAuthorize("@ss.hasPermission('trade:order-jz-detail-sign:query')")
+  public CommonResult<PageResult<?>> queryOrderPage(@Valid OrderJzDetailPageReqVO pageReqVO) {
+    PageResult<?> pageResult = orderJzDetailService.getOrderJzDetailPage3(pageReqVO);
+    return success(pageResult);
+  }
+
   @PostMapping("/visitor/sign")
   @Operation(summary = "游客登记")
   @PreAuthorize("@ss.hasPermission('trade:order-jz-detail-sign:save')")

+ 2 - 1
ship-module-trade/ship-module-trade-biz/src/main/java/com/yc/ship/module/trade/controller/admin/orderjzdetail/vo/OrderJzDetailPageReqVO.java

@@ -52,6 +52,7 @@ public class OrderJzDetailPageReqVO extends PageParam {
      */
     private String voyageId;
 
-
     private String oid;
+
+    private String queryCode;
 }

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

@@ -63,4 +63,7 @@ public class OrderJzDetailRespVO {
 
     private String signImage;
 
+    private String direction;
+    private String roomModelName;
+
 }

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

@@ -95,6 +95,8 @@ public class SmsSendconfigQueryRespVO {
     private String sourceName;
     private String contactName;
     private String mobile;
+    private String startTime;
+    private String leaveTime;
 
 
     private String sellerId;

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

@@ -84,6 +84,12 @@ public class TradeOrderTotalDO extends TenantBaseDO {
      */
     @ForUpdate(fieldName = "领队数")
     private Integer leaderTotalNum;
+
+    @ForUpdate(fieldName = "领队费")
+    private BigDecimal leaderAmount;
+
+    @ForUpdate(fieldName = "陪同费")
+    private BigDecimal withAmount;
     /**
      * 包含服务费
      */
@@ -106,6 +112,12 @@ public class TradeOrderTotalDO extends TenantBaseDO {
     @ForUpdate(fieldName = "其它费用")
     private BigDecimal otherMoney;
 
+    @ForUpdate(fieldName = "16免1人数")
+    private Integer freeNum;
+
+    @ForUpdate(fieldName = "16免1金额")
+    private BigDecimal freeAmount;
+
     @ForUpdate(fieldName = "其它备注")
     private String otherRemark;
 

+ 1 - 0
ship-module-trade/ship-module-trade-biz/src/main/java/com/yc/ship/module/trade/dal/mysql/order/TradeDetailMapper.java

@@ -180,6 +180,7 @@ public interface TradeDetailMapper extends BaseMapperX<TradeDetailDO> {
     List<Map<String,Object>> selectContractByOrderId(@Param("orderId") Long orderId);
 
     List<SmsSendconfigQueryRespVO> selectOrderSmsInfo(@Param("orderId") Long orderId, @Param("type") Integer type);
+    List<SmsSendconfigQueryRespVO> selectCreateOrderSmsInfo(@Param("orderId") Long orderId, @Param("type") Integer type);
     List<RoutePlanRespDTO> getRoutePlanByProductId(@Param("productId") Long productId, @Param("useStatus") Long useStatus);
 
     List<RefundDetailRespVO> getRefundBatchDetails(@Param("refundId") Long refundId);

+ 1 - 1
ship-module-trade/ship-module-trade-biz/src/main/java/com/yc/ship/module/trade/dal/mysql/order/TradeVisitorMapper.java

@@ -61,7 +61,7 @@ public interface TradeVisitorMapper extends BaseMapperX<TradeVisitorDO> {
     /**
      * 获取当前线路当前证件是否已经购买
      */
-    Integer queryVisitorByVovageId(@Param("voyageId") Long voyageId,@Param("credentialNo") String credentialNo);
+    Integer queryVisitorByVovageId(@Param("voyageId") Long voyageId,@Param("credentialNo") String credentialNo,@Param("orderNo") String orderNo);
 
 
     /**

+ 3 - 0
ship-module-trade/ship-module-trade-biz/src/main/java/com/yc/ship/module/trade/dal/mysql/orderjzdetail/OrderJzDetailMapper.java

@@ -11,6 +11,7 @@ import org.apache.ibatis.annotations.Param;
 import org.apache.ibatis.annotations.Select;
 
 import java.util.List;
+import java.util.Map;
 
 /**
  * 订单接站人员名单 Mapper
@@ -56,5 +57,7 @@ public interface OrderJzDetailMapper extends BaseMapperX<OrderJzDetailDO> {
 
   IPage<OrderJzDetailDO> selectPage2(IPage<OrderJzDetailDO> page, @Param("vo") OrderJzDetailPageReqVO vo);
 
+  IPage<Map> selectPage3(IPage<Map> page, @Param("vo") OrderJzDetailPageReqVO vo);
+
   Long cleanSign(@Param("id") String id);
 }

+ 9 - 5
ship-module-trade/ship-module-trade-biz/src/main/java/com/yc/ship/module/trade/framework/mq/TradeMqReceiver.java

@@ -59,11 +59,15 @@ public class TradeMqReceiver {
     @RabbitListener(queues = TradeMqConfig.QUEUE_CREATE_SUCCESS, concurrency = "3")
     @TenantIgnore
     public void processOrderCreateSuccess(String data, Message message, Channel channel) throws IOException {
-        log.debug("收到下单创建成功消息:" + data);
+        log.error("收到下单创建成功消息:" + data);
         try {
             TradeOrderDO tradeOrderDO = tradeOrderRepositoryService.getById(Long.parseLong(data));
-            tradeOrderHandlers.forEach(handler -> handler.processOrderCreateSuccess(tradeOrderDO));
-            channel.basicAck(message.getMessageProperties().getDeliveryTag(), false);
+            if(tradeOrderDO==null){
+                log.error("processOrderCreateSuccess订单不存在"+data);
+            }else {
+                tradeOrderHandlers.forEach(handler -> handler.processOrderCreateSuccess(tradeOrderDO));
+                channel.basicAck(message.getMessageProperties().getDeliveryTag(), false);
+            }
         } catch (Exception e) {
             log.error("下单创建成功MQ通知出现错误{}", e.getMessage());
             channel.basicReject(message.getMessageProperties().getDeliveryTag(), false);
@@ -80,7 +84,7 @@ public class TradeMqReceiver {
     @RabbitListener(queues = TradeMqConfig.QUEUE_CREATE_FAIL, concurrency = "3")
     @TenantIgnore
     public void processOrderCreateFail(String data, Message message, Channel channel) throws IOException {
-        log.debug("收到下单创建失败消息:" + data);
+        log.error("收到下单创建失败消息:" + data);
         try {
             //归还库存 等操作
             TradeOrderDO tradeOrderDO = tradeOrderRepositoryService.getById(Long.parseLong(data));
@@ -101,7 +105,7 @@ public class TradeMqReceiver {
      */
     @RabbitListener(queues = TradeMqConfig.QUEUE_PAY_TIMEOUT, concurrency = "3")
     public void processOrderPayTimeOut(String data, Message message, Channel channel) throws IOException {
-        log.debug("收到支付超时消息:" + data);
+        log.error("收到支付超时消息:" + data);
         try {
             //释放库存、通知供应商等操作
             TradeOrderDO tradeOrderDO = tradeOrderRepositoryService.getById(Long.parseLong(data));

+ 27 - 1
ship-module-trade/ship-module-trade-biz/src/main/java/com/yc/ship/module/trade/job/OrderSmsJob.java

@@ -1,15 +1,41 @@
 package com.yc.ship.module.trade.job;
 
+import com.xxl.job.core.handler.annotation.XxlJob;
 import com.yc.ship.framework.quartz.core.handler.JobHandler;
+import com.yc.ship.framework.tenant.core.aop.TenantIgnore;
+import com.yc.ship.module.trade.service.smsSendconfig.SmsSendconfigService;
+import lombok.extern.slf4j.Slf4j;
 import org.springframework.stereotype.Component;
 
+import javax.annotation.Resource;
+
 @Component
+@Slf4j
 public class OrderSmsJob implements JobHandler {
-
+    @Resource
+    private SmsSendconfigService smsSendconfigService;
 
     @Override
     public String execute(String param) {
         return "成功";
     }
 
+
+    /***
+     * @author qsl
+     * 2026/3/6 17:38
+     */
+    @XxlJob("smsSendMsg1")
+    @TenantIgnore
+    public void execute() {
+        log.info(">>>>>>>>>>>>>>>>>>>>>> smsSendMsg1 Begin <<<<<<<<<<<<<<<<<<<<<<");
+        try {
+            smsSendconfigService.smsSendMsg(0,null);
+        } catch (Exception e) {
+            log.error(">>>>>>>>>>>>>>>>>>>>>> smsSendMsg Error <<<<<<<<<<<<<<<<<<<<<<");
+            log.error(e.getMessage(), e);
+        }
+        log.info(">>>>>>>>>>>>>>>>>>>>>>  OverCheckJob End  <<<<<<<<<<<<<<<<<<<<<<");
+    }
+
 }

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

@@ -216,6 +216,7 @@ public interface TradeOrderRepositoryService {
 
     List<TradeDetailDO> getChangeDetailList(Long orderId, Long originOrderId);
 
+    List<SmsSendconfigQueryRespVO> getCreateOrderSmsInfo(Long orderId, Integer type);
     List<SmsSendconfigQueryRespVO> getOrderSmsInfo(Long orderId, Integer type);
 
     void insertSmsLog(SmsSendLogDTO smsSendLogDTO);

+ 7 - 8
ship-module-trade/ship-module-trade-biz/src/main/java/com/yc/ship/module/trade/service/order/handler/MoblieMessageAliyunUtil.java

@@ -3,6 +3,8 @@ package com.yc.ship.module.trade.service.order.handler;
 import cn.hutool.json.JSONUtil;
 import com.aliyuncs.DefaultAcsClient;
 import com.aliyuncs.IAcsClient;
+import com.aliyuncs.dysmsapi.model.v20170525.QuerySendDetailsRequest;
+import com.aliyuncs.dysmsapi.model.v20170525.QuerySendDetailsResponse;
 import com.aliyuncs.dysmsapi.model.v20170525.SendSmsRequest;
 import com.aliyuncs.dysmsapi.model.v20170525.SendSmsResponse;
 import com.aliyuncs.exceptions.ClientException;
@@ -13,7 +15,6 @@ import com.aliyuncs.profile.IClientProfile;
 import lombok.extern.slf4j.Slf4j;
 import org.apache.commons.lang3.StringUtils;
 
-import java.util.List;
 
 /**
  * 三峡短信模块
@@ -92,12 +93,12 @@ public class MoblieMessageAliyunUtil {
         return sendSmsResponse;
     }
 
-
     public static void main(String[] args) throws Exception{
         //您预定的${useDate}“长江游轮”即将开启.请您于${startTime}起前往 ${startAddr}登船,身份证即为船票,出行时请携带所有出行人的身份证原件,${endTime}将停止检票.请勿携带宠物、管制刀具等违禁物品登船,祝您旅途愉快!
-//        String ss = "{\"useDate\":\"2025年10月1日\",\"startTime\":\"08:30\",\"startAddr\":\"三峡游客中心\",\"endTime\":\"09:00\"}";
-//        SendSmsResponse s = sendSms("LTAI5t9eyWeREnjqs3ozEP22","hdl5UOYVFGCXz9ZNwy8w1mEt8z8Lmz","长江行游轮","18628286025", ss, "SMS_494225061");
-//        System.out.println(s.getMessage());
+        String ss = "{\"boatName\":\"长江游轮\",\"orderNo\":\"SP202691203132\",\"routeName\":\"宜昌-重庆\",\"startTime\":\"2026-4-20\",\"jzTime\":\"2026年3月19日\"}";
+//        SendSmsResponse s = sendSms("LTAI5t9eyWeREnjqs3ozEP22","hdl5UOYVFGCXz9ZNwy8w1mEt8z8Lmz","长江行游轮","18628286025", ss, "SMS_501695562");
+        SendSmsResponse s = sendSms("LTAI5t68WFsQmRcgLUcpydhb","EzZp3TQa7Ah96htShNqb7m44PEGk8v","长江行游轮","18628286025", ss, "SMS_501695562");
+        System.out.println(s.getMessage());
 
 //        String input = "这是一个【date】示例【startTime】字符【content】串";
 //        Pattern pattern = Pattern.compile("\\【(.*?)\\】");
@@ -111,9 +112,7 @@ public class MoblieMessageAliyunUtil {
 //            count++;
 //        }
 //        System.out.println(list);
-        String s = "[\"2025-01-01[09:30]\",\"黄柏河码头\"]";
-        List<String> list = JSONUtil.toList(s, String.class);
-        System.out.println(list);
+
     }
 
 

+ 45 - 139
ship-module-trade/ship-module-trade-biz/src/main/java/com/yc/ship/module/trade/service/order/handler/SmsHandler.java

@@ -1,10 +1,13 @@
 package com.yc.ship.module.trade.service.order.handler;
 
 
+import cn.hutool.core.date.DateTime;
+import cn.hutool.core.date.DateUtil;
 import cn.hutool.core.util.StrUtil;
 import cn.hutool.json.JSONArray;
 import cn.hutool.json.JSONObject;
 import cn.hutool.json.JSONUtil;
+import com.alibaba.excel.util.DateUtils;
 import com.aliyuncs.dysmsapi.model.v20170525.SendSmsResponse;
 import com.baomidou.mybatisplus.core.toolkit.IdWorker;
 import com.yc.ship.module.infra.api.config.ConfigApi;
@@ -55,9 +58,12 @@ public class SmsHandler implements TradeOrderHandler {
     private ConfigApi configApi;
 
     @Override
-    public void afterProcessSuccess(TradeOrderDO tradeOrderDO) {
+    public void processOrderCreateSuccess(TradeOrderDO tradeOrderDO) {
         try {
-            List<SmsSendconfigQueryRespVO> list = tradeOrderRepositoryService.getOrderSmsInfo(tradeOrderDO.getId(), 3);
+            if(tradeOrderDO.getSellMethod()!=null && tradeOrderDO.getSellMethod()==3){
+                return;
+            }
+            List<SmsSendconfigQueryRespVO> list = tradeOrderRepositoryService.getCreateOrderSmsInfo(tradeOrderDO.getId(), 0);
             if (list.isEmpty()) {
                 return;
             }
@@ -71,57 +77,69 @@ public class SmsHandler implements TradeOrderHandler {
         }
     }
 
-    @Transactional(rollbackFor = Exception.class)
-    public String sendMsg(SmsSendconfigQueryRespVO smsSendconfigQueryRespVO) {
+    /***
+     * 转确认单发送 旅行社和直客
+     * 2026/3/6 17:28
+     */
+    @Override
+    public void afterProcessSuccess(TradeOrderDO tradeOrderDO) {
         try {
-            String telphone = "0717-6910001";
-            if (StringUtils.isNotEmpty(smsSendconfigQueryRespVO.getSellerId())) {
-                try {
-                    AdminUserRespDTO user = adminUserApi.getUserIgnoreTenant(Long.parseLong(smsSendconfigQueryRespVO.getSellerId()));
-                    if (StringUtils.isNotEmpty(user.getMobile())) {
-                        //如果有售票员的电话则发送售票员的电话作为咨询电话
-                        telphone = user.getMobile();
-                    } else {
-                        //读取配置文件默认参数
-                        String mtelphone = configApi.getPlatformConfigValueByKey("telphone");
-                        if (mtelphone != null) {
-                            telphone = mtelphone;
-                        }
+            if(tradeOrderDO.getSellMethod()==3) {
+                List<SmsSendconfigQueryRespVO> list = tradeOrderRepositoryService.getOrderSmsInfo(tradeOrderDO.getId(), 4);
+                if (list.isEmpty()) {
+                    return;
+                }
+                for (SmsSendconfigQueryRespVO smsSendconfigQueryRespVO : list) {
+                    if (smsSendconfigQueryRespVO.getMobile() != null) {
+                        sendMsg(smsSendconfigQueryRespVO);
                     }
-                } catch (Exception e) {
-                    log.error("用户信息获取异常" + smsSendconfigQueryRespVO.getSellerId(), e);
                 }
             }
+        } catch (Exception e) {
+            log.error("短信发送异常", e);
+        }
+    }
+
+    @Transactional(rollbackFor = Exception.class)
+    public String sendMsg(SmsSendconfigQueryRespVO smsSendconfigQueryRespVO) {
+        try {
 
             String appId = smsSendconfigQueryRespVO.getApiKey();
             String secretKey = smsSendconfigQueryRespVO.getApiSecret();
             String signName = smsSendconfigQueryRespVO.getSignature();
             String content = smsSendconfigQueryRespVO.getSmsParms();
             String smsContent = smsSendconfigQueryRespVO.getSmsContent();
-            //【1】航次名称; 【2】订单号; 【3】游玩日期; 【4】联系人;【5】购买数量; 【6】团号; 【7】旅行社联系人; 【8】联系电话;【9】航线名称;【10】产品简称;【11】咨询电话;
+            //【1】航次名称; 【2】订单号; 【3】游玩日期; 【4】联系人;【5】购买数量;
+            //            【6】团号; 【7】旅行社联系人; 【8】联系电话;【9】航线名称;【10】产品简称;【11】咨询电话;【12】游船;【13】开航时间;
+            //            【14】出发时间;【15】违约金;【16】补缴费;【17】小程序链接;【18】登船时间
             content = content.replaceAll("【1】", smsSendconfigQueryRespVO.getVoyageName());
             content = content.replaceAll("【2】", smsSendconfigQueryRespVO.getOrderNo());
             content = content.replaceAll("【3】", smsSendconfigQueryRespVO.getUseDate().substring(0, 10));
+            content = content.replaceAll("【12】", smsSendconfigQueryRespVO.getShipName());
+            content = content.replaceAll("【13】", smsSendconfigQueryRespVO.getUseDate().substring(0, 10));
             content = content.replaceAll("【4】", smsSendconfigQueryRespVO.getContactName());
             content = content.replaceAll("【5】", smsSendconfigQueryRespVO.getNum() + "");
             content = content.replaceAll("【6】", smsSendconfigQueryRespVO.getGroupNo());
             content = content.replaceAll("【7】", smsSendconfigQueryRespVO.getContactName());
             content = content.replaceAll("【8】", smsSendconfigQueryRespVO.getMobile());
-            content = content.replaceAll("【9】", smsSendconfigQueryRespVO.getShipName());
+            content = content.replaceAll("【9】", smsSendconfigQueryRespVO.getRouteName());
             content = content.replaceAll("【10】", smsSendconfigQueryRespVO.getShortName());
-            content = content.replaceAll("【11】", telphone);
+            content = content.replaceAll("【14】", smsSendconfigQueryRespVO.getLeaveTime().substring(0, 10));
+            content = content.replaceAll("【18】", smsSendconfigQueryRespVO.getLeaveTime().substring(0, 10));
+            DateTime dateTime = DateUtil.offsetDay(DateUtil.parse(smsSendconfigQueryRespVO.getLeaveTime()), -7);
+            content = content.replaceAll("【19】", DateUtil.format(dateTime, "yyyy-MM-dd"));
 
             Pattern pattern = Pattern.compile("\\【(.*?)\\】");
             Matcher matcher = pattern.matcher(smsContent);
             List<String> list = new ArrayList<>();
             while (matcher.find()) {
-                String result = smsContent.substring(matcher.start() + 1, matcher.end() - 1); // 获取第一个匹配的括号内的内容
+                String result = smsContent.substring(matcher.start() + 1, matcher.end() - 1);
                 list.add(result);
             }
             JSONObject jsonObject = new JSONObject();
             List<String> parmlist = JSONUtil.toList(content, String.class);
             for (int i = 0; i < list.size(); i++) {
-                jsonObject.put(list.get(i), parmlist.get(i));
+                jsonObject.set(list.get(i), parmlist.get(i));
             }
             String mobile = smsSendconfigQueryRespVO.getMobile();
             log.error("[下单成功短信发送参数]:" + smsSendconfigQueryRespVO.getApiTemplateId() + ";" + mobile + ";" + jsonObject.toString());
@@ -172,121 +190,6 @@ public class SmsHandler implements TradeOrderHandler {
         }
     }
 
-    @Transactional(rollbackFor = Exception.class)
-    public String sendMsg3(SmsSendconfigQueryRespVO smsSendconfigQueryRespVO) {
-        try {
-            String telphone = "0717-6910001";
-            if (StringUtils.isNotEmpty(smsSendconfigQueryRespVO.getSellerId())) {
-                try {
-                    AdminUserRespDTO user = adminUserApi.getUserIgnoreTenant(Long.parseLong(smsSendconfigQueryRespVO.getSellerId()));
-                    if (StringUtils.isNotEmpty(user.getMobile())) {
-                        //如果有售票员的电话则发送售票员的电话作为咨询电话
-                        telphone = user.getMobile();
-                    } else {
-                        //读取配置文件默认参数
-                        String mtelphone = configApi.getPlatformConfigValueByKey("telphone");
-                        if (mtelphone != null) {
-                            telphone = mtelphone;
-                        }
-                    }
-                } catch (Exception e) {
-                    log.error("用户信息获取异常" + smsSendconfigQueryRespVO.getSellerId(), e);
-                }
-            }
-
-            //sxly
-            String appId = smsSendconfigQueryRespVO.getApiKey();
-            //Sx@202305
-            String secretKey = smsSendconfigQueryRespVO.getApiSecret();
-            //https://112.35.10.201:58888/sms/tmpsubmit
-            String url = smsSendconfigQueryRespVO.getApiUrl();
-            //jFKNw6Cis
-            String signName = smsSendconfigQueryRespVO.getSignature();
-            String content = smsSendconfigQueryRespVO.getSmsParms();
-            //【1】产品名称; 【2】订单号; 【3】游玩日期; 【4】联系人;【5】购买数量; 【6】团名称; 【7】旅行社联系人; 【8】联系电话;【9】时间方案名称;【10】产品简称; 【11】咨询电话;
-            content = content.replaceAll("【1】", smsSendconfigQueryRespVO.getProductName().substring(0, 10).replace("【", "").replace("】", "").replace("-", ""));
-            content = content.replaceAll("【2】", smsSendconfigQueryRespVO.getOrderNo());
-            content = content.replaceAll("【3】", smsSendconfigQueryRespVO.getUseDate().substring(0, 10));
-            content = content.replaceAll("【4】", smsSendconfigQueryRespVO.getContactName());
-            content = content.replaceAll("【5】", smsSendconfigQueryRespVO.getNum() + "");
-            content = content.replaceAll("【6】", smsSendconfigQueryRespVO.getSourceName());
-            content = content.replaceAll("【7】", smsSendconfigQueryRespVO.getContactName());
-            content = content.replaceAll("【8】", smsSendconfigQueryRespVO.getMobile());
-            content = content.replaceAll("【9】", smsSendconfigQueryRespVO.getRouteName());
-            content = content.replaceAll("【10】", smsSendconfigQueryRespVO.getShortName());
-            content = content.replaceAll("【11】", telphone);
-            JSONArray parts = JSONUtil.parseArray(content);
-            JSONArray templates = JSONUtil.parseArray(smsSendconfigQueryRespVO.getTemplateParams());
-            Map map = new HashMap<>();
-            for (int i = 0; i < templates.size(); i++) {
-                String key = templates.getStr(i);
-                String value = parts.getStr(i);
-                map.put(key, value);
-            }
-            String content1 = "【三峡旅游】" + StrUtil.format(smsSendconfigQueryRespVO.getSmsContent(), map);
-            String mobile = smsSendconfigQueryRespVO.getMobile();
-            log.error("[下单成功短信发送参数]:" + content1 + ";手机号:" + mobile);
-            String params = SmsUtil.generateParams2(
-                    String.join(",", mobile), content1, null, null, null
-            );
-            // 生成时间戳和token
-            String timeStamp = String.valueOf(System.currentTimeMillis());
-            String original = appId + timeStamp + secretKey;
-            String token = md5(original).toLowerCase();
-            // 构造请求头参数
-            Map<String, String> headers = new HashMap<>();
-            headers.put("userId", appId);
-            headers.put("timeStamp", timeStamp);
-            headers.put("token", token);
-            log.error("[下单成功短信发送参数]:" + url + ";" + params);
-            String result = sendPost(url, params, headers);
-            log.error("[下单成功短信返回参数]:" + result);
-
-            // 检查返回结果是否为有效的JSON格式
-            SmsBatchSendRespDTO response = null;
-            if (result != null && result.trim().startsWith("{")) {
-                try {
-                    response = JSONUtil.toBean(result, SmsBatchSendRespDTO.class);
-                } catch (Exception e) {
-                    log.error("短信接口返回JSON解析失败,原始响应内容: {}", result, e);
-                }
-            } else {
-                log.error("短信接口返回非JSON格式响应,原始响应内容: {}", result);
-            }
-
-            if (response != null && response.getCode() != null && response.getCode() == 0) {
-                log.error("[下单成功短信发送成功]:" + mobile);
-                SmsSendLogDTO reqDTO = new SmsSendLogDTO();
-                reqDTO.setId(IdWorker.getId());
-                reqDTO.setTenantId(smsSendconfigQueryRespVO.getTenantId());
-                reqDTO.setMobile(mobile);
-                reqDTO.setSmsConfigId(mobile);
-                reqDTO.setOrderNo(smsSendconfigQueryRespVO.getOrderNo());
-                reqDTO.setSmsConfigId(smsSendconfigQueryRespVO.getId() + "");
-                reqDTO.setResult(result);
-                if (result != null && result.indexOf("success") != -1) {
-                    reqDTO.setStatus(1);
-                } else {
-                    reqDTO.setStatus(0);
-                }
-                reqDTO.setSmsContent(content1);
-                tradeOrderRepositoryService.insertSmsLog(reqDTO);
-                return "发送成功";
-            } else {
-                String errorMsg = "短信发送失败";
-                if (response != null && response.getMsg() != null) {
-                    errorMsg += ": " + response.getMsg();
-                } else if (result != null) {
-                    errorMsg += ",原始响应: " + result;
-                }
-                return errorMsg;
-            }
-        } catch (Exception e) {
-            log.error("[下单成功短信发送失败]:" + e.getMessage());
-            return "短信发送失败: " + e.getMessage();
-        }
-    }
-
     private String md5(String input) {
         try {
             java.security.MessageDigest md = java.security.MessageDigest.getInstance("MD5");
@@ -491,5 +394,8 @@ public class SmsHandler implements TradeOrderHandler {
         return result;
     }
 
+    public static void main(String[] args) {
+        System.out.println(DateUtil.offsetDay(DateUtil.parse("2026-03-20"), -7));
+    }
 
 }

+ 2 - 2
ship-module-trade/ship-module-trade-biz/src/main/java/com/yc/ship/module/trade/service/order/impl/AdminTradeOrderServiceImpl.java

@@ -344,8 +344,8 @@ public class AdminTradeOrderServiceImpl implements AdminTradeOrderService {
             tradeOrderBindDO.setCreator(getLoginUserId()+"");
             tradeOrderBindMapper.insert(tradeOrderBindDO);
 
-            AuditUserDO auditUserDO = auditUserMapper.selectOne(new LambdaQueryWrapperX<AuditUserDO>().eq(AuditUserDO::getType, 3).eq(AuditUserDO::getDeleted, 0).orderByDesc(AuditUserDO::getCreateTime).last("limit 1"));
-            tradeOrderMapper.update(new UpdateWrapper<TradeOrderDO>().set("audit_type", 3).set("audit_user", auditUserDO == null ? "" : auditUserDO.getAuditUser()).set("order_status", TradeOrderStatusEnum.CANCEL_AUDIT.getStatus()).set("audit_status", 1).eq("id", tradeOrderDO.getId()));
+            AuditUserDO auditUserDO = auditUserMapper.selectOne(new LambdaQueryWrapperX<AuditUserDO>().eq(AuditUserDO::getType, 4).eq(AuditUserDO::getDeleted, 0).orderByDesc(AuditUserDO::getCreateTime).last("limit 1"));
+            tradeOrderMapper.update(new UpdateWrapper<TradeOrderDO>().set("audit_type", 4).set("audit_user", auditUserDO == null ? "" : auditUserDO.getAuditUser()).set("order_status", TradeOrderStatusEnum.CANCEL_AUDIT.getStatus()).set("audit_status", 1).eq("id", tradeOrderDO.getId()));
             return CommonResult.success("订单取消审核中");
         }else{
             return tradeOrderPayService.cancelOrder(orderId);

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

@@ -783,6 +783,11 @@ public class TradeOrderRepositoryServiceImpl implements TradeOrderRepositoryServ
         return tradeDetailMapper.selectOrderSmsInfo(orderId, type);
     }
 
+    @Override
+    public List<SmsSendconfigQueryRespVO> getCreateOrderSmsInfo(Long orderId, Integer type) {
+        return tradeDetailMapper.selectCreateOrderSmsInfo(orderId, type);
+    }
+
     @Override
     public void insertSmsLog(SmsSendLogDTO smsSendLogDTO) {
         tradeDetailMapper.insertSmsLog(smsSendLogDTO);

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

@@ -701,7 +701,7 @@ public class TradeOrderServiceImpl implements TradeOrderService {
                     }
                     tradeVisitorDO.setCreateTime(LocalDateTime.now());
 
-                    int num = tradeVisitorMapper.queryVisitorByVovageId(voyageId, visitor.getCredentialNo());
+                    int num = tradeVisitorMapper.queryVisitorByVovageId(voyageId, visitor.getCredentialNo(),tradeOrderDO.getOrderNo());
                     if(num>0){
                         repeatVisitor.add(visitor.getCredentialNo());
                     }
@@ -1127,7 +1127,7 @@ public class TradeOrderServiceImpl implements TradeOrderService {
     private void afterOrderCreate(TradeOrderBO tradeOrderBO) {
         //执行下单后处理器
         tradeOrderHandlers.forEach(handler -> handler.afterOrderCreate(tradeOrderBO));
-        tradePublishUtils.publishOrderCreateSuccessMsg(tradeOrderBO.getTradeOrderDO().getId().toString());
+//        tradePublishUtils.publishOrderCreateSuccessMsg(tradeOrderBO.getTradeOrderDO().getId().toString());
         //支付倒计时--不超时,有预订单
         Map<String, Object> append = TradeOrderLogUtils.append("result", "成功");
         append.put("content", "");
@@ -1137,7 +1137,6 @@ public class TradeOrderServiceImpl implements TradeOrderService {
     private void afterOrderModify(TradeOrderBO tradeOrderBO, String content) {
         //执行下单后处理器
         tradeOrderHandlers.forEach(handler -> handler.afterOrderModify(tradeOrderBO));
-        tradePublishUtils.publishOrderCreateSuccessMsg(tradeOrderBO.getTradeOrderDO().getId().toString());
         //支付倒计时--不超时,有预订单
         Map<String, Object> append = TradeOrderLogUtils.append("result", "订单修改");
         append.put("content", content);

+ 2 - 0
ship-module-trade/ship-module-trade-biz/src/main/java/com/yc/ship/module/trade/service/orderjzdetail/OrderJzDetailService.java

@@ -64,4 +64,6 @@ public interface OrderJzDetailService {
   Long signOrderJzDetail(OrderJzDetailSaveReqVO createReqVO);
 
   PageResult<OrderJzDetailDO> getOrderJzDetailPage2(OrderJzDetailPageReqVO pageReqVO);
+
+  PageResult<?> getOrderJzDetailPage3(OrderJzDetailPageReqVO pageReqVO);
 }

+ 52 - 9
ship-module-trade/ship-module-trade-biz/src/main/java/com/yc/ship/module/trade/service/orderjzdetail/OrderJzDetailServiceImpl.java

@@ -26,6 +26,7 @@ import javax.annotation.Resource;
 import java.util.ArrayList;
 import java.util.Date;
 import java.util.List;
+import java.util.Map;
 
 import static com.yc.ship.framework.common.exception.util.ServiceExceptionUtil.exception;
 import static com.yc.ship.framework.security.core.util.SecurityFrameworkUtils.getLoginUser;
@@ -174,17 +175,51 @@ public class OrderJzDetailServiceImpl implements OrderJzDetailService {
   @Override
   public Long signOrderJzDetail(OrderJzDetailSaveReqVO createReqVO) {
     OrderJzDetailDO detail = getOrderJzDetail(createReqVO.getId());
-    if(detail != null) {
-      detail.setSignTime(DateUtils.format(new Date(), DatePattern.NORM_DATETIME_PATTERN));
-      // 当前登录人
-      LoginUser loginUser = getLoginUser();
-      detail.setSignMan(MapUtils.getString(loginUser.getInfo(), LoginUser.INFO_KEY_NICKNAME));
-      detail.setSignRemark(createReqVO.getSignRemark());
-      detail.setSignImage(createReqVO.getSignImage());
+    // 如果ID为空,则为补登游客,按订单来查询
+    if(detail == null) {
+      // 查询是否有接站头表
+      List<OrderJzDO> orderJzDOList  = orderJzMapper.selectList(new LambdaQueryWrapper<OrderJzDO>().eq(OrderJzDO::getOrderId, createReqVO.getOid()));
+      OrderJzDO orderJzDO = null;
+      if (orderJzDOList == null || orderJzDOList.size() == 0) { // 创建一条
+        TradeOrderDO orderDo = tradeOrderMapper.selectById(createReqVO.getOid());
+        if (orderDo == null) {
+          throw new RuntimeException("未查询到相关订单");
+        }
+        orderJzDO = new OrderJzDO();
+        orderJzDO.setId(IdUtil.getSnowflake(0, 0).nextId());
+        orderJzDO.setIsJz(1);
+        orderJzDO.setJzAddress("");
+        orderJzDO.setJzLinkName("");
+        orderJzDO.setJzLinkPhone("");
+        orderJzDO.setOrderId(Long.valueOf(createReqVO.getOid()));
+        orderJzMapper.insert(orderJzDO);
+      } else {
+        orderJzDO = orderJzDOList.get(0);
+      }
+      detail = new OrderJzDetailDO();
+      detail.setJzId(orderJzDO.getId());
+      detail.setBatchNo(IdUtil.getSnowflake(0, 0).nextIdStr());
+      detail.setArriveTime(createReqVO.getArriveTime());
+      detail.setAddress(createReqVO.getAddress());
+      detail.setName(createReqVO.getName());
+      detail.setIdCard(createReqVO.getIdCard());
+      detail.setPhone(createReqVO.getPhone());
+      detail.setRemark("接站补登");
+      detail.setStatus(1);
+    }
+    detail.setSignTime(DateUtils.format(new Date(), DatePattern.NORM_DATETIME_PATTERN));
+    // 当前登录人
+    LoginUser loginUser = getLoginUser();
+    detail.setSignMan(MapUtils.getString(loginUser.getInfo(), LoginUser.INFO_KEY_NICKNAME));
+    detail.setSignRemark(createReqVO.getSignRemark());
+    detail.setSignImage(createReqVO.getSignImage());
+
+    if(detail.getId() == null) {
+      orderJzDetailMapper.insert(detail);
+    } else {
       orderJzDetailMapper.updateById(detail);
-      return detail.getId();
     }
-    return 0L;
+    return detail.getId();
   }
 
   @Override
@@ -193,4 +228,12 @@ public class OrderJzDetailServiceImpl implements OrderJzDetailService {
     IPage<OrderJzDetailDO> iPage = orderJzDetailMapper.selectPage2(page, pageReqVO);
     return new PageResult<>(iPage.getRecords(), iPage.getTotal());
   }
+
+
+  @Override
+  public PageResult<?> getOrderJzDetailPage3(OrderJzDetailPageReqVO pageReqVO) {
+    IPage<Map> page = new Page<>(pageReqVO.getPageNo(), pageReqVO.getPageSize());
+    IPage<?> iPage = orderJzDetailMapper.selectPage3(page, pageReqVO);
+    return new PageResult<>(iPage.getRecords(), iPage.getTotal());
+  }
 }

+ 19 - 2
ship-module-trade/ship-module-trade-biz/src/main/java/com/yc/ship/module/trade/service/otc/OtcTradeOrderService.java

@@ -6,9 +6,24 @@ import com.yc.ship.framework.common.pojo.PageResult;
 import com.yc.ship.framework.security.core.LoginUser;
 import com.yc.ship.module.product.api.dto.CategoryRespDTO;
 import com.yc.ship.module.product.api.dto.ProductSpuRespDTO;
-import com.yc.ship.module.trade.controller.admin.order.vo.order.*;
+import com.yc.ship.module.trade.controller.admin.order.vo.order.OrderPayAmountRespVO;
+import com.yc.ship.module.trade.controller.admin.order.vo.order.PayOrderReqVO;
+import com.yc.ship.module.trade.controller.admin.order.vo.order.PayOrderRespVO;
+import com.yc.ship.module.trade.controller.admin.order.vo.order.TradeDetailPageReqVO;
+import com.yc.ship.module.trade.controller.admin.order.vo.order.TradeDetailRespVO;
+import com.yc.ship.module.trade.controller.admin.order.vo.order.TradeOrderConfirmationVO;
+import com.yc.ship.module.trade.controller.admin.order.vo.order.TradeOrderOtcCreateVO;
+import com.yc.ship.module.trade.controller.admin.order.vo.order.TradeOrderPageReqVO;
+import com.yc.ship.module.trade.controller.admin.order.vo.order.TradeOrderPdaRespVO;
+import com.yc.ship.module.trade.controller.admin.order.vo.order.TradeOrderRespNewVO;
+import com.yc.ship.module.trade.controller.admin.order.vo.order.TradeOrderRespVO;
+import com.yc.ship.module.trade.controller.admin.order.vo.order.TradeStaticReqVO;
 import com.yc.ship.module.trade.controller.admin.order.vo.otc.PrintRespVO;
-import com.yc.ship.module.trade.controller.admin.order.vo.refund.*;
+import com.yc.ship.module.trade.controller.admin.order.vo.refund.RefundDetailRespVO;
+import com.yc.ship.module.trade.controller.admin.order.vo.refund.RefundPageReqVO;
+import com.yc.ship.module.trade.controller.admin.order.vo.refund.RefundRecordPageReqVO;
+import com.yc.ship.module.trade.controller.admin.order.vo.refund.RefundRecordRespVO;
+import com.yc.ship.module.trade.controller.admin.order.vo.refund.RefundRespVO;
 import com.yc.ship.module.trade.dal.dataobject.contract.ContractDO;
 import com.yc.ship.module.trade.dal.dataobject.insurance.InsuranceDO;
 import com.yc.ship.module.trade.dal.dataobject.order.TradeDetailBaseDO;
@@ -139,6 +154,8 @@ public interface OtcTradeOrderService {
 
     CommonResult<?> cancelAudit(Long orderId, Integer auditStatus);
 
+    CommonResult<?> updateStatus(Long orderId, Integer  status);
+
     /**
      * 获取订单统计信息
      */

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

@@ -15,6 +15,7 @@ import com.alibaba.excel.write.metadata.WriteSheet;
 import com.alibaba.excel.write.metadata.fill.FillConfig;
 import com.alibaba.excel.write.metadata.fill.FillWrapper;
 import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
+import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
 import com.baomidou.mybatisplus.core.conditions.update.LambdaUpdateWrapper;
 import com.baomidou.mybatisplus.core.conditions.update.UpdateWrapper;
 import com.baomidou.mybatisplus.core.metadata.IPage;
@@ -96,6 +97,7 @@ import com.yc.ship.module.trade.enums.*;
 import com.yc.ship.module.trade.framework.annotation.TradeOrderLog;
 import com.yc.ship.module.trade.framework.common.ThreadLocalUtil;
 import com.yc.ship.module.trade.framework.common.TradeOrderLogUtils;
+import com.yc.ship.module.trade.framework.mq.TradePublishUtils;
 import com.yc.ship.module.trade.service.invoice.InvoiceService;
 import com.yc.ship.module.trade.service.order.TradeOrderRepositoryService;
 import com.yc.ship.module.trade.service.order.TradeOrderService;
@@ -243,6 +245,9 @@ public class OtcTradeOrderServiceImpl implements OtcTradeOrderService {
     @Resource
     private RedissonClient redissonClient;
 
+    @Resource
+    private TradePublishUtils tradePublishUtils;
+
 
     public final static String AGENCY_LOGIN_INFO = "agencyLoginInfo";
 
@@ -304,19 +309,19 @@ public class OtcTradeOrderServiceImpl implements OtcTradeOrderService {
     @Override
     public CommonResult<?> queryOrderStatus(Long orderId) {
         TradeOrderDO tradeOrderDO = tradeOrderRepositoryService.getById(orderId);
-        if (tradeOrderDO != null && tradeOrderDO.getOrderStatus()==6) {
+        if (tradeOrderDO != null && tradeOrderDO.getOrderStatus() == 6) {
             return CommonResult.success(orderId);
         }
-        return CommonResult.error(999,"待轮询");
+        return CommonResult.error(999, "待轮询");
     }
 
     @Override
     public CommonResult<?> queryDeposiOrderStatus(Long orderId) {
         TradeOrderDO tradeOrderDO = tradeOrderRepositoryService.getById(orderId);
-        if (tradeOrderDO != null && tradeOrderDO.getDeposiStatus()==2) {
+        if (tradeOrderDO != null && tradeOrderDO.getDeposiStatus() == 2) {
             return CommonResult.success(orderId);
         }
-        return CommonResult.error(999,"待轮询");
+        return CommonResult.error(999, "待轮询");
     }
 
     @Override
@@ -325,7 +330,7 @@ public class OtcTradeOrderServiceImpl implements OtcTradeOrderService {
         if (tradeOrderDO != null) {
             TradeOrderBindDO bindByOrder = tradeOrderRepositoryService.getBindByOrder(orderId);
             tradeOrderDO.setBindOrder(bindByOrder);
-            List<TradeOrderAuditDO> tradeOrderAuditList = tradeOrderAuditMapper.selectNewAuditorByOrderId(orderId,1);
+            List<TradeOrderAuditDO> tradeOrderAuditList = tradeOrderAuditMapper.selectNewAuditorByOrderId(orderId, 1);
             tradeOrderAuditList.forEach(item -> {
                 AdminUserRespDTO user = adminUserApi.getUser(item.getAuditUser());
                 item.setAuditUserName(user != null ? user.getUsername() : "未知");
@@ -342,7 +347,7 @@ public class OtcTradeOrderServiceImpl implements OtcTradeOrderService {
         if (tradeOrderDO != null) {
             TradeOrderBindDO bindByOrder = tradeOrderRepositoryService.getBindByOrder(orderId);
             tradeOrderDO.setBindOrder(bindByOrder);
-            List<TradeOrderAuditDO> tradeOrderAuditList = tradeOrderAuditMapper.selectNewAuditorByOrderId(orderId,3);
+            List<TradeOrderAuditDO> tradeOrderAuditList = tradeOrderAuditMapper.selectNewAuditorByOrderId(orderId, 3);
             tradeOrderAuditList.forEach(item -> {
                 AdminUserRespDTO user = adminUserApi.getUser(item.getAuditUser());
                 item.setAuditUserName(user != null ? user.getUsername() : "未知");
@@ -393,10 +398,12 @@ public class OtcTradeOrderServiceImpl implements OtcTradeOrderService {
                 extMap.put("result", "审核通过");
                 TradeOrderLogUtils.setOrderInfo(orderId, tradeOrderDO.getOrderStatus(), TradeOrderStatusEnum.UNPAID.getStatus(), extMap);
             } else {
+                AuditUserDO auditUserDO = auditUserMapper.selectOne(new QueryWrapper<AuditUserDO>().eq("type", tradeOrderDO.getAuditType()).eq("audit_status", tradeOrderDO.getAuditStatus() + 1).last("limit 1"));
                 tradeOrderMapper.update(Wrappers.<TradeOrderDO>lambdaUpdate()
                         .set(TradeOrderDO::getAuditStatus, tradeOrderDO.getAuditStatus() + 1)
                         .set(TradeOrderDO::getUpdateTime, LocalDateTime.now())
                         .set(TradeOrderDO::getDeposiStatus, 0)
+                        .set(TradeOrderDO::getAuditUser, auditUserDO.getAuditUser())
                         .eq(TradeOrderDO::getId, orderId)
                 );
                 Map<String, Object> extMap = new HashMap<>();
@@ -514,10 +521,12 @@ public class OtcTradeOrderServiceImpl implements OtcTradeOrderService {
                 extMap.put("result", "审核通过");
                 TradeOrderLogUtils.setOrderInfo(orderId, tradeOrderDO.getOrderStatus(), TradeOrderStatusEnum.UNPAID.getStatus(), extMap);
             } else {
+                AuditUserDO auditUserDO = auditUserMapper.selectOne(new QueryWrapper<AuditUserDO>().eq("type", tradeOrderDO.getAuditType()).eq("audit_status", tradeOrderDO.getAuditStatus() + 1).last("limit 1"));
                 tradeOrderMapper.update(Wrappers.<TradeOrderDO>lambdaUpdate()
                         .set(TradeOrderDO::getAuditStatus, tradeOrderDO.getAuditStatus() + 1)
                         .set(TradeOrderDO::getUpdateTime, LocalDateTime.now())
                         .set(TradeOrderDO::getDeposiStatus, 0)
+                        .set(TradeOrderDO::getAuditUser, auditUserDO.getAuditUser())
                         .eq(TradeOrderDO::getId, orderId)
                 );
                 Map<String, Object> extMap = new HashMap<>();
@@ -538,7 +547,7 @@ public class OtcTradeOrderServiceImpl implements OtcTradeOrderService {
             tradeOrderAuditDO.setAuditType(3);
             tradeOrderAuditDO.setTenantId(tradeOrderDO.getTenantId());
             tradeOrderAuditDO.setAuditCurrentStatus(tradeOrderDO.getAuditStatus());
-                tradeOrderAuditDO.setOrderNo(tradeOrderDO.getOrderNo());
+            tradeOrderAuditDO.setOrderNo(tradeOrderDO.getOrderNo());
             tradeOrderAuditDO.setOrderId(tradeOrderDO.getId());
             tradeOrderAuditMapper.insert(tradeOrderAuditDO);
             //审核 不通过还原到修改前订单
@@ -1515,7 +1524,7 @@ public class OtcTradeOrderServiceImpl implements OtcTradeOrderService {
             shipTradeOrderCreateReqVO.setRealMoney(realAmount);
             shipTradeOrderCreateReqVO.setIsRead(0);
             shipTradeOrderCreateReqVO.setDeposi(createVO.getSummary().getDeposi());
-            shipTradeOrderCreateReqVO.setOrderSort(maxOrderNo+1);
+            shipTradeOrderCreateReqVO.setOrderSort(maxOrderNo + 1);
             shipTradeOrderCreateReqVO.setOtherMoney(otherMoney);
 
             ShipTradeOrderCreateReqVO.OrderUser orderUser = new ShipTradeOrderCreateReqVO.OrderUser();
@@ -1576,7 +1585,7 @@ public class OtcTradeOrderServiceImpl implements OtcTradeOrderService {
                     TradeVistorReqVO tradeVistorReqVO = createVO.getTourist().stream().filter(v -> v.getId().equals(touristId)).findFirst().orElseGet(TradeVistorReqVO::new);
                     ShipTradeOrderCreateReqVO.Visitor visitor = getVisitor1(tradeVistorReqVO);
                     visitorList1.add(visitor);
-                    BigDecimal price = tradeSpuReqVO.getPrice()==null?BigDecimal.ZERO:tradeSpuReqVO.getPrice();
+                    BigDecimal price = tradeSpuReqVO.getPrice() == null ? BigDecimal.ZERO : tradeSpuReqVO.getPrice();
                     spuMoney = spuMoney.add(price);
                 }
                 orderDetail1.setVisitorList(visitorList1);
@@ -1632,8 +1641,8 @@ public class OtcTradeOrderServiceImpl implements OtcTradeOrderService {
             orderPolicyMapper.deleteByOrderId(orderId);
             List<OrderPolicyDO> orderPolicyDOList = new ArrayList<>();
             List<TradeOrderPolicyReqVO> policyList = createVO.getPolicyList();
-            if(policyList != null) {
-                policyList.stream().forEach(policy -> {
+            if (policyList != null) {
+                policyList.forEach(policy -> {
                     OrderPolicyDO orderPolicyDO = new OrderPolicyDO();
                     orderPolicyDO.setOrderId(orderId);
                     orderPolicyDO.setOrderNo(orderNo);
@@ -1651,27 +1660,40 @@ public class OtcTradeOrderServiceImpl implements OtcTradeOrderService {
                     orderPolicyDO.setRooms(policy.getRooms());
                     orderPolicyDOList.add(orderPolicyDO);
                 });
-                if (orderPolicyDOList.size() > 0) {
+                if (!orderPolicyDOList.isEmpty()) {
                     //TODO: 判断优惠政策是否需要审核
                     orderPolicyMapper.insertBatch(orderPolicyDOList);
                 }
             }
 
             int auditType = 0;
-            BigDecimal leaderTotalMoney = summary.getLeaderTotalMoney();
-            if (leaderTotalMoney != null && leaderTotalMoney.compareTo(new BigDecimal(0)) > 0) {
-                auditType = 3;
+            BigDecimal leaderAmount1 = summary.getLeaderAmount();
+            BigDecimal withAmount1 = summary.getWithAmount();
+            BigDecimal otherMoney1 = summary.getOtherMoney();
+            if (!CollUtil.isEmpty(createVO.getPolicyList())) {
+                auditType = 2;
             }
             if (deposi != null && deposi.compareTo(new BigDecimal(0)) > 0) {
                 auditType = 3;
             }
+            if (leaderAmount1 != null && leaderAmount1.compareTo(new BigDecimal(0)) > 0) {
+                auditType = 4;
+            }
+            if (withAmount1 != null && withAmount1.compareTo(new BigDecimal(0)) > 0) {
+                auditType = 4;
+            }
+            if (otherMoney1 != null && otherMoney1.compareTo(new BigDecimal(0)) > 0) {
+                auditType = 4;
+            }
             if (auditType > 0 && createVO.getIsYd() != 1) {
-                tradeOrderMapper.update(new UpdateWrapper<TradeOrderDO>().set("audit_type", auditType).set("order_status", TradeOrderStatusEnum.TRANSFER).set("audit_status", 1).eq("id", orderId));
+                AuditUserDO auditUserDO = auditUserMapper.selectOne(new LambdaQueryWrapperX<AuditUserDO>().eq(AuditUserDO::getType, auditType).eq(AuditUserDO::getAuditStatus, 1).eq(AuditUserDO::getDeleted, 0).orderByDesc(AuditUserDO::getCreateTime).last("limit 1"));
+                tradeOrderMapper.update(new UpdateWrapper<TradeOrderDO>().set("audit_type", auditType).set("order_status", TradeOrderStatusEnum.TRANSFER).set("audit_user",auditUserDO.getAuditUser()).set("audit_status", 1).eq("id", orderId));
             }
             if (!tradeOrderRoomDOList.isEmpty()) {
                 tradeOrderRoomModelMapper.deleteByOrderId(orderId);
                 tradeOrderRoomModelMapper.insertBatch(tradeOrderRoomDOList);
             }
+            tradePublishUtils.publishOrderCreateSuccessMsg(orderId + "");
             OtcTradeOrderCreateRespVO respVO = TradeOrderConvert.INSTANCE.convert(result.getData());
             return CommonResult.success(respVO);
         } finally {
@@ -1758,7 +1780,7 @@ public class OtcTradeOrderServiceImpl implements OtcTradeOrderService {
                 tradeOrderBindDO.setCustom("");
                 tradeOrderBindDO.setRemark("modify订单金额修改,订单金额:" + orderMoney + ",订单修改后实际金额:" + realAmount);
                 shipTradeOrderCreateReqVO.setTradeOrderBindDO(tradeOrderBindDO);
-            } else if ( createVO.getSummary().getDeposi() != null &&  !Objects.equals(shipTradeOrderCreateReqVO.getDeposi(), tradeOrderDO.getDeposi())) {
+            } else if (createVO.getSummary().getDeposi() != null && !Objects.equals(shipTradeOrderCreateReqVO.getDeposi(), tradeOrderDO.getDeposi())) {
                 shipTradeOrderCreateReqVO.setConfirmType(1);
                 TradeOrderBindDO tradeOrderBindDO = new TradeOrderBindDO();
                 tradeOrderBindDO.setId(IdWorker.getId());
@@ -1833,7 +1855,7 @@ public class OtcTradeOrderServiceImpl implements OtcTradeOrderService {
                     TradeVistorReqVO tradeVistorReqVO = createVO.getTourist().stream().filter(v -> v.getId().equals(touristId)).findFirst().orElseGet(TradeVistorReqVO::new);
                     ShipTradeOrderCreateReqVO.Visitor visitor = getVisitor1(tradeVistorReqVO);
                     visitorList1.add(visitor);
-                    BigDecimal price = tradeSpuReqVO.getPrice()==null?BigDecimal.ZERO:tradeSpuReqVO.getPrice();
+                    BigDecimal price = tradeSpuReqVO.getPrice() == null ? BigDecimal.ZERO : tradeSpuReqVO.getPrice();
                     spuMoney = spuMoney.add(price);
                 }
                 orderDetail1.setVisitorList(visitorList1);
@@ -1862,7 +1884,7 @@ public class OtcTradeOrderServiceImpl implements OtcTradeOrderService {
             shipTradeOrderCreateReqVO.setOldtradeOrderTotalDO(oldTradeOrderTotal);
             TradeOrderTotalDO tradeOrderTotalDO = BeanUtils.toBean(summary, TradeOrderTotalDO.class);
             List<TradeVisitorDO> oldvisitorDOList = tradeVisitorMapper.selectList(new LambdaQueryWrapper<TradeVisitorDO>().eq(TradeVisitorDO::getOrderId, tradeOrderDO.getId()));
-            String changedFields0="";
+            String changedFields0 = "";
             AtomicReference<String> oldCardNo = new AtomicReference<>("");
             AtomicReference<String> newCardNo = new AtomicReference<>("");
             oldvisitorDOList.forEach(v -> {
@@ -1873,8 +1895,8 @@ public class OtcTradeOrderServiceImpl implements OtcTradeOrderService {
             });
             for (TradeVistorReqVO tradeVistorReqVO : createVO.getTourist()) {
                 String cardNo = tradeVistorReqVO.getCardNo();
-                if(!StringUtils.isEmpty(cardNo)) {
-                    List<TradeVisitorDO> collect = oldvisitorDOList.stream().filter(v -> StringUtils.equals(cardNo,v.getCredentialNo())).collect(Collectors.toList());
+                if (!StringUtils.isEmpty(cardNo)) {
+                    List<TradeVisitorDO> collect = oldvisitorDOList.stream().filter(v -> StringUtils.equals(cardNo, v.getCredentialNo())).collect(Collectors.toList());
                     if (collect.isEmpty()) {
                         auditType = 3;
                         changedFields0 = "游客信息发生变更:" + oldCardNo.get() + "->" + newCardNo.get();
@@ -1887,7 +1909,7 @@ public class OtcTradeOrderServiceImpl implements OtcTradeOrderService {
             String changedFields1 = com.yc.ship.module.trade.utils.BeanUtils.getChangedFields(oldTradeOrderTotal, tradeOrderTotalDO);
             System.err.println("changedFields1=" + changedFields1);
 
-            shipTradeOrderCreateReqVO.setChangedFields1(changedFields0+";"+changedFields1);
+            shipTradeOrderCreateReqVO.setChangedFields1(changedFields0 + ";" + changedFields1);
             CommonResult<TradeOrderRespDTO> result = doShipModifyOrder(loginUser, shipTradeOrderCreateReqVO);
             if (result.isError()) {
                 return CommonResult.error(result.getCode(), result.getMsg());
@@ -1914,13 +1936,26 @@ public class OtcTradeOrderServiceImpl implements OtcTradeOrderService {
                 tradeOrderRoomModelDO.setOrderNo(orderNo);
                 list.add(tradeOrderRoomModelDO);
             });
-            if (!Objects.equals(shipTradeOrderCreateReqVO.getRemark(), tradeOrderDO.getRemark()) || !Objects.equals(shipTradeOrderCreateReqVO.getLinkMobile(), tradeOrderDO.getLinkMobile())  || !Objects.equals(shipTradeOrderCreateReqVO.getLinkMan(), tradeOrderDO.getLinkMan()) ) {
+            BigDecimal oldleaderAmount = oldTradeOrderTotal.getLeaderAmount();
+            BigDecimal oldwithAmount = oldTradeOrderTotal.getWithAmount();
+            BigDecimal oldotherMoney = oldTradeOrderTotal.getOtherMoney();
+
+            BigDecimal leaderAmount = summary.getLeaderAmount();
+            BigDecimal withAmount = summary.getWithAmount();
+            BigDecimal otherMoney = summary.getOtherMoney();
+            if (!Objects.equals(shipTradeOrderCreateReqVO.getRemark(), tradeOrderDO.getRemark()) || !Objects.equals(shipTradeOrderCreateReqVO.getLinkMobile(), tradeOrderDO.getLinkMobile()) || !Objects.equals(shipTradeOrderCreateReqVO.getLinkMan(), tradeOrderDO.getLinkMan())) {
+                auditType = 2;
+            }
+            if (!CollUtil.isEmpty(createVO.getPolicyList())) {
                 auditType = 2;
             }
             if (!Objects.equals(shipTradeOrderCreateReqVO.getAmount(), tradeOrderDO.getAmount()) && loginUser.getDistributorId() == null) {
                 auditType = 3;
             }
-            if (!Objects.equals(shipTradeOrderCreateReqVO.getDeposi(), tradeOrderDO.getDeposi()) ) {
+            if (!Objects.equals(shipTradeOrderCreateReqVO.getDeposi(), tradeOrderDO.getDeposi())) {
+                auditType = 3;
+            }
+            if (!Objects.equals(oldleaderAmount, leaderAmount) || !Objects.equals(oldwithAmount, withAmount) || !Objects.equals(oldotherMoney, otherMoney)) {
                 auditType = 3;
             }
             if (!Objects.equals(shipTradeOrderCreateReqVO.getAmount(), tradeOrderDO.getAmount()) && loginUser.getDistributorId() != null) {
@@ -1928,11 +1963,11 @@ public class OtcTradeOrderServiceImpl implements OtcTradeOrderService {
             }
             String msg = "";
             if (auditType > 0 && createVO.getIsYd() != 1) {
-                AuditUserDO auditUserDO = auditUserMapper.selectOne(new LambdaQueryWrapperX<AuditUserDO>().eq(AuditUserDO::getType, auditType).eq(AuditUserDO::getDeleted, 0).orderByDesc(AuditUserDO::getCreateTime).last("limit 1"));
+                AuditUserDO auditUserDO = auditUserMapper.selectOne(new LambdaQueryWrapperX<AuditUserDO>().eq(AuditUserDO::getType, auditType).eq(AuditUserDO::getAuditStatus, 1).eq(AuditUserDO::getDeleted, 0).orderByDesc(AuditUserDO::getCreateTime).last("limit 1"));
                 tradeOrderMapper.update(new UpdateWrapper<TradeOrderDO>().set("audit_type", auditType).set("audit_user", auditUserDO == null ? "" : auditUserDO.getAuditUser()).set("order_status", TradeOrderStatusEnum.TRANSFER.getStatus()).set("audit_status", 1).eq("id", neworderId));
                 msg = "修改提交成功,等待管理员审核";
-            }else if(shipTradeOrderCreateReqVO.getDeposi().compareTo(BigDecimal.ZERO) > 0 && createVO.getIsYd() != 1 && Objects.equals(tradeOrderDO.getOrderStatus(), TradeOrderStatusEnum.YD.getStatus())){
-                AuditUserDO auditUserDO = auditUserMapper.selectOne(new LambdaQueryWrapperX<AuditUserDO>().eq(AuditUserDO::getType, 3).eq(AuditUserDO::getDeleted, 0).orderByDesc(AuditUserDO::getCreateTime).last("limit 1"));
+            } else if (shipTradeOrderCreateReqVO.getDeposi().compareTo(BigDecimal.ZERO) > 0 && createVO.getIsYd() != 1 && Objects.equals(tradeOrderDO.getOrderStatus(), TradeOrderStatusEnum.YD.getStatus())) {
+                AuditUserDO auditUserDO = auditUserMapper.selectOne(new LambdaQueryWrapperX<AuditUserDO>().eq(AuditUserDO::getType, 3).eq(AuditUserDO::getAuditStatus, 1).eq(AuditUserDO::getDeleted, 0).orderByDesc(AuditUserDO::getCreateTime).last("limit 1"));
                 tradeOrderMapper.update(new UpdateWrapper<TradeOrderDO>().set("audit_type", 3).set("audit_user", auditUserDO == null ? "" : auditUserDO.getAuditUser()).set("order_status", TradeOrderStatusEnum.TRANSFER.getStatus()).set("audit_status", 1).eq("id", neworderId));
                 msg = "修改提交成功,等待管理员审核";
             }
@@ -1947,8 +1982,8 @@ public class OtcTradeOrderServiceImpl implements OtcTradeOrderService {
             orderPolicyMapper.deleteByOrderId(orderId);
             List<OrderPolicyDO> orderPolicyDOList = new ArrayList<>();
             List<TradeOrderPolicyReqVO> policyList = createVO.getPolicyList();
-            if(policyList != null) {
-                policyList.stream().forEach(policy -> {
+            if (policyList != null) {
+                policyList.forEach(policy -> {
                     OrderPolicyDO orderPolicyDO = new OrderPolicyDO();
                     orderPolicyDO.setOrderId(orderId);
                     orderPolicyDO.setOrderNo(orderNo);
@@ -1966,12 +2001,12 @@ public class OtcTradeOrderServiceImpl implements OtcTradeOrderService {
                     orderPolicyDO.setRooms(policy.getRooms());
                     orderPolicyDOList.add(orderPolicyDO);
                 });
-                if (orderPolicyDOList.size() > 0) {
+                if (!orderPolicyDOList.isEmpty()) {
                     //TODO: 判断优惠政策是否需要审核
                     orderPolicyMapper.insertBatch(orderPolicyDOList);
                 }
             }
-
+            tradePublishUtils.publishOrderCreateSuccessMsg(neworderId + "");
             OtcTradeOrderCreateRespVO respVO = TradeOrderConvert.INSTANCE.convert(result.getData());
             return CommonResult.success(respVO, msg);
         } finally {
@@ -1994,7 +2029,7 @@ public class OtcTradeOrderServiceImpl implements OtcTradeOrderService {
         List<PriceRoomModelTypeDO> roomModelTypes = priceRoomModelTypeService.getByIds(roomModelTypeIds);
         Map<Long, PriceRoomModelTypeDO> roomModelTypeMap = CollectionUtils.convertMap(roomModelTypes, PriceRoomModelTypeDO::getId);
         roomModelList.forEach(item -> {
-            if(roomModelTypeMap!=null) {
+            if (roomModelTypeMap != null) {
                 PriceRoomModelTypeDO roomModelTypeDO = roomModelTypeMap.get(item.getRoomModelTypeId());
                 if (roomModelTypeDO != null) {
                     item.setRoomModelTypeName(roomModelTypeDO.getTypeName());
@@ -2025,7 +2060,7 @@ public class OtcTradeOrderServiceImpl implements OtcTradeOrderService {
         TradeOrderTotalDO tradeOrderTotalDO = tradeOrderTotalMapper.selectOne(TradeOrderTotalDO::getOldOrderId, id);
         TradeOrderTotalVO summary = BeanUtils.toBean(tradeOrderTotalDO, TradeOrderTotalVO.class);
         // 会为null,导致前端报错
-        if(summary == null) {
+        if (summary == null) {
             summary = new TradeOrderTotalVO();
         }
         orderRespNewVO.setSummary(summary);
@@ -2377,4 +2412,18 @@ public class OtcTradeOrderServiceImpl implements OtcTradeOrderService {
             }
         }
     }
+
+    @Override
+    public CommonResult<?> updateStatus(Long orderId, Integer status) {
+        TradeOrderDO tradeOrderDO = tradeOrderMapper.selectById(orderId);
+        if (tradeOrderDO == null) {
+            return CommonResult.error(ORDER_NOT_EXIST);
+        }
+        tradeOrderMapper.update(Wrappers.<TradeOrderDO>lambdaUpdate()
+                .set(TradeOrderDO::getOrderStatus, status)
+                .set(TradeOrderDO::getUpdateTime, LocalDateTime.now())
+                .eq(TradeOrderDO::getId, orderId)
+        );
+        return CommonResult.success("修改成功");
+    }
 }

+ 25 - 1
ship-module-trade/ship-module-trade-biz/src/main/resources/mapper/order/TradeDetailMapper.xml

@@ -1341,7 +1341,31 @@
         and t7.deleted = 0
         and t8.deleted = 0
         and t7.is_use = 1
-        and t7.send_type=#{type}
+        and t7.send_type=3
+        and t6.send_type=#{type}
+        and t1.id=#{orderId}
+        GROUP BY t1.id
+
+    </select>
+    <select id="selectCreateOrderSmsInfo" resultType="com.yc.ship.module.trade.controller.admin.smsSendconfig.vo.SmsSendconfigQueryRespVO">
+        select t7.*,t1.group_no groupNo,t2.product_id,t2.product_name,t66.name voyageName,t66.start_time,t66.leave_time,t77.name shipName,t67.name routeName,t1.order_no,t1.seller_id,t2.use_date,count(distinct t2.id) num,t1.source_name,t1.link_man contact_name,t1.link_mobile mobile,t6.params templateParams,t6.api_template_id,t8.api_key,t8.api_secret,t8.api_url,t8.signature,t8.code channelCode from
+        trade_order t1
+        inner join trade_detail t2 on t1.id = t2.order_id
+        inner join trade_order_user t3 on t3.order_id = t1.id
+        inner join product_voyage t66 on t66.id = t1.voyage_id
+        inner join resource_route t67 on t66.route_id = t67.id
+        inner join resource_ship t77 on t77.id = t1.ship_id
+        left join system_sms_product t5 on (t67.id=t5.product_id )
+        left join system_sms_sendconfig t7 on t7.id = t5.sms_template_id
+        left join system_sms_template t6 on t7.sms_template_id = t6.id
+        left join system_sms_channel t8 on t8.id = t6.channel_id
+        where  t2.voucher_status =0
+        and t2.deleted = 0
+        and t7.deleted = 0
+        and t8.deleted = 0
+        and t7.is_use = 1
+        and t7.send_type=3
+        and t6.send_type=#{type}
         and t1.id=#{orderId}
         GROUP BY t1.id
 

+ 2 - 2
ship-module-trade/ship-module-trade-biz/src/main/resources/mapper/order/TradeOrderMapper.xml

@@ -352,10 +352,10 @@
         <if test="vo.travelStatus != null">
             AND td.travel_status = #{vo.travelStatus}
         </if>
-        <if test="vo.roomModelId != null">
+        <if test="vo.roomModelId != null and vo.roomModelId != ''">
             AND torm.room_model_id = #{vo.roomModelId}
         </if>
-        <if test="vo.floor != null">
+        <if test="vo.floor != null and vo.floor != ''">
             AND torm.floor = #{vo.floor}
         </if>
         <if test="vo.orderRefundDateStart != null and vo.orderRefundDateEnd != ''">

+ 4 - 4
ship-module-trade/ship-module-trade-biz/src/main/resources/mapper/order/TradeVisitorMapper.xml

@@ -195,7 +195,7 @@
 
     <select id="queryVisitorByVovageId" resultType="java.lang.Integer">
         select count(*) from trade_visitor t1 inner join trade_order t2 on t1.order_id=t2.id
-        where t1.credential_no=#{credentialNo} and t2.voyage_id=#{voyageId}
+        where t1.credential_no=#{credentialNo} and t2.voyage_id=#{voyageId} and t2.order_no!=#{orderNo}
     </select>
 
     <select id="selectListByVoyageId" resultType="com.yc.ship.module.trade.dal.dataobject.order.TradeVisitorDO">
@@ -219,11 +219,11 @@
         select t1.order_no orderNo,t1.group_no groupNo,t1.order_status orderStatus,t1.source_name sourceName,t3.name name,t3.gender gender,t3.credential_no credentialNo,t7.name nationality,t3.birthday birthday,t3.mobile mobile,t3.age age,t3.mobile mobile,t5.short_name roomModelName,t3.floor floor,t6.room_num roomName,t2.price price,t3.remark remark
         from trade_order t1 inner join trade_detail t2 on t1.id=t2.order_id and t2.product_type = 0 and t2.deleted = 0
         inner join trade_visitor t3 on t2.visitor_id=t3.id and t3.deleted =0
-        inner join trade_order_room_model t4 on t3.room_index_id=t4.room_index_id and t4.deleted=0
-        inner join resource_room_model t5 on t4.room_model_id = t5.id and t5.deleted=0
+        left join trade_order_room_model t4 on t3.room_index_id=t4.room_index_id and t4.deleted=0
+        left join resource_room_model t5 on t4.room_model_id = t5.id and t5.deleted=0
         left join resource_room t6 on t3.room_id = t6.id and t6.deleted=0
         left join area t7 on t3.nationality = t7.id
-        where t1.order_status in (14, 13, 11, 10, 12, 9, 8, 7, 6, 5, 4, 3, 2, 1)
+        where t1.order_status in (15, 14, 13, 11, 10, 12, 9, 8, 7, 6, 5, 4, 3, 2, 1)
         <if test="vo.orderNo != null and vo.orderNo != ''">
             AND t1.order_no = #{vo.orderNo}
         </if>

+ 25 - 3
ship-module-trade/ship-module-trade-biz/src/main/resources/mapper/orderjzdetail/OrderJzDetailMapper.xml

@@ -10,10 +10,14 @@
 
     <select id="selectPage2"
             resultType="com.yc.ship.module.trade.dal.dataobject.orderjzdetail.OrderJzDetailDO">
-        select d.*
+        select distinct d.* , r.direction , rm.name as room_model_name
         from trade_order_jz_detail d
-                 inner join trade_order_jz oz on d.jz_id = oz.id
-                 inner join trade_order o on o.deleted = 0 and o.id = oz.order_id
+        inner join trade_order_jz oz on d.jz_id = oz.id
+        inner join trade_order o on o.deleted = 0 and o.id = oz.order_id
+        inner join product_voyage v on o.voyage_id = v.id
+        inner join resource_route r on v.route_id = r.id
+        inner join trade_visitor u on u.credential_no = d.id_card
+        inner join resource_room_model rm on u.room_model_id = rm.id
         where d.deleted = 0 and o.voyage_id = #{vo.voyageId}
         <if test="vo.idCard != null">
             and d.id_card like concat('%', #{vo.idCard}, '%')
@@ -21,8 +25,26 @@
         <if test="vo.name != null">
             and d.name like concat('%', #{vo.name}, '%')
         </if>
+        <if test="vo.address != null">
+            and d.address = #{vo.address}
+        </if>
+        <if test="vo.arriveTime != null">
+            and d.arrive_time = #{vo.arriveTime}
+        </if>
         order by d.address asc, d.arrive_time asc, d.batch_no asc
     </select>
+    <select id="selectPage3" resultType="map">
+        select distinct o.id, o.order_no, r.direction , v.name, v.credential_no, v.mobile
+        from trade_order o
+        inner join product_voyage p on o.voyage_id = p.id
+        inner join resource_route r on p.route_id = r.id
+        inner join trade_visitor v on o.id = v.order_id
+        where o.deleted = 0 and p.deleted = 0 and r.deleted = 0 and v.deleted = 0
+        and  o.voyage_id =  #{vo.voyageId}
+        <if test="vo.queryCode != null">
+          and (v.credential_no like concat('%', #{vo.queryCode}, '%') or v.mobile like concat('%', #{vo.queryCode}, '%')  or o.order_no like concat('%', #{vo.queryCode}, '%'))
+        </if>
+    </select>
 
     <update id="cleanSign">
         update trade_order_jz_detail set sign_time = null, sign_man = null, sign_remark = null, sign_image = null

+ 12 - 15
ship-module-trade/ship-module-trade-biz/src/main/resources/mapper/smsSendconfig/SmsSendconfigMapper.xml

@@ -9,22 +9,18 @@
         文档可见:https://www.iocoder.cn/MyBatis/x-plugins/
      -->
     <select id="querySendList" resultType="com.yc.ship.module.trade.controller.admin.smsSendconfig.vo.SmsSendconfigQueryRespVO">
-        select * from (
-        select t1.*,t4.group_no groupNo,t66.name voyageName,t77.name shipName,t67.name routeName ,t2.product_id,t3.product_name,tt2.short_name,t4.order_no,t3.use_date,count(1)
-        num,t4.source_name,t5.contact_name,t5.mobile,t7.api_template_id,t7.params templateParams,t8.api_key,t8.api_secret,t8.api_url,t8.signature,t8.code channelCode from
-        system_sms_sendconfig t1
-        inner join system_sms_product t2 on t1.id = t2.sms_template_id
-        inner join trade_detail t3 on t2.product_id = t3.product_id
-        inner join product_spu tt2 on t3.product_id = tt2.id
-        inner join trade_order t4 on t3.order_id = t4.id
-        inner join trade_order_user t5 on t4.id=t5.order_id
-        inner join product_voyage t66 on t66.id = t4.voyage_id
+        select * from (select t7.*,t1.group_no groupNo,t2.product_id,t2.product_name,t66.name voyageName,t66.start_time,t66.leave_time,t77.name shipName,t67.name routeName,t1.order_no,t1.seller_id,t2.use_date,count(distinct t2.id) num,t1.source_name,t1.link_man contact_name,t1.link_mobile mobile,t1.group_no,t6.params templateParams,t6.api_template_id,t8.api_key,t8.api_secret,t8.api_url,t8.signature,t8.code channelCode from
+        trade_order t1
+        inner join trade_detail t2 on t1.id = t2.order_id
+        inner join trade_order_user t3 on t3.order_id = t1.id
+        inner join product_voyage t66 on t66.id = t1.voyage_id
         inner join resource_route t67 on t66.route_id = t67.id
-        inner join resource_ship t77 on t77.id = t4.ship_id
-        inner join system_sms_template t7 on t1.sms_template_id=t7.id
-        inner join system_sms_channel t8 on t8.id = t7.channel_id
-        where t3.use_date <![CDATA[ >= ]]> DATE_SUB(CURDATE(), INTERVAL 0 DAY) and t3.use_date <![CDATA[ <=]]>
-        DATE_SUB(CURDATE(), INTERVAL -1 DAY)
+        inner join resource_ship t77 on t77.id = t1.ship_id
+        inner join system_sms_product t5 on (t67.id=t5.product_id )
+        inner join system_sms_sendconfig t7 on t7.id = t5.sms_template_id
+        inner join system_sms_template t6 on t7.sms_template_id = t6.id
+        inner join system_sms_channel t8 on t8.id = t6.channel_id
+        where t2.use_date = DATE_SUB(CURDATE(), INTERVAL (t7.send_date_type-1) DAY)
         and t3.voucher_status in (1,2)
         and t1.deleted = 0
         and t2.deleted = 0
@@ -36,6 +32,7 @@
         <if test="type != null and type == 0">
             AND t1.send_type = 2
         </if>
+        and t6.send_type = 1
         GROUP BY t1.id,t4.id
         ) m	where  not EXISTS (
             select p1.order_no from system_sms_send_log p1 where status = 1 and m.order_no=p1.order_no and p1.sms_config_id = m.id