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

This commit is contained in:
YunaiV 2024-08-07 21:20:29 +08:00
parent 44014c7772
commit 8eb82f0b59
3 changed files with 115 additions and 137 deletions

View File

@ -69,7 +69,6 @@
<okhttp3.version>4.11.0</okhttp3.version> <okhttp3.version>4.11.0</okhttp3.version>
<commons-io.version>2.15.1</commons-io.version> <commons-io.version>2.15.1</commons-io.version>
<minio.version>8.5.7</minio.version> <minio.version>8.5.7</minio.version>
<tencentcloud-sdk-java.version>3.1.880</tencentcloud-sdk-java.version>
<justauth.version>2.0.5</justauth.version> <justauth.version>2.0.5</justauth.version>
<jimureport.version>1.7.8</jimureport.version> <jimureport.version>1.7.8</jimureport.version>
<xercesImpl.version>2.12.2</xercesImpl.version> <xercesImpl.version>2.12.2</xercesImpl.version>
@ -545,14 +544,6 @@
<version>${minio.version}</version> <version>${minio.version}</version>
</dependency> </dependency>
<!-- SMS SDK begin -->
<dependency>
<groupId>com.tencentcloudapi</groupId>
<artifactId>tencentcloud-sdk-java-sms</artifactId>
<version>${tencentcloud-sdk-java.version}</version>
</dependency>
<!-- SMS SDK end -->
<dependency> <dependency>
<groupId>com.xingyuv</groupId> <groupId>com.xingyuv</groupId>
<artifactId>spring-boot-starter-justauth</artifactId> <!-- 社交登陆(例如说,个人微信、企业微信等等) --> <artifactId>spring-boot-starter-justauth</artifactId> <!-- 社交登陆(例如说,个人微信、企业微信等等) -->

View File

