Commit 8eb82f0b591cb0237b1b526a446964c4db21195d

Authored by YunaiV
1 parent 44014c77

【代码优化】SYSTEM:去除腾讯云短信的 maven 依赖

yudao-dependencies/pom.xml
@@ -69,7 +69,6 @@ @@ -69,7 +69,6 @@
69 <okhttp3.version>4.11.0</okhttp3.version> 69 <okhttp3.version>4.11.0</okhttp3.version>
70 <commons-io.version>2.15.1</commons-io.version> 70 <commons-io.version>2.15.1</commons-io.version>
71 <minio.version>8.5.7</minio.version> 71 <minio.version>8.5.7</minio.version>
72 - <tencentcloud-sdk-java.version>3.1.880</tencentcloud-sdk-java.version>  
73 <justauth.version>2.0.5</justauth.version> 72 <justauth.version>2.0.5</justauth.version>
74 <jimureport.version>1.7.8</jimureport.version> 73 <jimureport.version>1.7.8</jimureport.version>
75 <xercesImpl.version>2.12.2</xercesImpl.version> 74 <xercesImpl.version>2.12.2</xercesImpl.version>
@@ -545,14 +544,6 @@ @@ -545,14 +544,6 @@
545 <version>${minio.version}</version> 544 <version>${minio.version}</version>
546 </dependency> 545 </dependency>
547 546
548 - <!-- SMS SDK begin -->  
549 - <dependency>  
550 - <groupId>com.tencentcloudapi</groupId>  
551 - <artifactId>tencentcloud-sdk-java-sms</artifactId>  
552 - <version>${tencentcloud-sdk-java.version}</version>  
553 - </dependency>  
554 - <!-- SMS SDK end -->  
555 -  
556 <dependency> 547 <dependency>
557 <groupId>com.xingyuv</groupId> 548 <groupId>com.xingyuv</groupId>
558 <artifactId>spring-boot-starter-justauth</artifactId> <!-- 社交登陆(例如说,个人微信、企业微信等等) --> 549 <artifactId>spring-boot-starter-justauth</artifactId> <!-- 社交登陆(例如说,个人微信、企业微信等等) -->
yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/framework/sms/core/client/impl/TencentSmsClient.java
@@ -18,11 +18,11 @@ import cn.iocoder.yudao.module.system.framework.sms.core.property.SmsChannelProp @@ -18,11 +18,11 @@ import cn.iocoder.yudao.module.system.framework.sms.core.property.SmsChannelProp
18 import com.fasterxml.jackson.annotation.JsonFormat; 18 import com.fasterxml.jackson.annotation.JsonFormat;
19 import com.fasterxml.jackson.annotation.JsonProperty; 19 import com.fasterxml.jackson.annotation.JsonProperty;
20 import com.google.common.annotations.VisibleForTesting; 20 import com.google.common.annotations.VisibleForTesting;
  21 +import jakarta.xml.bind.DatatypeConverter;
21 import lombok.Data; 22 import lombok.Data;
22 23
23 import javax.crypto.Mac; 24 import javax.crypto.Mac;
24 import javax.crypto.spec.SecretKeySpec; 25 import javax.crypto.spec.SecretKeySpec;
25 -import javax.xml.bind.DatatypeConverter;  
26 import java.nio.charset.StandardCharsets; 26 import java.nio.charset.StandardCharsets;
27 import java.text.SimpleDateFormat; 27 import java.text.SimpleDateFormat;
28 import java.time.LocalDateTime; 28 import java.time.LocalDateTime;
@@ -33,6 +33,7 @@ import static cn.iocoder.yudao.framework.common.util.collection.CollectionUtils. @@ -33,6 +33,7 @@ import static cn.iocoder.yudao.framework.common.util.collection.CollectionUtils.
33 import static cn.iocoder.yudao.framework.common.util.date.DateUtils.FORMAT_YEAR_MONTH_DAY_HOUR_MINUTE_SECOND; 33 import static cn.iocoder.yudao.framework.common.util.date.DateUtils.FORMAT_YEAR_MONTH_DAY_HOUR_MINUTE_SECOND;
34 import static cn.iocoder.yudao.framework.common.util.date.DateUtils.TIME_ZONE_DEFAULT; 34 import static cn.iocoder.yudao.framework.common.util.date.DateUtils.TIME_ZONE_DEFAULT;
35 35
  36 +// TODO @scholar 建议参考 AliyunSmsClient 优化下
