瀏覽代碼

update 重构办理人接口

AprilWind 1 年之前
父節點
當前提交
9df837f047

+ 1 - 1
pom.xml

@@ -48,7 +48,7 @@
         <fastjson.version>1.2.83</fastjson.version>
         <!-- 面向运行时的D-ORM依赖 -->
         <anyline.version>8.7.2-20250101</anyline.version>
-        <!--工作流配置-->
+        <!-- 工作流配置 -->
         <warm-flow.version>1.7.0</warm-flow.version>
 
         <!-- 插件版本 -->

+ 33 - 0
ruoyi-common/ruoyi-common-core/src/main/java/org/dromara/common/core/service/UserService.java

@@ -3,6 +3,7 @@ package org.dromara.common.core.service;
 import org.dromara.common.core.domain.dto.UserDTO;
 
 import java.util.List;
+import java.util.Map;
 
 /**
  * 通用 用户服务
@@ -91,4 +92,36 @@ public interface UserService {
      */
     List<UserDTO> selectUsersByPostIds(List<Long> postIds);
 
+    /**
+     * 根据用户 ID 列表查询用户名称映射关系
+     *
+     * @param userIds 用户 ID 列表
+     * @return Map,其中 key 为用户 ID,value 为对应的用户名称
+     */
+    Map<Long, String> selectUserNamesByIds(List<Long> userIds);
+
+    /**
+     * 根据角色 ID 列表查询角色名称映射关系
+     *
+     * @param roleIds 角色 ID 列表
+     * @return Map,其中 key 为角色 ID,value 为对应的角色名称
+     */
+    Map<Long, String> selectRoleNamesByIds(List<Long> roleIds);
+
+    /**
+     * 根据部门 ID 列表查询部门名称映射关系
+     *
+     * @param deptIds 部门 ID 列表
+     * @return Map,其中 key 为部门 ID,value 为对应的部门名称
+     */
+    Map<Long, String> selectDeptNamesByIds(List<Long> deptIds);
+
+    /**
+     * 根据岗位 ID 列表查询岗位名称映射关系
+     *
+     * @param postIds 岗位 ID 列表
+     * @return Map,其中 key 为岗位 ID,value 为对应的岗位名称
+     */
+    Map<Long, String> selectPostNamesByIds(List<Long> postIds);
+
 }

+ 78 - 4
ruoyi-modules/ruoyi-system/src/main/java/org/dromara/system/service/impl/SysUserServiceImpl.java

@@ -35,10 +35,8 @@ import org.springframework.cache.annotation.Cacheable;
 import org.springframework.stereotype.Service;
 import org.springframework.transaction.annotation.Transactional;
 
-import java.util.ArrayList;
-import java.util.List;
-import java.util.Map;
-import java.util.Set;
+import java.util.*;
+import java.util.stream.Collectors;
 
 /**
  * 用户 业务层处理
@@ -720,4 +718,80 @@ public class SysUserServiceImpl implements ISysUserService, UserService {
         return selectListByIds(new ArrayList<>(userIds));
     }
 
+    /**
+     * 根据用户 ID 列表查询用户名称映射关系
+     *
+     * @param userIds 用户 ID 列表
+     * @return Map,其中 key 为用户 ID,value 为对应的用户名称
+     */
+    @Override
+    public Map<Long, String> selectUserNamesByIds(List<Long> userIds) {
+        if (CollUtil.isEmpty(userIds)) {
+            return Collections.emptyMap();
+        }
+        return baseMapper.selectList(
+                new LambdaQueryWrapper<SysUser>()
+                    .select(SysUser::getUserId, SysUser::getNickName)
+                    .in(SysUser::getUserId, userIds)
+            ).stream()
+            .collect(Collectors.toMap(SysUser::getUserId, SysUser::getNickName));
+    }
+
+    /**
+     * 根据角色 ID 列表查询角色名称映射关系
+     *
+     * @param roleIds 角色 ID 列表
+     * @return Map,其中 key 为角色 ID,value 为对应的角色名称
+     */
+    @Override
+    public Map<Long, String> selectRoleNamesByIds(List<Long> roleIds) {
+        if (CollUtil.isEmpty(roleIds)) {
+            return Collections.emptyMap();
+        }
+        return roleMapper.selectList(
+                new LambdaQueryWrapper<SysRole>()
+                    .select(SysRole::getRoleId, SysRole::getRoleName)
+                    .in(SysRole::getRoleId, roleIds)
+            ).stream()
+            .collect(Collectors.toMap(SysRole::getRoleId, SysRole::getRoleName));
+    }
+
+    /**
+     * 根据部门 ID 列表查询部门名称映射关系
+     *
+     * @param deptIds 部门 ID 列表
+     * @return Map,其中 key 为部门 ID,value 为对应的部门名称
+     */
+    @Override
+    public Map<Long, String> selectDeptNamesByIds(List<Long> deptIds) {
+        if (CollUtil.isEmpty(deptIds)) {
+            return Collections.emptyMap();
+        }
+        return deptMapper.selectList(
+                new LambdaQueryWrapper<SysDept>()
+                    .select(SysDept::getDeptId, SysDept::getDeptName)
+                    .in(SysDept::getDeptId, deptIds)
+            ).stream()
+            .collect(Collectors.toMap(SysDept::getDeptId, SysDept::getDeptName));
+    }
+
+    /**
+     * 根据岗位 ID 列表查询岗位名称映射关系
+     *
+     * @param postIds 岗位 ID 列表
+     * @return Map,其中 key 为岗位 ID,value 为对应的岗位名称
+     */
+    @Override
+    public Map<Long, String> selectPostNamesByIds(List<Long> postIds) {
+        if (CollUtil.isEmpty(postIds)) {
+            return Collections.emptyMap();
+        }
+        return postMapper.selectList(
+                new LambdaQueryWrapper<SysPost>()
+                    .select(SysPost::getPostId, SysPost::getPostName)
+                    .in(SysPost::getPostId, postIds)
+            ).stream()
+            .collect(Collectors.toMap(SysPost::getPostId, SysPost::getPostName));
+    }
+
 }

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

