mirror of
http://git.pig4cloud.com/pig/pigx.git
synced 2026-11-08 12:39:05 +08:00
Merge remote-tracking branch 'origin/master'
This commit is contained in:
commit
f9e960ea1f
3 files changed
+481
-489
No files matched your search
+374
-382
@@ -43,6 +43,7 @@ import com.pig4cloud.pigx.common.core.exception.ErrorCodes;
|
||||
import com.pig4cloud.pigx.common.core.util.MsgUtils;
|
||||
import com.pig4cloud.pigx.common.core.util.R;
|
||||
import com.pig4cloud.pigx.common.data.cache.RedisUtils;
|
||||
import com.pig4cloud.pigx.common.data.tenant.TenantBroker;
|
||||
import com.pig4cloud.pigx.common.data.tenant.TenantContextHolder;
|
||||
import com.pig4cloud.pigx.common.file.core.FileTemplate;
|
||||
import com.pig4cloud.pigx.common.log.util.JacksonSensitiveFieldUtil;
|
||||
@@ -96,434 +97,425 @@ 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 = userMapper
|
||||
.selectList(Wrappers.<SysUser>query().lambda().eq(SysUser::getPhone, mobile));
|
||||
/**
|
||||
* 发送手机验证码 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)));
|
||||
|
||||
if (CollUtil.isEmpty(userList)) {
|
||||
log.info("手机号未注册:{}", mobile);
|
||||
return R.ok(Boolean.FALSE, MsgUtils.getMessage(ErrorCodes.SYS_APP_PHONE_UNREGISTERED, mobile));
|
||||
}
|
||||
if (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()
|
||||
/**
|
||||
* 列出 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);
|
||||
|
||||
+77
-89
@@ -105,14 +105,13 @@ public class SysTenantServiceImpl extends ServiceImpl<SysTenantMapper, SysTenant
|
||||
* 获取正常状态租户
|
||||
* <p>
|
||||
* 1. 状态正常 2. 开始时间小于等于当前时间 3. 结束时间大于等于当前时间
|
||||
*
|
||||
* @return
|
||||
*/
|
||||
@Override
|
||||
@Cacheable(value = CacheConstants.TENANT_DETAILS)
|
||||
public List<SysTenant> getNormalTenant() {
|
||||
return baseMapper
|
||||
.selectList(Wrappers.<SysTenant>lambdaQuery().eq(SysTenant::getStatus, TenantStateEnum.NORMAL.getCode()));
|
||||
.selectList(Wrappers.<SysTenant>lambdaQuery().eq(SysTenant::getStatus, TenantStateEnum.NORMAL.getCode()));
|
||||
}
|
||||
|
||||
/**
|
||||
@@ -120,7 +119,6 @@ public class SysTenantServiceImpl extends ServiceImpl<SysTenantMapper, SysTenant
|
||||
* <p>
|
||||
* 1. 保存租户 2. 初始化权限相关表 - sys_user - sys_role - sys_menu - sys_user_role -
|
||||
* sys_role_menu - sys_dict - sys_dict_item - sys_client_details - sys_public_params
|
||||
*
|
||||
* @param sysTenant 租户实体
|
||||
* @return
|
||||
*/
|
||||
@@ -147,7 +145,7 @@ public class SysTenantServiceImpl extends ServiceImpl<SysTenantMapper, SysTenant
|
||||
dictItemList.addAll(
|
||||
dictItemService.list(Wrappers.<SysDictItem>lambdaQuery().in(SysDictItem::getDictId, dictIdList)));
|
||||
List<SysMenu> newMenuList = menuService.list(Wrappers.<SysMenu>lambdaQuery()
|
||||
.in(SysMenu::getMenuId, StrUtil.split(sysTenant.getMenuId(), CharUtil.COMMA)));
|
||||
.in(SysMenu::getMenuId, StrUtil.split(sysTenant.getMenuId(), CharUtil.COMMA)));
|
||||
// 查询当前租户菜单
|
||||
menuList.addAll(newMenuList);
|
||||
// 查询客户端配置
|
||||
@@ -195,13 +193,13 @@ public class SysTenantServiceImpl extends ServiceImpl<SysTenantMapper, SysTenant
|
||||
dictService.saveBatch(dictList.stream().peek(d -> d.setId(null)).toList());
|
||||
// 处理字典项最新关联的字典ID
|
||||
List<SysDictItem> itemList = dictList.stream()
|
||||
.flatMap(dict -> dictItemList.stream()
|
||||
.filter(item -> item.getDictType().equals(dict.getDictType()))
|
||||
.peek(item -> {
|
||||
item.setDictId(dict.getId());
|
||||
item.setId(null);
|
||||
}))
|
||||
.toList();
|
||||
.flatMap(dict -> dictItemList.stream()
|
||||
.filter(item -> item.getDictType().equals(dict.getDictType()))
|
||||
.peek(item -> {
|
||||
item.setDictId(dict.getId());
|
||||
item.setId(null);
|
||||
}))
|
||||
.toList();
|
||||
|
||||
// 插入客户端
|
||||
clientServices.saveBatch(clientDetailsList.stream().peek(d -> d.setId(null)).toList());
|
||||
@@ -217,7 +215,6 @@ public class SysTenantServiceImpl extends ServiceImpl<SysTenantMapper, SysTenant
|
||||
|
||||
/**
|
||||
* 修改租户
|
||||
*
|
||||
* @param tenantDTO 新旧套餐数据
|
||||
* @return true/false
|
||||
*/
|
||||
@@ -248,31 +245,31 @@ public class SysTenantServiceImpl extends ServiceImpl<SysTenantMapper, SysTenant
|
||||
Collection<String> disjunctionList = CollUtil.disjunction(newMenuIdList, oldMenuIdList);
|
||||
// 1. 如果旧套餐包含差集元素则删除
|
||||
CollUtil.intersection(oldMenuIdList, disjunctionList)
|
||||
.forEach(menuId -> TenantBroker.runAs(tenantDTO.getId(), (tenantId -> {
|
||||
// 查询租户菜单元信息
|
||||
SysMenu menu = CollUtil.findOneByField(sysMenuList, SysMenu.Fields.menuId, Long.parseLong(menuId));
|
||||
.forEach(menuId -> TenantBroker.runAs(tenantDTO.getId(), (tenantId -> {
|
||||
// 查询租户菜单元信息
|
||||
SysMenu menu = CollUtil.findOneByField(sysMenuList, SysMenu.Fields.menuId, Long.parseLong(menuId));
|
||||
|
||||
// 根据path 或者 permisson 删除目标租户菜单
|
||||
menuService.remove(Wrappers.<SysMenu>lambdaQuery()
|
||||
.eq(StrUtil.isNotBlank(menu.getPath()), SysMenu::getPath, menu.getPath())
|
||||
.or()
|
||||
.eq(StrUtil.isNotBlank(menu.getPermission()), SysMenu::getPermission, menu.getPermission()));
|
||||
})));
|
||||
// 根据path 或者 permisson 删除目标租户菜单
|
||||
menuService.remove(Wrappers.<SysMenu>lambdaQuery()
|
||||
.eq(StrUtil.isNotBlank(menu.getPath()), SysMenu::getPath, menu.getPath())
|
||||
.or()
|
||||
.eq(StrUtil.isNotBlank(menu.getPermission()), SysMenu::getPermission, menu.getPermission()));
|
||||
})));
|
||||
|
||||
// 2. 如果旧套餐不包含差集元素则新增
|
||||
List<SysMenu> newTenantMenuIdList = CollUtil.subtract(disjunctionList, oldMenuIdList)
|
||||
.stream()
|
||||
.map(menuId -> TenantBroker.applyAs(tenantDTO.getId(), (tenantId -> {
|
||||
// 查询租户菜单元信息
|
||||
SysMenu menu = CollUtil.findOneByField(sysMenuList, SysMenu.Fields.menuId, Long.parseLong(menuId));
|
||||
.stream()
|
||||
.map(menuId -> TenantBroker.applyAs(tenantDTO.getId(), (tenantId -> {
|
||||
// 查询租户菜单元信息
|
||||
SysMenu menu = CollUtil.findOneByField(sysMenuList, SysMenu.Fields.menuId, Long.parseLong(menuId));
|
||||
|
||||
// 新增租户菜单,但未维护上下级关系
|
||||
SysMenu newMenu = new SysMenu();
|
||||
BeanUtils.copyProperties(menu, newMenu, SysMenu.Fields.menuId);
|
||||
menuService.save(newMenu);
|
||||
return newMenu;
|
||||
})))
|
||||
.toList();
|
||||
// 新增租户菜单,但未维护上下级关系
|
||||
SysMenu newMenu = new SysMenu();
|
||||
BeanUtils.copyProperties(menu, newMenu, SysMenu.Fields.menuId);
|
||||
menuService.save(newMenu);
|
||||
return newMenu;
|
||||
})))
|
||||
.toList();
|
||||
|
||||
// 3. 更新新增菜单上下级关系
|
||||
for (SysMenu tenantMenu : newTenantMenuIdList) {
|
||||
@@ -288,10 +285,10 @@ public class SysTenantServiceImpl extends ServiceImpl<SysTenantMapper, SysTenant
|
||||
|
||||
// 根据path 或者 permisson 查询目标父菜单
|
||||
SysMenu tenantParentMenu = menuService.getOne(Wrappers.<SysMenu>lambdaQuery()
|
||||
.eq(StrUtil.isNotBlank(parentMenu.getPath()), SysMenu::getPath, parentMenu.getPath())
|
||||
.or()
|
||||
.eq(StrUtil.isNotBlank(parentMenu.getPermission()), SysMenu::getPermission,
|
||||
parentMenu.getPermission()),
|
||||
.eq(StrUtil.isNotBlank(parentMenu.getPath()), SysMenu::getPath, parentMenu.getPath())
|
||||
.or()
|
||||
.eq(StrUtil.isNotBlank(parentMenu.getPermission()), SysMenu::getPermission,
|
||||
parentMenu.getPermission()),
|
||||
false);
|
||||
|
||||
tenantMenu.setParentId(tenantParentMenu.getMenuId());
|
||||
@@ -309,44 +306,41 @@ public class SysTenantServiceImpl extends ServiceImpl<SysTenantMapper, SysTenant
|
||||
|
||||
/**
|
||||
* 获取用户所属租户列表
|
||||
*
|
||||
* @return 用户所属租户列表
|
||||
*/
|
||||
@Override
|
||||
public List<SysTenant> getUserTenant() {
|
||||
MPJLambdaWrapper<SysTenant> wrapper = new MPJLambdaWrapper<SysTenant>().selectAll(SysTenant.class)
|
||||
.leftJoin(SysTenantUser.class, SysTenantUser::getTenantId, SysTenant::getId)
|
||||
.eq(SysTenantUser::getUserId, SecurityUtils.getUser().getId())
|
||||
.eq(SysTenant::getStatus, TenantStateEnum.NORMAL.getCode());
|
||||
.leftJoin(SysTenantUser.class, SysTenantUser::getTenantId, SysTenant::getId)
|
||||
.eq(SysTenantUser::getUserId, SecurityUtils.getUser().getId())
|
||||
.eq(SysTenant::getStatus, TenantStateEnum.NORMAL.getCode());
|
||||
|
||||
return baseMapper.selectJoinList(wrapper)
|
||||
.stream()
|
||||
.filter(tenant -> tenant.getStartTime().isBefore(LocalDateTime.now()))
|
||||
.filter(tenant -> tenant.getEndTime().isAfter(LocalDateTime.now()))
|
||||
.toList();
|
||||
.stream()
|
||||
.filter(tenant -> tenant.getStartTime().isBefore(LocalDateTime.now()))
|
||||
.filter(tenant -> tenant.getEndTime().isAfter(LocalDateTime.now()))
|
||||
.toList();
|
||||
}
|
||||
|
||||
/**
|
||||
* 获取用户租户分页信息
|
||||
*
|
||||
* @param page 分页参数
|
||||
* @param page 分页参数
|
||||
* @param userDTO 用户信息
|
||||
* @return 用户租户分页结果
|
||||
*/
|
||||
@Override
|
||||
public Page getUserTenantPage(Page page, UserDTO userDTO) {
|
||||
MPJLambdaWrapper<SysUser> wrapper = new MPJLambdaWrapper<SysUser>().selectAll(SysUser.class)
|
||||
.innerJoin(SysTenantUser.class, SysTenantUser::getUserId, SysUser::getUserId)
|
||||
.like(StrUtil.isNotBlank(userDTO.getUsername()), SysUser::getUsername, userDTO.getUsername())
|
||||
.like(StrUtil.isNotBlank(userDTO.getPhone()), SysUser::getPhone, userDTO.getPhone())
|
||||
.like(StrUtil.isNotBlank(userDTO.getEmail()), SysUser::getEmail, userDTO.getEmail())
|
||||
.eq(Objects.nonNull(userDTO.getTenantId()), SysTenantUser::getTenantId, userDTO.getTenantId());
|
||||
.innerJoin(SysTenantUser.class, SysTenantUser::getUserId, SysUser::getUserId)
|
||||
.like(StrUtil.isNotBlank(userDTO.getUsername()), SysUser::getUsername, userDTO.getUsername())
|
||||
.like(StrUtil.isNotBlank(userDTO.getPhone()), SysUser::getPhone, userDTO.getPhone())
|
||||
.like(StrUtil.isNotBlank(userDTO.getEmail()), SysUser::getEmail, userDTO.getEmail())
|
||||
.eq(Objects.nonNull(userDTO.getTenantId()), SysTenantUser::getTenantId, userDTO.getTenantId());
|
||||
return TenantBroker.noneAs(() -> sysUserMapper.selectJoinPage(page, wrapper));
|
||||
}
|
||||
|
||||
/**
|
||||
* 移除租户用户
|
||||
*
|
||||
* @param tenantUserDTO 租户用户信息
|
||||
* @return 是否移除成功
|
||||
*/
|
||||
@@ -356,8 +350,8 @@ public class SysTenantServiceImpl extends ServiceImpl<SysTenantMapper, SysTenant
|
||||
|
||||
// 删除租户用户关系
|
||||
sysTenantUserMapper.delete(Wrappers.<SysTenantUser>lambdaQuery()
|
||||
.eq(SysTenantUser::getTenantId, tenantUserDTO.getTenantId())
|
||||
.in(SysTenantUser::getUserId, userIdList));
|
||||
.eq(SysTenantUser::getTenantId, tenantUserDTO.getTenantId())
|
||||
.in(SysTenantUser::getUserId, userIdList));
|
||||
|
||||
TenantBroker.runAs(tenantUserDTO.getTenantId(), (tenantId -> {
|
||||
// 删除用户岗位
|
||||
@@ -372,19 +366,18 @@ public class SysTenantServiceImpl extends ServiceImpl<SysTenantMapper, SysTenant
|
||||
|
||||
/**
|
||||
* 根据用户信息查询租户用户列表
|
||||
*
|
||||
* @param userDTO 用户信息传输对象
|
||||
* @return 租户用户列表
|
||||
*/
|
||||
@Override
|
||||
public List<SysUser> listTenantUser(UserDTO userDTO) {
|
||||
return TenantBroker.noneAs(() -> sysUserMapper.selectList(Wrappers.<SysUser>lambdaQuery()
|
||||
.like(StrUtil.isNotBlank(userDTO.getUsername()), SysUser::getUsername, userDTO.getUsername())));
|
||||
.ne(SysUser::getTenantId, userDTO.getTenantId())
|
||||
.like(StrUtil.isNotBlank(userDTO.getUsername()), SysUser::getUsername, userDTO.getUsername())));
|
||||
}
|
||||
|
||||
/**
|
||||
* 保存租户用户信息
|
||||
*
|
||||
* @param tenantUserDTO 租户用户信息DTO
|
||||
* @return 保存是否成功
|
||||
*/
|
||||
@@ -394,9 +387,9 @@ public class SysTenantServiceImpl extends ServiceImpl<SysTenantMapper, SysTenant
|
||||
TenantBroker.runAs(tenantUserDTO.getTenantId(), (tenantId -> {
|
||||
for (Long userId : tenantUserDTO.getUserIds()) {
|
||||
List<SysTenantUser> sysTenantUsers = sysTenantUserMapper
|
||||
.selectList(Wrappers.<SysTenantUser>lambdaQuery()
|
||||
.eq(SysTenantUser::getTenantId, tenantId)
|
||||
.eq(SysTenantUser::getUserId, userId));
|
||||
.selectList(Wrappers.<SysTenantUser>lambdaQuery()
|
||||
.eq(SysTenantUser::getTenantId, tenantId)
|
||||
.eq(SysTenantUser::getUserId, userId));
|
||||
if (CollUtil.isEmpty(sysTenantUsers)) {
|
||||
// 插入租户用户关系
|
||||
SysTenantUser sysTenantUser = new SysTenantUser();
|
||||
@@ -406,8 +399,8 @@ public class SysTenantServiceImpl extends ServiceImpl<SysTenantMapper, SysTenant
|
||||
}
|
||||
|
||||
List<SysUserRole> userRoleList = sysUserRoleMapper.selectList(Wrappers.<SysUserRole>lambdaQuery()
|
||||
.eq(SysUserRole::getUserId, userId)
|
||||
.eq(SysUserRole::getRoleId, tenantUserDTO.getRoleId()));
|
||||
.eq(SysUserRole::getUserId, userId)
|
||||
.eq(SysUserRole::getRoleId, tenantUserDTO.getRoleId()));
|
||||
if (CollUtil.isEmpty(userRoleList)) {
|
||||
// 插入用户角色关系
|
||||
SysUserRole sysUserRole = new SysUserRole();
|
||||
@@ -417,8 +410,8 @@ public class SysTenantServiceImpl extends ServiceImpl<SysTenantMapper, SysTenant
|
||||
}
|
||||
|
||||
List<SysUserDept> userDeptList = sysUserDeptMapper.selectList(Wrappers.<SysUserDept>lambdaQuery()
|
||||
.eq(SysUserDept::getUserId, userId)
|
||||
.eq(SysUserDept::getDeptId, tenantUserDTO.getDeptId()));
|
||||
.eq(SysUserDept::getUserId, userId)
|
||||
.eq(SysUserDept::getDeptId, tenantUserDTO.getDeptId()));
|
||||
|
||||
if (CollUtil.isEmpty(userDeptList)) {
|
||||
// 插入用户部门关系
|
||||
@@ -429,8 +422,8 @@ public class SysTenantServiceImpl extends ServiceImpl<SysTenantMapper, SysTenant
|
||||
}
|
||||
|
||||
List<SysUserPost> userPostList = sysUserPostMapper.selectList(Wrappers.<SysUserPost>lambdaQuery()
|
||||
.eq(SysUserPost::getUserId, userId)
|
||||
.eq(SysUserPost::getPostId, tenantUserDTO.getPostId()));
|
||||
.eq(SysUserPost::getUserId, userId)
|
||||
.eq(SysUserPost::getPostId, tenantUserDTO.getPostId()));
|
||||
|
||||
if (CollUtil.isEmpty(userPostList) && Objects.nonNull(tenantUserDTO.getPostId())) {
|
||||
// 插入用户岗位关系
|
||||
@@ -446,7 +439,6 @@ public class SysTenantServiceImpl extends ServiceImpl<SysTenantMapper, SysTenant
|
||||
|
||||
/**
|
||||
* 获取租户角色列表
|
||||
*
|
||||
* @param userDTO 用户信息
|
||||
* @return 租户角色列表
|
||||
*/
|
||||
@@ -455,10 +447,10 @@ public class SysTenantServiceImpl extends ServiceImpl<SysTenantMapper, SysTenant
|
||||
return TenantBroker.applyAs(userDTO.getTenantId(), tenantId -> {
|
||||
// 过滤有权限配置的菜单
|
||||
List<SysRole> sysRoles = sysRoleMapper.selectList(Wrappers.lambdaQuery())
|
||||
.stream()
|
||||
.filter(role -> roleMenuMapper
|
||||
.exists(Wrappers.<SysRoleMenu>lambdaQuery().eq(SysRoleMenu::getRoleId, role.getRoleId())))
|
||||
.toList();
|
||||
.stream()
|
||||
.filter(role -> roleMenuMapper
|
||||
.exists(Wrappers.<SysRoleMenu>lambdaQuery().eq(SysRoleMenu::getRoleId, role.getRoleId())))
|
||||
.toList();
|
||||
List<SysDept> sysDepts = sysDeptMapper.selectList(Wrappers.lambdaQuery());
|
||||
List<SysPost> sysPosts = sysPostMapper.selectList(Wrappers.lambdaQuery());
|
||||
return Map.of("sysRoles", sysRoles, "sysDepts", sysDepts, "sysPosts", sysPosts);
|
||||
@@ -467,7 +459,6 @@ public class SysTenantServiceImpl extends ServiceImpl<SysTenantMapper, SysTenant
|
||||
|
||||
/**
|
||||
* 移除租户
|
||||
*
|
||||
* @param ids 租户ID列表
|
||||
* @return 是否移除成功
|
||||
*/
|
||||
@@ -476,13 +467,12 @@ public class SysTenantServiceImpl extends ServiceImpl<SysTenantMapper, SysTenant
|
||||
public Boolean removeTenant(Long[] ids) {
|
||||
baseMapper.deleteByIds(CollUtil.toList(ids));
|
||||
sysTenantUserMapper
|
||||
.delete(Wrappers.<SysTenantUser>lambdaQuery().in(SysTenantUser::getTenantId, CollUtil.toList(ids)));
|
||||
.delete(Wrappers.<SysTenantUser>lambdaQuery().in(SysTenantUser::getTenantId, CollUtil.toList(ids)));
|
||||
return Boolean.TRUE;
|
||||
}
|
||||
|
||||
/**
|
||||
* 更新用户租户信息
|
||||
*
|
||||
* @param userDto 用户数据传输对象
|
||||
* @return 更新结果
|
||||
*/
|
||||
@@ -490,14 +480,13 @@ public class SysTenantServiceImpl extends ServiceImpl<SysTenantMapper, SysTenant
|
||||
@CacheEvict(value = CacheConstants.USER_DETAILS, key = "#userDto.username")
|
||||
public R updateUserTenant(UserDTO userDto) {
|
||||
return R.ok(TenantBroker.noneAs(() -> sysUserMapper.update(Wrappers.<SysUser>lambdaUpdate()
|
||||
.set(SysUser::getTenantId, userDto.getTenantId())
|
||||
.eq(SysUser::getUserId, userDto.getUserId()))));
|
||||
.set(SysUser::getTenantId, userDto.getTenantId())
|
||||
.eq(SysUser::getUserId, userDto.getUserId()))));
|
||||
}
|
||||
|
||||
/**
|
||||
* 保存新的租户菜单,维护成新的菜单
|
||||
*
|
||||
* @param menuList 菜单列表
|
||||
* @param menuList 菜单列表
|
||||
* @param originParentId 原始上级
|
||||
* @param targetParentId 目标上级
|
||||
*/
|
||||
@@ -515,22 +504,21 @@ public class SysTenantServiceImpl extends ServiceImpl<SysTenantMapper, SysTenant
|
||||
|
||||
/**
|
||||
* 获取或更新当前用户的租户信息
|
||||
*
|
||||
* @return 更新后的租户ID,如果无需更新则返回null
|
||||
*/
|
||||
@Override
|
||||
public Long getOrUpdateTenant() {
|
||||
PigxUser loginUser = SecurityUtils.getUser();
|
||||
boolean match = this.getNormalTenant()
|
||||
.stream()
|
||||
.filter(tenant -> tenant.getStartTime().isBefore(LocalDateTime.now()))
|
||||
.filter(tenant -> tenant.getEndTime().isAfter(LocalDateTime.now()))
|
||||
.anyMatch(tenant -> tenant.getId().equals(loginUser.getTenantId()));
|
||||
.stream()
|
||||
.filter(tenant -> tenant.getStartTime().isBefore(LocalDateTime.now()))
|
||||
.filter(tenant -> tenant.getEndTime().isAfter(LocalDateTime.now()))
|
||||
.anyMatch(tenant -> tenant.getId().equals(loginUser.getTenantId()));
|
||||
|
||||
if (!match) {
|
||||
SysTenantUser tenantUser = sysTenantUserMapper.selectOne(Wrappers.<SysTenantUser>lambdaQuery()
|
||||
.eq(SysTenantUser::getUserId, SecurityUtils.getUser().getId())
|
||||
.ne(SysTenantUser::getTenantId, loginUser.getTenantId()), false);
|
||||
.eq(SysTenantUser::getUserId, SecurityUtils.getUser().getId())
|
||||
.ne(SysTenantUser::getTenantId, loginUser.getTenantId()), false);
|
||||
// 如果当前用户没有租户信息,则不进行任何操作
|
||||
if (Objects.isNull(tenantUser)) {
|
||||
return null;
|
||||
@@ -576,10 +564,10 @@ class TenantDefaultConfig {
|
||||
@SneakyThrows
|
||||
public TenantDefaultConfig() {
|
||||
List<String> args = Arrays.stream(ReflectUtil.getFields(this.getClass()))
|
||||
.map(Field::getName)
|
||||
.map(StrUtil::toUnderlineCase)
|
||||
.map(String::toUpperCase)
|
||||
.toList();
|
||||
.map(Field::getName)
|
||||
.map(StrUtil::toUnderlineCase)
|
||||
.map(String::toUpperCase)
|
||||
.toList();
|
||||
Map<String, Object> paramsMap = ParamResolver.getMap(args.toArray(new String[] {}));
|
||||
for (Field field : ReflectUtil.getFields(this.getClass())) {
|
||||
String key = StrUtil.toUnderlineCase(field.getName()).toUpperCase();
|
||||
|
||||
+30
-18
@@ -47,6 +47,7 @@ import com.pig4cloud.pigx.common.core.util.R;
|
||||
import com.pig4cloud.pigx.common.data.cache.RedisUtils;
|
||||
import com.pig4cloud.pigx.common.data.datascope.DataScope;
|
||||
import com.pig4cloud.pigx.common.data.resolver.ParamResolver;
|
||||
import com.pig4cloud.pigx.common.data.tenant.TenantBroker;
|
||||
import com.pig4cloud.pigx.common.excel.vo.ErrorMessage;
|
||||
import com.pig4cloud.pigx.common.security.service.PigxUser;
|
||||
import com.pig4cloud.pigx.common.security.util.SecurityUtils;
|
||||
@@ -391,7 +392,7 @@ public class SysUserServiceImpl extends ServiceImpl<SysUserMapper, SysUser> impl
|
||||
// 执行数据插入操作 组装 UserDto
|
||||
for (UserExcelVO excel : excelVOList) {
|
||||
// 个性化校验逻辑
|
||||
List<SysUser> userList = this.list();
|
||||
List<SysUser> userList = TenantBroker.noneAs(this::list);
|
||||
|
||||
Set<String> errorMsg = new HashSet<>();
|
||||
// 校验用户名是否存在
|
||||
@@ -402,11 +403,17 @@ public class SysUserServiceImpl extends ServiceImpl<SysUserMapper, SysUser> impl
|
||||
errorMsg.add(MsgUtils.getMessage(ErrorCodes.SYS_USER_USERNAME_EXISTING, excel.getUsername()));
|
||||
}
|
||||
|
||||
// 校验手机号是否存在
|
||||
boolean exsitPhone = userList.stream().anyMatch(sysUser -> excel.getPhone().equals(sysUser.getPhone()));
|
||||
if (exsitPhone) {
|
||||
errorMsg.add(MsgUtils.getMessage(ErrorCodes.SYS_USER_PHONE_EXISTING, excel.getPhone()));
|
||||
}
|
||||
|
||||
// 判断输入的部门名称列表是否合法
|
||||
Optional<SysDept> deptOptional = deptList.stream()
|
||||
.filter(dept -> excel.getDeptNameList().equals(dept.getName()))
|
||||
.findFirst();
|
||||
if (!deptOptional.isPresent()) {
|
||||
if (deptOptional.isEmpty()) {
|
||||
errorMsg.add(MsgUtils.getMessage(ErrorCodes.SYS_DEPT_DEPTNAME_INEXISTENCE, excel.getDeptNameList()));
|
||||
}
|
||||
|
||||
@@ -488,15 +495,16 @@ public class SysUserServiceImpl extends ServiceImpl<SysUserMapper, SysUser> impl
|
||||
@Transactional(rollbackFor = Exception.class)
|
||||
public R<Boolean> registerUser(RegisterUserDTO userDto) {
|
||||
// 判断用户名是否存在
|
||||
boolean usernameExists = this
|
||||
.exists(Wrappers.<SysUser>lambdaQuery().eq(SysUser::getUsername, userDto.getUsername()));
|
||||
boolean usernameExists = TenantBroker
|
||||
.noneAs(() -> this.exists(Wrappers.<SysUser>lambdaQuery().eq(SysUser::getUsername, userDto.getUsername())));
|
||||
if (usernameExists) {
|
||||
String message = MsgUtils.getMessage(ErrorCodes.SYS_USER_USERNAME_EXISTING, userDto.getUsername());
|
||||
return R.failed(message);
|
||||
}
|
||||
|
||||
// 判断手机号是否存在
|
||||
boolean phoneExists = this.exists(Wrappers.<SysUser>lambdaQuery().eq(SysUser::getPhone, userDto.getPhone()));
|
||||
boolean phoneExists = TenantBroker
|
||||
.noneAs(() -> this.exists(Wrappers.<SysUser>lambdaQuery().eq(SysUser::getPhone, userDto.getPhone())));
|
||||
if (phoneExists) {
|
||||
String message = MsgUtils.getMessage(ErrorCodes.SYS_USER_PHONE_EXISTING, userDto.getPhone());
|
||||
return R.failed(message);
|
||||
@@ -626,7 +634,7 @@ public class SysUserServiceImpl extends ServiceImpl<SysUserMapper, SysUser> impl
|
||||
*/
|
||||
@Override
|
||||
@CacheEvict(value = CacheConstants.USER_DETAILS, key = "#userDto.username")
|
||||
public R<Boolean> resetUserPassword(RegisterUserDTO userDto) {
|
||||
public R resetUserPassword(RegisterUserDTO userDto) {
|
||||
// 校验密码
|
||||
R checkedPassword = checkPassword(userDto.getUsername(), userDto.getPassword());
|
||||
if (!checkedPassword.isOk()) {
|
||||
@@ -666,19 +674,23 @@ public class SysUserServiceImpl extends ServiceImpl<SysUserMapper, SysUser> impl
|
||||
return R.failed("验证码错误");
|
||||
}
|
||||
|
||||
String username = lambdaQuery().select(SysUser::getUsername)
|
||||
.eq(SysUser::getPhone, userDto.getPhone())
|
||||
.one()
|
||||
.getUsername();
|
||||
TenantBroker.noneAs(() -> {
|
||||
String username = lambdaQuery().select(SysUser::getUsername)
|
||||
.eq(SysUser::getPhone, userDto.getPhone())
|
||||
.one()
|
||||
.getUsername();
|
||||
|
||||
// 重置密码
|
||||
String password = ENCODER.encode(userDto.getNewpassword1());
|
||||
this.update(Wrappers.<SysUser>lambdaUpdate()
|
||||
.set(SysUser::getPassword, password)
|
||||
.set(SysUser::getPasswordModifyTime, LocalDateTime.now())
|
||||
.set(SysUser::getPasswordExpireFlag, CommonConstants.STATUS_NORMAL)
|
||||
.eq(SysUser::getPhone, userDto.getPhone()));
|
||||
cacheManager.getCache(CacheConstants.USER_DETAILS).evict(username);
|
||||
return username;
|
||||
});
|
||||
|
||||
// 重置密码
|
||||
String password = ENCODER.encode(userDto.getNewpassword1());
|
||||
this.update(Wrappers.<SysUser>lambdaUpdate()
|
||||
.set(SysUser::getPassword, password)
|
||||
.set(SysUser::getPasswordModifyTime, LocalDateTime.now())
|
||||
.set(SysUser::getPasswordExpireFlag, CommonConstants.STATUS_NORMAL)
|
||||
.eq(SysUser::getPhone, userDto.getPhone()));
|
||||
cacheManager.getCache(CacheConstants.USER_DETAILS).evict(username);
|
||||
return R.ok();
|
||||
}
|
||||
|
||||
|
||||
Reference in new issue
Block a user