提交 e3310e73 编写于 作者: R Ray

添加待办执行前,待办执行后,待办停留调用代码

上级 94d20052
......@@ -591,26 +591,32 @@ public class Process extends SliceJpaObject {
return manualStayScriptText;
}
public static final String MANUALBEFORETASKSCRIPT_FIELDNAME = "manualBeforeTaskScript";
@FieldDescribe("待办执行前脚本.")
@Transient
private String manualBeforeTaskScript;
public static final String MANUALBEFORETASKSCRIPTTEXT_FIELDNAME = "manualBeforeTaskScriptText";
@FieldDescribe("待办执行前脚本文本.")
@Transient
private String manualBeforeTaskScriptText;
public static final String MANUALAFTERTASKSCRIPT_FIELDNAME = "manualAfterTaskScript";
@FieldDescribe("待办执行后脚本.")
@Transient
private String manualAfterTaskScript;
public static final String MANUALAFTERTASKSCRIPTTEXT_FIELDNAME = "manualAfterTaskScriptText";
@FieldDescribe("待办执行后脚本文本.")
@Transient
private String manualAfterTaskScriptText;
public static final String MANUALSTAYSCRIPT_FIELDNAME = "manualStayScript";
@FieldDescribe("人工活动有停留脚本.")
@Transient
private String manualStayScript;
public static final String MANUALSTAYSCRIPTTEXT_FIELDNAME = "manualStayScriptText";
@FieldDescribe("人工活动有停留脚本文本.")
@Transient
private String manualStayScriptText;
......
......@@ -676,6 +676,20 @@ public class ElementFactory extends AbstractFactory {
scriptName = Objects.toString(PropertyUtils.getProperty(o, Process.afterEndScript_FIELDNAME));
scriptText = Objects.toString(PropertyUtils.getProperty(o, Process.afterEndScriptText_FIELDNAME));
break;
case Business.EVENT_MANUALSTAY:
scriptName = Objects.toString(PropertyUtils.getProperty(o, Process.MANUALSTAYSCRIPT_FIELDNAME));
scriptText = Objects.toString(PropertyUtils.getProperty(o, Process.MANUALSTAYSCRIPTTEXT_FIELDNAME));
break;
case Business.EVENT_MANUALBEFORETASK:
scriptName = Objects.toString(PropertyUtils.getProperty(o, Process.MANUALBEFORETASKSCRIPT_FIELDNAME));
scriptText = Objects
.toString(PropertyUtils.getProperty(o, Process.MANUALBEFORETASKSCRIPTTEXT_FIELDNAME));
break;
case Business.EVENT_MANUALAFTERTASK:
scriptName = Objects.toString(PropertyUtils.getProperty(o, Process.MANUALAFTERTASKSCRIPT_FIELDNAME));
scriptText = Objects
.toString(PropertyUtils.getProperty(o, Process.MANUALAFTERTASKSCRIPTTEXT_FIELDNAME));
break;
default:
break;
}
......
......@@ -5,7 +5,6 @@ import java.util.Objects;
import java.util.concurrent.Callable;
import java.util.concurrent.TimeUnit;
import javax.script.CompiledScript;
import javax.script.ScriptContext;
import org.apache.commons.lang3.BooleanUtils;
......@@ -80,47 +79,98 @@ class ActionProcessing extends BaseAction {
private void callManualBeforeTaskScript(Business business, Task task) throws Exception {
if (Objects.equals(task.getActivityType(), ActivityType.manual)) {
Manual manual = business.element().get(task.getActivity(), Manual.class);
if ((null != manual) && (StringUtils.isNotEmpty(manual.getManualBeforeTaskScript())
|| StringUtils.isNotEmpty(manual.getManualBeforeTaskScriptText()))) {
Work work = business.entityManagerContainer().find(task.getWork(), Work.class);
if (null != work) {
AeiObjects aeiObjects = new AeiObjects(business, work, manual, new ProcessingConfigurator(),
new ProcessingAttributes());
ScriptContext scriptContext = aeiObjects.scriptContext();
((WorkContext) scriptContext.getAttribute(ScriptingFactory.BINDING_NAME_WORKCONTEXT))
.bindTask(task);
WorkDataHelper workDataHelper = new WorkDataHelper(business.entityManagerContainer(), work);
CompiledScript cs = business.element().getCompiledScript(task.getApplication(), manual,
Business.EVENT_MANUALBEFORETASK);
JsonScriptingExecutor.eval(cs, scriptContext);
workDataHelper.update(aeiObjects.getData());
business.entityManagerContainer().commit();
Process process = business.element().get(task.getProcess(), Process.class);
if ((null != manual) && (null != process)) {
boolean processHasManualBeforeTaskScript = processHasManualBeforeTaskScript(process);
boolean hasManualBeforeTaskScript = hasManualBeforeTaskScript(manual);
if (processHasManualBeforeTaskScript || hasManualBeforeTaskScript) {
Work work = business.entityManagerContainer().find(task.getWork(), Work.class);
if (null != work) {
evalCallManualBeforeTaskScript(business, task, manual, process,
processHasManualBeforeTaskScript, hasManualBeforeTaskScript, work);
}
}
}
}
}
private void callManualAfterTaskScript(Business business, Task task, TaskCompleted taskCompleted)
private void evalCallManualBeforeTaskScript(Business business, Task task, Manual manual, Process process,
boolean processHasManualBeforeTaskScript, boolean hasManualBeforeTaskScript, Work work)
throws Exception {
if (Objects.equals(task.getActivityType(), ActivityType.manual)) {
Manual manual = business.element().get(task.getActivity(), Manual.class);
if ((null != manual) && (StringUtils.isNotEmpty(manual.getManualAfterTaskScript())
|| StringUtils.isNotEmpty(manual.getManualAfterTaskScriptText()))) {
Work work = business.entityManagerContainer().find(task.getWork(), Work.class);
if (null != work) {
AeiObjects aeiObjects = new AeiObjects(business, work, manual, new ProcessingConfigurator(),
new ProcessingAttributes());
ScriptContext scriptContext = aeiObjects.scriptContext();
((WorkContext) scriptContext.getAttribute(ScriptingFactory.BINDING_NAME_WORKCONTEXT))
.bindTaskCompleted(taskCompleted);
CompiledScript cs = business.element().getCompiledScript(task.getApplication(), manual,
Business.EVENT_MANUALAFTERTASK);
JsonScriptingExecutor.eval(cs, scriptContext);
AeiObjects aeiObjects = new AeiObjects(business, work, manual, new ProcessingConfigurator(),
new ProcessingAttributes());
ScriptContext scriptContext = aeiObjects.scriptContext();
((WorkContext) scriptContext.getAttribute(ScriptingFactory.BINDING_NAME_WORKCONTEXT)).bindTask(task);
WorkDataHelper workDataHelper = new WorkDataHelper(business.entityManagerContainer(), work);
if (processHasManualBeforeTaskScript) {
JsonScriptingExecutor.eval(business.element().getCompiledScript(task.getApplication(), process,
Business.EVENT_MANUALBEFORETASK), scriptContext);
}
if (hasManualBeforeTaskScript) {
JsonScriptingExecutor.eval(business.element().getCompiledScript(task.getApplication(), manual,
Business.EVENT_MANUALBEFORETASK), scriptContext);
}
workDataHelper.update(aeiObjects.getData());
business.entityManagerContainer().commit();
}
private boolean hasManualBeforeTaskScript(Manual manual) {
return ((null != manual) && (StringUtils.isNotEmpty(manual.getManualBeforeTaskScript())
|| StringUtils.isNotEmpty(manual.getManualBeforeTaskScriptText())));
}
private boolean processHasManualBeforeTaskScript(Process process) {
return ((null != process) && (StringUtils.isNotEmpty(process.getManualBeforeTaskScript())
|| StringUtils.isNotEmpty(process.getManualBeforeTaskScriptText())));
}
private void callManualAfterTaskScript(Business business, TaskCompleted taskCompleted) throws Exception {
if (Objects.equals(taskCompleted.getActivityType(), ActivityType.manual)) {
Manual manual = business.element().get(taskCompleted.getActivity(), Manual.class);
Process process = business.element().get(taskCompleted.getProcess(), Process.class);
if ((null != manual) && (null != process)) {
boolean processHasManualAfterTaskScript = processHasManualAfterTaskScript(process);
boolean hasManualAfterTaskScript = hasManualAfterTaskScript(manual);
if (processHasManualAfterTaskScript || hasManualAfterTaskScript) {
Work work = business.entityManagerContainer().find(taskCompleted.getWork(), Work.class);
if (null != work) {
evalCallManualAfterTaskScript(business, taskCompleted, manual, process,
processHasManualAfterTaskScript, hasManualAfterTaskScript, work);
}
}
}
}
}
private void evalCallManualAfterTaskScript(Business business, TaskCompleted taskCompleted, Manual manual,
Process process, boolean processHasManualAfterTaskScript, boolean hasManualAfterTaskScript, Work work)
throws Exception {
AeiObjects aeiObjects = new AeiObjects(business, work, manual, new ProcessingConfigurator(),
new ProcessingAttributes());
ScriptContext scriptContext = aeiObjects.scriptContext();
((WorkContext) scriptContext.getAttribute(ScriptingFactory.BINDING_NAME_WORKCONTEXT))
.bindTaskCompleted(taskCompleted);
if (processHasManualAfterTaskScript) {
JsonScriptingExecutor.eval(business.element().getCompiledScript(taskCompleted.getApplication(), process,
Business.EVENT_MANUALAFTERTASK), scriptContext);
}
if (hasManualAfterTaskScript) {
JsonScriptingExecutor.eval(business.element().getCompiledScript(taskCompleted.getApplication(), manual,
Business.EVENT_MANUALAFTERTASK), scriptContext);
}
}
private boolean hasManualAfterTaskScript(Manual manual) {
return ((null != manual) && (StringUtils.isNotEmpty(manual.getManualAfterTaskScript())
|| StringUtils.isNotEmpty(manual.getManualAfterTaskScriptText())));
}
private boolean processHasManualAfterTaskScript(Process process) {
return ((null != process) && (StringUtils.isNotEmpty(process.getManualAfterTaskScript())
|| StringUtils.isNotEmpty(process.getManualAfterTaskScriptText())));
}
public ActionResult<Wo> call() throws Exception {
ActionResult<Wo> result = new ActionResult<>();
Wo wo = new Wo();
......@@ -162,7 +212,7 @@ class ActionProcessing extends BaseAction {
emc.remove(task, CheckRemoveType.all);
emc.commit();
/* 待办执行后脚本,不能修改数据. */
callManualAfterTaskScript(business, task, taskCompleted);
callManualAfterTaskScript(business, taskCompleted);
MessageFactory.task_to_taskCompleted(taskCompleted);
wo.setId(taskCompleted.getId());
}
......@@ -172,10 +222,14 @@ class ActionProcessing extends BaseAction {
}
public static class Wo extends WoId {
private static final long serialVersionUID = 1L;
}
public static class Wi extends WrapProcessing {
private static final long serialVersionUID = -6828623155146710691L;
}
}
package com.x.processplatform.service.processing.processor.manual;
import java.lang.reflect.InvocationTargetException;
import java.util.List;
import org.apache.commons.lang3.StringUtils;
......@@ -10,6 +11,7 @@ import com.x.base.core.project.logger.LoggerFactory;
import com.x.processplatform.core.entity.content.Work;
import com.x.processplatform.core.entity.element.Activity;
import com.x.processplatform.core.entity.element.Manual;
import com.x.processplatform.core.entity.element.Process;
import com.x.processplatform.core.entity.element.Route;
import com.x.processplatform.service.processing.processor.AbstractProcessor;
import com.x.processplatform.service.processing.processor.AeiObjects;
......@@ -75,11 +77,17 @@ public abstract class AbstractManualProcessor extends AbstractProcessor {
protected abstract void inquiringCommitted(AeiObjects aeiObjects, Manual manual) throws Exception;
protected boolean hasManualStayScript(Activity activity) throws Exception {
protected boolean hasManualStayScript(Activity activity)
throws IllegalAccessException, InvocationTargetException, NoSuchMethodException {
return StringUtils.isNotEmpty(activity.get(Manual.manualStayScript_FIELDNAME, String.class))
|| StringUtils.isNotEmpty(activity.get(Manual.manualStayScriptText_FIELDNAME, String.class));
}
protected boolean hasManualStayScript(Process process) {
return StringUtils.isNotEmpty(process.getManualStayScript())
|| StringUtils.isNotEmpty(process.getManualStayScriptText());
}
protected void mergeTaskCompleted(AeiObjects aeiObjects, Work work, Work oldest) {
try {
aeiObjects.getTaskCompleteds().stream().filter(o -> StringUtils.equals(o.getWork(), work.getId()))
......
......@@ -337,20 +337,30 @@ public class ManualProcessor extends AbstractManualProcessor {
@Override
protected void executingCommitted(AeiObjects aeiObjects, Manual manual, List<Work> works) throws Exception {
// Manual Work 还没有处理完 发生了停留,出发了停留事件
if ((ListTools.isEmpty(works)) && this.hasManualStayScript(manual)
&& (!aeiObjects.getCreateTasks().isEmpty())) {
CompiledScript cs = aeiObjects.business().element().getCompiledScript(aeiObjects.getApplication().getId(),
aeiObjects.getActivity(), Business.EVENT_MANUALSTAY);
ScriptContext scriptContext = aeiObjects.scriptContext();
Bindings bindings = scriptContext.getBindings(ScriptContext.ENGINE_SCOPE);
WorkContext workContext = (WorkContext) bindings.get(ScriptingFactory.BINDING_NAME_WORKCONTEXT);
// 只有一条待办绑定到task
if (aeiObjects.getCreateTasks().size() == 1) {
workContext.bindTask(aeiObjects.getCreateTasks().get(0));
if ((ListTools.isEmpty(works)) && (!aeiObjects.getCreateTasks().isEmpty())) {
boolean hasManualStayScript = this.hasManualStayScript(manual);
boolean processHasManualStayScript = this.hasManualStayScript(aeiObjects.getProcess());
if (hasManualStayScript || processHasManualStayScript) {
ScriptContext scriptContext = aeiObjects.scriptContext();
Bindings bindings = scriptContext.getBindings(ScriptContext.ENGINE_SCOPE);
WorkContext workContext = (WorkContext) bindings.get(ScriptingFactory.BINDING_NAME_WORKCONTEXT);
// 只有一条待办绑定到task
if (aeiObjects.getCreateTasks().size() == 1) {
workContext.bindTask(aeiObjects.getCreateTasks().get(0));
}
if (processHasManualStayScript) {
JsonScriptingExecutor
.eval(aeiObjects.business().element().getCompiledScript(aeiObjects.getApplication().getId(),
aeiObjects.getProcess(), Business.EVENT_MANUALSTAY), scriptContext);
}
if (hasManualStayScript) {
JsonScriptingExecutor
.eval(aeiObjects.business().element().getCompiledScript(aeiObjects.getApplication().getId(),
aeiObjects.getActivity(), Business.EVENT_MANUALSTAY), scriptContext);
}
// 解除绑定
workContext.bindTask(null);
}
JsonScriptingExecutor.eval(cs, scriptContext);
// 解除绑定
workContext.bindTask(null);
}
}
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册