Commit b24fbc1a3e04de845fa1836f8a8a84cd950bfa41

Authored by 王富生
2 parents af81ebc3 94bf47dc

Merge remote-tracking branch 'origin/dev' into dev

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) {