提交 611590e6 编写于 作者: O o2sword

流程数据发布设计4

上级 a7b7b29e
......@@ -153,7 +153,7 @@ public class DynamicEntityBuilder {
*/
private void createBundleField(Builder builder) {
Field bundleField = new Field();
bundleField.setName("bundle");
bundleField.setName(DynamicEntity.BUNDLE_FIELD);
bundleField.setDescription("流程实例的JOB");
bundleField.setType("string");
this.createField(builder, bundleField, String.class);
......
......@@ -32,6 +32,8 @@ public class Publish extends Activity {
private static final long serialVersionUID = 588240173459487399L;
private static final String TABLE = PersistenceProperties.Element.Publish.table;
public static final String PUBLISH_TARGET_CMS = "cms";
public static final String PUBLISH_TARGET_TABLE = "table";
@Override
public String getId() {
......@@ -452,19 +454,19 @@ public class Publish extends Activity {
@CheckPersist(allowEmpty = true)
private String notifyDataPathList;
public static final String jaxwsParameterScript_FIELDNAME = "jaxwsParameterScript";
public static final String targetAssignDataScript_FIELDNAME = "targetAssignDataScript";
@IdReference(Script.class)
@FieldDescribe("数据脚本.")
@FieldDescribe("内容管理数据脚本.")
@Column(length = AbstractPersistenceProperties.processPlatform_name_length, name = ColumnNamePrefix
+ jaxwsParameterScript_FIELDNAME)
+ targetAssignDataScript_FIELDNAME)
@CheckPersist(allowEmpty = true)
private String targetAssignDataScript;
public static final String jaxwsParameterScriptText_FIELDNAME = "jaxwsParameterScriptText";
@FieldDescribe("数据脚本文本.")
public static final String targetAssignDataScriptText_FIELDNAME = "targetAssignDataScriptText";
@FieldDescribe("内容管理数据脚本文本.")
@Lob
@Basic(fetch = FetchType.EAGER)
@Column(length = JpaObject.length_1M, name = ColumnNamePrefix + jaxwsParameterScriptText_FIELDNAME)
@Column(length = JpaObject.length_1M, name = ColumnNamePrefix + targetAssignDataScriptText_FIELDNAME)
@CheckPersist(allowEmpty = true)
private String targetAssignDataScriptText;
......
......@@ -34,6 +34,7 @@ public class Business {
public static final String EVENT_INVOKEJAXRSRESPONSE = "invokeJaxrsResponse";
public static final String EVENT_INVOKEJAXRSBODY = "invokeJaxrsBody";
public static final String EVENT_INVOKEJAXRSHEAD = "invokeJaxrsHead";
public static final String EVENT_PUBLISHCMSBODY = "publishCmsBody";
public static final String EVENT_SERVICE = "service";
public static final String EVENT_ROUTE = "route";
public static final String EVENT_ROUTEAPPENDTASKIDENTITY = "routeAppendTaskIdentity";
......
......@@ -14,6 +14,8 @@ import javax.persistence.criteria.Predicate;
import javax.persistence.criteria.Root;
import javax.script.CompiledScript;
import com.x.processplatform.core.entity.element.*;
import com.x.processplatform.core.entity.element.Process;
import org.apache.commons.beanutils.PropertyUtils;
import org.apache.commons.collections4.ListUtils;
import org.apache.commons.lang3.StringUtils;
......@@ -26,30 +28,6 @@ import com.x.base.core.project.logger.Logger;
import com.x.base.core.project.logger.LoggerFactory;
import com.x.base.core.project.scripting.ScriptingFactory;
import com.x.base.core.project.tools.ListTools;
import com.x.processplatform.core.entity.element.Activity;
import com.x.processplatform.core.entity.element.ActivityType;
import com.x.processplatform.core.entity.element.Agent;
import com.x.processplatform.core.entity.element.Application;
import com.x.processplatform.core.entity.element.Begin;
import com.x.processplatform.core.entity.element.Cancel;
import com.x.processplatform.core.entity.element.Choice;
import com.x.processplatform.core.entity.element.Delay;
import com.x.processplatform.core.entity.element.Embed;
import com.x.processplatform.core.entity.element.End;
import com.x.processplatform.core.entity.element.Form;
import com.x.processplatform.core.entity.element.Invoke;
import com.x.processplatform.core.entity.element.Manual;
import com.x.processplatform.core.entity.element.Mapping;
import com.x.processplatform.core.entity.element.Mapping_;
import com.x.processplatform.core.entity.element.Merge;
import com.x.processplatform.core.entity.element.Parallel;
import com.x.processplatform.core.entity.element.Process;
import com.x.processplatform.core.entity.element.Route;
import com.x.processplatform.core.entity.element.Route_;
import com.x.processplatform.core.entity.element.Script;
import com.x.processplatform.core.entity.element.Script_;
import com.x.processplatform.core.entity.element.Service;
import com.x.processplatform.core.entity.element.Split;
import com.x.processplatform.service.processing.AbstractFactory;
import com.x.processplatform.service.processing.Business;
......@@ -526,6 +504,10 @@ public class ElementFactory extends AbstractFactory {
scriptName = Objects.toString(PropertyUtils.getProperty(o, Invoke.jaxrsBodyScript_FIELDNAME));
scriptText = Objects.toString(PropertyUtils.getProperty(o, Invoke.jaxrsBodyScriptText_FIELDNAME));
break;
case Business.EVENT_PUBLISHCMSBODY:
scriptName = Objects.toString(PropertyUtils.getProperty(o, Publish.targetAssignDataScript_FIELDNAME));
scriptText = Objects.toString(PropertyUtils.getProperty(o, Publish.targetAssignDataScriptText_FIELDNAME));
break;
case Business.EVENT_INVOKEJAXRSHEAD:
scriptName = Objects.toString(PropertyUtils.getProperty(o, Invoke.jaxrsHeadScript_FIELDNAME));
scriptText = Objects.toString(PropertyUtils.getProperty(o, Invoke.jaxrsHeadScriptText_FIELDNAME));
......@@ -614,6 +596,26 @@ public class ElementFactory extends AbstractFactory {
return compiledScript;
}
public CompiledScript getCompiledScript(String applicationId, String scriptName, String scriptText) {
StringBuilder sb = new StringBuilder();
CompiledScript compiledScript = null;
try {
if (StringUtils.isNotEmpty(scriptName)) {
List<Script> list = listScriptNestedWithApplicationWithUniqueName(applicationId, scriptName);
for (Script script : list) {
sb.append(script.getText()).append(System.lineSeparator());
}
}
if (StringUtils.isNotEmpty(scriptText)) {
sb.append(scriptText).append(System.lineSeparator());
}
compiledScript = ScriptingFactory.functionalizationCompile(sb.toString());
} catch (Exception e) {
logger.error(e);
}
return compiledScript;
}
public CompiledScript getCompiledScript(String applicationId, Route o, String event) throws Exception {
CacheCategory cacheCategory = new CacheCategory(Route.class, Script.class);
CacheKey cacheKey = new CacheKey(GETCOMPILEDSCRIPT, applicationId, o.getId(), event);
......@@ -757,7 +759,7 @@ public class ElementFactory extends AbstractFactory {
/**
* 根据活动节点查找合适的显示表单.
*
*
* @param actvityId
* @return
* @throws Exception
......
package com.x.processplatform.service.processing.processor.publish;
import com.google.gson.JsonElement;
import com.x.base.core.container.EntityManagerContainer;
import com.x.base.core.project.logger.Logger;
import com.x.base.core.project.logger.LoggerFactory;
import com.x.base.core.project.scripting.JsonScriptingExecutor;
import com.x.base.core.project.scripting.ScriptingFactory;
import com.x.base.core.project.tools.ListTools;
import com.x.processplatform.core.entity.content.Work;
import com.x.processplatform.core.entity.element.Embed;
import com.x.processplatform.core.entity.element.Publish;
import com.x.processplatform.core.entity.element.Route;
import com.x.processplatform.core.entity.element.*;
import com.x.processplatform.core.entity.log.Signal;
import com.x.processplatform.service.processing.Business;
import com.x.processplatform.service.processing.WrapScriptObject;
import com.x.processplatform.service.processing.processor.AeiObjects;
import com.x.processplatform.service.processing.processor.invoke.InvokeProcessor;
import org.apache.commons.lang3.StringUtils;
import javax.script.CompiledScript;
import javax.script.ScriptContext;
import java.util.ArrayList;
import java.util.List;
import java.util.Objects;
/**
* 数据发布节点处理器
......@@ -46,13 +54,112 @@ public class PublishProcessor extends AbstractPublishProcessor {
.push(Signal.publishExecute(aeiObjects.getWork().getActivityToken(), publish));
List<Work> results = new ArrayList<>();
boolean passThrough = false;
switch (publish.getPublishTarget()) {
case Publish.PUBLISH_TARGET_CMS:
// 可以根据返回脚本判断时候流转
passThrough = true;
break;
case Publish.PUBLISH_TARGET_TABLE:
// 可以根据返回脚本判断时候流转
passThrough = true;
break;
default:
break;
}
if (passThrough) {
results.add(aeiObjects.getWork());
} else {
LOGGER.info("work title:{}, id:{} public return false, stay in the current activity.",
() -> aeiObjects.getWork().getTitle(), () -> aeiObjects.getWork().getId());
}
if (passThrough) {
results.add(aeiObjects.getWork());
}
return results;
}
private boolean publishToTable(AeiObjects aeiObjects, Publish publish) throws Exception {
return true;
}
private List<AssignTable> evalTableBody(AeiObjects aeiObjects, Publish publish) throws Exception {
List<AssignTable> list = new ArrayList<>();
if(ListTools.isNotEmpty(publish.getPublishTableList())){
for (PublishTable publishTable : publish.getPublishTableList()){
AssignTable assignTable = new AssignTable();
assignTable.setTableName(publishTable.getTableName());
if(PublishTable.TABLE_DATA_BY_PATH.equals(publishTable.getQueryTableDataBy())){
if(StringUtils.isNotBlank(publishTable.getQueryTableDataPath())){
Object o = aeiObjects.getData().find(publishTable.getQueryTableDataPath());
if(o!=null){
assignTable.setData(gson.toJsonTree(o));
}
}
}else {
WrapScriptObject assignBody = new WrapScriptObject();
if (hasTableAssignDataScript(publishTable)) {
ScriptContext scriptContext = aeiObjects.scriptContext();
CompiledScript cs = aeiObjects.business().element().getCompiledScript(aeiObjects.getApplication().getId(),
aeiObjects.getActivity(), Business.EVENT_PUBLISHCMSBODY);
scriptContext.getBindings(ScriptContext.ENGINE_SCOPE).put(ScriptingFactory.BINDING_NAME_JAXRSBODY,
assignBody);
JsonScriptingExecutor.jsonElement(cs, scriptContext, o -> {
if (!o.isJsonNull()) {
assignTable.setData(o);
}
});
}
}
if(assignTable.getData() == null){
assignTable.setData(gson.toJsonTree(aeiObjects.getData()));
}
}
}
return list;
}
private String evalCmsBody(AeiObjects aeiObjects, Publish publish) throws Exception {
WrapScriptObject assignBody = new WrapScriptObject();
if (hasCmsAssignDataScript(publish)) {
ScriptContext scriptContext = aeiObjects.scriptContext();
CompiledScript cs = aeiObjects.business().element().getCompiledScript(aeiObjects.getApplication().getId(),
aeiObjects.getActivity(), Business.EVENT_PUBLISHCMSBODY);
scriptContext.getBindings(ScriptContext.ENGINE_SCOPE).put(ScriptingFactory.BINDING_NAME_JAXRSBODY,
assignBody);
JsonScriptingExecutor.jsonElement(cs, scriptContext, o -> {
if (!o.isJsonNull()) {
assignBody.set(gson.toJson(o));
}
});
}
return assignBody.get();
}
public class AssignTable {
private String tableName;
private JsonElement data;
public String getTableName() {
return tableName;
}
public void setTableName(String tableName) {
this.tableName = tableName;
}
public JsonElement getData() {
return data;
}
public void setData(JsonElement data) {
this.data = data;
}
}
@Override
protected void executingCommitted(AeiObjects aeiObjects, Publish publish, List<Work> works) throws Exception {
// Do nothing
......@@ -77,4 +184,9 @@ public class PublishProcessor extends AbstractPublishProcessor {
return StringUtils.isNotEmpty(publish.getTargetAssignDataScript())
|| StringUtils.isNotEmpty(publish.getTargetAssignDataScriptText());
}
private boolean hasTableAssignDataScript(PublishTable publishTable) {
return StringUtils.isNotEmpty(publishTable.getTargetAssignDataScript())
|| StringUtils.isNotEmpty(publishTable.getTargetAssignDataScriptText());
}
}
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册