From 86e13a8a14e6e5407a1bcb1219a490d411fbc73c Mon Sep 17 00:00:00 2001 From: xmzhao71 Date: Fri, 8 Sep 2023 16:38:10 +0800 Subject: [PATCH] =?UTF-8?q?feat=EF=BC=9A=E4=BF=AE=E6=94=B9=E7=9F=AD?= =?UTF-8?q?=E4=BF=A1=E6=A8=A1=E6=9D=BF=E6=96=B0=E5=BB=BA=E6=8E=A5=E5=8F=A3?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../main/java/com/iformall/common/ErrorCode.java | 1 + .../service/impl/WxMsgModelServiceImpl.java | 10 ++++++---- .../src/main/java/com/iformall/sms/SMSExcutor.java | 9 +++++++++ .../src/main/java/com/iformall/sms/SMSFactory.java | 14 ++++++++++++++ .../java/com/iformall/sms/aliyun/AliyunSMS.java | 12 ++++++++++++ .../java/com/iformall/sms/wiwide/WiwideUtil.java | 5 +++++ 6 files changed, 47 insertions(+), 4 deletions(-) diff --git a/mallinkService/src/main/java/com/iformall/common/ErrorCode.java b/mallinkService/src/main/java/com/iformall/common/ErrorCode.java index 28f5998ef..87de60f4a 100644 --- a/mallinkService/src/main/java/com/iformall/common/ErrorCode.java +++ b/mallinkService/src/main/java/com/iformall/common/ErrorCode.java @@ -435,6 +435,7 @@ public enum ErrorCode{ MSG_SUM_INSUFFICENT(12112,"短信数量不足"), MSG_NO_VALID_PHONE(12113,"没有可以发送的用户"), MSG_SEND_INTERFACE_ERROR(12114,"短信运营商返回错误"), + MSG_WORD_COUNT_OVERLONG_ERROR(12115,"短信字数超限"), /** * 会员 diff --git a/mallinkService/src/main/java/com/iformall/service/impl/WxMsgModelServiceImpl.java b/mallinkService/src/main/java/com/iformall/service/impl/WxMsgModelServiceImpl.java index 60e214ad6..661c8cc4b 100644 --- a/mallinkService/src/main/java/com/iformall/service/impl/WxMsgModelServiceImpl.java +++ b/mallinkService/src/main/java/com/iformall/service/impl/WxMsgModelServiceImpl.java @@ -12,6 +12,8 @@ import com.iformall.domain.po.WxMsgModel; import com.iformall.domain.po.base.TenantEntity; import com.iformall.enums.EnumMsgModelStatus; import com.iformall.enums.EnumVerifyCode; +import com.iformall.exception.BizMessageException; +import com.iformall.exception.MallinkException; import com.iformall.mapper.WxMsgConfigMapper; import com.iformall.mapper.WxMsgModelMapper; import com.iformall.service.WxMsgModelService; @@ -46,7 +48,6 @@ public class WxMsgModelServiceImpl implements WxMsgModelService { @Override public ResultData saveOrUpdate(WxMsgModel wxMsgModel) { - //从短信配置中查询密钥 bid 等信息 WxMsgConfig wxMsgConfig = new WxMsgConfig(); wxMsgConfig.updateTenantInfo(wxMsgModel); @@ -55,11 +56,12 @@ public class WxMsgModelServiceImpl implements WxMsgModelService { return new ResultData(ErrorCode.MSG_SERVER_NOT_FIND.getCode(), "您还未接入短信运营商,请联系平台管理员"); wxMsgConfig = wxMsgConfigs.get(0); - String secret = wxMsgConfig.getSecret(); - String bid = wxMsgConfig.getBid(); - String signature = wxMsgModel.getSignature(); String content = wxMsgModel.getContent(); + + // 校验短信字数,超过规定字数会额外收费 + SMSFactory.checkMessage(wxMsgConfig.getSmsChannel(), signature, content); + //查看用户最新数据是否存在 List wxMsgModels = wxMsgModelMapper.findList(wxMsgModel); if (wxMsgModel.getId() == null && wxMsgModels.size() == 1) { diff --git a/mallinkService/src/main/java/com/iformall/sms/SMSExcutor.java b/mallinkService/src/main/java/com/iformall/sms/SMSExcutor.java index 928d94cf2..db23d6532 100644 --- a/mallinkService/src/main/java/com/iformall/sms/SMSExcutor.java +++ b/mallinkService/src/main/java/com/iformall/sms/SMSExcutor.java @@ -1,5 +1,7 @@ package com.iformall.sms; +import com.iformall.domain.po.WxMsgConfig; + import java.util.Date; public interface SMSExcutor { @@ -16,4 +18,11 @@ public interface SMSExcutor { String querySmsTemplate(String templateCode); String querySendDetail(String phone, String bizId, Date sendDate); + + /** + * 检查消息字数 + * @param signature + * @param content + */ + void checkMsgWordCount(String signature, String content); } diff --git a/mallinkService/src/main/java/com/iformall/sms/SMSFactory.java b/mallinkService/src/main/java/com/iformall/sms/SMSFactory.java index bd1b75903..a6cde119a 100644 --- a/mallinkService/src/main/java/com/iformall/sms/SMSFactory.java +++ b/mallinkService/src/main/java/com/iformall/sms/SMSFactory.java @@ -24,6 +24,10 @@ public class SMSFactory { private static SMSFactory smsFactory; + public static void checkMessage(Integer smsChannel, String signature, String content) { + getSendExcutor(smsChannel).checkMsgWordCount(signature, content); + } + @PostConstruct public void init() { @@ -49,6 +53,16 @@ public class SMSFactory { } } + private static SMSExcutor getSendExcutor(Integer smsChannel) { + if(EnumSMSChannel.ALIYUN.getCode().equals(smsChannel)) { + return smsFactory.aliyunSMS; + }else if(EnumSMSChannel.ALIYUN_ZDY.getCode().equals(smsChannel)){ + return smsFactory.aliyunSMS; + }else{ + return smsFactory.wiwide; + } + } + public static String sendSms(WxMsgConfig wxMsgConfig,String phone, String signature, String msg, String verifysms, String templateParam, String templateCode, String outId) { diff --git a/mallinkService/src/main/java/com/iformall/sms/aliyun/AliyunSMS.java b/mallinkService/src/main/java/com/iformall/sms/aliyun/AliyunSMS.java index 58d064be7..5983224f7 100644 --- a/mallinkService/src/main/java/com/iformall/sms/aliyun/AliyunSMS.java +++ b/mallinkService/src/main/java/com/iformall/sms/aliyun/AliyunSMS.java @@ -8,6 +8,9 @@ import com.aliyuncs.dysmsapi.model.v20170525.*; import com.aliyuncs.exceptions.ClientException; import com.aliyuncs.profile.DefaultProfile; import com.aliyuncs.profile.IClientProfile; +import com.iformall.common.ErrorCode; +import com.iformall.domain.po.WxMsgConfig; +import com.iformall.exception.MallinkException; import com.iformall.sms.EnumSMSChannel; import com.iformall.sms.SMSExcutor; import com.iformall.sms.SMSResult; @@ -122,6 +125,15 @@ public class AliyunSMS implements SMSExcutor { return null; } + @Override + public void checkMsgWordCount(String signature, String content) { + int limitWord = 70; + String msg = "【" + signature + "】" + content + "回T退订"; + if (msg.length() > limitWord) { + throw new MallinkException(ErrorCode.MSG_WORD_COUNT_OVERLONG_ERROR.getCode(), ErrorCode.MSG_WORD_COUNT_OVERLONG_ERROR.getMessage()); + } + } + /** * 发送短信 diff --git a/mallinkService/src/main/java/com/iformall/sms/wiwide/WiwideUtil.java b/mallinkService/src/main/java/com/iformall/sms/wiwide/WiwideUtil.java index 128473bc0..48a853416 100644 --- a/mallinkService/src/main/java/com/iformall/sms/wiwide/WiwideUtil.java +++ b/mallinkService/src/main/java/com/iformall/sms/wiwide/WiwideUtil.java @@ -2,6 +2,7 @@ package com.iformall.sms.wiwide; import com.alibaba.fastjson.JSONObject; import com.iformall.common.ErrorCode; +import com.iformall.domain.po.WxMsgConfig; import com.iformall.domain.po.WxWiWideInfo; import com.iformall.exception.MallinkException; import com.iformall.sms.SMSExcutor; @@ -43,6 +44,10 @@ public class WiwideUtil implements SMSExcutor { return null; } + @Override + public void checkMsgWordCount(String signature, String content) { + } + public static String addTemplate(String secret, String bid, String publickey, String signature, String content, String notifyUrl, String verifysms) { //请求api数据排序 TreeMap message = new TreeMap<>();