@@ -13,10 +13,21 @@ public interface IFlwTaskAssigneeService {
 
     /**
      * 根据存储标识符(storageId)解析分配类型和ID,并获取对应的用户列表
+     * 支持单个标识(例如 "user:123" 或 "456"),格式非法将返回空列表
      *
-     * @param storageId 包含分配类型和ID的字符串(例如 "user:123" 或 "role:456")
-     * @return 与分配类型和ID匹配的用户列表,如果格式无效则返回空列表
+     * @param storageId 包含分配类型和ID的字符串
+     * @return 匹配的用户列表,格式非法返回空列表
      */
     List<UserDTO> fetchUsersByStorageId(String storageId);
 
+    /**
+     * 批量解析多个存储标识符(storageIds),按类型分类并合并查询用户列表
+     * 输入格式支持多个以逗号分隔的标识(如 "user:123,role:456,789")
+     * 会自动去重返回结果,非法格式的标识将被忽略
+     *
+     * @param storageIds 多个存储标识符字符串(逗号分隔)
+     * @return 合并后的用户列表,去重后返回,非法格式的标识将被跳过
+     */
+    List<UserDTO> fetchUsersByStorageIds(String storageIds);
+
 }

+ 110 - 22
ruoyi-modules/ruoyi-workflow/src/main/java/org/dromara/workflow/service/impl/FlwTaskAssigneeServiceImpl.java

@@ -2,6 +2,7 @@ package org.dromara.workflow.service.impl;
 
 import cn.hutool.core.bean.BeanUtil;
 import cn.hutool.core.collection.CollUtil;
+import cn.hutool.core.lang.Pair;
 import cn.hutool.core.util.StrUtil;
 import lombok.RequiredArgsConstructor;
 import lombok.extern.slf4j.Slf4j;
@@ -10,7 +11,6 @@ import org.dromara.common.core.domain.dto.TaskAssigneeDTO;
 import org.dromara.common.core.domain.dto.UserDTO;
 import org.dromara.common.core.domain.model.TaskAssigneeBody;
 import org.dromara.common.core.enums.FormatsType;
-import org.dromara.common.core.exception.ServiceException;
 import org.dromara.common.core.service.DeptService;
 import org.dromara.common.core.service.TaskAssigneeService;
 import org.dromara.common.core.service.UserService;
@@ -20,6 +20,7 @@ import org.dromara.warm.flow.ui.dto.HandlerFunDto;
 import org.dromara.warm.flow.ui.dto.HandlerQuery;
 import org.dromara.warm.flow.ui.dto.TreeFunDto;
 import org.dromara.warm.flow.ui.service.HandlerSelectService;
+import org.dromara.warm.flow.ui.vo.HandlerFeedBackVo;
 import org.dromara.warm.flow.ui.vo.HandlerSelectVo;
 import org.dromara.workflow.common.ConditionalOnEnable;
 import org.dromara.workflow.common.enums.TaskAssigneeEnum;
