Commit 86f568280aa373a1f7bda6ab2e4acf7fa3d635b3

Authored by LesanOuO
1 parent 8f167864

feat: BPM-数据报表

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 {
109 109 processDefinitionMap, categoryMap, taskMap, userMap, deptMap, processDefinitionInfoMap));
110 110 }
111 111  
112   - // TODO @lesan:貌似少提交了。ps:不确定和 getProcessInstanceManagerPage 接口的差异哈。
113   -// @GetMapping("/report-page")
114   -// @Operation(summary = "获得流程实例报表的分页列表", description = "获得流程实例报表的分页列表")
115   -// public CommonResult<BpmProcessInstanceReportPageRespVO> getProcessInstanceReportPage(
116   -// @Valid BpmProcessInstanceReportPageReqVO pageReqVO) {
117   -// PageResult<HistoricProcessInstance> pageResult = processInstanceService.getProcessInstanceReportPage(pageReqVO);
118   -// if (CollUtil.isEmpty(pageResult.getList())) {
119   -// return success(new BpmProcessInstanceReportPageRespVO().setPageResult(PageResult.empty(pageResult.getTotal())));
120   -// }
121   -//
122   -// // 拼接返回
123   -// Map<Long, AdminUserRespDTO> userMap = adminUserApi.getUserMap(
124   -// convertSet(pageResult.getList(), processInstance -> NumberUtils.parseLong(processInstance.getStartUserId())));
125   -// BpmProcessDefinitionInfoDO processDefinitionInfo = processDefinitionService.getProcessDefinitionInfo(
126   -// pageReqVO.getProcessDefinitionId()
127   -// );
128   -// return success(BpmProcessInstanceConvert.INSTANCE.buildProcessInstanceReportPage(pageResult,
129   -// userMap, processDefinitionInfo));
130   -// }
131   -
132 112 @PostMapping("/create")
133 113 @Operation(summary = "新建流程实例")
134 114 @PreAuthorize("@ss.hasPermission('bpm:process-instance:query')")
... ...
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;
8 8 import org.springframework.format.annotation.DateTimeFormat;
9 9  
10 10 import java.time.LocalDateTime;
  11 +import java.util.Map;
