Skip to content
项目
群组
代码片段
帮助
当前项目
正在载入...
登录 / 注册
切换导航面板
J
jeecg-workflow
概览
Overview
Details
Activity
Cycle Analytics
版本库
Repository
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Charts
问题
0
Issues
0
列表
Board
标记
里程碑
合并请求
0
Merge Requests
0
CI / CD
CI / CD
流水线
作业
日程表
图表
维基
Wiki
代码片段
Snippets
成员
Members
Collapse sidebar
Close sidebar
活动
图像
聊天
创建新问题
作业
提交
Issue Boards
Open sidebar
赵剑炜
jeecg-workflow
Commits
2d736aa6
Commit
2d736aa6
authored
May 05, 2023
by
赵剑炜
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
基础流程绘制测试完成
parent
3b7af128
隐藏空白字符变更
内嵌
并排
正在显示
4 个修改的文件
包含
114 行增加
和
29 行删除
+114
-29
BpmnController.java
jeecg-module-process/src/main/java/org/jeecg/modules/junmpProcess/controller/BpmnController.java
+37
-0
FlowChildNode.java
jeecg-module-process/src/main/java/org/jeecg/modules/junmpProcess/dto/json/flowJson/FlowChildNode.java
+1
-1
WorkProcessService.java
jeecg-module-process/src/main/java/org/jeecg/modules/junmpProcess/service/Bussiness/WorkProcessService.java
+4
-1
WorkProcessServiceImpl.java
jeecg-module-process/src/main/java/org/jeecg/modules/junmpProcess/service/Bussiness/impl/WorkProcessServiceImpl.java
+72
-27
没有找到文件。
jeecg-module-process/src/main/java/org/jeecg/modules/junmpProcess/controller/BpmnController.java
0 → 100644
View file @
2d736aa6
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
);
}
}
jeecg-module-process/src/main/java/org/jeecg/modules/junmpProcess/dto/json/flowJson/FlowChildNode.java
View file @
2d736aa6
...
...
@@ -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
;
}
jeecg-module-process/src/main/java/org/jeecg/modules/junmpProcess/service/Bussiness/WorkProcessService.java
View file @
2d736aa6
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
(
FlowChild
Node
flowdto
);
boolean
createBpmn
(
Json
Node
flowdto
);
/**
* 获取用户可见表单
...
...
jeecg-module-process/src/main/java/org/jeecg/modules/junmpProcess/service/Bussiness/impl/WorkProcessServiceImpl.java
View file @
2d736aa6
...
...
@@ -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
,
FlowChild
Node
node
,
String
preId
,
String
endId
,
String
preExpression
)
{
public
void
drawNode
(
Process
process
,
Json
Node
node
,
String
preId
,
String
endId
,
String
preExpression
)
{
// 根据type绘制不同种类的节点
Inout
inout
=
drawNodeByType
(
process
,
node
);
// 绘制前一根线
process
.
addFlowElement
(
createSequenceFlow
(
preId
,
inout
.
getIn
(),
preExpression
));
if
(
node
.
get
ChildNode
()
==
null
)
{
if
(
node
.
get
(
"childNode"
).
toString
().
equals
(
"null"
)
)
{
// 没有下一步, 绘制指向结束的线
process
.
addFlowElement
(
createSequenceFlow
(
inout
.
getOut
(),
endId
,
null
));
}
else
{
// 有下一步, 递归绘制下一个节点
drawNode
(
process
,
node
.
get
ChildNode
(
),
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
.
get
Type
()==
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
,
FlowChild
Node
node
)
{
private
Inout
drawExclusiveNode
(
Process
process
,
Json
Node
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
,
FlowChild
Node
node
)
{
private
Inout
drawAuditNode
(
Process
process
,
Json
Node
node
)
{
// 绘制节点
String
id
=
"Node_"
+
UUID
.
randomUUID
();
UserTask
userTask
=
new
UserTask
();
userTask
.
setId
(
id
);
userTask
.
setName
(
node
.
get
Name
());
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
人
到此讨论。请谨慎行事。
请先完成此评论的编辑!
取消
请
注册
或者
登录
后发表评论