Browse Source

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

luofeiyun 3 weeks ago
parent
commit
5f925bbb51
18 changed files with 556 additions and 12 deletions
  1. 6 0
      ship-module-trade/ship-module-trade-biz/src/main/java/com/yc/ship/module/trade/controller/admin/order/vo/order/ShipTradeOrderCreateReqVO.java
  2. 4 1
      ship-module-trade/ship-module-trade-biz/src/main/java/com/yc/ship/module/trade/controller/admin/order/vo/order/TradeOrderOtcCreateVO.java
  3. 3 1
      ship-module-trade/ship-module-trade-biz/src/main/java/com/yc/ship/module/trade/controller/admin/order/vo/order/TradeOrderRespNewVO.java
  4. 31 0
      ship-module-trade/ship-module-trade-biz/src/main/java/com/yc/ship/module/trade/dal/mysql/smsSendconfig/MessageSendMapper.java
  5. 41 0
      ship-module-trade/ship-module-trade-biz/src/main/java/com/yc/ship/module/trade/job/OrderMessageForthJob.java
  6. 47 0
      ship-module-trade/ship-module-trade-biz/src/main/java/com/yc/ship/module/trade/job/OrderMessageJob.java
  7. 41 0
      ship-module-trade/ship-module-trade-biz/src/main/java/com/yc/ship/module/trade/job/OrderMessageThreeJob.java
  8. 41 0
      ship-module-trade/ship-module-trade-biz/src/main/java/com/yc/ship/module/trade/job/OrderMessageTwoJob.java
  9. 59 0
      ship-module-trade/ship-module-trade-biz/src/main/java/com/yc/ship/module/trade/service/order/handler/MessageHandler.java
  10. 5 2
      ship-module-trade/ship-module-trade-biz/src/main/java/com/yc/ship/module/trade/service/order/handler/MoblieMessageAliyunUtil.java
  11. 1 3
      ship-module-trade/ship-module-trade-biz/src/main/java/com/yc/ship/module/trade/service/order/handler/SmsHandler.java
  12. 10 3
      ship-module-trade/ship-module-trade-biz/src/main/java/com/yc/ship/module/trade/service/order/impl/TradeOrderServiceImpl.java
  13. 29 0
      ship-module-trade/ship-module-trade-biz/src/main/java/com/yc/ship/module/trade/service/otc/impl/OtcTradeOrderServiceImpl.java
  14. 30 0
      ship-module-trade/ship-module-trade-biz/src/main/java/com/yc/ship/module/trade/service/smsSendconfig/MessageSendService.java
  15. 125 0
      ship-module-trade/ship-module-trade-biz/src/main/java/com/yc/ship/module/trade/service/smsSendconfig/MessageSendServiceImpl.java
  16. 2 1
      ship-module-trade/ship-module-trade-biz/src/main/resources/mapper/orderjzdetail/OrderJzDetailMapper.xml
  17. 80 0
      ship-module-trade/ship-module-trade-biz/src/main/resources/mapper/smsSendconfig/MessageSendMapper.xml
  18. 1 1
      ship-module-trade/ship-module-trade-biz/src/main/resources/mapper/smsSendconfig/SmsSendconfigMapper.xml

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