11 12  
12 13 import static cn.iocoder.yudao.framework.common.util.date.DateUtils.FORMAT_YEAR_MONTH_DAY_HOUR_MINUTE_SECOND;
13 14  
... ... @@ -32,7 +33,14 @@ public class BpmProcessInstancePageReqVO extends PageParam {
32 33 @DateTimeFormat(pattern = FORMAT_YEAR_MONTH_DAY_HOUR_MINUTE_SECOND)
33 34 private LocalDateTime[] createTime;
34 35  
  36 + @Schema(description = "结束时间")
  37 + @DateTimeFormat(pattern = FORMAT_YEAR_MONTH_DAY_HOUR_MINUTE_SECOND)
  38 + private LocalDateTime[] endTime;
  39 +
35 40 @Schema(description = "发起用户编号", example = "1024")
36 41 private Long startUserId; // 注意,只有在【流程实例】菜单,才使用该参数
37 42  
  43 + @Schema(description = "动态表单字段查询JSON Str", example = "{}")
  44 + private String formFieldsParams;
  45 +
38 46 }
... ...
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 {
80 80 // 摘要
81 81 respVO.setSummary(FlowableUtils.getSummary(processDefinitionInfoMap.get(respVO.getProcessDefinitionId()),
82 82 pageResult.getList().get(i).getProcessVariables()));
  83 + // 表单
  84 + respVO.setFormVariables(pageResult.getList().get(i).getProcessVariables());
83 85 }
84 86 return vpPageResult;
85 87 }
86 88  
87   -// default BpmProcessInstanceReportPageRespVO buildProcessInstanceReportPage(PageResult<HistoricProcessInstance> pageResult,
88   -// Map<Long, AdminUserRespDTO> userMap,
89   -// BpmProcessDefinitionInfoDO processDefinitionInfo) {
90   -// PageResult<BpmProcessInstanceReportPageRespVO.BpmProcessInstanceReportRespVO> vpPageResult = BeanUtils.toBean(pageResult,
91   -// BpmProcessInstanceReportPageRespVO.BpmProcessInstanceReportRespVO.class);
92   -// // 表单列表
93   -// List<BpmFormFieldVO> formFieldsList = new ArrayList<>();
94   -// processDefinitionInfo.getFormFields().forEach(formFieldStr -> {
95   -// BpmFormFieldVO formField = JsonUtils.parseObject(formFieldStr, BpmFormFieldVO.class);
96   -// if (formField != null) {
97   -// formFieldsList.add(formField);
98   -// }
99   -// });
100   -// for (int i = 0; i < pageResult.getList().size(); i++) {
101   -// HistoricProcessInstance historicProcessInstance = pageResult.getList().get(i);
102   -// BpmProcessInstanceReportPageRespVO.BpmProcessInstanceReportRespVO respVO = vpPageResult.getList().get(i);
103   -// respVO.setStatus(FlowableUtils.getProcessInstanceStatus(historicProcessInstance));
104   -// // user
105   -// if (userMap != null) {
106   -// AdminUserRespDTO startUser = userMap.get(NumberUtils.parseLong(historicProcessInstance.getStartUserId()));
107   -// if (startUser != null) {
108   -// respVO.setStartUser(BeanUtils.toBean(startUser, UserSimpleBaseVO.class));
109   -// }
110   -// }
111   -// // 表单数据
112   -// List<KeyValue<String, Object>> variables = new ArrayList<>();
113   -// formFieldsList.forEach(formField -> {
114   -// variables.add(new KeyValue<String, Object>()
115   -// .setKey(formField.getField())
116   -// .setValue(historicProcessInstance.getProcessVariables().getOrDefault(formField.getField(), "")));
117   -// });
118   -// respVO.setVariables(variables);
119   -// }
120   -// return new BpmProcessInstanceReportPageRespVO().setPageResult(vpPageResult).setFormFields(formFieldsList);
121   -// }
122   -
123 89 default BpmProcessInstanceRespVO buildProcessInstance(HistoricProcessInstance processInstance,
124 90 ProcessDefinition processDefinition,
125 91 BpmProcessDefinitionInfoDO processDefinitionInfo,
... ...
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 {
84 84 PageResult<HistoricProcessInstance> getProcessInstancePage(Long userId,
85 85 @Valid BpmProcessInstancePageReqVO pageReqVO);
86 86  
87   -// PageResult<HistoricProcessInstance> getProcessInstanceReportPage(@Valid BpmProcessInstanceReportPageReqVO pageReqVO);
88   -
89 87 // TODO @芋艿:重点在 review 下
90 88 /**
91 89 * 获取审批详情。
... ...
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;
7 7 import cn.hutool.core.util.ArrayUtil;
8 8 import cn.hutool.core.util.ObjectUtil;
9 9 import cn.hutool.core.util.StrUtil;
  10 +import cn.hutool.json.JSONObject;
10 11 import cn.iocoder.yudao.framework.common.pojo.PageResult;
11 12 import cn.iocoder.yudao.framework.common.util.date.DateUtils;
12 13 import cn.iocoder.yudao.framework.common.util.json.JsonUtils;
... ... @@ -170,6 +171,20 @@ public class BpmProcessInstanceServiceImpl implements BpmProcessInstanceService
170 171 processInstanceQuery.startedAfter(DateUtils.of(pageReqVO.getCreateTime()[0]));
171 172 processInstanceQuery.startedBefore(DateUtils.of(pageReqVO.getCreateTime()[1]));
172 173 }
  174 + if (ArrayUtil.isNotEmpty(pageReqVO.getEndTime())) {
  175 + processInstanceQuery.finishedAfter(DateUtils.of(pageReqVO.getEndTime()[0]));
  176 + processInstanceQuery.finishedBefore(DateUtils.of(pageReqVO.getEndTime()[1]));
  177 + }
  178 + // 表单字段查询
  179 + // TODO 应支持多种类型的查询方式,目前只有字符串全等
  180 + if (StrUtil.isNotEmpty(pageReqVO.getFormFieldsParams())) {
  181 + JSONObject formFieldsParams = new JSONObject(pageReqVO.getFormFieldsParams());
  182 + for (Map.Entry<String, Object> field : formFieldsParams.entrySet()) {
  183 + if (StrUtil.isNotEmpty(field.getValue().toString())) {
  184 + processInstanceQuery.variableValueEquals(field.getKey(), field.getValue());
  185 + }
  186 + }
  187 + }
173 188 // 查询数量
174 189 long processInstanceCount = processInstanceQuery.count();
175 190 if (processInstanceCount == 0) {
... ... @@ -180,44 +195,6 @@ public class BpmProcessInstanceServiceImpl implements BpmProcessInstanceService
180 195 return new PageResult<>(processInstanceList, processInstanceCount);
181 196 }
182 197  
183   -// @Override
184   -// public PageResult<HistoricProcessInstance> getProcessInstanceReportPage(BpmProcessInstanceReportPageReqVO pageReqVO) {
185   -// // 通过 BpmProcessInstanceExtDO 表,先查询到对应的分页
186   -// HistoricProcessInstanceQuery processInstanceQuery = historyService.createHistoricProcessInstanceQuery()
187   -// .includeProcessVariables()
188   -// .processInstanceTenantId(FlowableUtils.getTenantId())
189   -// .orderByProcessInstanceStartTime().desc();
190   -// if (pageReqVO.getStartUserId() != null) {
191   -// processInstanceQuery.startedBy(String.valueOf(pageReqVO.getStartUserId()));
192   -// }
193   -// if (StrUtil.isNotEmpty(pageReqVO.getName())) {
194   -// processInstanceQuery.processInstanceNameLike("%" + pageReqVO.getName() + "%");
195   -// }
196   -// if (StrUtil.isNotEmpty(pageReqVO.getProcessDefinitionKey())) {
197   -// processInstanceQuery.processDefinitionKey(pageReqVO.getProcessDefinitionKey());
198   -// }
199   -// if (pageReqVO.getStatus() != null) {
200   -// processInstanceQuery.variableValueEquals(BpmnVariableConstants.PROCESS_INSTANCE_VARIABLE_STATUS, pageReqVO.getStatus());
201   -// }
202   -// if (ArrayUtil.isNotEmpty(pageReqVO.getCreateTime())) {
203   -// processInstanceQuery.startedAfter(DateUtils.of(pageReqVO.getCreateTime()[0]));
204   -// processInstanceQuery.startedBefore(DateUtils.of(pageReqVO.getCreateTime()[1]));
205   -// }
206   -// if (ArrayUtil.isNotEmpty(pageReqVO.getEndTime())) {
207   -// processInstanceQuery.finishedAfter(DateUtils.of(pageReqVO.getEndTime()[0]));
208   -// processInstanceQuery.finishedBefore(DateUtils.of(pageReqVO.getEndTime()[1]));
209   -// }
210   -// // TODO 流程表单数据也要支持查询
211   -// // 查询数量
212   -// long processInstanceCount = processInstanceQuery.count();
213   -// if (processInstanceCount == 0) {
214   -// return PageResult.empty(processInstanceCount);
215   -// }
216   -// // 查询列表
217   -// List<HistoricProcessInstance> processInstanceList = processInstanceQuery.listPage(PageUtils.getStart(pageReqVO), pageReqVO.getPageSize());
218   -// return new PageResult<>(processInstanceList, processInstanceCount);
219   -// }
220   -
221 198 private Map<String, String> getFormFieldsPermission(BpmnModel bpmnModel,
222 199 String activityId, String taskId) {
223 200 // 1. 获取流程活动编号。流程活动 Id 为空事,从流程任务中获取流程活动 Id
... ...