add 工作中心代码(未完成)

This commit is contained in:
lijiarao
2023-10-16 18:02:13 +08:00
parent b5064a13a8
commit fe858b0333
17 changed files with 553 additions and 9 deletions
@@ -7,13 +7,12 @@ import com.fasterxml.jackson.databind.node.ObjectNode;
import com.jero.common.api.vo.Result;
import com.jero.common.aspect.annotation.DictPoint;
import com.jero.common.constant.enums.LanguageEnum;
import com.jero.common.system.vo.LoginUser;
import com.jero.common.util.MessageUtils;
import com.jero.modules.activiti.entity.ProcessAll;
import com.jero.modules.activiti.entity.ProcessModelNode;
import com.jero.modules.activiti.entity.ProcessNode;
import com.jero.modules.activiti.service.ProcessNodeLinkService;
import com.jero.modules.activiti.service.ProcessNodeService;
import com.jero.modules.activiti.service.ProcessModelNodeService;
import com.jero.modules.activiti.service.ProcessService;
import com.jero.modules.activiti.service.*;
import com.jero.modules.laws.common.constant.ResultCommon;
import io.swagger.annotations.*;
import lombok.extern.slf4j.Slf4j;
@@ -28,6 +27,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.apache.shiro.SecurityUtils;
import org.springframework.beans.BeanUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.util.CollectionUtils;
@@ -61,11 +61,16 @@ public class ActivitiController {
private ProcessModelNodeService modelNodeService;
@Resource
private ProcessNodeLinkService processNodeLinkService;
@Resource
private ProcessAllService processAllService;
@ApiOperation(value="启动流程")
@PostMapping("/start")
public Result<Map<String, String>> start(@RequestBody Map<String,Object> map) {
String key = map.get("key").toString();
String prcName = map.get("prcName").toString();
String prcNum = map.get("prcNum").toString();
Date dueTime = (Date) map.get("dueTime");
// 1、创建ProcessEngine
ProcessEngine processEngine = ProcessEngines.getDefaultProcessEngine();
// 2、获取RunTimeService
@@ -74,12 +79,23 @@ public class ActivitiController {
// 3、根据流程key启动流程
ProcessInstance processInstance = runtimeService
.startProcessInstanceByKey(key, map);
String processInstanceId = processInstance.getId();
//更新流程总表
ProcessAll process = processAllService.getByProcessInstanceId(processInstanceId);
LoginUser loginUser = (LoginUser) SecurityUtils.getSubject().getPrincipal();
process.setCreateUserId(loginUser.getId());
process.setPrcName(prcName);
process.setPrcNum(prcNum);
process.setDueTime(dueTime);
process.setProjectId("业务id");
processAllService.updateById(process);
String processDefinitionId = processInstance.getProcessDefinitionId();
// 输出内容
Map<String, String> map1 = new HashMap<>();
map1.put("流程Id", processInstance.getDeploymentId());
map1.put("流程定义id", processDefinitionId);
map1.put("流程实例id", processInstance.getId());
map1.put("流程实例id", processInstanceId);
map1.put("当前活动Id", processInstance.getActivityId());
String mainDrafter = map.get("mainDrafter").toString();
@@ -10,6 +10,8 @@ import com.jero.common.util.MessageUtils;
import com.jero.modules.activiti.entity.ProcessModelNode;
import com.jero.modules.activiti.listener.CompleteListener;
import com.jero.modules.activiti.listener.CreateListener;
import com.jero.modules.activiti.listener.EndListener;
import com.jero.modules.activiti.listener.StartListener;
import com.jero.modules.activiti.service.ProcessNodeService;
import com.jero.modules.activiti.service.ProcessModelNodeService;
import com.jero.modules.activiti.util.CreatedTools;
@@ -26,6 +28,7 @@ import org.activiti.bpmn.model.Process;
import org.activiti.editor.constants.ModelDataJsonConstants;
import org.activiti.editor.language.json.converter.BpmnJsonConverter;
import org.activiti.engine.RepositoryService;
import org.activiti.engine.delegate.BaseExecutionListener;
import org.activiti.engine.delegate.TaskListener;
import org.activiti.engine.repository.*;
import org.apache.commons.lang3.StringUtils;
@@ -90,7 +93,19 @@ public class ModelerController {
repositoryService.saveModel(model);
String modelId = model.getId();
Process mainProcess = bpmnModel.getMainProcess();
//向所有userTask节点增加创建和完成时任务监听器
List<ActivitiListener> executionListeners = mainProcess.getExecutionListeners();
ActivitiListener startListener = new ActivitiListener();
startListener.setEvent(BaseExecutionListener.EVENTNAME_START);
startListener.setImplementationType("class");
startListener.setImplementation(StartListener.class.getName());
executionListeners.add(startListener);
ActivitiListener endListener = new ActivitiListener();
endListener.setEvent(BaseExecutionListener.EVENTNAME_END);
endListener.setImplementationType("class");
endListener.setImplementation(EndListener.class.getName());
executionListeners.add(endListener);
mainProcess.setExecutionListeners(executionListeners);
//向所有userTask节点增加创建和完成时任务监听器工作
Collection<FlowElement> flowElements = mainProcess.getFlowElements();
for (FlowElement flowElement : flowElements) {
if (flowElement instanceof UserTask) {
@@ -0,0 +1,18 @@
package com.jero.modules.activiti.controller;
import io.swagger.annotations.Api;
import lombok.extern.slf4j.Slf4j;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
/**
* @author liJiaRao
* @date 2023-10-16 15:50
*/
@Slf4j
@RestController
@Api(tags = "工作中心")
@RequestMapping("/workCenter")
public class WorkCenterController {
}
@@ -0,0 +1,120 @@
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-10-16 15:49
*/
@ApiModel(description="流程总表")
@Data
@TableName(value = "process_all")
public class ProcessAll {
@TableId(value = "id", type = IdType.ASSIGN_ID)
@ApiModelProperty(value="")
private String id;
/**
* 流程名称
*/
@ApiModelProperty(value="流程名称")
private String prcName;
/**
* 流程实例id
*/
@ApiModelProperty(value="流程实例id")
private String processInstanceId;
/**
* 流程描述
*/
@ApiModelProperty(value="流程描述")
private String prcMes;
/**
* 流程编号
*/
@ApiModelProperty(value="流程编号")
private String prcNum;
/**
* 创建人id
*/
@ApiModelProperty(value="创建人id")
private String createUserId;
/**
* 流程类型
*/
@ApiModelProperty(value="流程类型")
private Integer prcType;
/**
* 流程状态
*/
@ApiModelProperty(value="流程状态(1未完成,2已完成,3已撤回)")
private Integer prcStatus;
/**
* 发起人名称
*/
@ApiModelProperty(value="发起人名称")
private String createUserName;
/**
* json信息
*/
@ApiModelProperty(value="json信息")
private String mes;
/**
* 创建时间
*/
@ApiModelProperty(value="创建时间")
private Date createTime;
/**
* 完成时间
*/
@ApiModelProperty(value="完成时间")
private Date endTime;
/**
* 耗时
*/
@ApiModelProperty(value="耗时")
private String overTime;
/**
* 截止时间
*/
@ApiModelProperty(value="截止时间")
private Date dueTime;
/**
* 项目id
*/
@ApiModelProperty(value="项目id")
private String projectId;
/**
* 项目名称
*/
@ApiModelProperty(value="项目名称")
private String projectName;
/**
* 流程名称(英文)
*/
@ApiModelProperty(value="流程名称(英文)")
private String prcNameEn;
}
@@ -0,0 +1,128 @@
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-10-16 15:49
*/
/**
* 流程审批记录表
*/
@ApiModel(description="流程审批记录表")
@Data
@TableName(value = "process_approval_record")
public class ProcessApprovalRecord {
/**
* 主键
*/
@TableId(value = "id", type = IdType.ASSIGN_ID)
@ApiModelProperty(value="主键")
private String id;
/**
* 任务id
*/
@TableField(value = "task_id")
@ApiModelProperty(value="任务id")
private String taskId;
/**
* 任务名称
*/
@TableField(value = "task_name")
@ApiModelProperty(value="任务名称")
private String taskName;
/**
* 流程实例id
*/
@TableField(value = "process_instance_id")
@ApiModelProperty(value="流程实例id")
private String processInstanceId;
/**
* 资源类型
*/
@TableField(value = "msg_type")
@ApiModelProperty(value="资源类型")
private String msgType;
/**
* 处理人id
*/
@TableField(value = "user_id")
@ApiModelProperty(value="处理人id")
private String userId;
/**
* 信息
*/
@TableField(value = "mesg")
@ApiModelProperty(value="信息")
private String mesg;
/**
* 完成注记(0未完成,1完成)
*/
@TableField(value = "finish_flag")
@ApiModelProperty(value="完成注记(0未完成,1完成)")
private Integer finishFlag;
/**
* 项目id
*/
@TableField(value = "project_id")
@ApiModelProperty(value="项目id")
private String projectId;
/**
* 审批意见(0同意,1不同意)
*/
@TableField(value = "commit_flag")
@ApiModelProperty(value="审批意见(0同意,1不同意)")
private Integer commitFlag;
/**
* 审批内容
*/
@TableField(value = "commit_text")
@ApiModelProperty(value="审批内容")
private String commitText;
/**
* 流程名称
*/
@TableField(value = "prc_name")
@ApiModelProperty(value="流程名称")
private String prcName;
/**
* 创建时间
*/
@TableField(value = "create_time")
@ApiModelProperty(value="创建时间")
private Date createTime;
/**
* 更新时间
*/
@TableField(value = "update_time")
@ApiModelProperty(value="更新时间")
private Date updateTime;
/**
* 完成时间
*/
@TableField(value = "end_time")
@ApiModelProperty(value="完成时间")
private Date endTime;
}
@@ -0,0 +1,24 @@
package com.jero.modules.activiti.enums;
import lombok.AllArgsConstructor;
import lombok.Getter;
/**
* 流程状态
* @author liJiaRao
* @date 2023-10-16 16:05
*/
@Getter
@AllArgsConstructor
public enum ProcessStatusEnum {
/**
* A
*/
INCOMPLETE("未完成", 1),
COMPLETED("已完成", 2),
WITHDRAWN("已撤回", 3);
private String name;
private Integer value;
}
@@ -0,0 +1,39 @@
package com.jero.modules.activiti.enums;
import lombok.AllArgsConstructor;
import lombok.Getter;
/**
* @author liJiaRao
* @date 2023-10-16 16:05
*/
@Getter
@AllArgsConstructor
public enum ProcessTypeEnum {
/**
* A
*/
A("企标制修订流程", 1,"Process_17bj7d9");
private String name;
private Integer value;
private String key;
public static String getNameByValue(Integer value) {
for (ProcessTypeEnum enumObject : values()) {
if (enumObject.getValue().equals(value)) {
return enumObject.getName();
}
}
return null;
}
public static Integer getValueByKey(String key) {
for (ProcessTypeEnum enumObject : values()) {
if (enumObject.getKey().equals(key)) {
return enumObject.getValue();
}
}
return null;
}
}
@@ -1,5 +1,8 @@
package com.jero.modules.activiti.listener;
import com.jero.modules.activiti.service.ProcessAllService;
import com.jero.modules.activiti.service.ProcessApprovalRecordService;
import com.jero.modules.activiti.util.SpringContextUtil;
import org.activiti.bpmn.model.ActivitiListener;
import java.util.Date;
@@ -20,6 +23,11 @@ import org.activiti.engine.task.IdentityLink;
public class CreateListener implements TaskListener {
@Override
public void notify(DelegateTask delegateTask) {
//流程信息
ProcessAllService processAllService = SpringContextUtil.getBean(ProcessAllService.class);
//流程审批信息
ProcessApprovalRecordService recordService = SpringContextUtil.getBean(ProcessApprovalRecordService.class);
String id = delegateTask.getId();
String name = delegateTask.getName();
String description = delegateTask.getDescription();
@@ -1,15 +1,17 @@
package com.jero.modules.activiti.listener;
import org.activiti.engine.delegate.DelegateExecution;
import org.activiti.engine.delegate.DelegateTask;
import org.activiti.engine.delegate.ExecutionListener;
import org.activiti.engine.delegate.TaskListener;
/**
* @author liJiaRao
* @date 2023-10-13 16:43
*/
public class EndListener implements TaskListener {
public class EndListener implements ExecutionListener {
@Override
public void notify(DelegateTask delegateTask) {
public void notify(DelegateExecution execution) {
}
}
@@ -0,0 +1,52 @@
package com.jero.modules.activiti.listener;
import java.util.List;
import com.jero.modules.activiti.entity.ProcessAll;
import com.jero.modules.activiti.enums.ProcessStatusEnum;
import com.jero.modules.activiti.enums.ProcessTypeEnum;
import com.jero.modules.activiti.service.ProcessAllService;
import com.jero.modules.activiti.service.ProcessApprovalRecordService;
import com.jero.modules.activiti.util.SpringContextUtil;
import org.activiti.bpmn.model.ActivitiListener;
import org.activiti.bpmn.model.FlowElement;
import org.activiti.engine.*;
import org.activiti.engine.delegate.DelegateExecution;
import org.activiti.engine.delegate.DelegateTask;
import org.activiti.engine.delegate.ExecutionListener;
import org.activiti.engine.delegate.TaskListener;
import org.activiti.engine.repository.ProcessDefinition;
import org.activiti.engine.runtime.NativeProcessInstanceQuery;
import org.activiti.engine.runtime.ProcessInstance;
/**
* @author liJiaRao
* @date 2023-10-13 16:43
*/
public class StartListener implements ExecutionListener {
@Override
public void notify(DelegateExecution execution) {
//流程信息
ProcessAllService processAllService = SpringContextUtil.getBean(ProcessAllService.class);
//流程审批信息
ProcessApprovalRecordService recordService = SpringContextUtil.getBean(ProcessApprovalRecordService.class);
String id = execution.getId();
String processInstanceId = execution.getProcessInstanceId();
String processDefinitionId = execution.getProcessDefinitionId();
ProcessEngine processEngine = ProcessEngines.getDefaultProcessEngine();
RepositoryService repositoryService = processEngine.getRepositoryService();
ProcessDefinition processDefinition = repositoryService.getProcessDefinition(processDefinitionId);
String name = processDefinition.getName();
String key = processDefinition.getKey();
ProcessAll processAll = new ProcessAll();
processAll.setProcessInstanceId(processInstanceId);
processAll.setPrcType(ProcessTypeEnum.getValueByKey(key));
processAll.setPrcStatus(ProcessStatusEnum.INCOMPLETE.getValue());
processAllService.save(processAll);
}
}
@@ -0,0 +1,12 @@
package com.jero.modules.activiti.mapper;
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import com.jero.modules.activiti.entity.ProcessAll;
/**
*
*@author liJiaRao
*@date 2023-10-16 15:49
*/
public interface ProcessAllMapper extends BaseMapper<ProcessAll> {
}
@@ -0,0 +1,12 @@
package com.jero.modules.activiti.mapper;
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import com.jero.modules.activiti.entity.ProcessApprovalRecord;
/**
*
*@author liJiaRao
*@date 2023-10-16 15:49
*/
public interface ProcessApprovalRecordMapper extends BaseMapper<ProcessApprovalRecord> {
}
@@ -0,0 +1,29 @@
<?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.ProcessAllMapper">
<resultMap id="BaseResultMap" type="com.jero.modules.activiti.entity.ProcessAll">
<!--@mbg.generated-->
<!--@Table process_all-->
<id column="id" jdbcType="VARCHAR" property="id" />
<result column="prc_name" jdbcType="VARCHAR" property="prcName" />
<result column="process_instance_id" jdbcType="VARCHAR" property="processInstanceId" />
<result column="prc_mes" jdbcType="VARCHAR" property="prcMes" />
<result column="prc_num" jdbcType="VARCHAR" property="prcNum" />
<result column="create_user_id" jdbcType="VARCHAR" property="createUserId" />
<result column="prc_type" jdbcType="VARCHAR" property="prcType" />
<result column="create_user_name" jdbcType="VARCHAR" property="createUserName" />
<result column="mes" jdbcType="LONGVARCHAR" property="mes" />
<result column="create_time" jdbcType="TIMESTAMP" property="createTime" />
<result column="end_time" jdbcType="TIMESTAMP" property="endTime" />
<result column="over_time" jdbcType="VARCHAR" property="overTime" />
<result column="due_time" jdbcType="TIMESTAMP" property="dueTime" />
<result column="project_id" jdbcType="VARCHAR" property="projectId" />
<result column="project_name" jdbcType="VARCHAR" property="projectName" />
<result column="prc_name_en" jdbcType="VARCHAR" property="prcNameEn" />
</resultMap>
<sql id="Base_Column_List">
<!--@mbg.generated-->
id, prc_name, process_instance_id, prc_mes, prc_num, create_user_id, prc_type, create_user_name,
mes, create_time, end_time, over_time, due_time, project_id, project_name, prc_name_en
</sql>
</mapper>
@@ -0,0 +1,28 @@
<?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.ProcessApprovalRecordMapper">
<resultMap id="BaseResultMap" type="com.jero.modules.activiti.entity.ProcessApprovalRecord">
<!--@mbg.generated-->
<!--@Table process_approval_record-->
<id column="id" jdbcType="VARCHAR" property="id" />
<result column="task_id" jdbcType="VARCHAR" property="taskId" />
<result column="task_name" jdbcType="VARCHAR" property="taskName" />
<result column="process_instance_id" jdbcType="VARCHAR" property="processInstanceId" />
<result column="msg_type" jdbcType="VARCHAR" property="msgType" />
<result column="user_id" jdbcType="VARCHAR" property="userId" />
<result column="mesg" jdbcType="LONGVARCHAR" property="mesg" />
<result column="finish_flag" jdbcType="TINYINT" property="finishFlag" />
<result column="project_id" jdbcType="VARCHAR" property="projectId" />
<result column="commit_flag" jdbcType="TINYINT" property="commitFlag" />
<result column="commit_text" jdbcType="VARCHAR" property="commitText" />
<result column="prc_name" jdbcType="VARCHAR" property="prcName" />
<result column="create_time" jdbcType="TIMESTAMP" property="createTime" />
<result column="update_time" jdbcType="TIMESTAMP" property="updateTime" />
<result column="end_time" jdbcType="TIMESTAMP" property="endTime" />
</resultMap>
<sql id="Base_Column_List">
<!--@mbg.generated-->
id, task_id, task_name, process_instance_id, msg_type, user_id, mesg, finish_flag,
project_id, commit_flag, commit_text, prc_name, create_time, update_time, end_time
</sql>
</mapper>
@@ -0,0 +1,23 @@
package com.jero.modules.activiti.service;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
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.ProcessAllMapper;
import com.jero.modules.activiti.entity.ProcessAll;
/**
*
*@author liJiaRao
*@date 2023-10-16 15:49
*/
@Service
public class ProcessAllService extends ServiceImpl<ProcessAllMapper, ProcessAll> {
public ProcessAll getByProcessInstanceId(String processInstanceId){
LambdaQueryWrapper<ProcessAll> wrapper = new LambdaQueryWrapper<>();
wrapper.eq(ProcessAll::getProcessInstanceId,processInstanceId);
return this.getOne(wrapper);
}
}
@@ -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.ProcessApprovalRecordMapper;
import com.jero.modules.activiti.entity.ProcessApprovalRecord;
/**
*
*@author liJiaRao
*@date 2023-10-16 15:49
*/
@Service
public class ProcessApprovalRecordService extends ServiceImpl<ProcessApprovalRecordMapper, ProcessApprovalRecord> {
}