From 0ef58d2f96367e71c27dfcc44b2c6787cedb8316 Mon Sep 17 00:00:00 2001 From: lijiarao Date: Tue, 26 Sep 2023 18:06:28 +0800 Subject: [PATCH] =?UTF-8?q?update=20=E6=B5=81=E7=A8=8B=E6=96=B0=E5=A2=9E?= =?UTF-8?q?=E8=8A=82=E7=82=B9?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- db/流程.sql | 24 +- db/流程图修改.txt | 6 + .../activiti/controller/AController.java | 88 ++++-- .../activiti/entity/LawsProcessNode.java | 97 +++++++ .../activiti/entity/LawsProcessNodeLink.java | 47 +++ .../entity/LawsProcessNodeOrigin.java | 2 +- .../mapper/LawsProcessNodeLinkMapper.java | 11 + .../mapper/LawsProcessNodeMapper.java | 11 + .../mapper/LawsProcessNodeOriginMapper.java | 11 +- .../mapper/xml/LawsProcessNodeLinkMapper.xml | 16 ++ .../mapper/xml/LawsProcessNodeMapper.xml | 24 ++ .../xml/LawsProcessNodeOriginMapper.xml | 55 ++-- .../service/LawsProcessNodeLinkService.java | 17 ++ .../service/LawsProcessNodeOriginService.java | 267 ++++++++++++++++++ .../service/LawsProcessNodeService.java | 17 ++ .../activiti/service/ProcessService.java | 4 +- .../service/impl/ProcessServiceImpl.java | 211 +------------- .../jero/modules/activiti/vo/AddTaskVO.java | 30 ++ .../activiti/vo/LawsProcessNodeLinkVO.java | 41 +++ 19 files changed, 703 insertions(+), 276 deletions(-) create mode 100644 db/流程图修改.txt create mode 100644 laws-modules/src/main/java/com/jero/modules/activiti/entity/LawsProcessNode.java create mode 100644 laws-modules/src/main/java/com/jero/modules/activiti/entity/LawsProcessNodeLink.java create mode 100644 laws-modules/src/main/java/com/jero/modules/activiti/mapper/LawsProcessNodeLinkMapper.java create mode 100644 laws-modules/src/main/java/com/jero/modules/activiti/mapper/LawsProcessNodeMapper.java create mode 100644 laws-modules/src/main/java/com/jero/modules/activiti/mapper/xml/LawsProcessNodeLinkMapper.xml create mode 100644 laws-modules/src/main/java/com/jero/modules/activiti/mapper/xml/LawsProcessNodeMapper.xml create mode 100644 laws-modules/src/main/java/com/jero/modules/activiti/service/LawsProcessNodeLinkService.java create mode 100644 laws-modules/src/main/java/com/jero/modules/activiti/service/LawsProcessNodeOriginService.java create mode 100644 laws-modules/src/main/java/com/jero/modules/activiti/service/LawsProcessNodeService.java create mode 100644 laws-modules/src/main/java/com/jero/modules/activiti/vo/AddTaskVO.java create mode 100644 laws-modules/src/main/java/com/jero/modules/activiti/vo/LawsProcessNodeLinkVO.java diff --git a/db/流程.sql b/db/流程.sql index a166c0dc..6d997a6c 100644 --- a/db/流程.sql +++ b/db/流程.sql @@ -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 = '流程节点'; \ No newline at end of file +) comment = '流程节点关联用户部门表'; \ No newline at end of file diff --git a/db/流程图修改.txt b/db/流程图修改.txt new file mode 100644 index 00000000..fd0ef76c --- /dev/null +++ b/db/流程图修改.txt @@ -0,0 +1,6 @@ +第二行替换为: +第三行修改为:isExecutable="true" +bpmn: 替换为空 +camunda: 替换为 activiti: +dc:Bounds 替换为 omgdc:Bounds +di:waypoint 替换为 omgdi:waypoint diff --git a/laws-modules/src/main/java/com/jero/modules/activiti/controller/AController.java b/laws-modules/src/main/java/com/jero/modules/activiti/controller/AController.java index b98ceb8b..7bb7cfb7 100644 --- a/laws-modules/src/main/java/com/jero/modules/activiti/controller/AController.java +++ b/laws-modules/src/main/java/com/jero/modules/activiti/controller/AController.java @@ -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> 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> start(@RequestBody Map 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 vars = new HashMap<>(); - vars.put("mainDrafter", "admin"); // 3、根据流程定义Id启动流程 ProcessInstance processInstance = runtimeService .startProcessInstanceByKey(key, map); - + String processDefinitionId = processInstance.getProcessDefinitionId(); // 输出内容 Map 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 processNodeOriginLambdaQueryWrapper = new LambdaQueryWrapper<>(); + processNodeOriginLambdaQueryWrapper.eq(LawsProcessNodeOrigin::getNodeType,"userTask") + .orderByAsc(LawsProcessNodeOrigin::getSort); + + List lawsProcessNodeOrigins = processNodeOriginService.list(processNodeOriginLambdaQueryWrapper); + List 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>> 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 claim(@RequestBody Map 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 complete(@RequestBody Map map) { String taskId = map.get("taskId").toString(); @@ -197,6 +250,7 @@ public class AController { * @param loginName * @return */ + @ApiOperation(value="加签/委托") @GetMapping("/delegateTask") public Result 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 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; } diff --git a/laws-modules/src/main/java/com/jero/modules/activiti/entity/LawsProcessNode.java b/laws-modules/src/main/java/com/jero/modules/activiti/entity/LawsProcessNode.java new file mode 100644 index 00000000..21f26cdf --- /dev/null +++ b/laws-modules/src/main/java/com/jero/modules/activiti/entity/LawsProcessNode.java @@ -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; +} \ No newline at end of file diff --git a/laws-modules/src/main/java/com/jero/modules/activiti/entity/LawsProcessNodeLink.java b/laws-modules/src/main/java/com/jero/modules/activiti/entity/LawsProcessNodeLink.java new file mode 100644 index 00000000..95bdf1a1 --- /dev/null +++ b/laws-modules/src/main/java/com/jero/modules/activiti/entity/LawsProcessNodeLink.java @@ -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; +} \ No newline at end of file diff --git a/laws-modules/src/main/java/com/jero/modules/activiti/entity/LawsProcessNodeOrigin.java b/laws-modules/src/main/java/com/jero/modules/activiti/entity/LawsProcessNodeOrigin.java index bd3bc19c..4e737d2f 100644 --- a/laws-modules/src/main/java/com/jero/modules/activiti/entity/LawsProcessNodeOrigin.java +++ b/laws-modules/src/main/java/com/jero/modules/activiti/entity/LawsProcessNodeOrigin.java @@ -12,7 +12,7 @@ import lombok.Data; /** *流程节点_来源 *@author liJiaRao - *@date 2023-09-25 15:17 + *@date 2023-09-26 15:12 */ @ApiModel(description = "流程节点_来源") @Data diff --git a/laws-modules/src/main/java/com/jero/modules/activiti/mapper/LawsProcessNodeLinkMapper.java b/laws-modules/src/main/java/com/jero/modules/activiti/mapper/LawsProcessNodeLinkMapper.java new file mode 100644 index 00000000..24dd654e --- /dev/null +++ b/laws-modules/src/main/java/com/jero/modules/activiti/mapper/LawsProcessNodeLinkMapper.java @@ -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 { +} \ No newline at end of file diff --git a/laws-modules/src/main/java/com/jero/modules/activiti/mapper/LawsProcessNodeMapper.java b/laws-modules/src/main/java/com/jero/modules/activiti/mapper/LawsProcessNodeMapper.java new file mode 100644 index 00000000..b6872e47 --- /dev/null +++ b/laws-modules/src/main/java/com/jero/modules/activiti/mapper/LawsProcessNodeMapper.java @@ -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 { +} \ No newline at end of file diff --git a/laws-modules/src/main/java/com/jero/modules/activiti/mapper/LawsProcessNodeOriginMapper.java b/laws-modules/src/main/java/com/jero/modules/activiti/mapper/LawsProcessNodeOriginMapper.java index 9a9fa9a2..ef2b02e8 100644 --- a/laws-modules/src/main/java/com/jero/modules/activiti/mapper/LawsProcessNodeOriginMapper.java +++ b/laws-modules/src/main/java/com/jero/modules/activiti/mapper/LawsProcessNodeOriginMapper.java @@ -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 { - int insertList(@Param("list")List list); - - + int insertList(@Param("list") List list); } \ No newline at end of file diff --git a/laws-modules/src/main/java/com/jero/modules/activiti/mapper/xml/LawsProcessNodeLinkMapper.xml b/laws-modules/src/main/java/com/jero/modules/activiti/mapper/xml/LawsProcessNodeLinkMapper.xml new file mode 100644 index 00000000..c14ccc1a --- /dev/null +++ b/laws-modules/src/main/java/com/jero/modules/activiti/mapper/xml/LawsProcessNodeLinkMapper.xml @@ -0,0 +1,16 @@ + + + + + + + + + + + + + + id, process_node_id, `type`, user_depart_id + + \ No newline at end of file diff --git a/laws-modules/src/main/java/com/jero/modules/activiti/mapper/xml/LawsProcessNodeMapper.xml b/laws-modules/src/main/java/com/jero/modules/activiti/mapper/xml/LawsProcessNodeMapper.xml new file mode 100644 index 00000000..908a26ef --- /dev/null +++ b/laws-modules/src/main/java/com/jero/modules/activiti/mapper/xml/LawsProcessNodeMapper.xml @@ -0,0 +1,24 @@ + + + + + + + + + + + + + + + + + + + + + id, process_definition_id, node_name, is_approval_node, is_can_deleted, sort, create_by, + create_time, update_by, update_time, sys_code + + \ No newline at end of file diff --git a/laws-modules/src/main/java/com/jero/modules/activiti/mapper/xml/LawsProcessNodeOriginMapper.xml b/laws-modules/src/main/java/com/jero/modules/activiti/mapper/xml/LawsProcessNodeOriginMapper.xml index 33f29a66..3feed726 100644 --- a/laws-modules/src/main/java/com/jero/modules/activiti/mapper/xml/LawsProcessNodeOriginMapper.xml +++ b/laws-modules/src/main/java/com/jero/modules/activiti/mapper/xml/LawsProcessNodeOriginMapper.xml @@ -1,40 +1,31 @@ + + + + + + + + + + + + + + + + + + + - 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, + + 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 - - - - - - - - - - - - - - - - - @@ -55,7 +46,7 @@ update_time, sys_code )VALUES - + ( #{element.id}, #{element.processDefinitionId}, diff --git a/laws-modules/src/main/java/com/jero/modules/activiti/service/LawsProcessNodeLinkService.java b/laws-modules/src/main/java/com/jero/modules/activiti/service/LawsProcessNodeLinkService.java new file mode 100644 index 00000000..e5c1b59a --- /dev/null +++ b/laws-modules/src/main/java/com/jero/modules/activiti/service/LawsProcessNodeLinkService.java @@ -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 { + +} diff --git a/laws-modules/src/main/java/com/jero/modules/activiti/service/LawsProcessNodeOriginService.java b/laws-modules/src/main/java/com/jero/modules/activiti/service/LawsProcessNodeOriginService.java new file mode 100644 index 00000000..42673c15 --- /dev/null +++ b/laws-modules/src/main/java/com/jero/modules/activiti/service/LawsProcessNodeOriginService.java @@ -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 { + @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 flowElements = process.getFlowElements(); + List processNodeOriginList = new ArrayList<>(); + int sort = 1; + List gatewayIdList = new ArrayList<>(); + processNodeOriginList = handlerLawsProcessNodeOrigin(flowElements,sort,gatewayIdList,processDefinitionId); + List 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 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 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 incomingFlows = new ArrayList<>(); + SequenceFlow sequenceFlow = createSequenceFlow(originId, id); + process.addFlowElement(sequenceFlow); + incomingFlows.add(sequenceFlow); + gateway.setIncomingFlows(incomingFlows); + List 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 handlerLawsProcessNodeOrigin( + Collection flowElements, + int sort, + List gatewayIdList, + String processDefinitionId) { + List 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 flowElements1 = subProcess.getFlowElements(); + List 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; + } +} diff --git a/laws-modules/src/main/java/com/jero/modules/activiti/service/LawsProcessNodeService.java b/laws-modules/src/main/java/com/jero/modules/activiti/service/LawsProcessNodeService.java new file mode 100644 index 00000000..11130700 --- /dev/null +++ b/laws-modules/src/main/java/com/jero/modules/activiti/service/LawsProcessNodeService.java @@ -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 { + +} diff --git a/laws-modules/src/main/java/com/jero/modules/activiti/service/ProcessService.java b/laws-modules/src/main/java/com/jero/modules/activiti/service/ProcessService.java index 8164433b..07dee2b6 100644 --- a/laws-modules/src/main/java/com/jero/modules/activiti/service/ProcessService.java +++ b/laws-modules/src/main/java/com/jero/modules/activiti/service/ProcessService.java @@ -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); } diff --git a/laws-modules/src/main/java/com/jero/modules/activiti/service/impl/ProcessServiceImpl.java b/laws-modules/src/main/java/com/jero/modules/activiti/service/impl/ProcessServiceImpl.java index 9861d724..a43ae7ee 100644 --- a/laws-modules/src/main/java/com/jero/modules/activiti/service/impl/ProcessServiceImpl.java +++ b/laws-modules/src/main/java/com/jero/modules/activiti/service/impl/ProcessServiceImpl.java @@ -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 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 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 incomingFlows, List outgoingFlows) { - ExclusiveGateway gateway = new ExclusiveGateway(); - gateway.setId("Gateway_"+ UUID.randomUUID()); - gateway.setIncomingFlows(incomingFlows); - gateway.setOutgoingFlows(outgoingFlows); - return gateway; - } private List getHighLightedFlows(BpmnModel bpmnModel, ProcessDefinitionEntity processDefinitionEntity, List 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 flowElements = process.getFlowElements(); - List processNodeOriginList = new ArrayList<>(); - int sort = 1; - List 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 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 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 handlerLawsProcessNodeOrigin( - Collection flowElements, - int sort, - List gatewayIdList, - String processDefinitionId) { - List 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 flowElements1 = subProcess.getFlowElements(); - List 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; - } - /** * 获取流程图像,已执行节点和流程线高亮显示 */ diff --git a/laws-modules/src/main/java/com/jero/modules/activiti/vo/AddTaskVO.java b/laws-modules/src/main/java/com/jero/modules/activiti/vo/AddTaskVO.java new file mode 100644 index 00000000..4b13dddb --- /dev/null +++ b/laws-modules/src/main/java/com/jero/modules/activiti/vo/AddTaskVO.java @@ -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; +} diff --git a/laws-modules/src/main/java/com/jero/modules/activiti/vo/LawsProcessNodeLinkVO.java b/laws-modules/src/main/java/com/jero/modules/activiti/vo/LawsProcessNodeLinkVO.java new file mode 100644 index 00000000..77851346 --- /dev/null +++ b/laws-modules/src/main/java/com/jero/modules/activiti/vo/LawsProcessNodeLinkVO.java @@ -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; +} \ No newline at end of file