@@ -252,6 +252,12 @@ public class ShipTradeOrderCreateReqVO implements Serializable {
         @NotNull(message = "产品类型不能为空")
         private Integer productType;
 
+        @Schema(description = "登船时间")
+        private Date boardingTime;
+
+        @Schema(description = "离开时间")
+        private Date leaveTime;
+
         @Schema(description = "单价", example = "")
         private BigDecimal price;
 

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

@@ -26,9 +26,12 @@ public class TradeOrderOtcCreateVO {
     @Schema(description = "订单联系人")
     private String linkMan;
 
-    @Schema(description = "时间")
+    @Schema(description = "登船时间")
     private Date boardingTime;
 
+    @Schema(description = "离开时间")
+    private Date leaveTime;
+
     @Schema(description = "联系人手机")
     private String linkMobile;
 

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

@@ -187,9 +187,11 @@ public class TradeOrderRespNewVO {
     private String roomModelDetails;
 
     @Schema(description = "审核人")
-    @ExcelProperty("审核人")
     private String auditUser;
 
+    @Schema(description = "审核角色名称")
+    private String auditUserName;
+
     @Schema(description = "审核时间")
     @ExcelProperty("审核时间")
     @JsonFormat(shape = JsonFormat.Shape.STRING,pattern = FORMAT_YEAR_MONTH_DAY_HOUR_MINUTE_SECOND, timezone = TIME_ZONE_DEFAULT)

+ 31 - 0
ship-module-trade/ship-module-trade-biz/src/main/java/com/yc/ship/module/trade/dal/mysql/smsSendconfig/MessageSendMapper.java

@@ -0,0 +1,31 @@
+package com.yc.ship.module.trade.dal.mysql.smsSendconfig;
+
+
+import com.yc.ship.framework.mybatis.core.mapper.BaseMapperX;
+import com.yc.ship.module.trade.controller.admin.smsSendconfig.vo.SmsSendconfigQueryRespVO;
+import com.yc.ship.module.trade.dal.dataobject.smsSendconfig.SmsSendconfigDO;
+import org.apache.ibatis.annotations.Mapper;
+import org.apache.ibatis.annotations.Param;
+
+import java.util.List;
+
+/**
+ * 短信发送配置 Mapper
+ *
+ * @author 管理员
+ */
+@Mapper
+public interface MessageSendMapper extends BaseMapperX<SmsSendconfigDO> {
+
+    /***
+     * 初定状态确定提示
+     */
+    List<SmsSendconfigQueryRespVO> querySendList1(@Param("day") int day);
+
+    /***
+     * 确定状态支付提示
+     */
+    List<SmsSendconfigQueryRespVO> querySendList2(@Param("day") int day);
+
+
+}

+ 41 - 0
ship-module-trade/ship-module-trade-biz/src/main/java/com/yc/ship/module/trade/job/OrderMessageForthJob.java

@@ -0,0 +1,41 @@
+package com.yc.ship.module.trade.job;
+
+import com.yc.ship.framework.quartz.core.handler.JobHandler;
+import com.yc.ship.framework.tenant.core.job.TenantJob;
+import com.yc.ship.module.trade.service.smsSendconfig.MessageSendService;
+import lombok.extern.slf4j.Slf4j;
+import org.springframework.stereotype.Component;
+
+import javax.annotation.Resource;
+
+
+/**
+ * 订单站内信消息任务
+ *
+ * @author qsl
+ * @date 2023/03/06
+ */
+@Component
+@Slf4j
+public class OrderMessageForthJob implements JobHandler {
+    @Resource
+    private MessageSendService messageSendService;
+
+
+
+
+    @Override
+    @TenantJob
+    public String execute(String param) {
+        log.info(">>>>>>>>>>>>>>>>>>>>>> 开航前2天00:00仍未付款 <<<<<<<<<<<<<<<<<<<<<<");
+        try {
+            messageSendService.sendMsg4();
+        } catch (Exception e) {
+            log.error(">>>>>>>>>>>>>>>>>>>>>> 开航前2天00:00仍未付款 Error <<<<<<<<<<<<<<<<<<<<<<");
+            log.error(e.getMessage(), e);
+        }
+        log.info(">>>>>>>>>>>>>>>>>>>>>> 开航前2天00:00仍未付款 End  <<<<<<<<<<<<<<<<<<<<<<");
+        return "成功";
+    }
+
+}

+ 47 - 0
ship-module-trade/ship-module-trade-biz/src/main/java/com/yc/ship/module/trade/job/OrderMessageJob.java

@@ -0,0 +1,47 @@
+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.framework.tenant.core.job.TenantJob;
+import com.yc.ship.module.trade.service.smsSendconfig.MessageSendService;
+import com.yc.ship.module.trade.service.smsSendconfig.SmsSendconfigService;
+import lombok.extern.slf4j.Slf4j;
+import org.springframework.stereotype.Component;
+
+import javax.annotation.Resource;
+
+
+/**
+ * 订单站内信消息任务
+ *
+ * @author qsl
+ * @date 2023/03/06
+ */
+@Component
+@Slf4j
+public class OrderMessageJob implements JobHandler {
+    @Resource
+    private MessageSendService messageSendService;
+
+
+    /***
+     * @author qsl
+     * 2026/3/6 17:38
+     */
+    @Override
+    @TenantJob
+    public String execute(String param) {
+        log.info(">>>>>>>>>>>>>>>>>>>>>> 初定即将过期前 1 天(开航前 22 天 中午12:00) <<<<<<<<<<<<<<<<<<<<<<");
+        try {
+            messageSendService.sendMsg1();
+        } catch (Exception e) {
+            log.error(">>>>>>>>>>>>>>>>>>>>>> 初定即将过期前 Error <<<<<<<<<<<<<<<<<<<<<<");
+            log.error(e.getMessage(), e);
+        }
+        log.info(">>>>>>>>>>>>>>>>>>>>>> 初定即将过期前 1 天(开航前 22 天 中午12:00)End  <<<<<<<<<<<<<<<<<<<<<<");
+        return "成功";
+    }
+
+
+}

+ 41 - 0
ship-module-trade/ship-module-trade-biz/src/main/java/com/yc/ship/module/trade/job/OrderMessageThreeJob.java

@@ -0,0 +1,41 @@
+package com.yc.ship.module.trade.job;
+
+import com.yc.ship.framework.quartz.core.handler.JobHandler;
+import com.yc.ship.framework.tenant.core.job.TenantJob;
+import com.yc.ship.module.trade.service.smsSendconfig.MessageSendService;
+import lombok.extern.slf4j.Slf4j;
+import org.springframework.stereotype.Component;
+
+import javax.annotation.Resource;
+
+
+/**
+ * 订单站内信消息任务
+ *
+ * @author qsl
+ * @date 2023/03/06
+ */
+@Component
+@Slf4j
+public class OrderMessageThreeJob implements JobHandler {
+    @Resource
+    private MessageSendService messageSendService;
+
+
+
+
+    @Override
+    @TenantJob
+    public String execute(String param) {
+        log.info(">>>>>>>>>>>>>>>>>>>>>> 开航前7天提醒 中午12:00 <<<<<<<<<<<<<<<<<<<<<<");
+        try {
+            messageSendService.sendMsg3();
+        } catch (Exception e) {
+            log.error(">>>>>>>>>>>>>>>>>>>>>> 开航前7天提醒 中午12:00 Error <<<<<<<<<<<<<<<<<<<<<<");
+            log.error(e.getMessage(), e);
+        }
+        log.info(">>>>>>>>>>>>>>>>>>>>>> 开航前7天提醒 中午12:00 End  <<<<<<<<<<<<<<<<<<<<<<");
+        return "成功";
+    }
+
+}

+ 41 - 0
ship-module-trade/ship-module-trade-biz/src/main/java/com/yc/ship/module/trade/job/OrderMessageTwoJob.java

@@ -0,0 +1,41 @@
+package com.yc.ship.module.trade.job;
+
+import com.yc.ship.framework.quartz.core.handler.JobHandler;
+import com.yc.ship.framework.tenant.core.job.TenantJob;
+import com.yc.ship.module.trade.service.smsSendconfig.MessageSendService;
+import lombok.extern.slf4j.Slf4j;
+import org.springframework.stereotype.Component;
+
+import javax.annotation.Resource;
+
+
+/**
+ * 订单站内信消息任务
+ *
+ * @author qsl
+ * @date 2023/03/06
+ */
+@Component
+@Slf4j
+public class OrderMessageTwoJob implements JobHandler {
+    @Resource
+    private MessageSendService messageSendService;
+
+
+
+
+    @Override
+    @TenantJob
+    public String execute(String param) {
+        log.info(">>>>>>>>>>>>>>>>>>>>>> 初定即将过期前 1 天(开航前 21 天 10:00) <<<<<<<<<<<<<<<<<<<<<<");
+        try {
+            messageSendService.sendMsg2();
+        } catch (Exception e) {
+            log.error(">>>>>>>>>>>>>>>>>>>>>> 初定即将过期前 Error <<<<<<<<<<<<<<<<<<<<<<");
+            log.error(e.getMessage(), e);
+        }
+        log.info(">>>>>>>>>>>>>>>>>>>>>> 初定即将过期前 1 天(开航前 21 天 10:00)End  <<<<<<<<<<<<<<<<<<<<<<");
+        return "成功";
+    }
+
+}

+ 59 - 0
ship-module-trade/ship-module-trade-biz/src/main/java/com/yc/ship/module/trade/service/order/handler/MessageHandler.java

@@ -0,0 +1,59 @@
+package com.yc.ship.module.trade.service.order.handler;
+
+
+import com.yc.ship.module.infra.api.config.ConfigApi;
+import com.yc.ship.module.system.api.notify.NotifyMessageSendApi;
+import com.yc.ship.module.system.api.user.AdminUserApi;
+import com.yc.ship.module.trade.dal.dataobject.order.TradeOrderDO;
+import com.yc.ship.module.trade.service.order.TradeOrderRepositoryService;
+import lombok.extern.slf4j.Slf4j;
+import org.springframework.core.annotation.Order;
+import org.springframework.stereotype.Component;
+
+import javax.annotation.Resource;
+
+
+/**
+ * &#064;Description 保险处理
+ * &#064;Author qsl
+ * &#064;Date 2025/8/16 14:49
+ */
+@Component
+@Order(TradeOrderHandler.SMS_ORDER)
+@Slf4j
+public class MessageHandler implements TradeOrderHandler {
+
+
+    @Resource
+    private TradeOrderRepositoryService tradeOrderRepositoryService;
+    @Resource
+    private AdminUserApi adminUserApi;
+    @Resource
+    private ConfigApi configApi;
+    @Resource
+    private NotifyMessageSendApi notifyMessageSendApi;
+
+    @Override
+    public void processOrderCreateSuccess(TradeOrderDO tradeOrderDO) {
+        try {
+
+        } catch (Exception e) {
+            log.error("短信发送异常", e);
+        }
+    }
+
+    /***
+     * 转确认单发送 旅行社和直客
+     * 2026/3/6 17:28
+     */
+    @Override
+    public void afterProcessSuccess(TradeOrderDO tradeOrderDO) {
+        try {
+
+        } catch (Exception e) {
+            log.error("短信发送异常", e);
+        }
+    }
+
+
+}

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

@@ -95,9 +95,12 @@ public class MoblieMessageAliyunUtil {
 
     public static void main(String[] args) throws Exception{
         //您预定的${useDate}“长江游轮”即将开启.请您于${startTime}起前往 ${startAddr}登船,身份证即为船票,出行时请携带所有出行人的身份证原件,${endTime}将停止检票.请勿携带宠物、管制刀具等违禁物品登船,祝您旅途愉快!
-        String ss = "{\"boatName\":\"长江游轮\",\"orderNo\":\"SP202691203132\",\"routeName\":\"宜昌-重庆\",\"startTime\":\"2026-4-20\",\"jzTime\":\"2026年3月19日\"}";
+        String ss = "{\"boatName\":\"太阳神号游轮\",\"routeName\":\"航线\",\"startTime\":\"2026年05月01日\",\"jzTime\":\"2026年04月26日\"}";
+//        String ss = "{\"boatName\":\"1\",\"orderNo\":\"2\",\"routeName\":\"3\",\"startTime\":\"2026\",\"jzTime\":\"2026\"}";
+//        String ss = "{\"boatName\":\"1\",\"routeName\":\"3\"}";
 //        SendSmsResponse s = sendSms("LTAI5t9eyWeREnjqs3ozEP22","hdl5UOYVFGCXz9ZNwy8w1mEt8z8Lmz","长江行游轮","18628286025", ss, "SMS_501695562");
-        SendSmsResponse s = sendSms("LTAI5t68WFsQmRcgLUcpydhb","EzZp3TQa7Ah96htShNqb7m44PEGk8v","长江行游轮","18628286025", ss, "SMS_501695562");
+//        SendSmsResponse s = sendSms("LTAI5t68WFsQmRcgLUcpydhb","EzZp3TQa7Ah96htShNqb7m44PEGk8v","长江行游轮","18628286025", ss, "SMS_501695562");
+        SendSmsResponse s = sendSms("LTAI5t68WFsQmRcgLUcpydhb","EzZp3TQa7Ah96htShNqb7m44PEGk8v","长江行游轮","18628286025", ss, "SMS_501700557");
         System.out.println(s.getMessage());
 
 //        String input = "这是一个【date】示例【startTime】字符【content】串";

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

@@ -7,13 +7,11 @@ 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;
 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.sms.SmsBatchSendRespDTO;
 import com.yc.ship.module.trade.api.sms.dto.SmsSendLogDTO;
 import com.yc.ship.module.trade.controller.admin.smsSendconfig.vo.SmsSendconfigQueryRespVO;
 import com.yc.ship.module.trade.dal.dataobject.order.TradeOrderDO;
@@ -147,7 +145,7 @@ public class SmsHandler implements TradeOrderHandler {
             log.error("[下单成功短信发送参数]:" + smsSendconfigQueryRespVO.getApiTemplateId() + ";" + mobile + ";" + jsonObject.toString());
             SendSmsResponse result = MoblieMessageAliyunUtil.sendSms(appId, secretKey, signName, mobile, jsonObject.toString(), smsSendconfigQueryRespVO.getApiTemplateId() + "");
             log.error("[下单成功短信返回参数]:" + JSONUtil.toJsonStr(result));
-            if (result != null && result.getCode().equals("OK")) {
+            if (result != null && "OK".equals(result.getCode())) {
                 log.error("[下单成功短信发送成功]:" + mobile);
                 SmsSendLogDTO reqDTO = new SmsSendLogDTO();
                 reqDTO.setId(IdWorker.getId());

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

@@ -2,6 +2,7 @@ package com.yc.ship.module.trade.service.order.impl;
 
 import cn.hutool.core.collection.CollUtil;
 import cn.hutool.core.date.DateUtil;
+import cn.hutool.core.date.LocalDateTimeUtil;
 import cn.hutool.core.map.MapUtil;
 import cn.hutool.core.util.NumberUtil;
 import cn.hutool.core.util.ObjectUtil;
@@ -32,6 +33,7 @@ import com.yc.ship.module.product.service.voyage.VoyageService;
 import com.yc.ship.module.resource.api.ship.ShipApi;
 import com.yc.ship.module.resource.api.ship.dto.ShipRespDTO;
 import com.yc.ship.module.system.api.permission.RoleApi;
+import com.yc.ship.module.system.api.permission.dto.AdminRoleRespDTO;
 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.*;
@@ -163,6 +165,8 @@ public class TradeOrderServiceImpl implements TradeOrderService {
 
         List<AdminUserRespDTO> userList = adminUserApi.getUserList();
         Map<Long, String> userMap = new HashMap<>(userList.stream().collect(Collectors.toMap(AdminUserRespDTO::getId, AdminUserRespDTO::getNickname)));
+        List<AdminRoleRespDTO> roleList = roleApi.getRoleList();
+        Map<Long, String> roleMap = new HashMap<>(roleList.stream().collect(Collectors.toMap(AdminRoleRespDTO::getId, AdminRoleRespDTO::getName)));
 
         iPage.getRecords().forEach(tradeOrderRespVO -> {
             List<TradeVisitorRespVO> visitorDOList = tradeVisitorMapper.queryVisitorByOrderId(tradeOrderRespVO.getId());
@@ -181,7 +185,7 @@ public class TradeOrderServiceImpl implements TradeOrderService {
                 tradeOrderRespVO.setIsRead(0);
             }
             if(StringUtils.isNotBlank(tradeOrderRespVO.getAuditUser())){
-                tradeOrderRespVO.setAuditUserName(userMap.get(Long.parseLong(tradeOrderRespVO.getAuditUser())));
+                tradeOrderRespVO.setAuditUserName(roleMap.get(Long.parseLong(tradeOrderRespVO.getAuditUser())));
             }
             if (tradeOrderRespVO.getReadUser() != null) {
                 tradeOrderRespVO.setReadUserName(userMap.get(tradeOrderRespVO.getReadUser()));
@@ -190,7 +194,8 @@ public class TradeOrderServiceImpl implements TradeOrderService {
             if(payStatus!=null && payStatus==1){
                 tradeOrderRespVO.setLoadPayAmount(BigDecimal.ZERO);
             }else {
-                tradeOrderRespVO.setLoadPayAmount(tradeOrderRespVO.getPayAmount().subtract(tradeOrderRespVO.getDeposi()));
+                BigDecimal deposi = tradeOrderRespVO.getDeposi()==null?BigDecimal.ZERO:tradeOrderRespVO.getDeposi();
+                tradeOrderRespVO.setLoadPayAmount(tradeOrderRespVO.getPayAmount().subtract(deposi));
             }
 
         });
@@ -680,11 +685,13 @@ public class TradeOrderServiceImpl implements TradeOrderService {
                     //订单详情
                     TradeDetailDO tradeDetailDO = new TradeDetailBO();
                     tradeDetailDO.setOrderId(tradeOrderDO.getId());
-                    tradeDetailDO.setUseDate(orderItem.getUseDate() == null ? DateUtil.toLocalDateTime(tradeOrderDO.getTravelDate()) : DateUtil.toLocalDateTime(orderItem.getUseDate()));
+                    tradeDetailDO.setUseDate(orderDetail.getBoardingTime() == null ? DateUtil.toLocalDateTime(tradeOrderDO.getTravelDate()) : DateUtil.toLocalDateTime(orderDetail.getBoardingTime()));
                     tradeDetailDO.setProductId(product.getId());
                     tradeDetailDO.setProductName(product.getProductName());
                     tradeDetailDO.setPrice(orderDetail.getOriginPrice());
                     tradeDetailDO.setActualPrice(orderDetail.getPrice());
+                    tradeDetailDO.setValidityStartDate(LocalDateTimeUtil.of(orderDetail.getBoardingTime()));
+                    tradeDetailDO.setValidityEndDate(LocalDateTimeUtil.of(orderDetail.getLeaveTime()));
                     tradeDetailDO.setSpecType(orderDetail.getSpecType());
                     tradeDetailDO.setId(IdWorker.getId());
                     tradeDetailDO.setProductType(orderDetail.getProductType());

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

@@ -70,6 +70,8 @@ import com.yc.ship.module.resource.service.roommodel.ResourceRoomModelService;
 import com.yc.ship.module.resource.service.ship.ResourceShipService;
 import com.yc.ship.module.system.api.dict.DictDataApi;
 import com.yc.ship.module.system.api.dict.dto.DictDataRespDTO;
+import com.yc.ship.module.system.api.notify.NotifyMessageSendApi;
+import com.yc.ship.module.system.api.notify.dto.NotifySendSingleToUserReqDTO;
 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.TradeOrderPayDTO;
@@ -122,6 +124,7 @@ import java.io.InputStream;
 import java.math.BigDecimal;
 import java.time.LocalDateTime;
 import java.time.ZoneOffset;
+import java.time.format.DateTimeFormatter;
 import java.util.*;
 import java.util.concurrent.TimeUnit;
 import java.util.concurrent.atomic.AtomicReference;
@@ -157,6 +160,8 @@ public class OtcTradeOrderServiceImpl implements OtcTradeOrderService {
     private RouteApi routeApi;
     @Resource
     private ShipApi shipApi;
+    @Resource
+    private NotifyMessageSendApi notifyMessageSendApi;
 
     @Resource
     private ResourceRoomModelService resourceRoomModelService;
@@ -394,6 +399,25 @@ public class OtcTradeOrderServiceImpl implements OtcTradeOrderService {
                         .set(TradeOrderDO::getDeposiStatus, 1)
                         .eq(TradeOrderDO::getId, orderId)
                 );
+
+                try {
+                    Map map = new HashMap();
+                    map.put("orderNo", tradeOrderDO.getOrderNo());
+                    VoyageDO voyage = voyageService.getVoyage(tradeOrderDO.getVoyageId());
+                    RouteRespDTO routeRespDTO = routeApi.queryRouteById(voyage.getRouteId());
+                    ShipRespDTO shipRespDTO = shipApi.queryShip(tradeOrderDO.getShipId());
+                    map.put("routeName", routeRespDTO.getName());
+                    map.put("boatName", shipRespDTO.getName());
+                    map.put("startTime", DateUtil.formatDate(tradeOrderDO.getTravelDate()));
+                    NotifySendSingleToUserReqDTO reqDTO = new NotifySendSingleToUserReqDTO();
+                    reqDTO.setTemplateParams(map);
+                    reqDTO.setTemplateCode("sendmsg_cd_3");
+                    reqDTO.setUserId(Long.parseLong(tradeOrderDO.getSellerId()));
+                    notifyMessageSendApi.sendSingleMessageToAdmin(reqDTO);
+                } catch (Exception e) {
+                    log.error("发送短信异常", e);
+                }
+
                 Map<String, Object> extMap = new HashMap<>();
                 extMap.put("result", "审核通过");
                 TradeOrderLogUtils.setOrderInfo(orderId, tradeOrderDO.getOrderStatus(), TradeOrderStatusEnum.UNPAID.getStatus(), extMap);
@@ -1563,6 +1587,9 @@ public class OtcTradeOrderServiceImpl implements OtcTradeOrderService {
                 visitorDetailId.setPrice(tradeVistorReqVO.getActualPrice());
                 visitorDetailId.setOriginPrice(tradeVistorReqVO.getPrice());
                 visitorDetailId.setProductType(0);
+                visitorDetailId.setBoardingTime(createVO.getBoardingTime());
+                visitorDetailId.setLeaveTime(createVO.getLeaveTime());
+                visitorDetailId.setProductType(0);
                 ShipTradeOrderCreateReqVO.Visitor visitor = getVisitor1(tradeVistorReqVO);
                 visitorList.add(visitor);
                 visitorDetailId.setVisitorList(visitorList);
@@ -1838,6 +1865,8 @@ public class OtcTradeOrderServiceImpl implements OtcTradeOrderService {
                 visitorDetailId.setPrice(tradeVistorReqVO.getPrice());
                 visitorDetailId.setOriginPrice(tradeVistorReqVO.getPrice());
                 visitorDetailId.setProductType(0);
+                visitorDetailId.setBoardingTime(createVO.getBoardingTime());
+                visitorDetailId.setLeaveTime(createVO.getLeaveTime());
                 ShipTradeOrderCreateReqVO.Visitor visitor = getVisitor1(tradeVistorReqVO);
                 visitorList.add(visitor);
                 visitorDetailId.setVisitorList(visitorList);

+ 30 - 0
ship-module-trade/ship-module-trade-biz/src/main/java/com/yc/ship/module/trade/service/smsSendconfig/MessageSendService.java

@@ -0,0 +1,30 @@
+package com.yc.ship.module.trade.service.smsSendconfig;
+
+
+/**
+ * 短信发送配置 Service 接口
+ *
+ * @author 管理员
+ */
+public interface MessageSendService {
+
+
+    /**
+     * 初定即将过期前 1 天(开航前 22 天 中午12:00)
+     */
+    void sendMsg1();
+    /**
+     * 初定即将过期前 1 天(开航前 21 天 10:00)
+     */
+    void sendMsg2();
+
+    /**
+     * 开航前7天提醒 中午12:00
+     */
+    void sendMsg3();
+
+    /**
+     * 开航前2天00:00仍未付款
+     */
+    void sendMsg4();
+}

+ 125 - 0
ship-module-trade/ship-module-trade-biz/src/main/java/com/yc/ship/module/trade/service/smsSendconfig/MessageSendServiceImpl.java

@@ -0,0 +1,125 @@
+package com.yc.ship.module.trade.service.smsSendconfig;
+
+import cn.hutool.core.date.DateUtil;
+import com.yc.ship.module.system.api.notify.NotifyMessageSendApi;
+import com.yc.ship.module.system.api.notify.dto.NotifySendSingleToUserReqDTO;
+import com.yc.ship.module.trade.controller.admin.smsSendconfig.vo.SmsSendconfigQueryRespVO;
+import com.yc.ship.module.trade.dal.mysql.smsSendconfig.MessageSendMapper;
+import lombok.extern.slf4j.Slf4j;
+import org.springframework.stereotype.Service;
+import org.springframework.validation.annotation.Validated;
+
+import javax.annotation.Resource;
+import java.util.Date;
+import java.util.HashMap;
+import java.util.List;
+import java.util.Map;
+
+
+/**
+ * 短信发送配置 Service 实现类
+ *
+ * @author 管理员
+ */
+@Service
+@Validated
+@Slf4j
+public class MessageSendServiceImpl implements MessageSendService {
+
+
+    @Resource
+    private NotifyMessageSendApi notifyMessageSendApi;
+
+    @Resource
+    private MessageSendMapper messageSendMapper;
+
+
+    @Override
+    public void sendMsg1() {
+        List<SmsSendconfigQueryRespVO> smsSendconfigQueryRespVOS = messageSendMapper.querySendList1(22);
+        smsSendconfigQueryRespVOS.forEach(smsSendconfigQueryRespVO -> {
+            try {
+                Map map = new HashMap();
+                map.put("orderNo", smsSendconfigQueryRespVO.getOrderNo());
+                map.put("routeName", smsSendconfigQueryRespVO.getRouteName());
+                map.put("boatName", smsSendconfigQueryRespVO.getShipName());
+                map.put("startTime", smsSendconfigQueryRespVO.getStartTime());
+                NotifySendSingleToUserReqDTO reqDTO = new NotifySendSingleToUserReqDTO();
+                reqDTO.setTemplateParams(map);
+                reqDTO.setTemplateCode("sendmsg_cd_1");
+                reqDTO.setUserId(Long.parseLong(smsSendconfigQueryRespVO.getSellerId()));
+                notifyMessageSendApi.sendSingleMessageToAdmin(reqDTO);
+            } catch (Exception e) {
+                log.error("发送短信异常", e);
+            }
+        });
+
+    }
+
+    @Override
+    public void sendMsg2() {
+        List<SmsSendconfigQueryRespVO> smsSendconfigQueryRespVOS = messageSendMapper.querySendList1(21);
+        smsSendconfigQueryRespVOS.forEach(smsSendconfigQueryRespVO -> {
+            try {
+                Map map = new HashMap();
+                map.put("orderNo", smsSendconfigQueryRespVO.getOrderNo());
+                map.put("routeName", smsSendconfigQueryRespVO.getRouteName());
+                map.put("boatName", smsSendconfigQueryRespVO.getShipName());
+                map.put("startTime", smsSendconfigQueryRespVO.getStartTime());
+                NotifySendSingleToUserReqDTO reqDTO = new NotifySendSingleToUserReqDTO();
+                reqDTO.setTemplateParams(map);
+                reqDTO.setTemplateCode("sendmsg_cd_2");
+                reqDTO.setUserId(Long.parseLong(smsSendconfigQueryRespVO.getSellerId()));
+                notifyMessageSendApi.sendSingleMessageToAdmin(reqDTO);
+            } catch (Exception e) {
+                log.error("发送短信异常", e);
+            }
+        });
+
+    }
+    @Override
+    public void sendMsg3() {
+        List<SmsSendconfigQueryRespVO> smsSendconfigQueryRespVOS = messageSendMapper.querySendList2(7);
+        smsSendconfigQueryRespVOS.forEach(smsSendconfigQueryRespVO -> {
+            try {
+                Map map = new HashMap();
+                map.put("orderNo", smsSendconfigQueryRespVO.getOrderNo());
+                map.put("routeName", smsSendconfigQueryRespVO.getRouteName());
+                map.put("boatName", smsSendconfigQueryRespVO.getShipName());
+                map.put("startTime", smsSendconfigQueryRespVO.getStartTime());
+                Date lastDate = DateUtil.offsetDay(DateUtil.parse(smsSendconfigQueryRespVO.getStartTime()), -7);
+                map.put("lastTime", DateUtil.format(lastDate, "yyyy-MM-dd"));
+                NotifySendSingleToUserReqDTO reqDTO = new NotifySendSingleToUserReqDTO();
+                reqDTO.setTemplateParams(map);
+                reqDTO.setTemplateCode("sendmsg_cd_4");
+                reqDTO.setUserId(Long.parseLong(smsSendconfigQueryRespVO.getSellerId()));
+                notifyMessageSendApi.sendSingleMessageToAdmin(reqDTO);
+            } catch (Exception e) {
+                log.error("发送短信异常", e);
+            }
+        });
+
+    }
+
+    @Override
+    public void sendMsg4() {
+        List<SmsSendconfigQueryRespVO> smsSendconfigQueryRespVOS = messageSendMapper.querySendList2(2);
+        smsSendconfigQueryRespVOS.forEach(smsSendconfigQueryRespVO -> {
+            try {
+                Map map = new HashMap();
+                map.put("orderNo", smsSendconfigQueryRespVO.getOrderNo());
+                map.put("routeName", smsSendconfigQueryRespVO.getRouteName());
+                map.put("boatName", smsSendconfigQueryRespVO.getShipName());
+                map.put("startTime", smsSendconfigQueryRespVO.getStartTime());
+                NotifySendSingleToUserReqDTO reqDTO = new NotifySendSingleToUserReqDTO();
+                reqDTO.setTemplateParams(map);
+                reqDTO.setTemplateCode("sendmsg_cd_5");
+                reqDTO.setUserId(Long.parseLong(smsSendconfigQueryRespVO.getSellerId()));
+                notifyMessageSendApi.sendSingleMessageToAdmin(reqDTO);
+            } catch (Exception e) {
+                log.error("发送短信异常", e);
+            }
+        });
+
+    }
+}

+ 2 - 1
ship-module-trade/ship-module-trade-biz/src/main/resources/mapper/orderjzdetail/OrderJzDetailMapper.xml

@@ -34,11 +34,12 @@
         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
+        select distinct o.id, o.order_no, r.direction , v.name, v.credential_no, v.mobile, rm.name AS room_model_name
         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
+        inner join resource_room_model rm ON v.room_model_id = rm.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">

+ 80 - 0
ship-module-trade/ship-module-trade-biz/src/main/resources/mapper/smsSendconfig/MessageSendMapper.xml

@@ -0,0 +1,80 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
+<mapper namespace="com.yc.ship.module.trade.dal.mysql.smsSendconfig.MessageSendMapper">
+
+    <!--
+        一般情况下,尽可能使用 Mapper 进行 CRUD 增删改查即可。
+        无法满足的场景,例如说多表关联查询,才使用 XML 编写 SQL。
+        代码生成器暂时只生成 Mapper XML 文件本身,更多推荐 MybatisX 快速开发插件来生成查询。
+        文档可见:https://www.iocoder.cn/MyBatis/x-plugins/
+     -->
+    <select id="querySendList1" resultType="com.yc.ship.module.trade.controller.admin.smsSendconfig.vo.SmsSendconfigQueryRespVO">
+        SELECT
+        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
+        FROM
+        trade_order t1
+        INNER JOIN trade_detail t2 ON t1.id = t2.order_id
+        left JOIN trade_order_user t3 ON t3.order_id = t1.id
+        left JOIN product_voyage t66 ON t66.id = t1.voyage_id
+        left JOIN resource_route t67 ON t66.route_id = t67.id
+        left JOIN resource_ship t77 ON t77.id = t1.ship_id
+        WHERE 1=1
+        and t2.use_date = DATE_SUB(CURDATE(), INTERVAL( -#{day} ) DAY )
+        AND t1.order_status =14
+        AND t1.deleted = 0
+        AND t2.deleted = 0
+        and t2.use_date>now()
+        GROUP BY
+        t1.id
+    </select>
+    <select id="querySendList2" resultType="com.yc.ship.module.trade.controller.admin.smsSendconfig.vo.SmsSendconfigQueryRespVO">
+        SELECT
+        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
+        FROM
+        trade_order t1
+        INNER JOIN trade_detail t2 ON t1.id = t2.order_id
+        left JOIN trade_order_user t3 ON t3.order_id = t1.id
+        left JOIN product_voyage t66 ON t66.id = t1.voyage_id
+        left JOIN resource_route t67 ON t66.route_id = t67.id
+        left JOIN resource_ship t77 ON t77.id = t1.ship_id
+        WHERE 1=1
+        and t2.use_date = DATE_SUB(CURDATE(), INTERVAL( -#{day} ) DAY )
+        AND t1.order_status =1
+        AND t1.deleted = 0
+        AND t2.deleted = 0
+        and t2.use_date>now()
+        GROUP BY
+        t1.id
+    </select>
+
+</mapper>

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

@@ -21,7 +21,7 @@
         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,6)
+        and t2.voucher_status in (1,2,6)
         and t1.deleted = 0
         and t2.deleted = 0
         and t7.deleted = 0