Commit 2d736aa6 by 赵剑炜

基础流程绘制测试完成

parent 3b7af128
package org.jeecg.modules.junmpProcess.controller;
import com.fasterxml.jackson.databind.JsonNode;
import com.fasterxml.jackson.databind.ObjectMapper;
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiOperation;
import lombok.SneakyThrows;
import lombok.extern.slf4j.Slf4j;
import org.jeecg.common.aspect.annotation.PermissionData;
import org.jeecg.modules.junmpProcess.common.Result;
import org.jeecg.modules.junmpProcess.dto.StartProcessInstanceDTO;
import org.jeecg.modules.junmpProcess.dto.json.flowJson.FlowChildNode;
import org.jeecg.modules.junmpProcess.entity.ProcessTemplates;
import org.jeecg.modules.junmpProcess.service.Bussiness.WorkProcessService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.*;
@Slf4j
@RestController
@RequestMapping("/Bpmn")
@Api(tags = "bnpm接口")
public class BpmnController {
@Autowired
private WorkProcessService ProcessService;
@SneakyThrows
@ApiOperation(value = "通过模板id查看流程信息 会附带流程定义id", notes = "获取所有Demo数据列表")
@PostMapping(value = "bpmn/create")
public boolean create(@RequestBody String nodeJson){
ObjectMapper objectMapper = new ObjectMapper();
JsonNode jsonNode = objectMapper.readTree(nodeJson);
return ProcessService.createBpmn(jsonNode);
}
}
......@@ -13,6 +13,7 @@ public class FlowChildNode {
private String name;
private int type;
private int status;
private boolean error;
private FlowChildNode childNode;
private boolean addable;
private List<FlowChildNode> conditionNodes;
......@@ -24,6 +25,5 @@ public class FlowChildNode {
private Map<String,Object> configure;
private List<FlowConditionNodes> FlowConditionNodes;
private boolean deletable;
private boolean error;
private String content;
}
package org.jeecg.modules.junmpProcess.service.Bussiness;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.fasterxml.jackson.databind.JsonNode;
import org.flowable.bpmn.model.Process;
import org.jeecg.modules.junmpProcess.common.Result;
import org.jeecg.modules.junmpProcess.dto.*;
import org.jeecg.modules.junmpProcess.dto.json.flowJson.FlowChildNode;
import org.jeecg.modules.junmpProcess.dto.json.flowJson.Inout;
import org.jeecg.modules.junmpProcess.entity.ProcessTemplates;
import org.jeecg.modules.junmpProcess.vo.HandleDataVO;
import org.jeecg.modules.junmpProcess.vo.HistoryProcessInstanceVO;
......@@ -20,7 +23,7 @@ public interface WorkProcessService {
* 创建表单
* @return
*/
boolean createBpmn(FlowChildNode flowdto);
boolean createBpmn(JsonNode flowdto);
/**
* 获取用户可见表单
......
......@@ -5,8 +5,8 @@ import cn.hutool.core.map.MapUtil;
import com.alibaba.fastjson.JSONObject;
import com.alibaba.fastjson.TypeReference;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.fasterxml.jackson.databind.JsonNode;
import com.google.common.collect.Lists;
import com.sun.org.apache.bcel.internal.generic.RETURN;
import org.apache.commons.lang3.StringUtils;
import org.flowable.bpmn.BpmnAutoLayout;
import org.flowable.bpmn.converter.BpmnXMLConverter;
......@@ -77,19 +77,7 @@ public class WorkProcessServiceImpl implements WorkProcessService {
public boolean createBpmn(FlowChildNode FlowDTO) {
// String processJson = FlowDTO.getProcess();
// FlowChildNode childNode = JSONObject.parseObject(processJson, new TypeReference<FlowChildNode>(){});
// Integer groupId = FlowDTO.getGroupId();
// JSONObject jsonObject=new JSONObject();
// BpmnModel bpmnModel = assemBpmnModel( childNode, groupId
// );
// repositoryService.createDeployment()
//// .addBpmnModel(formName + ".bpmn", bpmnModel)
//// .name(formName)
// .category(groupId + "")
// .deploy();
// return true;
public boolean createBpmn(JsonNode FlowDTO) {
// 一.准备工作
BpmnModel bpmnModel = new BpmnModel();
Process process = new Process(); // 相当于图纸
......@@ -122,17 +110,17 @@ public class WorkProcessServiceImpl implements WorkProcessService {
* @param endId 结束节点
* @param preExpression 上一节点表达式
*/
public void drawNode(Process process, FlowChildNode node, String preId, String endId, String preExpression) {
public void drawNode(Process process, JsonNode node, String preId, String endId, String preExpression) {
// 根据type绘制不同种类的节点
Inout inout = drawNodeByType(process, node);
// 绘制前一根线
process.addFlowElement(createSequenceFlow(preId, inout.getIn(), preExpression));
if (node.getChildNode() == null) {
if (node.get("childNode").toString().equals("null") ) {
// 没有下一步, 绘制指向结束的线
process.addFlowElement(createSequenceFlow(inout.getOut(), endId, null));
} else {
// 有下一步, 递归绘制下一个节点
drawNode(process, node.getChildNode(), inout.getOut(), endId, null);
drawNode(process, node.get("childNode"), inout.getOut(), endId, null);
}
}
......@@ -142,12 +130,18 @@ public class WorkProcessServiceImpl implements WorkProcessService {
* @param node
* @return
*/
private Inout drawNodeByType(Process process, FlowChildNode node) {
if (node.getType()==0) {//审核节点
private Inout drawNodeByType(Process process, JsonNode node) {
if (node.get("type").toString().equals("0")) {//根节点或起始节点
return drawRootNode(process, node);
} else if (node.get("type").toString().equals("1")) {//审核节点
return drawAuditNode(process, node);
} else if (node.getType()==1) {//分支节点
} else if (node.get("type").toString().equals("3")) {//分支节点
return drawExclusiveNode(process, node);
} else {
}
else if (node.get("type").toString().equals("4")) {//分支节点
return drawExclusiveNode(process, node);
}
else {
throw new IllegalArgumentException();
}
}
......@@ -157,7 +151,7 @@ public class WorkProcessServiceImpl implements WorkProcessService {
* @param node
* @return
*/
private Inout drawExclusiveNode(Process process, FlowChildNode node) {
private Inout drawExclusiveNode(Process process, JsonNode node) {
// 开始网关
String startId = "Exclusive_"+UUID.randomUUID();
ExclusiveGateway startGateway = new ExclusiveGateway();
......@@ -169,7 +163,7 @@ public class WorkProcessServiceImpl implements WorkProcessService {
endGateway.setId(endId);
process.addFlowElement(endGateway);
// 绘制分支
List<FlowConditionNodes> branches = node.getFlowConditionNodes();
// List<JsonNode> branches = node.get("FlowConditionNodes");
// 针对 gateway 空任务分支 添加条件表达式
......@@ -202,20 +196,71 @@ public class WorkProcessServiceImpl implements WorkProcessService {
}
return flow;
}
/**
* 绘制根节点
* @param process
* @param node
* @return
*/
private Inout drawRootNode( Process process, JsonNode node) {
String id = "Node_"+UUID.randomUUID();
// 如果当前任务还有后续任务,则遍历创建后续任务
JsonNode nextNode = node.get("childNode");
UserTask userTask = new UserTask();
userTask.setName(node.get("name").toString());
userTask.setId(id);
process.addFlowElement(userTask);
return new Inout(id, id);
}
private static String createSimpleUserTask(JSONObject flowNode,Process process,List<SequenceFlow> sequenceFlows) {
List<String> incoming = flowNode.getJSONArray("incoming").toJavaList(String.class);
// 自动生成id
String id = id("userTask");
if (incoming != null && !incoming.isEmpty()) {
UserTask userTask = new UserTask();
userTask.setName(flowNode.getString("name"));
userTask.setId(id);
process.addFlowElement(userTask);
process.addFlowElement(connect(incoming.get(0), id,sequenceFlows));
}
return id;
}
/**
* 连线
* @param from
* @param to
* @param sequenceFlows
* @return
*/
protected static SequenceFlow connect(String from, String to,List<SequenceFlow> sequenceFlows) {
SequenceFlow flow = new SequenceFlow();
flow.setId(id("sequenceFlow"));
flow.setSourceRef(from);
flow.setTargetRef(to);
sequenceFlows.add(flow);
return flow;
}
private static String id(String prefix) {
return prefix + "_" + UUID.randomUUID().toString().replace("-", "").toLowerCase();
}
/**
* 绘制审核节点
* @param process
* @param node
* @return
*/
private Inout drawAuditNode(Process process, FlowChildNode node) {
private Inout drawAuditNode(Process process, JsonNode node) {
// 绘制节点
String id = "Node_"+UUID.randomUUID();
UserTask userTask = new UserTask();
userTask.setId(id);
userTask.setName(node.getName());
userTask.setName(node.get("name").toString());
// 设置多实例
userTask.setAssignee("${user}");
// userTask.setAssignee("${user}");
MultiInstanceLoopCharacteristics multiInstanceLoopCharacteristics = new MultiInstanceLoopCharacteristics();
// if (node.getAssignee().getMultiMode().equals("顺序审批")) {
// multiInstanceLoopCharacteristics.setSequential(true);
......@@ -228,7 +273,7 @@ public class WorkProcessServiceImpl implements WorkProcessService {
// 保存json节点配置到扩展属性
Map<String, Object> extensions = new HashMap<>();
extensions.put("node", node);
// BpmnUtil.addExtensionProperty(userTask, extensions);
process.addFlowElement(userTask);;
return new Inout(id, id);
}
......
Markdown 格式
0%
您添加了 0 到此讨论。请谨慎行事。
请先完成此评论的编辑!
注册 或者 后发表评论