@@ -74,6 +75,49 @@ public class FlwTaskAssigneeServiceImpl implements IFlwTaskAssigneeService, Hand
         return getHandlerSelectVo(buildHandlerData(dto, type), buildDeptTree(depts));
     }
 
+    /**
+     * 办理人权限名称回显
+     *
+     * @param storageIds 入库主键集合
+     * @return 结果
+     */
+    @Override
+    public List<HandlerFeedBackVo> handlerFeedback(List<String> storageIds) {
+        if (CollUtil.isEmpty(storageIds)) {
+            return Collections.emptyList();
+        }
+        // 解析并归类 ID,同时记录原始顺序和对应解析结果
+        Map<TaskAssigneeEnum, List<Long>> typeIdMap = new EnumMap<>(TaskAssigneeEnum.class);
+        Map<String, Pair<TaskAssigneeEnum, Long>> parsedMap = new LinkedHashMap<>();
+        for (String storageId : storageIds) {
+            Pair<TaskAssigneeEnum, Long> parsed = this.parseStorageId(storageId);
+            parsedMap.put(storageId, parsed);
+            if (parsed != null) {
+                typeIdMap.computeIfAbsent(parsed.getKey(), k -> new ArrayList<>()).add(parsed.getValue());
+            }
+        }
+
+        // 查询所有类型对应的 ID 名称映射
+        Map<TaskAssigneeEnum, Map<Long, String>> nameMap = new EnumMap<>(TaskAssigneeEnum.class);
+        typeIdMap.forEach((type, ids) -> nameMap.put(type, this.getNamesByType(type, ids)));
+
+        // 组装返回结果,保持原始顺序
+        return parsedMap.entrySet().stream()
+            .map(entry -> {
+                String storageId = entry.getKey();
+                Pair<TaskAssigneeEnum, Long> parsed = entry.getValue();
+                String handlerName = "格式错误";
+                if (parsed != null) {
+                    Map<Long, String> nameMapping = nameMap.getOrDefault(parsed.getKey(), Collections.emptyMap());
+                    handlerName = nameMapping.getOrDefault(parsed.getValue(), "未知名称");
+                }
+                HandlerFeedBackVo backVo = new HandlerFeedBackVo();
+                backVo.setStorageId(storageId);
+                backVo.setHandlerName(handlerName);
+                return backVo;
+            }).toList();
+    }
+
     /**
      * 根据任务办理类型查询对应的数据
      */
@@ -83,7 +127,6 @@ public class FlwTaskAssigneeServiceImpl implements IFlwTaskAssigneeService, Hand
             case ROLE -> taskAssigneeService.selectRolesByTaskAssigneeList(taskQuery);
             case DEPT -> taskAssigneeService.selectDeptsByTaskAssigneeList(taskQuery);
             case POST -> taskAssigneeService.selectPostsByTaskAssigneeList(taskQuery);
-            default -> throw new ServiceException("Unsupported handler type");
         };
     }
 
