Skip to content
体验新版
项目
组织
正在加载...
登录
切换导航
打开侧边栏
fuyue82
o2oa
提交
ed55bad9
o2oa
项目概览
fuyue82
/
o2oa
与 Fork 源项目一致
Fork自
浙江兰德纵横网络技术股份有限公司 / o2oa
通知
1
Star
0
Fork
0
代码
文件
提交
分支
Tags
贡献者
分支图
Diff
Issue
0
列表
看板
标记
里程碑
合并请求
0
DevOps
流水线
流水线任务
计划
Wiki
0
Wiki
分析
仓库
DevOps
项目成员
Pages
o2oa
项目概览
项目概览
详情
发布
仓库
仓库
文件
提交
分支
标签
贡献者
分支图
比较
Issue
0
Issue
0
列表
看板
标记
里程碑
合并请求
0
合并请求
0
Pages
DevOps
DevOps
流水线
流水线任务
计划
分析
分析
仓库分析
DevOps
Wiki
0
Wiki
成员
成员
收起侧边栏
关闭侧边栏
动态
分支图
创建新Issue
流水线任务
提交
Issue看板
体验新版 GitCode,发现更多精彩内容 >>
提交
ed55bad9
编写于
3月 01, 2022
作者:
R
Ray
浏览文件
操作
浏览文件
下载
电子邮件补丁
差异文件
增加after事件可以保存data
上级
69fb78d9
变更
3
隐藏空白更改
内联
并排
Showing
3 changed file
with
97 addition
and
116 deletion
+97
-116
o2server/x_processplatform_service_processing/src/main/java/com/x/processplatform/service/processing/WorkDataHelper.java
.../x/processplatform/service/processing/WorkDataHelper.java
+23
-27
o2server/x_processplatform_service_processing/src/main/java/com/x/processplatform/service/processing/processor/AbstractProcessor.java
...tform/service/processing/processor/AbstractProcessor.java
+66
-87
o2server/x_processplatform_service_processing/src/main/java/com/x/processplatform/service/processing/processor/AeiObjects.java
...cessplatform/service/processing/processor/AeiObjects.java
+8
-2
未找到文件。
o2server/x_processplatform_service_processing/src/main/java/com/x/processplatform/service/processing/WorkDataHelper.java
浏览文件 @
ed55bad9
package
com.x.processplatform.service.processing
;
import
java.util.ArrayList
;
import
java.util.List
;
import
javax.persistence.EntityManager
;
...
...
@@ -52,12 +51,12 @@ public class WorkDataHelper {
public
WorkDataHelper
(
EntityManagerContainer
emc
,
WorkCompleted
workCompleted
)
throws
Exception
{
if
((
null
==
emc
)
||
(
null
==
workCompleted
))
{
throw
new
Exception
(
"create instance error."
);
throw
new
IllegalState
Exception
(
"create instance error."
);
}
this
.
job
=
workCompleted
.
getJob
();
this
.
distributeFactor
=
workCompleted
.
getDistributeFactor
();
if
(
StringUtils
.
isEmpty
(
this
.
job
))
{
throw
new
Exception
(
"can not create DataHelper job is empty."
);
throw
new
IllegalState
Exception
(
"can not create DataHelper job is empty."
);
}
this
.
emc
=
emc
;
this
.
converter
=
new
DataItemConverter
<>(
Item
.
class
);
...
...
@@ -76,7 +75,7 @@ public class WorkDataHelper {
return
em
.
createQuery
(
cq
.
where
(
p
)).
getResultList
();
}
public
Data
get
()
throws
Exception
{
public
Data
get
()
throws
Exception
DataConvert
{
try
{
if
(
this
.
items
.
isEmpty
())
{
return
new
Data
();
...
...
@@ -95,28 +94,9 @@ public class WorkDataHelper {
}
public
boolean
update
(
JsonElement
jsonElement
)
throws
Exception
{
if
(
jsonElement
.
isJsonNull
())
{
// 如果是空数据就不更新,避免数据被清空
return
false
;
}
if
(
jsonElement
.
isJsonPrimitive
())
{
// 如果是空数据就不更新,避免数据被清空 */
if
(
skipUpdate
(
jsonElement
))
{
return
false
;
}
if
(
jsonElement
.
isJsonObject
())
{
if
(
jsonElement
.
getAsJsonObject
().
size
()
==
0
)
{
// throw new Exception("can not update data object size ==0.");
/** 如果是空数据就不更新,避免数据被清空 */
return
false
;
}
}
if
(
jsonElement
.
isJsonArray
())
{
if
(
jsonElement
.
getAsJsonArray
().
size
()
==
0
)
{
// throw new Exception("can not update data array size ==0.");
/** 如果是空数据就不更新,避免数据被清空 */
return
false
;
}
}
List
<
Item
>
currents
=
converter
.
disassemble
(
jsonElement
);
List
<
Item
>
removes
=
converter
.
subtract
(
items
,
currents
);
List
<
Item
>
adds
=
converter
.
subtract
(
currents
,
items
);
...
...
@@ -136,8 +116,7 @@ public class WorkDataHelper {
emc
.
persist
(
o
);
}
}
List
<
Item
>
list
=
new
ArrayList
<>();
list
=
converter
.
subtract
(
items
,
removes
);
List
<
Item
>
list
=
converter
.
subtract
(
items
,
removes
);
list
.
addAll
(
adds
);
converter
.
sort
(
list
);
items
=
list
;
...
...
@@ -147,6 +126,23 @@ public class WorkDataHelper {
}
}
private
boolean
skipUpdate
(
JsonElement
jsonElement
)
{
if
(
jsonElement
.
isJsonNull
())
{
// 如果是空数据就不更新,避免数据被清空
return
true
;
}
if
(
jsonElement
.
isJsonPrimitive
())
{
// 如果是空数据就不更新,避免数据被清空
return
true
;
}
if
(
jsonElement
.
isJsonObject
()
&&
(
jsonElement
.
getAsJsonObject
().
size
()
==
0
))
{
// 如果是空数据就不更新,避免数据被清空
return
true
;
}
// 如果是空数据就不更新,避免数据被清空
return
(
jsonElement
.
isJsonArray
()
&&
(
jsonElement
.
getAsJsonArray
().
size
()
==
0
));
}
public
boolean
update
(
Data
data
)
throws
Exception
{
JsonElement
jsonElement
=
gson
.
toJsonTree
(
data
);
return
this
.
update
(
jsonElement
);
...
...
@@ -161,7 +157,7 @@ public class WorkDataHelper {
}
}
public
void
fill
(
Item
o
)
throws
Exception
{
public
void
fill
(
Item
o
)
{
o
.
setDistributeFactor
(
this
.
distributeFactor
);
o
.
setBundle
(
this
.
job
);
o
.
setItemCategory
(
ItemCategory
.
pp
);
...
...
o2server/x_processplatform_service_processing/src/main/java/com/x/processplatform/service/processing/processor/AbstractProcessor.java
浏览文件 @
ed55bad9
...
...
@@ -44,7 +44,7 @@ public abstract class AbstractProcessor extends AbstractBaseProcessor {
public
String
arrive
(
String
workId
,
ProcessingConfigurator
processingConfigurator
,
ProcessingAttributes
processingAttributes
)
{
/
* 返回值,如果返回值不为空,将继续循环 */
/
/ 返回值,如果返回值不为空,将继续循环
try
{
Work
work
=
this
.
entityManagerContainer
().
find
(
workId
,
Work
.
class
);
if
(
null
==
work
)
{
...
...
@@ -62,90 +62,78 @@ public abstract class AbstractProcessor extends AbstractBaseProcessor {
}
AeiObjects
aeiObjects
=
new
AeiObjects
(
this
.
business
(),
work
,
activity
,
processingConfigurator
,
processingAttributes
);
/* 清空可能的Manual活动预期人员 */
this
.
arrive_cleanManualTaskIdentityList
(
aeiObjects
);
/* 清空可能的Manual活动授权信息 */
this
.
arrive_cleanManualEmpowerMap
(
aeiObjects
);
// /* 将强制路由标记进行修改 */
// work.setForceRouteArriveCurrentActivity(false);
// if (BooleanUtils.isTrue(work.getForceRoute())) {
// work.setForceRoute(false);
// work.setForceRouteArriveCurrentActivity(true);
// }
/* 计算是否经过人工节点 */
this
.
arrive_updateWorkThroughManual
(
aeiObjects
);
/* 清空BeforeExecuted活动执行一次事件 */
// 清空可能的Manual活动预期人员
this
.
arriveCleanManualTaskIdentityList
(
aeiObjects
);
// 清空可能的Manual活动授权信息
this
.
arriveCleanManualEmpowerMap
(
aeiObjects
);
// 计算是否经过人工节点
this
.
arriveUpdateWorkThroughManual
(
aeiObjects
);
// 清空BeforeExecuted活动执行一次事件
work
.
setBeforeExecuted
(
false
);
aeiObjects
.
getUpdateWorks
().
add
(
work
);
this
.
callBeforeArriveScript
(
aeiObjects
);
this
.
arriveActivity
(
aeiObjects
);
/
* 创建待阅和参阅 */
/
/ 创建待阅和参阅
aeiObjects
.
getCreateReads
().
addAll
(
this
.
concreteRead
(
aeiObjects
));
aeiObjects
.
getCreateReviews
().
addAll
(
this
.
concreteReview
(
aeiObjects
));
/*
* 主方法,进行业务运行
*/
// 主方法,进行业务运行
work
=
this
.
arriveProcessing
(
aeiObjects
);
/*
* 主方法结束
*/
// 主方法结束
if
(
null
==
work
)
{
throw
new
Exception
(
"arrvie return empty, work{id:"
+
workId
+
"}."
);
throw
new
IllegalState
Exception
(
"arrvie return empty, work{id:"
+
workId
+
"}."
);
}
if
(
null
!=
aeiObjects
.
getProcess
())
{
if
(
StringUtils
.
equalsIgnoreCase
(
aeiObjects
.
getProcess
().
getSerialActivity
(),
aeiObjects
.
getActivity
().
getId
())
&&
(!
StringUtils
.
equals
(
aeiObjects
.
getProcess
().
getSerialPhase
(),
Process
.
SERIALPHASE_INQUIRE
)))
{
if
(
StringUtils
.
isEmpty
(
work
.
getSerial
()))
{
SerialBuilder
serialBuilder
=
new
SerialBuilder
(
ThisApplication
.
context
(),
this
.
entityManagerContainer
(),
work
.
getProcess
(),
work
.
getId
());
String
serial
=
serialBuilder
.
concrete
(
aeiObjects
);
work
.
setSerial
(
serial
);
}
}
if
((
null
!=
aeiObjects
.
getProcess
())
&&
StringUtils
.
equalsIgnoreCase
(
aeiObjects
.
getProcess
().
getSerialActivity
(),
aeiObjects
.
getActivity
().
getId
())
&&
(!
StringUtils
.
equals
(
aeiObjects
.
getProcess
().
getSerialPhase
(),
Process
.
SERIALPHASE_INQUIRE
))
&&
StringUtils
.
isEmpty
(
work
.
getSerial
()))
{
SerialBuilder
serialBuilder
=
new
SerialBuilder
(
ThisApplication
.
context
(),
this
.
entityManagerContainer
(),
work
.
getProcess
(),
work
.
getId
());
String
serial
=
serialBuilder
.
concrete
(
aeiObjects
);
work
.
setSerial
(
serial
);
}
aeiObjects
.
commit
();
this
.
arriveCommitted
(
aeiObjects
);
/
* 运行AfterArriveScript时间 */
/
/ 运行AfterArriveScript时间
this
.
callAfterArriveScript
(
aeiObjects
);
return
work
.
getId
();
}
catch
(
Exception
e
)
{
}
catch
(
Exception
e
)
{
LOGGER
.
error
(
e
);
return
null
;
}
}
private
void
arrive
_cleanManualTaskIdentityList
(
AeiObjects
aeiObjects
)
throws
Exception
{
aeiObjects
.
getWork
().
setManualTaskIdentityList
(
new
ArrayList
<
String
>());
private
void
arrive
CleanManualTaskIdentityList
(
AeiObjects
aeiObjects
)
{
aeiObjects
.
getWork
().
setManualTaskIdentityList
(
new
ArrayList
<>());
}
private
void
arrive
_cleanManualEmpowerMap
(
AeiObjects
aeiObjects
)
throws
Exception
{
aeiObjects
.
getWork
().
getProperties
().
setManualEmpowerMap
(
new
LinkedHashMap
<
String
,
String
>());
private
void
arrive
CleanManualEmpowerMap
(
AeiObjects
aeiObjects
)
{
aeiObjects
.
getWork
().
getProperties
().
setManualEmpowerMap
(
new
LinkedHashMap
<>());
}
private
void
arrive
_u
pdateWorkThroughManual
(
AeiObjects
aeiObjects
)
throws
Exception
{
boolean
value
=
aeiObjects
.
getWorkLogs
().
stream
()
.
filter
(
o
->
{
return
Objects
.
equals
(
ActivityType
.
manual
,
o
.
getArrivedActivityType
())
&&
BooleanUtils
.
isTrue
(
o
.
getConnected
());
})
.
count
()
>
0
;
private
void
arrive
U
pdateWorkThroughManual
(
AeiObjects
aeiObjects
)
throws
Exception
{
boolean
value
=
aeiObjects
.
getWorkLogs
().
stream
()
.
filter
(
o
->
Objects
.
equals
(
ActivityType
.
manual
,
o
.
getArrivedActivityType
())
&&
BooleanUtils
.
isTrue
(
o
.
getConnected
()))
.
count
()
>
0
;
aeiObjects
.
getWork
().
setWorkThroughManual
(
value
);
}
private
void
callBeforeArriveScript
(
AeiObjects
aeiObjects
)
throws
Exception
{
if
(
aeiObjects
.
getActivityProcessingConfigurator
().
getCallBeforeArriveScript
())
{
if
(
this
.
hasBeforeArriveScript
(
aeiObjects
.
getProcess
(),
aeiObjects
.
getActivity
()))
{
CompiledScript
cs
=
null
;
if
(
this
.
hasBeforeArriveScript
(
aeiObjects
.
getProcess
()))
{
cs
=
aeiObjects
.
business
().
element
().
getCompiledScript
(
aeiObjects
.
getApplication
().
getId
(),
aeiObjects
.
getProcess
(),
Business
.
EVENT_BEFOREARRIVE
);
JsonScriptingExecutor
.
eval
(
cs
,
aeiObjects
.
scriptContext
());
}
if
(
this
.
hasBeforeArriveScript
(
aeiObjects
.
getActivity
()))
{
cs
=
aeiObjects
.
business
().
element
().
getCompiledScript
(
aeiObjects
.
getApplication
().
getId
(),
aeiObjects
.
getActivity
(),
Business
.
EVENT_BEFOREARRIVE
);
JsonScriptingExecutor
.
eval
(
cs
,
aeiObjects
.
scriptContext
());
}
if
(
BooleanUtils
.
isTrue
(
aeiObjects
.
getActivityProcessingConfigurator
().
getCallBeforeArriveScript
())
&&
this
.
hasBeforeArriveScript
(
aeiObjects
.
getProcess
(),
aeiObjects
.
getActivity
()))
{
CompiledScript
cs
=
null
;
if
(
this
.
hasBeforeArriveScript
(
aeiObjects
.
getProcess
()))
{
cs
=
aeiObjects
.
business
().
element
().
getCompiledScript
(
aeiObjects
.
getApplication
().
getId
(),
aeiObjects
.
getProcess
(),
Business
.
EVENT_BEFOREARRIVE
);
JsonScriptingExecutor
.
eval
(
cs
,
aeiObjects
.
scriptContext
());
}
if
(
this
.
hasBeforeArriveScript
(
aeiObjects
.
getActivity
()))
{
cs
=
aeiObjects
.
business
().
element
().
getCompiledScript
(
aeiObjects
.
getApplication
().
getId
(),
aeiObjects
.
getActivity
(),
Business
.
EVENT_BEFOREARRIVE
);
JsonScriptingExecutor
.
eval
(
cs
,
aeiObjects
.
scriptContext
());
}
}
}
...
...
@@ -197,11 +185,6 @@ public abstract class AbstractProcessor extends AbstractBaseProcessor {
if
(
null
==
work
)
{
throw
new
ExceptionWorkNotExist
(
workId
);
}
// if (BooleanUtils.isTrue(work.getForceRoute())) {
// /** 如果是调度那么跳过运行 */
// results.add(work.getId());
// return results;
// }
ActivityType
activityType
=
work
.
getActivityType
();
if
(
null
==
activityType
)
{
throw
new
ExceptionEmptyActivityType
(
work
.
getTitle
(),
work
.
getId
(),
work
.
getActivityType
());
...
...
@@ -215,13 +198,13 @@ public abstract class AbstractProcessor extends AbstractBaseProcessor {
AeiObjects
aeiObjects
=
new
AeiObjects
(
this
.
business
(),
work
,
activity
,
processingConfigurator
,
processingAttributes
);
aeiObjects
.
getUpdateWorks
().
add
(
work
);
/
* 如果是调度路由,需要重新设置froceRoute */
/
/ 如果是调度路由,需要重新设置froceRoute
if
(
BooleanUtils
.
isNotTrue
(
work
.
getBeforeExecuted
()))
{
/
* 仅执行一次BeforeExecuteScript中的代码 */
/
/ 仅执行一次BeforeExecuteScript中的代码
this
.
callBeforeExecuteScript
(
aeiObjects
);
work
.
setBeforeExecuted
(
true
);
}
/
* 运行业务方法 */
/
/ 运行业务方法
List
<
Work
>
works
=
this
.
executeProcessing
(
aeiObjects
);
if
(
ListTools
.
isNotEmpty
(
works
))
{
...
...
@@ -235,6 +218,9 @@ public abstract class AbstractProcessor extends AbstractBaseProcessor {
if
(
ListTools
.
isNotEmpty
(
works
))
{
/** 已经有返回的work将要离开当前环节,执行AfterExecuteScript中的代码 */
this
.
callAfterExecuteScript
(
aeiObjects
);
if
(
aeiObjects
.
commitData
())
{
aeiObjects
.
entityManagerContainer
().
commit
();
}
}
}
catch
(
Exception
e
)
{
LOGGER
.
error
(
e
);
...
...
@@ -297,11 +283,6 @@ public abstract class AbstractProcessor extends AbstractBaseProcessor {
AeiObjects
aeiObjects
=
new
AeiObjects
(
this
.
business
(),
work
,
activity
,
processingConfigurator
,
processingAttributes
);
aeiObjects
.
getUpdateWorks
().
add
(
work
);
// if (BooleanUtils.isTrue(work.getForceRoute())) {
// /** 如果是调度那么跳过运行 */
// results.add(work.getId());
// return results;
// }
/* 运行查询路由前脚本 */
this
.
callBeforeInquireScript
(
aeiObjects
);
/*
...
...
@@ -313,7 +294,7 @@ public abstract class AbstractProcessor extends AbstractBaseProcessor {
*/
aeiObjects
.
addSelectRoutes
(
selectRoutes
);
if
((
null
==
selectRoutes
)
||
selectRoutes
.
isEmpty
())
{
throw
new
Exception
(
"inquire return empty routes"
);
throw
new
IllegalState
Exception
(
"inquire return empty routes"
);
}
List
<
Work
>
works
=
new
ArrayList
<>();
/** 运行查询路由后脚本 */
...
...
@@ -322,28 +303,26 @@ public abstract class AbstractProcessor extends AbstractBaseProcessor {
work
.
setDestinationRoute
(
selectRoutes
.
get
(
0
).
getId
());
work
.
setDestinationRouteName
(
selectRoutes
.
get
(
0
).
getName
());
works
.
add
(
work
);
// }
for
(
Work
o
:
works
)
{
results
.
add
(
o
.
getId
());
}
if
(
null
!=
aeiObjects
.
getProcess
())
{
if
(
StringUtils
.
equalsIgnoreCase
(
aeiObjects
.
getProcess
().
getSerialActivity
(),
aeiObjects
.
getActivity
().
getId
())
&&
(
StringUtils
.
equals
(
aeiObjects
.
getProcess
().
getSerialPhase
(),
Process
.
SERIALPHASE_INQUIRE
)))
{
if
(
StringUtils
.
isEmpty
(
work
.
getSerial
()))
{
SerialBuilder
serialBuilder
=
new
SerialBuilder
(
ThisApplication
.
context
(),
this
.
entityManagerContainer
(),
work
.
getProcess
(),
work
.
getId
());
String
serial
=
serialBuilder
.
concrete
(
aeiObjects
);
work
.
setSerial
(
serial
);
}
}
if
((
null
!=
aeiObjects
.
getProcess
())
&&
StringUtils
.
equalsIgnoreCase
(
aeiObjects
.
getProcess
().
getSerialActivity
(),
aeiObjects
.
getActivity
().
getId
())
&&
(
StringUtils
.
equals
(
aeiObjects
.
getProcess
().
getSerialPhase
(),
Process
.
SERIALPHASE_INQUIRE
))
&&
StringUtils
.
isEmpty
(
work
.
getSerial
()))
{
SerialBuilder
serialBuilder
=
new
SerialBuilder
(
ThisApplication
.
context
(),
this
.
entityManagerContainer
(),
work
.
getProcess
(),
work
.
getId
());
String
serial
=
serialBuilder
.
concrete
(
aeiObjects
);
work
.
setSerial
(
serial
);
}
aeiObjects
.
commit
();
this
.
inquireCommitted
(
aeiObjects
);
/
** 运行 AfterInquireScript事件 */
/
/ 运行 AfterInquireScript事件
this
.
callAfterInquireScript
(
aeiObjects
);
}
catch
(
Exception
e
)
{
}
catch
(
Exception
e
)
{
LOGGER
.
error
(
e
);
}
return
results
;
...
...
o2server/x_processplatform_service_processing/src/main/java/com/x/processplatform/service/processing/processor/AeiObjects.java
浏览文件 @
ed55bad9
...
...
@@ -1321,7 +1321,13 @@ public class AeiObjects extends GsonPropertyObject {
}
}
private
void
commitData
()
throws
Exception
{
/**
* 更新data对象,这个方法会在流程executingCommitted之后再次调用,实现可以在after事件中修改数据.
*
* @return 是否有Item发生了更新
* @throws Exception
*/
public
boolean
commitData
()
throws
Exception
{
List
<
Attachment
>
os
=
ListUtils
.
subtract
(
this
.
getAttachments
(),
this
.
getDeleteAttachments
());
os
=
ListUtils
.
sum
(
os
,
this
.
getCreateAttachments
());
Data
dataToUpdate
=
this
.
getData
().
removeWork
().
removeAttachmentList
().
setAttachmentList
(
os
);
...
...
@@ -1330,7 +1336,7 @@ public class AeiObjects extends GsonPropertyObject {
}
else
{
dataToUpdate
.
setWork
(
this
.
getWork
());
}
this
.
getWorkDataHelper
().
update
(
dataToUpdate
);
return
this
.
getWorkDataHelper
().
update
(
dataToUpdate
);
}
private
void
commitDynamicEntity
()
{
...
...
编辑
预览
Markdown
is supported
0%
请重试
或
添加新附件
.
添加附件
取消
You are about to add
0
people
to the discussion. Proceed with caution.
先完成此消息的编辑!
取消
想要评论请
注册
或
登录