Commit d11684c2aeee19488be74867f0c0beedff93a1c1
Committed by
Gitee
!1210 feat: BPM-更多设置-摘要设置
Merge pull request !1210 from Lesan/feature/bpm-摘要设置
Showing
11 changed files
with
136 additions
and
23 deletions
yudao-module-bpm/yudao-module-bpm-biz/src/main/java/cn/iocoder/yudao/module/bpm/controller/admin/definition/vo/model/BpmFormFieldVO.java
0 → 100644
yudao-module-bpm/yudao-module-bpm-biz/src/main/java/cn/iocoder/yudao/module/bpm/controller/admin/definition/vo/model/BpmModelMetaInfoVO.java
| 1 | package cn.iocoder.yudao.module.bpm.controller.admin.definition.vo.model; | 1 | package cn.iocoder.yudao.module.bpm.controller.admin.definition.vo.model; |
| 2 | 2 | ||
| 3 | +import cn.iocoder.yudao.framework.common.core.KeyValue; | ||
| 3 | import cn.iocoder.yudao.framework.common.validation.InEnum; | 4 | import cn.iocoder.yudao.framework.common.validation.InEnum; |
| 4 | import cn.iocoder.yudao.module.bpm.enums.definition.BpmAutoApproveTypeEnum; | 5 | import cn.iocoder.yudao.module.bpm.enums.definition.BpmAutoApproveTypeEnum; |
| 5 | import cn.iocoder.yudao.module.bpm.enums.definition.BpmModelFormTypeEnum; | 6 | import cn.iocoder.yudao.module.bpm.enums.definition.BpmModelFormTypeEnum; |
| @@ -75,7 +76,10 @@ public class BpmModelMetaInfoVO { | @@ -75,7 +76,10 @@ public class BpmModelMetaInfoVO { | ||
| 75 | private Integer autoApprovalType; | 76 | private Integer autoApprovalType; |
| 76 | 77 | ||
| 77 | @Schema(description = "标题设置", example = "{}") | 78 | @Schema(description = "标题设置", example = "{}") |
| 78 | - private CustomTitleSetting customTitleSetting; | 79 | + private TitleSetting titleSetting; |
| 80 | + | ||
| 81 | + @Schema(description = "摘要设置", example = "{}") | ||
| 82 | + private SummarySetting summarySetting; | ||
| 79 | 83 | ||
| 80 | @Schema(description = "流程 ID 规则") | 84 | @Schema(description = "流程 ID 规则") |
| 81 | @Data | 85 | @Data |
| @@ -101,11 +105,10 @@ public class BpmModelMetaInfoVO { | @@ -101,11 +105,10 @@ public class BpmModelMetaInfoVO { | ||
| 101 | 105 | ||
| 102 | } | 106 | } |
| 103 | 107 | ||
| 104 | - // TODO @lesan:TitleSetting 会不会更好。因为 Custom 和 Setting 有点重叠 | ||
| 105 | @Schema(description = "标题设置") | 108 | @Schema(description = "标题设置") |
| 106 | @Data | 109 | @Data |
| 107 | @Valid | 110 | @Valid |
| 108 | - public static class CustomTitleSetting { | 111 | + public static class TitleSetting { |
| 109 | 112 | ||
| 110 | @Schema(description = "是否自定义", example = "false") | 113 | @Schema(description = "是否自定义", example = "false") |
| 111 | @NotNull(message = "是否自定义不能为空") | 114 | @NotNull(message = "是否自定义不能为空") |
| @@ -116,4 +119,18 @@ public class BpmModelMetaInfoVO { | @@ -116,4 +119,18 @@ public class BpmModelMetaInfoVO { | ||
| 116 | 119 | ||
| 117 | } | 120 | } |
| 118 | 121 | ||
| 122 | + @Schema(description = "摘要设置") | ||
| 123 | + @Data | ||
| 124 | + @Valid | ||
| 125 | + public static class SummarySetting { | ||
| 126 | + | ||
| 127 | + @Schema(description = "是否自定义", example = "false") | ||
| 128 | + @NotNull(message = "是否自定义不能为空") | ||
| 129 | + private Boolean enable; | ||
| 130 | + | ||
| 131 | + @Schema(description = "摘要字段数组", example = "[]") | ||
| 132 | + private List<String> summary; | ||
| 133 | + | ||
| 134 | + } | ||
| 135 | + | ||
| 119 | } | 136 | } |
yudao-module-bpm/yudao-module-bpm-biz/src/main/java/cn/iocoder/yudao/module/bpm/controller/admin/task/BpmProcessInstanceController.java
| @@ -74,8 +74,10 @@ public class BpmProcessInstanceController { | @@ -74,8 +74,10 @@ public class BpmProcessInstanceController { | ||
| 74 | convertSet(pageResult.getList(), HistoricProcessInstance::getProcessDefinitionId)); | 74 | convertSet(pageResult.getList(), HistoricProcessInstance::getProcessDefinitionId)); |
| 75 | Map<String, BpmCategoryDO> categoryMap = categoryService.getCategoryMap( | 75 | Map<String, BpmCategoryDO> categoryMap = categoryService.getCategoryMap( |
| 76 | convertSet(processDefinitionMap.values(), ProcessDefinition::getCategory)); | 76 | convertSet(processDefinitionMap.values(), ProcessDefinition::getCategory)); |
| 77 | + Map<String, BpmProcessDefinitionInfoDO> processDefinitionInfoMap = processDefinitionService.getProcessDefinitionInfoMap( | ||
| 78 | + convertSet(pageResult.getList(), HistoricProcessInstance::getProcessDefinitionId)); | ||
| 77 | return success(BpmProcessInstanceConvert.INSTANCE.buildProcessInstancePage(pageResult, | 79 | return success(BpmProcessInstanceConvert.INSTANCE.buildProcessInstancePage(pageResult, |
| 78 | - processDefinitionMap, categoryMap, taskMap, null, null)); | 80 | + processDefinitionMap, categoryMap, taskMap, null, null, processDefinitionInfoMap)); |
| 79 | } | 81 | } |
| 80 | 82 | ||
| 81 | @GetMapping("/manager-page") | 83 | @GetMapping("/manager-page") |
| @@ -101,8 +103,10 @@ public class BpmProcessInstanceController { | @@ -101,8 +103,10 @@ public class BpmProcessInstanceController { | ||
| 101 | convertSet(pageResult.getList(), processInstance -> NumberUtils.parseLong(processInstance.getStartUserId()))); | 103 | convertSet(pageResult.getList(), processInstance -> NumberUtils.parseLong(processInstance.getStartUserId()))); |
| 102 | Map<Long, DeptRespDTO> deptMap = deptApi.getDeptMap( | 104 | Map<Long, DeptRespDTO> deptMap = deptApi.getDeptMap( |
| 103 | convertSet(userMap.values(), AdminUserRespDTO::getDeptId)); | 105 | convertSet(userMap.values(), AdminUserRespDTO::getDeptId)); |
| 106 | + Map<String, BpmProcessDefinitionInfoDO> processDefinitionInfoMap = processDefinitionService.getProcessDefinitionInfoMap( | ||
| 107 | + convertSet(pageResult.getList(), HistoricProcessInstance::getProcessDefinitionId)); | ||
| 104 | return success(BpmProcessInstanceConvert.INSTANCE.buildProcessInstancePage(pageResult, | 108 | return success(BpmProcessInstanceConvert.INSTANCE.buildProcessInstancePage(pageResult, |
| 105 | - processDefinitionMap, categoryMap, taskMap, userMap, deptMap)); | 109 | + processDefinitionMap, categoryMap, taskMap, userMap, deptMap, processDefinitionInfoMap)); |
| 106 | } | 110 | } |
| 107 | 111 | ||
| 108 | @PostMapping("/create") | 112 | @PostMapping("/create") |
yudao-module-bpm/yudao-module-bpm-biz/src/main/java/cn/iocoder/yudao/module/bpm/controller/admin/task/BpmTaskController.java
| @@ -7,7 +7,9 @@ import cn.iocoder.yudao.framework.common.util.number.NumberUtils; | @@ -7,7 +7,9 @@ import cn.iocoder.yudao.framework.common.util.number.NumberUtils; | ||
| 7 | import cn.iocoder.yudao.module.bpm.controller.admin.task.vo.task.*; | 7 | import cn.iocoder.yudao.module.bpm.controller.admin.task.vo.task.*; |
| 8 | import cn.iocoder.yudao.module.bpm.convert.task.BpmTaskConvert; | 8 | import cn.iocoder.yudao.module.bpm.convert.task.BpmTaskConvert; |
| 9 | import cn.iocoder.yudao.module.bpm.dal.dataobject.definition.BpmFormDO; | 9 | import cn.iocoder.yudao.module.bpm.dal.dataobject.definition.BpmFormDO; |
| 10 | +import cn.iocoder.yudao.module.bpm.dal.dataobject.definition.BpmProcessDefinitionInfoDO; | ||
| 10 | import cn.iocoder.yudao.module.bpm.service.definition.BpmFormService; | 11 | import cn.iocoder.yudao.module.bpm.service.definition.BpmFormService; |
| 12 | +import cn.iocoder.yudao.module.bpm.service.definition.BpmProcessDefinitionService; | ||
| 11 | import cn.iocoder.yudao.module.bpm.service.task.BpmProcessInstanceService; | 13 | import cn.iocoder.yudao.module.bpm.service.task.BpmProcessInstanceService; |
| 12 | import cn.iocoder.yudao.module.bpm.service.task.BpmTaskService; | 14 | import cn.iocoder.yudao.module.bpm.service.task.BpmTaskService; |
| 13 | import cn.iocoder.yudao.module.system.api.dept.DeptApi; | 15 | import cn.iocoder.yudao.module.system.api.dept.DeptApi; |
| @@ -50,6 +52,8 @@ public class BpmTaskController { | @@ -50,6 +52,8 @@ public class BpmTaskController { | ||
| 50 | private BpmProcessInstanceService processInstanceService; | 52 | private BpmProcessInstanceService processInstanceService; |
| 51 | @Resource | 53 | @Resource |
| 52 | private BpmFormService formService; | 54 | private BpmFormService formService; |
| 55 | + @Resource | ||
| 56 | + private BpmProcessDefinitionService processDefinitionService; | ||
| 53 | 57 | ||
| 54 | @Resource | 58 | @Resource |
| 55 | private AdminUserApi adminUserApi; | 59 | private AdminUserApi adminUserApi; |
| @@ -70,7 +74,9 @@ public class BpmTaskController { | @@ -70,7 +74,9 @@ public class BpmTaskController { | ||
| 70 | convertSet(pageResult.getList(), Task::getProcessInstanceId)); | 74 | convertSet(pageResult.getList(), Task::getProcessInstanceId)); |
| 71 | Map<Long, AdminUserRespDTO> userMap = adminUserApi.getUserMap( | 75 | Map<Long, AdminUserRespDTO> userMap = adminUserApi.getUserMap( |
| 72 | convertSet(processInstanceMap.values(), instance -> Long.valueOf(instance.getStartUserId()))); | 76 | convertSet(processInstanceMap.values(), instance -> Long.valueOf(instance.getStartUserId()))); |
| 73 | - return success(BpmTaskConvert.INSTANCE.buildTodoTaskPage(pageResult, processInstanceMap, userMap)); | 77 | + Map<String, BpmProcessDefinitionInfoDO> processDefinitionInfoMap = processDefinitionService.getProcessDefinitionInfoMap( |
| 78 | + convertSet(pageResult.getList(), Task::getProcessDefinitionId)); | ||
| 79 | + return success(BpmTaskConvert.INSTANCE.buildTodoTaskPage(pageResult, processInstanceMap, userMap, processDefinitionInfoMap)); | ||
| 74 | } | 80 | } |
| 75 | 81 | ||
| 76 | @GetMapping("done-page") | 82 | @GetMapping("done-page") |
| @@ -87,7 +93,9 @@ public class BpmTaskController { | @@ -87,7 +93,9 @@ public class BpmTaskController { | ||
| 87 | convertSet(pageResult.getList(), HistoricTaskInstance::getProcessInstanceId)); | 93 | convertSet(pageResult.getList(), HistoricTaskInstance::getProcessInstanceId)); |
| 88 | Map<Long, AdminUserRespDTO> userMap = adminUserApi.getUserMap( | 94 | Map<Long, AdminUserRespDTO> userMap = adminUserApi.getUserMap( |
| 89 | convertSet(processInstanceMap.values(), instance -> Long.valueOf(instance.getStartUserId()))); | 95 | convertSet(processInstanceMap.values(), instance -> Long.valueOf(instance.getStartUserId()))); |
| 90 | - return success(BpmTaskConvert.INSTANCE.buildTaskPage(pageResult, processInstanceMap, userMap, null)); | 96 | + Map<String, BpmProcessDefinitionInfoDO> processDefinitionInfoMap = processDefinitionService.getProcessDefinitionInfoMap( |
| 97 | + convertSet(pageResult.getList(), HistoricTaskInstance::getProcessDefinitionId)); | ||
| 98 | + return success(BpmTaskConvert.INSTANCE.buildTaskPage(pageResult, processInstanceMap, userMap, null, processDefinitionInfoMap)); | ||
| 91 | } | 99 | } |
| 92 | 100 | ||
| 93 | @GetMapping("manager-page") | 101 | @GetMapping("manager-page") |
| @@ -108,7 +116,9 @@ public class BpmTaskController { | @@ -108,7 +116,9 @@ public class BpmTaskController { | ||
| 108 | Map<Long, AdminUserRespDTO> userMap = adminUserApi.getUserMap(userIds); | 116 | Map<Long, AdminUserRespDTO> userMap = adminUserApi.getUserMap(userIds); |
| 109 | Map<Long, DeptRespDTO> deptMap = deptApi.getDeptMap( | 117 | Map<Long, DeptRespDTO> deptMap = deptApi.getDeptMap( |
| 110 | convertSet(userMap.values(), AdminUserRespDTO::getDeptId)); | 118 | convertSet(userMap.values(), AdminUserRespDTO::getDeptId)); |
| 111 | - return success(BpmTaskConvert.INSTANCE.buildTaskPage(pageResult, processInstanceMap, userMap, deptMap)); | 119 | + Map<String, BpmProcessDefinitionInfoDO> processDefinitionInfoMap = processDefinitionService.getProcessDefinitionInfoMap( |
| 120 | + convertSet(pageResult.getList(), HistoricTaskInstance::getProcessDefinitionId)); | ||
| 121 | + return success(BpmTaskConvert.INSTANCE.buildTaskPage(pageResult, processInstanceMap, userMap, deptMap, processDefinitionInfoMap)); | ||
| 112 | } | 122 | } |
| 113 | 123 | ||
| 114 | @GetMapping("/list-by-process-instance-id") | 124 | @GetMapping("/list-by-process-instance-id") |
yudao-module-bpm/yudao-module-bpm-biz/src/main/java/cn/iocoder/yudao/module/bpm/controller/admin/task/vo/instance/BpmProcessInstanceRespVO.java
| 1 | package cn.iocoder.yudao.module.bpm.controller.admin.task.vo.instance; | 1 | package cn.iocoder.yudao.module.bpm.controller.admin.task.vo.instance; |
| 2 | 2 | ||
| 3 | +import cn.iocoder.yudao.framework.common.core.KeyValue; | ||
| 3 | import cn.iocoder.yudao.module.bpm.controller.admin.base.user.UserSimpleBaseVO; | 4 | import cn.iocoder.yudao.module.bpm.controller.admin.base.user.UserSimpleBaseVO; |
| 4 | import cn.iocoder.yudao.module.bpm.controller.admin.definition.vo.process.BpmProcessDefinitionRespVO; | 5 | import cn.iocoder.yudao.module.bpm.controller.admin.definition.vo.process.BpmProcessDefinitionRespVO; |
| 5 | import io.swagger.v3.oas.annotations.media.Schema; | 6 | import io.swagger.v3.oas.annotations.media.Schema; |
| @@ -59,6 +60,8 @@ public class BpmProcessInstanceRespVO { | @@ -59,6 +60,8 @@ public class BpmProcessInstanceRespVO { | ||
| 59 | */ | 60 | */ |
| 60 | private List<Task> tasks; // 仅在流程实例分页才返回 | 61 | private List<Task> tasks; // 仅在流程实例分页才返回 |
| 61 | 62 | ||
| 63 | + private List<KeyValue<String, String>> summary; | ||
| 64 | + | ||
| 62 | @Schema(description = "流程任务") | 65 | @Schema(description = "流程任务") |
| 63 | @Data | 66 | @Data |
| 64 | public static class Task { | 67 | public static class Task { |
yudao-module-bpm/yudao-module-bpm-biz/src/main/java/cn/iocoder/yudao/module/bpm/controller/admin/task/vo/task/BpmTaskRespVO.java
| 1 | package cn.iocoder.yudao.module.bpm.controller.admin.task.vo.task; | 1 | package cn.iocoder.yudao.module.bpm.controller.admin.task.vo.task; |
| 2 | 2 | ||
| 3 | +import cn.iocoder.yudao.framework.common.core.KeyValue; | ||
| 3 | import cn.iocoder.yudao.module.bpm.controller.admin.base.user.UserSimpleBaseVO; | 4 | import cn.iocoder.yudao.module.bpm.controller.admin.base.user.UserSimpleBaseVO; |
| 4 | import com.fasterxml.jackson.annotation.JsonIgnore; | 5 | import com.fasterxml.jackson.annotation.JsonIgnore; |
| 5 | import io.swagger.v3.oas.annotations.media.Schema; | 6 | import io.swagger.v3.oas.annotations.media.Schema; |
| @@ -84,6 +85,9 @@ public class BpmTaskRespVO { | @@ -84,6 +85,9 @@ public class BpmTaskRespVO { | ||
| 84 | @Schema(description = "是否填写审批意见", example = "false") | 85 | @Schema(description = "是否填写审批意见", example = "false") |
| 85 | private Boolean reasonRequire; | 86 | private Boolean reasonRequire; |
| 86 | 87 | ||
| 88 | + @Schema(description = "摘要", example = "[]") | ||
| 89 | + private List<KeyValue<String, String>> summary; | ||
| 90 | + | ||
| 87 | @Data | 91 | @Data |
| 88 | @Schema(description = "流程实例") | 92 | @Schema(description = "流程实例") |
| 89 | public static class ProcessInstance { | 93 | public static class ProcessInstance { |
yudao-module-bpm/yudao-module-bpm-biz/src/main/java/cn/iocoder/yudao/module/bpm/convert/task/BpmProcessInstanceConvert.java
| @@ -2,6 +2,7 @@ package cn.iocoder.yudao.module.bpm.convert.task; | @@ -2,6 +2,7 @@ package cn.iocoder.yudao.module.bpm.convert.task; | ||
| 2 | 2 | ||
| 3 | import cn.hutool.core.collection.CollUtil; | 3 | import cn.hutool.core.collection.CollUtil; |
| 4 | import cn.hutool.core.util.StrUtil; | 4 | import cn.hutool.core.util.StrUtil; |
| 5 | +import cn.iocoder.yudao.framework.common.core.KeyValue; | ||
| 5 | import cn.iocoder.yudao.framework.common.pojo.PageResult; | 6 | import cn.iocoder.yudao.framework.common.pojo.PageResult; |
| 6 | import cn.iocoder.yudao.framework.common.util.collection.MapUtils; | 7 | import cn.iocoder.yudao.framework.common.util.collection.MapUtils; |
| 7 | import cn.iocoder.yudao.framework.common.util.collection.SetUtils; | 8 | import cn.iocoder.yudao.framework.common.util.collection.SetUtils; |
| @@ -58,7 +59,8 @@ public interface BpmProcessInstanceConvert { | @@ -58,7 +59,8 @@ public interface BpmProcessInstanceConvert { | ||
| 58 | Map<String, BpmCategoryDO> categoryMap, | 59 | Map<String, BpmCategoryDO> categoryMap, |
| 59 | Map<String, List<Task>> taskMap, | 60 | Map<String, List<Task>> taskMap, |
| 60 | Map<Long, AdminUserRespDTO> userMap, | 61 | Map<Long, AdminUserRespDTO> userMap, |
| 61 | - Map<Long, DeptRespDTO> deptMap) { | 62 | + Map<Long, DeptRespDTO> deptMap, |
| 63 | + Map<String, BpmProcessDefinitionInfoDO> processDefinitionInfoMap) { | ||
| 62 | PageResult<BpmProcessInstanceRespVO> vpPageResult = BeanUtils.toBean(pageResult, BpmProcessInstanceRespVO.class); | 64 | PageResult<BpmProcessInstanceRespVO> vpPageResult = BeanUtils.toBean(pageResult, BpmProcessInstanceRespVO.class); |
| 63 | for (int i = 0; i < pageResult.getList().size(); i++) { | 65 | for (int i = 0; i < pageResult.getList().size(); i++) { |
| 64 | BpmProcessInstanceRespVO respVO = vpPageResult.getList().get(i); | 66 | BpmProcessInstanceRespVO respVO = vpPageResult.getList().get(i); |
| @@ -76,6 +78,9 @@ public interface BpmProcessInstanceConvert { | @@ -76,6 +78,9 @@ public interface BpmProcessInstanceConvert { | ||
| 76 | MapUtils.findAndThen(deptMap, startUser.getDeptId(), dept -> respVO.getStartUser().setDeptName(dept.getName())); | 78 | MapUtils.findAndThen(deptMap, startUser.getDeptId(), dept -> respVO.getStartUser().setDeptName(dept.getName())); |
| 77 | } | 79 | } |
| 78 | } | 80 | } |
| 81 | + // 摘要 | ||
| 82 | + respVO.setSummary(FlowableUtils.getSummary(processDefinitionInfoMap.get(respVO.getProcessDefinitionId()), | ||
| 83 | + pageResult.getList().get(i).getProcessVariables())); | ||
| 79 | } | 84 | } |
| 80 | return vpPageResult; | 85 | return vpPageResult; |
| 81 | } | 86 | } |
yudao-module-bpm/yudao-module-bpm-biz/src/main/java/cn/iocoder/yudao/module/bpm/convert/task/BpmTaskConvert.java
| @@ -2,6 +2,7 @@ package cn.iocoder.yudao.module.bpm.convert.task; | @@ -2,6 +2,7 @@ package cn.iocoder.yudao.module.bpm.convert.task; | ||
| 2 | 2 | ||
| 3 | import cn.hutool.core.collection.CollUtil; | 3 | import cn.hutool.core.collection.CollUtil; |
| 4 | import cn.hutool.core.map.MapUtil; | 4 | import cn.hutool.core.map.MapUtil; |
| 5 | +import cn.iocoder.yudao.framework.common.core.KeyValue; | ||
| 5 | import cn.iocoder.yudao.framework.common.pojo.PageResult; | 6 | import cn.iocoder.yudao.framework.common.pojo.PageResult; |
| 6 | import cn.iocoder.yudao.framework.common.util.collection.CollectionUtils; | 7 | import cn.iocoder.yudao.framework.common.util.collection.CollectionUtils; |
| 7 | import cn.iocoder.yudao.framework.common.util.number.NumberUtils; | 8 | import cn.iocoder.yudao.framework.common.util.number.NumberUtils; |
| @@ -9,6 +10,7 @@ import cn.iocoder.yudao.framework.common.util.object.BeanUtils; | @@ -9,6 +10,7 @@ import cn.iocoder.yudao.framework.common.util.object.BeanUtils; | ||
| 9 | import cn.iocoder.yudao.module.bpm.controller.admin.base.user.UserSimpleBaseVO; | 10 | import cn.iocoder.yudao.module.bpm.controller.admin.base.user.UserSimpleBaseVO; |
| 10 | import cn.iocoder.yudao.module.bpm.controller.admin.task.vo.task.BpmTaskRespVO; | 11 | import cn.iocoder.yudao.module.bpm.controller.admin.task.vo.task.BpmTaskRespVO; |
| 11 | import cn.iocoder.yudao.module.bpm.dal.dataobject.definition.BpmFormDO; | 12 | import cn.iocoder.yudao.module.bpm.dal.dataobject.definition.BpmFormDO; |
| 13 | +import cn.iocoder.yudao.module.bpm.dal.dataobject.definition.BpmProcessDefinitionInfoDO; | ||
| 12 | import cn.iocoder.yudao.module.bpm.enums.task.BpmTaskStatusEnum; | 14 | import cn.iocoder.yudao.module.bpm.enums.task.BpmTaskStatusEnum; |
| 13 | import cn.iocoder.yudao.module.bpm.framework.flowable.core.util.FlowableUtils; | 15 | import cn.iocoder.yudao.module.bpm.framework.flowable.core.util.FlowableUtils; |
| 14 | import cn.iocoder.yudao.module.bpm.service.message.dto.BpmMessageSendWhenTaskCreatedReqDTO; | 16 | import cn.iocoder.yudao.module.bpm.service.message.dto.BpmMessageSendWhenTaskCreatedReqDTO; |
| @@ -41,7 +43,8 @@ public interface BpmTaskConvert { | @@ -41,7 +43,8 @@ public interface BpmTaskConvert { | ||
| 41 | 43 | ||
| 42 | default PageResult<BpmTaskRespVO> buildTodoTaskPage(PageResult<Task> pageResult, | 44 | default PageResult<BpmTaskRespVO> buildTodoTaskPage(PageResult<Task> pageResult, |
| 43 | Map<String, ProcessInstance> processInstanceMap, | 45 | Map<String, ProcessInstance> processInstanceMap, |
| 44 | - Map<Long, AdminUserRespDTO> userMap) { | 46 | + Map<Long, AdminUserRespDTO> userMap, |
| 47 | + Map<String, BpmProcessDefinitionInfoDO> processDefinitionInfoMap) { | ||
| 45 | return BeanUtils.toBean(pageResult, BpmTaskRespVO.class, taskVO -> { | 48 | return BeanUtils.toBean(pageResult, BpmTaskRespVO.class, taskVO -> { |
| 46 | ProcessInstance processInstance = processInstanceMap.get(taskVO.getProcessInstanceId()); | 49 | ProcessInstance processInstance = processInstanceMap.get(taskVO.getProcessInstanceId()); |
| 47 | if (processInstance == null) { | 50 | if (processInstance == null) { |
| @@ -50,13 +53,17 @@ public interface BpmTaskConvert { | @@ -50,13 +53,17 @@ public interface BpmTaskConvert { | ||
| 50 | taskVO.setProcessInstance(BeanUtils.toBean(processInstance, BpmTaskRespVO.ProcessInstance.class)); | 53 | taskVO.setProcessInstance(BeanUtils.toBean(processInstance, BpmTaskRespVO.ProcessInstance.class)); |
| 51 | AdminUserRespDTO startUser = userMap.get(NumberUtils.parseLong(processInstance.getStartUserId())); | 54 | AdminUserRespDTO startUser = userMap.get(NumberUtils.parseLong(processInstance.getStartUserId())); |
| 52 | taskVO.getProcessInstance().setStartUser(BeanUtils.toBean(startUser, UserSimpleBaseVO.class)); | 55 | taskVO.getProcessInstance().setStartUser(BeanUtils.toBean(startUser, UserSimpleBaseVO.class)); |
| 56 | + // 摘要 | ||
| 57 | + taskVO.setSummary(FlowableUtils.getSummary(processDefinitionInfoMap.get(processInstance.getProcessDefinitionId()), | ||
| 58 | + processInstance.getProcessVariables())); | ||
| 53 | }); | 59 | }); |
| 54 | } | 60 | } |
| 55 | 61 | ||
| 56 | default PageResult<BpmTaskRespVO> buildTaskPage(PageResult<HistoricTaskInstance> pageResult, | 62 | default PageResult<BpmTaskRespVO> buildTaskPage(PageResult<HistoricTaskInstance> pageResult, |
| 57 | Map<String, HistoricProcessInstance> processInstanceMap, | 63 | Map<String, HistoricProcessInstance> processInstanceMap, |
| 58 | Map<Long, AdminUserRespDTO> userMap, | 64 | Map<Long, AdminUserRespDTO> userMap, |
| 59 | - Map<Long, DeptRespDTO> deptMap) { | 65 | + Map<Long, DeptRespDTO> deptMap, |
| 66 | + Map<String, BpmProcessDefinitionInfoDO> processDefinitionInfoMap) { | ||
| 60 | List<BpmTaskRespVO> taskVOList = CollectionUtils.convertList(pageResult.getList(), task -> { | 67 | List<BpmTaskRespVO> taskVOList = CollectionUtils.convertList(pageResult.getList(), task -> { |
| 61 | BpmTaskRespVO taskVO = BeanUtils.toBean(task, BpmTaskRespVO.class); | 68 | BpmTaskRespVO taskVO = BeanUtils.toBean(task, BpmTaskRespVO.class); |
| 62 | taskVO.setStatus(FlowableUtils.getTaskStatus(task)).setReason(FlowableUtils.getTaskReason(task)); | 69 | taskVO.setStatus(FlowableUtils.getTaskStatus(task)).setReason(FlowableUtils.getTaskReason(task)); |
| @@ -72,6 +79,9 @@ public interface BpmTaskConvert { | @@ -72,6 +79,9 @@ public interface BpmTaskConvert { | ||
| 72 | AdminUserRespDTO startUser = userMap.get(NumberUtils.parseLong(processInstance.getStartUserId())); | 79 | AdminUserRespDTO startUser = userMap.get(NumberUtils.parseLong(processInstance.getStartUserId())); |
| 73 | taskVO.setProcessInstance(BeanUtils.toBean(processInstance, BpmTaskRespVO.ProcessInstance.class)); | 80 | taskVO.setProcessInstance(BeanUtils.toBean(processInstance, BpmTaskRespVO.ProcessInstance.class)); |
| 74 | taskVO.getProcessInstance().setStartUser(BeanUtils.toBean(startUser, UserSimpleBaseVO.class)); | 81 | taskVO.getProcessInstance().setStartUser(BeanUtils.toBean(startUser, UserSimpleBaseVO.class)); |
| 82 | + // 摘要 | ||
| 83 | + taskVO.setSummary(FlowableUtils.getSummary(processDefinitionInfoMap.get(processInstance.getProcessDefinitionId()), | ||
| 84 | + processInstance.getProcessVariables())); | ||
| 75 | } | 85 | } |
| 76 | return taskVO; | 86 | return taskVO; |
| 77 | }); | 87 | }); |
yudao-module-bpm/yudao-module-bpm-biz/src/main/java/cn/iocoder/yudao/module/bpm/dal/dataobject/definition/BpmProcessDefinitionInfoDO.java
| @@ -174,6 +174,12 @@ public class BpmProcessDefinitionInfoDO extends BaseDO { | @@ -174,6 +174,12 @@ public class BpmProcessDefinitionInfoDO extends BaseDO { | ||
| 174 | * 标题设置 | 174 | * 标题设置 |
| 175 | */ | 175 | */ |
| 176 | @TableField(typeHandler = JacksonTypeHandler.class) | 176 | @TableField(typeHandler = JacksonTypeHandler.class) |
| 177 | - private BpmModelMetaInfoVO.CustomTitleSetting customTitleSetting; | 177 | + private BpmModelMetaInfoVO.TitleSetting titleSetting; |
| 178 | + | ||
| 179 | + /** | ||
| 180 | + * 摘要设置 | ||
| 181 | + */ | ||
| 182 | + @TableField(typeHandler = JacksonTypeHandler.class) | ||
| 183 | + private BpmModelMetaInfoVO.SummarySetting summarySetting; | ||
| 178 | 184 | ||
| 179 | } | 185 | } |
yudao-module-bpm/yudao-module-bpm-biz/src/main/java/cn/iocoder/yudao/module/bpm/framework/flowable/core/util/FlowableUtils.java
| @@ -2,8 +2,13 @@ package cn.iocoder.yudao.module.bpm.framework.flowable.core.util; | @@ -2,8 +2,13 @@ package cn.iocoder.yudao.module.bpm.framework.flowable.core.util; | ||
| 2 | 2 | ||
| 3 | import cn.hutool.core.util.ObjectUtil; | 3 | import cn.hutool.core.util.ObjectUtil; |
| 4 | import cn.hutool.extra.spring.SpringUtil; | 4 | import cn.hutool.extra.spring.SpringUtil; |
| 5 | +import cn.iocoder.yudao.framework.common.core.KeyValue; | ||
| 6 | +import cn.iocoder.yudao.framework.common.util.json.JsonUtils; | ||
| 5 | import cn.iocoder.yudao.framework.tenant.core.context.TenantContextHolder; | 7 | import cn.iocoder.yudao.framework.tenant.core.context.TenantContextHolder; |
| 6 | import cn.iocoder.yudao.framework.tenant.core.util.TenantUtils; | 8 | import cn.iocoder.yudao.framework.tenant.core.util.TenantUtils; |
| 9 | +import cn.iocoder.yudao.module.bpm.controller.admin.definition.vo.model.BpmFormFieldVO; | ||
| 10 | +import cn.iocoder.yudao.module.bpm.dal.dataobject.definition.BpmProcessDefinitionInfoDO; | ||
| 11 | +import cn.iocoder.yudao.module.bpm.enums.definition.BpmModelFormTypeEnum; | ||
| 7 | import cn.iocoder.yudao.module.bpm.framework.flowable.core.enums.BpmnVariableConstants; | 12 | import cn.iocoder.yudao.module.bpm.framework.flowable.core.enums.BpmnVariableConstants; |
| 8 | import lombok.SneakyThrows; | 13 | import lombok.SneakyThrows; |
| 9 | import org.flowable.common.engine.api.delegate.Expression; | 14 | import org.flowable.common.engine.api.delegate.Expression; |
| @@ -19,10 +24,7 @@ import org.flowable.engine.impl.util.CommandContextUtil; | @@ -19,10 +24,7 @@ import org.flowable.engine.impl.util.CommandContextUtil; | ||
| 19 | import org.flowable.engine.runtime.ProcessInstance; | 24 | import org.flowable.engine.runtime.ProcessInstance; |
| 20 | import org.flowable.task.api.TaskInfo; | 25 | import org.flowable.task.api.TaskInfo; |
| 21 | 26 | ||
| 22 | -import java.util.HashMap; | ||
| 23 | -import java.util.List; | ||
| 24 | -import java.util.Map; | ||
| 25 | -import java.util.Objects; | 27 | +import java.util.*; |
| 26 | import java.util.concurrent.Callable; | 28 | import java.util.concurrent.Callable; |
| 27 | 29 | ||
| 28 | /** | 30 | /** |
| @@ -277,4 +279,43 @@ public class FlowableUtils { | @@ -277,4 +279,43 @@ public class FlowableUtils { | ||
| 277 | return getExpressionValue(variableContainer, expressionString); | 279 | return getExpressionValue(variableContainer, expressionString); |
| 278 | } | 280 | } |
| 279 | 281 | ||
| 282 | + public static List<KeyValue<String, String>> getSummary(BpmProcessDefinitionInfoDO processDefinitionInfo, | ||
| 283 | + Map<String, Object> processVariables) { | ||
| 284 | + if (ObjectUtil.isNotNull(processDefinitionInfo) | ||
| 285 | + && BpmModelFormTypeEnum.NORMAL.getType().equals(processDefinitionInfo.getFormType())) { | ||
| 286 | + List<KeyValue<String, String>> summaryList = new ArrayList<>(); | ||
| 287 | + Map<String, BpmFormFieldVO> formFieldsMap = new HashMap<>(); | ||
| 288 | + processDefinitionInfo.getFormFields().forEach(formFieldStr -> { | ||
| 289 | + BpmFormFieldVO formField = JsonUtils.parseObject(formFieldStr, BpmFormFieldVO.class); | ||
| 290 | + if (formField != null) { | ||
| 291 | + formFieldsMap.put(formField.getField(), formField); | ||
| 292 | + } | ||
| 293 | + }); | ||
| 294 | + if (ObjectUtil.isNotNull(processDefinitionInfo.getSummarySetting()) | ||
| 295 | + && Boolean.TRUE.equals(processDefinitionInfo.getSummarySetting().getEnable())) { | ||
| 296 | + for (String item : processDefinitionInfo.getSummarySetting().getSummary()) { | ||
| 297 | + BpmFormFieldVO formField = formFieldsMap.get(item); | ||
| 298 | + if (formField != null) { | ||
| 299 | + summaryList.add(new KeyValue<>(formField.getTitle(), | ||
| 300 | + processVariables.getOrDefault(item, "").toString())); | ||
| 301 | + } | ||
| 302 | + } | ||
| 303 | + } else { | ||
| 304 | + // 默认展示前三个 | ||
| 305 | + int j = 0; | ||
| 306 | + for (Map.Entry<String, BpmFormFieldVO> entry : formFieldsMap.entrySet()) { | ||
| 307 | + BpmFormFieldVO formField = entry.getValue(); | ||
| 308 | + if (j > 2) { | ||
| 309 | + break; | ||
| 310 | + } | ||
| 311 | + summaryList.add(new KeyValue<>(formField.getTitle(), | ||
| 312 | + processVariables.getOrDefault(formField.getField(), "").toString())); | ||
| 313 | + j++; | ||
| 314 | + } | ||
| 315 | + } | ||
| 316 | + return summaryList; | ||
| 317 | + } | ||
| 318 | + return null; | ||
| 319 | + } | ||
| 320 | + | ||
| 280 | } | 321 | } |
yudao-module-bpm/yudao-module-bpm-biz/src/main/java/cn/iocoder/yudao/module/bpm/service/task/BpmProcessInstanceServiceImpl.java
| @@ -128,7 +128,7 @@ public class BpmProcessInstanceServiceImpl implements BpmProcessInstanceService | @@ -128,7 +128,7 @@ public class BpmProcessInstanceServiceImpl implements BpmProcessInstanceService | ||
| 128 | 128 | ||
| 129 | @Override | 129 | @Override |
| 130 | public List<ProcessInstance> getProcessInstances(Set<String> ids) { | 130 | public List<ProcessInstance> getProcessInstances(Set<String> ids) { |
| 131 | - return runtimeService.createProcessInstanceQuery().processInstanceIds(ids).list(); | 131 | + return runtimeService.createProcessInstanceQuery().processInstanceIds(ids).includeProcessVariables().list(); |
| 132 | } | 132 | } |
| 133 | 133 | ||
| 134 | @Override | 134 | @Override |
| @@ -138,7 +138,7 @@ public class BpmProcessInstanceServiceImpl implements BpmProcessInstanceService | @@ -138,7 +138,7 @@ public class BpmProcessInstanceServiceImpl implements BpmProcessInstanceService | ||
| 138 | 138 | ||
| 139 | @Override | 139 | @Override |
| 140 | public List<HistoricProcessInstance> getHistoricProcessInstances(Set<String> ids) { | 140 | public List<HistoricProcessInstance> getHistoricProcessInstances(Set<String> ids) { |
| 141 | - return historyService.createHistoricProcessInstanceQuery().processInstanceIds(ids).list(); | 141 | + return historyService.createHistoricProcessInstanceQuery().processInstanceIds(ids).includeProcessVariables().list(); |
| 142 | } | 142 | } |
| 143 | 143 | ||
| 144 | @Override | 144 | @Override |
| @@ -618,15 +618,14 @@ public class BpmProcessInstanceServiceImpl implements BpmProcessInstanceService | @@ -618,15 +618,14 @@ public class BpmProcessInstanceServiceImpl implements BpmProcessInstanceService | ||
| 618 | processInstanceBuilder.predefineProcessInstanceId(processIdRedisDAO.generate(processIdRule)); | 618 | processInstanceBuilder.predefineProcessInstanceId(processIdRedisDAO.generate(processIdRule)); |
| 619 | } | 619 | } |
| 620 | // 3.2 流程名称 | 620 | // 3.2 流程名称 |
| 621 | - BpmModelMetaInfoVO.CustomTitleSetting customTitleSetting = processDefinitionInfo.getCustomTitleSetting(); | ||
| 622 | - if (customTitleSetting != null && Boolean.TRUE.equals(customTitleSetting.getEnable())) { | 621 | + BpmModelMetaInfoVO.TitleSetting titleSetting = processDefinitionInfo.getTitleSetting(); |
| 622 | + if (titleSetting != null && Boolean.TRUE.equals(titleSetting.getEnable())) { | ||
| 623 | AdminUserRespDTO user = adminUserApi.getUser(userId); | 623 | AdminUserRespDTO user = adminUserApi.getUser(userId); |
| 624 | - // TODO @lesan:new HashMap 会更好哈。clone 感觉反射,不一定合适。 | ||
| 625 | - Map<String, Object> cloneVariables = ObjectUtil.clone(variables); | 624 | + Map<String, Object> cloneVariables = new HashMap<>(variables); |
| 626 | cloneVariables.put(BpmnVariableConstants.PROCESS_INSTANCE_VARIABLE_START_USER_ID, user.getNickname()); | 625 | cloneVariables.put(BpmnVariableConstants.PROCESS_INSTANCE_VARIABLE_START_USER_ID, user.getNickname()); |
| 627 | cloneVariables.put(BpmnVariableConstants.PROCESS_START_TIME, DateUtil.now()); | 626 | cloneVariables.put(BpmnVariableConstants.PROCESS_START_TIME, DateUtil.now()); |
| 628 | cloneVariables.put(BpmnVariableConstants.PROCESS_DEFINITION_NAME, definition.getName().trim()); | 627 | cloneVariables.put(BpmnVariableConstants.PROCESS_DEFINITION_NAME, definition.getName().trim()); |
| 629 | - processInstanceBuilder.name(StrUtil.format(customTitleSetting.getTitle(), cloneVariables)); | 628 | + processInstanceBuilder.name(StrUtil.format(titleSetting.getTitle(), cloneVariables)); |
| 630 | } else { | 629 | } else { |
| 631 | processInstanceBuilder.name(definition.getName().trim()); | 630 | processInstanceBuilder.name(definition.getName().trim()); |
| 632 | } | 631 | } |