@@ -124,33 +167,41 @@ public class FlwTaskAssigneeServiceImpl implements IFlwTaskAssigneeService, Hand
 
     /**
      * 根据存储标识符(storageId)解析分配类型和ID,并获取对应的用户列表
+     * 支持单个标识(例如 "user:123" 或 "456"),格式非法将返回空列表
      *
-     * @param storageId 包含分配类型和ID的字符串(例如 "user:123" 或 "role:456")
-     * @return 与分配类型和ID匹配的用户列表,如果格式无效则返回空列表
+     * @param storageId 包含分配类型和ID的字符串
+     * @return 匹配的用户列表,格式非法返回空列表
      */
     @Override
     public List<UserDTO> fetchUsersByStorageId(String storageId) {
-        List<UserDTO> list = new ArrayList<>();
+        Pair<TaskAssigneeEnum, Long> parsed = this.parseStorageId(storageId);
+        if (parsed == null) {
+            return Collections.emptyList();
+        }
+        return this.getUsersByType(parsed.getKey(), Collections.singletonList(parsed.getValue()));
+    }
+
+    /**
+     * 批量解析多个存储标识符(storageIds),按类型分类并合并查询用户列表
+     * 输入格式支持多个以逗号分隔的标识(如 "user:123,role:456,789")
+     * 会自动去重返回结果,非法格式的标识将被忽略
+     *
+     * @param storageIds 多个存储标识符字符串(逗号分隔)
+     * @return 合并后的用户列表,去重后返回,非法格式的标识将被跳过
+     */
+    @Override
+    public List<UserDTO> fetchUsersByStorageIds(String storageIds) {
         Map<TaskAssigneeEnum, List<Long>> typeIdMap = new EnumMap<>(TaskAssigneeEnum.class);
-        for (String str : storageId.split(StrUtil.COMMA)) {
-            String[] parts = str.split(StrUtil.COLON, 2);
-            TaskAssigneeEnum type;
-            Long id;
-            if (parts.length < 2) {
-                // 无前缀时默认是用户类型
-                type = TaskAssigneeEnum.USER;
-                id = Long.valueOf(parts[0]);
-            } else {
-                // 根据前缀解析类型(如 "role:123" -> ROLE 类型)
-                type = TaskAssigneeEnum.fromCode(parts[0] + StrUtil.COLON);
-                id = Long.valueOf(parts[1]);
+        for (String storageId : storageIds.split(StrUtil.COMMA)) {
+            Pair<TaskAssigneeEnum, Long> parsed = this.parseStorageId(storageId);
+            if (parsed != null) {
+                typeIdMap.computeIfAbsent(parsed.getKey(), k -> new ArrayList<>()).add(parsed.getValue());
             }
-            typeIdMap.computeIfAbsent(type, k -> new ArrayList<>()).add(id);
         }
-        typeIdMap.entrySet().stream()
-            .filter(entry -> CollUtil.isNotEmpty(entry.getValue()))
-            .forEach(entry -> list.addAll(getUsersByType(entry.getKey(), entry.getValue())));
-        return list.stream().distinct().toList();
+        return typeIdMap.entrySet().stream()
+            .flatMap(entry -> this.getUsersByType(entry.getKey(), entry.getValue()).stream())
+            .distinct()
+            .toList();
     }
 
     /**
@@ -172,4 +223,41 @@ public class FlwTaskAssigneeServiceImpl implements IFlwTaskAssigneeService, Hand
         };
     }
 
+    /**
+     * 根据任务分配类型和对应 ID 列表,批量查询名称映射关系
+     *
+     * @param type 分配类型(用户、角色、部门、岗位)
+     * @param ids  ID 列表(如用户ID、角色ID等)
+     * @return 返回 Map,其中 key 为 ID,value 为对应的名称
+     */
+    private Map<Long, String> getNamesByType(TaskAssigneeEnum type, List<Long> ids) {
+        return switch (type) {
+            case USER -> userService.selectUserNamesByIds(ids);
+            case ROLE -> userService.selectRoleNamesByIds(ids);
+            case DEPT -> userService.selectDeptNamesByIds(ids);
+            case POST -> userService.selectPostNamesByIds(ids);
+        };
+    }
+
+    /**
+     * 解析 storageId 字符串,返回类型和ID的组合
+     *
+     * @param storageId 例如 "user:123" 或 "456"
+     * @return Pair(TaskAssigneeEnum, Long),如果格式非法返回 null
+     */
+    private Pair<TaskAssigneeEnum, Long> parseStorageId(String storageId) {
+        try {
+            String[] parts = storageId.split(StrUtil.COLON, 2);
+            if (parts.length < 2) {
+                return Pair.of(TaskAssigneeEnum.USER, Long.valueOf(parts[0]));
+            } else {
+                TaskAssigneeEnum type = TaskAssigneeEnum.fromCode(parts[0] + StrUtil.COLON);
+                return Pair.of(type, Long.valueOf(parts[1]));
+            }
+        } catch (Exception e) {
+            log.warn("解析 storageId 失败,格式非法:{},错误信息:{}", storageId, e.getMessage());
+            return null;
+        }
+    }
+
 }

+ 21 - 9
script/sql/oracle/oracle_ry_workflow.sql

@@ -1,3 +1,6 @@
+-- ----------------------------
+-- 0、warm-flow-all.sql,地址:https://gitee.com/dromara/warm-flow/blob/master/sql/oracle/oracle-wram-flow-all.sql
+-- ----------------------------
 create table FLOW_DEFINITION
 (
     ID              NUMBER(20)            not null,
@@ -18,7 +21,8 @@ create table FLOW_DEFINITION
     TENANT_ID       VARCHAR2(40)
 );
 
-alter table FLOW_DEFINITION add constraint PK_FLOW_DEFINITION primary key (ID);
+alter table FLOW_DEFINITION
+    add constraint PK_FLOW_DEFINITION primary key (ID);
 
 comment on table FLOW_DEFINITION is '流程定义表';
 comment on column FLOW_DEFINITION.ID is '主键id';
@@ -63,7 +67,8 @@ create table FLOW_NODE
     PERMISSION_FLAG VARCHAR2(200)
 );
 
