Commit 4d39d53392a5c1cef9dafc4a99b367b8cd7bad63
Committed by
Gitee
!1424 feat: 代码评审修改
Merge pull request !1424 from Lesan/feature/bpm-打印
Showing
7 changed files
with
100 additions
and
103 deletions
yudao-module-bpm/src/main/java/cn/iocoder/yudao/module/bpm/controller/admin/task/BpmProcessInstanceController.java
| @@ -6,6 +6,7 @@ import cn.iocoder.yudao.framework.common.pojo.CommonResult; | @@ -6,6 +6,7 @@ import cn.iocoder.yudao.framework.common.pojo.CommonResult; | ||
| 6 | import cn.iocoder.yudao.framework.common.pojo.PageResult; | 6 | import cn.iocoder.yudao.framework.common.pojo.PageResult; |
| 7 | import cn.iocoder.yudao.framework.common.util.json.JsonUtils; | 7 | import cn.iocoder.yudao.framework.common.util.json.JsonUtils; |
| 8 | import cn.iocoder.yudao.framework.common.util.number.NumberUtils; | 8 | import cn.iocoder.yudao.framework.common.util.number.NumberUtils; |
| 9 | +import cn.iocoder.yudao.module.bpm.controller.admin.base.user.UserSimpleBaseVO; | ||
| 9 | import cn.iocoder.yudao.module.bpm.controller.admin.task.vo.instance.*; | 10 | import cn.iocoder.yudao.module.bpm.controller.admin.task.vo.instance.*; |
| 10 | import cn.iocoder.yudao.module.bpm.convert.task.BpmProcessInstanceConvert; | 11 | import cn.iocoder.yudao.module.bpm.convert.task.BpmProcessInstanceConvert; |
| 11 | import cn.iocoder.yudao.module.bpm.dal.dataobject.definition.BpmCategoryDO; | 12 | import cn.iocoder.yudao.module.bpm.dal.dataobject.definition.BpmCategoryDO; |
| @@ -26,6 +27,7 @@ import jakarta.validation.Valid; | @@ -26,6 +27,7 @@ import jakarta.validation.Valid; | ||
| 26 | import org.flowable.engine.history.HistoricProcessInstance; | 27 | import org.flowable.engine.history.HistoricProcessInstance; |
| 27 | import org.flowable.engine.repository.ProcessDefinition; | 28 | import org.flowable.engine.repository.ProcessDefinition; |
| 28 | import org.flowable.task.api.Task; | 29 | import org.flowable.task.api.Task; |
| 30 | +import org.flowable.task.api.history.HistoricTaskInstance; | ||
| 29 | import org.springframework.security.access.prepost.PreAuthorize; | 31 | import org.springframework.security.access.prepost.PreAuthorize; |
| 30 | import org.springframework.validation.annotation.Validated; | 32 | import org.springframework.validation.annotation.Validated; |
| 31 | import org.springframework.web.bind.annotation.*; | 33 | import org.springframework.web.bind.annotation.*; |
| @@ -34,9 +36,11 @@ import java.util.List; | @@ -34,9 +36,11 @@ import java.util.List; | ||
| 34 | import java.util.Map; | 36 | import java.util.Map; |
| 35 | import java.util.Set; | 37 | import java.util.Set; |
| 36 | 38 | ||
| 39 | +import static cn.iocoder.yudao.framework.common.exception.util.ServiceExceptionUtil.exception; | ||
| 37 | import static cn.iocoder.yudao.framework.common.pojo.CommonResult.success; | 40 | import static cn.iocoder.yudao.framework.common.pojo.CommonResult.success; |
| 38 | import static cn.iocoder.yudao.framework.common.util.collection.CollectionUtils.*; | 41 | import static cn.iocoder.yudao.framework.common.util.collection.CollectionUtils.*; |
| 39 | import static cn.iocoder.yudao.framework.security.core.util.SecurityFrameworkUtils.getLoginUserId; | 42 | import static cn.iocoder.yudao.framework.security.core.util.SecurityFrameworkUtils.getLoginUserId; |
| 43 | +import static cn.iocoder.yudao.module.bpm.enums.ErrorCodeConstants.PROCESS_INSTANCE_NOT_EXISTS; | ||
| 40 | 44 | ||
| 41 | @Tag(name = "管理后台 - 流程实例") // 流程实例,通过流程定义创建的一次“申请” | 45 | @Tag(name = "管理后台 - 流程实例") // 流程实例,通过流程定义创建的一次“申请” |
| 42 | @RestController | 46 | @RestController |
| @@ -203,7 +207,19 @@ public class BpmProcessInstanceController { | @@ -203,7 +207,19 @@ public class BpmProcessInstanceController { | ||
| 203 | @PreAuthorize("@ss.hasPermission('bpm:process-instance:query')") | 207 | @PreAuthorize("@ss.hasPermission('bpm:process-instance:query')") |
| 204 | public CommonResult<BpmProcessPrintDataRespVO> getProcessInstancePrintData( | 208 | public CommonResult<BpmProcessPrintDataRespVO> getProcessInstancePrintData( |
| 205 | @RequestParam("processInstanceId") String processInstanceId) { | 209 | @RequestParam("processInstanceId") String processInstanceId) { |
| 206 | - return success(processInstanceService.getProcessInstancePrintData(getLoginUserId(), processInstanceId)); | 210 | + HistoricProcessInstance historicProcessInstance = processInstanceService.getHistoricProcessInstance(processInstanceId); |
| 211 | + if (historicProcessInstance == null) { | ||
| 212 | + throw exception(PROCESS_INSTANCE_NOT_EXISTS); | ||
| 213 | + } | ||
| 214 | + AdminUserRespDTO startUser = adminUserApi.getUser(Long.valueOf(historicProcessInstance.getStartUserId())); | ||
| 215 | + DeptRespDTO dept = deptApi.getDept(startUser.getDeptId()); | ||
| 216 | + List<HistoricTaskInstance> tasks = taskService.getFinishedTaskListByProcessInstanceIdWithoutCancel(processInstanceId); | ||
| 217 | + Set<Long> userIds = convertSet(tasks, item -> Long.valueOf(item.getAssignee())); | ||
| 218 | + Map<Long, AdminUserRespDTO> userMap = adminUserApi.getUserMap(userIds); | ||
| 219 | + return success(BpmProcessInstanceConvert.INSTANCE.buildProcessInstancePrintData(historicProcessInstance, | ||
| 220 | + processDefinitionService.getProcessDefinitionInfo(historicProcessInstance.getProcessDefinitionId()), | ||
| 221 | + tasks, userMap, | ||
| 222 | + new UserSimpleBaseVO().setNickname(startUser.getNickname()).setDeptName(dept.getName()))); | ||
| 207 | } | 223 | } |
| 208 | 224 | ||
| 209 | } | 225 | } |
yudao-module-bpm/src/main/java/cn/iocoder/yudao/module/bpm/controller/admin/task/vo/instance/BpmProcessPrintDataRespVO.java
| @@ -11,43 +11,28 @@ import java.util.Map; | @@ -11,43 +11,28 @@ import java.util.Map; | ||
| 11 | @Data | 11 | @Data |
| 12 | public class BpmProcessPrintDataRespVO { | 12 | public class BpmProcessPrintDataRespVO { |
| 13 | 13 | ||
| 14 | - private Boolean printTemplateEnable; | ||
| 15 | - | ||
| 16 | - // TODO @lesan:要不 processStatus、processInstanceId、processBusinessKey、processBusinessKey、startUser、endTime、processVariables 使用 BpmProcessInstanceRespVO ?虽然这个 VO 大了点,但是收一收字段。嘿嘿;进而只有 processInstance、tasks、formFields、printTemplateHtml 这些字段; | ||
| 17 | - private Integer processStatus; | ||
| 18 | - | ||
| 19 | - private String processInstanceId; | ||
| 20 | - | ||
| 21 | - private String processBusinessKey; | ||
| 22 | - | ||
| 23 | - private String processName; | ||
| 24 | - | ||
| 25 | - private UserSimpleBaseVO startUser; | 14 | + @Schema(description = "流程实例数据") |
| 15 | + private BpmProcessInstanceRespVO processInstance; | ||
| 26 | 16 | ||
| 27 | - private String startTime; | ||
| 28 | - | ||
| 29 | - private String endTime; | ||
| 30 | - | ||
| 31 | - // TODO @lesan:变量要不改成 tasks; | ||
| 32 | - private List<ApproveNode> approveNodes; | ||
| 33 | - | ||
| 34 | - private List<String> formFields; | 17 | + @Schema(description = "是否开启自定义打印模板") |
| 18 | + private Boolean printTemplateEnable; | ||
| 35 | 19 | ||
| 20 | + @Schema(description = "自定义打印模板HTML") | ||
| 36 | private String printTemplateHtml; | 21 | private String printTemplateHtml; |
| 37 | 22 | ||
| 38 | - private Map<String, Object> processVariables; | 23 | + @Schema(description = "审批任务列表") |
| 24 | + private List<ApproveTask> tasks; | ||
| 39 | 25 | ||
| 40 | - // TODO @lesan:类名要不要改成 tasks ?然后 id、name、signUrl、description;感觉理解成本低点; | ||
| 41 | @Data | 26 | @Data |
| 42 | - public static class ApproveNode { | 27 | + public static class ApproveTask { |
| 43 | 28 | ||
| 44 | - private String nodeName; | 29 | + private String id; |
| 45 | 30 | ||
| 46 | - private String nodeDesc; | 31 | + private String name; |
| 47 | 32 | ||
| 48 | - private String signUrl; | 33 | + private String description; |
| 49 | 34 | ||
| 50 | - private String nodeId; | 35 | + private String signUrl; |
| 51 | 36 | ||
| 52 | } | 37 | } |
| 53 | 38 |
yudao-module-bpm/src/main/java/cn/iocoder/yudao/module/bpm/convert/task/BpmProcessInstanceConvert.java
| 1 | package cn.iocoder.yudao.module.bpm.convert.task; | 1 | package cn.iocoder.yudao.module.bpm.convert.task; |
| 2 | 2 | ||
| 3 | import cn.hutool.core.collection.CollUtil; | 3 | import cn.hutool.core.collection.CollUtil; |
| 4 | +import cn.hutool.core.date.DateUtil; | ||
| 4 | import cn.hutool.core.util.StrUtil; | 5 | import cn.hutool.core.util.StrUtil; |
| 5 | import cn.iocoder.yudao.framework.common.pojo.PageResult; | 6 | import cn.iocoder.yudao.framework.common.pojo.PageResult; |
| 6 | import cn.iocoder.yudao.framework.common.util.collection.MapUtils; | 7 | import cn.iocoder.yudao.framework.common.util.collection.MapUtils; |
| 7 | import cn.iocoder.yudao.framework.common.util.collection.SetUtils; | 8 | import cn.iocoder.yudao.framework.common.util.collection.SetUtils; |
| 9 | +import cn.iocoder.yudao.framework.common.util.date.DateUtils; | ||
| 8 | import cn.iocoder.yudao.framework.common.util.number.NumberUtils; | 10 | import cn.iocoder.yudao.framework.common.util.number.NumberUtils; |
| 9 | import cn.iocoder.yudao.framework.common.util.object.BeanUtils; | 11 | import cn.iocoder.yudao.framework.common.util.object.BeanUtils; |
| 10 | import cn.iocoder.yudao.module.bpm.controller.admin.base.user.UserSimpleBaseVO; | 12 | import cn.iocoder.yudao.module.bpm.controller.admin.base.user.UserSimpleBaseVO; |
| 13 | +import cn.iocoder.yudao.module.bpm.controller.admin.definition.vo.model.BpmModelMetaInfoVO; | ||
| 11 | import cn.iocoder.yudao.module.bpm.controller.admin.definition.vo.model.simple.BpmSimpleModelNodeVO; | 14 | import cn.iocoder.yudao.module.bpm.controller.admin.definition.vo.model.simple.BpmSimpleModelNodeVO; |
| 12 | import cn.iocoder.yudao.module.bpm.controller.admin.definition.vo.process.BpmProcessDefinitionRespVO; | 15 | import cn.iocoder.yudao.module.bpm.controller.admin.definition.vo.process.BpmProcessDefinitionRespVO; |
| 13 | import cn.iocoder.yudao.module.bpm.controller.admin.task.vo.instance.BpmApprovalDetailRespVO; | 16 | import cn.iocoder.yudao.module.bpm.controller.admin.task.vo.instance.BpmApprovalDetailRespVO; |
| 14 | import cn.iocoder.yudao.module.bpm.controller.admin.task.vo.instance.BpmProcessInstanceBpmnModelViewRespVO; | 17 | import cn.iocoder.yudao.module.bpm.controller.admin.task.vo.instance.BpmProcessInstanceBpmnModelViewRespVO; |
| 15 | import cn.iocoder.yudao.module.bpm.controller.admin.task.vo.instance.BpmProcessInstanceRespVO; | 18 | import cn.iocoder.yudao.module.bpm.controller.admin.task.vo.instance.BpmProcessInstanceRespVO; |
| 19 | +import cn.iocoder.yudao.module.bpm.controller.admin.task.vo.instance.BpmProcessPrintDataRespVO; | ||
| 16 | import cn.iocoder.yudao.module.bpm.controller.admin.task.vo.task.BpmTaskRespVO; | 20 | import cn.iocoder.yudao.module.bpm.controller.admin.task.vo.task.BpmTaskRespVO; |
| 17 | import cn.iocoder.yudao.module.bpm.convert.definition.BpmProcessDefinitionConvert; | 21 | import cn.iocoder.yudao.module.bpm.convert.definition.BpmProcessDefinitionConvert; |
| 18 | import cn.iocoder.yudao.module.bpm.dal.dataobject.definition.BpmCategoryDO; | 22 | import cn.iocoder.yudao.module.bpm.dal.dataobject.definition.BpmCategoryDO; |
| 19 | import cn.iocoder.yudao.module.bpm.dal.dataobject.definition.BpmProcessDefinitionInfoDO; | 23 | import cn.iocoder.yudao.module.bpm.dal.dataobject.definition.BpmProcessDefinitionInfoDO; |
| 20 | import cn.iocoder.yudao.module.bpm.api.event.BpmProcessInstanceStatusEvent; | 24 | import cn.iocoder.yudao.module.bpm.api.event.BpmProcessInstanceStatusEvent; |
| 25 | +import cn.iocoder.yudao.module.bpm.enums.task.BpmTaskStatusEnum; | ||
| 26 | +import cn.iocoder.yudao.module.bpm.framework.flowable.core.enums.BpmnVariableConstants; | ||
| 21 | import cn.iocoder.yudao.module.bpm.framework.flowable.core.util.BpmnModelUtils; | 27 | import cn.iocoder.yudao.module.bpm.framework.flowable.core.util.BpmnModelUtils; |
| 22 | import cn.iocoder.yudao.module.bpm.framework.flowable.core.util.FlowableUtils; | 28 | import cn.iocoder.yudao.module.bpm.framework.flowable.core.util.FlowableUtils; |
| 23 | import cn.iocoder.yudao.module.bpm.service.message.dto.BpmMessageSendWhenProcessInstanceApproveReqDTO; | 29 | import cn.iocoder.yudao.module.bpm.service.message.dto.BpmMessageSendWhenProcessInstanceApproveReqDTO; |
| @@ -35,10 +41,7 @@ import org.mapstruct.Mapping; | @@ -35,10 +41,7 @@ import org.mapstruct.Mapping; | ||
| 35 | import org.mapstruct.MappingTarget; | 41 | import org.mapstruct.MappingTarget; |
| 36 | import org.mapstruct.factory.Mappers; | 42 | import org.mapstruct.factory.Mappers; |
| 37 | 43 | ||
| 38 | -import java.util.HashSet; | ||
| 39 | -import java.util.List; | ||
| 40 | -import java.util.Map; | ||
| 41 | -import java.util.Set; | 44 | +import java.util.*; |
| 42 | 45 | ||
| 43 | import static cn.iocoder.yudao.framework.common.util.collection.CollectionUtils.convertList; | 46 | import static cn.iocoder.yudao.framework.common.util.collection.CollectionUtils.convertList; |
| 44 | import static cn.iocoder.yudao.framework.common.util.collection.CollectionUtils.convertSet; | 47 | import static cn.iocoder.yudao.framework.common.util.collection.CollectionUtils.convertSet; |
| @@ -292,4 +295,49 @@ public interface BpmProcessInstanceConvert { | @@ -292,4 +295,49 @@ public interface BpmProcessInstanceConvert { | ||
| 292 | .setActivityNodes(activityNodes); | 295 | .setActivityNodes(activityNodes); |
| 293 | } | 296 | } |
| 294 | 297 | ||
| 298 | + default BpmProcessPrintDataRespVO buildProcessInstancePrintData(HistoricProcessInstance historicProcessInstance, | ||
| 299 | + BpmProcessDefinitionInfoDO processDefinitionInfo, | ||
| 300 | + List<HistoricTaskInstance> tasks, | ||
| 301 | + Map<Long, AdminUserRespDTO> userMap, | ||
| 302 | + UserSimpleBaseVO startUser) { | ||
| 303 | + BpmModelMetaInfoVO.PrintTemplateSetting printTemplateSetting = processDefinitionInfo.getPrintTemplateSetting(); | ||
| 304 | + BpmProcessPrintDataRespVO printData = new BpmProcessPrintDataRespVO(); | ||
| 305 | + // 打印模板是否开启 | ||
| 306 | + printData.setPrintTemplateEnable(printTemplateSetting != null && Boolean.TRUE.equals(printTemplateSetting.getEnable())); | ||
| 307 | + // 流程相关数据 | ||
| 308 | + BpmProcessInstanceRespVO processInstance = new BpmProcessInstanceRespVO(); | ||
| 309 | + processInstance.setStatus(FlowableUtils.getProcessInstanceStatus(historicProcessInstance)); | ||
| 310 | + processInstance.setId(historicProcessInstance.getId()); | ||
| 311 | + processInstance.setName(historicProcessInstance.getName()); | ||
| 312 | + processInstance.setBusinessKey(historicProcessInstance.getBusinessKey()); | ||
| 313 | + processInstance.setStartTime(DateUtils.of(historicProcessInstance.getStartTime())); | ||
| 314 | + processInstance.setEndTime(DateUtils.of(historicProcessInstance.getEndTime())); | ||
| 315 | + processInstance.setFormVariables(historicProcessInstance.getProcessVariables()); | ||
| 316 | + processInstance.setStartUser(startUser); | ||
| 317 | + processInstance.setProcessDefinition(BeanUtils.toBean(processDefinitionInfo, BpmProcessDefinitionRespVO.class)); | ||
| 318 | + printData.setProcessInstance(processInstance); | ||
| 319 | + // 审批历史 | ||
| 320 | + List<BpmProcessPrintDataRespVO.ApproveTask> approveTasks = new ArrayList<>(tasks.size()); | ||
| 321 | + tasks.forEach(item -> { | ||
| 322 | + Map<String, Object> taskLocalVariables = item.getTaskLocalVariables(); | ||
| 323 | + BpmProcessPrintDataRespVO.ApproveTask approveTask = new BpmProcessPrintDataRespVO.ApproveTask(); | ||
| 324 | + approveTask.setName(item.getName()); | ||
| 325 | + approveTask.setId(item.getId()); | ||
| 326 | + approveTask.setSignUrl((String) taskLocalVariables.getOrDefault(BpmnVariableConstants.TASK_SIGN_PIC_URL, "")); | ||
| 327 | + approveTask.setDescription(StrUtil.format("{} / {} / {} / {} / {}", | ||
| 328 | + userMap.get(Long.valueOf(item.getAssignee())).getNickname(), | ||
| 329 | + item.getName(), | ||
| 330 | + DateUtil.formatDateTime(item.getEndTime()), | ||
| 331 | + BpmTaskStatusEnum.valueOf((Integer) taskLocalVariables.get(BpmnVariableConstants.TASK_VARIABLE_STATUS)).getName(), | ||
| 332 | + taskLocalVariables.get(BpmnVariableConstants.TASK_VARIABLE_REASON))); | ||
| 333 | + approveTasks.add(approveTask); | ||
| 334 | + }); | ||
| 335 | + printData.setTasks(approveTasks); | ||
| 336 | + // 自定义模板 | ||
| 337 | + if (printData.getPrintTemplateEnable() && printTemplateSetting != null) { | ||
| 338 | + printData.setPrintTemplateHtml(printTemplateSetting.getTemplate()); | ||
| 339 | + } | ||
| 340 | + return printData; | ||
| 341 | + } | ||
| 342 | + | ||
| 295 | } | 343 | } |
yudao-module-bpm/src/main/java/cn/iocoder/yudao/module/bpm/service/task/BpmProcessInstanceService.java
| @@ -113,14 +113,6 @@ public interface BpmProcessInstanceService { | @@ -113,14 +113,6 @@ public interface BpmProcessInstanceService { | ||
| 113 | */ | 113 | */ |
| 114 | BpmProcessInstanceBpmnModelViewRespVO getProcessInstanceBpmnModelView(String id); | 114 | BpmProcessInstanceBpmnModelViewRespVO getProcessInstanceBpmnModelView(String id); |
| 115 | 115 | ||
| 116 | - /** | ||
| 117 | - * 获取流程打印所需数据 | ||
| 118 | - * @param loginUserId 打印人 | ||
| 119 | - * @param processInstanceId 流程实例id | ||
| 120 | - * @return 打印所需数据 | ||
| 121 | - */ | ||
| 122 | - BpmProcessPrintDataRespVO getProcessInstancePrintData(Long loginUserId, String processInstanceId); | ||
| 123 | - | ||
| 124 | // ========== Update 写入相关方法 ========== | 116 | // ========== Update 写入相关方法 ========== |
| 125 | 117 | ||
| 126 | /** | 118 | /** |
yudao-module-bpm/src/main/java/cn/iocoder/yudao/module/bpm/service/task/BpmProcessInstanceServiceImpl.java
| @@ -728,69 +728,6 @@ public class BpmProcessInstanceServiceImpl implements BpmProcessInstanceService | @@ -728,69 +728,6 @@ public class BpmProcessInstanceServiceImpl implements BpmProcessInstanceService | ||
| 728 | userMap, deptMap); | 728 | userMap, deptMap); |
| 729 | } | 729 | } |
| 730 | 730 | ||
| 731 | - // TODO @lesan:这个可以放在 controller + convert 哇?保证 Service 只尽量处理写逻辑; | ||
| 732 | - @Override | ||
| 733 | - public BpmProcessPrintDataRespVO getProcessInstancePrintData(Long loginUserId, String processInstanceId) { | ||
| 734 | - // 1 数据准备 | ||
| 735 | - HistoricProcessInstance historicProcessInstance = getHistoricProcessInstance(processInstanceId); | ||
| 736 | - if (historicProcessInstance == null) { | ||
| 737 | - throw exception(PROCESS_INSTANCE_NOT_EXISTS); | ||
| 738 | - } | ||
| 739 | - BpmProcessDefinitionInfoDO processDefinitionInfo = processDefinitionService | ||
| 740 | - .getProcessDefinitionInfo(historicProcessInstance.getProcessDefinitionId()); | ||
| 741 | - BpmModelMetaInfoVO.PrintTemplateSetting printTemplateSetting = processDefinitionInfo.getPrintTemplateSetting(); | ||
| 742 | - // 2 获取打印所需数据 | ||
| 743 | - BpmProcessPrintDataRespVO printData = new BpmProcessPrintDataRespVO(); | ||
| 744 | - // 2.1 打印模板是否开启 | ||
| 745 | - printData.setPrintTemplateEnable(printTemplateSetting != null && Boolean.TRUE.equals(printTemplateSetting.getEnable())); | ||
| 746 | - // 2.2 流程相关数据 | ||
| 747 | - printData.setProcessStatus(FlowableUtils.getProcessInstanceStatus(historicProcessInstance)); | ||
| 748 | - printData.setProcessInstanceId(historicProcessInstance.getId()); | ||
| 749 | - printData.setProcessName(historicProcessInstance.getName()); | ||
| 750 | - printData.setProcessBusinessKey(historicProcessInstance.getBusinessKey()); | ||
| 751 | - printData.setStartTime(DatePattern.NORM_DATETIME_MINUTE_FORMAT.format(historicProcessInstance.getStartTime())); | ||
| 752 | - printData.setEndTime(Objects.isNull(historicProcessInstance.getEndTime()) ? | ||
| 753 | - "" : DatePattern.NORM_DATETIME_MINUTE_FORMAT.format(historicProcessInstance.getEndTime())); | ||
| 754 | - printData.setProcessVariables(historicProcessInstance.getProcessVariables()); | ||
| 755 | - // 2.3 发起人 | ||
| 756 | - AdminUserRespDTO startUser = adminUserApi.getUser(Long.valueOf(historicProcessInstance.getStartUserId())); | ||
| 757 | - DeptRespDTO dept = deptApi.getDept(startUser.getDeptId()); | ||
| 758 | - printData.setStartUser(new UserSimpleBaseVO().setNickname(startUser.getNickname()).setDeptName(dept.getName())); | ||
| 759 | - // 2.4 审批历史 | ||
| 760 | - List<HistoricTaskInstance> tasks = historyService.createHistoricTaskInstanceQuery() | ||
| 761 | - .finished() | ||
| 762 | - .includeTaskLocalVariables() | ||
| 763 | - .processInstanceId(processInstanceId) | ||
| 764 | - .taskVariableValueNotEquals(BpmnVariableConstants.TASK_VARIABLE_STATUS, | ||
| 765 | - BpmTaskStatusEnum.CANCEL.getStatus()) | ||
| 766 | - .orderByHistoricTaskInstanceStartTime().asc().list(); | ||
| 767 | - Set<Long> userIds = convertSet(tasks, item -> Long.valueOf(item.getAssignee())); | ||
| 768 | - Map<Long, AdminUserRespDTO> userMap = adminUserApi.getUserMap(userIds); | ||
| 769 | - List<BpmProcessPrintDataRespVO.ApproveNode> approveNodes = new ArrayList<>(tasks.size()); | ||
| 770 | - tasks.forEach(item -> { | ||
| 771 | - Map<String, Object> taskLocalVariables = item.getTaskLocalVariables(); | ||
| 772 | - BpmProcessPrintDataRespVO.ApproveNode approveNode = new BpmProcessPrintDataRespVO.ApproveNode(); | ||
| 773 | - approveNode.setNodeName(item.getName()); | ||
| 774 | - approveNode.setNodeId(item.getId()); | ||
| 775 | - approveNode.setSignUrl((String) taskLocalVariables.getOrDefault(BpmnVariableConstants.TASK_SIGN_PIC_URL, "")); | ||
| 776 | - approveNode.setNodeDesc(StrUtil.format("{} / {} / {} / {} / {}", | ||
| 777 | - userMap.get(Long.valueOf(item.getAssignee())).getNickname(), | ||
| 778 | - item.getName(), | ||
| 779 | - DateUtil.formatDateTime(item.getEndTime()), | ||
| 780 | - BpmTaskStatusEnum.valueOf((Integer) taskLocalVariables.get(BpmnVariableConstants.TASK_VARIABLE_STATUS)).getName(), | ||
| 781 | - taskLocalVariables.get(BpmnVariableConstants.TASK_VARIABLE_REASON))); | ||
| 782 | - approveNodes.add(approveNode); | ||
| 783 | - }); | ||
| 784 | - printData.setApproveNodes(approveNodes); | ||
| 785 | - // 2.5 表单数据 | ||
| 786 | - printData.setFormFields(processDefinitionInfo.getFormFields()); | ||
| 787 | - // 2.6 自定义模板 | ||
| 788 | - if (printData.getPrintTemplateEnable() && printTemplateSetting != null) { | ||
| 789 | - printData.setPrintTemplateHtml(printTemplateSetting.getTemplate()); | ||
| 790 | - } | ||
| 791 | - return printData; | ||
| 792 | - } | ||
| 793 | - | ||
| 794 | // ========== Update 写入相关方法 ========== | 731 | // ========== Update 写入相关方法 ========== |
| 795 | 732 | ||
| 796 | @Override | 733 | @Override |
yudao-module-bpm/src/main/java/cn/iocoder/yudao/module/bpm/service/task/BpmTaskService.java
| @@ -176,6 +176,14 @@ public interface BpmTaskService { | @@ -176,6 +176,14 @@ public interface BpmTaskService { | ||
| 176 | */ | 176 | */ |
| 177 | List<HistoricActivityInstance> getHistoricActivityListByExecutionId(String executionId); | 177 | List<HistoricActivityInstance> getHistoricActivityListByExecutionId(String executionId); |
| 178 | 178 | ||
| 179 | + /** | ||
| 180 | + * 获得指定流程实例的已完成的流程任务列表,不包含取消状态 | ||
| 181 | + * | ||
| 182 | + * @param processInstanceId 流程实例的编号 | ||
| 183 | + * @return 流程任务列表 | ||
| 184 | + */ | ||
| 185 | + List<HistoricTaskInstance> getFinishedTaskListByProcessInstanceIdWithoutCancel(String processInstanceId); | ||
| 186 | + | ||
| 179 | // ========== Update 写入相关方法 ========== | 187 | // ========== Update 写入相关方法 ========== |
| 180 | 188 | ||
| 181 | /** | 189 | /** |
yudao-module-bpm/src/main/java/cn/iocoder/yudao/module/bpm/service/task/BpmTaskServiceImpl.java
| @@ -491,6 +491,17 @@ public class BpmTaskServiceImpl implements BpmTaskService { | @@ -491,6 +491,17 @@ public class BpmTaskServiceImpl implements BpmTaskService { | ||
| 491 | return historyService.createHistoricActivityInstanceQuery().executionId(executionId).list(); | 491 | return historyService.createHistoricActivityInstanceQuery().executionId(executionId).list(); |
| 492 | } | 492 | } |
| 493 | 493 | ||
| 494 | + @Override | ||
| 495 | + public List<HistoricTaskInstance> getFinishedTaskListByProcessInstanceIdWithoutCancel(String processInstanceId) { | ||
| 496 | + return historyService.createHistoricTaskInstanceQuery() | ||
| 497 | + .finished() | ||
| 498 | + .includeTaskLocalVariables() | ||
| 499 | + .processInstanceId(processInstanceId) | ||
| 500 | + .taskVariableValueNotEquals(BpmnVariableConstants.TASK_VARIABLE_STATUS, | ||
| 501 | + BpmTaskStatusEnum.CANCEL.getStatus()) | ||
| 502 | + .orderByHistoricTaskInstanceStartTime().asc().list(); | ||
| 503 | + } | ||
| 504 | + | ||
| 494 | /** | 505 | /** |
| 495 | * 判断指定用户,是否是当前任务的审批人 | 506 | * 判断指定用户,是否是当前任务的审批人 |
| 496 | * | 507 | * |