Kaynağa Gözat

!1216 feat: BPM-数据报表
Merge pull request !1216 from Lesan/feature/bpm-报表

芋道源码 6 ay önce
ebeveyn
işleme
805e570406

+ 0 - 20
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<BpmProcessInstanceReportPageRespVO> getProcessInstanceReportPage(
-//            @Valid BpmProcessInstanceReportPageReqVO pageReqVO) {
-//        PageResult<HistoricProcessInstance> pageResult = processInstanceService.getProcessInstanceReportPage(pageReqVO);
-//        if (CollUtil.isEmpty(pageResult.getList())) {
-//            return success(new BpmProcessInstanceReportPageRespVO().setPageResult(PageResult.empty(pageResult.getTotal())));
-//        }
-//
-//        // 拼接返回
-//        Map<Long, AdminUserRespDTO> 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')")

+ 8 - 0
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;
+
 }

+ 2 - 36
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<HistoricProcessInstance> pageResult,
-//                                                                              Map<Long, AdminUserRespDTO> userMap,
-//                                                                              BpmProcessDefinitionInfoDO processDefinitionInfo) {
-//        PageResult<BpmProcessInstanceReportPageRespVO.BpmProcessInstanceReportRespVO> vpPageResult = BeanUtils.toBean(pageResult,
-//                BpmProcessInstanceReportPageRespVO.BpmProcessInstanceReportRespVO.class);
-//        // 表单列表
-//        List<BpmFormFieldVO> 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<KeyValue<String, Object>> variables = new ArrayList<>();
-//            formFieldsList.forEach(formField -> {
-//                variables.add(new KeyValue<String, Object>()
-//                        .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,

+ 0 - 2
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<HistoricProcessInstance> getProcessInstancePage(Long userId,
                                                                @Valid BpmProcessInstancePageReqVO pageReqVO);
 
-//    PageResult<HistoricProcessInstance> getProcessInstanceReportPage(@Valid BpmProcessInstanceReportPageReqVO pageReqVO);
-
     // TODO @芋艿:重点在 review 下
     /**
      * 获取审批详情。

+ 15 - 38
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<String, Object> 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<HistoricProcessInstance> 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<HistoricProcessInstance> processInstanceList = processInstanceQuery.listPage(PageUtils.getStart(pageReqVO), pageReqVO.getPageSize());
-//        return new PageResult<>(processInstanceList, processInstanceCount);
-//    }
-
     private Map<String, String> getFormFieldsPermission(BpmnModel bpmnModel,
                                                         String activityId, String taskId) {
         // 1. 获取流程活动编号。流程活动 Id 为空事,从流程任务中获取流程活动 Id