From da5f3ae0e9d77444e28ddaf6f30c37d0a49700fe Mon Sep 17 00:00:00 2001 From: yanhuiqing Date: Wed, 17 Dec 2025 20:45:58 +0800 Subject: [PATCH] APP端工作流 候选人 el表达式表单编写 --- urbanops-module-workorder/src/main/java/com/zteits/urbanops/module/workorder/controller/admin/maininfo/vo/MainInfoHasTaskPageReqVO.java | 3 +++ urbanops-module-workorder/src/main/java/com/zteits/urbanops/module/workorder/controller/app/garden/vo/AppGardenWorkOrderRespVO.java | 3 +++ urbanops-module-workorder/src/main/java/com/zteits/urbanops/module/workorder/controller/app/garden/vo/task/AppGardenTaskApproveReqVO.java | 3 +++ urbanops-module-workorder/src/main/java/com/zteits/urbanops/module/workorder/controller/app/garden/vo/task/AppGardenTaskReturnReqVO.java | 17 +++++++++++++++-- urbanops-module-workorder/src/main/java/com/zteits/urbanops/module/workorder/dal/dataobject/maininfo/MainInfoExtDO.java | 4 ++++ urbanops-module-workorder/src/main/java/com/zteits/urbanops/module/workorder/dal/mysql/maininfo/MainInfoExtMapper.java | 19 +++++++++++++++++++ urbanops-module-workorder/src/main/java/com/zteits/urbanops/module/workorder/service/garden/BpmGardenServiceImpl.java | 18 ++++++++++++------ urbanops-module-workorder/src/main/java/com/zteits/urbanops/module/workorder/service/garden/el/YlTaskAssignService.java | 64 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ 8 files changed, 123 insertions(+), 8 deletions(-) create mode 100644 urbanops-module-workorder/src/main/java/com/zteits/urbanops/module/workorder/service/garden/el/YlTaskAssignService.java diff --git a/urbanops-module-workorder/src/main/java/com/zteits/urbanops/module/workorder/controller/admin/maininfo/vo/MainInfoHasTaskPageReqVO.java b/urbanops-module-workorder/src/main/java/com/zteits/urbanops/module/workorder/controller/admin/maininfo/vo/MainInfoHasTaskPageReqVO.java index 28e65de..bf93294 100644 --- a/urbanops-module-workorder/src/main/java/com/zteits/urbanops/module/workorder/controller/admin/maininfo/vo/MainInfoHasTaskPageReqVO.java +++ b/urbanops-module-workorder/src/main/java/com/zteits/urbanops/module/workorder/controller/admin/maininfo/vo/MainInfoHasTaskPageReqVO.java @@ -49,4 +49,7 @@ public class MainInfoHasTaskPageReqVO extends PageParam { private String streetName; @Schema(description = "养护级别ID", example = "1") private Integer curingLevelId; + + @Schema(description = "任务编号", example = "1") + private String taskId; } \ No newline at end of file diff --git a/urbanops-module-workorder/src/main/java/com/zteits/urbanops/module/workorder/controller/app/garden/vo/AppGardenWorkOrderRespVO.java b/urbanops-module-workorder/src/main/java/com/zteits/urbanops/module/workorder/controller/app/garden/vo/AppGardenWorkOrderRespVO.java index f3f0bda..9fdb24d 100644 --- a/urbanops-module-workorder/src/main/java/com/zteits/urbanops/module/workorder/controller/app/garden/vo/AppGardenWorkOrderRespVO.java +++ b/urbanops-module-workorder/src/main/java/com/zteits/urbanops/module/workorder/controller/app/garden/vo/AppGardenWorkOrderRespVO.java @@ -29,6 +29,9 @@ public class AppGardenWorkOrderRespVO extends MainInfoRespVO { @Schema(description = "任务名称") private String taskName; + @Schema(description = "任务key") + private String taskKey; + @Schema(description = "流程定义名称") private String processDefinitionName; diff --git a/urbanops-module-workorder/src/main/java/com/zteits/urbanops/module/workorder/controller/app/garden/vo/task/AppGardenTaskApproveReqVO.java b/urbanops-module-workorder/src/main/java/com/zteits/urbanops/module/workorder/controller/app/garden/vo/task/AppGardenTaskApproveReqVO.java index 263f3ef..e91d727 100644 --- a/urbanops-module-workorder/src/main/java/com/zteits/urbanops/module/workorder/controller/app/garden/vo/task/AppGardenTaskApproveReqVO.java +++ b/urbanops-module-workorder/src/main/java/com/zteits/urbanops/module/workorder/controller/app/garden/vo/task/AppGardenTaskApproveReqVO.java @@ -29,4 +29,7 @@ public class AppGardenTaskApproveReqVO { @Schema(description = "审批意见", example = "通过!") private String reason; + @Schema(description = "下一个审批人", example = "通过!") + private Long nextAssignee; + } \ No newline at end of file diff --git a/urbanops-module-workorder/src/main/java/com/zteits/urbanops/module/workorder/controller/app/garden/vo/task/AppGardenTaskReturnReqVO.java b/urbanops-module-workorder/src/main/java/com/zteits/urbanops/module/workorder/controller/app/garden/vo/task/AppGardenTaskReturnReqVO.java index bc2386e..4c39b31 100644 --- a/urbanops-module-workorder/src/main/java/com/zteits/urbanops/module/workorder/controller/app/garden/vo/task/AppGardenTaskReturnReqVO.java +++ b/urbanops-module-workorder/src/main/java/com/zteits/urbanops/module/workorder/controller/app/garden/vo/task/AppGardenTaskReturnReqVO.java @@ -4,6 +4,8 @@ import io.swagger.v3.oas.annotations.media.Schema; import jakarta.validation.constraints.NotEmpty; import lombok.Data; +import java.util.List; + /** * 类描述:园林APP端退回 reqVO * 创建人:yanhuiqing @@ -24,11 +26,22 @@ public class AppGardenTaskReturnReqVO { @NotEmpty(message = "任务编号不能为空") private String id; - @Schema(description = "退回到的任务 Key", requiredMode = Schema.RequiredMode.REQUIRED, example = "1") + /*@Schema(description = "退回到的任务 Key", requiredMode = Schema.RequiredMode.REQUIRED, example = "1") @NotEmpty(message = "退回到的任务 Key 不能为空") - private String targetTaskDefinitionKey; + private String targetTaskDefinitionKey;*/ @Schema(description = "退回意见", requiredMode = Schema.RequiredMode.REQUIRED, example = "我就是想驳回") @NotEmpty(message = "退回意见不能为空") private String reason; + + @Schema(description = "当前任务的taksKey", requiredMode = Schema.RequiredMode.REQUIRED) + @NotEmpty(message = "当前任务的taksKey不能为空") + private String curTaskKey; + + @Schema(description = "工单的数据id", requiredMode = Schema.RequiredMode.REQUIRED) + @NotEmpty(message = "工单的数据id不能为空") + private Long workerDataId; + + @Schema(description = "退回时的拍照图片") + private List returnImgs; } \ No newline at end of file diff --git a/urbanops-module-workorder/src/main/java/com/zteits/urbanops/module/workorder/dal/dataobject/maininfo/MainInfoExtDO.java b/urbanops-module-workorder/src/main/java/com/zteits/urbanops/module/workorder/dal/dataobject/maininfo/MainInfoExtDO.java index 613b3c4..59c35e7 100644 --- a/urbanops-module-workorder/src/main/java/com/zteits/urbanops/module/workorder/dal/dataobject/maininfo/MainInfoExtDO.java +++ b/urbanops-module-workorder/src/main/java/com/zteits/urbanops/module/workorder/dal/dataobject/maininfo/MainInfoExtDO.java @@ -154,6 +154,10 @@ public class MainInfoExtDO extends BaseDO { */ private String taskName; /** + * 任务key + */ + private String taskKey; + /** * 流程定义名称 */ private String processDefinitionName; diff --git a/urbanops-module-workorder/src/main/java/com/zteits/urbanops/module/workorder/dal/mysql/maininfo/MainInfoExtMapper.java b/urbanops-module-workorder/src/main/java/com/zteits/urbanops/module/workorder/dal/mysql/maininfo/MainInfoExtMapper.java index 8316a78..958a759 100644 --- a/urbanops-module-workorder/src/main/java/com/zteits/urbanops/module/workorder/dal/mysql/maininfo/MainInfoExtMapper.java +++ b/urbanops-module-workorder/src/main/java/com/zteits/urbanops/module/workorder/dal/mysql/maininfo/MainInfoExtMapper.java @@ -37,6 +37,7 @@ public interface MainInfoExtMapper extends BaseMapperX { " m.*,", " t.ID_ AS task_id,", " t.NAME_ AS task_name,", + " t.task_def_key_ as task_key,", " pd.NAME_ AS process_definition_name,", " t.START_TIME_,", " t.END_TIME_,", @@ -80,6 +81,9 @@ public interface MainInfoExtMapper extends BaseMapperX { " ", " AND m.curing_level_id = #{query.curingLevelId}", " ", + " ", + " AND t.id = #{query.taskId}", + " ", "ORDER BY t.END_TIME_ DESC", "" }) @@ -121,6 +125,7 @@ public interface MainInfoExtMapper extends BaseMapperX { @Result(column = "task_id", property = "taskId"), @Result(column = "task_name", property = "taskName"), + @Result(column = "task_key", property = "taskKey"), @Result(column = "process_definition_name", property = "processDefinitionName"), @Result(column = "START_TIME_", property = "startTime"), @Result(column = "END_TIME_", property = "endTime"), @@ -140,6 +145,7 @@ public interface MainInfoExtMapper extends BaseMapperX { " m.*,", " t.ID_ AS task_id,", " t.NAME_ AS task_name,", + " t.task_def_key_ as task_key,", " pd.NAME_ AS process_definition_name,", " t.CREATE_TIME_ AS START_TIME_,", " t.DUE_DATE_ AS END_TIME_,", @@ -180,6 +186,9 @@ public interface MainInfoExtMapper extends BaseMapperX { " ", " AND m.curing_level_id = #{query.curingLevelId}", " ", + " ", + " AND t.id = #{query.taskId}", + " ", "ORDER BY t.CREATE_TIME_ DESC", "" }) @@ -221,6 +230,7 @@ public interface MainInfoExtMapper extends BaseMapperX { @Result(column = "task_id", property = "taskId"), @Result(column = "task_name", property = "taskName"), + @Result(column = "task_key", property = "taskKey"), @Result(column = "process_definition_name", property = "processDefinitionName"), @Result(column = "START_TIME_", property = "startTime"), @Result(column = "END_TIME_", property = "endTime"), @@ -271,6 +281,10 @@ public interface MainInfoExtMapper extends BaseMapperX { " ", " AND su.id <> #{loginUserId}", " ", + " and sr.deleted='0'", + " and su.deleted='0'", + " and sur.deleted='0'", + " and sr.deleted='0'", "" }) @Results({ @@ -311,6 +325,11 @@ public interface MainInfoExtMapper extends BaseMapperX { " FIND_IN_SET(#{busiLine}, REPLACE(su.busi_line, ' ', '')) > 0", " AND gr.id = #{roadId}", " AND sr.code = #{roleCode}", + " and gr.deleted='0'", + " and sd.deleted='0'", + " and su.deleted='0'", + " and sur.deleted='0'", + " and sr.deleted='0'", "" }) @Results({ diff --git a/urbanops-module-workorder/src/main/java/com/zteits/urbanops/module/workorder/service/garden/BpmGardenServiceImpl.java b/urbanops-module-workorder/src/main/java/com/zteits/urbanops/module/workorder/service/garden/BpmGardenServiceImpl.java index 3abec02..78941b6 100644 --- a/urbanops-module-workorder/src/main/java/com/zteits/urbanops/module/workorder/service/garden/BpmGardenServiceImpl.java +++ b/urbanops-module-workorder/src/main/java/com/zteits/urbanops/module/workorder/service/garden/BpmGardenServiceImpl.java @@ -177,6 +177,9 @@ public class BpmGardenServiceImpl implements BpmGardenService{ Map variables = new HashMap<>(); //审批通过 variables.put(BpmnVariableConstants.PROCESS_INSTANCE_VARIABLE_STATUS,BpmTaskStatusEnum.APPROVE.getStatus()); + if(ObjectUtils.isNotAllEmpty(reqVO.getNextAssignee())){ + variables.put("ylWorkerId",reqVO.getNextAssignee()); + } targetVO.setVariables(variables); //TODO 审批候选人需要赋值 Map> nextAssignees = new HashMap<>(); @@ -245,6 +248,8 @@ public class BpmGardenServiceImpl implements BpmGardenService{ } } taskBuzReqVO.setUserId(SecurityFrameworkUtils.getLoginUserId()); + //TODO 先写死 + taskBuzReqVO.setKey(BpmCommonConstant.BPM_GARDEN_INSPECT_WO); PageResult pageResult = workOrderExtMapper.selectWorkOrderDonePage(pageVO,taskBuzReqVO); return AppGardenTaskConvert.INSTANCE.buildBuziTaskPage(pageResult,attachmentMapper); } @@ -277,6 +282,8 @@ public class BpmGardenServiceImpl implements BpmGardenService{ } } taskBuzReqVO.setUserId(SecurityFrameworkUtils.getLoginUserId()); + //TODO 先写死 + taskBuzReqVO.setKey(BpmCommonConstant.BPM_GARDEN_INSPECT_WO); PageResult pageResult = workOrderExtMapper.selectWorkOrderTodoPage(pageVO,taskBuzReqVO); return AppGardenTaskConvert.INSTANCE.buildBuziTaskPage(pageResult,attachmentMapper); @@ -335,7 +342,7 @@ public class BpmGardenServiceImpl implements BpmGardenService{ List longRangeImgList = createRequestVo.getLongRangeImgList(); MainInfoDO workOrder = BeanUtils.toBean(createRequestVo, MainInfoDO.class) - .setStatus(BpmTaskStatusEnum.NOT_START.getStatus()); + .setStatus(BpmTaskStatusEnum.RUNNING.getStatus()); RoadStreetRespDTO roadStreetRespDTO = roadApi.getRoadInfoById(createRequestVo.getRoadId()); workOrder.setStreetId(roadStreetRespDTO.getStreetId()); workOrder.setStreetName(roadStreetRespDTO.getStreetName()); @@ -355,10 +362,8 @@ public class BpmGardenServiceImpl implements BpmGardenService{ // 发起 BPM 流程 Long userId = SecurityFrameworkUtils.getLoginUserId(); Map processInstanceVariables = new HashMap<>(); - processInstanceVariables.put("workOrder", workOrder); - processInstanceVariables.put("imgList", imgList); - processInstanceVariables.put("longRangeImgList", longRangeImgList); - processInstanceVariables.put("initiator", userId); + processInstanceVariables.put("roadId", workOrder.getRoadId()); + processInstanceVariables.put("applyUserId", userId); Map> startUserSelectAssignees = new HashMap<>(); List userList = workOrderExtMapper.getUserByRoadIdAndRoleCode(workOrder.getRoadId(),BpmCommonConstant.TEAM_LEADER_YL,createRequestVo.getBusiLine()); if(org.springframework.util.ObjectUtils.isEmpty(userList)){ @@ -370,7 +375,8 @@ public class BpmGardenServiceImpl implements BpmGardenService{ .map(AdminUserRespDTO::getId) // 收集结果到List .collect(Collectors.toList()); - startUserSelectAssignees.put("",idList); + //startUserSelectAssignees.put("",idList); + processInstanceVariables.put("ylTeamLeaderId", idList.get(0)); String processInstanceId = processInstanceApi.createProcessInstance(userId, new BpmProcessInstanceCreateReqDTO().setProcessDefinitionKey(BpmCommonConstant.BPM_GARDEN_INSPECT_WO) .setVariables(processInstanceVariables).setBusinessKey(String.valueOf(workOrder.getId())) diff --git a/urbanops-module-workorder/src/main/java/com/zteits/urbanops/module/workorder/service/garden/el/YlTaskAssignService.java b/urbanops-module-workorder/src/main/java/com/zteits/urbanops/module/workorder/service/garden/el/YlTaskAssignService.java new file mode 100644 index 0000000..afa07da --- /dev/null +++ b/urbanops-module-workorder/src/main/java/com/zteits/urbanops/module/workorder/service/garden/el/YlTaskAssignService.java @@ -0,0 +1,64 @@ +package com.zteits.urbanops.module.workorder.service.garden.el; + +import com.zteits.urbanops.framework.security.core.util.SecurityFrameworkUtils; +import com.zteits.urbanops.module.system.api.user.dto.AdminUserRespDTO; +import com.zteits.urbanops.module.workorder.dal.mysql.maininfo.MainInfoExtMapper; +import jakarta.annotation.Resource; +import org.apache.ibatis.annotations.Param; +import org.springframework.lang.NonNull; +import org.springframework.stereotype.Component; + +import java.util.List; + +import static com.zteits.urbanops.framework.common.exception.util.ServiceExceptionUtil.exception; +import static com.zteits.urbanops.module.workorder.enums.ErrorCodeConstants.TEAM_LEADER_YL_NOT_EXISTS; + +/** + * 类描述:园林流程用户任务表单数据service + * 创建人:yanhuiqing + * 创建时间:2025/12/17 15:41 + * 修改人:yanhuiqing + * 修改时间:2025/12/17 15:41 + * 修改备注: + * + * @author yanhuiqing + * @version 1.0 + */ +@Component("ylTaskAssignService") // Bean名称,需与表达式中一致 +public class YlTaskAssignService { + + @Resource + private MainInfoExtMapper workOrderExtMapper; + public Long getInitiatorApproverByBusiness(Long roadId,String roleCode,String busiLine) { + List userList = workOrderExtMapper.getUserByRoadIdAndRoleCode(roadId,roleCode,busiLine); + if(null != userList && userList.size() > 0){ + return userList.get(0).getId(); + } + throw exception(TEAM_LEADER_YL_NOT_EXISTS); + } + + public List getYlWorkerIdsByTeamLeader(String roleCode,String busiLine) { + Long userId = SecurityFrameworkUtils.getLoginUserId(); + // 业务逻辑:查养护组长下属的养护员,或根据业务类型查共同处理人 + List userList = workOrderExtMapper.getUserByLoginIdAndRoleCode(userId,roleCode,busiLine,true); + return null; + } + + /** + * 场景3:复用养护组长ID(供验收节点使用) + * @param ylTeamLeaderId 养护组长ID + * @return 养护组长ID(直接返回,或查其上级) + */ + public String getTeamLeaderConfirmId(String ylTeamLeaderId) { + return ylTeamLeaderId; // 验收节点直接用之前指定的养护组长ID + } + + /** + * 场景4:复用巡查员ID(供验收节点使用) + * @param applyUserId 巡查员ID + * @return 巡查员ID + */ + public String getInspectorConfirmId(String applyUserId) { + return applyUserId; // 验收节点用发起的巡查员ID + } +} \ No newline at end of file -- libgit2 0.21.4