Commit b24fbc1a3e04de845fa1836f8a8a84cd950bfa41
Merge remote-tracking branch 'origin/dev' into dev
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 | 3 | import com.zteits.urbanops.framework.common.pojo.CommonResult; |
| 4 | 4 | import com.zteits.urbanops.framework.common.pojo.PageResult; |
| 5 | 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 | 11 | import com.zteits.urbanops.module.garden.api.road.RoadApi; |
| 7 | 12 | import com.zteits.urbanops.module.garden.api.road.dto.RoadReqDTO; |
| 8 | 13 | import com.zteits.urbanops.module.garden.api.road.dto.RoadRespDTO; |
| 9 | 14 | import com.zteits.urbanops.module.workorder.controller.admin.garden.vo.BpmGardenWorkOrderPageReqVO; |
| 10 | 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 | 17 | import com.zteits.urbanops.module.workorder.dal.dataobject.garden.BpmGardenWorkOrderDO; |
| 15 | 18 | import com.zteits.urbanops.module.workorder.service.garden.BpmGardenService; |
| 16 | 19 | import io.swagger.v3.oas.annotations.Operation; |
| ... | ... | @@ -79,4 +82,26 @@ public class AppGardenWorkOrderController { |
| 79 | 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 | 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 | 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 | 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 | 12 | * @description: TODO |
| 13 | 13 | * @date 2025/12/9 20:21 |
| 14 | 14 | */ |
| 15 | -@Schema(description = "管理后台 - 工单信息分页 Request VO") | |
| 15 | +@Schema(description = "APP - 工单信息分页 Request VO") | |
| 16 | 16 | @Data |
| 17 | 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 | 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 | 3 | import com.zteits.urbanops.framework.common.pojo.PageResult; |
| 4 | 4 | import com.zteits.urbanops.module.workorder.controller.admin.garden.vo.BpmGardenWorkOrderCreateReqVO; |
| 5 | 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 | 7 | import com.zteits.urbanops.module.workorder.dal.dataobject.garden.BpmGardenWorkOrderDO; |
| 9 | 8 | import jakarta.validation.Valid; |
| 10 | 9 | /** |
| ... | ... | @@ -66,4 +65,24 @@ public interface BpmGardenService { |
| 66 | 65 | * @return |
| 67 | 66 | */ |
| 68 | 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 | 1 | package com.zteits.urbanops.module.workorder.service.garden; |
| 2 | 2 | |
| 3 | +import cn.hutool.core.collection.CollUtil; | |
| 3 | 4 | import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; |
| 4 | 5 | import com.zteits.urbanops.framework.common.pojo.PageResult; |
| 5 | 6 | import com.zteits.urbanops.framework.common.util.object.BeanUtils; |
| ... | ... | @@ -7,16 +8,26 @@ import com.zteits.urbanops.framework.common.util.object.ObjectUtils; |
| 7 | 8 | import com.zteits.urbanops.framework.security.core.util.SecurityFrameworkUtils; |
| 8 | 9 | import com.zteits.urbanops.module.bpm.api.task.BpmProcessInstanceApi; |
| 9 | 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 | 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 | 20 | import com.zteits.urbanops.module.garden.api.road.RoadApi; |
| 12 | 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 | 24 | import com.zteits.urbanops.module.workorder.api.constant.BpmCommonConstant; |
| 14 | 25 | import com.zteits.urbanops.module.workorder.api.workorder.WorkOrderApi; |
| 15 | 26 | import com.zteits.urbanops.module.workorder.controller.admin.garden.vo.BpmGardenWorkOrderCreateReqVO; |
| 16 | 27 | import com.zteits.urbanops.module.workorder.controller.admin.garden.vo.BpmGardenWorkOrderPageReqVO; |
| 17 | 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 | 31 | import com.zteits.urbanops.module.workorder.convert.garden.BpmGardenWorkOrderConverter; |
| 21 | 32 | import com.zteits.urbanops.module.workorder.dal.dataobject.attachment.AttachmentDO; |
| 22 | 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 | 35 | import com.zteits.urbanops.module.workorder.dal.mysql.attachment.AttachmentMapper; |
| 25 | 36 | import com.zteits.urbanops.module.workorder.dal.mysql.maininfo.MainInfoMapper; |
| 26 | 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 | 43 | import org.springframework.stereotype.Service; |
| 28 | 44 | import org.springframework.transaction.annotation.Transactional; |
| 29 | 45 | import org.springframework.validation.annotation.Validated; |
| ... | ... | @@ -32,10 +48,11 @@ import java.time.LocalDateTime; |
| 32 | 48 | import java.util.HashMap; |
| 33 | 49 | import java.util.List; |
| 34 | 50 | import java.util.Map; |
| 35 | -import java.util.Arrays; | |
| 36 | -import java.util.stream.Collectors; | |
| 37 | 51 | |
| 38 | 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 | 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 | 76 | @Resource |
| 60 | 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 | 94 | @Override |
| 64 | 95 | @Transactional(rollbackFor = Exception.class) |
| ... | ... | @@ -95,12 +126,21 @@ public class BpmGardenServiceImpl implements BpmGardenService{ |
| 95 | 126 | processInstanceVariables.put("workOrder", workOrder); |
| 96 | 127 | processInstanceVariables.put("imgList", imgList); |
| 97 | 128 | processInstanceVariables.put("longRangeImgList", longRangeImgList); |
| 98 | - processInstanceVariables.put("applyUserId", SecurityFrameworkUtils.getLoginUserId()); | |
| 129 | + processInstanceVariables.put("initiator", SecurityFrameworkUtils.getLoginUserId()); | |
| 99 | 130 | |
| 100 | 131 | String processInstanceId = processInstanceApi.createProcessInstance(SecurityFrameworkUtils.getLoginUserId(), |
| 101 | 132 | new BpmProcessInstanceCreateReqDTO().setProcessDefinitionKey(BpmCommonConstant.COMMON_QUICK_PROCESS) |
| 133 | + //new BpmProcessInstanceCreateReqDTO().setProcessDefinitionKey("quik_local_test") | |
| 134 | + | |
| 102 | 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 | 145 | workOrderMapper.updateById(new MainInfoDO().setId(workOrder.getId()).setProcessInstanceId(processInstanceId)); |
| 106 | 146 | |
| ... | ... | @@ -108,6 +148,61 @@ public class BpmGardenServiceImpl implements BpmGardenService{ |
| 108 | 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 | 206 | @Override |
| 112 | 207 | @Transactional(rollbackFor = Exception.class) |
| 113 | 208 | public Long createWorkOrder(AppGardenWorkOrderReqVO createRequestVo) { | ... | ... |