Browse Source

短信模板配置,以及下单成功短信发送功能完成

lishiqiang 1 month ago
parent
commit
8d07836844

+ 2 - 0
ship-module-resource/ship-module-resource-api/src/main/java/com/yc/ship/module/resource/ResourceApi.java

@@ -13,6 +13,8 @@ public interface ResourceApi {
 
     CommonResult<?> getCheckMachineInfo(Integer siteType,String machineId);
 
+    CommonResult<?> getAllRouteList();
+
 
     CommonResult<CheckMachineDTO> getCheckMachine(Integer type, String machineId, Long tenantId);
 }

+ 73 - 0
ship-module-resource/ship-module-resource-api/src/main/java/com/yc/ship/module/resource/api/dto/ResourceRouteRespDTO.java

@@ -0,0 +1,73 @@
+package com.yc.ship.module.resource.api.dto;
+
+import io.swagger.v3.oas.annotations.media.Schema;
+import lombok.Data;
+
+@Schema(description = "RPC 服务 - 设备信息 Response DTO")
+@Data
+public class ResourceRouteRespDTO{
+
+    /**
+     * ID
+     */
+    private Long id;
+    /**
+     * 航线名称
+     */
+    private String name;
+    /**
+     * 航线编码
+     */
+    private String code;
+    /**
+     * 英文名称
+     */
+    private String nameEn;
+    /**
+     * 航向(字典)
+     *
+     */
+    private Integer direction;
+    /**
+     * 航线简称
+     */
+    private String shortName;
+    /**
+     * 简拼
+     */
+    private String shortNameEn;
+    /**
+     * 登船码头
+     */
+    private Long onDockId;
+    /**
+     * 离船码头
+     */
+    private Long leaveDockId;
+    /**
+     * 途经停靠码头
+     */
+    private String midwayDockIds;
+    /**
+     * 航线简介
+     */
+    private String introduce;
+    /**
+     * 航线关联景区
+     */
+    private String relationScenicIds;
+    /**
+     * 航线时长
+     */
+    private String duration;
+    /**
+     * 排序
+     */
+    private Integer sort;
+    /**
+     * 状态
+     *
+     */
+    private Integer status;
+
+}

+ 15 - 0
ship-module-resource/ship-module-resource-biz/src/main/java/com/yc/ship/module/resource/api/ResourceApiImpl.java

@@ -5,14 +5,19 @@ import com.yc.ship.framework.common.util.object.BeanUtils;
 import com.yc.ship.module.product.api.dto.SupplierRespDTO;
 import com.yc.ship.module.resource.ResourceApi;
 import com.yc.ship.module.resource.api.dto.CheckMachineDTO;
+import com.yc.ship.module.resource.api.dto.ResourceRouteRespDTO;
 import com.yc.ship.module.resource.controller.admin.supplier.vo.SupplierRespVO;
+import com.yc.ship.module.resource.dal.dataobject.route.ResourceRouteDO;
 import com.yc.ship.module.resource.service.machine.ScenicMachineService;
+import com.yc.ship.module.resource.service.route.ResourceRouteService;
 import com.yc.ship.module.resource.service.supplier.ProductSupplierService;
 import org.springframework.cache.annotation.Cacheable;
 import org.springframework.stereotype.Service;
 
 import javax.annotation.Resource;
 
