diff --git a/urbanops-module-workorder/src/main/java/com/zteits/urbanops/module/workorder/api/constant/BpmCommonConstant.java b/urbanops-module-workorder/src/main/java/com/zteits/urbanops/module/workorder/api/constant/BpmCommonConstant.java index 7c4e0d8..2845408 100644 --- a/urbanops-module-workorder/src/main/java/com/zteits/urbanops/module/workorder/api/constant/BpmCommonConstant.java +++ b/urbanops-module-workorder/src/main/java/com/zteits/urbanops/module/workorder/api/constant/BpmCommonConstant.java @@ -36,9 +36,9 @@ public class BpmCommonConstant { */ public static final String RESULT_IMG_GROUP = "03"; /** - * 园林远景图片类型 + * 园林工作流 组长退回的附件照片 */ -// public static final String GARDEN_INSPECT_WO_ATTACH3 = "03"; + public static final String GARDEN_TEAMLEADER_RETURN_IMG = "04"; /** * 园林工单编号前缀 */ diff --git a/urbanops-module-workorder/src/main/java/com/zteits/urbanops/module/workorder/controller/app/garden/AppGardenWorkOrderController.java b/urbanops-module-workorder/src/main/java/com/zteits/urbanops/module/workorder/controller/app/garden/AppGardenWorkOrderController.java index 38f5d99..206d341 100644 --- a/urbanops-module-workorder/src/main/java/com/zteits/urbanops/module/workorder/controller/app/garden/AppGardenWorkOrderController.java +++ b/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; import com.zteits.urbanops.module.workorder.api.constant.BpmCommonConstant; import com.zteits.urbanops.module.workorder.controller.app.garden.vo.*; import com.zteits.urbanops.module.workorder.controller.app.garden.vo.common.UserInfoPageReqVO; +import com.zteits.urbanops.module.workorder.controller.app.garden.vo.operator.AppGardenTaskReturnExtReqVO; +import com.zteits.urbanops.module.workorder.controller.app.garden.vo.operator.AppGardenTaskTeamLeaderAssignReqVO; +import com.zteits.urbanops.module.workorder.controller.app.garden.vo.operator.AppGardenTaskWorkerExcuteReqVO; import com.zteits.urbanops.module.workorder.controller.app.garden.vo.process.AppGardenApprovalDetailReqVO; import com.zteits.urbanops.module.workorder.controller.app.garden.vo.process.AppGardenApprovalDetailRespVO; import com.zteits.urbanops.module.workorder.controller.app.garden.vo.task.*; @@ -135,6 +138,22 @@ public class AppGardenWorkOrderController { return success(true); } + @PutMapping("/ylTeamLeaderAssignWOrder") + @Operation(summary = "app - 养护组长分配页面提交任务") + //@PreAuthorize("@ss.hasPermission('bpm:garden-workorder:update')") + public CommonResult ylTeamLeaderAssignWOrder(@Valid @RequestBody AppGardenTaskTeamLeaderAssignReqVO reqVO) { + gardenService.ylTeamLeaderAssignWOrder(reqVO); + return success(true); + } + + @PutMapping("/ylWorkerExcuteWOrder") + @Operation(summary = "app - 养护员实施页面的提交") + //@PreAuthorize("@ss.hasPermission('bpm:garden-workorder:update')") + public CommonResult ylWorkerExcuteWOrder(@Valid @RequestBody AppGardenTaskWorkerExcuteReqVO reqVO) { + gardenService.ylWorkerExcuteWOrder(reqVO); + return success(true); + } + @PutMapping("/return") @Operation(summary = " app - 退回任务", description = "用于【流程详情】的【退回】按钮") //@PreAuthorize("@ss.hasPermission('bpm:garden-workorder:update')") @@ -143,6 +162,14 @@ public class AppGardenWorkOrderController { return success(true); } + @PutMapping("/returnPreviousNode") + @Operation(summary = " app - 退回任务到上一个节点", description = "用于退回或不通过按钮") + //@PreAuthorize("@ss.hasPermission('bpm:garden-workorder:update')") + public CommonResult returnPreviousNode(@Valid @RequestBody AppGardenTaskReturnExtReqVO reqVO) { + gardenService.returnPreviousNode(reqVO); + return success(true); + } + @PutMapping("/withdraw") @Operation(summary = "app - 撤回任务") //@PreAuthorize("@ss.hasPermission('bpm:garden-workorder:update')") diff --git a/urbanops-module-workorder/src/main/java/com/zteits/urbanops/module/workorder/controller/app/garden/vo/operator/AppGardenTaskReturnExtReqVO.java b/urbanops-module-workorder/src/main/java/com/zteits/urbanops/module/workorder/controller/app/garden/vo/operator/AppGardenTaskReturnExtReqVO.java new file mode 100644 index 0000000..d115207 --- /dev/null +++ b/urbanops-module-workorder/src/main/java/com/zteits/urbanops/module/workorder/controller/app/garden/vo/operator/AppGardenTaskReturnExtReqVO.java @@ -0,0 +1,43 @@ +package com.zteits.urbanops.module.workorder.controller.app.garden.vo.operator; + +import io.swagger.v3.oas.annotations.media.Schema; +import jakarta.validation.constraints.NotEmpty; +import lombok.Data; + +import java.util.List; + +/** + * 类描述:园林工单通用退回 reqVO + * 创建人:yanhuiqing + * 创建时间:2025/12/18 13:36 + * 修改人:yanhuiqing + * 修改时间:2025/12/18 13:36 + * 修改备注: + * + * @author yanhuiqing + * @version 1.0 + */ +@Schema(description = "APP - 不通过和退回流程任务的 Request VO") +@Data +public class AppGardenTaskReturnExtReqVO { + + @Schema(description = "任务编号", requiredMode = Schema.RequiredMode.REQUIRED, example = "1024") + @NotEmpty(message = "任务编号不能为空") + private String id; + + @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/controller/app/garden/vo/operator/AppGardenTaskTeamLeaderAssignReqVO.java b/urbanops-module-workorder/src/main/java/com/zteits/urbanops/module/workorder/controller/app/garden/vo/operator/AppGardenTaskTeamLeaderAssignReqVO.java new file mode 100644 index 0000000..d5b85c7 --- /dev/null +++ b/urbanops-module-workorder/src/main/java/com/zteits/urbanops/module/workorder/controller/app/garden/vo/operator/AppGardenTaskTeamLeaderAssignReqVO.java @@ -0,0 +1,32 @@ +package com.zteits.urbanops.module.workorder.controller.app.garden.vo.operator; + +import io.swagger.v3.oas.annotations.media.Schema; +import jakarta.validation.constraints.NotEmpty; +import jakarta.validation.constraints.NotNull; +import lombok.Data; + +/** + * 类描述:园林养护组长分配任务请求reqVO + * 创建人:yanhuiqing + * 创建时间:2025/12/18 14:31 + * 修改人:yanhuiqing + * 修改时间:2025/12/18 14:31 + * 修改备注: + * + * @author yanhuiqing + * @version 1.0 + */ +@Schema(description = "APP - 养护组长分配工单流程任务的 Request VO") +@Data +public class AppGardenTaskTeamLeaderAssignReqVO { + @Schema(description = "任务编号", requiredMode = Schema.RequiredMode.REQUIRED, example = "1024") + @NotEmpty(message = "任务编号不能为空") + private String id; + + @Schema(description = "审批意见", example = "通过!") + private String reason; + + @Schema(description = "养护员userId") + @NotNull(message = "养护员不能为空") + 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/operator/AppGardenTaskWorkerExcuteReqVO.java b/urbanops-module-workorder/src/main/java/com/zteits/urbanops/module/workorder/controller/app/garden/vo/operator/AppGardenTaskWorkerExcuteReqVO.java new file mode 100644 index 0000000..f223453 --- /dev/null +++ b/urbanops-module-workorder/src/main/java/com/zteits/urbanops/module/workorder/controller/app/garden/vo/operator/AppGardenTaskWorkerExcuteReqVO.java @@ -0,0 +1,49 @@ +package com.zteits.urbanops.module.workorder.controller.app.garden.vo.operator; + +import io.swagger.v3.oas.annotations.media.Schema; +import jakarta.validation.constraints.NotEmpty; +import jakarta.validation.constraints.NotNull; +import lombok.Data; + +import java.util.List; +import java.util.Set; + +/** + * 类描述:园林养护员实施请求reqVO + * 创建人:yanhuiqing + * 创建时间:2025/12/18 14:59 + * 修改人:yanhuiqing + * 修改时间:2025/12/18 14:59 + * 修改备注: + * + * @author yanhuiqing + * @version 1.0 + */ +@Schema(description = "APP - 园林养护员实施请求 Request VO") +@Data +public class AppGardenTaskWorkerExcuteReqVO { + + @Schema(description = "任务编号", requiredMode = Schema.RequiredMode.REQUIRED, example = "1024") + @NotEmpty(message = "任务编号不能为空") + private String id; + + @Schema(description = "工单的数据id", requiredMode = Schema.RequiredMode.REQUIRED) + @NotNull(message = "工单的数据id不能为空") + private Long workerDataId; + + @Schema(description = "共同处理人") + private Set coHandlers; + + @Schema(description = "共同处理情况描述", requiredMode = Schema.RequiredMode.REQUIRED) + @NotEmpty(message = "共同处理情况描述不能为空") + private String handleResult; + + @Schema(description = "开始的问题拍照图片") + private List problemsImgs; + + @Schema(description = "实施中的拍照图片") + private List handingImgs; + + @Schema(description = "实施结束的拍照图片") + private List handledImgs; +} \ 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/AppGardenTaskApproveReqVO.java b/urbanops-module-workorder/src/main/java/com/zteits/urbanops/module/workorder/controller/app/garden/vo/task/AppGardenTaskApproveReqVO.java index e91d727..263f3ef 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,7 +29,4 @@ 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 4c39b31..7ac9a3a 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 @@ -26,22 +26,13 @@ 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/MainInfoDO.java b/urbanops-module-workorder/src/main/java/com/zteits/urbanops/module/workorder/dal/dataobject/maininfo/MainInfoDO.java index f3e1a31..745185f 100644 --- a/urbanops-module-workorder/src/main/java/com/zteits/urbanops/module/workorder/dal/dataobject/maininfo/MainInfoDO.java +++ b/urbanops-module-workorder/src/main/java/com/zteits/urbanops/module/workorder/dal/dataobject/maininfo/MainInfoDO.java @@ -1,5 +1,6 @@ package com.zteits.urbanops.module.workorder.dal.dataobject.maininfo; +import com.baomidou.mybatisplus.extension.handlers.JacksonTypeHandler; import io.swagger.v3.oas.annotations.media.Schema; import lombok.*; import java.util.*; @@ -146,5 +147,8 @@ public class MainInfoDO extends BaseDO { */ private String handleResult; + @TableField(typeHandler = JacksonTypeHandler.class) + private Set coHandlers; + } \ No newline at end of file diff --git a/urbanops-module-workorder/src/main/java/com/zteits/urbanops/module/workorder/enums/TaskNodeEnum.java b/urbanops-module-workorder/src/main/java/com/zteits/urbanops/module/workorder/enums/TaskNodeEnum.java new file mode 100644 index 0000000..3216975 --- /dev/null +++ b/urbanops-module-workorder/src/main/java/com/zteits/urbanops/module/workorder/enums/TaskNodeEnum.java @@ -0,0 +1,87 @@ +package com.zteits.urbanops.module.workorder.enums; +import com.zteits.urbanops.module.workorder.exception.TaskNodeException; + +import java.util.Arrays; +import java.util.Map; +import java.util.concurrent.ConcurrentHashMap; +/** + * 类描述:园林工作流任务节点枚举(维护节点顺序与名称映射) + * 创建人:yanhuiqing + * 创建时间:2025/12/18 13:25 + * 修改人:yanhuiqing + * 修改时间:2025/12/18 13:25 + * 修改备注: + * + * @author yanhuiqing + * @version 1.0 + */ + +public enum TaskNodeEnum { + // 按业务顺序定义枚举常量:顺序值、节点名称 + YL_INSPECTOR_START(1, "ylInspectorStart"), + YL_TEAM_LEADER(2, "ylTeamLeader"), + YL_WORKER(3, "ylWorker"), + YL_TEAM_LEADER_CONFIRM(4, "ylTeamLeaderConfirm"), + YL_INSPECTOR(5, "ylInspector"), + YL_INSPECTOR_END(6, "ylInspectorEnd"); + + // 节点顺序(用于计算上一个节点) + private final int order; + // 节点名称(与传入参数匹配) + private final String nodeName; + + // 缓存:节点名称 -> 枚举实例(提升查询效率) + private static final Map NODE_NAME_MAP = new ConcurrentHashMap<>(); + + // 静态初始化缓存 + static { + for (TaskNodeEnum node : values()) { + NODE_NAME_MAP.put(node.getNodeName(), node); + } + } + + TaskNodeEnum(int order, String nodeName) { + this.order = order; + this.nodeName = nodeName; + } + + // ===================== 公共方法 ===================== + + /** + * 根据节点名称获取枚举实例 + * @param nodeName 节点名称(如ylTeamLeader) + * @return 对应的枚举实例 + * @throws TaskNodeException 节点不存在时抛出异常 + */ + public static TaskNodeEnum getByNodeName(String nodeName) { + TaskNodeEnum node = NODE_NAME_MAP.get(nodeName); + if (node == null) { + throw new TaskNodeException("任务节点不存在:" + nodeName); + } + return node; + } + + /** + * 获取上一个任务节点 + * @return 上一个节点的枚举实例 + * @throws TaskNodeException 无上级节点时抛出异常 + */ + public TaskNodeEnum getPreviousNode() { + // 上一个节点的顺序 = 当前顺序 - 1 + int previousOrder = this.order - 1; + // 查找顺序匹配的节点 + return Arrays.stream(values()) + .filter(node -> node.getOrder() == previousOrder) + .findFirst() + .orElseThrow(() -> new TaskNodeException("无法找到[" + this.nodeName + "]的上一个任务节点")); + } + + // ===================== Getter ===================== + public int getOrder() { + return order; + } + + public String getNodeName() { + return nodeName; + } +} \ No newline at end of file diff --git a/urbanops-module-workorder/src/main/java/com/zteits/urbanops/module/workorder/exception/TaskNodeException.java b/urbanops-module-workorder/src/main/java/com/zteits/urbanops/module/workorder/exception/TaskNodeException.java new file mode 100644 index 0000000..acdba8f --- /dev/null +++ b/urbanops-module-workorder/src/main/java/com/zteits/urbanops/module/workorder/exception/TaskNodeException.java @@ -0,0 +1,18 @@ +package com.zteits.urbanops.module.workorder.exception; + +/** + * 类描述:园林任务节点相关异常 + * 创建人:yanhuiqing + * 创建时间:2025/12/18 13:28 + * 修改人:yanhuiqing + * 修改时间:2025/12/18 13:28 + * 修改备注: + * + * @author yanhuiqing + * @version 1.0 + */ +public class TaskNodeException extends RuntimeException { + public TaskNodeException(String message) { + super(message); + } +} \ No newline at end of file diff --git a/urbanops-module-workorder/src/main/java/com/zteits/urbanops/module/workorder/service/garden/BpmGardenService.java b/urbanops-module-workorder/src/main/java/com/zteits/urbanops/module/workorder/service/garden/BpmGardenService.java index dde974e..2f4c95b 100644 --- a/urbanops-module-workorder/src/main/java/com/zteits/urbanops/module/workorder/service/garden/BpmGardenService.java +++ b/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; import com.zteits.urbanops.module.workorder.controller.admin.garden.vo.BpmGardenWorkOrderCreateReqVO; import com.zteits.urbanops.module.workorder.controller.admin.garden.vo.BpmGardenWorkOrderPageReqVO; import com.zteits.urbanops.module.workorder.controller.app.garden.vo.*; +import com.zteits.urbanops.module.workorder.controller.app.garden.vo.operator.AppGardenTaskReturnExtReqVO; +import com.zteits.urbanops.module.workorder.controller.app.garden.vo.operator.AppGardenTaskTeamLeaderAssignReqVO; +import com.zteits.urbanops.module.workorder.controller.app.garden.vo.operator.AppGardenTaskWorkerExcuteReqVO; import com.zteits.urbanops.module.workorder.controller.app.garden.vo.process.AppGardenApprovalDetailReqVO; import com.zteits.urbanops.module.workorder.controller.app.garden.vo.process.AppGardenApprovalDetailRespVO; import com.zteits.urbanops.module.workorder.controller.app.garden.vo.task.*; @@ -72,6 +75,18 @@ public interface BpmGardenService { void approveTask(AppGardenTaskApproveReqVO reqVO); /** + * 养护组长 分配工单 提交审批 + * @param reqVO + */ + void ylTeamLeaderAssignWOrder(AppGardenTaskTeamLeaderAssignReqVO reqVO); + + /** + * 养护员实施工单提交审批 + * @param reqVO + */ + void ylWorkerExcuteWOrder(AppGardenTaskWorkerExcuteReqVO reqVO); + + /** * 已办列表 -app端 * @param pageVO * @return @@ -92,6 +107,12 @@ public interface BpmGardenService { void returnTask(AppGardenTaskReturnReqVO reqVO); /** + * 退回上个节点任务 -app端 + * @param reqVO + */ + void returnPreviousNode(AppGardenTaskReturnExtReqVO reqVO); + + /** * 撤回任务 -app端 * @param taskId */ 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 0e256d5..a6bf885 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 @@ -31,6 +31,9 @@ import com.zteits.urbanops.module.workorder.controller.admin.garden.vo.BpmGarden import com.zteits.urbanops.module.workorder.controller.admin.maininfo.vo.MainInfoHasTaskPageReqVO; import com.zteits.urbanops.module.workorder.controller.admin.maininfo.vo.MainInfoPageReqVO; import com.zteits.urbanops.module.workorder.controller.app.garden.vo.*; +import com.zteits.urbanops.module.workorder.controller.app.garden.vo.operator.AppGardenTaskReturnExtReqVO; +import com.zteits.urbanops.module.workorder.controller.app.garden.vo.operator.AppGardenTaskTeamLeaderAssignReqVO; +import com.zteits.urbanops.module.workorder.controller.app.garden.vo.operator.AppGardenTaskWorkerExcuteReqVO; import com.zteits.urbanops.module.workorder.controller.app.garden.vo.process.AppGardenApprovalDetailReqVO; import com.zteits.urbanops.module.workorder.controller.app.garden.vo.process.AppGardenApprovalDetailRespVO; 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 import com.zteits.urbanops.module.workorder.dal.mysql.attachment.AttachmentMapper; import com.zteits.urbanops.module.workorder.dal.mysql.maininfo.MainInfoExtMapper; import com.zteits.urbanops.module.workorder.dal.mysql.maininfo.MainInfoMapper; +import com.zteits.urbanops.module.workorder.util.TaskNodeUtils; import jakarta.annotation.Resource; import org.flowable.engine.RuntimeService; import org.flowable.engine.history.HistoricProcessInstance; @@ -179,15 +183,59 @@ 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<>(); targetVO.setNextAssignees(nextAssignees); taskService.approveTask(SecurityFrameworkUtils.getLoginUserId(),targetVO); } + + @Override + public void ylTeamLeaderAssignWOrder(AppGardenTaskTeamLeaderAssignReqVO reqVO) { + BpmTaskApproveReqVO targetVO = BeanUtils.toBean(reqVO,BpmTaskApproveReqVO.class); + Map variables = new HashMap<>(); + //审批通过 + variables.put(BpmnVariableConstants.PROCESS_INSTANCE_VARIABLE_STATUS,BpmTaskStatusEnum.APPROVE.getStatus()); + variables.put("ylWorkerId",reqVO.getNextAssignee()); + targetVO.setVariables(variables); + Map> nextAssignees = new HashMap<>(); + targetVO.setNextAssignees(nextAssignees); + taskService.approveTask(SecurityFrameworkUtils.getLoginUserId(),targetVO); + + } + + @Override + @Transactional(rollbackFor = Exception.class) + public void ylWorkerExcuteWOrder(AppGardenTaskWorkerExcuteReqVO reqVO) { + BpmTaskApproveReqVO targetVO = BeanUtils.toBean(reqVO,BpmTaskApproveReqVO.class); + Map variables = new HashMap<>(); + //审批通过 + variables.put(BpmnVariableConstants.PROCESS_INSTANCE_VARIABLE_STATUS,BpmTaskStatusEnum.APPROVE.getStatus()); + targetVO.setVariables(variables); + + Long id = reqVO.getWorkerDataId(); + List handingImgs = reqVO.getHandingImgs(); + List handledImgs = reqVO.getHandledImgs(); + List problemsImgs = reqVO.getProblemsImgs(); + MainInfoDO workerOrder = workOrderMapper.selectById(id); + workerOrder.setHandleResult(reqVO.getHandleResult()); + workerOrder.setCoHandlers(reqVO.getCoHandlers()); + workOrderMapper.updateById(workerOrder); + + if(ObjectUtils.isNotAllEmpty(id) && ObjectUtils.isNotAllEmpty(problemsImgs) && problemsImgs.size()>0){ + attachmentInsertOrUpdate(problemsImgs,BpmCommonConstant.HANDLE_IMG_GROUP,workerOrder); + } + if(ObjectUtils.isNotAllEmpty(id) && ObjectUtils.isNotAllEmpty(handingImgs) && handingImgs.size()>0){ + attachmentInsertOrUpdate(handingImgs,BpmCommonConstant.HANDLE_IMG_GROUP,workerOrder); + } + if(ObjectUtils.isNotAllEmpty(id) && ObjectUtils.isNotAllEmpty(handledImgs) && handledImgs.size()>0){ + attachmentInsertOrUpdate(handledImgs,BpmCommonConstant.RESULT_IMG_GROUP,workerOrder); + } + taskService.approveTask(SecurityFrameworkUtils.getLoginUserId(),targetVO); + + } + + @Override public void returnTask(AppGardenTaskReturnReqVO reqVO) { BpmTaskReturnReqVO targetVO = BeanUtils.toBean(reqVO,BpmTaskReturnReqVO.class); @@ -196,6 +244,22 @@ public class BpmGardenServiceImpl implements BpmGardenService{ } @Override + @Transactional(rollbackFor = Exception.class) + public void returnPreviousNode(AppGardenTaskReturnExtReqVO reqVO) { + BpmTaskReturnReqVO targetVO = BeanUtils.toBean(reqVO,BpmTaskReturnReqVO.class); + targetVO.setTargetTaskDefinitionKey(TaskNodeUtils.getPreviousNodeName(reqVO.getCurTaskKey())); + Long userId = SecurityFrameworkUtils.getLoginUserId(); + taskService.returnTask(userId, targetVO); + Long id = reqVO.getWorkerDataId(); + List returnImgs = reqVO.getReturnImgs(); + if(ObjectUtils.isNotAllEmpty(id) && ObjectUtils.isNotAllEmpty(returnImgs) && returnImgs.size()>0){ + MainInfoDO workerOrder = workOrderMapper.selectById(id); + attachmentInsertOrUpdate(returnImgs,BpmCommonConstant.GARDEN_TEAMLEADER_RETURN_IMG,workerOrder); + } + + } + + @Override public void withdrawTask(String taskId) { Long userId = SecurityFrameworkUtils.getLoginUserId(); taskService.withdrawTask(userId,taskId); @@ -465,6 +529,29 @@ public class BpmGardenServiceImpl implements BpmGardenService{ } /** + * 通用附件的类型更新 + * @param imgList + * @param type + * @param workOrder + */ + private void attachmentInsertOrUpdate(List imgList,String type,MainInfoDO workOrder){ + if(ObjectUtils.isNotAllEmpty(imgList)){ + AttachmentDO saveDO = new AttachmentDO(); + saveDO.setBusiLine(workOrder.getBusiLine()); + saveDO.setBusiType(type); + saveDO.setOrderNo(workOrder.getOrderNo()); + String filePaths = String.join(",",imgList); + saveDO.setFileNames(filePaths); + LambdaQueryWrapper deleteWrapper = new LambdaQueryWrapper() + .eq(AttachmentDO::getBusiLine, workOrder.getBusiLine()) + .eq(AttachmentDO::getBusiType, type) + .eq(AttachmentDO::getOrderNo, workOrder.getOrderNo()); + attachmentMapper.delete(deleteWrapper); + attachmentMapper.insert(saveDO); + } + } + + /** * 附件插入 * @param imgList 问题照片 P1 * @param streetImgList 街道照片 P2 diff --git a/urbanops-module-workorder/src/main/java/com/zteits/urbanops/module/workorder/util/TaskNodeUtils.java b/urbanops-module-workorder/src/main/java/com/zteits/urbanops/module/workorder/util/TaskNodeUtils.java new file mode 100644 index 0000000..b476006 --- /dev/null +++ b/urbanops-module-workorder/src/main/java/com/zteits/urbanops/module/workorder/util/TaskNodeUtils.java @@ -0,0 +1,34 @@ +package com.zteits.urbanops.module.workorder.util; + +/** + * 类描述:任务节点工具类 + * 创建人:yanhuiqing + * 创建时间:2025/12/18 13:29 + * 修改人:yanhuiqing + * 修改时间:2025/12/18 13:29 + * 修改备注: + * + * @author yanhuiqing + * @version 1.0 + */ + +import com.zteits.urbanops.module.workorder.enums.TaskNodeEnum; +import com.zteits.urbanops.module.workorder.exception.TaskNodeException; + +/** + * 任务节点工具类 + */ +public class TaskNodeUtils { + + /** + * 根据当前节点名称获取上一个节点名称 + * @param currentNodeName 当前节点名称(如ylTeamLeader) + * @return 上一个节点名称 + * @throws TaskNodeException 节点不存在或无上级节点时抛出异常 + */ + public static String getPreviousNodeName(String currentNodeName) { + TaskNodeEnum currentNode = TaskNodeEnum.getByNodeName(currentNodeName); + TaskNodeEnum previousNode = currentNode.getPreviousNode(); + return previousNode.getNodeName(); + } +} \ No newline at end of file