-alter table FLOW_NODE add constraint PK_FLOW_NODE primary key (ID);
+alter table FLOW_NODE
+    add constraint PK_FLOW_NODE primary key (ID);
 
 comment on table FLOW_NODE is '流程节点表';
 comment on column FLOW_NODE.ID is '主键id';
@@ -106,7 +111,8 @@ create table FLOW_SKIP
     TENANT_ID      VARCHAR2(40)
 );
 
-alter table FLOW_SKIP add constraint PK_FLOW_SKIP primary key (ID);
+alter table FLOW_SKIP
+    add constraint PK_FLOW_SKIP primary key (ID);
 
 comment on table FLOW_SKIP is '节点跳转关联表';
 comment on column FLOW_SKIP.ID is '主键id';
@@ -144,7 +150,8 @@ create table FLOW_INSTANCE
     TENANT_ID       VARCHAR2(40)
 );
 
-alter table FLOW_INSTANCE add constraint PK_FLOW_INSTANCE primary key (ID);
+alter table FLOW_INSTANCE
+    add constraint PK_FLOW_INSTANCE primary key (ID);
 
 comment on table FLOW_INSTANCE is '流程实例表';
 comment on column FLOW_INSTANCE.ID is '主键id';
@@ -154,7 +161,7 @@ comment on column FLOW_INSTANCE.NODE_TYPE is '开始节点类型 (0开始节点
 comment on column FLOW_INSTANCE.NODE_CODE is '开始节点编码';
 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.FLOW_STATUS is '流程状态(0待提交 1审批中 2审批通过 4终止 5作废 6撤销 8已完成 9已退回 10失效 11拿回)';
 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 '创建者';
@@ -172,6 +179,7 @@ create table FLOW_TASK
     NODE_CODE     VARCHAR2(100),
     NODE_NAME     VARCHAR2(100),
     NODE_TYPE     NUMBER(1),
+    FLOW_STATUS      VARCHAR2(20),
     FORM_CUSTOM   VARCHAR2(1) default 'N',
     FORM_PATH     VARCHAR2(100),
     CREATE_TIME   DATE,
@@ -180,7 +188,8 @@ create table FLOW_TASK
     TENANT_ID     VARCHAR2(40)
 );
 
-alter table FLOW_TASK add constraint PK_FLOW_TASK primary key (ID);
+alter table FLOW_TASK
+    add constraint PK_FLOW_TASK primary key (ID);
 
 comment on table FLOW_TASK is '待办任务表';
 comment on column FLOW_TASK.ID is '主键id';
@@ -189,6 +198,7 @@ comment on column FLOW_TASK.INSTANCE_ID is '对应flow_instance表的id';
 comment on column FLOW_TASK.NODE_CODE is '节点编码';
 comment on column FLOW_TASK.NODE_NAME is '节点名称';
 comment on column FLOW_TASK.NODE_TYPE is '节点类型 (0开始节点 1中间节点 2结束节点 3互斥网关 4并行网关)';
+comment on column FLOW_TASK.FLOW_STATUS is '流程状态(0待提交 1审批中 2审批通过 4终止 5作废 6撤销 8已完成 9已退回 10失效 11拿回)';
 comment on column FLOW_TASK.FORM_CUSTOM is '审批表单是否自定义 (Y是 N否)';
 comment on column FLOW_TASK.FORM_PATH is '审批表单路径';
 comment on column FLOW_TASK.CREATE_TIME is '创建时间';
@@ -224,7 +234,8 @@ create table FLOW_HIS_TASK
 
 );
 
-alter table FLOW_HIS_TASK add constraint PK_FLOW_HIS_TASK primary key (ID);
+alter table FLOW_HIS_TASK
+    add constraint PK_FLOW_HIS_TASK primary key (ID);
 
 comment on table FLOW_HIS_TASK is '历史任务记录表';
 comment on column FLOW_HIS_TASK.ID is '主键id';
@@ -237,7 +248,7 @@ comment on column FLOW_HIS_TASK.NODE_TYPE is '开始节点类型 (0开始节点
 comment on column FLOW_HIS_TASK.TARGET_NODE_CODE is '目标节点编码';
 comment on column FLOW_HIS_TASK.TARGET_NODE_NAME is '目标节点名称';
 comment on column FLOW_HIS_TASK.SKIP_TYPE is '流转类型(PASS通过 REJECT退回 NONE无动作)';