+import java.util.List;
+
 import static com.yc.ship.framework.common.pojo.CommonResult.success;
 
 /**
@@ -29,6 +34,9 @@ public class ResourceApiImpl implements ResourceApi {
     @Resource
     private ScenicMachineService scenicMachineService;
 
+    @Resource
+    private ResourceRouteService resourceRouteService;
+
 
     @Override
     public CommonResult<SupplierRespDTO> getSupplierById(Long supplierId) {
@@ -40,6 +48,13 @@ public class ResourceApiImpl implements ResourceApi {
         Object machineInfo = scenicMachineService.getMachineInfo(siteType,machineId);
         return success(machineInfo);
     }
+
+    @Override
+    public CommonResult<?> getAllRouteList() {
+        List<ResourceRouteDO> routeList = resourceRouteService.getRouteList();
+        return success(BeanUtils.toBean(routeList, ResourceRouteRespDTO.class));
+    }
+
     @Cacheable(cacheNames = "getCheckMachine#30", key = "#type+'_'+#machineId+'_'+#tenantId")
     @Override
     public CommonResult<CheckMachineDTO> getCheckMachine(Integer type, String machineId, Long tenantId) {

+ 11 - 0
ship-module-trade/ship-module-trade-biz/pom.xml

@@ -186,6 +186,17 @@
             <version>1.0.0</version>
             <scope>compile</scope>
         </dependency>
+        <!-- 阿里云短信平台 -->
+        <dependency>
+            <groupId>com.aliyun</groupId>
+            <artifactId>aliyun-java-sdk-core</artifactId>
+            <version>4.0.3</version>
+        </dependency>
+        <dependency>
+            <groupId>com.aliyun</groupId>
+            <artifactId>aliyun-java-sdk-dysmsapi</artifactId>
+            <version>1.1.0</version>
+        </dependency>
     </dependencies>
 
 </project>

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

@@ -20,6 +20,18 @@ public class SmsSendconfigQueryRespVO {
     @ExcelProperty("短信标题")
     private String smsName;
 
+    @Schema(description = "航次名称", example = "李四")
+    @ExcelProperty("航次名称")
+    private String voyageName;
+
+    @Schema(description = "游船名称", example = "李四")
+    @ExcelProperty("游船名称")
+    private String shipName;
+
+    @Schema(description = "团号", example = "李四")
+    @ExcelProperty("团号")
+    private String groupNo;
+
     @Schema(description = "模板类型", example = "2")
     @ExcelProperty("模板类型")
     private Integer smsType;

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

@@ -0,0 +1,120 @@
+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.SendSmsRequest;
+import com.aliyuncs.dysmsapi.model.v20170525.SendSmsResponse;
+import com.aliyuncs.exceptions.ClientException;
+import com.aliyuncs.http.HttpClientConfig;
+import com.aliyuncs.http.ProtocolType;
+import com.aliyuncs.profile.DefaultProfile;
+import com.aliyuncs.profile.IClientProfile;
+import lombok.extern.slf4j.Slf4j;
+import org.apache.commons.lang3.StringUtils;
+
+import java.util.List;
+
+/**
+ * 三峡短信模块
+ * @author lishiqiang
+ */
+@Slf4j
+public class MoblieMessageAliyunUtil {
+
+    /**
+     * 产品名称:云通信短信API产品,开发者无需替换
+     */
+
+    private static final String product = "Dysmsapi";
+
+    /**
+     * 产品域名,开发者无需替换
+     */
+
+    private static final String domain = "dysmsapi.aliyuncs.com";
+
+
+    /**
+     * 阿里云短信发送
+     *
+     * @param mobile
+     * @param templateParam "{\"code\":\"" + 123456 + "\"}
+     * @param templateCode
+     * @return
+     * @throws ClientException
+     */
+    public static SendSmsResponse sendSms(String accessKeyId,String accessKeySecret,String signName,String mobile, String templateParam, String templateCode) {
+        // 可自助调整超时时间
+        System.setProperty("sun.net.client.defaultConnectTimeout", "10000");
+        System.setProperty("sun.net.client.defaultReadTimeout", "10000");
+        // 初始化acsClient,暂不支持region化
+        IClientProfile profile = DefaultProfile.getProfile("cn-hangzhou", accessKeyId, accessKeySecret);
+        SendSmsResponse sendSmsResponse;
+        try {
+            DefaultProfile.addEndpoint("cn-hangzhou", "cn-hangzhou", product, domain);
+            HttpClientConfig httpClientConfig = profile.getHttpClientConfig();
+            httpClientConfig.setProtocolType(ProtocolType.HTTPS);
+            profile.setHttpClientConfig(httpClientConfig);
+            IAcsClient acsClient = new DefaultAcsClient(profile);
+            // 组装请求对象-具体描述见控制台-文档部分内容
+            SendSmsRequest request = new SendSmsRequest();
+            // 必填:待发送手机号
+            request.setPhoneNumbers(mobile);
+            // 必填:短信签名-可在短信控制台中找到
+            request.setSignName(signName);
+            request.setProtocol(ProtocolType.HTTPS);
+            // 必填:短信模板-可在短信控制台中找到
+            request.setTemplateCode(templateCode);
+            // 可选:模板中的变量替换JSON串,如模板内容为"亲爱的${name},您的验证码为${code}"时,此处的值为
+            System.out.println(templateParam);
+            request.setTemplateParam(templateParam);
+            // 选填-上行短信扩展码(无特殊需求用户请忽略此字段)
+            // request.setSmsUpExtendCode("90997");
+            // 可选:outId为提供给业务方扩展字段,最终在短信回执消息中将此值带回给调用者
+            request.setOutId("yourOutId");
+            // hint 此处可能会抛出异常,注意catch
+            sendSmsResponse = acsClient.getAcsResponse(request);
+            log.error("短信接口返回的数据-------request="+JSONUtil.parseObj(request)+";--------sendSmsResponse=" +JSONUtil.parseObj(sendSmsResponse));
+            if (StringUtils.equals("OK", sendSmsResponse.getCode())) {
+                try {
+//                    querySendDetails(sendSmsResponse.getBizId(), mobile, templateParam);
+                } catch (Exception e) {
+                    e.printStackTrace();
+                    System.out.println(mobile+"10短信接口返回的数据----------------getMessage=" + e.getMessage());
+                    return null;
+                }
+            }
+        } catch (ClientException e) {
+            e.printStackTrace();
+            return null;
+        }
+        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 input = "这是一个【date】示例【startTime】字符【content】串";
+//        Pattern pattern = Pattern.compile("\\【(.*?)\\】");
+//        Matcher matcher = pattern.matcher(input);
+//        List<String> list = new ArrayList<>();
+//        int count = 0;
+//        while  (matcher.find()) {
+//            System.out.println("Match number " + count);
+//            String result = input.substring(matcher.start()+1, matcher.end()-1); // 获取第一个匹配的括号内的内容
+//            list.add(result);
+//            count++;
+//        }
+//        System.out.println(list);
+        String s = "[\"2025-01-01[09:30]\",\"黄柏河码头\"]";
+        List<String> list = JSONUtil.toList(s, String.class);
+        System.out.println(list);
+    }
+
+
+}

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

