liusheng
2026-10-10 0afac42fb2e9d6e5291304dd0044ce3042b45d2b
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
package com.ruoyi.message.sms.provider.sltd.ws;
 
import com.ruoyi.common.utils.uuid.UUID;
import lombok.extern.slf4j.Slf4j;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
 
/**
 * 省立同德信息发送接口。
 * <p>
 * 迁移说明:原类为 {@code com.ruoyi.common.dx.MessageSend},随「短信发送方」一起收口到
 * {@code ruoyi-message} 模块。方法签名与行为保持不变,便于调用方零改动切换。
 */
@Slf4j
public class MessageSend {
 
    private static final Logger logger = LoggerFactory.getLogger(MessageSend.class);
 
    /**
     * 厂家许可号(硬编码)。
     * <p>
     * TODO 待确认:原实现把厂家许可号写死在代码里,未走配置,此处保持原值不变。
     */
    private static final String SERVICE_NUMBER = "202508291634227086";
 
    /**
     * 短信模板许可号(内容带链接和电话)
     */
    private static final String SMS_TEMPLATE_NUMBER = "T202508291635259440";
 
    /**
     * 钉钉消息模板许可号
     */
    private static final String DINGTALK_TEMPLATE_NUMBER = "T202607211306131891";
 
    /**
     * 省立同德信息发送
     *
     * @param sMessageContent 短信内容
     * @param sMessageType    短信类型 1=验证码、2=通知、3=广告 6=内容有链接和电话,7=钉钉消息
     * @param sUserNumber     手机号码
     * @param sScheduleTime   预约发送时间
     * @return 第三方原始响应
     */
    public static String sendMsg(String sMessageContent, String sMessageType, String sUserNumber, String sScheduleTime) {
        log.info("--sMessageContent 的值为:{}   ,--sMessageType 的值为:{},   --sUserNumber 的值为:{},   --sScheduleTime 的值为:{}", sMessageContent, sMessageType, sUserNumber, sScheduleTime);
 
        SmsService service = new SmsService();
        SmsServiceSoap soap = service.getSmsServiceSoap();
        String result = null;
 
        try {
            if ("6".equals(sMessageType)) {
                result = soap.i5GSend(SERVICE_NUMBER, SMS_TEMPLATE_NUMBER, UUID.randomUUID().toString(), sMessageContent, sMessageType, sUserNumber, sScheduleTime);
                log.info("----短信返回的数据为:{},    ----sMessageContent 的值为:{}", result, UUID.randomUUID().toString());
            } else if ("7".equals(sMessageType)) {
                result = soap.i5GSend(SERVICE_NUMBER, DINGTALK_TEMPLATE_NUMBER,
                        UUID.randomUUID().toString(), sMessageContent, sMessageType, sUserNumber, sScheduleTime);
                log.info("----钉钉返回的原始数据为:{}", result);
            } else {
                log.warn("不支持的短信类型:{}", sMessageType);
            }
        } catch (Exception e) {
            //原实现为 e.getCause().getMessage(),当 cause 为 null 时会抛 NPE 掩盖真实异常,这里做防御
            String cause = e.getCause() == null ? e.getMessage() : e.getCause().getMessage();
            logger.error("完整错误信息:{}", cause);
        }
 
        return result;
    }
}