update 流程节点绑定审批人

This commit is contained in:
lijiarao
2023-10-16 15:35:59 +08:00
parent 2410acf525
commit 658a3d7656
31 changed files with 548 additions and 508 deletions
+84 -37
View File
@@ -1,44 +1,91 @@
DROP TABLE IF EXISTS laws_process_node_origin;
create table laws_process_node_origin
-- auto-generated definition
create table process_model_node
(
id varchar(36) not null comment '主键id'
primary key,
model_id varchar(64) null comment '模型id',
node_name varchar(50) null comment '节点名称',
node_type varchar(50) null comment '节点类型',
xml_sub_node_id varchar(50) null comment '子流程id',
xml_node_id varchar(50) null comment 'xml节点Id',
xml_source_ref varchar(50) null comment 'xml来源节点id',
xml_target_ref varchar(50) null comment 'xml目标节点id',
variable_type varchar(50) null comment '变量类型',
variable_name varchar(50) null comment '变量名称',
is_approval_node tinyint null comment '是否审批节点',
is_can_deleted tinyint null comment '是否可删除',
sort tinyint null comment '排序',
create_by varchar(36) null comment '创建人',
create_time datetime null comment '创建时间',
update_by varchar(36) null comment '更新人',
update_time datetime null comment '更新时间',
sys_code varchar(64) null comment '所属部门'
)
comment '流程模型节点表';
create table process_node
(
id varchar(36) not null comment '主键id'
primary key,
process_definition_id varchar(64) null comment '流程定义id',
node_name varchar(50) null comment '节点名称',
variable_type varchar(50) null comment '变量类型',
variable_name varchar(50) null comment '变量名称',
sort tinyint null comment '排序',
create_by varchar(36) null comment '创建人',
create_time datetime null comment '创建时间',
update_by varchar(36) null comment '更新人',
update_time datetime null comment '更新时间',
sys_code varchar(64) null comment '所属部门'
)
comment '流程定义节点表';
create table process_node_link
(
id varchar(36) not null primary key comment '主键id',
process_definition_id varchar(64) comment '流程定义id',
node_name varchar(50) comment '节点名称',
node_type varchar(50) comment '节点类型',
xml_node_id varchar(50) comment 'xml节点Id',
xml_source_ref varchar(50) comment 'xml来源节点id',
xml_target_ref varchar(50) comment 'xml目标节点id',
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 = '流程节点_来源';
process_node_id varchar(36) comment '流程节点id',
process_instance_id varchar(64) comment '流程实例id',
user_id varchar(36) comment '用户id'
) comment = '流程实例节点关联用户表';
DROP TABLE IF EXISTS laws_process_node;
create table laws_process_node
create table process_approval_record
(
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 = '流程节点';
id varchar(32) not null comment '主键'
primary key,
task_id varchar(64) comment '任务id',
task_name varchar(255) comment '任务名称',
process_instance_id varchar(64) comment '流程实例id',
msg_type varchar(120) comment '资源类型',
user_id varchar(32) comment '处理人id',
mesg longtext comment '信息',
finish_flag tinyint(4) comment '完成注记(0未完成,1完成)',
project_id varchar(32) comment '项目id',
commit_flag tinyint(4) comment '审批意见(0同意,1不同意)',
commit_text varchar(255) comment '审批内容',
prc_name varchar(255) comment '流程名称',
create_time datetime default current_timestamp comment '创建时间',
update_time datetime comment '更新时间',
end_time datetime comment '完成时间'
) comment '流程审批记录表';
DROP TABLE IF EXISTS laws_process_node_link;
create table laws_process_node_link
create table process_all
(
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 = '流程节点关联用户部门表';
id varchar(32) not null
primary key,
prc_name varchar(255) comment '流程名称',
process_instance_id varchar(64) comment '流程实例id',
prc_mes varchar(255) comment '流程描述',
prc_num varchar(50) comment '流程编号',
create_user_id varchar(50) comment '创建人id',
prc_type varchar(50) comment '流程类型',
create_user_name varchar(255) comment '发起人名称',
mes longtext comment 'json信息',
create_time datetime default current_timestamp comment '创建时间',
end_time datetime comment '完成时间',
over_time varchar(255) comment '耗时',
due_time datetime comment '截止时间',
project_id varchar(255) comment '项目id',
project_name varchar(255) comment '项目名称',
prc_name_en varchar(255) comment '流程名称(英文)'
) comment '流程总表';
@@ -289,6 +289,11 @@ public class SysBaseAPIFallback implements ISysBaseAPI {
return null;
}
@Override
public String translateUserRealNameFromTable(String id) {
return null;
}
@Override
public void sendEmailMsg(String email,String title,String content) {
// do other
@@ -138,4 +138,6 @@ public interface CommonAPI {
* @return JSONObject
*/
String queryTableDictTextByKey(String table,String text,String code, String key);
String translateUserRealNameFromTable(String id);
}
@@ -1,5 +1,6 @@
package com.jero.common.aspect;
import cn.hutool.json.JSONUtil;
import com.alibaba.fastjson.JSON;
import com.alibaba.fastjson.JSONObject;
import com.baomidou.mybatisplus.core.metadata.IPage;
@@ -52,6 +53,9 @@ public class DictAspect {
public void excudeService() {
// do other
}
@Pointcut("@annotation(com.jero.common.aspect.annotation.DictPoint)")
public void dictPointCut() {
}
@Around("excudeService()")
public Object doAround(ProceedingJoinPoint pjp) throws Throwable {
@@ -66,6 +70,19 @@ public class DictAspect {
return result;
}
@Around("dictPointCut()")
public Object arround(ProceedingJoinPoint point) throws Throwable {
long time1 = System.currentTimeMillis();
Object result = point.proceed();
long time2 = System.currentTimeMillis();
log.debug("获取JSON数据 耗时:" + (time2 - time1) + "ms");
long start = System.currentTimeMillis();
this.parseMethodDictText(result);
long end = System.currentTimeMillis();
log.debug("解析注入JSON数据 耗时" + (end - start) + "ms");
return result;
}
/**
* 本方法针对返回对象为Result 的IPage的分页列表数据进行动态字典注入
* 字典注入实现 通过对实体类添加注解@dict 来标识需要的字典内容,字典分为单字典code即可 table字典 code table text配合使用与原来jero的用法相同
@@ -396,7 +413,12 @@ public class DictAspect {
log.warn(e.getMessage());
}
}else {
tmpValue= commonAPI.translateDictFromTable(table,text,code,k.trim());
//处理用户要翻译为姓名加工号
if ("sys_user".equals(table)&&"realname".equals(text)&&"id".equals(code)){
tmpValue= commonAPI.translateUserRealNameFromTable(k.trim());
}else {
tmpValue= commonAPI.translateDictFromTable(table,text,code,k.trim());
}
}
}else {
String keyString = String.format(SYS_CACHE_DICT_S_S,code,k.trim());
@@ -413,5 +435,66 @@ public class DictAspect {
return tmpValue;
}
/**
* @param result
*/
private void parseMethodDictText(Object result) {
if (result instanceof Result) {
Object result1 = ((Result<Object>) result).getResult();
String jsonStr = JSONUtil.toJsonStr(result1);
if (JSONUtil.isTypeJSONObject(jsonStr)) {
JSONObject translate = translate(result1);
((Result<Object>) result).setResult(translate);
} else {
List<JSONObject> items = new ArrayList<>();
for (Object o : (List<Object>) result1) {
JSONObject translate = translate(o);
items.add(translate);
}
((Result<Object>) result).setResult(items);
}
}
}
/**
* @param record
* @return
*/
private JSONObject translate(Object record) {
ObjectMapper mapper = new ObjectMapper();
String json = "{}";
try {
//解决@JsonFormat注解解析不了的问题详见SysAnnouncement类的@JsonFormat
json = mapper.writeValueAsString(record);
} catch (JsonProcessingException e) {
log.error("json解析失败" + e.getMessage(), e);
}
JSONObject item = JSONObject.parseObject(json);
//update-begin--Author:scott -- Date:20190603 ----for:解决继承实体字段无法翻译问题------
//for (Field field : record.getClass().getDeclaredFields()) {
for (Field field : oConvertUtils.getAllFields(record)) {
//update-end--Author:scott -- Date:20190603 ----for:解决继承实体字段无法翻译问题------
if (field.getAnnotation(Dict.class) != null) {
String code = field.getAnnotation(Dict.class).dicCode();
String text = field.getAnnotation(Dict.class).dicText();
String table = field.getAnnotation(Dict.class).dictTable();
String key = String.valueOf(item.get(field.getName()));
//翻译字典值对应的txt
String textValue = translateDictValue(code, text, table, key);
log.debug(" 字典Val : " + textValue);
log.debug(" __翻译字典字段__ " + field.getName() + CommonConstant.DICT_TEXT_SUFFIX + " " + textValue);
item.put(field.getName() + CommonConstant.DICT_TEXT_SUFFIX, textValue);
}
//date类型默认转换string格式化日期
if (field.getType().getName().equals("java.util.Date") && field.getAnnotation(JsonFormat.class) == null && item.get(field.getName()) != null) {
SimpleDateFormat aDate = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
item.put(field.getName(), aDate.format(new Date((Long) item.get(field.getName()))));
}
}
return item;
}
}
@@ -0,0 +1,17 @@
package com.jero.common.aspect.annotation;
import java.lang.annotation.ElementType;
import java.lang.annotation.Retention;
import java.lang.annotation.RetentionPolicy;
import java.lang.annotation.Target;
/**
* 字典转换点注解
* 加到方法上,返回值会返回字典数据
* @author liJiaRao
* @date 2021-08-02 9:44
*/
@Target(ElementType.METHOD)
@Retention(RetentionPolicy.RUNTIME)
public @interface DictPoint {
}
@@ -168,4 +168,5 @@ public interface SysUserMapper extends BaseMapper<SysUser> {
List<SysUser> getUserListByDepIds(@Param("departIds") List<String> departIds);
String translateUserRealNameFromTable(@Param("id") String id);
}
@@ -215,4 +215,8 @@
</if>
</select>
<select id="translateUserRealNameFromTable" resultType="java.lang.String">
select concat(realname,'',username,'') from sys_user
where id = #{id}
</select>
</mapper>
@@ -1181,4 +1181,9 @@ public class SysBaseApiImpl implements ISysBaseAPI {
return dictService.queryTableDictTextByKey(table,text,code,key);
}
@Override
public String translateUserRealNameFromTable(String id) {
return userMapper.translateUserRealNameFromTable(id);
}
}
@@ -5,22 +5,22 @@ import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.fasterxml.jackson.databind.ObjectMapper;
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.util.MessageUtils;
import com.jero.modules.activiti.entity.ProcessModelNode;
import com.jero.modules.activiti.entity.ProcessNode;
import com.jero.modules.activiti.entity.ProcessNodeOrigin;
import com.jero.modules.activiti.service.LawsProcessNodeOriginService;
import com.jero.modules.activiti.service.LawsProcessNodeService;
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 io.swagger.annotations.Api;
import io.swagger.annotations.ApiOperation;
import io.swagger.annotations.ApiParam;
import com.jero.modules.laws.common.constant.ResultCommon;
import io.swagger.annotations.*;
import lombok.extern.slf4j.Slf4j;
import org.activiti.bpmn.converter.BpmnXMLConverter;
import org.activiti.bpmn.model.BpmnModel;
import org.activiti.editor.language.json.converter.BpmnJsonConverter;
import org.activiti.engine.*;
import org.activiti.engine.repository.Deployment;
import org.activiti.engine.repository.ProcessDefinition;
import org.activiti.engine.repository.ProcessDefinitionQuery;
import org.activiti.engine.runtime.ProcessInstance;
@@ -32,7 +32,6 @@ import org.springframework.beans.BeanUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.util.CollectionUtils;
import org.springframework.web.bind.annotation.*;
import org.springframework.web.multipart.MultipartFile;
import javax.annotation.Resource;
import javax.servlet.http.HttpServletResponse;
@@ -57,53 +56,11 @@ public class ActivitiController {
@Resource
private TaskService taskService;
@Resource
private LawsProcessNodeOriginService processNodeOriginService;
private ProcessNodeService processNodeService;
@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,
@RequestParam(value = "resourceName") String resourceName,
@RequestPart(value = "files", required = false) MultipartFile file) {
if (StringUtils.isBlank(name)) {
//根据流程定义Key查询
name = "出差申请流程";
}
// 3、使用RepositoryService进行部署
Deployment deployment = null;
try {
deployment = repositoryService.createDeployment()
//.addClasspathResource("bpmn/diagram_1.bpmn20.xml") // 添加bpmn资源
//.addClasspathResource("bpmn/business-trips.png") // 添加png资源
//.addClasspathResource(classpathResource)
.addInputStream(resourceName, file.getInputStream())
.disableSchemaValidation()
.key(name)
.name(name)
.deploy();
} catch (IOException e) {
e.printStackTrace();
}
// 4、输出部署信息
Map<String, String> map = new HashMap<>();
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();
map.put("流程定义Id", processDefinitionId);
return Result.OK(map);
}
private ProcessModelNodeService modelNodeService;
@Resource
private ProcessNodeLinkService processNodeLinkService;
@ApiOperation(value="启动流程")
@PostMapping("/start")
@@ -114,7 +71,7 @@ public class ActivitiController {
// 2、获取RunTimeService
RuntimeService runtimeService = processEngine.getRuntimeService();
// 3、根据流程定义Id启动流程
// 3、根据流程key启动流程
ProcessInstance processInstance = runtimeService
.startProcessInstanceByKey(key, map);
String processDefinitionId = processInstance.getProcessDefinitionId();
@@ -125,25 +82,6 @@ public class ActivitiController {
map1.put("流程实例id", processInstance.getId());
map1.put("当前活动Id", processInstance.getActivityId());
//从流程节点源表中保存一份流程节点信息到流程节点表
LambdaQueryWrapper<ProcessNodeOrigin> processNodeOriginLambdaQueryWrapper = new LambdaQueryWrapper<>();
processNodeOriginLambdaQueryWrapper.eq(ProcessNodeOrigin::getNodeType,"userTask")
.orderByAsc(ProcessNodeOrigin::getSort);
List<ProcessNodeOrigin> processNodeOrigins = processNodeOriginService.list(processNodeOriginLambdaQueryWrapper);
List<ProcessNode> processNodes = new ArrayList<>();
for (ProcessNodeOrigin processNodeOrigin : processNodeOrigins) {
ProcessNode processNode = new ProcessNode();
BeanUtils.copyProperties(processNodeOrigin, processNode);
processNode.setId(null);
processNodes.add(processNode);
}
processNodeService.saveBatch(processNodes);
for (ProcessNode processNode : processNodes) {
if (processNode.getNodeName().equals("填写基本信息,在线编辑,分发其他起草人")) {
//todo 关联关系
}
}
String mainDrafter = map.get("mainDrafter").toString();
return Result.OK(map1);
@@ -333,4 +271,28 @@ public class ActivitiController {
LanguageEnum language = MessageUtils.getLanguage();
return Result.OK(msg1 + "\n" + msg2);
}
@DictPoint
@GetMapping("/getNodeList")
@ApiImplicitParams({
@ApiImplicitParam(name = "processDefinitionId", value = "流程定义id"),
@ApiImplicitParam(name = "processInstanceId", value = "流程实例id(这个参数会去查绑定好的用户)")
})
@ApiOperation("获得节点列表")
public Result<List<ProcessNode>> getNodeList(String processDefinitionId,String processInstanceId) {
//查询节点信息
List<ProcessNode> nodeList = processNodeService.getNodeList(processDefinitionId,processInstanceId);
return Result.OK(nodeList);
}
@PostMapping("/saveNodeUserLink")
@ApiImplicitParams({
@ApiImplicitParam(name = "processDefinitionId", value = "流程定义id"),
@ApiImplicitParam(name = "processInstanceId", value = "流程实例id")
})
@ApiOperation("保存节点用户关系")
public Result<String> saveNodeUserLink(String processDefinitionId,String processInstanceId,@RequestBody Map<String,Object> map) {
processNodeLinkService.saveNodeUserLink(processDefinitionId,processInstanceId,map);
return Result.OK(MessageUtils.getMessage(ResultCommon.OK));
}
}
@@ -10,7 +10,7 @@ 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.service.LawsProcessNodeOriginService;
import com.jero.modules.activiti.service.ProcessNodeService;
import com.jero.modules.activiti.service.ProcessModelNodeService;
import com.jero.modules.activiti.util.CreatedTools;
import com.jero.modules.activiti.vo.AddTaskVO;
@@ -35,11 +35,8 @@ import org.springframework.web.bind.annotation.*;
import org.springframework.web.multipart.MultipartFile;
import javax.annotation.Resource;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.xml.stream.XMLInputFactory;
import javax.xml.stream.XMLStreamReader;
import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.nio.charset.StandardCharsets;
@@ -61,7 +58,7 @@ public class ModelerController {
@Autowired
private ObjectMapper objectMapper;
@Resource
private LawsProcessNodeOriginService processNodeOriginService;
private ProcessNodeService processNodeService;
@Resource
private ProcessModelNodeService processModelNodeService;
//@Autowired
@@ -102,12 +99,12 @@ public class ModelerController {
ActivitiListener createListener = new ActivitiListener();
createListener.setEvent(TaskListener.EVENTNAME_CREATE);
createListener.setImplementationType("class");
createListener.setImplementation(CreateListener.class.toString());
createListener.setImplementation(CreateListener.class.getName());
taskListeners.add(createListener);
ActivitiListener completeListener = new ActivitiListener();
completeListener.setEvent(TaskListener.EVENTNAME_COMPLETE);
completeListener.setImplementationType("class");
completeListener.setImplementation(CompleteListener.class.toString());
completeListener.setImplementation(CompleteListener.class.getName());
taskListeners.add(completeListener);
userTask.setTaskListeners(taskListeners);
}
@@ -119,47 +116,6 @@ public class ModelerController {
return Result.OK(modelId);
}
@ApiOperation(value = "新建模板")
@ApiImplicitParam(name = "category_id", value = "类型id")
@SuppressWarnings("deprecation")
@GetMapping("/create")
public void newModel(HttpServletRequest request, HttpServletResponse response)
throws IOException {
// 初始化一个空模型
Model model = repositoryService.newModel();
// 设置一些默认信息
String name = "";
String description = "";
int revision = 1;
String key = "m_" + CreatedTools.getCreated();
// 设置子系统
//model.setTenantId("子系统1");
//model.setCategory(category_id);
ObjectNode modelNode = objectMapper.createObjectNode();
modelNode.put(ModelDataJsonConstants.MODEL_NAME, name);
modelNode.put(ModelDataJsonConstants.MODEL_DESCRIPTION, description);
modelNode.put(ModelDataJsonConstants.MODEL_REVISION, revision);
model.setName(name);
model.setKey(key);
model.setMetaInfo(modelNode.toString());
repositoryService.saveModel(model);
String id = model.getId();
// 完善ModelEditorSource
ObjectNode editorNode = objectMapper.createObjectNode();
editorNode.put("id", "canvas");
editorNode.put("resourceId", "canvas");
ObjectNode stencilSetNode = objectMapper.createObjectNode();
stencilSetNode.put("namespace", "http://b3mn.org/stencilset/bpmn2.0#");
editorNode.put("stencilset", stencilSetNode);
repositoryService.addModelEditorSource(id, editorNode.toString().getBytes("utf-8"));
response.sendRedirect(request.getContextPath() + "/modeler.html?modelId=" + id);
}
@ApiOperation(value = "模板列表")
@ApiImplicitParams({ @ApiImplicitParam(name = "name", value = "名称"),
@ApiImplicitParam(name = "category", value = "类型") })
@@ -281,7 +237,8 @@ public class ModelerController {
processDefinitionQuery.deploymentId(deployment.getId());
ProcessDefinition processDefinition = processDefinitionQuery.singleResult();
String processDefinitionId = processDefinition.getId();
processNodeOriginService.copyNodeFromModel(modelId,processDefinitionId);
processNodeService.copyNodeFromModel(modelId,processDefinitionId);
// 4、输出部署信息
Map<String, String> map = new HashMap<>();
map.put("流程部署id", deployment.getId());
@@ -12,13 +12,13 @@ import lombok.Data;
/**
*
*@author liJiaRao
*@date 2023-10-08 18:01
*@date 2023-10-16 10:09
*/
/**
* 流程节点加签
* 流程模型节点表
*/
@ApiModel(description = "流程节点加签")
@ApiModel(description = "流程模型节点表")
@Data
@TableName(value = "process_model_node")
public class ProcessModelNode {
@@ -78,6 +78,20 @@ public class ProcessModelNode {
@ApiModelProperty(value = "xml目标节点id")
private String xmlTargetRef;
/**
* 变量类型
*/
@TableField(value = "variable_type")
@ApiModelProperty(value = "变量类型")
private String variableType;
/**
* 变量名称
*/
@TableField(value = "variable_name")
@ApiModelProperty(value = "变量名称")
private String variableName;
/**
* 是否审批节点
*/
@@ -4,6 +4,7 @@ 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 com.jero.common.aspect.annotation.Dict;
import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty;
import java.util.Date;
@@ -40,18 +41,18 @@ public class ProcessNode {
private String nodeName;
/**
* 是否审批节点
* 变量类型
*/
@TableField(value = "is_approval_node")
@ApiModelProperty(value = "是否审批节点")
private Integer isApprovalNode;
@TableField(value = "variable_type")
@ApiModelProperty(value = "变量类型")
private String variableType;
/**
* 是否可删除
* 变量名称
*/
@TableField(value = "is_can_deleted")
@ApiModelProperty(value = "是否可删除")
private Integer isCanDeleted;
@TableField(value = "variable_name")
@ApiModelProperty(value = "变量名称")
private String variableName;
/**
* 排序
@@ -94,4 +95,9 @@ public class ProcessNode {
@TableField(value = "sys_code")
@ApiModelProperty(value = "所属部门")
private String sysCode;
@TableField(exist = false)
@ApiModelProperty(value = "关联用户id")
@Dict(dictTable = "sys_user",dicText = "realname",dicCode = "id")
private String linkUserIds;
}
@@ -9,11 +9,15 @@ import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
/**
*流程节点关联用户部门表
*
*@author liJiaRao
*@date 2023-09-26 15:12
*@date 2023-10-16 13:43
*/
@ApiModel(description = "流程节点关联用户部门表")
/**
* 流程实例节点关联用户表
*/
@ApiModel(description = "流程实例节点关联用户表")
@Data
@TableName(value = "process_node_link")
public class ProcessNodeLink {
@@ -24,6 +28,13 @@ public class ProcessNodeLink {
@ApiModelProperty(value = "主键id")
private String id;
/**
* 流程定义id
*/
@TableField(value = "process_definition_id")
@ApiModelProperty(value = "流程定义id")
private String processDefinitionId;
/**
* 流程节点id
*/
@@ -32,16 +43,16 @@ public class ProcessNodeLink {
private String processNodeId;
/**
* 类型(1-用户、2-部门)
* 流程实例id
*/
@TableField(value = "`type`")
@ApiModelProperty(value = "类型(1-用户、2-部门)")
private Integer type;
@TableField(value = "process_instance_id")
@ApiModelProperty(value = "流程实例id")
private String processInstanceId;
/**
* 用户id,部门id
* 用户id
*/
@TableField(value = "user_depart_id")
@ApiModelProperty(value = "用户id,部门id")
private String userDepartId;
@TableField(value = "user_id")
@ApiModelProperty(value = "用户id")
private String userId;
}
@@ -1,125 +0,0 @@
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 = "process_node_origin")
public class ProcessNodeOrigin {
/**
* 主键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 = "node_type")
@ApiModelProperty(value = "节点类型")
private String nodeType;
/**
* xml节点Id
*/
@TableField(value = "xml_node_id")
@ApiModelProperty(value = "xml节点Id")
private String xmlNodeId;
/**
* xml来源节点id
*/
@TableField(value = "xml_source_ref")
@ApiModelProperty(value = "xml来源节点id")
private String xmlSourceRef;
/**
* xml目标节点id
*/
@TableField(value = "xml_target_ref")
@ApiModelProperty(value = "xml目标节点id")
private String xmlTargetRef;
/**
* 是否审批节点
*/
@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,39 @@
package com.jero.modules.activiti.enums;
import lombok.AllArgsConstructor;
import lombok.Getter;
/**
* @author liJiaRao
* @date 2023-10-16 11:53
*/
@Getter
@AllArgsConstructor
public enum VariableTypeEnum {
/**
* A
*/
STRING("string", 1),
LIST("list", 1);
private String name;
private Integer value;
public static String getNameByValue(Integer value) {
for (VariableTypeEnum enumObject : values()) {
if (enumObject.getValue().equals(value)) {
return enumObject.getName();
}
}
return null;
}
public static Integer getValueByName(String name) {
for (VariableTypeEnum enumObject : values()) {
if (enumObject.getName().equals(name)) {
return enumObject.getValue();
}
}
return null;
}
}
@@ -1,11 +0,0 @@
package com.jero.modules.activiti.mapper;
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import com.jero.modules.activiti.entity.ProcessNodeLink;
/**
* @author liJiaRao
* @date 2023-09-26 15:12
*/
public interface LawsProcessNodeLinkMapper extends BaseMapper<ProcessNodeLink> {
}
@@ -1,11 +0,0 @@
package com.jero.modules.activiti.mapper;
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import com.jero.modules.activiti.entity.ProcessNode;
/**
* @author liJiaRao
* @date 2023-09-26 15:12
*/
public interface LawsProcessNodeMapper extends BaseMapper<ProcessNode> {
}
@@ -1,14 +0,0 @@
package com.jero.modules.activiti.mapper;
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import com.jero.modules.activiti.entity.ProcessNodeOrigin;
import org.apache.ibatis.annotations.Param;
import java.util.List;
/**
* @author liJiaRao
* @date 2023-09-26 15:12
*/
public interface LawsProcessNodeOriginMapper extends BaseMapper<ProcessNodeOrigin> {
}
@@ -0,0 +1,19 @@
package com.jero.modules.activiti.mapper;
import com.baomidou.mybatisplus.core.toolkit.Wrappers;
import com.baomidou.mybatisplus.core.toolkit.StringUtils;
import org.apache.ibatis.annotations.Param;
import java.util.List;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import com.jero.modules.activiti.entity.ProcessNodeLink;
/**
* @author liJiaRao
* @date 2023-09-26 15:12
*/
public interface ProcessNodeLinkMapper extends BaseMapper<ProcessNodeLink> {
}
@@ -0,0 +1,15 @@
package com.jero.modules.activiti.mapper;
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import com.jero.modules.activiti.entity.ProcessNode;
import org.apache.ibatis.annotations.Param;
import java.util.List;
/**
* @author liJiaRao
* @date 2023-09-26 15:12
*/
public interface ProcessNodeMapper extends BaseMapper<ProcessNode> {
List<ProcessNode> selectByIdPdIdAndPiId(@Param("processDefinitionId") String processDefinitionId, @Param("processInstanceId") String processInstanceId);
}
@@ -1,24 +0,0 @@
<?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.ProcessNode">
<!--@mbg.generated-->
<!--@Table 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,30 +0,0 @@
<?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.ProcessNodeOrigin">
<!--@mbg.generated-->
<!--@Table 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">
<!--@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>
</mapper>
@@ -1,6 +1,6 @@
<?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">
<mapper namespace="com.jero.modules.activiti.mapper.ProcessNodeLinkMapper">
<resultMap id="BaseResultMap" type="com.jero.modules.activiti.entity.ProcessNodeLink">
<!--@mbg.generated-->
<!--@Table process_node_link-->
@@ -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.ProcessNodeMapper">
<select id="selectByIdPdIdAndPiId" resultType="com.jero.modules.activiti.entity.ProcessNode">
select pn.*
<if test="processInstanceId != null and processInstanceId != ''">
,group_concat(pnl.user_id) as link_user_ids
</if>
from process_node pn
<if test="processInstanceId != null and processInstanceId != ''">
left join process_node_link pnl on pn.id = pnl.process_node_id
</if>
<where>
pn.process_definition_id = #{processDefinitionId}
<if test="processInstanceId != null and processInstanceId != ''">
and pnl.process_instance_id = #{processInstanceId}
</if>
</where>
<if test="processInstanceId != null and processInstanceId != ''">
group by pn.id
</if>
</select>
</mapper>
@@ -1,15 +0,0 @@
package com.jero.modules.activiti.service;
import org.springframework.stereotype.Service;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import com.jero.modules.activiti.mapper.LawsProcessNodeLinkMapper;
import com.jero.modules.activiti.entity.ProcessNodeLink;
/**
*
*@author liJiaRao
*@date 2023-09-26 15:12
*/
@Service
public class LawsProcessNodeLinkService extends ServiceImpl<LawsProcessNodeLinkMapper, ProcessNodeLink> {
}
@@ -1,73 +0,0 @@
package com.jero.modules.activiti.service;
import cn.hutool.core.lang.UUID;
import cn.hutool.core.util.RandomUtil;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.fasterxml.jackson.databind.ObjectMapper;
import com.fasterxml.jackson.databind.node.ObjectNode;
import com.jero.common.constant.enums.YesOrNoEnum;
import com.jero.common.exception.JeroBootException;
import com.jero.modules.activiti.entity.ProcessModelNode;
import com.jero.modules.activiti.mapper.ActGeBytearrayMapper;
import com.jero.modules.activiti.mapper.ProcessModelNodeMapper;
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.editor.language.json.converter.BpmnJsonConverter;
import org.activiti.engine.*;
import org.activiti.engine.repository.Model;
import org.activiti.engine.repository.ProcessDefinition;
import org.activiti.engine.repository.ProcessDefinitionQuery;
import org.apache.commons.io.IOUtils;
import org.springframework.beans.BeanUtils;
import org.springframework.stereotype.Service;
import javax.annotation.Resource;
import javax.servlet.http.HttpServletResponse;
import java.io.ByteArrayInputStream;
import java.io.IOException;
import java.nio.charset.StandardCharsets;
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.ProcessNodeOrigin;
/**
*
*@author liJiaRao
*@date 2023-09-26 15:12
*/
@Service
public class LawsProcessNodeOriginService extends ServiceImpl<LawsProcessNodeOriginMapper, ProcessNodeOrigin> {
@Resource
private RepositoryService repositoryService;
@Resource
private ProcessEngine processEngine;
@Resource
private ActGeBytearrayMapper actGeBytearrayMapper;
@Resource
private LawsProcessNodeOriginMapper processNodeOriginMapper;
@Resource
private ProcessModelNodeMapper processModelNodeMapper;
public void copyNodeFromModel(String modelId, String processDefinitionId) {
LambdaQueryWrapper<ProcessModelNode> wrapper = new LambdaQueryWrapper<>();
wrapper.eq(ProcessModelNode::getModelId,modelId);
wrapper.isNotNull(ProcessModelNode::getSort);
List<ProcessModelNode> processModelNodes = processModelNodeMapper.selectList(wrapper);
List<ProcessNodeOrigin> processNodeOriginList = new ArrayList<>();
for (ProcessModelNode processModelNode : processModelNodes) {
ProcessNodeOrigin processNodeOrigin = new ProcessNodeOrigin();
BeanUtils.copyProperties(processModelNode,processNodeOrigin);
processNodeOrigin.setId(null);
processNodeOrigin.setProcessDefinitionId(processDefinitionId);
}
this.saveBatch(processNodeOriginList);
}
}
@@ -1,15 +0,0 @@
package com.jero.modules.activiti.service;
import org.springframework.stereotype.Service;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import com.jero.modules.activiti.mapper.LawsProcessNodeMapper;
import com.jero.modules.activiti.entity.ProcessNode;
/**
*
*@author liJiaRao
*@date 2023-09-26 15:12
*/
@Service
public class LawsProcessNodeService extends ServiceImpl<LawsProcessNodeMapper, ProcessNode> {
}
@@ -8,6 +8,9 @@ import com.fasterxml.jackson.databind.node.ObjectNode;
import com.jero.common.constant.enums.YesOrNoEnum;
import com.jero.common.exception.JeroBootException;
import com.jero.modules.activiti.entity.ProcessModelNode;
import com.jero.modules.activiti.enums.VariableTypeEnum;
import com.jero.modules.activiti.listener.CompleteListener;
import com.jero.modules.activiti.listener.CreateListener;
import com.jero.modules.activiti.vo.AddTaskVO;
import lombok.extern.slf4j.Slf4j;
import org.activiti.bpmn.BpmnAutoLayout;
@@ -340,6 +343,19 @@ public class ProcessModelNodeService extends ServiceImpl<ProcessModelNodeMapper,
userTask.setName(name);
userTask.setId(id);
userTask.setAssignee("${"+id.replace("-","")+"}");
//增加监听器
List<ActivitiListener> taskListeners = userTask.getTaskListeners();
ActivitiListener createListener = new ActivitiListener();
createListener.setEvent(TaskListener.EVENTNAME_CREATE);
createListener.setImplementationType("class");
createListener.setImplementation(CreateListener.class.getName());
taskListeners.add(createListener);
ActivitiListener completeListener = new ActivitiListener();
completeListener.setEvent(TaskListener.EVENTNAME_COMPLETE);
completeListener.setImplementationType("class");
completeListener.setImplementation(CompleteListener.class.getName());
taskListeners.add(completeListener);
userTask.setTaskListeners(taskListeners);
return userTask;
}
protected static SequenceFlow createSequenceFlow(String from, String to) {
@@ -398,6 +414,16 @@ public class ProcessModelNodeService extends ServiceImpl<ProcessModelNodeMapper,
nodeType = "userTask";
nodeName = userTask.getName();
xmlNodeId = userTask.getId();
String assignee = userTask.getAssignee();
MultiInstanceLoopCharacteristics loopCharacteristics = userTask.getLoopCharacteristics();
if (loopCharacteristics != null){
String inputDataItem = loopCharacteristics.getInputDataItem();
processModelNode.setVariableType(VariableTypeEnum.LIST.getName());
processModelNode.setVariableName(inputDataItem);
}else {
processModelNode.setVariableType(VariableTypeEnum.STRING.getName());
processModelNode.setVariableName(assignee.replace("${","").replace("}",""));
}
processModelNode.setSort(sort++);
} else if (flowElement instanceof SequenceFlow) {
SequenceFlow sequenceFlow = (SequenceFlow) flowElement;
@@ -0,0 +1,69 @@
package com.jero.modules.activiti.service;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.baomidou.mybatisplus.core.toolkit.Wrappers;
import com.jero.modules.activiti.entity.ProcessNode;
import com.jero.modules.activiti.enums.VariableTypeEnum;
import org.activiti.engine.RepositoryService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import com.jero.modules.activiti.mapper.ProcessNodeLinkMapper;
import com.jero.modules.activiti.entity.ProcessNodeLink;
import javax.annotation.Resource;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;
import java.util.Map;
/**
*
*@author liJiaRao
*@date 2023-09-26 15:12
*/
@Service
public class ProcessNodeLinkService extends ServiceImpl<ProcessNodeLinkMapper, ProcessNodeLink> {
@Resource
private ProcessNodeService processNodeService;
public void saveNodeUserLink(String processDefinitionId, String processInstanceId, Map<String, Object> map) {
LambdaQueryWrapper<ProcessNode> wrapper = new LambdaQueryWrapper<>();
wrapper.eq(ProcessNode::getProcessDefinitionId,processDefinitionId);
List<ProcessNode> processNodeList = processNodeService.list(wrapper);
List<ProcessNodeLink> processNodeLinks = new ArrayList<>();
for (ProcessNode processNode : processNodeList) {
String processNodeId = processNode.getId();
String variableType = processNode.getVariableType();
String variableName = processNode.getVariableName();
List<String> userIdList = new ArrayList<>();
if (map.containsKey(variableName)) {
String s = (String) map.get(variableName);
if (VariableTypeEnum.LIST.getName().equals(variableType)) {
userIdList.addAll(Arrays.asList(s.split(",")));
}else {
userIdList.add(s);
}
}
if (!userIdList.isEmpty()) {
for (String userId : userIdList) {
ProcessNodeLink processNodeLink = new ProcessNodeLink();
processNodeLink.setProcessDefinitionId(processDefinitionId);
processNodeLink.setProcessNodeId(processNodeId);
processNodeLink.setProcessInstanceId(processInstanceId);
processNodeLink.setUserId(userId);
processNodeLinks.add(processNodeLink);
}
}
}
this.saveBatch(processNodeLinks);
}
public List<ProcessNodeLink> selectByProcessInstanceId(String processInstanceId) {
LambdaQueryWrapper<ProcessNodeLink> myQuery = Wrappers.lambdaQuery(ProcessNodeLink.class);
myQuery.eq(ProcessNodeLink::getProcessInstanceId, processInstanceId);
return list(myQuery);
}
}
@@ -0,0 +1,58 @@
package com.jero.modules.activiti.service;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.jero.modules.activiti.entity.ProcessModelNode;
import com.jero.modules.activiti.mapper.ProcessModelNodeMapper;
import org.apache.commons.lang3.StringUtils;
import org.springframework.beans.BeanUtils;
import org.springframework.stereotype.Service;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import com.jero.modules.activiti.mapper.ProcessNodeMapper;
import com.jero.modules.activiti.entity.ProcessNode;
import javax.annotation.Resource;
import java.util.ArrayList;
import java.util.List;
/**
*
*@author liJiaRao
*@date 2023-09-26 15:12
*/
@Service
public class ProcessNodeService extends ServiceImpl<ProcessNodeMapper, ProcessNode> {
@Resource
private ProcessModelNodeMapper processModelNodeMapper;
@Resource
private ProcessNodeLinkService processNodeLinkService;
@Resource
private ProcessNodeMapper processNodeMapper;
public void copyNodeFromModel(String modelId, String processDefinitionId) {
LambdaQueryWrapper<ProcessModelNode> wrapper = new LambdaQueryWrapper<>();
wrapper.eq(ProcessModelNode::getNodeType,"userTask");
wrapper.eq(ProcessModelNode::getModelId,modelId);
wrapper.isNotNull(ProcessModelNode::getSort);
List<ProcessModelNode> processModelNodes = processModelNodeMapper.selectList(wrapper);
List<ProcessNode> processNodeList = new ArrayList<>();
for (ProcessModelNode processModelNode : processModelNodes) {
ProcessNode node = new ProcessNode();
BeanUtils.copyProperties(processModelNode,node);
node.setId(null);
node.setProcessDefinitionId(processDefinitionId);
processNodeList.add(node);
}
this.saveBatch(processNodeList);
}
public List<ProcessNode> getNodeList(String processDefinitionId, String processInstanceId) {
LambdaQueryWrapper<ProcessNode> wrapper = new LambdaQueryWrapper<>();
wrapper.eq(ProcessNode::getProcessDefinitionId,processDefinitionId);
wrapper.orderByAsc(ProcessNode::getSort);
//List<ProcessNode> processNodeList = this.list(wrapper);
List<ProcessNode> processNodeList = processNodeMapper.selectByIdPdIdAndPiId(processDefinitionId,processInstanceId);
return processNodeList;
}
}
@@ -1,8 +1,6 @@
package com.jero.modules.activiti.service.impl;
import com.jero.modules.activiti.config.WorkflowConstants;
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 lombok.extern.slf4j.Slf4j;
@@ -48,10 +46,6 @@ public class ProcessServiceImpl implements ProcessService {
private TaskService taskService;
@Autowired
private ManagementService managementService;
@Resource
private ActGeBytearrayMapper actGeBytearrayMapper;
@Resource
private LawsProcessNodeOriginMapper processNodeOriginMapper;
private List<String> getHighLightedFlows(BpmnModel bpmnModel, ProcessDefinitionEntity processDefinitionEntity, List<HistoricActivityInstance> historicActivityInstances) {
// 高亮流程已发生流转的线id集合