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
72
73
74
75
76
package com.ruoyi.message.sms.provider.messaginginsert;
 
import com.ruoyi.message.config.MessageProperties;
import com.ruoyi.message.sms.provider.messaginginsert.ws.MessagingInsertLocator;
import com.ruoyi.message.sms.provider.messaginginsert.ws.MessagingInsertSoap12Stub;
import lombok.extern.slf4j.Slf4j;
import org.springframework.stereotype.Component;
 
import javax.xml.rpc.holders.IntHolder;
import javax.xml.rpc.holders.StringHolder;
import java.util.Date;
 
/**
 * 预约挂号短信平台(MessagingInsert)API。
 * <p>
 * 对接特征:Axis SOAP12,{@code SMSMessageAccept(xmlReq, out int, out string)},
 * 请求报文为 {@code &lt;Request&gt;&lt;operate&gt;S001&lt;/operate&gt;...} 的 XML。
 * <p>
 * 迁移说明:原逻辑在 {@code com.ruoyi.system.service.impl.SmsParamServiceImpl.sendSmsInfo},
 * 现收口到本模块;原实现把服务地址硬编码在生成的 {@code MessagingInsertLocator} 里,
 * 这里改为按 {@code message.sms.messaging-insert.ws-url} 显式设置(默认值与原硬编码一致)。
 */
@Slf4j
@Component
public class MessagingInsertSmsApi {
 
    private final MessageProperties properties;
 
    public MessagingInsertSmsApi(MessageProperties properties) {
        this.properties = properties;
    }
 
    /**
     * 发送预约挂号类短信(operate=S001,Type=预约挂号)
     *
     * @param content 短信内容
     * @param phone   手机号
     * @return 平台返回码
     */
    public Integer sendSmsInfo(String content, String phone) {
        MessagingInsertSoap12Stub binding;
        try {
            MessagingInsertLocator locator = new MessagingInsertLocator();
            String wsUrl = properties.getSms().getMessagingInsert().getWsUrl();
            if (wsUrl != null && !wsUrl.trim().isEmpty()) {
                locator.setMessagingInsertSoap12EndpointAddress(wsUrl);
                locator.setMessagingInsertSoapEndpointAddress(wsUrl);
            }
            binding = (MessagingInsertSoap12Stub) locator.getMessagingInsertSoap12();
        } catch (Exception e) {
            log.error("【MessagingInsertSmsApi】初始化 SOAP 客户端失败:{}", e.getMessage(), e);
            return null;
        }
 
        String xmlReq = "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n"
                + "<Request>\n"
                + "<operate>S001</operate>\n"
                + "<Sheets>\n"
                + "<Sheet>\n"
                + "<Content>" + content + "</Content>\n"
                + "<Mobile>" + phone + "</Mobile>\n"
                + "<DateTime>" + new Date() + "</DateTime>\n"
                + "<Type>预约挂号</Type>\n"
                + "</Sheet>\n"
                + "</Sheets>\n"
                + "</Request>";
 
        Integer result = null;
        try {
            result = binding.SMSMessageAccept(xmlReq, new IntHolder(), new StringHolder());
        } catch (Exception e) {
            log.error("【MessagingInsertSmsApi】短信发送失败:{}", e.getMessage(), e);
        }
        return result;
    }
}