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 { ...@@ -13,6 +13,7 @@ public class FlowChildNode {
private String name; private String name;
private int type; private int type;
private int status; private int status;
private boolean error;
private FlowChildNode childNode; private FlowChildNode childNode;
private boolean addable; private boolean addable;
private List<FlowChildNode> conditionNodes; private List<FlowChildNode> conditionNodes;
...@@ -24,6 +25,5 @@ public class FlowChildNode { ...@@ -24,6 +25,5 @@ public class FlowChildNode {
private Map<String,Object> configure; private Map<String,Object> configure;
private List<FlowConditionNodes> FlowConditionNodes; private List<FlowConditionNodes> FlowConditionNodes;
private boolean deletable; private boolean deletable;
private boolean error;
private String content; private String content;
} }
package org.jeecg.modules.junmpProcess.service.Bussiness; package org.jeecg.modules.junmpProcess.service.Bussiness;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page; 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.common.Result;
import org.jeecg.modules.junmpProcess.dto.*; import org.jeecg.modules.junmpProcess.dto.*;
import org.jeecg.modules.junmpProcess.dto.json.flowJson.FlowChildNode; 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.entity.ProcessTemplates;
import org.jeecg.modules.junmpProcess.vo.HandleDataVO; import org.jeecg.modules.junmpProcess.vo.HandleDataVO;
import org.jeecg.modules.junmpProcess.vo.HistoryProcessInstanceVO; import org.jeecg.modules.junmpProcess.vo.HistoryProcessInstanceVO;
...@@ -20,7 +23,7 @@ public interface WorkProcessService { ...@@ -20,7 +23,7 @@ public interface WorkProcessService {
* 创建表单 * 创建表单
* @return * @return
*/ */
boolean createBpmn(FlowChildNode flowdto); boolean createBpmn(JsonNode flowdto);
/** /**
* 获取用户可见表单 * 获取用户可见表单
......
...@@ -5,8 +5,8 @@ import cn.hutool.core.map.MapUtil; ...@@ -5,8 +5,8 @@ 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.databind.JsonNode;
import com.google.common.collect.Lists; import com.google.common.collect.Lists;
import com.sun.org.apache.bcel.internal.generic.RETURN;
import org.apache.commons.lang3.StringUtils; import org.apache.commons.lang3.StringUtils;
import org.flowable.bpmn.BpmnAutoLayout; import org.flowable.bpmn.BpmnAutoLayout;
import org.flowable.bpmn.converter.BpmnXMLConverter; import org.flowable.bpmn.converter.BpmnXMLConverter;
...@@ -77,19 +77,7 @@ public class WorkProcessServiceImpl implements WorkProcessService { ...@@ -77,19 +77,7 @@ public class WorkProcessServiceImpl implements WorkProcessService {
public boolean createBpmn(FlowChildNode FlowDTO) { public boolean createBpmn(JsonNode 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;
// 一.准备工作 // 一.准备工作
BpmnModel bpmnModel = new BpmnModel(); BpmnModel bpmnModel = new BpmnModel();
Process process = new Process(); // 相当于图纸 Process process = new Process(); // 相当于图纸
...@@ -122,17 +110,17 @@ public class WorkProcessServiceImpl implements WorkProcessService { ...@@ -122,17 +110,17 @@ public class WorkProcessServiceImpl implements WorkProcessService {
* @param endId 结束节点 * @param endId 结束节点
* @param preExpression 上一节点表达式 * @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绘制不同种类的节点 // 根据type绘制不同种类的节点
Inout inout = drawNodeByType(process, node); Inout inout = drawNodeByType(process, node);
// 绘制前一根线 // 绘制前一根线
process.addFlowElement(createSequenceFlow(preId, inout.getIn(), preExpression)); 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)); process.addFlowElement(createSequenceFlow(inout.getOut(), endId, null));
} else { } 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 { ...@@ -142,12 +130,18 @@ public class WorkProcessServiceImpl implements WorkProcessService {
* @param node * @param node
* @return * @return
*/ */
private Inout drawNodeByType(Process process, FlowChildNode node) { private Inout drawNodeByType(Process process, JsonNode node) {
if (node.getType()==0) {//审核节点 if (node.get("type").toString().equals("0")) {//根节点或起始节点
return drawRootNode(process, node);
} else if (node.get("type").toString().equals("1")) {//审核节点
return drawAuditNode(process, node); return drawAuditNode(process, node);
} else if (node.getType()==1) {//分支节点 } else if (node.get("type").toString().equals("3")) {//分支节点
return drawExclusiveNode(process, node); return drawExclusiveNode(process, node);
} else { }
else if (node.get("type").toString().equals("4")) {//分支节点
return drawExclusiveNode(process, node);
}
else {
throw new IllegalArgumentException(); throw new IllegalArgumentException();
} }
} }
...@@ -157,7 +151,7 @@ public class WorkProcessServiceImpl implements WorkProcessService { ...@@ -157,7 +151,7 @@ public class WorkProcessServiceImpl implements WorkProcessService {
* @param node * @param node
* @return * @return
*/ */
private Inout drawExclusiveNode(Process process, FlowChildNode node) { private Inout drawExclusiveNode(Process process, JsonNode node) {
// 开始网关 // 开始网关
String startId = "Exclusive_"+UUID.randomUUID(); String startId = "Exclusive_"+UUID.randomUUID();
ExclusiveGateway startGateway = new ExclusiveGateway(); ExclusiveGateway startGateway = new ExclusiveGateway();
...@@ -169,7 +163,7 @@ public class WorkProcessServiceImpl implements WorkProcessService { ...@@ -169,7 +163,7 @@ public class WorkProcessServiceImpl implements WorkProcessService {
endGateway.setId(endId); endGateway.setId(endId);
process.addFlowElement(endGateway); process.addFlowElement(endGateway);
// 绘制分支 // 绘制分支
List<FlowConditionNodes> branches = node.getFlowConditionNodes(); // List<JsonNode> branches = node.get("FlowConditionNodes");
// 针对 gateway 空任务分支 添加条件表达式 // 针对 gateway 空任务分支 添加条件表达式
...@@ -202,20 +196,71 @@ public class WorkProcessServiceImpl implements WorkProcessService { ...@@ -202,20 +196,71 @@ public class WorkProcessServiceImpl implements WorkProcessService {
} }
return flow; 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 process
* @param node * @param node
* @return * @return
*/ */
private Inout drawAuditNode(Process process, FlowChildNode node) { private Inout drawAuditNode(Process process, JsonNode node) {
// 绘制节点 // 绘制节点
String id = "Node_"+UUID.randomUUID(); String id = "Node_"+UUID.randomUUID();
UserTask userTask = new UserTask(); UserTask userTask = new UserTask();
userTask.setId(id); userTask.setId(id);
userTask.setName(node.getName()); userTask.setName(node.get("name").toString());
// 设置多实例 // 设置多实例
userTask.setAssignee("${user}"); // userTask.setAssignee("${user}");
MultiInstanceLoopCharacteristics multiInstanceLoopCharacteristics = new MultiInstanceLoopCharacteristics(); MultiInstanceLoopCharacteristics multiInstanceLoopCharacteristics = new MultiInstanceLoopCharacteristics();
// if (node.getAssignee().getMultiMode().equals("顺序审批")) { // if (node.getAssignee().getMultiMode().equals("顺序审批")) {
// multiInstanceLoopCharacteristics.setSequential(true); // multiInstanceLoopCharacteristics.setSequential(true);
...@@ -228,7 +273,7 @@ public class WorkProcessServiceImpl implements WorkProcessService { ...@@ -228,7 +273,7 @@ public class WorkProcessServiceImpl implements WorkProcessService {
// 保存json节点配置到扩展属性 // 保存json节点配置到扩展属性
Map<String, Object> extensions = new HashMap<>(); Map<String, Object> extensions = new HashMap<>();
extensions.put("node", node); extensions.put("node", node);
// BpmnUtil.addExtensionProperty(userTask, extensions); process.addFlowElement(userTask);;
return new Inout(id, id); return new Inout(id, id);
} }
......
Markdown 格式
0%
您添加了 0 到此讨论。请谨慎行事。
请先完成此评论的编辑!
注册 或者 后发表评论