@@ -5,14 +5,14 @@ import cn.hutool.core.util.StrUtil;
 import cn.hutool.json.JSONArray;
 import cn.hutool.json.JSONObject;
 import cn.hutool.json.JSONUtil;
+import com.aliyuncs.dysmsapi.model.v20170525.SendSmsResponse;
 import com.baomidou.mybatisplus.core.toolkit.IdWorker;
-import com.yc.ship.framework.common.pojo.CommonResult;
 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.controller.admin.smsSendconfig.vo.SmsSendconfigQueryRespVO;
 import com.yc.ship.module.trade.dal.dataobject.order.TradeOrderDO;
 import com.yc.ship.module.trade.service.order.TradeOrderRepositoryService;
 import lombok.extern.slf4j.Slf4j;
@@ -31,10 +31,9 @@ import javax.net.ssl.SSLSession;
 import java.io.*;
 import java.net.HttpURLConnection;
 import java.net.URL;
-import java.util.HashMap;
-import java.util.List;
-import java.util.Map;
-import java.util.Random;
+import java.util.*;
+import java.util.regex.Matcher;
+import java.util.regex.Pattern;
 
 
 /**
@@ -45,7 +44,7 @@ import java.util.Random;
 @Component
 @Order(TradeOrderHandler.SMS_ORDER)
 @Slf4j
-public class SmsHandler implements TradeOrderHandler{
+public class SmsHandler implements TradeOrderHandler {
 
 
     @Resource
@@ -58,93 +57,116 @@ public class SmsHandler implements TradeOrderHandler{
     @Override
     public void afterProcessSuccess(TradeOrderDO tradeOrderDO) {
         try {
-            List<SmsSendconfigQueryRespVO> list =  tradeOrderRepositoryService.getOrderSmsInfo(tradeOrderDO.getId(),3);
-            if(list.isEmpty()){
+            List<SmsSendconfigQueryRespVO> list = tradeOrderRepositoryService.getOrderSmsInfo(tradeOrderDO.getId(), 3);
+            if (list.isEmpty()) {
                 return;
             }
             for (SmsSendconfigQueryRespVO smsSendconfigQueryRespVO : list) {
-                if(smsSendconfigQueryRespVO.getMobile()!=null) {
+                if (smsSendconfigQueryRespVO.getMobile() != null) {
                     sendMsg(smsSendconfigQueryRespVO);
                 }
             }
-        }catch (Exception e){
-            log.error("短信发送异常",e);
+        } catch (Exception e) {
+            log.error("短信发送异常", e);
         }
     }
+
     @Transactional(rollbackFor = Exception.class)
     public String sendMsg(SmsSendconfigQueryRespVO smsSendconfigQueryRespVO) {
         try {
             String telphone = "0717-6910001";
-            if(StringUtils.isNotEmpty(smsSendconfigQueryRespVO.getSellerId())){
+            if (StringUtils.isNotEmpty(smsSendconfigQueryRespVO.getSellerId())) {
                 try {
                     AdminUserRespDTO user = adminUserApi.getUserIgnoreTenant(Long.parseLong(smsSendconfigQueryRespVO.getSellerId()));
-                    if(StringUtils.isNotEmpty(user.getMobile())) {
+                    if (StringUtils.isNotEmpty(user.getMobile())) {
                         //如果有售票员的电话则发送售票员的电话作为咨询电话
                         telphone = user.getMobile();
-                    }else{
+                    } else {
                         //读取配置文件默认参数
                         String mtelphone = configApi.getPlatformConfigValueByKey("telphone");
-                        if(mtelphone!=null){
+                        if (mtelphone != null) {
                             telphone = mtelphone;
                         }
                     }
-                }catch (Exception e){
-                    log.error("用户信息获取异常"+smsSendconfigQueryRespVO.getSellerId(),e);
+                } 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 secretKey = smsSendconfigQueryRespVO.getApiSecret();
             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("-",""));
+            String smsContent = smsSendconfigQueryRespVO.getSmsContent();
+            //【1】航次名称; 【2】订单号; 【3】游玩日期; 【4】联系人;【5】购买数量; 【6】团号; 【7】旅行社联系人; 【8】联系电话;【9】航线名称;【10】产品简称;【11】咨询电话;
+            content = content.replaceAll("【1】", smsSendconfigQueryRespVO.getVoyageName());
             content = content.replaceAll("【2】", smsSendconfigQueryRespVO.getOrderNo());
-            content = content.replaceAll("【3】", smsSendconfigQueryRespVO.getUseDate().substring(0,10));
+            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("【6】", smsSendconfigQueryRespVO.getGroupNo());
             content = content.replaceAll("【7】", smsSendconfigQueryRespVO.getContactName());
             content = content.replaceAll("【8】", smsSendconfigQueryRespVO.getMobile());
-            content = content.replaceAll("【9】", smsSendconfigQueryRespVO.getRouteName());
+            content = content.replaceAll("【9】", smsSendconfigQueryRespVO.getShipName());
             content = content.replaceAll("【10】", smsSendconfigQueryRespVO.getShortName());
             content = content.replaceAll("【11】", telphone);
 
+            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); // 获取第一个匹配的括号内的内容
+                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));
+            }
             String mobile = smsSendconfigQueryRespVO.getMobile();
-            log.error("[下单成功短信发送参数]:" + content+";手机号:"+mobile);
-            String params = SmsUtil.generateParams(String.join(",", mobile), content, smsSendconfigQueryRespVO.getApiTemplateId()+"", appId, signName, secretKey);
-            log.error("[下单成功短信发送参数]:" +url+";"+ params);
-            String result = sendPost(url,params,null);
-            log.error("[下单成功短信返回参数]:" +result);
-            JSONObject resultObject = JSONUtil.parseObj(result);
-
-            if (resultObject != null && "true".equals(resultObject.getStr("success"))) {
+            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")) {
                 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("成功") != -1) {
-                    reqDTO.setStatus(1);
-                } else {
-                    reqDTO.setStatus(0);
-                }
+                reqDTO.setOrderNo(smsSendconfigQueryRespVO.getOrderNo());
+                reqDTO.setSmsConfigId(smsSendconfigQueryRespVO.getId() + "");
+                reqDTO.setResult(JSONUtil.toJsonStr(result));
+                reqDTO.setStatus(1);
                 reqDTO.setSmsContent(content);
                 tradeOrderRepositoryService.insertSmsLog(reqDTO);
                 return "发送成功";
-            } else {
-                return "短信发送失败: " + resultObject.getStr("rspcod");
+            }else{
+                SmsSendLogDTO reqDTO = new SmsSendLogDTO();
+                reqDTO.setId(IdWorker.getId());
+                reqDTO.setTenantId(smsSendconfigQueryRespVO.getTenantId());
+                reqDTO.setMobile(mobile);
+                reqDTO.setSmsConfigId(smsSendconfigQueryRespVO.getId()+"");
+                reqDTO.setOrderNo(smsSendconfigQueryRespVO.getOrderNo());
+                reqDTO.setSmsConfigId(smsSendconfigQueryRespVO.getId() + "");
+                reqDTO.setResult(JSONUtil.toJsonStr(result));
+                reqDTO.setStatus(0);
+                reqDTO.setSmsContent(content);
+                tradeOrderRepositoryService.insertSmsLog(reqDTO);
+                return "短信发送失败";
             }
         } catch (Exception e) {
+            SmsSendLogDTO reqDTO = new SmsSendLogDTO();
+            reqDTO.setId(IdWorker.getId());
+            reqDTO.setTenantId(smsSendconfigQueryRespVO.getTenantId());
+            reqDTO.setMobile(smsSendconfigQueryRespVO.getMobile());
+            reqDTO.setSmsConfigId(smsSendconfigQueryRespVO.getId()+"");
+            reqDTO.setOrderNo(smsSendconfigQueryRespVO.getOrderNo());
+            reqDTO.setSmsConfigId(smsSendconfigQueryRespVO.getId() + "");
+            reqDTO.setResult("异常"+e.getMessage());
+            reqDTO.setStatus(0);
+            reqDTO.setSmsContent(smsSendconfigQueryRespVO.getSmsContent());
+            tradeOrderRepositoryService.insertSmsLog(reqDTO);
             log.error("[下单成功短信发送失败]:" + e.getMessage());
             return "短信发送失败: " + e.getMessage();
         }
@@ -154,37 +176,37 @@ public class SmsHandler implements TradeOrderHandler{
     public String sendMsg3(SmsSendconfigQueryRespVO smsSendconfigQueryRespVO) {
         try {
             String telphone = "0717-6910001";
-            if(StringUtils.isNotEmpty(smsSendconfigQueryRespVO.getSellerId())){
+            if (StringUtils.isNotEmpty(smsSendconfigQueryRespVO.getSellerId())) {
                 try {
                     AdminUserRespDTO user = adminUserApi.getUserIgnoreTenant(Long.parseLong(smsSendconfigQueryRespVO.getSellerId()));
-                    if(StringUtils.isNotEmpty(user.getMobile())) {
+                    if (StringUtils.isNotEmpty(user.getMobile())) {
                         //如果有售票员的电话则发送售票员的电话作为咨询电话
                         telphone = user.getMobile();
-                    }else{
+                    } else {
                         //读取配置文件默认参数
                         String mtelphone = configApi.getPlatformConfigValueByKey("telphone");
-                        if(mtelphone!=null){
+                        if (mtelphone != null) {
                             telphone = mtelphone;
                         }
                     }
-                }catch (Exception e){
-                    log.error("用户信息获取异常"+smsSendconfigQueryRespVO.getSellerId(),e);
+                } catch (Exception e) {
+                    log.error("用户信息获取异常" + smsSendconfigQueryRespVO.getSellerId(), e);
                 }
             }
 
             //sxly
             String appId = smsSendconfigQueryRespVO.getApiKey();
             //Sx@202305
-            String secretKey =smsSendconfigQueryRespVO.getApiSecret();
+            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("【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("【3】", smsSendconfigQueryRespVO.getUseDate().substring(0, 10));
             content = content.replaceAll("【4】", smsSendconfigQueryRespVO.getContactName());
             content = content.replaceAll("【5】", smsSendconfigQueryRespVO.getNum() + "");
             content = content.replaceAll("【6】", smsSendconfigQueryRespVO.getSourceName());
@@ -197,15 +219,15 @@ public class SmsHandler implements TradeOrderHandler{
             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 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);
+            log.error("[下单成功短信发送参数]:" + content1 + ";手机号:" + mobile);
             String params = SmsUtil.generateParams2(
-                    String.join(",",mobile),content1,null,null,null
+                    String.join(",", mobile), content1, null, null, null
             );
             // 生成时间戳和token
             String timeStamp = String.valueOf(System.currentTimeMillis());
@@ -216,10 +238,10 @@ public class SmsHandler implements TradeOrderHandler{
             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);
-            
+            log.error("[下单成功短信发送参数]:" + url + ";" + params);
+            String result = sendPost(url, params, headers);
+            log.error("[下单成功短信返回参数]:" + result);
+
             // 检查返回结果是否为有效的JSON格式
             SmsBatchSendRespDTO response = null;
             if (result != null && result.trim().startsWith("{")) {
@@ -240,7 +262,7 @@ public class SmsHandler implements TradeOrderHandler{
                 reqDTO.setMobile(mobile);
                 reqDTO.setSmsConfigId(mobile);
                 reqDTO.setOrderNo(smsSendconfigQueryRespVO.getOrderNo());
-                reqDTO.setSmsConfigId(smsSendconfigQueryRespVO.getId()+"");
+                reqDTO.setSmsConfigId(smsSendconfigQueryRespVO.getId() + "");
                 reqDTO.setResult(result);
                 if (result != null && result.indexOf("success") != -1) {
                     reqDTO.setStatus(1);
@@ -283,37 +305,37 @@ public class SmsHandler implements TradeOrderHandler{
     public String sendMsg2(SmsSendconfigQueryRespVO smsSendconfigQueryRespVO) {
         try {
             String telphone = "0717-6910001";
-            if(StringUtils.isNotEmpty(smsSendconfigQueryRespVO.getSellerId())){
+            if (StringUtils.isNotEmpty(smsSendconfigQueryRespVO.getSellerId())) {
                 try {
                     AdminUserRespDTO user = adminUserApi.getUserIgnoreTenant(Long.parseLong(smsSendconfigQueryRespVO.getSellerId()));
-                    if(StringUtils.isNotEmpty(user.getMobile())) {
+                    if (StringUtils.isNotEmpty(user.getMobile())) {
                         //如果有售票员的电话则发送售票员的电话作为咨询电话
                         telphone = user.getMobile();
-                    }else{
+                    } else {
                         //读取配置文件默认参数
                         String mtelphone = configApi.getPlatformConfigValueByKey("telphone");
-                        if(mtelphone!=null){
+                        if (mtelphone != null) {
                             telphone = mtelphone;
                         }
                     }
-                }catch (Exception e){
-                    log.error("用户信息获取异常"+smsSendconfigQueryRespVO.getSellerId(),e);
+                } catch (Exception e) {
+                    log.error("用户信息获取异常" + smsSendconfigQueryRespVO.getSellerId(), e);
                 }
             }
 
             //sxly
             String appId = smsSendconfigQueryRespVO.getApiKey();
             //Sx@202305
-            String secretKey =smsSendconfigQueryRespVO.getApiSecret();
+            String secretKey = smsSendconfigQueryRespVO.getApiSecret();
             //https://112.35.10.201:58888/sms/tmpsubmit
             String url = smsSendconfigQueryRespVO.getApiUrl();
             //jFKNw6Cis
             String signName = smsSendconfigQueryRespVO.getSignature();
             String input = smsSendconfigQueryRespVO.getSmsParms();
             //【1】产品名称; 【2】订单号; 【3】游玩日期; 【4】联系人;【5】购买数量; 【6】团名称; 【7】旅行社联系人; 【8】联系电话;【9】时间方案名称;【10】产品简称; 【11】咨询电话;
-            input = input.replaceAll("【1】", smsSendconfigQueryRespVO.getProductName().substring(0,10).replace("【","").replace("】","").replace("-",""));
+            input = input.replaceAll("【1】", smsSendconfigQueryRespVO.getProductName().substring(0, 10).replace("【", "").replace("】", "").replace("-", ""));
             input = input.replaceAll("【2】", smsSendconfigQueryRespVO.getOrderNo());
-            input = input.replaceAll("【3】", smsSendconfigQueryRespVO.getUseDate().substring(0,10));
+            input = input.replaceAll("【3】", smsSendconfigQueryRespVO.getUseDate().substring(0, 10));
             input = input.replaceAll("【4】", smsSendconfigQueryRespVO.getContactName());
             input = input.replaceAll("【5】", smsSendconfigQueryRespVO.getNum() + "");
             input = input.replaceAll("【6】", smsSendconfigQueryRespVO.getSourceName());
@@ -326,16 +348,16 @@ public class SmsHandler implements TradeOrderHandler{
             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 key = templates.getStr(i);
+                String value = parts.getStr(i);
+                map.put(key, value);
             }
             String content = StrUtil.format(smsSendconfigQueryRespVO.getSmsContent(), map);
             String mobile = smsSendconfigQueryRespVO.getMobile();
-            log.error("[下单成功短信发送参数]:" + content+";手机号:"+mobile);
+            log.error("[下单成功短信发送参数]:" + content + ";手机号:" + mobile);
             HttpClient httpclient = new HttpClient();
             PostMethod post = new PostMethod(url);
-            post.getParams().setParameter(HttpMethodParams.HTTP_CONTENT_CHARSET,"gbk");
+            post.getParams().setParameter(HttpMethodParams.HTTP_CONTENT_CHARSET, "gbk");
             post.addParameter("SpCode", signName);
             post.addParameter("LoginName", appId);
             post.addParameter("Password", secretKey);
@@ -344,7 +366,7 @@ public class SmsHandler implements TradeOrderHandler{
             Random random = new Random();
             int ranNum = random.nextInt(9);
             String serialNumber = SmsUtil.createOrderNo(ranNum + "");
-            if(serialNumber.length()>20) {
+            if (serialNumber.length() > 20) {
                 serialNumber = serialNumber.substring(0, 19);
             }
             post.addParameter("SerialNumber", serialNumber);
@@ -352,8 +374,8 @@ public class SmsHandler implements TradeOrderHandler{
             post.addParameter("templateId", smsSendconfigQueryRespVO.getApiTemplateId());
             post.addParameter("f", "1");
             httpclient.executeMethod(post);
-            String result = new String(post.getResponseBody(),"gbk");
-            log.error("[下单成功短信返回参数]:" +result);
+            String result = new String(post.getResponseBody(), "gbk");
+            log.error("[下单成功短信返回参数]:" + result);
             if (result.contains("result=0")) {
                 log.error("[下单成功短信发送成功]:" + mobile);
                 SmsSendLogDTO reqDTO = new SmsSendLogDTO();
@@ -362,7 +384,7 @@ public class SmsHandler implements TradeOrderHandler{
                 reqDTO.setMobile(mobile);
                 reqDTO.setSmsConfigId(mobile);
                 reqDTO.setOrderNo(smsSendconfigQueryRespVO.getOrderNo());
-                reqDTO.setSmsConfigId(smsSendconfigQueryRespVO.getId()+"");
+                reqDTO.setSmsConfigId(smsSendconfigQueryRespVO.getId() + "");
                 reqDTO.setResult(result);
                 reqDTO.setStatus(1);
                 reqDTO.setSmsContent(content);
@@ -375,7 +397,7 @@ public class SmsHandler implements TradeOrderHandler{
                 reqDTO.setMobile(mobile);
                 reqDTO.setSmsConfigId(mobile);
                 reqDTO.setOrderNo(smsSendconfigQueryRespVO.getOrderNo());
-                reqDTO.setSmsConfigId(smsSendconfigQueryRespVO.getId()+"");
+                reqDTO.setSmsConfigId(smsSendconfigQueryRespVO.getId() + "");
                 reqDTO.setResult(result);
                 reqDTO.setStatus(0);
                 reqDTO.setSmsContent(content);
@@ -412,13 +434,13 @@ public class SmsHandler implements TradeOrderHandler{
             } else {
                 conn = (HttpURLConnection) realUrl.openConnection();
             }
-            
+
             // 设置通用的请求属性
             conn.setRequestProperty("accept", "*/*");
             conn.setRequestMethod("POST");
             conn.setRequestProperty("Accept-Charset", "UTF-8");
             conn.setRequestProperty("Content-Type", "application/json");
