diff --git a/urbanops-module-garden/src/main/java/com/zteits/urbanops/module/garden/service/assigntasksinfo/AssignTasksInfoServiceImpl.java b/urbanops-module-garden/src/main/java/com/zteits/urbanops/module/garden/service/assigntasksinfo/AssignTasksInfoServiceImpl.java index ded6247..d1cd72f 100644 --- a/urbanops-module-garden/src/main/java/com/zteits/urbanops/module/garden/service/assigntasksinfo/AssignTasksInfoServiceImpl.java +++ b/urbanops-module-garden/src/main/java/com/zteits/urbanops/module/garden/service/assigntasksinfo/AssignTasksInfoServiceImpl.java @@ -36,8 +36,7 @@ import static com.zteits.urbanops.framework.common.exception.enums.GlobalErrorCo import static com.zteits.urbanops.framework.common.exception.util.ServiceExceptionUtil.exception; import static com.zteits.urbanops.framework.common.exception.util.ServiceExceptionUtil.exception0; import static com.zteits.urbanops.framework.common.util.servlet.ServletUtils.getClientIP; -import static com.zteits.urbanops.framework.security.core.util.SecurityFrameworkUtils.getLoginUserId; -import static com.zteits.urbanops.framework.security.core.util.SecurityFrameworkUtils.getLoginUserNickname; +import static com.zteits.urbanops.framework.security.core.util.SecurityFrameworkUtils.*; import static com.zteits.urbanops.module.garden.enums.ErrorCodeConstants.*; /** @@ -195,46 +194,64 @@ public class AssignTasksInfoServiceImpl implements AssignTasksInfoService { if (existingTask == null) { throw exception(ASSIGN_TASKS_INFO_NOT_EXISTS); } - AssignTasksDO assignTasksDO = assignTasksMapper.selectById(existingTask.getTaskId()); - LocalDateTime deadline = assignTasksDO.getDeadline(); - + Long companyId = existingTask.getCompanyId(); + LocalDateTime deadline = existingTask.getDeadline(); String formattedDeadline = Objects.nonNull(deadline) ? DEADLINE_FORMATTER.format(deadline) : ""; // 或 null - //填报人信息 - AdminUserRespDTO user = adminUserApi.getUser(getLoginUserId()); //用户角色 - List roles = roleApi.getRoleIdsByUserId(user.getId()); - RoleDO roleDO = roleApi.getRoleIdByRoleCode(AssignTasksConstants.ASSIGN_ROLE_KEY); - if (roleDO == null) { + List userIds = roleApi.getUserIdsByRoleCode(AssignTasksConstants.ASSIGN_ROLE_KEY); + if (CollectionUtils.isEmpty(userIds)) { //未配置 - throw exception0(BAD_REQUEST.getCode(),"系统未配置填报人角色"); + throw exception0(BAD_REQUEST.getCode(),"未配置子公司管理员角色"); } - if(!roles.contains(roleDO.getId())) { + //填报人信息 + List users = adminUserApi.getUserList(userIds); + if(CollectionUtils.isEmpty(users)) { //没有权限 - throw exception0(BAD_REQUEST.getCode(),"该用户未授权"); + throw exception0(BAD_REQUEST.getCode(),"未配置分公司管理员"); } - String phonenumber = user.getMobile(); - if (StringUtils.isEmpty(phonenumber)) { - throw exception0(BAD_REQUEST.getCode(),"该用户未配置手机号码"); + + // 收集所有匹配companyId的用户,无匹配则返回空集合(而非null) + List matchUserList = users.stream() + .filter(user -> { + // 防御性判空:过滤掉null用户或deptId为空的用户 + if (user == null || user.getDeptId() == null) { + return false; + } + // 安全比较companyId和deptId(兼容null) + return Objects.equals(companyId, user.getDeptId()); + }) + .collect(Collectors.toList()); + if (CollectionUtils.isEmpty(matchUserList)) { + exception0(BAD_REQUEST.getCode(), "未找到归属该公司的管理员"); } + + Map templateParams = new HashMap(); templateParams.put("companyName", existingTask.getCompanyName()); - templateParams.put("taskName", assignTasksDO.getTaskName()); + templateParams.put("taskName", existingTask.getTaskName()); templateParams.put("deadline", formattedDeadline); - // 5. 发送短信通知 log.info("派单发送短信 signMap: {}", JSONObject.toJSONString(templateParams)); - SmsCodeSendReqDTO reqDTO = new SmsCodeSendReqDTO(); - reqDTO.setScene(AssignTasksConstants.ASSIGN_TASK_SCENE); - reqDTO.setMobile(phonenumber);//手机号 - reqDTO.setTemplateParams(templateParams);//短信参数 - reqDTO.setCreateIp(getClientIP()); - Long sendLogId = smsCodeApi.openSendSmsCode(reqDTO); - log.info("派单发送短信 sendLogId: {}", sendLogId); + Boolean sendFlag = false; + for (AdminUserRespDTO adminUserRespDTO : matchUserList) { + String phonenumber = adminUserRespDTO.getMobile(); + if (StringUtils.isEmpty(phonenumber)) { + continue; + } + SmsCodeSendReqDTO reqDTO = new SmsCodeSendReqDTO(); + reqDTO.setScene(AssignTasksConstants.ASSIGN_TASK_SCENE); + reqDTO.setMobile(phonenumber);//手机号 + reqDTO.setTemplateParams(templateParams);//短信参数 + reqDTO.setCreateIp(getClientIP()); + smsCodeApi.openSendSmsCode(reqDTO); + log.info("提交单位任务成功,已通知填报人:手机号:{},任务ID={}", phonenumber, existingTask.getId()); + sendFlag = true; + } - if (sendLogId != null) { - log.info("提交单位任务成功,已通知填报人:手机号={},任务ID={}", phonenumber, existingTask.getId()); + if (sendFlag) { + log.info("提交单位任务成功,已通知填报人:任务ID={}", existingTask.getId()); int newRushNum = (existingTask.getRushNum() == null) ? 1: existingTask.getRushNum() + 1; //催办次数+1 @@ -243,7 +260,7 @@ public class AssignTasksInfoServiceImpl implements AssignTasksInfoService { assignTaskInfo.setRushNum(newRushNum); assignTasksInfoMapper.updateById(assignTaskInfo); } else { - throw exception(ASSIGN_TASKS_INFO_004); + throw exception0(BAD_REQUEST.getCode(),"发送短信失败"); } return 1; }