rk
2025-09-28 2304d7b140c5c5b4bf3a83f9ced8bff37d20c42e
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
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
package com.doumee.service.business;
 
import com.alibaba.fastjson.JSON;
import com.alibaba.fastjson.JSONArray;
import com.alibaba.fastjson.JSONObject;
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.http.MethodType;
import com.aliyuncs.profile.DefaultProfile;
import com.aliyuncs.profile.IClientProfile;
import com.doumee.core.constants.Constants;
import com.doumee.core.utils.DateUtil;
import com.doumee.dao.business.CategoryMapper;
import com.doumee.dao.business.model.Category;
import com.doumee.dao.business.model.IdentityInfo;
import com.doumee.dao.business.model.Orders;
import com.doumee.dao.dto.CateringDTO;
import com.github.pagehelper.Constant;
import com.github.xiaoymin.knife4j.core.util.CollectionUtils;
import lombok.extern.slf4j.Slf4j;
import org.apache.commons.lang3.StringUtils;
import org.apache.logging.log4j.LogManager;
import org.apache.logging.log4j.Logger;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
 
import java.math.BigDecimal;
import java.util.*;
 
/**
 * Created by IntelliJ IDEA.
 *
 * @Author : Rk
 * @create 2025/7/23 11:37
 */
@Service
@Slf4j
public class AliSmsService {
 
    protected Logger logger = LogManager.getLogger("sms");
 
