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 77996aeb5..a4230b6e3 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 @@ -75,6 +75,11 @@ public interface FlowConstant { */ String PROCESS_INSTANCE_VO = "processInstanceVo"; + /** + * 流程表单配置对象 + */ + String WF_FORM_DEFINITION_VO = "wfFormDefinitionVo"; + /** * 流程发起人 */ @@ -90,6 +95,11 @@ public interface FlowConstant { */ String BUSINESS_KEY = "businessKey"; + /** + * 流程定义id + */ + String PROCESS_DEFINITION_ID = "processDefinitionId"; + /** * 开启跳过表达式变量 */ 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 000000000..0d8952efb --- /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 getByDefId(@NotBlank(message = "流程定义ID不能为空") + @PathVariable String definitionId) { + return R.ok(wfFormDefinitionService.getByDefId(definitionId)); + } + + /** + * 新增表单配置 + */ + @Log(title = "表单配置", businessType = BusinessType.INSERT) + @RepeatSubmit() + @PostMapping("/saveOrUpdate") + public R saveOrUpdate(@Validated(AddGroup.class) @RequestBody WfFormDefinitionBo bo) { + return toAjax(wfFormDefinitionService.saveOrUpdate(bo)); + } + + /** + * 删除表单配置 + * + * @param ids 主键串 + */ + @Log(title = "表单配置", businessType = BusinessType.DELETE) + @DeleteMapping("/{ids}") + public R 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 000000000..e0e975cb6 --- /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 000000000..b32fe772e --- /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 52c201d25..624f3eed2 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 @@ public class ProcessDefinitionVo implements Serializable { */ 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 0210b575b..dc65e52ce 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 @@ public class TaskVo implements Serializable { * 是否会签 */ 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 000000000..129eacc2e --- /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 000000000..426253246 --- /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 { + +} 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 000000000..683fc7340 --- /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 queryList(List definitionIds); + + + /** + * 新增表单配置 + * + * @param bo 参数 + * @return 结果 + */ + Boolean saveOrUpdate(WfFormDefinitionBo bo); + + /** + * 删除 + * + * @param ids id + * @return 结果 + */ + Boolean deleteByIds(Collection 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 cc82e0059..28c352033 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.common.constant.FlowConstant; 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.io.InputStream; 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 @@ public class ActProcessDefinitionServiceImpl implements IActProcessDefinitionSer private final RepositoryService repositoryService; private final ProcessMigrationService processMigrationService; private final IWfCategoryService wfCategoryService; + private final IWfFormDefinitionService iWfFormDefinitionService; /** * 分页查询 @@ -81,15 +83,22 @@ public class ActProcessDefinitionServiceImpl implements IActProcessDefinitionSer List 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 ids = StreamUtils.toList(definitionList, ProcessDefinition::getId); + List 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 @@ public class ActProcessDefinitionServiceImpl implements IActProcessDefinitionSer List definitionList = query.processDefinitionKey(key).list(); List deploymentList = null; if (CollUtil.isNotEmpty(definitionList)) { - List deploymentIds = definitionList.stream().map(ProcessDefinition::getDeploymentId).collect(Collectors.toList()); + List 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 ids = StreamUtils.toList(definitionList, ProcessDefinition::getId); + List 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 d35e930ca..b6747e745 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 @@ public class ActTaskServiceImpl implements IActTaskService { Page page = actTaskMapper.getTaskWaitByPage(pageQuery.build(), queryWrapper); List 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 processDefinitionIds = StreamUtils.toList(taskList, TaskVo::getProcessDefinitionId); + WorkflowUtils.setWfFormDefinitionVo(taskList, processDefinitionIds, PROCESS_DEFINITION_ID); } return new TableDataInfo<>(taskList, page.getTotal()); } @@ -345,8 +349,12 @@ public class ActTaskServiceImpl implements IActTaskService { Page page = actTaskMapper.getTaskFinishByPage(pageQuery.build(), queryWrapper); List 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 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 1d48d254d..276cafe64 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 @@ public class TestLeaveServiceImpl implements ITestLeaveService { */ @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 000000000..00def9575 --- /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().eq(WfFormDefinition::getDefinitionId, definitionId)); + } + + /** + * 查询表单配置列表 + */ + @Override + public List queryList(List definitionIds) { + return baseMapper.selectVoList(new LambdaQueryWrapper().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 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 96a5089d2..faedab0f5 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.ActHiTaskinst; 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 org.flowable.task.service.impl.persistence.entity.TaskEntity; 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 @@ public class WorkflowUtils { 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 @@ public class WorkflowUtils { * @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 @@ public class WorkflowUtils { * @param fieldName 主键属性名称 */ public static void setProcessInstanceListVo(Object obj, List idList, String fieldName) { - if (CollUtil.isEmpty(idList)) { + if (CollUtil.isEmpty(idList) || obj == null) { return; } List actHiProcinstList = ACT_HI_PROCINST_SERVICE.selectByBusinessKeyIn(idList); @@ -293,6 +297,31 @@ public class WorkflowUtils { } } + /** + * 设置流程表单配置 + * + * @param obj 业务对象 + * @param idList 流程定义id + * @param fieldName 流程定义ID属性名称 + */ + public static void setWfFormDefinitionVo(Object obj, List idList, String fieldName) { + if (CollUtil.isEmpty(idList) || obj == null) { + return; + } + List 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)); + }); + } + } + } + } + + /** * 发送消息 * 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 342ce09b3..9c3372686 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 @@ +