Commit 94bf47dc7878ddc6c5d16f42adf1512cb7eb9a38
1 parent
17967f8f
APP端待办接口
Showing
8 changed files
with
407 additions
and
11 deletions
urbanops-module-workorder/src/main/java/com/zteits/urbanops/module/workorder/controller/app/garden/AppGardenWorkOrderController.java
| @@ -3,14 +3,17 @@ package com.zteits.urbanops.module.workorder.controller.app.garden; | @@ -3,14 +3,17 @@ package com.zteits.urbanops.module.workorder.controller.app.garden; | ||
| 3 | import com.zteits.urbanops.framework.common.pojo.CommonResult; | 3 | import com.zteits.urbanops.framework.common.pojo.CommonResult; |
| 4 | import com.zteits.urbanops.framework.common.pojo.PageResult; | 4 | import com.zteits.urbanops.framework.common.pojo.PageResult; |
| 5 | import com.zteits.urbanops.framework.common.util.object.BeanUtils; | 5 | import com.zteits.urbanops.framework.common.util.object.BeanUtils; |
| 6 | +import com.zteits.urbanops.framework.web.core.util.WebFrameworkUtils; | ||
| 7 | +import com.zteits.urbanops.module.bpm.controller.admin.task.vo.task.BpmTaskApproveReqVO; | ||
| 8 | +import com.zteits.urbanops.module.bpm.controller.admin.task.vo.task.BpmTaskPageReqVO; | ||
| 9 | +import com.zteits.urbanops.module.bpm.controller.admin.task.vo.task.BpmTaskRespVO; | ||
| 10 | +import com.zteits.urbanops.module.bpm.service.task.BpmTaskService; | ||
| 6 | import com.zteits.urbanops.module.garden.api.road.RoadApi; | 11 | import com.zteits.urbanops.module.garden.api.road.RoadApi; |
| 7 | import com.zteits.urbanops.module.garden.api.road.dto.RoadReqDTO; | 12 | import com.zteits.urbanops.module.garden.api.road.dto.RoadReqDTO; |
| 8 | import com.zteits.urbanops.module.garden.api.road.dto.RoadRespDTO; | 13 | import com.zteits.urbanops.module.garden.api.road.dto.RoadRespDTO; |
| 9 | import com.zteits.urbanops.module.workorder.controller.admin.garden.vo.BpmGardenWorkOrderPageReqVO; | 14 | import com.zteits.urbanops.module.workorder.controller.admin.garden.vo.BpmGardenWorkOrderPageReqVO; |
| 10 | import com.zteits.urbanops.module.workorder.controller.admin.garden.vo.BpmGardenWorkOrderRespVO; | 15 | import com.zteits.urbanops.module.workorder.controller.admin.garden.vo.BpmGardenWorkOrderRespVO; |
| 11 | -import com.zteits.urbanops.module.workorder.controller.app.garden.vo.AppGardenWorkOrderPageReqVO; | ||
| 12 | -import com.zteits.urbanops.module.workorder.controller.app.garden.vo.AppGardenWorkOrderReqVO; | ||
| 13 | -import com.zteits.urbanops.module.workorder.controller.app.garden.vo.AppGardenWorkOrderRespVO; | 16 | +import com.zteits.urbanops.module.workorder.controller.app.garden.vo.*; |
| 14 | import com.zteits.urbanops.module.workorder.dal.dataobject.garden.BpmGardenWorkOrderDO; | 17 | import com.zteits.urbanops.module.workorder.dal.dataobject.garden.BpmGardenWorkOrderDO; |
| 15 | import com.zteits.urbanops.module.workorder.service.garden.BpmGardenService; | 18 | import com.zteits.urbanops.module.workorder.service.garden.BpmGardenService; |
| 16 | import io.swagger.v3.oas.annotations.Operation; | 19 | import io.swagger.v3.oas.annotations.Operation; |
| @@ -79,4 +82,26 @@ public class AppGardenWorkOrderController { | @@ -79,4 +82,26 @@ public class AppGardenWorkOrderController { | ||
| 79 | return success(roadApi.getRoadInfoBy(reqDTO)); | 82 | return success(roadApi.getRoadInfoBy(reqDTO)); |
| 80 | } | 83 | } |
| 81 | 84 | ||
| 85 | + @PutMapping("/approve") | ||
| 86 | + @Operation(summary = "app - 审批通过任务") | ||
| 87 | + //@PreAuthorize("@ss.hasPermission('bpm:garden-workorder:update')") | ||
| 88 | + public CommonResult<Boolean> approveTask(@Valid @RequestBody AppGardenTaskApproveReqVO reqVO) { | ||
| 89 | + gardenService.approveTask(reqVO); | ||
| 90 | + return success(true); | ||
| 91 | + } | ||
| 92 | + | ||
| 93 | + @GetMapping("donePage") | ||
| 94 | + @Operation(summary = "app - 获取已办任务分页") | ||
| 95 | + //@PreAuthorize("@ss.hasPermission('bpm:garden-workorder:query')") | ||
| 96 | + public CommonResult<PageResult<AppGardenTaskRespVO>> getTaskDonePage(@Valid AppGardenTaskPageReqVO pageVO) { | ||
| 97 | + PageResult<AppGardenTaskRespVO> pageResult = gardenService.getTaskDonePage(pageVO); | ||
| 98 | + return success(pageResult); | ||
| 99 | + } | ||
| 100 | + @GetMapping("todoPage") | ||
| 101 | + @Operation(summary = "app - 获取待办任务分页") | ||
| 102 | + //@PreAuthorize("@ss.hasPermission('bpm:garden-workorder:query')") | ||
| 103 | + public CommonResult<PageResult<AppGardenTaskRespVO>> getTaskTodoPage(@Valid AppGardenTaskPageReqVO pageVO) { | ||
| 104 | + PageResult<AppGardenTaskRespVO> pageResult = gardenService.getTaskTodoPage(pageVO); | ||
| 105 | + return success(pageResult); | ||
| 106 | + } | ||
| 82 | } | 107 | } |
urbanops-module-workorder/src/main/java/com/zteits/urbanops/module/workorder/controller/app/garden/vo/AppGardenTaskApproveReqVO.java
0 → 100644
| 1 | +package com.zteits.urbanops.module.workorder.controller.app.garden.vo; | ||
| 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 | +import java.util.Map; | ||
| 9 | + | ||
| 10 | +/** | ||
| 11 | + * 类描述:园林APP端工单任务审批通过VO | ||
| 12 | + * 创建人:yanhuiqing | ||
| 13 | + * 创建时间:2025/12/13 21:33 | ||
| 14 | + * 修改人:yanhuiqing | ||
| 15 | + * 修改时间:2025/12/13 21:33 | ||
| 16 | + * 修改备注: | ||
| 17 | + * | ||
| 18 | + * @author yanhuiqing | ||
| 19 | + * @version 1.0 | ||
| 20 | + */ | ||
| 21 | +@Schema(description = "APP - 通过流程任务的 Request VO") | ||
| 22 | +@Data | ||
| 23 | +public class AppGardenTaskApproveReqVO { | ||
| 24 | + | ||
| 25 | + @Schema(description = "任务编号", requiredMode = Schema.RequiredMode.REQUIRED, example = "1024") | ||
| 26 | + @NotEmpty(message = "任务编号不能为空") | ||
| 27 | + private String id; | ||
| 28 | + | ||
| 29 | + @Schema(description = "审批意见", example = "通过!") | ||
| 30 | + private String reason; | ||
| 31 | + | ||
| 32 | +} | ||
| 0 | \ No newline at end of file | 33 | \ No newline at end of file |
urbanops-module-workorder/src/main/java/com/zteits/urbanops/module/workorder/controller/app/garden/vo/AppGardenTaskPageReqVO.java
0 → 100644
| 1 | +package com.zteits.urbanops.module.workorder.controller.app.garden.vo; | ||
| 2 | + | ||
| 3 | +import com.zteits.urbanops.framework.common.pojo.PageParam; | ||
| 4 | +import io.swagger.v3.oas.annotations.media.Schema; | ||
| 5 | +import lombok.Data; | ||
| 6 | + | ||
| 7 | +/** | ||
| 8 | + * 类描述:园林APP端工作流任务请求VO | ||
| 9 | + * 创建人:yanhuiqing | ||
| 10 | + * 创建时间:2025/12/13 21:20 | ||
| 11 | + * 修改人:yanhuiqing | ||
| 12 | + * 修改时间:2025/12/13 21:20 | ||
| 13 | + * 修改备注: | ||
| 14 | + * | ||
| 15 | + * @author yanhuiqing | ||
| 16 | + * @version 1.0 | ||
| 17 | + */ | ||
| 18 | +@Schema(description = "APP - 流程任务的的分页 Request VO") // 待办、已办,都使用该分页 | ||
| 19 | +@Data | ||
| 20 | +public class AppGardenTaskPageReqVO extends PageParam { | ||
| 21 | + | ||
| 22 | + @Schema(description = "流程定义的标识", example = "quik_local_test") | ||
| 23 | + private String processDefinitionKey; // 精准匹配 | ||
| 24 | +} | ||
| 0 | \ No newline at end of file | 25 | \ No newline at end of file |
urbanops-module-workorder/src/main/java/com/zteits/urbanops/module/workorder/controller/app/garden/vo/AppGardenTaskRespVO.java
0 → 100644
| 1 | +package com.zteits.urbanops.module.workorder.controller.app.garden.vo; | ||
| 2 | + | ||
| 3 | +import com.fasterxml.jackson.annotation.JsonIgnore; | ||
| 4 | +import com.zteits.urbanops.framework.common.core.KeyValue; | ||
| 5 | +import com.zteits.urbanops.module.bpm.controller.admin.base.user.UserSimpleBaseVO; | ||
| 6 | +import com.zteits.urbanops.module.bpm.controller.admin.task.vo.task.BpmTaskRespVO; | ||
| 7 | +import io.swagger.v3.oas.annotations.media.Schema; | ||
| 8 | +import lombok.Data; | ||
| 9 | + | ||
| 10 | +import java.time.LocalDateTime; | ||
| 11 | +import java.util.List; | ||
| 12 | +import java.util.Map; | ||
| 13 | + | ||
| 14 | +/** | ||
| 15 | + * 类描述:园林APP端流程任务 Response VO | ||
| 16 | + * 创建人:yanhuiqing | ||
| 17 | + * 创建时间:2025/12/13 22:07 | ||
| 18 | + * 修改人:yanhuiqing | ||
| 19 | + * 修改时间:2025/12/13 22:07 | ||
| 20 | + * 修改备注: | ||
| 21 | + * | ||
| 22 | + * @author yanhuiqing | ||
| 23 | + * @version 1.0 | ||
| 24 | + */ | ||
| 25 | +@Schema(description = "APP - 流程任务 Response VO") | ||
| 26 | +@Data | ||
| 27 | +public class AppGardenTaskRespVO { | ||
| 28 | + | ||
| 29 | + @Schema(description = "任务编号", requiredMode = Schema.RequiredMode.REQUIRED, example = "1024") | ||
| 30 | + private String id; | ||
| 31 | + | ||
| 32 | + @Schema(description = "创建时间", requiredMode = Schema.RequiredMode.REQUIRED) | ||
| 33 | + private LocalDateTime createTime; | ||
| 34 | + | ||
| 35 | + @Schema(description = "结束时间", requiredMode = Schema.RequiredMode.REQUIRED) | ||
| 36 | + private LocalDateTime endTime; | ||
| 37 | + | ||
| 38 | + @Schema(description = "持续时间", example = "1000") | ||
| 39 | + private Long durationInMillis; | ||
| 40 | + | ||
| 41 | + @Schema(description = "任务状态", requiredMode = Schema.RequiredMode.REQUIRED, example = "2") | ||
| 42 | + private Integer status; // 参见 BpmTaskStatusEnum 枚举 | ||
| 43 | + | ||
| 44 | + @Schema(description = "审批理由", requiredMode = Schema.RequiredMode.REQUIRED, example = "2") | ||
| 45 | + private String reason; | ||
| 46 | + | ||
| 47 | + @Schema(description = "任务负责人编号", requiredMode = Schema.RequiredMode.NOT_REQUIRED, example = "2048") | ||
| 48 | + @JsonIgnore // 不返回,只是方便后续读取,赋值给 ownerUser | ||
| 49 | + private Long owner; | ||
| 50 | + /** | ||
| 51 | + * 负责人的用户信息 | ||
| 52 | + */ | ||
| 53 | + private UserSimpleBaseVO ownerUser; | ||
| 54 | + | ||
| 55 | + @Schema(description = "任务分配人编号", requiredMode = Schema.RequiredMode.NOT_REQUIRED, example = "2048") | ||
| 56 | + @JsonIgnore // 不返回,只是方便后续读取,赋值给 assigneeUser | ||
| 57 | + private Long assignee; | ||
| 58 | + /** | ||
| 59 | + * 审核的用户信息 | ||
| 60 | + */ | ||
| 61 | + private UserSimpleBaseVO assigneeUser; | ||
| 62 | + | ||
| 63 | + @Schema(description = "任务定义的标识", requiredMode = Schema.RequiredMode.REQUIRED, example = "Activity_one") | ||
| 64 | + private String taskDefinitionKey; | ||
| 65 | + | ||
| 66 | + @Schema(description = "所属流程实例编号", requiredMode = Schema.RequiredMode.REQUIRED, example = "8888") | ||
| 67 | + private String processInstanceId; | ||
| 68 | + | ||
| 69 | + | ||
| 70 | + @Schema(description = "提交的表单值", requiredMode = Schema.RequiredMode.REQUIRED) | ||
| 71 | + private Map<String, Object> formVariables; | ||
| 72 | + | ||
| 73 | + @Schema(description = "节点类型", example = "10") | ||
| 74 | + private Integer nodeType; // 参见 BpmSimpleModelNodeTypeEnum 枚举。 | ||
| 75 | + | ||
| 76 | + /** | ||
| 77 | + * 所属流程实例 | ||
| 78 | + */ | ||
| 79 | + private BpmTaskRespVO.ProcessInstance processInstance; | ||
| 80 | + | ||
| 81 | + @Data | ||
| 82 | + @Schema(description = "流程实例") | ||
| 83 | + public static class ProcessInstance { | ||
| 84 | + | ||
| 85 | + @Schema(description = "流程实例编号", requiredMode = Schema.RequiredMode.REQUIRED, example = "1024") | ||
| 86 | + private String id; | ||
| 87 | + | ||
| 88 | + @Schema(description = "流程实例名称", requiredMode = Schema.RequiredMode.REQUIRED, example = "全域") | ||
| 89 | + private String name; | ||
| 90 | + | ||
| 91 | + @Schema(description = "提交时间", requiredMode = Schema.RequiredMode.REQUIRED) | ||
| 92 | + private LocalDateTime createTime; | ||
| 93 | + | ||
| 94 | + @Schema(description = "流程定义的编号", requiredMode = Schema.RequiredMode.REQUIRED, example = "2048") | ||
| 95 | + private String processDefinitionId; | ||
| 96 | + | ||
| 97 | + @Schema(description = "流程摘要", example = "[]") | ||
| 98 | + private List<KeyValue<String, String>> summary; // 只有流程表单,才有摘要! | ||
| 99 | + | ||
| 100 | + /** | ||
| 101 | + * 发起人的用户信息 | ||
| 102 | + */ | ||
| 103 | + private UserSimpleBaseVO startUser; | ||
| 104 | + | ||
| 105 | + } | ||
| 106 | + | ||
| 107 | + | ||
| 108 | + | ||
| 109 | + | ||
| 110 | +} | ||
| 0 | \ No newline at end of file | 111 | \ No newline at end of file |
urbanops-module-workorder/src/main/java/com/zteits/urbanops/module/workorder/controller/app/garden/vo/AppGardenWorkOrderPageReqVO.java
| @@ -12,7 +12,7 @@ import lombok.Data; | @@ -12,7 +12,7 @@ import lombok.Data; | ||
| 12 | * @description: TODO | 12 | * @description: TODO |
| 13 | * @date 2025/12/9 20:21 | 13 | * @date 2025/12/9 20:21 |
| 14 | */ | 14 | */ |
| 15 | -@Schema(description = "管理后台 - 工单信息分页 Request VO") | 15 | +@Schema(description = "APP - 工单信息分页 Request VO") |
| 16 | @Data | 16 | @Data |
| 17 | public class AppGardenWorkOrderPageReqVO extends PageParam { | 17 | public class AppGardenWorkOrderPageReqVO extends PageParam { |
| 18 | 18 |
urbanops-module-workorder/src/main/java/com/zteits/urbanops/module/workorder/convert/garden/AppGardenTaskConvert.java
0 → 100644
| 1 | +package com.zteits.urbanops.module.workorder.convert.garden; | ||
| 2 | + | ||
| 3 | +import com.zteits.urbanops.framework.common.pojo.PageResult; | ||
| 4 | +import com.zteits.urbanops.framework.common.util.collection.CollectionUtils; | ||
| 5 | +import com.zteits.urbanops.framework.common.util.date.DateUtils; | ||
| 6 | +import com.zteits.urbanops.framework.common.util.number.NumberUtils; | ||
| 7 | +import com.zteits.urbanops.framework.common.util.object.BeanUtils; | ||
| 8 | +import com.zteits.urbanops.module.bpm.controller.admin.base.user.UserSimpleBaseVO; | ||
| 9 | +import com.zteits.urbanops.module.bpm.controller.admin.task.vo.task.BpmTaskRespVO; | ||
| 10 | +import com.zteits.urbanops.module.bpm.dal.dataobject.definition.BpmProcessDefinitionInfoDO; | ||
| 11 | +import com.zteits.urbanops.module.bpm.framework.flowable.core.util.FlowableUtils; | ||
| 12 | +import com.zteits.urbanops.module.system.api.dept.dto.DeptRespDTO; | ||
| 13 | +import com.zteits.urbanops.module.system.api.user.dto.AdminUserRespDTO; | ||
| 14 | +import com.zteits.urbanops.module.workorder.controller.app.garden.vo.AppGardenTaskRespVO; | ||
| 15 | +import org.flowable.engine.history.HistoricProcessInstance; | ||
| 16 | +import org.flowable.engine.runtime.ProcessInstance; | ||
| 17 | +import org.flowable.task.api.Task; | ||
| 18 | +import org.flowable.task.api.history.HistoricTaskInstance; | ||
| 19 | +import org.mapstruct.Mapper; | ||
| 20 | +import org.mapstruct.factory.Mappers; | ||
| 21 | + | ||
| 22 | +import java.util.List; | ||
| 23 | +import java.util.Map; | ||
| 24 | + | ||
| 25 | +import static com.zteits.urbanops.framework.common.util.collection.MapUtils.findAndThen; | ||
| 26 | + | ||
| 27 | +/** | ||
| 28 | + * 类描述:园林APP端任务信息转换 | ||
| 29 | + * 创建人:yanhuiqing | ||
| 30 | + * 创建时间:2025/12/13 22:41 | ||
| 31 | + * 修改人:yanhuiqing | ||
| 32 | + * 修改时间:2025/12/13 22:41 | ||
| 33 | + * 修改备注: | ||
| 34 | + * | ||
| 35 | + * @author yanhuiqing | ||
| 36 | + * @version 1.0 | ||
| 37 | + */ | ||
| 38 | +@Mapper | ||
| 39 | +public interface AppGardenTaskConvert { | ||
| 40 | + | ||
| 41 | + AppGardenTaskConvert INSTANCE = Mappers.getMapper(AppGardenTaskConvert.class); | ||
| 42 | + | ||
| 43 | + default PageResult<AppGardenTaskRespVO> buildTodoTaskPage(PageResult<Task> pageResult, | ||
| 44 | + Map<String, ProcessInstance> processInstanceMap, | ||
| 45 | + Map<Long, AdminUserRespDTO> userMap, | ||
| 46 | + Map<String, BpmProcessDefinitionInfoDO> processDefinitionInfoMap) { | ||
| 47 | + return BeanUtils.toBean(pageResult, AppGardenTaskRespVO.class, taskVO -> { | ||
| 48 | + ProcessInstance processInstance = processInstanceMap.get(taskVO.getProcessInstanceId()); | ||
| 49 | + if (processInstance == null) { | ||
| 50 | + return; | ||
| 51 | + } | ||
| 52 | + taskVO.setProcessInstance(BeanUtils.toBean(processInstance, BpmTaskRespVO.ProcessInstance.class)); | ||
| 53 | + AdminUserRespDTO startUser = userMap.get(NumberUtils.parseLong(processInstance.getStartUserId())); | ||
| 54 | + taskVO.getProcessInstance().setStartUser(BeanUtils.toBean(startUser, UserSimpleBaseVO.class)); | ||
| 55 | + taskVO.getProcessInstance().setCreateTime(DateUtils.of(processInstance.getStartTime())); | ||
| 56 | + // 摘要 | ||
| 57 | + taskVO.getProcessInstance().setSummary(FlowableUtils.getSummary(processDefinitionInfoMap.get(processInstance.getProcessDefinitionId()), | ||
| 58 | + processInstance.getProcessVariables())); | ||
| 59 | + }); | ||
| 60 | + } | ||
| 61 | + | ||
| 62 | + default PageResult<AppGardenTaskRespVO> buildTaskPage(PageResult<HistoricTaskInstance> pageResult, | ||
| 63 | + Map<String, HistoricProcessInstance> processInstanceMap, | ||
| 64 | + Map<Long, AdminUserRespDTO> userMap, | ||
| 65 | + Map<Long, DeptRespDTO> deptMap, | ||
| 66 | + Map<String, BpmProcessDefinitionInfoDO> processDefinitionInfoMap) { | ||
| 67 | + List<AppGardenTaskRespVO> taskVOList = CollectionUtils.convertList(pageResult.getList(), task -> { | ||
| 68 | + AppGardenTaskRespVO taskVO = BeanUtils.toBean(task, AppGardenTaskRespVO.class); | ||
| 69 | + taskVO.setStatus(FlowableUtils.getTaskStatus(task)).setReason(FlowableUtils.getTaskReason(task)); | ||
| 70 | + // 用户信息 | ||
| 71 | + AdminUserRespDTO assignUser = userMap.get(NumberUtils.parseLong(task.getAssignee())); | ||
| 72 | + if (assignUser != null) { | ||
| 73 | + taskVO.setAssigneeUser(BeanUtils.toBean(assignUser, UserSimpleBaseVO.class)); | ||
| 74 | + findAndThen(deptMap, assignUser.getDeptId(), dept -> taskVO.getAssigneeUser().setDeptName(dept.getName())); | ||
| 75 | + } | ||
| 76 | + // 流程实例 | ||
| 77 | + HistoricProcessInstance processInstance = processInstanceMap.get(taskVO.getProcessInstanceId()); | ||
| 78 | + if (processInstance != null) { | ||
| 79 | + AdminUserRespDTO startUser = userMap.get(NumberUtils.parseLong(processInstance.getStartUserId())); | ||
| 80 | + taskVO.setProcessInstance(BeanUtils.toBean(processInstance, BpmTaskRespVO.ProcessInstance.class)); | ||
| 81 | + taskVO.getProcessInstance().setStartUser(BeanUtils.toBean(startUser, UserSimpleBaseVO.class)); | ||
| 82 | + // 摘要 | ||
| 83 | + taskVO.getProcessInstance().setSummary(FlowableUtils.getSummary(processDefinitionInfoMap.get(processInstance.getProcessDefinitionId()), | ||
| 84 | + processInstance.getProcessVariables())); | ||
| 85 | + } | ||
| 86 | + return taskVO; | ||
| 87 | + }); | ||
| 88 | + return new PageResult<>(taskVOList, pageResult.getTotal()); | ||
| 89 | + } | ||
| 90 | + | ||
| 91 | +} | ||
| 0 | \ No newline at end of file | 92 | \ No newline at end of file |
urbanops-module-workorder/src/main/java/com/zteits/urbanops/module/workorder/service/garden/BpmGardenService.java
| @@ -3,8 +3,7 @@ package com.zteits.urbanops.module.workorder.service.garden; | @@ -3,8 +3,7 @@ package com.zteits.urbanops.module.workorder.service.garden; | ||
| 3 | import com.zteits.urbanops.framework.common.pojo.PageResult; | 3 | import com.zteits.urbanops.framework.common.pojo.PageResult; |
| 4 | import com.zteits.urbanops.module.workorder.controller.admin.garden.vo.BpmGardenWorkOrderCreateReqVO; | 4 | import com.zteits.urbanops.module.workorder.controller.admin.garden.vo.BpmGardenWorkOrderCreateReqVO; |
| 5 | import com.zteits.urbanops.module.workorder.controller.admin.garden.vo.BpmGardenWorkOrderPageReqVO; | 5 | import com.zteits.urbanops.module.workorder.controller.admin.garden.vo.BpmGardenWorkOrderPageReqVO; |
| 6 | -import com.zteits.urbanops.module.workorder.controller.app.garden.vo.AppGardenWorkOrderPageReqVO; | ||
| 7 | -import com.zteits.urbanops.module.workorder.controller.app.garden.vo.AppGardenWorkOrderReqVO; | 6 | +import com.zteits.urbanops.module.workorder.controller.app.garden.vo.*; |
| 8 | import com.zteits.urbanops.module.workorder.dal.dataobject.garden.BpmGardenWorkOrderDO; | 7 | import com.zteits.urbanops.module.workorder.dal.dataobject.garden.BpmGardenWorkOrderDO; |
| 9 | import jakarta.validation.Valid; | 8 | import jakarta.validation.Valid; |
| 10 | /** | 9 | /** |
| @@ -66,4 +65,24 @@ public interface BpmGardenService { | @@ -66,4 +65,24 @@ public interface BpmGardenService { | ||
| 66 | * @return | 65 | * @return |
| 67 | */ | 66 | */ |
| 68 | Long createWorkOrderQuick(@Valid AppGardenWorkOrderReqVO createReqVO); | 67 | Long createWorkOrderQuick(@Valid AppGardenWorkOrderReqVO createReqVO); |
| 68 | + | ||
| 69 | + /** | ||
| 70 | + * 审批通过 -app端 | ||
| 71 | + * @param reqVO | ||
| 72 | + */ | ||
| 73 | + void approveTask(AppGardenTaskApproveReqVO reqVO); | ||
| 74 | + | ||
| 75 | + /** | ||
| 76 | + * 已办列表 -app端 | ||
| 77 | + * @param pageVO | ||
| 78 | + * @return | ||
| 79 | + */ | ||
| 80 | + PageResult<AppGardenTaskRespVO> getTaskDonePage(AppGardenTaskPageReqVO pageVO); | ||
| 81 | + | ||
| 82 | + /** | ||
| 83 | + * 待办列表 -app端 | ||
| 84 | + * @param pageVO | ||
| 85 | + * @return | ||
| 86 | + */ | ||
| 87 | + PageResult<AppGardenTaskRespVO> getTaskTodoPage(AppGardenTaskPageReqVO pageVO); | ||
| 69 | } | 88 | } |
urbanops-module-workorder/src/main/java/com/zteits/urbanops/module/workorder/service/garden/BpmGardenServiceImpl.java
| 1 | package com.zteits.urbanops.module.workorder.service.garden; | 1 | package com.zteits.urbanops.module.workorder.service.garden; |
| 2 | 2 | ||
| 3 | +import cn.hutool.core.collection.CollUtil; | ||
| 3 | import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; | 4 | import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; |
| 4 | import com.zteits.urbanops.framework.common.pojo.PageResult; | 5 | import com.zteits.urbanops.framework.common.pojo.PageResult; |
| 5 | import com.zteits.urbanops.framework.common.util.object.BeanUtils; | 6 | import com.zteits.urbanops.framework.common.util.object.BeanUtils; |
| @@ -7,16 +8,26 @@ import com.zteits.urbanops.framework.common.util.object.ObjectUtils; | @@ -7,16 +8,26 @@ import com.zteits.urbanops.framework.common.util.object.ObjectUtils; | ||
| 7 | import com.zteits.urbanops.framework.security.core.util.SecurityFrameworkUtils; | 8 | import com.zteits.urbanops.framework.security.core.util.SecurityFrameworkUtils; |
| 8 | import com.zteits.urbanops.module.bpm.api.task.BpmProcessInstanceApi; | 9 | import com.zteits.urbanops.module.bpm.api.task.BpmProcessInstanceApi; |
| 9 | import com.zteits.urbanops.module.bpm.api.task.dto.BpmProcessInstanceCreateReqDTO; | 10 | import com.zteits.urbanops.module.bpm.api.task.dto.BpmProcessInstanceCreateReqDTO; |
| 11 | +import com.zteits.urbanops.module.bpm.controller.admin.task.vo.task.BpmTaskApproveReqVO; | ||
| 12 | +import com.zteits.urbanops.module.bpm.controller.admin.task.vo.task.BpmTaskPageReqVO; | ||
| 13 | +import com.zteits.urbanops.module.bpm.convert.task.BpmTaskConvert; | ||
| 14 | +import com.zteits.urbanops.module.bpm.dal.dataobject.definition.BpmProcessDefinitionInfoDO; | ||
| 10 | import com.zteits.urbanops.module.bpm.enums.task.BpmTaskStatusEnum; | 15 | import com.zteits.urbanops.module.bpm.enums.task.BpmTaskStatusEnum; |
| 16 | +import com.zteits.urbanops.module.bpm.framework.flowable.core.enums.BpmnVariableConstants; | ||
| 17 | +import com.zteits.urbanops.module.bpm.service.definition.BpmProcessDefinitionService; | ||
| 18 | +import com.zteits.urbanops.module.bpm.service.task.BpmProcessInstanceService; | ||
| 19 | +import com.zteits.urbanops.module.bpm.service.task.BpmTaskService; | ||
| 11 | import com.zteits.urbanops.module.garden.api.road.RoadApi; | 20 | import com.zteits.urbanops.module.garden.api.road.RoadApi; |
| 12 | import com.zteits.urbanops.module.garden.api.road.dto.RoadStreetRespDTO; | 21 | import com.zteits.urbanops.module.garden.api.road.dto.RoadStreetRespDTO; |
| 22 | +import com.zteits.urbanops.module.system.api.user.AdminUserApi; | ||
| 23 | +import com.zteits.urbanops.module.system.api.user.dto.AdminUserRespDTO; | ||
| 13 | import com.zteits.urbanops.module.workorder.api.constant.BpmCommonConstant; | 24 | import com.zteits.urbanops.module.workorder.api.constant.BpmCommonConstant; |
| 14 | import com.zteits.urbanops.module.workorder.api.workorder.WorkOrderApi; | 25 | import com.zteits.urbanops.module.workorder.api.workorder.WorkOrderApi; |
| 15 | import com.zteits.urbanops.module.workorder.controller.admin.garden.vo.BpmGardenWorkOrderCreateReqVO; | 26 | import com.zteits.urbanops.module.workorder.controller.admin.garden.vo.BpmGardenWorkOrderCreateReqVO; |
| 16 | import com.zteits.urbanops.module.workorder.controller.admin.garden.vo.BpmGardenWorkOrderPageReqVO; | 27 | import com.zteits.urbanops.module.workorder.controller.admin.garden.vo.BpmGardenWorkOrderPageReqVO; |
| 17 | import com.zteits.urbanops.module.workorder.controller.admin.maininfo.vo.MainInfoPageReqVO; | 28 | import com.zteits.urbanops.module.workorder.controller.admin.maininfo.vo.MainInfoPageReqVO; |
| 18 | -import com.zteits.urbanops.module.workorder.controller.app.garden.vo.AppGardenWorkOrderPageReqVO; | ||
| 19 | -import com.zteits.urbanops.module.workorder.controller.app.garden.vo.AppGardenWorkOrderReqVO; | 29 | +import com.zteits.urbanops.module.workorder.controller.app.garden.vo.*; |
| 30 | +import com.zteits.urbanops.module.workorder.convert.garden.AppGardenTaskConvert; | ||
| 20 | import com.zteits.urbanops.module.workorder.convert.garden.BpmGardenWorkOrderConverter; | 31 | import com.zteits.urbanops.module.workorder.convert.garden.BpmGardenWorkOrderConverter; |
| 21 | import com.zteits.urbanops.module.workorder.dal.dataobject.attachment.AttachmentDO; | 32 | import com.zteits.urbanops.module.workorder.dal.dataobject.attachment.AttachmentDO; |
| 22 | import com.zteits.urbanops.module.workorder.dal.dataobject.garden.BpmGardenWorkOrderDO; | 33 | import com.zteits.urbanops.module.workorder.dal.dataobject.garden.BpmGardenWorkOrderDO; |
| @@ -24,6 +35,11 @@ import com.zteits.urbanops.module.workorder.dal.dataobject.maininfo.MainInfoDO; | @@ -24,6 +35,11 @@ import com.zteits.urbanops.module.workorder.dal.dataobject.maininfo.MainInfoDO; | ||
| 24 | import com.zteits.urbanops.module.workorder.dal.mysql.attachment.AttachmentMapper; | 35 | import com.zteits.urbanops.module.workorder.dal.mysql.attachment.AttachmentMapper; |
| 25 | import com.zteits.urbanops.module.workorder.dal.mysql.maininfo.MainInfoMapper; | 36 | import com.zteits.urbanops.module.workorder.dal.mysql.maininfo.MainInfoMapper; |
| 26 | import jakarta.annotation.Resource; | 37 | import jakarta.annotation.Resource; |
| 38 | +import org.flowable.engine.RuntimeService; | ||
| 39 | +import org.flowable.engine.history.HistoricProcessInstance; | ||
| 40 | +import org.flowable.engine.runtime.ProcessInstance; | ||
| 41 | +import org.flowable.task.api.Task; | ||
| 42 | +import org.flowable.task.api.history.HistoricTaskInstance; | ||
| 27 | import org.springframework.stereotype.Service; | 43 | import org.springframework.stereotype.Service; |
| 28 | import org.springframework.transaction.annotation.Transactional; | 44 | import org.springframework.transaction.annotation.Transactional; |
| 29 | import org.springframework.validation.annotation.Validated; | 45 | import org.springframework.validation.annotation.Validated; |
| @@ -32,10 +48,11 @@ import java.time.LocalDateTime; | @@ -32,10 +48,11 @@ import java.time.LocalDateTime; | ||
| 32 | import java.util.HashMap; | 48 | import java.util.HashMap; |
| 33 | import java.util.List; | 49 | import java.util.List; |
| 34 | import java.util.Map; | 50 | import java.util.Map; |
| 35 | -import java.util.Arrays; | ||
| 36 | -import java.util.stream.Collectors; | ||
| 37 | 51 | ||
| 38 | import static com.zteits.urbanops.framework.common.exception.util.ServiceExceptionUtil.exception; | 52 | import static com.zteits.urbanops.framework.common.exception.util.ServiceExceptionUtil.exception; |
| 53 | +import static com.zteits.urbanops.framework.common.pojo.CommonResult.success; | ||
| 54 | +import static com.zteits.urbanops.framework.common.util.collection.CollectionUtils.convertSet; | ||
| 55 | +import static com.zteits.urbanops.framework.web.core.util.WebFrameworkUtils.getLoginUserId; | ||
| 39 | import static com.zteits.urbanops.module.workorder.enums.ErrorCodeConstants.MAIN_INFO_NOT_EXISTS; | 56 | import static com.zteits.urbanops.module.workorder.enums.ErrorCodeConstants.MAIN_INFO_NOT_EXISTS; |
| 40 | 57 | ||
| 41 | /** | 58 | /** |
| @@ -59,6 +76,20 @@ public class BpmGardenServiceImpl implements BpmGardenService{ | @@ -59,6 +76,20 @@ public class BpmGardenServiceImpl implements BpmGardenService{ | ||
| 59 | @Resource | 76 | @Resource |
| 60 | private RoadApi roadApi; | 77 | private RoadApi roadApi; |
| 61 | 78 | ||
| 79 | + @Resource | ||
| 80 | + private BpmTaskService taskService; | ||
| 81 | + | ||
| 82 | + @Resource | ||
| 83 | + private BpmProcessDefinitionService processDefinitionService; | ||
| 84 | + | ||
| 85 | + @Resource | ||
| 86 | + private AdminUserApi adminUserApi; | ||
| 87 | + | ||
| 88 | + @Resource | ||
| 89 | + private BpmProcessInstanceService processInstanceService; | ||
| 90 | + | ||
| 91 | + @Resource | ||
| 92 | + private RuntimeService runtimeService; | ||
| 62 | 93 | ||
| 63 | @Override | 94 | @Override |
| 64 | @Transactional(rollbackFor = Exception.class) | 95 | @Transactional(rollbackFor = Exception.class) |
| @@ -95,12 +126,21 @@ public class BpmGardenServiceImpl implements BpmGardenService{ | @@ -95,12 +126,21 @@ public class BpmGardenServiceImpl implements BpmGardenService{ | ||
| 95 | processInstanceVariables.put("workOrder", workOrder); | 126 | processInstanceVariables.put("workOrder", workOrder); |
| 96 | processInstanceVariables.put("imgList", imgList); | 127 | processInstanceVariables.put("imgList", imgList); |
| 97 | processInstanceVariables.put("longRangeImgList", longRangeImgList); | 128 | processInstanceVariables.put("longRangeImgList", longRangeImgList); |
| 98 | - processInstanceVariables.put("applyUserId", SecurityFrameworkUtils.getLoginUserId()); | 129 | + processInstanceVariables.put("initiator", SecurityFrameworkUtils.getLoginUserId()); |
| 99 | 130 | ||
| 100 | String processInstanceId = processInstanceApi.createProcessInstance(SecurityFrameworkUtils.getLoginUserId(), | 131 | String processInstanceId = processInstanceApi.createProcessInstance(SecurityFrameworkUtils.getLoginUserId(), |
| 101 | new BpmProcessInstanceCreateReqDTO().setProcessDefinitionKey(BpmCommonConstant.COMMON_QUICK_PROCESS) | 132 | new BpmProcessInstanceCreateReqDTO().setProcessDefinitionKey(BpmCommonConstant.COMMON_QUICK_PROCESS) |
| 133 | + //new BpmProcessInstanceCreateReqDTO().setProcessDefinitionKey("quik_local_test") | ||
| 134 | + | ||
| 102 | .setVariables(processInstanceVariables).setBusinessKey(String.valueOf(workOrder.getId()))); | 135 | .setVariables(processInstanceVariables).setBusinessKey(String.valueOf(workOrder.getId()))); |
| 136 | + //Authentication.setAuthenticatedUserId(SecurityFrameworkUtils.getLoginUserId()+""); | ||
| 137 | + // 启动流程(使用processDefinitionKey,自动使用最新版本) | ||
| 138 | + /*ProcessInstance processInstance = runtimeService.startProcessInstanceByKey( | ||
| 139 | + "quik_local_test", | ||
| 140 | + processInstanceVariables | ||
| 141 | + );*/ | ||
| 103 | 142 | ||
| 143 | + //workOrderMapper.updateById(new MainInfoDO().setId(workOrder.getId()).setProcessInstanceId(processInstance.getProcessInstanceId())); | ||
| 104 | // 将工作流的编号,更新到 工单中 | 144 | // 将工作流的编号,更新到 工单中 |
| 105 | workOrderMapper.updateById(new MainInfoDO().setId(workOrder.getId()).setProcessInstanceId(processInstanceId)); | 145 | workOrderMapper.updateById(new MainInfoDO().setId(workOrder.getId()).setProcessInstanceId(processInstanceId)); |
| 106 | 146 | ||
| @@ -108,6 +148,61 @@ public class BpmGardenServiceImpl implements BpmGardenService{ | @@ -108,6 +148,61 @@ public class BpmGardenServiceImpl implements BpmGardenService{ | ||
| 108 | return workOrder.getId(); | 148 | return workOrder.getId(); |
| 109 | } | 149 | } |
| 110 | 150 | ||
| 151 | + /** | ||
| 152 | + * 审批通过 | ||
| 153 | + * @param reqVO | ||
| 154 | + */ | ||
| 155 | + @Override | ||
| 156 | + public void approveTask(AppGardenTaskApproveReqVO reqVO) { | ||
| 157 | + BpmTaskApproveReqVO targetVO = BeanUtils.toBean(reqVO,BpmTaskApproveReqVO.class); | ||
| 158 | + Map<String, Object> variables = new HashMap<>(); | ||
| 159 | + //审批通过 | ||
| 160 | + variables.put(BpmnVariableConstants.PROCESS_INSTANCE_VARIABLE_STATUS,BpmTaskStatusEnum.APPROVE.getStatus()); | ||
| 161 | + targetVO.setVariables(variables); | ||
| 162 | + //TODO 审批候选人需要赋值 | ||
| 163 | + Map<String, List<Long>> nextAssignees = new HashMap<>(); | ||
| 164 | + targetVO.setNextAssignees(nextAssignees); | ||
| 165 | + taskService.approveTask(SecurityFrameworkUtils.getLoginUserId(),targetVO); | ||
| 166 | + } | ||
| 167 | + | ||
| 168 | + @Override | ||
| 169 | + public PageResult<AppGardenTaskRespVO> getTaskDonePage(AppGardenTaskPageReqVO pageVO) { | ||
| 170 | + BpmTaskPageReqVO targetVO = BeanUtils.toBean(pageVO,BpmTaskPageReqVO.class); | ||
| 171 | + PageResult<HistoricTaskInstance> pageResult = taskService.getTaskDonePage(SecurityFrameworkUtils.getLoginUserId(), targetVO); | ||
| 172 | + if (CollUtil.isEmpty(pageResult.getList())) { | ||
| 173 | + return PageResult.empty(); | ||
| 174 | + } | ||
| 175 | + | ||
| 176 | + // 拼接数据 | ||
| 177 | + Map<String, HistoricProcessInstance> processInstanceMap = processInstanceService.getHistoricProcessInstanceMap( | ||
| 178 | + convertSet(pageResult.getList(), HistoricTaskInstance::getProcessInstanceId)); | ||
| 179 | + Map<Long, AdminUserRespDTO> userMap = adminUserApi.getUserMap( | ||
| 180 | + convertSet(processInstanceMap.values(), instance -> Long.valueOf(instance.getStartUserId()))); | ||
| 181 | + Map<String, BpmProcessDefinitionInfoDO> processDefinitionInfoMap = processDefinitionService.getProcessDefinitionInfoMap( | ||
| 182 | + convertSet(pageResult.getList(), HistoricTaskInstance::getProcessDefinitionId)); | ||
| 183 | + PageResult<AppGardenTaskRespVO> newRespVO = AppGardenTaskConvert.INSTANCE.buildTaskPage(pageResult, processInstanceMap, userMap, null, processDefinitionInfoMap); | ||
| 184 | + return newRespVO; | ||
| 185 | + } | ||
| 186 | + | ||
| 187 | + @Override | ||
| 188 | + public PageResult<AppGardenTaskRespVO> getTaskTodoPage(AppGardenTaskPageReqVO pageVO) { | ||
| 189 | + BpmTaskPageReqVO targetVO = BeanUtils.toBean(pageVO,BpmTaskPageReqVO.class); | ||
| 190 | + PageResult<Task> pageResult = taskService.getTaskTodoPage(SecurityFrameworkUtils.getLoginUserId(), targetVO); | ||
| 191 | + if (CollUtil.isEmpty(pageResult.getList())) { | ||
| 192 | + return PageResult.empty(); | ||
| 193 | + } | ||
| 194 | + | ||
| 195 | + // 拼接数据 | ||
| 196 | + Map<String, ProcessInstance> processInstanceMap = processInstanceService.getProcessInstanceMap( | ||
| 197 | + convertSet(pageResult.getList(), Task::getProcessInstanceId)); | ||
| 198 | + Map<Long, AdminUserRespDTO> userMap = adminUserApi.getUserMap( | ||
| 199 | + convertSet(processInstanceMap.values(), instance -> Long.valueOf(instance.getStartUserId()))); | ||
| 200 | + Map<String, BpmProcessDefinitionInfoDO> processDefinitionInfoMap = processDefinitionService.getProcessDefinitionInfoMap( | ||
| 201 | + convertSet(pageResult.getList(), Task::getProcessDefinitionId)); | ||
| 202 | + PageResult<AppGardenTaskRespVO> newRespVO = AppGardenTaskConvert.INSTANCE.buildTodoTaskPage(pageResult, processInstanceMap, userMap, processDefinitionInfoMap); | ||
| 203 | + return newRespVO; | ||
| 204 | + } | ||
| 205 | + | ||
| 111 | @Override | 206 | @Override |
| 112 | @Transactional(rollbackFor = Exception.class) | 207 | @Transactional(rollbackFor = Exception.class) |
| 113 | public Long createWorkOrder(AppGardenWorkOrderReqVO createRequestVo) { | 208 | public Long createWorkOrder(AppGardenWorkOrderReqVO createRequestVo) { |