diff --git a/pigx-upms/pigx-upms-biz/src/main/java/com/pig4cloud/pigx/admin/service/impl/SysMessageServiceImpl.java b/pigx-upms/pigx-upms-biz/src/main/java/com/pig4cloud/pigx/admin/service/impl/SysMessageServiceImpl.java index a0bc73d15..cebfeb7bc 100644 --- a/pigx-upms/pigx-upms-biz/src/main/java/com/pig4cloud/pigx/admin/service/impl/SysMessageServiceImpl.java +++ b/pigx-upms/pigx-upms-biz/src/main/java/com/pig4cloud/pigx/admin/service/impl/SysMessageServiceImpl.java @@ -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 - 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.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.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.lambdaQuery() - .eq(SysMessageRelationEntity::getMsgId, messageEntity.getId())); + // 删除原有用户 + relationMapper.delete(Wrappers.lambdaQuery() + .eq(SysMessageRelationEntity::getMsgId, messageEntity.getId())); - List 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 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 pageUserMessage(Page page, SysMessageVO sysMessage) { - MPJLambdaWrapper wrapper = new MPJLambdaWrapper() - .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 pageUserMessage(Page page, SysMessageVO sysMessage) { + MPJLambdaWrapper wrapper = new MPJLambdaWrapper() + .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.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.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 userIdList = relationMapper - .selectList(Wrappers.lambdaQuery().eq(SysMessageRelationEntity::getMsgId, id)) - .stream() - .map(SysMessageRelationEntity::getUserId) - .toList(); + // 全体通知 + if (messageEntity.getAllFlag().equals(YesNoEnum.YES.getCode())) { + return SysMessageVO; + } + List userIdList = relationMapper + .selectList(Wrappers.lambdaQuery().eq(SysMessageRelationEntity::getMsgId, id)) + .stream() + .map(SysMessageRelationEntity::getUserId) + .toList(); - if (CollUtil.isNotEmpty(userIdList)) { - List 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 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 wrapper = new MPJLambdaWrapper() - .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 wrapper = new MPJLambdaWrapper() + .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 sendSmsCode(String mobile) { - List userList = userMapper - .selectList(Wrappers.query().lambda().eq(SysUser::getPhone, mobile)); + /** + * 发送手机验证码 TODO: 调用短信网关发送验证码,测试返回前端 + * @param mobile mobile + * @return code + */ + @Override + public R sendSmsCode(String mobile) { + List userList = TenantBroker + .noneAs(() -> userMapper.selectList(Wrappers.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 configEntityList = sysSystemConfigMapper - .selectList(Wrappers.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 configEntityList = sysSystemConfigMapper + .selectList(Wrappers.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 configEntityList = sysSystemConfigMapper - .selectList(Wrappers.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 configEntityList = sysSystemConfigMapper + .selectList(Wrappers.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 configEntityList = sysSystemConfigMapper - .selectList(Wrappers.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 configEntityList = sysSystemConfigMapper + .selectList(Wrappers.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 tempFileList = new ArrayList<>(); - if (CollUtil.isNotEmpty(messageEmailDTO.getAttachmentList())) { - TenantContextHolder.setTenantSkip(); - for (String fileName : messageEmailDTO.getAttachmentList()) { - SysFile sysFile = fileMapper - .selectOne(Wrappers.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 tempFileList = new ArrayList<>(); + if (CollUtil.isNotEmpty(messageEmailDTO.getAttachmentList())) { + TenantContextHolder.setTenantSkip(); + for (String fileName : messageEmailDTO.getAttachmentList()) { + SysFile sysFile = fileMapper + .selectOne(Wrappers.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 configEntityList = sysSystemConfigMapper - .selectList(Wrappers.lambdaQuery() + /** + * 列出 Hook 业务代码 + * @param messageHookDTO 消息钩子 DTO + * @return {@link R } + */ + @Override + public R listHookBizCode(MessageHookDTO messageHookDTO) { + List configEntityList = sysSystemConfigMapper + .selectList(Wrappers.lambdaQuery() .eq(SysSystemConfigEntity::getConfigType, messageHookDTO.getMessageType()) .eq(SysSystemConfigEntity::getConfigStatus, YesNoEnum.YES.getCode())); return R.ok(configEntityList); diff --git a/pigx-upms/pigx-upms-biz/src/main/java/com/pig4cloud/pigx/admin/service/impl/SysTenantServiceImpl.java b/pigx-upms/pigx-upms-biz/src/main/java/com/pig4cloud/pigx/admin/service/impl/SysTenantServiceImpl.java index 2b8aa970b..4c64aaae1 100755 --- a/pigx-upms/pigx-upms-biz/src/main/java/com/pig4cloud/pigx/admin/service/impl/SysTenantServiceImpl.java +++ b/pigx-upms/pigx-upms-biz/src/main/java/com/pig4cloud/pigx/admin/service/impl/SysTenantServiceImpl.java @@ -105,14 +105,13 @@ public class SysTenantServiceImpl extends ServiceImpl * 1. 状态正常 2. 开始时间小于等于当前时间 3. 结束时间大于等于当前时间 - * * @return */ @Override @Cacheable(value = CacheConstants.TENANT_DETAILS) public List getNormalTenant() { return baseMapper - .selectList(Wrappers.lambdaQuery().eq(SysTenant::getStatus, TenantStateEnum.NORMAL.getCode())); + .selectList(Wrappers.lambdaQuery().eq(SysTenant::getStatus, TenantStateEnum.NORMAL.getCode())); } /** @@ -120,7 +119,6 @@ public class SysTenantServiceImpl extends ServiceImpl * 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 ServiceImpllambdaQuery().in(SysDictItem::getDictId, dictIdList))); List newMenuList = menuService.list(Wrappers.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 d.setId(null)).toList()); // 处理字典项最新关联的字典ID List 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 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.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.lambdaQuery() + .eq(StrUtil.isNotBlank(menu.getPath()), SysMenu::getPath, menu.getPath()) + .or() + .eq(StrUtil.isNotBlank(menu.getPermission()), SysMenu::getPermission, menu.getPermission())); + }))); // 2. 如果旧套餐不包含差集元素则新增 List 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 ServiceImpllambdaQuery() - .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 getUserTenant() { MPJLambdaWrapper wrapper = new MPJLambdaWrapper().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 wrapper = new MPJLambdaWrapper().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 ServiceImpllambdaQuery() - .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 listTenantUser(UserDTO userDTO) { return TenantBroker.noneAs(() -> sysUserMapper.selectList(Wrappers.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 { for (Long userId : tenantUserDTO.getUserIds()) { List sysTenantUsers = sysTenantUserMapper - .selectList(Wrappers.lambdaQuery() - .eq(SysTenantUser::getTenantId, tenantId) - .eq(SysTenantUser::getUserId, userId)); + .selectList(Wrappers.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 userRoleList = sysUserRoleMapper.selectList(Wrappers.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 userDeptList = sysUserDeptMapper.selectList(Wrappers.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 userPostList = sysUserPostMapper.selectList(Wrappers.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 { // 过滤有权限配置的菜单 List sysRoles = sysRoleMapper.selectList(Wrappers.lambdaQuery()) - .stream() - .filter(role -> roleMenuMapper - .exists(Wrappers.lambdaQuery().eq(SysRoleMenu::getRoleId, role.getRoleId()))) - .toList(); + .stream() + .filter(role -> roleMenuMapper + .exists(Wrappers.lambdaQuery().eq(SysRoleMenu::getRoleId, role.getRoleId()))) + .toList(); List sysDepts = sysDeptMapper.selectList(Wrappers.lambdaQuery()); List sysPosts = sysPostMapper.selectList(Wrappers.lambdaQuery()); return Map.of("sysRoles", sysRoles, "sysDepts", sysDepts, "sysPosts", sysPosts); @@ -467,7 +459,6 @@ public class SysTenantServiceImpl extends ServiceImpllambdaQuery().in(SysTenantUser::getTenantId, CollUtil.toList(ids))); + .delete(Wrappers.lambdaQuery().in(SysTenantUser::getTenantId, CollUtil.toList(ids))); return Boolean.TRUE; } /** * 更新用户租户信息 - * * @param userDto 用户数据传输对象 * @return 更新结果 */ @@ -490,14 +480,13 @@ public class SysTenantServiceImpl extends ServiceImpl sysUserMapper.update(Wrappers.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 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.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 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 paramsMap = ParamResolver.getMap(args.toArray(new String[] {})); for (Field field : ReflectUtil.getFields(this.getClass())) { String key = StrUtil.toUnderlineCase(field.getName()).toUpperCase(); diff --git a/pigx-upms/pigx-upms-biz/src/main/java/com/pig4cloud/pigx/admin/service/impl/SysUserServiceImpl.java b/pigx-upms/pigx-upms-biz/src/main/java/com/pig4cloud/pigx/admin/service/impl/SysUserServiceImpl.java index 86094882d..6b8351555 100644 --- a/pigx-upms/pigx-upms-biz/src/main/java/com/pig4cloud/pigx/admin/service/impl/SysUserServiceImpl.java +++ b/pigx-upms/pigx-upms-biz/src/main/java/com/pig4cloud/pigx/admin/service/impl/SysUserServiceImpl.java @@ -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 impl // 执行数据插入操作 组装 UserDto for (UserExcelVO excel : excelVOList) { // 个性化校验逻辑 - List userList = this.list(); + List userList = TenantBroker.noneAs(this::list); Set errorMsg = new HashSet<>(); // 校验用户名是否存在 @@ -402,11 +403,17 @@ public class SysUserServiceImpl extends ServiceImpl 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 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 impl @Transactional(rollbackFor = Exception.class) public R registerUser(RegisterUserDTO userDto) { // 判断用户名是否存在 - boolean usernameExists = this - .exists(Wrappers.lambdaQuery().eq(SysUser::getUsername, userDto.getUsername())); + boolean usernameExists = TenantBroker + .noneAs(() -> this.exists(Wrappers.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.lambdaQuery().eq(SysUser::getPhone, userDto.getPhone())); + boolean phoneExists = TenantBroker + .noneAs(() -> this.exists(Wrappers.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 impl */ @Override @CacheEvict(value = CacheConstants.USER_DETAILS, key = "#userDto.username") - public R 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 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.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.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(); }