Commit 8facf901847e55885988a3827b3d8e0388b4f7c4

Authored by 王富生
2 parents 39641231 ccefd0fc

Merge remote-tracking branch 'origin/dev' into dev

Showing 20 changed files with 298 additions and 60 deletions
urbanops-module-bpm/src/main/java/com/zteits/urbanops/module/bpm/api/task/BpmProcessTaskApi.java
1 package com.zteits.urbanops.module.bpm.api.task; 1 package com.zteits.urbanops.module.bpm.api.task;
2 2
  3 +import com.zteits.urbanops.module.bpm.controller.admin.task.vo.task.BpmTaskApproveReqVO;
  4 +import com.zteits.urbanops.module.bpm.controller.admin.task.vo.task.BpmTaskReturnReqVO;
  5 +import jakarta.validation.Valid;
3 import jakarta.validation.constraints.NotEmpty; 6 import jakarta.validation.constraints.NotEmpty;
  7 +import org.springframework.web.bind.annotation.RequestBody;
4 8
5 /** 9 /**
6 * 流程任务 Api 接口 10 * 流程任务 Api 接口
@@ -18,4 +22,18 @@ public interface BpmProcessTaskApi { @@ -18,4 +22,18 @@ public interface BpmProcessTaskApi {
18 void triggerTask(@NotEmpty(message = "流程实例的编号不能为空") String processInstanceId, 22 void triggerTask(@NotEmpty(message = "流程实例的编号不能为空") String processInstanceId,
19 @NotEmpty(message = "任务 Key 不能为空") String taskDefineKey); 23 @NotEmpty(message = "任务 Key 不能为空") String taskDefineKey);
20 24
  25 + /**
  26 + * 通过
  27 + *
  28 + * @param reqVO 流程实例编号
  29 + */
  30 + void approveTask(@Valid BpmTaskApproveReqVO reqVO);
  31 +
  32 + /**
  33 + * 退回
  34 + *
  35 + * @param reqVO 流程实例编号
  36 + */
  37 + void returnTask(@Valid BpmTaskReturnReqVO reqVO);
  38 +
21 } 39 }
urbanops-module-bpm/src/main/java/com/zteits/urbanops/module/bpm/api/task/BpmProcessTaskApiImpl.java
1 package com.zteits.urbanops.module.bpm.api.task; 1 package com.zteits.urbanops.module.bpm.api.task;
2 2
  3 +import com.zteits.urbanops.module.bpm.controller.admin.task.vo.task.BpmTaskApproveReqVO;
  4 +import com.zteits.urbanops.module.bpm.controller.admin.task.vo.task.BpmTaskReturnReqVO;
3 import com.zteits.urbanops.module.bpm.service.task.BpmTaskService; 5 import com.zteits.urbanops.module.bpm.service.task.BpmTaskService;
4 import jakarta.annotation.Resource; 6 import jakarta.annotation.Resource;
5 import org.springframework.stereotype.Service; 7 import org.springframework.stereotype.Service;
6 import org.springframework.validation.annotation.Validated; 8 import org.springframework.validation.annotation.Validated;
7 9
  10 +import static com.zteits.urbanops.framework.web.core.util.WebFrameworkUtils.getLoginUserId;
  11 +