@ -18,11 +18,11 @@ import cn.iocoder.yudao.module.system.framework.sms.core.property.SmsChannelProp
import com.fasterxml.jackson.annotation.JsonFormat; import com.fasterxml.jackson.annotation.JsonFormat;
import com.fasterxml.jackson.annotation.JsonProperty; import com.fasterxml.jackson.annotation.JsonProperty;
import com.google.common.annotations.VisibleForTesting; import com.google.common.annotations.VisibleForTesting;
import jakarta.xml.bind.DatatypeConverter;
import lombok.Data; import lombok.Data;
import javax.crypto.Mac; import javax.crypto.Mac;
import javax.crypto.spec.SecretKeySpec; import javax.crypto.spec.SecretKeySpec;
import javax.xml.bind.DatatypeConverter;
import java.nio.charset.StandardCharsets; import java.nio.charset.StandardCharsets;
import java.text.SimpleDateFormat; import java.text.SimpleDateFormat;
import java.time.LocalDateTime; import java.time.LocalDateTime;
@ -33,6 +33,7 @@ import static cn.iocoder.yudao.framework.common.util.collection.CollectionUtils.
import static cn.iocoder.yudao.framework.common.util.date.DateUtils.FORMAT_YEAR_MONTH_DAY_HOUR_MINUTE_SECOND; import static cn.iocoder.yudao.framework.common.util.date.DateUtils.FORMAT_YEAR_MONTH_DAY_HOUR_MINUTE_SECOND;
import static cn.iocoder.yudao.framework.common.util.date.DateUtils.TIME_ZONE_DEFAULT; import static cn.iocoder.yudao.framework.common.util.date.DateUtils.TIME_ZONE_DEFAULT;
// TODO @scholar 建议参考 AliyunSmsClient 优化下
/** /**
* 腾讯云短信功能实现 * 腾讯云短信功能实现
* *
@ -218,7 +219,7 @@ public class TencentSmsClient extends AbstractSmsClient {
QuerySmsTemplateResponse.TemplateInfo templateInfo = new QuerySmsTemplateResponse.TemplateInfo(); QuerySmsTemplateResponse.TemplateInfo templateInfo = new QuerySmsTemplateResponse.TemplateInfo();
Object statusObject = resJson.getJSONObject("Response").getJSONArray("DescribeTemplateStatusSet").getFirst(); Object statusObject = resJson.getJSONObject("Response").getJSONArray("DescribeTemplateStatusSet").get(0);
JSONObject statusJSON = new JSONObject(statusObject); JSONObject statusJSON = new JSONObject(statusObject);

View File

@ -1,36 +1,22 @@
package cn.iocoder.yudao.module.system.framework.sms.core.client.impl; package cn.iocoder.yudao.module.system.framework.sms.core.client.impl;
import cn.hutool.core.util.ReflectUtil; import cn.hutool.core.util.ReflectUtil;
import cn.iocoder.yudao.framework.common.core.KeyValue;
import cn.iocoder.yudao.framework.common.util.collection.ArrayUtils;
import cn.iocoder.yudao.framework.common.util.collection.MapUtils;
import cn.iocoder.yudao.framework.common.util.json.JsonUtils;
import cn.iocoder.yudao.framework.test.core.ut.BaseMockitoUnitTest; import cn.iocoder.yudao.framework.test.core.ut.BaseMockitoUnitTest;
import cn.iocoder.yudao.module.system.framework.sms.core.client.SmsClient;
import cn.iocoder.yudao.module.system.framework.sms.core.client.dto.SmsReceiveRespDTO; import cn.iocoder.yudao.module.system.framework.sms.core.client.dto.SmsReceiveRespDTO;
import cn.iocoder.yudao.module.system.framework.sms.core.client.dto.SmsSendRespDTO;
import cn.iocoder.yudao.module.system.framework.sms.core.client.dto.SmsTemplateRespDTO;
import cn.iocoder.yudao.module.system.framework.sms.core.enums.SmsTemplateAuditStatusEnum; import cn.iocoder.yudao.module.system.framework.sms.core.enums.SmsTemplateAuditStatusEnum;
import cn.iocoder.yudao.module.system.framework.sms.core.property.SmsChannelProperties; import cn.iocoder.yudao.module.system.framework.sms.core.property.SmsChannelProperties;
import com.google.common.collect.Lists;
import com.tencentcloudapi.sms.v20210111.SmsClient;
import com.tencentcloudapi.sms.v20210111.models.DescribeSmsTemplateListResponse;
import com.tencentcloudapi.sms.v20210111.models.DescribeTemplateListStatus;
import com.tencentcloudapi.sms.v20210111.models.SendSmsResponse;
import com.tencentcloudapi.sms.v20210111.models.SendStatus;
import org.junit.jupiter.api.Test; import org.junit.jupiter.api.Test;
import org.mockito.InjectMocks; import org.mockito.InjectMocks;
import org.mockito.Mock; import org.mockito.Mock;
import java.time.LocalDateTime; import java.time.LocalDateTime;
import java.util.ArrayList;
import java.util.List; import java.util.List;
import static cn.iocoder.yudao.framework.common.util.json.JsonUtils.toJsonString; import static cn.iocoder.yudao.framework.test.core.util.RandomUtils.randomString;
import static cn.iocoder.yudao.framework.test.core.util.RandomUtils.*;
import static org.junit.jupiter.api.Assertions.*; import static org.junit.jupiter.api.Assertions.*;
import static org.mockito.ArgumentMatchers.argThat;
import static org.mockito.Mockito.when;
// TODO @芋艿补全单测
/** /**
* {@link TencentSmsClient} 的单元测试 * {@link TencentSmsClient} 的单元测试
* *
@ -73,87 +59,87 @@ public class TencentSmsClientTest extends BaseMockitoUnitTest {
assertNotSame(client, ReflectUtil.getFieldValue(smsClient, "client")); assertNotSame(client, ReflectUtil.getFieldValue(smsClient, "client"));
} }
@Test // @Test
public void testDoSendSms_success() throws Throwable { // public void testDoSendSms_success() throws Throwable {
// 准备参数 // // 准备参数
Long sendLogId = randomLongId(); // Long sendLogId = randomLongId();
String mobile = randomString(); // String mobile = randomString();
String apiTemplateId = randomString(); // String apiTemplateId = randomString();
List<KeyValue<String, Object>> templateParams = Lists.newArrayList( // List<KeyValue<String, Object>> templateParams = Lists.newArrayList(
new KeyValue<>("1", 1234), new KeyValue<>("2", "login")); // new KeyValue<>("1", 1234), new KeyValue<>("2", "login"));
String requestId = randomString(); // String requestId = randomString();
String serialNo = randomString(); // String serialNo = randomString();
// mock 方法 // // mock 方法
SendSmsResponse response = randomPojo(SendSmsResponse.class, o -> { // SendSmsResponse response = randomPojo(SendSmsResponse.class, o -> {
o.setRequestId(requestId); // o.setRequestId(requestId);
SendStatus[] sendStatuses = new SendStatus[1]; // SendStatus[] sendStatuses = new SendStatus[1];
o.setSendStatusSet(sendStatuses); // o.setSendStatusSet(sendStatuses);
SendStatus sendStatus = new SendStatus(); // SendStatus sendStatus = new SendStatus();
sendStatuses[0] = sendStatus; // sendStatuses[0] = sendStatus;
sendStatus.setCode(TencentSmsClient.API_CODE_SUCCESS); // sendStatus.setCode(TencentSmsClient.API_CODE_SUCCESS);
sendStatus.setMessage("send success"); // sendStatus.setMessage("send success");
sendStatus.setSerialNo(serialNo); // sendStatus.setSerialNo(serialNo);
}); // });
when(client.SendSms(argThat(request -> { // when(client.SendSms(argThat(request -> {
assertEquals(mobile, request.getPhoneNumberSet()[0]); // assertEquals(mobile, request.getPhoneNumberSet()[0]);
assertEquals(properties.getSignature(), request.getSignName()); // assertEquals(properties.getSignature(), request.getSignName());
assertEquals(apiTemplateId, request.getTemplateId()); // assertEquals(apiTemplateId, request.getTemplateId());
assertEquals(toJsonString(ArrayUtils.toArray(new ArrayList<>(MapUtils.convertMap(templateParams).values()), String::valueOf)), // assertEquals(toJsonString(ArrayUtils.toArray(new ArrayList<>(MapUtils.convertMap(templateParams).values()), String::valueOf)),
toJsonString(request.getTemplateParamSet())); // toJsonString(request.getTemplateParamSet()));
assertEquals(sendLogId, ReflectUtil.getFieldValue(JsonUtils.parseObject(request.getSessionContext(), TencentSmsClient.SessionContext.class), "logId")); // assertEquals(sendLogId, ReflectUtil.getFieldValue(JsonUtils.parseObject(request.getSessionContext(), TencentSmsClient.SessionContext.class), "logId"));
return true; // return true;
}))).thenReturn(response); // }))).thenReturn(response);
//
// // 调用
// SmsSendRespDTO result = smsClient.sendSms(sendLogId, mobile, apiTemplateId, templateParams);
// // 断言
// assertTrue(result.getSuccess());
// assertEquals(response.getRequestId(), result.getApiRequestId());
// assertEquals(response.getSendStatusSet()[0].getCode(), result.getApiCode());
// assertEquals(response.getSendStatusSet()[0].getMessage(), result.getApiMsg());
// assertEquals(response.getSendStatusSet()[0].getSerialNo(), result.getSerialNo());
// }
// 调用 // @Test
SmsSendRespDTO result = smsClient.sendSms(sendLogId, mobile, apiTemplateId, templateParams); // public void testDoSendSms_fail() throws Throwable {
// 断言 // // 准备参数
assertTrue(result.getSuccess()); // Long sendLogId = randomLongId();
assertEquals(response.getRequestId(), result.getApiRequestId()); // String mobile = randomString();
assertEquals(response.getSendStatusSet()[0].getCode(), result.getApiCode()); // String apiTemplateId = randomString();
assertEquals(response.getSendStatusSet()[0].getMessage(), result.getApiMsg()); // List<KeyValue<String, Object>> templateParams = Lists.newArrayList(
assertEquals(response.getSendStatusSet()[0].getSerialNo(), result.getSerialNo()); // new KeyValue<>("1", 1234), new KeyValue<>("2", "login"));
} // String requestId = randomString();
// String serialNo = randomString();
@Test // // mock 方法
public void testDoSendSms_fail() throws Throwable { // SendSmsResponse response = randomPojo(SendSmsResponse.class, o -> {
// 准备参数 // o.setRequestId(requestId);
Long sendLogId = randomLongId(); // SendStatus[] sendStatuses = new SendStatus[1];
String mobile = randomString(); // o.setSendStatusSet(sendStatuses);
String apiTemplateId = randomString(); // SendStatus sendStatus = new SendStatus();
List<KeyValue<String, Object>> templateParams = Lists.newArrayList( // sendStatuses[0] = sendStatus;
new KeyValue<>("1", 1234), new KeyValue<>("2", "login")); // sendStatus.setCode("ERROR");
String requestId = randomString(); // sendStatus.setMessage("send success");
String serialNo = randomString(); // sendStatus.setSerialNo(serialNo);
// mock 方法 // });
SendSmsResponse response = randomPojo(SendSmsResponse.class, o -> { // when(client.SendSms(argThat(request -> {
o.setRequestId(requestId); // assertEquals(mobile, request.getPhoneNumberSet()[0]);
SendStatus[] sendStatuses = new SendStatus[1]; // assertEquals(properties.getSignature(), request.getSignName());
o.setSendStatusSet(sendStatuses); // assertEquals(apiTemplateId, request.getTemplateId());
SendStatus sendStatus = new SendStatus(); // assertEquals(toJsonString(ArrayUtils.toArray(new ArrayList<>(MapUtils.convertMap(templateParams).values()), String::valueOf)),
sendStatuses[0] = sendStatus; // toJsonString(request.getTemplateParamSet()));
sendStatus.setCode("ERROR"); // assertEquals(sendLogId, ReflectUtil.getFieldValue(JsonUtils.parseObject(request.getSessionContext(), TencentSmsClient.SessionContext.class), "logId"));
sendStatus.setMessage("send success"); // return true;
sendStatus.setSerialNo(serialNo); // }))).thenReturn(response);
}); //
when(client.SendSms(argThat(request -> { // // 调用
assertEquals(mobile, request.getPhoneNumberSet()[0]); // SmsSendRespDTO result = smsClient.sendSms(sendLogId, mobile, apiTemplateId, templateParams);
assertEquals(properties.getSignature(), request.getSignName()); // // 断言
assertEquals(apiTemplateId, request.getTemplateId()); // assertFalse(result.getSuccess());
assertEquals(toJsonString(ArrayUtils.toArray(new ArrayList<>(MapUtils.convertMap(templateParams).values()), String::valueOf)), // assertEquals(response.getRequestId(), result.getApiRequestId());
toJsonString(request.getTemplateParamSet())); // assertEquals(response.getSendStatusSet()[0].getCode(), result.getApiCode());
assertEquals(sendLogId, ReflectUtil.getFieldValue(JsonUtils.parseObject(request.getSessionContext(), TencentSmsClient.SessionContext.class), "logId")); // assertEquals(response.getSendStatusSet()[0].getMessage(), result.getApiMsg());
return true; // assertEquals(response.getSendStatusSet()[0].getSerialNo(), result.getSerialNo());
}))).thenReturn(response); // }
// 调用
SmsSendRespDTO result = smsClient.sendSms(sendLogId, mobile, apiTemplateId, templateParams);
// 断言
assertFalse(result.getSuccess());
assertEquals(response.getRequestId(), result.getApiRequestId());
assertEquals(response.getSendStatusSet()[0].getCode(), result.getApiCode());
assertEquals(response.getSendStatusSet()[0].getMessage(), result.getApiMsg());
assertEquals(response.getSendStatusSet()[0].getSerialNo(), result.getSerialNo());
}
@Test @Test
public void testParseSmsReceiveStatus() { public void testParseSmsReceiveStatus() {
@ -185,35 +171,35 @@ public class TencentSmsClientTest extends BaseMockitoUnitTest {
assertEquals(67890L, statuses.get(0).getLogId()); assertEquals(67890L, statuses.get(0).getLogId());
} }
@Test // @Test
public void testGetSmsTemplate() throws Throwable { // public void testGetSmsTemplate() throws Throwable {
// 准备参数 // // 准备参数
Long apiTemplateId = randomLongId(); // Long apiTemplateId = randomLongId();
String requestId = randomString(); // String requestId = randomString();
//
// mock 方法 // // mock 方法
DescribeSmsTemplateListResponse response = randomPojo(DescribeSmsTemplateListResponse.class, o -> { // DescribeSmsTemplateListResponse response = randomPojo(DescribeSmsTemplateListResponse.class, o -> {
DescribeTemplateListStatus[] describeTemplateListStatuses = new DescribeTemplateListStatus[1]; // DescribeTemplateListStatus[] describeTemplateListStatuses = new DescribeTemplateListStatus[1];
DescribeTemplateListStatus templateStatus = new DescribeTemplateListStatus(); // DescribeTemplateListStatus templateStatus = new DescribeTemplateListStatus();
templateStatus.setTemplateId(apiTemplateId); // templateStatus.setTemplateId(apiTemplateId);
templateStatus.setStatusCode(0L);// 设置模板通过 // templateStatus.setStatusCode(0L);// 设置模板通过
describeTemplateListStatuses[0] = templateStatus; // describeTemplateListStatuses[0] = templateStatus;
o.setDescribeTemplateStatusSet(describeTemplateListStatuses); // o.setDescribeTemplateStatusSet(describeTemplateListStatuses);
o.setRequestId(requestId); // o.setRequestId(requestId);
}); // });
when(client.DescribeSmsTemplateList(argThat(request -> { // when(client.DescribeSmsTemplateList(argThat(request -> {
assertEquals(apiTemplateId, request.getTemplateIdSet()[0]); // assertEquals(apiTemplateId, request.getTemplateIdSet()[0]);
return true; // return true;
}))).thenReturn(response); // }))).thenReturn(response);
//
// 调用 // // 调用
SmsTemplateRespDTO result = smsClient.getSmsTemplate(apiTemplateId.toString()); // SmsTemplateRespDTO result = smsClient.getSmsTemplate(apiTemplateId.toString());
// 断言 // // 断言
assertEquals(response.getDescribeTemplateStatusSet()[0].getTemplateId().toString(), result.getId()); // assertEquals(response.getDescribeTemplateStatusSet()[0].getTemplateId().toString(), result.getId());
assertEquals(response.getDescribeTemplateStatusSet()[0].getTemplateContent(), result.getContent()); // assertEquals(response.getDescribeTemplateStatusSet()[0].getTemplateContent(), result.getContent());
assertEquals(SmsTemplateAuditStatusEnum.SUCCESS.getStatus(), result.getAuditStatus()); // assertEquals(SmsTemplateAuditStatusEnum.SUCCESS.getStatus(), result.getAuditStatus());
assertEquals(response.getDescribeTemplateStatusSet()[0].getReviewReply(), result.getAuditReason()); // assertEquals(response.getDescribeTemplateStatusSet()[0].getReviewReply(), result.getAuditReason());
} // }
@Test @Test
public void testConvertSmsTemplateAuditStatus() { public void testConvertSmsTemplateAuditStatus() {