From 85797a9755fed533c497c64e69851860ec45cb54 Mon Sep 17 00:00:00 2001 From: xhxu Date: Sat, 4 Jul 2020 10:26:39 +0800 Subject: [PATCH] =?UTF-8?q?aliyun=E7=9F=AD=E4=BF=A1?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../callback/WxMsgCallbackController.java | 34 ++ .../java/com/iformall/utils/ReportResult.java | 30 ++ .../schedule/WiwideTokenSchedule.java | 2 +- .../iformall/aliyunSMS/SimpleSMSSender.java | 109 ------- .../com/iformall/domain/po/WxMsgConfig.java | 3 + .../com/iformall/domain/po/WxMsgModel.java | 2 + .../iformall/domain/po/WxMsgSignature.java | 6 + .../iformall/mapper/WxMsgCallbackMapper.java | 1 + .../com/iformall/mapper/WxMsgModelMapper.java | 6 +- .../WxMsgValidationcodeModelMapper.java | 3 +- .../service/WxMsgCallbackService.java | 3 + .../service/WxMsgValidationcodeService.java | 1 + .../service/impl/DataTowerServiceImpl.java | 2 +- .../impl/WxMsgCallbackServiceImpl.java | 51 +++ .../service/impl/WxMsgModelServiceImpl.java | 8 +- .../WxMsgValidationcodeModelServiceImpl.java | 8 +- .../impl/WxMsgValidationcodeServiceImpl.java | 2 +- .../msg/impl/SendCallBackSmsServiceImpl.java | 8 +- .../service/msg/impl/SendSmsServiceImpl.java | 62 ++-- .../java/com/iformall/sms/EnumSMSChannel.java | 36 +++ .../java/com/iformall/sms/SMSExcutor.java | 15 + .../java/com/iformall/sms/SMSFactory.java | 48 +++ .../main/java/com/iformall/sms/SMSResult.java | 17 + .../com/iformall/sms/aliyun/AliyunSMS.java | 292 ++++++++++++++++++ .../aliyun}/bean/AliyunSMSConfig.java | 2 +- .../{aliyunSMS => sms/aliyun}/bean/Query.java | 2 +- .../aliyun}/bean/Result.java | 2 +- .../{aliyunSMS => sms/aliyun}/bean/SMS.java | 2 +- .../com/iformall/sms/aliyun/bean/SMSSign.java | 23 ++ .../iformall/sms/aliyun/bean/SMSTemplate.java | 24 ++ .../{utils => sms/wiwide}/WiwideUtil.java | 21 +- .../resources/mapper/WxMsgCallbackMapper.xml | 6 +- .../resources/mapper/WxMsgConfigMapper.xml | 9 +- .../resources/mapper/WxMsgModelMapper.xml | 10 +- .../resources/mapper/WxMsgSignatureMapper.xml | 11 +- .../mapper/WxMsgValidationcodeModelMapper.xml | 4 + pom.xml | 5 +- 37 files changed, 692 insertions(+), 178 deletions(-) create mode 100644 mallinkCallback/src/main/java/com/iformall/utils/ReportResult.java delete mode 100644 mallinkService/src/main/java/com/iformall/aliyunSMS/SimpleSMSSender.java create mode 100644 mallinkService/src/main/java/com/iformall/sms/EnumSMSChannel.java create mode 100644 mallinkService/src/main/java/com/iformall/sms/SMSExcutor.java create mode 100644 mallinkService/src/main/java/com/iformall/sms/SMSFactory.java create mode 100644 mallinkService/src/main/java/com/iformall/sms/SMSResult.java create mode 100644 mallinkService/src/main/java/com/iformall/sms/aliyun/AliyunSMS.java rename mallinkService/src/main/java/com/iformall/{aliyunSMS => sms/aliyun}/bean/AliyunSMSConfig.java (95%) rename mallinkService/src/main/java/com/iformall/{aliyunSMS => sms/aliyun}/bean/Query.java (93%) rename mallinkService/src/main/java/com/iformall/{aliyunSMS => sms/aliyun}/bean/Result.java (90%) rename mallinkService/src/main/java/com/iformall/{aliyunSMS => sms/aliyun}/bean/SMS.java (92%) create mode 100644 mallinkService/src/main/java/com/iformall/sms/aliyun/bean/SMSSign.java create mode 100644 mallinkService/src/main/java/com/iformall/sms/aliyun/bean/SMSTemplate.java rename mallinkService/src/main/java/com/iformall/{utils => sms/wiwide}/WiwideUtil.java (86%) diff --git a/mallinkCallback/src/main/java/com/iformall/controller/callback/WxMsgCallbackController.java b/mallinkCallback/src/main/java/com/iformall/controller/callback/WxMsgCallbackController.java index 982646556..2bf7175d3 100644 --- a/mallinkCallback/src/main/java/com/iformall/controller/callback/WxMsgCallbackController.java +++ b/mallinkCallback/src/main/java/com/iformall/controller/callback/WxMsgCallbackController.java @@ -1,5 +1,7 @@ package com.iformall.controller.callback; +import com.iformall.common.ErrorCode; +import com.iformall.common.Result; import com.iformall.controller.base.BaseController; import com.iformall.service.WxMsgCallbackService; import org.slf4j.Logger; @@ -42,7 +44,39 @@ public class WxMsgCallbackController extends BaseController { logger.info(param.toString()); //解析param数据插入数据库中 wxMsgCallbackService.receiveverifymodel(tenantId, param); + } + + /** + * 阿里云模板回调 + * @param param + */ + @PostMapping(value = "/receivemodelAliyun") + public Result receiveverifymodel(@RequestParam Map param) { + logger.debug("[" + getIpAddr() + "] WxMsgCallbackController::receivemodelAliyun"); + logger.info(param.toString()); + try { + //解析param数据插入数据库中 + wxMsgCallbackService.receivemodelAliyun(param); + }catch(Exception e){ + logger.error("aliyun 模板回调ERROR",e); + return new Result(ErrorCode.SYS_SERVER_ERROR); + } + return new Result(); + } + + @PostMapping(value = "/receivemsgAliyun") + public Result receivemsg(@RequestParam Map param) { + logger.debug("[" + getIpAddr() + "] WxMsgCallbackController::receivemsgAliyun"); + logger.info(param.toString()); + try { + //解析param数据插入数据库中 + wxMsgCallbackService.receivemsgAliyun(param); + }catch(Exception e){ + logger.error("aliyun 短信回调ERROR",e); + return new Result(ErrorCode.SYS_SERVER_ERROR); + } + return new Result(); } } diff --git a/mallinkCallback/src/main/java/com/iformall/utils/ReportResult.java b/mallinkCallback/src/main/java/com/iformall/utils/ReportResult.java new file mode 100644 index 000000000..ba84efe15 --- /dev/null +++ b/mallinkCallback/src/main/java/com/iformall/utils/ReportResult.java @@ -0,0 +1,30 @@ +package com.iformall.utils; + + +import com.iformall.common.ErrorCode; + +/** + * @author chenkx + * @date 2018-01-05. + */ +public class ReportResult { + + public int code; + public String msg; + + public ReportResult() { + this.code = 0; + this.msg = "接收成功"; + } + + public ReportResult(int code, String msg) { + this.code = code; + this.msg = msg; + } + + public ReportResult(ErrorCode errorCode) { + this.code = errorCode.getCode(); + this.msg = errorCode.getMessage(); + } + +} diff --git a/mallinkSchedule/src/main/java/com/iformall/schedule/WiwideTokenSchedule.java b/mallinkSchedule/src/main/java/com/iformall/schedule/WiwideTokenSchedule.java index 902a3e723..bddd4dad2 100644 --- a/mallinkSchedule/src/main/java/com/iformall/schedule/WiwideTokenSchedule.java +++ b/mallinkSchedule/src/main/java/com/iformall/schedule/WiwideTokenSchedule.java @@ -4,7 +4,7 @@ import com.alibaba.fastjson.JSONObject; import com.iformall.domain.po.WxWiWideInfo; import com.iformall.exception.MallinkException; import com.iformall.mapper.WxWiwideInfoMapper; -import com.iformall.utils.WiwideUtil; +import com.iformall.sms.wiwide.WiwideUtil; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import org.springframework.beans.factory.annotation.Autowired; diff --git a/mallinkService/src/main/java/com/iformall/aliyunSMS/SimpleSMSSender.java b/mallinkService/src/main/java/com/iformall/aliyunSMS/SimpleSMSSender.java deleted file mode 100644 index 69cc33e8c..000000000 --- a/mallinkService/src/main/java/com/iformall/aliyunSMS/SimpleSMSSender.java +++ /dev/null @@ -1,109 +0,0 @@ -package com.iformall.aliyunSMS; - -import com.aliyuncs.DefaultAcsClient; -import com.aliyuncs.IAcsClient; -import com.aliyuncs.dysmsapi.model.v20170525.QuerySendDetailsRequest; -import com.aliyuncs.dysmsapi.model.v20170525.QuerySendDetailsResponse; -import com.aliyuncs.dysmsapi.model.v20170525.SendSmsRequest; -import com.aliyuncs.dysmsapi.model.v20170525.SendSmsResponse; -import com.aliyuncs.exceptions.ClientException; -import com.aliyuncs.profile.DefaultProfile; -import com.aliyuncs.profile.IClientProfile; -import com.iformall.aliyunSMS.bean.AliyunSMSConfig; -import com.iformall.aliyunSMS.bean.Query; -import com.iformall.aliyunSMS.bean.Result; -import com.iformall.aliyunSMS.bean.SMS; -import lombok.extern.slf4j.Slf4j; -import org.springframework.beans.factory.annotation.Autowired; -import org.springframework.stereotype.Component; - -import java.text.SimpleDateFormat; - -@Component -@Slf4j -public class SimpleSMSSender { - - @Autowired - private AliyunSMSConfig smsConfig; - - /** - * 发送短信 - * @param sms - * @return - */ - public Result sendSms(SMS sms) { - IAcsClient acsClient = getClient(); - SendSmsRequest request = getRequest(sms); - SendSmsResponse sendSmsResponse = null; - try { - sendSmsResponse = acsClient.getAcsResponse(request); - } catch (ClientException e) { - log.error("发送短信发生错误。错误代码是 [{}],错误消息是 [{}],错误请求ID是 [{}],错误Msg是 [{}],错误类型是 [{}]", - e.getErrCode(), e.getMessage(), e.getRequestId(), e.getErrMsg(), e.getErrorType()); - } - if(sendSmsResponse.getCode() != null && sendSmsResponse.getCode().equals("OK")){ - - log.info(sendSmsResponse.getCode() + "----" + sendSmsResponse.getMessage()); - - Result result = new Result(); - result.setSendSmsResponse(sendSmsResponse); - result.setSms(sms); - return result; - }else{ - log.error(sendSmsResponse.getCode() + "----" + sendSmsResponse.getMessage()); - return null; - } - } - - /** - * 查询短信发送结果 - * @param query - * @return - */ - public QuerySendDetailsResponse querySendDetails(Query query) { - IAcsClient acsClient = getClient(); - QuerySendDetailsRequest request = new QuerySendDetailsRequest(); - request.setPhoneNumber(query.getPhoneNumber()); - request.setBizId(query.getBizId()); - SimpleDateFormat ft = new SimpleDateFormat(smsConfig.getDateFormat()); - request.setSendDate(ft.format(query.getSendDate())); - request.setPageSize(query.getPageSize()); - request.setCurrentPage(query.getCurrentPage()); - QuerySendDetailsResponse querySendDetailsResponse = null; - try { - querySendDetailsResponse = acsClient.getAcsResponse(request); - } catch (ClientException e) { - log.error("AliyunSMS查询短信发送结果异常" + e); - } - return querySendDetailsResponse; - } - - /** - * 获取短信请求 - * @param sms - * @return - */ - private SendSmsRequest getRequest(SMS sms) { - SendSmsRequest request = new SendSmsRequest(); - request.setPhoneNumbers(sms.getPhoneNumbers()); - request.setSignName(sms.getSignName()); - request.setTemplateCode(sms.getTemplateCode()); - request.setTemplateParam(sms.getTemplateParam()); - request.setOutId(sms.getOutId()); - return request; - } - - /** - * 获取短信发送服务机 - * @return - */ - private IAcsClient getClient() { - IClientProfile profile = DefaultProfile.getProfile(smsConfig.getRegionId(), smsConfig.getAccessKeyId(), smsConfig.getAccessKeySecret()); - try { - DefaultProfile.addEndpoint(smsConfig.getEndpointName(), smsConfig.getRegionId(), smsConfig.getProduct(), smsConfig.getDomain()); - } catch (ClientException e) { - log.error("AliyunSMS获取短信发送服务机异常" + e); - } - return new DefaultAcsClient(profile); - } -} diff --git a/mallinkService/src/main/java/com/iformall/domain/po/WxMsgConfig.java b/mallinkService/src/main/java/com/iformall/domain/po/WxMsgConfig.java index 0103531f2..43f846037 100644 --- a/mallinkService/src/main/java/com/iformall/domain/po/WxMsgConfig.java +++ b/mallinkService/src/main/java/com/iformall/domain/po/WxMsgConfig.java @@ -43,5 +43,8 @@ public class WxMsgConfig extends TenantEntity { @io.swagger.annotations.ApiModelProperty(value="appid",name="appid") private String appid; + + @io.swagger.annotations.ApiModelProperty(value="是否阿里云发短信1:是;0:否",name="isAliyunSMS") + private Integer isAliyunSMS; } diff --git a/mallinkService/src/main/java/com/iformall/domain/po/WxMsgModel.java b/mallinkService/src/main/java/com/iformall/domain/po/WxMsgModel.java index deffff615..8d33d9003 100644 --- a/mallinkService/src/main/java/com/iformall/domain/po/WxMsgModel.java +++ b/mallinkService/src/main/java/com/iformall/domain/po/WxMsgModel.java @@ -30,6 +30,8 @@ public class WxMsgModel extends TenantEntity { @io.swagger.annotations.ApiModelProperty(value="modelid",name="modelId") private Integer modelId; + @io.swagger.annotations.ApiModelProperty(value="aliyun模板code",name="modelCode") + private String modelCode; } diff --git a/mallinkService/src/main/java/com/iformall/domain/po/WxMsgSignature.java b/mallinkService/src/main/java/com/iformall/domain/po/WxMsgSignature.java index 6c2bad99e..f2fbfa0f9 100644 --- a/mallinkService/src/main/java/com/iformall/domain/po/WxMsgSignature.java +++ b/mallinkService/src/main/java/com/iformall/domain/po/WxMsgSignature.java @@ -20,4 +20,10 @@ public class WxMsgSignature extends TenantEntity { private String name; @io.swagger.annotations.ApiModelProperty(value="创建时间",name="createtime") private Date createtime; + @io.swagger.annotations.ApiModelProperty(value="短信签名申请说明",name="remark") + private String remark; + @io.swagger.annotations.ApiModelProperty(value="签名审核状态",name="signStatus") + private Integer signStatus; + @io.swagger.annotations.ApiModelProperty(value="审核失败原因",name="name") + private String reason; } diff --git a/mallinkService/src/main/java/com/iformall/mapper/WxMsgCallbackMapper.java b/mallinkService/src/main/java/com/iformall/mapper/WxMsgCallbackMapper.java index 24b8791e5..5654e7370 100644 --- a/mallinkService/src/main/java/com/iformall/mapper/WxMsgCallbackMapper.java +++ b/mallinkService/src/main/java/com/iformall/mapper/WxMsgCallbackMapper.java @@ -15,4 +15,5 @@ public interface WxMsgCallbackMapper extends CommonMapper int queryMsgSendTotal(Map params); + void updateByBatchNo(WxMsgCallback wxMsgCallback); } diff --git a/mallinkService/src/main/java/com/iformall/mapper/WxMsgModelMapper.java b/mallinkService/src/main/java/com/iformall/mapper/WxMsgModelMapper.java index 397f79da0..16a5f1f1c 100644 --- a/mallinkService/src/main/java/com/iformall/mapper/WxMsgModelMapper.java +++ b/mallinkService/src/main/java/com/iformall/mapper/WxMsgModelMapper.java @@ -10,7 +10,7 @@ public interface WxMsgModelMapper extends CommonMapper { WxMsgModel findOneByModelId(WxMsgModel wxMsgModel); - - - + + + void updateByCode(WxMsgModel wxMsgModel); } diff --git a/mallinkService/src/main/java/com/iformall/mapper/WxMsgValidationcodeModelMapper.java b/mallinkService/src/main/java/com/iformall/mapper/WxMsgValidationcodeModelMapper.java index 536711276..380f5d4a9 100644 --- a/mallinkService/src/main/java/com/iformall/mapper/WxMsgValidationcodeModelMapper.java +++ b/mallinkService/src/main/java/com/iformall/mapper/WxMsgValidationcodeModelMapper.java @@ -9,5 +9,6 @@ public interface WxMsgValidationcodeModelMapper extends CommonMapper findList(WxMsgValidationcodeModel wxMsgValidationcodeModel); - + + void updateByCode(WxMsgValidationcodeModel wxMsgValidationcodeModel); } diff --git a/mallinkService/src/main/java/com/iformall/service/WxMsgCallbackService.java b/mallinkService/src/main/java/com/iformall/service/WxMsgCallbackService.java index 3c9f76ac4..154e9b9c0 100644 --- a/mallinkService/src/main/java/com/iformall/service/WxMsgCallbackService.java +++ b/mallinkService/src/main/java/com/iformall/service/WxMsgCallbackService.java @@ -45,4 +45,7 @@ public interface WxMsgCallbackService { void receiveverifymodel(String bid, Map param); + void receivemodelAliyun(Map param); + + void receivemsgAliyun(Map param); } diff --git a/mallinkService/src/main/java/com/iformall/service/WxMsgValidationcodeService.java b/mallinkService/src/main/java/com/iformall/service/WxMsgValidationcodeService.java index 6347f6177..e7ebdb293 100644 --- a/mallinkService/src/main/java/com/iformall/service/WxMsgValidationcodeService.java +++ b/mallinkService/src/main/java/com/iformall/service/WxMsgValidationcodeService.java @@ -43,5 +43,6 @@ public interface WxMsgValidationcodeService { void addMsgCallback(WxMsgValidationcode wxmsg, String batchNo, String id); + } diff --git a/mallinkService/src/main/java/com/iformall/service/impl/DataTowerServiceImpl.java b/mallinkService/src/main/java/com/iformall/service/impl/DataTowerServiceImpl.java index 2b59ddc4e..a7cce180d 100644 --- a/mallinkService/src/main/java/com/iformall/service/impl/DataTowerServiceImpl.java +++ b/mallinkService/src/main/java/com/iformall/service/impl/DataTowerServiceImpl.java @@ -12,8 +12,8 @@ import com.iformall.enums.*; import com.iformall.exception.MallinkException; import com.iformall.mapper.*; import com.iformall.service.DataTowerService; +import com.iformall.sms.wiwide.WiwideUtil; import com.iformall.utils.DateUtils; -import com.iformall.utils.WiwideUtil; import org.apache.commons.lang3.StringUtils; import org.slf4j.Logger; import org.slf4j.LoggerFactory; diff --git a/mallinkService/src/main/java/com/iformall/service/impl/WxMsgCallbackServiceImpl.java b/mallinkService/src/main/java/com/iformall/service/impl/WxMsgCallbackServiceImpl.java index 277951acd..339737843 100644 --- a/mallinkService/src/main/java/com/iformall/service/impl/WxMsgCallbackServiceImpl.java +++ b/mallinkService/src/main/java/com/iformall/service/impl/WxMsgCallbackServiceImpl.java @@ -10,6 +10,7 @@ import com.iformall.enums.EnumMsgSendStatus; import com.iformall.mapper.*; import com.iformall.service.WxMsgCallbackService; import com.iformall.utils.HMACSHA256; +import jodd.util.StringUtil; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import org.springframework.beans.factory.annotation.Autowired; @@ -153,6 +154,56 @@ public class WxMsgCallbackServiceImpl implements WxMsgCallbackService { + } + + @Override + public void receivemodelAliyun(Map param) { + logger.info(param.get("template_code")+"---"+param.get("template_status")+"---"+param.get("reason")); + WxMsgModel wxMsgModel = new WxMsgModel(); + wxMsgModel.setModelCode(param.get("template_code")); + // 模板审核状态: + //approving:审核中 + //approved:审核通过 + //rejected:审核未通过 + String templateStatus = param.get("template_status"); + if("approving".equals(templateStatus)){ + wxMsgModel.setStatus(2); + }else if("approved".equals(templateStatus)){ + wxMsgModel.setStatus(1); + }else if("rejected".equals(templateStatus)){ + wxMsgModel.setStatus(0); + }else{ + wxMsgModel.setStatus(-1); + } + wxMsgModelMapper.updateByCode(wxMsgModel); + + WxMsgValidationcodeModel wxMsgValidationcodeModel = new WxMsgValidationcodeModel(); + wxMsgValidationcodeModel.setModelCode(wxMsgModel.getModelCode()); + wxMsgValidationcodeModel.setStatus(wxMsgModel.getStatus()); + wxMsgValidationcodeModelMapper.updateByCode(wxMsgValidationcodeModel); + + } + + @Override + public void receivemsgAliyun(Map param) { + String success = param.get("success"); + WxMsgCallback wxMsgCallback = new WxMsgCallback(); + wxMsgCallback.setBatchNo(param.get("biz_id")); + if("true".equals(success)){ + wxMsgCallback.setStatus(EnumMsgSendStatus.MSG_SEND_SUCCESS.getCode()); + if(StringUtil.isNotBlank(param.get("out_id"))){ + WxCouponPassword couponPassword = new WxCouponPassword(); + couponPassword.setId(Long.valueOf(param.get("out_id"))); + couponPassword.setStatus(EnumCouponPasswordStatus.MSG_SENDED.getCode()); + couponPassword.setUpdateDate(new Date()); + wxCouponPasswordMapper.updateById(couponPassword); + } + }else{ + wxMsgCallback.setStatus(EnumMsgSendStatus.MSG_SEND_FAIL.getCode()); + } + wxMsgCallback.setStatusMsg(param.get("err_msg")); + wxMsgCallbackMapper.updateByBatchNo(wxMsgCallback); + } public boolean checksign(String tenantId,Map param){ 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 4cacc054e..0944da5d0 100644 --- a/mallinkService/src/main/java/com/iformall/service/impl/WxMsgModelServiceImpl.java +++ b/mallinkService/src/main/java/com/iformall/service/impl/WxMsgModelServiceImpl.java @@ -15,6 +15,7 @@ import com.iformall.enums.EnumVerifyCode; import com.iformall.mapper.WxMsgConfigMapper; import com.iformall.mapper.WxMsgModelMapper; import com.iformall.service.WxMsgModelService; +import com.iformall.sms.SMSFactory; import com.iformall.utils.*; import org.slf4j.Logger; import org.slf4j.LoggerFactory; @@ -71,8 +72,9 @@ public class WxMsgModelServiceImpl implements WxMsgModelService { } } - String result = WiwideUtil.addTemplate(secret, bid, wxMsgConfig.getPublickey(), signature, - content, wxMsgConfig.getModelnotifyurl(),EnumVerifyCode.NO.getCode().toString()); + String result = SMSFactory.addTemplate(secret, bid, wxMsgConfig.getPublickey(), signature, + content, wxMsgConfig.getModelnotifyurl(),EnumVerifyCode.NO.getCode().toString(), + wxMsgModel.getName(),2,wxMsgModel.getName(),wxMsgConfig.getIsAliyunSMS()); JSONObject jsonObjectResult = JSONObject.parseObject(result); String ret = jsonObjectResult.get("ret").toString(); logger.info("短信模板创建结果:" + result); @@ -83,12 +85,14 @@ public class WxMsgModelServiceImpl implements WxMsgModelService { wxMsgModel.setTenantId(wxMsgModel.getTenantId()); String data = jsonObjectResult.get("data").toString(); wxMsgModel.setModelId(Integer.valueOf(data)); + wxMsgModel.setModelCode(jsonObjectResult.get("aliyunModelCode").toString()); wxMsgModel.setCreatetime(new Date()); wxMsgModel.setStatus(2);//审核中 wxMsgModelMapper.insert(wxMsgModel); } else { String data = jsonObjectResult.get("data").toString(); wxMsgModel.setModelId(Integer.valueOf(data)); + wxMsgModel.setModelCode(jsonObjectResult.get("aliyunModelCode").toString()); wxMsgModel.setStatus(2);//审核中 wxMsgModelMapper.updateById(wxMsgModel); } diff --git a/mallinkService/src/main/java/com/iformall/service/impl/WxMsgValidationcodeModelServiceImpl.java b/mallinkService/src/main/java/com/iformall/service/impl/WxMsgValidationcodeModelServiceImpl.java index e827726ab..86ffee02f 100644 --- a/mallinkService/src/main/java/com/iformall/service/impl/WxMsgValidationcodeModelServiceImpl.java +++ b/mallinkService/src/main/java/com/iformall/service/impl/WxMsgValidationcodeModelServiceImpl.java @@ -15,6 +15,7 @@ import com.iformall.enums.EnumVerifyCode; import com.iformall.mapper.WxMsgConfigMapper; import com.iformall.mapper.WxMsgValidationcodeModelMapper; import com.iformall.service.WxMsgValidationcodeModelService; +import com.iformall.sms.SMSFactory; import com.iformall.utils.*; import org.slf4j.Logger; import org.slf4j.LoggerFactory; @@ -119,9 +120,11 @@ public class WxMsgValidationcodeModelServiceImpl implements WxMsgValidationcodeM if(wxmsgmodel.getContent().equals(wxMsgModel.getContent()) && wxmsgmodel.getSignature().equals(wxMsgModel.getSignature())) { return new ResultData(Result.SUCCESS, "修改成功"); } - } - String result = WiwideUtil.addTemplate(secret, bid, wxMsgConfig.getPublickey(), signature, content, wxMsgConfig.getVerifynotifyurl(),EnumVerifyCode.YES.getCode().toString()); + + String result = SMSFactory.addTemplate(secret, bid, wxMsgConfig.getPublickey(), signature, content, + wxMsgConfig.getVerifynotifyurl(),EnumVerifyCode.YES.getCode().toString(), + wxMsgModel.getName(),1,wxMsgModel.getName(),wxMsgConfig.getIsAliyunSMS()); JSONObject jsonObjectResult = JSONObject.parseObject(result); String ret = jsonObjectResult.get("ret").toString(); @@ -132,6 +135,7 @@ public class WxMsgValidationcodeModelServiceImpl implements WxMsgValidationcodeM wxMsgModel.setTenantId(wxMsgModel.getTenantId()); String data = jsonObjectResult.get("data").toString(); wxMsgModel.setModelId(Integer.valueOf(data)); + wxMsgModel.setModelCode(jsonObjectResult.get("aliyunModelCode").toString()); wxMsgModel.setCreatetime(new Date()); wxMsgModel.setStatus(2);//审核中 wxMsgValidationcodeModelMapper.insert(wxMsgModel); diff --git a/mallinkService/src/main/java/com/iformall/service/impl/WxMsgValidationcodeServiceImpl.java b/mallinkService/src/main/java/com/iformall/service/impl/WxMsgValidationcodeServiceImpl.java index a5712fbc8..9d28bac78 100644 --- a/mallinkService/src/main/java/com/iformall/service/impl/WxMsgValidationcodeServiceImpl.java +++ b/mallinkService/src/main/java/com/iformall/service/impl/WxMsgValidationcodeServiceImpl.java @@ -127,7 +127,7 @@ public class WxMsgValidationcodeServiceImpl implements WxMsgValidationcodeServic wxMsgCallback.setTenantId(wxmsg.getTenantId()); wxMsgCallback.setBatchNo(batchNo); wxMsgCallback.setMsgId(wxmsg.getId()); - wxMsgCallback.setStatus(EnumMsgSendStatus.MSG_SEND_FAIL.getCode()); + wxMsgCallback.setStatus(EnumMsgSendStatus.MSG_SENDING.getCode()); wxMsgCallback.setCreatetime(new Date()); if (StringUtils.isNotEmpty(id)) { wxMsgCallback.setBusinessId(Long.parseLong(id)); diff --git a/mallinkService/src/main/java/com/iformall/service/msg/impl/SendCallBackSmsServiceImpl.java b/mallinkService/src/main/java/com/iformall/service/msg/impl/SendCallBackSmsServiceImpl.java index dd2be9a21..86c9ded93 100644 --- a/mallinkService/src/main/java/com/iformall/service/msg/impl/SendCallBackSmsServiceImpl.java +++ b/mallinkService/src/main/java/com/iformall/service/msg/impl/SendCallBackSmsServiceImpl.java @@ -16,8 +16,8 @@ import com.iformall.service.WxMsgLimitService; import com.iformall.service.msg.MsgSendService; import com.iformall.service.WxMsgService; import com.iformall.service.WxMsgValidationcodeService; +import com.iformall.sms.SMSFactory; import com.iformall.utils.DateUtils; -import com.iformall.utils.WiwideUtil; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import org.springframework.beans.factory.annotation.Autowired; @@ -101,8 +101,12 @@ public class SendCallBackSmsServiceImpl implements MsgSendService { return; } */ + String result = SMSFactory.sendSms(secret, bid, publickey, phone, signature, msg, notifyUrl, + EnumVerifyCode.NO.getCode().toString(), modelId, + null,wxMsgModel.getModelCode(),Long.toString(record.getId()),wxMsgConfig.getIsAliyunSMS()); + + - String result = WiwideUtil.sendMsg(secret, bid, publickey, phone, signature, msg, notifyUrl, EnumVerifyCode.NO.getCode().toString(), modelId); JSONObject jsonObjectResult = JSONObject.parseObject(result); String ret = jsonObjectResult.get("ret").toString(); String batchNo = jsonObjectResult.get("data").toString(); diff --git a/mallinkService/src/main/java/com/iformall/service/msg/impl/SendSmsServiceImpl.java b/mallinkService/src/main/java/com/iformall/service/msg/impl/SendSmsServiceImpl.java index c933e8700..b46aa872d 100644 --- a/mallinkService/src/main/java/com/iformall/service/msg/impl/SendSmsServiceImpl.java +++ b/mallinkService/src/main/java/com/iformall/service/msg/impl/SendSmsServiceImpl.java @@ -3,10 +3,6 @@ package com.iformall.service.msg.impl; import com.alibaba.fastjson.JSON; import com.alibaba.fastjson.JSONObject; -import com.iformall.aliyunSMS.SimpleSMSSender; -import com.iformall.aliyunSMS.bean.AliyunSMSConfig; -import com.iformall.aliyunSMS.bean.Result; -import com.iformall.aliyunSMS.bean.SMS; import com.iformall.common.ErrorCode; import com.iformall.common.IdWorker; import com.iformall.domain.po.*; @@ -21,7 +17,7 @@ import com.iformall.mapper.WxMsgValidationcodeMapper; import com.iformall.mapper.WxMsgValidationcodeModelMapper; import com.iformall.service.msg.MsgSendService; import com.iformall.service.WxMsgValidationcodeService; -import com.iformall.utils.WiwideUtil; +import com.iformall.sms.SMSFactory; import org.apache.commons.collections.CollectionUtils; import org.slf4j.Logger; import org.slf4j.LoggerFactory; @@ -39,9 +35,6 @@ import java.util.Map; public class SendSmsServiceImpl implements MsgSendService { private final Logger logger = LoggerFactory.getLogger(this.getClass()); - @Autowired - private SimpleSMSSender simpleSMSSender; - @Autowired private WxMsgConfigMapper wxMsgConfigMapper; @Autowired @@ -56,6 +49,8 @@ public class SendSmsServiceImpl implements MsgSendService { WxMsgRecord record = (WxMsgRecord)baseMsg; TenantEntity tenantEntity = record.getTenantInfo(); WxMsgValidationcode wxMsgValidationcode = new WxMsgValidationcode(); + final IdWorker idWorker = IdWorker.get(); + wxMsgValidationcode.setId(idWorker.nextId()); wxMsgValidationcode.setPhone(record.getReceiver()); wxMsgValidationcode.updateTenantInfo(tenantEntity); wxMsgValidationcode.setType(record.getModelType()); @@ -94,42 +89,26 @@ public class SendSmsServiceImpl implements MsgSendService { if (wxMsgConfig.getRemains() <= 0L) { throw new MallinkException(ErrorCode.MSG_CONFIG_ACCOUNT); } - String ret = "",batchNo = ""; - if(wxMsgValidationcodeModel.getMsgType().equals(11)){ - //阿里云发短信 - SMS sms = new SMS(); - sms.setPhoneNumbers(record.getReceiver()); - sms.setTemplateParam(JSON.toJSONString(record.getDynamicContentMap())); - sms.setTemplateCode(wxMsgValidationcodeModel.getModelCode()); - sms.setOutId(wxMsgValidationcodeModel.getId().toString()); - sms.setSignName(wxMsgValidationcodeModel.getSignature()); - Result result = simpleSMSSender.sendSms(sms); - - if(result != null){ - ret = "1"; - batchNo = result.getSendSmsResponse().getBizId(); - } - }else{ - //迈外迪发短信 - - String secret = wxMsgConfig.getSecret(); - String bid = wxMsgConfig.getBid(); - String publickey = wxMsgConfig.getPublickey(); - String phone = record.getReceiver(); - String signature = wxMsgValidationcodeModel.getSignature(); - - String notifyUrl = wxMsgConfig.getNotifyurl(); - Integer modelId = wxMsgValidationcodeModel.getModelId(); - String result = WiwideUtil.sendMsg(secret, bid, publickey, phone, signature, msg, notifyUrl, EnumVerifyCode.YES.getCode().toString(), modelId); - JSONObject jsonObjectResult = JSONObject.parseObject(result); - ret = jsonObjectResult.get("ret").toString(); - batchNo = jsonObjectResult.get("data").toString(); - } + String secret = wxMsgConfig.getSecret(); + String bid = wxMsgConfig.getBid(); + String publickey = wxMsgConfig.getPublickey(); + String phone = record.getReceiver(); + String signature = wxMsgValidationcodeModel.getSignature(); + + String notifyUrl = wxMsgConfig.getNotifyurl(); + Integer modelId = wxMsgValidationcodeModel.getModelId(); + String id = record.getDynamicContentMap().get("id"); + String result = SMSFactory.sendSms(secret, bid, publickey, phone, signature, msg, notifyUrl, + EnumVerifyCode.YES.getCode().toString(), modelId, + JSON.toJSONString(record.getDynamicContentMap()),wxMsgValidationcodeModel.getModelCode(), + id,wxMsgConfig.getIsAliyunSMS()); + JSONObject jsonObjectResult = JSONObject.parseObject(result); + String ret = jsonObjectResult.get("ret").toString(); + String batchNo = jsonObjectResult.get("data").toString(); if (ret.equals("1")) { - final IdWorker idWorker = IdWorker.get(); - wxMsgValidationcode.setId(idWorker.nextId()); + long currentTime = System.currentTimeMillis(); Date createtime=new Date(currentTime); wxMsgValidationcode.setCreatetime(createtime); @@ -140,7 +119,6 @@ public class SendSmsServiceImpl implements MsgSendService { wxMsgValidationcode.setExpiretime(expiredate); } wxMsgValidationcodeMapper.insert(wxMsgValidationcode); - String id = record.getDynamicContentMap().get("id"); wxMsgValidationcodeService.addMsgCallback(wxMsgValidationcode, batchNo, id); //扣减剩余条数 wxMsgConfig.setRemains(1L); diff --git a/mallinkService/src/main/java/com/iformall/sms/EnumSMSChannel.java b/mallinkService/src/main/java/com/iformall/sms/EnumSMSChannel.java new file mode 100644 index 000000000..e5df697d5 --- /dev/null +++ b/mallinkService/src/main/java/com/iformall/sms/EnumSMSChannel.java @@ -0,0 +1,36 @@ +package com.iformall.sms; + + +/** + * @author gongbiao + */ +public enum EnumSMSChannel { + + ALIYUN(11, "ALIYUN"), + WIWIDE(1,"WIWIDE"); + + public static EnumSMSChannel getEnum(Integer code) { + for (EnumSMSChannel value : values()) { + if (value.getCode().equals(code)) { + return value; + } + } + return null; + } + + private Integer code; + private String message; + + EnumSMSChannel(Integer code, String message) { + this.code = code; + this.message = message; + } + + public Integer getCode() { + return code; + } + + public String getMessage() { + return message; + } +} diff --git a/mallinkService/src/main/java/com/iformall/sms/SMSExcutor.java b/mallinkService/src/main/java/com/iformall/sms/SMSExcutor.java new file mode 100644 index 000000000..2b49e65dd --- /dev/null +++ b/mallinkService/src/main/java/com/iformall/sms/SMSExcutor.java @@ -0,0 +1,15 @@ +package com.iformall.sms; + +public interface SMSExcutor { + + String sendMsg(String secret, String bid, String publickey,String phone, String signature, + String msg, String notifyUrl, String verifysms, Integer modelId,String templateParam, + String templateCode, String outId); + + String addTemplate(String secret, String bid, String publickey, String signature, String content, + String notifyUrl, String verifysms,String templateName,Integer templateType, + String remark); + + + +} diff --git a/mallinkService/src/main/java/com/iformall/sms/SMSFactory.java b/mallinkService/src/main/java/com/iformall/sms/SMSFactory.java new file mode 100644 index 000000000..486a1e73e --- /dev/null +++ b/mallinkService/src/main/java/com/iformall/sms/SMSFactory.java @@ -0,0 +1,48 @@ +package com.iformall.sms; + +import com.iformall.sms.aliyun.AliyunSMS; +import com.iformall.sms.wiwide.WiwideUtil; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Component; + +import javax.annotation.PostConstruct; + +@Component +public class SMSFactory { + + @Autowired + private AliyunSMS aliyunSMS; + + @Autowired + private WiwideUtil wiwide; + + private static SMSFactory smsFactory; + + + @PostConstruct + public void init() { + smsFactory = this; + } + + private static SMSExcutor getSendExcutor(Integer channel) { + if(EnumSMSChannel.ALIYUN.getCode().equals(channel)) { + return smsFactory.aliyunSMS; + }else{ + return smsFactory.wiwide; + } + } + + public static String sendSms(String secret, String bid, String publickey,String phone, String signature, + String msg, String notifyUrl, String verifysms, Integer modelId,String templateParam, + String templateCode, String outId,Integer channel) { + return getSendExcutor(channel).sendMsg(secret, bid, publickey, phone, signature, msg, notifyUrl, + verifysms, modelId,templateParam,templateCode,outId); + } + + public static String addTemplate(String secret, String bid, String publickey, String signature, String content, + String notifyUrl, String verifysms,String templateName,Integer templateType, + String remark,Integer channel) { + return getSendExcutor(channel).addTemplate(secret, bid, publickey, signature, content, notifyUrl,verifysms, + templateName,templateType,remark); + } +} diff --git a/mallinkService/src/main/java/com/iformall/sms/SMSResult.java b/mallinkService/src/main/java/com/iformall/sms/SMSResult.java new file mode 100644 index 000000000..30969af21 --- /dev/null +++ b/mallinkService/src/main/java/com/iformall/sms/SMSResult.java @@ -0,0 +1,17 @@ +package com.iformall.sms; + +import com.aliyuncs.dysmsapi.model.v20170525.SendSmsResponse; +import com.iformall.sms.aliyun.bean.SMS; +import lombok.Data; + + +@Data +public class SMSResult { + + private String ret; + + private String data; + + private String aliyunModelCode; + +} \ No newline at end of file diff --git a/mallinkService/src/main/java/com/iformall/sms/aliyun/AliyunSMS.java b/mallinkService/src/main/java/com/iformall/sms/aliyun/AliyunSMS.java new file mode 100644 index 000000000..53f8cab46 --- /dev/null +++ b/mallinkService/src/main/java/com/iformall/sms/aliyun/AliyunSMS.java @@ -0,0 +1,292 @@ +package com.iformall.sms.aliyun; + +import com.alibaba.fastjson.JSON; +import com.aliyuncs.DefaultAcsClient; +import com.aliyuncs.IAcsClient; +import com.aliyuncs.dysmsapi.model.v20170525.*; +import com.aliyuncs.exceptions.ClientException; +import com.aliyuncs.profile.DefaultProfile; +import com.aliyuncs.profile.IClientProfile; +import com.iformall.sms.SMSExcutor; +import com.iformall.sms.SMSResult; +import com.iformall.sms.aliyun.bean.*; +import lombok.extern.slf4j.Slf4j; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Component; + +import java.text.SimpleDateFormat; + +@Component +@Slf4j +public class AliyunSMS implements SMSExcutor { + + @Autowired + private AliyunSMSConfig smsConfig; + + @Override + public String sendMsg(String secret, String bid, String publickey, String phone, String signature, String msg, String notifyUrl, String verifysms, Integer modelId, String templateParam, String templateCode, String outId) { + SMSResult SMSResult = new SMSResult(); + SMS sms = new SMS(); + sms.setPhoneNumbers(phone); + sms.setTemplateParam(templateParam); + sms.setTemplateCode(templateCode); + sms.setOutId(outId); + sms.setSignName(signature); + Result result = this.sendSms(sms); + if(result.getSendSmsResponse().getCode() != null + && result.getSendSmsResponse().getCode().equals("ok")){ + SMSResult.setRet("1"); + SMSResult.setData(result.getSendSmsResponse().getBizId()); + } + return JSON.toJSONString(SMSResult); + } + + @Override + public String addTemplate(String secret, String bid, String publickey, String signature, String content, String notifyUrl, String verifysms, String templateName, Integer templateType, String remark) { + SMSResult SMSResult = new SMSResult(); + SMSTemplate smsTemplate = new SMSTemplate(); + smsTemplate.setTemplateName(templateName); + smsTemplate.setTemplateContent(content); + smsTemplate.setTemplateType(templateType); + smsTemplate.setRemark(remark); + AddSmsTemplateResponse addSmsTemplateResponse = this.addSmsTemplate(smsTemplate); + if(addSmsTemplateResponse.getCode() != null && addSmsTemplateResponse.getCode().equals("ok")){ + SMSResult.setRet("1"); + SMSResult.setAliyunModelCode(addSmsTemplateResponse.getTemplateCode()); + } + return JSON.toJSONString(SMSResult); + } + + /** + * 发送短信 + * @param sms + * @return + */ + public Result sendSms(SMS sms) { + IAcsClient acsClient = getClient(); + SendSmsRequest request = getRequest(sms); + SendSmsResponse sendSmsResponse = null; + try { + sendSmsResponse = acsClient.getAcsResponse(request); + } catch (ClientException e) { + log.error("发送短信发生错误。错误代码是 [{}],错误消息是 [{}],错误请求ID是 [{}],错误Msg是 [{}],错误类型是 [{}]", + e.getErrCode(), e.getMessage(), e.getRequestId(), e.getErrMsg(), e.getErrorType()); + } + log.info("发送短信-----" + sendSmsResponse.getCode() + "----" + sendSmsResponse.getMessage()); + + Result result = new Result(); + result.setSendSmsResponse(sendSmsResponse); + result.setSms(sms); + return result; + } + + /** + * 添加签名 + * @param smsSign + */ + public AddSmsSignResponse addSmsSign(SMSSign smsSign){ + IAcsClient acsClient = getClient(); + AddSmsSignRequest request = new AddSmsSignRequest(); + request.setSignName(smsSign.getSignName()); + request.setSignSource(smsSign.getSignSource()); + request.setRemark(smsSign.getRemark()); + AddSmsSignResponse response = null; + try { + response = acsClient.getAcsResponse(request); + } catch (ClientException e) { + log.error("添加签名发生错误。错误代码是 [{}],错误消息是 [{}],错误请求ID是 [{}],错误Msg是 [{}],错误类型是 [{}]", + e.getErrCode(), e.getMessage(), e.getRequestId(), e.getErrMsg(), e.getErrorType()); + } + return response; + } + + /** + * 删除签名 + * @param smsSign + */ + public DeleteSmsSignResponse deleteSmsSign(SMSSign smsSign){ + IAcsClient acsClient = getClient(); + DeleteSmsSignRequest request = new DeleteSmsSignRequest(); + request.setSignName(smsSign.getSignName()); + DeleteSmsSignResponse response = null; + try { + response = acsClient.getAcsResponse(request); + } catch (ClientException e) { + log.error("删除签名发生错误。错误代码是 [{}],错误消息是 [{}],错误请求ID是 [{}],错误Msg是 [{}],错误类型是 [{}]", + e.getErrCode(), e.getMessage(), e.getRequestId(), e.getErrMsg(), e.getErrorType()); + } + return response; + } + + /** + * 修改签名 + * @param smsSign + */ + public ModifySmsSignResponse modifySmsSign(SMSSign smsSign){ + IAcsClient acsClient = getClient(); + ModifySmsSignRequest request = new ModifySmsSignRequest(); + request.setSignName(smsSign.getSignName()); + request.setSignSource(smsSign.getSignSource()); + request.setRemark(smsSign.getRemark()); + ModifySmsSignResponse response = null; + try { + response = acsClient.getAcsResponse(request); + } catch (ClientException e) { + log.error("修改签名发生错误。错误代码是 [{}],错误消息是 [{}],错误请求ID是 [{}],错误Msg是 [{}],错误类型是 [{}]", + e.getErrCode(), e.getMessage(), e.getRequestId(), e.getErrMsg(), e.getErrorType()); + } + return response; + } + + /** + * 查询签名 + * @param smsSign + */ + public QuerySmsSignResponse querySmsSign(SMSSign smsSign){ + IAcsClient acsClient = getClient(); + QuerySmsSignRequest request = new QuerySmsSignRequest(); + request.setSignName(smsSign.getSignName()); + QuerySmsSignResponse response = null; + try { + response = acsClient.getAcsResponse(request); + } catch (ClientException e) { + log.error("查询签名发生错误。错误代码是 [{}],错误消息是 [{}],错误请求ID是 [{}],错误Msg是 [{}],错误类型是 [{}]", + e.getErrCode(), e.getMessage(), e.getRequestId(), e.getErrMsg(), e.getErrorType()); + } + return response; + } + + /** + * 添加模板 + * @param smsTemplate + */ + public AddSmsTemplateResponse addSmsTemplate(SMSTemplate smsTemplate){ + IAcsClient acsClient = getClient(); + AddSmsTemplateRequest request = new AddSmsTemplateRequest(); + request.setTemplateName(smsTemplate.getTemplateName()); + request.setTemplateType(smsTemplate.getTemplateType()); + request.setTemplateContent(smsTemplate.getTemplateContent()); + request.setRemark(smsTemplate.getRemark()); + AddSmsTemplateResponse response = null; + try { + response = acsClient.getAcsResponse(request); + } catch (ClientException e) { + log.error("添加签名发生错误。错误代码是 [{}],错误消息是 [{}],错误请求ID是 [{}],错误Msg是 [{}],错误类型是 [{}]", + e.getErrCode(), e.getMessage(), e.getRequestId(), e.getErrMsg(), e.getErrorType()); + } + return response; + } + + /** + * 删除模板 + * @param smsTemplate + */ + public DeleteSmsTemplateResponse deleteSmsTemplate(SMSTemplate smsTemplate){ + IAcsClient acsClient = getClient(); + DeleteSmsTemplateRequest request = new DeleteSmsTemplateRequest(); + request.setTemplateCode(smsTemplate.getTemplateCode()); + DeleteSmsTemplateResponse response = null; + try { + response = acsClient.getAcsResponse(request); + } catch (ClientException e) { + log.error("删除签名发生错误。错误代码是 [{}],错误消息是 [{}],错误请求ID是 [{}],错误Msg是 [{}],错误类型是 [{}]", + e.getErrCode(), e.getMessage(), e.getRequestId(), e.getErrMsg(), e.getErrorType()); + } + return response; + } + + /** + * 修改模板 + * @param smsTemplate + */ + public ModifySmsTemplateResponse modifySmsTemplate(SMSTemplate smsTemplate){ + IAcsClient acsClient = getClient(); + ModifySmsTemplateRequest request = new ModifySmsTemplateRequest(); + request.setTemplateName(smsTemplate.getTemplateName()); + request.setTemplateType(smsTemplate.getTemplateType()); + request.setTemplateContent(smsTemplate.getTemplateContent()); + request.setRemark(smsTemplate.getRemark()); + request.setTemplateCode(smsTemplate.getTemplateCode()); + ModifySmsTemplateResponse response = null; + try { + response = acsClient.getAcsResponse(request); + } catch (ClientException e) { + log.error("修改签名发生错误。错误代码是 [{}],错误消息是 [{}],错误请求ID是 [{}],错误Msg是 [{}],错误类型是 [{}]", + e.getErrCode(), e.getMessage(), e.getRequestId(), e.getErrMsg(), e.getErrorType()); + } + return response; + } + + /** + * 查询模板 + * @param smsTemplate + */ + public QuerySmsTemplateResponse querySmsTemplate(SMSTemplate smsTemplate){ + IAcsClient acsClient = getClient(); + QuerySmsTemplateRequest request = new QuerySmsTemplateRequest(); + request.setTemplateCode(smsTemplate.getTemplateCode()); + QuerySmsTemplateResponse response = null; + try { + response = acsClient.getAcsResponse(request); + } catch (ClientException e) { + log.error("查询签名发生错误。错误代码是 [{}],错误消息是 [{}],错误请求ID是 [{}],错误Msg是 [{}],错误类型是 [{}]", + e.getErrCode(), e.getMessage(), e.getRequestId(), e.getErrMsg(), e.getErrorType()); + } + return response; + } + + /** + * 查询短信发送结果 + * @param query + * @return + */ + public QuerySendDetailsResponse querySendDetails(Query query) { + IAcsClient acsClient = getClient(); + QuerySendDetailsRequest request = new QuerySendDetailsRequest(); + request.setPhoneNumber(query.getPhoneNumber()); + request.setBizId(query.getBizId()); + SimpleDateFormat ft = new SimpleDateFormat(smsConfig.getDateFormat()); + request.setSendDate(ft.format(query.getSendDate())); + request.setPageSize(query.getPageSize()); + request.setCurrentPage(query.getCurrentPage()); + QuerySendDetailsResponse querySendDetailsResponse = null; + try { + querySendDetailsResponse = acsClient.getAcsResponse(request); + } catch (ClientException e) { + log.error("查询短信发送结果发生错误。错误代码是 [{}],错误消息是 [{}],错误请求ID是 [{}],错误Msg是 [{}],错误类型是 [{}]", + e.getErrCode(), e.getMessage(), e.getRequestId(), e.getErrMsg(), e.getErrorType()); + } + return querySendDetailsResponse; + } + + /** + * 获取短信请求 + * @param sms + * @return + */ + private SendSmsRequest getRequest(SMS sms) { + SendSmsRequest request = new SendSmsRequest(); + request.setPhoneNumbers(sms.getPhoneNumbers()); + request.setSignName(sms.getSignName()); + request.setTemplateCode(sms.getTemplateCode()); + request.setTemplateParam(sms.getTemplateParam()); + request.setOutId(sms.getOutId()); + return request; + } + + /** + * 获取短信发送服务机 + * @return + */ + private IAcsClient getClient() { + IClientProfile profile = DefaultProfile.getProfile(smsConfig.getRegionId(), smsConfig.getAccessKeyId(), smsConfig.getAccessKeySecret()); + try { + DefaultProfile.addEndpoint(smsConfig.getEndpointName(), smsConfig.getRegionId(), smsConfig.getProduct(), smsConfig.getDomain()); + } catch (ClientException e) { + log.error("获取短信发送服务机发生错误。错误代码是 [{}],错误消息是 [{}],错误请求ID是 [{}],错误Msg是 [{}],错误类型是 [{}]", + e.getErrCode(), e.getMessage(), e.getRequestId(), e.getErrMsg(), e.getErrorType()); + } + return new DefaultAcsClient(profile); + } + +} diff --git a/mallinkService/src/main/java/com/iformall/aliyunSMS/bean/AliyunSMSConfig.java b/mallinkService/src/main/java/com/iformall/sms/aliyun/bean/AliyunSMSConfig.java similarity index 95% rename from mallinkService/src/main/java/com/iformall/aliyunSMS/bean/AliyunSMSConfig.java rename to mallinkService/src/main/java/com/iformall/sms/aliyun/bean/AliyunSMSConfig.java index 993d4ac13..62ecf3828 100644 --- a/mallinkService/src/main/java/com/iformall/aliyunSMS/bean/AliyunSMSConfig.java +++ b/mallinkService/src/main/java/com/iformall/sms/aliyun/bean/AliyunSMSConfig.java @@ -1,4 +1,4 @@ -package com.iformall.aliyunSMS.bean; +package com.iformall.sms.aliyun.bean; import lombok.Data; import org.springframework.boot.context.properties.ConfigurationProperties; diff --git a/mallinkService/src/main/java/com/iformall/aliyunSMS/bean/Query.java b/mallinkService/src/main/java/com/iformall/sms/aliyun/bean/Query.java similarity index 93% rename from mallinkService/src/main/java/com/iformall/aliyunSMS/bean/Query.java rename to mallinkService/src/main/java/com/iformall/sms/aliyun/bean/Query.java index aea5e758d..c1e62b6f1 100644 --- a/mallinkService/src/main/java/com/iformall/aliyunSMS/bean/Query.java +++ b/mallinkService/src/main/java/com/iformall/sms/aliyun/bean/Query.java @@ -1,4 +1,4 @@ -package com.iformall.aliyunSMS.bean; +package com.iformall.sms.aliyun.bean; import lombok.Data; diff --git a/mallinkService/src/main/java/com/iformall/aliyunSMS/bean/Result.java b/mallinkService/src/main/java/com/iformall/sms/aliyun/bean/Result.java similarity index 90% rename from mallinkService/src/main/java/com/iformall/aliyunSMS/bean/Result.java rename to mallinkService/src/main/java/com/iformall/sms/aliyun/bean/Result.java index 541b9f1df..3c6d33d80 100644 --- a/mallinkService/src/main/java/com/iformall/aliyunSMS/bean/Result.java +++ b/mallinkService/src/main/java/com/iformall/sms/aliyun/bean/Result.java @@ -1,4 +1,4 @@ -package com.iformall.aliyunSMS.bean; +package com.iformall.sms.aliyun.bean; import com.aliyuncs.dysmsapi.model.v20170525.SendSmsResponse; import lombok.Data; diff --git a/mallinkService/src/main/java/com/iformall/aliyunSMS/bean/SMS.java b/mallinkService/src/main/java/com/iformall/sms/aliyun/bean/SMS.java similarity index 92% rename from mallinkService/src/main/java/com/iformall/aliyunSMS/bean/SMS.java rename to mallinkService/src/main/java/com/iformall/sms/aliyun/bean/SMS.java index a06cc3cc8..d09098943 100644 --- a/mallinkService/src/main/java/com/iformall/aliyunSMS/bean/SMS.java +++ b/mallinkService/src/main/java/com/iformall/sms/aliyun/bean/SMS.java @@ -1,4 +1,4 @@ -package com.iformall.aliyunSMS.bean; +package com.iformall.sms.aliyun.bean; import lombok.Data; diff --git a/mallinkService/src/main/java/com/iformall/sms/aliyun/bean/SMSSign.java b/mallinkService/src/main/java/com/iformall/sms/aliyun/bean/SMSSign.java new file mode 100644 index 000000000..f8851b290 --- /dev/null +++ b/mallinkService/src/main/java/com/iformall/sms/aliyun/bean/SMSSign.java @@ -0,0 +1,23 @@ +package com.iformall.sms.aliyun.bean; + +import lombok.Data; + + +@Data +public class SMSSign { + + //签名名称。 + private String signName; + //签名来源。其中:默认为3 + //0:企事业单位的全称或简称。 + //1:工信部备案网站的全称或简称。 + //2:APP应用的全称或简称。 + //3:公众号或小程序的全称或简称。 + //4:电商平台店铺名的全称或简称。 + //5:商标名的全称或简称 + private Integer signSource; + //短信签名申请说明。请在申请说明中详细描述您的业务使用场景, + // 申请工信部备案网站的全称或简称请在此处填写域名,长度不超过200个字符。 + private String remark; + +} \ No newline at end of file diff --git a/mallinkService/src/main/java/com/iformall/sms/aliyun/bean/SMSTemplate.java b/mallinkService/src/main/java/com/iformall/sms/aliyun/bean/SMSTemplate.java new file mode 100644 index 000000000..59cf57a0c --- /dev/null +++ b/mallinkService/src/main/java/com/iformall/sms/aliyun/bean/SMSTemplate.java @@ -0,0 +1,24 @@ +package com.iformall.sms.aliyun.bean; + +import lombok.Data; + + +@Data +public class SMSTemplate { + + //模板名称,长度为1~30个字符。 + private String templateName; + //短信类型。其中:默认为1 + //0:验证码。 + //1:短信通知。 + //2:推广短信。 + //3:国际/港澳台消息。 + private Integer templateType; + //模板内容,长度为1~500个字符。 + private String templateContent; + //短信模板申请说明。请在申请说明中描述您的业务使用场景,长度为1~100个字符 + private String remark; + //短信模板CODE。 + private String templateCode; + +} \ No newline at end of file diff --git a/mallinkService/src/main/java/com/iformall/utils/WiwideUtil.java b/mallinkService/src/main/java/com/iformall/sms/wiwide/WiwideUtil.java similarity index 86% rename from mallinkService/src/main/java/com/iformall/utils/WiwideUtil.java rename to mallinkService/src/main/java/com/iformall/sms/wiwide/WiwideUtil.java index 1d7e0e1bd..dd27c0c27 100644 --- a/mallinkService/src/main/java/com/iformall/utils/WiwideUtil.java +++ b/mallinkService/src/main/java/com/iformall/sms/wiwide/WiwideUtil.java @@ -1,25 +1,41 @@ -package com.iformall.utils; +package com.iformall.sms.wiwide; import com.alibaba.fastjson.JSONObject; import com.iformall.common.ErrorCode; import com.iformall.domain.po.WxWiWideInfo; +import com.iformall.enums.EnumVerifyCode; import com.iformall.exception.MallinkException; +import com.iformall.sms.SMSExcutor; +import com.iformall.utils.*; import org.apache.commons.lang3.StringUtils; import org.apache.shiro.codec.Base64; import org.slf4j.Logger; import org.slf4j.LoggerFactory; +import org.springframework.stereotype.Component; import java.util.HashMap; import java.util.Map; import java.util.Set; import java.util.TreeMap; -public class WiwideUtil { +@Component +public class WiwideUtil implements SMSExcutor { private static final Logger logger = LoggerFactory.getLogger(WiwideUtil.class); private static final String addTemplateUrl = "https://webapp.wiwide.com/apisms/addtemplate"; private static final String smsSendUrl = "https://webapp.wiwide.com/apisms/send"; + @Override + public String sendMsg(String secret, String bid, String publickey, String phone, String signature, String msg, String notifyUrl, String verifysms, Integer modelId, String templateParam, String templateCode, String outId) { + return sendMsg(secret, bid, publickey, phone, signature, msg, notifyUrl, + verifysms, modelId); + } + + @Override + public String addTemplate(String secret, String bid, String publickey, String signature, String content, String notifyUrl, String verifysms, String templateName, Integer templateType, String remark) { + return addTemplate(secret, bid, publickey, signature, content, notifyUrl,verifysms); + } + public static String addTemplate(String secret, String bid, String publickey, String signature, String content, String notifyUrl, String verifysms) { //请求api数据排序 TreeMap message = new TreeMap<>(); @@ -163,4 +179,5 @@ public class WiwideUtil { String data = HttpUtil.doPostWiwide(wiWideInfo.getWiwideUrl() + "/reports/data", token, params); return data; } + } diff --git a/mallinkService/src/main/resources/mapper/WxMsgCallbackMapper.xml b/mallinkService/src/main/resources/mapper/WxMsgCallbackMapper.xml index 51dec00a7..4bc60b2ab 100644 --- a/mallinkService/src/main/resources/mapper/WxMsgCallbackMapper.xml +++ b/mallinkService/src/main/resources/mapper/WxMsgCallbackMapper.xml @@ -104,7 +104,9 @@ - - + + + update wx_msg_callback set status=#{status},status_msg=#{statusMsg} where `batch_no` = #{batchNo} + diff --git a/mallinkService/src/main/resources/mapper/WxMsgConfigMapper.xml b/mallinkService/src/main/resources/mapper/WxMsgConfigMapper.xml index eedf4ddc9..d42040b64 100644 --- a/mallinkService/src/main/resources/mapper/WxMsgConfigMapper.xml +++ b/mallinkService/src/main/resources/mapper/WxMsgConfigMapper.xml @@ -19,12 +19,14 @@ + - `id`,`tenant_id`,`parent_tenant_id`,`secret`,`publickey`,`bid`,`recharge`,`remains`,`total`,`account`,`reminderstatus`,`reminder`,`phone`,`notifyurl`,`modelnotifyurl`,`verifynotifyurl`,`appid` + `id`,`tenant_id`,`parent_tenant_id`,`secret`,`publickey`,`bid`,`recharge`,`remains`,`total`,`account`, + `reminderstatus`,`reminder`,`phone`,`notifyurl`,`modelnotifyurl`,`verifynotifyurl`,`appid`,`isAliyunSMS` @@ -102,6 +104,11 @@ + + and `appid` = #{isAliyunSMS} + + + and id in diff --git a/mallinkService/src/main/resources/mapper/WxMsgModelMapper.xml b/mallinkService/src/main/resources/mapper/WxMsgModelMapper.xml index 01d3b845f..174497cab 100644 --- a/mallinkService/src/main/resources/mapper/WxMsgModelMapper.xml +++ b/mallinkService/src/main/resources/mapper/WxMsgModelMapper.xml @@ -11,11 +11,12 @@ + - `id`,`tenant_id`,`parent_tenant_id`,`name`,`signature`,`content`,`createtime`,`status`,`model_id` + `id`,`tenant_id`,`parent_tenant_id`,`name`,`signature`,`content`,`createtime`,`status`,`model_id`,`model_code` @@ -54,6 +55,9 @@ and `model_id` = #{modelId} + + and `model_code` = #{modelCode} + and id in @@ -84,5 +88,9 @@ limit 1 + + update wx_msg_model set status=#{status} where `model_code` = #{modelCode} + + diff --git a/mallinkService/src/main/resources/mapper/WxMsgSignatureMapper.xml b/mallinkService/src/main/resources/mapper/WxMsgSignatureMapper.xml index fc05e7cf0..842326b7e 100644 --- a/mallinkService/src/main/resources/mapper/WxMsgSignatureMapper.xml +++ b/mallinkService/src/main/resources/mapper/WxMsgSignatureMapper.xml @@ -7,10 +7,13 @@ + + + - `id`,`tenant_id`,`parent_tenant_id`,`name`,`createtime` + `id`,`tenant_id`,`parent_tenant_id`,`name`,`createtime`,`remark`,`sign_status`,`reason` @@ -36,7 +39,11 @@ and `createtime` = #{createtime} - + + + and `sign_status` = #{signStatus} + + and id in diff --git a/mallinkService/src/main/resources/mapper/WxMsgValidationcodeModelMapper.xml b/mallinkService/src/main/resources/mapper/WxMsgValidationcodeModelMapper.xml index 36cb3cde5..6e2c6c347 100644 --- a/mallinkService/src/main/resources/mapper/WxMsgValidationcodeModelMapper.xml +++ b/mallinkService/src/main/resources/mapper/WxMsgValidationcodeModelMapper.xml @@ -61,6 +61,10 @@ + + update wx_msg_validationcode_model set status=#{status} where `model_code` = #{modelCode} + + diff --git a/pom.xml b/pom.xml index eeed16cf5..62e78ae79 100644 --- a/pom.xml +++ b/pom.xml @@ -379,14 +379,15 @@ com.aliyun aliyun-java-sdk-core - 3.7.1 + 4.5.2 com.aliyun aliyun-java-sdk-dysmsapi - 1.1.0 + 2.1.0 +