From 403e5a00179d9c810a9c0bada070eacae50c55ac Mon Sep 17 00:00:00 2001 From: yanhuiqing Date: Sun, 14 Dec 2025 15:03:49 +0800 Subject: [PATCH] APP端审批详情接口 转办 委派等 --- urbanops-module-workorder/src/main/java/com/zteits/urbanops/module/workorder/controller/app/garden/AppGardenWorkOrderController.java | 61 +++++++++++++++++++++++++++++++++++++++++++++++++++++-------- urbanops-module-workorder/src/main/java/com/zteits/urbanops/module/workorder/controller/app/garden/vo/AppGardenTaskApproveReqVO.java | 32 -------------------------------- urbanops-module-workorder/src/main/java/com/zteits/urbanops/module/workorder/controller/app/garden/vo/AppGardenTaskPageReqVO.java | 24 ------------------------ urbanops-module-workorder/src/main/java/com/zteits/urbanops/module/workorder/controller/app/garden/vo/AppGardenTaskRespVO.java | 110 -------------------------------------------------------------------------------------------------------------- urbanops-module-workorder/src/main/java/com/zteits/urbanops/module/workorder/controller/app/garden/vo/process/AppGardenApprovalDetailReqVO.java | 25 +++++++++++++++++++++++++ urbanops-module-workorder/src/main/java/com/zteits/urbanops/module/workorder/controller/app/garden/vo/process/AppGardenApprovalDetailRespVO.java | 117 +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ urbanops-module-workorder/src/main/java/com/zteits/urbanops/module/workorder/controller/app/garden/vo/task/AppGardenTaskApproveReqVO.java | 32 ++++++++++++++++++++++++++++++++ urbanops-module-workorder/src/main/java/com/zteits/urbanops/module/workorder/controller/app/garden/vo/task/AppGardenTaskDelegateReqVO.java | 35 +++++++++++++++++++++++++++++++++++ urbanops-module-workorder/src/main/java/com/zteits/urbanops/module/workorder/controller/app/garden/vo/task/AppGardenTaskPageReqVO.java | 24 ++++++++++++++++++++++++ urbanops-module-workorder/src/main/java/com/zteits/urbanops/module/workorder/controller/app/garden/vo/task/AppGardenTaskRespVO.java | 110 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ urbanops-module-workorder/src/main/java/com/zteits/urbanops/module/workorder/controller/app/garden/vo/task/AppGardenTaskReturnReqVO.java | 34 ++++++++++++++++++++++++++++++++++ urbanops-module-workorder/src/main/java/com/zteits/urbanops/module/workorder/controller/app/garden/vo/task/AppGardenTaskTransferReqVO.java | 35 +++++++++++++++++++++++++++++++++++ urbanops-module-workorder/src/main/java/com/zteits/urbanops/module/workorder/convert/garden/AppGardenTaskConvert.java | 2 +- urbanops-module-workorder/src/main/java/com/zteits/urbanops/module/workorder/service/garden/BpmGardenService.java | 34 ++++++++++++++++++++++++++++++++++ urbanops-module-workorder/src/main/java/com/zteits/urbanops/module/workorder/service/garden/BpmGardenServiceImpl.java | 45 +++++++++++++++++++++++++++++++++++++++++---- 15 files changed, 541 insertions(+), 179 deletions(-) delete mode 100644 urbanops-module-workorder/src/main/java/com/zteits/urbanops/module/workorder/controller/app/garden/vo/AppGardenTaskApproveReqVO.java delete mode 100644 urbanops-module-workorder/src/main/java/com/zteits/urbanops/module/workorder/controller/app/garden/vo/AppGardenTaskPageReqVO.java delete mode 100644 urbanops-module-workorder/src/main/java/com/zteits/urbanops/module/workorder/controller/app/garden/vo/AppGardenTaskRespVO.java create mode 100644 urbanops-module-workorder/src/main/java/com/zteits/urbanops/module/workorder/controller/app/garden/vo/process/AppGardenApprovalDetailReqVO.java create mode 100644 urbanops-module-workorder/src/main/java/com/zteits/urbanops/module/workorder/controller/app/garden/vo/process/AppGardenApprovalDetailRespVO.java create mode 100644 urbanops-module-workorder/src/main/java/com/zteits/urbanops/module/workorder/controller/app/garden/vo/task/AppGardenTaskApproveReqVO.java create mode 100644 urbanops-module-workorder/src/main/java/com/zteits/urbanops/module/workorder/controller/app/garden/vo/task/AppGardenTaskDelegateReqVO.java create mode 100644 urbanops-module-workorder/src/main/java/com/zteits/urbanops/module/workorder/controller/app/garden/vo/task/AppGardenTaskPageReqVO.java create mode 100644 urbanops-module-workorder/src/main/java/com/zteits/urbanops/module/workorder/controller/app/garden/vo/task/AppGardenTaskRespVO.java create mode 100644 urbanops-module-workorder/src/main/java/com/zteits/urbanops/module/workorder/controller/app/garden/vo/task/AppGardenTaskReturnReqVO.java create mode 100644 urbanops-module-workorder/src/main/java/com/zteits/urbanops/module/workorder/controller/app/garden/vo/task/AppGardenTaskTransferReqVO.java 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 75aeac6..6f47346 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 @@ -1,19 +1,22 @@ package com.zteits.urbanops.module.workorder.controller.app.garden; +import cn.hutool.core.util.StrUtil; import com.zteits.urbanops.framework.common.pojo.CommonResult; import com.zteits.urbanops.framework.common.pojo.PageResult; +import com.zteits.urbanops.framework.common.util.json.JsonUtils; import com.zteits.urbanops.framework.common.util.object.BeanUtils; import com.zteits.urbanops.framework.web.core.util.WebFrameworkUtils; -import com.zteits.urbanops.module.bpm.controller.admin.task.vo.task.BpmTaskApproveReqVO; -import com.zteits.urbanops.module.bpm.controller.admin.task.vo.task.BpmTaskPageReqVO; -import com.zteits.urbanops.module.bpm.controller.admin.task.vo.task.BpmTaskRespVO; -import com.zteits.urbanops.module.bpm.service.task.BpmTaskService; +import com.zteits.urbanops.module.bpm.controller.admin.task.vo.instance.BpmApprovalDetailReqVO; +import com.zteits.urbanops.module.bpm.controller.admin.task.vo.instance.BpmApprovalDetailRespVO; +import com.zteits.urbanops.module.bpm.controller.admin.task.vo.task.BpmTaskDelegateReqVO; +import com.zteits.urbanops.module.bpm.controller.admin.task.vo.task.BpmTaskTransferReqVO; import com.zteits.urbanops.module.garden.api.road.RoadApi; import com.zteits.urbanops.module.garden.api.road.dto.RoadReqDTO; import com.zteits.urbanops.module.garden.api.road.dto.RoadRespDTO; -import com.zteits.urbanops.module.workorder.controller.admin.garden.vo.BpmGardenWorkOrderPageReqVO; -import com.zteits.urbanops.module.workorder.controller.admin.garden.vo.BpmGardenWorkOrderRespVO; import com.zteits.urbanops.module.workorder.controller.app.garden.vo.*; +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.*; import com.zteits.urbanops.module.workorder.dal.dataobject.garden.BpmGardenWorkOrderDO; import com.zteits.urbanops.module.workorder.service.garden.BpmGardenService; import io.swagger.v3.oas.annotations.Operation; @@ -25,6 +28,7 @@ import org.springframework.security.access.prepost.PreAuthorize; import org.springframework.web.bind.annotation.*; import java.util.List; +import java.util.Map; import static com.zteits.urbanops.framework.common.pojo.CommonResult.success; import static com.zteits.urbanops.framework.security.core.util.SecurityFrameworkUtils.getLoginUserId; @@ -60,16 +64,25 @@ public class AppGardenWorkOrderController { @GetMapping("/get") //@PreAuthorize("@ss.hasPermission('bpm:garden-workorder:query')") - @Operation(summary = "app-获得工单详情") + @Operation(summary = "app - 获得工单详情") @Parameter(name = "id", description = "编号", required = true, example = "1024") public CommonResult getGardenInspection(@RequestParam("id") Long id) { BpmGardenWorkOrderDO gardenInspection = gardenService.getWorkOrder(id); return success(BeanUtils.toBean(gardenInspection, AppGardenWorkOrderRespVO.class)); } + @GetMapping("/getApprovalDetail") + @Operation(summary = "app - 获得审批详情") + @Parameter(name = "id", description = "流程实例的编号", required = true) + //@PreAuthorize("@ss.hasPermission('bpm:garden-workorder:query')") + @SuppressWarnings("unchecked") + public CommonResult getApprovalDetail(@Valid AppGardenApprovalDetailReqVO reqVO) { + return success(gardenService.getApprovalDetail(reqVO)); + } + @GetMapping("/page") //@PreAuthorize("@ss.hasPermission('bpm:garden-workorder:query')") - @Operation(summary = "app-获得园林巡检工单申请分页") + @Operation(summary = "app-获得园林工单申请分页") public CommonResult> getGardenInspectionPage(@Valid AppGardenWorkOrderPageReqVO pageVO) { PageResult pageResult = gardenService.getGardenInspectionPage(getLoginUserId(), pageVO); return success(BeanUtils.toBean(pageResult, AppGardenWorkOrderRespVO.class)); @@ -90,6 +103,38 @@ public class AppGardenWorkOrderController { return success(true); } + @PutMapping("/return") + @Operation(summary = "退回任务", description = "用于【流程详情】的【退回】按钮") + //@PreAuthorize("@ss.hasPermission('bpm:garden-workorder:update')") + public CommonResult returnTask(@Valid @RequestBody AppGardenTaskReturnReqVO reqVO) { + gardenService.returnTask(reqVO); + return success(true); + } + + @PutMapping("/withdraw") + @Operation(summary = "撤回任务") + //@PreAuthorize("@ss.hasPermission('bpm:garden-workorder:update')") + public CommonResult withdrawTask(@RequestParam("taskId") String taskId) { + gardenService.withdrawTask(taskId); + return success(true); + } + + @PutMapping("/delegate") + @Operation(summary = "委派任务", description = "用于【流程详情】的【委派】按钮") + //@PreAuthorize("@ss.hasPermission('bpm:garden-workorder:update')") + public CommonResult delegateTask(@Valid @RequestBody AppGardenTaskDelegateReqVO reqVO) { + gardenService.delegateTask(reqVO); + return success(true); + } + + @PutMapping("/transfer") + @Operation(summary = "转派任务", description = "用于【流程详情】的【转派】按钮") + //@PreAuthorize("@ss.hasPermission('bpm:garden-workorder:update')") + public CommonResult transferTask(@Valid @RequestBody AppGardenTaskTransferReqVO reqVO) { + gardenService.transferTask(reqVO); + return success(true); + } + @GetMapping("donePage") @Operation(summary = "app - 获取已办任务分页") //@PreAuthorize("@ss.hasPermission('bpm:garden-workorder:query')") diff --git a/urbanops-module-workorder/src/main/java/com/zteits/urbanops/module/workorder/controller/app/garden/vo/AppGardenTaskApproveReqVO.java b/urbanops-module-workorder/src/main/java/com/zteits/urbanops/module/workorder/controller/app/garden/vo/AppGardenTaskApproveReqVO.java deleted file mode 100644 index cc5d5b4..0000000 --- a/urbanops-module-workorder/src/main/java/com/zteits/urbanops/module/workorder/controller/app/garden/vo/AppGardenTaskApproveReqVO.java +++ /dev/null @@ -1,32 +0,0 @@ -package com.zteits.urbanops.module.workorder.controller.app.garden.vo; - -import io.swagger.v3.oas.annotations.media.Schema; -import jakarta.validation.constraints.NotEmpty; -import lombok.Data; - -import java.util.List; -import java.util.Map; - -/** - * 类描述:园林APP端工单任务审批通过VO - * 创建人:yanhuiqing - * 创建时间:2025/12/13 21:33 - * 修改人:yanhuiqing - * 修改时间:2025/12/13 21:33 - * 修改备注: - * - * @author yanhuiqing - * @version 1.0 - */ -@Schema(description = "APP - 通过流程任务的 Request VO") -@Data -public class AppGardenTaskApproveReqVO { - - @Schema(description = "任务编号", requiredMode = Schema.RequiredMode.REQUIRED, example = "1024") - @NotEmpty(message = "任务编号不能为空") - private String id; - - @Schema(description = "审批意见", example = "通过!") - private String reason; - -} \ No newline at end of file diff --git a/urbanops-module-workorder/src/main/java/com/zteits/urbanops/module/workorder/controller/app/garden/vo/AppGardenTaskPageReqVO.java b/urbanops-module-workorder/src/main/java/com/zteits/urbanops/module/workorder/controller/app/garden/vo/AppGardenTaskPageReqVO.java deleted file mode 100644 index 6c1170c..0000000 --- a/urbanops-module-workorder/src/main/java/com/zteits/urbanops/module/workorder/controller/app/garden/vo/AppGardenTaskPageReqVO.java +++ /dev/null @@ -1,24 +0,0 @@ -package com.zteits.urbanops.module.workorder.controller.app.garden.vo; - -import com.zteits.urbanops.framework.common.pojo.PageParam; -import io.swagger.v3.oas.annotations.media.Schema; -import lombok.Data; - -/** - * 类描述:园林APP端工作流任务请求VO - * 创建人:yanhuiqing - * 创建时间:2025/12/13 21:20 - * 修改人:yanhuiqing - * 修改时间:2025/12/13 21:20 - * 修改备注: - * - * @author yanhuiqing - * @version 1.0 - */ -@Schema(description = "APP - 流程任务的的分页 Request VO") // 待办、已办,都使用该分页 -@Data -public class AppGardenTaskPageReqVO extends PageParam { - - @Schema(description = "流程定义的标识", example = "quik_local_test") - private String processDefinitionKey; // 精准匹配 -} \ No newline at end of file diff --git a/urbanops-module-workorder/src/main/java/com/zteits/urbanops/module/workorder/controller/app/garden/vo/AppGardenTaskRespVO.java b/urbanops-module-workorder/src/main/java/com/zteits/urbanops/module/workorder/controller/app/garden/vo/AppGardenTaskRespVO.java deleted file mode 100644 index 1042cd0..0000000 --- a/urbanops-module-workorder/src/main/java/com/zteits/urbanops/module/workorder/controller/app/garden/vo/AppGardenTaskRespVO.java +++ /dev/null @@ -1,110 +0,0 @@ -package com.zteits.urbanops.module.workorder.controller.app.garden.vo; - -import com.fasterxml.jackson.annotation.JsonIgnore; -import com.zteits.urbanops.framework.common.core.KeyValue; -import com.zteits.urbanops.module.bpm.controller.admin.base.user.UserSimpleBaseVO; -import com.zteits.urbanops.module.bpm.controller.admin.task.vo.task.BpmTaskRespVO; -import io.swagger.v3.oas.annotations.media.Schema; -import lombok.Data; - -import java.time.LocalDateTime; -import java.util.List; -import java.util.Map; - -/** - * 类描述:园林APP端流程任务 Response VO - * 创建人:yanhuiqing - * 创建时间:2025/12/13 22:07 - * 修改人:yanhuiqing - * 修改时间:2025/12/13 22:07 - * 修改备注: - * - * @author yanhuiqing - * @version 1.0 - */ -@Schema(description = "APP - 流程任务 Response VO") -@Data -public class AppGardenTaskRespVO { - - @Schema(description = "任务编号", requiredMode = Schema.RequiredMode.REQUIRED, example = "1024") - private String id; - - @Schema(description = "创建时间", requiredMode = Schema.RequiredMode.REQUIRED) - private LocalDateTime createTime; - - @Schema(description = "结束时间", requiredMode = Schema.RequiredMode.REQUIRED) - private LocalDateTime endTime; - - @Schema(description = "持续时间", example = "1000") - private Long durationInMillis; - - @Schema(description = "任务状态", requiredMode = Schema.RequiredMode.REQUIRED, example = "2") - private Integer status; // 参见 BpmTaskStatusEnum 枚举 - - @Schema(description = "审批理由", requiredMode = Schema.RequiredMode.REQUIRED, example = "2") - private String reason; - - @Schema(description = "任务负责人编号", requiredMode = Schema.RequiredMode.NOT_REQUIRED, example = "2048") - @JsonIgnore // 不返回,只是方便后续读取,赋值给 ownerUser - private Long owner; - /** - * 负责人的用户信息 - */ - private UserSimpleBaseVO ownerUser; - - @Schema(description = "任务分配人编号", requiredMode = Schema.RequiredMode.NOT_REQUIRED, example = "2048") - @JsonIgnore // 不返回,只是方便后续读取,赋值给 assigneeUser - private Long assignee; - /** - * 审核的用户信息 - */ - private UserSimpleBaseVO assigneeUser; - - @Schema(description = "任务定义的标识", requiredMode = Schema.RequiredMode.REQUIRED, example = "Activity_one") - private String taskDefinitionKey; - - @Schema(description = "所属流程实例编号", requiredMode = Schema.RequiredMode.REQUIRED, example = "8888") - private String processInstanceId; - - - @Schema(description = "提交的表单值", requiredMode = Schema.RequiredMode.REQUIRED) - private Map formVariables; - - @Schema(description = "节点类型", example = "10") - private Integer nodeType; // 参见 BpmSimpleModelNodeTypeEnum 枚举。 - - /** - * 所属流程实例 - */ - private BpmTaskRespVO.ProcessInstance processInstance; - - @Data - @Schema(description = "流程实例") - public static class ProcessInstance { - - @Schema(description = "流程实例编号", requiredMode = Schema.RequiredMode.REQUIRED, example = "1024") - private String id; - - @Schema(description = "流程实例名称", requiredMode = Schema.RequiredMode.REQUIRED, example = "全域") - private String name; - - @Schema(description = "提交时间", requiredMode = Schema.RequiredMode.REQUIRED) - private LocalDateTime createTime; - - @Schema(description = "流程定义的编号", requiredMode = Schema.RequiredMode.REQUIRED, example = "2048") - private String processDefinitionId; - - @Schema(description = "流程摘要", example = "[]") - private List> summary; // 只有流程表单,才有摘要! - - /** - * 发起人的用户信息 - */ - private UserSimpleBaseVO startUser; - - } - - - - -} \ No newline at end of file diff --git a/urbanops-module-workorder/src/main/java/com/zteits/urbanops/module/workorder/controller/app/garden/vo/process/AppGardenApprovalDetailReqVO.java b/urbanops-module-workorder/src/main/java/com/zteits/urbanops/module/workorder/controller/app/garden/vo/process/AppGardenApprovalDetailReqVO.java new file mode 100644 index 0000000..50d5353 --- /dev/null +++ b/urbanops-module-workorder/src/main/java/com/zteits/urbanops/module/workorder/controller/app/garden/vo/process/AppGardenApprovalDetailReqVO.java @@ -0,0 +1,25 @@ +package com.zteits.urbanops.module.workorder.controller.app.garden.vo.process; + +import io.swagger.v3.oas.annotations.media.Schema; +import jakarta.validation.constraints.NotNull; +import lombok.Data; + +/** + * 类描述:园林APP端审批详情reqVO + * 创建人:yanhuiqing + * 创建时间:2025/12/14 14:20 + * 修改人:yanhuiqing + * 修改时间:2025/12/14 14:20 + * 修改备注: + * + * @author yanhuiqing + * @version 1.0 + */ +@Schema(description = "APP - 审批详情 Request VO") +@Data +public class AppGardenApprovalDetailReqVO { + + @Schema(description = "流程实例的编号", example = "1024") + @NotNull + private String processInstanceId; // 使用场景:流程已发起时候传流程实例 ID +} \ No newline at end of file diff --git a/urbanops-module-workorder/src/main/java/com/zteits/urbanops/module/workorder/controller/app/garden/vo/process/AppGardenApprovalDetailRespVO.java b/urbanops-module-workorder/src/main/java/com/zteits/urbanops/module/workorder/controller/app/garden/vo/process/AppGardenApprovalDetailRespVO.java new file mode 100644 index 0000000..c98df58 --- /dev/null +++ b/urbanops-module-workorder/src/main/java/com/zteits/urbanops/module/workorder/controller/app/garden/vo/process/AppGardenApprovalDetailRespVO.java @@ -0,0 +1,117 @@ +package com.zteits.urbanops.module.workorder.controller.app.garden.vo.process; + +import com.fasterxml.jackson.annotation.JsonIgnore; +import com.zteits.urbanops.module.bpm.controller.admin.base.user.UserSimpleBaseVO; +import com.zteits.urbanops.module.bpm.controller.admin.task.vo.instance.BpmApprovalDetailRespVO; +import com.zteits.urbanops.module.bpm.controller.admin.task.vo.instance.BpmProcessInstanceRespVO; +import com.zteits.urbanops.module.bpm.controller.admin.task.vo.task.BpmTaskRespVO; +import io.swagger.v3.oas.annotations.media.Schema; +import lombok.Data; + +import java.time.LocalDateTime; +import java.util.List; +import java.util.Map; + +/** + * 类描述:园林APP端流程审批详情 respVO + * 创建人:yanhuiqing + * 创建时间:2025/12/14 14:08 + * 修改人:yanhuiqing + * 修改时间:2025/12/14 14:08 + * 修改备注: + * + * @author yanhuiqing + * @version 1.0 + */ +@Schema(description = "APP - 审批详情 Response VO") +@Data +public class AppGardenApprovalDetailRespVO { + + @Schema(description = "流程实例的状态", requiredMode = Schema.RequiredMode.REQUIRED, example = "1") + private Integer status; // 参见 BpmProcessInstanceStatusEnum 枚举 + + @Schema(description = "活动节点列表", requiredMode = Schema.RequiredMode.REQUIRED) + private List activityNodes; + + @Schema(description = "表单字段权限") + private Map formFieldsPermission; + + @Schema(description = "待办任务") + private BpmTaskRespVO todoTask; + /** + * 所属流程实例信息 + */ + //private BpmProcessInstanceRespVO processInstance; + + @Schema(description = "活动节点信息") + @Data + public static class ActivityNode { + + @Schema(description = "节点编号", requiredMode = Schema.RequiredMode.REQUIRED, example = "StartUserNode") + private String id; + + @Schema(description = "节点名称", requiredMode = Schema.RequiredMode.REQUIRED, example = "发起人") + private String name; + + @Schema(description = "节点类型", requiredMode = Schema.RequiredMode.REQUIRED, example = "1") + private Integer nodeType; // 参见 BpmSimpleModelNodeType 枚举 + + @Schema(description = "节点状态 1 审批中,2 审批通过 3 审批不通过 4 已取消 5 已退回 -1 未开始 -2 跳过", requiredMode = Schema.RequiredMode.REQUIRED, example = "0") + private Integer status; // 参见 BpmTaskStatusEnum 枚举 + + @Schema(description = "节点的开始时间") + private LocalDateTime startTime; + @Schema(description = "节点的结束时间") + private LocalDateTime endTime; + + @Schema(description = "审批节点的任务信息") + private List tasks; + + @Schema(description = "候选人策略", example = "35") + private Integer candidateStrategy; // 参见 BpmTaskCandidateStrategyEnum 枚举。主要用于发起时,审批节点、抄送节点自选 + + @Schema(description = "候选人用户 ID 列表", requiredMode = Schema.RequiredMode.NOT_REQUIRED, example = "1818") + @JsonIgnore // 不返回,只是方便后续读取,赋值给 candidateUsers + private List candidateUserIds; + + @Schema(description = "候选人用户列表") + private List candidateUsers; // 只包含未生成 ApprovalTaskInfo 的用户列表 + + @Schema(description = "流程编号", example = "8761d8e0-0922-11f0-bd37-00ff1db677bf") + private String processInstanceId; // 当且仅当,该节点是子流程节点时,才会有值(CallActivity 的 calledProcessInstanceId 字段) + + } + + @Schema(description = "活动节点的任务信息") + @Data + public static class ActivityNodeTask { + + @Schema(description = "任务编号", requiredMode = Schema.RequiredMode.REQUIRED, example = "1") + private String id; + + @Schema(description = "任务所属人编号", requiredMode = Schema.RequiredMode.NOT_REQUIRED, example = "1818") + @JsonIgnore // 不返回,只是方便后续读取,赋值给 ownerUser + private Long owner; + + @Schema(description = "任务所属人", example = "1024") + private UserSimpleBaseVO ownerUser; + + @Schema(description = "任务分配人编号", requiredMode = Schema.RequiredMode.NOT_REQUIRED, example = "2048") + @JsonIgnore // 不返回,只是方便后续读取,赋值给 assigneeUser + private Long assignee; + + @Schema(description = "任务分配人", example = "2048") + private UserSimpleBaseVO assigneeUser; + + @Schema(description = "节点状态 1 审批中,2 审批通过 3 审批不通过 4 已取消 5 已退回 -1 未开始 -2 跳过", requiredMode = Schema.RequiredMode.REQUIRED, example = "1") + private Integer status; // 参见 BpmTaskStatusEnum 枚举 + + @Schema(description = "审批意见", example = "同意") + private String reason; + + @Schema(description = "签名", example = "https://www.iocoder.cn/sign.png") + private String signPicUrl; + + } + +} \ 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 new file mode 100644 index 0000000..263f3ef --- /dev/null +++ b/urbanops-module-workorder/src/main/java/com/zteits/urbanops/module/workorder/controller/app/garden/vo/task/AppGardenTaskApproveReqVO.java @@ -0,0 +1,32 @@ +package com.zteits.urbanops.module.workorder.controller.app.garden.vo.task; + +import io.swagger.v3.oas.annotations.media.Schema; +import jakarta.validation.constraints.NotEmpty; +import lombok.Data; + +import java.util.List; +import java.util.Map; + +/** + * 类描述:园林APP端工单任务审批通过VO + * 创建人:yanhuiqing + * 创建时间:2025/12/13 21:33 + * 修改人:yanhuiqing + * 修改时间:2025/12/13 21:33 + * 修改备注: + * + * @author yanhuiqing + * @version 1.0 + */ +@Schema(description = "APP - 通过流程任务的 Request VO") +@Data +public class AppGardenTaskApproveReqVO { + + @Schema(description = "任务编号", requiredMode = Schema.RequiredMode.REQUIRED, example = "1024") + @NotEmpty(message = "任务编号不能为空") + private String id; + + @Schema(description = "审批意见", example = "通过!") + private String reason; + +} \ 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/AppGardenTaskDelegateReqVO.java b/urbanops-module-workorder/src/main/java/com/zteits/urbanops/module/workorder/controller/app/garden/vo/task/AppGardenTaskDelegateReqVO.java new file mode 100644 index 0000000..858d668 --- /dev/null +++ b/urbanops-module-workorder/src/main/java/com/zteits/urbanops/module/workorder/controller/app/garden/vo/task/AppGardenTaskDelegateReqVO.java @@ -0,0 +1,35 @@ +package com.zteits.urbanops.module.workorder.controller.app.garden.vo.task; + +import io.swagger.v3.oas.annotations.media.Schema; +import jakarta.validation.constraints.NotEmpty; +import jakarta.validation.constraints.NotNull; +import lombok.Data; + +/** + * 类描述:园林APP端委派任务 reqVO + * 创建人:yanhuiqing + * 创建时间:2025/12/14 12:49 + * 修改人:yanhuiqing + * 修改时间:2025/12/14 12:49 + * 修改备注: + * + * @author yanhuiqing + * @version 1.0 + */ +@Schema(description = "APP - 委派流程任务的 Request VO") +@Data +public class AppGardenTaskDelegateReqVO { + + @Schema(description = "任务编号", requiredMode = Schema.RequiredMode.REQUIRED, example = "1024") + @NotEmpty(message = "任务编号不能为空") + private String id; + + @Schema(description = "被委派人 ID", requiredMode = Schema.RequiredMode.REQUIRED, example = "1") + @NotNull(message = "被委派人 ID 不能为空") + private Long delegateUserId; + + @Schema(description = "委派原因", requiredMode = Schema.RequiredMode.REQUIRED, example = "做不了决定,需要你先帮忙瞅瞅") + @NotEmpty(message = "委派原因不能为空") + private String reason; + +} \ 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/AppGardenTaskPageReqVO.java b/urbanops-module-workorder/src/main/java/com/zteits/urbanops/module/workorder/controller/app/garden/vo/task/AppGardenTaskPageReqVO.java new file mode 100644 index 0000000..be26464 --- /dev/null +++ b/urbanops-module-workorder/src/main/java/com/zteits/urbanops/module/workorder/controller/app/garden/vo/task/AppGardenTaskPageReqVO.java @@ -0,0 +1,24 @@ +package com.zteits.urbanops.module.workorder.controller.app.garden.vo.task; + +import com.zteits.urbanops.framework.common.pojo.PageParam; +import io.swagger.v3.oas.annotations.media.Schema; +import lombok.Data; + +/** + * 类描述:园林APP端工作流任务请求VO + * 创建人:yanhuiqing + * 创建时间:2025/12/13 21:20 + * 修改人:yanhuiqing + * 修改时间:2025/12/13 21:20 + * 修改备注: + * + * @author yanhuiqing + * @version 1.0 + */ +@Schema(description = "APP - 流程任务的的分页 Request VO") // 待办、已办,都使用该分页 +@Data +public class AppGardenTaskPageReqVO extends PageParam { + + @Schema(description = "流程定义的标识", example = "quik_local_test") + private String processDefinitionKey; // 精准匹配 +} \ 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/AppGardenTaskRespVO.java b/urbanops-module-workorder/src/main/java/com/zteits/urbanops/module/workorder/controller/app/garden/vo/task/AppGardenTaskRespVO.java new file mode 100644 index 0000000..03b9f5e --- /dev/null +++ b/urbanops-module-workorder/src/main/java/com/zteits/urbanops/module/workorder/controller/app/garden/vo/task/AppGardenTaskRespVO.java @@ -0,0 +1,110 @@ +package com.zteits.urbanops.module.workorder.controller.app.garden.vo.task; + +import com.fasterxml.jackson.annotation.JsonIgnore; +import com.zteits.urbanops.framework.common.core.KeyValue; +import com.zteits.urbanops.module.bpm.controller.admin.base.user.UserSimpleBaseVO; +import com.zteits.urbanops.module.bpm.controller.admin.task.vo.task.BpmTaskRespVO; +import io.swagger.v3.oas.annotations.media.Schema; +import lombok.Data; + +import java.time.LocalDateTime; +import java.util.List; +import java.util.Map; + +/** + * 类描述:园林APP端流程任务 Response VO + * 创建人:yanhuiqing + * 创建时间:2025/12/13 22:07 + * 修改人:yanhuiqing + * 修改时间:2025/12/13 22:07 + * 修改备注: + * + * @author yanhuiqing + * @version 1.0 + */ +@Schema(description = "APP - 流程任务 Response VO") +@Data +public class AppGardenTaskRespVO { + + @Schema(description = "任务编号", requiredMode = Schema.RequiredMode.REQUIRED, example = "1024") + private String id; + + @Schema(description = "创建时间", requiredMode = Schema.RequiredMode.REQUIRED) + private LocalDateTime createTime; + + @Schema(description = "结束时间", requiredMode = Schema.RequiredMode.REQUIRED) + private LocalDateTime endTime; + + @Schema(description = "持续时间", example = "1000") + private Long durationInMillis; + + @Schema(description = "任务状态", requiredMode = Schema.RequiredMode.REQUIRED, example = "2") + private Integer status; // 参见 BpmTaskStatusEnum 枚举 + + @Schema(description = "审批理由", requiredMode = Schema.RequiredMode.REQUIRED, example = "2") + private String reason; + + @Schema(description = "任务负责人编号", requiredMode = Schema.RequiredMode.NOT_REQUIRED, example = "2048") + @JsonIgnore // 不返回,只是方便后续读取,赋值给 ownerUser + private Long owner; + /** + * 负责人的用户信息 + */ + private UserSimpleBaseVO ownerUser; + + @Schema(description = "任务分配人编号", requiredMode = Schema.RequiredMode.NOT_REQUIRED, example = "2048") + @JsonIgnore // 不返回,只是方便后续读取,赋值给 assigneeUser + private Long assignee; + /** + * 审核的用户信息 + */ + private UserSimpleBaseVO assigneeUser; + + @Schema(description = "任务定义的标识", requiredMode = Schema.RequiredMode.REQUIRED, example = "Activity_one") + private String taskDefinitionKey; + + @Schema(description = "所属流程实例编号", requiredMode = Schema.RequiredMode.REQUIRED, example = "8888") + private String processInstanceId; + + + @Schema(description = "提交的表单值", requiredMode = Schema.RequiredMode.REQUIRED) + private Map formVariables; + + @Schema(description = "节点类型", example = "10") + private Integer nodeType; // 参见 BpmSimpleModelNodeTypeEnum 枚举。 + + /** + * 所属流程实例 + */ + private BpmTaskRespVO.ProcessInstance processInstance; + + @Data + @Schema(description = "流程实例") + public static class ProcessInstance { + + @Schema(description = "流程实例编号", requiredMode = Schema.RequiredMode.REQUIRED, example = "1024") + private String id; + + @Schema(description = "流程实例名称", requiredMode = Schema.RequiredMode.REQUIRED, example = "全域") + private String name; + + @Schema(description = "提交时间", requiredMode = Schema.RequiredMode.REQUIRED) + private LocalDateTime createTime; + + @Schema(description = "流程定义的编号", requiredMode = Schema.RequiredMode.REQUIRED, example = "2048") + private String processDefinitionId; + + @Schema(description = "流程摘要", example = "[]") + private List> summary; // 只有流程表单,才有摘要! + + /** + * 发起人的用户信息 + */ + private UserSimpleBaseVO startUser; + + } + + + + +} \ 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 new file mode 100644 index 0000000..bc2386e --- /dev/null +++ b/urbanops-module-workorder/src/main/java/com/zteits/urbanops/module/workorder/controller/app/garden/vo/task/AppGardenTaskReturnReqVO.java @@ -0,0 +1,34 @@ +package com.zteits.urbanops.module.workorder.controller.app.garden.vo.task; + +import io.swagger.v3.oas.annotations.media.Schema; +import jakarta.validation.constraints.NotEmpty; +import lombok.Data; + +/** + * 类描述:园林APP端退回 reqVO + * 创建人:yanhuiqing + * 创建时间:2025/12/14 11:47 + * 修改人:yanhuiqing + * 修改时间:2025/12/14 11:47 + * 修改备注: + * + * @author yanhuiqing + * @version 1.0 + */ +@Schema(description = "APP - 退回流程任务的 Request VO") +@Data +public class AppGardenTaskReturnReqVO { + + + @Schema(description = "任务编号", requiredMode = Schema.RequiredMode.REQUIRED, example = "1024") + @NotEmpty(message = "任务编号不能为空") + private String id; + + @Schema(description = "退回到的任务 Key", requiredMode = Schema.RequiredMode.REQUIRED, example = "1") + @NotEmpty(message = "退回到的任务 Key 不能为空") + private String targetTaskDefinitionKey; + + @Schema(description = "退回意见", requiredMode = Schema.RequiredMode.REQUIRED, example = "我就是想驳回") + @NotEmpty(message = "退回意见不能为空") + private String reason; +} \ 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/AppGardenTaskTransferReqVO.java b/urbanops-module-workorder/src/main/java/com/zteits/urbanops/module/workorder/controller/app/garden/vo/task/AppGardenTaskTransferReqVO.java new file mode 100644 index 0000000..535fccf --- /dev/null +++ b/urbanops-module-workorder/src/main/java/com/zteits/urbanops/module/workorder/controller/app/garden/vo/task/AppGardenTaskTransferReqVO.java @@ -0,0 +1,35 @@ +package com.zteits.urbanops.module.workorder.controller.app.garden.vo.task; + +import io.swagger.v3.oas.annotations.media.Schema; +import jakarta.validation.constraints.NotEmpty; +import jakarta.validation.constraints.NotNull; +import lombok.Data; + +/** + * 类描述:园林APP转办任务的 reqVO + * 创建人:yanhuiqing + * 创建时间:2025/12/14 12:52 + * 修改人:yanhuiqing + * 修改时间:2025/12/14 12:52 + * 修改备注: + * + * @author yanhuiqing + * @version 1.0 + */ +@Schema(description = "APP - 流程任务的转办 Request VO") +@Data +public class AppGardenTaskTransferReqVO { + + @Schema(description = "任务编号", requiredMode = Schema.RequiredMode.REQUIRED, example = "1024") + @NotEmpty(message = "任务编号不能为空") + private String id; + + @Schema(description = "新审批人的用户编号", requiredMode = Schema.RequiredMode.REQUIRED, example = "2048") + @NotNull(message = "新审批人的用户编号不能为空") + private Long assigneeUserId; + + @Schema(description = "转办原因", requiredMode = Schema.RequiredMode.REQUIRED, example = "做不了决定,需要你先帮忙瞅瞅") + @NotEmpty(message = "转办原因不能为空") + private String reason; + +} \ No newline at end of file diff --git a/urbanops-module-workorder/src/main/java/com/zteits/urbanops/module/workorder/convert/garden/AppGardenTaskConvert.java b/urbanops-module-workorder/src/main/java/com/zteits/urbanops/module/workorder/convert/garden/AppGardenTaskConvert.java index aa2623f..b610b39 100644 --- a/urbanops-module-workorder/src/main/java/com/zteits/urbanops/module/workorder/convert/garden/AppGardenTaskConvert.java +++ b/urbanops-module-workorder/src/main/java/com/zteits/urbanops/module/workorder/convert/garden/AppGardenTaskConvert.java @@ -11,7 +11,7 @@ import com.zteits.urbanops.module.bpm.dal.dataobject.definition.BpmProcessDefini import com.zteits.urbanops.module.bpm.framework.flowable.core.util.FlowableUtils; import com.zteits.urbanops.module.system.api.dept.dto.DeptRespDTO; import com.zteits.urbanops.module.system.api.user.dto.AdminUserRespDTO; -import com.zteits.urbanops.module.workorder.controller.app.garden.vo.AppGardenTaskRespVO; +import com.zteits.urbanops.module.workorder.controller.app.garden.vo.task.AppGardenTaskRespVO; import org.flowable.engine.history.HistoricProcessInstance; import org.flowable.engine.runtime.ProcessInstance; import org.flowable.task.api.Task; 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 f6477c2..005a0c7 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 @@ -4,6 +4,9 @@ import com.zteits.urbanops.framework.common.pojo.PageResult; 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.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.*; import com.zteits.urbanops.module.workorder.dal.dataobject.garden.BpmGardenWorkOrderDO; import jakarta.validation.Valid; /** @@ -85,4 +88,35 @@ public interface BpmGardenService { * @return */ PageResult getTaskTodoPage(AppGardenTaskPageReqVO pageVO); + + /** + * 退回任务 -app端 + * @param reqVO + */ + void returnTask(AppGardenTaskReturnReqVO reqVO); + + /** + * 撤回任务 -app端 + * @param taskId + */ + void withdrawTask(String taskId); + + /** + * 转办任务 -app端 + * @param reqVO + */ + void transferTask(AppGardenTaskTransferReqVO reqVO); + + /** + * 委派任务 -app端 + * @param reqVO + */ + void delegateTask(AppGardenTaskDelegateReqVO reqVO); + + /** + * 获得审批详情 流程节点 -app端 + * @param reqVO + * @return + */ + AppGardenApprovalDetailRespVO getApprovalDetail(AppGardenApprovalDetailReqVO reqVO); } 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 0d85e67..2d72a8c 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 @@ -8,9 +8,9 @@ import com.zteits.urbanops.framework.common.util.object.ObjectUtils; 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.bpm.controller.admin.task.vo.task.BpmTaskApproveReqVO; -import com.zteits.urbanops.module.bpm.controller.admin.task.vo.task.BpmTaskPageReqVO; -import com.zteits.urbanops.module.bpm.convert.task.BpmTaskConvert; +import com.zteits.urbanops.module.bpm.controller.admin.task.vo.instance.BpmApprovalDetailReqVO; +import com.zteits.urbanops.module.bpm.controller.admin.task.vo.instance.BpmApprovalDetailRespVO; +import com.zteits.urbanops.module.bpm.controller.admin.task.vo.task.*; import com.zteits.urbanops.module.bpm.dal.dataobject.definition.BpmProcessDefinitionInfoDO; import com.zteits.urbanops.module.bpm.enums.task.BpmTaskStatusEnum; import com.zteits.urbanops.module.bpm.framework.flowable.core.enums.BpmnVariableConstants; @@ -27,6 +27,9 @@ import com.zteits.urbanops.module.workorder.controller.admin.garden.vo.BpmGarden import com.zteits.urbanops.module.workorder.controller.admin.garden.vo.BpmGardenWorkOrderPageReqVO; 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.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.*; import com.zteits.urbanops.module.workorder.convert.garden.AppGardenTaskConvert; import com.zteits.urbanops.module.workorder.convert.garden.BpmGardenWorkOrderConverter; import com.zteits.urbanops.module.workorder.dal.dataobject.attachment.AttachmentDO; @@ -50,7 +53,6 @@ import java.util.List; import java.util.Map; import static com.zteits.urbanops.framework.common.exception.util.ServiceExceptionUtil.exception; -import static com.zteits.urbanops.framework.common.pojo.CommonResult.success; import static com.zteits.urbanops.framework.common.util.collection.CollectionUtils.convertSet; import static com.zteits.urbanops.framework.web.core.util.WebFrameworkUtils.getLoginUserId; import static com.zteits.urbanops.module.workorder.enums.ErrorCodeConstants.MAIN_INFO_NOT_EXISTS; @@ -164,6 +166,39 @@ public class BpmGardenServiceImpl implements BpmGardenService{ targetVO.setNextAssignees(nextAssignees); taskService.approveTask(SecurityFrameworkUtils.getLoginUserId(),targetVO); } + @Override + public void returnTask(AppGardenTaskReturnReqVO reqVO) { + BpmTaskReturnReqVO targetVO = BeanUtils.toBean(reqVO,BpmTaskReturnReqVO.class); + Long userId = SecurityFrameworkUtils.getLoginUserId(); + taskService.returnTask(userId, targetVO); + } + + @Override + public void withdrawTask(String taskId) { + Long userId = SecurityFrameworkUtils.getLoginUserId(); + taskService.withdrawTask(userId,taskId); + } + + @Override + public void transferTask(AppGardenTaskTransferReqVO reqVO) { + BpmTaskTransferReqVO targetVO = BeanUtils.toBean(reqVO,BpmTaskTransferReqVO.class); + Long userId = SecurityFrameworkUtils.getLoginUserId(); + taskService.transferTask(userId, targetVO); + } + + @Override + public void delegateTask(AppGardenTaskDelegateReqVO reqVO) { + BpmTaskDelegateReqVO targetVO = BeanUtils.toBean(reqVO, BpmTaskDelegateReqVO.class); + Long userId = SecurityFrameworkUtils.getLoginUserId(); + taskService.delegateTask(userId, targetVO); + } + + @Override + public AppGardenApprovalDetailRespVO getApprovalDetail(AppGardenApprovalDetailReqVO reqVO) { + BpmApprovalDetailReqVO targetVO = BeanUtils.toBean(reqVO,BpmApprovalDetailReqVO.class); + BpmApprovalDetailRespVO respVO = processInstanceService.getApprovalDetail(SecurityFrameworkUtils.getLoginUserId(), targetVO); + return BeanUtils.toBean(respVO,AppGardenApprovalDetailRespVO.class); + } @Override public PageResult getTaskDonePage(AppGardenTaskPageReqVO pageVO) { @@ -203,6 +238,8 @@ public class BpmGardenServiceImpl implements BpmGardenService{ return newRespVO; } + + @Override @Transactional(rollbackFor = Exception.class) public Long createWorkOrder(AppGardenWorkOrderReqVO createRequestVo) { -- libgit2 0.21.4