Commit b4e4f016 by 赵剑炜

第一次全流程跑通

parent 2be52782
...@@ -71,4 +71,19 @@ mybatis-plus: ...@@ -71,4 +71,19 @@ mybatis-plus:
mapper-locations: classpath*:/mapper/**/*Mapper.xml mapper-locations: classpath*:/mapper/**/*Mapper.xml
flowable:
dmn:
enabled: false
cmmn:
enabled: false
idm:
enabled: false
async-history-executor-activate: false
async-executor-activate: false
check-process-definitions: false
content:
enabled: false
app:
enabled: false
eventregistry:
enabled: false
...@@ -71,4 +71,19 @@ mybatis-plus: ...@@ -71,4 +71,19 @@ mybatis-plus:
mapper-locations: classpath*:/mapper/**/*Mapper.xml mapper-locations: classpath*:/mapper/**/*Mapper.xml
flowable:
dmn:
enabled: false
cmmn:
enabled: false
idm:
enabled: false
async-history-executor-activate: false
async-executor-activate: false
check-process-definitions: false
content:
enabled: false
app:
enabled: false
eventregistry:
enabled: false
...@@ -11,6 +11,8 @@ import com.fasterxml.jackson.databind.ObjectMapper; ...@@ -11,6 +11,8 @@ import com.fasterxml.jackson.databind.ObjectMapper;
import com.junmp.junmpProcess.common.R; import com.junmp.junmpProcess.common.R;
import com.junmp.junmpProcess.common.Result; import com.junmp.junmpProcess.common.Result;
import com.junmp.junmpProcess.doc.BpmnDoc; import com.junmp.junmpProcess.doc.BpmnDoc;
import com.junmp.junmpProcess.dto.ApplyDTO;
import com.junmp.junmpProcess.dto.HandleDataDTO;
import com.junmp.junmpProcess.dto.StartProcessInstanceDTO; import com.junmp.junmpProcess.dto.StartProcessInstanceDTO;
import com.junmp.junmpProcess.dto.TaskDTO; import com.junmp.junmpProcess.dto.TaskDTO;
import com.junmp.junmpProcess.dto.json.JunmpUserInfo; import com.junmp.junmpProcess.dto.json.JunmpUserInfo;
...@@ -19,6 +21,7 @@ import com.junmp.junmpProcess.entity.ProcessTemplates; ...@@ -19,6 +21,7 @@ import com.junmp.junmpProcess.entity.ProcessTemplates;
import com.junmp.junmpProcess.exception.WorkFlowException; import com.junmp.junmpProcess.exception.WorkFlowException;
import com.junmp.junmpProcess.service.Repository.ProcessTemplateService; import com.junmp.junmpProcess.service.Repository.ProcessTemplateService;
import com.junmp.junmpProcess.utils.BpmnConvert; import com.junmp.junmpProcess.utils.BpmnConvert;
import com.junmp.junmpProcess.vo.HistoryProcessInstanceVO;
import com.junmp.junmpProcess.vo.ProcessVO; import com.junmp.junmpProcess.vo.ProcessVO;
import com.junmp.junmpProcess.vo.TaskVO; import com.junmp.junmpProcess.vo.TaskVO;
import io.swagger.annotations.Api; import io.swagger.annotations.Api;
...@@ -51,112 +54,48 @@ import static com.junmp.junmpProcess.common.CommonConstants.*; ...@@ -51,112 +54,48 @@ import static com.junmp.junmpProcess.common.CommonConstants.*;
@Slf4j @Slf4j
@RestController @RestController
@RequestMapping("/Bpmn") @RequestMapping("/Process")
@Api(tags = "BPMNXX") @Api(tags = "流程表单方法")
public class BpmnController implements BpmnDoc { public class BpmnController implements BpmnDoc {
@Resource @Resource
private RepositoryService repositoryService; private RepositoryService repositoryService;
@Autowired @Autowired
private ProcessTemplateService processTemplateService; private ProcessTemplateService processTemplateService;
@Resource
private RuntimeService runtimeService;
@Resource
private TaskService taskService;
@Autowired @Autowired
private WorkProcessService WorkProcessService; private WorkProcessService WorkProcessService;
@Override @Override
@PostMapping(value = "bpmn/create") @PostMapping(value = "create")
public Result<String> create(@RequestBody ProcessVO processVO) throws JsonProcessingException { public Result<String> create(@RequestBody ProcessVO processVO) throws JsonProcessingException {
//流程定义 return WorkProcessService.createBpmn(processVO);
ObjectMapper objectMapper = new ObjectMapper();
JsonNode processJsonNode = objectMapper.readTree(processVO.getProcessJson());
JsonNode formJsonNode = objectMapper.readTree(processVO.getFormJson());
String formName=processVO.getFormName().toString();
//将json转换为bpmn
BpmnModel bpmnModel = processTemplateService.toBpmn(processJsonNode,formJsonNode,formName);
Deployment deploy = repositoryService.createDeployment()
.addBpmnModel(bpmnModel.getProcesses().get(0).getId()+".bpmn20.xml", bpmnModel)
.deploy();
return Result.OK(deploy.getId());
} }
@ApiOperation("通过流程定义id启动流程") @ApiOperation("通过流程定义id启动流程")
@PostMapping("process/start") @PostMapping("start")
public Result<Object> start(@RequestBody StartProcessInstanceDTO startProcessInstanceDTO) { public Result<Object> start(@RequestBody StartProcessInstanceDTO startProcessInstanceDTO) {
return WorkProcessService.start(startProcessInstanceDTO); return WorkProcessService.start(startProcessInstanceDTO);
} }
@ApiOperation("查看我发起的流程")
@PostMapping("applyList")
public Result<Page<HistoryProcessInstanceVO>> applyList(@RequestBody ApplyDTO ApplyDTO) {
return WorkProcessService.applyList(ApplyDTO);
}
@ApiOperation("查看我的待办") @ApiOperation("查看我的待办")
@PostMapping("process/toDoList") @PostMapping("toDoList")
public Result<Page<TaskVO>> toDoList(@RequestBody TaskDTO taskDTO){ public Result<Page<TaskVO>> toDoList(@RequestBody TaskDTO taskDTO){
List<Task> tasks = taskService.createTaskQuery().taskAssignee(taskDTO.getCurrentUserInfo().getUserId()) return WorkProcessService.toDoList(taskDTO);
.includeProcessVariables()
.orderByTaskCreateTime().desc()
.listPage((taskDTO.getPageNo() - 1) * taskDTO.getPageSize(), taskDTO.getPageSize());
long count = taskService.createTaskQuery().taskAssignee(taskDTO.getCurrentUserInfo().getUserId()).count();
List<TaskVO> taskVOS= new ArrayList<>();
Page<TaskVO> page =new Page<>();
List<String> taskIds= new ArrayList<>();
for (Task task : tasks) {
Map<String, Object> processVariables = task.getProcessVariables();
}
Map<Long, JunmpUserInfo> collect=new HashMap<>();
// if(CollUtil.isNotEmpty(taskIds)){
// LambdaQueryWrapper<JunmpUserInfo> lambdaQueryWrapper = new LambdaQueryWrapper<>();
// lambdaQueryWrapper.in(JunmpUserInfo::getUserId,taskIds);
// List<Users> list = userService.list(lambdaQueryWrapper);
// collect = list.stream().collect(Collectors.toMap(Users::getUserId, Function.identity()));
// }
for (Task task : tasks) {
ProcessInstance processInstance = runtimeService.createProcessInstanceQuery().processInstanceId(task.getProcessInstanceId()).singleResult();
BpmnModel bpmnModel = repositoryService.getBpmnModel(task.getProcessDefinitionId());
Map<String, Object> processVariables = task.getProcessVariables();
TaskVO taskVO=new TaskVO();
taskVO.setTaskId(task.getId());
taskVO.setProcessInstanceId(task.getProcessInstanceId());
taskVO.setProcessDefinitionName(bpmnModel.getMainProcess().getName());
taskVO.setStartUser(JSONObject.parseObject(MapUtil.getStr(processVariables,START_USER_INFO),new TypeReference<UserInfo>(){}));
// taskVO.setUsers(collect.get(Long.valueOf(taskVO.getStartUser().getId())));
taskVO.setStartTime(processInstance.getStartTime());
taskVO.setCurrentActivityName(getCurrentName(processInstance.getId(),false,processInstance.getProcessDefinitionId()));
taskVO.setBusinessStatus(MapUtil.getStr(processVariables,PROCESS_STATUS));
taskVO.setTaskCreatedTime(task.getCreateTime());
DelegationState delegationState = task.getDelegationState();
if(delegationState!=null){
taskVO.setDelegationState(delegationState);
}
taskVOS.add(taskVO);
}
page.setRecords(taskVOS);
page.setCurrent(taskDTO.getPageNo());
page.setSize(taskDTO.getPageSize());
page.setTotal(count);
return Result.OK(page);
} }
@ApiOperation("同意按钮")
private String getCurrentName(String processInstanceId,Boolean flag,String processDefinitionId){ @PostMapping("agree")
if(flag){ public Result<Page<TaskVO>> agree(@RequestBody HandleDataDTO handleDataDTO){
return "流程已结束"; return WorkProcessService.agree(handleDataDTO);
} }
List<ActivityInstance> list = runtimeService.createActivityInstanceQuery().processInstanceId(processInstanceId).activityType("userTask").unfinished().orderByActivityInstanceStartTime().desc().list(); @ApiOperation("拒绝按钮")
if(CollUtil.isEmpty(list)){ @PostMapping("refuse")
return ""; public Result<Page<TaskVO>> refuse(@RequestBody HandleDataDTO handleDataDTO){
} return WorkProcessService.refuse(handleDataDTO);
else{
String activityId = list.get(0).getActivityId();
BpmnModel bpmnModel = repositoryService.getBpmnModel(processDefinitionId);
FlowElement flowElement = bpmnModel.getMainProcess().getFlowElement(activityId);
return flowElement.getName();
}
} }
/** /**
* 查询表单模板数据 * 查询表单模板数据
...@@ -164,14 +103,15 @@ public class BpmnController implements BpmnDoc { ...@@ -164,14 +103,15 @@ public class BpmnController implements BpmnDoc {
* @param templateId 模板id * @param templateId 模板id
* @return 模板详情数据 * @return 模板详情数据
*/ */
@PostMapping(value = "getFormTemplateById")
@PostMapping(value = "bpmn/getFormTemplateById")
public Object getFormTemplateById(String templateId) { public Object getFormTemplateById(String templateId) {
ProcessTemplates processTemplates = processTemplateService.getById(templateId); ProcessTemplates processTemplates = processTemplateService.getById(templateId);
processTemplates.setFormId(processTemplates.getTemplateId()); processTemplates.setFormId(processTemplates.getTemplateId());
return R.ok(processTemplates); return R.ok(processTemplates);
} }
/** /**
* 查询表单模板数据 * 查询表单模板数据
* *
...@@ -179,7 +119,7 @@ public class BpmnController implements BpmnDoc { ...@@ -179,7 +119,7 @@ public class BpmnController implements BpmnDoc {
* @return 模板详情数据 * @return 模板详情数据
*/ */
@ApiOperation("通过模板id查看流程信息 会附带流程定义id") @ApiOperation("通过模板id查看流程信息 会附带流程定义id")
@GetMapping("process/detail") @GetMapping("detail")
public Result<ProcessTemplates> detail(@RequestParam("templateId") String templateId){ public Result<ProcessTemplates> detail(@RequestParam("templateId") String templateId){
ProcessTemplates processTemplates = processTemplateService.getById(templateId); ProcessTemplates processTemplates = processTemplateService.getById(templateId);
processTemplates.setLogo(processTemplates.getIcon()); processTemplates.setLogo(processTemplates.getIcon());
......
...@@ -15,7 +15,6 @@ import java.util.Map; ...@@ -15,7 +15,6 @@ import java.util.Map;
@Data @Data
public class StartProcessInstanceDTO { public class StartProcessInstanceDTO {
private String processDefinitionId; private String processDefinitionId;
private String processId;
private JSONObject formData; private JSONObject formData;
private Map<String, List<JunmpUserInfo>> processUsers; private Map<String, List<JunmpUserInfo>> processUsers;
private JunmpUserInfo startUserInfo; private JunmpUserInfo startUserInfo;
......
package com.junmp.junmpProcess.dto.json;
import lombok.Data;
import java.util.List;
@Data
public class ApproverGroups {
private String id;
private String approverType;
private String levelMode;
private List<String> approverIds;
private List<String> approverNames;
}
...@@ -29,12 +29,13 @@ public class ChildNode { ...@@ -29,12 +29,13 @@ public class ChildNode {
private String id; private String id;
private String parentId; private String parentId;
private String type; private String type;
private String states;
private String name; private String name;
private String desc; private String desc;
private Properties props; private Properties props;
private ChildNode children; private ChildNode childNode;
private List<ChildNode> conditionNodes;
private List<ChildNode> branchs; private List<ApproverGroups> approverGroups;
private String parallelStr; private String parallelStr;
private JSONObject incoming = new JSONObject(); private JSONObject incoming = new JSONObject();
private Boolean typeElse; private Boolean typeElse;
......
...@@ -4,20 +4,19 @@ import cn.hutool.core.collection.CollUtil; ...@@ -4,20 +4,19 @@ import cn.hutool.core.collection.CollUtil;
import cn.hutool.core.map.MapUtil; import cn.hutool.core.map.MapUtil;
import com.alibaba.fastjson.JSONObject; import com.alibaba.fastjson.JSONObject;
import com.alibaba.fastjson.TypeReference; import com.alibaba.fastjson.TypeReference;
import com.junmp.junmpProcess.dto.json.*;
import com.junmp.junmpProcess.exception.WorkFlowException; import com.junmp.junmpProcess.exception.WorkFlowException;
import org.flowable.bpmn.model.Process; import org.flowable.bpmn.model.Process;
import org.flowable.bpmn.model.UserTask; import org.flowable.bpmn.model.UserTask;
import org.flowable.engine.RepositoryService; import org.flowable.engine.RepositoryService;
import org.flowable.engine.delegate.DelegateExecution; import org.flowable.engine.delegate.DelegateExecution;
import org.flowable.engine.delegate.ExecutionListener; import org.flowable.engine.delegate.ExecutionListener;
import com.junmp.junmpProcess.dto.json.ChildNode;
import com.junmp.junmpProcess.dto.json.Properties;
import com.junmp.junmpProcess.dto.json.UserInfo;
import com.junmp.junmpProcess.enums.AssigneeTypeEnums; import com.junmp.junmpProcess.enums.AssigneeTypeEnums;
import org.springframework.stereotype.Component; import org.springframework.stereotype.Component;
import javax.annotation.Resource; import javax.annotation.Resource;
import java.util.ArrayList; import java.util.ArrayList;
import java.util.HashMap;
import java.util.List; import java.util.List;
import java.util.Map; import java.util.Map;
...@@ -38,8 +37,8 @@ public class CounterSignListener implements ExecutionListener { ...@@ -38,8 +37,8 @@ public class CounterSignListener implements ExecutionListener {
String currentActivityId = execution.getCurrentActivityId(); String currentActivityId = execution.getCurrentActivityId();
Process mainProcess = repositoryService.getBpmnModel(execution.getProcessDefinitionId()).getMainProcess(); Process mainProcess = repositoryService.getBpmnModel(execution.getProcessDefinitionId()).getMainProcess();
UserTask userTask = (UserTask) mainProcess.getFlowElement(currentActivityId); UserTask userTask = (UserTask) mainProcess.getFlowElement(currentActivityId);
String dingDing = mainProcess.getAttributeValue("http://flowable.org/bpmn", "DingDing"); String flowJson = mainProcess.getAttributeValue("http://flowable.org/bpmn", "Junmp");
JSONObject jsonObject = JSONObject.parseObject(dingDing, new TypeReference<JSONObject>() { JSONObject jsonObject = JSONObject.parseObject(flowJson, new TypeReference<JSONObject>() {
}); });
String processJson = jsonObject.getString("processJson"); String processJson = jsonObject.getString("processJson");
ChildNode childNode = JSONObject.parseObject(processJson, new TypeReference<ChildNode>() { ChildNode childNode = JSONObject.parseObject(processJson, new TypeReference<ChildNode>() {
...@@ -48,87 +47,114 @@ public class CounterSignListener implements ExecutionListener { ...@@ -48,87 +47,114 @@ public class CounterSignListener implements ExecutionListener {
String variable = currentActivityId + "assigneeList"; String variable = currentActivityId + "assigneeList";
List usersValue = (List) execution.getVariable(variable); List usersValue = (List) execution.getVariable(variable);
if (usersValue == null) { if (usersValue == null) {
ChildNode currentNode = getChildNode(childNode, currentActivityId); ChildNode currentNode = getChildNode(childNode, currentActivityId);
if (currentNode == null) { if (currentNode == null) {
throw new WorkFlowException("查找审批人失败,请联系管理员重试"); throw new WorkFlowException("查找审批人失败,请联系管理员重试");
} }
Properties props = currentNode.getProps(); ApproverGroups group=currentNode.getApproverGroups().get(0);
String assignedType = props.getAssignedType(); String Type=group.getApproverType();
Map<String, Object> nobody = props.getNobody(); if (Type.equals("1"))//指定人员,不处理
if (AssigneeTypeEnums.ASSIGN_USER.getTypeName().equals(assignedType)) { {
List<UserInfo> assignedUser = props.getAssignedUser(); List<String> assignedUser = group.getApproverIds();
for (UserInfo userInfo : assignedUser) { for (String userInfo : assignedUser) {
assigneeList.add(userInfo.getId()); assigneeList.add(userInfo);
} }
} else if (AssigneeTypeEnums.SELF_SELECT.getTypeName().equals(assignedType)) {
} else if (AssigneeTypeEnums.LEADER_TOP.getTypeName().equals(assignedType)) {
throw new WorkFlowException("暂不做这个功能,等发版!");
} else if (AssigneeTypeEnums.LEADER.getTypeName().equals(assignedType)) {
/*
这里代码应该怎么写??? 你想想
应该是 通过leader 的code 查出来leader里面的人 然后添加到
assigneeList.addAll() 既可
不过本项目没有添加leader的CRUD页面 所以 先这样,
怎么实现就是上述实现手段
下面角色也一样, 希望我们<布尔什维克>的
同志们
可以举一反三 一通百通
*/
// throw new WorkFlowException("当前只是简单的系统 没有RBAC功能,各位可以自己实现!");
} else if (AssigneeTypeEnums.ROLE.getTypeName().equals(assignedType)) {
// throw new WorkFlowException("当前只是简单的系统 没有RBAC功能,各位可以自己实现!"); }
} else if (AssigneeTypeEnums.SELF.getTypeName().equals(assignedType)) { else if (Type.equals("2"))//指定角色
String startUserJson = execution.getVariable(START_USER_INFO, String.class); {
UserInfo userInfo = JSONObject.parseObject(startUserJson, new TypeReference<UserInfo>() { List<String> Roles=group.getApproverIds();
}); for (String role :Roles
assigneeList.add(userInfo.getId()); ) {
} else if (AssigneeTypeEnums.FORM_USER.getTypeName().equals(assignedType)) {
String formUser = props.getFormUser(); // assigneeList.add(role.getId());
List<JSONObject> assigneeUsers = execution.getVariable(formUser, List.class);
if (assigneeUsers != null) {
for (JSONObject assigneeUser : assigneeUsers) {
assigneeList.add(assigneeUser.getString("id"));
}
} }
} }
else if (Type.equals("3"))//指定组织机构中的角色
{}
// Properties props = currentNode.getProps();
// String assignedType = props.getAssignedType();
Map<String, Object> nobody = new HashMap<>();
// if (AssigneeTypeEnums.ASSIGN_USER.getTypeName().equals(assignedType)) {
// List<UserInfo> assignedUser = props.getAssignedUser();
// for (UserInfo userInfo : assignedUser) {
// assigneeList.add(userInfo.getId());
// }
// } else if (AssigneeTypeEnums.SELF_SELECT.getTypeName().equals(assignedType)) {
//
// } else if (AssigneeTypeEnums.LEADER_TOP.getTypeName().equals(assignedType)) {
// throw new WorkFlowException("暂不做这个功能,等发版!");
// } else if (AssigneeTypeEnums.LEADER.getTypeName().equals(assignedType)) {
// /*
// 这里代码应该怎么写??? 你想想
// 应该是 通过leader 的code 查出来leader里面的人 然后添加到
// assigneeList.addAll() 既可
// 不过本项目没有添加leader的CRUD页面 所以 先这样,
// 怎么实现就是上述实现手段
// 下面角色也一样, 希望我们<布尔什维克>的
// 同志们
// 可以举一反三 一通百通
// */
//// throw new WorkFlowException("当前只是简单的系统 没有RBAC功能,各位可以自己实现!");
// } else if (AssigneeTypeEnums.ROLE.getTypeName().equals(assignedType)) {
//
//// throw new WorkFlowException("当前只是简单的系统 没有RBAC功能,各位可以自己实现!");
// } else if (AssigneeTypeEnums.SELF.getTypeName().equals(assignedType)) {
// String startUserJson = execution.getVariable(START_USER_INFO, String.class);
// UserInfo userInfo = JSONObject.parseObject(startUserJson, new TypeReference<UserInfo>() {
// });
// assigneeList.add(userInfo.getId());
// } else if (AssigneeTypeEnums.FORM_USER.getTypeName().equals(assignedType)) {
// String formUser = props.getFormUser();
// List<JSONObject> assigneeUsers = execution.getVariable(formUser, List.class);
// if (assigneeUsers != null) {
// for (JSONObject assigneeUser : assigneeUsers) {
// assigneeList.add(assigneeUser.getString("id"));
// }
// }
//
// }
if (CollUtil.isEmpty(assigneeList)) { // if (CollUtil.isEmpty(assigneeList)) {
String handler = MapUtil.getStr(nobody, "handler"); // String handler = MapUtil.getStr(nobody, "handler");
if ("TO_PASS".equals(handler)) { // if ("TO_PASS".equals(handler)) {
assigneeList.add("100000"); // assigneeList.add("100000");
execution.setVariable(variable, assigneeList); // execution.setVariable(variable, assigneeList);
} else if ("TO_REFUSE".equals(handler)) { // } else if ("TO_REFUSE".equals(handler)) {
execution.setVariable("autoRefuse", Boolean.TRUE); // execution.setVariable("autoRefuse", Boolean.TRUE);
assigneeList.add("100000"); // assigneeList.add("100000");
execution.setVariable(variable, assigneeList); // execution.setVariable(variable, assigneeList);
} else if ("TO_ADMIN".equals(handler)) { // } else if ("TO_ADMIN".equals(handler)) {
assigneeList.add("381496"); // assigneeList.add("381496");
execution.setVariable(variable, assigneeList); // execution.setVariable(variable, assigneeList);
} else if ("TO_USER".equals(handler)) { // } else if ("TO_USER".equals(handler)) {
Object assignedUserObj = nobody.get("assignedUser"); // Object assignedUserObj = nobody.get("assignedUser");
if (assignedUserObj != null) { // if (assignedUserObj != null) {
List<JSONObject> assignedUser = (List<JSONObject>) assignedUserObj; // List<JSONObject> assignedUser = (List<JSONObject>) assignedUserObj;
if (assignedUser.size() > 0) { // if (assignedUser.size() > 0) {
for (JSONObject object : assignedUser) { // for (JSONObject object : assignedUser) {
assigneeList.add(object.getString("id")); // assigneeList.add(object.getString("id"));
} // }
execution.setVariable(variable, assigneeList); // execution.setVariable(variable, assigneeList);
} else { // } else {
assigneeList.add("100000"); // assigneeList.add("100000");
execution.setVariable(variable, assigneeList); // execution.setVariable(variable, assigneeList);
} // }
//
// }
//
// } else {
// throw new WorkFlowException("找不到审批人,请检查配置!!!");
// }
// } else {
// execution.setVariable(variable, assigneeList);
// }
if (assigneeList.size()!=0)
{execution.setVariable(variable, assigneeList);}
}
} else {
throw new WorkFlowException("找不到审批人,请检查配置!!!");
}
} else {
execution.setVariable(variable, assigneeList);
}
} else { } else {
} }
} }
......
package com.junmp.junmpProcess.service.Bussiness; package com.junmp.junmpProcess.service.Bussiness;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.fasterxml.jackson.core.JsonProcessingException;
import com.fasterxml.jackson.databind.JsonNode; import com.fasterxml.jackson.databind.JsonNode;
import com.junmp.junmpProcess.common.Result; import com.junmp.junmpProcess.common.Result;
import com.junmp.junmpProcess.dto.ApplyDTO; import com.junmp.junmpProcess.dto.ApplyDTO;
...@@ -8,10 +9,7 @@ import com.junmp.junmpProcess.dto.HandleDataDTO; ...@@ -8,10 +9,7 @@ import com.junmp.junmpProcess.dto.HandleDataDTO;
import com.junmp.junmpProcess.dto.StartProcessInstanceDTO; import com.junmp.junmpProcess.dto.StartProcessInstanceDTO;
import com.junmp.junmpProcess.dto.TaskDTO; import com.junmp.junmpProcess.dto.TaskDTO;
import com.junmp.junmpProcess.entity.ProcessTemplates; import com.junmp.junmpProcess.entity.ProcessTemplates;
import com.junmp.junmpProcess.vo.HandleDataVO; import com.junmp.junmpProcess.vo.*;
import com.junmp.junmpProcess.vo.HistoryProcessInstanceVO;
import com.junmp.junmpProcess.vo.MultiVO;
import com.junmp.junmpProcess.vo.TaskVO;
import org.springframework.web.bind.annotation.RequestBody; import org.springframework.web.bind.annotation.RequestBody;
import java.util.List; import java.util.List;
...@@ -24,7 +22,7 @@ public interface WorkProcessService { ...@@ -24,7 +22,7 @@ public interface WorkProcessService {
* *
* @return * @return
*/ */
boolean createBpmn(JsonNode flowdto); Result<String> createBpmn(ProcessVO processVO) throws JsonProcessingException;
/** /**
* 获取用户可见表单 * 获取用户可见表单
......
...@@ -5,7 +5,9 @@ import cn.hutool.core.map.MapUtil; ...@@ -5,7 +5,9 @@ import cn.hutool.core.map.MapUtil;
import com.alibaba.fastjson.JSONObject; import com.alibaba.fastjson.JSONObject;
import com.alibaba.fastjson.TypeReference; import com.alibaba.fastjson.TypeReference;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.fasterxml.jackson.core.JsonProcessingException;
import com.fasterxml.jackson.databind.JsonNode; import com.fasterxml.jackson.databind.JsonNode;
import com.fasterxml.jackson.databind.ObjectMapper;
import com.google.common.collect.Lists; import com.google.common.collect.Lists;
import com.junmp.junmpProcess.dto.*; import com.junmp.junmpProcess.dto.*;
import com.junmp.junmpProcess.dto.json.*; import com.junmp.junmpProcess.dto.json.*;
...@@ -27,6 +29,7 @@ import org.flowable.engine.delegate.ExecutionListener; ...@@ -27,6 +29,7 @@ import org.flowable.engine.delegate.ExecutionListener;
import org.flowable.engine.history.HistoricActivityInstance; import org.flowable.engine.history.HistoricActivityInstance;
import org.flowable.engine.history.HistoricProcessInstance; import org.flowable.engine.history.HistoricProcessInstance;
import org.flowable.engine.impl.persistence.entity.ExecutionEntity; import org.flowable.engine.impl.persistence.entity.ExecutionEntity;
import org.flowable.engine.repository.Deployment;
import org.flowable.engine.repository.ProcessDefinition; import org.flowable.engine.repository.ProcessDefinition;
import org.flowable.engine.runtime.Execution; import org.flowable.engine.runtime.Execution;
import org.flowable.engine.runtime.ProcessInstance; import org.flowable.engine.runtime.ProcessInstance;
...@@ -69,30 +72,18 @@ public class WorkProcessServiceImpl implements WorkProcessService { ...@@ -69,30 +72,18 @@ public class WorkProcessServiceImpl implements WorkProcessService {
private TaskService taskService; private TaskService taskService;
public boolean createBpmn(JsonNode FlowDTO) { public Result<String> createBpmn(ProcessVO processVO) throws JsonProcessingException {
// 一.准备工作 //流程定义
BpmnModel bpmnModel = new BpmnModel(); ObjectMapper objectMapper = new ObjectMapper();
Process process = new Process(); // 相当于图纸 JsonNode processJsonNode = objectMapper.readTree(processVO.getProcessJson());
bpmnModel.addProcess(process); JsonNode formJsonNode = objectMapper.readTree(processVO.getFormJson());
process.setId("Process_" + UUID.randomUUID()); String formName=processVO.getFormName().toString();
process.setExecutable(true); //将json转换为bpmn
// 二.开始结束节点 BpmnModel bpmnModel = processTemplateService.toBpmn(processJsonNode,formJsonNode,formName);
StartEvent startEvent = new StartEvent();// 新建开始节点 Deployment deploy = repositoryService.createDeployment()
startEvent.setId("_start"); .addBpmnModel(bpmnModel.getProcesses().get(0).getId()+".bpmn20.xml", bpmnModel)
process.addFlowElement(startEvent);// 绘制到图纸 .deploy();
EndEvent endEvent = new EndEvent(); // 新建结束节点 return Result.OK(deploy.getId());
endEvent.setId("_end");// 绘制到图纸
process.addFlowElement(endEvent);
// 三.递归绘制节点
drawNode(process, FlowDTO, "_start", "_end", null);
// 四.自动布局
new BpmnAutoLayout(bpmnModel).execute();
// 五.转xml
BpmnXMLConverter bpmnXMLConverter = new BpmnXMLConverter();
byte[] convertToXML = bpmnXMLConverter.convertToXML(bpmnModel);
String xml = new String(convertToXML);
xml = xml.replaceAll("&lt;", "<").replaceAll("&gt;", ">");
return true;
} }
/** /**
...@@ -376,10 +367,8 @@ public class WorkProcessServiceImpl implements WorkProcessService { ...@@ -376,10 +367,8 @@ public class WorkProcessServiceImpl implements WorkProcessService {
Map<String,Object> processVariables= new HashMap<>(); Map<String,Object> processVariables= new HashMap<>();
processVariables.put(FORM_VAR,formData); processVariables.put(FORM_VAR,formData);
// processVariables.put(PROCESS_STATUS,BUSINESS_STATUS_1);
processVariables.put(START_USER_INFO,JSONObject.toJSONString(startUserInfo)); processVariables.put(START_USER_INFO,JSONObject.toJSONString(startUserInfo));
ArrayList<JunmpUserInfo> userInfos = CollUtil.newArrayList(startUserInfo); ArrayList<JunmpUserInfo> userInfos = CollUtil.newArrayList(startUserInfo);
// processVariables.put("initiator",JSONObject.toJSONString(userInfos));
Map formValue = JSONObject.parseObject(formData.toJSONString(), new TypeReference<Map>() { Map formValue = JSONObject.parseObject(formData.toJSONString(), new TypeReference<Map>() {
}); });
processVariables.putAll(formValue); processVariables.putAll(formValue);
...@@ -387,7 +376,7 @@ public class WorkProcessServiceImpl implements WorkProcessService { ...@@ -387,7 +376,7 @@ public class WorkProcessServiceImpl implements WorkProcessService {
ProcessInstanceBuilder processInstanceBuilder = runtimeService.createProcessInstanceBuilder(); ProcessInstanceBuilder processInstanceBuilder = runtimeService.createProcessInstanceBuilder();
ProcessInstance processInstance = processInstanceBuilder ProcessInstance processInstance = processInstanceBuilder
.processDefinitionId(processInstanceDto.getProcessId()) .processDefinitionId(processInstanceDto.getProcessDefinitionId())
.variable("initiator",startUserInfo.getUserId()) .variable("initiator",startUserInfo.getUserId())
.variables(processVariables) .variables(processVariables)
.businessStatus(BUSINESS_STATUS_1) .businessStatus(BUSINESS_STATUS_1)
...@@ -398,7 +387,7 @@ public class WorkProcessServiceImpl implements WorkProcessService { ...@@ -398,7 +387,7 @@ public class WorkProcessServiceImpl implements WorkProcessService {
Object ts=new Object(); Object ts=new Object();
if(task!=null){ if(task!=null){
taskService.complete(task.getId()); taskService.complete(task.getId());
ts=taskService.createTaskQuery().taskId(task.getId()).singleResult();
} }
...@@ -498,32 +487,33 @@ public class WorkProcessServiceImpl implements WorkProcessService { ...@@ -498,32 +487,33 @@ public class WorkProcessServiceImpl implements WorkProcessService {
.orderByTaskCreateTime().desc() .orderByTaskCreateTime().desc()
.listPage((taskDTO.getPageNo() - 1) * taskDTO.getPageSize(), taskDTO.getPageSize()); .listPage((taskDTO.getPageNo() - 1) * taskDTO.getPageSize(), taskDTO.getPageSize());
long count = taskService.createTaskQuery().taskAssignee(taskDTO.getCurrentUserInfo().getUserId()).count(); long count = taskService.createTaskQuery().taskAssignee(taskDTO.getCurrentUserInfo().getUserId()).count();
List<TaskVO> taskVOS = new ArrayList<>(); List<TaskVO> taskVOS= new ArrayList<>();
Page<TaskVO> page = new Page<>(); Page<TaskVO> page =new Page<>();
List<String> taskIds= new ArrayList<>();
for (Task task : tasks) { for (Task task : tasks) {
HistoricProcessInstance historicProcessInstance = historyService.createHistoricProcessInstanceQuery().processInstanceId(task.getProcessInstanceId()).singleResult(); Map<String, Object> processVariables = task.getProcessVariables();
}
Map<Long, JunmpUserInfo> collect=new HashMap<>();
for (Task task : tasks) {
ProcessInstance processInstance = runtimeService.createProcessInstanceQuery().processInstanceId(task.getProcessInstanceId()).singleResult();
BpmnModel bpmnModel = repositoryService.getBpmnModel(task.getProcessDefinitionId()); BpmnModel bpmnModel = repositoryService.getBpmnModel(task.getProcessDefinitionId());
Map<String, Object> processVariables = task.getProcessVariables(); Map<String, Object> processVariables = task.getProcessVariables();
TaskVO taskVO = new TaskVO(); TaskVO taskVO=new TaskVO();
taskVO.setTaskId(task.getId()); taskVO.setTaskId(task.getId());
taskVO.setProcessInstanceId(task.getProcessInstanceId()); taskVO.setProcessInstanceId(task.getProcessInstanceId());
taskVO.setProcessDefinitionName(bpmnModel.getMainProcess().getName()); taskVO.setProcessDefinitionName(bpmnModel.getMainProcess().getName());
taskVO.setStartUser(JSONObject.parseObject(MapUtil.getStr(processVariables, START_USER_INFO), new TypeReference<UserInfo>() { taskVO.setStartUser(JSONObject.parseObject(MapUtil.getStr(processVariables,START_USER_INFO),new TypeReference<UserInfo>(){}));
})); taskVO.setStartTime(processInstance.getStartTime());
taskVO.setStartTime(historicProcessInstance.getStartTime()); taskVO.setCurrentActivityName(getCurrentName(processInstance.getId(),false,processInstance.getProcessDefinitionId()));
Execution execution = runtimeService.createExecutionQuery().executionId(task.getProcessInstanceId()).singleResult();
String activityId = execution.getActivityId();
if (StringUtils.isBlank(activityId)) {
taskVO.setCurrentActivityName("");
} else {
FlowElement flowElement = bpmnModel.getMainProcess().getFlowElement(activityId);
taskVO.setCurrentActivityName(flowElement.getName());
}
taskVO.setBusinessStatus(MapUtil.getStr(processVariables, PROCESS_STATUS)); taskVO.setBusinessStatus(MapUtil.getStr(processVariables,PROCESS_STATUS));
taskVO.setTaskCreatedTime(task.getCreateTime()); taskVO.setTaskCreatedTime(task.getCreateTime());
DelegationState delegationState = task.getDelegationState(); DelegationState delegationState = task.getDelegationState();
if (delegationState != null) { if(delegationState!=null){
taskVO.setDelegationState(delegationState); taskVO.setDelegationState(delegationState);
} }
taskVOS.add(taskVO); taskVOS.add(taskVO);
...@@ -596,33 +586,62 @@ public class WorkProcessServiceImpl implements WorkProcessService { ...@@ -596,33 +586,62 @@ public class WorkProcessServiceImpl implements WorkProcessService {
String comments = handleDataDTO.getComments(); String comments = handleDataDTO.getComments();
JSONObject formData = handleDataDTO.getFormData(); JSONObject formData = handleDataDTO.getFormData();
String taskId = handleDataDTO.getTaskId(); String taskId = handleDataDTO.getTaskId();
String processInstanceId=handleDataDTO.getProcessInstanceId();
Task task = taskService.createTaskQuery().taskId(taskId).singleResult(); Task task = taskService.createTaskQuery().taskId(taskId).singleResult();
Map<String, Object> map = new HashMap<>(); if (task!=null)//task为空则说明当前任务可能已结束
if (formData != null && formData.size() > 0) { {
Map formValue = JSONObject.parseObject(formData.toJSONString(), new TypeReference<Map>() { Map<String, Object> map = new HashMap<>();
}); if (formData != null && formData.size() > 0) {
map.putAll(formValue); Map formValue = JSONObject.parseObject(formData.toJSONString(), new TypeReference<Map>() {
map.put(FORM_VAR, formData); });
} map.putAll(formValue);
map.put(FORM_VAR, formData);
}
runtimeService.setVariables(task.getProcessInstanceId(), map);//设置进入当前流程
Authentication.setAuthenticatedUserId(currentUserInfo.getId());
if (StringUtils.isNotBlank(comments)) {
taskService.addComment(task.getId(), task.getProcessInstanceId(), "opinion", comments);
}
if (attachments != null && attachments.size() > 0) {
for (AttachmentDTO attachment : attachments) {
taskService.createAttachment("option", taskId, task.getProcessInstanceId(), attachment.getName(), attachment.getName(), attachment.getUrl());
}
}
if (StringUtils.isNotBlank(handleDataDTO.getSignInfo())) {
taskService.addComment(task.getId(), task.getProcessInstanceId(), "sign", handleDataDTO.getSignInfo());
}
taskService.complete(task.getId());
HistoricTaskInstance historicTask = historyService
.createHistoricTaskInstanceQuery()
.taskId(taskId)
.singleResult();
if (historicTask.getEndTime()!=null)//EndTime为空,说明任务已结束,需要往消息队列中进行消息传递
{
HistoricProcessInstance historicProcessInstance= historyService.createHistoricProcessInstanceQuery().processInstanceId(processInstanceId)
.includeProcessVariables().singleResult();//拿到历史中的表单信息
Map<String, Object> processVariables = historicProcessInstance.getProcessVariables();
JSONObject jsonObject = (JSONObject) processVariables.get(FORM_VAR);
runtimeService.setVariables(task.getProcessInstanceId(), map);//设置进入当前流程
Authentication.setAuthenticatedUserId(currentUserInfo.getId());
if (StringUtils.isNotBlank(comments)) {
taskService.addComment(task.getId(), task.getProcessInstanceId(), "opinion", comments);
}
if (attachments != null && attachments.size() > 0) {
for (AttachmentDTO attachment : attachments) {
taskService.createAttachment("option", taskId, task.getProcessInstanceId(), attachment.getName(), attachment.getName(), attachment.getUrl());
} }
return Result.OK();
} }
else {
if (StringUtils.isNotBlank(handleDataDTO.getSignInfo())) { return Result.error("当前任务已结束");
taskService.addComment(task.getId(), task.getProcessInstanceId(), "sign", handleDataDTO.getSignInfo());
} }
taskService.complete(task.getId());
return Result.OK();
} }
@Override @Override
......
...@@ -15,6 +15,8 @@ import com.junmp.junmpProcess.utils.JsonToELConverter; ...@@ -15,6 +15,8 @@ import com.junmp.junmpProcess.utils.JsonToELConverter;
import org.flowable.bpmn.BpmnAutoLayout; import org.flowable.bpmn.BpmnAutoLayout;
import org.flowable.bpmn.model.*; import org.flowable.bpmn.model.*;
import org.flowable.bpmn.model.Process; import org.flowable.bpmn.model.Process;
import org.flowable.engine.delegate.ExecutionListener;
import org.flowable.engine.delegate.TaskListener;
import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service; import org.springframework.stereotype.Service;
...@@ -27,6 +29,7 @@ import java.util.UUID; ...@@ -27,6 +29,7 @@ import java.util.UUID;
import static com.junmp.junmpProcess.common.WorkFlowConstants.START_EVENT_ID; import static com.junmp.junmpProcess.common.WorkFlowConstants.START_EVENT_ID;
import static com.junmp.junmpProcess.utils.BpmnModelUtils.createEndEvent; import static com.junmp.junmpProcess.utils.BpmnModelUtils.createEndEvent;
import static com.junmp.junmpProcess.utils.BpmnModelUtils.createStartEvent; import static com.junmp.junmpProcess.utils.BpmnModelUtils.createStartEvent;
import static org.flowable.bpmn.model.ImplementationType.IMPLEMENTATION_TYPE_DELEGATEEXPRESSION;
/** /**
* @author : willian fu * @author : willian fu
...@@ -69,18 +72,19 @@ public class ProcessTemplateServiceImpl extends ServiceImpl<ProcessTemplatesMapp ...@@ -69,18 +72,19 @@ public class ProcessTemplateServiceImpl extends ServiceImpl<ProcessTemplatesMapp
bpmnModel.setTargetNamespace(id+""); bpmnModel.setTargetNamespace(id+"");
ExtensionAttribute extensionAttribute=new ExtensionAttribute();
extensionAttribute.setName("Junmp");
extensionAttribute.setNamespace("http://flowable.org/bpmn");
extensionAttribute.setValue(jsonObject.toJSONString());
Process process = new Process(); // 相当于图纸 Process process = new Process(); // 相当于图纸
process.setName(formName); process.setName(formName);
process.setId("Process_"+templateId); process.setId("Process_"+templateId);
process.setExecutable(true); process.setExecutable(true);
bpmnModel.addProcess(process); process.addAttribute(extensionAttribute);
// // 二.开始结束节点
// StartEvent startEvent = createStartEvent();// 新建开始节点
//
// EndEvent endEvent = createEndEvent(); // 新建结束节点
bpmnModel.addProcess(process);
// 二.开始结束节点
// 二.开始结束节点 // 二.开始结束节点
StartEvent startEvent = new StartEvent();// 新建开始节点 StartEvent startEvent = new StartEvent();// 新建开始节点
startEvent.setId("_start"); startEvent.setId("_start");
...@@ -148,8 +152,8 @@ public class ProcessTemplateServiceImpl extends ServiceImpl<ProcessTemplatesMapp ...@@ -148,8 +152,8 @@ public class ProcessTemplateServiceImpl extends ServiceImpl<ProcessTemplatesMapp
* @return Inout * @return Inout
*/ */
private Inout drawBzNode(Process process, JsonNode node,JsonNode formJson,String typeNode) { private Inout drawBzNode(Process process, JsonNode node,JsonNode formJson,String typeNode) {
String id= "Node_"+UUID.randomUUID(); // String id= "Node_"+UUID.randomUUID();
String id="Node_"+ node.get("id").asText();
//创建发起人结点 //创建发起人结点
UserTask task = new UserTask(); UserTask task = new UserTask();
//设置结点ID //设置结点ID
...@@ -159,12 +163,8 @@ public class ProcessTemplateServiceImpl extends ServiceImpl<ProcessTemplatesMapp ...@@ -159,12 +163,8 @@ public class ProcessTemplateServiceImpl extends ServiceImpl<ProcessTemplatesMapp
//通过将 ${initiator} 作为指派人的值,可以将用户任务分配给流程的发起人。当流程实例启动时,${initiator} 会被替换为实际的发起人信息。 //通过将 ${initiator} 作为指派人的值,可以将用户任务分配给流程的发起人。当流程实例启动时,${initiator} 会被替换为实际的发起人信息。
//需要注意的是,在使用表达式时,需要确保流程引擎的配置中启用了表达式语言(例如使用 Flowable 的默认配置,会启用表达式语言)。 //需要注意的是,在使用表达式时,需要确保流程引擎的配置中启用了表达式语言(例如使用 Flowable 的默认配置,会启用表达式语言)。
task.setAssignee("${initiator}"); task.setAssignee("${initiator}");
List<FormProperty> formProperties = formJsonToFormProperty(formJson); List<FormProperty> formProperties = formJsonToFormProperty(formJson);
task.setFormProperties(formProperties); task.setFormProperties(formProperties);
//添加连线 //添加连线
process.addFlowElement(task); process.addFlowElement(task);
return new Inout(id, id); return new Inout(id, id);
...@@ -194,62 +194,91 @@ public class ProcessTemplateServiceImpl extends ServiceImpl<ProcessTemplatesMapp ...@@ -194,62 +194,91 @@ public class ProcessTemplateServiceImpl extends ServiceImpl<ProcessTemplatesMapp
*/ */
private Inout drawAuditNode(Process process, JsonNode node) { private Inout drawAuditNode(Process process, JsonNode node) {
// 绘制节点 // 绘制节点
String id = "Node_"+UUID.randomUUID(); // String id = "Node_"+UUID.randomUUID();
String id ="Node_"+ node.get("id").asText();
UserTask userTask = new UserTask(); UserTask userTask = new UserTask();
userTask.setId(id); userTask.setId(id);
//写入节点名称 //写入节点名称
userTask.setName(node.get("name").asText()); userTask.setName(node.get("name").asText());
ObjectMapper objectMapper = new ObjectMapper(); ObjectMapper objectMapper = new ObjectMapper();
JsonNode[] approverGroups = objectMapper.convertValue(node.get("approverGroups"), JsonNode[].class); JsonNode[] approverGroups = objectMapper.convertValue(node.get("approverGroups"), JsonNode[].class);
for (int i = 0; i < approverGroups.length; i++) { userTask.setExecutionListeners(getTaskListeners());//角色监听
JsonNode element = approverGroups[i]; MultiInstanceLoopCharacteristics multiInstanceLoopCharacteristics = new MultiInstanceLoopCharacteristics();
JsonNode approverType = element.get("approverType"); // 审批人集合参数
JsonNode[] approverIds = objectMapper.convertValue(element.get("approverIds"), JsonNode[].class); multiInstanceLoopCharacteristics.setInputDataItem(userTask.getId()+"assigneeList");
if (approverType != null) { // 迭代集合
//指定人员 multiInstanceLoopCharacteristics.setElementVariable("assigneeName");
if(approverType.asText().equals("1")){ // 并行
for(int j=0;j<approverIds.length;j++){ multiInstanceLoopCharacteristics.setSequential(false);
userTask.setAssignee(approverIds[j].asText()); userTask.setAssignee("${assigneeName}");
} // 设置多实例属性
} userTask.setLoopCharacteristics(multiInstanceLoopCharacteristics);
//指定角色
if(approverType.asText().equals("2")){ // for (int i = 0; i < approverGroups.length; i++) {
userTask.setAssignee(""); //去掉指点人员 // JsonNode element = approverGroups[i];
for(int j=0;j<approverIds.length;j++){ // JsonNode approverType = element.get("approverType");
//设置后选角色 // JsonNode[] approverIds = objectMapper.convertValue(element.get("approverIds"), JsonNode[].class);
userTask.getCandidateGroups().add(approverIds[j].asText()); // if (approverType != null) {
} // //指定人员
userTask.setTaskListeners(getTaskListeners());//角色监听 // if(approverType.asText().equals("1")){
} // for(int j=0;j<approverIds.length;j++){
//指定本部门中的某个角色 // userTask.setAssignee(approverIds[j].asText());
if(approverType.asText().equals("3")){ // }
userTask.setAssignee(""); //去掉指点人员 // }
for(int j=0;j<approverIds.length;j++){ // else
//设置后选角色 // {
userTask.getCandidateGroups().add(approverIds[j].asText()); //
} //// if("1".equals(examineMode)){
// 设置任务监听器 获取本部门的角色才可进行审批 //// multiInstanceLoopCharacteristics.setSequential(true);
userTask.setTaskListeners(getTaskListeners()); //// }
} //// else if("3".equals(examineMode)){
} //// multiInstanceLoopCharacteristics.setCompletionCondition("${nrOfCompletedInstances/nrOfInstances > 0}");
} //// }
//
// }
// //指定角色
//// if(approverType.asText().equals("2")){
////
//// userTask.setAssignee(""); //去掉指点人员
//// for(int j=0;j<approverIds.length;j++){
//// //设置后选角色
//// userTask.getCandidateGroups().add(approverIds[j].asText());
////
//// }
////
//// }
//// //指定本组织机构中的某个角色
//// if(approverType.asText().equals("3")){
//// userTask.setAssignee(""); //去掉指点人员
//// for(int j=0;j<approverIds.length;j++){
//// //设置后选角色
//// userTask.getCandidateGroups().add(approverIds[j].asText());
//// }
////
//// }
//
//
//
// }
//
// }
process.addFlowElement(userTask); process.addFlowElement(userTask);
return new Inout(id, id); return new Inout(id, id);
} }
/** /**
* 获取用户任务监听节点 * 监听任务启动后角色分配事件
* *
* @return 监听节点列表 * @return 监听节点列表
*/ */
private List<FlowableListener> getTaskListeners() { private List<FlowableListener> getTaskListeners() {
List<FlowableListener> taskListeners = new ArrayList<>(); ArrayList<FlowableListener> taskListeners = new ArrayList<>();
//监听器开始class //监听器开始class
FlowableListener listener = new FlowableListener(); FlowableListener listener = new FlowableListener();
listener.setEvent("all"); listener.setEvent(ExecutionListener.EVENTNAME_START);//监听任务启动
listener.setImplementationType("class"); listener.setImplementationType(IMPLEMENTATION_TYPE_DELEGATEEXPRESSION);
listener.setImplementation("org.example.MultiInstanceTaskListener"); listener.setImplementation("${counterSignListener}");//启动角色分配监听事件
taskListeners.add(listener); taskListeners.add(listener);
return taskListeners; return taskListeners;
} }
...@@ -262,6 +291,7 @@ public class ProcessTemplateServiceImpl extends ServiceImpl<ProcessTemplatesMapp ...@@ -262,6 +291,7 @@ public class ProcessTemplateServiceImpl extends ServiceImpl<ProcessTemplatesMapp
*/ */
private Inout drawExclusiveNode(Process process, JsonNode node) { private Inout drawExclusiveNode(Process process, JsonNode node) {
// 开始网关 // 开始网关
// String startId = "Exclusive_"+UUID.randomUUID();
String startId = "Exclusive_"+UUID.randomUUID(); String startId = "Exclusive_"+UUID.randomUUID();
ExclusiveGateway startGateway = new ExclusiveGateway(); ExclusiveGateway startGateway = new ExclusiveGateway();
startGateway.setId(startId); startGateway.setId(startId);
......
...@@ -279,7 +279,7 @@ public class BpmnModelUtils { ...@@ -279,7 +279,7 @@ public class BpmnModelUtils {
incoming.put("incoming", Collections.singletonList(fromId)); incoming.put("incoming", Collections.singletonList(fromId));
String id = createTask(process, flowNode, sequenceFlows, childNodeMap); String id = createTask(process, flowNode, sequenceFlows, childNodeMap);
// 如果当前任务还有后续任务,则遍历创建后续任务 // 如果当前任务还有后续任务,则遍历创建后续任务
ChildNode children = flowNode.getChildren(); ChildNode children = flowNode.getChildNode();
if (Objects.nonNull(children) && StringUtils.isNotBlank(children.getId())) { if (Objects.nonNull(children) && StringUtils.isNotBlank(children.getId())) {
return create(id, children, process, bpmnModel, sequenceFlows, childNodeMap); return create(id, children, process, bpmnModel, sequenceFlows, childNodeMap);
} else { } else {
...@@ -291,7 +291,7 @@ public class BpmnModelUtils { ...@@ -291,7 +291,7 @@ public class BpmnModelUtils {
incoming.put("incoming", Collections.singletonList(fromId)); incoming.put("incoming", Collections.singletonList(fromId));
String id = createTask(process, flowNode, sequenceFlows, childNodeMap); String id = createTask(process, flowNode, sequenceFlows, childNodeMap);
// 如果当前任务还有后续任务,则遍历创建后续任务 // 如果当前任务还有后续任务,则遍历创建后续任务
ChildNode children = flowNode.getChildren(); ChildNode children = flowNode.getChildNode();
if (Objects.nonNull(children) && StringUtils.isNotBlank(children.getId())) { if (Objects.nonNull(children) && StringUtils.isNotBlank(children.getId())) {
return create(id, children, process, bpmnModel, sequenceFlows, childNodeMap); return create(id, children, process, bpmnModel, sequenceFlows, childNodeMap);
} else { } else {
...@@ -340,10 +340,10 @@ public class BpmnModelUtils { ...@@ -340,10 +340,10 @@ public class BpmnModelUtils {
process.addFlowElement(exclusiveGateway); process.addFlowElement(exclusiveGateway);
process.addFlowElement(connect(formId, exclusiveGatewayId, sequenceFlows, childNodeMap, process)); process.addFlowElement(connect(formId, exclusiveGatewayId, sequenceFlows, childNodeMap, process));
if (Objects.isNull(flowNode.getBranchs()) && Objects.isNull(flowNode.getChildren())) { if (Objects.isNull(flowNode.getConditionNodes()) && Objects.isNull(flowNode.getChildNode())) {
return exclusiveGatewayId; return exclusiveGatewayId;
} }
List<ChildNode> flowNodes = flowNode.getBranchs(); List<ChildNode> flowNodes = flowNode.getConditionNodes();
List<String> incoming = Lists.newArrayListWithCapacity(flowNodes.size()); List<String> incoming = Lists.newArrayListWithCapacity(flowNodes.size());
List<JSONObject> conditions = Lists.newCopyOnWriteArrayList(); List<JSONObject> conditions = Lists.newCopyOnWriteArrayList();
for (ChildNode element : flowNodes) { for (ChildNode element : flowNodes) {
...@@ -352,7 +352,7 @@ public class BpmnModelUtils { ...@@ -352,7 +352,7 @@ public class BpmnModelUtils {
exclusiveGateway.setDefaultFlow(element.getId()); exclusiveGateway.setDefaultFlow(element.getId());
} }
childNodeMap.put(element.getId(), element); childNodeMap.put(element.getId(), element);
ChildNode childNode = element.getChildren(); ChildNode childNode = element.getChildNode();
String nodeName = element.getName(); String nodeName = element.getName();
Properties props = element.getProps(); Properties props = element.getProps();
...@@ -395,7 +395,7 @@ public class BpmnModelUtils { ...@@ -395,7 +395,7 @@ public class BpmnModelUtils {
} }
ChildNode childNode = flowNode.getChildren(); ChildNode childNode = flowNode.getChildNode();
if (Objects.nonNull(childNode) && StringUtils.isNotBlank(childNode.getId())) { if (Objects.nonNull(childNode) && StringUtils.isNotBlank(childNode.getId())) {
String parentId = childNode.getParentId(); String parentId = childNode.getParentId();
...@@ -418,8 +418,8 @@ public class BpmnModelUtils { ...@@ -418,8 +418,8 @@ public class BpmnModelUtils {
incomingObj.put("incoming", incoming); incomingObj.put("incoming", incoming);
FlowElement flowElement = bpmnModel.getFlowElement(incoming.get(0)); FlowElement flowElement = bpmnModel.getFlowElement(incoming.get(0));
// 1.0 先进行边连接, 暂存 nextNode // 1.0 先进行边连接, 暂存 nextNode
ChildNode nextNode = childNode.getChildren(); ChildNode nextNode = childNode.getChildNode();
childNode.setChildren(null); childNode.setChildNode(null);
String identifier = endExId; String identifier = endExId;
for (int i = 0; i < incoming.size(); i++) { for (int i = 0; i < incoming.size(); i++) {
process.addFlowElement(connect(incoming.get(i), identifier, sequenceFlows, childNodeMap, process)); process.addFlowElement(connect(incoming.get(i), identifier, sequenceFlows, childNodeMap, process));
...@@ -504,15 +504,15 @@ public class BpmnModelUtils { ...@@ -504,15 +504,15 @@ public class BpmnModelUtils {
process.addFlowElement(parallelGateway); process.addFlowElement(parallelGateway);
process.addFlowElement(connect(formId, parallelGatewayId, sequenceFlows, childNodeMap, process)); process.addFlowElement(connect(formId, parallelGatewayId, sequenceFlows, childNodeMap, process));
if (Objects.isNull(flowNode.getBranchs()) && Objects.isNull(flowNode.getChildren())) { if (Objects.isNull(flowNode.getConditionNodes()) && Objects.isNull(flowNode.getChildNode())) {
return parallelGatewayId; return parallelGatewayId;
} }
List<ChildNode> flowNodes = flowNode.getBranchs(); List<ChildNode> flowNodes = flowNode.getConditionNodes();
List<String> incoming = Lists.newArrayListWithCapacity(flowNodes.size()); List<String> incoming = Lists.newArrayListWithCapacity(flowNodes.size());
for (ChildNode element : flowNodes) { for (ChildNode element : flowNodes) {
childNodeMap.put(element.getId(), element); childNodeMap.put(element.getId(), element);
ChildNode childNode = element.getChildren(); ChildNode childNode = element.getChildNode();
if (Objects.isNull(childNode) || StringUtils.isBlank(childNode.getId())) { if (Objects.isNull(childNode) || StringUtils.isBlank(childNode.getId())) {
incoming.add(parallelGatewayId); incoming.add(parallelGatewayId);
continue; continue;
...@@ -523,7 +523,7 @@ public class BpmnModelUtils { ...@@ -523,7 +523,7 @@ public class BpmnModelUtils {
} }
} }
ChildNode childNode = flowNode.getChildren(); ChildNode childNode = flowNode.getChildNode();
if (Objects.nonNull(childNode) && StringUtils.isNotBlank(childNode.getId())) { if (Objects.nonNull(childNode) && StringUtils.isNotBlank(childNode.getId())) {
String parentId = childNode.getParentId(); String parentId = childNode.getParentId();
ChildNode parentChildNode = childNodeMap.get(parentId); ChildNode parentChildNode = childNodeMap.get(parentId);
...@@ -546,8 +546,8 @@ public class BpmnModelUtils { ...@@ -546,8 +546,8 @@ public class BpmnModelUtils {
incomingObj.put("incoming", incoming); incomingObj.put("incoming", incoming);
FlowElement flowElement = bpmnModel.getFlowElement(incoming.get(0)); FlowElement flowElement = bpmnModel.getFlowElement(incoming.get(0));
// 1.0 先进行边连接, 暂存 nextNode // 1.0 先进行边连接, 暂存 nextNode
ChildNode nextNode = childNode.getChildren(); ChildNode nextNode = childNode.getChildNode();
childNode.setChildren(null); childNode.setChildNode(null);
String identifier = endExId; String identifier = endExId;
for (int i = 0; i < incoming.size(); i++) { for (int i = 0; i < incoming.size(); i++) {
FlowElement flowElement1 = bpmnModel.getFlowElement(incoming.get(i)); FlowElement flowElement1 = bpmnModel.getFlowElement(incoming.get(i));
...@@ -579,8 +579,8 @@ public class BpmnModelUtils { ...@@ -579,8 +579,8 @@ public class BpmnModelUtils {
incomingObj.put("incoming", incoming); incomingObj.put("incoming", incoming);
FlowElement flowElement = bpmnModel.getFlowElement(incoming.get(0)); FlowElement flowElement = bpmnModel.getFlowElement(incoming.get(0));
// 1.0 先进行边连接, 暂存 nextNode // 1.0 先进行边连接, 暂存 nextNode
ChildNode nextNode = childNode.getChildren(); ChildNode nextNode = childNode.getChildNode();
childNode.setChildren(null); childNode.setChildNode(null);
String identifier = endExId; String identifier = endExId;
for (int i = 0; i < incoming.size(); i++) { for (int i = 0; i < incoming.size(); i++) {
FlowElement flowElement1 = bpmnModel.getFlowElement(incoming.get(i)); FlowElement flowElement1 = bpmnModel.getFlowElement(incoming.get(i));
...@@ -796,7 +796,7 @@ public class BpmnModelUtils { ...@@ -796,7 +796,7 @@ public class BpmnModelUtils {
Set<String> set = childNodeMap.keySet(); Set<String> set = childNodeMap.keySet();
for (String s : set) { for (String s : set) {
if (StringUtils.isNotBlank(s)) { if (StringUtils.isNotBlank(s)) {
if (s.equals(nodeId)) { if (("Node_"+s).equals(nodeId)) {
return childNodeMap.get(s); return childNodeMap.get(s);
} }
} }
...@@ -806,8 +806,8 @@ public class BpmnModelUtils { ...@@ -806,8 +806,8 @@ public class BpmnModelUtils {
private static void getChildNode(ChildNode childNode, Map<String, ChildNode> childNodeMap) { private static void getChildNode(ChildNode childNode, Map<String, ChildNode> childNodeMap) {
childNodeMap.put(childNode.getId(), childNode); childNodeMap.put(childNode.getId(), childNode);
List<ChildNode> branchs = childNode.getBranchs(); List<ChildNode> branchs = childNode.getConditionNodes();
ChildNode children = childNode.getChildren(); ChildNode children = childNode.getChildNode();
if (branchs != null && branchs.size() > 0) { if (branchs != null && branchs.size() > 0) {
for (ChildNode branch : branchs) { for (ChildNode branch : branchs) {
if (StringUtils.isNotBlank(branch.getId())) { if (StringUtils.isNotBlank(branch.getId())) {
......
Markdown 格式
0%
您添加了 0 到此讨论。请谨慎行事。
请先完成此评论的编辑!
注册 或者 后发表评论