diff --git a/yudao-module-bpm/src/main/java/cn/iocoder/yudao/module/bpm/controller/admin/task/BpmProcessInstanceController.java b/yudao-module-bpm/src/main/java/cn/iocoder/yudao/module/bpm/controller/admin/task/BpmProcessInstanceController.java index b66555cda3..9eef45cd1c 100644 --- a/yudao-module-bpm/src/main/java/cn/iocoder/yudao/module/bpm/controller/admin/task/BpmProcessInstanceController.java +++ b/yudao-module-bpm/src/main/java/cn/iocoder/yudao/module/bpm/controller/admin/task/BpmProcessInstanceController.java @@ -192,16 +192,18 @@ public class BpmProcessInstanceController { @GetMapping("/get-bpmn-model-view") @Operation(summary = "获取流程实例的 BPMN 模型视图", description = "在【流程详细】界面中,进行调用") @Parameter(name = "id", description = "流程实例的编号", required = true) - public CommonResult getProcessInstanceBpmnModelView(@RequestParam(value = "id") String id) { + public CommonResult getProcessInstanceBpmnModelView( + @RequestParam(value = "id") String id) { return success(processInstanceService.getProcessInstanceBpmnModelView(id)); } @GetMapping("/get-print-data") - @Operation(summary = "获得打印数据") + @Operation(summary = "获得流程实例的打印数据") @Parameter(name = "id", description = "流程实例的编号", required = true) @PreAuthorize("@ss.hasPermission('bpm:process-instance:query')") - public CommonResult getPrintData(@RequestParam("processInstanceId") String processInstanceId) { - return success(processInstanceService.getPrintData(getLoginUserId(), processInstanceId)); + public CommonResult getProcessInstancePrintData( + @RequestParam("processInstanceId") String processInstanceId) { + return success(processInstanceService.getProcessInstancePrintData(getLoginUserId(), processInstanceId)); } } diff --git a/yudao-module-bpm/src/main/java/cn/iocoder/yudao/module/bpm/controller/admin/task/vo/instance/BpmProcessPrintDataRespVO.java b/yudao-module-bpm/src/main/java/cn/iocoder/yudao/module/bpm/controller/admin/task/vo/instance/BpmProcessPrintDataRespVO.java index a7897f1845..a1a0047a00 100644 --- a/yudao-module-bpm/src/main/java/cn/iocoder/yudao/module/bpm/controller/admin/task/vo/instance/BpmProcessPrintDataRespVO.java +++ b/yudao-module-bpm/src/main/java/cn/iocoder/yudao/module/bpm/controller/admin/task/vo/instance/BpmProcessPrintDataRespVO.java @@ -5,8 +5,8 @@ import lombok.Data; import java.util.List; - -@Schema(description = "管理后台 - 打印数据 Response VO") +// TODO @lesan:这个可能复用 BpmApprovalDetailRespVO 哇? +@Schema(description = "管理后台 - 流程实例的打印数据 Response VO") @Data public class BpmProcessPrintDataRespVO { @@ -14,6 +14,7 @@ public class BpmProcessPrintDataRespVO { private Integer processStatus; + // TODO @lesan:通过字典? private String processStatusShow; private String processInstanceId; @@ -22,6 +23,7 @@ public class BpmProcessPrintDataRespVO { private String processName; + // TODO @lesan:UserSimpleBaseVO 替代 startUser、startUserDept; private String startUser; private String startUserDept; diff --git a/yudao-module-bpm/src/main/java/cn/iocoder/yudao/module/bpm/service/task/BpmProcessInstanceService.java b/yudao-module-bpm/src/main/java/cn/iocoder/yudao/module/bpm/service/task/BpmProcessInstanceService.java index 33e667716b..fd0a2aaca8 100644 --- a/yudao-module-bpm/src/main/java/cn/iocoder/yudao/module/bpm/service/task/BpmProcessInstanceService.java +++ b/yudao-module-bpm/src/main/java/cn/iocoder/yudao/module/bpm/service/task/BpmProcessInstanceService.java @@ -119,7 +119,7 @@ public interface BpmProcessInstanceService { * @param processInstanceId 流程实例id * @return 打印所需数据 */ - BpmProcessPrintDataRespVO getPrintData(Long loginUserId, String processInstanceId); + BpmProcessPrintDataRespVO getProcessInstancePrintData(Long loginUserId, String processInstanceId); // ========== Update 写入相关方法 ========== diff --git a/yudao-module-bpm/src/main/java/cn/iocoder/yudao/module/bpm/service/task/BpmProcessInstanceServiceImpl.java b/yudao-module-bpm/src/main/java/cn/iocoder/yudao/module/bpm/service/task/BpmProcessInstanceServiceImpl.java index 9c2c06525a..7fedca1880 100644 --- a/yudao-module-bpm/src/main/java/cn/iocoder/yudao/module/bpm/service/task/BpmProcessInstanceServiceImpl.java +++ b/yudao-module-bpm/src/main/java/cn/iocoder/yudao/module/bpm/service/task/BpmProcessInstanceServiceImpl.java @@ -735,7 +735,7 @@ public class BpmProcessInstanceServiceImpl implements BpmProcessInstanceService } @Override - public BpmProcessPrintDataRespVO getPrintData(Long loginUserId, String processInstanceId) { + public BpmProcessPrintDataRespVO getProcessInstancePrintData(Long loginUserId, String processInstanceId) { // TODO 方法抽离 // 流程实例 HistoricProcessInstance historicProcessInstance = getHistoricProcessInstance(processInstanceId); @@ -747,7 +747,8 @@ public class BpmProcessInstanceServiceImpl implements BpmProcessInstanceService .getProcessDefinitionInfo(historicProcessInstance.getProcessDefinitionId()); BpmModelMetaInfoVO.PrintTemplateSetting printTemplateSetting = processDefinitionInfo.getPrintTemplateSetting(); List formFieldList = processDefinitionInfo.getFormFields(); - List formFieldObjList = formFieldList.stream().map(JSONUtil::parseObj).toList(); + List formFieldObjList = formFieldList != null ? formFieldList.stream().map(JSONUtil::parseObj).toList() + : ListUtil.of(); List tasks = historyService.createHistoricTaskInstanceQuery() .finished() .includeTaskLocalVariables() @@ -758,7 +759,7 @@ public class BpmProcessInstanceServiceImpl implements BpmProcessInstanceService Set userIds = convertSet(tasks, item -> Long.valueOf(item.getAssignee())); userIds.add(loginUserId); Map userMap = adminUserApi.getUserMap(userIds); - HashMap printDataMap = new HashMap<>(8 + formFieldList.size()); + HashMap printDataMap = new HashMap<>(8 + formFieldObjList.size()); // 返回打印所需数据 BpmProcessPrintDataRespVO printData = new BpmProcessPrintDataRespVO(); // 打印模板是否开启 @@ -776,6 +777,7 @@ public class BpmProcessInstanceServiceImpl implements BpmProcessInstanceService printData.setStartUser(startUser.getNickname()); printData.setStartUserDept(dept.getName()); // 审批历史 + // TODO @lesan:打印的时候,未来节点打印么? List approveNodes = new ArrayList<>(tasks.size()); tasks.forEach(item -> { Map taskLocalVariables = item.getTaskLocalVariables(); @@ -793,8 +795,9 @@ public class BpmProcessInstanceServiceImpl implements BpmProcessInstanceService }); printData.setApproveNodes(approveNodes); // 表单数据 + // TODO @lesan:这个可以在端上搞么?主要考虑,vben 和 vue3 plus 可能使用了不同的前端框架;可能直接使用 form-create 前端的工具方法,会更方便。 Map processVariables = historicProcessInstance.getProcessVariables(); - List formFields = new ArrayList<>(formFieldList.size()); + List formFields = new ArrayList<>(formFieldObjList.size()); formFieldObjList.forEach(item -> { BpmProcessPrintDataRespVO.FormField formField = new BpmProcessPrintDataRespVO.FormField(); formField.setFormName(item.getStr("title")); @@ -834,6 +837,7 @@ public class BpmProcessInstanceServiceImpl implements BpmProcessInstanceService Elements mention = document.getElementsByAttributeValue("data-w-e-type", "mention"); mention.forEach(item -> { String mentionId = JSONUtil.parseObj(URLUtil.decode(item.attr("data-info"))).getStr("id"); + // TODO @lesan:这里要求非空; item.html(printDataMap.get(mentionId)); }); // 替换流程记录