From 86f568280aa373a1f7bda6ab2e4acf7fa3d635b3 Mon Sep 17 00:00:00 2001 From: LesanOuO <1960681385@qq.com> Date: Sun, 26 Jan 2025 11:06:29 +0800 Subject: [PATCH] =?UTF-8?q?feat:=20BPM-=E6=95=B0=E6=8D=AE=E6=8A=A5?= =?UTF-8?q?=E8=A1=A8?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../task/BpmProcessInstanceController.java | 20 ------- .../instance/BpmProcessInstancePageReqVO.java | 8 +++ .../task/BpmProcessInstanceConvert.java | 38 +------------ .../task/BpmProcessInstanceService.java | 2 - .../task/BpmProcessInstanceServiceImpl.java | 53 ++++++------------- 5 files changed, 25 insertions(+), 96 deletions(-) diff --git a/yudao-module-bpm/yudao-module-bpm-biz/src/main/java/cn/iocoder/yudao/module/bpm/controller/admin/task/BpmProcessInstanceController.java b/yudao-module-bpm/yudao-module-bpm-biz/src/main/java/cn/iocoder/yudao/module/bpm/controller/admin/task/BpmProcessInstanceController.java index 239e4a640b..3a847ce4e8 100644 --- a/yudao-module-bpm/yudao-module-bpm-biz/src/main/java/cn/iocoder/yudao/module/bpm/controller/admin/task/BpmProcessInstanceController.java +++ b/yudao-module-bpm/yudao-module-bpm-biz/src/main/java/cn/iocoder/yudao/module/bpm/controller/admin/task/BpmProcessInstanceController.java @@ -109,26 +109,6 @@ public class BpmProcessInstanceController { processDefinitionMap, categoryMap, taskMap, userMap, deptMap, processDefinitionInfoMap)); } - // TODO @lesan:貌似少提交了。ps:不确定和 getProcessInstanceManagerPage 接口的差异哈。 -// @GetMapping("/report-page") -// @Operation(summary = "获得流程实例报表的分页列表", description = "获得流程实例报表的分页列表") -// public CommonResult getProcessInstanceReportPage( -// @Valid BpmProcessInstanceReportPageReqVO pageReqVO) { -// PageResult pageResult = processInstanceService.getProcessInstanceReportPage(pageReqVO); -// if (CollUtil.isEmpty(pageResult.getList())) { -// return success(new BpmProcessInstanceReportPageRespVO().setPageResult(PageResult.empty(pageResult.getTotal()))); -// } -// -// // 拼接返回 -// Map userMap = adminUserApi.getUserMap( -// convertSet(pageResult.getList(), processInstance -> NumberUtils.parseLong(processInstance.getStartUserId()))); -// BpmProcessDefinitionInfoDO processDefinitionInfo = processDefinitionService.getProcessDefinitionInfo( -// pageReqVO.getProcessDefinitionId() -// ); -// return success(BpmProcessInstanceConvert.INSTANCE.buildProcessInstanceReportPage(pageResult, -// userMap, processDefinitionInfo)); -// } - @PostMapping("/create") @Operation(summary = "新建流程实例") @PreAuthorize("@ss.hasPermission('bpm:process-instance:query')") diff --git a/yudao-module-bpm/yudao-module-bpm-biz/src/main/java/cn/iocoder/yudao/module/bpm/controller/admin/task/vo/instance/BpmProcessInstancePageReqVO.java b/yudao-module-bpm/yudao-module-bpm-biz/src/main/java/cn/iocoder/yudao/module/bpm/controller/admin/task/vo/instance/BpmProcessInstancePageReqVO.java index dbd314c099..c5859d6607 100644 --- a/yudao-module-bpm/yudao-module-bpm-biz/src/main/java/cn/iocoder/yudao/module/bpm/controller/admin/task/vo/instance/BpmProcessInstancePageReqVO.java +++ b/yudao-module-bpm/yudao-module-bpm-biz/src/main/java/cn/iocoder/yudao/module/bpm/controller/admin/task/vo/instance/BpmProcessInstancePageReqVO.java @@ -8,6 +8,7 @@ import lombok.Data; import org.springframework.format.annotation.DateTimeFormat; import java.time.LocalDateTime; +import java.util.Map; import static cn.iocoder.yudao.framework.common.util.date.DateUtils.FORMAT_YEAR_MONTH_DAY_HOUR_MINUTE_SECOND; @@ -32,7 +33,14 @@ public class BpmProcessInstancePageReqVO extends PageParam { @DateTimeFormat(pattern = FORMAT_YEAR_MONTH_DAY_HOUR_MINUTE_SECOND) private LocalDateTime[] createTime; + @Schema(description = "结束时间") + @DateTimeFormat(pattern = FORMAT_YEAR_MONTH_DAY_HOUR_MINUTE_SECOND) + private LocalDateTime[] endTime; + @Schema(description = "发起用户编号", example = "1024") private Long startUserId; // 注意,只有在【流程实例】菜单,才使用该参数 + @Schema(description = "动态表单字段查询JSON Str", example = "{}") + private String formFieldsParams; + } diff --git a/yudao-module-bpm/yudao-module-bpm-biz/src/main/java/cn/iocoder/yudao/module/bpm/convert/task/BpmProcessInstanceConvert.java b/yudao-module-bpm/yudao-module-bpm-biz/src/main/java/cn/iocoder/yudao/module/bpm/convert/task/BpmProcessInstanceConvert.java index cc837543f9..6e798e77f2 100644 --- a/yudao-module-bpm/yudao-module-bpm-biz/src/main/java/cn/iocoder/yudao/module/bpm/convert/task/BpmProcessInstanceConvert.java +++ b/yudao-module-bpm/yudao-module-bpm-biz/src/main/java/cn/iocoder/yudao/module/bpm/convert/task/BpmProcessInstanceConvert.java @@ -80,46 +80,12 @@ public interface BpmProcessInstanceConvert { // 摘要 respVO.setSummary(FlowableUtils.getSummary(processDefinitionInfoMap.get(respVO.getProcessDefinitionId()), pageResult.getList().get(i).getProcessVariables())); + // 表单 + respVO.setFormVariables(pageResult.getList().get(i).getProcessVariables()); } return vpPageResult; } -// default BpmProcessInstanceReportPageRespVO buildProcessInstanceReportPage(PageResult pageResult, -// Map userMap, -// BpmProcessDefinitionInfoDO processDefinitionInfo) { -// PageResult vpPageResult = BeanUtils.toBean(pageResult, -// BpmProcessInstanceReportPageRespVO.BpmProcessInstanceReportRespVO.class); -// // 表单列表 -// List formFieldsList = new ArrayList<>(); -// processDefinitionInfo.getFormFields().forEach(formFieldStr -> { -// BpmFormFieldVO formField = JsonUtils.parseObject(formFieldStr, BpmFormFieldVO.class); -// if (formField != null) { -// formFieldsList.add(formField); -// } -// }); -// for (int i = 0; i < pageResult.getList().size(); i++) { -// HistoricProcessInstance historicProcessInstance = pageResult.getList().get(i); -// BpmProcessInstanceReportPageRespVO.BpmProcessInstanceReportRespVO respVO = vpPageResult.getList().get(i); -// respVO.setStatus(FlowableUtils.getProcessInstanceStatus(historicProcessInstance)); -// // user -// if (userMap != null) { -// AdminUserRespDTO startUser = userMap.get(NumberUtils.parseLong(historicProcessInstance.getStartUserId())); -// if (startUser != null) { -// respVO.setStartUser(BeanUtils.toBean(startUser, UserSimpleBaseVO.class)); -// } -// } -// // 表单数据 -// List> variables = new ArrayList<>(); -// formFieldsList.forEach(formField -> { -// variables.add(new KeyValue() -// .setKey(formField.getField()) -// .setValue(historicProcessInstance.getProcessVariables().getOrDefault(formField.getField(), ""))); -// }); -// respVO.setVariables(variables); -// } -// return new BpmProcessInstanceReportPageRespVO().setPageResult(vpPageResult).setFormFields(formFieldsList); -// } - default BpmProcessInstanceRespVO buildProcessInstance(HistoricProcessInstance processInstance, ProcessDefinition processDefinition, BpmProcessDefinitionInfoDO processDefinitionInfo, diff --git a/yudao-module-bpm/yudao-module-bpm-biz/src/main/java/cn/iocoder/yudao/module/bpm/service/task/BpmProcessInstanceService.java b/yudao-module-bpm/yudao-module-bpm-biz/src/main/java/cn/iocoder/yudao/module/bpm/service/task/BpmProcessInstanceService.java index 860959dacd..d37886aa71 100644 --- a/yudao-module-bpm/yudao-module-bpm-biz/src/main/java/cn/iocoder/yudao/module/bpm/service/task/BpmProcessInstanceService.java +++ b/yudao-module-bpm/yudao-module-bpm-biz/src/main/java/cn/iocoder/yudao/module/bpm/service/task/BpmProcessInstanceService.java @@ -84,8 +84,6 @@ public interface BpmProcessInstanceService { PageResult getProcessInstancePage(Long userId, @Valid BpmProcessInstancePageReqVO pageReqVO); -// PageResult getProcessInstanceReportPage(@Valid BpmProcessInstanceReportPageReqVO pageReqVO); - // TODO @芋艿:重点在 review 下 /** * 获取审批详情。 diff --git a/yudao-module-bpm/yudao-module-bpm-biz/src/main/java/cn/iocoder/yudao/module/bpm/service/task/BpmProcessInstanceServiceImpl.java b/yudao-module-bpm/yudao-module-bpm-biz/src/main/java/cn/iocoder/yudao/module/bpm/service/task/BpmProcessInstanceServiceImpl.java index 4dd39ce191..409ea0558c 100644 --- a/yudao-module-bpm/yudao-module-bpm-biz/src/main/java/cn/iocoder/yudao/module/bpm/service/task/BpmProcessInstanceServiceImpl.java +++ b/yudao-module-bpm/yudao-module-bpm-biz/src/main/java/cn/iocoder/yudao/module/bpm/service/task/BpmProcessInstanceServiceImpl.java @@ -7,6 +7,7 @@ import cn.hutool.core.lang.Assert; import cn.hutool.core.util.ArrayUtil; import cn.hutool.core.util.ObjectUtil; import cn.hutool.core.util.StrUtil; +import cn.hutool.json.JSONObject; import cn.iocoder.yudao.framework.common.pojo.PageResult; import cn.iocoder.yudao.framework.common.util.date.DateUtils; import cn.iocoder.yudao.framework.common.util.json.JsonUtils; @@ -170,6 +171,20 @@ public class BpmProcessInstanceServiceImpl implements BpmProcessInstanceService processInstanceQuery.startedAfter(DateUtils.of(pageReqVO.getCreateTime()[0])); processInstanceQuery.startedBefore(DateUtils.of(pageReqVO.getCreateTime()[1])); } + if (ArrayUtil.isNotEmpty(pageReqVO.getEndTime())) { + processInstanceQuery.finishedAfter(DateUtils.of(pageReqVO.getEndTime()[0])); + processInstanceQuery.finishedBefore(DateUtils.of(pageReqVO.getEndTime()[1])); + } + // 表单字段查询 + // TODO 应支持多种类型的查询方式,目前只有字符串全等 + if (StrUtil.isNotEmpty(pageReqVO.getFormFieldsParams())) { + JSONObject formFieldsParams = new JSONObject(pageReqVO.getFormFieldsParams()); + for (Map.Entry field : formFieldsParams.entrySet()) { + if (StrUtil.isNotEmpty(field.getValue().toString())) { + processInstanceQuery.variableValueEquals(field.getKey(), field.getValue()); + } + } + } // 查询数量 long processInstanceCount = processInstanceQuery.count(); if (processInstanceCount == 0) { @@ -180,44 +195,6 @@ public class BpmProcessInstanceServiceImpl implements BpmProcessInstanceService return new PageResult<>(processInstanceList, processInstanceCount); } -// @Override -// public PageResult getProcessInstanceReportPage(BpmProcessInstanceReportPageReqVO pageReqVO) { -// // 通过 BpmProcessInstanceExtDO 表,先查询到对应的分页 -// HistoricProcessInstanceQuery processInstanceQuery = historyService.createHistoricProcessInstanceQuery() -// .includeProcessVariables() -// .processInstanceTenantId(FlowableUtils.getTenantId()) -// .orderByProcessInstanceStartTime().desc(); -// if (pageReqVO.getStartUserId() != null) { -// processInstanceQuery.startedBy(String.valueOf(pageReqVO.getStartUserId())); -// } -// if (StrUtil.isNotEmpty(pageReqVO.getName())) { -// processInstanceQuery.processInstanceNameLike("%" + pageReqVO.getName() + "%"); -// } -// if (StrUtil.isNotEmpty(pageReqVO.getProcessDefinitionKey())) { -// processInstanceQuery.processDefinitionKey(pageReqVO.getProcessDefinitionKey()); -// } -// if (pageReqVO.getStatus() != null) { -// processInstanceQuery.variableValueEquals(BpmnVariableConstants.PROCESS_INSTANCE_VARIABLE_STATUS, pageReqVO.getStatus()); -// } -// if (ArrayUtil.isNotEmpty(pageReqVO.getCreateTime())) { -// processInstanceQuery.startedAfter(DateUtils.of(pageReqVO.getCreateTime()[0])); -// processInstanceQuery.startedBefore(DateUtils.of(pageReqVO.getCreateTime()[1])); -// } -// if (ArrayUtil.isNotEmpty(pageReqVO.getEndTime())) { -// processInstanceQuery.finishedAfter(DateUtils.of(pageReqVO.getEndTime()[0])); -// processInstanceQuery.finishedBefore(DateUtils.of(pageReqVO.getEndTime()[1])); -// } -// // TODO 流程表单数据也要支持查询 -// // 查询数量 -// long processInstanceCount = processInstanceQuery.count(); -// if (processInstanceCount == 0) { -// return PageResult.empty(processInstanceCount); -// } -// // 查询列表 -// List processInstanceList = processInstanceQuery.listPage(PageUtils.getStart(pageReqVO), pageReqVO.getPageSize()); -// return new PageResult<>(processInstanceList, processInstanceCount); -// } - private Map getFormFieldsPermission(BpmnModel bpmnModel, String activityId, String taskId) { // 1. 获取流程活动编号。流程活动 Id 为空事,从流程任务中获取流程活动 Id