From 6f5a368c86c3818b968ad1055f5215f86c989084 Mon Sep 17 00:00:00 2001 From: gssong <1742057357@qq.com> Date: 星期四, 21 三月 2024 21:02:16 +0800 Subject: [PATCH] add 添加流程表单配置 --- ruoyi-modules/ruoyi-workflow/src/main/resources/mapper/workflow/ActTaskMapper.xml | 4 ruoyi-modules/ruoyi-workflow/src/main/java/org/dromara/workflow/controller/WfFormDefinitionController.java | 66 +++++++ ruoyi-modules/ruoyi-workflow/src/main/java/org/dromara/workflow/domain/WfFormDefinition.java | 51 +++++ ruoyi-modules/ruoyi-workflow/src/main/java/org/dromara/workflow/common/constant/FlowConstant.java | 10 + ruoyi-modules/ruoyi-workflow/src/main/java/org/dromara/workflow/utils/WorkflowUtils.java | 33 +++ ruoyi-modules/ruoyi-workflow/src/main/java/org/dromara/workflow/domain/vo/WfFormDefinitionVo.java | 59 ++++++ ruoyi-modules/ruoyi-workflow/src/main/java/org/dromara/workflow/mapper/WfFormDefinitionMapper.java | 15 + ruoyi-modules/ruoyi-workflow/src/main/java/org/dromara/workflow/service/impl/ActTaskServiceImpl.java | 20 + script/sql/flowable.sql | 20 ++ ruoyi-modules/ruoyi-workflow/src/main/java/org/dromara/workflow/service/IWfFormDefinitionService.java | 49 +++++ ruoyi-modules/ruoyi-workflow/src/main/java/org/dromara/workflow/service/impl/TestLeaveServiceImpl.java | 4 ruoyi-modules/ruoyi-workflow/src/main/java/org/dromara/workflow/domain/bo/WfFormDefinitionBo.java | 53 +++++ ruoyi-modules/ruoyi-workflow/src/main/java/org/dromara/workflow/service/impl/WfFormDefinitionServiceImpl.java | 66 +++++++ ruoyi-modules/ruoyi-workflow/src/main/java/org/dromara/workflow/domain/vo/ProcessDefinitionVo.java | 5 ruoyi-modules/ruoyi-workflow/src/main/java/org/dromara/workflow/domain/vo/TaskVo.java | 10 + ruoyi-modules/ruoyi-workflow/src/main/java/org/dromara/workflow/service/impl/ActProcessDefinitionServiceImpl.java | 52 +++-- ruoyi-modules/ruoyi-workflow/src/main/resources/mapper/workflow/WfFormDefinitionMapper.xml | 7 17 files changed, 497 insertions(+), 27 deletions(-) diff --git a/ruoyi-modules/ruoyi-workflow/src/main/java/org/dromara/workflow/common/constant/FlowConstant.java b/ruoyi-modules/ruoyi-workflow/src/main/java/org/dromara/workflow/common/constant/FlowConstant.java index 77996ae..a4230b6 100644 --- a/ruoyi-modules/ruoyi-workflow/src/main/java/org/dromara/workflow/common/constant/FlowConstant.java +++ b/ruoyi-modules/ruoyi-workflow/src/main/java/org/dromara/workflow/common/constant/FlowConstant.java @@ -76,6 +76,11 @@ String PROCESS_INSTANCE_VO = "processInstanceVo"; /** + * 娴佺▼琛ㄥ崟閰嶇疆瀵硅薄 + */ + String WF_FORM_DEFINITION_VO = "wfFormDefinitionVo"; + + /** * 娴佺▼鍙戣捣浜� */ String INITIATOR = "initiator"; @@ -91,6 +96,11 @@ String BUSINESS_KEY = "businessKey"; /** + * 娴佺▼瀹氫箟id + */ + String PROCESS_DEFINITION_ID = "processDefinitionId"; + + /** * 寮�鍚烦杩囪〃杈惧紡鍙橀噺 */ String FLOWABLE_SKIP_EXPRESSION_ENABLED = "_FLOWABLE_SKIP_EXPRESSION_ENABLED"; diff --git a/ruoyi-modules/ruoyi-workflow/src/main/java/org/dromara/workflow/controller/WfFormDefinitionController.java b/ruoyi-modules/ruoyi-workflow/src/main/java/org/dromara/workflow/controller/WfFormDefinitionController.java new file mode 100644 index 0000000..0d8952e --- /dev/null +++ b/ruoyi-modules/ruoyi-workflow/src/main/java/org/dromara/workflow/controller/WfFormDefinitionController.java @@ -0,0 +1,66 @@ +package org.dromara.workflow.controller; + +import java.util.List; + +import lombok.RequiredArgsConstructor; +import jakarta.validation.constraints.*; +import org.springframework.web.bind.annotation.*; +import org.springframework.validation.annotation.Validated; +import org.dromara.common.idempotent.annotation.RepeatSubmit; +import org.dromara.common.log.annotation.Log; +import org.dromara.common.web.core.BaseController; +import org.dromara.common.core.domain.R; +import org.dromara.common.core.validate.AddGroup; +import org.dromara.common.log.enums.BusinessType; +import org.dromara.workflow.domain.vo.WfFormDefinitionVo; +import org.dromara.workflow.domain.bo.WfFormDefinitionBo; +import org.dromara.workflow.service.IWfFormDefinitionService; + +/** + * 琛ㄥ崟閰嶇疆 + * + * @author gssong + * @date 2024-03-18 + */ +@Validated +@RequiredArgsConstructor +@RestController +@RequestMapping("/workflow/formDefinition") +public class WfFormDefinitionController extends BaseController { + + private final IWfFormDefinitionService wfFormDefinitionService; + + + /** + * 鑾峰彇琛ㄥ崟閰嶇疆璇︾粏淇℃伅 + * + * @param definitionId 涓婚敭 + */ + @GetMapping("/getByDefId/{definitionId}") + public R<WfFormDefinitionVo> getByDefId(@NotBlank(message = "娴佺▼瀹氫箟ID涓嶈兘涓虹┖") + @PathVariable String definitionId) { + return R.ok(wfFormDefinitionService.getByDefId(definitionId)); + } + + /** + * 鏂板琛ㄥ崟閰嶇疆 + */ + @Log(title = "琛ㄥ崟閰嶇疆", businessType = BusinessType.INSERT) + @RepeatSubmit() + @PostMapping("/saveOrUpdate") + public R<Void> saveOrUpdate(@Validated(AddGroup.class) @RequestBody WfFormDefinitionBo bo) { + return toAjax(wfFormDefinitionService.saveOrUpdate(bo)); + } + + /** + * 鍒犻櫎琛ㄥ崟閰嶇疆 + * + * @param ids 涓婚敭涓� + */ + @Log(title = "琛ㄥ崟閰嶇疆", businessType = BusinessType.DELETE) + @DeleteMapping("/{ids}") + public R<Void> remove(@NotEmpty(message = "涓婚敭涓嶈兘涓虹┖") + @PathVariable Long[] ids) { + return toAjax(wfFormDefinitionService.deleteByIds(List.of(ids))); + } +} diff --git a/ruoyi-modules/ruoyi-workflow/src/main/java/org/dromara/workflow/domain/WfFormDefinition.java b/ruoyi-modules/ruoyi-workflow/src/main/java/org/dromara/workflow/domain/WfFormDefinition.java new file mode 100644 index 0000000..e0e975c --- /dev/null +++ b/ruoyi-modules/ruoyi-workflow/src/main/java/org/dromara/workflow/domain/WfFormDefinition.java @@ -0,0 +1,51 @@ +package org.dromara.workflow.domain; + +import org.dromara.common.mybatis.core.domain.BaseEntity; +import com.baomidou.mybatisplus.annotation.*; +import lombok.Data; +import lombok.EqualsAndHashCode; + +import java.io.Serial; + +/** + * 琛ㄥ崟閰嶇疆瀵硅薄 wf_form_definition + * + * @author gssong + * @date 2024-03-18 + */ +@Data +@EqualsAndHashCode(callSuper = true) +@TableName("wf_form_definition") +public class WfFormDefinition extends BaseEntity { + + @Serial + private static final long serialVersionUID = 1L; + + /** + * 涓婚敭 + */ + @TableId(value = "id") + private Long id; + + /** + * 璺敱鍦板潃 + */ + private String path; + + /** + * 娴佺▼瀹氫箟ID + */ + private String definitionId; + + /** + * 娴佺▼KEY + */ + private String processKey; + + /** + * 澶囨敞 + */ + private String remark; + + +} diff --git a/ruoyi-modules/ruoyi-workflow/src/main/java/org/dromara/workflow/domain/bo/WfFormDefinitionBo.java b/ruoyi-modules/ruoyi-workflow/src/main/java/org/dromara/workflow/domain/bo/WfFormDefinitionBo.java new file mode 100644 index 0000000..b32fe77 --- /dev/null +++ b/ruoyi-modules/ruoyi-workflow/src/main/java/org/dromara/workflow/domain/bo/WfFormDefinitionBo.java @@ -0,0 +1,53 @@ +package org.dromara.workflow.domain.bo; + +import org.dromara.workflow.domain.WfFormDefinition; +import org.dromara.common.mybatis.core.domain.BaseEntity; +import org.dromara.common.core.validate.AddGroup; +import org.dromara.common.core.validate.EditGroup; +import io.github.linpeilie.annotations.AutoMapper; +import lombok.Data; +import lombok.EqualsAndHashCode; +import jakarta.validation.constraints.*; + +/** + * 琛ㄥ崟閰嶇疆涓氬姟瀵硅薄 wf_form_definition + * + * @author gssong + * @date 2024-03-18 + */ +@Data +@EqualsAndHashCode(callSuper = true) +@AutoMapper(target = WfFormDefinition.class, reverseConvertGenerate = false) +public class WfFormDefinitionBo extends BaseEntity { + + /** + * 涓婚敭 + */ + @NotNull(message = "涓婚敭涓嶈兘涓虹┖", groups = {EditGroup.class}) + private Long id; + + /** + * 璺敱鍦板潃 + */ + @NotBlank(message = "璺敱鍦板潃涓嶈兘涓虹┖", groups = {AddGroup.class}) + private String path; + + /** + * 娴佺▼瀹氫箟ID + */ + @NotBlank(message = "娴佺▼瀹氫箟ID涓嶈兘涓虹┖", groups = {AddGroup.class}) + private String definitionId; + + /** + * 娴佺▼KEY + */ + @NotBlank(message = "娴佺▼KEY涓嶈兘涓虹┖", groups = {AddGroup.class}) + private String processKey; + + /** + * 澶囨敞 + */ + private String remark; + + +} diff --git a/ruoyi-modules/ruoyi-workflow/src/main/java/org/dromara/workflow/domain/vo/ProcessDefinitionVo.java b/ruoyi-modules/ruoyi-workflow/src/main/java/org/dromara/workflow/domain/vo/ProcessDefinitionVo.java index 52c201d..624f3ee 100644 --- a/ruoyi-modules/ruoyi-workflow/src/main/java/org/dromara/workflow/domain/vo/ProcessDefinitionVo.java +++ b/ruoyi-modules/ruoyi-workflow/src/main/java/org/dromara/workflow/domain/vo/ProcessDefinitionVo.java @@ -62,4 +62,9 @@ */ private Date deploymentTime; + /** + * 琛ㄥ崟閰嶇疆 + */ + private WfFormDefinitionVo wfFormDefinitionVo; + } diff --git a/ruoyi-modules/ruoyi-workflow/src/main/java/org/dromara/workflow/domain/vo/TaskVo.java b/ruoyi-modules/ruoyi-workflow/src/main/java/org/dromara/workflow/domain/vo/TaskVo.java index 0210b57..dc65e52 100644 --- a/ruoyi-modules/ruoyi-workflow/src/main/java/org/dromara/workflow/domain/vo/TaskVo.java +++ b/ruoyi-modules/ruoyi-workflow/src/main/java/org/dromara/workflow/domain/vo/TaskVo.java @@ -150,4 +150,14 @@ * 鏄惁浼氱 */ private Boolean multiInstance; + + /** + * 涓氬姟id + */ + private String businessKey; + + /** + * 琛ㄥ崟閰嶇疆 + */ + private WfFormDefinitionVo wfFormDefinitionVo; } diff --git a/ruoyi-modules/ruoyi-workflow/src/main/java/org/dromara/workflow/domain/vo/WfFormDefinitionVo.java b/ruoyi-modules/ruoyi-workflow/src/main/java/org/dromara/workflow/domain/vo/WfFormDefinitionVo.java new file mode 100644 index 0000000..129eacc --- /dev/null +++ b/ruoyi-modules/ruoyi-workflow/src/main/java/org/dromara/workflow/domain/vo/WfFormDefinitionVo.java @@ -0,0 +1,59 @@ +package org.dromara.workflow.domain.vo; + +import org.dromara.workflow.domain.WfFormDefinition; +import com.alibaba.excel.annotation.ExcelIgnoreUnannotated; +import com.alibaba.excel.annotation.ExcelProperty; +import io.github.linpeilie.annotations.AutoMapper; +import lombok.Data; + +import java.io.Serial; +import java.io.Serializable; + + + +/** + * 琛ㄥ崟閰嶇疆瑙嗗浘瀵硅薄 wf_form_definition + * + * @author gssong + * @date 2024-03-18 + */ +@Data +@ExcelIgnoreUnannotated +@AutoMapper(target = WfFormDefinition.class) +public class WfFormDefinitionVo implements Serializable { + + @Serial + private static final long serialVersionUID = 1L; + + /** + * 涓婚敭 + */ + @ExcelProperty(value = "涓婚敭") + private Long id; + + /** + * 璺敱鍦板潃 + */ + @ExcelProperty(value = "璺敱鍦板潃") + private String path; + + /** + * 娴佺▼瀹氫箟ID + */ + @ExcelProperty(value = "娴佺▼瀹氫箟ID") + private String definitionId; + + /** + * 娴佺▼KEY + */ + @ExcelProperty(value = "娴佺▼KEY") + private String processKey; + + /** + * 澶囨敞 + */ + @ExcelProperty(value = "澶囨敞") + private String remark; + + +} diff --git a/ruoyi-modules/ruoyi-workflow/src/main/java/org/dromara/workflow/mapper/WfFormDefinitionMapper.java b/ruoyi-modules/ruoyi-workflow/src/main/java/org/dromara/workflow/mapper/WfFormDefinitionMapper.java new file mode 100644 index 0000000..4262532 --- /dev/null +++ b/ruoyi-modules/ruoyi-workflow/src/main/java/org/dromara/workflow/mapper/WfFormDefinitionMapper.java @@ -0,0 +1,15 @@ +package org.dromara.workflow.mapper; + +import org.dromara.workflow.domain.WfFormDefinition; +import org.dromara.workflow.domain.vo.WfFormDefinitionVo; +import org.dromara.common.mybatis.core.mapper.BaseMapperPlus; + +/** + * 琛ㄥ崟閰嶇疆Mapper鎺ュ彛 + * + * @author gssong + * @date 2024-03-18 + */ +public interface WfFormDefinitionMapper extends BaseMapperPlus<WfFormDefinition, WfFormDefinitionVo> { + +} diff --git a/ruoyi-modules/ruoyi-workflow/src/main/java/org/dromara/workflow/service/IWfFormDefinitionService.java b/ruoyi-modules/ruoyi-workflow/src/main/java/org/dromara/workflow/service/IWfFormDefinitionService.java new file mode 100644 index 0000000..683fc73 --- /dev/null +++ b/ruoyi-modules/ruoyi-workflow/src/main/java/org/dromara/workflow/service/IWfFormDefinitionService.java @@ -0,0 +1,49 @@ +package org.dromara.workflow.service; + +import org.dromara.workflow.domain.vo.WfFormDefinitionVo; +import org.dromara.workflow.domain.bo.WfFormDefinitionBo; + +import java.util.Collection; +import java.util.List; + +/** + * 琛ㄥ崟閰嶇疆Service鎺ュ彛 + * + * @author gssong + * @date 2024-03-18 + */ +public interface IWfFormDefinitionService { + + /** + * 鏌ヨ琛ㄥ崟閰嶇疆 + * + * @param definitionId 娴佺▼瀹氫箟id + * @return 缁撴灉 + */ + WfFormDefinitionVo getByDefId(String definitionId); + + /** + * 鏌ヨ琛ㄥ崟閰嶇疆鍒楄〃 + * + * @param definitionIds 娴佺▼瀹氫箟id + * @return 缁撴灉 + */ + List<WfFormDefinitionVo> queryList(List<String> definitionIds); + + + /** + * 鏂板琛ㄥ崟閰嶇疆 + * + * @param bo 鍙傛暟 + * @return 缁撴灉 + */ + Boolean saveOrUpdate(WfFormDefinitionBo bo); + + /** + * 鍒犻櫎 + * + * @param ids id + * @return 缁撴灉 + */ + Boolean deleteByIds(Collection<Long> ids); +} diff --git a/ruoyi-modules/ruoyi-workflow/src/main/java/org/dromara/workflow/service/impl/ActProcessDefinitionServiceImpl.java b/ruoyi-modules/ruoyi-workflow/src/main/java/org/dromara/workflow/service/impl/ActProcessDefinitionServiceImpl.java index cc82e00..28c3520 100644 --- a/ruoyi-modules/ruoyi-workflow/src/main/java/org/dromara/workflow/service/impl/ActProcessDefinitionServiceImpl.java +++ b/ruoyi-modules/ruoyi-workflow/src/main/java/org/dromara/workflow/service/impl/ActProcessDefinitionServiceImpl.java @@ -20,8 +20,10 @@ import org.dromara.workflow.domain.WfCategory; import org.dromara.workflow.domain.bo.ProcessDefinitionBo; import org.dromara.workflow.domain.vo.ProcessDefinitionVo; +import org.dromara.workflow.domain.vo.WfFormDefinitionVo; import org.dromara.workflow.service.IActProcessDefinitionService; import org.dromara.workflow.service.IWfCategoryService; +import org.dromara.workflow.service.IWfFormDefinitionService; import org.dromara.workflow.utils.QueryUtils; import org.flowable.engine.ProcessMigrationService; import org.flowable.engine.RepositoryService; @@ -37,7 +39,6 @@ import java.nio.charset.StandardCharsets; import java.util.ArrayList; import java.util.List; -import java.util.stream.Collectors; import java.util.zip.ZipEntry; import java.util.zip.ZipInputStream; @@ -53,6 +54,7 @@ private final RepositoryService repositoryService; private final ProcessMigrationService processMigrationService; private final IWfCategoryService wfCategoryService; + private final IWfFormDefinitionService iWfFormDefinitionService; /** * 鍒嗛〉鏌ヨ @@ -81,15 +83,22 @@ List<String> deploymentIds = StreamUtils.toList(definitionList, ProcessDefinition::getDeploymentId); deploymentList = QueryUtils.deploymentQuery(deploymentIds).list(); } - for (ProcessDefinition processDefinition : definitionList) { - ProcessDefinitionVo processDefinitionVo = BeanUtil.toBean(processDefinition, ProcessDefinitionVo.class); - if (CollUtil.isNotEmpty(deploymentList)) { - // 閮ㄧ讲鏃堕棿 - deploymentList.stream().filter(e -> e.getId().equals(processDefinition.getDeploymentId())).findFirst().ifPresent(e -> { - processDefinitionVo.setDeploymentTime(e.getDeploymentTime()); - }); + if (CollUtil.isNotEmpty(definitionList)) { + List<String> ids = StreamUtils.toList(definitionList, ProcessDefinition::getId); + List<WfFormDefinitionVo> wfFormDefinitionVos = iWfFormDefinitionService.queryList(ids); + for (ProcessDefinition processDefinition : definitionList) { + ProcessDefinitionVo processDefinitionVo = BeanUtil.toBean(processDefinition, ProcessDefinitionVo.class); + if (CollUtil.isNotEmpty(deploymentList)) { + // 閮ㄧ讲鏃堕棿 + deploymentList.stream().filter(e -> e.getId().equals(processDefinition.getDeploymentId())).findFirst().ifPresent(e -> { + processDefinitionVo.setDeploymentTime(e.getDeploymentTime()); + }); + } + if (CollUtil.isNotEmpty(wfFormDefinitionVos)) { + wfFormDefinitionVos.stream().filter(e -> e.getDefinitionId().equals(processDefinition.getId())).findFirst().ifPresent(processDefinitionVo::setWfFormDefinitionVo); + } + processDefinitionVoList.add(processDefinitionVo); } - processDefinitionVoList.add(processDefinitionVo); } // 鎬昏褰曟暟 long total = query.count(); @@ -109,18 +118,25 @@ List<ProcessDefinition> definitionList = query.processDefinitionKey(key).list(); List<Deployment> deploymentList = null; if (CollUtil.isNotEmpty(definitionList)) { - List<String> deploymentIds = definitionList.stream().map(ProcessDefinition::getDeploymentId).collect(Collectors.toList()); + List<String> deploymentIds = StreamUtils.toList(definitionList, ProcessDefinition::getDeploymentId); deploymentList = QueryUtils.deploymentQuery(deploymentIds).list(); } - for (ProcessDefinition processDefinition : definitionList) { - ProcessDefinitionVo processDefinitionVo = BeanUtil.toBean(processDefinition, ProcessDefinitionVo.class); - if (CollUtil.isNotEmpty(deploymentList)) { - // 閮ㄧ讲鏃堕棿 - deploymentList.stream().filter(e -> e.getId().equals(processDefinition.getDeploymentId())).findFirst().ifPresent(e -> { - processDefinitionVo.setDeploymentTime(e.getDeploymentTime()); - }); + if (CollUtil.isNotEmpty(definitionList)) { + List<String> ids = StreamUtils.toList(definitionList, ProcessDefinition::getId); + List<WfFormDefinitionVo> wfFormDefinitionVos = iWfFormDefinitionService.queryList(ids); + for (ProcessDefinition processDefinition : definitionList) { + ProcessDefinitionVo processDefinitionVo = BeanUtil.toBean(processDefinition, ProcessDefinitionVo.class); + if (CollUtil.isNotEmpty(deploymentList)) { + // 閮ㄧ讲鏃堕棿 + deploymentList.stream().filter(e -> e.getId().equals(processDefinition.getDeploymentId())).findFirst().ifPresent(e -> { + processDefinitionVo.setDeploymentTime(e.getDeploymentTime()); + }); + if (CollUtil.isNotEmpty(wfFormDefinitionVos)) { + wfFormDefinitionVos.stream().filter(e -> e.getDefinitionId().equals(processDefinition.getId())).findFirst().ifPresent(processDefinitionVo::setWfFormDefinitionVo); + } + } + processDefinitionVoList.add(processDefinitionVo); } - processDefinitionVoList.add(processDefinitionVo); } return CollectionUtil.reverse(processDefinitionVoList); } diff --git a/ruoyi-modules/ruoyi-workflow/src/main/java/org/dromara/workflow/service/impl/ActTaskServiceImpl.java b/ruoyi-modules/ruoyi-workflow/src/main/java/org/dromara/workflow/service/impl/ActTaskServiceImpl.java index d35e930..b6747e7 100644 --- a/ruoyi-modules/ruoyi-workflow/src/main/java/org/dromara/workflow/service/impl/ActTaskServiceImpl.java +++ b/ruoyi-modules/ruoyi-workflow/src/main/java/org/dromara/workflow/service/impl/ActTaskServiceImpl.java @@ -264,10 +264,14 @@ Page<TaskVo> page = actTaskMapper.getTaskWaitByPage(pageQuery.build(), queryWrapper); List<TaskVo> taskList = page.getRecords(); - for (TaskVo task : taskList) { - task.setBusinessStatusName(BusinessStatusEnum.findByStatus(task.getBusinessStatus())); - task.setParticipantVo(WorkflowUtils.getCurrentTaskParticipant(task.getId())); - task.setMultiInstance(WorkflowUtils.isMultiInstance(task.getProcessDefinitionId(), task.getTaskDefinitionKey()) != null); + if (CollUtil.isNotEmpty(taskList)) { + for (TaskVo task : taskList) { + task.setBusinessStatusName(BusinessStatusEnum.findByStatus(task.getBusinessStatus())); + task.setParticipantVo(WorkflowUtils.getCurrentTaskParticipant(task.getId())); + task.setMultiInstance(WorkflowUtils.isMultiInstance(task.getProcessDefinitionId(), task.getTaskDefinitionKey()) != null); + } + List<String> processDefinitionIds = StreamUtils.toList(taskList, TaskVo::getProcessDefinitionId); + WorkflowUtils.setWfFormDefinitionVo(taskList, processDefinitionIds, PROCESS_DEFINITION_ID); } return new TableDataInfo<>(taskList, page.getTotal()); } @@ -345,8 +349,12 @@ Page<TaskVo> page = actTaskMapper.getTaskFinishByPage(pageQuery.build(), queryWrapper); List<TaskVo> taskList = page.getRecords(); - for (TaskVo task : taskList) { - task.setBusinessStatusName(BusinessStatusEnum.findByStatus(task.getBusinessStatus())); + if (CollUtil.isNotEmpty(taskList)) { + for (TaskVo task : taskList) { + task.setBusinessStatusName(BusinessStatusEnum.findByStatus(task.getBusinessStatus())); + } + List<String> processDefinitionIds = StreamUtils.toList(taskList, TaskVo::getProcessDefinitionId); + WorkflowUtils.setWfFormDefinitionVo(taskList, processDefinitionIds, PROCESS_DEFINITION_ID); } return new TableDataInfo<>(taskList, page.getTotal()); } diff --git a/ruoyi-modules/ruoyi-workflow/src/main/java/org/dromara/workflow/service/impl/TestLeaveServiceImpl.java b/ruoyi-modules/ruoyi-workflow/src/main/java/org/dromara/workflow/service/impl/TestLeaveServiceImpl.java index 1d48d25..276cafe 100644 --- a/ruoyi-modules/ruoyi-workflow/src/main/java/org/dromara/workflow/service/impl/TestLeaveServiceImpl.java +++ b/ruoyi-modules/ruoyi-workflow/src/main/java/org/dromara/workflow/service/impl/TestLeaveServiceImpl.java @@ -42,7 +42,9 @@ */ @Override public TestLeaveVo queryById(Long id) { - return baseMapper.selectVoById(id); + TestLeaveVo testLeaveVo = baseMapper.selectVoById(id); + WorkflowUtils.setProcessInstanceVo(testLeaveVo,String.valueOf(id)); + return testLeaveVo; } /** diff --git a/ruoyi-modules/ruoyi-workflow/src/main/java/org/dromara/workflow/service/impl/WfFormDefinitionServiceImpl.java b/ruoyi-modules/ruoyi-workflow/src/main/java/org/dromara/workflow/service/impl/WfFormDefinitionServiceImpl.java new file mode 100644 index 0000000..00def95 --- /dev/null +++ b/ruoyi-modules/ruoyi-workflow/src/main/java/org/dromara/workflow/service/impl/WfFormDefinitionServiceImpl.java @@ -0,0 +1,66 @@ +package org.dromara.workflow.service.impl; + +import org.dromara.common.core.utils.MapstructUtils; +import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; +import lombok.RequiredArgsConstructor; +import org.springframework.stereotype.Service; +import org.dromara.workflow.domain.bo.WfFormDefinitionBo; +import org.dromara.workflow.domain.vo.WfFormDefinitionVo; +import org.dromara.workflow.domain.WfFormDefinition; +import org.dromara.workflow.mapper.WfFormDefinitionMapper; +import org.dromara.workflow.service.IWfFormDefinitionService; +import org.springframework.transaction.annotation.Transactional; + +import java.util.List; +import java.util.Collection; + +/** + * 琛ㄥ崟閰嶇疆Service涓氬姟灞傚鐞� + * + * @author gssong + * @date 2024-03-18 + */ +@RequiredArgsConstructor +@Service +public class WfFormDefinitionServiceImpl implements IWfFormDefinitionService { + + private final WfFormDefinitionMapper baseMapper; + + /** + * 鏌ヨ琛ㄥ崟閰嶇疆 + */ + @Override + public WfFormDefinitionVo getByDefId(String definitionId) { + return baseMapper.selectVoOne(new LambdaQueryWrapper<WfFormDefinition>().eq(WfFormDefinition::getDefinitionId, definitionId)); + } + + /** + * 鏌ヨ琛ㄥ崟閰嶇疆鍒楄〃 + */ + @Override + public List<WfFormDefinitionVo> queryList(List<String> definitionIds) { + return baseMapper.selectVoList(new LambdaQueryWrapper<WfFormDefinition>().in(WfFormDefinition::getDefinitionId, definitionIds)); + } + + /** + * 鏂板琛ㄥ崟閰嶇疆 + */ + @Override + @Transactional(rollbackFor = Exception.class) + public Boolean saveOrUpdate(WfFormDefinitionBo bo) { + WfFormDefinition add = MapstructUtils.convert(bo, WfFormDefinition.class); + boolean flag = baseMapper.insertOrUpdate(add); + if (baseMapper.insertOrUpdate(add)) { + bo.setId(add.getId()); + } + return flag; + } + + /** + * 鎵归噺鍒犻櫎琛ㄥ崟閰嶇疆 + */ + @Override + public Boolean deleteByIds(Collection<Long> ids) { + return baseMapper.deleteBatchIds(ids) > 0; + } +} diff --git a/ruoyi-modules/ruoyi-workflow/src/main/java/org/dromara/workflow/utils/WorkflowUtils.java b/ruoyi-modules/ruoyi-workflow/src/main/java/org/dromara/workflow/utils/WorkflowUtils.java index 96a5089..faedab0 100644 --- a/ruoyi-modules/ruoyi-workflow/src/main/java/org/dromara/workflow/utils/WorkflowUtils.java +++ b/ruoyi-modules/ruoyi-workflow/src/main/java/org/dromara/workflow/utils/WorkflowUtils.java @@ -26,9 +26,11 @@ import org.dromara.workflow.domain.vo.MultiInstanceVo; import org.dromara.workflow.domain.vo.ParticipantVo; import org.dromara.workflow.domain.vo.ProcessInstanceVo; +import org.dromara.workflow.domain.vo.WfFormDefinitionVo; import org.dromara.workflow.flowable.cmd.UpdateHiTaskInstCmd; import org.dromara.workflow.mapper.ActHiTaskinstMapper; import org.dromara.workflow.service.IActHiProcinstService; +import org.dromara.workflow.service.IWfFormDefinitionService; import org.dromara.workflow.service.IWorkflowUserService; import org.flowable.bpmn.model.BpmnModel; import org.flowable.bpmn.model.FlowNode; @@ -45,6 +47,7 @@ import java.util.*; import static org.dromara.workflow.common.constant.FlowConstant.PROCESS_INSTANCE_VO; +import static org.dromara.workflow.common.constant.FlowConstant.WF_FORM_DEFINITION_VO; /** * 宸ヤ綔娴佸伐鍏� @@ -58,6 +61,7 @@ private static final IWorkflowUserService WORKFLOW_USER_SERVICE = SpringUtils.getBean(IWorkflowUserService.class); private static final IActHiProcinstService ACT_HI_PROCINST_SERVICE = SpringUtils.getBean(IActHiProcinstService.class); private static final ActHiTaskinstMapper ACT_HI_TASKINST_MAPPER = SpringUtils.getBean(ActHiTaskinstMapper.class); + private static final IWfFormDefinitionService I_WF_FORM_DEFINITION_SERVICE = SpringUtils.getBean(IWfFormDefinitionService.class); /** * 鍒涘缓涓�涓柊浠诲姟 @@ -241,7 +245,7 @@ * @param businessKey 涓氬姟id */ public static void setProcessInstanceVo(Object obj, String businessKey) { - if (StringUtils.isBlank(businessKey)) { + if (StringUtils.isBlank(businessKey) || obj == null) { return; } ActHiProcinst actHiProcinst = ACT_HI_PROCINST_SERVICE.selectByBusinessKey(businessKey); @@ -264,7 +268,7 @@ * @param fieldName 涓婚敭灞炴�у悕绉� */ public static void setProcessInstanceListVo(Object obj, List<String> idList, String fieldName) { - if (CollUtil.isEmpty(idList)) { + if (CollUtil.isEmpty(idList) || obj == null) { return; } List<ActHiProcinst> actHiProcinstList = ACT_HI_PROCINST_SERVICE.selectByBusinessKeyIn(idList); @@ -294,6 +298,31 @@ } /** + * 璁剧疆娴佺▼琛ㄥ崟閰嶇疆 + * + * @param obj 涓氬姟瀵硅薄 + * @param idList 娴佺▼瀹氫箟id + * @param fieldName 娴佺▼瀹氫箟ID灞炴�у悕绉� + */ + public static void setWfFormDefinitionVo(Object obj, List<String> idList, String fieldName) { + if (CollUtil.isEmpty(idList) || obj == null) { + return; + } + List<WfFormDefinitionVo> wfFormDefinitionVoList = I_WF_FORM_DEFINITION_SERVICE.queryList(idList); + if (obj instanceof Collection<?> collection) { + for (Object o : collection) { + String fieldValue = ReflectUtils.invokeGetter(o, fieldName).toString(); + if (!CollUtil.isEmpty(wfFormDefinitionVoList)) { + wfFormDefinitionVoList.stream().filter(e -> e.getDefinitionId().equals(fieldValue)).findFirst().ifPresent(e -> { + ReflectUtils.invokeSetter(o, WF_FORM_DEFINITION_VO, BeanUtil.toBean(e, WfFormDefinitionVo.class)); + }); + } + } + } + } + + + /** * 鍙戦�佹秷鎭� * * @param list 浠诲姟 diff --git a/ruoyi-modules/ruoyi-workflow/src/main/resources/mapper/workflow/ActTaskMapper.xml b/ruoyi-modules/ruoyi-workflow/src/main/resources/mapper/workflow/ActTaskMapper.xml index 342ce09..9c33726 100644 --- a/ruoyi-modules/ruoyi-workflow/src/main/resources/mapper/workflow/ActTaskMapper.xml +++ b/ruoyi-modules/ruoyi-workflow/src/main/resources/mapper/workflow/ActTaskMapper.xml @@ -27,12 +27,14 @@ <result property="businessStatus" column="BUSINESS_STATUS_"/> <result property="processDefinitionName" column="processDefinitionName"/> <result property="processDefinitionKey" column="processDefinitionName"/> + <result property="businessKey" column="BUSINESS_KEY_"/> </resultMap> <select id="getTaskWaitByPage" resultMap="TaskVoResult"> select * from (SELECT RES.*, AHP.BUSINESS_STATUS_, + AHP.BUSINESS_KEY_, ARP.NAME_ AS processDefinitionName, ARP.KEY_ AS processDefinitionKey FROM ACT_RU_TASK RES @@ -46,6 +48,7 @@ select * from (SELECT HTI.*, AHP.BUSINESS_STATUS_, + AHP.BUSINESS_KEY_, ARP.NAME_ AS processDefinitionName, ARP.KEY_ AS processDefinitionKey FROM ACT_HI_TASKINST HTI @@ -59,6 +62,7 @@ select * from (SELECT AHT.*, AHP.BUSINESS_STATUS_, + AHP.BUSINESS_KEY_, ARP.NAME_ as processDefinitionName, ARP.KEY_ as processDefinitionKey FROM ACT_HI_TASKINST AHT diff --git a/ruoyi-modules/ruoyi-workflow/src/main/resources/mapper/workflow/WfFormDefinitionMapper.xml b/ruoyi-modules/ruoyi-workflow/src/main/resources/mapper/workflow/WfFormDefinitionMapper.xml new file mode 100644 index 0000000..42af9d2 --- /dev/null +++ b/ruoyi-modules/ruoyi-workflow/src/main/resources/mapper/workflow/WfFormDefinitionMapper.xml @@ -0,0 +1,7 @@ +<?xml version="1.0" encoding="UTF-8" ?> +<!DOCTYPE mapper + PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" + "http://mybatis.org/dtd/mybatis-3-mapper.dtd"> +<mapper namespace="org.dromara.workflow.mapper.WfFormDefinitionMapper"> + +</mapper> diff --git a/script/sql/flowable.sql b/script/sql/flowable.sql index 9cd6bfb..9c0d8bb 100644 --- a/script/sql/flowable.sql +++ b/script/sql/flowable.sql @@ -78,6 +78,26 @@ ) comment '鑺傜偣瀹℃壒璁板綍'; +create table wf_form_definition +( + id bigint not null comment '涓婚敭' + primary key, + path varchar(200) default '' not null comment '璺敱鍦板潃', + definition_id varchar(255) not null comment '娴佺▼瀹氫箟ID', + process_key varchar(255) not null comment '娴佺▼KEY', + create_dept bigint null comment '鍒涘缓閮ㄩ棬', + create_by bigint null comment '鍒涘缓鑰�', + create_time datetime null comment '鍒涘缓鏃堕棿', + update_by bigint null comment '鏇存柊鑰�', + update_time datetime null comment '鏇存柊鏃堕棿', + remark varchar(500) default '' null comment '澶囨敞', + tenant_id varchar(20) default '000000' null comment '绉熸埛缂栧彿', + constraint uni_definition_id + unique (definition_id) +) + comment '琛ㄥ崟閰嶇疆'; + + INSERT INTO sys_menu(menu_id, menu_name, parent_id, order_num, path, component, is_frame, is_cache, menu_type, visible, status, perms, icon, create_dept, create_by, create_time, update_by, update_time, remark) VALUES (11638, '璇峰亣鐢宠', 5, 1, 'leave', 'workflow/leave/index', 1, 0, 'C', '0', '0', 'demo:leave:list', '#', 103, 1, sysdate(), NULL, NULL, '璇峰亣鐢宠鑿滃崟'); INSERT INTO sys_menu(menu_id, menu_name, parent_id, order_num, path, component, is_frame, is_cache, menu_type, visible, status, perms, icon, create_dept, create_by, create_time, update_by, update_time, remark) VALUES (11639, '璇峰亣鐢宠鏌ヨ', 11638, 1, '#', '', 1, 0, 'F', '0', '0', 'demo:leave:query', '#', 103, 1, sysdate(), NULL, NULL, ''); -- Gitblit v1.9.3