8 /** 12 /**
9 * 流程任务 Api 实现类 13 * 流程任务 Api 实现类
10 * 14 *
@@ -22,4 +26,14 @@ public class BpmProcessTaskApiImpl implements BpmProcessTaskApi { @@ -22,4 +26,14 @@ public class BpmProcessTaskApiImpl implements BpmProcessTaskApi {
22 bpmTaskService.triggerTask(processInstanceId, taskDefineKey); 26 bpmTaskService.triggerTask(processInstanceId, taskDefineKey);
23 } 27 }
24 28
  29 + @Override
  30 + public void approveTask(BpmTaskApproveReqVO reqVO) {
  31 + bpmTaskService.approveTask(getLoginUserId(), reqVO);
  32 + }
  33 +
  34 + @Override
  35 + public void returnTask(BpmTaskReturnReqVO reqVO) {
  36 + bpmTaskService.returnTask(getLoginUserId(), reqVO);
  37 + }
  38 +
25 } 39 }
urbanops-module-garden/pom.xml
@@ -126,6 +126,12 @@ @@ -126,6 +126,12 @@
126 <artifactId>urbanops-module-system</artifactId> 126 <artifactId>urbanops-module-system</artifactId>
127 <version>${revision}</version> 127 <version>${revision}</version>
128 </dependency> 128 </dependency>
  129 + <dependency>
  130 + <groupId>com.zteits.boot</groupId>
  131 + <artifactId>urbanops-module-bpm</artifactId>
  132 + <version>2025.10-SNAPSHOT</version>
  133 + <scope>compile</scope>
  134 + </dependency>
129 </dependencies> 135 </dependencies>
130 136
131 </project> 137 </project>
urbanops-module-garden/src/main/java/com/zteits/urbanops/module/garden/controller/admin/assigntasksinfo/AssignTasksInfoController.java
@@ -9,6 +9,7 @@ import com.zteits.urbanops.framework.excel.core.util.ExcelUtils; @@ -9,6 +9,7 @@ import com.zteits.urbanops.framework.excel.core.util.ExcelUtils;
9 import com.zteits.urbanops.module.garden.controller.admin.assigntasksinfo.vo.AssignTasksInfoPageReqVO; 9 import com.zteits.urbanops.module.garden.controller.admin.assigntasksinfo.vo.AssignTasksInfoPageReqVO;
10 import com.zteits.urbanops.module.garden.controller.admin.assigntasksinfo.vo.AssignTasksInfoRespVO; 10 import com.zteits.urbanops.module.garden.controller.admin.assigntasksinfo.vo.AssignTasksInfoRespVO;
11 import com.zteits.urbanops.module.garden.controller.admin.assigntasksinfo.vo.AssignTasksInfoSaveReqVO; 11 import com.zteits.urbanops.module.garden.controller.admin.assigntasksinfo.vo.AssignTasksInfoSaveReqVO;
  12 +import com.zteits.urbanops.module.garden.controller.admin.assigntasksinfo.vo.AssignTasksInfoUpdReqVO;
12 import com.zteits.urbanops.module.garden.convert.AssignTaskConvert; 13 import com.zteits.urbanops.module.garden.convert.AssignTaskConvert;
13 import com.zteits.urbanops.module.garden.dal.dataobject.assigntasks.AssignTasksDO; 14 import com.zteits.urbanops.module.garden.dal.dataobject.assigntasks.AssignTasksDO;
14 import com.zteits.urbanops.module.garden.dal.dataobject.assigntasksinfo.AssignTasksInfoDO; 15 import com.zteits.urbanops.module.garden.dal.dataobject.assigntasksinfo.AssignTasksInfoDO;
@@ -160,7 +161,7 @@ public class AssignTasksInfoController { @@ -160,7 +161,7 @@ public class AssignTasksInfoController {
160 @PreAuthorize("@ss.hasPermission('garden:assign-tasks-info:update')") 161 @PreAuthorize("@ss.hasPermission('garden:assign-tasks-info:update')")
161 @Operation(summary = "派单任务-驳回") 162 @Operation(summary = "派单任务-驳回")
162 @PutMapping(value = "/reject") 163 @PutMapping(value = "/reject")
163 - public CommonResult reject(@RequestBody AssignTasksInfoSaveReqVO assignTaskCompany) { 164 + public CommonResult reject(@RequestBody AssignTasksInfoUpdReqVO assignTaskCompany) {
164 return success(assignTasksInfoService.rejectAssignTaskCompany(assignTaskCompany)); 165 return success(assignTasksInfoService.rejectAssignTaskCompany(assignTaskCompany));
165 } 166 }
166 167
@@ -168,7 +169,7 @@ public class AssignTasksInfoController { @@ -168,7 +169,7 @@ public class AssignTasksInfoController {
168 @PreAuthorize("@ss.hasPermission('garden:assign-tasks-info:update')") 169 @PreAuthorize("@ss.hasPermission('garden:assign-tasks-info:update')")
169 @Operation(summary = "派单任务-催交") 170 @Operation(summary = "派单任务-催交")
170 @PutMapping(value = "/submission") 171 @PutMapping(value = "/submission")
171 - public CommonResult submission(@RequestBody AssignTasksInfoSaveReqVO assignTaskCompany) { 172 + public CommonResult submission(@RequestBody AssignTasksInfoUpdReqVO assignTaskCompany) {
172 return success(assignTasksInfoService.submissionAssignTaskCompany(assignTaskCompany)); 173 return success(assignTasksInfoService.submissionAssignTaskCompany(assignTaskCompany));
173 } 174 }
174 175
@@ -176,7 +177,7 @@ public class AssignTasksInfoController { @@ -176,7 +177,7 @@ public class AssignTasksInfoController {
176 @PreAuthorize("@ss.hasPermission('garden:assign-tasks-info:update')") 177 @PreAuthorize("@ss.hasPermission('garden:assign-tasks-info:update')")
177 @Operation(summary = "派单任务-反馈") 178 @Operation(summary = "派单任务-反馈")
178 @PutMapping(value = "/feedback") 179 @PutMapping(value = "/feedback")
179 - public CommonResult feedback(@RequestBody AssignTasksInfoSaveReqVO assignTaskCompany) { 180 + public CommonResult feedback(@RequestBody AssignTasksInfoUpdReqVO assignTaskCompany) {
180 return success(assignTasksInfoService.feedbackAssignTaskCompany(assignTaskCompany)); 181 return success(assignTasksInfoService.feedbackAssignTaskCompany(assignTaskCompany));
181 } 182 }
182 } 183 }
urbanops-module-garden/src/main/java/com/zteits/urbanops/module/garden/controller/admin/assigntasksinfo/vo/AssignTasksInfoUpdReqVO.java 0 → 100644
  1 +package com.zteits.urbanops.module.garden.controller.admin.assigntasksinfo.vo;
  2 +
  3 +import io.swagger.v3.oas.annotations.media.Schema;
  4 +import jakarta.validation.constraints.NotEmpty;
  5 +import jakarta.validation.constraints.NotNull;
  6 +import lombok.Data;
  7 +
  8 +import java.time.LocalDateTime;
  9 +import java.util.List;
  10 +
  11 +@Schema(description = "管理后台 - 派单任务-单位关联表(记录单位接收派单后的执行详情)新增/修改 Request VO")
  12 +@Data
  13 +public class AssignTasksInfoUpdReqVO {
  14 +
  15 + @Schema(description = "自增ID", requiredMode = Schema.RequiredMode.REQUIRED, example = "12148")
  16 + private Long id;
  17 + @Schema(description = "驳回备注(当finish=2时,说明驳回原因)", example = "你说的对")
  18 + private String rejectRemark;
  19 +
  20 + @Schema(description = "备注", example = "你猜")
  21 + private String remark;
  22 + @Schema(description = "单位提交的任务文件路径(如:填报表格、现场照片等)")
  23 + private List<String> dataFile;
  24 +
  25 +}
urbanops-module-garden/src/main/java/com/zteits/urbanops/module/garden/dal/dataobject/assigntasks/AssignTasksDO.java
@@ -58,6 +58,8 @@ public class AssignTasksDO extends BaseDO { @@ -58,6 +58,8 @@ public class AssignTasksDO extends BaseDO {
58 */ 58 */
59 private String note; 59 private String note;
60 60
  61 + /*流程id*/
  62 + private String processInstanceId;