    private final static String ACCESS_KEY_ID = "LTAI5tMkg7wwV74a8H6Bm3Ej";
    private final static String ACCESS_KEY_SECRET = "FcHKST36sfwfo706L6bvrweGFIbp3n";
    private final static String SING_NAME = "橙桔天下科技";
 
 
    public void businessSendSms(int type, String phone, Orders orders, BigDecimal distance,
                        IdentityInfo identityInfo,CategoryMapper categoryMapper){
        try{
            Constants.smsContent smsContent = Constants.smsContent.getSmsContent(type);
            Map<String,Object> tempParam = new HashMap<>();
            if(smsContent.getName().indexOf("time1")>=Constants.ZERO){
                tempParam.put("time1", DateUtil.formatDate(orders.getStartDate(),"yyyy-MM-dd")+" ");
            }
            if(smsContent.getName().indexOf("time2")>=Constants.ZERO){
                tempParam.put("time2", " "+DateUtil.formatDate(orders.getEndDate(),"yyyy-MM-dd"));
            }
            if(smsContent.getName().indexOf("money")>=Constants.ZERO){
                tempParam.put("money", new BigDecimal(orders.getReceiveAccount().toString()).divide(new BigDecimal("100"),2,BigDecimal.ROUND_HALF_UP)+"元");
            }
            if(smsContent.getName().indexOf("distance")>=Constants.ZERO){
                tempParam.put("distance", distance +"km");
            }
            //认证短信 特殊处理
            if(Constants.equalsInteger(smsContent.getKey(),Constants.smsContent.authentication.getKey())){
                //认证类型
                if(smsContent.getName().indexOf("authentication")>=Constants.ZERO){
                    tempParam.put("authentication", Constants.equalsInteger(identityInfo.getAuthType(),Constants.ZERO)?"个人":identityInfo.getCompanyName());
                }
                if(smsContent.getName().indexOf("order")>=Constants.ZERO){
                    tempParam.put("oeder", Constants.orderType.getName(identityInfo.getType()).replace("单",""));
                }
                if(smsContent.getName().indexOf("status")>=Constants.ZERO){
                    tempParam.put("status", Constants.equalsInteger(identityInfo.getAuditStatus(),Constants.TWO)?"已通过":"未通过");
                }
            }else{
                if(smsContent.getName().indexOf("order")>=Constants.ZERO){
                    String order = "";
                    //查询订单的类型信息
                    if(Constants.equalsInteger(orders.getType(),Constants.ZERO)){
                        order = Constants.workType.getName(orders.getWorkType());
                        Category category = categoryMapper.selectById(orders.getCategoryId());
                        if(Objects.nonNull(category)){
                            order = category.getName() + order;
                        }
                    }else if(Constants.equalsInteger(orders.getType(),Constants.ZERO)){
                        order = "运输";
                        Category category = categoryMapper.selectById(orders.getTransportTypeId());
                        if(Objects.nonNull(category)){
                            order = category.getName() + order;
                        }
                    }else{
                        List<CateringDTO> cateringDTOList = JSONArray.parseArray(orders.getWayInfo(),CateringDTO.class);
                        if(CollectionUtils.isNotEmpty(cateringDTOList)){
                            for (CateringDTO cateringDTO:cateringDTOList) {
                                if(StringUtils.isBlank(order)){
                                    order = cateringDTO.getName();
                                }else{
                                    order = order + "/" +cateringDTO.getName();
                                }
                            }
                        }
                    }
                    tempParam.put("order",order);
                }
            }
            if(smsContent.getName().indexOf("distance")>=Constants.ZERO){
                tempParam.put("distance", distance +"km");
            }
            AliSmsService.sendSms(phone,smsContent.getCode(), JSONObject.toJSONString(tempParam));
        }catch (Exception e){
            log.error("短信发送失败~");
        }
 
    }
 
 
    public static void main(String[] args) {
        Map<String,Object> tempParam = new HashMap<>();
        tempParam.put("order","葡萄采摘工");
        tempParam.put("time1","07-23");
        tempParam.put("time2","07-24");
        AliSmsService.sendSms("18055151023","SMS_491055243", JSONObject.toJSONString(tempParam));
    }
 
 
    /**
     * 发短信模板(可群发)
     *
     * @param phone         订单详情
     * @param templateCode  模板code
     * @param templateParam 模板变量json字符串
     * @return 处理结果
     */
    public static Boolean sendSms(String phone, String templateCode, String templateParam) {
        try {
            //设置超时时间-可自行调整
            System.setProperty("sun.net.client.defaultConnectTimeout", "10000");
            System.setProperty("sun.net.client.defaultReadTimeout", "10000");
            //初始化ascClient需要的几个参数
            //短信API产品名称(短信产品名固定,无需修改)
            final String product = "Dysmsapi";
            //短信API产品域名(接口地址固定,无需修改)
            final String domain = "dysmsapi.aliyuncs.com";
            //初始化ascClient,暂时不支持多region(请勿修改)
            IClientProfile profile = DefaultProfile.getProfile("cn-hangzhou", ACCESS_KEY_ID, ACCESS_KEY_SECRET);
            DefaultProfile.addEndpoint("cn-hangzhou", "cn-hangzhou", product, domain);
            IAcsClient acsClient = new DefaultAcsClient(profile);
            //组装请求对象
            SendSmsRequest request = new SendSmsRequest();
            //使用post提交
            request.setMethod(MethodType.POST);
            //必填:待发送手机号。支持以逗号分隔的形式进行批量调用,批量上限为1000个手机号码,批量调用相对于单条调用及时性稍有延迟,验证码类型的短信推荐使用单条调用的方式
            request.setPhoneNumbers(phone);
            //必填:短信签名-可在短信控制台中找到
            request.setSignName(SING_NAME);
            //必填:短信模板-可在短信控制台中找到
            request.setTemplateCode(templateCode);
            //可选:模板中的变量替换JSON串,如模板内容为"亲爱的${name},您的验证码为${code}"时,此处的值为
            //友情提示:如果JSON中需要带换行符,请参照标准的JSON协议对换行符的要求,比如短信内容中包含\r\n的情况在JSON中需要表示成\\r\\n,否则会导致JSON在服务端解析失败
            request.setTemplateParam(templateParam);
            //可选-上行短信扩展码(扩展码字段控制在7位或以下,无特殊需求用户请忽略此字段)
            //dto.setSmsUpExtendCode("90997");
            //可选:outId为提供给业务方扩展字段,最终在短信回执消息中将此值带回给调用者
            //dto.setOutId("yourOutId");
            //请求失败这里会抛ClientException异常
            SendSmsResponse sendSmsResponse = acsClient.getAcsResponse(request);
            if (sendSmsResponse.getCode() != null && sendSmsResponse.getCode().equals("OK")) {
                log.info("短信发送内容:"+phone + "-" + templateCode + "-" + templateParam + " >>> " + JSON.toJSONString(sendSmsResponse));
                return true;
            } else {
                log.error("短信发送内容:"+phone + "-" + templateCode + "-" + templateParam + " >>> " + JSON.toJSONString(sendSmsResponse));
            }
        } catch (Exception e) {
            e.printStackTrace();
//            logger.error(e);
        }
        return false;
    }
}