-comment on column FLOW_HIS_TASK.FLOW_STATUS is '流程状态(1审批中 2 审批通过 9已退回 10失效)';
+comment on column FLOW_HIS_TASK.FLOW_STATUS is '流程状态(0待提交 1审批中 2审批通过 4终止 5作废 6撤销 8已完成 9已退回 10失效 11拿回)';
 comment on column FLOW_HIS_TASK.FORM_CUSTOM is '审批表单是否自定义 (Y是 N否)';
 comment on column FLOW_HIS_TASK.FORM_PATH is '审批表单路径';
 comment on column FLOW_HIS_TASK.MESSAGE is '审批意见';
@@ -264,7 +275,8 @@ create table FLOW_USER
     TENANT_ID    VARCHAR2(40)
 );
 
-alter table FLOW_USER add constraint PK_FLOW_USER primary key (ID);
+alter table FLOW_USER
+    add constraint PK_FLOW_USER primary key (ID);
 
 comment on table FLOW_USER is '待办任务表';
 comment on column FLOW_USER.ID is '主键id';

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

@@ -154,7 +154,7 @@ COMMENT ON COLUMN flow_instance.node_type IS '节点类型(0开始节点 1中
 COMMENT ON COLUMN flow_instance.node_code IS '流程节点编码';
 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.flow_status IS '流程状态(0待提交 1审批中 2审批通过 4终止 5作废 6撤销 8已完成 9已退回 10失效 11拿回)';
 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 '创建者';
@@ -172,6 +172,7 @@ CREATE TABLE flow_task
     node_code     varchar(100) NOT NULL,                             -- 节点编码
     node_name     varchar(100) NULL,                                 -- 节点名称
     node_type     int2         NOT NULL,                             -- 节点类型(0开始节点 1中间节点 2结束节点 3互斥网关 4并行网关)
+    flow_status      varchar(20)  NOT NULL,                                 -- 流程状态(0待提交 1审批中 2 审批通过 8已完成 9已退回 10失效)
     form_custom   bpchar(1)    NULL DEFAULT 'N':: character varying, -- 审批表单是否自定义(Y是 N否)
     form_path     varchar(100) NULL,                                 -- 审批表单路径
     create_time   timestamp    NULL,                                 -- 创建时间
@@ -188,6 +189,7 @@ COMMENT ON COLUMN flow_task.instance_id IS '对应flow_instance表的id';
 COMMENT ON COLUMN flow_task.node_code IS '节点编码';
 COMMENT ON COLUMN flow_task.node_name IS '节点名称';
 COMMENT ON COLUMN flow_task.node_type IS '节点类型(0开始节点 1中间节点 2结束节点 3互斥网关 4并行网关)';
+COMMENT ON COLUMN flow_task.flow_status IS '流程状态(0待提交 1审批中 2审批通过 4终止 5作废 6撤销 8已完成 9已退回 10失效 11拿回)';
 COMMENT ON COLUMN flow_task.form_custom IS '审批表单是否自定义(Y是 N否)';
 COMMENT ON COLUMN flow_task.form_path IS '审批表单路径';
 COMMENT ON COLUMN flow_task.create_time IS '创建时间';
@@ -201,8 +203,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(200) NULL,                                     -- 开始节点编码
-    node_name        varchar(200) NULL,                                     -- 开始节点名称
+    node_code        varchar(100) NULL,                                     -- 开始节点编码
+    node_name        varchar(100) NULL,                                     -- 开始节点名称
     node_type        int2         NULL,                                     -- 开始节点类型(0开始节点 1中间节点 2结束节点 3互斥网关 4并行网关)
     target_node_code varchar(200) NULL,                                     -- 目标节点编码
     target_node_name varchar(200) NULL,                                     -- 结束节点名称
@@ -237,7 +239,7 @@ COMMENT ON COLUMN flow_his_task.approver IS '审批者';
 COMMENT ON COLUMN flow_his_task.cooperate_type IS '协作方式(1审批 2转办 3委派 4会签 5票签 6加签 7减签)';
 COMMENT ON COLUMN flow_his_task.collaborator IS '协作人';
 COMMENT ON COLUMN flow_his_task.skip_type IS '流转类型(PASS通过 REJECT退回 NONE无动作)';
-COMMENT ON COLUMN flow_his_task.flow_status IS '流程状态(1审批中 2 审批通过 9已退回 10失效)';
+COMMENT ON COLUMN flow_his_task.flow_status IS '流程状态(0待提交 1审批中 2审批通过 4终止 5作废 6撤销 8已完成 9已退回 10失效 11拿回)';
 COMMENT ON COLUMN flow_his_task.form_custom IS '审批表单是否自定义(Y是 N否)';
 COMMENT ON COLUMN flow_his_task.form_path IS '审批表单路径';
 COMMENT ON COLUMN flow_his_task.message IS '审批意见';