61 63
62 @Data 64 @Data
63 public static class TemplateFileDO implements Serializable { 65 public static class TemplateFileDO implements Serializable {
urbanops-module-garden/src/main/java/com/zteits/urbanops/module/garden/enums/AssignTasksConstants.java
@@ -31,4 +31,8 @@ public class AssignTasksConstants { @@ -31,4 +31,8 @@ public class AssignTasksConstants {
31 public static final int ASSIGN_TASK_SCENE = 6; 31 public static final int ASSIGN_TASK_SCENE = 6;
32 /*办理人角色*/ 32 /*办理人角色*/
33 public static final String ASSIGN_ROLE_KEY = "zgs_leader"; 33 public static final String ASSIGN_ROLE_KEY = "zgs_leader";
  34 + /**
  35 + * bpm流程标识 任务管理
  36 + */
  37 + public static final String ASSIGN_TASK_PROCESS = "common_assign_task";
34 } 38 }
urbanops-module-garden/src/main/java/com/zteits/urbanops/module/garden/service/assigntasks/AssignTasksServiceImpl.java
@@ -4,6 +4,9 @@ import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; @@ -4,6 +4,9 @@ import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
4 import com.baomidou.mybatisplus.core.toolkit.Wrappers; 4 import com.baomidou.mybatisplus.core.toolkit.Wrappers;
5 import com.zteits.urbanops.framework.common.pojo.PageResult; 5 import com.zteits.urbanops.framework.common.pojo.PageResult;
6 import com.zteits.urbanops.framework.common.util.object.BeanUtils; 6 import com.zteits.urbanops.framework.common.util.object.BeanUtils;
  7 +import com.zteits.urbanops.framework.security.core.util.SecurityFrameworkUtils;
  8 +import com.zteits.urbanops.module.bpm.api.task.BpmProcessInstanceApi;
  9 +import com.zteits.urbanops.module.bpm.api.task.dto.BpmProcessInstanceCreateReqDTO;
7 import com.zteits.urbanops.module.garden.controller.admin.assigntasks.vo.AssignTasksPageReqVO; 10 import com.zteits.urbanops.module.garden.controller.admin.assigntasks.vo.AssignTasksPageReqVO;
8 import com.zteits.urbanops.module.garden.controller.admin.assigntasks.vo.AssignTasksSaveReqVO; 11 import com.zteits.urbanops.module.garden.controller.admin.assigntasks.vo.AssignTasksSaveReqVO;
9 import com.zteits.urbanops.module.garden.dal.dataobject.assigntasks.AssignTasksDO; 12 import com.zteits.urbanops.module.garden.dal.dataobject.assigntasks.AssignTasksDO;
@@ -12,8 +15,9 @@ import com.zteits.urbanops.module.garden.dal.mysql.assigntasks.AssignTasksMapper @@ -12,8 +15,9 @@ import com.zteits.urbanops.module.garden.dal.mysql.assigntasks.AssignTasksMapper
12 import com.zteits.urbanops.module.garden.dal.mysql.assigntasksinfo.AssignTasksInfoMapper; 15 import com.zteits.urbanops.module.garden.dal.mysql.assigntasksinfo.AssignTasksInfoMapper;
13 import com.zteits.urbanops.module.garden.enums.AssignTasksConstants; 16 import com.zteits.urbanops.module.garden.enums.AssignTasksConstants;
14 import com.zteits.urbanops.module.garden.service.assigntasksinfo.AssignTasksInfoService; 17 import com.zteits.urbanops.module.garden.service.assigntasksinfo.AssignTasksInfoService;
15 -import com.zteits.urbanops.module.system.api.dept.DeptApi;  
16 -import com.zteits.urbanops.module.system.api.dept.dto.DeptRespDTO; 18 +import com.zteits.urbanops.module.system.api.permission.RoleApi;
  19 +import com.zteits.urbanops.module.system.api.user.AdminUserApi;
  20 +import com.zteits.urbanops.module.system.api.user.dto.AdminUserRespDTO;
17 import jakarta.annotation.Resource; 21 import jakarta.annotation.Resource;
18 import lombok.extern.slf4j.Slf4j; 22 import lombok.extern.slf4j.Slf4j;
19 import org.springframework.stereotype.Service; 23 import org.springframework.stereotype.Service;
@@ -22,13 +26,14 @@ import org.springframework.util.CollectionUtils; @@ -22,13 +26,14 @@ import org.springframework.util.CollectionUtils;
22 import org.springframework.validation.annotation.Validated; 26 import org.springframework.validation.annotation.Validated;
23 27
24 import java.time.LocalDateTime; 28 import java.time.LocalDateTime;
25 -import java.util.ArrayList;  
26 -import java.util.List;  
27 -import java.util.Objects; 29 +import java.util.*;
  30 +import java.util.function.Function;
28 import java.util.stream.Collectors; 31 import java.util.stream.Collectors;
29 32
  33 +import static com.zteits.urbanops.framework.common.exception.enums.GlobalErrorCodeConstants.BAD_REQUEST;
30 import static com.zteits.urbanops.framework.common.exception.util.ServiceExceptionUtil.exception; 34 import static com.zteits.urbanops.framework.common.exception.util.ServiceExceptionUtil.exception;
31 -import static com.zteits.urbanops.framework.security.core.util.SecurityFrameworkUtils.*; 35 +import static com.zteits.urbanops.framework.common.exception.util.ServiceExceptionUtil.exception0;
  36 +import static com.zteits.urbanops.framework.security.core.util.SecurityFrameworkUtils.getCompanyId;
32 import static com.zteits.urbanops.module.garden.enums.ErrorCodeConstants.ASSIGN_TASKS_NOT_EXISTS; 37 import static com.zteits.urbanops.module.garden.enums.ErrorCodeConstants.ASSIGN_TASKS_NOT_EXISTS;
33 import static com.zteits.urbanops.module.garden.enums.ErrorCodeConstants.ASSIGN_TASKS_NOT_EXISTS_002; 38 import static com.zteits.urbanops.module.garden.enums.ErrorCodeConstants.ASSIGN_TASKS_NOT_EXISTS_002;
34 39
@@ -53,9 +58,15 @@ public class AssignTasksServiceImpl implements AssignTasksService { @@ -53,9 +58,15 @@ public class AssignTasksServiceImpl implements AssignTasksService {
53 58
54 @Resource 59 @Resource
55 private AssignTasksInfoMapper assignTasksInfoMapper; 60 private AssignTasksInfoMapper assignTasksInfoMapper;
  61 + //@Resource
  62 + //private DeptApi deptApi;
56 @Resource 63 @Resource
57 - private DeptApi deptApi; 64 + private RoleApi roleApi;
  65 + @Resource
  66 + AdminUserApi userApi;
58 67
  68 + @Resource
  69 + private BpmProcessInstanceApi processInstanceApi;
59 70
60 @Transactional(rollbackFor = Exception.class) 71 @Transactional(rollbackFor = Exception.class)
61 @Override 72 @Override
@@ -65,8 +76,8 @@ public class AssignTasksServiceImpl implements AssignTasksService { @@ -65,8 +76,8 @@ public class AssignTasksServiceImpl implements AssignTasksService {
65 assignTasksMapper.insert(assignTasks); 76 assignTasksMapper.insert(assignTasks);
66 //保存单位明细 77 //保存单位明细
67 assignTasksInfoService.saveAssignTasksInfos(createReqVO.getCompanyIds(), assignTasks); 78 assignTasksInfoService.saveAssignTasksInfos(createReqVO.getCompanyIds(), assignTasks);
68 - //保存单位明细  
69 - 79 + //发起工作流
  80 + //processInstance(createReqVO, assignTasks.getId());
70 // 返回 81 // 返回
71 return assignTasks.getId(); 82 return assignTasks.getId();
72 } 83 }
@@ -120,9 +131,7 @@ public class AssignTasksServiceImpl implements AssignTasksService { @@ -120,9 +131,7 @@ public class AssignTasksServiceImpl implements AssignTasksService {
120 // 删除 131 // 删除
121 assignTasksMapper.deleteById(id); 132 assignTasksMapper.deleteById(id);
122 //删除关联的明细 133 //删除关联的明细
123 - List<Long> ids = new ArrayList<>();  
124 - ids.add(id);  
125 - assiAssignTasksInfoMapper.deleteAssignTaskInfoByTaskId(ids); 134 + assiAssignTasksInfoMapper.deleteAssignTaskInfoByTaskId(Arrays.asList(id));
126 } 135 }
127 136
128 @Override 137 @Override
@@ -174,8 +183,6 @@ public class AssignTasksServiceImpl implements AssignTasksService { @@ -174,8 +183,6 @@ public class AssignTasksServiceImpl implements AssignTasksService {
174 if(allSubTaskFinished) { 183 if(allSubTaskFinished) {
175 assignTasks.setParentFinish(AssignTasksConstants.ASSIGN_TASK_FINISH_1); 184 assignTasks.setParentFinish(AssignTasksConstants.ASSIGN_TASK_FINISH_1);
176 assignTasks.setFinishTime(LocalDateTime.now()); 185 assignTasks.setFinishTime(LocalDateTime.now());
177 - assignTasks.setUpdateTime(LocalDateTime.now());  
178 - assignTasks.setUpdater(String.valueOf(getLoginUserId()));  
179 assignTasksMapper.updateById(assignTasks); 186 assignTasksMapper.updateById(assignTasks);
180 } else { 187 } else {
181 throw exception(ASSIGN_TASKS_NOT_EXISTS_002); 188 throw exception(ASSIGN_TASKS_NOT_EXISTS_002);
@@ -242,4 +249,65 @@ public class AssignTasksServiceImpl implements AssignTasksService { @@ -242,4 +249,65 @@ public class AssignTasksServiceImpl implements AssignTasksService {
242 return updatedCount; 249 return updatedCount;
243 } 250 }
244 251
  252 + /**
  253 + * @Author wangqian
  254 + * @Description 创建工作流
  255 + * @Date 2025/12/14 10:46
  256 + * @Param createReqVO
  257 + * @param id
  258 + * @Return void
  259 + */
  260 + private void processInstance(AssignTasksSaveReqVO createReqVO, Long id){
  261 + //流程处理人
  262 +// List<Long> userIds = roleApi.getUserIdsByRoleCode(AssignTasksConstants.ASSIGN_ROLE_KEY);
  263 +// if (userIds == null) {
  264 +// throw exception0(BAD_REQUEST.getCode(),"上报人未配置");
  265 +// }
  266 +// List<String> companyIdStrs = createReqVO.getCompanyIds();
  267 +//
  268 +// List<AdminUserRespDTO> users = userApi.getUserList(userIds);
  269 +// Map<Long, List<AdminUserRespDTO>> deptUserMap = users.stream()
  270 +// .filter(user -> user.getDeptId() != null)
  271 +// .collect(Collectors.groupingBy(AdminUserRespDTO::getDeptId));
  272 +// //转换公司ID为Long并校验存在性
  273 +// Set<Long> companyIdSet = new HashSet<>();
  274 +// for (String companyIdStr : companyIdStrs) {
  275 +// Long companyId = Long.parseLong(companyIdStr);
  276 +// companyIdSet.add(companyId);
  277 +// if (!deptUserMap.containsKey(companyId)) {
  278 +// throw exception0(BAD_REQUEST.getCode(), "上报人未配置");
  279 +// }
  280 +// }
  281 +// //提取每个部门的第一个用户
  282 +// List<AdminUserRespDTO> distinctUsers = deptUserMap.entrySet().stream()
  283 +// .filter(entry -> companyIdSet.contains(entry.getKey())) // 仅保留目标公司的用户
  284 +// .map(entry -> entry.getValue().get(0))
  285 +// .collect(Collectors.toList());
  286 +//
  287 +// // 5. 提取用户ID列表
  288 +// List<Long> userIds = distinctUsers.stream().map(AdminUserRespDTO::getId).collect(Collectors.toList());
  289 +
  290 + List<Long> userIds = new ArrayList<>();
  291 + userIds.add(148L);
  292 + userIds.add(151L);
  293 + //发起工作流
  294 + Map<String, List<Long>> startUserSelectAssignees = new HashMap<>();
  295 + startUserSelectAssignees.put("Activity_1r880r6",userIds);
  296 +
  297 + // 发起 BPM 流程
  298 + Map<String, Object> processInstanceVariables = new HashMap<>();
  299 + processInstanceVariables.put("taskName", createReqVO.getTaskName());
  300 + processInstanceVariables.put("taskType", createReqVO.getTaskType());
  301 + processInstanceVariables.put("deadline", createReqVO.getDeadline());
  302 + String processInstanceId = processInstanceApi.createProcessInstance(SecurityFrameworkUtils.getLoginUserId(),
  303 + new BpmProcessInstanceCreateReqDTO().setProcessDefinitionKey(AssignTasksConstants.ASSIGN_TASK_PROCESS)
  304 + .setVariables(processInstanceVariables)
  305 + .setBusinessKey(String.valueOf(id))
  306 + .setStartUserSelectAssignees(startUserSelectAssignees));
  307 +
  308 + // 将工作流的编号,更新到 工单中
  309 + assignTasksMapper.updateById(new AssignTasksDO().setId(id).setProcessInstanceId(processInstanceId));
  310 +
  311 + }
  312 +
245 } 313 }
urbanops-module-garden/src/main/java/com/zteits/urbanops/module/garden/service/assigntasksinfo/AssignTasksInfoService.java
@@ -3,6 +3,7 @@ package com.zteits.urbanops.module.garden.service.assigntasksinfo; @@ -3,6 +3,7 @@ package com.zteits.urbanops.module.garden.service.assigntasksinfo;
3 import com.zteits.urbanops.framework.common.pojo.PageResult; 3 import com.zteits.urbanops.framework.common.pojo.PageResult;
4 import com.zteits.urbanops.module.garden.controller.admin.assigntasksinfo.vo.AssignTasksInfoPageReqVO; 4 import com.zteits.urbanops.module.garden.controller.admin.assigntasksinfo.vo.AssignTasksInfoPageReqVO;
5 import com.zteits.urbanops.module.garden.controller.admin.assigntasksinfo.vo.AssignTasksInfoSaveReqVO; 5 import com.zteits.urbanops.module.garden.controller.admin.assigntasksinfo.vo.AssignTasksInfoSaveReqVO;
  6 +import com.zteits.urbanops.module.garden.controller.admin.assigntasksinfo.vo.AssignTasksInfoUpdReqVO;
6 import com.zteits.urbanops.module.garden.dal.dataobject.assigntasks.AssignTasksDO; 7 import com.zteits.urbanops.module.garden.dal.dataobject.assigntasks.AssignTasksDO;
7 import com.zteits.urbanops.module.garden.dal.dataobject.assigntasksinfo.AssignTasksInfoDO; 8 import com.zteits.urbanops.module.garden.dal.dataobject.assigntasksinfo.AssignTasksInfoDO;
8 import jakarta.validation.Valid; 9 import jakarta.validation.Valid;
@@ -86,19 +87,19 @@ public interface AssignTasksInfoService { @@ -86,19 +87,19 @@ public interface AssignTasksInfoService {
86 * @Date 2025/8/22 19:53 87 * @Date 2025/8/22 19:53
87 * @Return int 88 * @Return int
88 */ 89 */
89 - public int rejectAssignTaskCompany(@Valid AssignTasksInfoSaveReqVO tdAssignTaskCompany); 90 + public int rejectAssignTaskCompany(@Valid AssignTasksInfoUpdReqVO tdAssignTaskCompany);
90 /** 91 /**
91 * @Author wangqian 92 * @Author wangqian
92 * @Description 派单提醒 93 * @Description 派单提醒
93 * @Date 2025/8/22 19:53 94 * @Date 2025/8/22 19:53
94 * @Return int 95 * @Return int
95 */ 96 */
96 - public int submissionAssignTaskCompany(@Valid AssignTasksInfoSaveReqVO tdAssignTaskCompany); 97 + public int submissionAssignTaskCompany(@Valid AssignTasksInfoUpdReqVO tdAssignTaskCompany);
97 /** 98 /**
98 * @Author wangqian 99 * @Author wangqian
99 * @Description 派单反馈 100 * @Description 派单反馈
100 * @Date 2025/8/22 19:53 101 * @Date 2025/8/22 19:53
101 * @Return int 102 * @Return int
102 */ 103 */
103 - public int feedbackAssignTaskCompany(@Valid AssignTasksInfoSaveReqVO tdAssignTaskCompany); 104 + public int feedbackAssignTaskCompany(@Valid AssignTasksInfoUpdReqVO tdAssignTaskCompany);
104 } 105 }
urbanops-module-garden/src/main/java/com/zteits/urbanops/module/garden/service/assigntasksinfo/AssignTasksInfoServiceImpl.java
1 package com.zteits.urbanops.module.garden.service.assigntasksinfo; 1 package com.zteits.urbanops.module.garden.service.assigntasksinfo;
2 2
3 import com.alibaba.fastjson.JSONObject; 3 import com.alibaba.fastjson.JSONObject;
  4 +import com.baomidou.mybatisplus.core.toolkit.StringUtils;
4 import com.zteits.urbanops.framework.common.pojo.PageResult; 5 import com.zteits.urbanops.framework.common.pojo.PageResult;
5 import com.zteits.urbanops.framework.common.util.object.BeanUtils; 6 import com.zteits.urbanops.framework.common.util.object.BeanUtils;
6 import com.zteits.urbanops.module.garden.controller.admin.assigntasksinfo.vo.AssignTasksInfoPageReqVO; 7 import com.zteits.urbanops.module.garden.controller.admin.assigntasksinfo.vo.AssignTasksInfoPageReqVO;
7 import com.zteits.urbanops.module.garden.controller.admin.assigntasksinfo.vo.AssignTasksInfoSaveReqVO; 8 import com.zteits.urbanops.module.garden.controller.admin.assigntasksinfo.vo.AssignTasksInfoSaveReqVO;
  9 +import com.zteits.urbanops.module.garden.controller.admin.assigntasksinfo.vo.AssignTasksInfoUpdReqVO;
8 import com.zteits.urbanops.module.garden.dal.dataobject.assigntasks.AssignTasksDO; 10 import com.zteits.urbanops.module.garden.dal.dataobject.assigntasks.AssignTasksDO;
9 import com.zteits.urbanops.module.garden.dal.dataobject.assigntasksinfo.AssignTasksInfoDO; 11 import com.zteits.urbanops.module.garden.dal.dataobject.assigntasksinfo.AssignTasksInfoDO;
10 import com.zteits.urbanops.module.garden.dal.mysql.assigntasks.AssignTasksMapper; 12 import com.zteits.urbanops.module.garden.dal.mysql.assigntasks.AssignTasksMapper;
11 import com.zteits.urbanops.module.garden.dal.mysql.assigntasksinfo.AssignTasksInfoMapper; 13 import com.zteits.urbanops.module.garden.dal.mysql.assigntasksinfo.AssignTasksInfoMapper;
12 import com.zteits.urbanops.module.garden.enums.AssignTasksConstants; 14 import com.zteits.urbanops.module.garden.enums.AssignTasksConstants;
13 -import com.zteits.urbanops.module.garden.util.http.OkHttpClientUtil;  
14 import com.zteits.urbanops.module.system.api.dept.DeptApi; 15 import com.zteits.urbanops.module.system.api.dept.DeptApi;
15 import com.zteits.urbanops.module.system.api.dept.dto.DeptRespDTO; 16 import com.zteits.urbanops.module.system.api.dept.dto.DeptRespDTO;
  17 +import com.zteits.urbanops.module.system.api.permission.RoleApi;
  18 +import com.zteits.urbanops.module.system.api.sms.SmsCodeApi;
  19 +import com.zteits.urbanops.module.system.api.sms.dto.code.SmsCodeSendReqDTO;
16 import com.zteits.urbanops.module.system.api.user.AdminUserApi; 20 import com.zteits.urbanops.module.system.api.user.AdminUserApi;
17 import com.zteits.urbanops.module.system.api.user.dto.AdminUserRespDTO; 21 import com.zteits.urbanops.module.system.api.user.dto.AdminUserRespDTO;
  22 +import com.zteits.urbanops.module.system.dal.dataobject.permission.RoleDO;
18 import jakarta.annotation.Resource; 23 import jakarta.annotation.Resource;
19 import lombok.extern.slf4j.Slf4j; 24 import lombok.extern.slf4j.Slf4j;
20 import org.apache.commons.collections4.CollectionUtils; 25 import org.apache.commons.collections4.CollectionUtils;
@@ -30,7 +35,10 @@ import java.util.Map; @@ -30,7 +35,10 @@ import java.util.Map;
30 import java.util.Objects; 35 import java.util.Objects;
31 import java.util.stream.Collectors; 36 import java.util.stream.Collectors;
32 37
  38 +import static com.zteits.urbanops.framework.common.exception.enums.GlobalErrorCodeConstants.BAD_REQUEST;
33 import static com.zteits.urbanops.framework.common.exception.util.ServiceExceptionUtil.exception; 39 import static com.zteits.urbanops.framework.common.exception.util.ServiceExceptionUtil.exception;
  40 +import static com.zteits.urbanops.framework.common.exception.util.ServiceExceptionUtil.exception0;
  41 +import static com.zteits.urbanops.framework.common.util.servlet.ServletUtils.getClientIP;
34 import static com.zteits.urbanops.framework.security.core.util.SecurityFrameworkUtils.getLoginUserId; 42 import static com.zteits.urbanops.framework.security.core.util.SecurityFrameworkUtils.getLoginUserId;
35 import static com.zteits.urbanops.framework.security.core.util.SecurityFrameworkUtils.getLoginUserNickname; 43 import static com.zteits.urbanops.framework.security.core.util.SecurityFrameworkUtils.getLoginUserNickname;
36 import static com.zteits.urbanops.module.garden.enums.ErrorCodeConstants.*; 44 import static com.zteits.urbanops.module.garden.enums.ErrorCodeConstants.*;
@@ -52,10 +60,14 @@ public class AssignTasksInfoServiceImpl implements AssignTasksInfoService { @@ -52,10 +60,14 @@ public class AssignTasksInfoServiceImpl implements AssignTasksInfoService {
52 60
53 @Resource 61 @Resource
54 private DeptApi deptApi; 62 private DeptApi deptApi;
  63 +
  64 + @Resource
  65 + private RoleApi roleApi;
55 @Resource 66 @Resource
56 private AdminUserApi adminUserApi; 67 private AdminUserApi adminUserApi;
57 68
58 - private String SEND_SMS_CODE_URL = ""; 69 + @Resource
  70 + private SmsCodeApi smsCodeApi;
59 71
60 // 时间格式常量(与之前保持一致) 72 // 时间格式常量(与之前保持一致)
61 public static final String FORMAT_YEAR_MONTH_DAY_HOUR_MINUTE_SECOND = "yyyy-MM-dd HH:mm:ss"; 73 public static final String FORMAT_YEAR_MONTH_DAY_HOUR_MINUTE_SECOND = "yyyy-MM-dd HH:mm:ss";
@@ -148,7 +160,7 @@ public class AssignTasksInfoServiceImpl implements AssignTasksInfoService { @@ -148,7 +160,7 @@ public class AssignTasksInfoServiceImpl implements AssignTasksInfoService {
148 160
149 //派单驳回 161 //派单驳回
150 @Override 162 @Override
151 - public int rejectAssignTaskCompany(AssignTasksInfoSaveReqVO tdAssignTaskCompany) { 163 + public int rejectAssignTaskCompany(AssignTasksInfoUpdReqVO tdAssignTaskCompany) {
152 AssignTasksInfoDO assignTaskInfo = assignTasksInfoMapper.selectById(tdAssignTaskCompany.getId()); 164 AssignTasksInfoDO assignTaskInfo = assignTasksInfoMapper.selectById(tdAssignTaskCompany.getId());
153 //单位任务完成状态(0:未完成,1:已完成) 165 //单位任务完成状态(0:未完成,1:已完成)
154 if (assignTaskInfo != null && 1 == assignTaskInfo.getFinish()) { 166 if (assignTaskInfo != null && 1 == assignTaskInfo.getFinish()) {
@@ -166,7 +178,7 @@ public class AssignTasksInfoServiceImpl implements AssignTasksInfoService { @@ -166,7 +178,7 @@ public class AssignTasksInfoServiceImpl implements AssignTasksInfoService {
166 } 178 }
167 179
168 @Override 180 @Override
169 - public int submissionAssignTaskCompany(AssignTasksInfoSaveReqVO taskInfo) { 181 + public int submissionAssignTaskCompany(AssignTasksInfoUpdReqVO taskInfo) {
170 // 2. 查询任务详情(判断任务是否存在) 182 // 2. 查询任务详情(判断任务是否存在)
171 AssignTasksInfoDO existingTask = assignTasksInfoMapper.selectById(taskInfo.getId()); 183 AssignTasksInfoDO existingTask = assignTasksInfoMapper.selectById(taskInfo.getId());
172 if (existingTask == null) { 184 if (existingTask == null) {
@@ -180,51 +192,53 @@ public class AssignTasksInfoServiceImpl implements AssignTasksInfoService { @@ -180,51 +192,53 @@ public class AssignTasksInfoServiceImpl implements AssignTasksInfoService {
180 : ""; // 或 null 192 : ""; // 或 null
181 //填报人信息 193 //填报人信息
182 AdminUserRespDTO user = adminUserApi.getUser(getLoginUserId()); 194 AdminUserRespDTO user = adminUserApi.getUser(getLoginUserId());
  195 + //用户角色
  196 + List<Long> roles = roleApi.getRoleIdsByUserId(user.getId());
  197 + RoleDO roleDO = roleApi.getRoleIdByRoleCode(AssignTasksConstants.ASSIGN_ROLE_KEY);
  198 + if (roleDO == null) {
  199 + //未配置
  200 + throw exception0(BAD_REQUEST.getCode(),"系统未配置填报人角色");
  201 + }
  202 + if(!roles.contains(roleDO.getId())) {
  203 + //没有权限
  204 + throw exception0(BAD_REQUEST.getCode(),"该用户未授权");
  205 + }
183 String phonenumber = user.getMobile(); 206 String phonenumber = user.getMobile();
184 - Map<String, Object> resultMap = new HashMap<String, Object>();  
185 - Map<String, String> templateParams = new HashMap<String, String>(); 207 + if (StringUtils.isEmpty(phonenumber)) {
  208 + throw exception0(BAD_REQUEST.getCode(),"该用户未配置手机号码");
  209 + }
  210 + Map<String, Object> templateParams = new HashMap<String, Object>();
186 templateParams.put("companyName", existingTask.getCompanyName()); 211 templateParams.put("companyName", existingTask.getCompanyName());
187 templateParams.put("taskName", assignTasksDO.getTaskName()); 212 templateParams.put("taskName", assignTasksDO.getTaskName());
188 templateParams.put("deadline", formattedDeadline); 213 templateParams.put("deadline", formattedDeadline);
189 - resultMap.put("mobile", phonenumber);//手机号  
190 - resultMap.put("scene", AssignTasksConstants.ASSIGN_TASK_SCENE);//短信场景  
191 - resultMap.put("templateParams", templateParams);//短信参数  
192 214
193 // 5. 发送短信通知 215 // 5. 发送短信通知
194 - log.info("派单发送短信 signMap: {}", JSONObject.toJSONString(resultMap));  
195 - Map<String, String> headers = new HashMap<>(4);  
196 - headers.put("Content-Type","application/json");  
197 - headers.put("Connection","keep-alive");  
198 - headers.put("Accept","*/*");  
199 - headers.put("Accept-Encoding","gzip, deflate, br");  
200 - try {  
201 - String response = OkHttpClientUtil.doPostJson(SEND_SMS_CODE_URL, resultMap, headers);  
202 - log.info("派单发送短信 response: {}", JSONObject.toJSONString(response));  
203 -  
204 - JSONObject jsonObject = JSONObject.parseObject(response);  
205 -  
206 - if (jsonObject.getString("code").equals("0")) {  
207 - log.info("提交单位任务成功,已通知填报人:手机号={},任务ID={}", phonenumber, existingTask.getId());  
208 -  
209 - int newRushNum = (existingTask.getRushNum() == null) ? 1: existingTask.getRushNum() + 1;  
210 - //催办次数+1  
211 - AssignTasksInfoDO assignTaskInfo = new AssignTasksInfoDO();  
212 - assignTaskInfo.setId(existingTask.getId());  
213 - assignTaskInfo.setRushNum(newRushNum);  
214 - assignTasksInfoMapper.updateById(assignTaskInfo);  
215 - } else {  
216 - throw exception(ASSIGN_TASKS_INFO_004);  
217 - }  
218 - } catch (Exception e) {  
219 - log.error("提交单位任务成功,但短信通知失败:手机号={},任务ID={}",  
220 - phonenumber, existingTask.getId(), e);  
221 - throw exception(ASSIGN_TASKS_INFO_005); 216 + log.info("派单发送短信 signMap: {}", JSONObject.toJSONString(templateParams));
  217 + SmsCodeSendReqDTO reqDTO = new SmsCodeSendReqDTO();
  218 + reqDTO.setScene(AssignTasksConstants.ASSIGN_TASK_SCENE);
  219 + reqDTO.setMobile(phonenumber);//手机号
  220 + reqDTO.setTemplateParams(templateParams);//短信参数
  221 + reqDTO.setCreateIp(getClientIP());
  222 + Long sendLogId = smsCodeApi.openSendSmsCode(reqDTO);
  223 + log.info("派单发送短信 sendLogId: {}", sendLogId);
  224 +
  225 + if (sendLogId != null) {
  226 + log.info("提交单位任务成功,已通知填报人:手机号={},任务ID={}", phonenumber, existingTask.getId());
  227 +
  228 + int newRushNum = (existingTask.getRushNum() == null) ? 1: existingTask.getRushNum() + 1;
  229 + //催办次数+1
  230 + AssignTasksInfoDO assignTaskInfo = new AssignTasksInfoDO();
  231 + assignTaskInfo.setId(existingTask.getId());
  232 + assignTaskInfo.setRushNum(newRushNum);
  233 + assignTasksInfoMapper.updateById(assignTaskInfo);
  234 + } else {
  235 + throw exception(ASSIGN_TASKS_INFO_004);
222 } 236 }
223 return 1; 237 return 1;
224 } 238 }
225 239
226 @Override 240 @Override
227 - public int feedbackAssignTaskCompany(AssignTasksInfoSaveReqVO tdAssignTaskCompany) { 241 + public int feedbackAssignTaskCompany(AssignTasksInfoUpdReqVO tdAssignTaskCompany) {
228 AssignTasksInfoDO assignTaskInfo = assignTasksInfoMapper.selectById(tdAssignTaskCompany.getId()); 242 AssignTasksInfoDO assignTaskInfo = assignTasksInfoMapper.selectById(tdAssignTaskCompany.getId());
229 if (assignTaskInfo != null) { 243 if (assignTaskInfo != null) {
230 AdminUserRespDTO user = adminUserApi.getUser(getLoginUserId()); 244 AdminUserRespDTO user = adminUserApi.getUser(getLoginUserId());
urbanops-module-system/src/main/java/com/zteits/urbanops/module/system/api/permission/RoleApi.java
@@ -44,4 +44,21 @@ public interface RoleApi { @@ -44,4 +44,21 @@ public interface RoleApi {
44 * @return 角色ID列表 44 * @return 角色ID列表
45 */ 45 */
46 List<Long> getRoleIdsByUserId(Long userId); 46 List<Long> getRoleIdsByUserId(Long userId);
  47 +
  48 +
  49 + /**
  50 + * 通过角色类型,获得用户编号列表
  51 + *
  52 + * @param roleCode 角色编码
  53 + * @return 用户ID列表
  54 + */
  55 + List<Long> getUserIdsByRoleCode(String roleCode);
  56 +
  57 + /**
  58 + * 通过角色类型,获得角色
  59 + *
  60 + * @param roleCode 角色编码
  61 + * @return 角色
  62 + */
  63 + RoleDO getRoleIdByRoleCode(String roleCode);
47 } 64 }
urbanops-module-system/src/main/java/com/zteits/urbanops/module/system/api/permission/RoleApiImpl.java
@@ -39,4 +39,14 @@ public class RoleApiImpl implements RoleApi { @@ -39,4 +39,14 @@ public class RoleApiImpl implements RoleApi {
39 public List<Long> getRoleIdsByUserId(Long userId) { 39 public List<Long> getRoleIdsByUserId(Long userId) {
40 return roleService.getRoleIdsByUserId(userId); 40 return roleService.getRoleIdsByUserId(userId);
41 } 41 }
  42 +
  43 + @Override
  44 + public List<Long> getUserIdsByRoleCode(String roleCode) {
  45 + return roleService.getUserIdsByRoleCode(roleCode);
  46 + }
  47 +
  48 + @Override
  49 + public RoleDO getRoleIdByRoleCode(String roleCode) {
  50 + return roleService.getRoleIdByRoleCode(roleCode);
  51 + }
42 } 52 }
urbanops-module-system/src/main/java/com/zteits/urbanops/module/system/api/sms/SmsCodeApi.java
@@ -36,5 +36,10 @@ public interface SmsCodeApi { @@ -36,5 +36,10 @@ public interface SmsCodeApi {
36 * @param reqDTO 校验请求 36 * @param reqDTO 校验请求
37 */ 37 */
38 void validateSmsCode(@Valid SmsCodeValidateReqDTO reqDTO); 38 void validateSmsCode(@Valid SmsCodeValidateReqDTO reqDTO);
39 - 39 + /**
  40 + * 根据模板发送短信
  41 + *
  42 + * @param reqDTO 发送请求
  43 + */
  44 + Long openSendSmsCode(@Valid SmsCodeSendReqDTO reqDTO);
40 } 45 }
urbanops-module-system/src/main/java/com/zteits/urbanops/module/system/api/sms/SmsCodeApiImpl.java
@@ -36,4 +36,9 @@ public class SmsCodeApiImpl implements SmsCodeApi { @@ -36,4 +36,9 @@ public class SmsCodeApiImpl implements SmsCodeApi {
36 smsCodeService.validateSmsCode(reqDTO); 36 smsCodeService.validateSmsCode(reqDTO);
37 } 37 }
38 38
  39 + @Override
  40 + public Long openSendSmsCode(SmsCodeSendReqDTO reqDTO) {
  41 + return smsCodeService.openSendSmsCode(reqDTO);
  42 + }
  43 +
39 } 44 }
urbanops-module-system/src/main/java/com/zteits/urbanops/module/system/api/sms/dto/code/SmsCodeSendReqDTO.java
@@ -8,6 +8,8 @@ import lombok.Data; @@ -8,6 +8,8 @@ import lombok.Data;
8 import jakarta.validation.constraints.NotEmpty; 8 import jakarta.validation.constraints.NotEmpty;
9 import jakarta.validation.constraints.NotNull; 9 import jakarta.validation.constraints.NotNull;
10 10
  11 +import java.util.Map;
  12 +
11 /** 13 /**
12 * 短信验证码的发送 Request DTO 14 * 短信验证码的发送 Request DTO
13 * 15 *
@@ -34,4 +36,5 @@ public class SmsCodeSendReqDTO { @@ -34,4 +36,5 @@ public class SmsCodeSendReqDTO {
34 @NotEmpty(message = "发送 IP 不能为空") 36 @NotEmpty(message = "发送 IP 不能为空")
35 private String createIp; 37 private String createIp;
36 38
  39 + private Map<String, Object> templateParams;
37 } 40 }
urbanops-module-system/src/main/java/com/zteits/urbanops/module/system/enums/sms/SmsSceneEnum.java
@@ -20,6 +20,8 @@ public enum SmsSceneEnum implements ArrayValuable&lt;Integer&gt; { @@ -20,6 +20,8 @@ public enum SmsSceneEnum implements ArrayValuable&lt;Integer&gt; {
20 MEMBER_UPDATE_MOBILE(2, "user-update-mobile", "会员用户 - 修改手机"), 20 MEMBER_UPDATE_MOBILE(2, "user-update-mobile", "会员用户 - 修改手机"),
21 MEMBER_UPDATE_PASSWORD(3, "user-update-password", "会员用户 - 修改密码"), 21 MEMBER_UPDATE_PASSWORD(3, "user-update-password", "会员用户 - 修改密码"),
22 MEMBER_RESET_PASSWORD(4, "user-reset-password", "会员用户 - 忘记密码"), 22 MEMBER_RESET_PASSWORD(4, "user-reset-password", "会员用户 - 忘记密码"),
  23 + USER_SMS_LOGIN(5, "SMS_319860269", "用户 - 手机号登陆"),
  24 + YL_USER_SMS_SUBMISSION(6, "SMS_493695107", "园林派单业务催交发送短信"),
23 25
24 ADMIN_MEMBER_LOGIN(21, "admin-sms-login", "后台用户 - 手机号登录"), 26 ADMIN_MEMBER_LOGIN(21, "admin-sms-login", "后台用户 - 手机号登录"),
25 ADMIN_MEMBER_REGISTER(22, "admin-sms-register", "后台用户 - 手机号注册"), 27 ADMIN_MEMBER_REGISTER(22, "admin-sms-register", "后台用户 - 手机号注册"),
urbanops-module-system/src/main/java/com/zteits/urbanops/module/system/service/permission/RoleService.java
@@ -140,4 +140,13 @@ public interface RoleService { @@ -140,4 +140,13 @@ public interface RoleService {
140 * 通过用户编号,获得角色列表 140 * 通过用户编号,获得角色列表
141 */ 141 */
142 List<Long> getRoleIdsByUserId(Long userId); 142 List<Long> getRoleIdsByUserId(Long userId);
  143 +
  144 + /**
  145 + * 通过角色类型,获得用户列表
  146 + */
  147 + List<Long> getUserIdsByRoleCode(String roleCode);
  148 + /**
  149 + * 通过角色类型,获得角色
  150 + */
  151 + RoleDO getRoleIdByRoleCode(String roleCode);
143 } 152 }
urbanops-module-system/src/main/java/com/zteits/urbanops/module/system/service/permission/RoleServiceImpl.java
@@ -288,6 +288,26 @@ public class RoleServiceImpl implements RoleService { @@ -288,6 +288,26 @@ public class RoleServiceImpl implements RoleService {
288 return list.stream().map(UserRoleDO::getRoleId).toList(); 288 return list.stream().map(UserRoleDO::getRoleId).toList();
289 } 289 }
290 290
  291 + @Override
  292 + public List<Long> getUserIdsByRoleCode(String roleCode) {
  293 + RoleDO roleDO = roleMapper.selectOne(RoleDO::getCode, roleCode);
  294 + if (roleDO == null) {
  295 + return null;
  296 + }
  297 + QueryWrapper<UserRoleDO> sql = new QueryWrapper<>();
  298 + sql.select("user_id");
  299 + List<UserRoleDO> list = userRoleMapper.selectList(sql.lambda().eq(UserRoleDO::getRoleId, roleDO.getId()));
  300 + if (CollectionUtil.isEmpty(list)) {
  301 + return Collections.emptyList();
  302 + }
  303 + return list.stream().map(UserRoleDO::getUserId).toList();
  304 + }
  305 +
  306 + @Override
  307 + public RoleDO getRoleIdByRoleCode(String roleCode) {
  308 + return roleMapper.selectOne(RoleDO::getCode, roleCode);
  309 + }
  310 +
291 /** 311 /**
292 * 获得自身的代理对象,解决 AOP 生效问题 312 * 获得自身的代理对象,解决 AOP 生效问题
293 * 313 *
urbanops-module-system/src/main/java/com/zteits/urbanops/module/system/service/sms/SmsCodeService.java
@@ -36,5 +36,10 @@ public interface SmsCodeService { @@ -36,5 +36,10 @@ public interface SmsCodeService {
36 * @param reqDTO 校验请求 36 * @param reqDTO 校验请求
37 */ 37 */
38 void validateSmsCode(@Valid SmsCodeValidateReqDTO reqDTO); 38 void validateSmsCode(@Valid SmsCodeValidateReqDTO reqDTO);
39 - 39 + /**
  40 + * 发送短信
  41 + *
  42 + * @param reqDTO 校验请求
  43 + */
  44 + Long openSendSmsCode(@Valid SmsCodeSendReqDTO reqDTO);
40 } 45 }
urbanops-module-system/src/main/java/com/zteits/urbanops/module/system/service/sms/SmsCodeServiceImpl.java
@@ -109,4 +109,13 @@ public class SmsCodeServiceImpl implements SmsCodeService { @@ -109,4 +109,13 @@ public class SmsCodeServiceImpl implements SmsCodeService {
109 return lastSmsCode; 109 return lastSmsCode;
110 } 110 }
111 111
  112 + @Override
  113 + public Long openSendSmsCode(SmsCodeSendReqDTO reqDTO) {
  114 + SmsSceneEnum sceneEnum = SmsSceneEnum.getCodeByScene(reqDTO.getScene());
  115 + Assert.notNull(sceneEnum, "验证码场景({}) 查找不到配置", reqDTO.getScene());
  116 +
  117 + // 发送验证码
  118 + return smsSendService.sendSingleSms(reqDTO.getMobile(), null, null,
  119 + sceneEnum.getTemplateCode(), reqDTO.getTemplateParams());
  120 + }
112 } 121 }