Эх сурвалжийг харах

!640 发布 5.3.0 新春版 祝大家新年快乐
Merge pull request !640 from 疯狂的狮子Li/dev

疯狂的狮子Li 5 сар өмнө
parent
commit
296466fa13
32 өөрчлөгдсөн 285 нэмэгдсэн , 53 устгасан
  1. 1 1
      .run/ruoyi-monitor-admin.run.xml
  2. 1 1
      .run/ruoyi-server.run.xml
  3. 1 1
      .run/ruoyi-snailjob-server.run.xml
  4. 1 2
      README.md
  5. 3 3
      pom.xml
  6. 1 1
      ruoyi-common/ruoyi-common-bom/pom.xml
  7. 30 0
      ruoyi-common/ruoyi-common-core/src/main/java/org/dromara/common/core/domain/dto/StartProcessReturnDTO.java
  8. 6 0
      ruoyi-common/ruoyi-common-core/src/main/java/org/dromara/common/core/domain/event/ProcessEvent.java
  9. 9 1
      ruoyi-common/ruoyi-common-core/src/main/java/org/dromara/common/core/service/WorkflowService.java
  10. 1 1
      ruoyi-modules/ruoyi-workflow/src/main/java/org/dromara/workflow/controller/FlwCategoryController.java
  11. 1 1
      ruoyi-modules/ruoyi-workflow/src/main/java/org/dromara/workflow/controller/FlwInstanceController.java
  12. 4 4
      ruoyi-modules/ruoyi-workflow/src/main/java/org/dromara/workflow/controller/FlwTaskController.java
  13. 5 0
      ruoyi-modules/ruoyi-workflow/src/main/java/org/dromara/workflow/domain/bo/BackProcessBo.java
  14. 0 2
      ruoyi-modules/ruoyi-workflow/src/main/java/org/dromara/workflow/domain/vo/FlowCategoryVo.java
  15. 4 1
      ruoyi-modules/ruoyi-workflow/src/main/java/org/dromara/workflow/handler/FlowProcessEventHandler.java
  16. 10 1
      ruoyi-modules/ruoyi-workflow/src/main/java/org/dromara/workflow/listener/WorkflowGlobalListener.java
  17. 2 2
      ruoyi-modules/ruoyi-workflow/src/main/java/org/dromara/workflow/service/IFlwCategoryService.java
  18. 1 1
      ruoyi-modules/ruoyi-workflow/src/main/java/org/dromara/workflow/service/IFlwInstanceService.java
  19. 2 1
      ruoyi-modules/ruoyi-workflow/src/main/java/org/dromara/workflow/service/IFlwTaskService.java
  20. 6 2
      ruoyi-modules/ruoyi-workflow/src/main/java/org/dromara/workflow/service/impl/CategoryNameTranslationImpl.java
  21. 10 10
      ruoyi-modules/ruoyi-workflow/src/main/java/org/dromara/workflow/service/impl/FlwCategoryServiceImpl.java
  22. 1 1
      ruoyi-modules/ruoyi-workflow/src/main/java/org/dromara/workflow/service/impl/FlwDefinitionServiceImpl.java
  23. 2 2
      ruoyi-modules/ruoyi-workflow/src/main/java/org/dromara/workflow/service/impl/FlwInstanceServiceImpl.java
  24. 13 5
      ruoyi-modules/ruoyi-workflow/src/main/java/org/dromara/workflow/service/impl/FlwTaskServiceImpl.java
  25. 13 0
      ruoyi-modules/ruoyi-workflow/src/main/java/org/dromara/workflow/service/impl/TestLeaveServiceImpl.java
  26. 12 1
      ruoyi-modules/ruoyi-workflow/src/main/java/org/dromara/workflow/service/impl/WorkflowServiceImpl.java
  27. 4 4
      script/docker/docker-compose.yml
  28. 27 0
      script/sql/oracle/oracle_ry_vue_5.X.sql
  29. 27 0
      script/sql/postgres/postgres_ry_vue_5.X.sql
  30. 4 2
      script/sql/postgres/postgres_ry_workflow.sql
  31. 27 0
      script/sql/ry_vue_5.X.sql
  32. 56 2
      script/sql/sqlserver/sqlserver_ry_vue_5.X.sql

+ 1 - 1
.run/ruoyi-monitor-admin.run.xml

@@ -2,7 +2,7 @@
   <configuration default="false" name="ruoyi-monitor-admin" type="docker-deploy" factoryName="dockerfile" server-name="Docker">
     <deployment type="dockerfile">
       <settings>
-        <option name="imageTag" value="ruoyi/ruoyi-monitor-admin:5.3.0-BETA" />
+        <option name="imageTag" value="ruoyi/ruoyi-monitor-admin:5.3.0" />
         <option name="buildOnly" value="true" />
         <option name="sourceFilePath" value="ruoyi-extend/ruoyi-monitor-admin/Dockerfile" />
       </settings>

+ 1 - 1
.run/ruoyi-server.run.xml

@@ -2,7 +2,7 @@
   <configuration default="false" name="ruoyi-server" type="docker-deploy" factoryName="dockerfile" server-name="Docker">
     <deployment type="dockerfile">
       <settings>
-        <option name="imageTag" value="ruoyi/ruoyi-server:5.3.0-BETA" />
+        <option name="imageTag" value="ruoyi/ruoyi-server:5.3.0" />
         <option name="buildOnly" value="true" />
         <option name="sourceFilePath" value="ruoyi-admin/Dockerfile" />
       </settings>

+ 1 - 1
.run/ruoyi-snailjob-server.run.xml

@@ -2,7 +2,7 @@
   <configuration default="false" name="ruoyi-snailjob-server" type="docker-deploy" factoryName="dockerfile" server-name="Docker">
     <deployment type="dockerfile">
       <settings>
-        <option name="imageTag" value="ruoyi/ruoyi-snailjob-server:5.3.0-BETA" />
+        <option name="imageTag" value="ruoyi/ruoyi-snailjob-server:5.3.0" />
         <option name="buildOnly" value="true" />
         <option name="sourceFilePath" value="ruoyi-extend/ruoyi-snailjob-server/Dockerfile" />
       </settings>

+ 1 - 2
README.md