+ 7 - 6
script/sql/ry_workflow.sql

@@ -3,7 +3,7 @@
 -- ----------------------------
 CREATE TABLE `flow_definition`
 (
-    `id`              bigint unsigned NOT NULL COMMENT '主键id',
+    `id`              bigint          NOT NULL COMMENT '主键id',
     `flow_code`       varchar(40)     NOT NULL COMMENT '流程编码',
     `flow_name`       varchar(100)    NOT NULL COMMENT '流程名称',
     `category`        varchar(100)             DEFAULT NULL COMMENT '流程类别',
@@ -50,7 +50,7 @@ CREATE TABLE `flow_node`
 
 CREATE TABLE `flow_skip`
 (
-    `id`             bigint unsigned NOT NULL COMMENT '主键id',
+    `id`             bigint       NOT NULL COMMENT '主键id',
     `definition_id`  bigint          NOT NULL COMMENT '流程定义id',
     `now_node_code`  varchar(100)    NOT NULL COMMENT '当前流程节点的编码',
     `now_node_type`  tinyint(1)   DEFAULT NULL COMMENT '当前节点类型(0开始节点 1中间节点 2结束节点 3互斥网关 4并行网关)',
@@ -76,7 +76,7 @@ CREATE TABLE `flow_instance`
     `node_code`       varchar(40) NOT NULL COMMENT '流程节点编码',
     `node_name`       varchar(100)         DEFAULT NULL COMMENT '流程节点名称',
     `variable`        text COMMENT '任务变量',
-    `flow_status`     varchar(20) NOT NULL COMMENT '流程状态(0待提交 1审批中 2 审批通过 3自动通过 4终止 5作废 6撤销 7取回  8已完成 9已退回 10失效)',
+    `flow_status`     varchar(20) NOT NULL COMMENT '流程状态(0待提交 1审批中 2审批通过 4终止 5作废 6撤销 8已完成 9已退回 10失效 11拿回)',
     `activity_status` tinyint(1)  NOT NULL DEFAULT '1' COMMENT '流程激活状态(0挂起 1激活)',
     `def_json`        text COMMENT '流程定义json',
     `create_by`       varchar(64)          DEFAULT '' COMMENT '创建者',
@@ -96,6 +96,7 @@ CREATE TABLE `flow_task`
     `node_code`     varchar(100) NOT NULL COMMENT '节点编码',
     `node_name`     varchar(100) DEFAULT NULL COMMENT '节点名称',
     `node_type`     tinyint(1)   NOT NULL COMMENT '节点类型(0开始节点 1中间节点 2结束节点 3互斥网关 4并行网关)',
+    `flow_status`   varchar(20)  NOT NULL COMMENT '流程状态(0待提交 1审批中 2审批通过 4终止 5作废 6撤销 8已完成 9已退回 10失效 11拿回)',
     `form_custom`   char(1)      DEFAULT 'N' COMMENT '审批表单是否自定义(Y是 N否)',
     `form_path`     varchar(100) DEFAULT NULL COMMENT '审批表单路径',
     `create_time`   datetime     DEFAULT NULL COMMENT '创建时间',
@@ -107,7 +108,7 @@ CREATE TABLE `flow_task`
 
 CREATE TABLE `flow_his_task`
 (
-    `id`               bigint(20) unsigned NOT NULL COMMENT '主键id',
+    `id`               bigint(20)          NOT NULL COMMENT '主键id',
     `definition_id`    bigint(20)          NOT NULL COMMENT '对应flow_definition表的id',
     `instance_id`      bigint(20)          NOT NULL COMMENT '对应flow_instance表的id',
     `task_id`          bigint(20)          NOT NULL COMMENT '对应flow_task表的id',
@@ -120,7 +121,7 @@ CREATE TABLE `flow_his_task`
     `cooperate_type`   tinyint(1)          NOT NULL DEFAULT '0' COMMENT '协作方式(1审批 2转办 3委派 4会签 5票签 6加签 7减签)',
     `collaborator`     varchar(40)                  DEFAULT NULL COMMENT '协作人',
     `skip_type`        varchar(10)         NOT NULL COMMENT '流转类型(PASS通过 REJECT退回 NONE无动作)',
-    `flow_status`      varchar(20)         NOT NULL COMMENT '流程状态(1审批中 2 审批通过 9已退回 10失效)',
+    `flow_status`      varchar(20)         NOT NULL COMMENT '流程状态(0待提交 1审批中 2审批通过 4终止 5作废 6撤销 8已完成 9已退回 10失效 11拿回)',
     `form_custom`      char(1)                      DEFAULT 'N' COMMENT '审批表单是否自定义(Y是 N否)',
     `form_path`        varchar(100)                 DEFAULT NULL COMMENT '审批表单路径',
     `message`          varchar(500)                 DEFAULT NULL COMMENT '审批意见',
@@ -136,7 +137,7 @@ CREATE TABLE `flow_his_task`
 
 CREATE TABLE `flow_user`
 (
-    `id`           bigint unsigned NOT NULL COMMENT '主键id',
+    `id`           bigint      NOT NULL COMMENT '主键id',
     `type`         char(1)         NOT NULL COMMENT '人员类型(1待办任务的审批人权限 2待办任务的转办人权限 3待办任务的委托人权限)',
     `processed_by` varchar(80) DEFAULT NULL COMMENT '权限人',
     `associated`   bigint          NOT NULL COMMENT '任务表id',

+ 13 - 2
script/sql/sqlserver/sqlserver_ry_workflow.sql

@@ -1,3 +1,6 @@
+-- ----------------------------
+-- 0、warm-flow-all.sql,地址:https://gitee.com/dromara/warm-flow/blob/master/sql/sqlserver/sqlserver.sql
+-- ----------------------------
 CREATE TABLE flow_definition (
     id bigint NOT NULL,
     flow_code nvarchar(40) NOT NULL,
@@ -523,7 +526,7 @@ EXEC sp_addextendedproperty
 GO
 
 EXEC sp_addextendedproperty
-'MS_Description', N'流程状态(0待提交 1审批中 2 审批通过 3自动通过 4终止 5作废 6撤销 7取回  8已完成 9已退回 10失效)',
+'MS_Description', N'流程状态(0待提交 1审批中 2审批通过 4终止 5作废 6撤销 8已完成 9已退回 10失效 11拿回)',
 'SCHEMA', N'dbo',
 'TABLE', N'flow_instance',
 'COLUMN', N'flow_status'
@@ -598,6 +601,7 @@ CREATE TABLE flow_task (
     node_code nvarchar(100) NOT NULL,
     node_name nvarchar(100) NULL,
     node_type tinyint NOT NULL,
+    flow_status nvarchar(20) NOT NULL,
     form_custom nchar(1) DEFAULT('N') NULL,
     form_path nvarchar(100) NULL,
     create_time datetime2(7)  NULL,
@@ -653,6 +657,13 @@ EXEC sp_addextendedproperty
 'COLUMN', N'node_type'
 GO
 
+EXEC sp_addextendedproperty
+'MS_Description', N'流程状态(0待提交 1审批中 2审批通过 4终止 5作废 6撤销 8已完成 9已退回 10失效 11拿回)',
+'SCHEMA', N'dbo',
+'TABLE', N'flow_task',
+'COLUMN', N'flow_status'
+GO
+
 EXEC sp_addextendedproperty
 'MS_Description', N'审批表单是否自定义(Y是 N否)',
 'SCHEMA', N'dbo',
@@ -824,7 +835,7 @@ EXEC sp_addextendedproperty
 GO
 
 EXEC sp_addextendedproperty
-'MS_Description', N'流程状态(1审批中 2 审批通过 9已退回 10失效)',
+'MS_Description', N'流程状态(0待提交 1审批中 2审批通过 4终止 5作废 6撤销 8已完成 9已退回 10失效 11拿回)',
 'SCHEMA', N'dbo',
 'TABLE', N'flow_his_task',
 'COLUMN', N'flow_status'

+ 8 - 0
script/sql/update/update_5.3.1-5.3.2.sql

@@ -0,0 +1,8 @@
+ALTER TABLE `flow_task`
+    ADD COLUMN `flow_status` varchar(20) NOT NULL COMMENT '流程状态(0待提交 1审批中 2审批通过 4终止 5作废 6撤销 8已完成 9已退回 10失效 11拿回)' AFTER `node_type`;
+
+ALTER TABLE `flow_instance`
+    MODIFY COLUMN `flow_status` varchar(20) NOT NULL COMMENT '流程状态(0待提交 1审批中 2审批通过 4终止 5作废 6撤销 8已完成 9已退回 10失效 11拿回)' AFTER `variable`;
+
+ALTER TABLE `flow_his_task`
+    MODIFY COLUMN `flow_status` varchar(20) NOT NULL COMMENT '流程状态(0待提交 1审批中 2审批通过 4终止 5作废 6撤销 8已完成 9已退回 10失效 11拿回)' AFTER `skip_type`