startWorkFlow(StartProcessDTO startProcess);
+
+ /**
+ * 办理任务
+ *
+ * @param completeTask 参数
+ * @return 结果
+ */
+ boolean completeTask(CompleteTaskDTO completeTask);
}
diff --git a/ruoyi-common/ruoyi-common-satoken/src/main/java/org/dromara/common/satoken/utils/LoginHelper.java b/ruoyi-common/ruoyi-common-satoken/src/main/java/org/dromara/common/satoken/utils/LoginHelper.java
index 19557e131..e2c92366f 100644
--- a/ruoyi-common/ruoyi-common-satoken/src/main/java/org/dromara/common/satoken/utils/LoginHelper.java
+++ b/ruoyi-common/ruoyi-common-satoken/src/main/java/org/dromara/common/satoken/utils/LoginHelper.java
@@ -15,6 +15,7 @@ import org.dromara.common.core.enums.UserType;
import java.util.Set;
+
/**
* 登录鉴权助手
*
diff --git a/ruoyi-modules/ruoyi-generator/src/main/java/org/dromara/generator/service/GenTableServiceImpl.java b/ruoyi-modules/ruoyi-generator/src/main/java/org/dromara/generator/service/GenTableServiceImpl.java
index 37299804a..6b9e60617 100644
--- a/ruoyi-modules/ruoyi-generator/src/main/java/org/dromara/generator/service/GenTableServiceImpl.java
+++ b/ruoyi-modules/ruoyi-generator/src/main/java/org/dromara/generator/service/GenTableServiceImpl.java
@@ -63,7 +63,7 @@ public class GenTableServiceImpl implements IGenTableService {
private final GenTableColumnMapper genTableColumnMapper;
private final IdentifierGenerator identifierGenerator;
- private static final String[] TABLE_IGNORE = new String[]{"sj_", "act_", "flw_", "gen_"};
+ private static final String[] TABLE_IGNORE = new String[]{"sj_", "flow_", "gen_"};
/**
* 查询业务字段列表
diff --git a/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/system/mapper/SysDeptMapper.java b/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/system/mapper/SysDeptMapper.java
index 0f2c90667..b69624cf0 100644
--- a/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/system/mapper/SysDeptMapper.java
+++ b/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/system/mapper/SysDeptMapper.java
@@ -3,6 +3,7 @@ package org.dromara.system.mapper;
import com.baomidou.mybatisplus.core.conditions.Wrapper;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.baomidou.mybatisplus.core.toolkit.Constants;
+import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import org.apache.ibatis.annotations.Param;
import org.dromara.common.mybatis.annotation.DataColumn;
import org.dromara.common.mybatis.annotation.DataPermission;
@@ -31,6 +32,17 @@ public interface SysDeptMapper extends BaseMapperPlus {
})
List selectDeptList(@Param(Constants.WRAPPER) Wrapper queryWrapper);
+ /**
+ * 分页查询部门管理数据
+ *
+ * @param queryWrapper 查询条件
+ * @return 部门信息集合
+ */
+ @DataPermission({
+ @DataColumn(key = "deptName", value = "dept_id"),
+ })
+ Page selectPageDeptList(@Param("page") Page page, @Param(Constants.WRAPPER) Wrapper queryWrapper);
+
/**
* 统计指定部门ID的部门数量
*
diff --git a/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/system/service/impl/SysPostServiceImpl.java b/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/system/service/impl/SysPostServiceImpl.java
index 72f1a5e31..5888985a7 100644
--- a/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/system/service/impl/SysPostServiceImpl.java
+++ b/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/system/service/impl/SysPostServiceImpl.java
@@ -245,4 +245,5 @@ public class SysPostServiceImpl implements ISysPostService, PostService {
SysPost post = MapstructUtils.convert(bo, SysPost.class);
return baseMapper.updateById(post);
}
+
}
diff --git a/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/system/service/impl/SysRoleServiceImpl.java b/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/system/service/impl/SysRoleServiceImpl.java
index 4c007358e..0a2e485f6 100644
--- a/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/system/service/impl/SysRoleServiceImpl.java
+++ b/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/system/service/impl/SysRoleServiceImpl.java
@@ -548,4 +548,5 @@ public class SysRoleServiceImpl implements ISysRoleService, RoleService {
}
});
}
+
}
diff --git a/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/system/service/impl/SysTaskAssigneeServiceImpl.java b/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/system/service/impl/SysTaskAssigneeServiceImpl.java
new file mode 100644
index 000000000..23dd0520c
--- /dev/null
+++ b/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/system/service/impl/SysTaskAssigneeServiceImpl.java
@@ -0,0 +1,168 @@
+package org.dromara.system.service.impl;
+
+import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
+import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
+import com.baomidou.mybatisplus.core.toolkit.Wrappers;
+import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
+import lombok.RequiredArgsConstructor;
+import org.dromara.common.core.constant.SystemConstants;
+import org.dromara.common.core.domain.dto.TaskAssigneeDTO;
+import org.dromara.common.core.domain.model.TaskAssigneeBody;
+import org.dromara.common.core.service.TaskAssigneeService;
+import org.dromara.common.core.utils.StreamUtils;
+import org.dromara.common.core.utils.StringUtils;
+import org.dromara.common.mybatis.core.page.PageQuery;
+import org.dromara.system.domain.SysDept;
+import org.dromara.system.domain.SysPost;
+import org.dromara.system.domain.SysRole;
+import org.dromara.system.domain.SysUser;
+import org.dromara.system.domain.vo.SysDeptVo;
+import org.dromara.system.domain.vo.SysPostVo;
+import org.dromara.system.domain.vo.SysRoleVo;
+import org.dromara.system.domain.vo.SysUserVo;
+import org.dromara.system.mapper.SysDeptMapper;
+import org.dromara.system.mapper.SysPostMapper;
+import org.dromara.system.mapper.SysRoleMapper;
+import org.dromara.system.mapper.SysUserMapper;
+import org.springframework.stereotype.Service;
+
+import java.util.List;
+
+/**
+ * 工作流设计器获取任务执行人
+ *
+ * @author Lion Li
+ */
+@RequiredArgsConstructor
+@Service
+public class SysTaskAssigneeServiceImpl implements TaskAssigneeService {
+
+ private final SysPostMapper postMapper;
+ private final SysDeptMapper deptMapper;
+ private final SysUserMapper userMapper;
+ private final SysRoleMapper roleMapper;
+
+ /**
+ * 查询角色并返回任务指派的列表,支持分页
+ *
+ * @param taskQuery 查询条件
+ * @return 办理人
+ */
+ @Override
+ public TaskAssigneeDTO selectRolesByTaskAssigneeList(TaskAssigneeBody taskQuery) {
+ PageQuery pageQuery = new PageQuery(taskQuery.getPageSize(), taskQuery.getPageNum());
+ QueryWrapper wrapper = Wrappers.query();
+ wrapper.eq("r.del_flag", SystemConstants.NORMAL)
+ .like(StringUtils.isNotBlank(taskQuery.getHandlerCode()), "r.role_name", taskQuery.getHandlerCode())
+ .like(StringUtils.isNotBlank(taskQuery.getHandlerName()), "r.role_key", taskQuery.getHandlerName())
+ .between(StringUtils.isNotBlank(taskQuery.getBeginTime()) && StringUtils.isNotBlank(taskQuery.getEndTime()),
+ "r.create_time", taskQuery.getBeginTime(), taskQuery.getEndTime())
+ .orderByAsc("r.role_sort").orderByAsc("r.create_time");
+ Page page = roleMapper.selectPageRoleList(pageQuery.build(), wrapper);
+ // 使用封装的字段映射方法进行转换
+ List handlers = TaskAssigneeDTO.convertToHandlerList(page.getRecords(),
+ SysRoleVo::getRoleId, SysRoleVo::getRoleKey, SysRoleVo::getRoleName, null, SysRoleVo::getCreateTime);
+ return new TaskAssigneeDTO(page.getTotal(), handlers);
+ }
+
+ /**
+ * 查询岗位并返回任务指派的列表,支持分页
+ *
+ * @param taskQuery 查询条件
+ * @return 办理人
+ */
+ @Override
+ public TaskAssigneeDTO selectPostsByTaskAssigneeList(TaskAssigneeBody taskQuery) {
+ PageQuery pageQuery = new PageQuery(taskQuery.getPageSize(), taskQuery.getPageNum());
+ LambdaQueryWrapper wrapper = Wrappers.lambdaQuery()
+ .like(StringUtils.isNotBlank(taskQuery.getHandlerCode()), SysPost::getPostCategory, taskQuery.getHandlerCode())
+ .like(StringUtils.isNotBlank(taskQuery.getHandlerName()), SysPost::getPostName, taskQuery.getHandlerName())
+ .between(StringUtils.isNotBlank(taskQuery.getBeginTime()) && StringUtils.isNotBlank(taskQuery.getEndTime()),
+ SysPost::getCreateTime, taskQuery.getBeginTime(), taskQuery.getEndTime());
+ if (StringUtils.isNotBlank(taskQuery.getGroupId())) {
+ Long belongDeptId = Long.valueOf(taskQuery.getGroupId());
+ wrapper.and(x -> {
+ List deptList = deptMapper.selectListByParentId(belongDeptId);
+ List deptIds = StreamUtils.toList(deptList, SysDept::getDeptId);
+ deptIds.add(belongDeptId);
+ x.in(SysPost::getDeptId, deptIds);
+ });
+ }
+ Page page = postMapper.selectPagePostList(pageQuery.build(), wrapper);
+ // 使用封装的字段映射方法进行转换
+ List handlers = TaskAssigneeDTO.convertToHandlerList(page.getRecords(),
+ SysPostVo::getPostId, SysPostVo::getPostCategory, SysPostVo::getPostName, SysPostVo::getDeptId, SysPostVo::getCreateTime);
+ return new TaskAssigneeDTO(page.getTotal(), handlers);
+ }
+
+ /**
+ * 查询部门并返回任务指派的列表,支持分页
+ *
+ * @param taskQuery 查询条件
+ * @return 办理人
+ */
+ @Override
+ public TaskAssigneeDTO selectDeptsByTaskAssigneeList(TaskAssigneeBody taskQuery) {
+ PageQuery pageQuery = new PageQuery(taskQuery.getPageSize(), taskQuery.getPageNum());
+ LambdaQueryWrapper wrapper = Wrappers.lambdaQuery()
+ .eq(SysDept::getDelFlag, SystemConstants.NORMAL)
+ .like(StringUtils.isNotBlank(taskQuery.getHandlerCode()), SysDept::getDeptCategory, taskQuery.getHandlerCode())
+ .like(StringUtils.isNotBlank(taskQuery.getHandlerName()), SysDept::getDeptName, taskQuery.getHandlerName())
+ .between(StringUtils.isNotBlank(taskQuery.getBeginTime()) && StringUtils.isNotBlank(taskQuery.getEndTime()),
+ SysDept::getCreateTime, taskQuery.getBeginTime(), taskQuery.getEndTime())
+ .orderByAsc(SysDept::getAncestors)
+ .orderByAsc(SysDept::getParentId)
+ .orderByAsc(SysDept::getOrderNum)
+ .orderByAsc(SysDept::getDeptId);
+ if (StringUtils.isNotBlank(taskQuery.getGroupId())) {
+ //部门树搜索
+ wrapper.and(x -> {
+ Long parentId = Long.valueOf(taskQuery.getGroupId());
+ List deptList = deptMapper.selectListByParentId(parentId);
+ List deptIds = StreamUtils.toList(deptList, SysDept::getDeptId);
+ deptIds.add(parentId);
+ x.in(SysDept::getDeptId, deptIds);
+ });
+ }
+ Page page = deptMapper.selectPageDeptList(pageQuery.build(), wrapper);
+ // 使用封装的字段映射方法进行转换
+ List handlers = TaskAssigneeDTO.convertToHandlerList(page.getRecords(),
+ SysDeptVo::getDeptId, SysDeptVo::getDeptCategory, SysDeptVo::getDeptName, SysDeptVo::getParentId, SysDeptVo::getCreateTime);
+ return new TaskAssigneeDTO(page.getTotal(), handlers);
+ }
+
+
+ /**
+ * 查询用户并返回任务指派的列表,支持分页
+ *
+ * @param taskQuery 查询条件
+ * @return 办理人
+ */
+ @Override
+ public TaskAssigneeDTO selectUsersByTaskAssigneeList(TaskAssigneeBody taskQuery) {
+ PageQuery pageQuery = new PageQuery(taskQuery.getPageSize(), taskQuery.getPageNum());
+ QueryWrapper wrapper = Wrappers.query();
+ wrapper.eq("u.del_flag", SystemConstants.NORMAL)
+ .like(StringUtils.isNotBlank(taskQuery.getHandlerCode()), "u.user_name", taskQuery.getHandlerCode())
+ .like(StringUtils.isNotBlank(taskQuery.getHandlerName()), "u.nick_name", taskQuery.getHandlerName())
+ .between(taskQuery.getBeginTime() != null && taskQuery.getEndTime() != null,
+ "u.create_time", taskQuery.getBeginTime(), taskQuery.getEndTime())
+ .orderByAsc("u.user_id");
+ if (StringUtils.isNotBlank(taskQuery.getGroupId())) {
+ //部门树搜索
+ wrapper.and(x -> {
+ Long parentId = Long.valueOf(taskQuery.getGroupId());
+ List deptList = deptMapper.selectListByParentId(parentId);
+ List deptIds = StreamUtils.toList(deptList, SysDept::getDeptId);
+ deptIds.add(parentId);
+ x.in("u.dept_id", deptIds);
+ });
+ }
+ Page page = userMapper.selectPageUserList(pageQuery.build(), wrapper);
+ // 使用封装的字段映射方法进行转换
+ List handlers = TaskAssigneeDTO.convertToHandlerList(page.getRecords(),
+ SysUserVo::getUserId, SysUserVo::getUserName, SysUserVo::getNickName, SysUserVo::getDeptId, SysUserVo::getCreateTime);
+ return new TaskAssigneeDTO(page.getTotal(), handlers);
+ }
+
+}
diff --git a/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/system/service/impl/SysTenantServiceImpl.java b/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/system/service/impl/SysTenantServiceImpl.java
index 7bfe989b9..856dabba5 100644
--- a/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/system/service/impl/SysTenantServiceImpl.java
+++ b/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/system/service/impl/SysTenantServiceImpl.java
@@ -15,6 +15,7 @@ import org.dromara.common.core.constant.Constants;
import org.dromara.common.core.constant.SystemConstants;
import org.dromara.common.core.constant.TenantConstants;
import org.dromara.common.core.exception.ServiceException;
+import org.dromara.common.core.service.WorkflowService;
import org.dromara.common.core.utils.MapstructUtils;
import org.dromara.common.core.utils.SpringUtils;
import org.dromara.common.core.utils.StreamUtils;
@@ -56,6 +57,7 @@ public class SysTenantServiceImpl implements ISysTenantService {
private final SysDictTypeMapper dictTypeMapper;
private final SysDictDataMapper dictDataMapper;
private final SysConfigMapper configMapper;
+ private final WorkflowService workflowService;
/**
* 查询租户
@@ -121,7 +123,9 @@ public class SysTenantServiceImpl implements ISysTenantService {
// 获取所有租户编号
List tenantIds = baseMapper.selectObjs(
- new LambdaQueryWrapper().select(SysTenant::getTenantId), x -> {return Convert.toStr(x);});
+ new LambdaQueryWrapper().select(SysTenant::getTenantId), x -> {
+ return Convert.toStr(x);
+ });
String tenantId = generateTenantId(tenantIds);
add.setTenantId(tenantId);
boolean flag = baseMapper.insert(add) > 0;
@@ -191,6 +195,8 @@ public class SysTenantServiceImpl implements ISysTenantService {
config.setTenantId(tenantId);
}
configMapper.insertBatch(sysConfigList);
+ //新增租户流程定义
+ workflowService.syncDef(tenantId);
return true;
}
@@ -399,7 +405,9 @@ public class SysTenantServiceImpl implements ISysTenantService {
// 获取所有租户编号
List tenantIds = baseMapper.selectObjs(
new LambdaQueryWrapper().select(SysTenant::getTenantId)
- .eq(SysTenant::getStatus, SystemConstants.NORMAL), x -> {return Convert.toStr(x);});
+ .eq(SysTenant::getStatus, SystemConstants.NORMAL), x -> {
+ return Convert.toStr(x);
+ });
List saveTypeList = new ArrayList<>();
List saveDataList = new ArrayList<>();
Set set = new HashSet<>();
diff --git a/ruoyi-modules/ruoyi-system/src/main/resources/mapper/system/SysDeptMapper.xml b/ruoyi-modules/ruoyi-system/src/main/resources/mapper/system/SysDeptMapper.xml
index 6ad866f29..9057a0e22 100644
--- a/ruoyi-modules/ruoyi-system/src/main/resources/mapper/system/SysDeptMapper.xml
+++ b/ruoyi-modules/ruoyi-system/src/main/resources/mapper/system/SysDeptMapper.xml
@@ -18,6 +18,17 @@
from sys_dept ${ew.getCustomSqlSegment}
+
+
diff --git a/ruoyi-modules/ruoyi-workflow/pom.xml b/ruoyi-modules/ruoyi-workflow/pom.xml
index e55839ef7..d195fafa3 100644
--- a/ruoyi-modules/ruoyi-workflow/pom.xml
+++ b/ruoyi-modules/ruoyi-workflow/pom.xml
@@ -18,57 +18,14 @@
-
- org.flowable
- flowable-spring-boot-autoconfigure
-
-
- org.flowable
- flowable-spring-security
-
-
-
-
-
- org.flowable
- flowable-spring-configurator
-
-
-
- org.flowable
- flowable-spring-boot-starter-actuator
-
-
-
-
- org.flowable
- flowable-image-generator
-
-
-
-
- org.flowable
- flowable-json-converter
- 6.8.0
-
-
-
-
- org.apache.xmlgraphics
- batik-all
- 1.17
-
-
- xalan
- xalan
-
-
+ org.dromara
+ ruoyi-common-sse
org.dromara
- ruoyi-common-websocket
+ ruoyi-common-doc
@@ -113,6 +70,14 @@
org.dromara
ruoyi-common-security
+
+ org.dromara.warm
+ warm-flow-mybatis-plus-sb3-starter
+
+
+ org.dromara.warm
+ warm-flow-plugin-ui-sb-web
+
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 c3fcafa87..1b10eb8ea 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
@@ -8,83 +8,6 @@ package org.dromara.workflow.common.constant;
*/
public interface FlowConstant {
- String MESSAGE_CURRENT_TASK_IS_NULL = "当前任务不存在或你不是任务办理人!";
-
- String MESSAGE_SUSPENDED = "当前任务已挂起不可审批!";
-
- /**
- * 连线
- */
- String SEQUENCE_FLOW = "sequenceFlow";
-
- /**
- * 并行网关
- */
- String PARALLEL_GATEWAY = "parallelGateway";
-
- /**
- * 排它网关
- */
- String EXCLUSIVE_GATEWAY = "exclusiveGateway";
-
- /**
- * 包含网关
- */
- String INCLUSIVE_GATEWAY = "inclusiveGateway";
-
- /**
- * 结束节点
- */
- String END_EVENT = "endEvent";
-
-
- /**
- * 流程委派标识
- */
- String PENDING = "PENDING";
-
- /**
- * 候选人标识
- */
- String CANDIDATE = "candidate";
-
- /**
- * 会签任务总数
- */
- String NUMBER_OF_INSTANCES = "nrOfInstances";
-
- /**
- * 正在执行的会签总数
- */
- String NUMBER_OF_ACTIVE_INSTANCES = "nrOfActiveInstances";
-
- /**
- * 已完成的会签任务总数
- */
- String NUMBER_OF_COMPLETED_INSTANCES = "nrOfCompletedInstances";
-
- /**
- * 循环的索引值,可以使用elementIndexVariable属性修改loopCounter的变量名
- */
- String LOOP_COUNTER = "loopCounter";
-
- String ZIP = "ZIP";
-
- /**
- * 业务与流程实例关联对象
- */
- String BUSINESS_INSTANCE_DTO = "businessInstanceDTO";
-
- /**
- * 流程定义配置
- */
- String WF_DEFINITION_CONFIG_VO = "wfDefinitionConfigVo";
-
- /**
- * 节点配置
- */
- String WF_NODE_CONFIG_VO = "wfNodeConfigVo";
-
/**
* 流程发起人
*/
@@ -98,40 +21,46 @@ public interface FlowConstant {
/**
* 业务id
*/
- String BUSINESS_KEY = "businessKey";
+ String BUSINESS_ID = "businessId";
/**
- * 流程定义id
+ * 任务id
*/
- String PROCESS_DEFINITION_ID = "processDefinitionId";
+ String TASK_ID = "taskId";
/**
- * 开启跳过表达式变量
+ * 委托
*/
- String FLOWABLE_SKIP_EXPRESSION_ENABLED = "_FLOWABLE_SKIP_EXPRESSION_ENABLED";
+ String DELEGATE_TASK = "delegateTask";
/**
- * 模型标识key命名规范正则表达式
+ * 转办
*/
- String MODEL_KEY_PATTERN = "^[a-zA-Z][a-zA-Z0-9_]{0,254}$";
+ String TRANSFER_TASK = "transferTask";
/**
- * 用户任务
+ * 加签
*/
- String USER_TASK = "userTask";
+ String ADD_SIGNATURE = "addSignature";
/**
- * 会签
+ * 减签
*/
- String MULTI_INSTANCE = "multiInstance";
+ String REDUCTION_SIGNATURE = "reductionSignature";
/**
- * 是
+ * 流程分类Id转名称
*/
- String TRUE = "0";
+ String CATEGORY_ID_TO_NAME = "category_id_to_name";
/**
- * 否
+ * 流程分类名称
*/
- String FALSE = "1";
+ String FLOW_CATEGORY_NAME = "flow_category_name#30d";
+
+ /**
+ * 默认租户OA申请分类id
+ */
+ Long FLOW_CATEGORY_ID = 100L;
+
}
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
deleted file mode 100644
index 083ab7b85..000000000
--- a/ruoyi-modules/ruoyi-workflow/src/main/java/org/dromara/workflow/common/enums/FormTypeEnum.java
+++ /dev/null
@@ -1,54 +0,0 @@
-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/common/enums/MessageTypeEnum.java b/ruoyi-modules/ruoyi-workflow/src/main/java/org/dromara/workflow/common/enums/MessageTypeEnum.java
index a28295822..0fe5cfe90 100644
--- a/ruoyi-modules/ruoyi-workflow/src/main/java/org/dromara/workflow/common/enums/MessageTypeEnum.java
+++ b/ruoyi-modules/ruoyi-workflow/src/main/java/org/dromara/workflow/common/enums/MessageTypeEnum.java
@@ -3,8 +3,10 @@ package org.dromara.workflow.common.enums;
import lombok.AllArgsConstructor;
import lombok.Getter;
+import java.util.Arrays;
import java.util.Map;
-import java.util.concurrent.ConcurrentHashMap;
+import java.util.function.Function;
+import java.util.stream.Collectors;
/**
* 消息类型枚举
@@ -14,14 +16,17 @@ import java.util.concurrent.ConcurrentHashMap;
@Getter
@AllArgsConstructor
public enum MessageTypeEnum {
+
/**
* 站内信
*/
SYSTEM_MESSAGE("1", "站内信"),
+
/**
* 邮箱
*/
EMAIL_MESSAGE("2", "邮箱"),
+
/**
* 短信
*/
@@ -31,21 +36,18 @@ public enum MessageTypeEnum {
private final String desc;
- private final static Map MESSAGE_TYPE_ENUM_MAP = new ConcurrentHashMap<>(MessageTypeEnum.values().length);
-
- static {
- for (MessageTypeEnum messageType : MessageTypeEnum.values()) {
- MESSAGE_TYPE_ENUM_MAP.put(messageType.code, messageType);
- }
- }
+ private static final Map MESSAGE_TYPE_ENUM_MAP = Arrays.stream(values())
+ .collect(Collectors.toConcurrentMap(MessageTypeEnum::getCode, Function.identity()));
/**
* 根据消息类型 code 获取 MessageTypeEnum
+ *
* @param code 消息类型code
* @return MessageTypeEnum
*/
public static MessageTypeEnum getByCode(String code) {
- return MESSAGE_TYPE_ENUM_MAP.get(code);
+ return MESSAGE_TYPE_ENUM_MAP.getOrDefault(code, null);
}
+
}
diff --git a/ruoyi-modules/ruoyi-workflow/src/main/java/org/dromara/workflow/common/enums/TaskAssigneeEnum.java b/ruoyi-modules/ruoyi-workflow/src/main/java/org/dromara/workflow/common/enums/TaskAssigneeEnum.java
new file mode 100644
index 000000000..60be92fe9
--- /dev/null
+++ b/ruoyi-modules/ruoyi-workflow/src/main/java/org/dromara/workflow/common/enums/TaskAssigneeEnum.java
@@ -0,0 +1,109 @@
+package org.dromara.workflow.common.enums;
+
+import lombok.AllArgsConstructor;
+import lombok.Getter;
+import org.dromara.common.core.exception.ServiceException;
+
+import java.util.Arrays;
+import java.util.List;
+import java.util.stream.Collectors;
+
+/**
+ * 任务分配人枚举
+ *
+ * @author AprilWind
+ */
+@Getter
+@AllArgsConstructor
+public enum TaskAssigneeEnum {
+
+ /**
+ * 用户
+ */
+ USER("用户", ""),
+
+ /**
+ * 角色
+ */
+ ROLE("角色", "role:"),
+
+ /**
+ * 部门
+ */
+ DEPT("部门", "dept:"),
+
+ /**
+ * 岗位
+ */
+ POST("岗位", "post:");
+
+ private final String desc;
+ private final String code;
+
+ /**
+ * 根据描述获取对应的枚举类型
+ *
+ * 通过传入描述,查找并返回匹配的枚举项。如果未找到匹配项,会抛出 {@link ServiceException}。
+ *
+ *
+ * @param desc 描述,用于匹配对应的枚举项
+ * @return TaskAssigneeEnum 返回对应的枚举类型
+ * @throws ServiceException 如果未找到匹配的枚举项
+ */
+ public static TaskAssigneeEnum fromDesc(String desc) {
+ for (TaskAssigneeEnum type : values()) {
+ if (type.getDesc().equals(desc)) {
+ return type;
+ }
+ }
+ throw new ServiceException("未知的办理人类型: " + desc);
+ }
+
+ /**
+ * 根据代码获取对应的枚举类型
+ *
+ * 通过传入代码,查找并返回匹配的枚举项。如果未找到匹配项,会抛出 {@link ServiceException}。
+ *
+ *
+ * @param code 代码,用于匹配对应的枚举项
+ * @return TaskAssigneeEnum 返回对应的枚举类型
+ * @throws IllegalArgumentException 如果未找到匹配的枚举项
+ */
+ public static TaskAssigneeEnum fromCode(String code) {
+ for (TaskAssigneeEnum type : values()) {
+ if (type.getCode().equals(code)) {
+ return type;
+ }
+ }
+ throw new ServiceException("未知的办理人类型代码: " + code);
+ }
+
+ /**
+ * 获取所有办理人类型的描述列表
+ *
+ * 获取当前枚举类所有项的描述字段列表,通常用于展示选择项。
+ *
+ *
+ * @return List 返回所有办理人类型的描述列表
+ */
+ public static List getAssigneeTypeList() {
+ return Arrays.stream(values())
+ .map(TaskAssigneeEnum::getDesc)
+ .collect(Collectors.toList());
+ }
+
+ /**
+ * 获取所有办理人类型的代码列表
+ *
+ * 获取当前枚举类所有项的代码字段列表,通常用于程序内部逻辑的判断。
+ *
+ *
+ * @return List 返回所有办理人类型的代码列表
+ */
+ public static List getAssigneeCodeList() {
+ return Arrays.stream(values())
+ .map(TaskAssigneeEnum::getCode)
+ .collect(Collectors.toList());
+ }
+}
+
diff --git a/ruoyi-modules/ruoyi-workflow/src/main/java/org/dromara/workflow/common/enums/TaskAssigneeType.java b/ruoyi-modules/ruoyi-workflow/src/main/java/org/dromara/workflow/common/enums/TaskAssigneeType.java
new file mode 100644
index 000000000..eed1b91fb
--- /dev/null
+++ b/ruoyi-modules/ruoyi-workflow/src/main/java/org/dromara/workflow/common/enums/TaskAssigneeType.java
@@ -0,0 +1,49 @@
+package org.dromara.workflow.common.enums;
+
+import lombok.AllArgsConstructor;
+import lombok.Getter;
+
+/**
+ * 人员类型
+ *
+ * @author AprilWind
+ */
+@Getter
+@AllArgsConstructor
+public enum TaskAssigneeType {
+
+ /**
+ * 待办任务的审批人权限
+ * 该权限表示用户是待办任务的审批人,负责审核任务的执行情况。
+ */
+ APPROVER("1", "待办任务的审批人权限"),
+
+ /**
+ * 待办任务的转办人权限
+ * 该权限表示用户是待办任务的转办人,负责将任务分配给其他人员。
+ */
+ TRANSFER("2", "待办任务的转办人权限"),
+
+ /**
+ * 待办任务的委托人权限
+ * 该权限表示用户是待办任务的委托人,能够委托其他人代为处理任务。
+ */
+ DELEGATE("3", "待办任务的委托人权限"),
+
+ /**
+ * 待办任务的抄送人权限
+ * 该权限表示用户是待办任务的抄送人,仅接收任务信息的通知,不参与任务的审批或处理。
+ */
+ COPY("4", "待办任务的抄送人权限");
+
+ /**
+ * 类型
+ */
+ private final String code;
+
+ /**
+ * 描述
+ */
+ private final String description;
+
+}
diff --git a/ruoyi-modules/ruoyi-workflow/src/main/java/org/dromara/workflow/common/enums/TaskStatusEnum.java b/ruoyi-modules/ruoyi-workflow/src/main/java/org/dromara/workflow/common/enums/TaskStatusEnum.java
index 7b2f55c20..d18ebb01d 100644
--- a/ruoyi-modules/ruoyi-workflow/src/main/java/org/dromara/workflow/common/enums/TaskStatusEnum.java
+++ b/ruoyi-modules/ruoyi-workflow/src/main/java/org/dromara/workflow/common/enums/TaskStatusEnum.java
@@ -3,9 +3,10 @@ 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;
+import java.util.Map;
+import java.util.stream.Collectors;
/**
* 任务状态枚举
@@ -15,50 +16,62 @@ import java.util.Arrays;
@Getter
@AllArgsConstructor
public enum TaskStatusEnum {
+
/**
* 撤销
*/
CANCEL("cancel", "撤销"),
+
/**
* 通过
*/
PASS("pass", "通过"),
+
/**
* 待审核
*/
WAITING("waiting", "待审核"),
+
/**
* 作废
*/
INVALID("invalid", "作废"),
+
/**
* 退回
*/
BACK("back", "退回"),
+
/**
* 终止
*/
TERMINATION("termination", "终止"),
+
/**
* 转办
*/
TRANSFER("transfer", "转办"),
+
/**
* 委托
*/
- PENDING("pending", "委托"),
+ DEPUTE("depute", "委托"),
+
/**
* 抄送
*/
COPY("copy", "抄送"),
+
/**
* 加签
*/
SIGN("sign", "加签"),
+
/**
* 减签
*/
SIGN_OFF("sign_off", "减签"),
+
/**
* 超时
*/
@@ -74,21 +87,18 @@ public enum TaskStatusEnum {
*/
private final String desc;
+ private static final Map STATUS_DESC_MAP = Arrays.stream(values())
+ .collect(Collectors.toConcurrentMap(TaskStatusEnum::getStatus, TaskStatusEnum::getDesc));
+
/**
* 任务业务状态
*
* @param status 状态
*/
public static String findByStatus(String status) {
- if (StringUtils.isBlank(status)) {
- return StrUtil.EMPTY;
- }
-
- return Arrays.stream(TaskStatusEnum.values())
- .filter(statusEnum -> statusEnum.getStatus().equals(status))
- .findFirst()
- .map(TaskStatusEnum::getDesc)
- .orElse(StrUtil.EMPTY);
+ // 从缓存中直接获取描述
+ return STATUS_DESC_MAP.getOrDefault(status, StrUtil.EMPTY);
}
+
}
diff --git a/ruoyi-modules/ruoyi-workflow/src/main/java/org/dromara/workflow/config/WarmFlowConfig.java b/ruoyi-modules/ruoyi-workflow/src/main/java/org/dromara/workflow/config/WarmFlowConfig.java
new file mode 100644
index 000000000..a38c83e27
--- /dev/null
+++ b/ruoyi-modules/ruoyi-workflow/src/main/java/org/dromara/workflow/config/WarmFlowConfig.java
@@ -0,0 +1,15 @@
+package org.dromara.workflow.config;
+
+
+import org.springframework.context.annotation.Configuration;
+
+/**
+ * warmFlow配置
+ *
+ * @author may
+ */
+@Configuration
+public class WarmFlowConfig {
+
+}
+
diff --git a/ruoyi-modules/ruoyi-workflow/src/main/java/org/dromara/workflow/controller/ActModelController.java b/ruoyi-modules/ruoyi-workflow/src/main/java/org/dromara/workflow/controller/ActModelController.java
deleted file mode 100644
index 842d3d667..000000000
--- a/ruoyi-modules/ruoyi-workflow/src/main/java/org/dromara/workflow/controller/ActModelController.java
+++ /dev/null
@@ -1,148 +0,0 @@
-package org.dromara.workflow.controller;
-
-import jakarta.servlet.http.HttpServletResponse;
-import jakarta.validation.constraints.NotBlank;
-import jakarta.validation.constraints.NotEmpty;
-import lombok.RequiredArgsConstructor;
-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.idempotent.annotation.RepeatSubmit;
-import org.dromara.common.log.annotation.Log;
-import org.dromara.common.log.enums.BusinessType;
-import org.dromara.common.mybatis.core.page.PageQuery;
-import org.dromara.common.mybatis.core.page.TableDataInfo;
-import org.dromara.common.web.core.BaseController;
-import org.dromara.workflow.domain.bo.ModelBo;
-import org.dromara.workflow.domain.vo.ModelVo;
-import org.dromara.workflow.service.IActModelService;
-import org.flowable.engine.RepositoryService;
-import org.flowable.engine.repository.Model;
-import org.springframework.beans.factory.annotation.Autowired;
-import org.springframework.transaction.annotation.Transactional;
-import org.springframework.validation.annotation.Validated;
-import org.springframework.web.bind.annotation.*;
-
-import java.util.Arrays;
-import java.util.List;
-
-/**
- * 模型管理 控制层
- *
- * @author may
- */
-@Validated
-@RequiredArgsConstructor
-@RestController
-@RequestMapping("/workflow/model")
-public class ActModelController extends BaseController {
-
- @Autowired(required = false)
- private RepositoryService repositoryService;
- private final IActModelService actModelService;
-
-
- /**
- * 分页查询模型
- *
- * @param modelBo 模型参数
- */
- @GetMapping("/list")
- public TableDataInfo page(ModelBo modelBo, PageQuery pageQuery) {
- return actModelService.page(modelBo, pageQuery);
- }
-
- /**
- * 新增模型
- *
- * @param modelBo 模型请求对象
- */
- @Log(title = "模型管理", businessType = BusinessType.INSERT)
- @RepeatSubmit()
- @PostMapping("/save")
- public R saveNewModel(@Validated(AddGroup.class) @RequestBody ModelBo modelBo) {
- return toAjax(actModelService.saveNewModel(modelBo));
- }
-
- /**
- * 查询模型
- *
- * @param id 模型id
- */
- @GetMapping("/getInfo/{id}")
- public R getInfo(@NotBlank(message = "模型id不能为空") @PathVariable String id) {
- return R.ok(actModelService.getInfo(id));
- }
-
- /**
- * 修改模型信息
- *
- * @param modelBo 模型数据
- */
- @Log(title = "模型管理", businessType = BusinessType.UPDATE)
- @RepeatSubmit()
- @PutMapping(value = "/update")
- public R update(@RequestBody ModelBo modelBo) {
- return toAjax(actModelService.update(modelBo));
- }
-
- /**
- * 编辑XMl模型
- *
- * @param modelBo 模型数据
- */
- @Log(title = "模型管理", businessType = BusinessType.UPDATE)
- @RepeatSubmit()
- @PutMapping(value = "/editModelXml")
- public R editModel(@Validated(EditGroup.class) @RequestBody ModelBo modelBo) {
- return toAjax(actModelService.editModelXml(modelBo));
- }
-
- /**
- * 删除流程模型
- *
- * @param ids 模型id
- */
- @Log(title = "模型管理", businessType = BusinessType.DELETE)
- @RepeatSubmit()
- @DeleteMapping("/{ids}")
- @Transactional(rollbackFor = Exception.class)
- public R delete(@NotEmpty(message = "主键不能为空") @PathVariable String[] ids) {
- Arrays.stream(ids).parallel().forEachOrdered(repositoryService::deleteModel);
- return R.ok();
- }
-
- /**
- * 模型部署
- *
- * @param id 模型id
- */
- @Log(title = "模型管理", businessType = BusinessType.INSERT)
- @RepeatSubmit()
- @PostMapping("/modelDeploy/{id}")
- public R deploy(@NotBlank(message = "模型id不能为空") @PathVariable("id") String id) {
- return toAjax(actModelService.modelDeploy(id));
- }
-
- /**
- * 导出模型zip压缩包
- *
- * @param modelIds 模型id
- * @param response 相应
- */
- @GetMapping("/export/zip/{modelIds}")
- public void exportZip(@NotEmpty(message = "模型id不能为空") @PathVariable List modelIds,
- HttpServletResponse response) {
- actModelService.exportZip(modelIds, response);
- }
-
- /**
- * 复制模型
- *
- * @param modelBo 模型数据
- */
- @PostMapping("/copyModel")
- public R copyModel(@RequestBody ModelBo modelBo) {
- return toAjax(actModelService.copyModel(modelBo));
- }
-}
diff --git a/ruoyi-modules/ruoyi-workflow/src/main/java/org/dromara/workflow/controller/ActProcessDefinitionController.java b/ruoyi-modules/ruoyi-workflow/src/main/java/org/dromara/workflow/controller/ActProcessDefinitionController.java
deleted file mode 100644
index 5198bd164..000000000
--- a/ruoyi-modules/ruoyi-workflow/src/main/java/org/dromara/workflow/controller/ActProcessDefinitionController.java
+++ /dev/null
@@ -1,147 +0,0 @@
-package org.dromara.workflow.controller;
-
-import jakarta.validation.constraints.NotBlank;
-import jakarta.validation.constraints.NotEmpty;
-import jakarta.validation.constraints.NotNull;
-import lombok.RequiredArgsConstructor;
-import org.dromara.common.core.domain.R;
-import org.dromara.common.idempotent.annotation.RepeatSubmit;
-import org.dromara.common.log.annotation.Log;
-import org.dromara.common.log.enums.BusinessType;
-import org.dromara.common.mybatis.core.page.PageQuery;
-import org.dromara.common.mybatis.core.page.TableDataInfo;
-import org.dromara.common.web.core.BaseController;
-import org.dromara.workflow.domain.bo.ProcessDefinitionBo;
-import org.dromara.workflow.domain.vo.ProcessDefinitionVo;
-import org.dromara.workflow.service.IActProcessDefinitionService;
-import org.springframework.validation.annotation.Validated;
-import org.springframework.web.bind.annotation.*;
-import org.springframework.web.multipart.MultipartFile;
-
-import java.util.Arrays;
-import java.util.HashMap;
-import java.util.List;
-import java.util.Map;
-
-
-/**
- * 流程定义管理 控制层
- *
- * @author may
- */
-@Validated
-@RequiredArgsConstructor
-@RestController
-@RequestMapping("/workflow/processDefinition")
-public class ActProcessDefinitionController extends BaseController {
-
- private final IActProcessDefinitionService actProcessDefinitionService;
-
- /**
- * 分页查询
- *
- * @param bo 参数
- */
- @GetMapping("/list")
- public TableDataInfo page(ProcessDefinitionBo bo, PageQuery pageQuery) {
- return actProcessDefinitionService.page(bo, pageQuery);
- }
-
- /**
- * 查询历史流程定义列表
- *
- * @param key 流程定义key
- */
- @GetMapping("/getListByKey/{key}")
- public R> getListByKey(@NotEmpty(message = "流程定义key不能为空") @PathVariable String key) {
- return R.ok("操作成功", actProcessDefinitionService.getListByKey(key));
- }
-
- /**
- * 查看流程定义图片
- *
- * @param processDefinitionId 流程定义id
- */
- @GetMapping("/definitionImage/{processDefinitionId}")
- public R definitionImage(@PathVariable String processDefinitionId) {
- return R.ok("操作成功", actProcessDefinitionService.definitionImage(processDefinitionId));
- }
-
- /**
- * 查看流程定义xml文件
- *
- * @param processDefinitionId 流程定义id
- */
- @GetMapping("/definitionXml/{processDefinitionId}")
- public R