From 651b2e140ba842126c4177df1b909b2b764ecdb8 Mon Sep 17 00:00:00 2001 From: gssong <1742057357@qq.com> Date: 星期日, 31 三月 2024 15:34:27 +0800 Subject: [PATCH] add 添加表单配置 --- ruoyi-modules/ruoyi-workflow/src/main/java/org/dromara/workflow/mapper/ActHiTaskinstMapper.java | 2 ruoyi-modules/ruoyi-workflow/src/main/java/org/dromara/workflow/service/IWfDefinitionConfigService.java | 57 + ruoyi-modules/ruoyi-workflow/src/main/java/org/dromara/workflow/service/IWfNodeConfigService.java | 56 + ruoyi-modules/ruoyi-workflow/src/main/java/org/dromara/workflow/domain/WfNodeConfig.java | 56 + ruoyi-modules/ruoyi-workflow/src/main/java/org/dromara/workflow/service/impl/ActProcessInstanceServiceImpl.java | 6 ruoyi-modules/ruoyi-workflow/src/main/java/org/dromara/workflow/mapper/WfFormManageMapper.java | 15 ruoyi-modules/ruoyi-workflow/src/main/java/org/dromara/workflow/domain/vo/WfFormManageVo.java | 63 ++ ruoyi-modules/ruoyi-workflow/src/main/java/org/dromara/workflow/service/impl/WfFormManageServiceImpl.java | 111 +++ ruoyi-modules/ruoyi-workflow/src/main/java/org/dromara/workflow/domain/ActHiTaskinst.java | 2 ruoyi-modules/ruoyi-workflow/src/main/java/org/dromara/workflow/utils/ModelUtils.java | 31 + ruoyi-modules/ruoyi-workflow/src/main/java/org/dromara/workflow/service/IActHiTaskinstService.java | 2 ruoyi-modules/ruoyi-workflow/src/main/java/org/dromara/workflow/controller/WfDefinitionConfigController.java | 24 ruoyi-modules/ruoyi-workflow/src/main/java/org/dromara/workflow/domain/bo/WfNodeConfigBo.java | 58 ++ ruoyi-modules/ruoyi-workflow/src/main/java/org/dromara/workflow/domain/vo/ProcessInstanceVo.java | 2 ruoyi-modules/ruoyi-workflow/src/main/java/org/dromara/workflow/mapper/WfDefinitionConfigMapper.java | 15 script/sql/sqlserver/flowable.sql | 28 ruoyi-modules/ruoyi-workflow/src/main/java/org/dromara/workflow/common/enums/FormTypeEnum.java | 54 + ruoyi-modules/ruoyi-workflow/src/main/java/org/dromara/workflow/mapper/ActTaskMapper.java | 2 ruoyi-modules/ruoyi-workflow/src/main/java/org/dromara/workflow/domain/WfFormManage.java | 51 + ruoyi-modules/ruoyi-workflow/src/main/java/org/dromara/workflow/service/IWfFormManageService.java | 81 ++ ruoyi-modules/ruoyi-workflow/src/main/java/org/dromara/workflow/domain/bo/WfFormManageBo.java | 53 + ruoyi-modules/ruoyi-workflow/src/main/java/org/dromara/workflow/service/impl/WfNodeConfigServiceImpl.java | 73 ++ ruoyi-modules/ruoyi-workflow/src/main/java/org/dromara/workflow/controller/WfFormManageController.java | 114 +++ ruoyi-modules/ruoyi-workflow/src/main/java/org/dromara/workflow/service/impl/ActModelServiceImpl.java | 48 + script/sql/postgres/flowable.sql | 32 ruoyi-modules/ruoyi-workflow/src/main/resources/mapper/workflow/WfNodeConfigMapper.xml | 2 ruoyi-modules/ruoyi-workflow/src/main/resources/mapper/workflow/WfDefinitionConfigMapper.xml | 2 ruoyi-modules/ruoyi-workflow/src/main/java/org/dromara/workflow/domain/vo/WfDefinitionConfigVo.java | 20 ruoyi-modules/ruoyi-workflow/src/main/java/org/dromara/workflow/common/constant/FlowConstant.java | 4 ruoyi-modules/ruoyi-workflow/src/main/java/org/dromara/workflow/utils/WorkflowUtils.java | 34 ruoyi-modules/ruoyi-workflow/src/main/java/org/dromara/workflow/service/impl/ActTaskServiceImpl.java | 73 + script/sql/flowable.sql | 44 + ruoyi-modules/ruoyi-workflow/src/main/resources/mapper/workflow/WfFormManageMapper.xml | 2 /dev/null | 66 -- ruoyi-modules/ruoyi-workflow/src/main/java/org/dromara/workflow/flowable/cmd/CustomInjectUserTaskCmd.java | 114 +++ ruoyi-modules/ruoyi-workflow/src/main/java/org/dromara/workflow/service/impl/WfDefinitionConfigServiceImpl.java | 71 ++ script/sql/oracle/flowable.sql | 27 ruoyi-modules/ruoyi-workflow/src/main/java/org/dromara/workflow/domain/WfDefinitionConfig.java | 10 ruoyi-modules/ruoyi-workflow/src/main/java/org/dromara/workflow/domain/bo/WfDefinitionConfigBo.java | 14 ruoyi-modules/ruoyi-workflow/src/main/java/org/dromara/workflow/domain/vo/ProcessDefinitionVo.java | 2 ruoyi-modules/ruoyi-workflow/src/main/java/org/dromara/workflow/domain/vo/TaskVo.java | 7 ruoyi-modules/ruoyi-workflow/src/main/java/org/dromara/workflow/mapper/WfNodeConfigMapper.java | 15 ruoyi-modules/ruoyi-workflow/src/main/java/org/dromara/workflow/service/impl/ActHiTaskinstServiceImpl.java | 2 ruoyi-modules/ruoyi-workflow/src/main/java/org/dromara/workflow/service/impl/ActProcessDefinitionServiceImpl.java | 75 ++ ruoyi-modules/ruoyi-workflow/src/main/java/org/dromara/workflow/domain/vo/WfNodeConfigVo.java | 69 ++ 45 files changed, 1,464 insertions(+), 225 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 a4230b6..d175ba8 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,9 +76,9 @@ String PROCESS_INSTANCE_VO = "processInstanceVo"; /** - * 娴佺▼琛ㄥ崟閰嶇疆瀵硅薄 + * 娴佺▼瀹氫箟閰嶇疆 */ - String WF_FORM_DEFINITION_VO = "wfFormDefinitionVo"; + String WF_DEFINITION_CONFIG_VO = "wfDefinitionConfigVo"; /** * 娴佺▼鍙戣捣浜� diff --git a/ruoyi-modules/ruoyi-workflow/src/main/java/org/dromara/workflow/common/enums/FormTypeEnum.java b/ruoyi-modules/ruoyi-workflow/src/main/java/org/dromara/workflow/common/enums/FormTypeEnum.java new file mode 100644 index 0000000..083ab7b --- /dev/null +++ b/ruoyi-modules/ruoyi-workflow/src/main/java/org/dromara/workflow/common/enums/FormTypeEnum.java @@ -0,0 +1,54 @@ +package org.dromara.workflow.common.enums; + +import cn.hutool.core.util.StrUtil; +import lombok.AllArgsConstructor; +import lombok.Getter; +import org.apache.commons.lang3.StringUtils; + +import java.util.Arrays; + +/** + * 浠诲姟鐘舵�佹灇涓� + * + * @author may + */ +@Getter +@AllArgsConstructor +public enum FormTypeEnum { + /** + * 鑷畾涔夎〃鍗� + */ + STATIC("static", "鑷畾涔夎〃鍗�"), + /** + * 鍔ㄦ�佽〃鍗� + */ + DYNAMIC("dynamic", "鍔ㄦ�佽〃鍗�"); + + /** + * 绫诲瀷 + */ + private final String type; + + /** + * 鎻忚堪 + */ + private final String desc; + + /** + * 琛ㄥ崟绫诲瀷 + * + * @param formType 琛ㄥ崟绫诲瀷 + */ + public static String findByType(String formType) { + if (StringUtils.isBlank(formType)) { + return StrUtil.EMPTY; + } + + return Arrays.stream(FormTypeEnum.values()) + .filter(statusEnum -> statusEnum.getType().equals(formType)) + .findFirst() + .map(FormTypeEnum::getDesc) + .orElse(StrUtil.EMPTY); + } +} + 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/WfDefinitionConfigController.java similarity index 66% rename from ruoyi-modules/ruoyi-workflow/src/main/java/org/dromara/workflow/controller/WfFormDefinitionController.java rename to ruoyi-modules/ruoyi-workflow/src/main/java/org/dromara/workflow/controller/WfDefinitionConfigController.java index 0d8952e..d3388d4 100644 --- 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/WfDefinitionConfigController.java @@ -4,6 +4,7 @@ import lombok.RequiredArgsConstructor; import jakarta.validation.constraints.*; +import org.dromara.workflow.domain.bo.WfDefinitionConfigBo; import org.springframework.web.bind.annotation.*; import org.springframework.validation.annotation.Validated; import org.dromara.common.idempotent.annotation.RepeatSubmit; @@ -12,23 +13,22 @@ 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; +import org.dromara.workflow.domain.vo.WfDefinitionConfigVo; +import org.dromara.workflow.service.IWfDefinitionConfigService; /** * 琛ㄥ崟閰嶇疆 * - * @author gssong + * @author may * @date 2024-03-18 */ @Validated @RequiredArgsConstructor @RestController -@RequestMapping("/workflow/formDefinition") -public class WfFormDefinitionController extends BaseController { +@RequestMapping("/workflow/definitionConfig") +public class WfDefinitionConfigController extends BaseController { - private final IWfFormDefinitionService wfFormDefinitionService; + private final IWfDefinitionConfigService wfDefinitionConfigService; /** @@ -37,9 +37,9 @@ * @param definitionId 涓婚敭 */ @GetMapping("/getByDefId/{definitionId}") - public R<WfFormDefinitionVo> getByDefId(@NotBlank(message = "娴佺▼瀹氫箟ID涓嶈兘涓虹┖") + public R<WfDefinitionConfigVo> getByDefId(@NotBlank(message = "娴佺▼瀹氫箟ID涓嶈兘涓虹┖") @PathVariable String definitionId) { - return R.ok(wfFormDefinitionService.getByDefId(definitionId)); + return R.ok(wfDefinitionConfigService.getByDefId(definitionId)); } /** @@ -48,8 +48,8 @@ @Log(title = "琛ㄥ崟閰嶇疆", businessType = BusinessType.INSERT) @RepeatSubmit() @PostMapping("/saveOrUpdate") - public R<Void> saveOrUpdate(@Validated(AddGroup.class) @RequestBody WfFormDefinitionBo bo) { - return toAjax(wfFormDefinitionService.saveOrUpdate(bo)); + public R<Void> saveOrUpdate(@Validated(AddGroup.class) @RequestBody WfDefinitionConfigBo bo) { + return toAjax(wfDefinitionConfigService.saveOrUpdate(bo)); } /** @@ -61,6 +61,6 @@ @DeleteMapping("/{ids}") public R<Void> remove(@NotEmpty(message = "涓婚敭涓嶈兘涓虹┖") @PathVariable Long[] ids) { - return toAjax(wfFormDefinitionService.deleteByIds(List.of(ids))); + return toAjax(wfDefinitionConfigService.deleteByIds(List.of(ids))); } } diff --git a/ruoyi-modules/ruoyi-workflow/src/main/java/org/dromara/workflow/controller/WfFormManageController.java b/ruoyi-modules/ruoyi-workflow/src/main/java/org/dromara/workflow/controller/WfFormManageController.java new file mode 100644 index 0000000..198e233 --- /dev/null +++ b/ruoyi-modules/ruoyi-workflow/src/main/java/org/dromara/workflow/controller/WfFormManageController.java @@ -0,0 +1,114 @@ +package org.dromara.workflow.controller; + +import java.util.List; + +import lombok.RequiredArgsConstructor; +import jakarta.servlet.http.HttpServletResponse; +import jakarta.validation.constraints.*; +import cn.dev33.satoken.annotation.SaCheckPermission; +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.mybatis.core.page.PageQuery; +import org.dromara.common.core.domain.R; +import org.dromara.common.core.validate.AddGroup; +import org.dromara.common.core.validate.EditGroup; +import org.dromara.common.log.enums.BusinessType; +import org.dromara.common.excel.utils.ExcelUtil; +import org.dromara.workflow.domain.vo.WfFormManageVo; +import org.dromara.workflow.domain.bo.WfFormManageBo; +import org.dromara.workflow.service.IWfFormManageService; +import org.dromara.common.mybatis.core.page.TableDataInfo; + +/** + * 琛ㄥ崟绠$悊 + * + * @author may + * @date 2024-03-29 + */ +@Validated +@RequiredArgsConstructor +@RestController +@RequestMapping("/workflow/formManage") +public class WfFormManageController extends BaseController { + + private final IWfFormManageService wfFormManageService; + + /** + * 鏌ヨ琛ㄥ崟绠$悊鍒楄〃 + */ + @SaCheckPermission("workflow:formManage:list") + @GetMapping("/list") + public TableDataInfo<WfFormManageVo> list(WfFormManageBo bo, PageQuery pageQuery) { + return wfFormManageService.queryPageList(bo, pageQuery); + } + + /** + * 鏌ヨ琛ㄥ崟绠$悊鍒楄〃 + */ + @SaCheckPermission("workflow:formManage:list") + @GetMapping("/list/selectList") + public R<List<WfFormManageVo>> selectList() { + return R.ok(wfFormManageService.selectList()); + } + + /** + * 瀵煎嚭琛ㄥ崟绠$悊鍒楄〃 + */ + @SaCheckPermission("workflow:formManage:export") + @Log(title = "琛ㄥ崟绠$悊", businessType = BusinessType.EXPORT) + @PostMapping("/export") + public void export(WfFormManageBo bo, HttpServletResponse response) { + List<WfFormManageVo> list = wfFormManageService.queryList(bo); + ExcelUtil.exportExcel(list, "琛ㄥ崟绠$悊", WfFormManageVo.class, response); + } + + /** + * 鑾峰彇琛ㄥ崟绠$悊璇︾粏淇℃伅 + * + * @param id 涓婚敭 + */ + @SaCheckPermission("workflow:formManage:query") + @GetMapping("/{id}") + public R<WfFormManageVo> getInfo(@NotNull(message = "涓婚敭涓嶈兘涓虹┖") + @PathVariable Long id) { + return R.ok(wfFormManageService.queryById(id)); + } + + /** + * 鏂板琛ㄥ崟绠$悊 + */ + @SaCheckPermission("workflow:formManage:add") + @Log(title = "琛ㄥ崟绠$悊", businessType = BusinessType.INSERT) + @RepeatSubmit() + @PostMapping() + public R<Void> add(@Validated(AddGroup.class) @RequestBody WfFormManageBo bo) { + return toAjax(wfFormManageService.insertByBo(bo)); + } + + /** + * 淇敼琛ㄥ崟绠$悊 + */ + @SaCheckPermission("workflow:formManage:edit") + @Log(title = "琛ㄥ崟绠$悊", businessType = BusinessType.UPDATE) + @RepeatSubmit() + @PutMapping() + public R<Void> edit(@Validated(EditGroup.class) @RequestBody WfFormManageBo bo) { + return toAjax(wfFormManageService.updateByBo(bo)); + } + + /** + * 鍒犻櫎琛ㄥ崟绠$悊 + * + * @param ids 涓婚敭涓� + */ + @SaCheckPermission("workflow:formManage:remove") + @Log(title = "琛ㄥ崟绠$悊", businessType = BusinessType.DELETE) + @DeleteMapping("/{ids}") + public R<Void> remove(@NotEmpty(message = "涓婚敭涓嶈兘涓虹┖") + @PathVariable Long[] ids) { + return toAjax(wfFormManageService.deleteByIds(List.of(ids))); + } +} diff --git a/ruoyi-modules/ruoyi-workflow/src/main/java/org/dromara/workflow/domain/ActHiTaskinst.java b/ruoyi-modules/ruoyi-workflow/src/main/java/org/dromara/workflow/domain/ActHiTaskinst.java index 578ea9c..abc17b5 100644 --- a/ruoyi-modules/ruoyi-workflow/src/main/java/org/dromara/workflow/domain/ActHiTaskinst.java +++ b/ruoyi-modules/ruoyi-workflow/src/main/java/org/dromara/workflow/domain/ActHiTaskinst.java @@ -11,7 +11,7 @@ /** * 娴佺▼鍘嗗彶浠诲姟瀵硅薄 act_hi_taskinst * - * @author gssong + * @author may * @date 2024-03-02 */ @Data 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/WfDefinitionConfig.java similarity index 82% rename from ruoyi-modules/ruoyi-workflow/src/main/java/org/dromara/workflow/domain/WfFormDefinition.java rename to ruoyi-modules/ruoyi-workflow/src/main/java/org/dromara/workflow/domain/WfDefinitionConfig.java index e0e975c..b80da0e 100644 --- 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/WfDefinitionConfig.java @@ -10,13 +10,13 @@ /** * 琛ㄥ崟閰嶇疆瀵硅薄 wf_form_definition * - * @author gssong + * @author may * @date 2024-03-18 */ @Data @EqualsAndHashCode(callSuper = true) -@TableName("wf_form_definition") -public class WfFormDefinition extends BaseEntity { +@TableName("wf_definition_config") +public class WfDefinitionConfig extends BaseEntity { @Serial private static final long serialVersionUID = 1L; @@ -28,9 +28,9 @@ private Long id; /** - * 璺敱鍦板潃 + * 琛ㄥ崟ID */ - private String path; + private Long formId; /** * 娴佺▼瀹氫箟ID diff --git a/ruoyi-modules/ruoyi-workflow/src/main/java/org/dromara/workflow/domain/WfFormManage.java b/ruoyi-modules/ruoyi-workflow/src/main/java/org/dromara/workflow/domain/WfFormManage.java new file mode 100644 index 0000000..47f0d7a --- /dev/null +++ b/ruoyi-modules/ruoyi-workflow/src/main/java/org/dromara/workflow/domain/WfFormManage.java @@ -0,0 +1,51 @@ +package org.dromara.workflow.domain; + +import org.dromara.common.tenant.core.TenantEntity; +import com.baomidou.mybatisplus.annotation.*; +import lombok.Data; +import lombok.EqualsAndHashCode; + +import java.io.Serial; + +/** + * 琛ㄥ崟绠$悊瀵硅薄 wf_form_manage + * + * @author may + * @date 2024-03-29 + */ +@Data +@EqualsAndHashCode(callSuper = true) +@TableName("wf_form_manage") +public class WfFormManage extends TenantEntity { + + @Serial + private static final long serialVersionUID = 1L; + + /** + * 涓婚敭 + */ + @TableId(value = "id") + private Long id; + + /** + * 琛ㄥ崟鍚嶇О + */ + private String formName; + + /** + * 琛ㄥ崟绫诲瀷 + */ + private String formType; + + /** + * 璺敱鍦板潃/琛ㄥ崟ID + */ + private String router; + + /** + * 澶囨敞 + */ + private String remark; + + +} diff --git a/ruoyi-modules/ruoyi-workflow/src/main/java/org/dromara/workflow/domain/WfNodeConfig.java b/ruoyi-modules/ruoyi-workflow/src/main/java/org/dromara/workflow/domain/WfNodeConfig.java new file mode 100644 index 0000000..cf88676 --- /dev/null +++ b/ruoyi-modules/ruoyi-workflow/src/main/java/org/dromara/workflow/domain/WfNodeConfig.java @@ -0,0 +1,56 @@ +package org.dromara.workflow.domain; + +import org.dromara.common.tenant.core.TenantEntity; +import com.baomidou.mybatisplus.annotation.*; +import lombok.Data; +import lombok.EqualsAndHashCode; + +import java.io.Serial; + +/** + * 鑺傜偣閰嶇疆瀵硅薄 wf_node_config + * + * @author may + * @date 2024-03-30 + */ +@Data +@EqualsAndHashCode(callSuper = true) +@TableName("wf_node_config") +public class WfNodeConfig extends TenantEntity { + + @Serial + private static final long serialVersionUID = 1L; + + /** + * 涓婚敭 + */ + @TableId(value = "id") + private Long id; + + /** + * 琛ㄥ崟id + */ + private Long formId; + + /** + * 琛ㄥ崟绫诲瀷 + */ + private String formType; + + /** + * 鑺傜偣鍚嶇О + */ + private String nodeName; + + /** + * 鑺傜偣id + */ + private String nodeId; + + /** + * 娴佺▼瀹氫箟id + */ + private String definitionId; + + +} 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/WfDefinitionConfigBo.java similarity index 74% rename from ruoyi-modules/ruoyi-workflow/src/main/java/org/dromara/workflow/domain/bo/WfFormDefinitionBo.java rename to ruoyi-modules/ruoyi-workflow/src/main/java/org/dromara/workflow/domain/bo/WfDefinitionConfigBo.java index b32fe77..80e7191 100644 --- 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/WfDefinitionConfigBo.java @@ -1,6 +1,6 @@ package org.dromara.workflow.domain.bo; -import org.dromara.workflow.domain.WfFormDefinition; +import org.dromara.workflow.domain.WfDefinitionConfig; import org.dromara.common.mybatis.core.domain.BaseEntity; import org.dromara.common.core.validate.AddGroup; import org.dromara.common.core.validate.EditGroup; @@ -12,13 +12,13 @@ /** * 琛ㄥ崟閰嶇疆涓氬姟瀵硅薄 wf_form_definition * - * @author gssong + * @author may * @date 2024-03-18 */ @Data @EqualsAndHashCode(callSuper = true) -@AutoMapper(target = WfFormDefinition.class, reverseConvertGenerate = false) -public class WfFormDefinitionBo extends BaseEntity { +@AutoMapper(target = WfDefinitionConfig.class, reverseConvertGenerate = false) +public class WfDefinitionConfigBo extends BaseEntity { /** * 涓婚敭 @@ -27,10 +27,10 @@ private Long id; /** - * 璺敱鍦板潃 + * 琛ㄥ崟ID */ - @NotBlank(message = "璺敱鍦板潃涓嶈兘涓虹┖", groups = {AddGroup.class}) - private String path; + @NotNull(message = "琛ㄥ崟ID涓嶈兘涓虹┖", groups = {AddGroup.class}) + private Long formId; /** * 娴佺▼瀹氫箟ID diff --git a/ruoyi-modules/ruoyi-workflow/src/main/java/org/dromara/workflow/domain/bo/WfFormManageBo.java b/ruoyi-modules/ruoyi-workflow/src/main/java/org/dromara/workflow/domain/bo/WfFormManageBo.java new file mode 100644 index 0000000..8afc286 --- /dev/null +++ b/ruoyi-modules/ruoyi-workflow/src/main/java/org/dromara/workflow/domain/bo/WfFormManageBo.java @@ -0,0 +1,53 @@ +package org.dromara.workflow.domain.bo; + +import org.dromara.workflow.domain.WfFormManage; +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_manage + * + * @author may + * @date 2024-03-29 + */ +@Data +@EqualsAndHashCode(callSuper = true) +@AutoMapper(target = WfFormManage.class, reverseConvertGenerate = false) +public class WfFormManageBo extends BaseEntity { + + /** + * 涓婚敭 + */ + @NotNull(message = "涓婚敭涓嶈兘涓虹┖", groups = { EditGroup.class }) + private Long id; + + /** + * 琛ㄥ崟鍚嶇О + */ + @NotBlank(message = "琛ㄥ崟鍚嶇О涓嶈兘涓虹┖", groups = { AddGroup.class, EditGroup.class }) + private String formName; + + /** + * 琛ㄥ崟绫诲瀷 + */ + @NotBlank(message = "琛ㄥ崟绫诲瀷涓嶈兘涓虹┖", groups = { AddGroup.class, EditGroup.class }) + private String formType; + /** + * 璺敱鍦板潃/琛ㄥ崟ID + */ + @NotBlank(message = "璺敱鍦板潃/琛ㄥ崟ID涓嶈兘涓虹┖", groups = { AddGroup.class, EditGroup.class }) + private String router; + + + /** + * 澶囨敞 + */ + private String remark; + + +} diff --git a/ruoyi-modules/ruoyi-workflow/src/main/java/org/dromara/workflow/domain/bo/WfNodeConfigBo.java b/ruoyi-modules/ruoyi-workflow/src/main/java/org/dromara/workflow/domain/bo/WfNodeConfigBo.java new file mode 100644 index 0000000..24144cf --- /dev/null +++ b/ruoyi-modules/ruoyi-workflow/src/main/java/org/dromara/workflow/domain/bo/WfNodeConfigBo.java @@ -0,0 +1,58 @@ +package org.dromara.workflow.domain.bo; + +import org.dromara.workflow.domain.WfNodeConfig; +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_node_config + * + * @author may + * @date 2024-03-30 + */ +@Data +@EqualsAndHashCode(callSuper = true) +@AutoMapper(target = WfNodeConfig.class, reverseConvertGenerate = false) +public class WfNodeConfigBo extends BaseEntity { + + /** + * 涓婚敭 + */ + @NotNull(message = "涓婚敭涓嶈兘涓虹┖", groups = { EditGroup.class }) + private Long id; + + /** + * 琛ㄥ崟id + */ + private Long formId; + + /** + * 琛ㄥ崟绫诲瀷 + */ + private String formType; + + /** + * 鑺傜偣鍚嶇О + */ + @NotBlank(message = "鑺傜偣鍚嶇О涓嶈兘涓虹┖", groups = { AddGroup.class, EditGroup.class }) + private String nodeName; + + /** + * 鑺傜偣id + */ + @NotBlank(message = "鑺傜偣id涓嶈兘涓虹┖", groups = { AddGroup.class, EditGroup.class }) + private String nodeId; + + /** + * 娴佺▼瀹氫箟id + */ + @NotBlank(message = "娴佺▼瀹氫箟id涓嶈兘涓虹┖", groups = { AddGroup.class, EditGroup.class }) + private String definitionId; + + +} 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 624f3ee..cd8ea2a 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 @@ -65,6 +65,6 @@ /** * 琛ㄥ崟閰嶇疆 */ - private WfFormDefinitionVo wfFormDefinitionVo; + private WfDefinitionConfigVo wfDefinitionConfigVo; } diff --git a/ruoyi-modules/ruoyi-workflow/src/main/java/org/dromara/workflow/domain/vo/ProcessInstanceVo.java b/ruoyi-modules/ruoyi-workflow/src/main/java/org/dromara/workflow/domain/vo/ProcessInstanceVo.java index 73e1e6d..34eb970 100644 --- a/ruoyi-modules/ruoyi-workflow/src/main/java/org/dromara/workflow/domain/vo/ProcessInstanceVo.java +++ b/ruoyi-modules/ruoyi-workflow/src/main/java/org/dromara/workflow/domain/vo/ProcessInstanceVo.java @@ -96,5 +96,5 @@ /** * 琛ㄥ崟閰嶇疆 */ - private WfFormDefinitionVo wfFormDefinitionVo; + private WfDefinitionConfigVo wfDefinitionConfigVo; } 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 dc65e52..cafff89 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 @@ -159,5 +159,10 @@ /** * 琛ㄥ崟閰嶇疆 */ - private WfFormDefinitionVo wfFormDefinitionVo; + private WfDefinitionConfigVo wfDefinitionConfigVo; + + /** + * 鑺傜偣閰嶇疆 + */ + private WfNodeConfigVo wfNodeConfigVo; } 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/WfDefinitionConfigVo.java similarity index 72% rename from ruoyi-modules/ruoyi-workflow/src/main/java/org/dromara/workflow/domain/vo/WfFormDefinitionVo.java rename to ruoyi-modules/ruoyi-workflow/src/main/java/org/dromara/workflow/domain/vo/WfDefinitionConfigVo.java index 129eacc..a7c96f3 100644 --- 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/WfDefinitionConfigVo.java @@ -1,6 +1,6 @@ package org.dromara.workflow.domain.vo; -import org.dromara.workflow.domain.WfFormDefinition; +import org.dromara.workflow.domain.WfDefinitionConfig; import com.alibaba.excel.annotation.ExcelIgnoreUnannotated; import com.alibaba.excel.annotation.ExcelProperty; import io.github.linpeilie.annotations.AutoMapper; @@ -10,17 +10,16 @@ import java.io.Serializable; - /** * 琛ㄥ崟閰嶇疆瑙嗗浘瀵硅薄 wf_form_definition * - * @author gssong + * @author may * @date 2024-03-18 */ @Data @ExcelIgnoreUnannotated -@AutoMapper(target = WfFormDefinition.class) -public class WfFormDefinitionVo implements Serializable { +@AutoMapper(target = WfDefinitionConfig.class) +public class WfDefinitionConfigVo implements Serializable { @Serial private static final long serialVersionUID = 1L; @@ -32,10 +31,10 @@ private Long id; /** - * 璺敱鍦板潃 + * 琛ㄥ崟ID */ - @ExcelProperty(value = "璺敱鍦板潃") - private String path; + @ExcelProperty(value = "琛ㄥ崟ID") + private Long formId; /** * 娴佺▼瀹氫箟ID @@ -55,5 +54,10 @@ @ExcelProperty(value = "澶囨敞") private String remark; + /** + * 琛ㄥ崟绠$悊 + */ + private WfFormManageVo wfFormManageVo; + } diff --git a/ruoyi-modules/ruoyi-workflow/src/main/java/org/dromara/workflow/domain/vo/WfFormManageVo.java b/ruoyi-modules/ruoyi-workflow/src/main/java/org/dromara/workflow/domain/vo/WfFormManageVo.java new file mode 100644 index 0000000..302df23 --- /dev/null +++ b/ruoyi-modules/ruoyi-workflow/src/main/java/org/dromara/workflow/domain/vo/WfFormManageVo.java @@ -0,0 +1,63 @@ +package org.dromara.workflow.domain.vo; + +import org.dromara.workflow.domain.WfFormManage; +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_manage + * + * @author may + * @date 2024-03-29 + */ +@Data +@ExcelIgnoreUnannotated +@AutoMapper(target = WfFormManage.class) +public class WfFormManageVo implements Serializable { + + @Serial + private static final long serialVersionUID = 1L; + + /** + * 涓婚敭 + */ + @ExcelProperty(value = "涓婚敭") + private Long id; + + /** + * 琛ㄥ崟鍚嶇О + */ + @ExcelProperty(value = "琛ㄥ崟鍚嶇О") + private String formName; + + /** + * 琛ㄥ崟绫诲瀷 + */ + @ExcelProperty(value = "琛ㄥ崟绫诲瀷") + private String formType; + + /** + * 琛ㄥ崟绫诲瀷鍚嶇О + */ + private String formTypeName; + + /** + * 璺敱鍦板潃/琛ㄥ崟ID + */ + @ExcelProperty(value = "璺敱鍦板潃/琛ㄥ崟ID") + private String router; + + /** + * 澶囨敞 + */ + @ExcelProperty(value = "澶囨敞") + private String remark; + + +} diff --git a/ruoyi-modules/ruoyi-workflow/src/main/java/org/dromara/workflow/domain/vo/WfNodeConfigVo.java b/ruoyi-modules/ruoyi-workflow/src/main/java/org/dromara/workflow/domain/vo/WfNodeConfigVo.java new file mode 100644 index 0000000..90b5ab5 --- /dev/null +++ b/ruoyi-modules/ruoyi-workflow/src/main/java/org/dromara/workflow/domain/vo/WfNodeConfigVo.java @@ -0,0 +1,69 @@ +package org.dromara.workflow.domain.vo; + +import org.dromara.workflow.domain.WfNodeConfig; +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_node_config + * + * @author may + * @date 2024-03-30 + */ +@Data +@ExcelIgnoreUnannotated +@AutoMapper(target = WfNodeConfig.class) +public class WfNodeConfigVo implements Serializable { + + @Serial + private static final long serialVersionUID = 1L; + + /** + * 涓婚敭 + */ + @ExcelProperty(value = "涓婚敭") + private Long id; + + /** + * 琛ㄥ崟id + */ + @ExcelProperty(value = "琛ㄥ崟id") + private Long formId; + + /** + * 琛ㄥ崟绫诲瀷 + */ + @ExcelProperty(value = "琛ㄥ崟绫诲瀷") + private String formType; + + /** + * 鑺傜偣鍚嶇О + */ + @ExcelProperty(value = "鑺傜偣鍚嶇О") + private String nodeName; + + /** + * 鑺傜偣id + */ + @ExcelProperty(value = "鑺傜偣id") + private String nodeId; + + /** + * 娴佺▼瀹氫箟id + */ + @ExcelProperty(value = "娴佺▼瀹氫箟id") + private String definitionId; + + /** + * 琛ㄥ崟绠$悊 + */ + private WfFormManageVo wfFormManageVo; + + +} diff --git a/ruoyi-modules/ruoyi-workflow/src/main/java/org/dromara/workflow/flowable/cmd/CustomInjectUserTaskCmd.java b/ruoyi-modules/ruoyi-workflow/src/main/java/org/dromara/workflow/flowable/cmd/CustomInjectUserTaskCmd.java new file mode 100644 index 0000000..a403c7c --- /dev/null +++ b/ruoyi-modules/ruoyi-workflow/src/main/java/org/dromara/workflow/flowable/cmd/CustomInjectUserTaskCmd.java @@ -0,0 +1,114 @@ +package org.dromara.workflow.flowable.cmd; + +import org.flowable.bpmn.BpmnAutoLayout; +import org.flowable.bpmn.model.*; +import org.flowable.bpmn.model.Process; +import org.flowable.common.engine.impl.interceptor.Command; +import org.flowable.common.engine.impl.interceptor.CommandContext; +import org.flowable.engine.impl.cmd.AbstractDynamicInjectionCmd; +import org.flowable.engine.impl.dynamic.BaseDynamicSubProcessInjectUtil; +import org.flowable.engine.impl.dynamic.DynamicUserTaskBuilder; +import org.flowable.engine.impl.persistence.entity.DeploymentEntity; +import org.flowable.engine.impl.persistence.entity.ExecutionEntity; +import org.flowable.engine.impl.persistence.entity.ProcessDefinitionEntity; + +import java.util.List; +import java.util.Map; + + +public class CustomInjectUserTaskCmd extends AbstractDynamicInjectionCmd implements Command<Void> { + + private final FlowElement currentElement; + private final String processInstanceId; + private final DynamicUserTaskBuilder dynamicUserTaskBuilder; + + public CustomInjectUserTaskCmd(String processInstanceId, DynamicUserTaskBuilder dynamicUserTaskBuilder, FlowElement currentElement) { + this.currentElement = currentElement; + this.processInstanceId = processInstanceId; + this.dynamicUserTaskBuilder = dynamicUserTaskBuilder; + } + + @Override + protected void updateBpmnProcess(CommandContext commandContext, Process process, BpmnModel bpmnModel, ProcessDefinitionEntity originalProcessDefinitionEntity, DeploymentEntity newDeploymentEntity) { + if (!(this.currentElement instanceof UserTask currentUserTask)) { + return; + } + if (currentUserTask.getOutgoingFlows().isEmpty() || currentUserTask.getOutgoingFlows().size() > 1) { + return; + } + SequenceFlow currentOutgoingFlow = currentUserTask.getOutgoingFlows().get(0); + FlowElement targetFlowElement = currentOutgoingFlow.getTargetFlowElement(); + //鍒涘缓鏂扮殑浠诲姟鑺傜偣鍜屼袱鏉¤繛绾� + UserTask newUserTask = createUserTask(process); + SequenceFlow newSequenceFlow1 = new SequenceFlow(currentUserTask.getId(), newUserTask.getId()); + newSequenceFlow1.setId(dynamicUserTaskBuilder.nextFlowId(process.getFlowElementMap())); + SequenceFlow newSequenceFlow2 = new SequenceFlow(newUserTask.getId(), targetFlowElement.getId()); + newSequenceFlow2.setId(dynamicUserTaskBuilder.nextFlowId(process.getFlowElementMap())); + //娣诲姞鍒版祦绋� + process.addFlowElement(newUserTask); + process.addFlowElement(newSequenceFlow1); + process.addFlowElement(newSequenceFlow2); + process.removeFlowElement(currentOutgoingFlow.getId()); + //鑾峰彇寮�濮嬭妭鐐� + StartEvent startEvent = process.findFlowElementsOfType(StartEvent.class, false).get(0); + //缁樺埗鏂扮殑娴佺▼鍥� + GraphicInfo elementGraphicInfo = bpmnModel.getGraphicInfo(currentUserTask.getId()); + if (elementGraphicInfo != null) { + double yDiff = 0; + double xDiff = 80; + if (elementGraphicInfo.getY() < 173) { + yDiff = 173 - elementGraphicInfo.getY(); + elementGraphicInfo.setY(173); + } + + Map<String, GraphicInfo> locationMap = bpmnModel.getLocationMap(); + for (String locationId : locationMap.keySet()) { + if (startEvent.getId().equals(locationId)) { + continue; + } + + GraphicInfo locationGraphicInfo = locationMap.get(locationId); + locationGraphicInfo.setX(locationGraphicInfo.getX() + xDiff); + locationGraphicInfo.setY(locationGraphicInfo.getY() + yDiff); + } + + Map<String, List<GraphicInfo>> flowLocationMap = bpmnModel.getFlowLocationMap(); + for (String flowId : flowLocationMap.keySet()) { + List<GraphicInfo> flowGraphicInfoList = flowLocationMap.get(flowId); + for (GraphicInfo flowGraphicInfo : flowGraphicInfoList) { + flowGraphicInfo.setX(flowGraphicInfo.getX() + xDiff); + flowGraphicInfo.setY(flowGraphicInfo.getY() + yDiff); + } + } + //绉婚櫎褰撳墠娴佺▼杩炵嚎 + bpmnModel.removeFlowGraphicInfoList(currentOutgoingFlow.getId()); + //閲嶆柊缁樺埗 + new BpmnAutoLayout(bpmnModel).execute(); + } + BaseDynamicSubProcessInjectUtil.processFlowElements(commandContext, process, bpmnModel, originalProcessDefinitionEntity, newDeploymentEntity); + } + + @Override + protected void updateExecutions(CommandContext commandContext, ProcessDefinitionEntity processDefinitionEntity, ExecutionEntity processInstance, List<ExecutionEntity> childExecutions) { + } + + private UserTask createUserTask(Process process) { + UserTask userTask = new UserTask(); + if (dynamicUserTaskBuilder.getId() != null) { + userTask.setId(dynamicUserTaskBuilder.getId()); + } else { + userTask.setId(dynamicUserTaskBuilder.nextTaskId(process.getFlowElementMap())); + } + dynamicUserTaskBuilder.setDynamicTaskId(userTask.getId()); + + userTask.setName(dynamicUserTaskBuilder.getName()); + userTask.setAssignee(dynamicUserTaskBuilder.getAssignee()); + return userTask; + } + + @Override + public Void execute(CommandContext commandContext) { + createDerivedProcessDefinitionForProcessInstance(commandContext, processInstanceId); + return null; + } +} diff --git a/ruoyi-modules/ruoyi-workflow/src/main/java/org/dromara/workflow/mapper/ActHiTaskinstMapper.java b/ruoyi-modules/ruoyi-workflow/src/main/java/org/dromara/workflow/mapper/ActHiTaskinstMapper.java index f8bb260..63b394b 100644 --- a/ruoyi-modules/ruoyi-workflow/src/main/java/org/dromara/workflow/mapper/ActHiTaskinstMapper.java +++ b/ruoyi-modules/ruoyi-workflow/src/main/java/org/dromara/workflow/mapper/ActHiTaskinstMapper.java @@ -7,7 +7,7 @@ /** * 娴佺▼鍘嗗彶浠诲姟Mapper鎺ュ彛 * - * @author gssong + * @author may * @date 2024-03-02 */ @InterceptorIgnore(tenantLine = "true") diff --git a/ruoyi-modules/ruoyi-workflow/src/main/java/org/dromara/workflow/mapper/ActTaskMapper.java b/ruoyi-modules/ruoyi-workflow/src/main/java/org/dromara/workflow/mapper/ActTaskMapper.java index 5682862..63c5ecb 100644 --- a/ruoyi-modules/ruoyi-workflow/src/main/java/org/dromara/workflow/mapper/ActTaskMapper.java +++ b/ruoyi-modules/ruoyi-workflow/src/main/java/org/dromara/workflow/mapper/ActTaskMapper.java @@ -13,7 +13,7 @@ /** * 浠诲姟淇℃伅Mapper鎺ュ彛 * - * @author gssong + * @author may * @date 2024-03-02 */ @InterceptorIgnore(tenantLine = "true") diff --git a/ruoyi-modules/ruoyi-workflow/src/main/java/org/dromara/workflow/mapper/WfDefinitionConfigMapper.java b/ruoyi-modules/ruoyi-workflow/src/main/java/org/dromara/workflow/mapper/WfDefinitionConfigMapper.java new file mode 100644 index 0000000..95e0b87 --- /dev/null +++ b/ruoyi-modules/ruoyi-workflow/src/main/java/org/dromara/workflow/mapper/WfDefinitionConfigMapper.java @@ -0,0 +1,15 @@ +package org.dromara.workflow.mapper; + +import org.dromara.workflow.domain.WfDefinitionConfig; +import org.dromara.workflow.domain.vo.WfDefinitionConfigVo; +import org.dromara.common.mybatis.core.mapper.BaseMapperPlus; + +/** + * 琛ㄥ崟閰嶇疆Mapper鎺ュ彛 + * + * @author may + * @date 2024-03-18 + */ +public interface WfDefinitionConfigMapper extends BaseMapperPlus<WfDefinitionConfig, WfDefinitionConfigVo> { + +} 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 deleted file mode 100644 index 4262532..0000000 --- a/ruoyi-modules/ruoyi-workflow/src/main/java/org/dromara/workflow/mapper/WfFormDefinitionMapper.java +++ /dev/null @@ -1,15 +0,0 @@ -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/mapper/WfFormManageMapper.java b/ruoyi-modules/ruoyi-workflow/src/main/java/org/dromara/workflow/mapper/WfFormManageMapper.java new file mode 100644 index 0000000..acf8111 --- /dev/null +++ b/ruoyi-modules/ruoyi-workflow/src/main/java/org/dromara/workflow/mapper/WfFormManageMapper.java @@ -0,0 +1,15 @@ +package org.dromara.workflow.mapper; + +import org.dromara.workflow.domain.WfFormManage; +import org.dromara.workflow.domain.vo.WfFormManageVo; +import org.dromara.common.mybatis.core.mapper.BaseMapperPlus; + +/** + * 琛ㄥ崟绠$悊Mapper鎺ュ彛 + * + * @author may + * @date 2024-03-29 + */ +public interface WfFormManageMapper extends BaseMapperPlus<WfFormManage, WfFormManageVo> { + +} diff --git a/ruoyi-modules/ruoyi-workflow/src/main/java/org/dromara/workflow/mapper/WfNodeConfigMapper.java b/ruoyi-modules/ruoyi-workflow/src/main/java/org/dromara/workflow/mapper/WfNodeConfigMapper.java new file mode 100644 index 0000000..d2aecac --- /dev/null +++ b/ruoyi-modules/ruoyi-workflow/src/main/java/org/dromara/workflow/mapper/WfNodeConfigMapper.java @@ -0,0 +1,15 @@ +package org.dromara.workflow.mapper; + +import org.dromara.workflow.domain.WfNodeConfig; +import org.dromara.workflow.domain.vo.WfNodeConfigVo; +import org.dromara.common.mybatis.core.mapper.BaseMapperPlus; + +/** + * 鑺傜偣閰嶇疆Mapper鎺ュ彛 + * + * @author may + * @date 2024-03-30 + */ +public interface WfNodeConfigMapper extends BaseMapperPlus<WfNodeConfig, WfNodeConfigVo> { + +} diff --git a/ruoyi-modules/ruoyi-workflow/src/main/java/org/dromara/workflow/service/IActHiTaskinstService.java b/ruoyi-modules/ruoyi-workflow/src/main/java/org/dromara/workflow/service/IActHiTaskinstService.java index d71e93f..ad286e2 100644 --- a/ruoyi-modules/ruoyi-workflow/src/main/java/org/dromara/workflow/service/IActHiTaskinstService.java +++ b/ruoyi-modules/ruoyi-workflow/src/main/java/org/dromara/workflow/service/IActHiTaskinstService.java @@ -4,7 +4,7 @@ /** * 娴佺▼鍘嗗彶浠诲姟Service鎺ュ彛 * - * @author gssong + * @author may * @date 2024-03-02 */ public interface IActHiTaskinstService { diff --git a/ruoyi-modules/ruoyi-workflow/src/main/java/org/dromara/workflow/service/IWfDefinitionConfigService.java b/ruoyi-modules/ruoyi-workflow/src/main/java/org/dromara/workflow/service/IWfDefinitionConfigService.java new file mode 100644 index 0000000..b9216a5 --- /dev/null +++ b/ruoyi-modules/ruoyi-workflow/src/main/java/org/dromara/workflow/service/IWfDefinitionConfigService.java @@ -0,0 +1,57 @@ +package org.dromara.workflow.service; + +import org.dromara.workflow.domain.vo.WfDefinitionConfigVo; +import org.dromara.workflow.domain.bo.WfDefinitionConfigBo; + +import java.util.Collection; +import java.util.List; + +/** + * 琛ㄥ崟閰嶇疆Service鎺ュ彛 + * + * @author may + * @date 2024-03-18 + */ +public interface IWfDefinitionConfigService { + + /** + * 鏌ヨ琛ㄥ崟閰嶇疆 + * + * @param definitionId 娴佺▼瀹氫箟id + * @return 缁撴灉 + */ + WfDefinitionConfigVo getByDefId(String definitionId); + + /** + * 鏌ヨ琛ㄥ崟閰嶇疆鍒楄〃 + * + * @param definitionIds 娴佺▼瀹氫箟id + * @return 缁撴灉 + */ + List<WfDefinitionConfigVo> queryList(List<String> definitionIds); + + + /** + * 鏂板琛ㄥ崟閰嶇疆 + * + * @param bo 鍙傛暟 + * @return 缁撴灉 + */ + Boolean saveOrUpdate(WfDefinitionConfigBo bo); + + /** + * 鍒犻櫎 + * + * @param ids id + * @return 缁撴灉 + */ + Boolean deleteByIds(Collection<Long> ids); + + /** + * 鎸夌収娴佺▼瀹氫箟id鍒犻櫎 + * + * @param ids 娴佺▼瀹氫箟id + * @return 缁撴灉 + */ + Boolean deleteByDefIds(Collection<String> ids); +} 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 deleted file mode 100644 index 683fc73..0000000 --- a/ruoyi-modules/ruoyi-workflow/src/main/java/org/dromara/workflow/service/IWfFormDefinitionService.java +++ /dev/null @@ -1,49 +0,0 @@ -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/IWfFormManageService.java b/ruoyi-modules/ruoyi-workflow/src/main/java/org/dromara/workflow/service/IWfFormManageService.java new file mode 100644 index 0000000..2ca2264 --- /dev/null +++ b/ruoyi-modules/ruoyi-workflow/src/main/java/org/dromara/workflow/service/IWfFormManageService.java @@ -0,0 +1,81 @@ +package org.dromara.workflow.service; + +import org.dromara.workflow.domain.vo.WfFormManageVo; +import org.dromara.workflow.domain.bo.WfFormManageBo; +import org.dromara.common.mybatis.core.page.TableDataInfo; +import org.dromara.common.mybatis.core.page.PageQuery; + +import java.util.Collection; +import java.util.List; + +/** + * 琛ㄥ崟绠$悊Service鎺ュ彛 + * + * @author may + * @date 2024-03-29 + */ +public interface IWfFormManageService { + + /** + * 鏌ヨ琛ㄥ崟绠$悊 + * + * @param id 涓婚敭 + * @return 缁撴灉 + */ + WfFormManageVo queryById(Long id); + + /** + * 鏌ヨ琛ㄥ崟绠$悊 + * + * @param ids 涓婚敭 + * @return 缁撴灉 + */ + List<WfFormManageVo> queryByIds(List<Long> ids); + + /** + * 鏌ヨ琛ㄥ崟绠$悊鍒楄〃 + * + * @param bo 鍙傛暟 + * @param pageQuery 鍒嗛〉 + * @return 缁撴灉 + */ + TableDataInfo<WfFormManageVo> queryPageList(WfFormManageBo bo, PageQuery pageQuery); + + /** + * 鏌ヨ琛ㄥ崟绠$悊鍒楄〃 + * + * @return 缁撴灉 + */ + List<WfFormManageVo> selectList(); + /** + * 鏌ヨ琛ㄥ崟绠$悊鍒楄〃 + * + * @param bo 鍙傛暟 + * @return 缁撴灉 + */ + List<WfFormManageVo> queryList(WfFormManageBo bo); + + /** + * 鏂板琛ㄥ崟绠$悊 + * + * @param bo 鍙傛暟 + * @return 缁撴灉 + */ + Boolean insertByBo(WfFormManageBo bo); + + /** + * 淇敼琛ㄥ崟绠$悊 + * + * @param bo 鍙傛暟 + * @return 缁撴灉 + */ + Boolean updateByBo(WfFormManageBo bo); + + /** + * 鎵归噺鍒犻櫎琛ㄥ崟绠$悊淇℃伅 + * + * @param ids 涓婚敭 + * @return 缁撴灉 + */ + Boolean deleteByIds(Collection<Long> ids); +} diff --git a/ruoyi-modules/ruoyi-workflow/src/main/java/org/dromara/workflow/service/IWfNodeConfigService.java b/ruoyi-modules/ruoyi-workflow/src/main/java/org/dromara/workflow/service/IWfNodeConfigService.java new file mode 100644 index 0000000..5e64d64 --- /dev/null +++ b/ruoyi-modules/ruoyi-workflow/src/main/java/org/dromara/workflow/service/IWfNodeConfigService.java @@ -0,0 +1,56 @@ +package org.dromara.workflow.service; + +import org.dromara.workflow.domain.WfNodeConfig; +import org.dromara.workflow.domain.vo.WfNodeConfigVo; + +import java.util.Collection; +import java.util.List; + +/** + * 鑺傜偣閰嶇疆Service鎺ュ彛 + * + * @author may + * @date 2024-03-30 + */ +public interface IWfNodeConfigService { + + /** + * 鏌ヨ鑺傜偣閰嶇疆 + * + * @param id 涓婚敭 + * @return 缁撴灉 + */ + WfNodeConfigVo queryById(Long id); + + /** + * 淇濆瓨鑺傜偣閰嶇疆 + * + * @param list 鍙傛暟 + * @return 缁撴灉 + */ + Boolean saveOrUpdate(List<WfNodeConfig> list); + + /** + * 鎵归噺鍒犻櫎鑺傜偣閰嶇疆淇℃伅 + * + * @param ids 涓婚敭 + * @return 缁撴灉 + */ + Boolean deleteByIds(Collection<Long> ids); + + /** + * 鎸夌収娴佺▼瀹氫箟id鍒犻櫎 + * + * @param ids 娴佺▼瀹氫箟id + * @return 缁撴灉 + */ + Boolean deleteByDefIds(Collection<String> ids); + + /** + * 鎸夌収娴佺▼瀹氫箟id鏌ヨ + * + * @param ids 娴佺▼瀹氫箟id + * @return 缁撴灉 + */ + List<WfNodeConfigVo> selectByDefIds(Collection<String> ids); +} diff --git a/ruoyi-modules/ruoyi-workflow/src/main/java/org/dromara/workflow/service/impl/ActHiTaskinstServiceImpl.java b/ruoyi-modules/ruoyi-workflow/src/main/java/org/dromara/workflow/service/impl/ActHiTaskinstServiceImpl.java index 7faabc2..5548f22 100644 --- a/ruoyi-modules/ruoyi-workflow/src/main/java/org/dromara/workflow/service/impl/ActHiTaskinstServiceImpl.java +++ b/ruoyi-modules/ruoyi-workflow/src/main/java/org/dromara/workflow/service/impl/ActHiTaskinstServiceImpl.java @@ -8,7 +8,7 @@ /** * 娴佺▼鍘嗗彶浠诲姟Service涓氬姟灞傚鐞� * - * @author gssong + * @author may * @date 2024-03-02 */ @RequiredArgsConstructor diff --git a/ruoyi-modules/ruoyi-workflow/src/main/java/org/dromara/workflow/service/impl/ActModelServiceImpl.java b/ruoyi-modules/ruoyi-workflow/src/main/java/org/dromara/workflow/service/impl/ActModelServiceImpl.java index e070dfd..226b88c 100644 --- a/ruoyi-modules/ruoyi-workflow/src/main/java/org/dromara/workflow/service/impl/ActModelServiceImpl.java +++ b/ruoyi-modules/ruoyi-workflow/src/main/java/org/dromara/workflow/service/impl/ActModelServiceImpl.java @@ -7,27 +7,30 @@ import cn.hutool.core.util.StrUtil; import cn.hutool.core.util.ZipUtil; import cn.hutool.json.JSONUtil; +import com.alibaba.excel.util.StringUtils; import jakarta.servlet.http.HttpServletResponse; import lombok.RequiredArgsConstructor; import org.apache.batik.transcoder.TranscoderInput; import org.apache.batik.transcoder.TranscoderOutput; import org.apache.batik.transcoder.image.PNGTranscoder; import org.apache.commons.io.IOUtils; -import org.apache.commons.lang3.StringUtils; import org.dromara.common.core.exception.ServiceException; import org.dromara.common.mybatis.core.page.PageQuery; import org.dromara.common.mybatis.core.page.TableDataInfo; import org.dromara.common.tenant.helper.TenantHelper; import org.dromara.workflow.common.constant.FlowConstant; +import org.dromara.workflow.domain.WfNodeConfig; import org.dromara.workflow.domain.bo.ModelBo; -import org.dromara.workflow.domain.bo.WfFormDefinitionBo; +import org.dromara.workflow.domain.bo.WfDefinitionConfigBo; import org.dromara.workflow.domain.vo.ModelVo; -import org.dromara.workflow.domain.vo.WfFormDefinitionVo; +import org.dromara.workflow.domain.vo.WfDefinitionConfigVo; import org.dromara.workflow.service.IActModelService; -import org.dromara.workflow.service.IWfFormDefinitionService; +import org.dromara.workflow.service.IWfDefinitionConfigService; +import org.dromara.workflow.service.IWfNodeConfigService; import org.dromara.workflow.utils.ModelUtils; import org.dromara.workflow.utils.QueryUtils; import org.flowable.bpmn.model.BpmnModel; +import org.flowable.bpmn.model.UserTask; import org.flowable.engine.RepositoryService; import org.flowable.engine.repository.*; import org.flowable.validation.ValidationError; @@ -40,6 +43,7 @@ import java.io.InputStream; import java.net.URLEncoder; import java.nio.charset.StandardCharsets; +import java.util.ArrayList; import java.util.List; import java.util.stream.Collectors; import java.util.zip.ZipEntry; @@ -55,7 +59,8 @@ public class ActModelServiceImpl implements IActModelService { private final RepositoryService repositoryService; - private final IWfFormDefinitionService iWfFormDefinitionService; + private final IWfDefinitionConfigService iWfDefinitionConfigService; + private final IWfNodeConfigService iWfNodeConfigService; /** * 鍒嗛〉鏌ヨ妯″瀷 @@ -66,13 +71,13 @@ @Override public TableDataInfo<Model> page(ModelBo modelBo, PageQuery pageQuery) { ModelQuery query = QueryUtils.modelQuery(); - if (StringUtils.isNotEmpty(modelBo.getName())) { + if (StringUtils.isNotBlank(modelBo.getName())) { query.modelNameLike("%" + modelBo.getName() + "%"); } - if (StringUtils.isNotEmpty(modelBo.getKey())) { + if (StringUtils.isNotBlank(modelBo.getKey())) { query.modelKey(modelBo.getKey()); } - if (StringUtils.isNotEmpty(modelBo.getCategoryCode())) { + if (StringUtils.isNotBlank(modelBo.getCategoryCode())) { query.modelCategory(modelBo.getCategoryCode()); } query.orderByLastUpdateTime().desc(); @@ -279,17 +284,36 @@ // 鏇存柊鍒嗙被 ProcessDefinition definition = QueryUtils.definitionQuery().deploymentId(deployment.getId()).singleResult(); repositoryService.setProcessDefinitionCategory(definition.getId(), model.getCategory()); + //鏇存柊娴佺▼瀹氫箟琛ㄥ崟 if (processDefinition != null) { - WfFormDefinitionVo definitionVo = iWfFormDefinitionService.getByDefId(processDefinition.getId()); + WfDefinitionConfigVo definitionVo = iWfDefinitionConfigService.getByDefId(processDefinition.getId()); if (definitionVo != null) { - WfFormDefinitionBo wfFormDefinition = new WfFormDefinitionBo(); + WfDefinitionConfigBo wfFormDefinition = new WfDefinitionConfigBo(); wfFormDefinition.setDefinitionId(definition.getId()); wfFormDefinition.setProcessKey(definition.getKey()); - wfFormDefinition.setPath(definitionVo.getPath()); + wfFormDefinition.setFormId(ObjectUtil.isNotNull(definitionVo.getFormId()) ? definitionVo.getFormId() : null); wfFormDefinition.setRemark(definitionVo.getRemark()); - iWfFormDefinitionService.saveOrUpdate(wfFormDefinition); + iWfDefinitionConfigService.saveOrUpdate(wfFormDefinition); } } + //鏇存柊娴佺▼鑺傜偣閰嶇疆琛ㄥ崟 + List<UserTask> userTasks = ModelUtils.getuserTaskFlowElements(definition.getId()); + List<WfNodeConfig> wfNodeConfigList = new ArrayList<>(); + for (UserTask userTask : userTasks) { + if (StringUtils.isNotBlank(userTask.getFormKey()) && userTask.getFormKey().contains(StrUtil.COLON)) { + WfNodeConfig wfNodeConfig = new WfNodeConfig(); + wfNodeConfig.setNodeId(userTask.getId()); + wfNodeConfig.setNodeName(userTask.getName()); + wfNodeConfig.setDefinitionId(definition.getId()); + String[] split = userTask.getFormKey().split(StrUtil.COLON); + wfNodeConfig.setFormType(split[0]); + wfNodeConfig.setFormId(Long.valueOf(split[1])); + wfNodeConfigList.add(wfNodeConfig); + } + } + if (CollUtil.isNotEmpty(wfNodeConfigList)) { + iWfNodeConfigService.saveOrUpdate(wfNodeConfigList); + } return true; } catch (Exception e) { e.printStackTrace(); 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 dafbad6..3ec2c47 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 @@ -7,6 +7,7 @@ import cn.hutool.core.io.FileUtil; import cn.hutool.core.io.IoUtil; import cn.hutool.core.util.ObjectUtil; +import cn.hutool.core.util.StrUtil; import lombok.RequiredArgsConstructor; import lombok.SneakyThrows; import org.apache.commons.io.IOUtils; @@ -18,13 +19,18 @@ import org.dromara.common.tenant.helper.TenantHelper; import org.dromara.workflow.common.constant.FlowConstant; import org.dromara.workflow.domain.WfCategory; +import org.dromara.workflow.domain.WfNodeConfig; import org.dromara.workflow.domain.bo.ProcessDefinitionBo; +import org.dromara.workflow.domain.bo.WfDefinitionConfigBo; import org.dromara.workflow.domain.vo.ProcessDefinitionVo; -import org.dromara.workflow.domain.vo.WfFormDefinitionVo; +import org.dromara.workflow.domain.vo.WfDefinitionConfigVo; import org.dromara.workflow.service.IActProcessDefinitionService; import org.dromara.workflow.service.IWfCategoryService; -import org.dromara.workflow.service.IWfFormDefinitionService; +import org.dromara.workflow.service.IWfDefinitionConfigService; +import org.dromara.workflow.service.IWfNodeConfigService; +import org.dromara.workflow.utils.ModelUtils; import org.dromara.workflow.utils.QueryUtils; +import org.flowable.bpmn.model.UserTask; import org.flowable.engine.ProcessMigrationService; import org.flowable.engine.RepositoryService; import org.flowable.engine.impl.bpmn.deployer.ResourceNameUtil; @@ -38,6 +44,7 @@ import java.io.InputStream; import java.nio.charset.StandardCharsets; import java.util.ArrayList; +import java.util.Collections; import java.util.List; import java.util.zip.ZipEntry; import java.util.zip.ZipInputStream; @@ -54,7 +61,8 @@ private final RepositoryService repositoryService; private final ProcessMigrationService processMigrationService; private final IWfCategoryService wfCategoryService; - private final IWfFormDefinitionService iWfFormDefinitionService; + private final IWfDefinitionConfigService iWfDefinitionConfigService; + private final IWfNodeConfigService iWfNodeConfigService; /** * 鍒嗛〉鏌ヨ @@ -85,7 +93,7 @@ } if (CollUtil.isNotEmpty(definitionList)) { List<String> ids = StreamUtils.toList(definitionList, ProcessDefinition::getId); - List<WfFormDefinitionVo> wfFormDefinitionVos = iWfFormDefinitionService.queryList(ids); + List<WfDefinitionConfigVo> wfDefinitionConfigVos = iWfDefinitionConfigService.queryList(ids); for (ProcessDefinition processDefinition : definitionList) { ProcessDefinitionVo processDefinitionVo = BeanUtil.toBean(processDefinition, ProcessDefinitionVo.class); if (CollUtil.isNotEmpty(deploymentList)) { @@ -94,8 +102,8 @@ processDefinitionVo.setDeploymentTime(e.getDeploymentTime()); }); } - if (CollUtil.isNotEmpty(wfFormDefinitionVos)) { - wfFormDefinitionVos.stream().filter(e -> e.getDefinitionId().equals(processDefinition.getId())).findFirst().ifPresent(processDefinitionVo::setWfFormDefinitionVo); + if (CollUtil.isNotEmpty(wfDefinitionConfigVos)) { + wfDefinitionConfigVos.stream().filter(e -> e.getDefinitionId().equals(processDefinition.getId())).findFirst().ifPresent(processDefinitionVo::setWfDefinitionConfigVo); } processDefinitionVoList.add(processDefinitionVo); } @@ -125,7 +133,7 @@ } if (CollUtil.isNotEmpty(definitionList)) { List<String> ids = StreamUtils.toList(definitionList, ProcessDefinition::getId); - List<WfFormDefinitionVo> wfFormDefinitionVos = iWfFormDefinitionService.queryList(ids); + List<WfDefinitionConfigVo> wfDefinitionConfigVos = iWfDefinitionConfigService.queryList(ids); for (ProcessDefinition processDefinition : definitionList) { ProcessDefinitionVo processDefinitionVo = BeanUtil.toBean(processDefinition, ProcessDefinitionVo.class); if (CollUtil.isNotEmpty(deploymentList)) { @@ -133,8 +141,8 @@ 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); + if (CollUtil.isNotEmpty(wfDefinitionConfigVos)) { + wfDefinitionConfigVos.stream().filter(e -> e.getDefinitionId().equals(processDefinition.getId())).findFirst().ifPresent(processDefinitionVo::setWfDefinitionConfigVo); } } processDefinitionVoList.add(processDefinitionVo); @@ -192,7 +200,9 @@ //鍒犻櫎娴佺▼瀹氫箟 repositoryService.deleteDeployment(deploymentId); //鍒犻櫎琛ㄥ崟閰嶇疆 - iWfFormDefinitionService.getByDefId(processDefinitionId); + iWfDefinitionConfigService.deleteByDefIds(Collections.singletonList(processDefinitionId)); + //鍒犻櫎鑺傜偣閰嶇疆 + iWfNodeConfigService.deleteByDefIds(Collections.singletonList(processDefinitionId)); return true; } catch (Exception e) { e.printStackTrace(); @@ -313,12 +323,14 @@ String processName = splitFilename[0]; //娴佺▼key String processKey = splitFilename[1]; + ProcessDefinition oldProcessDefinition = QueryUtils.definitionQuery().processDefinitionKey(processKey).latestVersion().singleResult(); DeploymentBuilder builder = repositoryService.createDeployment(); Deployment deployment = builder.addInputStream(filename, zipInputStream) .tenantId(TenantHelper.getTenantId()) .name(processName).key(processKey).category(categoryCode).deploy(); ProcessDefinition definition = QueryUtils.definitionQuery().deploymentId(deployment.getId()).singleResult(); repositoryService.setProcessDefinitionCategory(definition.getId(), categoryCode); + setForm(oldProcessDefinition, definition); zipInputStream.closeEntry(); } } catch (IOException e) { @@ -341,6 +353,8 @@ String processName = splitFilename[0]; //娴佺▼key String processKey = splitFilename[1]; + ProcessDefinition oldProcessDefinition = QueryUtils.definitionQuery().processDefinitionKey(processKey).latestVersion().singleResult(); + DeploymentBuilder builder = repositoryService.createDeployment(); Deployment deployment = builder.addInputStream(originalFilename, inputStream) .tenantId(TenantHelper.getTenantId()) @@ -348,10 +362,51 @@ // 鏇存柊鍒嗙被 ProcessDefinition definition = QueryUtils.definitionQuery().deploymentId(deployment.getId()).singleResult(); repositoryService.setProcessDefinitionCategory(definition.getId(), categoryCode); + setForm(oldProcessDefinition, definition); + } else { throw new ServiceException("鏂囦欢绫诲瀷涓婁紶閿欒锛�"); } } } + + /** + * 璁剧疆琛ㄥ崟鍐呭 + * + * @param oldProcessDefinition 閮ㄧ讲鍓嶆渶鏂版祦绋嬪畾涔� + * @param definition 閮ㄧ讲鍚庢渶鏂版祦绋嬪畾涔� + */ + private void setForm(ProcessDefinition oldProcessDefinition, ProcessDefinition definition) { + //鏇存柊娴佺▼瀹氫箟琛ㄥ崟 + if (oldProcessDefinition != null) { + WfDefinitionConfigVo definitionVo = iWfDefinitionConfigService.getByDefId(oldProcessDefinition.getId()); + if (definitionVo != null) { + WfDefinitionConfigBo wfFormDefinition = new WfDefinitionConfigBo(); + wfFormDefinition.setDefinitionId(definition.getId()); + wfFormDefinition.setProcessKey(definition.getKey()); + wfFormDefinition.setFormId(ObjectUtil.isNotNull(definitionVo.getFormId()) ? definitionVo.getFormId() : null); + wfFormDefinition.setRemark(definitionVo.getRemark()); + iWfDefinitionConfigService.saveOrUpdate(wfFormDefinition); + } + } + //鏇存柊娴佺▼鑺傜偣閰嶇疆琛ㄥ崟 + List<UserTask> userTasks = ModelUtils.getuserTaskFlowElements(definition.getId()); + List<WfNodeConfig> wfNodeConfigList = new ArrayList<>(); + for (UserTask userTask : userTasks) { + if (StringUtils.isNotBlank(userTask.getFormKey()) && userTask.getFormKey().contains(StrUtil.COLON)) { + WfNodeConfig wfNodeConfig = new WfNodeConfig(); + wfNodeConfig.setNodeId(userTask.getId()); + wfNodeConfig.setNodeName(userTask.getName()); + wfNodeConfig.setDefinitionId(definition.getId()); + String[] split = userTask.getFormKey().split(StrUtil.COLON); + wfNodeConfig.setFormType(split[0]); + wfNodeConfig.setFormId(Long.valueOf(split[1])); + wfNodeConfigList.add(wfNodeConfig); + } + } + if (CollUtil.isNotEmpty(wfNodeConfigList)) { + iWfNodeConfigService.saveOrUpdate(wfNodeConfigList); + } + } } diff --git a/ruoyi-modules/ruoyi-workflow/src/main/java/org/dromara/workflow/service/impl/ActProcessInstanceServiceImpl.java b/ruoyi-modules/ruoyi-workflow/src/main/java/org/dromara/workflow/service/impl/ActProcessInstanceServiceImpl.java index 3edf8ec..d316520 100644 --- a/ruoyi-modules/ruoyi-workflow/src/main/java/org/dromara/workflow/service/impl/ActProcessInstanceServiceImpl.java +++ b/ruoyi-modules/ruoyi-workflow/src/main/java/org/dromara/workflow/service/impl/ActProcessInstanceServiceImpl.java @@ -122,7 +122,7 @@ } if (CollUtil.isNotEmpty(list)) { List<String> processDefinitionIds = StreamUtils.toList(list, ProcessInstanceVo::getProcessDefinitionId); - WorkflowUtils.setWfFormDefinitionVo(list, processDefinitionIds, PROCESS_DEFINITION_ID); + WorkflowUtils.setWfDefinitionConfigVo(list, processDefinitionIds, PROCESS_DEFINITION_ID); } long count = query.count(); TableDataInfo<ProcessInstanceVo> build = TableDataInfo.build(); @@ -164,7 +164,7 @@ } if (CollUtil.isNotEmpty(list)) { List<String> processDefinitionIds = StreamUtils.toList(list, ProcessInstanceVo::getProcessDefinitionId); - WorkflowUtils.setWfFormDefinitionVo(list, processDefinitionIds, PROCESS_DEFINITION_ID); + WorkflowUtils.setWfDefinitionConfigVo(list, processDefinitionIds, PROCESS_DEFINITION_ID); } long count = query.count(); TableDataInfo<ProcessInstanceVo> build = TableDataInfo.build(); @@ -669,7 +669,7 @@ } if (CollUtil.isNotEmpty(list)) { List<String> processDefinitionIds = StreamUtils.toList(list, ProcessInstanceVo::getProcessDefinitionId); - WorkflowUtils.setWfFormDefinitionVo(list, processDefinitionIds, PROCESS_DEFINITION_ID); + WorkflowUtils.setWfDefinitionConfigVo(list, processDefinitionIds, PROCESS_DEFINITION_ID); } long count = query.count(); TableDataInfo<ProcessInstanceVo> build = TableDataInfo.build(); 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 44d6932..871db16 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 @@ -30,6 +30,7 @@ import org.dromara.workflow.mapper.ActHiTaskinstMapper; import org.dromara.workflow.mapper.ActTaskMapper; import org.dromara.workflow.service.IActTaskService; +import org.dromara.workflow.service.IWfNodeConfigService; import org.dromara.workflow.service.IWfTaskBackNodeService; import org.dromara.workflow.utils.ModelUtils; import org.dromara.workflow.utils.QueryUtils; @@ -76,6 +77,7 @@ private final ActTaskMapper actTaskMapper; private final IWfTaskBackNodeService iWfTaskBackNodeService; private final ActHiTaskinstMapper actHiTaskinstMapper; + private final IWfNodeConfigService iWfNodeConfigService; /** * 鍚姩浠诲姟 @@ -273,13 +275,17 @@ List<TaskVo> taskList = page.getRecords(); if (CollUtil.isNotEmpty(taskList)) { + List<String> processDefinitionIds = StreamUtils.toList(taskList, TaskVo::getProcessDefinitionId); + List<WfNodeConfigVo> wfNodeConfigVoList = iWfNodeConfigService.selectByDefIds(processDefinitionIds); 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(wfNodeConfigVoList)) { + wfNodeConfigVoList.stream().filter(e -> e.getDefinitionId().equals(task.getProcessDefinitionId()) && e.getNodeId().equals(task.getTaskDefinitionKey())).findFirst().ifPresent(task::setWfNodeConfigVo); + } } - List<String> processDefinitionIds = StreamUtils.toList(taskList, TaskVo::getProcessDefinitionId); - WorkflowUtils.setWfFormDefinitionVo(taskList, processDefinitionIds, PROCESS_DEFINITION_ID); + WorkflowUtils.setWfDefinitionConfigVo(taskList, processDefinitionIds, PROCESS_DEFINITION_ID); } return TableDataInfo.build(page); } @@ -322,25 +328,29 @@ processInstanceList = QueryUtils.instanceQuery(processInstanceIds).list(); } List<TaskVo> list = new ArrayList<>(); - for (Task task : taskList) { - TaskVo taskVo = BeanUtil.toBean(task, TaskVo.class); - if (CollUtil.isNotEmpty(processInstanceList)) { - processInstanceList.stream().filter(e -> e.getId().equals(task.getProcessInstanceId())).findFirst().ifPresent(e -> { - taskVo.setBusinessStatus(e.getBusinessStatus()); - taskVo.setBusinessStatusName(BusinessStatusEnum.findByStatus(taskVo.getBusinessStatus())); - taskVo.setProcessDefinitionKey(e.getProcessDefinitionKey()); - taskVo.setProcessDefinitionName(e.getProcessDefinitionName()); - taskVo.setBusinessKey(e.getBusinessKey()); - }); + if (CollUtil.isNotEmpty(taskList)) { + List<String> processDefinitionIds = StreamUtils.toList(taskList, Task::getProcessDefinitionId); + List<WfNodeConfigVo> wfNodeConfigVoList = iWfNodeConfigService.selectByDefIds(processDefinitionIds); + for (Task task : taskList) { + TaskVo taskVo = BeanUtil.toBean(task, TaskVo.class); + if (CollUtil.isNotEmpty(processInstanceList)) { + processInstanceList.stream().filter(e -> e.getId().equals(task.getProcessInstanceId())).findFirst().ifPresent(e -> { + taskVo.setBusinessStatus(e.getBusinessStatus()); + taskVo.setBusinessStatusName(BusinessStatusEnum.findByStatus(taskVo.getBusinessStatus())); + taskVo.setProcessDefinitionKey(e.getProcessDefinitionKey()); + taskVo.setProcessDefinitionName(e.getProcessDefinitionName()); + taskVo.setBusinessKey(e.getBusinessKey()); + }); + } + taskVo.setAssignee(StringUtils.isNotBlank(task.getAssignee()) ? Long.valueOf(task.getAssignee()) : null); + taskVo.setParticipantVo(WorkflowUtils.getCurrentTaskParticipant(task.getId())); + taskVo.setMultiInstance(WorkflowUtils.isMultiInstance(task.getProcessDefinitionId(), task.getTaskDefinitionKey()) != null); + if (CollUtil.isNotEmpty(wfNodeConfigVoList)) { + wfNodeConfigVoList.stream().filter(e -> e.getDefinitionId().equals(task.getProcessDefinitionId()) && e.getNodeId().equals(task.getTaskDefinitionKey())).findFirst().ifPresent(taskVo::setWfNodeConfigVo); + } + list.add(taskVo); } - taskVo.setAssignee(StringUtils.isNotBlank(task.getAssignee()) ? Long.valueOf(task.getAssignee()) : null); - taskVo.setParticipantVo(WorkflowUtils.getCurrentTaskParticipant(task.getId())); - taskVo.setMultiInstance(WorkflowUtils.isMultiInstance(task.getProcessDefinitionId(), task.getTaskDefinitionKey()) != null); - list.add(taskVo); - } - if (CollUtil.isNotEmpty(list)) { - List<String> processDefinitionIds = StreamUtils.toList(list, TaskVo::getProcessDefinitionId); - WorkflowUtils.setWfFormDefinitionVo(list, processDefinitionIds, PROCESS_DEFINITION_ID); + WorkflowUtils.setWfDefinitionConfigVo(list, processDefinitionIds, PROCESS_DEFINITION_ID); } long count = query.count(); TableDataInfo<TaskVo> build = TableDataInfo.build(); @@ -366,11 +376,15 @@ List<TaskVo> taskList = page.getRecords(); if (CollUtil.isNotEmpty(taskList)) { + List<String> processDefinitionIds = StreamUtils.toList(taskList, TaskVo::getProcessDefinitionId); + List<WfNodeConfigVo> wfNodeConfigVoList = iWfNodeConfigService.selectByDefIds(processDefinitionIds); for (TaskVo task : taskList) { task.setBusinessStatusName(BusinessStatusEnum.findByStatus(task.getBusinessStatus())); + if (CollUtil.isNotEmpty(wfNodeConfigVoList)) { + wfNodeConfigVoList.stream().filter(e -> e.getDefinitionId().equals(task.getProcessDefinitionId()) && e.getNodeId().equals(task.getTaskDefinitionKey())).findFirst().ifPresent(task::setWfNodeConfigVo); + } } - List<String> processDefinitionIds = StreamUtils.toList(taskList, TaskVo::getProcessDefinitionId); - WorkflowUtils.setWfFormDefinitionVo(taskList, processDefinitionIds, PROCESS_DEFINITION_ID); + WorkflowUtils.setWfDefinitionConfigVo(taskList, processDefinitionIds, PROCESS_DEFINITION_ID); } return TableDataInfo.build(page); } @@ -397,12 +411,17 @@ Page<TaskVo> page = actTaskMapper.getTaskCopyByPage(pageQuery.build(), queryWrapper); List<TaskVo> taskList = page.getRecords(); - for (TaskVo task : taskList) { - task.setBusinessStatusName(BusinessStatusEnum.findByStatus(task.getBusinessStatus())); - } if (CollUtil.isNotEmpty(taskList)) { List<String> processDefinitionIds = StreamUtils.toList(taskList, TaskVo::getProcessDefinitionId); - WorkflowUtils.setWfFormDefinitionVo(taskList, processDefinitionIds, PROCESS_DEFINITION_ID); + List<WfNodeConfigVo> wfNodeConfigVoList = iWfNodeConfigService.selectByDefIds(processDefinitionIds); + for (TaskVo task : taskList) { + task.setBusinessStatusName(BusinessStatusEnum.findByStatus(task.getBusinessStatus())); + if (CollUtil.isNotEmpty(wfNodeConfigVoList)) { + wfNodeConfigVoList.stream().filter(e -> e.getDefinitionId().equals(task.getProcessDefinitionId()) && e.getNodeId().equals(task.getTaskDefinitionKey())).findFirst().ifPresent(task::setWfNodeConfigVo); + } + } + WorkflowUtils.setWfDefinitionConfigVo(taskList, processDefinitionIds, PROCESS_DEFINITION_ID); + } return TableDataInfo.build(page); } @@ -426,7 +445,7 @@ } if (CollUtil.isNotEmpty(taskList)) { List<String> processDefinitionIds = StreamUtils.toList(taskList, TaskVo::getProcessDefinitionId); - WorkflowUtils.setWfFormDefinitionVo(taskList, processDefinitionIds, PROCESS_DEFINITION_ID); + WorkflowUtils.setWfDefinitionConfigVo(taskList, processDefinitionIds, PROCESS_DEFINITION_ID); } return TableDataInfo.build(page); } diff --git a/ruoyi-modules/ruoyi-workflow/src/main/java/org/dromara/workflow/service/impl/WfDefinitionConfigServiceImpl.java b/ruoyi-modules/ruoyi-workflow/src/main/java/org/dromara/workflow/service/impl/WfDefinitionConfigServiceImpl.java new file mode 100644 index 0000000..5127d66 --- /dev/null +++ b/ruoyi-modules/ruoyi-workflow/src/main/java/org/dromara/workflow/service/impl/WfDefinitionConfigServiceImpl.java @@ -0,0 +1,71 @@ +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.dromara.workflow.domain.WfDefinitionConfig; +import org.dromara.workflow.domain.bo.WfDefinitionConfigBo; +import org.dromara.workflow.domain.vo.WfDefinitionConfigVo; +import org.dromara.workflow.service.IWfDefinitionConfigService; +import org.springframework.stereotype.Service; +import org.dromara.workflow.mapper.WfDefinitionConfigMapper; +import org.springframework.transaction.annotation.Transactional; + +import java.util.List; +import java.util.Collection; + +/** + * 琛ㄥ崟閰嶇疆Service涓氬姟灞傚鐞� + * + * @author may + * @date 2024-03-18 + */ +@RequiredArgsConstructor +@Service +public class WfDefinitionConfigServiceImpl implements IWfDefinitionConfigService { + + private final WfDefinitionConfigMapper baseMapper; + + /** + * 鏌ヨ琛ㄥ崟閰嶇疆 + */ + @Override + public WfDefinitionConfigVo getByDefId(String definitionId) { + return baseMapper.selectVoOne(new LambdaQueryWrapper<WfDefinitionConfig>().eq(WfDefinitionConfig::getDefinitionId, definitionId)); + } + + /** + * 鏌ヨ琛ㄥ崟閰嶇疆鍒楄〃 + */ + @Override + public List<WfDefinitionConfigVo> queryList(List<String> definitionIds) { + return baseMapper.selectVoList(new LambdaQueryWrapper<WfDefinitionConfig>().in(WfDefinitionConfig::getDefinitionId, definitionIds)); + } + + /** + * 鏂板琛ㄥ崟閰嶇疆 + */ + @Override + @Transactional(rollbackFor = Exception.class) + public Boolean saveOrUpdate(WfDefinitionConfigBo bo) { + WfDefinitionConfig add = MapstructUtils.convert(bo, WfDefinitionConfig.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; + } + + @Override + public Boolean deleteByDefIds(Collection<String> ids) { + return baseMapper.delete(new LambdaQueryWrapper<WfDefinitionConfig>().in(WfDefinitionConfig::getDefinitionId, ids)) > 0; + } +} 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 deleted file mode 100644 index 00def95..0000000 --- a/ruoyi-modules/ruoyi-workflow/src/main/java/org/dromara/workflow/service/impl/WfFormDefinitionServiceImpl.java +++ /dev/null @@ -1,66 +0,0 @@ -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/service/impl/WfFormManageServiceImpl.java b/ruoyi-modules/ruoyi-workflow/src/main/java/org/dromara/workflow/service/impl/WfFormManageServiceImpl.java new file mode 100644 index 0000000..e0850d7 --- /dev/null +++ b/ruoyi-modules/ruoyi-workflow/src/main/java/org/dromara/workflow/service/impl/WfFormManageServiceImpl.java @@ -0,0 +1,111 @@ +package org.dromara.workflow.service.impl; + +import org.dromara.common.core.utils.MapstructUtils; +import org.dromara.common.core.utils.StringUtils; +import org.dromara.common.mybatis.core.page.TableDataInfo; +import org.dromara.common.mybatis.core.page.PageQuery; +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; +import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; +import com.baomidou.mybatisplus.core.toolkit.Wrappers; +import lombok.RequiredArgsConstructor; +import org.dromara.workflow.common.enums.FormTypeEnum; +import org.springframework.stereotype.Service; +import org.dromara.workflow.domain.bo.WfFormManageBo; +import org.dromara.workflow.domain.vo.WfFormManageVo; +import org.dromara.workflow.domain.WfFormManage; +import org.dromara.workflow.mapper.WfFormManageMapper; +import org.dromara.workflow.service.IWfFormManageService; + +import java.util.List; +import java.util.Collection; + +/** + * 琛ㄥ崟绠$悊Service涓氬姟灞傚鐞� + * + * @author may + * @date 2024-03-29 + */ +@RequiredArgsConstructor +@Service +public class WfFormManageServiceImpl implements IWfFormManageService { + + private final WfFormManageMapper baseMapper; + + /** + * 鏌ヨ琛ㄥ崟绠$悊 + */ + @Override + public WfFormManageVo queryById(Long id) { + return baseMapper.selectVoById(id); + } + + @Override + public List<WfFormManageVo> queryByIds(List<Long> ids) { + return baseMapper.selectVoBatchIds(ids); + } + + /** + * 鏌ヨ琛ㄥ崟绠$悊鍒楄〃 + */ + @Override + public TableDataInfo<WfFormManageVo> queryPageList(WfFormManageBo bo, PageQuery pageQuery) { + LambdaQueryWrapper<WfFormManage> lqw = buildQueryWrapper(bo); + Page<WfFormManageVo> result = baseMapper.selectVoPage(pageQuery.build(), lqw); + return TableDataInfo.build(result); + } + + @Override + public List<WfFormManageVo> selectList() { + List<WfFormManageVo> wfFormManageVos = baseMapper.selectVoList(new LambdaQueryWrapper<WfFormManage>().orderByDesc(WfFormManage::getUpdateTime)); + for (WfFormManageVo wfFormManageVo : wfFormManageVos) { + wfFormManageVo.setFormTypeName(FormTypeEnum.findByType(wfFormManageVo.getFormType())); + } + return wfFormManageVos; + } + + /** + * 鏌ヨ琛ㄥ崟绠$悊鍒楄〃 + */ + @Override + public List<WfFormManageVo> queryList(WfFormManageBo bo) { + LambdaQueryWrapper<WfFormManage> lqw = buildQueryWrapper(bo); + return baseMapper.selectVoList(lqw); + } + + private LambdaQueryWrapper<WfFormManage> buildQueryWrapper(WfFormManageBo bo) { + LambdaQueryWrapper<WfFormManage> lqw = Wrappers.lambdaQuery(); + lqw.like(StringUtils.isNotBlank(bo.getFormName()), WfFormManage::getFormName, bo.getFormName()); + lqw.eq(StringUtils.isNotBlank(bo.getFormType()), WfFormManage::getFormType, bo.getFormType()); + return lqw; + } + + /** + * 鏂板琛ㄥ崟绠$悊 + */ + @Override + public Boolean insertByBo(WfFormManageBo bo) { + WfFormManage add = MapstructUtils.convert(bo, WfFormManage.class); + boolean flag = baseMapper.insert(add) > 0; + if (flag) { + bo.setId(add.getId()); + } + return flag; + } + + /** + * 淇敼琛ㄥ崟绠$悊 + */ + @Override + public Boolean updateByBo(WfFormManageBo bo) { + WfFormManage update = MapstructUtils.convert(bo, WfFormManage.class); + return baseMapper.updateById(update) > 0; + } + + /** + * 鎵归噺鍒犻櫎琛ㄥ崟绠$悊 + */ + @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/service/impl/WfNodeConfigServiceImpl.java b/ruoyi-modules/ruoyi-workflow/src/main/java/org/dromara/workflow/service/impl/WfNodeConfigServiceImpl.java new file mode 100644 index 0000000..e47d4af --- /dev/null +++ b/ruoyi-modules/ruoyi-workflow/src/main/java/org/dromara/workflow/service/impl/WfNodeConfigServiceImpl.java @@ -0,0 +1,73 @@ +package org.dromara.workflow.service.impl; + +import cn.hutool.core.collection.CollUtil; +import cn.hutool.core.util.ObjectUtil; +import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; +import lombok.RequiredArgsConstructor; +import org.dromara.common.core.utils.StreamUtils; +import org.dromara.workflow.domain.vo.WfFormManageVo; +import org.dromara.workflow.service.IWfFormManageService; +import org.springframework.stereotype.Service; +import org.dromara.workflow.domain.vo.WfNodeConfigVo; +import org.dromara.workflow.domain.WfNodeConfig; +import org.dromara.workflow.mapper.WfNodeConfigMapper; +import org.dromara.workflow.service.IWfNodeConfigService; + +import java.util.Collection; +import java.util.List; + +/** + * 鑺傜偣閰嶇疆Service涓氬姟灞傚鐞� + * + * @author may + * @date 2024-03-30 + */ +@RequiredArgsConstructor +@Service +public class WfNodeConfigServiceImpl implements IWfNodeConfigService { + + private final WfNodeConfigMapper baseMapper; + private final IWfFormManageService iWfFormManageService; + + /** + * 鏌ヨ鑺傜偣閰嶇疆 + */ + @Override + public WfNodeConfigVo queryById(Long id) { + return baseMapper.selectVoById(id); + } + + /** + * 淇濆瓨鑺傜偣閰嶇疆 + */ + @Override + public Boolean saveOrUpdate(List<WfNodeConfig> list) { + return baseMapper.insertOrUpdateBatch(list); + } + + /** + * 鎵归噺鍒犻櫎鑺傜偣閰嶇疆 + */ + @Override + public Boolean deleteByIds(Collection<Long> ids) { + return baseMapper.deleteBatchIds(ids) > 0; + } + + @Override + public Boolean deleteByDefIds(Collection<String> ids) { + return baseMapper.delete(new LambdaQueryWrapper<WfNodeConfig>().in(WfNodeConfig::getDefinitionId, ids)) > 0; + } + + @Override + public List<WfNodeConfigVo> selectByDefIds(Collection<String> ids) { + List<WfNodeConfigVo> wfNodeConfigVos = baseMapper.selectVoList(new LambdaQueryWrapper<WfNodeConfig>().in(WfNodeConfig::getDefinitionId, ids)); + if (CollUtil.isNotEmpty(wfNodeConfigVos)) { + List<Long> formIds = StreamUtils.toList(wfNodeConfigVos, WfNodeConfigVo::getFormId); + List<WfFormManageVo> wfFormManageVos = iWfFormManageService.queryByIds(formIds); + for (WfNodeConfigVo wfNodeConfigVo : wfNodeConfigVos) { + wfFormManageVos.stream().filter(e -> ObjectUtil.equals(e.getId(), wfNodeConfigVo.getFormId())).findFirst().ifPresent(wfNodeConfigVo::setWfFormManageVo); + } + } + return wfNodeConfigVos; + } +} diff --git a/ruoyi-modules/ruoyi-workflow/src/main/java/org/dromara/workflow/utils/ModelUtils.java b/ruoyi-modules/ruoyi-workflow/src/main/java/org/dromara/workflow/utils/ModelUtils.java index 7906287..dff3e4e 100644 --- a/ruoyi-modules/ruoyi-workflow/src/main/java/org/dromara/workflow/utils/ModelUtils.java +++ b/ruoyi-modules/ruoyi-workflow/src/main/java/org/dromara/workflow/utils/ModelUtils.java @@ -164,6 +164,37 @@ } /** + * 鑾峰彇娴佺▼鍏ㄩ儴鐢ㄦ埛鑺傜偣 + * + * @param processDefinitionId 娴佺▼瀹氫箟id + */ + public static List<UserTask> getuserTaskFlowElements(String processDefinitionId) { + BpmnModel bpmnModel = PROCESS_ENGINE.getRepositoryService().getBpmnModel(processDefinitionId); + List<UserTask> list = new ArrayList<>(); + List<Process> processes = bpmnModel.getProcesses(); + Collection<FlowElement> flowElements = processes.get(0).getFlowElements(); + buildUserTaskFlowElements(flowElements, list); + return list; + } + + /** + * 閫掑綊鑾峰彇鎵�鏈夎妭鐐� + * + * @param flowElements 鑺傜偣淇℃伅 + * @param list 闆嗗悎 + */ + private static void buildUserTaskFlowElements(Collection<FlowElement> flowElements, List<UserTask> list) { + for (FlowElement flowElement : flowElements) { + if (flowElement instanceof SubProcess) { + Collection<FlowElement> subFlowElements = ((SubProcess) flowElement).getFlowElements(); + buildUserTaskFlowElements(subFlowElements, list); + } else if (flowElement instanceof UserTask) { + list.add((UserTask) flowElement); + } + } + } + + /** * 鑾峰彇娴佺▼鍏ㄩ儴鑺傜偣 * * @param processDefinitionId 娴佺▼瀹氫箟id 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 faedab0..328e02f 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 @@ -23,15 +23,10 @@ import org.dromara.workflow.common.enums.TaskStatusEnum; import org.dromara.workflow.domain.ActHiProcinst; 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.domain.vo.*; 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.dromara.workflow.service.*; import org.flowable.bpmn.model.BpmnModel; import org.flowable.bpmn.model.FlowNode; import org.flowable.common.engine.api.delegate.Expression; @@ -46,8 +41,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; +import static org.dromara.workflow.common.constant.FlowConstant.*; /** * 宸ヤ綔娴佸伐鍏� @@ -61,7 +55,8 @@ 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); + private static final IWfDefinitionConfigService I_WF_FORM_DEFINITION_SERVICE = SpringUtils.getBean(IWfDefinitionConfigService.class); + private static final IWfFormManageService I_WF_FORM_MANAGE_SERVICE = SpringUtils.getBean(IWfFormManageService.class); /** * 鍒涘缓涓�涓柊浠诲姟 @@ -304,17 +299,26 @@ * @param idList 娴佺▼瀹氫箟id * @param fieldName 娴佺▼瀹氫箟ID灞炴�у悕绉� */ - public static void setWfFormDefinitionVo(Object obj, List<String> idList, String fieldName) { + public static void setWfDefinitionConfigVo(Object obj, List<String> idList, String fieldName) { if (CollUtil.isEmpty(idList) || obj == null) { return; } - List<WfFormDefinitionVo> wfFormDefinitionVoList = I_WF_FORM_DEFINITION_SERVICE.queryList(idList); + List<WfDefinitionConfigVo> wfDefinitionConfigVoList = I_WF_FORM_DEFINITION_SERVICE.queryList(idList); + if (CollUtil.isNotEmpty(wfDefinitionConfigVoList)) { + List<Long> formIds = StreamUtils.toList(wfDefinitionConfigVoList, WfDefinitionConfigVo::getFormId); + List<WfFormManageVo> wfFormManageVos = I_WF_FORM_MANAGE_SERVICE.queryByIds(formIds); + if (CollUtil.isNotEmpty(wfFormManageVos)) { + for (WfDefinitionConfigVo wfDefinitionConfigVo : wfDefinitionConfigVoList) { + wfFormManageVos.stream().filter(e -> ObjectUtil.equals(wfDefinitionConfigVo.getFormId(), e.getId())).findFirst().ifPresent(wfDefinitionConfigVo::setWfFormManageVo); + } + } + } 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)); + if (!CollUtil.isEmpty(wfDefinitionConfigVoList)) { + wfDefinitionConfigVoList.stream().filter(e -> e.getDefinitionId().equals(fieldValue)).findFirst().ifPresent(e -> { + ReflectUtils.invokeSetter(o, WF_DEFINITION_CONFIG_VO, BeanUtil.toBean(e, WfDefinitionConfigVo.class)); }); } } diff --git a/ruoyi-modules/ruoyi-workflow/src/main/resources/mapper/workflow/WfFormDefinitionMapper.xml b/ruoyi-modules/ruoyi-workflow/src/main/resources/mapper/workflow/WfDefinitionConfigMapper.xml similarity index 69% copy from ruoyi-modules/ruoyi-workflow/src/main/resources/mapper/workflow/WfFormDefinitionMapper.xml copy to ruoyi-modules/ruoyi-workflow/src/main/resources/mapper/workflow/WfDefinitionConfigMapper.xml index 42af9d2..8d579f7 100644 --- a/ruoyi-modules/ruoyi-workflow/src/main/resources/mapper/workflow/WfFormDefinitionMapper.xml +++ b/ruoyi-modules/ruoyi-workflow/src/main/resources/mapper/workflow/WfDefinitionConfigMapper.xml @@ -2,6 +2,6 @@ <!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 namespace="org.dromara.workflow.mapper.WfDefinitionConfigMapper"> </mapper> diff --git a/ruoyi-modules/ruoyi-workflow/src/main/resources/mapper/workflow/WfFormDefinitionMapper.xml b/ruoyi-modules/ruoyi-workflow/src/main/resources/mapper/workflow/WfFormManageMapper.xml similarity index 69% rename from ruoyi-modules/ruoyi-workflow/src/main/resources/mapper/workflow/WfFormDefinitionMapper.xml rename to ruoyi-modules/ruoyi-workflow/src/main/resources/mapper/workflow/WfFormManageMapper.xml index 42af9d2..59221f8 100644 --- a/ruoyi-modules/ruoyi-workflow/src/main/resources/mapper/workflow/WfFormDefinitionMapper.xml +++ b/ruoyi-modules/ruoyi-workflow/src/main/resources/mapper/workflow/WfFormManageMapper.xml @@ -2,6 +2,6 @@ <!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 namespace="org.dromara.workflow.mapper.WfFormManageMapper"> </mapper> diff --git a/ruoyi-modules/ruoyi-workflow/src/main/resources/mapper/workflow/WfFormDefinitionMapper.xml b/ruoyi-modules/ruoyi-workflow/src/main/resources/mapper/workflow/WfNodeConfigMapper.xml similarity index 69% copy from ruoyi-modules/ruoyi-workflow/src/main/resources/mapper/workflow/WfFormDefinitionMapper.xml copy to ruoyi-modules/ruoyi-workflow/src/main/resources/mapper/workflow/WfNodeConfigMapper.xml index 42af9d2..b65194f 100644 --- a/ruoyi-modules/ruoyi-workflow/src/main/resources/mapper/workflow/WfFormDefinitionMapper.xml +++ b/ruoyi-modules/ruoyi-workflow/src/main/resources/mapper/workflow/WfNodeConfigMapper.xml @@ -2,6 +2,6 @@ <!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 namespace="org.dromara.workflow.mapper.WfNodeConfigMapper"> </mapper> diff --git a/script/sql/flowable.sql b/script/sql/flowable.sql index ab363fa..f08ad05 100644 --- a/script/sql/flowable.sql +++ b/script/sql/flowable.sql @@ -78,12 +78,12 @@ ) comment '鑺傜偣瀹℃壒璁板綍'; -DROP TABLE if EXISTS wf_form_definition; -create table wf_form_definition +DROP TABLE if EXISTS wf_definition_config; +create table wf_definition_config ( id bigint not null comment '涓婚敭' primary key, - path varchar(200) default '' not null comment '璺敱鍦板潃', + form_id bigint not null comment '琛ㄥ崟ID', definition_id varchar(255) not null comment '娴佺▼瀹氫箟ID', process_key varchar(255) not null comment '娴佺▼KEY', create_dept bigint null comment '鍒涘缓閮ㄩ棬', @@ -96,8 +96,44 @@ constraint uni_definition_id unique (definition_id) ) - comment '琛ㄥ崟閰嶇疆'; + comment '娴佺▼瀹氫箟閰嶇疆'; +create table wf_form_manage +( + id bigint not null comment '涓婚敭' + primary key, + form_name varchar(255) not null comment '琛ㄥ崟鍚嶇О', + form_type varchar(255) not null comment '琛ㄥ崟绫诲瀷', + router varchar(255) not null comment '璺敱鍦板潃/琛ㄥ崟ID', + remark varchar(500) null comment '澶囨敞', + tenant_id varchar(20) null comment '绉熸埛缂栧彿', + 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 '鏇存柊鏃堕棿' +) + comment '琛ㄥ崟绠$悊'; + +insert into wf_form_manage(id, form_name, form_type, router, remark, tenant_id, create_dept, create_by, create_time, update_by, update_time) VALUES (1, '璇峰亣鐢宠', 'static', '/demo/leaveEdit/index', NULL, '000000', 103, 1, sysdate(), 1, sysdate()); + +create table wf_node_config +( + id bigint not null comment '涓婚敭' + primary key, + form_id bigint null comment '琛ㄥ崟id', + form_type varchar(255) null comment '琛ㄥ崟绫诲瀷', + node_name varchar(255) not null comment '鑺傜偣鍚嶇О', + node_id varchar(255) not null comment '鑺傜偣id', + definition_id varchar(255) not null comment '娴佺▼瀹氫箟id', + 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 '鏇存柊鏃堕棿', + tenant_id varchar(20) null comment '绉熸埛缂栧彿' +) + 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, '璇峰亣鐢宠鑿滃崟'); diff --git a/script/sql/oracle/flowable.sql b/script/sql/oracle/flowable.sql index 6fde11f..a8616c9 100644 --- a/script/sql/oracle/flowable.sql +++ b/script/sql/oracle/flowable.sql @@ -120,12 +120,12 @@ comment on column WF_TASK_BACK_NODE.UPDATE_BY is '鏇存柊鑰�' comment on column WF_TASK_BACK_NODE.UPDATE_TIME is '鏇存柊鏃堕棿' -create table WF_FORM_DEFINITION +create table WF_DEFINITION_CONFIG ( ID NUMBER(20) NOT NULL - CONSTRAINT PK_WF_FORM_DEFINITION + CONSTRAINT PK_WF_DEFINITION_CONFIG PRIMARY KEY, - PATH VARCHAR2(200) NOT NULL, + FORM_ID NUMBER(20) NOT NULL, DEFINITION_ID VARCHAR2(255) NOT NULL, PROCESS_KEY VARCHAR2(255) NOT NULL, TENANT_ID VARCHAR2(20), @@ -137,16 +137,17 @@ constraint uni_definition_id unique (definition_id) ); -comment on table WF_FORM_DEFINITION is '琛ㄥ崟閰嶇疆' -comment on column WF_FORM_DEFINITION.ID is '涓婚敭' -comment on column WF_FORM_DEFINITION.DEFINITION_ID is '娴佺▼瀹氫箟ID' -comment on column WF_FORM_DEFINITION.PROCESS_KEY is '娴佺▼KEY' -comment on column WF_FORM_DEFINITION.TENANT_ID is '绉熸埛缂栧彿' -comment on column WF_FORM_DEFINITION.CREATE_DEPT is '鍒涘缓閮ㄩ棬' -comment on column WF_FORM_DEFINITION.CREATE_BY is '鍒涘缓鑰�' -comment on column WF_FORM_DEFINITION.CREATE_TIME is '鍒涘缓鏃堕棿' -comment on column WF_FORM_DEFINITION.UPDATE_BY is '鏇存柊鑰�' -comment on column WF_FORM_DEFINITION.UPDATE_TIME is '鏇存柊鏃堕棿' +comment on table WF_DEFINITION_CONFIG is '娴佺▼瀹氫箟閰嶇疆' +comment on column WF_DEFINITION_CONFIG.ID is '涓婚敭' +comment on column WF_DEFINITION_CONFIG.FORM_ID is '琛ㄥ崟ID' +comment on column WF_DEFINITION_CONFIG.DEFINITION_ID is '娴佺▼瀹氫箟ID' +comment on column WF_DEFINITION_CONFIG.PROCESS_KEY is '娴佺▼KEY' +comment on column WF_DEFINITION_CONFIG.TENANT_ID is '绉熸埛缂栧彿' +comment on column WF_DEFINITION_CONFIG.CREATE_DEPT is '鍒涘缓閮ㄩ棬' +comment on column WF_DEFINITION_CONFIG.CREATE_BY is '鍒涘缓鑰�' +comment on column WF_DEFINITION_CONFIG.CREATE_TIME is '鍒涘缓鏃堕棿' +comment on column WF_DEFINITION_CONFIG.UPDATE_BY is '鏇存柊鑰�' +comment on column WF_DEFINITION_CONFIG.UPDATE_TIME is '鏇存柊鏃堕棿' 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, ''); diff --git a/script/sql/postgres/flowable.sql b/script/sql/postgres/flowable.sql index 4e4f708..b02be4f 100644 --- a/script/sql/postgres/flowable.sql +++ b/script/sql/postgres/flowable.sql @@ -166,12 +166,12 @@ alter table wf_task_back_node owner to postgres; -create table wf_form_definition +create table wf_definition_config ( id bigint(20) not null - constraint pk_wf_form_definition + constraint pk_wf_definition_config primary key, - path varchar(200) not null, + form_id bigint(20) not null, definition_id varchar(255) not null, process_key varchar(255) not null, tenant_id varchar(20), @@ -182,32 +182,32 @@ update_time timestamp ); -comment on table wf_form_definition is '琛ㄥ崟閰嶇疆'; +comment on table wf_definition_config is '娴佺▼瀹氫箟閰嶇疆'; -comment on column wf_form_definition.id is '涓婚敭'; +comment on column wf_definition_config.id is '涓婚敭'; -comment on column wf_form_definition.path is '璺敱鍦板潃'; +comment on column wf_definition_config.form_id is '琛ㄥ崟ID'; -comment on column wf_form_definition.definition_id is '娴佺▼瀹氫箟ID'; +comment on column wf_definition_config.definition_id is '娴佺▼瀹氫箟ID'; -comment on column wf_form_definition.process_key is '娴佺▼KEY'; +comment on column wf_definition_config.process_key is '娴佺▼KEY'; -comment on column wf_form_definition.tenant_id is '绉熸埛id'; +comment on column wf_definition_config.tenant_id is '绉熸埛id'; -comment on column wf_form_definition.create_dept is '鍒涘缓閮ㄩ棬'; +comment on column wf_definition_config.create_dept is '鍒涘缓閮ㄩ棬'; -comment on column wf_form_definition.create_by is '鍒涘缓鑰�'; +comment on column wf_definition_config.create_by is '鍒涘缓鑰�'; -comment on column wf_form_definition.create_time is '鍒涘缓鏃堕棿'; +comment on column wf_definition_config.create_time is '鍒涘缓鏃堕棿'; -comment on column wf_form_definition.update_by is '淇敼鑰�'; +comment on column wf_definition_config.update_by is '淇敼鑰�'; -comment on column wf_form_definition.update_time is '淇敼鏃堕棿'; +comment on column wf_definition_config.update_time is '淇敼鏃堕棿'; -alter table wf_form_definition +alter table wf_definition_config owner to postgres; create unique index uni_definition_id - on wf_form_definition (definition_id); + on wf_definition_config (definition_id); 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, now(), 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, now(), NULL, NULL, ''); diff --git a/script/sql/sqlserver/flowable.sql b/script/sql/sqlserver/flowable.sql index 99db42c..7db4e90 100644 --- a/script/sql/sqlserver/flowable.sql +++ b/script/sql/sqlserver/flowable.sql @@ -214,10 +214,10 @@ 'update_time' go -create table wf_form_definition +create table wf_definition_config ( id bigint(20) not null primary key, - path nvarchar(200) not null, + form_id bigint(20) not null, definition_id nvarchar(255) constraint uni_definition_id unique, @@ -231,43 +231,43 @@ ) go -exec sp_addextendedproperty 'MS_Description', N'琛ㄥ崟閰嶇疆', 'SCHEMA', 'dbo', 'TABLE', 'wf_form_definition' +exec sp_addextendedproperty 'MS_Description', N'娴佺▼瀹氫箟閰嶇疆', 'SCHEMA', 'dbo', 'TABLE', 'wf_definition_config' go -exec sp_addextendedproperty 'MS_Description', N'涓婚敭', 'SCHEMA', 'dbo', 'TABLE', 'wf_form_definition', 'COLUMN', 'id' +exec sp_addextendedproperty 'MS_Description', N'涓婚敭', 'SCHEMA', 'dbo', 'TABLE', 'wf_definition_config', 'COLUMN', 'id' go -exec sp_addextendedproperty 'MS_Description', N'璺敱鍦板潃', 'SCHEMA', 'dbo', 'TABLE', 'wf_form_definition', 'COLUMN', - 'path' +exec sp_addextendedproperty 'MS_Description', N'琛ㄥ崟ID', 'SCHEMA', 'dbo', 'TABLE', 'wf_definition_config', 'COLUMN', + 'form_id' go -exec sp_addextendedproperty 'MS_Description', N'娴佺▼瀹氫箟ID', 'SCHEMA', 'dbo', 'TABLE', 'wf_form_definition', 'COLUMN', +exec sp_addextendedproperty 'MS_Description', N'娴佺▼瀹氫箟ID', 'SCHEMA', 'dbo', 'TABLE', 'wf_definition_config', 'COLUMN', 'definition_id' go -exec sp_addextendedproperty 'MS_Description', N'娴佺▼KEY', 'SCHEMA', 'dbo', 'TABLE', 'wf_form_definition', 'COLUMN', +exec sp_addextendedproperty 'MS_Description', N'娴佺▼KEY', 'SCHEMA', 'dbo', 'TABLE', 'wf_definition_config', 'COLUMN', 'process_key' go -exec sp_addextendedproperty 'MS_Description', N'绉熸埛缂栧彿', 'SCHEMA', 'dbo', 'TABLE', 'wf_form_definition', 'COLUMN', +exec sp_addextendedproperty 'MS_Description', N'绉熸埛缂栧彿', 'SCHEMA', 'dbo', 'TABLE', 'wf_definition_config', 'COLUMN', 'tenant_id' go -exec sp_addextendedproperty 'MS_Description', N'鍒涘缓閮ㄩ棬', 'SCHEMA', 'dbo', 'TABLE', 'wf_form_definition', 'COLUMN', +exec sp_addextendedproperty 'MS_Description', N'鍒涘缓閮ㄩ棬', 'SCHEMA', 'dbo', 'TABLE', 'wf_definition_config', 'COLUMN', 'create_dept' go -exec sp_addextendedproperty 'MS_Description', N'鍒涘缓鑰�', 'SCHEMA', 'dbo', 'TABLE', 'wf_form_definition', 'COLUMN', 'create_by' +exec sp_addextendedproperty 'MS_Description', N'鍒涘缓鑰�', 'SCHEMA', 'dbo', 'TABLE', 'wf_definition_config', 'COLUMN', 'create_by' go -exec sp_addextendedproperty 'MS_Description', N'鍒涘缓鏃堕棿', 'SCHEMA', 'dbo', 'TABLE', 'wf_form_definition', 'COLUMN', +exec sp_addextendedproperty 'MS_Description', N'鍒涘缓鏃堕棿', 'SCHEMA', 'dbo', 'TABLE', 'wf_definition_config', 'COLUMN', 'create_time' go -exec sp_addextendedproperty 'MS_Description', N'鏇存柊鑰�', 'SCHEMA', 'dbo', 'TABLE', 'wf_form_definition', 'COLUMN', 'update_by' +exec sp_addextendedproperty 'MS_Description', N'鏇存柊鑰�', 'SCHEMA', 'dbo', 'TABLE', 'wf_definition_config', 'COLUMN', 'update_by' go -exec sp_addextendedproperty 'MS_Description', N'鏇存柊鏃堕棿', 'SCHEMA', 'dbo', 'TABLE', 'wf_form_definition', 'COLUMN', +exec sp_addextendedproperty 'MS_Description', N'鏇存柊鏃堕棿', 'SCHEMA', 'dbo', 'TABLE', 'wf_definition_config', 'COLUMN', 'update_time' go -- Gitblit v1.9.3