mirror of
http://git.pig4cloud.com/pig/pigx.git
synced 2026-11-08 12:39:05 +08:00
feat(personal): 修改手机号,新增短信验证码校验功能
- 在UserDTO中增加验证码字段用于手机号修改校验 - 修改用户信息时增加短信验证码校验逻辑 - 新增验证码错误提示信息到i18n配置 - 扩展SysMessageService支持区分已注册/未注册手机号验证
This commit is contained in:
1 parent
45146adec1
commit
15f28dcd35
7 files changed
+544
-490
No files matched your search
+86
-81
@@ -8,106 +8,111 @@ package com.pig4cloud.pigx.common.core.exception;
|
||||
*/
|
||||
public interface ErrorCodes {
|
||||
|
||||
/**
|
||||
* 系统编码错误
|
||||
*/
|
||||
String SYS_PARAM_CONFIG_ERROR = "sys.param.config.error";
|
||||
/**
|
||||
* 系统编码错误
|
||||
*/
|
||||
String SYS_PARAM_CONFIG_ERROR = "sys.param.config.error";
|
||||
|
||||
/**
|
||||
* 系统内置参数不能删除
|
||||
*/
|
||||
String SYS_PARAM_DELETE_SYSTEM = "sys.param.delete.system";
|
||||
/**
|
||||
* 系统内置参数不能删除
|
||||
*/
|
||||
String SYS_PARAM_DELETE_SYSTEM = "sys.param.delete.system";
|
||||
|
||||
/**
|
||||
* 用户已存在
|
||||
*/
|
||||
String SYS_USER_USERNAME_EXISTING = "sys.user.username.existing";
|
||||
/**
|
||||
* 用户已存在
|
||||
*/
|
||||
String SYS_USER_USERNAME_EXISTING = "sys.user.username.existing";
|
||||
|
||||
/**
|
||||
* 用户已存在
|
||||
*/
|
||||
String SYS_USER_PHONE_EXISTING = "sys.user.phone.existing";
|
||||
/**
|
||||
* 用户已存在
|
||||
*/
|
||||
String SYS_USER_PHONE_EXISTING = "sys.user.phone.existing";
|
||||
|
||||
/**
|
||||
* 用户原密码错误,修改失败
|
||||
*/
|
||||
String SYS_USER_UPDATE_PASSWORDERROR = "sys.user.update.passwordError";
|
||||
/**
|
||||
* 用户原密码错误,修改失败
|
||||
*/
|
||||
String SYS_USER_UPDATE_PASSWORDERROR = "sys.user.update.passwordError";
|
||||
|
||||
/**
|
||||
* 用户信息为空
|
||||
*/
|
||||
String SYS_USER_USERINFO_EMPTY = "sys.user.userInfo.empty";
|
||||
/**
|
||||
* 用户信息为空
|
||||
*/
|
||||
String SYS_USER_USERINFO_EMPTY = "sys.user.userInfo.empty";
|
||||
|
||||
/**
|
||||
* 获取当前用户信息失败
|
||||
*/
|
||||
String SYS_USER_QUERY_ERROR = "sys.user.query.error";
|
||||
/**
|
||||
* 获取当前用户信息失败
|
||||
*/
|
||||
String SYS_USER_QUERY_ERROR = "sys.user.query.error";
|
||||
|
||||
String SYS_USER_IMPORT_SUCCEED = "sys.user.import.succeed";
|
||||
String SYS_USER_IMPORT_SUCCEED = "sys.user.import.succeed";
|
||||
|
||||
/**
|
||||
* 部门名称不存在
|
||||
*/
|
||||
String SYS_DEPT_DEPTNAME_INEXISTENCE = "sys.dept.deptName.inexistence";
|
||||
/**
|
||||
* 部门名称不存在
|
||||
*/
|
||||
String SYS_DEPT_DEPTNAME_INEXISTENCE = "sys.dept.deptName.inexistence";
|
||||
|
||||
/**
|
||||
* 岗位名称不存在
|
||||
*/
|
||||
String SYS_POST_POSTNAME_INEXISTENCE = "sys.post.postName.inexistence";
|
||||
/**
|
||||
* 岗位名称不存在
|
||||
*/
|
||||
String SYS_POST_POSTNAME_INEXISTENCE = "sys.post.postName.inexistence";
|
||||
|
||||
/**
|
||||
* 岗位名称或编码已经存在
|
||||
*/
|
||||
String SYS_POST_NAMEORCODE_EXISTING = "sys.post.nameOrCode.existing";
|
||||
/**
|
||||
* 岗位名称或编码已经存在
|
||||
*/
|
||||
String SYS_POST_NAMEORCODE_EXISTING = "sys.post.nameOrCode.existing";
|
||||
|
||||
/**
|
||||
* 角色名称不存在
|
||||
*/
|
||||
String SYS_ROLE_ROLENAME_INEXISTENCE = "sys.role.roleName.inexistence";
|
||||
/**
|
||||
* 角色名称不存在
|
||||
*/
|
||||
String SYS_ROLE_ROLENAME_INEXISTENCE = "sys.role.roleName.inexistence";
|
||||
|
||||
/**
|
||||
* 角色名或角色编码已经存在
|
||||
*/
|
||||
String SYS_ROLE_NAMEORCODE_EXISTING = "sys.role.nameOrCode.existing";
|
||||
/**
|
||||
* 角色名或角色编码已经存在
|
||||
*/
|
||||
String SYS_ROLE_NAMEORCODE_EXISTING = "sys.role.nameOrCode.existing";
|
||||
|
||||
/**
|
||||
* 菜单存在下级节点 删除失败
|
||||
*/
|
||||
String SYS_MENU_DELETE_EXISTING = "sys.menu.delete.existing";
|
||||
/**
|
||||
* 菜单存在下级节点 删除失败
|
||||
*/
|
||||
String SYS_MENU_DELETE_EXISTING = "sys.menu.delete.existing";
|
||||
|
||||
/**
|
||||
* 系统内置字典不允许删除
|
||||
*/
|
||||
String SYS_DICT_DELETE_SYSTEM = "sys.dict.delete.system";
|
||||
/**
|
||||
* 系统内置字典不允许删除
|
||||
*/
|
||||
String SYS_DICT_DELETE_SYSTEM = "sys.dict.delete.system";
|
||||
|
||||
/**
|
||||
* 系统内置字典不能修改
|
||||
*/
|
||||
String SYS_DICT_UPDATE_SYSTEM = "sys.dict.update.system";
|
||||
/**
|
||||
* 系统内置字典不能修改
|
||||
*/
|
||||
String SYS_DICT_UPDATE_SYSTEM = "sys.dict.update.system";
|
||||
|
||||
/**
|
||||
* 验证码发送频繁
|
||||
*/
|
||||
String SYS_APP_SMS_OFTEN = "sys.app.sms.often";
|
||||
/**
|
||||
* 验证码发送频繁
|
||||
*/
|
||||
String SYS_APP_SMS_OFTEN = "sys.app.sms.often";
|
||||
|
||||
/**
|
||||
* 手机号未注册
|
||||
*/
|
||||
String SYS_APP_PHONE_UNREGISTERED = "sys.app.phone.unregistered";
|
||||
/**
|
||||
* 系统应用短信错误编码
|
||||
*/
|
||||
String SYS_APP_SMS_ERROR = "sys.app.sms.error";
|
||||
|
||||
/**
|
||||
* 企微调用接口错误
|
||||
*/
|
||||
String SYS_CONNECT_CP_DEPT_SYNC_ERROR = "sys.connect.cp.dept.sync.error";
|
||||
/**
|
||||
* 手机号未注册
|
||||
*/
|
||||
String SYS_APP_PHONE_UNREGISTERED = "sys.app.phone.unregistered";
|
||||
|
||||
/**
|
||||
* 企微调用接口错误
|
||||
*/
|
||||
String SYS_CONNECT_CP_USER_SYNC_ERROR = "sys.connect.cp.user.sync.error";
|
||||
/**
|
||||
* 企微调用接口错误
|
||||
*/
|
||||
String SYS_CONNECT_CP_DEPT_SYNC_ERROR = "sys.connect.cp.dept.sync.error";
|
||||
|
||||
/**
|
||||
* 用户信息为空
|
||||
*/
|
||||
String APP_USER_USERINFO_EMPTY = "app.user.userInfo.empty";
|
||||
/**
|
||||
* 企微调用接口错误
|
||||
*/
|
||||
String SYS_CONNECT_CP_USER_SYNC_ERROR = "sys.connect.cp.user.sync.error";
|
||||
|
||||
/**
|
||||
* 用户信息为空
|
||||
*/
|
||||
String APP_USER_USERINFO_EMPTY = "app.user.userInfo.empty";
|
||||
|
||||
}
|
||||
@@ -2,7 +2,7 @@ sys.user.update.passwordError=\u539F\u5BC6\u7801\u9519\u8BEF\uFF0C\u4FEE\u6539\u
|
||||
sys.user.query.error=\u83B7\u53D6\u5F53\u524D\u7528\u6237\u4FE1\u606F\u5931\u8D25
|
||||
sys.user.import.succeed=\u7528\u6237\u5BFC\u5165\u6210\u529F\uFF0C\u9ED8\u8BA4\u5BC6\u7801\u4E3A\u624B\u673A\u53F7
|
||||
sys.user.username.existing={0} \u7528\u6237\u540D\u5DF2\u5B58\u5728
|
||||
sys.user.phone.existing={0} \u624b\u673a\u53f7\u5df2\u5b58\u5728
|
||||
sys.user.phone.existing={0} \u624B\u673A\u53F7\u5DF2\u5B58\u5728
|
||||
sys.user.userInfo.empty={0} \u7528\u6237\u4FE1\u606F\u4E3A\u7A7A
|
||||
sys.dept.deptName.inexistence={0} \u90E8\u95E8\u540D\u79F0\u4E0D\u5B58\u5728
|
||||
sys.post.postName.inexistence={0} \u5C97\u4F4D\u540D\u79F0\u4E0D\u5B58\u5728
|
||||
@@ -13,6 +13,7 @@ sys.param.delete.system=\u7CFB\u7EDF\u5185\u7F6E\u53C2\u6570\u4E0D\u80FD\u5220\u
|
||||
sys.param.config.error={0} \u7CFB\u7EDF\u53C2\u6570\u914D\u7F6E\u9519\u8BEF
|
||||
sys.menu.delete.existing=\u83DC\u5355\u542B\u6709\u4E0B\u7EA7\u4E0D\u80FD\u5220\u9664
|
||||
sys.app.sms.often=\u9A8C\u8BC1\u7801\u53D1\u9001\u8FC7\u9891\u7E41
|
||||
sys.app.sms.error=\u9A8C\u8BC1\u7801\u9519\u8BEF
|
||||
sys.app.phone.unregistered={0} \u624B\u673A\u53F7\u672A\u6CE8\u518C
|
||||
sys.dict.delete.system=\u7CFB\u7EDF\u5185\u7F6E\u5B57\u5178\u9879\u76EE\u4E0D\u80FD\u5220\u9664
|
||||
sys.dict.update.system=\u7CFB\u7EDF\u5185\u7F6E\u5B57\u5178\u9879\u76EE\u4E0D\u80FD\u4FEE\u6539
|
||||
|
||||
+30
-24
@@ -35,33 +35,39 @@ import java.util.List;
|
||||
@EqualsAndHashCode(callSuper = true)
|
||||
public class UserDTO extends SysUser {
|
||||
|
||||
/**
|
||||
* 角色ID
|
||||
*/
|
||||
@Schema(description = "角色id集合")
|
||||
private List<Long> role;
|
||||
/**
|
||||
* 角色ID
|
||||
*/
|
||||
@Schema(description = "角色id集合")
|
||||
private List<Long> role;
|
||||
|
||||
/**
|
||||
* 部门id
|
||||
*/
|
||||
@Schema(description = "部门id")
|
||||
private Long deptId;
|
||||
/**
|
||||
* 部门id
|
||||
*/
|
||||
@Schema(description = "部门id")
|
||||
private Long deptId;
|
||||
|
||||
/**
|
||||
* 部门id集合(支持多部门)
|
||||
*/
|
||||
@Schema(description = "部门id集合")
|
||||
private List<Long> deptIds;
|
||||
/**
|
||||
* 部门id集合(支持多部门)
|
||||
*/
|
||||
@Schema(description = "部门id集合")
|
||||
private List<Long> deptIds;
|
||||
|
||||
/**
|
||||
* 岗位ID
|
||||
*/
|
||||
private List<Long> post;
|
||||
/**
|
||||
* 岗位ID
|
||||
*/
|
||||
private List<Long> post;
|
||||
|
||||
/**
|
||||
* 新密码
|
||||
*/
|
||||
@Schema(description = "新密码")
|
||||
private String newpassword1;
|
||||
/**
|
||||
* 新密码
|
||||
*/
|
||||
@Schema(description = "新密码")
|
||||
private String newpassword1;
|
||||
|
||||
/**
|
||||
* 验证码
|
||||
*/
|
||||
@Schema(description = "验证码")
|
||||
private String code;
|
||||
|
||||
}
|
||||
+18
-3
@@ -182,18 +182,31 @@ public class SysMessageController {
|
||||
}
|
||||
|
||||
/**
|
||||
* 发送短信验证码
|
||||
* @param mobile 手机号
|
||||
* 发送短信(验证码)
|
||||
*
|
||||
* @param mobile 手机号 (需要注册,对外提供,安全性第一)
|
||||
* @return {@link R }
|
||||
*/
|
||||
@Inner(value = false)
|
||||
@GetMapping("/send/smsCode")
|
||||
public R sendSmsCode(@RequestParam String mobile) {
|
||||
return sysMessageService.sendSmsCode(mobile);
|
||||
return sysMessageService.sendSmsCode(mobile, true);
|
||||
}
|
||||
|
||||
/**
|
||||
* 发送内部短信验证码
|
||||
*
|
||||
* @param mobile 手机号码 (系统内不一定存在)
|
||||
* @return 发送结果
|
||||
*/
|
||||
@GetMapping("/send/smsInnerCode")
|
||||
public R sendSmsInnerCode(@RequestParam String mobile) {
|
||||
return sysMessageService.sendSmsCode(mobile, false);
|
||||
}
|
||||
|
||||
/**
|
||||
* 发送短信
|
||||
*
|
||||
* @param messageSmsDTO 消息 短信 DTO
|
||||
* @return {@link R }
|
||||
*/
|
||||
@@ -204,6 +217,7 @@ public class SysMessageController {
|
||||
|
||||
/**
|
||||
* 发送邮件
|
||||
*
|
||||
* @param messageEmailDTO 留言内容 电子邮件 DTO
|
||||
* @return {@link R }
|
||||
*/
|
||||
@@ -214,6 +228,7 @@ public class SysMessageController {
|
||||
|
||||
/**
|
||||
* 发送 webhook
|
||||
*
|
||||
* @param messageHookDTO 消息挂钩 DTO
|
||||
* @return {@link R }
|
||||
*/
|
||||
|
||||
+11
-3
@@ -37,6 +37,7 @@ public interface SysMessageService extends IService<SysMessageEntity> {
|
||||
|
||||
/**
|
||||
* 读取信息
|
||||
*
|
||||
* @param id id
|
||||
* @return true/false
|
||||
*/
|
||||
@@ -44,6 +45,7 @@ public interface SysMessageService extends IService<SysMessageEntity> {
|
||||
|
||||
/**
|
||||
* 获取信息
|
||||
*
|
||||
* @param id id
|
||||
* @return messageVO
|
||||
*/
|
||||
@@ -61,13 +63,16 @@ public interface SysMessageService extends IService<SysMessageEntity> {
|
||||
|
||||
/**
|
||||
* 发送手机验证码
|
||||
* @param mobile mobile
|
||||
* @return code
|
||||
*
|
||||
* @param mobile 手机号码
|
||||
* @param registered 是否已注册
|
||||
* @return 发送结果
|
||||
*/
|
||||
R<Boolean> sendSmsCode(String mobile);
|
||||
R<Boolean> sendSmsCode(String mobile, boolean registered);
|
||||
|
||||
/**
|
||||
* 发送短信
|
||||
*
|
||||
* @param messageSmsDTO 消息 短信 DTO
|
||||
* @return {@link R }
|
||||
*/
|
||||
@@ -75,6 +80,7 @@ public interface SysMessageService extends IService<SysMessageEntity> {
|
||||
|
||||
/**
|
||||
* 发送邮件
|
||||
*
|
||||
* @param messageEmailDTO 留言内容 电子邮件 DTO
|
||||
* @return {@link R }
|
||||
*/
|
||||
@@ -82,6 +88,7 @@ public interface SysMessageService extends IService<SysMessageEntity> {
|
||||
|
||||
/**
|
||||
* 发送钩子消息
|
||||
*
|
||||
* @param messageHookDTO 消息挂钩 DTO
|
||||
* @return {@link R }
|
||||
*/
|
||||
@@ -89,6 +96,7 @@ public interface SysMessageService extends IService<SysMessageEntity> {
|
||||
|
||||
/**
|
||||
* 列出 Hook 业务代码
|
||||
*
|
||||
* @param messageHookDTO 消息钩子 DTO
|
||||
* @return {@link R }
|
||||
*/
|
||||
|
||||
+387
-377
@@ -97,428 +97,438 @@ import java.util.Objects;
|
||||
@Service
|
||||
@RequiredArgsConstructor
|
||||
public class SysMessageServiceImpl extends ServiceImpl<SysMessageMapper, SysMessageEntity>
|
||||
implements SysMessageService {
|
||||
implements SysMessageService {
|
||||
|
||||
/**
|
||||
* 支持短信服务商
|
||||
*/
|
||||
private static final Class[] SUPPORT_CONFIG_CLAZZ = { AlibabaConfig.class, CloopenConfig.class, CtyunConfig.class,
|
||||
EmayConfig.class, HuaweiConfig.class, JdCloudConfig.class, NeteaseConfig.class, TencentConfig.class,
|
||||
UniConfig.class, YunpianConfig.class, ZhutongConfig.class, DingZhongConfig.class, QiNiuConfig.class };
|
||||
/**
|
||||
* 支持短信服务商
|
||||
*/
|
||||
private static final Class[] SUPPORT_CONFIG_CLAZZ = {AlibabaConfig.class, CloopenConfig.class, CtyunConfig.class,
|
||||
EmayConfig.class, HuaweiConfig.class, JdCloudConfig.class, NeteaseConfig.class, TencentConfig.class,
|
||||
UniConfig.class, YunpianConfig.class, ZhutongConfig.class, DingZhongConfig.class, QiNiuConfig.class};
|
||||
|
||||
private final RemoteLogService remoteLogService;
|
||||
private final RemoteLogService remoteLogService;
|
||||
|
||||
private final SysSystemConfigMapper sysSystemConfigMapper;
|
||||
private final SysSystemConfigMapper sysSystemConfigMapper;
|
||||
|
||||
private final SysMessageRelationMapper relationMapper;
|
||||
private final SysMessageRelationMapper relationMapper;
|
||||
|
||||
private final SysUserMapper userMapper;
|
||||
private final SysUserMapper userMapper;
|
||||
|
||||
private final SysFileMapper fileMapper;
|
||||
private final SysFileMapper fileMapper;
|
||||
|
||||
private final FileTemplate fileTemplate;
|
||||
private final FileTemplate fileTemplate;
|
||||
|
||||
/**
|
||||
* 发送信息
|
||||
* @param id id
|
||||
* @return true/false
|
||||
*/
|
||||
@Override
|
||||
@Transactional(rollbackFor = Exception.class)
|
||||
public Boolean sendMessage(Long id) {
|
||||
// 更新信息状态
|
||||
SysMessageEntity sysMessage = new SysMessageEntity();
|
||||
sysMessage.setSendFlag(YesNoEnum.YES.getCode());
|
||||
baseMapper.update(sysMessage, Wrappers.<SysMessageEntity>lambdaQuery().eq(SysMessageEntity::getId, id));
|
||||
return Boolean.TRUE;
|
||||
}
|
||||
/**
|
||||
* 发送信息
|
||||
*
|
||||
* @param id id
|
||||
* @return true/false
|
||||
*/
|
||||
@Override
|
||||
@Transactional(rollbackFor = Exception.class)
|
||||
public Boolean sendMessage(Long id) {
|
||||
// 更新信息状态
|
||||
SysMessageEntity sysMessage = new SysMessageEntity();
|
||||
sysMessage.setSendFlag(YesNoEnum.YES.getCode());
|
||||
baseMapper.update(sysMessage, Wrappers.<SysMessageEntity>lambdaQuery().eq(SysMessageEntity::getId, id));
|
||||
return Boolean.TRUE;
|
||||
}
|
||||
|
||||
/**
|
||||
* 保存消息及其关联关系
|
||||
* @param sysMessage 消息对象
|
||||
* @return 是否保存成功
|
||||
*/
|
||||
@Transactional(rollbackFor = Exception.class)
|
||||
public Boolean saveOrUpdateMessage(SysMessageVO sysMessage) {
|
||||
SysMessageEntity messageEntity = new SysMessageEntity();
|
||||
BeanUtils.copyProperties(sysMessage, messageEntity);
|
||||
/**
|
||||
* 保存消息及其关联关系
|
||||
*
|
||||
* @param sysMessage 消息对象
|
||||
* @return 是否保存成功
|
||||
*/
|
||||
@Transactional(rollbackFor = Exception.class)
|
||||
public Boolean saveOrUpdateMessage(SysMessageVO sysMessage) {
|
||||
SysMessageEntity messageEntity = new SysMessageEntity();
|
||||
BeanUtils.copyProperties(sysMessage, messageEntity);
|
||||
|
||||
if (Objects.isNull(sysMessage.getId())) {
|
||||
baseMapper.insert(messageEntity);
|
||||
}
|
||||
else {
|
||||
baseMapper.updateById(sysMessage);
|
||||
}
|
||||
if (Objects.isNull(sysMessage.getId())) {
|
||||
baseMapper.insert(messageEntity);
|
||||
} else {
|
||||
baseMapper.updateById(sysMessage);
|
||||
}
|
||||
|
||||
// 删除原有用户
|
||||
relationMapper.delete(Wrappers.<SysMessageRelationEntity>lambdaQuery()
|
||||
.eq(SysMessageRelationEntity::getMsgId, messageEntity.getId()));
|
||||
// 删除原有用户
|
||||
relationMapper.delete(Wrappers.<SysMessageRelationEntity>lambdaQuery()
|
||||
.eq(SysMessageRelationEntity::getMsgId, messageEntity.getId()));
|
||||
|
||||
List<OrgTreeVO> userList = sysMessage.getUserList();
|
||||
if (CollUtil.isNotEmpty(userList)) {
|
||||
userList.forEach(user -> {
|
||||
SysMessageRelationEntity relationEntity = new SysMessageRelationEntity();
|
||||
relationEntity.setMsgId(messageEntity.getId());
|
||||
relationEntity.setUserId(user.getId());
|
||||
relationMapper.insert(relationEntity);
|
||||
});
|
||||
}
|
||||
else {
|
||||
userMapper.selectList(Wrappers.emptyWrapper()).stream().map(SysUser::getUserId).forEach(userId -> {
|
||||
SysMessageRelationEntity relationEntity = new SysMessageRelationEntity();
|
||||
relationEntity.setMsgId(messageEntity.getId());
|
||||
relationEntity.setUserId(userId);
|
||||
relationMapper.insert(relationEntity);
|
||||
});
|
||||
}
|
||||
return Boolean.TRUE;
|
||||
}
|
||||
List<OrgTreeVO> userList = sysMessage.getUserList();
|
||||
if (CollUtil.isNotEmpty(userList)) {
|
||||
userList.forEach(user -> {
|
||||
SysMessageRelationEntity relationEntity = new SysMessageRelationEntity();
|
||||
relationEntity.setMsgId(messageEntity.getId());
|
||||
relationEntity.setUserId(user.getId());
|
||||
relationMapper.insert(relationEntity);
|
||||
});
|
||||
} else {
|
||||
userMapper.selectList(Wrappers.emptyWrapper()).stream().map(SysUser::getUserId).forEach(userId -> {
|
||||
SysMessageRelationEntity relationEntity = new SysMessageRelationEntity();
|
||||
relationEntity.setMsgId(messageEntity.getId());
|
||||
relationEntity.setUserId(userId);
|
||||
relationMapper.insert(relationEntity);
|
||||
});
|
||||
}
|
||||
return Boolean.TRUE;
|
||||
}
|
||||
|
||||
/**
|
||||
* 获取用户的信息列表
|
||||
* @return list
|
||||
*/
|
||||
@Override
|
||||
public IPage<SysMessageVO> pageUserMessage(Page page, SysMessageVO sysMessage) {
|
||||
MPJLambdaWrapper<SysMessageEntity> wrapper = new MPJLambdaWrapper<SysMessageEntity>()
|
||||
.selectAll(SysMessageEntity.class)
|
||||
.select(SysMessageRelationEntity::getReadFlag)
|
||||
.leftJoin(SysMessageRelationEntity.class, SysMessageRelationEntity::getMsgId, SysMessageEntity::getId)
|
||||
.eq(SysMessageRelationEntity::getUserId, SecurityUtils.getUser().getId())
|
||||
.eq(SysMessageEntity::getSendFlag, YesNoEnum.YES.getCode())
|
||||
.eq(StrUtil.isNotBlank(sysMessage.getCategory()), SysMessageEntity::getCategory, sysMessage.getCategory())
|
||||
.eq(StrUtil.isNotBlank(sysMessage.getReadFlag()), SysMessageRelationEntity::getReadFlag,
|
||||
sysMessage.getReadFlag())
|
||||
.orderByDesc(SysMessageEntity::getSort)
|
||||
.orderByDesc(SysMessageEntity::getCreateTime);
|
||||
return baseMapper.selectJoinPage(page, SysMessageVO.class, wrapper);
|
||||
}
|
||||
/**
|
||||
* 获取用户的信息列表
|
||||
*
|
||||
* @return list
|
||||
*/
|
||||
@Override
|
||||
public IPage<SysMessageVO> pageUserMessage(Page page, SysMessageVO sysMessage) {
|
||||
MPJLambdaWrapper<SysMessageEntity> wrapper = new MPJLambdaWrapper<SysMessageEntity>()
|
||||
.selectAll(SysMessageEntity.class)
|
||||
.select(SysMessageRelationEntity::getReadFlag)
|
||||
.leftJoin(SysMessageRelationEntity.class, SysMessageRelationEntity::getMsgId, SysMessageEntity::getId)
|
||||
.eq(SysMessageRelationEntity::getUserId, SecurityUtils.getUser().getId())
|
||||
.eq(SysMessageEntity::getSendFlag, YesNoEnum.YES.getCode())
|
||||
.eq(StrUtil.isNotBlank(sysMessage.getCategory()), SysMessageEntity::getCategory, sysMessage.getCategory())
|
||||
.eq(StrUtil.isNotBlank(sysMessage.getReadFlag()), SysMessageRelationEntity::getReadFlag,
|
||||
sysMessage.getReadFlag())
|
||||
.orderByDesc(SysMessageEntity::getSort)
|
||||
.orderByDesc(SysMessageEntity::getCreateTime);
|
||||
return baseMapper.selectJoinPage(page, SysMessageVO.class, wrapper);
|
||||
}
|
||||
|
||||
/**
|
||||
* 读取信息
|
||||
* @param id id
|
||||
* @return true/false
|
||||
*/
|
||||
@Override
|
||||
public Boolean readMessage(Long id) {
|
||||
SysMessageRelationEntity relationEntity = new SysMessageRelationEntity();
|
||||
relationEntity.setReadFlag(YesNoEnum.YES.getCode());
|
||||
relationMapper.update(relationEntity,
|
||||
Wrappers.<SysMessageRelationEntity>lambdaQuery()
|
||||
.eq(SysMessageRelationEntity::getMsgId, id)
|
||||
.eq(SysMessageRelationEntity::getUserId, SecurityUtils.getUser().getId()));
|
||||
return Boolean.TRUE;
|
||||
}
|
||||
/**
|
||||
* 读取信息
|
||||
*
|
||||
* @param id id
|
||||
* @return true/false
|
||||
*/
|
||||
@Override
|
||||
public Boolean readMessage(Long id) {
|
||||
SysMessageRelationEntity relationEntity = new SysMessageRelationEntity();
|
||||
relationEntity.setReadFlag(YesNoEnum.YES.getCode());
|
||||
relationMapper.update(relationEntity,
|
||||
Wrappers.<SysMessageRelationEntity>lambdaQuery()
|
||||
.eq(SysMessageRelationEntity::getMsgId, id)
|
||||
.eq(SysMessageRelationEntity::getUserId, SecurityUtils.getUser().getId()));
|
||||
return Boolean.TRUE;
|
||||
}
|
||||
|
||||
/**
|
||||
* 获取信息
|
||||
* @param id id
|
||||
* @return messageVO
|
||||
*/
|
||||
@Override
|
||||
public SysMessageVO getMessage(Long id) {
|
||||
SysMessageEntity messageEntity = baseMapper.selectById(id);
|
||||
SysMessageVO SysMessageVO = new SysMessageVO();
|
||||
BeanUtils.copyProperties(messageEntity, SysMessageVO);
|
||||
/**
|
||||
* 获取信息
|
||||
*
|
||||
* @param id id
|
||||
* @return messageVO
|
||||
*/
|
||||
@Override
|
||||
public SysMessageVO getMessage(Long id) {
|
||||
SysMessageEntity messageEntity = baseMapper.selectById(id);
|
||||
SysMessageVO SysMessageVO = new SysMessageVO();
|
||||
BeanUtils.copyProperties(messageEntity, SysMessageVO);
|
||||
|
||||
// 全体通知
|
||||
if (messageEntity.getAllFlag().equals(YesNoEnum.YES.getCode())) {
|
||||
return SysMessageVO;
|
||||
}
|
||||
List<Long> userIdList = relationMapper
|
||||
.selectList(Wrappers.<SysMessageRelationEntity>lambdaQuery().eq(SysMessageRelationEntity::getMsgId, id))
|
||||
.stream()
|
||||
.map(SysMessageRelationEntity::getUserId)
|
||||
.toList();
|
||||
// 全体通知
|
||||
if (messageEntity.getAllFlag().equals(YesNoEnum.YES.getCode())) {
|
||||
return SysMessageVO;
|
||||
}
|
||||
List<Long> userIdList = relationMapper
|
||||
.selectList(Wrappers.<SysMessageRelationEntity>lambdaQuery().eq(SysMessageRelationEntity::getMsgId, id))
|
||||
.stream()
|
||||
.map(SysMessageRelationEntity::getUserId)
|
||||
.toList();
|
||||
|
||||
if (CollUtil.isNotEmpty(userIdList)) {
|
||||
List<OrgTreeVO> orgNodeUserVoList = userMapper.selectByIds(userIdList).stream().map(user -> {
|
||||
OrgTreeVO nodeUserVo = new OrgTreeVO();
|
||||
nodeUserVo.setId(user.getUserId());
|
||||
nodeUserVo.setAvatar(user.getAvatar());
|
||||
nodeUserVo.setName(user.getName());
|
||||
return nodeUserVo;
|
||||
}).toList();
|
||||
if (CollUtil.isNotEmpty(userIdList)) {
|
||||
List<OrgTreeVO> orgNodeUserVoList = userMapper.selectByIds(userIdList).stream().map(user -> {
|
||||
OrgTreeVO nodeUserVo = new OrgTreeVO();
|
||||
nodeUserVo.setId(user.getUserId());
|
||||
nodeUserVo.setAvatar(user.getAvatar());
|
||||
nodeUserVo.setName(user.getName());
|
||||
return nodeUserVo;
|
||||
}).toList();
|
||||
|
||||
SysMessageVO.setUserList(orgNodeUserVoList);
|
||||
}
|
||||
SysMessageVO.setUserList(orgNodeUserVoList);
|
||||
}
|
||||
|
||||
return SysMessageVO;
|
||||
}
|
||||
return SysMessageVO;
|
||||
}
|
||||
|
||||
/**
|
||||
* 查询用户阅读情况
|
||||
* @param page 分页
|
||||
* @param messageId 消息ID
|
||||
* @param name 姓名
|
||||
* @return page
|
||||
*/
|
||||
@Override
|
||||
public Page pageUserRead(Page page, Long messageId, String name) {
|
||||
MPJLambdaWrapper<SysMessageRelationEntity> wrapper = new MPJLambdaWrapper<SysMessageRelationEntity>()
|
||||
.selectAll(SysMessageRelationEntity.class)
|
||||
.select(SysUser::getUsername, SysUser::getName, SysUser::getUserId)
|
||||
.select(SysMessageEntity::getTitle)
|
||||
.leftJoin(SysUser.class, SysUser::getUserId, SysMessageRelationEntity::getUserId)
|
||||
.leftJoin(SysMessageEntity.class, SysMessageEntity::getId, SysMessageRelationEntity::getMsgId)
|
||||
.eq(SysMessageRelationEntity::getMsgId, messageId)
|
||||
.like(StrUtil.isNotBlank(name), SysUser::getName, name);
|
||||
return relationMapper.selectJoinPage(page, SysMessageReadVO.class, wrapper);
|
||||
}
|
||||
/**
|
||||
* 查询用户阅读情况
|
||||
*
|
||||
* @param page 分页
|
||||
* @param messageId 消息ID
|
||||
* @param name 姓名
|
||||
* @return page
|
||||
*/
|
||||
@Override
|
||||
public Page pageUserRead(Page page, Long messageId, String name) {
|
||||
MPJLambdaWrapper<SysMessageRelationEntity> wrapper = new MPJLambdaWrapper<SysMessageRelationEntity>()
|
||||
.selectAll(SysMessageRelationEntity.class)
|
||||
.select(SysUser::getUsername, SysUser::getName, SysUser::getUserId)
|
||||
.select(SysMessageEntity::getTitle)
|
||||
.leftJoin(SysUser.class, SysUser::getUserId, SysMessageRelationEntity::getUserId)
|
||||
.leftJoin(SysMessageEntity.class, SysMessageEntity::getId, SysMessageRelationEntity::getMsgId)
|
||||
.eq(SysMessageRelationEntity::getMsgId, messageId)
|
||||
.like(StrUtil.isNotBlank(name), SysUser::getName, name);
|
||||
return relationMapper.selectJoinPage(page, SysMessageReadVO.class, wrapper);
|
||||
}
|
||||
|
||||
/**
|
||||
* 发送手机验证码 TODO: 调用短信网关发送验证码,测试返回前端
|
||||
* @param mobile mobile
|
||||
* @return code
|
||||
*/
|
||||
@Override
|
||||
public R<Boolean> sendSmsCode(String mobile) {
|
||||
List<SysUser> userList = TenantBroker
|
||||
.noneAs(() -> userMapper.selectList(Wrappers.<SysUser>query().lambda().eq(SysUser::getPhone, mobile)));
|
||||
/**
|
||||
* 发送手机验证码
|
||||
*
|
||||
* @param mobile 手机号码
|
||||
* @param registered 是否已注册
|
||||
* @return 发送结果
|
||||
*/
|
||||
@Override
|
||||
public R<Boolean> sendSmsCode(String mobile, boolean registered) {
|
||||
List<SysUser> userList = TenantBroker
|
||||
.noneAs(() -> userMapper.selectList(Wrappers.<SysUser>query().lambda().eq(SysUser::getPhone, mobile)));
|
||||
|
||||
if (CollUtil.isEmpty(userList)) {
|
||||
log.info("手机号未注册:{}", mobile);
|
||||
return R.ok(Boolean.FALSE, MsgUtils.getMessage(ErrorCodes.SYS_APP_PHONE_UNREGISTERED, mobile));
|
||||
}
|
||||
if (registered && CollUtil.isEmpty(userList)) {
|
||||
log.info("手机号未注册:{}", mobile);
|
||||
return R.ok(Boolean.FALSE, MsgUtils.getMessage(ErrorCodes.SYS_APP_PHONE_UNREGISTERED, mobile));
|
||||
}
|
||||
|
||||
String codeObj = RedisUtils
|
||||
.get(CacheConstants.DEFAULT_CODE_KEY + LoginTypeEnum.SMS.getType() + StringPool.AT + mobile);
|
||||
String codeObj = RedisUtils
|
||||
.get(CacheConstants.DEFAULT_CODE_KEY + LoginTypeEnum.SMS.getType() + StringPool.AT + mobile);
|
||||
|
||||
if (StrUtil.isNotBlank(codeObj)) {
|
||||
log.info("手机号验证码未过期:{},{}", mobile, codeObj);
|
||||
return R.ok(Boolean.FALSE, MsgUtils.getMessage(ErrorCodes.SYS_APP_SMS_OFTEN));
|
||||
}
|
||||
if (StrUtil.isNotBlank(codeObj)) {
|
||||
log.info("手机号验证码未过期:{},{}", mobile, codeObj);
|
||||
return R.ok(Boolean.FALSE, MsgUtils.getMessage(ErrorCodes.SYS_APP_SMS_OFTEN));
|
||||
}
|
||||
|
||||
String code = RandomUtil.randomNumbers(Integer.parseInt(SecurityConstants.CODE_SIZE));
|
||||
log.info("手机号生成验证码成功:{},{}", mobile, code);
|
||||
RedisUtils.set(CacheConstants.DEFAULT_CODE_KEY + LoginTypeEnum.SMS.getType() + StringPool.AT + mobile, code,
|
||||
SecurityConstants.CODE_TIME);
|
||||
String code = RandomUtil.randomNumbers(Integer.parseInt(SecurityConstants.CODE_SIZE));
|
||||
log.info("手机号生成验证码成功:{},{}", mobile, code);
|
||||
RedisUtils.set(CacheConstants.DEFAULT_CODE_KEY + LoginTypeEnum.SMS.getType() + StringPool.AT + mobile, code,
|
||||
SecurityConstants.CODE_TIME);
|
||||
|
||||
// 发送
|
||||
return this.sendSms(MessageSmsDTO.builder()
|
||||
.mobile(mobile)
|
||||
.biz(SmsBizCodeEnum.SMS_NORMAL_CODE.getCode())
|
||||
.param(code)
|
||||
.build());
|
||||
}
|
||||
// 发送
|
||||
return this.sendSms(MessageSmsDTO.builder()
|
||||
.mobile(mobile)
|
||||
.biz(SmsBizCodeEnum.SMS_NORMAL_CODE.getCode())
|
||||
.param(code)
|
||||
.build());
|
||||
}
|
||||
|
||||
/**
|
||||
* 发送短信
|
||||
* @param messageSmsDTO 消息 短信 DTO
|
||||
* @return {@link R }
|
||||
*/
|
||||
@Override
|
||||
public R sendSms(MessageSmsDTO messageSmsDTO) {
|
||||
/**
|
||||
* 发送短信
|
||||
*
|
||||
* @param messageSmsDTO 消息 短信 DTO
|
||||
* @return {@link R }
|
||||
*/
|
||||
@Override
|
||||
public R sendSms(MessageSmsDTO messageSmsDTO) {
|
||||
|
||||
// 根据业务编码获取短信通道配置
|
||||
List<SysSystemConfigEntity> configEntityList = sysSystemConfigMapper
|
||||
.selectList(Wrappers.<SysSystemConfigEntity>lambdaQuery()
|
||||
.eq(SysSystemConfigEntity::getConfigType, SystemConfigTypeEnum.SMS.getValue())
|
||||
.eq(SysSystemConfigEntity::getConfigStatus, YesNoEnum.YES.getCode())
|
||||
.eq(SysSystemConfigEntity::getConfigKey, messageSmsDTO.getBizCode()));
|
||||
if (CollUtil.isEmpty(configEntityList)) {
|
||||
return R.failed("发送失败,短信通道配置不存在");
|
||||
}
|
||||
// 根据业务编码获取短信通道配置
|
||||
List<SysSystemConfigEntity> configEntityList = sysSystemConfigMapper
|
||||
.selectList(Wrappers.<SysSystemConfigEntity>lambdaQuery()
|
||||
.eq(SysSystemConfigEntity::getConfigType, SystemConfigTypeEnum.SMS.getValue())
|
||||
.eq(SysSystemConfigEntity::getConfigStatus, YesNoEnum.YES.getCode())
|
||||
.eq(SysSystemConfigEntity::getConfigKey, messageSmsDTO.getBizCode()));
|
||||
if (CollUtil.isEmpty(configEntityList)) {
|
||||
return R.failed("发送失败,短信通道配置不存在");
|
||||
}
|
||||
|
||||
SysSystemConfigEntity configEntity = configEntityList.get(0);
|
||||
JSONObject configMap = JSONUtil.parseObj(configEntity.getConfigValue());
|
||||
SysSystemConfigEntity configEntity = configEntityList.get(0);
|
||||
JSONObject configMap = JSONUtil.parseObj(configEntity.getConfigValue());
|
||||
|
||||
// 组装SMS4J 的发送对象
|
||||
SmsBlend smsBlend = SmsFactory.getSmsBlend(messageSmsDTO.getBizCode());
|
||||
if (Objects.isNull(smsBlend)) {
|
||||
Class targetClass = Arrays.stream(SUPPORT_CONFIG_CLAZZ)
|
||||
.filter(config -> config.getSimpleName()
|
||||
.toLowerCase()
|
||||
.contains(configMap.getStr(MessageSmsDTO.Fields.supplier)))
|
||||
.findFirst()
|
||||
.orElseThrow(() -> new CheckedException("发送失败,短信通道配置不存在"));
|
||||
BaseConfig baseConfig = (BaseConfig) JSONUtil.toBean(configEntity.getConfigValue(), targetClass);
|
||||
// 组装SMS4J 的发送对象
|
||||
SmsBlend smsBlend = SmsFactory.getSmsBlend(messageSmsDTO.getBizCode());
|
||||
if (Objects.isNull(smsBlend)) {
|
||||
Class targetClass = Arrays.stream(SUPPORT_CONFIG_CLAZZ)
|
||||
.filter(config -> config.getSimpleName()
|
||||
.toLowerCase()
|
||||
.contains(configMap.getStr(MessageSmsDTO.Fields.supplier)))
|
||||
.findFirst()
|
||||
.orElseThrow(() -> new CheckedException("发送失败,短信通道配置不存在"));
|
||||
BaseConfig baseConfig = (BaseConfig) JSONUtil.toBean(configEntity.getConfigValue(), targetClass);
|
||||
|
||||
// 如果渠道扩展参数不为空则增加特性化参数
|
||||
if (StrUtil.isNotBlank(configMap.getStr(MessageSmsDTO.Fields.extParams))) {
|
||||
JSONObject extParams = configMap.getJSONObject(MessageSmsDTO.Fields.extParams);
|
||||
BeanUtil.copyProperties(extParams, baseConfig);
|
||||
}
|
||||
// 如果渠道扩展参数不为空则增加特性化参数
|
||||
if (StrUtil.isNotBlank(configMap.getStr(MessageSmsDTO.Fields.extParams))) {
|
||||
JSONObject extParams = configMap.getJSONObject(MessageSmsDTO.Fields.extParams);
|
||||
BeanUtil.copyProperties(extParams, baseConfig);
|
||||
}
|
||||
|
||||
baseConfig.setConfigId(configEntity.getConfigKey());
|
||||
SmsFactory.createSmsBlend(baseConfig);
|
||||
smsBlend = SmsFactory.getSmsBlend(messageSmsDTO.getBizCode());
|
||||
}
|
||||
baseConfig.setConfigId(configEntity.getConfigKey());
|
||||
SmsFactory.createSmsBlend(baseConfig);
|
||||
smsBlend = SmsFactory.getSmsBlend(messageSmsDTO.getBizCode());
|
||||
}
|
||||
|
||||
// 异步发送短信
|
||||
SysLogDTO sysLog = SysLogUtils.getSysLog();
|
||||
Long start = System.currentTimeMillis();
|
||||
sysLog.setTenantId(TenantContextHolder.getTenantId());
|
||||
for (String mobile : messageSmsDTO.getMobiles()) {
|
||||
smsBlend.sendMessageAsync(mobile, configMap.getStr(MessageSmsDTO.Fields.templateId),
|
||||
messageSmsDTO.getParams(), smsResponse -> {
|
||||
log.info("发送短信结果:{}", smsResponse);
|
||||
sysLog.setTitle(String.format("发送短信 %s", mobile));
|
||||
sysLog.setLogType(LogTypeEnum.NORMAL.getType());
|
||||
sysLog.setServiceId(SystemConfigTypeEnum.SMS.getValue());
|
||||
sysLog.setParams(JacksonSensitiveFieldUtil.writeValueAsString(messageSmsDTO));
|
||||
sysLog.setTime(System.currentTimeMillis() - start);
|
||||
sysLog.setException(JacksonSensitiveFieldUtil.writeValueAsString(smsResponse));
|
||||
remoteLogService.saveLog(sysLog);
|
||||
});
|
||||
}
|
||||
return R.ok();
|
||||
}
|
||||
// 异步发送短信
|
||||
SysLogDTO sysLog = SysLogUtils.getSysLog();
|
||||
Long start = System.currentTimeMillis();
|
||||
sysLog.setTenantId(TenantContextHolder.getTenantId());
|
||||
for (String mobile : messageSmsDTO.getMobiles()) {
|
||||
smsBlend.sendMessageAsync(mobile, configMap.getStr(MessageSmsDTO.Fields.templateId),
|
||||
messageSmsDTO.getParams(), smsResponse -> {
|
||||
log.info("发送短信结果:{}", smsResponse);
|
||||
sysLog.setTitle(String.format("发送短信 %s", mobile));
|
||||
sysLog.setLogType(LogTypeEnum.NORMAL.getType());
|
||||
sysLog.setServiceId(SystemConfigTypeEnum.SMS.getValue());
|
||||
sysLog.setParams(JacksonSensitiveFieldUtil.writeValueAsString(messageSmsDTO));
|
||||
sysLog.setTime(System.currentTimeMillis() - start);
|
||||
sysLog.setException(JacksonSensitiveFieldUtil.writeValueAsString(smsResponse));
|
||||
remoteLogService.saveLog(sysLog);
|
||||
});
|
||||
}
|
||||
return R.ok();
|
||||
}
|
||||
|
||||
/**
|
||||
* 发送钩子消息
|
||||
* @param messageHookDTO 消息挂钩 DTO
|
||||
* @return {@link R }
|
||||
*/
|
||||
@Override
|
||||
public R sendHook(MessageHookDTO messageHookDTO) {
|
||||
/**
|
||||
* 发送钩子消息
|
||||
*
|
||||
* @param messageHookDTO 消息挂钩 DTO
|
||||
* @return {@link R }
|
||||
*/
|
||||
@Override
|
||||
public R sendHook(MessageHookDTO messageHookDTO) {
|
||||
|
||||
// 根据业务编码获取短信通道配置
|
||||
List<SysSystemConfigEntity> configEntityList = sysSystemConfigMapper
|
||||
.selectList(Wrappers.<SysSystemConfigEntity>lambdaQuery()
|
||||
.eq(SysSystemConfigEntity::getConfigType, SystemConfigTypeEnum.WEBHOOK.getValue())
|
||||
.eq(SysSystemConfigEntity::getConfigStatus, YesNoEnum.YES.getCode())
|
||||
.eq(SysSystemConfigEntity::getConfigKey, messageHookDTO.getBizCode()));
|
||||
if (CollUtil.isEmpty(configEntityList)) {
|
||||
return R.failed("发送失败,短信通道配置不存在");
|
||||
}
|
||||
// 根据业务编码获取短信通道配置
|
||||
List<SysSystemConfigEntity> configEntityList = sysSystemConfigMapper
|
||||
.selectList(Wrappers.<SysSystemConfigEntity>lambdaQuery()
|
||||
.eq(SysSystemConfigEntity::getConfigType, SystemConfigTypeEnum.WEBHOOK.getValue())
|
||||
.eq(SysSystemConfigEntity::getConfigStatus, YesNoEnum.YES.getCode())
|
||||
.eq(SysSystemConfigEntity::getConfigKey, messageHookDTO.getBizCode()));
|
||||
if (CollUtil.isEmpty(configEntityList)) {
|
||||
return R.failed("发送失败,短信通道配置不存在");
|
||||
}
|
||||
|
||||
SysSystemConfigEntity configEntity = configEntityList.get(0);
|
||||
JSONObject configMap = JSONUtil.parseObj(configEntity.getConfigValue());
|
||||
String supplier = configMap.getStr("supplier");
|
||||
SysSystemConfigEntity configEntity = configEntityList.get(0);
|
||||
JSONObject configMap = JSONUtil.parseObj(configEntity.getConfigValue());
|
||||
String supplier = configMap.getStr("supplier");
|
||||
|
||||
// 根据配置创建服务实例并注册
|
||||
OaSender alarm = OaFactory.getSmsOaBlend(messageHookDTO.getBizCode());
|
||||
if (Objects.isNull(alarm)) {
|
||||
if (StrUtil.equalsAnyIgnoreCase(OaType.DING_TALK.toString(), supplier)) {
|
||||
DingTalkConfig dingTalkConfig = new DingTalkConfig();
|
||||
dingTalkConfig.setConfigId(messageHookDTO.getBizCode());
|
||||
dingTalkConfig.setSign(configMap.getStr("sign"));
|
||||
dingTalkConfig.setTokenId(configMap.getStr("tokenId"));
|
||||
OaFactory.createAndRegisterOaSender(dingTalkConfig);
|
||||
}
|
||||
if (StrUtil.equalsAnyIgnoreCase(OaType.BYTE_TALK.toString(), supplier)) {
|
||||
ByteTalkConfig byteTalkConfig = new ByteTalkConfig();
|
||||
byteTalkConfig.setConfigId(messageHookDTO.getBizCode());
|
||||
byteTalkConfig.setSign(configMap.getStr("sign"));
|
||||
byteTalkConfig.setTokenId(configMap.getStr("tokenId"));
|
||||
OaFactory.createAndRegisterOaSender(byteTalkConfig);
|
||||
}
|
||||
// 根据配置创建服务实例并注册
|
||||
OaSender alarm = OaFactory.getSmsOaBlend(messageHookDTO.getBizCode());
|
||||
if (Objects.isNull(alarm)) {
|
||||
if (StrUtil.equalsAnyIgnoreCase(OaType.DING_TALK.toString(), supplier)) {
|
||||
DingTalkConfig dingTalkConfig = new DingTalkConfig();
|
||||
dingTalkConfig.setConfigId(messageHookDTO.getBizCode());
|
||||
dingTalkConfig.setSign(configMap.getStr("sign"));
|
||||
dingTalkConfig.setTokenId(configMap.getStr("tokenId"));
|
||||
OaFactory.createAndRegisterOaSender(dingTalkConfig);
|
||||
}
|
||||
if (StrUtil.equalsAnyIgnoreCase(OaType.BYTE_TALK.toString(), supplier)) {
|
||||
ByteTalkConfig byteTalkConfig = new ByteTalkConfig();
|
||||
byteTalkConfig.setConfigId(messageHookDTO.getBizCode());
|
||||
byteTalkConfig.setSign(configMap.getStr("sign"));
|
||||
byteTalkConfig.setTokenId(configMap.getStr("tokenId"));
|
||||
OaFactory.createAndRegisterOaSender(byteTalkConfig);
|
||||
}
|
||||
|
||||
if (StrUtil.equalsAnyIgnoreCase(OaType.WE_TALK.toString(), supplier)) {
|
||||
WeTalkConfig weTalkConfig = new WeTalkConfig();
|
||||
weTalkConfig.setConfigId(messageHookDTO.getBizCode());
|
||||
weTalkConfig.setSign(configMap.getStr("sign"));
|
||||
weTalkConfig.setTokenId(configMap.getStr("tokenId"));
|
||||
OaFactory.createAndRegisterOaSender(weTalkConfig);
|
||||
}
|
||||
alarm = OaFactory.getSmsOaBlend(messageHookDTO.getBizCode());
|
||||
}
|
||||
if (StrUtil.equalsAnyIgnoreCase(OaType.WE_TALK.toString(), supplier)) {
|
||||
WeTalkConfig weTalkConfig = new WeTalkConfig();
|
||||
weTalkConfig.setConfigId(messageHookDTO.getBizCode());
|
||||
weTalkConfig.setSign(configMap.getStr("sign"));
|
||||
weTalkConfig.setTokenId(configMap.getStr("tokenId"));
|
||||
OaFactory.createAndRegisterOaSender(weTalkConfig);
|
||||
}
|
||||
alarm = OaFactory.getSmsOaBlend(messageHookDTO.getBizCode());
|
||||
}
|
||||
|
||||
Request request = new Request();
|
||||
request.setContent(messageHookDTO.getMessageContent());
|
||||
request.setTitle(messageHookDTO.getMessageTitle());
|
||||
request.setMessageUrl(messageHookDTO.getMessageUrl());
|
||||
request.setPicUrl(messageHookDTO.getPicUrl());
|
||||
request.setIsNoticeAll(messageHookDTO.isNoticeAll());
|
||||
request.setPhoneList(messageHookDTO.getPhoneList());
|
||||
Request request = new Request();
|
||||
request.setContent(messageHookDTO.getMessageContent());
|
||||
request.setTitle(messageHookDTO.getMessageTitle());
|
||||
request.setMessageUrl(messageHookDTO.getMessageUrl());
|
||||
request.setPicUrl(messageHookDTO.getPicUrl());
|
||||
request.setIsNoticeAll(messageHookDTO.isNoticeAll());
|
||||
request.setPhoneList(messageHookDTO.getPhoneList());
|
||||
|
||||
SysLogDTO sysLog = SysLogUtils.getSysLog();
|
||||
sysLog.setTenantId(TenantContextHolder.getTenantId());
|
||||
Long start = System.currentTimeMillis();
|
||||
alarm.senderAsync(request,
|
||||
MessageType.valueOf(String.format("%s_%s", supplier, messageHookDTO.getMessageType()).toUpperCase()),
|
||||
response -> {
|
||||
log.info("发送Hook结果:{}", response);
|
||||
sysLog.setTitle(String.format("发送Hook %s", messageHookDTO.getBizCode()));
|
||||
sysLog.setLogType(LogTypeEnum.NORMAL.getType());
|
||||
sysLog.setServiceId(SystemConfigTypeEnum.WEBHOOK.getValue());
|
||||
sysLog.setParams(JacksonSensitiveFieldUtil.writeValueAsString(messageHookDTO));
|
||||
sysLog.setTime(System.currentTimeMillis() - start);
|
||||
sysLog.setException(JacksonSensitiveFieldUtil.writeValueAsString(response));
|
||||
remoteLogService.saveLog(sysLog);
|
||||
});
|
||||
return R.ok();
|
||||
}
|
||||
SysLogDTO sysLog = SysLogUtils.getSysLog();
|
||||
sysLog.setTenantId(TenantContextHolder.getTenantId());
|
||||
Long start = System.currentTimeMillis();
|
||||
alarm.senderAsync(request,
|
||||
MessageType.valueOf(String.format("%s_%s", supplier, messageHookDTO.getMessageType()).toUpperCase()),
|
||||
response -> {
|
||||
log.info("发送Hook结果:{}", response);
|
||||
sysLog.setTitle(String.format("发送Hook %s", messageHookDTO.getBizCode()));
|
||||
sysLog.setLogType(LogTypeEnum.NORMAL.getType());
|
||||
sysLog.setServiceId(SystemConfigTypeEnum.WEBHOOK.getValue());
|
||||
sysLog.setParams(JacksonSensitiveFieldUtil.writeValueAsString(messageHookDTO));
|
||||
sysLog.setTime(System.currentTimeMillis() - start);
|
||||
sysLog.setException(JacksonSensitiveFieldUtil.writeValueAsString(response));
|
||||
remoteLogService.saveLog(sysLog);
|
||||
});
|
||||
return R.ok();
|
||||
}
|
||||
|
||||
/**
|
||||
* 发送邮件
|
||||
* @param messageEmailDTO 留言内容 电子邮件 DTO
|
||||
* @return {@link R }
|
||||
*/
|
||||
@SneakyThrows
|
||||
@Override
|
||||
public R sendEmail(MessageEmailDTO messageEmailDTO) {
|
||||
// 根据业务编码获取短信通道配置
|
||||
List<SysSystemConfigEntity> configEntityList = sysSystemConfigMapper
|
||||
.selectList(Wrappers.<SysSystemConfigEntity>lambdaQuery()
|
||||
.eq(SysSystemConfigEntity::getConfigType, SystemConfigTypeEnum.EMAIL.getValue())
|
||||
.eq(SysSystemConfigEntity::getConfigStatus, YesNoEnum.YES.getCode())
|
||||
.eq(SysSystemConfigEntity::getConfigKey, messageEmailDTO.getBizCode()));
|
||||
if (CollUtil.isEmpty(configEntityList)) {
|
||||
return R.failed("发送失败,通道配置不存在");
|
||||
}
|
||||
SysSystemConfigEntity configEntity = configEntityList.get(0);
|
||||
JSONObject configMap = JSONUtil.parseObj(configEntity.getConfigValue());
|
||||
/**
|
||||
* 发送邮件
|
||||
*
|
||||
* @param messageEmailDTO 留言内容 电子邮件 DTO
|
||||
* @return {@link R }
|
||||
*/
|
||||
@SneakyThrows
|
||||
@Override
|
||||
public R sendEmail(MessageEmailDTO messageEmailDTO) {
|
||||
// 根据业务编码获取短信通道配置
|
||||
List<SysSystemConfigEntity> configEntityList = sysSystemConfigMapper
|
||||
.selectList(Wrappers.<SysSystemConfigEntity>lambdaQuery()
|
||||
.eq(SysSystemConfigEntity::getConfigType, SystemConfigTypeEnum.EMAIL.getValue())
|
||||
.eq(SysSystemConfigEntity::getConfigStatus, YesNoEnum.YES.getCode())
|
||||
.eq(SysSystemConfigEntity::getConfigKey, messageEmailDTO.getBizCode()));
|
||||
if (CollUtil.isEmpty(configEntityList)) {
|
||||
return R.failed("发送失败,通道配置不存在");
|
||||
}
|
||||
SysSystemConfigEntity configEntity = configEntityList.get(0);
|
||||
JSONObject configMap = JSONUtil.parseObj(configEntity.getConfigValue());
|
||||
|
||||
List<File> tempFileList = new ArrayList<>();
|
||||
if (CollUtil.isNotEmpty(messageEmailDTO.getAttachmentList())) {
|
||||
TenantContextHolder.setTenantSkip();
|
||||
for (String fileName : messageEmailDTO.getAttachmentList()) {
|
||||
SysFile sysFile = fileMapper
|
||||
.selectOne(Wrappers.<SysFile>lambdaQuery().eq(SysFile::getFileName, fileName));
|
||||
S3Object s3Object = fileTemplate.getObject(sysFile.getBucketName(), sysFile.getDir(), fileName);
|
||||
File file = FileUtil.file(FileUtil.getTmpDirPath(), sysFile.getOriginal());
|
||||
tempFileList.add(file);
|
||||
IoUtil.copy(s3Object.getObjectContent(), FileUtil.getOutputStream(file));
|
||||
}
|
||||
}
|
||||
List<File> tempFileList = new ArrayList<>();
|
||||
if (CollUtil.isNotEmpty(messageEmailDTO.getAttachmentList())) {
|
||||
TenantContextHolder.setTenantSkip();
|
||||
for (String fileName : messageEmailDTO.getAttachmentList()) {
|
||||
SysFile sysFile = fileMapper
|
||||
.selectOne(Wrappers.<SysFile>lambdaQuery().eq(SysFile::getFileName, fileName));
|
||||
S3Object s3Object = fileTemplate.getObject(sysFile.getBucketName(), sysFile.getDir(), fileName);
|
||||
File file = FileUtil.file(FileUtil.getTmpDirPath(), sysFile.getOriginal());
|
||||
tempFileList.add(file);
|
||||
IoUtil.copy(s3Object.getObjectContent(), FileUtil.getOutputStream(file));
|
||||
}
|
||||
}
|
||||
|
||||
MailAccount account = new MailAccount();
|
||||
account.setHost(configMap.getStr("smtpServer"));
|
||||
account.setPort(configMap.getInt("port"));
|
||||
account.setAuth(configMap.getBool("isAuth"));
|
||||
account.setSslEnable(configMap.getBool("isSSL"));
|
||||
account.setFrom(configMap.getStr("username"));
|
||||
account.setUser(configMap.getStr("username"));
|
||||
account.setPass(configMap.getStr("password"));
|
||||
MailAccount account = new MailAccount();
|
||||
account.setHost(configMap.getStr("smtpServer"));
|
||||
account.setPort(configMap.getInt("port"));
|
||||
account.setAuth(configMap.getBool("isAuth"));
|
||||
account.setSslEnable(configMap.getBool("isSSL"));
|
||||
account.setFrom(configMap.getStr("username"));
|
||||
account.setUser(configMap.getStr("username"));
|
||||
account.setPass(configMap.getStr("password"));
|
||||
|
||||
// 渲染模板
|
||||
TemplateEngine engine = TemplateUtil.createEngine(new TemplateConfig());
|
||||
Template template = engine.getTemplate(configMap.getStr("html"));
|
||||
String result = template.render(messageEmailDTO.getHtmlValues());
|
||||
// 渲染模板
|
||||
TemplateEngine engine = TemplateUtil.createEngine(new TemplateConfig());
|
||||
Template template = engine.getTemplate(configMap.getStr("html"));
|
||||
String result = template.render(messageEmailDTO.getHtmlValues());
|
||||
|
||||
Long start = System.currentTimeMillis();
|
||||
MailUtil.send(account, messageEmailDTO.getMailAddress(), messageEmailDTO.getCcList(),
|
||||
messageEmailDTO.getBccList(), messageEmailDTO.getTitle(), result, true,
|
||||
tempFileList.toArray(new File[0]));
|
||||
Long end = System.currentTimeMillis();
|
||||
// 写入日志
|
||||
SysLogDTO sysLog = SysLogUtils.getSysLog();
|
||||
sysLog.setTitle(String.format("发送邮件 %s", messageEmailDTO.getTitle()));
|
||||
sysLog.setLogType(LogTypeEnum.NORMAL.getType());
|
||||
sysLog.setServiceId(SystemConfigTypeEnum.EMAIL.getValue());
|
||||
sysLog.setParams(JacksonSensitiveFieldUtil.writeValueAsString(messageEmailDTO));
|
||||
sysLog.setTenantId(TenantContextHolder.getTenantId());
|
||||
sysLog.setTime(end - start);
|
||||
remoteLogService.saveLog(sysLog);
|
||||
// 删除临时文件
|
||||
tempFileList.forEach(FileUtil::del);
|
||||
return R.ok();
|
||||
}
|
||||
Long start = System.currentTimeMillis();
|
||||
MailUtil.send(account, messageEmailDTO.getMailAddress(), messageEmailDTO.getCcList(),
|
||||
messageEmailDTO.getBccList(), messageEmailDTO.getTitle(), result, true,
|
||||
tempFileList.toArray(new File[0]));
|
||||
Long end = System.currentTimeMillis();
|
||||
// 写入日志
|
||||
SysLogDTO sysLog = SysLogUtils.getSysLog();
|
||||
sysLog.setTitle(String.format("发送邮件 %s", messageEmailDTO.getTitle()));
|
||||
sysLog.setLogType(LogTypeEnum.NORMAL.getType());
|
||||
sysLog.setServiceId(SystemConfigTypeEnum.EMAIL.getValue());
|
||||
sysLog.setParams(JacksonSensitiveFieldUtil.writeValueAsString(messageEmailDTO));
|
||||
sysLog.setTenantId(TenantContextHolder.getTenantId());
|
||||
sysLog.setTime(end - start);
|
||||
remoteLogService.saveLog(sysLog);
|
||||
// 删除临时文件
|
||||
tempFileList.forEach(FileUtil::del);
|
||||
return R.ok();
|
||||
}
|
||||
|
||||
/**
|
||||
* 列出 Hook 业务代码
|
||||
* @param messageHookDTO 消息钩子 DTO
|
||||
* @return {@link R }
|
||||
*/
|
||||
@Override
|
||||
public R listHookBizCode(MessageHookDTO messageHookDTO) {
|
||||
List<SysSystemConfigEntity> configEntityList = sysSystemConfigMapper
|
||||
.selectList(Wrappers.<SysSystemConfigEntity>lambdaQuery()
|
||||
.eq(SysSystemConfigEntity::getConfigType, messageHookDTO.getMessageType())
|
||||
.eq(SysSystemConfigEntity::getConfigStatus, YesNoEnum.YES.getCode()));
|
||||
return R.ok(configEntityList);
|
||||
}
|
||||
/**
|
||||
* 列出 Hook 业务代码
|
||||
*
|
||||
* @param messageHookDTO 消息钩子 DTO
|
||||
* @return {@link R }
|
||||
*/
|
||||
@Override
|
||||
public R listHookBizCode(MessageHookDTO messageHookDTO) {
|
||||
List<SysSystemConfigEntity> configEntityList = sysSystemConfigMapper
|
||||
.selectList(Wrappers.<SysSystemConfigEntity>lambdaQuery()
|
||||
.eq(SysSystemConfigEntity::getConfigType, messageHookDTO.getMessageType())
|
||||
.eq(SysSystemConfigEntity::getConfigStatus, YesNoEnum.YES.getCode()));
|
||||
return R.ok(configEntityList);
|
||||
}
|
||||
|
||||
}
|
||||
+10
-1
@@ -267,12 +267,21 @@ public class SysUserServiceImpl extends ServiceImpl<SysUserMapper, SysUser> impl
|
||||
public R<Boolean> updateUserInfo(UserDTO userDto) {
|
||||
Long userId = SecurityUtils.getUser().getId();
|
||||
SysUser sysUser = new SysUser();
|
||||
sysUser.setPhone(userDto.getPhone());
|
||||
sysUser.setUserId(userId);
|
||||
sysUser.setAvatar(userDto.getAvatar());
|
||||
sysUser.setNickname(userDto.getNickname());
|
||||
sysUser.setName(userDto.getName());
|
||||
sysUser.setEmail(userDto.getEmail());
|
||||
|
||||
// 校验手机号
|
||||
if (StrUtil.isNotBlank(userDto.getPhone())) {
|
||||
Object codeObj = RedisUtils.get(CacheConstants.DEFAULT_CODE_KEY + LoginTypeEnum.SMS.getType()
|
||||
+ StringPool.AT + userDto.getPhone());
|
||||
if (!StrUtil.equals(userDto.getCode(), codeObj.toString())) {
|
||||
return R.failed(MsgUtils.getMessage(ErrorCodes.SYS_APP_SMS_ERROR));
|
||||
}
|
||||
}
|
||||
|
||||
return R.ok(this.updateById(sysUser));
|
||||
}
|
||||
|
||||
|
||||
Reference in new issue
Block a user