update 流程新增节点

This commit is contained in:
lijiarao
2023-09-26 18:06:41 +08:00
parent 189aa99ef2
commit 0ef58d2f96
19 changed files with 703 additions and 276 deletions
+14 -10
View File
@@ -18,23 +18,27 @@ create table laws_process_node_origin
sys_code varchar(64) comment '所属部门'
) comment = '流程节点_来源';
DROP TABLE IF EXISTS laws_process_node;
create table laws_process_node
(
id varchar(36) not null primary key comment '主键id',
create_by varchar(36) comment '创建人',
create_time datetime(0) comment '创建时间',
update_by varchar(36) comment '更新人',
update_time datetime(0) comment '更新时间',
sys_code varchar(64) comment '所属部门',
replaced varchar(50) comment '代替标准',
replaced_by varchar(50) comment '被代替标准',
type int(1) comment '类型(1-代替、2-引用)'
id varchar(36) not null primary key comment '主键id',
process_definition_id varchar(64) comment '流程定义id',
node_name varchar(50) comment '节点名称',
is_approval_node tinyint(4) comment '是否审批节点',
is_can_deleted tinyint(4) comment '是否可删除',
sort tinyint(4) comment '排序',
create_by varchar(36) comment '创建人',
create_time datetime comment '创建时间',
update_by varchar(36) comment '更新人',
update_time datetime comment '更新时间',
sys_code varchar(64) comment '所属部门'
) comment = '流程节点';
DROP TABLE IF EXISTS laws_process_node_link;
create table laws_process_node_link
(
id varchar(36) not null primary key comment '主键id',
process_node_id varchar(36) comment '流程节点id',
type int(1) comment '类型(1-用户、2-部门)',
user_depart_id varchar(36) comment '用户id,部门id'
) comment = '流程节点';
) comment = '流程节点关联用户部门表';
+6
View File
@@ -0,0 +1,6 @@
第二行替换为:<definitions xmlns="http://www.omg.org/spec/BPMN/20100524/MODEL" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:activiti="http://activiti.org/bpmn" xmlns:bpmndi="http://www.omg.org/spec/BPMN/20100524/DI" xmlns:omgdc="http://www.omg.org/spec/DD/20100524/DC" xmlns:omgdi="http://www.omg.org/spec/DD/20100524/DI" typeLanguage="http://www.w3.org/2001/XMLSchema" expressionLanguage="http://www.w3.org/1999/XPath" targetNamespace="http://www.activiti.org/test">
第三行修改为:isExecutable="true"
bpmn: 替换为空
camunda: 替换为 activiti:
dc:Bounds 替换为 omgdc:Bounds
di:waypoint 替换为 omgdi:waypoint
@@ -1,10 +1,17 @@
package com.jero.modules.activiti.controller;
import cn.hutool.core.bean.BeanUtil;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.jero.common.api.vo.Result;
import com.jero.common.constant.enums.LanguageEnum;
import com.jero.common.util.MessageUtils;
import com.jero.modules.activiti.entity.LawsProcessNode;
import com.jero.modules.activiti.entity.LawsProcessNodeOrigin;
import com.jero.modules.activiti.service.LawsProcessNodeOriginService;
import com.jero.modules.activiti.service.LawsProcessNodeService;
import com.jero.modules.activiti.service.ProcessService;
import com.jero.modules.activiti.vo.AddTaskVO;
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiOperation;
import io.swagger.annotations.ApiParam;
import lombok.extern.slf4j.Slf4j;
@@ -19,6 +26,7 @@ import org.activiti.engine.task.Task;
import org.activiti.engine.task.TaskQuery;
import org.apache.commons.io.IOUtils;
import org.apache.commons.lang3.StringUtils;
import org.springframework.beans.BeanUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.util.CollectionUtils;
import org.springframework.web.bind.annotation.*;
@@ -37,6 +45,7 @@ import java.util.*;
*/
@Slf4j
@RestController
@Api(tags = "流程控制")
@RequestMapping("/modeler")
public class AController {
@Autowired
@@ -45,8 +54,11 @@ public class AController {
private RepositoryService repositoryService;
@Resource
private TaskService taskService;
@Resource
private LawsProcessNodeOriginService processNodeOriginService;
@Resource
private LawsProcessNodeService processNodeService;
@ApiOperation(value="部署流程图")
@GetMapping("/deploy")
public Result<Map<String, String>> deploy(@RequestParam(value = "name", required = false) String name,
@RequestParam(value = "classpathResource") String classpathResource,
@@ -79,6 +91,15 @@ public class AController {
map.put("流程部署id", deployment.getId());
map.put("流程部署名称:", deployment.getName());
map.put("流程部署key", deployment.getKey());
//创建一个流程定义查询
ProcessDefinitionQuery processDefinitionQuery = repositoryService.createProcessDefinitionQuery();
processDefinitionQuery.deploymentId(deployment.getId());
ProcessDefinition processDefinition = processDefinitionQuery.singleResult();
String processDefinitionId = processDefinition.getId();
processNodeOriginService.saveNodeList(processDefinitionId);
map.put("流程定义Id", processDefinitionId);
return Result.OK(map);
}
@@ -125,7 +146,7 @@ public class AController {
return Result.OK(allList);
}
@ApiOperation(value="启动流程")
@PostMapping("/start")
public Result<Map<String, String>> start(@RequestBody Map<String,Object> map) {
String key = map.get("key").toString();
@@ -133,32 +154,54 @@ public class AController {
ProcessEngine processEngine = ProcessEngines.getDefaultProcessEngine();
// 2、获取RunTimeService
RuntimeService runtimeService = processEngine.getRuntimeService();
Map<String, Object> vars = new HashMap<>();
vars.put("mainDrafter", "admin");
// 3、根据流程定义Id启动流程
ProcessInstance processInstance = runtimeService
.startProcessInstanceByKey(key, map);
String processDefinitionId = processInstance.getProcessDefinitionId();
// 输出内容
Map<String, String> map1 = new HashMap<>();
map1.put("流程Id", processInstance.getDeploymentId());
map1.put("流程定义id", processInstance.getProcessDefinitionId());
map1.put("流程定义id", processDefinitionId);
map1.put("流程实例id", processInstance.getId());
map1.put("当前活动Id", processInstance.getActivityId());
//从流程节点源表中保存一份流程节点信息到流程节点表
LambdaQueryWrapper<LawsProcessNodeOrigin> processNodeOriginLambdaQueryWrapper = new LambdaQueryWrapper<>();
processNodeOriginLambdaQueryWrapper.eq(LawsProcessNodeOrigin::getNodeType,"userTask")
.orderByAsc(LawsProcessNodeOrigin::getSort);
List<LawsProcessNodeOrigin> lawsProcessNodeOrigins = processNodeOriginService.list(processNodeOriginLambdaQueryWrapper);
List<LawsProcessNode> lawsProcessNodes = new ArrayList<>();
for (LawsProcessNodeOrigin lawsProcessNodeOrigin : lawsProcessNodeOrigins) {
LawsProcessNode lawsProcessNode = new LawsProcessNode();
BeanUtils.copyProperties(lawsProcessNodeOrigin,lawsProcessNode);
lawsProcessNode.setId(null);
lawsProcessNodes.add(lawsProcessNode);
}
processNodeService.saveBatch(lawsProcessNodes);
for (LawsProcessNode lawsProcessNode : lawsProcessNodes) {
if (lawsProcessNode.getNodeName().equals("填写基本信息,在线编辑,分发其他起草人")) {
//todo 关联关系
}
}
String mainDrafter = map.get("mainDrafter").toString();
return Result.OK(map1);
}
@ApiOperation(value="查询待办列表")
@GetMapping("/getTaskList")
public Result<List<Map<String, String>>> testFindPersonalTaskList(@RequestParam(value = "assignee") String assignee,
@RequestParam(value = "processKey") String processKey) {
@RequestParam(value = "processKey") String processKey,
@RequestParam(value = "group") String group) {
// 根据流程key 和 任务负责人 查询任务
TaskQuery taskQuery = taskService.createTaskQuery();
if (StringUtils.isNotBlank(assignee)) {
taskQuery.taskAssignee(assignee);//只查询该任务负责人的任务
}
if (StringUtils.isNotBlank(group)) {
taskQuery.taskCandidateGroup(group);//只查询该组的任务
}
if (StringUtils.isNotBlank(processKey)) {
taskQuery.processDefinitionKey(processKey); //流程Key
}
@@ -170,11 +213,21 @@ public class AController {
map.put("任务id", task.getId());
map.put("任务负责人:", task.getAssignee());
map.put("任务名称:", task.getName());
//map.put("任务名称:", task.get);
resut.add(map);
}
return Result.OK(resut);
}
@ApiOperation(value="签收任务")
@PostMapping("/claim")
public Result<Object> claim(@RequestBody Map<String,Object> map) {
String taskId = map.get("taskId").toString();
String userId = map.get("userId").toString();
taskService.claim(taskId, userId);
return Result.OK();
}
@ApiOperation(value="完成任务")
@PostMapping("/complete")
public Result<Object> complete(@RequestBody Map<String,Object> map) {
String taskId = map.get("taskId").toString();
@@ -197,6 +250,7 @@ public class AController {
* @param loginName
* @return
*/
@ApiOperation(value="加签/委托")
@GetMapping("/delegateTask")
public Result<Object> delegateTask(@RequestParam(value = "taskId") String taskId,
@RequestParam(value = "loginName") String loginName) {
@@ -204,21 +258,23 @@ public class AController {
return Result.OK();
}
@ApiOperation(value="解决委托")
@GetMapping("/resolveTask")
public Result<Object> resolveTask(@RequestParam(value = "taskId") String taskId) {
taskService.resolveTask(taskId);
return Result.OK();
}
@GetMapping("/addTask")
// @ApiOperation("新增节点")
public Object addTask(String taskId, String assignee) {
return processService.addTask(taskId, assignee);
@PostMapping("/addTask")
@ApiOperation("新增节点")
public Object addTask(@RequestBody AddTaskVO addTaskVO, HttpServletResponse response) {
return processNodeOriginService.addTask(addTaskVO,response);
}
@GetMapping("/getNodeList")
public Object getNodeList(String processDefinitionId) {
processService.getNodeList(processDefinitionId);
@ApiOperation("保存节点列表")
@GetMapping("/saveNodeList")
public Object saveNodeList(String processDefinitionId) {
processNodeOriginService.saveNodeList(processDefinitionId);
return null;
}
@@ -0,0 +1,97 @@
package com.jero.modules.activiti.entity;
import com.baomidou.mybatisplus.annotation.IdType;
import com.baomidou.mybatisplus.annotation.TableField;
import com.baomidou.mybatisplus.annotation.TableId;
import com.baomidou.mybatisplus.annotation.TableName;
import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty;
import java.util.Date;
import lombok.Data;
/**
*流程节点
*@author liJiaRao
*@date 2023-09-26 15:12
*/
@ApiModel(description = "流程节点")
@Data
@TableName(value = "laws_process_node")
public class LawsProcessNode {
/**
* 主键id
*/
@TableId(value = "id", type = IdType.ASSIGN_ID)
@ApiModelProperty(value = "主键id")
private String id;
/**
* 流程定义id
*/
@TableField(value = "process_definition_id")
@ApiModelProperty(value = "流程定义id")
private String processDefinitionId;
/**
* 节点名称
*/
@TableField(value = "node_name")
@ApiModelProperty(value = "节点名称")
private String nodeName;
/**
* 是否审批节点
*/
@TableField(value = "is_approval_node")
@ApiModelProperty(value = "是否审批节点")
private Integer isApprovalNode;
/**
* 是否可删除
*/
@TableField(value = "is_can_deleted")
@ApiModelProperty(value = "是否可删除")
private Integer isCanDeleted;
/**
* 排序
*/
@TableField(value = "sort")
@ApiModelProperty(value = "排序")
private Integer sort;
/**
* 创建人
*/
@TableField(value = "create_by")
@ApiModelProperty(value = "创建人")
private String createBy;
/**
* 创建时间
*/
@TableField(value = "create_time")
@ApiModelProperty(value = "创建时间")
private Date createTime;
/**
* 更新人
*/
@TableField(value = "update_by")
@ApiModelProperty(value = "更新人")
private String updateBy;
/**
* 更新时间
*/
@TableField(value = "update_time")
@ApiModelProperty(value = "更新时间")
private Date updateTime;
/**
* 所属部门
*/
@TableField(value = "sys_code")
@ApiModelProperty(value = "所属部门")
private String sysCode;
}
@@ -0,0 +1,47 @@
package com.jero.modules.activiti.entity;
import com.baomidou.mybatisplus.annotation.IdType;
import com.baomidou.mybatisplus.annotation.TableField;
import com.baomidou.mybatisplus.annotation.TableId;
import com.baomidou.mybatisplus.annotation.TableName;
import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
/**
*流程节点关联用户部门表
*@author liJiaRao
*@date 2023-09-26 15:12
*/
@ApiModel(description = "流程节点关联用户部门表")
@Data
@TableName(value = "laws_process_node_link")
public class LawsProcessNodeLink {
/**
* 主键id
*/
@TableId(value = "id", type = IdType.ASSIGN_ID)
@ApiModelProperty(value = "主键id")
private String id;
/**
* 流程节点id
*/
@TableField(value = "process_node_id")
@ApiModelProperty(value = "流程节点id")
private String processNodeId;
/**
* 类型(1-用户、2-部门)
*/
@TableField(value = "`type`")
@ApiModelProperty(value = "类型(1-用户、2-部门)")
private Integer type;
/**
* 用户id,部门id
*/
@TableField(value = "user_depart_id")
@ApiModelProperty(value = "用户id,部门id")
private String userDepartId;
}
@@ -12,7 +12,7 @@ import lombok.Data;
/**
*流程节点_来源
*@author liJiaRao
*@date 2023-09-25 15:17
*@date 2023-09-26 15:12
*/
@ApiModel(description = "流程节点_来源")
@Data
@@ -0,0 +1,11 @@
package com.jero.modules.activiti.mapper;
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import com.jero.modules.activiti.entity.LawsProcessNodeLink;
/**
* @author liJiaRao
* @date 2023-09-26 15:12
*/
public interface LawsProcessNodeLinkMapper extends BaseMapper<LawsProcessNodeLink> {
}
@@ -0,0 +1,11 @@
package com.jero.modules.activiti.mapper;
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import com.jero.modules.activiti.entity.LawsProcessNode;
/**
* @author liJiaRao
* @date 2023-09-26 15:12
*/
public interface LawsProcessNodeMapper extends BaseMapper<LawsProcessNode> {
}
@@ -1,16 +1,15 @@
package com.jero.modules.activiti.mapper;
import org.apache.ibatis.annotations.Param;
import java.util.List;
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import com.jero.modules.activiti.entity.LawsProcessNodeOrigin;
import org.apache.ibatis.annotations.Param;
import java.util.List;
/**
* @author liJiaRao
* @date 2023-09-25 15:02
* @date 2023-09-26 15:12
*/
public interface LawsProcessNodeOriginMapper extends BaseMapper<LawsProcessNodeOrigin> {
int insertList(@Param("list")List<LawsProcessNodeOrigin> list);
int insertList(@Param("list") List<LawsProcessNodeOrigin> list);
}
@@ -0,0 +1,16 @@
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="com.jero.modules.activiti.mapper.LawsProcessNodeLinkMapper">
<resultMap id="BaseResultMap" type="com.jero.modules.activiti.entity.LawsProcessNodeLink">
<!--@mbg.generated-->
<!--@Table laws_process_node_link-->
<id column="id" jdbcType="VARCHAR" property="id" />
<result column="process_node_id" jdbcType="VARCHAR" property="processNodeId" />
<result column="type" jdbcType="INTEGER" property="type" />
<result column="user_depart_id" jdbcType="VARCHAR" property="userDepartId" />
</resultMap>
<sql id="Base_Column_List">
<!--@mbg.generated-->
id, process_node_id, `type`, user_depart_id
</sql>
</mapper>
@@ -0,0 +1,24 @@
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="com.jero.modules.activiti.mapper.LawsProcessNodeMapper">
<resultMap id="BaseResultMap" type="com.jero.modules.activiti.entity.LawsProcessNode">
<!--@mbg.generated-->
<!--@Table laws_process_node-->
<id column="id" jdbcType="VARCHAR" property="id" />
<result column="process_definition_id" jdbcType="VARCHAR" property="processDefinitionId" />
<result column="node_name" jdbcType="VARCHAR" property="nodeName" />
<result column="is_approval_node" jdbcType="TINYINT" property="isApprovalNode" />
<result column="is_can_deleted" jdbcType="TINYINT" property="isCanDeleted" />
<result column="sort" jdbcType="TINYINT" property="sort" />
<result column="create_by" jdbcType="VARCHAR" property="createBy" />
<result column="create_time" jdbcType="TIMESTAMP" property="createTime" />
<result column="update_by" jdbcType="VARCHAR" property="updateBy" />
<result column="update_time" jdbcType="TIMESTAMP" property="updateTime" />
<result column="sys_code" jdbcType="VARCHAR" property="sysCode" />
</resultMap>
<sql id="Base_Column_List">
<!--@mbg.generated-->
id, process_definition_id, node_name, is_approval_node, is_can_deleted, sort, create_by,
create_time, update_by, update_time, sys_code
</sql>
</mapper>
@@ -1,40 +1,31 @@
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="com.jero.modules.activiti.mapper.LawsProcessNodeOriginMapper">
<resultMap id="BaseResultMap" type="com.jero.modules.activiti.entity.LawsProcessNodeOrigin">
<!--@mbg.generated-->
<!--@Table laws_process_node_origin-->
<id column="id" jdbcType="VARCHAR" property="id" />
<result column="process_definition_id" jdbcType="VARCHAR" property="processDefinitionId" />
<result column="node_name" jdbcType="VARCHAR" property="nodeName" />
<result column="node_type" jdbcType="VARCHAR" property="nodeType" />
<result column="xml_node_id" jdbcType="VARCHAR" property="xmlNodeId" />
<result column="xml_source_ref" jdbcType="VARCHAR" property="xmlSourceRef" />
<result column="xml_target_ref" jdbcType="VARCHAR" property="xmlTargetRef" />
<result column="is_approval_node" jdbcType="TINYINT" property="isApprovalNode" />
<result column="is_can_deleted" jdbcType="TINYINT" property="isCanDeleted" />
<result column="sort" jdbcType="TINYINT" property="sort" />
<result column="create_by" jdbcType="VARCHAR" property="createBy" />
<result column="create_time" jdbcType="TIMESTAMP" property="createTime" />
<result column="update_by" jdbcType="VARCHAR" property="updateBy" />
<result column="update_time" jdbcType="TIMESTAMP" property="updateTime" />
<result column="sys_code" jdbcType="VARCHAR" property="sysCode" />
</resultMap>
<sql id="Base_Column_List">
id,
process_definition_id,
node_name,
node_type,
xml_node_id,
xml_source_ref,
xml_target_ref,
is_approval_node,
is_can_deleted,
sort,
create_by,
create_time,
update_by,
update_time,
<!--@mbg.generated-->
id, process_definition_id, node_name, node_type, xml_node_id, xml_source_ref, xml_target_ref,
is_approval_node, is_can_deleted, sort, create_by, create_time, update_by, update_time,
sys_code
</sql>
<resultMap id="BaseResultMap" type="com.jero.modules.activiti.entity.LawsProcessNodeOrigin">
<result column="id" property="id"/>
<result column="process_definition_id" property="processDefinitionId"/>
<result column="node_name" property="nodeName"/>
<result column="node_type" property="nodeType"/>
<result column="xml_node_id" property="xmlNodeId"/>
<result column="xml_source_ref" property="xmlSourceRef"/>
<result column="xml_target_ref" property="xmlTargetRef"/>
<result column="is_approval_node" property="isApprovalNode"/>
<result column="is_can_deleted" property="isCanDeleted"/>
<result column="sort" property="sort"/>
<result column="create_by" property="createBy"/>
<result column="create_time" property="createTime"/>
<result column="update_by" property="updateBy"/>
<result column="update_time" property="updateTime"/>
<result column="sys_code" property="sysCode"/>
</resultMap>
<!--auto generated by MybatisCodeHelper on 2023-09-25-->
<insert id="insertList">
@@ -55,7 +46,7 @@
update_time,
sys_code
)VALUES
<foreach collection="list" item="element" index="index" separator=",">
<foreach collection="list" index="index" item="element" separator=",">
(
#{element.id},
#{element.processDefinitionId},
@@ -0,0 +1,17 @@
package com.jero.modules.activiti.service;
import org.springframework.stereotype.Service;
import javax.annotation.Resource;
import java.util.List;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import com.jero.modules.activiti.mapper.LawsProcessNodeLinkMapper;
import com.jero.modules.activiti.entity.LawsProcessNodeLink;
/**
*
*@author liJiaRao
*@date 2023-09-26 15:12
*/
@Service
public class LawsProcessNodeLinkService extends ServiceImpl<LawsProcessNodeLinkMapper, LawsProcessNodeLink> {
}
@@ -0,0 +1,267 @@
package com.jero.modules.activiti.service;
import cn.hutool.core.bean.BeanUtil;
import cn.hutool.core.lang.UUID;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.jero.common.constant.enums.YesOrNoEnum;
import com.jero.common.exception.JeroBootException;
import com.jero.modules.activiti.entity.ActGeBytearray;
import com.jero.modules.activiti.mapper.ActGeBytearrayMapper;
import com.jero.modules.activiti.vo.AddTaskVO;
import org.activiti.bpmn.BpmnAutoLayout;
import org.activiti.bpmn.converter.BpmnXMLConverter;
import org.activiti.bpmn.model.*;
import org.activiti.bpmn.model.Process;
import org.activiti.engine.*;
import org.activiti.engine.impl.cfg.ProcessEngineConfigurationImpl;
import org.activiti.engine.impl.persistence.deploy.DeploymentManager;
import org.activiti.validation.ProcessValidator;
import org.activiti.validation.ProcessValidatorFactory;
import org.activiti.validation.ValidationError;
import org.apache.commons.io.IOUtils;
import org.apache.commons.lang3.ObjectUtils;
import org.springframework.beans.BeanUtils;
import org.springframework.stereotype.Service;
import javax.annotation.Resource;
import javax.servlet.http.HttpServletResponse;
import javax.xml.stream.XMLInputFactory;
import javax.xml.stream.XMLStreamException;
import java.io.ByteArrayInputStream;
import java.io.IOException;
import java.io.OutputStream;
import java.util.ArrayList;
import java.util.Collection;
import java.util.List;
import java.util.stream.Collectors;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import com.jero.modules.activiti.mapper.LawsProcessNodeOriginMapper;
import com.jero.modules.activiti.entity.LawsProcessNodeOrigin;
/**
*
*@author liJiaRao
*@date 2023-09-26 15:12
*/
@Service
public class LawsProcessNodeOriginService extends ServiceImpl<LawsProcessNodeOriginMapper, LawsProcessNodeOrigin> {
@Resource
private RepositoryService repositoryService;
@Resource
private ProcessEngine processEngine;
@Resource
private ActGeBytearrayMapper actGeBytearrayMapper;
@Resource
private LawsProcessNodeOriginMapper processNodeOriginMapper;
public void saveNodeList(String processDefinitionId) {
final BpmnModel bpmnModel = repositoryService.getBpmnModel(processDefinitionId);
Process process = bpmnModel.getMainProcess();
Collection<FlowElement> flowElements = process.getFlowElements();
List<LawsProcessNodeOrigin> processNodeOriginList = new ArrayList<>();
int sort = 1;
List<String> gatewayIdList = new ArrayList<>();
processNodeOriginList = handlerLawsProcessNodeOrigin(flowElements,sort,gatewayIdList,processDefinitionId);
List<String> approvalNodeIdList = processNodeOriginList.stream()
.filter(item -> gatewayIdList.contains(item.getXmlTargetRef()))
.map(LawsProcessNodeOrigin::getXmlSourceRef)
.collect(Collectors.toList());
for (LawsProcessNodeOrigin processNodeOrigin : processNodeOriginList) {
String xmlNodeId = processNodeOrigin.getXmlNodeId();
if (approvalNodeIdList.contains(xmlNodeId) ){
processNodeOrigin.setIsApprovalNode(YesOrNoEnum.YES.getInteger());
}
}
processNodeOriginMapper.insertList(processNodeOriginList);
}
public Object addTask(AddTaskVO addTaskVO, HttpServletResponse response) {
try {
String processDefinitionId = addTaskVO.getProcessDefinitionId();
String xmlNodeId = addTaskVO.getXmlNodeId();
String nodeName = addTaskVO.getNodeName();
//查找当前节点
LambdaQueryWrapper<LawsProcessNodeOrigin> processNodeOriginLambdaQueryWrapper = new LambdaQueryWrapper<>();
processNodeOriginLambdaQueryWrapper.eq(LawsProcessNodeOrigin::getXmlNodeId, xmlNodeId)
.eq(LawsProcessNodeOrigin::getProcessDefinitionId, processDefinitionId);
LawsProcessNodeOrigin processNodeOrigin = processNodeOriginMapper.selectOne(processNodeOriginLambdaQueryWrapper);
if (processNodeOrigin == null || !YesOrNoEnum.YES.getInteger().equals(processNodeOrigin.getIsApprovalNode())) {
throw new JeroBootException("只能在审批节点后新增");
}
processNodeOriginLambdaQueryWrapper.clear();
//查找节点的流出线
processNodeOriginLambdaQueryWrapper.eq(LawsProcessNodeOrigin::getXmlSourceRef, xmlNodeId)
.eq(LawsProcessNodeOrigin::getProcessDefinitionId, processDefinitionId);
LawsProcessNodeOrigin flowOrigin1 = processNodeOriginMapper.selectOne(processNodeOriginLambdaQueryWrapper);
processNodeOriginLambdaQueryWrapper.clear();
//查找流出线指向的网关
processNodeOriginLambdaQueryWrapper.eq(LawsProcessNodeOrigin::getXmlNodeId, flowOrigin1.getXmlTargetRef())
.eq(LawsProcessNodeOrigin::getProcessDefinitionId, processDefinitionId);
LawsProcessNodeOrigin gatewayOrigin = processNodeOriginMapper.selectOne(processNodeOriginLambdaQueryWrapper);
processNodeOriginLambdaQueryWrapper.clear();
//查找网关指向的线
processNodeOriginLambdaQueryWrapper.eq(LawsProcessNodeOrigin::getXmlSourceRef, gatewayOrigin.getXmlNodeId())
.eq(LawsProcessNodeOrigin::getNodeName, "通过")
.eq(LawsProcessNodeOrigin::getProcessDefinitionId, processDefinitionId);
LawsProcessNodeOrigin flowOrigin2 = processNodeOriginMapper.selectOne(processNodeOriginLambdaQueryWrapper);
BpmnModel bpmnModelOrigin = repositoryService.getBpmnModel(processDefinitionId);
BpmnXMLConverter converter = new BpmnXMLConverter();
byte[] bytesOrigin = converter.convertToXML(bpmnModelOrigin);
ByteArrayInputStream inputStream = new ByteArrayInputStream(bytesOrigin);
XMLInputFactory factory = XMLInputFactory.newInstance();
BpmnModel bpmnModel = converter.convertToBpmnModel(factory.createXMLStreamReader(inputStream));
Process process = bpmnModel.getMainProcess();
SequenceFlow flowElement = (SequenceFlow) process.getFlowElement(flowOrigin2.getXmlNodeId());
process.removeFlowElement(flowOrigin2.getXmlNodeId());
UserTask userTask = createUserTask(nodeName, null);
String userTaskId = userTask.getId();
flowElement.setTargetRef(userTaskId);
process.addFlowElement(flowElement);
process.addFlowElement(userTask);
process.addFlowElement(createGateway(process, userTaskId, flowOrigin2.getXmlTargetRef(), processNodeOrigin.getXmlNodeId()));
//重新绘画图形
BpmnAutoLayout bpmnAutoLayout = new BpmnAutoLayout(bpmnModel);
bpmnAutoLayout.execute();
//把bpmnModel对象转换成字符
byte[] bytes = converter.convertToXML(bpmnModel);
ByteArrayInputStream in = new ByteArrayInputStream(bytes);
String filename = bpmnModel.getMainProcess().getId() + ".bpmn";
response.setContentType("application/force-download");// 设置强制下载不打开
response.setHeader("Content-Disposition", "attachment; filename=" + filename);
IOUtils.copy(in, response.getOutputStream());
response.flushBuffer();
} catch (IOException e) {
e.printStackTrace();
} catch (XMLStreamException e) {
e.printStackTrace();
}
////清除缓存
//ProcessEngineConfigurationImpl configuration = (ProcessEngineConfigurationImpl) processEngine.getProcessEngineConfiguration();
//DeploymentManager deploymentManager = configuration.getDeploymentManager();
//deploymentManager.getProcessDefinitionCache().remove(processDefinitionId);
//
//List<ActGeBytearray> actGeBytearrayList = actGeBytearrayMapper.getActGeBytearrayList(processDefinitionId);
//actGeBytearrayList = actGeBytearrayList.stream().filter(item -> item.getName().endsWith(".bpmn")).peek(item -> {
// item.setBytes(bytes);
//}).collect(Collectors.toList());
//if (ObjectUtils.isNotEmpty(actGeBytearrayList)) {
// actGeBytearrayMapper.updateById(actGeBytearrayList.get(0));
//}
return null;
}
protected static UserTask createUserTask(String name, String assignee) {
String id = "Activity_" + UUID.randomUUID();
UserTask userTask = new UserTask();
userTask.setName(name);
userTask.setId(id);
userTask.setAssignee(assignee!=null?assignee:"${"+id+"}");
return userTask;
}
protected static SequenceFlow createSequenceFlow(String from, String to) {
SequenceFlow flow = new SequenceFlow();
flow.setSourceRef(from);
flow.setTargetRef(to);
flow.setId("Flow_"+ UUID.randomUUID());
return flow;
}
protected static SequenceFlow createSequenceFlow(String from, String to,String name,String conditionExpression) {
SequenceFlow flow = new SequenceFlow();
flow.setSourceRef(from);
flow.setTargetRef(to);
flow.setName(name);
flow.setConditionExpression(conditionExpression);
flow.setId("Flow_"+ UUID.randomUUID());
return flow;
}
protected static ExclusiveGateway createGateway(Process process, String originId, String targetIdYes, String targetIdNo) {
ExclusiveGateway gateway = new ExclusiveGateway();
String id = "Gateway_" + UUID.randomUUID();
gateway.setId(id);
List<SequenceFlow> incomingFlows = new ArrayList<>();
SequenceFlow sequenceFlow = createSequenceFlow(originId, id);
process.addFlowElement(sequenceFlow);
incomingFlows.add(sequenceFlow);
gateway.setIncomingFlows(incomingFlows);
List<SequenceFlow> outgoingFlows = new ArrayList<>();
SequenceFlow sequenceFlow1 = createSequenceFlow(id, targetIdYes, "通过", "${pass}");
SequenceFlow sequenceFlow2 = createSequenceFlow(id, targetIdNo, "驳回", "${!pass}");
process.addFlowElement(sequenceFlow1);
process.addFlowElement(sequenceFlow2);
outgoingFlows.add(sequenceFlow1);
outgoingFlows.add(sequenceFlow2);
gateway.setOutgoingFlows(outgoingFlows);
return gateway;
}
private List<LawsProcessNodeOrigin> handlerLawsProcessNodeOrigin(
Collection<FlowElement> flowElements,
int sort,
List<String> gatewayIdList,
String processDefinitionId) {
List<LawsProcessNodeOrigin> processNodeOriginList = new ArrayList<>();
for (FlowElement flowElement : flowElements) {
LawsProcessNodeOrigin processNodeOrigin = new LawsProcessNodeOrigin();
String nodeName = processNodeOrigin.getNodeName();
String nodeType = processNodeOrigin.getNodeType();
String xmlNodeId = processNodeOrigin.getXmlNodeId();
String xmlSourceRef = processNodeOrigin.getXmlSourceRef();
String xmlTargetRef = processNodeOrigin.getXmlTargetRef();
if (flowElement instanceof UserTask) {
UserTask userTask = (UserTask) flowElement;
nodeType = "userTask";
nodeName = userTask.getName();
xmlNodeId = userTask.getId();
} else if (flowElement instanceof SequenceFlow) {
SequenceFlow sequenceFlow = (SequenceFlow) flowElement;
nodeType = "sequenceFlow";
nodeName = sequenceFlow.getName();
xmlNodeId = sequenceFlow.getId();
xmlSourceRef = sequenceFlow.getSourceRef();
xmlTargetRef = sequenceFlow.getTargetRef();
} else if (flowElement instanceof ExclusiveGateway) {
ExclusiveGateway gateway = (ExclusiveGateway) flowElement;
nodeType = "gateway";
nodeName = gateway.getName();
xmlNodeId = gateway.getId();
gatewayIdList.add(xmlNodeId);
} else if (flowElement instanceof SubProcess) {
SubProcess subProcess = (SubProcess) flowElement;
Collection<FlowElement> flowElements1 = subProcess.getFlowElements();
List<LawsProcessNodeOrigin> processNodeOrigins = handlerLawsProcessNodeOrigin(flowElements1, sort, gatewayIdList, processDefinitionId);
processNodeOriginList.addAll(processNodeOrigins);
nodeType = "subProcess";
nodeName = subProcess.getName();
xmlNodeId = subProcess.getId();
} else if (flowElement instanceof EndEvent) {
EndEvent endEvent = (EndEvent) flowElement;
nodeType = "endEvent";
nodeName = endEvent.getName();
xmlNodeId = endEvent.getId();
} else {
continue;
}
processNodeOrigin.setProcessDefinitionId(processDefinitionId);
processNodeOrigin.setNodeName(nodeName);
processNodeOrigin.setNodeType(nodeType);
processNodeOrigin.setXmlNodeId(xmlNodeId);
processNodeOrigin.setXmlSourceRef(xmlSourceRef);
processNodeOrigin.setXmlTargetRef(xmlTargetRef);
processNodeOrigin.setSort(sort++);
processNodeOrigin.setIsApprovalNode(YesOrNoEnum.NO.getInteger());
processNodeOrigin.setIsCanDeleted(YesOrNoEnum.NO.getInteger());
processNodeOriginList.add(processNodeOrigin);
}
return processNodeOriginList;
}
}
@@ -0,0 +1,17 @@
package com.jero.modules.activiti.service;
import org.springframework.stereotype.Service;
import javax.annotation.Resource;
import java.util.List;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import com.jero.modules.activiti.mapper.LawsProcessNodeMapper;
import com.jero.modules.activiti.entity.LawsProcessNode;
/**
*
*@author liJiaRao
*@date 2023-09-26 15:12
*/
@Service
public class LawsProcessNodeService extends ServiceImpl<LawsProcessNodeMapper, LawsProcessNode> {
}
@@ -1,5 +1,7 @@
package com.jero.modules.activiti.service;
import com.jero.modules.activiti.vo.AddTaskVO;
import javax.servlet.http.HttpServletResponse;
/**
@@ -7,9 +9,7 @@ import javax.servlet.http.HttpServletResponse;
* @date 2023-08-03 15:37
*/
public interface ProcessService {
Object addTask(String taskId, String assignee);
void readResource(String pProcessInstanceId, HttpServletResponse response) throws Exception;
void getNodeList(String processDefinitionId);
}
@@ -2,6 +2,7 @@ package com.jero.modules.activiti.service.impl;
import java.util.Date;
import cn.hutool.core.lang.UUID;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.fasterxml.jackson.core.JsonProcessingException;
import com.fasterxml.jackson.databind.JsonNode;
import com.fasterxml.jackson.databind.ObjectMapper;
@@ -14,6 +15,7 @@ import com.jero.modules.activiti.mapper.ActGeBytearrayMapper;
import com.jero.modules.activiti.mapper.LawsProcessNodeOriginMapper;
import com.jero.modules.activiti.service.ProcessService;
import com.jero.modules.activiti.service.impl.image.ICustomProcessDiagramGenerator;
import com.jero.modules.activiti.vo.AddTaskVO;
import lombok.extern.slf4j.Slf4j;
import org.activiti.bpmn.BpmnAutoLayout;
import org.activiti.bpmn.converter.BpmnXMLConverter;
@@ -71,79 +73,6 @@ public class ProcessServiceImpl implements ProcessService {
private ActGeBytearrayMapper actGeBytearrayMapper;
@Resource
private LawsProcessNodeOriginMapper processNodeOriginMapper;
@Override
public Object addTask(String processDefinitionId, String assignee) {
final BpmnModel bpmnModel = repositoryService.getBpmnModel(processDefinitionId);
Process process = bpmnModel.getMainProcess();
Collection<FlowElement> flowElements = process.getFlowElements();
for (FlowElement flowElement : flowElements) {
if (flowElement instanceof UserTask) {
UserTask userTask = (UserTask)flowElement;
System.out.println(userTask.getId() + ":" + userTask.getName());
}
if (flowElement instanceof SequenceFlow) {
SequenceFlow sequenceFlow = (SequenceFlow)flowElement;
System.out.println(sequenceFlow.getId() + ":" + sequenceFlow.getName());
}
if (flowElement instanceof ExclusiveGateway) {
ExclusiveGateway gateway = (ExclusiveGateway)flowElement;
System.out.println(gateway.getId() + ":" + gateway.getName());
}
}
//process.removeFlowElement("add");//移除最终节点连线
//process.removeFlowElement("sequenceFlow-5d7e3faa-6c00-4010-8485-fe79c286448b");//移除最终节点连线
//process.removeFlowElement("sequenceFlow-aba52ded-835d-4863-b303-1b9771ae93cf");//移除最终节点连线
//process.addFlowElement(createSequenceFlow("Activity_0m576ex", "Event_17e1txx"));//新增节点 于原节点连线
//process.removeFlowElement("Flow_0stcykp");//移除最终节点连线
//process.addFlowElement(createUserTask("First task", "fred"));//新增节点
//process.addFlowElement(createSequenceFlow("Activity_0m576ex", "add"));//新增节点 于原节点连线
//process.addFlowElement(createSequenceFlow("add", "Event_17e1txx"));//新增节点 于原节点连线
//重新绘画图形
BpmnAutoLayout bpmnAutoLayout = new BpmnAutoLayout(bpmnModel);
bpmnAutoLayout.execute();
BpmnXMLConverter converter = new BpmnXMLConverter();
//把bpmnModel对象转换成字符
byte[] bytes = converter.convertToXML(bpmnModel);
//清除缓存
ProcessEngineConfigurationImpl configuration = (ProcessEngineConfigurationImpl) processEngine.getProcessEngineConfiguration();
DeploymentManager deploymentManager = configuration.getDeploymentManager();
deploymentManager.getProcessDefinitionCache().remove(processDefinitionId);
// List<ActGeBytearray> actGeBytearrayList = actGeBytearrayMapper.getActGeBytearrayList(userTask.getProcessDefinitionId());
// actGeBytearrayList = actGeBytearrayList.stream().filter(item -> item.getName().endsWith(".bpmn")).peek(item -> {
// item.setBytes(bytes);
// }).collect(Collectors.toList());
// if (ObjectUtils.isNotEmpty(actGeBytearrayList)) {
// actGeBytearrayMapper.updateById(actGeBytearrayList.get(0));
// }
return null;
}
protected static UserTask createUserTask(String name, String assignee) {
UserTask userTask = new UserTask();
userTask.setName(name);
userTask.setId("Activity_"+UUID.randomUUID());
userTask.setAssignee(assignee);
return userTask;
}
protected static SequenceFlow createSequenceFlow(String from, String to) {
SequenceFlow flow = new SequenceFlow();
flow.setSourceRef(from);
flow.setTargetRef(to);
flow.setId("Flow_"+ UUID.randomUUID());
return flow;
}
protected static ExclusiveGateway createGateway(List<SequenceFlow> incomingFlows, List<SequenceFlow> outgoingFlows) {
ExclusiveGateway gateway = new ExclusiveGateway();
gateway.setId("Gateway_"+ UUID.randomUUID());
gateway.setIncomingFlows(incomingFlows);
gateway.setOutgoingFlows(outgoingFlows);
return gateway;
}
private List<String> getHighLightedFlows(BpmnModel bpmnModel, ProcessDefinitionEntity processDefinitionEntity, List<HistoricActivityInstance> historicActivityInstances) {
// 高亮流程已发生流转的线id集合
@@ -254,142 +183,6 @@ public class ProcessServiceImpl implements ProcessService {
}
}
@Override
public void getNodeList(String processDefinitionId) {
final BpmnModel bpmnModel = repositoryService.getBpmnModel(processDefinitionId);
Process process = bpmnModel.getMainProcess();
Collection<FlowElement> flowElements = process.getFlowElements();
List<LawsProcessNodeOrigin> processNodeOriginList = new ArrayList<>();
int sort = 1;
List<String> gatewayIdList = new ArrayList<>();
processNodeOriginList = handlerLawsProcessNodeOrigin(flowElements,sort,gatewayIdList,processDefinitionId);
//for (FlowElement flowElement : flowElements) {
// LawsProcessNodeOrigin processNodeOrigin = new LawsProcessNodeOrigin();
//
// String nodeName = processNodeOrigin.getNodeName();
// String nodeType = processNodeOrigin.getNodeType();
// String xmlNodeId = processNodeOrigin.getXmlNodeId();
// String xmlSourceRef = processNodeOrigin.getXmlSourceRef();
// String xmlTargetRef = processNodeOrigin.getXmlTargetRef();
// if (flowElement instanceof UserTask) {
// UserTask userTask = (UserTask)flowElement;
// nodeType = "userTask";
// nodeName = userTask.getName();
// xmlNodeId = userTask.getId();
// }else
// if (flowElement instanceof SequenceFlow) {
// SequenceFlow sequenceFlow = (SequenceFlow)flowElement;
// nodeType = "sequenceFlow";
// nodeName = sequenceFlow.getName();
// xmlNodeId = sequenceFlow.getId();
// xmlSourceRef = sequenceFlow.getSourceRef();
// xmlTargetRef = sequenceFlow.getTargetRef();
// }else
// if (flowElement instanceof ExclusiveGateway) {
// ExclusiveGateway gateway = (ExclusiveGateway)flowElement;
// nodeType = "gateway";
// nodeName = gateway.getName();
// xmlNodeId = gateway.getId();
// gatewayIdList.add(xmlNodeId);
// }else
// if (flowElement instanceof SubProcess) {
// SubProcess subProcess = (SubProcess)flowElement;
// Collection<FlowElement> flowElements1 = subProcess.getFlowElements();
//
// nodeType = "subProcess";
// nodeName = subProcess.getName();
// xmlNodeId = subProcess.getId();
// gatewayIdList.add(xmlNodeId);
// }else {
// continue;
// }
// processNodeOrigin.setProcessDefinitionId(processDefinitionId);
// processNodeOrigin.setNodeName(nodeName);
// processNodeOrigin.setNodeType(nodeType);
// processNodeOrigin.setXmlNodeId(xmlNodeId);
// processNodeOrigin.setXmlSourceRef(xmlSourceRef);
// processNodeOrigin.setXmlTargetRef(xmlTargetRef);
// processNodeOrigin.setSort(sort++);
// processNodeOrigin.setIsApprovalNode(YesOrNoEnum.NO.getInteger());
// processNodeOrigin.setIsCanDeleted(YesOrNoEnum.NO.getInteger());
// processNodeOriginList.add(processNodeOrigin);
//}
List<String> approvalNodeIdList = processNodeOriginList.stream()
.filter(item -> gatewayIdList.contains(item.getXmlTargetRef()))
.map(LawsProcessNodeOrigin::getXmlSourceRef)
.collect(Collectors.toList());
for (LawsProcessNodeOrigin processNodeOrigin : processNodeOriginList) {
String xmlNodeId = processNodeOrigin.getXmlNodeId();
if (approvalNodeIdList.contains(xmlNodeId) ){
processNodeOrigin.setIsApprovalNode(YesOrNoEnum.YES.getInteger());
}
}
processNodeOriginMapper.insertList(processNodeOriginList);
}
private List<LawsProcessNodeOrigin> handlerLawsProcessNodeOrigin(
Collection<FlowElement> flowElements,
int sort,
List<String> gatewayIdList,
String processDefinitionId) {
List<LawsProcessNodeOrigin> processNodeOriginList = new ArrayList<>();
for (FlowElement flowElement : flowElements) {
LawsProcessNodeOrigin processNodeOrigin = new LawsProcessNodeOrigin();
String nodeName = processNodeOrigin.getNodeName();
String nodeType = processNodeOrigin.getNodeType();
String xmlNodeId = processNodeOrigin.getXmlNodeId();
String xmlSourceRef = processNodeOrigin.getXmlSourceRef();
String xmlTargetRef = processNodeOrigin.getXmlTargetRef();
if (flowElement instanceof UserTask) {
UserTask userTask = (UserTask) flowElement;
nodeType = "userTask";
nodeName = userTask.getName();
xmlNodeId = userTask.getId();
} else if (flowElement instanceof SequenceFlow) {
SequenceFlow sequenceFlow = (SequenceFlow) flowElement;
nodeType = "sequenceFlow";
nodeName = sequenceFlow.getName();
xmlNodeId = sequenceFlow.getId();
xmlSourceRef = sequenceFlow.getSourceRef();
xmlTargetRef = sequenceFlow.getTargetRef();
} else if (flowElement instanceof ExclusiveGateway) {
ExclusiveGateway gateway = (ExclusiveGateway) flowElement;
nodeType = "gateway";
nodeName = gateway.getName();
xmlNodeId = gateway.getId();
gatewayIdList.add(xmlNodeId);
} else if (flowElement instanceof SubProcess) {
SubProcess subProcess = (SubProcess) flowElement;
Collection<FlowElement> flowElements1 = subProcess.getFlowElements();
List<LawsProcessNodeOrigin> processNodeOrigins = handlerLawsProcessNodeOrigin(flowElements1, sort, gatewayIdList, processDefinitionId);
processNodeOriginList.addAll(processNodeOrigins);
nodeType = "subProcess";
nodeName = subProcess.getName();
xmlNodeId = subProcess.getId();
} else if (flowElement instanceof EndEvent) {
EndEvent endEvent = (EndEvent) flowElement;
nodeType = "endEvent";
nodeName = endEvent.getName();
xmlNodeId = endEvent.getId();
} else {
continue;
}
processNodeOrigin.setProcessDefinitionId(processDefinitionId);
processNodeOrigin.setNodeName(nodeName);
processNodeOrigin.setNodeType(nodeType);
processNodeOrigin.setXmlNodeId(xmlNodeId);
processNodeOrigin.setXmlSourceRef(xmlSourceRef);
processNodeOrigin.setXmlTargetRef(xmlTargetRef);
processNodeOrigin.setSort(sort++);
processNodeOrigin.setIsApprovalNode(YesOrNoEnum.NO.getInteger());
processNodeOrigin.setIsCanDeleted(YesOrNoEnum.NO.getInteger());
processNodeOriginList.add(processNodeOrigin);
}
return processNodeOriginList;
}
/**
* 获取流程图像,已执行节点和流程线高亮显示
*/
@@ -0,0 +1,30 @@
package com.jero.modules.activiti.vo;
import com.baomidou.mybatisplus.annotation.TableField;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
/**
* @author liJiaRao
* @date 2023-09-26 15:30
*/
@Data
public class AddTaskVO {
/**
* 流程定义id
*/
@ApiModelProperty(value = "流程定义id")
private String processDefinitionId;
/**
* xml节点Id
*/
@ApiModelProperty(value = "xml节点Id")
private String xmlNodeId;
/**
* 节点名称
*/
@TableField(value = "node_name")
@ApiModelProperty(value = "节点名称")
private String nodeName;
}
@@ -0,0 +1,41 @@
package com.jero.modules.activiti.vo;
import com.baomidou.mybatisplus.annotation.IdType;
import com.baomidou.mybatisplus.annotation.TableField;
import com.baomidou.mybatisplus.annotation.TableId;
import com.baomidou.mybatisplus.annotation.TableName;
import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
/**
*流程节点关联用户部门表
*@author liJiaRao
*@date 2023-09-26 15:12
*/
@Data
public class LawsProcessNodeLinkVO {
/**
* 主键id
*/
@ApiModelProperty(value = "主键id")
private String id;
/**
* 流程节点id
*/
@ApiModelProperty(value = "流程节点id")
private String processNodeId;
/**
* 类型(1-用户、2-部门)
*/
@ApiModelProperty(value = "类型(1-用户、2-部门)")
private Integer type;
/**
* 用户id,部门id
*/
@ApiModelProperty(value = "用户id,部门id")
private String userDepartId;
}