@@ -10,7 +10,7 @@
 [![License](https://img.shields.io/badge/License-MIT-blue.svg)](https://gitee.com/dromara/RuoYi-Vue-Plus/blob/master/LICENSE)
 [![使用IntelliJ IDEA开发维护](https://img.shields.io/badge/IntelliJ%20IDEA-提供支持-blue.svg)](https://www.jetbrains.com/?from=RuoYi-Vue-Plus)
 <br>
-[![RuoYi-Vue-Plus](https://img.shields.io/badge/RuoYi_Vue_Plus-5.3.0--BETA-success.svg)](https://gitee.com/dromara/RuoYi-Vue-Plus)
+[![RuoYi-Vue-Plus](https://img.shields.io/badge/RuoYi_Vue_Plus-5.3.0-success.svg)](https://gitee.com/dromara/RuoYi-Vue-Plus)
 [![Spring Boot](https://img.shields.io/badge/Spring%20Boot-3.4-blue.svg)]()
 [![JDK-17](https://img.shields.io/badge/JDK-17-green.svg)]()
 [![JDK-21](https://img.shields.io/badge/JDK-21-green.svg)]()
@@ -23,7 +23,6 @@
 > 系统演示: [传送门](https://plus-doc.dromara.org/#/common/demo_system)
 
 > 官方前端项目地址: [plus-ui](https://gitee.com/JavaLionLi/plus-ui)<br>
-> 成员前端项目地址: 基于vben [ruoyi-plus-vben](https://gitee.com/dapppp/ruoyi-plus-vben)<br>
 > 成员前端项目地址: 基于vben5 [ruoyi-plus-vben5](https://gitee.com/dapppp/ruoyi-plus-vben5)
 
 > 文档地址: [plus-doc](https://plus-doc.dromara.org)

+ 3 - 3
pom.xml

@@ -13,7 +13,7 @@
     <description>Dromara RuoYi-Vue-Plus多租户管理系统</description>
 
     <properties>
-        <revision>5.3.0-BETA</revision>
+        <revision>5.3.0</revision>
         <spring-boot.version>3.4.1</spring-boot.version>
         <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
         <project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding>
@@ -31,7 +31,7 @@
         <redisson.version>3.43.0</redisson.version>
         <lock4j.version>2.2.7</lock4j.version>
         <dynamic-ds.version>4.3.1</dynamic-ds.version>
-        <snailjob.version>1.3.0-beta1.1</snailjob.version>
+        <snailjob.version>1.3.0</snailjob.version>
         <mapstruct-plus.version>1.4.6</mapstruct-plus.version>
         <mapstruct-plus.lombok.version>0.2.0</mapstruct-plus.lombok.version>
         <lombok.version>1.18.36</lombok.version>
@@ -50,7 +50,7 @@
         <!-- 面向运行时的D-ORM依赖 -->
         <anyline.version>8.7.2-20250101</anyline.version>
         <!--工作流配置-->
-        <warm-flow.version>1.6.0-m5</warm-flow.version>
+        <warm-flow.version>1.6.6</warm-flow.version>
 
         <!-- 插件版本 -->
         <maven-jar-plugin.version>3.2.2</maven-jar-plugin.version>

+ 1 - 1
ruoyi-common/ruoyi-common-bom/pom.xml

@@ -14,7 +14,7 @@
     </description>
 
     <properties>
-        <revision>5.3.0-BETA</revision>
+        <revision>5.3.0</revision>
     </properties>
 
     <dependencyManagement>

+ 30 - 0
ruoyi-common/ruoyi-common-core/src/main/java/org/dromara/common/core/domain/dto/StartProcessReturnDTO.java

@@ -0,0 +1,30 @@
+package org.dromara.common.core.domain.dto;
+
+
+import lombok.Data;
+
+import java.io.Serial;
+import java.io.Serializable;
+
+/**
+ * 启动流程返回对象
+ *
+ * @author Lion Li
+ */
+@Data
+public class StartProcessReturnDTO implements Serializable {
+
+    @Serial
+    private static final long serialVersionUID = 1L;
+
+    /**
+     * 流程实例id
+     */
+    private Long processInstanceId;
+
+    /**
+     * 任务id
+     */
+    private Long taskId;
+
+}

+ 6 - 0
ruoyi-common/ruoyi-common-core/src/main/java/org/dromara/common/core/domain/event/ProcessEvent.java

@@ -4,6 +4,7 @@ import lombok.Data;
 
 import java.io.Serial;
 import java.io.Serializable;
+import java.util.Map;
 
 /**
  * 总体流程监听
@@ -36,6 +37,11 @@ public class ProcessEvent implements Serializable {
      */
     private String status;
 
+    /**
+     * 办理参数
+     */
+    private Map<String, Object> params;
+
     /**
      * 当为true时为申请人节点办理
      */

+ 9 - 1
ruoyi-common/ruoyi-common-core/src/main/java/org/dromara/common/core/service/WorkflowService.java

@@ -2,6 +2,7 @@ package org.dromara.common.core.service;
 
 import org.dromara.common.core.domain.dto.CompleteTaskDTO;
 import org.dromara.common.core.domain.dto.StartProcessDTO;
+import org.dromara.common.core.domain.dto.StartProcessReturnDTO;
 
 import java.util.List;
 import java.util.Map;
@@ -45,6 +46,13 @@ public interface WorkflowService {
      */
     void setVariable(Long instanceId, Map<String, Object> variable);
 
+    /**
+     * 获取流程变量
+     *
+     * @param instanceId 流程实例id
+     */
+    Map<String, Object> instanceVariable(Long instanceId);
+
     /**
      * 按照业务id查询流程实例id
      *
@@ -66,7 +74,7 @@ public interface WorkflowService {
      * @param startProcess 参数
      * @return 结果
      */
-    Map<String, Object> startWorkFlow(StartProcessDTO startProcess);
+    StartProcessReturnDTO startWorkFlow(StartProcessDTO startProcess);
 
     /**
      * 办理任务

+ 1 - 1
ruoyi-modules/ruoyi-workflow/src/main/java/org/dromara/workflow/controller/FlwCategoryController.java

@@ -125,7 +125,7 @@ public class FlwCategoryController extends BaseController {
      * @param categoryBo 流程分类
      */
     @GetMapping("/categoryTree")
-    public R<List<Tree<Long>>> categoryTree(FlowCategoryBo categoryBo) {
+    public R<List<Tree<String>>> categoryTree(FlowCategoryBo categoryBo) {
         return R.ok(flwCategoryService.selectCategoryTreeList(categoryBo));
     }
 

+ 1 - 1
ruoyi-modules/ruoyi-workflow/src/main/java/org/dromara/workflow/controller/FlwInstanceController.java

@@ -138,7 +138,7 @@ public class FlwInstanceController extends BaseController {
      * @param instanceId 流程实例id
      */
     @GetMapping("/instanceVariable/{instanceId}")
-    public R<Map<String, Object>> instanceVariable(@PathVariable String instanceId) {
+    public R<Map<String, Object>> instanceVariable(@PathVariable Long instanceId) {
         return R.ok(flwInstanceService.instanceVariable(instanceId));
     }
 

+ 4 - 4
ruoyi-modules/ruoyi-workflow/src/main/java/org/dromara/workflow/controller/FlwTaskController.java

@@ -2,6 +2,7 @@ package org.dromara.workflow.controller;
 
 import lombok.RequiredArgsConstructor;
 import org.dromara.common.core.domain.R;
+import org.dromara.common.core.domain.dto.StartProcessReturnDTO;
 import org.dromara.common.core.domain.dto.UserDTO;
 import org.dromara.common.core.validate.AddGroup;
 import org.dromara.common.idempotent.annotation.RepeatSubmit;
@@ -20,7 +21,6 @@ import org.springframework.validation.annotation.Validated;
 import org.springframework.web.bind.annotation.*;
 
 import java.util.List;
-import java.util.Map;
 
 /**
  * 任务管理 控制层
@@ -44,9 +44,9 @@ public class FlwTaskController extends BaseController {
     @Log(title = "任务管理", businessType = BusinessType.INSERT)
     @RepeatSubmit()
     @PostMapping("/startWorkFlow")
-    public R<Map<String, Object>> startWorkFlow(@Validated(AddGroup.class) @RequestBody StartProcessBo startProcessBo) {
-        Map<String, Object> map = flwTaskService.startWorkFlow(startProcessBo);
-        return R.ok("提交成功", map);
+    public R<StartProcessReturnDTO> startWorkFlow(@Validated(AddGroup.class) @RequestBody StartProcessBo startProcessBo) {
+        StartProcessReturnDTO startProcessReturn = flwTaskService.startWorkFlow(startProcessBo);
+        return R.ok("提交成功", startProcessReturn);
     }
 
     /**

+ 5 - 0
ruoyi-modules/ruoyi-workflow/src/main/java/org/dromara/workflow/domain/bo/BackProcessBo.java

@@ -30,6 +30,11 @@ public class BackProcessBo implements Serializable {
     @NotNull(message = "任务ID不能为空", groups = AddGroup.class)
     private Long taskId;
 
+    /**
+     * 附件id
+     */
+    private String fileId;
+
     /**
      * 消息类型
      */

+ 0 - 2
ruoyi-modules/ruoyi-workflow/src/main/java/org/dromara/workflow/domain/vo/FlowCategoryVo.java

@@ -4,8 +4,6 @@ import com.alibaba.excel.annotation.ExcelIgnoreUnannotated;
 import com.alibaba.excel.annotation.ExcelProperty;
 import io.github.linpeilie.annotations.AutoMapper;
 import lombok.Data;
-import org.dromara.common.excel.annotation.ExcelDictFormat;
-import org.dromara.common.excel.convert.ExcelDictConvert;
 import org.dromara.workflow.domain.FlowCategory;
 
 import java.io.Serial;

+ 4 - 1
ruoyi-modules/ruoyi-workflow/src/main/java/org/dromara/workflow/handler/FlowProcessEventHandler.java

@@ -9,6 +9,8 @@ import org.dromara.common.tenant.helper.TenantHelper;
 import org.dromara.workflow.common.ConditionalOnEnable;
 import org.springframework.stereotype.Component;
 
+import java.util.Map;
+
 /**
  * 流程监听服务
  *
@@ -28,7 +30,7 @@ public class FlowProcessEventHandler {
      * @param status     状态
      * @param submit     当为true时为申请人节点办理
      */
-    public void processHandler(String flowCode, String businessId, String status, boolean submit) {
+    public void processHandler(String flowCode, String businessId, String status, Map<String, Object> params, boolean submit) {
         String tenantId = TenantHelper.getTenantId();
         log.info("发布流程事件,租户ID: {}, 流程状态: {}, 流程编码: {}, 业务ID: {}, 是否申请人节点办理: {}", tenantId, status, flowCode, businessId, submit);
         ProcessEvent processEvent = new ProcessEvent();
@@ -36,6 +38,7 @@ public class FlowProcessEventHandler {
         processEvent.setFlowCode(flowCode);
         processEvent.setBusinessId(businessId);
         processEvent.setStatus(status);
+        processEvent.setParams(params);
         processEvent.setSubmit(submit);
         SpringUtils.context().publishEvent(processEvent);
     }

+ 10 - 1
ruoyi-modules/ruoyi-workflow/src/main/java/org/dromara/workflow/listener/WorkflowGlobalListener.java

@@ -17,7 +17,9 @@ import org.dromara.workflow.service.IFlwInstanceService;
 import org.dromara.workflow.service.IFlwTaskService;
 import org.springframework.stereotype.Component;
 
+import java.util.HashMap;
 import java.util.List;
+import java.util.Map;
 
 /**
  * 全局任务办理监听
@@ -81,10 +83,17 @@ public class WorkflowGlobalListener implements GlobalListener {
         Definition definition = listenerVariable.getDefinition();
         String businessId = instance.getBusinessId();
         String flowStatus = instance.getFlowStatus();
+        Map<String, Object> params = new HashMap<>();
+        // 历史任务扩展(通常为附件)
+        params.put("hisTaskExt", listenerVariable.getFlowParams().getHisTaskExt());
+        // 办理人
+        params.put("handler", listenerVariable.getFlowParams().getHandler());
+        // 办理意见
+        params.put("message", listenerVariable.getFlowParams().getMessage());
         // 判断流程状态(发布:撤销,退回,作废,终止,已完成事件)
         String status = determineFlowStatus(instance, flowStatus);
         if (StringUtils.isNotBlank(status)) {
-            flowProcessEventHandler.processHandler(definition.getFlowCode(), businessId, status, false);
+            flowProcessEventHandler.processHandler(definition.getFlowCode(), businessId, status, params, false);
         }
     }
 

+ 2 - 2
ruoyi-modules/ruoyi-workflow/src/main/java/org/dromara/workflow/service/IFlwCategoryService.java

@@ -27,7 +27,7 @@ public interface IFlwCategoryService {
      * @param categoryId 流程分类ID
      * @return 流程分类名称
      */
-    String selectCategoryNameById(String categoryId);
+    String selectCategoryNameById(Long categoryId);
 
     /**
      * 查询符合条件的流程分类列表
@@ -43,7 +43,7 @@ public interface IFlwCategoryService {
      * @param category 流程分类信息
      * @return 流程分类树信息集合
      */
-    List<Tree<Long>> selectCategoryTreeList(FlowCategoryBo category);
+    List<Tree<String>> selectCategoryTreeList(FlowCategoryBo category);
 
     /**
      * 校验流程分类是否有数据权限

+ 1 - 1
ruoyi-modules/ruoyi-workflow/src/main/java/org/dromara/workflow/service/IFlwInstanceService.java

@@ -123,7 +123,7 @@ public interface IFlwInstanceService {
      * @param instanceId 实例id
      * @return 结果
      */
-    Map<String, Object> instanceVariable(String instanceId);
+    Map<String, Object> instanceVariable(Long instanceId);
 
     /**
      * 设置流程变量

+ 2 - 1
ruoyi-modules/ruoyi-workflow/src/main/java/org/dromara/workflow/service/IFlwTaskService.java

@@ -1,5 +1,6 @@
 package org.dromara.workflow.service;
 
+import org.dromara.common.core.domain.dto.StartProcessReturnDTO;
 import org.dromara.common.core.domain.dto.UserDTO;
 import org.dromara.common.mybatis.core.page.PageQuery;
 import org.dromara.common.mybatis.core.page.TableDataInfo;
@@ -26,7 +27,7 @@ public interface IFlwTaskService {
      * @param startProcessBo 启动流程参数
      * @return 结果
      */
-    Map<String, Object> startWorkFlow(StartProcessBo startProcessBo);
+    StartProcessReturnDTO startWorkFlow(StartProcessBo startProcessBo);
 
     /**
      * 办理任务

+ 6 - 2
ruoyi-modules/ruoyi-workflow/src/main/java/org/dromara/workflow/service/impl/CategoryNameTranslationImpl.java

@@ -1,5 +1,6 @@
 package org.dromara.workflow.service.impl;
 
+import cn.hutool.core.convert.Convert;
 import lombok.RequiredArgsConstructor;
 import lombok.extern.slf4j.Slf4j;
 import org.dromara.common.translation.annotation.TranslationType;
@@ -25,9 +26,12 @@ public class CategoryNameTranslationImpl implements TranslationInterface<String>
 
     @Override
     public String translation(Object key, String other) {
+        Long id = null;
         if (key instanceof String categoryId) {
-            return flwCategoryService.selectCategoryNameById(categoryId);
+            id = Convert.toLong(categoryId);
+        } else if (key instanceof Long categoryId) {
+            id = categoryId;
         }
-        return null;
+        return flwCategoryService.selectCategoryNameById(id);
     }
 }

+ 10 - 10
ruoyi-modules/ruoyi-workflow/src/main/java/org/dromara/workflow/service/impl/FlwCategoryServiceImpl.java

@@ -66,8 +66,8 @@ public class FlwCategoryServiceImpl implements IFlwCategoryService {
      */
     @Cacheable(cacheNames = FlowConstant.FLOW_CATEGORY_NAME, key = "#categoryId")
     @Override
-    public String selectCategoryNameById(String categoryId) {
-        if (StringUtils.isBlank(categoryId)) {
+    public String selectCategoryNameById(Long categoryId) {
+        if (ObjectUtil.isNull(categoryId)) {
             return null;
         }
         FlowCategory category = baseMapper.selectOne(new LambdaQueryWrapper<FlowCategory>()
@@ -94,24 +94,24 @@ public class FlwCategoryServiceImpl implements IFlwCategoryService {
      * @return 流程分类树信息集合
      */
     @Override
-    public List<Tree<Long>> selectCategoryTreeList(FlowCategoryBo category) {
+    public List<Tree<String>> selectCategoryTreeList(FlowCategoryBo category) {
         LambdaQueryWrapper<FlowCategory> lqw = buildQueryWrapper(category);
         List<FlowCategoryVo> categorys = baseMapper.selectVoList(lqw);
         if (CollUtil.isEmpty(categorys)) {
             return CollUtil.newArrayList();
         }
         // 获取当前列表中每一个节点的parentId,然后在列表中查找是否有id与其parentId对应,若无对应,则表明此时节点列表中,该节点在当前列表中属于顶级节点
-        List<Tree<Long>> treeList = CollUtil.newArrayList();
+        List<Tree<String>> treeList = CollUtil.newArrayList();
         for (FlowCategoryVo d : categorys) {
-            Long parentId = d.getParentId();
-            FlowCategoryVo categoryVo = StreamUtils.findFirst(categorys, it -> it.getCategoryId().longValue() == parentId);
+            String parentId = d.getParentId().toString();
+            FlowCategoryVo categoryVo = StreamUtils.findFirst(categorys, it -> it.getCategoryId().toString().equals(parentId));
             if (ObjectUtil.isNull(categoryVo)) {
-                List<Tree<Long>> trees = TreeBuildUtils.build(categorys, parentId, (dept, tree) ->
-                    tree.setId(dept.getCategoryId())
-                        .setParentId(dept.getParentId())
+                List<Tree<String>> trees = TreeBuildUtils.build(categorys, parentId, (dept, tree) ->
+                    tree.setId(dept.getCategoryId().toString())
+                        .setParentId(dept.getParentId().toString())
                         .setName(dept.getCategoryName())
                         .setWeight(dept.getOrderNum()));
-                Tree<Long> tree = StreamUtils.findFirst(trees, it -> it.getId().longValue() == d.getCategoryId());
+                Tree<String> tree = StreamUtils.findFirst(trees, it -> it.getId().equals(d.getCategoryId().toString()));
                 treeList.add(tree);
             }
         }

+ 1 - 1
ruoyi-modules/ruoyi-workflow/src/main/java/org/dromara/workflow/service/impl/FlwDefinitionServiceImpl.java

@@ -107,7 +107,7 @@ public class FlwDefinitionServiceImpl implements IFlwDefinitionService {
         wrapper.like(StringUtils.isNotBlank(flowDefinition.getFlowName()), FlowDefinition::getFlowName, flowDefinition.getFlowName());
         if (StringUtils.isNotBlank(flowDefinition.getCategory())) {
             List<Long> categoryIds = flwCategoryMapper.selectCategoryIdsByParentId(Convert.toLong(flowDefinition.getCategory()));
-            wrapper.in(FlowDefinition::getCategory, categoryIds);
+            wrapper.in(FlowDefinition::getCategory, StreamUtils.toList(categoryIds, Convert::toStr));
         }
         wrapper.orderByDesc(FlowDefinition::getCreateTime);
         return wrapper;

+ 2 - 2
ruoyi-modules/ruoyi-workflow/src/main/java/org/dromara/workflow/service/impl/FlwInstanceServiceImpl.java

@@ -138,7 +138,7 @@ public class FlwInstanceServiceImpl implements IFlwInstanceService {
         queryWrapper.like(StringUtils.isNotBlank(flowInstanceBo.getFlowCode()), "fd.flow_code", flowInstanceBo.getFlowCode());
         if (StringUtils.isNotBlank(flowInstanceBo.getCategory())) {
             List<Long> categoryIds = flwCategoryMapper.selectCategoryIdsByParentId(Convert.toLong(flowInstanceBo.getCategory()));
-            queryWrapper.in("fd.category", categoryIds);
+            queryWrapper.in("fd.category", StreamUtils.toList(categoryIds, Convert::toStr));
         }
         queryWrapper.eq(StringUtils.isNotBlank(flowInstanceBo.getBusinessId()), "fi.business_id", flowInstanceBo.getBusinessId());
         queryWrapper.in(CollUtil.isNotEmpty(flowInstanceBo.getCreateByIds()), "fi.create_by", flowInstanceBo.getCreateByIds());
@@ -344,7 +344,7 @@ public class FlwInstanceServiceImpl implements IFlwInstanceService {
      * @param instanceId 实例id
      */
     @Override
-    public Map<String, Object> instanceVariable(String instanceId) {
+    public Map<String, Object> instanceVariable(Long instanceId) {
         Map<String, Object> map = new HashMap<>();
         FlowInstance flowInstance = flowInstanceMapper.selectById(instanceId);
         Map<String, Object> variableMap = flowInstance.getVariableMap();

+ 13 - 5
ruoyi-modules/ruoyi-workflow/src/main/java/org/dromara/workflow/service/impl/FlwTaskServiceImpl.java

@@ -11,6 +11,7 @@ import com.baomidou.mybatisplus.core.toolkit.Wrappers;
 import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
 import lombok.RequiredArgsConstructor;
 import lombok.extern.slf4j.Slf4j;
+import org.dromara.common.core.domain.dto.StartProcessReturnDTO;
 import org.dromara.common.core.domain.dto.UserDTO;
 import org.dromara.common.core.enums.BusinessStatusEnum;
 import org.dromara.common.core.exception.ServiceException;
@@ -86,7 +87,7 @@ public class FlwTaskServiceImpl implements IFlwTaskService {
      */
     @Override
     @Transactional(rollbackFor = Exception.class)
-    public Map<String, Object> startWorkFlow(StartProcessBo startProcessBo) {
+    public StartProcessReturnDTO startWorkFlow(StartProcessBo startProcessBo) {
         String businessId = startProcessBo.getBusinessId();
         if (StringUtils.isBlank(businessId)) {
             throw new ServiceException("启动工作流时必须包含业务ID");
@@ -102,7 +103,10 @@ public class FlwTaskServiceImpl implements IFlwTaskService {
         if (ObjectUtil.isNotNull(flowInstance)) {
             BusinessStatusEnum.checkStartStatus(flowInstance.getFlowStatus());
             List<Task> taskList = taskService.list(new FlowTask().setInstanceId(flowInstance.getId()));
-            return Map.of(PROCESS_INSTANCE_ID, taskList.get(0).getInstanceId(), TASK_ID, taskList.get(0).getId());
+            StartProcessReturnDTO dto = new StartProcessReturnDTO();
+            dto.setProcessInstanceId(taskList.get(0).getInstanceId());
+            dto.setTaskId(taskList.get(0).getId());
+            return dto;
         }
         FlowParams flowParams = new FlowParams();
         flowParams.flowCode(startProcessBo.getFlowCode());
@@ -119,7 +123,10 @@ public class FlwTaskServiceImpl implements IFlwTaskService {
         if (taskList.size() > 1) {
             throw new ServiceException("请检查流程第一个环节是否为申请人!");
         }
-        return Map.of(PROCESS_INSTANCE_ID, instance.getId(), TASK_ID, taskList.get(0).getId());
+        StartProcessReturnDTO dto = new StartProcessReturnDTO();
+        dto.setProcessInstanceId(instance.getId());
+        dto.setTaskId(taskList.get(0).getId());
+        return dto;
     }
 
     /**
@@ -146,7 +153,7 @@ public class FlwTaskServiceImpl implements IFlwTaskService {
             Definition definition = defService.getById(flowTask.getDefinitionId());
             // 检查流程状态是否为草稿、已撤销或已退回状态,若是则执行流程提交监听
             if (BusinessStatusEnum.isDraftOrCancelOrBack(ins.getFlowStatus())) {
-                flowProcessEventHandler.processHandler(definition.getFlowCode(), ins.getBusinessId(), ins.getFlowStatus(), true);
+                flowProcessEventHandler.processHandler(definition.getFlowCode(), ins.getBusinessId(), ins.getFlowStatus(), null, true);
             }
             // 构建流程参数,包括变量、跳转类型、消息、处理人、权限等信息
             FlowParams flowParams = new FlowParams();
@@ -347,7 +354,7 @@ public class FlwTaskServiceImpl implements IFlwTaskService {
         wrapper.in(CollUtil.isNotEmpty(flowTaskBo.getCreateByIds()), "t.create_by", flowTaskBo.getCreateByIds());
         if (StringUtils.isNotBlank(flowTaskBo.getCategory())) {
             List<Long> categoryIds = flwCategoryMapper.selectCategoryIdsByParentId(Convert.toLong(flowTaskBo.getCategory()));
-            wrapper.in("t.category", categoryIds);
+            wrapper.in("t.category", StreamUtils.toList(categoryIds, Convert::toStr));
         }
         wrapper.orderByDesc("t.create_time");
         return wrapper;
@@ -381,6 +388,7 @@ public class FlwTaskServiceImpl implements IFlwTaskService {
             flowParams.skipType(SkipType.REJECT.getKey());
             flowParams.flowStatus(applyNodeCode.equals(bo.getNodeCode()) ? TaskStatusEnum.BACK.getStatus() : TaskStatusEnum.WAITING.getStatus())
                 .hisStatus(TaskStatusEnum.BACK.getStatus());
+            flowParams.hisTaskExt(bo.getFileId());
             taskService.skip(task.getId(), flowParams);
 
             Instance instance = insService.getById(inst.getId());

+ 13 - 0
ruoyi-modules/ruoyi-workflow/src/main/java/org/dromara/workflow/service/impl/TestLeaveServiceImpl.java

@@ -1,6 +1,8 @@
 package org.dromara.workflow.service.impl;
 
+import cn.hutool.core.convert.Convert;
 import cn.hutool.core.date.DateUtil;
+import cn.hutool.core.map.MapUtil;
 import cn.hutool.core.util.ObjectUtil;
 import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
 import com.baomidou.mybatisplus.core.toolkit.Wrappers;
@@ -28,6 +30,7 @@ import org.springframework.stereotype.Service;
 import org.springframework.transaction.annotation.Transactional;
 
 import java.util.List;
+import java.util.Map;
 
 /**
  * 请假Service业务层处理
@@ -131,6 +134,16 @@ public class TestLeaveServiceImpl implements ITestLeaveService {
         log.info("当前任务执行了{}", processEvent.toString());
         TestLeave testLeave = baseMapper.selectById(Long.valueOf(processEvent.getBusinessId()));
         testLeave.setStatus(processEvent.getStatus());
+        // 用于例如审批附件 审批意见等 存储到业务表内 自行根据业务实现存储流程
+        Map<String, Object> params = processEvent.getParams();
+        if (MapUtil.isNotEmpty(params)) {
+            // 历史任务扩展(通常为附件)
+            String hisTaskExt = Convert.toStr(params.get("hisTaskExt"));
+            // 办理人
+            String handler = Convert.toStr(params.get("handler"));
+            // 办理意见
+            String message = Convert.toStr(params.get("message"));
+        }
         if (processEvent.isSubmit()) {
             testLeave.setStatus(BusinessStatusEnum.WAITING.getStatus());
         }

+ 12 - 1
ruoyi-modules/ruoyi-workflow/src/main/java/org/dromara/workflow/service/impl/WorkflowServiceImpl.java

@@ -5,6 +5,7 @@ import cn.hutool.core.util.ObjectUtil;
 import lombok.RequiredArgsConstructor;
 import org.dromara.common.core.domain.dto.CompleteTaskDTO;
 import org.dromara.common.core.domain.dto.StartProcessDTO;
+import org.dromara.common.core.domain.dto.StartProcessReturnDTO;
 import org.dromara.common.core.service.WorkflowService;
 import org.dromara.common.core.utils.StringUtils;
 import org.dromara.warm.flow.orm.entity.FlowInstance;
@@ -77,6 +78,16 @@ public class WorkflowServiceImpl implements WorkflowService {
         flwInstanceService.setVariable(instanceId, variables);
     }
 
+    /**
+     * 获取流程变量
+     *
+     * @param instanceId 流程实例id
+     */
+    @Override
+    public Map<String, Object> instanceVariable(Long instanceId) {
+        return flwInstanceService.instanceVariable(instanceId);
+    }
+
     /**
      * 按照业务id查询流程实例id
      *
@@ -105,7 +116,7 @@ public class WorkflowServiceImpl implements WorkflowService {
      * @param startProcess 参数
      */
     @Override
-    public Map<String, Object> startWorkFlow(StartProcessDTO startProcess) {
+    public StartProcessReturnDTO startWorkFlow(StartProcessDTO startProcess) {
         return flwTaskService.startWorkFlow(BeanUtil.toBean(startProcess, StartProcessBo.class));
     }
 

+ 4 - 4
script/docker/docker-compose.yml

@@ -98,7 +98,7 @@ services:
     network_mode: "host"
 
   ruoyi-server1:
-    image: ruoyi/ruoyi-server:5.3.0-BETA
+    image: ruoyi/ruoyi-server:5.3.0
     container_name: ruoyi-server1
     environment:
       # 时区上海
@@ -113,7 +113,7 @@ services:
     network_mode: "host"
 
   ruoyi-server2:
-    image: ruoyi/ruoyi-server:5.3.0-BETA
+    image: ruoyi/ruoyi-server:5.3.0
     container_name: ruoyi-server2
     environment:
       # 时区上海
@@ -128,7 +128,7 @@ services:
     network_mode: "host"
 
   ruoyi-monitor-admin:
-    image: ruoyi/ruoyi-monitor-admin:5.3.0-BETA
+    image: ruoyi/ruoyi-monitor-admin:5.3.0
     container_name: ruoyi-monitor-admin
     environment:
       # 时区上海
@@ -140,7 +140,7 @@ services:
     network_mode: "host"
 
   ruoyi-snailjob-server:
-    image: ruoyi/ruoyi-snailjob-server:5.3.0-BETA
+    image: ruoyi/ruoyi-snailjob-server:5.3.0
     container_name: ruoyi-snailjob-server
     environment:
       # 时区上海

+ 27 - 0
script/sql/oracle/oracle_ry_vue_5.X.sql

@@ -615,6 +615,8 @@ insert into sys_role_menu values ('3', '105');
 insert into sys_role_menu values ('3', '106');
 insert into sys_role_menu values ('3', '107');
 insert into sys_role_menu values ('3', '108');
+insert into sys_role_menu values ('3', '118');
+insert into sys_role_menu values ('3', '123');
 insert into sys_role_menu values ('3', '500');
 insert into sys_role_menu values ('3', '501');
 insert into sys_role_menu values ('3', '1001');
@@ -662,6 +664,12 @@ insert into sys_role_menu values ('3', '1042');
 insert into sys_role_menu values ('3', '1043');
 insert into sys_role_menu values ('3', '1044');
 insert into sys_role_menu values ('3', '1045');
+insert into sys_role_menu values ('3', '1050');
+insert into sys_role_menu values ('3', '1061');
+insert into sys_role_menu values ('3', '1062');
+insert into sys_role_menu values ('3', '1063');
+insert into sys_role_menu values ('3', '1064');
+insert into sys_role_menu values ('3', '1065');
 insert into sys_role_menu values ('3', '1500');
 insert into sys_role_menu values ('3', '1501');
 insert into sys_role_menu values ('3', '1502');
@@ -674,6 +682,25 @@ insert into sys_role_menu values ('3', '1508');
 insert into sys_role_menu values ('3', '1509');
 insert into sys_role_menu values ('3', '1510');
 insert into sys_role_menu values ('3', '1511');
+insert into sys_role_menu values ('3', '1600');
+insert into sys_role_menu values ('3', '1601');
+insert into sys_role_menu values ('3', '1602');
+insert into sys_role_menu values ('3', '1603');
+insert into sys_role_menu values ('3', '1620');
+insert into sys_role_menu values ('3', '1621');
+insert into sys_role_menu values ('3', '1622');
+insert into sys_role_menu values ('3', '1623');
+insert into sys_role_menu values ('3', '11618');
+insert into sys_role_menu values ('3', '11619');
+insert into sys_role_menu values ('3', '11629');
+insert into sys_role_menu values ('3', '11632');
+insert into sys_role_menu values ('3', '11633');
+insert into sys_role_menu values ('3', '11638');
+insert into sys_role_menu values ('3', '11639');
+insert into sys_role_menu values ('3', '11640');
+insert into sys_role_menu values ('3', '11641');
+insert into sys_role_menu values ('3', '11642');
+insert into sys_role_menu values ('3', '11643');
 insert into sys_role_menu values ('4', '5');
 insert into sys_role_menu values ('4', '1500');
 insert into sys_role_menu values ('4', '1501');

+ 27 - 0
script/sql/postgres/postgres_ry_vue_5.X.sql

@@ -617,6 +617,8 @@ insert into sys_role_menu values ('3', '105');
 insert into sys_role_menu values ('3', '106');
 insert into sys_role_menu values ('3', '107');
 insert into sys_role_menu values ('3', '108');
+insert into sys_role_menu values ('3', '118');
+insert into sys_role_menu values ('3', '123');
 insert into sys_role_menu values ('3', '500');
 insert into sys_role_menu values ('3', '501');
 insert into sys_role_menu values ('3', '1001');
@@ -664,6 +666,12 @@ insert into sys_role_menu values ('3', '1042');
 insert into sys_role_menu values ('3', '1043');
 insert into sys_role_menu values ('3', '1044');
 insert into sys_role_menu values ('3', '1045');
+insert into sys_role_menu values ('3', '1050');
+insert into sys_role_menu values ('3', '1061');
+insert into sys_role_menu values ('3', '1062');
+insert into sys_role_menu values ('3', '1063');
+insert into sys_role_menu values ('3', '1064');
+insert into sys_role_menu values ('3', '1065');
 insert into sys_role_menu values ('3', '1500');
 insert into sys_role_menu values ('3', '1501');
 insert into sys_role_menu values ('3', '1502');
@@ -676,6 +684,25 @@ insert into sys_role_menu values ('3', '1508');
 insert into sys_role_menu values ('3', '1509');
 insert into sys_role_menu values ('3', '1510');
 insert into sys_role_menu values ('3', '1511');
+insert into sys_role_menu values ('3', '1600');
+insert into sys_role_menu values ('3', '1601');
+insert into sys_role_menu values ('3', '1602');
+insert into sys_role_menu values ('3', '1603');
+insert into sys_role_menu values ('3', '1620');
+insert into sys_role_menu values ('3', '1621');
+insert into sys_role_menu values ('3', '1622');
+insert into sys_role_menu values ('3', '1623');
+insert into sys_role_menu values ('3', '11618');
+insert into sys_role_menu values ('3', '11619');
+insert into sys_role_menu values ('3', '11629');
+insert into sys_role_menu values ('3', '11632');
+insert into sys_role_menu values ('3', '11633');
+insert into sys_role_menu values ('3', '11638');
+insert into sys_role_menu values ('3', '11639');
+insert into sys_role_menu values ('3', '11640');
+insert into sys_role_menu values ('3', '11641');
+insert into sys_role_menu values ('3', '11642');
+insert into sys_role_menu values ('3', '11643');
 insert into sys_role_menu values ('4', '5');
 insert into sys_role_menu values ('4', '1500');
 insert into sys_role_menu values ('4', '1501');

+ 4 - 2
script/sql/postgres/postgres_ry_workflow.sql

@@ -136,6 +136,7 @@ CREATE TABLE flow_instance
     variable        text         NULL,                                     -- 任务变量
     flow_status     varchar(20)  NOT NULL,                                 -- 流程状态(0待提交 1审批中 2 审批通过 8已完成 9已退回 10失效)
     activity_status int2         NOT NULL DEFAULT 1,                       -- 流程激活状态(0挂起 1激活)
+    def_json        text         NULL,                                     -- 流程定义json
     create_by       varchar(64)  NULL     DEFAULT '':: character varying,  -- 创建者
     create_time     timestamp    NULL,                                     -- 创建时间
     update_time     timestamp    NULL,                                     -- 更新时间
@@ -155,6 +156,7 @@ COMMENT ON COLUMN flow_instance.node_name IS '流程节点名称';
 COMMENT ON COLUMN flow_instance.variable IS '任务变量';
 COMMENT ON COLUMN flow_instance.flow_status IS '流程状态(0待提交 1审批中 2 审批通过 3自动通过 4终止 5作废 6撤销 7取回  8已完成 9已退回 10失效)';
 COMMENT ON COLUMN flow_instance.activity_status IS '流程激活状态(0挂起 1激活)';
+COMMENT ON COLUMN flow_instance.def_json IS '流程定义json';
 COMMENT ON COLUMN flow_instance.create_by IS '创建者';
 COMMENT ON COLUMN flow_instance.create_time IS '创建时间';
 COMMENT ON COLUMN flow_instance.update_time IS '更新时间';
@@ -199,8 +201,8 @@ CREATE TABLE flow_his_task
     definition_id    int8         NOT NULL,                                 -- 对应flow_definition表的id
     instance_id      int8         NOT NULL,                                 -- 对应flow_instance表的id
     task_id          int8         NOT NULL,                                 -- 对应flow_task表的id
-    node_code        varchar(100) NULL,                                     -- 开始节点编码
-    node_name        varchar(100) NULL,                                     -- 开始节点名称
+    node_code        varchar(200) NULL,                                     -- 开始节点编码
+    node_name        varchar(200) NULL,                                     -- 开始节点名称
     node_type        int2         NULL,                                     -- 开始节点类型(0开始节点 1中间节点 2结束节点 3互斥网关 4并行网关)
     target_node_code varchar(200) NULL,                                     -- 目标节点编码
     target_node_name varchar(200) NULL,                                     -- 结束节点名称

+ 27 - 0
script/sql/ry_vue_5.X.sql

@@ -441,6 +441,8 @@ insert into sys_role_menu values ('3', '105');
 insert into sys_role_menu values ('3', '106');
 insert into sys_role_menu values ('3', '107');
 insert into sys_role_menu values ('3', '108');
+insert into sys_role_menu values ('3', '118');
+insert into sys_role_menu values ('3', '123');
 insert into sys_role_menu values ('3', '500');
 insert into sys_role_menu values ('3', '501');
 insert into sys_role_menu values ('3', '1001');
@@ -488,6 +490,12 @@ insert into sys_role_menu values ('3', '1042');
 insert into sys_role_menu values ('3', '1043');
 insert into sys_role_menu values ('3', '1044');
 insert into sys_role_menu values ('3', '1045');
+insert into sys_role_menu values ('3', '1050');
+insert into sys_role_menu values ('3', '1061');
+insert into sys_role_menu values ('3', '1062');
+insert into sys_role_menu values ('3', '1063');
+insert into sys_role_menu values ('3', '1064');
+insert into sys_role_menu values ('3', '1065');
 insert into sys_role_menu values ('3', '1500');
 insert into sys_role_menu values ('3', '1501');
 insert into sys_role_menu values ('3', '1502');
@@ -500,6 +508,25 @@ insert into sys_role_menu values ('3', '1508');
 insert into sys_role_menu values ('3', '1509');
 insert into sys_role_menu values ('3', '1510');
 insert into sys_role_menu values ('3', '1511');
+insert into sys_role_menu values ('3', '1600');
+insert into sys_role_menu values ('3', '1601');
+insert into sys_role_menu values ('3', '1602');
+insert into sys_role_menu values ('3', '1603');
+insert into sys_role_menu values ('3', '1620');
+insert into sys_role_menu values ('3', '1621');
+insert into sys_role_menu values ('3', '1622');
+insert into sys_role_menu values ('3', '1623');
+insert into sys_role_menu values ('3', '11618');
+insert into sys_role_menu values ('3', '11619');
+insert into sys_role_menu values ('3', '11629');
+insert into sys_role_menu values ('3', '11632');
+insert into sys_role_menu values ('3', '11633');
+insert into sys_role_menu values ('3', '11638');
+insert into sys_role_menu values ('3', '11639');
+insert into sys_role_menu values ('3', '11640');
+insert into sys_role_menu values ('3', '11641');
+insert into sys_role_menu values ('3', '11642');
+insert into sys_role_menu values ('3', '11643');
 insert into sys_role_menu values ('4', '5');
 insert into sys_role_menu values ('4', '1500');
 insert into sys_role_menu values ('4', '1501');

+ 56 - 2
script/sql/sqlserver/sqlserver_ry_vue_5.X.sql

@@ -1239,7 +1239,7 @@ INSERT sys_dict_data VALUES (18, N'000000', 1, N'新增', N'1', N'sys_oper_type'
 GO
 INSERT sys_dict_data VALUES (19, N'000000', 2, N'修改', N'2', N'sys_oper_type', N'', N'info', N'N', 103, 1, getdate(), NULL, NULL, N'修改操作')
 GO
-INSERT sys_dict_data VALUES (20, N'000000', 3, N'删除', N'3', N'sys_oper_type', N'', N'danger', N'N', 103, 1, getdate(), NULL, NULL, N'删除操作')
+INSERT sys_dict_data VALUES (20, N'000000', 3, N'删除', N3, N'sys_oper_type', N'', N'danger', N'N', 103, 1, getdate(), NULL, NULL, N'删除操作')
 GO
 INSERT sys_dict_data VALUES (21, N'000000', 4, N'授权', N'4', N'sys_oper_type', N'', N'primary', N'N', 103, 1, getdate(), NULL, NULL, N'授权操作')
 GO
@@ -2479,6 +2479,10 @@ INSERT sys_role_menu VALUES (3, 107);
 GO
 INSERT sys_role_menu VALUES (3, 108);
 GO
+INSERT sys_role_menu VALUES (3, 118);
+GO
+INSERT sys_role_menu VALUES (3, 123);
+GO
 INSERT sys_role_menu VALUES (3, 500);
 GO
 INSERT sys_role_menu VALUES (3, 501);
@@ -2573,6 +2577,18 @@ INSERT sys_role_menu VALUES (3, 1044);
 GO
 INSERT sys_role_menu VALUES (3, 1045);
 GO
+INSERT sys_role_menu VALUES (3, 1050);
+GO
+INSERT sys_role_menu VALUES (3, 1061);
+GO
+INSERT sys_role_menu VALUES (3, 1062);
+GO
+INSERT sys_role_menu VALUES (3, 1063);
+GO
+INSERT sys_role_menu VALUES (3, 1064);
+GO
+INSERT sys_role_menu VALUES (3, 1065);
+GO
 INSERT sys_role_menu VALUES (3, 1500);
 GO
 INSERT sys_role_menu VALUES (3, 1501);
@@ -2597,6 +2613,44 @@ INSERT sys_role_menu VALUES (3, 1510);
 GO
 INSERT sys_role_menu VALUES (3, 1511);
 GO
+INSERT sys_role_menu VALUES (3, 1600);
+GO
+INSERT sys_role_menu VALUES (3, 1601);
+GO
+INSERT sys_role_menu VALUES (3, 1602);
+GO
+INSERT sys_role_menu VALUES (3, 1603);
+GO
+INSERT sys_role_menu VALUES (3, 1620);
+GO
+INSERT sys_role_menu VALUES (3, 1621);
+GO
+INSERT sys_role_menu VALUES (3, 1622);
+GO
+INSERT sys_role_menu VALUES (3, 1623);
+GO
+INSERT sys_role_menu VALUES (3, 11618);
+GO
+INSERT sys_role_menu VALUES (3, 11619);
+GO
+INSERT sys_role_menu VALUES (3, 11629);
+GO
+INSERT sys_role_menu VALUES (3, 11632);
+GO
+INSERT sys_role_menu VALUES (3, 11633);
+GO
+INSERT sys_role_menu VALUES (3, 11638);
+GO
+INSERT sys_role_menu VALUES (3, 11639);
+GO
+INSERT sys_role_menu VALUES (3, 11640);
+GO
+INSERT sys_role_menu VALUES (3, 11641);
+GO
+INSERT sys_role_menu VALUES (3, 11642);
+GO
+INSERT sys_role_menu VALUES (3, 11643);
+GO
 INSERT sys_role_menu VALUES (4, 5);
 GO
 INSERT sys_role_menu VALUES (4, 1500);
@@ -3119,7 +3173,7 @@ INSERT INTO sys_oss_config VALUES (N'1', N'000000', N'minio', N'ruoyi',
 GO
 INSERT INTO sys_oss_config VALUES (N'2', N'000000', N'qiniu', N'XXXXXXXXXXXXXXXX', N'XXXXXXXXXXXXXXX', N'ruoyi',            N'', N's3-cn-north-1.qiniucs.com',         N'',N'N', N'',           N'1', N'1', N'', 103, 1, getdate(), 1, getdate(), NULL)
 GO
-INSERT INTO sys_oss_config VALUES (N'3', N'000000', N'aliyun', N'XXXXXXXXXXXXXXX', N'XXXXXXXXXXXXXXX', N'ruoyi',            N'', N'oss-cn-beijing.aliyuncs.com',       N'',N'N', N'',           N'1', N'1', N'', 103, 1, getdate(), 1, getdate(), NULL)
+INSERT INTO sys_oss_config VALUES (N3, N'000000', N'aliyun', N'XXXXXXXXXXXXXXX', N'XXXXXXXXXXXXXXX', N'ruoyi',            N'', N'oss-cn-beijing.aliyuncs.com',       N'',N'N', N'',           N'1', N'1', N'', 103, 1, getdate(), 1, getdate(), NULL)
 GO
 INSERT INTO sys_oss_config VALUES (N'4', N'000000', N'qcloud', N'XXXXXXXXXXXXXXX', N'XXXXXXXXXXXXXXX', N'ruoyi-1250000000', N'', N'cos.ap-beijing.myqcloud.com',       N'',N'N', N'ap-beijing', N'1', N'1', N'', 103, 1, getdate(), 1, getdate(), NULL)
 GO