Skip to content
体验新版
项目
组织
正在加载...
登录
切换导航
打开侧边栏
fuyue82
o2oa
提交
59114629
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,发现更多精彩内容 >>
提交
59114629
编写于
1月 07, 2021
作者:
O
o2null
浏览文件
操作
浏览文件
下载
差异文件
Merge branch 'feature/#360' into 'wrdp'
增加待办挂起功能 See merge request o2oa/o2oa!2657
上级
173175a9
3b57a8ea
变更
20
隐藏空白更改
内联
并排
Showing
20 changed file
with
623 addition
and
98 deletion
+623
-98
o2server/x_processplatform_assemble_surface/src/main/java/com/x/processplatform/assemble/surface/jaxrs/control/ActionGetWorkOrWorkCompleted.java
...e/surface/jaxrs/control/ActionGetWorkOrWorkCompleted.java
+43
-27
o2server/x_processplatform_assemble_surface/src/main/java/com/x/processplatform/assemble/surface/jaxrs/control/BaseAction.java
...ssplatform/assemble/surface/jaxrs/control/BaseAction.java
+24
-11
o2server/x_processplatform_assemble_surface/src/main/java/com/x/processplatform/assemble/surface/jaxrs/task/ExceptionAlreadyPause.java
...rm/assemble/surface/jaxrs/task/ExceptionAlreadyPause.java
+12
-0
o2server/x_processplatform_assemble_surface/src/main/java/com/x/processplatform/assemble/surface/jaxrs/task/ExceptionAlreadyResume.java
...m/assemble/surface/jaxrs/task/ExceptionAlreadyResume.java
+12
-0
o2server/x_processplatform_assemble_surface/src/main/java/com/x/processplatform/assemble/surface/jaxrs/task/ExceptionNotAllowPause.java
...m/assemble/surface/jaxrs/task/ExceptionNotAllowPause.java
+13
-0
o2server/x_processplatform_assemble_surface/src/main/java/com/x/processplatform/assemble/surface/jaxrs/task/TaskAction.java
...ocessplatform/assemble/surface/jaxrs/task/TaskAction.java
+36
-0
o2server/x_processplatform_assemble_surface/src/main/java/com/x/processplatform/assemble/surface/jaxrs/task/V2Pause.java
.../processplatform/assemble/surface/jaxrs/task/V2Pause.java
+65
-0
o2server/x_processplatform_assemble_surface/src/main/java/com/x/processplatform/assemble/surface/jaxrs/task/V2Resume.java
...processplatform/assemble/surface/jaxrs/task/V2Resume.java
+57
-0
o2server/x_processplatform_core_entity/src/main/java/com/x/processplatform/core/entity/content/Task.java
.../java/com/x/processplatform/core/entity/content/Task.java
+14
-0
o2server/x_processplatform_core_entity/src/main/java/com/x/processplatform/core/entity/content/TaskProperties.java
...x/processplatform/core/entity/content/TaskProperties.java
+39
-6
o2server/x_processplatform_core_entity/src/main/java/com/x/processplatform/core/entity/content/Work.java
.../java/com/x/processplatform/core/entity/content/Work.java
+4
-24
o2server/x_processplatform_core_entity/src/main/java/com/x/processplatform/core/entity/element/Manual.java
...ava/com/x/processplatform/core/entity/element/Manual.java
+19
-5
o2server/x_processplatform_core_express/src/main/java/com/x/processplatform/core/express/service/processing/jaxrs/task/V2PauseWo.java
...core/express/service/processing/jaxrs/task/V2PauseWo.java
+9
-0
o2server/x_processplatform_core_express/src/main/java/com/x/processplatform/core/express/service/processing/jaxrs/task/V2ResumeWo.java
...ore/express/service/processing/jaxrs/task/V2ResumeWo.java
+9
-0
o2server/x_processplatform_service_processing/src/main/java/com/x/processplatform/service/processing/jaxrs/task/TaskAction.java
...essplatform/service/processing/jaxrs/task/TaskAction.java
+36
-1
o2server/x_processplatform_service_processing/src/main/java/com/x/processplatform/service/processing/jaxrs/task/V2Pause.java
...rocessplatform/service/processing/jaxrs/task/V2Pause.java
+68
-0
o2server/x_processplatform_service_processing/src/main/java/com/x/processplatform/service/processing/jaxrs/task/V2Resume.java
...ocessplatform/service/processing/jaxrs/task/V2Resume.java
+99
-0
o2server/x_processplatform_service_processing/src/main/java/com/x/processplatform/service/processing/jaxrs/test/ActionTest.java
...essplatform/service/processing/jaxrs/test/ActionTest.java
+27
-0
o2server/x_processplatform_service_processing/src/main/java/com/x/processplatform/service/processing/jaxrs/test/TestAction.java
...essplatform/service/processing/jaxrs/test/TestAction.java
+4
-2
o2server/x_processplatform_service_processing/src/main/java/com/x/processplatform/service/processing/schedule/Expire.java
...x/processplatform/service/processing/schedule/Expire.java
+33
-22
未找到文件。
o2server/x_processplatform_assemble_surface/src/main/java/com/x/processplatform/assemble/surface/jaxrs/control/ActionGetWorkOrWorkCompleted.java
浏览文件 @
59114629
...
...
@@ -3,7 +3,9 @@ package com.x.processplatform.assemble.surface.jaxrs.control;
import
java.util.HashMap
;
import
java.util.Map
;
import
java.util.concurrent.CompletableFuture
;
import
java.util.concurrent.ExecutionException
;
import
java.util.concurrent.TimeUnit
;
import
java.util.concurrent.TimeoutException
;
import
org.apache.commons.lang3.BooleanUtils
;
...
...
@@ -45,7 +47,8 @@ class ActionGetWorkOrWorkCompleted extends BaseAction {
private
Map
<
String
,
Boolean
>
hasTaskCompletedWithActivityToken
=
new
HashMap
<>();
ActionResult
<
Wo
>
execute
(
EffectivePerson
effectivePerson
,
String
workOrWorkCompleted
)
throws
Exception
{
ActionResult
<
Wo
>
execute
(
EffectivePerson
effectivePerson
,
String
workOrWorkCompleted
)
throws
InterruptedException
,
ExecutionException
,
TimeoutException
,
ExceptionAccessDenied
{
ActionResult
<
Wo
>
result
=
new
ActionResult
<>();
CompletableFuture
<
Wo
>
getFuture
=
this
.
getFuture
(
effectivePerson
,
workOrWorkCompleted
);
CompletableFuture
<
Boolean
>
checkControlFuture
=
this
.
checkControlFuture
(
effectivePerson
,
workOrWorkCompleted
);
...
...
@@ -94,31 +97,31 @@ class ActionGetWorkOrWorkCompleted extends BaseAction {
Activity
activity
=
business
.
getActivity
(
work
);
/
* 是否可以看到 */
/
/ 是否可以看到
wo
.
setAllowVisit
(
true
);
/
* 是否可以直接流转 */
/
/ 是否可以直接流转
wo
.
setAllowProcessing
(
this
.
hasTaskWithWork
(
business
,
effectivePerson
,
work
.
getId
()));
/
* 是否可以处理待阅 */
/
/ 是否可以处理待阅
wo
.
setAllowReadProcessing
(
this
.
hasReadWithJob
(
business
,
effectivePerson
,
work
.
getJob
()));
/
* 是否可以保存数据 */
/
/ 是否可以保存数据
wo
.
setAllowSave
(
this
.
canManageApplicationOrProcess
(
business
,
effectivePerson
,
work
.
getApplication
(),
work
.
getProcess
())
||
this
.
hasTaskWithWork
(
business
,
effectivePerson
,
work
.
getId
()));
/
* 是否可以重置处理人 */
/
/ 是否可以重置处理人
wo
.
setAllowReset
(
PropertyTools
.
getOrElse
(
activity
,
Manual
.
allowReset_FIELDNAME
,
Boolean
.
class
,
false
)
&&
wo
.
getAllowSave
());
/* 是否可以调度 */
// 是否可以调度
wo
.
setAllowReroute
(
PropertyTools
.
getOrElse
(
activity
,
Manual
.
allowReroute_FIELDNAME
,
Boolean
.
class
,
false
)
&&
this
.
canManageApplicationOrProcess
(
business
,
effectivePerson
,
work
.
getApplication
(),
work
.
getProcess
()));
/* 是否可以删除 */
// 是否可以删除
wo
.
setAllowDelete
(
PropertyTools
.
getOrElse
(
activity
,
Manual
.
allowDeleteWork_FIELDNAME
,
Boolean
.
class
,
false
)
&&
wo
.
getAllowSave
());
/* 是否可以增加会签分支 */
if
(
PropertyTools
.
getOrElse
(
activity
,
Manual
.
allowAddSplit_FIELDNAME
,
Boolean
.
class
,
false
)
// 是否可以挂起待办,暂停待办计时
wo
.
setAllowPause
(
PropertyTools
.
getOrElse
(
activity
,
Manual
.
allowPause_FIELDNAME
,
Boolean
.
class
,
false
)
&&
wo
.
getAllowPause
());
// 是否可以增加会签分支
if
(
BooleanUtils
.
isTrue
(
PropertyTools
.
getOrElse
(
activity
,
Manual
.
allowAddSplit_FIELDNAME
,
Boolean
.
class
,
false
))
&&
BooleanUtils
.
isTrue
(
work
.
getSplitting
()))
{
Node
node
=
this
.
workLogTree
(
business
,
work
.
getJob
()).
location
(
work
);
if
(
null
!=
node
)
{
...
...
@@ -134,8 +137,9 @@ class ActionGetWorkOrWorkCompleted extends BaseAction {
}
}
}
/* 是否可以召回 */
if
(
PropertyTools
.
getOrElse
(
activity
,
Manual
.
allowRetract_FIELDNAME
,
Boolean
.
class
,
false
))
{
// 是否可以召回
if
(
BooleanUtils
.
isTrue
(
PropertyTools
.
getOrElse
(
activity
,
Manual
.
allowRetract_FIELDNAME
,
Boolean
.
class
,
false
)))
{
Node
node
=
this
.
workLogTree
(
business
,
work
.
getJob
()).
location
(
work
);
if
(
null
!=
node
)
{
Nodes
ups
=
node
.
upTo
(
ActivityType
.
manual
,
ActivityType
.
agent
,
ActivityType
.
choice
,
ActivityType
.
delay
,
...
...
@@ -149,14 +153,14 @@ class ActionGetWorkOrWorkCompleted extends BaseAction {
}
}
}
/
* 是否可以回滚 */
/
/ 是否可以回滚
wo
.
setAllowRollback
(
PropertyTools
.
getOrElse
(
activity
,
Manual
.
allowRollback_FIELDNAME
,
Boolean
.
class
,
false
)
&&
this
.
canManageApplicationOrProcess
(
business
,
effectivePerson
,
work
.
getApplication
(),
work
.
getProcess
()));
/
* 是否可以提醒 */
/
/ 是否可以提醒
wo
.
setAllowPress
(
PropertyTools
.
getOrElse
(
activity
,
Manual
.
allowPress_FIELDNAME
,
Boolean
.
class
,
false
)
&&
this
.
hasTaskCompletedWithJob
(
business
,
effectivePerson
,
work
.
getJob
()));
/
* 是否可以看到 */
/
/ 是否可以看到
wo
.
setAllowVisit
(
true
);
return
wo
;
...
...
@@ -164,15 +168,25 @@ class ActionGetWorkOrWorkCompleted extends BaseAction {
}
private
boolean
hasTaskCompletedWithActivityToken
(
Business
business
,
EffectivePerson
effectivePerson
,
String
activityToken
)
throws
Exception
{
Boolean
o
=
this
.
hasTaskCompletedWithActivityToken
.
get
(
activityToken
);
if
(
null
==
o
)
{
o
=
business
.
entityManagerContainer
().
countEqualAndEqual
(
TaskCompleted
.
class
,
TaskCompleted
.
person_FIELDNAME
,
effectivePerson
.
getDistinguishedName
(),
TaskCompleted
.
activityToken_FIELDNAME
,
activityToken
)
>
0
;
this
.
hasTaskCompletedWithActivityToken
.
put
(
activityToken
,
o
);
}
return
o
;
String
activityToken
)
{
return
this
.
hasTaskCompletedWithActivityToken
.
computeIfAbsent
(
activityToken
,
k
->
{
try
{
return
business
.
entityManagerContainer
().
countEqualAndEqual
(
TaskCompleted
.
class
,
TaskCompleted
.
person_FIELDNAME
,
effectivePerson
.
getDistinguishedName
(),
TaskCompleted
.
activityToken_FIELDNAME
,
activityToken
)
>
0
;
}
catch
(
Exception
e
)
{
logger
.
error
(
e
);
}
return
false
;
});
// Boolean o = this.hasTaskCompletedWithActivityToken.get(activityToken);
// if (null == o) {
// o = business.entityManagerContainer().countEqualAndEqual(TaskCompleted.class,
// TaskCompleted.person_FIELDNAME, effectivePerson.getDistinguishedName(),
// TaskCompleted.activityToken_FIELDNAME, activityToken) > 0;
// this.hasTaskCompletedWithActivityToken.put(activityToken, o);
// }
// return o;
}
private
boolean
hasTaskWithWork
(
Business
business
,
EffectivePerson
effectivePerson
,
String
work
)
throws
Exception
{
...
...
@@ -220,6 +234,8 @@ class ActionGetWorkOrWorkCompleted extends BaseAction {
public
static
class
Wo
extends
AbstractControl
{
private
static
final
long
serialVersionUID
=
-
4677744478291468477L
;
}
}
\ No newline at end of file
o2server/x_processplatform_assemble_surface/src/main/java/com/x/processplatform/assemble/surface/jaxrs/control/BaseAction.java
浏览文件 @
59114629
...
...
@@ -17,28 +17,41 @@ abstract class BaseAction extends StandardJaxrsAction {
private
static
Logger
logger
=
LoggerFactory
.
getLogger
(
BaseAction
.
class
);
protected
static
class
AbstractControl
extends
GsonPropertyObject
{
/* 是否可以看到 */
private
static
final
long
serialVersionUID
=
4099187125935802183L
;
// 是否可以看到
private
Boolean
allowVisit
=
false
;
/
* 是否可以直接流转 */
/
/ 是否可以直接流转
private
Boolean
allowProcessing
=
false
;
/
* 是否可以处理待阅 */
/
/ 是否可以处理待阅
private
Boolean
allowReadProcessing
=
false
;
/
* 是否可以保存数据 */
/
/ 是否可以保存数据
private
Boolean
allowSave
=
false
;
/
* 是否可以重置处理人 */
/
/ 是否可以重置处理人
private
Boolean
allowReset
=
false
;
/* 是否可以调度 */
public
Boolean
getAllowPause
()
{
return
allowPause
;
}
public
void
setAllowPause
(
Boolean
allowPause
)
{
this
.
allowPause
=
allowPause
;
}
// 是否可以调度
private
Boolean
allowReroute
=
false
;
/
* 是否可以删除 */
/
/ 是否可以删除
private
Boolean
allowDelete
=
false
;
/
* 是否可以增加会签分支 */
/
/ 是否可以增加会签分支
private
Boolean
allowAddSplit
=
false
;
/
* 是否可以召回 */
/
/ 是否可以召回
private
Boolean
allowRetract
=
false
;
/
* 是否可以回滚 */
/
/ 是否可以回滚
private
Boolean
allowRollback
=
false
;
/
* 是否可以回滚 */
/
/ 是否可以提醒
private
Boolean
allowPress
=
false
;
// 是否可以待办挂起(暂停待办计时)
private
Boolean
allowPause
=
false
;
public
Boolean
getAllowSave
()
{
return
allowSave
;
...
...
o2server/x_processplatform_assemble_surface/src/main/java/com/x/processplatform/assemble/surface/jaxrs/task/ExceptionAlreadyPause.java
0 → 100644
浏览文件 @
59114629
package
com.x.processplatform.assemble.surface.jaxrs.task
;
import
com.x.base.core.project.exception.PromptException
;
class
ExceptionAlreadyPause
extends
PromptException
{
private
static
final
long
serialVersionUID
=
1040883405179987063L
;
ExceptionAlreadyPause
(
String
id
)
{
super
(
"待办已经处于挂起状态{}."
,
id
);
}
}
o2server/x_processplatform_assemble_surface/src/main/java/com/x/processplatform/assemble/surface/jaxrs/task/ExceptionAlreadyResume.java
0 → 100644
浏览文件 @
59114629
package
com.x.processplatform.assemble.surface.jaxrs.task
;
import
com.x.base.core.project.exception.PromptException
;
class
ExceptionAlreadyResume
extends
PromptException
{
private
static
final
long
serialVersionUID
=
1040883405179987063L
;
ExceptionAlreadyResume
(
String
id
)
{
super
(
"待办已经处于正常状态:{}."
,
id
);
}
}
o2server/x_processplatform_assemble_surface/src/main/java/com/x/processplatform/assemble/surface/jaxrs/task/ExceptionNotAllowPause.java
0 → 100644
浏览文件 @
59114629
package
com.x.processplatform.assemble.surface.jaxrs.task
;
import
com.x.base.core.project.exception.PromptException
;
class
ExceptionNotAllowPause
extends
PromptException
{
private
static
final
long
serialVersionUID
=
-
5515077418025884395L
;
ExceptionNotAllowPause
(
String
id
)
{
super
(
"不允许进行待办挂起: {}."
,
id
);
}
}
o2server/x_processplatform_assemble_surface/src/main/java/com/x/processplatform/assemble/surface/jaxrs/task/TaskAction.java
浏览文件 @
59114629
...
...
@@ -1017,4 +1017,40 @@ public class TaskAction extends StandardJaxrsAction {
}
asyncResponse
.
resume
(
ResponseFactory
.
getEntityTagActionResultResponse
(
request
,
result
));
}
@JaxrsMethodDescribe
(
value
=
"V2_暂停待办处理计时."
,
action
=
V2Pause
.
class
)
@GET
@Path
(
"v2/{id}/pause"
)
@Produces
(
HttpMediaType
.
APPLICATION_JSON_UTF_8
)
@Consumes
(
MediaType
.
APPLICATION_JSON
)
public
void
v2Pause
(
@Suspended
final
AsyncResponse
asyncResponse
,
@Context
HttpServletRequest
request
,
@JaxrsParameterDescribe
(
"标识"
)
@PathParam
(
"id"
)
String
id
)
{
ActionResult
<
V2Pause
.
Wo
>
result
=
new
ActionResult
<>();
EffectivePerson
effectivePerson
=
this
.
effectivePerson
(
request
);
try
{
result
=
new
V2Pause
().
execute
(
effectivePerson
,
id
);
}
catch
(
Exception
e
)
{
logger
.
error
(
e
,
effectivePerson
,
request
,
null
);
result
.
error
(
e
);
}
asyncResponse
.
resume
(
ResponseFactory
.
getEntityTagActionResultResponse
(
request
,
result
));
}
@JaxrsMethodDescribe
(
value
=
"V2_恢复待办处理计时."
,
action
=
V2Resume
.
class
)
@GET
@Path
(
"v2/{id}/resume"
)
@Produces
(
HttpMediaType
.
APPLICATION_JSON_UTF_8
)
@Consumes
(
MediaType
.
APPLICATION_JSON
)
public
void
v2Resume
(
@Suspended
final
AsyncResponse
asyncResponse
,
@Context
HttpServletRequest
request
,
@JaxrsParameterDescribe
(
"标识"
)
@PathParam
(
"id"
)
String
id
)
{
ActionResult
<
V2Resume
.
Wo
>
result
=
new
ActionResult
<>();
EffectivePerson
effectivePerson
=
this
.
effectivePerson
(
request
);
try
{
result
=
new
V2Resume
().
execute
(
effectivePerson
,
id
);
}
catch
(
Exception
e
)
{
logger
.
error
(
e
,
effectivePerson
,
request
,
null
);
result
.
error
(
e
);
}
asyncResponse
.
resume
(
ResponseFactory
.
getEntityTagActionResultResponse
(
request
,
result
));
}
}
\ No newline at end of file
o2server/x_processplatform_assemble_surface/src/main/java/com/x/processplatform/assemble/surface/jaxrs/task/V2Pause.java
0 → 100644
浏览文件 @
59114629
package
com.x.processplatform.assemble.surface.jaxrs.task
;
import
org.apache.commons.lang3.BooleanUtils
;
import
com.x.base.core.container.EntityManagerContainer
;
import
com.x.base.core.container.factory.EntityManagerContainerFactory
;
import
com.x.base.core.project.Applications
;
import
com.x.base.core.project.x_processplatform_service_processing
;
import
com.x.base.core.project.exception.ExceptionAccessDenied
;
import
com.x.base.core.project.exception.ExceptionEntityNotExist
;
import
com.x.base.core.project.http.ActionResult
;
import
com.x.base.core.project.http.EffectivePerson
;
import
com.x.base.core.project.jaxrs.WrapBoolean
;
import
com.x.base.core.project.logger.Logger
;
import
com.x.base.core.project.logger.LoggerFactory
;
import
com.x.processplatform.assemble.surface.Business
;
import
com.x.processplatform.assemble.surface.ThisApplication
;
import
com.x.processplatform.core.entity.content.Task
;
import
com.x.processplatform.core.entity.element.Manual
;
import
com.x.processplatform.core.express.service.processing.jaxrs.task.V2PauseWo
;
class
V2Pause
extends
BaseAction
{
private
static
Logger
logger
=
LoggerFactory
.
getLogger
(
V2Pause
.
class
);
ActionResult
<
Wo
>
execute
(
EffectivePerson
effectivePerson
,
String
id
)
throws
Exception
{
ActionResult
<
Wo
>
result
=
new
ActionResult
<>();
String
job
=
null
;
try
(
EntityManagerContainer
emc
=
EntityManagerContainerFactory
.
instance
().
create
())
{
Business
business
=
new
Business
(
emc
);
Task
task
=
emc
.
find
(
id
,
Task
.
class
);
if
(
null
==
task
)
{
throw
new
ExceptionEntityNotExist
(
id
,
Task
.
class
);
}
if
(!
business
.
readable
(
effectivePerson
,
task
))
{
throw
new
ExceptionAccessDenied
(
effectivePerson
,
task
);
}
if
(
BooleanUtils
.
isTrue
(
task
.
getPause
()))
{
throw
new
ExceptionAlreadyPause
(
task
.
getId
());
}
Manual
manual
=
business
.
manual
().
pick
(
task
.
getActivity
());
if
(
null
==
manual
)
{
throw
new
ExceptionEntityNotExist
(
task
.
getActivity
(),
Manual
.
class
);
}
if
(
BooleanUtils
.
isNotTrue
(
manual
.
getAllowPause
()))
{
throw
new
ExceptionNotAllowPause
(
task
.
getId
());
}
job
=
task
.
getJob
();
}
V2PauseWo
resp
=
ThisApplication
.
context
().
applications
().
getQuery
(
effectivePerson
.
getDebugger
(),
x_processplatform_service_processing
.
class
,
Applications
.
joinQueryUri
(
"task"
,
"v2"
,
id
,
"pause"
),
job
)
.
getData
(
V2PauseWo
.
class
);
Wo
wo
=
new
Wo
();
wo
.
setValue
(
resp
.
getValue
());
result
.
setData
(
wo
);
return
result
;
}
public
static
class
Wo
extends
WrapBoolean
{
private
static
final
long
serialVersionUID
=
4257481488388740879L
;
}
}
o2server/x_processplatform_assemble_surface/src/main/java/com/x/processplatform/assemble/surface/jaxrs/task/V2Resume.java
0 → 100644
浏览文件 @
59114629
package
com.x.processplatform.assemble.surface.jaxrs.task
;
import
org.apache.commons.lang3.BooleanUtils
;
import
com.x.base.core.container.EntityManagerContainer
;
import
com.x.base.core.container.factory.EntityManagerContainerFactory
;
import
com.x.base.core.project.Applications
;
import
com.x.base.core.project.x_processplatform_service_processing
;
import
com.x.base.core.project.exception.ExceptionAccessDenied
;
import
com.x.base.core.project.exception.ExceptionEntityNotExist
;
import
com.x.base.core.project.http.ActionResult
;
import
com.x.base.core.project.http.EffectivePerson
;
import
com.x.base.core.project.jaxrs.WrapBoolean
;
import
com.x.base.core.project.logger.Logger
;
import
com.x.base.core.project.logger.LoggerFactory
;
import
com.x.processplatform.assemble.surface.Business
;
import
com.x.processplatform.assemble.surface.ThisApplication
;
import
com.x.processplatform.core.entity.content.Task
;
import
com.x.processplatform.core.express.service.processing.jaxrs.task.V2ResumeWo
;
class
V2Resume
extends
BaseAction
{
private
static
Logger
logger
=
LoggerFactory
.
getLogger
(
V2Resume
.
class
);
ActionResult
<
Wo
>
execute
(
EffectivePerson
effectivePerson
,
String
id
)
throws
Exception
{
ActionResult
<
Wo
>
result
=
new
ActionResult
<>();
String
job
=
null
;
try
(
EntityManagerContainer
emc
=
EntityManagerContainerFactory
.
instance
().
create
())
{
Business
business
=
new
Business
(
emc
);
Task
task
=
emc
.
find
(
id
,
Task
.
class
);
if
(
null
==
task
)
{
throw
new
ExceptionEntityNotExist
(
id
,
Task
.
class
);
}
if
(!
business
.
readable
(
effectivePerson
,
task
))
{
throw
new
ExceptionAccessDenied
(
effectivePerson
,
task
);
}
if
((!
BooleanUtils
.
isTrue
(
task
.
getPause
()))
||
(
null
==
task
.
getProperties
().
getPauseStartTime
()))
{
throw
new
ExceptionAlreadyResume
(
task
.
getId
());
}
job
=
task
.
getJob
();
}
V2ResumeWo
resp
=
ThisApplication
.
context
().
applications
().
getQuery
(
effectivePerson
.
getDebugger
(),
x_processplatform_service_processing
.
class
,
Applications
.
joinQueryUri
(
"task"
,
"v2"
,
id
,
"resume"
),
job
)
.
getData
(
V2ResumeWo
.
class
);
Wo
wo
=
new
Wo
();
wo
.
setValue
(
resp
.
getValue
());
result
.
setData
(
wo
);
return
result
;
}
public
static
class
Wo
extends
WrapBoolean
{
private
static
final
long
serialVersionUID
=
4257481488388740879L
;
}
}
o2server/x_processplatform_core_entity/src/main/java/com/x/processplatform/core/entity/content/Task.java
浏览文件 @
59114629
...
...
@@ -497,6 +497,12 @@ public class Task extends SliceJpaObject implements ProjectionInterface {
@Index
(
name
=
TABLE
+
IndexNameMiddle
+
series_FIELDNAME
)
private
String
series
;
public
static
final
String
pause_FIELDNAME
=
"pause"
;
@FieldDescribe
(
"待办是否处于挂起暂停计时状态."
)
@Column
(
name
=
ColumnNamePrefix
+
pause_FIELDNAME
)
@CheckPersist
(
allowEmpty
=
true
)
private
Boolean
pause
;
public
static
final
String
workCreateType_FIELDNAME
=
"workCreateType"
;
@FieldDescribe
(
"工作创建类型,surface,assign"
)
@Column
(
length
=
JpaObject
.
length_16B
,
name
=
ColumnNamePrefix
+
workCreateType_FIELDNAME
)
...
...
@@ -1306,4 +1312,12 @@ public class Task extends SliceJpaObject implements ProjectionInterface {
this
.
routeNameList
=
routeNameList
;
}
public
Boolean
getPause
()
{
return
pause
;
}
public
void
setPause
(
Boolean
pause
)
{
this
.
pause
=
pause
;
}
}
\ No newline at end of file
o2server/x_processplatform_core_entity/src/main/java/com/x/processplatform/core/entity/content/TaskProperties.java
浏览文件 @
59114629
...
...
@@ -12,24 +12,33 @@ public class TaskProperties extends JsonProperties {
private
static
final
long
serialVersionUID
=
5628694071505848771L
;
@FieldDescribe
(
"上一人工环节处理人"
)
@FieldDescribe
(
"上一人工环节处理人
.
"
)
private
String
prevTaskIdentity
;
@FieldDescribe
(
"上一人工环节处理人列表"
)
@FieldDescribe
(
"上一人工环节处理人列表
.
"
)
private
List
<
String
>
prevTaskIdentityList
;
@FieldDescribe
(
"标题"
)
@FieldDescribe
(
"标题
.
"
)
private
String
title
;
@FieldDescribe
(
"意见"
)
@FieldDescribe
(
"意见
.
"
)
private
String
opinion
;
@FieldDescribe
(
"上一人工环节待办对象列表"
)
@FieldDescribe
(
"上一人工环节待办对象列表
.
"
)
private
List
<
PrevTask
>
prevTaskList
;
@FieldDescribe
(
"上一人工环节最近待办对象"
)
@FieldDescribe
(
"上一人工环节最近待办对象
.
"
)
private
PrevTask
prevTask
;
@FieldDescribe
(
"待办计时暂停工作时间时长(分钟)."
)
private
Date
pauseStartTime
;
@FieldDescribe
(
"待办计时暂停工作时间时长(分钟)."
)
private
Integer
pauseWorkTimeMinutes
;
@FieldDescribe
(
"待办计时暂停自然时间时长(分钟)."
)
private
Integer
pauseMinutes
;
public
List
<
String
>
getPrevTaskIdentityList
()
{
if
(
null
==
prevTaskIdentityList
)
{
this
.
prevTaskIdentityList
=
new
ArrayList
<>();
...
...
@@ -152,4 +161,28 @@ public class TaskProperties extends JsonProperties {
this
.
prevTask
=
prevTask
;
}
public
Integer
getPauseWorkTimeMinutes
()
{
return
pauseWorkTimeMinutes
;
}
public
void
setPauseWorkTimeMinutes
(
Integer
pauseWorkTimeMinutes
)
{
this
.
pauseWorkTimeMinutes
=
pauseWorkTimeMinutes
;
}
public
Integer
getPauseMinutes
()
{
return
pauseMinutes
;
}
public
void
setPauseMinutes
(
Integer
pauseMinutes
)
{
this
.
pauseMinutes
=
pauseMinutes
;
}
public
Date
getPauseStartTime
()
{
return
pauseStartTime
;
}
public
void
setPauseStartTime
(
Date
pauseStartTime
)
{
this
.
pauseStartTime
=
pauseStartTime
;
}
}
\ No newline at end of file
o2server/x_processplatform_core_entity/src/main/java/com/x/processplatform/core/entity/content/Work.java
浏览文件 @
59114629
...
...
@@ -152,10 +152,10 @@ public class Work extends SliceJpaObject implements ProjectionInterface {
}
public
List
<
String
>
getSplitValueList
()
{
//这里调用必须重新指向一次,如果使用
//Work copy = XGsonBuilder.convert(work, Work.class);
//copy.copyTo(this, JpaObject.id_FIELDNAME);
//这样的方法调用,那么在运行完成以后copy.splitValueList不再指向this.getProperties().getSplitValueList()
//
这里调用必须重新指向一次,如果使用
//
Work copy = XGsonBuilder.convert(work, Work.class);
//
copy.copyTo(this, JpaObject.id_FIELDNAME);
//
这样的方法调用,那么在运行完成以后copy.splitValueList不再指向this.getProperties().getSplitValueList()
this
.
splitValueList
=
this
.
getProperties
().
getSplitValueList
();
return
this
.
splitValueList
;
}
...
...
@@ -354,12 +354,6 @@ public class Work extends SliceJpaObject implements ProjectionInterface {
@CheckPersist
(
allowEmpty
=
false
)
private
WorkStatus
workStatus
;
// public static final String errorRetry_FIELDNAME = "errorRetry";
// @FieldDescribe("重试次数.")
// @Column(name = ColumnNamePrefix + errorRetry_FIELDNAME)
// @CheckPersist(allowEmpty = false)
// private Integer errorRetry;
public
static
final
String
beforeExecuted_FIELDNAME
=
"beforeExecuted"
;
@FieldDescribe
(
"是否已经通过执行前"
)
@Column
(
name
=
ColumnNamePrefix
+
beforeExecuted_FIELDNAME
)
...
...
@@ -377,7 +371,6 @@ public class Work extends SliceJpaObject implements ProjectionInterface {
@ElementIndex
(
name
=
TABLE
+
IndexNameMiddle
+
manualTaskIdentityList_FIELDNAME
+
ElementIndexNameSuffix
)
@CheckPersist
(
allowEmpty
=
true
)
private
List
<
String
>
manualTaskIdentityList
;
// private List<String> manualTaskIdentityList = new ArrayList<>();
public
static
final
String
manualTaskIdentityText_FIELDNAME
=
"manualTaskIdentityText"
;
@FieldDescribe
(
"当前处理人身份合并文本,用','分割,超长截断,此字段仅用于显示当前工作的处理人,不索引."
)
...
...
@@ -449,19 +442,6 @@ public class Work extends SliceJpaObject implements ProjectionInterface {
@CheckPersist
(
allowEmpty
=
true
)
private
String
destinationActivity
;
// public static final String forceRoute_FIELDNAME = "forceRoute";
// @FieldDescribe("强制路由,用于调度等需要跳过执行环节直接进行的.")
// @Column(name = ColumnNamePrefix + forceRoute_FIELDNAME)
// @CheckPersist(allowEmpty = true)
// private Boolean forceRoute;
//
// public static final String forceRouteArriveCurrentActivity_FIELDNAME =
// "forceRouteArriveCurrentActivity";
// @FieldDescribe("是否是强制路由进入当前节点.")
// @Column(name = ColumnNamePrefix + forceRouteArriveCurrentActivity_FIELDNAME)
// @CheckPersist(allowEmpty = true)
// private Boolean forceRouteArriveCurrentActivity;
public
static
final
String
expireTime_FIELDNAME
=
"expireTime"
;
@FieldDescribe
(
"任务截止时间."
)
@Temporal
(
TemporalType
.
TIMESTAMP
)
...
...
o2server/x_processplatform_core_entity/src/main/java/com/x/processplatform/core/entity/element/Manual.java
浏览文件 @
59114629
...
...
@@ -85,12 +85,12 @@ public class Manual extends Activity {
this
.
properties
=
properties
;
}
@FieldDescribe
(
"分组"
)
@FieldDescribe
(
"分组
.
"
)
@CheckPersist
(
allowEmpty
=
true
)
@Column
(
length
=
JpaObject
.
length_255B
,
name
=
ColumnNamePrefix
+
group_FIELDNAME
)
private
String
group
;
@FieldDescribe
(
"意见分组"
)
@FieldDescribe
(
"意见分组
.
"
)
@CheckPersist
(
allowEmpty
=
true
)
@Column
(
length
=
JpaObject
.
length_255B
,
name
=
ColumnNamePrefix
+
opinionGroup_FIELDNAME
)
private
String
opinionGroup
;
...
...
@@ -478,13 +478,13 @@ public class Manual extends Activity {
private
List
<
String
>
taskDataPathList
;
public
static
final
String
allowReset_FIELDNAME
=
"allowReset"
;
@FieldDescribe
(
"允许重置
待办
"
)
@FieldDescribe
(
"允许重置
处理人
"
)
@CheckPersist
(
allowEmpty
=
true
)
@Column
(
name
=
ColumnNamePrefix
+
allowReset_FIELDNAME
)
private
Boolean
allowReset
;
public
static
final
String
allowRetract_FIELDNAME
=
"allowRetract"
;
@FieldDescribe
(
"允许召回"
)
@FieldDescribe
(
"允许
工作
召回"
)
@CheckPersist
(
allowEmpty
=
true
)
@Column
(
name
=
ColumnNamePrefix
+
allowRetract_FIELDNAME
)
private
Boolean
allowRetract
;
...
...
@@ -519,6 +519,12 @@ public class Manual extends Activity {
@Column
(
name
=
ColumnNamePrefix
+
allowPress_FIELDNAME
)
private
Boolean
allowPress
;
public
static
final
String
allowPause_FIELDNAME
=
"allowPause"
;
@FieldDescribe
(
"允许暂停待办的计时."
)
@CheckPersist
(
allowEmpty
=
true
)
@Column
(
name
=
ColumnNamePrefix
+
allowPause_FIELDNAME
)
private
Boolean
allowPause
;
public
static
final
String
resetRange_FIELDNAME
=
"resetRange"
;
@FieldDescribe
(
"重置范围."
)
@CheckPersist
(
allowEmpty
=
true
)
...
...
@@ -526,7 +532,7 @@ public class Manual extends Activity {
private
String
resetRange
;
public
static
final
String
resetCount_FIELDNAME
=
"resetCount"
;
@FieldDescribe
(
"允许最大重置次数"
)
@FieldDescribe
(
"允许最大重置次数
.
"
)
@CheckPersist
(
allowEmpty
=
true
)
@Column
(
name
=
ColumnNamePrefix
+
resetCount_FIELDNAME
)
private
Integer
resetCount
;
...
...
@@ -1223,4 +1229,12 @@ public class Manual extends Activity {
public
void
setResetRangeScriptText
(
String
resetRangeScriptText
)
{
this
.
resetRangeScriptText
=
resetRangeScriptText
;
}
public
Boolean
getAllowPause
()
{
return
allowPause
;
}
public
void
setAllowPause
(
Boolean
allowPause
)
{
this
.
allowPause
=
allowPause
;
}
}
o2server/x_processplatform_core_express/src/main/java/com/x/processplatform/core/express/service/processing/jaxrs/task/V2PauseWo.java
0 → 100644
浏览文件 @
59114629
package
com.x.processplatform.core.express.service.processing.jaxrs.task
;
import
com.x.base.core.project.jaxrs.WrapBoolean
;
public
class
V2PauseWo
extends
WrapBoolean
{
private
static
final
long
serialVersionUID
=
-
6366340029999624969L
;
}
o2server/x_processplatform_core_express/src/main/java/com/x/processplatform/core/express/service/processing/jaxrs/task/V2ResumeWo.java
0 → 100644
浏览文件 @
59114629
package
com.x.processplatform.core.express.service.processing.jaxrs.task
;
import
com.x.base.core.project.jaxrs.WrapBoolean
;
public
class
V2ResumeWo
extends
WrapBoolean
{
private
static
final
long
serialVersionUID
=
-
6366340029999624969L
;
}
o2server/x_processplatform_service_processing/src/main/java/com/x/processplatform/service/processing/jaxrs/task/TaskAction.java
浏览文件 @
59114629
...
...
@@ -216,7 +216,7 @@ public class TaskAction extends StandardJaxrsAction {
@Path
(
"v2/{id}/reset"
)
@Produces
(
HttpMediaType
.
APPLICATION_JSON_UTF_8
)
@Consumes
(
MediaType
.
APPLICATION_JSON
)
public
void
V
2Reset
(
@Suspended
final
AsyncResponse
asyncResponse
,
@Context
HttpServletRequest
request
,
public
void
v
2Reset
(
@Suspended
final
AsyncResponse
asyncResponse
,
@Context
HttpServletRequest
request
,
@JaxrsParameterDescribe
(
"标识"
)
@PathParam
(
"id"
)
String
id
,
JsonElement
jsonElement
)
{
ActionResult
<
V2Reset
.
Wo
>
result
=
new
ActionResult
<>();
EffectivePerson
effectivePerson
=
this
.
effectivePerson
(
request
);
...
...
@@ -247,4 +247,39 @@ public class TaskAction extends StandardJaxrsAction {
asyncResponse
.
resume
(
ResponseFactory
.
getEntityTagActionResultResponse
(
request
,
result
));
}
@JaxrsMethodDescribe
(
value
=
"V2_暂停待办处理计时."
,
action
=
V2Pause
.
class
)
@GET
@Path
(
"v2/{id}/pause"
)
@Produces
(
HttpMediaType
.
APPLICATION_JSON_UTF_8
)
@Consumes
(
MediaType
.
APPLICATION_JSON
)
public
void
v2Pause
(
@Suspended
final
AsyncResponse
asyncResponse
,
@Context
HttpServletRequest
request
,
@JaxrsParameterDescribe
(
"标识"
)
@PathParam
(
"id"
)
String
id
)
{
ActionResult
<
V2Pause
.
Wo
>
result
=
new
ActionResult
<>();
EffectivePerson
effectivePerson
=
this
.
effectivePerson
(
request
);
try
{
result
=
new
V2Pause
().
execute
(
effectivePerson
,
id
);
}
catch
(
Exception
e
)
{
logger
.
error
(
e
,
effectivePerson
,
request
,
null
);
result
.
error
(
e
);
}
asyncResponse
.
resume
(
ResponseFactory
.
getEntityTagActionResultResponse
(
request
,
result
));
}
@JaxrsMethodDescribe
(
value
=
"V2_恢复待办处理计时."
,
action
=
V2Resume
.
class
)
@GET
@Path
(
"v2/{id}/resume"
)
@Produces
(
HttpMediaType
.
APPLICATION_JSON_UTF_8
)
@Consumes
(
MediaType
.
APPLICATION_JSON
)
public
void
v2Resume
(
@Suspended
final
AsyncResponse
asyncResponse
,
@Context
HttpServletRequest
request
,
@JaxrsParameterDescribe
(
"标识"
)
@PathParam
(
"id"
)
String
id
)
{
ActionResult
<
V2Resume
.
Wo
>
result
=
new
ActionResult
<>();
EffectivePerson
effectivePerson
=
this
.
effectivePerson
(
request
);
try
{
result
=
new
V2Resume
().
execute
(
effectivePerson
,
id
);
}
catch
(
Exception
e
)
{
logger
.
error
(
e
,
effectivePerson
,
request
,
null
);
result
.
error
(
e
);
}
asyncResponse
.
resume
(
ResponseFactory
.
getEntityTagActionResultResponse
(
request
,
result
));
}
}
\ No newline at end of file
o2server/x_processplatform_service_processing/src/main/java/com/x/processplatform/service/processing/jaxrs/task/V2Pause.java
0 → 100644
浏览文件 @
59114629
package
com.x.processplatform.service.processing.jaxrs.task
;
import
java.util.Date
;
import
java.util.concurrent.Callable
;
import
java.util.concurrent.TimeUnit
;
import
org.apache.commons.lang3.BooleanUtils
;
import
com.x.base.core.container.EntityManagerContainer
;
import
com.x.base.core.container.factory.EntityManagerContainerFactory
;
import
com.x.base.core.project.exception.ExceptionEntityNotExist
;
import
com.x.base.core.project.executor.ProcessPlatformExecutorFactory
;
import
com.x.base.core.project.http.ActionResult
;
import
com.x.base.core.project.http.EffectivePerson
;
import
com.x.base.core.project.jaxrs.WrapBoolean
;
import
com.x.base.core.project.logger.Logger
;
import
com.x.base.core.project.logger.LoggerFactory
;
import
com.x.base.core.project.tools.ListTools
;
import
com.x.processplatform.core.entity.content.Task
;
class
V2Pause
extends
BaseAction
{
private
static
Logger
logger
=
LoggerFactory
.
getLogger
(
V2Pause
.
class
);
ActionResult
<
Wo
>
execute
(
EffectivePerson
effectivePerson
,
String
id
)
throws
Exception
{
final
String
job
;
try
(
EntityManagerContainer
emc
=
EntityManagerContainerFactory
.
instance
().
create
())
{
Task
task
=
emc
.
fetch
(
id
,
Task
.
class
,
ListTools
.
toList
(
Task
.
job_FIELDNAME
));
if
(
null
==
task
)
{
throw
new
ExceptionEntityNotExist
(
id
,
Task
.
class
);
}
job
=
task
.
getJob
();
}
Callable
<
ActionResult
<
Wo
>>
callable
=
()
->
{
ActionResult
<
Wo
>
result
=
new
ActionResult
<>();
Wo
wo
=
new
Wo
();
wo
.
setValue
(
false
);
try
(
EntityManagerContainer
emc
=
EntityManagerContainerFactory
.
instance
().
create
())
{
Task
task
=
emc
.
find
(
id
,
Task
.
class
);
if
(
null
==
task
)
{
throw
new
ExceptionEntityNotExist
(
id
,
Task
.
class
);
}
if
(
BooleanUtils
.
isNotTrue
(
task
.
getPause
()))
{
emc
.
beginTransaction
(
Task
.
class
);
task
.
setPause
(
true
);
task
.
getProperties
().
setPauseStartTime
(
new
Date
());
emc
.
commit
();
wo
.
setValue
(
true
);
}
}
result
.
setData
(
wo
);
return
result
;
};
return
ProcessPlatformExecutorFactory
.
get
(
job
).
submit
(
callable
).
get
(
300
,
TimeUnit
.
SECONDS
);
}
public
static
class
Wo
extends
WrapBoolean
{
private
static
final
long
serialVersionUID
=
2752464360851471911L
;
}
}
\ No newline at end of file
o2server/x_processplatform_service_processing/src/main/java/com/x/processplatform/service/processing/jaxrs/task/V2Resume.java
0 → 100644
浏览文件 @
59114629
package
com.x.processplatform.service.processing.jaxrs.task
;
import
java.util.Date
;
import
java.util.concurrent.Callable
;
import
java.util.concurrent.TimeUnit
;
import
org.apache.commons.lang3.BooleanUtils
;
import
com.x.base.core.container.EntityManagerContainer
;
import
com.x.base.core.container.factory.EntityManagerContainerFactory
;
import
com.x.base.core.project.config.Config
;
import
com.x.base.core.project.exception.ExceptionEntityNotExist
;
import
com.x.base.core.project.executor.ProcessPlatformExecutorFactory
;
import
com.x.base.core.project.http.ActionResult
;
import
com.x.base.core.project.http.EffectivePerson
;
import
com.x.base.core.project.jaxrs.WrapBoolean
;
import
com.x.base.core.project.logger.Logger
;
import
com.x.base.core.project.logger.LoggerFactory
;
import
com.x.base.core.project.tools.ListTools
;
import
com.x.processplatform.core.entity.content.Task
;
class
V2Resume
extends
BaseAction
{
private
static
Logger
logger
=
LoggerFactory
.
getLogger
(
V2Resume
.
class
);
ActionResult
<
Wo
>
execute
(
EffectivePerson
effectivePerson
,
String
id
)
throws
Exception
{
final
String
job
;
try
(
EntityManagerContainer
emc
=
EntityManagerContainerFactory
.
instance
().
create
())
{
Task
task
=
emc
.
fetch
(
id
,
Task
.
class
,
ListTools
.
toList
(
Task
.
job_FIELDNAME
));
if
(
null
==
task
)
{
throw
new
ExceptionEntityNotExist
(
id
,
Task
.
class
);
}
job
=
task
.
getJob
();
}
return
ProcessPlatformExecutorFactory
.
get
(
job
).
submit
(
new
CallableImpl
(
id
)).
get
(
300
,
TimeUnit
.
SECONDS
);
}
private
class
CallableImpl
implements
Callable
<
ActionResult
<
Wo
>>
{
private
String
id
;
CallableImpl
(
String
id
)
{
this
.
id
=
id
;
}
@Override
public
ActionResult
<
Wo
>
call
()
throws
Exception
{
ActionResult
<
Wo
>
result
=
new
ActionResult
<>();
Wo
wo
=
new
Wo
();
wo
.
setValue
(
false
);
try
(
EntityManagerContainer
emc
=
EntityManagerContainerFactory
.
instance
().
create
())
{
Task
task
=
emc
.
find
(
id
,
Task
.
class
);
if
(
null
==
task
)
{
throw
new
ExceptionEntityNotExist
(
id
,
Task
.
class
);
}
if
(
BooleanUtils
.
isTrue
(
task
.
getPause
())
&&
(
null
!=
task
.
getProperties
().
getPauseStartTime
()))
{
Date
now
=
new
Date
();
int
workTimeMinutes
=
(
int
)
Config
.
workTime
()
.
betweenMinutes
(
task
.
getProperties
().
getPauseStartTime
(),
now
);
int
minutes
=
(
int
)
(
now
.
getTime
()
-
task
.
getProperties
().
getPauseStartTime
().
getTime
())
/
(
1000
*
60
);
if
(
null
==
task
.
getProperties
().
getPauseWorkTimeMinutes
())
{
task
.
getProperties
().
setPauseWorkTimeMinutes
(
workTimeMinutes
);
}
else
{
task
.
getProperties
().
setPauseWorkTimeMinutes
(
task
.
getProperties
().
getPauseWorkTimeMinutes
()
+
workTimeMinutes
);
}
if
(
null
==
task
.
getProperties
().
getPauseMinutes
())
{
task
.
getProperties
().
setPauseMinutes
(
minutes
);
}
else
{
task
.
getProperties
().
setPauseMinutes
(
task
.
getProperties
().
getPauseMinutes
()
+
minutes
);
}
// 在原有的过期时间基础上延时workTimeMinutes
if
(
null
!=
task
.
getExpireTime
())
{
task
.
setExpireTime
(
Config
.
workTime
().
forwardMinutes
(
task
.
getExpireTime
(),
workTimeMinutes
));
task
.
setExpired
(
task
.
getExpireTime
().
before
(
now
));
}
emc
.
beginTransaction
(
Task
.
class
);
task
.
setPause
(
false
);
emc
.
commit
();
wo
.
setValue
(
true
);
}
}
result
.
setData
(
wo
);
return
result
;
}
}
public
static
class
Wo
extends
WrapBoolean
{
private
static
final
long
serialVersionUID
=
-
8246623997534427403L
;
}
}
\ No newline at end of file
o2server/x_processplatform_service_processing/src/main/java/com/x/processplatform/service/processing/jaxrs/test/ActionTest.java
0 → 100644
浏览文件 @
59114629
package
com.x.processplatform.service.processing.jaxrs.test
;
import
java.util.ArrayList
;
import
java.util.List
;
import
com.x.base.core.container.EntityManagerContainer
;
import
com.x.base.core.container.factory.EntityManagerContainerFactory
;
import
com.x.base.core.project.http.ActionResult
;
import
com.x.base.core.project.http.EffectivePerson
;
import
com.x.processplatform.core.entity.content.Task
;
class
ActionTest
extends
BaseAction
{
ActionResult
<
List
<
Wo
>>
execute
(
EffectivePerson
effectivePerson
,
String
id
)
throws
Exception
{
ActionResult
<
List
<
Wo
>>
result
=
new
ActionResult
<>();
List
<
Wo
>
wos
=
new
ArrayList
<>();
try
(
EntityManagerContainer
emc
=
EntityManagerContainerFactory
.
instance
().
create
())
{
}
result
.
setData
(
wos
);
return
result
;
}
public
static
class
Wo
extends
Task
{
}
}
\ No newline at end of file
o2server/x_processplatform_service_processing/src/main/java/com/x/processplatform/service/processing/jaxrs/test/TestAction.java
浏览文件 @
59114629
package
com.x.processplatform.service.processing.jaxrs.test
;
import
java.util.List
;
import
javax.servlet.http.HttpServletRequest
;
import
javax.ws.rs.Consumes
;
import
javax.ws.rs.GET
;
import
javax.ws.rs.Path
;
import
javax.ws.rs.PathParam
;
import
javax.ws.rs.Produces
;
import
javax.ws.rs.container.AsyncResponse
;
import
javax.ws.rs.container.Suspended
;
import
javax.ws.rs.core.Context
;
import
javax.ws.rs.core.MediaType
;
import
com.x.base.core.project.Application
;
import
com.x.base.core.project.annotation.JaxrsDescribe
;
import
com.x.base.core.project.annotation.JaxrsMethodDescribe
;
import
com.x.base.core.project.annotation.JaxrsParameterDescribe
;
import
com.x.base.core.project.http.ActionResult
;
import
com.x.base.core.project.http.EffectivePerson
;
import
com.x.base.core.project.http.HttpMediaType
;
...
...
@@ -162,5 +165,4 @@ public class TestAction extends StandardJaxrsAction {
}
asyncResponse
.
resume
(
ResponseFactory
.
getEntityTagActionResultResponse
(
request
,
result
));
}
}
\ No newline at end of file
o2server/x_processplatform_service_processing/src/main/java/com/x/processplatform/service/processing/schedule/Expire.java
浏览文件 @
59114629
...
...
@@ -13,12 +13,14 @@ import javax.persistence.criteria.Path;
import
javax.persistence.criteria.Predicate
;
import
javax.persistence.criteria.Root
;
import
org.apache.commons.lang3.BooleanUtils
;
import
org.apache.commons.lang3.StringUtils
;
import
org.quartz.JobExecutionContext
;
import
org.quartz.JobExecutionException
;
import
com.x.base.core.container.EntityManagerContainer
;
import
com.x.base.core.container.factory.EntityManagerContainerFactory
;
import
com.x.base.core.entity.JpaObject_
;
import
com.x.base.core.project.Applications
;
import
com.x.base.core.project.x_processplatform_service_processing
;
import
com.x.base.core.project.jaxrs.WoId
;
...
...
@@ -41,6 +43,7 @@ public class Expire extends AbstractJob {
String
sequence
=
null
;
List
<
Task
>
targets
=
new
ArrayList
<>();
AtomicInteger
count
=
new
AtomicInteger
();
AtomicInteger
pause
=
new
AtomicInteger
();
do
{
try
(
EntityManagerContainer
emc
=
EntityManagerContainerFactory
.
instance
().
create
())
{
targets
=
this
.
list
(
emc
,
sequence
);
...
...
@@ -48,51 +51,59 @@ public class Expire extends AbstractJob {
if
(!
targets
.
isEmpty
())
{
sequence
=
targets
.
get
(
targets
.
size
()
-
1
).
getSequence
();
for
(
Task
task
:
targets
)
{
try
{
try
{
ThisApplication
.
context
().
applications
()
.
getQuery
(
x_processplatform_service_processing
.
class
,
Applications
.
joinQueryUri
(
"task"
,
task
.
getId
(),
"expire"
),
task
.
getJob
())
.
getData
(
WoId
.
class
);
count
.
incrementAndGet
();
}
catch
(
Exception
e
)
{
throw
new
ExceptionExpire
(
e
,
task
.
getId
(),
task
.
getTitle
(),
task
.
getSequence
());
}
}
catch
(
Exception
e
)
{
logger
.
error
(
e
);
// 如果是挂起状态那么就不再进行标志过期
if
(
BooleanUtils
.
isNotTrue
(
task
.
getPause
()))
{
expire
(
task
);
count
.
incrementAndGet
();
}
else
{
pause
.
incrementAndGet
();
}
}
}
}
while
(!
targets
.
isEmpty
());
logger
.
print
(
"标识{}个过期待办, 耗时:{}."
,
count
.
intValue
(),
stamp
.
consumingMilliseconds
());
logger
.
print
(
"标识{}个过期待办, {}个待办处于挂起状态, 耗时:{}."
,
count
.
intValue
(),
pause
.
intValue
(),
stamp
.
consumingMilliseconds
());
}
catch
(
Exception
e
)
{
throw
new
JobExecutionException
(
e
);
}
}
private
void
expire
(
Task
task
)
{
try
{
ThisApplication
.
context
().
applications
()
.
getQuery
(
x_processplatform_service_processing
.
class
,
Applications
.
joinQueryUri
(
"task"
,
task
.
getId
(),
"expire"
),
task
.
getJob
())
.
getData
(
WoId
.
class
);
}
catch
(
Exception
e
)
{
ExceptionExpire
exceptionExpire
=
new
ExceptionExpire
(
e
,
task
.
getId
(),
task
.
getTitle
(),
task
.
getSequence
());
logger
.
error
(
exceptionExpire
);
}
}
private
List
<
Task
>
list
(
EntityManagerContainer
emc
,
String
sequence
)
throws
Exception
{
EntityManager
em
=
emc
.
get
(
Task
.
class
);
CriteriaBuilder
cb
=
em
.
getCriteriaBuilder
();
CriteriaQuery
<
Tuple
>
cq
=
cb
.
createQuery
(
Tuple
.
class
);
Root
<
Task
>
root
=
cq
.
from
(
Task
.
class
);
Path
<
String
>
id_path
=
root
.
get
(
Task_
.
id
);
Path
<
String
>
job_path
=
root
.
get
(
Task_
.
job
);
Path
<
String
>
sequence_path
=
root
.
get
(
Task_
.
sequence
);
Path
<
String
>
idPath
=
root
.
get
(
Task_
.
id
);
Path
<
String
>
jobPath
=
root
.
get
(
Task_
.
job
);
Path
<
String
>
sequencePath
=
root
.
get
(
JpaObject_
.
sequence
);
Path
<
Boolean
>
pausePath
=
root
.
get
(
Task_
.
pause
);
Predicate
p
=
cb
.
or
(
cb
.
isNull
(
root
.
get
(
Task_
.
expired
)),
cb
.
equal
(
root
.
get
(
Task_
.
expired
),
false
));
p
=
cb
.
and
(
p
,
cb
.
isNotNull
(
root
.
get
(
Task_
.
expireTime
)));
p
=
cb
.
and
(
p
,
cb
.
lessThanOrEqualTo
(
root
.
get
(
Task_
.
expireTime
),
new
Date
()));
if
(
StringUtils
.
isNotEmpty
(
sequence
))
{
p
=
cb
.
and
(
p
,
cb
.
greaterThan
(
sequence
_p
ath
,
sequence
));
p
=
cb
.
and
(
p
,
cb
.
greaterThan
(
sequence
P
ath
,
sequence
));
}
cq
.
multiselect
(
id
_path
,
job_path
,
sequence_path
).
where
(
p
).
orderBy
(
cb
.
asc
(
sequence_p
ath
));
cq
.
multiselect
(
id
Path
,
jobPath
,
sequencePath
,
pausePath
).
where
(
p
).
orderBy
(
cb
.
asc
(
sequenceP
ath
));
List
<
Tuple
>
os
=
em
.
createQuery
(
cq
).
setMaxResults
(
200
).
getResultList
();
List
<
Task
>
list
=
new
ArrayList
<>();
for
(
Tuple
o
:
os
)
{
Task
task
=
new
Task
();
task
.
setId
(
o
.
get
(
id_path
));
task
.
setJob
(
o
.
get
(
job_path
));
task
.
setSequence
(
o
.
get
(
sequence_path
));
task
.
setId
(
o
.
get
(
idPath
));
task
.
setJob
(
o
.
get
(
jobPath
));
task
.
setSequence
(
o
.
get
(
sequencePath
));
task
.
setPause
(
o
.
get
(
pausePath
));
list
.
add
(
task
);
}
return
list
;
...
...
编辑
预览
Markdown
is supported
0%
请重试
或
添加新附件
.
添加附件
取消
You are about to add
0
people
to the discussion. Proceed with caution.
先完成此消息的编辑!
取消
想要评论请
注册
或
登录