diff --git a/modules/i3plus-core-api/src/main/java/cn/estsh/i3plus/core/api/iservice/base/ISystemInitService.java b/modules/i3plus-core-api/src/main/java/cn/estsh/i3plus/core/api/iservice/base/ISystemInitService.java index 8d32f45..0623ff3 100644 --- a/modules/i3plus-core-api/src/main/java/cn/estsh/i3plus/core/api/iservice/base/ISystemInitService.java +++ b/modules/i3plus-core-api/src/main/java/cn/estsh/i3plus/core/api/iservice/base/ISystemInitService.java @@ -58,4 +58,7 @@ public interface ISystemInitService { @ApiOperation(value = "定时任务日志等级") void reloadBarcodeRule(); + + @ApiOperation(value = "重启短信状态同步线程") + void createSmsSyncThread(); } diff --git a/modules/i3plus-core-api/src/main/java/cn/estsh/i3plus/core/api/iservice/busi/ISysConfigService.java b/modules/i3plus-core-api/src/main/java/cn/estsh/i3plus/core/api/iservice/busi/ISysConfigService.java index dbf2936..e2cbea0 100644 --- a/modules/i3plus-core-api/src/main/java/cn/estsh/i3plus/core/api/iservice/busi/ISysConfigService.java +++ b/modules/i3plus-core-api/src/main/java/cn/estsh/i3plus/core/api/iservice/busi/ISysConfigService.java @@ -5,7 +5,6 @@ import cn.estsh.i3plus.pojo.base.common.Pager; import cn.estsh.i3plus.pojo.platform.bean.SysConfig; import io.swagger.annotations.ApiOperation; -import java.util.Date; import java.util.List; /** @@ -92,6 +91,6 @@ public interface ISysConfigService { * @return */ @ApiOperation(value = "根据系统参数组来查找系统参数") - List findSysConfigByGroup(Integer group); + List findSysConfigByGroup(Integer group); } diff --git a/modules/i3plus-core-api/src/main/java/cn/estsh/i3plus/core/api/iservice/busi/ISysSmsSendRecordService.java b/modules/i3plus-core-api/src/main/java/cn/estsh/i3plus/core/api/iservice/busi/ISysSmsSendRecordService.java new file mode 100644 index 0000000..bfea40f --- /dev/null +++ b/modules/i3plus-core-api/src/main/java/cn/estsh/i3plus/core/api/iservice/busi/ISysSmsSendRecordService.java @@ -0,0 +1,17 @@ +package cn.estsh.i3plus.core.api.iservice.busi; + +import cn.estsh.i3plus.pojo.platform.bean.SysSmsSendRecord; +import cn.estsh.impp.framework.base.service.ICrudService; + +/** + * @Description : 短信发送记录 + * @Reference : + * @Author : yunhao + * @CreateDate : 2020-12-14 20:14 + * @Modify: + **/ +public interface ISysSmsSendRecordService extends ICrudService { + + + +} diff --git a/modules/i3plus-core-api/src/main/java/cn/estsh/i3plus/core/api/iservice/busi/ISysSmsSignService.java b/modules/i3plus-core-api/src/main/java/cn/estsh/i3plus/core/api/iservice/busi/ISysSmsSignService.java new file mode 100644 index 0000000..f72ac2c --- /dev/null +++ b/modules/i3plus-core-api/src/main/java/cn/estsh/i3plus/core/api/iservice/busi/ISysSmsSignService.java @@ -0,0 +1,31 @@ +package cn.estsh.i3plus.core.api.iservice.busi; + +import cn.estsh.i3plus.pojo.platform.bean.SysSmsSign; +import cn.estsh.impp.framework.base.service.ICrudService; + +/** + * @Description : 短信签名 + * @Reference : + * @Author : yunhao + * @CreateDate : 2020-12-14 20:13 + * @Modify: + **/ +public interface ISysSmsSignService extends ICrudService { + + /** + * 检查签名是否唯一 + * + * @param sysSmsSign 签名信息 + * @return 检查结果 + */ + boolean checkSysSignOnly(SysSmsSign sysSmsSign); + + /** + * 根据代码查询短信签名 + * + * @param code 签名代码 + * @return 查询结果 + */ + SysSmsSign getSysSmsSignByCode(String code); + +} diff --git a/modules/i3plus-core-api/src/main/java/cn/estsh/i3plus/core/api/iservice/busi/ISysSmsTemplateService.java b/modules/i3plus-core-api/src/main/java/cn/estsh/i3plus/core/api/iservice/busi/ISysSmsTemplateService.java new file mode 100644 index 0000000..4823d28 --- /dev/null +++ b/modules/i3plus-core-api/src/main/java/cn/estsh/i3plus/core/api/iservice/busi/ISysSmsTemplateService.java @@ -0,0 +1,31 @@ +package cn.estsh.i3plus.core.api.iservice.busi; + +import cn.estsh.i3plus.pojo.platform.bean.SysSmsTemplate; +import cn.estsh.impp.framework.base.service.ICrudService; + +/** + * @Description : 短信模板 + * @Reference : + * @Author : yunhao + * @CreateDate : 2020-12-14 20:14 + * @Modify: + **/ +public interface ISysSmsTemplateService extends ICrudService { + + /** + * 检查短信模板是否唯一 + * + * @param smsTemplate 待检查的短信模板数据 + * @return 检查结果 + */ + boolean checkSysSmsTemplateOnly(SysSmsTemplate smsTemplate); + + /** + * 根据code短信模板 + * + * @param code 模板代码 + * @return 查询结果 + */ + SysSmsTemplate getSysSmsTemplateByCode(String code); + +} diff --git a/modules/i3plus-core-apiservice/pom.xml b/modules/i3plus-core-apiservice/pom.xml index 79713e2..f88e815 100644 --- a/modules/i3plus-core-apiservice/pom.xml +++ b/modules/i3plus-core-apiservice/pom.xml @@ -87,6 +87,11 @@ i3plus-sdk-wechat + + i3plus.sdk + i3plus-sdk-sms + + impp.framework diff --git a/modules/i3plus-core-apiservice/src/main/java/cn/estsh/i3plus/core/apiservice/controller/busi/SysConfigController.java b/modules/i3plus-core-apiservice/src/main/java/cn/estsh/i3plus/core/apiservice/controller/busi/SysConfigController.java index 7fe2e0b..167f6d5 100644 --- a/modules/i3plus-core-apiservice/src/main/java/cn/estsh/i3plus/core/apiservice/controller/busi/SysConfigController.java +++ b/modules/i3plus-core-apiservice/src/main/java/cn/estsh/i3plus/core/apiservice/controller/busi/SysConfigController.java @@ -13,6 +13,7 @@ import cn.estsh.i3plus.pojo.base.enumutil.ImppEnumUtil; import cn.estsh.i3plus.pojo.base.enumutil.ResourceEnumUtil; import cn.estsh.i3plus.pojo.platform.bean.MailConfig; import cn.estsh.i3plus.pojo.platform.bean.SessionUser; +import cn.estsh.i3plus.sdk.sms.base.pojo.SmsConfig; import cn.estsh.i3plus.pojo.platform.bean.SysConfig; import cn.estsh.impp.framework.base.controller.CoreBaseController; import cn.estsh.impp.framework.boot.auth.AuthUtil; @@ -29,6 +30,8 @@ import org.springframework.web.bind.annotation.*; import java.util.List; +import static cn.estsh.i3plus.platform.common.util.CommonConstWords.*; + /** * @Description : 系统参数管理服务 * @Reference : @@ -38,7 +41,7 @@ import java.util.List; **/ @RestController @Api(tags = "系统参数管理服务") -@RequestMapping(PlatformConstWords.BASE_URL +"/sys-config") +@RequestMapping(PlatformConstWords.BASE_URL + "/sys-config") public class SysConfigController extends CoreBaseController { public static final Logger LOGGER = LoggerFactory.getLogger(SysConfigController.class); @@ -53,11 +56,12 @@ public class SysConfigController extends CoreBaseController { /** * 添加系统参数 + * * @param sysConfig 系统参数 * @return 处理结果 */ @PostMapping("/insert") - @ApiOperation(value = "添加系统参数",notes = "添加系统参数") + @ApiOperation(value = "添加系统参数", notes = "添加系统参数") public ResultBean insertSysConfig(SysConfig sysConfig) { try { // 登录用户 @@ -65,26 +69,27 @@ public class SysConfigController extends CoreBaseController { // 条件验证 ValidatorBean.beginValid(sysConfig) - .notNull("name",sysConfig.getName()) - .notNull("configCode",sysConfig.getConfigCode()) - .notNull("configType",sysConfig.getConfigType()) - .notNull("configValue",sysConfig.getConfigValue()); + .notNull("name", sysConfig.getName()) + .notNull("configCode", sysConfig.getConfigCode()) + .notNull("configType", sysConfig.getConfigType()) + .notNull("configValue", sysConfig.getConfigValue()); //修改初始化 - ConvertBean.modelInitialize(sysConfig,user); + ConvertBean.modelInitialize(sysConfig, user); sysConfigService.insertSysConfig(sysConfig); systemInitService.putAndLoadSysConfig(); return ResultBean.success("操作成功").setCode(ResourceEnumUtil.MESSAGE.SUCCESS.getCode()); - }catch(ImppBusiException busExcep){ + } catch (ImppBusiException busExcep) { return ResultBean.fail(busExcep); - }catch(Exception e){ + } catch (Exception e) { return ImppExceptionBuilder.newInstance().buildExceptionResult(e); } } /** * 根据id删除系统参数 + * * @param idStr 系统参数id * @return 处理结果 */ @@ -95,8 +100,8 @@ public class SysConfigController extends CoreBaseController { startMultiService(); // 条件验证 - ValidatorBean.checkNotNull(idStr,"id不能为空"); - if(sysConfigService.getSysConfigById(Long.parseLong(idStr)) == null){ + ValidatorBean.checkNotNull(idStr, "id不能为空"); + if (sysConfigService.getSysConfigById(Long.parseLong(idStr)) == null) { throw ImppExceptionBuilder.newInstance() .setSystemID(CommonEnumUtil.SOFT_TYPE.CORE.getCode()) .setErrorCode(ImppExceptionEnum.VARIFY_EXCEPTION_DATA_NOT_EXIT.getCode()) @@ -107,42 +112,43 @@ public class SysConfigController extends CoreBaseController { sysConfigService.deleteSysConfigById(Long.parseLong(idStr)); systemInitService.putAndLoadSysConfig(); - return ResultBean.success("操作成功").setCode(ResourceEnumUtil.MESSAGE.SUCCESS.getCode()); - }catch(ImppBusiException busExcep){ + return ResultBean.success("操作成功").setCode(ResourceEnumUtil.MESSAGE.SUCCESS.getCode()); + } catch (ImppBusiException busExcep) { return ResultBean.fail(busExcep); - }catch(Exception e){ + } catch (Exception e) { return ImppExceptionBuilder.newInstance().buildExceptionResult(e); } } /** * 系统参数 + * * @param sysConfig 系统参数 * @return 处理结果 */ @PutMapping(value = "/update") - @ApiOperation(value = "修改系统参数",notes = "修改系统参数") - public ResultBean updateSysConfig(SysConfig sysConfig){ + @ApiOperation(value = "修改系统参数", notes = "修改系统参数") + public ResultBean updateSysConfig(SysConfig sysConfig) { try { // 登录用户 SessionUser user = AuthUtil.getSessionUser(); // 条件验证 ValidatorBean.beginValid(sysConfig) - .notNull("name",sysConfig.getName()) - .notNull("configCode",sysConfig.getConfigCode()) - .notNull("configType",sysConfig.getConfigType()) - .notNull("configValue",sysConfig.getConfigValue()); + .notNull("name", sysConfig.getName()) + .notNull("configCode", sysConfig.getConfigCode()) + .notNull("configType", sysConfig.getConfigType()) + .notNull("configValue", sysConfig.getConfigValue()); //添加初始化 - ConvertBean.modelUpdate(sysConfig,user); + ConvertBean.modelUpdate(sysConfig, user); sysConfigService.updateSysConfig(sysConfig); systemInitService.putAndLoadSysConfig(); - return ResultBean.success("操作成功").setCode(ResourceEnumUtil.MESSAGE.SUCCESS.getCode()); - }catch(ImppBusiException busExcep){ + return ResultBean.success("操作成功").setCode(ResourceEnumUtil.MESSAGE.SUCCESS.getCode()); + } catch (ImppBusiException busExcep) { return ResultBean.fail(busExcep); - }catch(Exception e){ + } catch (Exception e) { return ImppExceptionBuilder.newInstance().buildExceptionResult(e); } } @@ -150,139 +156,144 @@ public class SysConfigController extends CoreBaseController { /** * 系统参数 + * * @param bean 系统参数 * @return 处理结果 */ @PutMapping(value = "/update-value") - @ApiOperation(value = "修改系统参数内容",notes = "修改系统参数内容") - public ResultBean updateSysConfigValue(SysConfig bean){ + @ApiOperation(value = "修改系统参数内容", notes = "修改系统参数内容") + public ResultBean updateSysConfigValue(SysConfig bean) { try { // 条件验证 ValidatorBean.beginValid(bean) - .notNull("configCode",bean.getConfigCode()); + .notNull("configCode", bean.getConfigCode()); SysConfig config = sysConfigService.getSysConfigByCode(bean.getConfigCode()); - ValidatorBean.checkNotNull(config,"不存在的配置信息"); + ValidatorBean.checkNotNull(config, "不存在的配置信息"); config.setConfigValue(bean.getConfigValue()); - ConvertBean.modelUpdate(config,getSessionUser()); + ConvertBean.modelUpdate(config, getSessionUser()); sysConfigService.updateSysConfig(config); systemInitService.putAndLoadSysConfig(); - return ResultBean.success("操作成功").setCode(ResourceEnumUtil.MESSAGE.SUCCESS.getCode()); - }catch(ImppBusiException busExcep){ + return ResultBean.success("操作成功").setCode(ResourceEnumUtil.MESSAGE.SUCCESS.getCode()); + } catch (ImppBusiException busExcep) { return ResultBean.fail(busExcep); - }catch(Exception e){ + } catch (Exception e) { return ImppExceptionBuilder.newInstance().buildExceptionResult(e); } } - /** * 查询全部系统参数 + * * @return 处理结果 */ @GetMapping(value = "/list") - @ApiOperation(value = "查询全部系统参数",notes = "查询全部系统参数") - public ResultBean findSysConfigAll(){ + @ApiOperation(value = "查询全部系统参数", notes = "查询全部系统参数") + public ResultBean findSysConfigAll() { try { List sysConfigList = sysConfigService.ListSysConfig(); - return ResultBean.success("操作成功") - .setResultList(sysConfigList) - .setCode(ResourceEnumUtil.MESSAGE.SUCCESS.getCode()); - }catch(ImppBusiException busExcep){ + return ResultBean.success("操作成功") + .setResultList(sysConfigList) + .setCode(ResourceEnumUtil.MESSAGE.SUCCESS.getCode()); + } catch (ImppBusiException busExcep) { return ResultBean.fail(busExcep); - }catch(Exception e){ + } catch (Exception e) { return ImppExceptionBuilder.newInstance().buildExceptionResult(e); } } /** * 根据id查询系统参数 + * * @param id 系统参数id * @return 处理结果 */ @GetMapping(value = "/get/{id}") - @ApiOperation(value = "根据id查询系统参数",notes = "根据id查询系统参数") - public ResultBean getSysConfigById(@PathVariable("id") String id){ + @ApiOperation(value = "根据id查询系统参数", notes = "根据id查询系统参数") + public ResultBean getSysConfigById(@PathVariable("id") String id) { try { - ValidatorBean.checkNotNull(id,"id不能为空"); + ValidatorBean.checkNotNull(id, "id不能为空"); SysConfig sysConfig = sysConfigService.getSysConfigById(Long.parseLong(id)); if (sysConfig != null) { return ResultBean.success("操作成功") .setResultObject(sysConfig).setCode(ResourceEnumUtil.MESSAGE.SUCCESS.getCode()); - }else { + } else { return ResultBean.fail("数据不存在").setCode(ResourceEnumUtil.MESSAGE.EMPTY.getCode()); } - }catch(ImppBusiException busExcep){ + } catch (ImppBusiException busExcep) { return ResultBean.fail(busExcep); - }catch(Exception e){ + } catch (Exception e) { return ImppExceptionBuilder.newInstance().buildExceptionResult(e); } } /** * 系统参数复杂查询,分页,排序 + * * @param sysConfig 系统参数 - * @param pager 分页信息 + * @param pager 分页信息 * @return 处理结果 */ @GetMapping("/query") - @ApiOperation(value = "系统参数复杂查询,分页,排序",notes = "系统参数复杂查询,分页,排序") - public ResultBean querySysConfigByPager(SysConfig sysConfig,Pager pager) { + @ApiOperation(value = "系统参数复杂查询,分页,排序", notes = "系统参数复杂查询,分页,排序") + public ResultBean querySysConfigByPager(SysConfig sysConfig, Pager pager) { try { - ListPager sysConfigListPager = sysConfigService.querySysConfigByPager(sysConfig,pager); - return ResultBean.success("操作成功").setListPager(sysConfigListPager).setCode(ResourceEnumUtil.MESSAGE.SUCCESS.getCode()); - }catch(ImppBusiException busExcep){ + ListPager sysConfigListPager = sysConfigService.querySysConfigByPager(sysConfig, pager); + return ResultBean.success("操作成功").setListPager(sysConfigListPager).setCode(ResourceEnumUtil.MESSAGE.SUCCESS.getCode()); + } catch (ImppBusiException busExcep) { return ResultBean.fail(busExcep); - }catch(Exception e){ + } catch (Exception e) { return ImppExceptionBuilder.newInstance().buildExceptionResult(e); } } /** * 根据代码获取系统配置 + * * @param code 系统参数代码 * @return 处理结果 */ @GetMapping(value = "/get-code/{code}") @ApiOperation(value = "根据代码获取系统配置") - public ResultBean getSysConfigByCode(@PathVariable("code") String code){ + public ResultBean getSysConfigByCode(@PathVariable("code") String code) { try { - ValidatorBean.checkNotNull(code,"配置项代码不能为空"); + ValidatorBean.checkNotNull(code, "配置项代码不能为空"); SysConfig sysConfig = sysConfigService.getSysConfigByCode(code); - if(sysConfig == null){ + if (sysConfig == null) { return ResultBean.fail("数据不存在").setCode(ResourceEnumUtil.MESSAGE.EMPTY.getCode()); - } else{ - return ResultBean.success("操作成功").setResultObject(sysConfig).setCode(ResourceEnumUtil.MESSAGE.SUCCESS.getCode()); + } else { + return ResultBean.success("操作成功").setResultObject(sysConfig).setCode(ResourceEnumUtil.MESSAGE.SUCCESS.getCode()); } - }catch(ImppBusiException busExcep){ + } catch (ImppBusiException busExcep) { return ResultBean.fail(busExcep); - }catch(Exception e){ + } catch (Exception e) { return ImppExceptionBuilder.newInstance().buildExceptionResult(e); } } /** * 查询邮件配置 + * * @return 处理结果 */ @GetMapping("/find-mail") @ApiOperation(value = "查询邮件配置") - public ResultBean findMailSysConfig(){ + public ResultBean findMailSysConfig() { try { List sysConfig = sysConfigService.findMailConfig(); - if(sysConfig == null){ + if (sysConfig == null) { return ResultBean.fail("数据不存在").setCode(ResourceEnumUtil.MESSAGE.EMPTY.getCode()); - } else{ - return ResultBean.success("操作成功").setResultList(sysConfig).setCode(ResourceEnumUtil.MESSAGE.SUCCESS.getCode()); + } else { + return ResultBean.success("操作成功").setResultList(sysConfig).setCode(ResourceEnumUtil.MESSAGE.SUCCESS.getCode()); } - }catch(ImppBusiException busExcep){ + } catch (ImppBusiException busExcep) { return ResultBean.fail(busExcep); - }catch(Exception e){ + } catch (Exception e) { return ImppExceptionBuilder.newInstance().buildExceptionResult(e); } } @@ -290,49 +301,51 @@ public class SysConfigController extends CoreBaseController { /** * 根据系统代码修改系统配置值 * wei.peng : - * 该方法已过期 推荐使用 SysConfigController.updateSysConfigValue() - * @param code 系统代码 + * 该方法已过期 推荐使用 SysConfigController.updateSysConfigValue() + * + * @param code 系统代码 * @param value 系统配置值 * @return 处理结果 */ @Deprecated @PostMapping("/update-code/{code}/{value}") @ApiOperation(value = "根据code修改系统配置") - public ResultBean updateSysConfigByCode(@PathVariable("code") String code,@PathVariable("value") String value){ - try{ - ValidatorBean.checkNotNull(code,"配置项代码不能为空"); - ValidatorBean.checkNotNull(value,"值不能为空"); + public ResultBean updateSysConfigByCode(@PathVariable("code") String code, @PathVariable("value") String value) { + try { + ValidatorBean.checkNotNull(code, "配置项代码不能为空"); + ValidatorBean.checkNotNull(value, "值不能为空"); - sysConfigService.updateSysConfigByCode(code,value); + sysConfigService.updateSysConfigByCode(code, value); systemInitService.putAndLoadSysConfig(); return ResultBean.success("操作成功").setCode(ResourceEnumUtil.MESSAGE.SUCCESS.getCode()); - }catch(ImppBusiException busExcep){ + } catch (ImppBusiException busExcep) { return ResultBean.fail(busExcep); - }catch(Exception e){ + } catch (Exception e) { return ImppExceptionBuilder.newInstance().buildExceptionResult(e); } } /** * 发送测试邮件 + * * @param mailConfig 邮件配置信息 * @return 处理结果 */ @GetMapping("/send-test-mail") @ApiOperation(value = "邮件测试") - public ResultBean sendTestMail(MailConfig mailConfig){ + public ResultBean sendTestMail(MailConfig mailConfig) { try { ValidatorBean.beginValid(mailConfig) - .notNull("mailSwitch",mailConfig.getMailSwitch()) - .notNull("mailHost",mailConfig.getMailHost()) - .notNull("mailPort",mailConfig.getMailPort()) - .notNull("mailUser",mailConfig.getMailUser()) - .notNull("mailPassword",mailConfig.getMailPassword()) - .notNull("mailNick",mailConfig.getMailNick()) - .notNull("testTo",mailConfig.getTestTo()); + .notNull("mailSwitch", mailConfig.getMailSwitch()) + .notNull("mailHost", mailConfig.getMailHost()) + .notNull("mailPort", mailConfig.getMailPort()) + .notNull("mailUser", mailConfig.getMailUser()) + .notNull("mailPassword", mailConfig.getMailPassword()) + .notNull("mailNick", mailConfig.getMailNick()) + .notNull("testTo", mailConfig.getTestTo()); // 是否开启邮件服务器 - if(mailConfig.getMailSwitch() != CommonEnumUtil.TRUE_OR_FALSE.TRUE.getValue()){ + if (mailConfig.getMailSwitch() != CommonEnumUtil.TRUE_OR_FALSE.TRUE.getValue()) { throw ImppExceptionBuilder.newInstance() .setSystemID(CommonEnumUtil.SOFT_TYPE.CORE.getCode()) .setErrorCode(ImppExceptionEnum.MAIL_SERVER_NOT_OPEN_ERROR.getCode()) @@ -349,29 +362,108 @@ public class SysConfigController extends CoreBaseController { mailUtil.send(); return ResultBean.success("测试邮件已发送").setCode(ResourceEnumUtil.MESSAGE.SUCCESS.getCode()); - } catch(ImppBusiException busExcep){ + } catch (ImppBusiException busExcep) { return ResultBean.fail(busExcep); - }catch(Exception e){ + } catch (Exception e) { return ImppExceptionBuilder.newInstance().buildExceptionResult(e); } } /** * 根据系统配置组查询系统配置信息 + * * @param group 系统配置组 * @return 处理结果 */ @GetMapping("/find-group/{group}") @ApiOperation(value = "根据参数组查询系统参数") - public ResultBean findSysConfigByGroup(@PathVariable("group") Integer group){ + public ResultBean findSysConfigByGroup(@PathVariable("group") Integer group) { try { - ValidatorBean.checkNotNull(group,"参数组不能为空"); + ValidatorBean.checkNotNull(group, "参数组不能为空"); List sysConfigList = sysConfigService.findSysConfigByGroup(group); return ResultBean.success("操作成功").setCode(ResourceEnumUtil.MESSAGE.SUCCESS.getCode()).setResultList(sysConfigList); - }catch(ImppBusiException busExcep){ + } catch (ImppBusiException busExcep) { + return ResultBean.fail(busExcep); + } catch (Exception e) { + return ImppExceptionBuilder.newInstance().buildExceptionResult(e); + } + } + + /** + * 查询短信配置 + **/ + @GetMapping("/find-sms") + @ApiOperation(value = "查询短信配置") + public ResultBean findSmsConfig() { + try { + SmsConfig smsConfig = new SmsConfig(); + smsConfig.setSmsSwitch(getConfigIntValByCode(CONFIG_SMS_SWITCH)); + smsConfig.setSmsSupplier(getConfigIntValByCode(CONFIG_SMS_SUPPLIER)); + smsConfig.setSmsAccessKeyId(getConfigStrValByCode(CONFIG_SMS_ACCESS_KEY_ID)); + smsConfig.setSmsSecret(getConfigStrValByCode(CONFIG_SMS_SECRET)); + smsConfig.setSmsEndpoint(getConfigStrValByCode(CONFIG_SMS_ENDPOINT)); + smsConfig.setSmsRegionId(getConfigStrValByCode(CONFIG_SMS_REGION_ID)); + + return ResultBean.success("操作成功") + .setCode(ResourceEnumUtil.MESSAGE.SUCCESS.getCode()) + .setResultObject(smsConfig); + } catch (ImppBusiException busExcep) { return ResultBean.fail(busExcep); - }catch(Exception e){ + } catch (Exception e) { return ImppExceptionBuilder.newInstance().buildExceptionResult(e); } } + + /** + * 查询短信配置 + **/ + @GetMapping("/save-sms") + @ApiOperation(value = "查询短信配置") + public ResultBean saveSmsConfig(@RequestBody SmsConfig smsConfig) { + try { + ValidatorBean.beginValid(smsConfig) + .notNull("smsSwitch", smsConfig.getSmsSwitch()) + .notNull("smsSupplier", smsConfig.getSmsSupplier()) + .notNull("smsAccessKeyId", smsConfig.getSmsAccessKeyId()) + .notNull("smsSecret", smsConfig.getSmsSecret()) + .notNull("smsEndpoint", smsConfig.getSmsEndpoint()) + .notNull("smsRegionId", smsConfig.getSmsRegionId()); + + sysConfigService.updateSysConfigByCode(CONFIG_SMS_SWITCH, smsConfig.getSmsSwitch().toString()); + sysConfigService.updateSysConfigByCode(CONFIG_SMS_SUPPLIER, smsConfig.getSmsSupplier().toString()); + sysConfigService.updateSysConfigByCode(CONFIG_SMS_ACCESS_KEY_ID, smsConfig.getSmsAccessKeyId()); + sysConfigService.updateSysConfigByCode(CONFIG_SMS_SECRET, smsConfig.getSmsSecret()); + sysConfigService.updateSysConfigByCode(CONFIG_SMS_ENDPOINT, smsConfig.getSmsEndpoint()); + sysConfigService.updateSysConfigByCode(CONFIG_SMS_REGION_ID, smsConfig.getSmsRegionId()); + + systemInitService.putAndLoadSysConfig(); + return ResultBean.success("操作成功").setCode(ResourceEnumUtil.MESSAGE.SUCCESS.getCode()); + } catch (ImppBusiException busExcep) { + return ResultBean.fail(busExcep); + } catch (Exception e) { + return ImppExceptionBuilder.newInstance().buildExceptionResult(e); + } + } + + /** + * 根据代码查询字符串类型配置值 + * + * @param code 配置代码 + * @return 查询结果 + */ + public String getConfigStrValByCode(String code) { + SysConfig sysConfig = sysConfigService.getSysConfigByCode(code); + return sysConfig != null ? sysConfig.getConfigValue() : null; + } + + /** + * 根据代码查询整类配置值 + * + * @param code 配置代码 + * @return 查询结果 + */ + public int getConfigIntValByCode(String code) { + SysConfig sysConfig = sysConfigService.getSysConfigByCode(code); + return sysConfig != null ? Integer.parseInt(sysConfig.getConfigValue()) : -1; + } } diff --git a/modules/i3plus-core-apiservice/src/main/java/cn/estsh/i3plus/core/apiservice/controller/busi/SysEnumController.java b/modules/i3plus-core-apiservice/src/main/java/cn/estsh/i3plus/core/apiservice/controller/busi/SysEnumController.java index d4b8127..1fa2d76 100644 --- a/modules/i3plus-core-apiservice/src/main/java/cn/estsh/i3plus/core/apiservice/controller/busi/SysEnumController.java +++ b/modules/i3plus-core-apiservice/src/main/java/cn/estsh/i3plus/core/apiservice/controller/busi/SysEnumController.java @@ -392,4 +392,52 @@ public class SysEnumController extends CoreBaseController { return new ResultBean(true, "操作成功", LocaleUtils.getEnumLocaleResValuesToList(CommonEnumUtil.USER_LOGIN_STATUS.values())); } + + /** + * 短信供应商 + * + * @return 处理结果 + */ + @GetMapping("/sms-supplier") + @ApiOperation(value = "用户登录状态", notes = "用户登录状态") + public ResultBean getSmsSupplier() { + return new ResultBean(true, "操作成功", + LocaleUtils.getEnumLocaleResValuesToList(ImppEnumUtil.SMS_SUPPLIER.values())); + } + + /** + * 模板状态 + * + * @return 处理结果 + */ + @GetMapping("/sms-template-status") + @ApiOperation(value = "用户登录状态", notes = "用户登录状态") + public ResultBean getSmsTemplateStatus() { + return new ResultBean(true, "操作成功", + LocaleUtils.getEnumLocaleResValuesToList(ImppEnumUtil.SMS_TEMPLATE_STATUS.values())); + } + + /** + * 模板类型 + * + * @return 处理结果 + */ + @GetMapping("/sms-template-type") + @ApiOperation(value = "用户登录状态", notes = "用户登录状态") + public ResultBean getSmsTemplateType() { + return new ResultBean(true, "操作成功", + LocaleUtils.getEnumLocaleResValuesToList(ImppEnumUtil.SMS_TEMPLATE_TYPE.values())); + } + + /** + * 短信发送状态 + * + * @return 处理结果 + */ + @GetMapping("/sms-send-status") + @ApiOperation(value = "用户登录状态", notes = "用户登录状态") + public ResultBean getSmsSendStatus() { + return new ResultBean(true, "操作成功", + LocaleUtils.getEnumLocaleResValuesToList(ImppEnumUtil.SMS_SEND_STATUS.values())); + } } diff --git a/modules/i3plus-core-apiservice/src/main/java/cn/estsh/i3plus/core/apiservice/controller/busi/SysLocaleResourceController.java b/modules/i3plus-core-apiservice/src/main/java/cn/estsh/i3plus/core/apiservice/controller/busi/SysLocaleResourceController.java index bd27b3c..89b9246 100644 --- a/modules/i3plus-core-apiservice/src/main/java/cn/estsh/i3plus/core/apiservice/controller/busi/SysLocaleResourceController.java +++ b/modules/i3plus-core-apiservice/src/main/java/cn/estsh/i3plus/core/apiservice/controller/busi/SysLocaleResourceController.java @@ -415,7 +415,7 @@ public class SysLocaleResourceController extends CoreBaseController { public ResultBean incrementImportSysLocaleResource(@RequestParam("file") MultipartFile file){ try { // 重新加载资源 - systemInitService.putAndLoadSysLocaleLanguage(); +// systemInitService.putAndLoadSysLocaleLanguage(); Long startTime = System.currentTimeMillis(); // 提取Excel数据 @@ -427,15 +427,27 @@ public class SysLocaleResourceController extends CoreBaseController { long excelToolExecuteTime = System.currentTimeMillis(); LOGGER.info("增量导入 数据量 {}, ExcelTool耗时 {}", sysLocaleResourceList.size(), excelToolExecuteTime - startTime); - // 数据去重并初始化 - // 初始化数据,资源去重 Map itemMap = new HashMap<>(); String resourceKey; String userName = AuthUtil.getSessionUser().getUserName(); + List tempList; + SysLocaleResource temp; for (SysLocaleResource localeResource : sysLocaleResourceList) { + tempList = sysLocaleResourceService.findSysLocaleResourceByResKey(localeResource.getResourceKey()); + if (!tempList.isEmpty()) { + temp = tempList.get(0); + localeResource.setResourceType(temp.getResourceType()); + localeResource.setSoftType(temp.getSoftType()); + } + if (localeResource.getResourceType() == null + && localeResource.getResourceKey().indexOf(CommonConstWords.RESOURCE_PREFIX_MENU) == 0) { + localeResource.setResourceType(CommonEnumUtil.SYS_LOCALE_RESOURCE_TYPE.MENU.getValue()); + } + // 系统功能key添加指定前缀,避免与其他资源重复 - if (localeResource.getResourceType().equals(CommonEnumUtil.SYS_LOCALE_RESOURCE_TYPE.MENU.getValue()) + if (localeResource.getResourceType() != null + && localeResource.getResourceType().equals(CommonEnumUtil.SYS_LOCALE_RESOURCE_TYPE.MENU.getValue()) && localeResource.getResourceKey().indexOf(CommonConstWords.RESOURCE_PREFIX_MENU) != 0) { localeResource.setResourceKey(CommonConstWords.RESOURCE_PREFIX_MENU+localeResource.getResourceKey()); } @@ -457,15 +469,12 @@ public class SysLocaleResourceController extends CoreBaseController { // 分批导入 int size = 1000; for (List resourceList : ListUtils.partition(importDataList, size)) { - new Thread(){ - @Override - public void run() { - super.run(); - long startTime = System.currentTimeMillis(); - sysLocaleResourceService.saveSysLocaleResource(resourceList); - LOGGER.info("增量导入完毕, 导入耗时{}",System.currentTimeMillis() - startTime); - } - }.start(); + new Thread(() -> { + long startTime1 = System.currentTimeMillis(); + sysLocaleResourceService.saveSysLocaleResource(resourceList); + LOGGER.info("{}增量导入完毕, 导入耗时{}", Thread.currentThread().getName(), + System.currentTimeMillis() - startTime1); + }).start(); } return ResultBean.success("数据导入中...").setCode(ResourceEnumUtil.MESSAGE.SUCCESS.getCode()); diff --git a/modules/i3plus-core-apiservice/src/main/java/cn/estsh/i3plus/core/apiservice/controller/busi/SysSmsSendRecordController.java b/modules/i3plus-core-apiservice/src/main/java/cn/estsh/i3plus/core/apiservice/controller/busi/SysSmsSendRecordController.java new file mode 100644 index 0000000..a4db8e5 --- /dev/null +++ b/modules/i3plus-core-apiservice/src/main/java/cn/estsh/i3plus/core/apiservice/controller/busi/SysSmsSendRecordController.java @@ -0,0 +1,228 @@ +package cn.estsh.i3plus.core.apiservice.controller.busi; + +import cn.estsh.i3plus.core.api.iservice.busi.ISysSmsSendRecordService; +import cn.estsh.i3plus.core.api.iservice.busi.ISysSmsSignService; +import cn.estsh.i3plus.core.api.iservice.busi.ISysSmsTemplateService; +import cn.estsh.i3plus.platform.common.exception.ImppExceptionEnum; +import cn.estsh.i3plus.platform.common.tool.JsonUtilTool; +import cn.estsh.i3plus.platform.common.tool.TimeTool; +import cn.estsh.i3plus.platform.common.util.CommonConstWords; +import cn.estsh.i3plus.platform.common.util.PlatformConstWords; +import cn.estsh.i3plus.pojo.base.enumutil.CommonEnumUtil; +import cn.estsh.i3plus.pojo.base.enumutil.ImppEnumUtil; +import cn.estsh.i3plus.pojo.model.common.ImppSmsContent; +import cn.estsh.i3plus.pojo.platform.bean.SysSmsSendRecord; +import cn.estsh.i3plus.pojo.platform.bean.SysSmsSign; +import cn.estsh.i3plus.pojo.platform.bean.SysSmsTemplate; +import cn.estsh.i3plus.sdk.sms.base.SmsUtilFactory; +import cn.estsh.i3plus.sdk.sms.base.pojo.SmsContent; +import cn.estsh.i3plus.sdk.sms.base.pojo.SmsResult; +import cn.estsh.impp.framework.base.controller.CrudBaseController; +import cn.estsh.impp.framework.boot.exception.ImppBusiException; +import cn.estsh.impp.framework.boot.exception.ImppExceptionBuilder; +import cn.estsh.impp.framework.boot.util.ImppRedis; +import cn.estsh.impp.framework.boot.util.RedisCacheTool; +import cn.estsh.impp.framework.boot.util.ResultBean; +import cn.estsh.impp.framework.boot.util.ValidatorBean; +import io.swagger.annotations.Api; +import io.swagger.annotations.ApiOperation; +import org.apache.commons.lang3.exception.ExceptionUtils; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; +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; + +import javax.annotation.Resource; +import java.util.HashMap; +import java.util.Map; +import java.util.Set; +import java.util.concurrent.TimeUnit; + +import static cn.estsh.i3plus.platform.common.util.CommonConstWords.CONFIG_SMS_SWITCH; + +/** + * @Description : 短信发送记录 + * @Reference : + * @Author : yunhao + * @CreateDate : 2020-12-14 20:25 + * @Modify: + **/ +@RestController +@Api(tags = "短信发送记录") +@RequestMapping(PlatformConstWords.BASE_URL + "/sys-sms-send-record") +public class SysSmsSendRecordController extends CrudBaseController { + + private static final Logger LOGGER = LoggerFactory.getLogger(SysSmsSendRecordController.class); + + @Autowired + private ISysSmsSignService sysSmsSignService; + + @Autowired + private ISysSmsSendRecordService sysSmsSendRecordService; + + @Autowired + private ISysSmsTemplateService sysSmsTemplateService; + + @Resource(name = CommonConstWords.IMPP_REDIS_RES) + private ImppRedis resRedis; + + @PostMapping("/send") + @ApiOperation("发送短信") + public ResultBean send(@RequestBody ImppSmsContent imppSmsContent) { + try { + if (!RedisCacheTool.getSysConfigBooleanVal(CONFIG_SMS_SWITCH)) { + throw ImppExceptionBuilder.newInstance() + .setSystemID(CommonEnumUtil.SOFT_TYPE.CORE.getCode()) + .setErrorCode(ImppExceptionEnum.BUSINESS_EXCEPTION.getCode()) + .setErrorDetail("短信开关未启用") + .setErrorSolution("在系统配置中启用短信通知") + .build(); + } + ValidatorBean.beginValid(imppSmsContent) + .notNull("receivePhoneNumber",imppSmsContent.getReceivePhoneNumber()) + .notNull("smsSignCode",imppSmsContent.getSmsSignCode()) + .notNull("templateCode",imppSmsContent.getTemplateCode()); + + SysSmsSign sysSmsSign = sysSmsSignService.getSysSmsSignByCode(imppSmsContent.getSmsSignCode()); + ValidatorBean.checkNotNull(sysSmsSign, "短信签名不存在!"); + SysSmsTemplate smsTemplate = sysSmsTemplateService.getSysSmsTemplateByCode(imppSmsContent.getTemplateCode()); + ValidatorBean.checkNotNull(smsTemplate, "短信模板不存在!"); + + // 发送短信内容 + SmsContent smsContent = new SmsContent(); + smsContent.setSmsPhoneNumber(imppSmsContent.getReceivePhoneNumber()); + smsContent.setSmsTemplateCode(smsTemplate.getSupplierTemplateCode()); + smsContent.setSmsSignName(sysSmsSign.getSignName()); + smsContent.setSmsParam(imppSmsContent.getParamMap()); + + SmsResult smsResult = SmsUtilFactory.getSmsUtil().sendSms(smsContent); + + // 持久化发送记录 + SysSmsSendRecord sysSmsSendRecord = new SysSmsSendRecord(); + sysSmsSendRecord.setReceivePhoneNumber(imppSmsContent.getReceivePhoneNumber()); + sysSmsSendRecord.setTemplateCode(smsTemplate.getTemplateCode()); + sysSmsSendRecord.setSmsSignCode(sysSmsSign.getSignCode()); + sysSmsSendRecord.setSmsSign(sysSmsSign.getSignName()); + sysSmsSendRecord.setSmsParam(JsonUtilTool.encode(imppSmsContent.getParamMap())); + sysSmsSendRecord.setSmsSendStatus(ImppEnumUtil.SMS_SEND_STATUS.WAIT_RECEIPT.getValue()); + sysSmsSendRecord.setSendDateTime(TimeTool.getNowTime(true)); + sysSmsSendRecord.setBizId(smsResult.getResultData().getBizId()); + + sysSmsSendRecordService.insert(sysSmsSendRecord); + + if (!smsResult.isSuccess()) { + sysSmsSendRecord.setSendErrMsg(smsResult.getErrMsg()); + sysSmsSendRecord.setSmsSendStatus(ImppEnumUtil.SMS_SEND_STATUS.WAIT_RECEIPT.getValue()); + sysSmsSendRecordService.update(sysSmsSendRecord); + return ResultBean.fail().setErrorMsg(smsResult.getMsg()).setResultObject(smsResult); + } + + // 推送redis延时队列,处理持久化发送记录 + resRedis.pushDelayQueue("SMS_STATUS_SYNC", JsonUtilTool.encode(sysSmsSendRecord),10L); + return ResultBean.success().setResultObject(smsResult); + } catch (ImppBusiException busExcep) { + return ResultBean.fail(busExcep); + } catch (Exception e) { + return ImppExceptionBuilder.newInstance().buildExceptionResult(e); + } + } + + /** + * 同步 + */ + public static class SyncSmsInfo implements Runnable { + + private ISysSmsSendRecordService sysSmsSendRecordService; + private ImppRedis redisRes; + + public SyncSmsInfo() { + } + + public SyncSmsInfo(ISysSmsSendRecordService sysSmsSendRecordService, ImppRedis redisRes) { + this.sysSmsSendRecordService = sysSmsSendRecordService; + this.redisRes = redisRes; + } + + @Override + public void run() { + while (true) { + try { + Set dataSet = + redisRes.pullAndRemoveDelayQueueData("SMS_STATUS_SYNC", System.currentTimeMillis()); + if (dataSet.isEmpty()) { + TimeUnit.MINUTES.sleep(3); + continue; + } + + LOGGER.info("【SMS】 短信同步触发"); + for (Object obj : dataSet) { + boolean isRetry = true; + SysSmsSendRecord smsSendRecord = null; + try { + smsSendRecord = JsonUtilTool.decode(String.valueOf(obj), SysSmsSendRecord.class); + SmsContent smsContent = new SmsContent(); + smsContent.setSmsPhoneNumber(smsSendRecord.getReceivePhoneNumber()); + smsContent.setSendDate(smsSendRecord.getSendDateTime()); + smsContent.setBizId(smsSendRecord.getBizId()); + + // 查询并同步供应商的状态信息 + SmsResult smsResult = + SmsUtilFactory.getSmsUtil().getSendSmsDetailByCondition(smsContent); + smsSendRecord.setSendErrMsg(smsResult.getErrMsg()); + if (smsResult.isSuccess() && smsResult.getResultData() != null) { + smsContent = smsResult.getResultData(); + smsSendRecord.setSmsSendStatus(smsContent.getSmsStatus()); + smsSendRecord.setReceiveDateTime(smsContent.getReceiveDate()); + smsSendRecord.setSmsContent(smsContent.getSmsContent()); + } + + if (smsSendRecord.getSmsSendStatus() != ImppEnumUtil.SMS_SEND_STATUS.WAIT_RECEIPT.getValue()) { + isRetry = false; + } + } catch (Exception e) { + LOGGER.error("【SMS】 短信状态同步异常", e); + if (smsSendRecord != null) { + smsSendRecord.setSendErrMsg(ExceptionUtils.getStackTrace(e)); + } + } + + if (smsSendRecord != null) { + sysSmsSendRecordService.update(smsSendRecord); + } + + if (isRetry) { + redisRes.pushDelayQueue("SMS_STATUS_SYNC", JsonUtilTool.encode(smsSendRecord), 30L); + } + } + } catch (Exception e) { + LOGGER.error("【SMS】 短信状态同步异常", e); + } finally { + try { + TimeUnit.SECONDS.sleep(5); + } catch (InterruptedException ignored) { + } + } + } + } + } + + public static void main(String[] args) { + Map paramMap = new HashMap<>(); + paramMap.put("center","莘松线"); + paramMap.put("cell","OP-01"); + paramMap.put("name","张三"); + paramMap.put("acName","一级异常"); + + ImppSmsContent smsContent = new ImppSmsContent(); + smsContent.setSmsSignCode("ESTSH"); + smsContent.setTemplateCode("TEST"); + smsContent.setReceivePhoneNumber("18917078316"); + smsContent.setParamMap(paramMap); + + System.out.println(JsonUtilTool.encode(smsContent)); + } +} + diff --git a/modules/i3plus-core-apiservice/src/main/java/cn/estsh/i3plus/core/apiservice/controller/busi/SysSmsSignController.java b/modules/i3plus-core-apiservice/src/main/java/cn/estsh/i3plus/core/apiservice/controller/busi/SysSmsSignController.java new file mode 100644 index 0000000..24c93ff --- /dev/null +++ b/modules/i3plus-core-apiservice/src/main/java/cn/estsh/i3plus/core/apiservice/controller/busi/SysSmsSignController.java @@ -0,0 +1,36 @@ +package cn.estsh.i3plus.core.apiservice.controller.busi; + +import cn.estsh.i3plus.platform.common.util.PlatformConstWords; +import cn.estsh.i3plus.pojo.platform.bean.SysSmsSign; +import cn.estsh.impp.framework.base.controller.CrudBaseController; +import cn.estsh.impp.framework.boot.util.ValidatorBean; +import io.swagger.annotations.Api; +import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.RestController; + +/** + * @Description : 短信签名 + * @Reference : + * @Author : yunhao + * @CreateDate : 2020-12-13 16:08 + * @Modify: + **/ +@RestController +@Api(tags = "短信签名") +@RequestMapping(PlatformConstWords.BASE_URL + "/sys-sms-sign") +public class SysSmsSignController extends CrudBaseController { + + /** + * 新增数据校验 + * + * @param bean 待新增数据 + * @return 待新增数据 + */ + @Override + public SysSmsSign validatorInsertBean(SysSmsSign bean) throws Exception { + ValidatorBean.beginValid(bean) + .notNull("signCode", bean.getSignCode()) + .notNull("signName", bean.getSignName()); + return bean; + } +} diff --git a/modules/i3plus-core-apiservice/src/main/java/cn/estsh/i3plus/core/apiservice/controller/busi/SysSmsTemplateController.java b/modules/i3plus-core-apiservice/src/main/java/cn/estsh/i3plus/core/apiservice/controller/busi/SysSmsTemplateController.java new file mode 100644 index 0000000..bc77693 --- /dev/null +++ b/modules/i3plus-core-apiservice/src/main/java/cn/estsh/i3plus/core/apiservice/controller/busi/SysSmsTemplateController.java @@ -0,0 +1,239 @@ +package cn.estsh.i3plus.core.apiservice.controller.busi; + +import cn.estsh.i3plus.core.api.iservice.busi.ISysSmsTemplateService; +import cn.estsh.i3plus.platform.common.exception.ImppExceptionEnum; +import cn.estsh.i3plus.platform.common.util.PlatformConstWords; +import cn.estsh.i3plus.pojo.base.enumutil.CommonEnumUtil; +import cn.estsh.i3plus.pojo.base.enumutil.ImppEnumUtil; +import cn.estsh.i3plus.pojo.base.enumutil.ResourceEnumUtil; +import cn.estsh.i3plus.pojo.platform.bean.SysSmsTemplate; +import cn.estsh.i3plus.sdk.sms.base.SmsUtilFactory; +import cn.estsh.i3plus.sdk.sms.base.pojo.SmsResult; +import cn.estsh.impp.framework.base.controller.BaseController; +import cn.estsh.impp.framework.base.controller.CrudBaseController; +import cn.estsh.impp.framework.boot.exception.ImppBusiException; +import cn.estsh.impp.framework.boot.exception.ImppExceptionBuilder; +import cn.estsh.impp.framework.boot.util.ResultBean; +import cn.estsh.impp.framework.boot.util.ValidatorBean; +import io.swagger.annotations.Api; +import io.swagger.annotations.ApiOperation; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.web.bind.annotation.PostMapping; +import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.RestController; + +/** + * @Description : 短信模板 + * @Reference : + * @Author : yunhao + * @CreateDate : 2020-12-14 20:21 + * @Modify: + **/ +@RestController +@Api(tags = "短信模板") +@RequestMapping(PlatformConstWords.BASE_URL + "/sys-sms-template") +public class SysSmsTemplateController extends CrudBaseController { + + private static final Logger LOGGER = LoggerFactory.getLogger(BaseController.class); + + @Autowired + private ISysSmsTemplateService sysSmsTemplateService; + + /** + * 新增模板信息 + * + * @param bean 待新增数据 + * @return 操作结果 + */ + @Override + public ResultBean insert(SysSmsTemplate bean) { + try { + ValidatorBean.beginValid(bean) + .notNull("templateCode", bean.getTemplateCode()) + .notNull("templateType", bean.getTemplateType()) + .notNull("templateName", bean.getTemplateName()) + .notNull("templateContent", bean.getTemplateContent()); + + bean.setTemplateStatus(ImppEnumUtil.SMS_TEMPLATE_STATUS.NOTICE_SMS.getValue()); + + // 唯一校验 + if (!sysSmsTemplateService.checkSysSmsTemplateOnly(bean)) { + throw ImppExceptionBuilder.newInstance() + .setSystemID(CommonEnumUtil.SOFT_TYPE.CORE.getCode()) + .setErrorCode(ImppExceptionEnum.BUSINESS_EXCEPTION.getCode()) + .setErrorDetail("模板代码已存在") + .setErrorSolution("请重新操作") + .build(); + } + + bean = getCrudService().insert(bean); + + SmsResult smsResult = SmsUtilFactory.getSmsTemplateUtil().insertSmsTemplate(bean); + if (!smsResult.isSuccess()) { + LOGGER.error("【SMS】 短信模板保存失败!{}", smsResult); + return ResultBean.fail(smsResult.getErrMsg()).setResultObject(smsResult); + } else { + getCrudService().update(bean); + } + + return ResultBean.success("操作成功") + .setResultObject(bean) + .setCode(ResourceEnumUtil.MESSAGE.SUCCESS.getCode()); + } catch (ImppBusiException busExcep) { + return ResultBean.fail(busExcep); + } catch (Exception e) { + return ImppExceptionBuilder.newInstance().buildExceptionResult(e); + } + } + + /** + * 修改模板信息 + * + * @param bean 待更新数据 + * @return 操作结果 + */ + @Override + public ResultBean update(SysSmsTemplate bean) { + try { + ValidatorBean.beginValid(bean) + .notNull("id", bean.getId()) + .notNull("templateCode", bean.getTemplateCode()) + .notNull("templateType", bean.getTemplateType()) + .notNull("templateName", bean.getTemplateName()) + .notNull("templateContent", bean.getTemplateContent()); + + // 唯一校验 + if (!sysSmsTemplateService.checkSysSmsTemplateOnly(bean)) { + throw ImppExceptionBuilder.newInstance() + .setSystemID(CommonEnumUtil.SOFT_TYPE.CORE.getCode()) + .setErrorCode(ImppExceptionEnum.BUSINESS_EXCEPTION.getCode()) + .setErrorDetail("模板代码已存在") + .setErrorSolution("请重新操作") + .build(); + } + + bean = getCrudService().update(bean); + + SmsResult smsResult = SmsUtilFactory.getSmsTemplateUtil().updateSmsTemplate(bean); + if (!smsResult.isSuccess()) { + LOGGER.error("【SMS】 短信模板保存失败!{}", smsResult); + return ResultBean.fail(smsResult.getErrMsg()).setResultObject(smsResult); + } + + return ResultBean.success("操作成功") + .setResultObject(bean) + .setCode(ResourceEnumUtil.MESSAGE.SUCCESS.getCode()); + } catch (ImppBusiException busExcep) { + return ResultBean.fail(busExcep); + } catch (Exception e) { + return ImppExceptionBuilder.newInstance().buildExceptionResult(e); + } + } + + /** + * 根据id删除短信模板 + * + * @param id 操作id + * @return 操作结果 + */ + @Override + public ResultBean delete(Long id) { + try { + ValidatorBean.checkNotNull(id, "请选需要删除短信模板!"); + SysSmsTemplate smsTemplate = getCrudService().get(id); + ValidatorBean.checkNotNull(smsTemplate, "短信模板不存在!"); + + // 调用供应商api + SmsResult smsResult = SmsUtilFactory.getSmsTemplateUtil() + .deleteSmsTemplateByCode(smsTemplate.getSupplierTemplateCode()); + if (!smsResult.isSuccess()) { + LOGGER.error("【SMS】 短信模板删除失败!{}", smsResult); + return ResultBean.fail(smsResult.getErrMsg()).setResultObject(smsResult); + } + + getCrudService().delete(id); + + return ResultBean.success("操作成功").setCode(ResourceEnumUtil.MESSAGE.SUCCESS.getCode()); + } catch (ImppBusiException busExcep) { + return ResultBean.fail(busExcep); + } catch (Exception e) { + return ImppExceptionBuilder.newInstance().buildExceptionResult(e); + } + } + + @Override + public ResultBean getById(Long id) { + try { + ValidatorBean.checkNotNull(id, "请选需要查询短信模板!"); + SysSmsTemplate smsTemplate = getCrudService().get(id); + + // 调用供应商api + SmsResult smsResult = SmsUtilFactory.getSmsTemplateUtil() + .getSmsTemplateByCode(smsTemplate.getSupplierTemplateCode()); + if (!smsResult.isSuccess()) { + LOGGER.error("【SMS】 短信模板查询失败!{}", smsResult); + return ResultBean.fail(smsResult.getErrMsg()).setResultObject(smsResult); + } else if (smsResult.isSuccess() && smsResult.getResultData() != null) { + smsTemplate.setReason(smsResult.getResultData().getReason()); + } + + return ResultBean.success("操作成功") + .setResultObject(smsTemplate) + .setCode(ResourceEnumUtil.MESSAGE.SUCCESS.getCode()); + } catch (ImppBusiException busExcep) { + return ResultBean.fail(busExcep); + } catch (Exception e) { + return ImppExceptionBuilder.newInstance().buildExceptionResult(e); + } + } + + @PostMapping("/sync-supplier-template") + @ApiOperation("同步供应商模板信息") + public ResultBean syncSupplierTemplate(String supplierTemplateCode, String templateCode) { + try { + ValidatorBean.checkNotNull(supplierTemplateCode, "请输入需要同步的供应商模板代码!"); + ValidatorBean.checkNotNull(templateCode, "请输入模板代码!"); + + SysSmsTemplate smsTemplate = new SysSmsTemplate(); + smsTemplate.setTemplateCode(templateCode); + + // 唯一校验 + if (!sysSmsTemplateService.checkSysSmsTemplateOnly(smsTemplate)) { + throw ImppExceptionBuilder.newInstance() + .setSystemID(CommonEnumUtil.SOFT_TYPE.CORE.getCode()) + .setErrorCode(ImppExceptionEnum.BUSINESS_EXCEPTION.getCode()) + .setErrorDetail("模板代码已存在") + .setErrorSolution("请重新操作") + .build(); + } + + // 调用供应商api + SmsResult smsResult = SmsUtilFactory.getSmsTemplateUtil() + .getSmsTemplateByCode(supplierTemplateCode); + if (!smsResult.isSuccess()) { + LOGGER.error("【SMS】 短信模板查询失败!{}", smsResult); + return ResultBean.fail(smsResult.getErrMsg()).setResultObject(smsResult); + } else if (smsResult.isSuccess() && smsResult.getResultData() == null) { + throw ImppExceptionBuilder.newInstance() + .setSystemID(CommonEnumUtil.SOFT_TYPE.CORE.getCode()) + .setErrorCode(ImppExceptionEnum.BUSINESS_EXCEPTION.getCode()) + .setErrorDetail("模板代码已存在") + .setErrorSolution("请重新操作") + .build(); + } + smsTemplate = smsResult.getResultData(); + smsTemplate.setTemplateCode(templateCode); + sysSmsTemplateService.insert(smsTemplate); + + return ResultBean.success("操作成功") + .setResultObject(smsTemplate) + .setCode(ResourceEnumUtil.MESSAGE.SUCCESS.getCode()); + } catch (ImppBusiException busExcep) { + return ResultBean.fail(busExcep); + } catch (Exception e) { + return ImppExceptionBuilder.newInstance().buildExceptionResult(e); + } + } +} diff --git a/modules/i3plus-core-apiservice/src/main/java/cn/estsh/i3plus/core/apiservice/serviceimpl/base/SystemInitService.java b/modules/i3plus-core-apiservice/src/main/java/cn/estsh/i3plus/core/apiservice/serviceimpl/base/SystemInitService.java index c89d11d..451b679 100644 --- a/modules/i3plus-core-apiservice/src/main/java/cn/estsh/i3plus/core/apiservice/serviceimpl/base/SystemInitService.java +++ b/modules/i3plus-core-apiservice/src/main/java/cn/estsh/i3plus/core/apiservice/serviceimpl/base/SystemInitService.java @@ -2,6 +2,7 @@ package cn.estsh.i3plus.core.apiservice.serviceimpl.base; import cn.estsh.i3plus.core.api.iservice.base.ISystemInitService; import cn.estsh.i3plus.core.api.iservice.busi.*; +import cn.estsh.i3plus.core.apiservice.controller.busi.SysSmsSendRecordController; import cn.estsh.i3plus.platform.common.convert.ConvertBean; import cn.estsh.i3plus.platform.common.util.CommonConstWords; import cn.estsh.i3plus.platform.common.util.PlatformConstWords; @@ -72,6 +73,9 @@ public class SystemInitService implements ISystemInitService { @Autowired private ISysBarcodeRuleService sysBarcodeRuleService; + @Autowired + private ISysSmsSendRecordService sysSmsSendRecordService; + @Resource(name= CommonConstWords.IMPP_REDIS_RES) private ImppRedis redisRes; @@ -111,6 +115,10 @@ public class SystemInitService implements ISystemInitService { LOGGER.info("加载 条码规则"); reloadBarcodeRule(); LOGGER.info("加载 条码规则 信息完成"); + + LOGGER.info("创建 短信同步线程"); + createSmsSyncThread(); + LOGGER.info("创建 短信同步线程 完成"); }catch (Exception e){ e.printStackTrace(); } @@ -446,4 +454,10 @@ public class SystemInitService implements ISystemInitService { } } } + + @Override + public void createSmsSyncThread() { + Thread syncSmsThread = new Thread(new SysSmsSendRecordController.SyncSmsInfo(sysSmsSendRecordService,redisRes)); + syncSmsThread.start(); + } } diff --git a/modules/i3plus-core-apiservice/src/main/java/cn/estsh/i3plus/core/apiservice/serviceimpl/busi/SysConfigService.java b/modules/i3plus-core-apiservice/src/main/java/cn/estsh/i3plus/core/apiservice/serviceimpl/busi/SysConfigService.java index 25ce846..8b2dcf8 100644 --- a/modules/i3plus-core-apiservice/src/main/java/cn/estsh/i3plus/core/apiservice/serviceimpl/busi/SysConfigService.java +++ b/modules/i3plus-core-apiservice/src/main/java/cn/estsh/i3plus/core/apiservice/serviceimpl/busi/SysConfigService.java @@ -121,7 +121,7 @@ public class SysConfigService implements ISysConfigService { @Override @ApiOperation(value = "根据系统参数组来查找系统参数") - public List findSysConfigByGroup(Integer group) { + public List findSysConfigByGroup(Integer group) { return SysConfigRDao.findByProperty("configGroup",group); } diff --git a/modules/i3plus-core-apiservice/src/main/java/cn/estsh/i3plus/core/apiservice/serviceimpl/busi/SysSmsSendRecordService.java b/modules/i3plus-core-apiservice/src/main/java/cn/estsh/i3plus/core/apiservice/serviceimpl/busi/SysSmsSendRecordService.java new file mode 100644 index 0000000..48dc9bd --- /dev/null +++ b/modules/i3plus-core-apiservice/src/main/java/cn/estsh/i3plus/core/apiservice/serviceimpl/busi/SysSmsSendRecordService.java @@ -0,0 +1,24 @@ +package cn.estsh.i3plus.core.apiservice.serviceimpl.busi; + +import cn.estsh.i3plus.core.api.iservice.busi.ISysSmsSendRecordService; +import cn.estsh.i3plus.pojo.base.bean.DdlPackBean; +import cn.estsh.i3plus.pojo.platform.bean.SysSmsSendRecord; +import cn.estsh.i3plus.pojo.platform.sqlpack.CoreHqlPack; +import cn.estsh.impp.framework.base.service.CrudService; +import org.springframework.stereotype.Service; + +/** + * @Description : 短信发送记录 + * @Reference : + * @Author : yunhao + * @CreateDate : 2020-12-14 20:17 + * @Modify: + **/ +@Service +public class SysSmsSendRecordService extends CrudService implements ISysSmsSendRecordService { + + @Override + public DdlPackBean getFindPagerPackBean(SysSmsSendRecord bean) { + return CoreHqlPack.packHqlFindSysSmsSendRecord(bean); + } +} diff --git a/modules/i3plus-core-apiservice/src/main/java/cn/estsh/i3plus/core/apiservice/serviceimpl/busi/SysSmsSignService.java b/modules/i3plus-core-apiservice/src/main/java/cn/estsh/i3plus/core/apiservice/serviceimpl/busi/SysSmsSignService.java new file mode 100644 index 0000000..2cef019 --- /dev/null +++ b/modules/i3plus-core-apiservice/src/main/java/cn/estsh/i3plus/core/apiservice/serviceimpl/busi/SysSmsSignService.java @@ -0,0 +1,55 @@ +package cn.estsh.i3plus.core.apiservice.serviceimpl.busi; + +import cn.estsh.i3plus.core.api.iservice.busi.ISysSmsSignService; +import cn.estsh.i3plus.pojo.base.bean.DdlPackBean; +import cn.estsh.i3plus.pojo.base.enumutil.CommonEnumUtil; +import cn.estsh.i3plus.pojo.platform.bean.SysSmsSign; +import cn.estsh.i3plus.pojo.platform.sqlpack.CoreHqlPack; +import cn.estsh.impp.framework.base.service.CrudService; +import org.springframework.stereotype.Service; + +/** + * @Description : 短信签名 + * @Reference : + * @Author : yunhao + * @CreateDate : 2020-12-14 20:19 + * @Modify: + **/ +@Service +public class SysSmsSignService extends CrudService implements ISysSmsSignService { + + + @Override + public DdlPackBean getFindPagerPackBean(SysSmsSign bean) { + return CoreHqlPack.packHqlFindSysSmsSign(bean); + } + + /** + * 检查签名是否唯一 + * + * @param sysSmsSign 签名信息 + * @return 检查结果 + */ + @Override + public boolean checkSysSignOnly(SysSmsSign sysSmsSign) { + return baseRepository.isExitByHql(CoreHqlPack.packHqlCheckSysSmsSignOnly(sysSmsSign)); + } + + /** + * 根据代码查询短信签名 + * + * @param code 签名代码 + * @return 查询结果 + */ + @Override + public SysSmsSign getSysSmsSignByCode(String code) { + return baseRepository.getByProperty( + new String[]{"isValid", "isDeleted", "signCode"}, + new Object[]{ + CommonEnumUtil.TRUE_OR_FALSE.TRUE.getValue(), + CommonEnumUtil.TRUE_OR_FALSE.FALSE.getValue(), + code + } + ); + } +} diff --git a/modules/i3plus-core-apiservice/src/main/java/cn/estsh/i3plus/core/apiservice/serviceimpl/busi/SysSmsTemplateService.java b/modules/i3plus-core-apiservice/src/main/java/cn/estsh/i3plus/core/apiservice/serviceimpl/busi/SysSmsTemplateService.java new file mode 100644 index 0000000..5672f9e --- /dev/null +++ b/modules/i3plus-core-apiservice/src/main/java/cn/estsh/i3plus/core/apiservice/serviceimpl/busi/SysSmsTemplateService.java @@ -0,0 +1,54 @@ +package cn.estsh.i3plus.core.apiservice.serviceimpl.busi; + +import cn.estsh.i3plus.core.api.iservice.busi.ISysSmsTemplateService; +import cn.estsh.i3plus.pojo.base.bean.DdlPackBean; +import cn.estsh.i3plus.pojo.base.enumutil.CommonEnumUtil; +import cn.estsh.i3plus.pojo.platform.bean.SysSmsTemplate; +import cn.estsh.i3plus.pojo.platform.sqlpack.CoreHqlPack; +import cn.estsh.impp.framework.base.service.CrudService; +import org.springframework.stereotype.Service; + +/** + * @Description : 短信模板 + * @Reference : + * @Author : yunhao + * @CreateDate : 2020-12-14 20:20 + * @Modify: + **/ +@Service +public class SysSmsTemplateService extends CrudService implements ISysSmsTemplateService { + + @Override + public DdlPackBean getFindPagerPackBean(SysSmsTemplate bean) { + return CoreHqlPack.packHqlFindSysSmsTemplate(bean); + } + + /** + * 检查短信模板是否唯一 + * + * @param smsTemplate 待检查的短信模板数据 + * @return 检查结果 + */ + @Override + public boolean checkSysSmsTemplateOnly(SysSmsTemplate smsTemplate) { + return !baseRepository.isExitByHql(CoreHqlPack.packHqlCheckSysSmsTemplateOnly(smsTemplate)); + } + + /** + * 根据code短信模板 + * + * @param code 模板代码 + * @return 查询结果 + */ + @Override + public SysSmsTemplate getSysSmsTemplateByCode(String code) { + return baseRepository.getByProperty( + new String[]{"isValid", "isDeleted", "templateCode"}, + new Object[]{ + CommonEnumUtil.TRUE_OR_FALSE.TRUE.getValue(), + CommonEnumUtil.TRUE_OR_FALSE.FALSE.getValue(), + code + } + ); + } +} diff --git a/modules/i3plus-core-apiservice/src/main/java/cn/estsh/i3plus/core/apiservice/util/MailUtil.java b/modules/i3plus-core-apiservice/src/main/java/cn/estsh/i3plus/core/apiservice/util/MailUtil.java index 54b8118..2a1e5ec 100644 --- a/modules/i3plus-core-apiservice/src/main/java/cn/estsh/i3plus/core/apiservice/util/MailUtil.java +++ b/modules/i3plus-core-apiservice/src/main/java/cn/estsh/i3plus/core/apiservice/util/MailUtil.java @@ -75,7 +75,7 @@ public class MailUtil { this.attachmentList.clear(); return this; } catch (Exception e) { - LOGGER.error("邮箱配置初始化失败!", e.getMessage()); + LOGGER.error("邮箱配置初始化失败!", e); return new MailUtil(); } @@ -100,7 +100,7 @@ public class MailUtil { return this; } catch (Exception e) { - LOGGER.error("邮箱配置初始化失败!", e.getMessage()); + LOGGER.error("邮箱配置初始化失败!", e); return new MailUtil(); } } diff --git a/pom.xml b/pom.xml index 36a3231..7116750 100644 --- a/pom.xml +++ b/pom.xml @@ -134,6 +134,12 @@ + i3plus.sdk + i3plus-sdk-sms + ${project.version} + + + i3plus.platform i3plus-platform-common ${project.version}