From ccefd0fc63d55dacae2ab0acf77065d82b971e2e Mon Sep 17 00:00:00 2001 From: wangqian <1406304305@qq.com> Date: Sun, 14 Dec 2025 18:19:06 +0800 Subject: [PATCH] 派单任务修改 --- urbanops-module-bpm/src/main/java/com/zteits/urbanops/module/bpm/api/task/BpmProcessTaskApi.java | 18 ++++++++++++++++++ urbanops-module-bpm/src/main/java/com/zteits/urbanops/module/bpm/api/task/BpmProcessTaskApiImpl.java | 14 ++++++++++++++ urbanops-module-garden/pom.xml | 6 ++++++ urbanops-module-garden/src/main/java/com/zteits/urbanops/module/garden/controller/admin/assigntasksinfo/AssignTasksInfoController.java | 7 ++++--- urbanops-module-garden/src/main/java/com/zteits/urbanops/module/garden/controller/admin/assigntasksinfo/vo/AssignTasksInfoUpdReqVO.java | 25 +++++++++++++++++++++++++ urbanops-module-garden/src/main/java/com/zteits/urbanops/module/garden/dal/dataobject/assigntasks/AssignTasksDO.java | 2 ++ urbanops-module-garden/src/main/java/com/zteits/urbanops/module/garden/enums/AssignTasksConstants.java | 4 ++++ urbanops-module-garden/src/main/java/com/zteits/urbanops/module/garden/service/assigntasks/AssignTasksServiceImpl.java | 96 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++-------------- urbanops-module-garden/src/main/java/com/zteits/urbanops/module/garden/service/assigntasksinfo/AssignTasksInfoService.java | 7 ++++--- urbanops-module-garden/src/main/java/com/zteits/urbanops/module/garden/service/assigntasksinfo/AssignTasksInfoServiceImpl.java | 90 ++++++++++++++++++++++++++++++++++++++++++++++++++++-------------------------------------- urbanops-module-system/src/main/java/com/zteits/urbanops/module/system/api/permission/RoleApi.java | 17 +++++++++++++++++ urbanops-module-system/src/main/java/com/zteits/urbanops/module/system/api/permission/RoleApiImpl.java | 10 ++++++++++ urbanops-module-system/src/main/java/com/zteits/urbanops/module/system/api/sms/SmsCodeApi.java | 7 ++++++- urbanops-module-system/src/main/java/com/zteits/urbanops/module/system/api/sms/SmsCodeApiImpl.java | 5 +++++ urbanops-module-system/src/main/java/com/zteits/urbanops/module/system/api/sms/dto/code/SmsCodeSendReqDTO.java | 3 +++ urbanops-module-system/src/main/java/com/zteits/urbanops/module/system/enums/sms/SmsSceneEnum.java | 2 ++ urbanops-module-system/src/main/java/com/zteits/urbanops/module/system/service/permission/RoleService.java | 9 +++++++++ urbanops-module-system/src/main/java/com/zteits/urbanops/module/system/service/permission/RoleServiceImpl.java | 20 ++++++++++++++++++++ urbanops-module-system/src/main/java/com/zteits/urbanops/module/system/service/sms/SmsCodeService.java | 7 ++++++- urbanops-module-system/src/main/java/com/zteits/urbanops/module/system/service/sms/SmsCodeServiceImpl.java | 9 +++++++++ 20 files changed, 298 insertions(+), 60 deletions(-) create mode 100644 urbanops-module-garden/src/main/java/com/zteits/urbanops/module/garden/controller/admin/assigntasksinfo/vo/AssignTasksInfoUpdReqVO.java diff --git a/urbanops-module-bpm/src/main/java/com/zteits/urbanops/module/bpm/api/task/BpmProcessTaskApi.java b/urbanops-module-bpm/src/main/java/com/zteits/urbanops/module/bpm/api/task/BpmProcessTaskApi.java index f81b7aa..969bd8a 100644 --- a/urbanops-module-bpm/src/main/java/com/zteits/urbanops/module/bpm/api/task/BpmProcessTaskApi.java +++ b/urbanops-module-bpm/src/main/java/com/zteits/urbanops/module/bpm/api/task/BpmProcessTaskApi.java @@ -1,6 +1,10 @@ package com.zteits.urbanops.module.bpm.api.task; +import com.zteits.urbanops.module.bpm.controller.admin.task.vo.task.BpmTaskApproveReqVO; +import com.zteits.urbanops.module.bpm.controller.admin.task.vo.task.BpmTaskReturnReqVO; +import jakarta.validation.Valid; import jakarta.validation.constraints.NotEmpty; +import org.springframework.web.bind.annotation.RequestBody; /** * 流程任务 Api 接口 @@ -18,4 +22,18 @@ public interface BpmProcessTaskApi { void triggerTask(@NotEmpty(message = "流程实例的编号不能为空") String processInstanceId, @NotEmpty(message = "任务 Key 不能为空") String taskDefineKey); + /** + * 通过 + * + * @param reqVO 流程实例编号 + */ + void approveTask(@Valid BpmTaskApproveReqVO reqVO); + + /** + * 退回 + * + * @param reqVO 流程实例编号 + */ + void returnTask(@Valid BpmTaskReturnReqVO reqVO); + } diff --git a/urbanops-module-bpm/src/main/java/com/zteits/urbanops/module/bpm/api/task/BpmProcessTaskApiImpl.java b/urbanops-module-bpm/src/main/java/com/zteits/urbanops/module/bpm/api/task/BpmProcessTaskApiImpl.java index 8f52fc2..b7effd8 100644 --- a/urbanops-module-bpm/src/main/java/com/zteits/urbanops/module/bpm/api/task/BpmProcessTaskApiImpl.java +++ b/urbanops-module-bpm/src/main/java/com/zteits/urbanops/module/bpm/api/task/BpmProcessTaskApiImpl.java @@ -1,10 +1,14 @@ package com.zteits.urbanops.module.bpm.api.task; +import com.zteits.urbanops.module.bpm.controller.admin.task.vo.task.BpmTaskApproveReqVO; +import com.zteits.urbanops.module.bpm.controller.admin.task.vo.task.BpmTaskReturnReqVO; import com.zteits.urbanops.module.bpm.service.task.BpmTaskService; import jakarta.annotation.Resource; import org.springframework.stereotype.Service; import org.springframework.validation.annotation.Validated; +import static com.zteits.urbanops.framework.web.core.util.WebFrameworkUtils.getLoginUserId; + /** * 流程任务 Api 实现类 * @@ -22,4 +26,14 @@ public class BpmProcessTaskApiImpl implements BpmProcessTaskApi { bpmTaskService.triggerTask(processInstanceId, taskDefineKey); } + @Override + public void approveTask(BpmTaskApproveReqVO reqVO) { + bpmTaskService.approveTask(getLoginUserId(), reqVO); + } + + @Override + public void returnTask(BpmTaskReturnReqVO reqVO) { + bpmTaskService.returnTask(getLoginUserId(), reqVO); + } + } diff --git a/urbanops-module-garden/pom.xml b/urbanops-module-garden/pom.xml index 8ea1192..7393e28 100644 --- a/urbanops-module-garden/pom.xml +++ b/urbanops-module-garden/pom.xml @@ -126,6 +126,12 @@ urbanops-module-system ${revision} + + com.zteits.boot + urbanops-module-bpm + 2025.10-SNAPSHOT + compile + diff --git a/urbanops-module-garden/src/main/java/com/zteits/urbanops/module/garden/controller/admin/assigntasksinfo/AssignTasksInfoController.java b/urbanops-module-garden/src/main/java/com/zteits/urbanops/module/garden/controller/admin/assigntasksinfo/AssignTasksInfoController.java index 10860f2..a263297 100644 --- a/urbanops-module-garden/src/main/java/com/zteits/urbanops/module/garden/controller/admin/assigntasksinfo/AssignTasksInfoController.java +++ b/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; import com.zteits.urbanops.module.garden.controller.admin.assigntasksinfo.vo.AssignTasksInfoPageReqVO; import com.zteits.urbanops.module.garden.controller.admin.assigntasksinfo.vo.AssignTasksInfoRespVO; import com.zteits.urbanops.module.garden.controller.admin.assigntasksinfo.vo.AssignTasksInfoSaveReqVO; +import com.zteits.urbanops.module.garden.controller.admin.assigntasksinfo.vo.AssignTasksInfoUpdReqVO; import com.zteits.urbanops.module.garden.convert.AssignTaskConvert; import com.zteits.urbanops.module.garden.dal.dataobject.assigntasks.AssignTasksDO; import com.zteits.urbanops.module.garden.dal.dataobject.assigntasksinfo.AssignTasksInfoDO; @@ -160,7 +161,7 @@ public class AssignTasksInfoController { @PreAuthorize("@ss.hasPermission('garden:assign-tasks-info:update')") @Operation(summary = "派单任务-驳回") @PutMapping(value = "/reject") - public CommonResult reject(@RequestBody AssignTasksInfoSaveReqVO assignTaskCompany) { + public CommonResult reject(@RequestBody AssignTasksInfoUpdReqVO assignTaskCompany) { return success(assignTasksInfoService.rejectAssignTaskCompany(assignTaskCompany)); } @@ -168,7 +169,7 @@ public class AssignTasksInfoController { @PreAuthorize("@ss.hasPermission('garden:assign-tasks-info:update')") @Operation(summary = "派单任务-催交") @PutMapping(value = "/submission") - public CommonResult submission(@RequestBody AssignTasksInfoSaveReqVO assignTaskCompany) { + public CommonResult submission(@RequestBody AssignTasksInfoUpdReqVO assignTaskCompany) { return success(assignTasksInfoService.submissionAssignTaskCompany(assignTaskCompany)); } @@ -176,7 +177,7 @@ public class AssignTasksInfoController { @PreAuthorize("@ss.hasPermission('garden:assign-tasks-info:update')") @Operation(summary = "派单任务-反馈") @PutMapping(value = "/feedback") - public CommonResult feedback(@RequestBody AssignTasksInfoSaveReqVO assignTaskCompany) { + public CommonResult feedback(@RequestBody AssignTasksInfoUpdReqVO assignTaskCompany) { return success(assignTasksInfoService.feedbackAssignTaskCompany(assignTaskCompany)); } } diff --git a/urbanops-module-garden/src/main/java/com/zteits/urbanops/module/garden/controller/admin/assigntasksinfo/vo/AssignTasksInfoUpdReqVO.java b/urbanops-module-garden/src/main/java/com/zteits/urbanops/module/garden/controller/admin/assigntasksinfo/vo/AssignTasksInfoUpdReqVO.java new file mode 100644 index 0000000..b483e1f --- /dev/null +++ b/urbanops-module-garden/src/main/java/com/zteits/urbanops/module/garden/controller/admin/assigntasksinfo/vo/AssignTasksInfoUpdReqVO.java @@ -0,0 +1,25 @@ +package com.zteits.urbanops.module.garden.controller.admin.assigntasksinfo.vo; + +import io.swagger.v3.oas.annotations.media.Schema; +import jakarta.validation.constraints.NotEmpty; +import jakarta.validation.constraints.NotNull; +import lombok.Data; + +import java.time.LocalDateTime; +import java.util.List; + +@Schema(description = "管理后台 - 派单任务-单位关联表(记录单位接收派单后的执行详情)新增/修改 Request VO") +@Data +public class AssignTasksInfoUpdReqVO { + + @Schema(description = "自增ID", requiredMode = Schema.RequiredMode.REQUIRED, example = "12148") + private Long id; + @Schema(description = "驳回备注(当finish=2时,说明驳回原因)", example = "你说的对") + private String rejectRemark; + + @Schema(description = "备注", example = "你猜") + private String remark; + @Schema(description = "单位提交的任务文件路径(如:填报表格、现场照片等)") + private List dataFile; + +} diff --git a/urbanops-module-garden/src/main/java/com/zteits/urbanops/module/garden/dal/dataobject/assigntasks/AssignTasksDO.java b/urbanops-module-garden/src/main/java/com/zteits/urbanops/module/garden/dal/dataobject/assigntasks/AssignTasksDO.java index 2f1cabb..a3b2253 100644 --- a/urbanops-module-garden/src/main/java/com/zteits/urbanops/module/garden/dal/dataobject/assigntasks/AssignTasksDO.java +++ b/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 { */ private String note; + /*流程id*/ + private String processInstanceId; @Data public static class TemplateFileDO implements Serializable { diff --git a/urbanops-module-garden/src/main/java/com/zteits/urbanops/module/garden/enums/AssignTasksConstants.java b/urbanops-module-garden/src/main/java/com/zteits/urbanops/module/garden/enums/AssignTasksConstants.java index 40d32b1..cc798f5 100644 --- a/urbanops-module-garden/src/main/java/com/zteits/urbanops/module/garden/enums/AssignTasksConstants.java +++ b/urbanops-module-garden/src/main/java/com/zteits/urbanops/module/garden/enums/AssignTasksConstants.java @@ -31,4 +31,8 @@ public class AssignTasksConstants { public static final int ASSIGN_TASK_SCENE = 6; /*办理人角色*/ public static final String ASSIGN_ROLE_KEY = "zgs_leader"; + /** + * bpm流程标识 任务管理 + */ + public static final String ASSIGN_TASK_PROCESS = "common_assign_task"; } diff --git a/urbanops-module-garden/src/main/java/com/zteits/urbanops/module/garden/service/assigntasks/AssignTasksServiceImpl.java b/urbanops-module-garden/src/main/java/com/zteits/urbanops/module/garden/service/assigntasks/AssignTasksServiceImpl.java index 05a3936..8bc015e 100644 --- a/urbanops-module-garden/src/main/java/com/zteits/urbanops/module/garden/service/assigntasks/AssignTasksServiceImpl.java +++ b/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; import com.baomidou.mybatisplus.core.toolkit.Wrappers; import com.zteits.urbanops.framework.common.pojo.PageResult; import com.zteits.urbanops.framework.common.util.object.BeanUtils; +import com.zteits.urbanops.framework.security.core.util.SecurityFrameworkUtils; +import com.zteits.urbanops.module.bpm.api.task.BpmProcessInstanceApi; +import com.zteits.urbanops.module.bpm.api.task.dto.BpmProcessInstanceCreateReqDTO; import com.zteits.urbanops.module.garden.controller.admin.assigntasks.vo.AssignTasksPageReqVO; import com.zteits.urbanops.module.garden.controller.admin.assigntasks.vo.AssignTasksSaveReqVO; import com.zteits.urbanops.module.garden.dal.dataobject.assigntasks.AssignTasksDO; @@ -12,8 +15,9 @@ import com.zteits.urbanops.module.garden.dal.mysql.assigntasks.AssignTasksMapper import com.zteits.urbanops.module.garden.dal.mysql.assigntasksinfo.AssignTasksInfoMapper; import com.zteits.urbanops.module.garden.enums.AssignTasksConstants; import com.zteits.urbanops.module.garden.service.assigntasksinfo.AssignTasksInfoService; -import com.zteits.urbanops.module.system.api.dept.DeptApi; -import com.zteits.urbanops.module.system.api.dept.dto.DeptRespDTO; +import com.zteits.urbanops.module.system.api.permission.RoleApi; +import com.zteits.urbanops.module.system.api.user.AdminUserApi; +import com.zteits.urbanops.module.system.api.user.dto.AdminUserRespDTO; import jakarta.annotation.Resource; import lombok.extern.slf4j.Slf4j; import org.springframework.stereotype.Service; @@ -22,13 +26,14 @@ import org.springframework.util.CollectionUtils; import org.springframework.validation.annotation.Validated; import java.time.LocalDateTime; -import java.util.ArrayList; -import java.util.List; -import java.util.Objects; +import java.util.*; +import java.util.function.Function; import java.util.stream.Collectors; +import static com.zteits.urbanops.framework.common.exception.enums.GlobalErrorCodeConstants.BAD_REQUEST; import static com.zteits.urbanops.framework.common.exception.util.ServiceExceptionUtil.exception; -import static com.zteits.urbanops.framework.security.core.util.SecurityFrameworkUtils.*; +import static com.zteits.urbanops.framework.common.exception.util.ServiceExceptionUtil.exception0; +import static com.zteits.urbanops.framework.security.core.util.SecurityFrameworkUtils.getCompanyId; import static com.zteits.urbanops.module.garden.enums.ErrorCodeConstants.ASSIGN_TASKS_NOT_EXISTS; import static com.zteits.urbanops.module.garden.enums.ErrorCodeConstants.ASSIGN_TASKS_NOT_EXISTS_002; @@ -53,9 +58,15 @@ public class AssignTasksServiceImpl implements AssignTasksService { @Resource private AssignTasksInfoMapper assignTasksInfoMapper; + //@Resource + //private DeptApi deptApi; @Resource - private DeptApi deptApi; + private RoleApi roleApi; + @Resource + AdminUserApi userApi; + @Resource + private BpmProcessInstanceApi processInstanceApi; @Transactional(rollbackFor = Exception.class) @Override @@ -65,8 +76,8 @@ public class AssignTasksServiceImpl implements AssignTasksService { assignTasksMapper.insert(assignTasks); //保存单位明细 assignTasksInfoService.saveAssignTasksInfos(createReqVO.getCompanyIds(), assignTasks); - //保存单位明细 - + //发起工作流 + //processInstance(createReqVO, assignTasks.getId()); // 返回 return assignTasks.getId(); } @@ -120,9 +131,7 @@ public class AssignTasksServiceImpl implements AssignTasksService { // 删除 assignTasksMapper.deleteById(id); //删除关联的明细 - List ids = new ArrayList<>(); - ids.add(id); - assiAssignTasksInfoMapper.deleteAssignTaskInfoByTaskId(ids); + assiAssignTasksInfoMapper.deleteAssignTaskInfoByTaskId(Arrays.asList(id)); } @Override @@ -174,8 +183,6 @@ public class AssignTasksServiceImpl implements AssignTasksService { if(allSubTaskFinished) { assignTasks.setParentFinish(AssignTasksConstants.ASSIGN_TASK_FINISH_1); assignTasks.setFinishTime(LocalDateTime.now()); - assignTasks.setUpdateTime(LocalDateTime.now()); - assignTasks.setUpdater(String.valueOf(getLoginUserId())); assignTasksMapper.updateById(assignTasks); } else { throw exception(ASSIGN_TASKS_NOT_EXISTS_002); @@ -242,4 +249,65 @@ public class AssignTasksServiceImpl implements AssignTasksService { return updatedCount; } + /** + * @Author wangqian + * @Description 创建工作流 + * @Date 2025/12/14 10:46 + * @Param createReqVO + * @param id + * @Return void + */ + private void processInstance(AssignTasksSaveReqVO createReqVO, Long id){ + //流程处理人 +// List userIds = roleApi.getUserIdsByRoleCode(AssignTasksConstants.ASSIGN_ROLE_KEY); +// if (userIds == null) { +// throw exception0(BAD_REQUEST.getCode(),"上报人未配置"); +// } +// List companyIdStrs = createReqVO.getCompanyIds(); +// +// List users = userApi.getUserList(userIds); +// Map> deptUserMap = users.stream() +// .filter(user -> user.getDeptId() != null) +// .collect(Collectors.groupingBy(AdminUserRespDTO::getDeptId)); +// //转换公司ID为Long并校验存在性 +// Set companyIdSet = new HashSet<>(); +// for (String companyIdStr : companyIdStrs) { +// Long companyId = Long.parseLong(companyIdStr); +// companyIdSet.add(companyId); +// if (!deptUserMap.containsKey(companyId)) { +// throw exception0(BAD_REQUEST.getCode(), "上报人未配置"); +// } +// } +// //提取每个部门的第一个用户 +// List distinctUsers = deptUserMap.entrySet().stream() +// .filter(entry -> companyIdSet.contains(entry.getKey())) // 仅保留目标公司的用户 +// .map(entry -> entry.getValue().get(0)) +// .collect(Collectors.toList()); +// +// // 5. 提取用户ID列表 +// List userIds = distinctUsers.stream().map(AdminUserRespDTO::getId).collect(Collectors.toList()); + + List userIds = new ArrayList<>(); + userIds.add(148L); + userIds.add(151L); + //发起工作流 + Map> startUserSelectAssignees = new HashMap<>(); + startUserSelectAssignees.put("Activity_1r880r6",userIds); + + // 发起 BPM 流程 + Map processInstanceVariables = new HashMap<>(); + processInstanceVariables.put("taskName", createReqVO.getTaskName()); + processInstanceVariables.put("taskType", createReqVO.getTaskType()); + processInstanceVariables.put("deadline", createReqVO.getDeadline()); + String processInstanceId = processInstanceApi.createProcessInstance(SecurityFrameworkUtils.getLoginUserId(), + new BpmProcessInstanceCreateReqDTO().setProcessDefinitionKey(AssignTasksConstants.ASSIGN_TASK_PROCESS) + .setVariables(processInstanceVariables) + .setBusinessKey(String.valueOf(id)) + .setStartUserSelectAssignees(startUserSelectAssignees)); + + // 将工作流的编号,更新到 工单中 + assignTasksMapper.updateById(new AssignTasksDO().setId(id).setProcessInstanceId(processInstanceId)); + + } + } diff --git a/urbanops-module-garden/src/main/java/com/zteits/urbanops/module/garden/service/assigntasksinfo/AssignTasksInfoService.java b/urbanops-module-garden/src/main/java/com/zteits/urbanops/module/garden/service/assigntasksinfo/AssignTasksInfoService.java index bcde302..1a93180 100644 --- a/urbanops-module-garden/src/main/java/com/zteits/urbanops/module/garden/service/assigntasksinfo/AssignTasksInfoService.java +++ b/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; import com.zteits.urbanops.framework.common.pojo.PageResult; import com.zteits.urbanops.module.garden.controller.admin.assigntasksinfo.vo.AssignTasksInfoPageReqVO; import com.zteits.urbanops.module.garden.controller.admin.assigntasksinfo.vo.AssignTasksInfoSaveReqVO; +import com.zteits.urbanops.module.garden.controller.admin.assigntasksinfo.vo.AssignTasksInfoUpdReqVO; import com.zteits.urbanops.module.garden.dal.dataobject.assigntasks.AssignTasksDO; import com.zteits.urbanops.module.garden.dal.dataobject.assigntasksinfo.AssignTasksInfoDO; import jakarta.validation.Valid; @@ -86,19 +87,19 @@ public interface AssignTasksInfoService { * @Date 2025/8/22 19:53 * @Return int */ - public int rejectAssignTaskCompany(@Valid AssignTasksInfoSaveReqVO tdAssignTaskCompany); + public int rejectAssignTaskCompany(@Valid AssignTasksInfoUpdReqVO tdAssignTaskCompany); /** * @Author wangqian * @Description 派单提醒 * @Date 2025/8/22 19:53 * @Return int */ - public int submissionAssignTaskCompany(@Valid AssignTasksInfoSaveReqVO tdAssignTaskCompany); + public int submissionAssignTaskCompany(@Valid AssignTasksInfoUpdReqVO tdAssignTaskCompany); /** * @Author wangqian * @Description 派单反馈 * @Date 2025/8/22 19:53 * @Return int */ - public int feedbackAssignTaskCompany(@Valid AssignTasksInfoSaveReqVO tdAssignTaskCompany); + public int feedbackAssignTaskCompany(@Valid AssignTasksInfoUpdReqVO tdAssignTaskCompany); } 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 32a8c85..51d60cf 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 @@ -1,20 +1,25 @@ package com.zteits.urbanops.module.garden.service.assigntasksinfo; import com.alibaba.fastjson.JSONObject; +import com.baomidou.mybatisplus.core.toolkit.StringUtils; import com.zteits.urbanops.framework.common.pojo.PageResult; import com.zteits.urbanops.framework.common.util.object.BeanUtils; import com.zteits.urbanops.module.garden.controller.admin.assigntasksinfo.vo.AssignTasksInfoPageReqVO; import com.zteits.urbanops.module.garden.controller.admin.assigntasksinfo.vo.AssignTasksInfoSaveReqVO; +import com.zteits.urbanops.module.garden.controller.admin.assigntasksinfo.vo.AssignTasksInfoUpdReqVO; import com.zteits.urbanops.module.garden.dal.dataobject.assigntasks.AssignTasksDO; import com.zteits.urbanops.module.garden.dal.dataobject.assigntasksinfo.AssignTasksInfoDO; import com.zteits.urbanops.module.garden.dal.mysql.assigntasks.AssignTasksMapper; import com.zteits.urbanops.module.garden.dal.mysql.assigntasksinfo.AssignTasksInfoMapper; import com.zteits.urbanops.module.garden.enums.AssignTasksConstants; -import com.zteits.urbanops.module.garden.util.http.OkHttpClientUtil; import com.zteits.urbanops.module.system.api.dept.DeptApi; import com.zteits.urbanops.module.system.api.dept.dto.DeptRespDTO; +import com.zteits.urbanops.module.system.api.permission.RoleApi; +import com.zteits.urbanops.module.system.api.sms.SmsCodeApi; +import com.zteits.urbanops.module.system.api.sms.dto.code.SmsCodeSendReqDTO; import com.zteits.urbanops.module.system.api.user.AdminUserApi; import com.zteits.urbanops.module.system.api.user.dto.AdminUserRespDTO; +import com.zteits.urbanops.module.system.dal.dataobject.permission.RoleDO; import jakarta.annotation.Resource; import lombok.extern.slf4j.Slf4j; import org.apache.commons.collections4.CollectionUtils; @@ -30,7 +35,10 @@ import java.util.Map; import java.util.Objects; import java.util.stream.Collectors; +import static com.zteits.urbanops.framework.common.exception.enums.GlobalErrorCodeConstants.BAD_REQUEST; 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.module.garden.enums.ErrorCodeConstants.*; @@ -52,10 +60,14 @@ public class AssignTasksInfoServiceImpl implements AssignTasksInfoService { @Resource private DeptApi deptApi; + + @Resource + private RoleApi roleApi; @Resource private AdminUserApi adminUserApi; - private String SEND_SMS_CODE_URL = ""; + @Resource + private SmsCodeApi smsCodeApi; // 时间格式常量(与之前保持一致) 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 { //派单驳回 @Override - public int rejectAssignTaskCompany(AssignTasksInfoSaveReqVO tdAssignTaskCompany) { + public int rejectAssignTaskCompany(AssignTasksInfoUpdReqVO tdAssignTaskCompany) { AssignTasksInfoDO assignTaskInfo = assignTasksInfoMapper.selectById(tdAssignTaskCompany.getId()); //单位任务完成状态(0:未完成,1:已完成) if (assignTaskInfo != null && 1 == assignTaskInfo.getFinish()) { @@ -166,7 +178,7 @@ public class AssignTasksInfoServiceImpl implements AssignTasksInfoService { } @Override - public int submissionAssignTaskCompany(AssignTasksInfoSaveReqVO taskInfo) { + public int submissionAssignTaskCompany(AssignTasksInfoUpdReqVO taskInfo) { // 2. 查询任务详情(判断任务是否存在) AssignTasksInfoDO existingTask = assignTasksInfoMapper.selectById(taskInfo.getId()); if (existingTask == null) { @@ -180,51 +192,53 @@ public class AssignTasksInfoServiceImpl implements AssignTasksInfoService { : ""; // 或 null //填报人信息 AdminUserRespDTO user = adminUserApi.getUser(getLoginUserId()); + //用户角色 + List roles = roleApi.getRoleIdsByUserId(user.getId()); + RoleDO roleDO = roleApi.getRoleIdByRoleCode(AssignTasksConstants.ASSIGN_ROLE_KEY); + if (roleDO == null) { + //未配置 + throw exception0(BAD_REQUEST.getCode(),"系统未配置填报人角色"); + } + if(!roles.contains(roleDO.getId())) { + //没有权限 + throw exception0(BAD_REQUEST.getCode(),"该用户未授权"); + } String phonenumber = user.getMobile(); - Map resultMap = new HashMap(); - Map templateParams = new HashMap(); + if (StringUtils.isEmpty(phonenumber)) { + throw exception0(BAD_REQUEST.getCode(),"该用户未配置手机号码"); + } + Map templateParams = new HashMap(); templateParams.put("companyName", existingTask.getCompanyName()); templateParams.put("taskName", assignTasksDO.getTaskName()); templateParams.put("deadline", formattedDeadline); - resultMap.put("mobile", phonenumber);//手机号 - resultMap.put("scene", AssignTasksConstants.ASSIGN_TASK_SCENE);//短信场景 - resultMap.put("templateParams", templateParams);//短信参数 // 5. 发送短信通知 - log.info("派单发送短信 signMap: {}", JSONObject.toJSONString(resultMap)); - Map headers = new HashMap<>(4); - headers.put("Content-Type","application/json"); - headers.put("Connection","keep-alive"); - headers.put("Accept","*/*"); - headers.put("Accept-Encoding","gzip, deflate, br"); - try { - String response = OkHttpClientUtil.doPostJson(SEND_SMS_CODE_URL, resultMap, headers); - log.info("派单发送短信 response: {}", JSONObject.toJSONString(response)); - - JSONObject jsonObject = JSONObject.parseObject(response); - - if (jsonObject.getString("code").equals("0")) { - log.info("提交单位任务成功,已通知填报人:手机号={},任务ID={}", phonenumber, existingTask.getId()); - - int newRushNum = (existingTask.getRushNum() == null) ? 1: existingTask.getRushNum() + 1; - //催办次数+1 - AssignTasksInfoDO assignTaskInfo = new AssignTasksInfoDO(); - assignTaskInfo.setId(existingTask.getId()); - assignTaskInfo.setRushNum(newRushNum); - assignTasksInfoMapper.updateById(assignTaskInfo); - } else { - throw exception(ASSIGN_TASKS_INFO_004); - } - } catch (Exception e) { - log.error("提交单位任务成功,但短信通知失败:手机号={},任务ID={}", - phonenumber, existingTask.getId(), e); - throw exception(ASSIGN_TASKS_INFO_005); + 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); + + if (sendLogId != null) { + log.info("提交单位任务成功,已通知填报人:手机号={},任务ID={}", phonenumber, existingTask.getId()); + + int newRushNum = (existingTask.getRushNum() == null) ? 1: existingTask.getRushNum() + 1; + //催办次数+1 + AssignTasksInfoDO assignTaskInfo = new AssignTasksInfoDO(); + assignTaskInfo.setId(existingTask.getId()); + assignTaskInfo.setRushNum(newRushNum); + assignTasksInfoMapper.updateById(assignTaskInfo); + } else { + throw exception(ASSIGN_TASKS_INFO_004); } return 1; } @Override - public int feedbackAssignTaskCompany(AssignTasksInfoSaveReqVO tdAssignTaskCompany) { + public int feedbackAssignTaskCompany(AssignTasksInfoUpdReqVO tdAssignTaskCompany) { AssignTasksInfoDO assignTaskInfo = assignTasksInfoMapper.selectById(tdAssignTaskCompany.getId()); if (assignTaskInfo != null) { AdminUserRespDTO user = adminUserApi.getUser(getLoginUserId()); diff --git a/urbanops-module-system/src/main/java/com/zteits/urbanops/module/system/api/permission/RoleApi.java b/urbanops-module-system/src/main/java/com/zteits/urbanops/module/system/api/permission/RoleApi.java index 4ca9538..5d68412 100644 --- a/urbanops-module-system/src/main/java/com/zteits/urbanops/module/system/api/permission/RoleApi.java +++ b/urbanops-module-system/src/main/java/com/zteits/urbanops/module/system/api/permission/RoleApi.java @@ -44,4 +44,21 @@ public interface RoleApi { * @return 角色ID列表 */ List getRoleIdsByUserId(Long userId); + + + /** + * 通过角色类型,获得用户编号列表 + * + * @param roleCode 角色编码 + * @return 用户ID列表 + */ + List getUserIdsByRoleCode(String roleCode); + + /** + * 通过角色类型,获得角色 + * + * @param roleCode 角色编码 + * @return 角色 + */ + RoleDO getRoleIdByRoleCode(String roleCode); } diff --git a/urbanops-module-system/src/main/java/com/zteits/urbanops/module/system/api/permission/RoleApiImpl.java b/urbanops-module-system/src/main/java/com/zteits/urbanops/module/system/api/permission/RoleApiImpl.java index a3eb71e..b2b1ebf 100644 --- a/urbanops-module-system/src/main/java/com/zteits/urbanops/module/system/api/permission/RoleApiImpl.java +++ b/urbanops-module-system/src/main/java/com/zteits/urbanops/module/system/api/permission/RoleApiImpl.java @@ -39,4 +39,14 @@ public class RoleApiImpl implements RoleApi { public List getRoleIdsByUserId(Long userId) { return roleService.getRoleIdsByUserId(userId); } + + @Override + public List getUserIdsByRoleCode(String roleCode) { + return roleService.getUserIdsByRoleCode(roleCode); + } + + @Override + public RoleDO getRoleIdByRoleCode(String roleCode) { + return roleService.getRoleIdByRoleCode(roleCode); + } } diff --git a/urbanops-module-system/src/main/java/com/zteits/urbanops/module/system/api/sms/SmsCodeApi.java b/urbanops-module-system/src/main/java/com/zteits/urbanops/module/system/api/sms/SmsCodeApi.java index 4e0e51e..1fb0b47 100644 --- a/urbanops-module-system/src/main/java/com/zteits/urbanops/module/system/api/sms/SmsCodeApi.java +++ b/urbanops-module-system/src/main/java/com/zteits/urbanops/module/system/api/sms/SmsCodeApi.java @@ -36,5 +36,10 @@ public interface SmsCodeApi { * @param reqDTO 校验请求 */ void validateSmsCode(@Valid SmsCodeValidateReqDTO reqDTO); - + /** + * 根据模板发送短信 + * + * @param reqDTO 发送请求 + */ + Long openSendSmsCode(@Valid SmsCodeSendReqDTO reqDTO); } diff --git a/urbanops-module-system/src/main/java/com/zteits/urbanops/module/system/api/sms/SmsCodeApiImpl.java b/urbanops-module-system/src/main/java/com/zteits/urbanops/module/system/api/sms/SmsCodeApiImpl.java index 7506ebf..097a8bd 100644 --- a/urbanops-module-system/src/main/java/com/zteits/urbanops/module/system/api/sms/SmsCodeApiImpl.java +++ b/urbanops-module-system/src/main/java/com/zteits/urbanops/module/system/api/sms/SmsCodeApiImpl.java @@ -36,4 +36,9 @@ public class SmsCodeApiImpl implements SmsCodeApi { smsCodeService.validateSmsCode(reqDTO); } + @Override + public Long openSendSmsCode(SmsCodeSendReqDTO reqDTO) { + return smsCodeService.openSendSmsCode(reqDTO); + } + } diff --git a/urbanops-module-system/src/main/java/com/zteits/urbanops/module/system/api/sms/dto/code/SmsCodeSendReqDTO.java b/urbanops-module-system/src/main/java/com/zteits/urbanops/module/system/api/sms/dto/code/SmsCodeSendReqDTO.java index 7e47b4b..f8a0496 100644 --- a/urbanops-module-system/src/main/java/com/zteits/urbanops/module/system/api/sms/dto/code/SmsCodeSendReqDTO.java +++ b/urbanops-module-system/src/main/java/com/zteits/urbanops/module/system/api/sms/dto/code/SmsCodeSendReqDTO.java @@ -8,6 +8,8 @@ import lombok.Data; import jakarta.validation.constraints.NotEmpty; import jakarta.validation.constraints.NotNull; +import java.util.Map; + /** * 短信验证码的发送 Request DTO * @@ -34,4 +36,5 @@ public class SmsCodeSendReqDTO { @NotEmpty(message = "发送 IP 不能为空") private String createIp; + private Map templateParams; } diff --git a/urbanops-module-system/src/main/java/com/zteits/urbanops/module/system/enums/sms/SmsSceneEnum.java b/urbanops-module-system/src/main/java/com/zteits/urbanops/module/system/enums/sms/SmsSceneEnum.java index b936eb8..1e5314a 100644 --- a/urbanops-module-system/src/main/java/com/zteits/urbanops/module/system/enums/sms/SmsSceneEnum.java +++ b/urbanops-module-system/src/main/java/com/zteits/urbanops/module/system/enums/sms/SmsSceneEnum.java @@ -20,6 +20,8 @@ public enum SmsSceneEnum implements ArrayValuable { MEMBER_UPDATE_MOBILE(2, "user-update-mobile", "会员用户 - 修改手机"), MEMBER_UPDATE_PASSWORD(3, "user-update-password", "会员用户 - 修改密码"), MEMBER_RESET_PASSWORD(4, "user-reset-password", "会员用户 - 忘记密码"), + USER_SMS_LOGIN(5, "SMS_319860269", "用户 - 手机号登陆"), + YL_USER_SMS_SUBMISSION(6, "SMS_493695107", "园林派单业务催交发送短信"), ADMIN_MEMBER_LOGIN(21, "admin-sms-login", "后台用户 - 手机号登录"), ADMIN_MEMBER_REGISTER(22, "admin-sms-register", "后台用户 - 手机号注册"), diff --git a/urbanops-module-system/src/main/java/com/zteits/urbanops/module/system/service/permission/RoleService.java b/urbanops-module-system/src/main/java/com/zteits/urbanops/module/system/service/permission/RoleService.java index 5d0b654..c37568d 100644 --- a/urbanops-module-system/src/main/java/com/zteits/urbanops/module/system/service/permission/RoleService.java +++ b/urbanops-module-system/src/main/java/com/zteits/urbanops/module/system/service/permission/RoleService.java @@ -140,4 +140,13 @@ public interface RoleService { * 通过用户编号,获得角色列表 */ List getRoleIdsByUserId(Long userId); + + /** + * 通过角色类型,获得用户列表 + */ + List getUserIdsByRoleCode(String roleCode); + /** + * 通过角色类型,获得角色 + */ + RoleDO getRoleIdByRoleCode(String roleCode); } diff --git a/urbanops-module-system/src/main/java/com/zteits/urbanops/module/system/service/permission/RoleServiceImpl.java b/urbanops-module-system/src/main/java/com/zteits/urbanops/module/system/service/permission/RoleServiceImpl.java index ff3e3b8..ed00444 100644 --- a/urbanops-module-system/src/main/java/com/zteits/urbanops/module/system/service/permission/RoleServiceImpl.java +++ b/urbanops-module-system/src/main/java/com/zteits/urbanops/module/system/service/permission/RoleServiceImpl.java @@ -288,6 +288,26 @@ public class RoleServiceImpl implements RoleService { return list.stream().map(UserRoleDO::getRoleId).toList(); } + @Override + public List getUserIdsByRoleCode(String roleCode) { + RoleDO roleDO = roleMapper.selectOne(RoleDO::getCode, roleCode); + if (roleDO == null) { + return null; + } + QueryWrapper sql = new QueryWrapper<>(); + sql.select("user_id"); + List list = userRoleMapper.selectList(sql.lambda().eq(UserRoleDO::getRoleId, roleDO.getId())); + if (CollectionUtil.isEmpty(list)) { + return Collections.emptyList(); + } + return list.stream().map(UserRoleDO::getUserId).toList(); + } + + @Override + public RoleDO getRoleIdByRoleCode(String roleCode) { + return roleMapper.selectOne(RoleDO::getCode, roleCode); + } + /** * 获得自身的代理对象,解决 AOP 生效问题 * diff --git a/urbanops-module-system/src/main/java/com/zteits/urbanops/module/system/service/sms/SmsCodeService.java b/urbanops-module-system/src/main/java/com/zteits/urbanops/module/system/service/sms/SmsCodeService.java index 741801f..920c1c6 100644 --- a/urbanops-module-system/src/main/java/com/zteits/urbanops/module/system/service/sms/SmsCodeService.java +++ b/urbanops-module-system/src/main/java/com/zteits/urbanops/module/system/service/sms/SmsCodeService.java @@ -36,5 +36,10 @@ public interface SmsCodeService { * @param reqDTO 校验请求 */ void validateSmsCode(@Valid SmsCodeValidateReqDTO reqDTO); - + /** + * 发送短信 + * + * @param reqDTO 校验请求 + */ + Long openSendSmsCode(@Valid SmsCodeSendReqDTO reqDTO); } diff --git a/urbanops-module-system/src/main/java/com/zteits/urbanops/module/system/service/sms/SmsCodeServiceImpl.java b/urbanops-module-system/src/main/java/com/zteits/urbanops/module/system/service/sms/SmsCodeServiceImpl.java index 6cb0deb..cdc4b44 100644 --- a/urbanops-module-system/src/main/java/com/zteits/urbanops/module/system/service/sms/SmsCodeServiceImpl.java +++ b/urbanops-module-system/src/main/java/com/zteits/urbanops/module/system/service/sms/SmsCodeServiceImpl.java @@ -109,4 +109,13 @@ public class SmsCodeServiceImpl implements SmsCodeService { return lastSmsCode; } + @Override + public Long openSendSmsCode(SmsCodeSendReqDTO reqDTO) { + SmsSceneEnum sceneEnum = SmsSceneEnum.getCodeByScene(reqDTO.getScene()); + Assert.notNull(sceneEnum, "验证码场景({}) 查找不到配置", reqDTO.getScene()); + + // 发送验证码 + return smsSendService.sendSingleSms(reqDTO.getMobile(), null, null, + sceneEnum.getTemplateCode(), reqDTO.getTemplateParams()); + } } -- libgit2 0.21.4