36 /** 37 /**
37 * 腾讯云短信功能实现 38 * 腾讯云短信功能实现
38 * 39 *
@@ -218,7 +219,7 @@ public class TencentSmsClient extends AbstractSmsClient { @@ -218,7 +219,7 @@ public class TencentSmsClient extends AbstractSmsClient {
218 219
219 QuerySmsTemplateResponse.TemplateInfo templateInfo = new QuerySmsTemplateResponse.TemplateInfo(); 220 QuerySmsTemplateResponse.TemplateInfo templateInfo = new QuerySmsTemplateResponse.TemplateInfo();
220 221
221 - Object statusObject = resJson.getJSONObject("Response").getJSONArray("DescribeTemplateStatusSet").getFirst(); 222 + Object statusObject = resJson.getJSONObject("Response").getJSONArray("DescribeTemplateStatusSet").get(0);
222 223
223 JSONObject statusJSON = new JSONObject(statusObject); 224 JSONObject statusJSON = new JSONObject(statusObject);
224 225
yudao-module-system/yudao-module-system-biz/src/test/java/cn/iocoder/yudao/module/system/framework/sms/core/client/impl/TencentSmsClientTest.java
1 package cn.iocoder.yudao.module.system.framework.sms.core.client.impl; 1 package cn.iocoder.yudao.module.system.framework.sms.core.client.impl;
2 2
3 import cn.hutool.core.util.ReflectUtil; 3 import cn.hutool.core.util.ReflectUtil;
4 -import cn.iocoder.yudao.framework.common.core.KeyValue;  
5 -import cn.iocoder.yudao.framework.common.util.collection.ArrayUtils;  
6 -import cn.iocoder.yudao.framework.common.util.collection.MapUtils;  
7 -import cn.iocoder.yudao.framework.common.util.json.JsonUtils;  
8 import cn.iocoder.yudao.framework.test.core.ut.BaseMockitoUnitTest; 4 import cn.iocoder.yudao.framework.test.core.ut.BaseMockitoUnitTest;
  5 +import cn.iocoder.yudao.module.system.framework.sms.core.client.SmsClient;
9 import cn.iocoder.yudao.module.system.framework.sms.core.client.dto.SmsReceiveRespDTO; 6 import cn.iocoder.yudao.module.system.framework.sms.core.client.dto.SmsReceiveRespDTO;
10 -import cn.iocoder.yudao.module.system.framework.sms.core.client.dto.SmsSendRespDTO;  
11 -import cn.iocoder.yudao.module.system.framework.sms.core.client.dto.SmsTemplateRespDTO;  
12 import cn.iocoder.yudao.module.system.framework.sms.core.enums.SmsTemplateAuditStatusEnum; 7 import cn.iocoder.yudao.module.system.framework.sms.core.enums.SmsTemplateAuditStatusEnum;
13 import cn.iocoder.yudao.module.system.framework.sms.core.property.SmsChannelProperties; 8 import cn.iocoder.yudao.module.system.framework.sms.core.property.SmsChannelProperties;
14 -import com.google.common.collect.Lists;  
15 -import com.tencentcloudapi.sms.v20210111.SmsClient;  
16 -import com.tencentcloudapi.sms.v20210111.models.DescribeSmsTemplateListResponse;  
17 -import com.tencentcloudapi.sms.v20210111.models.DescribeTemplateListStatus;  
18 -import com.tencentcloudapi.sms.v20210111.models.SendSmsResponse;  
19 -import com.tencentcloudapi.sms.v20210111.models.SendStatus;  
20 import org.junit.jupiter.api.Test; 9 import org.junit.jupiter.api.Test;
21 import org.mockito.InjectMocks; 10 import org.mockito.InjectMocks;
22 import org.mockito.Mock; 11 import org.mockito.Mock;
23 12
24 import java.time.LocalDateTime; 13 import java.time.LocalDateTime;
25 -import java.util.ArrayList;  
26 import java.util.List; 14 import java.util.List;
27 15
28 -import static cn.iocoder.yudao.framework.common.util.json.JsonUtils.toJsonString;  
29 -import static cn.iocoder.yudao.framework.test.core.util.RandomUtils.*; 16 +import static cn.iocoder.yudao.framework.test.core.util.RandomUtils.randomString;
30 import static org.junit.jupiter.api.Assertions.*; 17 import static org.junit.jupiter.api.Assertions.*;
31 -import static org.mockito.ArgumentMatchers.argThat;  
32 -import static org.mockito.Mockito.when;  
33 18
  19 +// TODO @芋艿:补全单测
34 /** 20 /**
35 * {@link TencentSmsClient} 的单元测试 21 * {@link TencentSmsClient} 的单元测试
36 * 22 *
@@ -73,87 +59,87 @@ public class TencentSmsClientTest extends BaseMockitoUnitTest { @@ -73,87 +59,87 @@ public class TencentSmsClientTest extends BaseMockitoUnitTest {
73 assertNotSame(client, ReflectUtil.getFieldValue(smsClient, "client")); 59 assertNotSame(client, ReflectUtil.getFieldValue(smsClient, "client"));
74 } 60 }
75 61
76 - @Test  
77 - public void testDoSendSms_success() throws Throwable {  
78 - // 准备参数  
79 - Long sendLogId = randomLongId();  
80 - String mobile = randomString();  
81 - String apiTemplateId = randomString();  
82 - List<KeyValue<String, Object>> templateParams = Lists.newArrayList(  
83 - new KeyValue<>("1", 1234), new KeyValue<>("2", "login"));  
84 - String requestId = randomString();  
85 - String serialNo = randomString();  
86 - // mock 方法  
87 - SendSmsResponse response = randomPojo(SendSmsResponse.class, o -> {  
88 - o.setRequestId(requestId);  
89 - SendStatus[] sendStatuses = new SendStatus[1];  
90 - o.setSendStatusSet(sendStatuses);  
91 - SendStatus sendStatus = new SendStatus();  
92 - sendStatuses[0] = sendStatus;  
93 - sendStatus.setCode(TencentSmsClient.API_CODE_SUCCESS);  
94 - sendStatus.setMessage("send success");  
95 - sendStatus.setSerialNo(serialNo);  
96 - });  
97 - when(client.SendSms(argThat(request -> {  
98 - assertEquals(mobile, request.getPhoneNumberSet()[0]);  
99 - assertEquals(properties.getSignature(), request.getSignName());  
100 - assertEquals(apiTemplateId, request.getTemplateId());  
101 - assertEquals(toJsonString(ArrayUtils.toArray(new ArrayList<>(MapUtils.convertMap(templateParams).values()), String::valueOf)),  
102 - toJsonString(request.getTemplateParamSet()));  
103 - assertEquals(sendLogId, ReflectUtil.getFieldValue(JsonUtils.parseObject(request.getSessionContext(), TencentSmsClient.SessionContext.class), "logId"));  
104 - return true;  
105 - }))).thenReturn(response);  
106 -  
107 - // 调用  
108 - SmsSendRespDTO result = smsClient.sendSms(sendLogId, mobile, apiTemplateId, templateParams);  
109 - // 断言  
110 - assertTrue(result.getSuccess());  
111 - assertEquals(response.getRequestId(), result.getApiRequestId());  
112 - assertEquals(response.getSendStatusSet()[0].getCode(), result.getApiCode());  
113 - assertEquals(response.getSendStatusSet()[0].getMessage(), result.getApiMsg());  
114 - assertEquals(response.getSendStatusSet()[0].getSerialNo(), result.getSerialNo());  
115 - }  
116 -  
117 - @Test  
118 - public void testDoSendSms_fail() throws Throwable {  
119 - // 准备参数  
120 - Long sendLogId = randomLongId();  
121 - String mobile = randomString();  
122 - String apiTemplateId = randomString();  
123 - List<KeyValue<String, Object>> templateParams = Lists.newArrayList(  
124 - new KeyValue<>("1", 1234), new KeyValue<>("2", "login"));  
125 - String requestId = randomString();  
126 - String serialNo = randomString();  
127 - // mock 方法  
128 - SendSmsResponse response = randomPojo(SendSmsResponse.class, o -> {  
129 - o.setRequestId(requestId);  
130 - SendStatus[] sendStatuses = new SendStatus[1];  
131 - o.setSendStatusSet(sendStatuses);  
132 - SendStatus sendStatus = new SendStatus();  
133 - sendStatuses[0] = sendStatus;  
134 - sendStatus.setCode("ERROR");  
135 - sendStatus.setMessage("send success");  
136 - sendStatus.setSerialNo(serialNo);  
137 - });  
138 - when(client.SendSms(argThat(request -> {  
139 - assertEquals(mobile, request.getPhoneNumberSet()[0]);  
140 - assertEquals(properties.getSignature(), request.getSignName());  
141 - assertEquals(apiTemplateId, request.getTemplateId());  
142 - assertEquals(toJsonString(ArrayUtils.toArray(new ArrayList<>(MapUtils.convertMap(templateParams).values()), String::valueOf)),  
143 - toJsonString(request.getTemplateParamSet()));  
144 - assertEquals(sendLogId, ReflectUtil.getFieldValue(JsonUtils.parseObject(request.getSessionContext(), TencentSmsClient.SessionContext.class), "logId"));  
145 - return true;  
146 - }))).thenReturn(response);  
147 -  
148 - // 调用  
149 - SmsSendRespDTO result = smsClient.sendSms(sendLogId, mobile, apiTemplateId, templateParams);  
150 - // 断言  
151 - assertFalse(result.getSuccess());  
152 - assertEquals(response.getRequestId(), result.getApiRequestId());  
153 - assertEquals(response.getSendStatusSet()[0].getCode(), result.getApiCode());  
154 - assertEquals(response.getSendStatusSet()[0].getMessage(), result.getApiMsg());  
155 - assertEquals(response.getSendStatusSet()[0].getSerialNo(), result.getSerialNo());  
156 - } 62 +// @Test
  63 +// public void testDoSendSms_success() throws Throwable {
  64 +// // 准备参数
  65 +// Long sendLogId = randomLongId();
  66 +// String mobile = randomString();
  67 +// String apiTemplateId = randomString();
  68 +// List<KeyValue<String, Object>> templateParams = Lists.newArrayList(
  69 +// new KeyValue<>("1", 1234), new KeyValue<>("2", "login"));
  70 +// String requestId = randomString();
  71 +// String serialNo = randomString();
  72 +// // mock 方法
  73 +// SendSmsResponse response = randomPojo(SendSmsResponse.class, o -> {
  74 +// o.setRequestId(requestId);
  75 +// SendStatus[] sendStatuses = new SendStatus[1];
  76 +// o.setSendStatusSet(sendStatuses);
  77 +// SendStatus sendStatus = new SendStatus();
  78 +// sendStatuses[0] = sendStatus;
  79 +// sendStatus.setCode(TencentSmsClient.API_CODE_SUCCESS);
  80 +// sendStatus.setMessage("send success");
  81 +// sendStatus.setSerialNo(serialNo);
  82 +// });
  83 +// when(client.SendSms(argThat(request -> {
  84 +// assertEquals(mobile, request.getPhoneNumberSet()[0]);
  85 +// assertEquals(properties.getSignature(), request.getSignName());
  86 +// assertEquals(apiTemplateId, request.getTemplateId());
  87 +// assertEquals(toJsonString(ArrayUtils.toArray(new ArrayList<>(MapUtils.convertMap(templateParams).values()), String::valueOf)),
  88 +// toJsonString(request.getTemplateParamSet()));
  89 +// assertEquals(sendLogId, ReflectUtil.getFieldValue(JsonUtils.parseObject(request.getSessionContext(), TencentSmsClient.SessionContext.class), "logId"));
  90 +// return true;
  91 +// }))).thenReturn(response);
  92 +//
  93 +// // 调用
  94 +// SmsSendRespDTO result = smsClient.sendSms(sendLogId, mobile, apiTemplateId, templateParams);
  95 +// // 断言
  96 +// assertTrue(result.getSuccess());
  97 +// assertEquals(response.getRequestId(), result.getApiRequestId());
  98 +// assertEquals(response.getSendStatusSet()[0].getCode(), result.getApiCode());
  99 +// assertEquals(response.getSendStatusSet()[0].getMessage(), result.getApiMsg());
  100 +// assertEquals(response.getSendStatusSet()[0].getSerialNo(), result.getSerialNo());
  101 +// }
  102 +
  103 +// @Test
  104 +// public void testDoSendSms_fail() throws Throwable {
  105 +// // 准备参数
  106 +// Long sendLogId = randomLongId();
  107 +// String mobile = randomString();
  108 +// String apiTemplateId = randomString();
  109 +// List<KeyValue<String, Object>> templateParams = Lists.newArrayList(
  110 +// new KeyValue<>("1", 1234), new KeyValue<>("2", "login"));
  111 +// String requestId = randomString();
  112 +// String serialNo = randomString();
  113 +// // mock 方法
  114 +// SendSmsResponse response = randomPojo(SendSmsResponse.class, o -> {
  115 +// o.setRequestId(requestId);
  116 +// SendStatus[] sendStatuses = new SendStatus[1];
  117 +// o.setSendStatusSet(sendStatuses);
  118 +// SendStatus sendStatus = new SendStatus();
  119 +// sendStatuses[0] = sendStatus;
  120 +// sendStatus.setCode("ERROR");
  121 +// sendStatus.setMessage("send success");
  122 +// sendStatus.setSerialNo(serialNo);
  123 +// });
  124 +// when(client.SendSms(argThat(request -> {
  125 +// assertEquals(mobile, request.getPhoneNumberSet()[0]);
  126 +// assertEquals(properties.getSignature(), request.getSignName());
  127 +// assertEquals(apiTemplateId, request.getTemplateId());
  128 +// assertEquals(toJsonString(ArrayUtils.toArray(new ArrayList<>(MapUtils.convertMap(templateParams).values()), String::valueOf)),
  129 +// toJsonString(request.getTemplateParamSet()));
  130 +// assertEquals(sendLogId, ReflectUtil.getFieldValue(JsonUtils.parseObject(request.getSessionContext(), TencentSmsClient.SessionContext.class), "logId"));
  131 +// return true;
  132 +// }))).thenReturn(response);
  133 +//
  134 +// // 调用
  135 +// SmsSendRespDTO result = smsClient.sendSms(sendLogId, mobile, apiTemplateId, templateParams);
  136 +// // 断言
  137 +// assertFalse(result.getSuccess());
  138 +// assertEquals(response.getRequestId(), result.getApiRequestId());
  139 +// assertEquals(response.getSendStatusSet()[0].getCode(), result.getApiCode());
  140 +// assertEquals(response.getSendStatusSet()[0].getMessage(), result.getApiMsg());
  141 +// assertEquals(response.getSendStatusSet()[0].getSerialNo(), result.getSerialNo());
  142 +// }
157 143
158 @Test 144 @Test
159 public void testParseSmsReceiveStatus() { 145 public void testParseSmsReceiveStatus() {
@@ -185,35 +171,35 @@ public class TencentSmsClientTest extends BaseMockitoUnitTest { @@ -185,35 +171,35 @@ public class TencentSmsClientTest extends BaseMockitoUnitTest {
185 assertEquals(67890L, statuses.get(0).getLogId()); 171 assertEquals(67890L, statuses.get(0).getLogId());
186 } 172 }
187 173
188 - @Test  
189 - public void testGetSmsTemplate() throws Throwable {  
190 - // 准备参数  
191 - Long apiTemplateId = randomLongId();  
192 - String requestId = randomString();  
193 -  
194 - // mock 方法  
195 - DescribeSmsTemplateListResponse response = randomPojo(DescribeSmsTemplateListResponse.class, o -> {  
196 - DescribeTemplateListStatus[] describeTemplateListStatuses = new DescribeTemplateListStatus[1];  
197 - DescribeTemplateListStatus templateStatus = new DescribeTemplateListStatus();  
198 - templateStatus.setTemplateId(apiTemplateId);  
199 - templateStatus.setStatusCode(0L);// 设置模板通过  
200 - describeTemplateListStatuses[0] = templateStatus;  
201 - o.setDescribeTemplateStatusSet(describeTemplateListStatuses);  
202 - o.setRequestId(requestId);  
203 - });  
204 - when(client.DescribeSmsTemplateList(argThat(request -> {  
205 - assertEquals(apiTemplateId, request.getTemplateIdSet()[0]);  
206 - return true;  
207 - }))).thenReturn(response);  
208 -  
209 - // 调用  
210 - SmsTemplateRespDTO result = smsClient.getSmsTemplate(apiTemplateId.toString());  
211 - // 断言  
212 - assertEquals(response.getDescribeTemplateStatusSet()[0].getTemplateId().toString(), result.getId());  
213 - assertEquals(response.getDescribeTemplateStatusSet()[0].getTemplateContent(), result.getContent());  
214 - assertEquals(SmsTemplateAuditStatusEnum.SUCCESS.getStatus(), result.getAuditStatus());  
215 - assertEquals(response.getDescribeTemplateStatusSet()[0].getReviewReply(), result.getAuditReason());  
216 - } 174 +// @Test
  175 +// public void testGetSmsTemplate() throws Throwable {
  176 +// // 准备参数
  177 +// Long apiTemplateId = randomLongId();
  178 +// String requestId = randomString();
  179 +//
  180 +// // mock 方法
  181 +// DescribeSmsTemplateListResponse response = randomPojo(DescribeSmsTemplateListResponse.class, o -> {
  182 +// DescribeTemplateListStatus[] describeTemplateListStatuses = new DescribeTemplateListStatus[1];
  183 +// DescribeTemplateListStatus templateStatus = new DescribeTemplateListStatus();
  184 +// templateStatus.setTemplateId(apiTemplateId);
  185 +// templateStatus.setStatusCode(0L);// 设置模板通过
  186 +// describeTemplateListStatuses[0] = templateStatus;
  187 +// o.setDescribeTemplateStatusSet(describeTemplateListStatuses);
  188 +// o.setRequestId(requestId);
  189 +// });
  190 +// when(client.DescribeSmsTemplateList(argThat(request -> {
  191 +// assertEquals(apiTemplateId, request.getTemplateIdSet()[0]);
  192 +// return true;
  193 +// }))).thenReturn(response);
  194 +//
  195 +// // 调用
  196 +// SmsTemplateRespDTO result = smsClient.getSmsTemplate(apiTemplateId.toString());
  197 +// // 断言
  198 +// assertEquals(response.getDescribeTemplateStatusSet()[0].getTemplateId().toString(), result.getId());
  199 +// assertEquals(response.getDescribeTemplateStatusSet()[0].getTemplateContent(), result.getContent());
  200 +// assertEquals(SmsTemplateAuditStatusEnum.SUCCESS.getStatus(), result.getAuditStatus());
  201 +// assertEquals(response.getDescribeTemplateStatusSet()[0].getReviewReply(), result.getAuditReason());
  202 +// }
217 203
218 @Test 204 @Test
219 public void testConvertSmsTemplateAuditStatus() { 205 public void testConvertSmsTemplateAuditStatus() {