diff --git a/esua-epdc/epdc-module/epdc-message/epdc-message-client/src/main/java/com/elink/esua/epdc/constant/SysSmsTemplateConstant.java b/esua-epdc/epdc-module/epdc-message/epdc-message-client/src/main/java/com/elink/esua/epdc/constant/SysSmsTemplateConstant.java index 24feb91e7..4af79e839 100644 --- a/esua-epdc/epdc-module/epdc-message/epdc-message-client/src/main/java/com/elink/esua/epdc/constant/SysSmsTemplateConstant.java +++ b/esua-epdc/epdc-module/epdc-message/epdc-message-client/src/main/java/com/elink/esua/epdc/constant/SysSmsTemplateConstant.java @@ -56,9 +56,9 @@ public interface SysSmsTemplateConstant { /** * 工作端-项目-关闭 */ - String SMS_TEMPLATE_WORK_ITEM_SETTLE = "WORK_ITEM_SETTLE"; + String SMS_TEMPLATE_WORK_ITEM_CLOSED = "WORK_ITEM_CLOSED"; /** * 工作端-项目-结案 */ - String SMS_TEMPLATE_WORK_ITEM_CLOSED = "WORK_ITEM_CLOSED"; + String SMS_TEMPLATE_WORK_ITEM_SETTLE = "WORK_ITEM_SETTLE"; } diff --git a/esua-epdc/epdc-module/epdc-message/epdc-message-client/src/main/java/com/elink/esua/epdc/dto/form/SmsNoticeFormDTO.java b/esua-epdc/epdc-module/epdc-message/epdc-message-client/src/main/java/com/elink/esua/epdc/dto/form/SmsNoticeFormDTO.java new file mode 100644 index 000000000..e66ffd2fd --- /dev/null +++ b/esua-epdc/epdc-module/epdc-message/epdc-message-client/src/main/java/com/elink/esua/epdc/dto/form/SmsNoticeFormDTO.java @@ -0,0 +1,30 @@ +package com.elink.esua.epdc.dto.form; + +import lombok.Data; + +import javax.validation.constraints.NotBlank; +import java.io.Serializable; +import java.util.List; + +/** + * + * 短信通知Form DTO + * + * @Author:liuchuang + * @Date:2020/1/7 15:00 + */ +@Data +public class SmsNoticeFormDTO implements Serializable { + private static final long serialVersionUID = 8320411108085513393L; + + /** + * 短信模板类型 + */ + @NotBlank(message = "短信模板类型不能为空") + private String smsTemplateType; + + /** + * 手机号 + */ + private List mobiles; +} diff --git a/esua-epdc/epdc-module/epdc-message/epdc-message-server/src/main/java/com/elink/esua/epdc/controller/AppSmsTemplateController.java b/esua-epdc/epdc-module/epdc-message/epdc-message-server/src/main/java/com/elink/esua/epdc/controller/AppSmsTemplateController.java new file mode 100644 index 000000000..54107cf27 --- /dev/null +++ b/esua-epdc/epdc-module/epdc-message/epdc-message-server/src/main/java/com/elink/esua/epdc/controller/AppSmsTemplateController.java @@ -0,0 +1,42 @@ +package com.elink.esua.epdc.controller; + +import com.elink.esua.epdc.commons.tools.constant.Constant; +import com.elink.esua.epdc.commons.tools.utils.Result; +import com.elink.esua.epdc.commons.tools.validator.ValidatorUtils; +import com.elink.esua.epdc.dto.form.SmsNoticeFormDTO; +import com.elink.esua.epdc.service.SmsTemplateService; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.web.bind.annotation.PostMapping; +import org.springframework.web.bind.annotation.RequestBody; +import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.RestController; + +/** + * + * 短信-消息通知服务 + * + * @Author:liuchuang + * @Date:2020/1/7 14:59 + */ +@RestController +@RequestMapping(Constant.EPDC_APP + "smstemplate") +public class AppSmsTemplateController { + + @Autowired + private SmsTemplateService smsTemplateService; + + /** + * + * 发送短信通知 + * + * @params [formDto] + * @return com.elink.esua.epdc.commons.tools.utils.Result + * @author liuchuang + * @since 2020/1/7 15:09 + */ + @PostMapping("sendSmsNotice") + public Result sendSmsNotice(@RequestBody SmsNoticeFormDTO formDto) { + ValidatorUtils.validateEntity(formDto); + return smsTemplateService.sendSmsNotice(formDto); + } +} diff --git a/esua-epdc/epdc-module/epdc-message/epdc-message-server/src/main/java/com/elink/esua/epdc/dao/SmsTemplateDao.java b/esua-epdc/epdc-module/epdc-message/epdc-message-server/src/main/java/com/elink/esua/epdc/dao/SmsTemplateDao.java index 75dde9055..a0efe0522 100644 --- a/esua-epdc/epdc-module/epdc-message/epdc-message-server/src/main/java/com/elink/esua/epdc/dao/SmsTemplateDao.java +++ b/esua-epdc/epdc-module/epdc-message/epdc-message-server/src/main/java/com/elink/esua/epdc/dao/SmsTemplateDao.java @@ -18,6 +18,7 @@ package com.elink.esua.epdc.dao; import com.elink.esua.epdc.commons.mybatis.dao.BaseDao; +import com.elink.esua.epdc.dto.SmsTemplateDTO; import com.elink.esua.epdc.entity.SmsTemplateEntity; import org.apache.ibatis.annotations.Mapper; @@ -29,5 +30,16 @@ import org.apache.ibatis.annotations.Mapper; */ @Mapper public interface SmsTemplateDao extends BaseDao { + + /** + * + * 根据模板类型获取模板信息 + * + * @params [smsTemplateType] + * @return com.elink.esua.epdc.dto.SmsTemplateDTO + * @author liuchuang + * @since 2020/1/7 16:52 + */ + SmsTemplateDTO selectOneSmsTemplateInfoByType(String smsTemplateType); } \ No newline at end of file diff --git a/esua-epdc/epdc-module/epdc-message/epdc-message-server/src/main/java/com/elink/esua/epdc/service/SmsTemplateService.java b/esua-epdc/epdc-module/epdc-message/epdc-message-server/src/main/java/com/elink/esua/epdc/service/SmsTemplateService.java index 02a17028b..8f92366d8 100644 --- a/esua-epdc/epdc-module/epdc-message/epdc-message-server/src/main/java/com/elink/esua/epdc/service/SmsTemplateService.java +++ b/esua-epdc/epdc-module/epdc-message/epdc-message-server/src/main/java/com/elink/esua/epdc/service/SmsTemplateService.java @@ -19,7 +19,9 @@ package com.elink.esua.epdc.service; import com.elink.esua.epdc.commons.mybatis.service.BaseService; import com.elink.esua.epdc.commons.tools.page.PageData; +import com.elink.esua.epdc.commons.tools.utils.Result; import com.elink.esua.epdc.dto.SmsTemplateDTO; +import com.elink.esua.epdc.dto.form.SmsNoticeFormDTO; import com.elink.esua.epdc.entity.SmsTemplateEntity; import java.util.List; @@ -92,4 +94,26 @@ public interface SmsTemplateService extends BaseService { * @date 2020-01-07 */ void delete(String[] ids); + + /** + * + * 发送短信通知 + * + * @params [formDto] + * @return com.elink.esua.epdc.commons.tools.utils.Result + * @author liuchuang + * @since 2020/1/7 15:11 + */ + Result sendSmsNotice(SmsNoticeFormDTO formDto); + + /** + * + * 根据模板类型获取模板信息 + * + * @params [smsTemplateType] + * @return com.elink.esua.epdc.dto.SmsTemplateDTO + * @author liuchuang + * @since 2020/1/7 16:50 + */ + SmsTemplateDTO getSmsTemplateInfoByType(String smsTemplateType); } \ No newline at end of file diff --git a/esua-epdc/epdc-module/epdc-message/epdc-message-server/src/main/java/com/elink/esua/epdc/service/impl/SmsTemplateServiceImpl.java b/esua-epdc/epdc-module/epdc-message/epdc-message-server/src/main/java/com/elink/esua/epdc/service/impl/SmsTemplateServiceImpl.java index 022a7e073..0a8c94df2 100644 --- a/esua-epdc/epdc-module/epdc-message/epdc-message-server/src/main/java/com/elink/esua/epdc/service/impl/SmsTemplateServiceImpl.java +++ b/esua-epdc/epdc-module/epdc-message/epdc-message-server/src/main/java/com/elink/esua/epdc/service/impl/SmsTemplateServiceImpl.java @@ -24,16 +24,25 @@ import com.elink.esua.epdc.commons.tools.constant.FieldConstant; import com.elink.esua.epdc.commons.tools.exception.RenException; import com.elink.esua.epdc.commons.tools.page.PageData; import com.elink.esua.epdc.commons.tools.utils.ConvertUtils; +import com.elink.esua.epdc.commons.tools.utils.Result; import com.elink.esua.epdc.dao.SmsTemplateDao; import com.elink.esua.epdc.dto.SmsTemplateDTO; +import com.elink.esua.epdc.dto.SysSmsDTO; +import com.elink.esua.epdc.dto.form.SmsNoticeFormDTO; +import com.elink.esua.epdc.entity.SmsLogEntity; import com.elink.esua.epdc.entity.SmsTemplateEntity; +import com.elink.esua.epdc.exception.ModuleErrorCode; import com.elink.esua.epdc.redis.SmsTemplateRedis; +import com.elink.esua.epdc.service.SmsLogService; import com.elink.esua.epdc.service.SmsTemplateService; +import com.elink.esua.epdc.sms.AbstractSmsService; +import com.elink.esua.epdc.sms.SmsFactory; import org.apache.commons.lang3.StringUtils; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; import org.springframework.transaction.annotation.Transactional; +import java.util.ArrayList; import java.util.Arrays; import java.util.List; import java.util.Map; @@ -48,7 +57,7 @@ import java.util.Map; public class SmsTemplateServiceImpl extends BaseServiceImpl implements SmsTemplateService { @Autowired - private SmsTemplateRedis smsTemplateRedis; + private SmsLogService smsLogService; @Override public PageData page(Map params) { @@ -128,4 +137,98 @@ public class SmsTemplateServiceImpl extends BaseServiceImpl mobiles = this.mobileHandle(formDto.getMobiles()); + + // 发送短信通知 + this.sendNotice(mobiles, templateDto); + + return new Result(); + } + + /** + * + * 手机号处理 + * + * @params [mobiles] + * @return java.util.List + * @author liuchuang + * @since 2020/1/7 15:44 + */ + private List mobileHandle(List mobiles) { + List returnList = new ArrayList<>(); + int mobilesSize = mobiles.size(); + if (mobilesSize > 1000) { + for (int i = 0; i < (mobilesSize / 1000 + 1); i++) { + List temp; + if (mobiles.size() > 1000) { + temp = mobiles.subList(0, 1000); + } else if (mobiles.size() > 0) { + temp = mobiles.subList(0, mobiles.size()); + } else { + break; + } + + String tempStr = StringUtils.join(temp, ","); + returnList.add(tempStr); + mobiles.removeAll(temp); + } + } else { + String mobileStr = StringUtils.join(mobiles, ","); + returnList.add(mobileStr); + } + return returnList; + } + + /** + * + * 发送短信通知 + * + * @params [mobile, signName, template] + * @return void + * @author liuchuang + * @since 2020/1/7 17:04 + */ + private void sendNotice(List mobiles, SmsTemplateDTO templateDto) { + //短信服务 + AbstractSmsService service = SmsFactory.build(); + if (service == null) { + throw new RenException(ModuleErrorCode.SMS_CONFIG); + } + + List smsLogEntities = new ArrayList<>(mobiles.size()); + for (String mobile: + mobiles) { + //发送短信 + SysSmsDTO sysSmsDto = service.sendSmsNotice(mobile, null, templateDto.getSignName(), templateDto.getTemplate()); + + SmsLogEntity entity = new SmsLogEntity(); + entity.setSmsTemplateId(templateDto.getId()); + entity.setMobile(mobile); + entity.setStatus(sysSmsDto.getStatus()); + entity.setPlatform(sysSmsDto.getPlatform()); + smsLogEntities.add(entity); + } + + // 保存短信记录 + smsLogService.insertBatch(smsLogEntities); + } + } \ No newline at end of file diff --git a/esua-epdc/epdc-module/epdc-message/epdc-message-server/src/main/java/com/elink/esua/epdc/sms/AbstractSmsService.java b/esua-epdc/epdc-module/epdc-message/epdc-message-server/src/main/java/com/elink/esua/epdc/sms/AbstractSmsService.java index 19513319c..5f02ae9eb 100644 --- a/esua-epdc/epdc-module/epdc-message/epdc-message-server/src/main/java/com/elink/esua/epdc/sms/AbstractSmsService.java +++ b/esua-epdc/epdc-module/epdc-message/epdc-message-server/src/main/java/com/elink/esua/epdc/sms/AbstractSmsService.java @@ -8,6 +8,8 @@ package com.elink.esua.epdc.sms; +import com.elink.esua.epdc.dto.SysSmsDTO; + import java.util.LinkedHashMap; /** @@ -37,4 +39,14 @@ public abstract class AbstractSmsService { * @param template 短信模板 */ public abstract void sendSms(String mobile, LinkedHashMap params, String signName, String template); + + /** + * + * 发送短信通知 + * @param mobile 手机号 + * @param params 参数 + * @param signName 短信签名 + * @param template 短信模板 + */ + public abstract SysSmsDTO sendSmsNotice(String mobile, LinkedHashMap params, String signName, String template); } diff --git a/esua-epdc/epdc-module/epdc-message/epdc-message-server/src/main/java/com/elink/esua/epdc/sms/AliyunSmsService.java b/esua-epdc/epdc-module/epdc-message/epdc-message-server/src/main/java/com/elink/esua/epdc/sms/AliyunSmsService.java index 1c43dea24..847753411 100644 --- a/esua-epdc/epdc-module/epdc-message/epdc-message-server/src/main/java/com/elink/esua/epdc/sms/AliyunSmsService.java +++ b/esua-epdc/epdc-module/epdc-message/epdc-message-server/src/main/java/com/elink/esua/epdc/sms/AliyunSmsService.java @@ -19,14 +19,12 @@ import com.aliyuncs.http.MethodType; import com.aliyuncs.profile.DefaultProfile; import com.aliyuncs.profile.IClientProfile; import com.elink.esua.epdc.commons.tools.exception.RenException; +import com.elink.esua.epdc.dto.SysSmsDTO; import com.elink.esua.epdc.exception.ModuleErrorCode; import com.elink.esua.epdc.service.SysSmsService; import com.elink.esua.epdc.commons.tools.constant.Constant; -import com.elink.esua.epdc.commons.tools.exception.RenException; import com.elink.esua.epdc.commons.tools.utils.SpringContextUtils; import com.elink.esua.epdc.enums.PlatformEnum; -import com.elink.esua.epdc.exception.ModuleErrorCode; -import com.elink.esua.epdc.service.SysSmsService; import java.util.LinkedHashMap; @@ -111,4 +109,42 @@ public class AliyunSmsService extends AbstractSmsService { throw new RenException(ModuleErrorCode.SEND_SMS_ERROR, response.getMessage()); } } + + @Override + public SysSmsDTO sendSmsNotice(String mobile, LinkedHashMap params, String signName, String template) { + System.setProperty("sun.net.client.defaultConnectTimeout", "30000"); + System.setProperty("sun.net.client.defaultReadTimeout", "30000"); + + //组装请求对象 + SendSmsRequest request = new SendSmsRequest(); + request.setMethod(MethodType.POST); + //待发送手机号,支持以逗号分隔的形式进行批量调用,批量上限为1000个手机号码,批量调用相对于单条调用及时性稍有延迟,验证码类型的短信推荐使用单条调用的方式 + //发送国际/港澳台消息时,接收号码格式为00+国际区号+号码,如"0085200000000" + request.setPhoneNumbers(mobile); + //短信签名-可在短信控制台中找到 + request.setSignName(signName); + //短信模板-可在短信控制台中找到 + request.setTemplateCode(template); + //参数 + if(MapUtil.isNotEmpty(params)){ + request.setTemplateParam(JSON.toJSONString(params)); + } + + SendSmsResponse response; + try { + IAcsClient acsClient = new DefaultAcsClient(profile); + response = acsClient.getAcsResponse(request); + } catch (ClientException e) { + throw new RenException(ModuleErrorCode.SEND_SMS_ERROR, e, ""); + } + + SysSmsDTO sysSmsDto = new SysSmsDTO(); + sysSmsDto.setPlatform(PlatformEnum.ALIYUN.value()); + sysSmsDto.setStatus(Constant.SUCCESS); + if(!Constant.OK.equalsIgnoreCase(response.getCode())){ + sysSmsDto.setStatus(Constant.FAIL); + } + + return sysSmsDto; + } } diff --git a/esua-epdc/epdc-module/epdc-message/epdc-message-server/src/main/java/com/elink/esua/epdc/sms/QcloudSmsService.java b/esua-epdc/epdc-module/epdc-message/epdc-message-server/src/main/java/com/elink/esua/epdc/sms/QcloudSmsService.java index 5ee163c4d..9d9f7724c 100644 --- a/esua-epdc/epdc-module/epdc-message/epdc-message-server/src/main/java/com/elink/esua/epdc/sms/QcloudSmsService.java +++ b/esua-epdc/epdc-module/epdc-message/epdc-message-server/src/main/java/com/elink/esua/epdc/sms/QcloudSmsService.java @@ -10,16 +10,14 @@ package com.elink.esua.epdc.sms; import cn.hutool.core.map.MapUtil; import com.elink.esua.epdc.commons.tools.exception.RenException; +import com.elink.esua.epdc.dto.SysSmsDTO; import com.elink.esua.epdc.exception.ModuleErrorCode; import com.elink.esua.epdc.service.SysSmsService; import com.github.qcloudsms.SmsSingleSender; import com.github.qcloudsms.SmsSingleSenderResult; import com.elink.esua.epdc.commons.tools.constant.Constant; -import com.elink.esua.epdc.commons.tools.exception.RenException; import com.elink.esua.epdc.commons.tools.utils.SpringContextUtils; import com.elink.esua.epdc.enums.PlatformEnum; -import com.elink.esua.epdc.exception.ModuleErrorCode; -import com.elink.esua.epdc.service.SysSmsService; import java.util.ArrayList; import java.util.LinkedHashMap; @@ -70,4 +68,32 @@ public class QcloudSmsService extends AbstractSmsService { throw new RenException(ModuleErrorCode.SEND_SMS_ERROR, result.errMsg); } } + + @Override + public SysSmsDTO sendSmsNotice(String mobile, LinkedHashMap params, String signName, String template) { + SmsSingleSender sender = new SmsSingleSender(config.getQcloudAppId(), config.getQcloudAppKey()); + + //短信参数 + ArrayList paramsList = new ArrayList<>(); + if(MapUtil.isNotEmpty(params)){ + for(String value : params.values()){ + paramsList.add(value); + } + } + SmsSingleSenderResult result; + try { + result = sender.sendWithParam("86", mobile, Integer.parseInt(template), paramsList, signName, null, null); + } catch (Exception e) { + throw new RenException(ModuleErrorCode.SEND_SMS_ERROR, e, ""); + } + + SysSmsDTO sysSmsDto = new SysSmsDTO(); + sysSmsDto.setPlatform(PlatformEnum.QCLOUD.value()); + sysSmsDto.setStatus(Constant.SUCCESS); + if(result.result != 0){ + sysSmsDto.setStatus(Constant.FAIL); + } + + return sysSmsDto; + } } diff --git a/esua-epdc/epdc-module/epdc-message/epdc-message-server/src/main/resources/mapper/SmsTemplateDao.xml b/esua-epdc/epdc-module/epdc-message/epdc-message-server/src/main/resources/mapper/SmsTemplateDao.xml index 72c1311af..62ab1dbf4 100644 --- a/esua-epdc/epdc-module/epdc-message/epdc-message-server/src/main/resources/mapper/SmsTemplateDao.xml +++ b/esua-epdc/epdc-module/epdc-message/epdc-message-server/src/main/resources/mapper/SmsTemplateDao.xml @@ -3,19 +3,9 @@ - - - - - - - - - - - - - + \ No newline at end of file