-            conn.setRequestProperty("charset","UTF-8");
+            conn.setRequestProperty("charset", "UTF-8");
             if (headParam != null) {
                 for (Map.Entry<String, String> entry : headParam.entrySet()) {
                     conn.setRequestProperty(entry.getKey(), entry.getValue());
@@ -434,8 +456,8 @@ public class SmsHandler implements TradeOrderHandler{
 //            System.setProperty("sun.net.client.defaultConnectTimeout", "1000000");
 //            System.setProperty("sun.net.client.defaultReadTimeout", "1000000");
             // 获取URLConnection对象对应的输出流
-            if(StringUtils.isNotBlank(param)){
-                out = new PrintWriter(new OutputStreamWriter(conn.getOutputStream(),"utf-8"));
+            if (StringUtils.isNotBlank(param)) {
+                out = new PrintWriter(new OutputStreamWriter(conn.getOutputStream(), "utf-8"));
                 out.write(param);
                 // flush输出流的缓冲
                 out.flush();

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

@@ -753,6 +753,7 @@ public class TradeOrderServiceImpl implements TradeOrderService {
         tradeOrderUserDO.setContactName(orderCreateReqDTO.getOrderUser().getContactName());
         tradeOrderUserDO.setCredentialNo(orderCreateReqDTO.getOrderUser().getCredentialNo());
         tradeOrderUserDO.setEmail(orderCreateReqDTO.getOrderUser().getEmail());
+        tradeOrderUserDO.setMobile(orderCreateReqDTO.getOrderUser().getMobile());
         tradeOrderUserDO.setOrderId(tradeOrderDO.getId());
         //订单额外信息
         TradeOrderBO.ExtraInfo extraInfo = new TradeOrderBO.ExtraInfo();

+ 9 - 8
ship-module-trade/ship-module-trade-biz/src/main/resources/mapper/order/TradeDetailMapper.xml

@@ -1307,17 +1307,18 @@
     </select>
 
     <select id="selectOrderSmsInfo" resultType="com.yc.ship.module.trade.controller.admin.smsSendconfig.vo.SmsSendconfigQueryRespVO">
-        select t7.*,t2.product_id,t2.product_name,tt2.short_name,t1.order_no,t1.seller_id,t2.use_date,count(distinct t2.id)
-        num,t1.source_name,t3.contact_name,t3.mobile,t4.`name` as routeName,t6.params templateParams,t6.api_template_id,t8.api_key,t8.api_secret,t8.api_url,t8.signature,t8.code channelCode from
+        select t7.*,t1.group_no groupNo,t2.product_id,t2.product_name,t66.name voyageName,t77.name shipName,t1.order_no,t1.seller_id,t2.use_date,count(distinct t2.id)
+        num,t1.source_name,t3.contact_name,t3.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 product_spu tt2 on t2.product_id = tt2.id
         inner join trade_order_user t3 on t3.order_id = t1.id
-        left join product_route_plan t4 on t4.id=t1.route_plan_id and t4.deleted = 0
-        inner join system_sms_product t5 on (t2.product_id=t5.product_id or t5.product_id = t4.id)
-        inner join system_sms_sendconfig t7 on t7.id = t5.sms_template_id
-        inner join sanxia_system.system_sms_template t6 on t7.sms_template_id = t6.id
-        inner join sanxia_system.system_sms_channel t8 on t8.id = t6.channel_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 in (1,2)
         and t2.deleted = 0
         and t7.deleted = 0