Commit db0999891238e73bc77ac918a80c8b7c6d2eb81f

Authored by 颜惠青
1 parent ae046bad

APP端工作流

Showing 13 changed files with 409 additions and 19 deletions
urbanops-module-workorder/src/main/java/com/zteits/urbanops/module/workorder/api/constant/BpmCommonConstant.java
... ... @@ -36,9 +36,9 @@ public class BpmCommonConstant {
36 36 */
37 37 public static final String RESULT_IMG_GROUP = "03";
38 38 /**
39   - * 园林远景图片类型
  39 + * 园林工作流 组长退回的附件照片
40 40 */
41   -// public static final String GARDEN_INSPECT_WO_ATTACH3 = "03";
  41 + public static final String GARDEN_TEAMLEADER_RETURN_IMG = "04";
42 42 /**
43 43 * 园林工单编号前缀
44 44 */
... ...
urbanops-module-workorder/src/main/java/com/zteits/urbanops/module/workorder/controller/app/garden/AppGardenWorkOrderController.java
... ... @@ -19,6 +19,9 @@ import com.zteits.urbanops.module.system.api.user.dto.AdminUserRespDTO;
19 19 import com.zteits.urbanops.module.workorder.api.constant.BpmCommonConstant;
20 20 import com.zteits.urbanops.module.workorder.controller.app.garden.vo.*;
21 21 import com.zteits.urbanops.module.workorder.controller.app.garden.vo.common.UserInfoPageReqVO;
  22 +import com.zteits.urbanops.module.workorder.controller.app.garden.vo.operator.AppGardenTaskReturnExtReqVO;
  23 +import com.zteits.urbanops.module.workorder.controller.app.garden.vo.operator.AppGardenTaskTeamLeaderAssignReqVO;
  24 +import com.zteits.urbanops.module.workorder.controller.app.garden.vo.operator.AppGardenTaskWorkerExcuteReqVO;
22 25 import com.zteits.urbanops.module.workorder.controller.app.garden.vo.process.AppGardenApprovalDetailReqVO;
23 26 import com.zteits.urbanops.module.workorder.controller.app.garden.vo.process.AppGardenApprovalDetailRespVO;
24 27 import com.zteits.urbanops.module.workorder.controller.app.garden.vo.task.*;
... ... @@ -135,6 +138,22 @@ public class AppGardenWorkOrderController {
135 138 return success(true);
136 139 }
137 140  
  141 + @PutMapping("/ylTeamLeaderAssignWOrder")
  142 + @Operation(summary = "app - 养护组长分配页面提交任务")
  143 + //@PreAuthorize("@ss.hasPermission('bpm:garden-workorder:update')")
  144 + public CommonResult<Boolean> ylTeamLeaderAssignWOrder(@Valid @RequestBody AppGardenTaskTeamLeaderAssignReqVO reqVO) {
  145 + gardenService.ylTeamLeaderAssignWOrder(reqVO);
  146 + return success(true);
  147 + }
  148 +
  149 + @PutMapping("/ylWorkerExcuteWOrder")
  150 + @Operation(summary = "app - 养护员实施页面的提交")
  151 + //@PreAuthorize("@ss.hasPermission('bpm:garden-workorder:update')")
  152 + public CommonResult<Boolean> ylWorkerExcuteWOrder(@Valid @RequestBody AppGardenTaskWorkerExcuteReqVO reqVO) {
  153 + gardenService.ylWorkerExcuteWOrder(reqVO);
  154 + return success(true);
  155 + }
  156 +
138 157 @PutMapping("/return")
139 158 @Operation(summary = " app - 退回任务", description = "用于【流程详情】的【退回】按钮")
140 159 //@PreAuthorize("@ss.hasPermission('bpm:garden-workorder:update')")
... ... @@ -143,6 +162,14 @@ public class AppGardenWorkOrderController {
143 162 return success(true);
144 163 }
145 164  
  165 + @PutMapping("/returnPreviousNode")
  166 + @Operation(summary = " app - 退回任务到上一个节点", description = "用于退回或不通过按钮")
  167 + //@PreAuthorize("@ss.hasPermission('bpm:garden-workorder:update')")
  168 + public CommonResult<Boolean> returnPreviousNode(@Valid @RequestBody AppGardenTaskReturnExtReqVO reqVO) {
  169 + gardenService.returnPreviousNode(reqVO);
  170 + return success(true);
  171 + }
  172 +
146 173 @PutMapping("/withdraw")
147 174 @Operation(summary = "app - 撤回任务")
148 175 //@PreAuthorize("@ss.hasPermission('bpm:garden-workorder:update')")
... ...
urbanops-module-workorder/src/main/java/com/zteits/urbanops/module/workorder/controller/app/garden/vo/operator/AppGardenTaskReturnExtReqVO.java 0 → 100644
  1 +package com.zteits.urbanops.module.workorder.controller.app.garden.vo.operator;
  2 +
  3 +import io.swagger.v3.oas.annotations.media.Schema;
  4 +import jakarta.validation.constraints.NotEmpty;
  5 +import lombok.Data;
  6 +
  7 +import java.util.List;
  8 +
  9 +/**
  10 + * 类描述:园林工单通用退回 reqVO
  11 + * 创建人:yanhuiqing
  12 + * 创建时间:2025/12/18 13:36
  13 + * 修改人:yanhuiqing
  14 + * 修改时间:2025/12/18 13:36
  15 + * 修改备注:
  16 + *
  17 + * @author yanhuiqing
  18 + * @version 1.0
  19 + */
  20 +@Schema(description = "APP - 不通过和退回流程任务的 Request VO")
  21 +@Data
  22 +public class AppGardenTaskReturnExtReqVO {
  23 +
  24 + @Schema(description = "任务编号", requiredMode = Schema.RequiredMode.REQUIRED, example = "1024")
  25 + @NotEmpty(message = "任务编号不能为空")
  26 + private String id;
  27 +
  28 + @Schema(description = "退回意见", requiredMode = Schema.RequiredMode.REQUIRED, example = "我就是想驳回")
  29 + @NotEmpty(message = "退回意见不能为空")
  30 + private String reason;
  31 +
  32 + @Schema(description = "当前任务的taksKey", requiredMode = Schema.RequiredMode.REQUIRED)
  33 + @NotEmpty(message = "当前任务的taksKey不能为空")
  34 + private String curTaskKey;
  35 +
  36 + @Schema(description = "工单的数据id", requiredMode = Schema.RequiredMode.REQUIRED)
  37 + //@NotEmpty(message = "工单的数据id不能为空")
  38 + private Long workerDataId;
  39 +
  40 + @Schema(description = "退回时的拍照图片")
  41 + private List<String> returnImgs;
  42 +
  43 +}
0 44 \ No newline at end of file
... ...
urbanops-module-workorder/src/main/java/com/zteits/urbanops/module/workorder/controller/app/garden/vo/operator/AppGardenTaskTeamLeaderAssignReqVO.java 0 → 100644
  1 +package com.zteits.urbanops.module.workorder.controller.app.garden.vo.operator;
  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 +/**
  9 + * 类描述:园林养护组长分配任务请求reqVO
  10 + * 创建人:yanhuiqing
  11 + * 创建时间:2025/12/18 14:31
  12 + * 修改人:yanhuiqing
  13 + * 修改时间:2025/12/18 14:31
  14 + * 修改备注:
  15 + *
  16 + * @author yanhuiqing
  17 + * @version 1.0
  18 + */
  19 +@Schema(description = "APP - 养护组长分配工单流程任务的 Request VO")
  20 +@Data
  21 +public class AppGardenTaskTeamLeaderAssignReqVO {
  22 + @Schema(description = "任务编号", requiredMode = Schema.RequiredMode.REQUIRED, example = "1024")
  23 + @NotEmpty(message = "任务编号不能为空")
  24 + private String id;
  25 +
  26 + @Schema(description = "审批意见", example = "通过!")
  27 + private String reason;
  28 +
  29 + @Schema(description = "养护员userId")
  30 + @NotNull(message = "养护员不能为空")
  31 + private Long nextAssignee;
  32 +}
0 33 \ No newline at end of file
... ...
urbanops-module-workorder/src/main/java/com/zteits/urbanops/module/workorder/controller/app/garden/vo/operator/AppGardenTaskWorkerExcuteReqVO.java 0 → 100644
  1 +package com.zteits.urbanops.module.workorder.controller.app.garden.vo.operator;
  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.util.List;
  9 +import java.util.Set;
  10 +
  11 +/**
  12 + * 类描述:园林养护员实施请求reqVO
  13 + * 创建人:yanhuiqing
  14 + * 创建时间:2025/12/18 14:59
  15 + * 修改人:yanhuiqing
  16 + * 修改时间:2025/12/18 14:59
  17 + * 修改备注:
  18 + *
  19 + * @author yanhuiqing
  20 + * @version 1.0
  21 + */
  22 +@Schema(description = "APP - 园林养护员实施请求 Request VO")
  23 +@Data
  24 +public class AppGardenTaskWorkerExcuteReqVO {
  25 +
  26 + @Schema(description = "任务编号", requiredMode = Schema.RequiredMode.REQUIRED, example = "1024")
  27 + @NotEmpty(message = "任务编号不能为空")
  28 + private String id;
  29 +
  30 + @Schema(description = "工单的数据id", requiredMode = Schema.RequiredMode.REQUIRED)
  31 + @NotNull(message = "工单的数据id不能为空")
  32 + private Long workerDataId;
  33 +
  34 + @Schema(description = "共同处理人")
  35 + private Set<Long> coHandlers;
  36 +
  37 + @Schema(description = "共同处理情况描述", requiredMode = Schema.RequiredMode.REQUIRED)
  38 + @NotEmpty(message = "共同处理情况描述不能为空")
  39 + private String handleResult;
  40 +
  41 + @Schema(description = "开始的问题拍照图片")
  42 + private List<String> problemsImgs;
  43 +
  44 + @Schema(description = "实施中的拍照图片")
  45 + private List<String> handingImgs;
  46 +
  47 + @Schema(description = "实施结束的拍照图片")
  48 + private List<String> handledImgs;
  49 +}
0 50 \ No newline at end of file
... ...
urbanops-module-workorder/src/main/java/com/zteits/urbanops/module/workorder/controller/app/garden/vo/task/AppGardenTaskApproveReqVO.java
... ... @@ -29,7 +29,4 @@ public class AppGardenTaskApproveReqVO {
29 29 @Schema(description = "审批意见", example = "通过!")
30 30 private String reason;
31 31  
32   - @Schema(description = "下一个审批人", example = "通过!")
33   - private Long nextAssignee;
34   -
35 32 }
36 33 \ No newline at end of file
... ...
urbanops-module-workorder/src/main/java/com/zteits/urbanops/module/workorder/controller/app/garden/vo/task/AppGardenTaskReturnReqVO.java
... ... @@ -26,22 +26,13 @@ public class AppGardenTaskReturnReqVO {
26 26 @NotEmpty(message = "任务编号不能为空")
27 27 private String id;
28 28  
29   - /*@Schema(description = "退回到的任务 Key", requiredMode = Schema.RequiredMode.REQUIRED, example = "1")
  29 + @Schema(description = "退回到的任务 Key", requiredMode = Schema.RequiredMode.REQUIRED, example = "1")
30 30 @NotEmpty(message = "退回到的任务 Key 不能为空")
31   - private String targetTaskDefinitionKey;*/
  31 + private String targetTaskDefinitionKey;
32 32  
33 33 @Schema(description = "退回意见", requiredMode = Schema.RequiredMode.REQUIRED, example = "我就是想驳回")
34 34 @NotEmpty(message = "退回意见不能为空")
35 35 private String reason;
36 36  
37   - @Schema(description = "当前任务的taksKey", requiredMode = Schema.RequiredMode.REQUIRED)
38   - @NotEmpty(message = "当前任务的taksKey不能为空")
39   - private String curTaskKey;
40 37  
41   - @Schema(description = "工单的数据id", requiredMode = Schema.RequiredMode.REQUIRED)
42   - @NotEmpty(message = "工单的数据id不能为空")
43   - private Long workerDataId;
44   -
45   - @Schema(description = "退回时的拍照图片")
46   - private List<String> returnImgs;
47 38 }
48 39 \ No newline at end of file
... ...
urbanops-module-workorder/src/main/java/com/zteits/urbanops/module/workorder/dal/dataobject/maininfo/MainInfoDO.java
1 1 package com.zteits.urbanops.module.workorder.dal.dataobject.maininfo;
2 2  
  3 +import com.baomidou.mybatisplus.extension.handlers.JacksonTypeHandler;
3 4 import io.swagger.v3.oas.annotations.media.Schema;
4 5 import lombok.*;
5 6 import java.util.*;
... ... @@ -146,5 +147,8 @@ public class MainInfoDO extends BaseDO {
146 147 */
147 148 private String handleResult;
148 149  
  150 + @TableField(typeHandler = JacksonTypeHandler.class)
  151 + private Set<Long> coHandlers;
  152 +
149 153  
150 154 }
151 155 \ No newline at end of file
... ...
urbanops-module-workorder/src/main/java/com/zteits/urbanops/module/workorder/enums/TaskNodeEnum.java 0 → 100644
  1 +package com.zteits.urbanops.module.workorder.enums;
  2 +import com.zteits.urbanops.module.workorder.exception.TaskNodeException;
  3 +
  4 +import java.util.Arrays;
  5 +import java.util.Map;
  6 +import java.util.concurrent.ConcurrentHashMap;
  7 +/**
  8 + * 类描述:园林工作流任务节点枚举(维护节点顺序与名称映射)
  9 + * 创建人:yanhuiqing
  10 + * 创建时间:2025/12/18 13:25
  11 + * 修改人:yanhuiqing
  12 + * 修改时间:2025/12/18 13:25
  13 + * 修改备注:
  14 + *
  15 + * @author yanhuiqing
  16 + * @version 1.0
  17 + */
  18 +
  19 +public enum TaskNodeEnum {
  20 + // 按业务顺序定义枚举常量:顺序值、节点名称
  21 + YL_INSPECTOR_START(1, "ylInspectorStart"),
  22 + YL_TEAM_LEADER(2, "ylTeamLeader"),
  23 + YL_WORKER(3, "ylWorker"),
  24 + YL_TEAM_LEADER_CONFIRM(4, "ylTeamLeaderConfirm"),
  25 + YL_INSPECTOR(5, "ylInspector"),
  26 + YL_INSPECTOR_END(6, "ylInspectorEnd");
  27 +
  28 + // 节点顺序(用于计算上一个节点)
  29 + private final int order;
  30 + // 节点名称(与传入参数匹配)
  31 + private final String nodeName;
  32 +
  33 + // 缓存:节点名称 -> 枚举实例(提升查询效率)
  34 + private static final Map<String, TaskNodeEnum> NODE_NAME_MAP = new ConcurrentHashMap<>();
  35 +
  36 + // 静态初始化缓存
  37 + static {
  38 + for (TaskNodeEnum node : values()) {
  39 + NODE_NAME_MAP.put(node.getNodeName(), node);
  40 + }
  41 + }
  42 +
  43 + TaskNodeEnum(int order, String nodeName) {
  44 + this.order = order;
  45 + this.nodeName = nodeName;
  46 + }
  47 +
  48 + // ===================== 公共方法 =====================
  49 +
  50 + /**
  51 + * 根据节点名称获取枚举实例
  52 + * @param nodeName 节点名称(如ylTeamLeader)
  53 + * @return 对应的枚举实例
  54 + * @throws TaskNodeException 节点不存在时抛出异常
  55 + */
  56 + public static TaskNodeEnum getByNodeName(String nodeName) {
  57 + TaskNodeEnum node = NODE_NAME_MAP.get(nodeName);
  58 + if (node == null) {
  59 + throw new TaskNodeException("任务节点不存在:" + nodeName);
  60 + }
  61 + return node;
  62 + }
  63 +
  64 + /**
  65 + * 获取上一个任务节点
  66 + * @return 上一个节点的枚举实例
  67 + * @throws TaskNodeException 无上级节点时抛出异常
  68 + */
  69 + public TaskNodeEnum getPreviousNode() {
  70 + // 上一个节点的顺序 = 当前顺序 - 1
  71 + int previousOrder = this.order - 1;
  72 + // 查找顺序匹配的节点
  73 + return Arrays.stream(values())
  74 + .filter(node -> node.getOrder() == previousOrder)
  75 + .findFirst()
  76 + .orElseThrow(() -> new TaskNodeException("无法找到[" + this.nodeName + "]的上一个任务节点"));
  77 + }
  78 +
  79 + // ===================== Getter =====================
  80 + public int getOrder() {
  81 + return order;
  82 + }
  83 +
  84 + public String getNodeName() {
  85 + return nodeName;
  86 + }
  87 +}
0 88 \ No newline at end of file
... ...
urbanops-module-workorder/src/main/java/com/zteits/urbanops/module/workorder/exception/TaskNodeException.java 0 → 100644
  1 +package com.zteits.urbanops.module.workorder.exception;
  2 +
  3 +/**
  4 + * 类描述:园林任务节点相关异常
  5 + * 创建人:yanhuiqing
  6 + * 创建时间:2025/12/18 13:28
  7 + * 修改人:yanhuiqing
  8 + * 修改时间:2025/12/18 13:28
  9 + * 修改备注:
  10 + *
  11 + * @author yanhuiqing
  12 + * @version 1.0
  13 + */
  14 +public class TaskNodeException extends RuntimeException {
  15 + public TaskNodeException(String message) {
  16 + super(message);
  17 + }
  18 +}
0 19 \ No newline at end of file
... ...
urbanops-module-workorder/src/main/java/com/zteits/urbanops/module/workorder/service/garden/BpmGardenService.java
... ... @@ -6,6 +6,9 @@ import com.zteits.urbanops.module.system.api.user.dto.AdminUserRespDTO;
6 6 import com.zteits.urbanops.module.workorder.controller.admin.garden.vo.BpmGardenWorkOrderCreateReqVO;
7 7 import com.zteits.urbanops.module.workorder.controller.admin.garden.vo.BpmGardenWorkOrderPageReqVO;
8 8 import com.zteits.urbanops.module.workorder.controller.app.garden.vo.*;
  9 +import com.zteits.urbanops.module.workorder.controller.app.garden.vo.operator.AppGardenTaskReturnExtReqVO;
  10 +import com.zteits.urbanops.module.workorder.controller.app.garden.vo.operator.AppGardenTaskTeamLeaderAssignReqVO;
  11 +import com.zteits.urbanops.module.workorder.controller.app.garden.vo.operator.AppGardenTaskWorkerExcuteReqVO;
9 12 import com.zteits.urbanops.module.workorder.controller.app.garden.vo.process.AppGardenApprovalDetailReqVO;
10 13 import com.zteits.urbanops.module.workorder.controller.app.garden.vo.process.AppGardenApprovalDetailRespVO;
11 14 import com.zteits.urbanops.module.workorder.controller.app.garden.vo.task.*;
... ... @@ -72,6 +75,18 @@ public interface BpmGardenService {
72 75 void approveTask(AppGardenTaskApproveReqVO reqVO);
73 76  
74 77 /**
  78 + * 养护组长 分配工单 提交审批
  79 + * @param reqVO
  80 + */
  81 + void ylTeamLeaderAssignWOrder(AppGardenTaskTeamLeaderAssignReqVO reqVO);
  82 +
  83 + /**
  84 + * 养护员实施工单提交审批
  85 + * @param reqVO
  86 + */
  87 + void ylWorkerExcuteWOrder(AppGardenTaskWorkerExcuteReqVO reqVO);
  88 +
  89 + /**
75 90 * 已办列表 -app端
76 91 * @param pageVO
77 92 * @return
... ... @@ -92,6 +107,12 @@ public interface BpmGardenService {
92 107 void returnTask(AppGardenTaskReturnReqVO reqVO);
93 108  
94 109 /**
  110 + * 退回上个节点任务 -app端
  111 + * @param reqVO
  112 + */
  113 + void returnPreviousNode(AppGardenTaskReturnExtReqVO reqVO);
  114 +
  115 + /**
95 116 * 撤回任务 -app端
96 117 * @param taskId
97 118 */
... ...
urbanops-module-workorder/src/main/java/com/zteits/urbanops/module/workorder/service/garden/BpmGardenServiceImpl.java
... ... @@ -31,6 +31,9 @@ import com.zteits.urbanops.module.workorder.controller.admin.garden.vo.BpmGarden
31 31 import com.zteits.urbanops.module.workorder.controller.admin.maininfo.vo.MainInfoHasTaskPageReqVO;
32 32 import com.zteits.urbanops.module.workorder.controller.admin.maininfo.vo.MainInfoPageReqVO;
33 33 import com.zteits.urbanops.module.workorder.controller.app.garden.vo.*;
  34 +import com.zteits.urbanops.module.workorder.controller.app.garden.vo.operator.AppGardenTaskReturnExtReqVO;
  35 +import com.zteits.urbanops.module.workorder.controller.app.garden.vo.operator.AppGardenTaskTeamLeaderAssignReqVO;
  36 +import com.zteits.urbanops.module.workorder.controller.app.garden.vo.operator.AppGardenTaskWorkerExcuteReqVO;
34 37 import com.zteits.urbanops.module.workorder.controller.app.garden.vo.process.AppGardenApprovalDetailReqVO;
35 38 import com.zteits.urbanops.module.workorder.controller.app.garden.vo.process.AppGardenApprovalDetailRespVO;
36 39 import com.zteits.urbanops.module.workorder.controller.app.garden.vo.task.*;
... ... @@ -43,6 +46,7 @@ import com.zteits.urbanops.module.workorder.dal.dataobject.maininfo.MainInfoExtD
43 46 import com.zteits.urbanops.module.workorder.dal.mysql.attachment.AttachmentMapper;
44 47 import com.zteits.urbanops.module.workorder.dal.mysql.maininfo.MainInfoExtMapper;
45 48 import com.zteits.urbanops.module.workorder.dal.mysql.maininfo.MainInfoMapper;
  49 +import com.zteits.urbanops.module.workorder.util.TaskNodeUtils;
46 50 import jakarta.annotation.Resource;
47 51 import org.flowable.engine.RuntimeService;
48 52 import org.flowable.engine.history.HistoricProcessInstance;
... ... @@ -179,15 +183,59 @@ public class BpmGardenServiceImpl implements BpmGardenService{
179 183 Map<String, Object> variables = new HashMap<>();
180 184 //审批通过
181 185 variables.put(BpmnVariableConstants.PROCESS_INSTANCE_VARIABLE_STATUS,BpmTaskStatusEnum.APPROVE.getStatus());
182   - if(ObjectUtils.isNotAllEmpty(reqVO.getNextAssignee())){
183   - variables.put("ylWorkerId",reqVO.getNextAssignee());
184   - }
185 186 targetVO.setVariables(variables);
186 187 //TODO 审批候选人需要赋值
187 188 Map<String, List<Long>> nextAssignees = new HashMap<>();
188 189 targetVO.setNextAssignees(nextAssignees);
189 190 taskService.approveTask(SecurityFrameworkUtils.getLoginUserId(),targetVO);
190 191 }
  192 +
  193 + @Override
  194 + public void ylTeamLeaderAssignWOrder(AppGardenTaskTeamLeaderAssignReqVO reqVO) {
  195 + BpmTaskApproveReqVO targetVO = BeanUtils.toBean(reqVO,BpmTaskApproveReqVO.class);
  196 + Map<String, Object> variables = new HashMap<>();
  197 + //审批通过
  198 + variables.put(BpmnVariableConstants.PROCESS_INSTANCE_VARIABLE_STATUS,BpmTaskStatusEnum.APPROVE.getStatus());
  199 + variables.put("ylWorkerId",reqVO.getNextAssignee());
  200 + targetVO.setVariables(variables);
  201 + Map<String, List<Long>> nextAssignees = new HashMap<>();
  202 + targetVO.setNextAssignees(nextAssignees);
  203 + taskService.approveTask(SecurityFrameworkUtils.getLoginUserId(),targetVO);
  204 +
  205 + }
  206 +
  207 + @Override
  208 + @Transactional(rollbackFor = Exception.class)
  209 + public void ylWorkerExcuteWOrder(AppGardenTaskWorkerExcuteReqVO reqVO) {
  210 + BpmTaskApproveReqVO targetVO = BeanUtils.toBean(reqVO,BpmTaskApproveReqVO.class);
  211 + Map<String, Object> variables = new HashMap<>();
  212 + //审批通过
  213 + variables.put(BpmnVariableConstants.PROCESS_INSTANCE_VARIABLE_STATUS,BpmTaskStatusEnum.APPROVE.getStatus());
  214 + targetVO.setVariables(variables);
  215 +
  216 + Long id = reqVO.getWorkerDataId();
  217 + List<String> handingImgs = reqVO.getHandingImgs();
  218 + List<String> handledImgs = reqVO.getHandledImgs();
  219 + List<String> problemsImgs = reqVO.getProblemsImgs();
  220 + MainInfoDO workerOrder = workOrderMapper.selectById(id);
  221 + workerOrder.setHandleResult(reqVO.getHandleResult());
  222 + workerOrder.setCoHandlers(reqVO.getCoHandlers());
  223 + workOrderMapper.updateById(workerOrder);
  224 +
  225 + if(ObjectUtils.isNotAllEmpty(id) && ObjectUtils.isNotAllEmpty(problemsImgs) && problemsImgs.size()>0){
  226 + attachmentInsertOrUpdate(problemsImgs,BpmCommonConstant.HANDLE_IMG_GROUP,workerOrder);
  227 + }
  228 + if(ObjectUtils.isNotAllEmpty(id) && ObjectUtils.isNotAllEmpty(handingImgs) && handingImgs.size()>0){
  229 + attachmentInsertOrUpdate(handingImgs,BpmCommonConstant.HANDLE_IMG_GROUP,workerOrder);
  230 + }
  231 + if(ObjectUtils.isNotAllEmpty(id) && ObjectUtils.isNotAllEmpty(handledImgs) && handledImgs.size()>0){
  232 + attachmentInsertOrUpdate(handledImgs,BpmCommonConstant.RESULT_IMG_GROUP,workerOrder);
  233 + }
  234 + taskService.approveTask(SecurityFrameworkUtils.getLoginUserId(),targetVO);
  235 +
  236 + }
  237 +
  238 +
191 239 @Override
192 240 public void returnTask(AppGardenTaskReturnReqVO reqVO) {
193 241 BpmTaskReturnReqVO targetVO = BeanUtils.toBean(reqVO,BpmTaskReturnReqVO.class);
... ... @@ -196,6 +244,22 @@ public class BpmGardenServiceImpl implements BpmGardenService{
196 244 }
197 245  
198 246 @Override
  247 + @Transactional(rollbackFor = Exception.class)
  248 + public void returnPreviousNode(AppGardenTaskReturnExtReqVO reqVO) {
  249 + BpmTaskReturnReqVO targetVO = BeanUtils.toBean(reqVO,BpmTaskReturnReqVO.class);
  250 + targetVO.setTargetTaskDefinitionKey(TaskNodeUtils.getPreviousNodeName(reqVO.getCurTaskKey()));
  251 + Long userId = SecurityFrameworkUtils.getLoginUserId();
  252 + taskService.returnTask(userId, targetVO);
  253 + Long id = reqVO.getWorkerDataId();
  254 + List<String> returnImgs = reqVO.getReturnImgs();
  255 + if(ObjectUtils.isNotAllEmpty(id) && ObjectUtils.isNotAllEmpty(returnImgs) && returnImgs.size()>0){
  256 + MainInfoDO workerOrder = workOrderMapper.selectById(id);
  257 + attachmentInsertOrUpdate(returnImgs,BpmCommonConstant.GARDEN_TEAMLEADER_RETURN_IMG,workerOrder);
  258 + }
  259 +
  260 + }
  261 +
  262 + @Override
199 263 public void withdrawTask(String taskId) {
200 264 Long userId = SecurityFrameworkUtils.getLoginUserId();
201 265 taskService.withdrawTask(userId,taskId);
... ... @@ -465,6 +529,29 @@ public class BpmGardenServiceImpl implements BpmGardenService{
465 529 }
466 530  
467 531 /**
  532 + * 通用附件的类型更新
  533 + * @param imgList
  534 + * @param type
  535 + * @param workOrder
  536 + */
  537 + private void attachmentInsertOrUpdate(List<String> imgList,String type,MainInfoDO workOrder){
  538 + if(ObjectUtils.isNotAllEmpty(imgList)){
  539 + AttachmentDO saveDO = new AttachmentDO();
  540 + saveDO.setBusiLine(workOrder.getBusiLine());
  541 + saveDO.setBusiType(type);
  542 + saveDO.setOrderNo(workOrder.getOrderNo());
  543 + String filePaths = String.join(",",imgList);
  544 + saveDO.setFileNames(filePaths);
  545 + LambdaQueryWrapper<AttachmentDO> deleteWrapper = new LambdaQueryWrapper<AttachmentDO>()
  546 + .eq(AttachmentDO::getBusiLine, workOrder.getBusiLine())
  547 + .eq(AttachmentDO::getBusiType, type)
  548 + .eq(AttachmentDO::getOrderNo, workOrder.getOrderNo());
  549 + attachmentMapper.delete(deleteWrapper);
  550 + attachmentMapper.insert(saveDO);
  551 + }
  552 + }
  553 +
  554 + /**
468 555 * 附件插入
469 556 * @param imgList 问题照片 P1
470 557 * @param streetImgList 街道照片 P2
... ...
urbanops-module-workorder/src/main/java/com/zteits/urbanops/module/workorder/util/TaskNodeUtils.java 0 → 100644
  1 +package com.zteits.urbanops.module.workorder.util;
  2 +
  3 +/**
  4 + * 类描述:任务节点工具类
  5 + * 创建人:yanhuiqing
  6 + * 创建时间:2025/12/18 13:29
  7 + * 修改人:yanhuiqing
  8 + * 修改时间:2025/12/18 13:29
  9 + * 修改备注:
  10 + *
  11 + * @author yanhuiqing
  12 + * @version 1.0
  13 + */
  14 +
  15 +import com.zteits.urbanops.module.workorder.enums.TaskNodeEnum;
  16 +import com.zteits.urbanops.module.workorder.exception.TaskNodeException;
  17 +
  18 +/**
  19 + * 任务节点工具类
  20 + */
  21 +public class TaskNodeUtils {
  22 +
  23 + /**
  24 + * 根据当前节点名称获取上一个节点名称
  25 + * @param currentNodeName 当前节点名称(如ylTeamLeader)
  26 + * @return 上一个节点名称
  27 + * @throws TaskNodeException 节点不存在或无上级节点时抛出异常
  28 + */
  29 + public static String getPreviousNodeName(String currentNodeName) {
  30 + TaskNodeEnum currentNode = TaskNodeEnum.getByNodeName(currentNodeName);
  31 + TaskNodeEnum previousNode = currentNode.getPreviousNode();
  32 + return previousNode.getNodeName();
  33 + }
  34 +}
0 35 \ No newline at end of file
... ...