Commit 0723e4571d8e8745dac142897cce5d70b0e94ead
Merge remote-tracking branch 'origin/feature/bpm' into feature/bpm
Showing
12 changed files
with
94 additions
and
57 deletions
yudao-module-bpm/yudao-module-bpm-api/src/main/java/cn/iocoder/yudao/module/bpm/enums/task/BpmReasonEnum.java
yudao-module-bpm/yudao-module-bpm-biz/src/main/java/cn/iocoder/yudao/module/bpm/controller/admin/task/BpmProcessInstanceCopyController.java
| ... | ... | @@ -9,7 +9,10 @@ import cn.iocoder.yudao.framework.common.util.object.BeanUtils; |
| 9 | 9 | import cn.iocoder.yudao.module.bpm.controller.admin.base.user.UserSimpleBaseVO; |
| 10 | 10 | import cn.iocoder.yudao.module.bpm.controller.admin.task.vo.cc.BpmProcessInstanceCopyRespVO; |
| 11 | 11 | import cn.iocoder.yudao.module.bpm.controller.admin.task.vo.instance.BpmProcessInstanceCopyPageReqVO; |
| 12 | +import cn.iocoder.yudao.module.bpm.dal.dataobject.definition.BpmProcessDefinitionInfoDO; | |
| 12 | 13 | import cn.iocoder.yudao.module.bpm.dal.dataobject.task.BpmProcessInstanceCopyDO; |
| 14 | +import cn.iocoder.yudao.module.bpm.framework.flowable.core.util.FlowableUtils; | |
| 15 | +import cn.iocoder.yudao.module.bpm.service.definition.BpmProcessDefinitionService; | |
| 13 | 16 | import cn.iocoder.yudao.module.bpm.service.task.BpmProcessInstanceCopyService; |
| 14 | 17 | import cn.iocoder.yudao.module.bpm.service.task.BpmProcessInstanceService; |
| 15 | 18 | import cn.iocoder.yudao.module.system.api.user.AdminUserApi; |
| ... | ... | @@ -42,6 +45,8 @@ public class BpmProcessInstanceCopyController { |
| 42 | 45 | private BpmProcessInstanceCopyService processInstanceCopyService; |
| 43 | 46 | @Resource |
| 44 | 47 | private BpmProcessInstanceService processInstanceService; |
| 48 | + @Resource | |
| 49 | + private BpmProcessDefinitionService processDefinitionService; | |
| 45 | 50 | |
| 46 | 51 | @Resource |
| 47 | 52 | private AdminUserApi adminUserApi; |
| ... | ... | @@ -62,6 +67,8 @@ public class BpmProcessInstanceCopyController { |
| 62 | 67 | convertSet(pageResult.getList(), BpmProcessInstanceCopyDO::getProcessInstanceId)); |
| 63 | 68 | Map<Long, AdminUserRespDTO> userMap = adminUserApi.getUserMap(convertListByFlatMap(pageResult.getList(), |
| 64 | 69 | copy -> Stream.of(copy.getStartUserId(), Long.parseLong(copy.getCreator())))); |
| 70 | + Map<String, BpmProcessDefinitionInfoDO> processDefinitionInfoMap = processDefinitionService.getProcessDefinitionInfoMap( | |
| 71 | + convertSet(pageResult.getList(), BpmProcessInstanceCopyDO::getProcessDefinitionId)); | |
| 65 | 72 | return success(convertPage(pageResult, copy -> { |
| 66 | 73 | BpmProcessInstanceCopyRespVO copyVO = BeanUtils.toBean(copy, BpmProcessInstanceCopyRespVO.class); |
| 67 | 74 | MapUtils.findAndThen(userMap, Long.valueOf(copy.getCreator()), |
| ... | ... | @@ -69,7 +76,12 @@ public class BpmProcessInstanceCopyController { |
| 69 | 76 | MapUtils.findAndThen(userMap, copy.getStartUserId(), |
| 70 | 77 | user -> copyVO.setCreateUser(BeanUtils.toBean(user, UserSimpleBaseVO.class))); |
| 71 | 78 | MapUtils.findAndThen(processInstanceMap, copyVO.getProcessInstanceId(), |
| 72 | - processInstance -> copyVO.setProcessInstanceStartTime(DateUtils.of(processInstance.getStartTime()))); | |
| 79 | + processInstance -> { | |
| 80 | + copyVO.setSummary(FlowableUtils.getSummary( | |
| 81 | + processDefinitionInfoMap.get(processInstance.getProcessDefinitionId()), | |
| 82 | + processInstance.getProcessVariables())); | |
| 83 | + copyVO.setProcessInstanceStartTime(DateUtils.of(processInstance.getStartTime())); | |
| 84 | + }); | |
| 73 | 85 | return copyVO; |
| 74 | 86 | })); |
| 75 | 87 | } | ... | ... |
yudao-module-bpm/yudao-module-bpm-biz/src/main/java/cn/iocoder/yudao/module/bpm/controller/admin/task/vo/cc/BpmProcessInstanceCopyRespVO.java
| 1 | 1 | package cn.iocoder.yudao.module.bpm.controller.admin.task.vo.cc; |
| 2 | 2 | |
| 3 | +import cn.iocoder.yudao.framework.common.core.KeyValue; | |
| 3 | 4 | import cn.iocoder.yudao.module.bpm.controller.admin.base.user.UserSimpleBaseVO; |
| 4 | 5 | import io.swagger.v3.oas.annotations.media.Schema; |
| 5 | 6 | import lombok.Data; |
| 6 | 7 | |
| 7 | 8 | import java.time.LocalDateTime; |
| 9 | +import java.util.List; | |
| 8 | 10 | |
| 9 | 11 | @Schema(description = "管理后台 - 流程实例抄送的分页 Item Response VO") |
| 10 | 12 | @Data |
| ... | ... | @@ -40,4 +42,7 @@ public class BpmProcessInstanceCopyRespVO { |
| 40 | 42 | @Schema(description = "抄送时间", requiredMode = Schema.RequiredMode.REQUIRED) |
| 41 | 43 | private LocalDateTime createTime; |
| 42 | 44 | |
| 45 | + @Schema(description = "流程摘要", example = "[]") | |
| 46 | + private List<KeyValue<String, String>> summary; | |
| 47 | + | |
| 43 | 48 | } | ... | ... |
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/controller/admin/task/vo/task/BpmTaskRespVO.java
| ... | ... | @@ -85,10 +85,6 @@ public class BpmTaskRespVO { |
| 85 | 85 | @Schema(description = "是否填写审批意见", example = "false") |
| 86 | 86 | private Boolean reasonRequire; |
| 87 | 87 | |
| 88 | - // TODO @lesan:要不放到 processInstance 里面?因为摘要是流程实例的,不是流程任务的 | |
| 89 | - @Schema(description = "流程摘要", example = "[]") | |
| 90 | - private List<KeyValue<String, String>> summary; // 只有流程表单,才有摘要! | |
| 91 | - | |
| 92 | 88 | @Data |
| 93 | 89 | @Schema(description = "流程实例") |
| 94 | 90 | public static class ProcessInstance { |
| ... | ... | @@ -105,6 +101,9 @@ public class BpmTaskRespVO { |
| 105 | 101 | @Schema(description = "流程定义的编号", requiredMode = Schema.RequiredMode.REQUIRED, example = "2048") |
| 106 | 102 | private String processDefinitionId; |
| 107 | 103 | |
| 104 | + @Schema(description = "流程摘要", example = "[]") | |
| 105 | + private List<KeyValue<String, String>> summary; // 只有流程表单,才有摘要! | |
| 106 | + | |
| 108 | 107 | /** |
| 109 | 108 | * 发起人的用户信息 |
| 110 | 109 | */ | ... | ... |
yudao-module-bpm/yudao-module-bpm-biz/src/main/java/cn/iocoder/yudao/module/bpm/convert/task/BpmProcessInstanceConvert.java
| ... | ... | @@ -80,6 +80,8 @@ 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 | } | ... | ... |
yudao-module-bpm/yudao-module-bpm-biz/src/main/java/cn/iocoder/yudao/module/bpm/convert/task/BpmTaskConvert.java
| ... | ... | @@ -54,7 +54,7 @@ public interface BpmTaskConvert { |
| 54 | 54 | AdminUserRespDTO startUser = userMap.get(NumberUtils.parseLong(processInstance.getStartUserId())); |
| 55 | 55 | taskVO.getProcessInstance().setStartUser(BeanUtils.toBean(startUser, UserSimpleBaseVO.class)); |
| 56 | 56 | // 摘要 |
| 57 | - taskVO.setSummary(FlowableUtils.getSummary(processDefinitionInfoMap.get(processInstance.getProcessDefinitionId()), | |
| 57 | + taskVO.getProcessInstance().setSummary(FlowableUtils.getSummary(processDefinitionInfoMap.get(processInstance.getProcessDefinitionId()), | |
| 58 | 58 | processInstance.getProcessVariables())); |
| 59 | 59 | }); |
| 60 | 60 | } |
| ... | ... | @@ -80,7 +80,7 @@ public interface BpmTaskConvert { |
| 80 | 80 | taskVO.setProcessInstance(BeanUtils.toBean(processInstance, BpmTaskRespVO.ProcessInstance.class)); |
| 81 | 81 | taskVO.getProcessInstance().setStartUser(BeanUtils.toBean(startUser, UserSimpleBaseVO.class)); |
| 82 | 82 | // 摘要 |
| 83 | - taskVO.setSummary(FlowableUtils.getSummary(processDefinitionInfoMap.get(processInstance.getProcessDefinitionId()), | |
| 83 | + taskVO.getProcessInstance().setSummary(FlowableUtils.getSummary(processDefinitionInfoMap.get(processInstance.getProcessDefinitionId()), | |
| 84 | 84 | processInstance.getProcessVariables())); |
| 85 | 85 | } |
| 86 | 86 | return taskVO; | ... | ... |
yudao-module-bpm/yudao-module-bpm-biz/src/main/java/cn/iocoder/yudao/module/bpm/dal/dataobject/task/BpmProcessInstanceCopyDO.java
| ... | ... | @@ -50,6 +50,12 @@ public class BpmProcessInstanceCopyDO extends BaseDO { |
| 50 | 50 | */ |
| 51 | 51 | private String processInstanceId; |
| 52 | 52 | /** |
| 53 | + * 流程实例的流程定义编号 | |
| 54 | + * | |
| 55 | + * 关联 ProcessInstance 的 processDefinitionId 属性 | |
| 56 | + */ | |
| 57 | + private String processDefinitionId; | |
| 58 | + /** | |
| 53 | 59 | * 流程分类 |
| 54 | 60 | * |
| 55 | 61 | * 冗余 ProcessInstance 的 category 字段 | ... | ... |
yudao-module-bpm/yudao-module-bpm-biz/src/main/java/cn/iocoder/yudao/module/bpm/framework/flowable/core/util/FlowableUtils.java
| ... | ... | @@ -26,6 +26,9 @@ import org.flowable.task.api.TaskInfo; |
| 26 | 26 | |
| 27 | 27 | import java.util.*; |
| 28 | 28 | import java.util.concurrent.Callable; |
| 29 | +import java.util.stream.Collectors; | |
| 30 | + | |
| 31 | +import static cn.iocoder.yudao.framework.common.util.collection.CollectionUtils.convertList; | |
| 29 | 32 | |
| 30 | 33 | /** |
| 31 | 34 | * Flowable 相关的工具方法 |
| ... | ... | @@ -193,7 +196,6 @@ public class FlowableUtils { |
| 193 | 196 | BpmnVariableConstants.PROCESS_INSTANCE_VARIABLE_START_USER_SELECT_ASSIGNEES); |
| 194 | 197 | } |
| 195 | 198 | |
| 196 | - // TODO @lesan:如果值是 null 的情况,可能要调研下飞书、钉钉,是不是不返回哈! | |
| 197 | 199 | /** |
| 198 | 200 | * 获得流程实例的摘要 |
| 199 | 201 | * |
| ... | ... | @@ -206,53 +208,40 @@ public class FlowableUtils { |
| 206 | 208 | */ |
| 207 | 209 | public static List<KeyValue<String, String>> getSummary(BpmProcessDefinitionInfoDO processDefinitionInfo, |
| 208 | 210 | Map<String, Object> processVariables) { |
| 209 | - // TODO @lesan:建议 if return,减少 { 层级 | |
| 210 | - if (ObjectUtil.isNotNull(processDefinitionInfo) | |
| 211 | - && BpmModelFormTypeEnum.NORMAL.getType().equals(processDefinitionInfo.getFormType())) { | |
| 212 | - List<KeyValue<String, String>> summaryList = new ArrayList<>(); | |
| 213 | - // TODO @lesan:可以使用 CollUtils.convertMap 简化工作量哈。 | |
| 214 | - Map<String, BpmFormFieldVO> formFieldsMap = new HashMap<>(); | |
| 215 | - processDefinitionInfo.getFormFields().forEach(formFieldStr -> { | |
| 216 | - BpmFormFieldVO formField = JsonUtils.parseObject(formFieldStr, BpmFormFieldVO.class); | |
| 211 | + // 只有流程表单才会显示摘要! | |
| 212 | + if (ObjectUtil.isNull(processDefinitionInfo) | |
| 213 | + || !BpmModelFormTypeEnum.NORMAL.getType().equals(processDefinitionInfo.getFormType())) { | |
| 214 | + return null; | |
| 215 | + } | |
| 216 | + | |
| 217 | + // 解析表单配置 | |
| 218 | + Map<String, BpmFormFieldVO> formFieldsMap = new HashMap<>(); | |
| 219 | + processDefinitionInfo.getFormFields().forEach(formFieldStr -> { | |
| 220 | + BpmFormFieldVO formField = JsonUtils.parseObject(formFieldStr, BpmFormFieldVO.class); | |
| 221 | + if (formField != null) { | |
| 222 | + formFieldsMap.put(formField.getField(), formField); | |
| 223 | + } | |
| 224 | + }); | |
| 225 | + | |
| 226 | + // 情况一:当自定义了摘要 | |
| 227 | + if (ObjectUtil.isNotNull(processDefinitionInfo.getSummarySetting()) | |
| 228 | + && Boolean.TRUE.equals(processDefinitionInfo.getSummarySetting().getEnable())) { | |
| 229 | + return convertList(processDefinitionInfo.getSummarySetting().getSummary(), item -> { | |
| 230 | + BpmFormFieldVO formField = formFieldsMap.get(item); | |
| 217 | 231 | if (formField != null) { |
| 218 | - formFieldsMap.put(formField.getField(), formField); | |
| 232 | + return new KeyValue<String, String>(formField.getTitle(), | |
| 233 | + processVariables.getOrDefault(item, "").toString()); | |
| 219 | 234 | } |
| 235 | + return null; | |
| 220 | 236 | }); |
| 221 | - | |
| 222 | - // TODO @lesan:这里也可以 if return,还是为了减少括号哈。这样,就可以写注释,情况一:;情况二: | |
| 223 | - if (ObjectUtil.isNotNull(processDefinitionInfo.getSummarySetting()) | |
| 224 | - && Boolean.TRUE.equals(processDefinitionInfo.getSummarySetting().getEnable())) { | |
| 225 | - // TODO @lesan:这里,也可以通过 CollUtils.convertList 简化哈。 | |
| 226 | - for (String item : processDefinitionInfo.getSummarySetting().getSummary()) { | |
| 227 | - BpmFormFieldVO formField = formFieldsMap.get(item); | |
| 228 | - if (formField != null) { | |
| 229 | - summaryList.add(new KeyValue<>(formField.getTitle(), | |
| 230 | - processVariables.getOrDefault(item, "").toString())); | |
| 231 | - } | |
| 232 | - } | |
| 233 | - } else { | |
| 234 | - // 默认展示前三个 | |
| 235 | - /* TODO @lesan:stream 简化 | |
| 236 | - * summaryList.addAll(formFieldsMap.entrySet().stream() | |
| 237 | - * .limit(3) | |
| 238 | - * .map(entry -> new KeyValue<>(entry.getValue().getTitle(), | |
| 239 | - * processVariables.getOrDefault(entry.getValue().getField(), "").toString())) | |
| 240 | - * .collect(Collectors.toList())); | |
| 241 | - */ | |
| 242 | - int j = 0; | |
| 243 | - for (Map.Entry<String, BpmFormFieldVO> entry : formFieldsMap.entrySet()) { | |
| 244 | - BpmFormFieldVO formField = entry.getValue(); | |
| 245 | - if (j > 2) { | |
| 246 | - break; | |
| 247 | - } | |
| 248 | - summaryList.add(new KeyValue<>(formField.getTitle(), | |
| 249 | - processVariables.getOrDefault(formField.getField(), "").toString())); | |
| 250 | - j++; | |
| 251 | - } | |
| 252 | - } | |
| 253 | - return summaryList; | |
| 254 | 237 | } |
| 255 | - return null; | |
| 238 | + | |
| 239 | + // 情况二:默认摘要展示前三个表单字段 | |
| 240 | + return formFieldsMap.entrySet().stream() | |
| 241 | + .limit(3) | |
| 242 | + .map(entry -> new KeyValue<>(entry.getValue().getTitle(), | |
| 243 | + processVariables.getOrDefault(entry.getValue().getField(), "").toString())) | |
| 244 | + .collect(Collectors.toList()); | |
| 256 | 245 | } |
| 257 | 246 | |
| 258 | 247 | // ========== Task 相关的工具方法 ========== |
| ... | ... | @@ -317,9 +306,9 @@ public class FlowableUtils { |
| 317 | 306 | |
| 318 | 307 | private static Object getExpressionValue(VariableContainer variableContainer, String expressionString, |
| 319 | 308 | ProcessEngineConfigurationImpl processEngineConfiguration) { |
| 320 | - assert processEngineConfiguration!= null; | |
| 309 | + assert processEngineConfiguration != null; | |
| 321 | 310 | ExpressionManager expressionManager = processEngineConfiguration.getExpressionManager(); |
| 322 | - assert expressionManager!= null; | |
| 311 | + assert expressionManager != null; | |
| 323 | 312 | Expression expression = expressionManager.createExpression(expressionString); |
| 324 | 313 | return expression.getValue(variableContainer); |
| 325 | 314 | } | ... | ... |
yudao-module-bpm/yudao-module-bpm-biz/src/main/java/cn/iocoder/yudao/module/bpm/service/definition/BpmModelServiceImpl.java
| ... | ... | @@ -86,6 +86,7 @@ public class BpmModelServiceImpl implements BpmModelService { |
| 86 | 86 | if (StrUtil.isNotEmpty(name)) { |
| 87 | 87 | modelQuery.modelNameLike("%" + name + "%"); |
| 88 | 88 | } |
| 89 | + modelQuery.modelTenantId(FlowableUtils.getTenantId()); | |
| 89 | 90 | return modelQuery.list(); |
| 90 | 91 | } |
| 91 | 92 | |
| ... | ... | @@ -288,8 +289,7 @@ public class BpmModelServiceImpl implements BpmModelService { |
| 288 | 289 | // 2.3 清理所有 Task |
| 289 | 290 | List<Task> tasks = taskService.createTaskQuery() |
| 290 | 291 | .processDefinitionKey(model.getKey()).list(); |
| 291 | - // TODO @lesan:貌似传递一个 reason 会好点! | |
| 292 | - tasks.forEach(task -> taskService.deleteTask(task.getId())); | |
| 292 | + tasks.forEach(task -> taskService.deleteTask(task.getId(),BpmReasonEnum.CANCEL_BY_PROCESS_CLEAN.getReason())); | |
| 293 | 293 | } |
| 294 | 294 | |
| 295 | 295 | @Override | ... | ... |
yudao-module-bpm/yudao-module-bpm-biz/src/main/java/cn/iocoder/yudao/module/bpm/service/task/BpmProcessInstanceCopyServiceImpl.java
| ... | ... | @@ -77,7 +77,8 @@ public class BpmProcessInstanceCopyServiceImpl implements BpmProcessInstanceCopy |
| 77 | 77 | .setUserId(userId).setReason(reason).setStartUserId(Long.valueOf(processInstance.getStartUserId())) |
| 78 | 78 | .setProcessInstanceId(processInstanceId).setProcessInstanceName(processInstance.getName()) |
| 79 | 79 | .setCategory(processDefinition.getCategory()).setTaskId(taskId) |
| 80 | - .setActivityId(activityId).setActivityName(activityName)); | |
| 80 | + .setActivityId(activityId).setActivityName(activityName) | |
| 81 | + .setProcessDefinitionId(processInstance.getProcessDefinitionId())); | |
| 81 | 82 | processInstanceCopyMapper.insertBatch(copyList); |
| 82 | 83 | } |
| 83 | 84 | ... | ... |
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,7 +195,6 @@ public class BpmProcessInstanceServiceImpl implements BpmProcessInstanceService |
| 180 | 195 | return new PageResult<>(processInstanceList, processInstanceCount); |
| 181 | 196 | } |
| 182 | 197 | |
| 183 | - | |
| 184 | 198 | private Map<String, String> getFormFieldsPermission(BpmnModel bpmnModel, |
| 185 | 199 | String activityId, String taskId) { |
| 186 | 200 | // 1. 获取流程活动编号。流程活动 Id 为空事,从流程任务中获取流程活动 Id | ... | ... |