فهرست منبع

脚本预编译

roo00 6 سال پیش
والد
کامیت
00dd24723b

+ 15 - 8
o2server/x_processplatform_service_processing/src/main/java/com/x/processplatform/service/processing/SerialBuilder.java

@@ -13,7 +13,6 @@ import javax.persistence.criteria.Predicate;
 import javax.persistence.criteria.Root;
 import javax.script.Bindings;
 import javax.script.ScriptContext;
-import javax.script.SimpleScriptContext;
 
 import org.apache.commons.lang3.StringUtils;
 import org.apache.commons.lang3.time.DateFormatUtils;
@@ -22,7 +21,7 @@ import com.google.gson.reflect.TypeToken;
 import com.x.base.core.container.EntityManagerContainer;
 import com.x.base.core.entity.annotation.CheckPersistType;
 import com.x.base.core.project.Context;
-import com.x.base.core.project.exception.ExceptionWhen;
+import com.x.base.core.project.exception.ExceptionEntityNotExist;
 import com.x.base.core.project.gson.XGsonBuilder;
 import com.x.base.core.project.logger.Logger;
 import com.x.base.core.project.logger.LoggerFactory;
@@ -45,8 +44,14 @@ public class SerialBuilder {
 			throws Exception {
 		this.context = context;
 		this.emc = emc;
-		process = emc.find(processId, Process.class, ExceptionWhen.not_found);
-		work = emc.find(workId, Work.class, ExceptionWhen.not_found);
+		process = emc.find(processId, Process.class);
+		if (null == process) {
+			throw new ExceptionEntityNotExist(processId, Process.class);
+		}
+		work = emc.find(workId, Work.class);
+		if (null == work) {
+			throw new ExceptionEntityNotExist(workId, Work.class);
+		}
 		serial = new Serial();
 		this.date = new Date();
 	}
@@ -74,12 +79,13 @@ public class SerialBuilder {
 			if (!list.isEmpty()) {
 				ScriptContext scriptContext = aeiObjects.scriptContext();
 				Bindings bindings = scriptContext.getBindings(ScriptContext.ENGINE_SCOPE);
-				bindings.put("serial", this.serial);
-				bindings.put("process", this.process);
+				bindings.put(ScriptFactory.BINDING_NAME_SERIAL, this.serial);
+				bindings.put(ScriptFactory.BINDING_NAME_PROCESS, this.process);
 				for (SerialTextureItem o : list) {
 					if ((!StringUtils.equalsIgnoreCase(o.getKey(), "number"))
 							&& StringUtils.isNotEmpty(o.getScript())) {
-						Object v = ScriptFactory.scriptEngine.eval(o.getScript(), scriptContext);
+						Object v = ScriptFactory.scriptEngine.eval(ScriptFactory.functionalization(o.getScript()),
+								scriptContext);
 						itemResults.add(v);
 					} else {
 						itemResults.add("");
@@ -88,7 +94,8 @@ public class SerialBuilder {
 				for (int i = 0; i < list.size(); i++) {
 					SerialTextureItem o = list.get(i);
 					if ((StringUtils.equalsIgnoreCase(o.getKey(), "number")) && StringUtils.isNotEmpty(o.getScript())) {
-						Object v = ScriptFactory.scriptEngine.eval(o.getScript(), scriptContext);
+						Object v = ScriptFactory.scriptEngine.eval(ScriptFactory.functionalization(o.getScript()),
+								scriptContext);
 						itemResults.set(i, v);
 					}
 				}

+ 2 - 5
o2server/x_processplatform_service_processing/src/main/java/com/x/processplatform/service/processing/processor/AeiObjects.java

@@ -821,8 +821,6 @@ public class AeiObjects extends GsonPropertyObject {
 					this.getTaskCompleteds().stream().filter(p -> StringUtils.equals(o.getPerson(), p.getPerson()))
 							.forEach(p -> p.setLatest(false));
 					this.business.entityManagerContainer().persist(o, CheckPersistType.all);
-					/* 发送创建已办消息 */
-					// MessageFactory.taskCompleted_create(o);
 					/* 创建已办的参阅 */
 					this.createReview(new Review(this.getWork(), o.getPerson()));
 				} catch (Exception e) {
@@ -847,8 +845,6 @@ public class AeiObjects extends GsonPropertyObject {
 					obj = this.business.entityManagerContainer().find(o.getId(), TaskCompleted.class);
 					if (null != obj) {
 						this.business.entityManagerContainer().remove(obj, CheckRemoveType.all);
-						/* 发送删除已办消息 */
-						// MessageFactory.taskCompleted_delete(obj);
 					}
 				} catch (Exception e) {
 					logger.error(e);
@@ -1309,8 +1305,9 @@ public class AeiObjects extends GsonPropertyObject {
 			bindings.put(ScriptFactory.BINDING_NAME_WEBSERVICESCLIENT, new WebservicesClient());
 			bindings.put(ScriptFactory.BINDING_NAME_DICTIONARY,
 					new ApplicationDictHelper(this.entityManagerContainer(), this.getWork().getApplication()));
+			bindings.put(ScriptFactory.BINDING_NAME_APPLICATIONS, ThisApplication.context().applications());
 			bindings.put(ScriptFactory.BINDING_NAME_ROUTES, this.getRoutes());
-			ScriptFactory.initialScriptText().eval(scriptContext);
+			ScriptFactory.initialScriptText().eval(this.scriptContext);
 		}
 		return this.scriptContext;
 	}

+ 6 - 5
o2server/x_processplatform_service_processing/src/main/java/com/x/processplatform/service/processing/processor/TranslateReadIdentityTools.java

@@ -83,15 +83,16 @@ public class TranslateReadIdentityTools {
 	private static List<String> duty(AeiObjects aeiObjects) throws Exception {
 		List<String> list = new ArrayList<>();
 		if (StringUtils.isNotEmpty(aeiObjects.getActivity().getReadDuty())) {
-			ScriptContext scriptContext = aeiObjects.scriptContext();
 			JsonArray array = XGsonBuilder.instance().fromJson(aeiObjects.getActivity().getReadDuty(), JsonArray.class);
 			Iterator<JsonElement> iterator = array.iterator();
 			while (iterator.hasNext()) {
 				JsonObject o = iterator.next().getAsJsonObject();
 				String name = o.get("name").getAsString();
-				Object objectValue = ScriptFactory.scriptEngine
-						.eval(ScriptFactory.functionalization(o.get("code").getAsString()), scriptContext);
-				List<String> ds = ScriptFactory.extrectDistinguishedNameList(objectValue);
+				String code = o.get("code").getAsString();
+				CompiledScript compiledScript = aeiObjects.business().element()
+						.getCompiledScript(aeiObjects.getActivity(), Business.EVENT_READDUTY, name, code);
+				Object objectValue = compiledScript.eval(aeiObjects.scriptContext());
+				List<String> ds = ScriptFactory.asDistinguishedNameList(objectValue);
 				if (ListTools.isNotEmpty(ds)) {
 					for (String str : ds) {
 						List<String> os = aeiObjects.business().organization().unitDuty()
@@ -115,7 +116,7 @@ public class TranslateReadIdentityTools {
 			CompiledScript compiledScript = aeiObjects.business().element().getCompiledScript(
 					aeiObjects.getWork().getApplication(), aeiObjects.getActivity(), Business.EVENT_READ);
 			Object objectValue = compiledScript.eval(scriptContext);
-			List<String> os = ScriptFactory.extrectDistinguishedNameList(objectValue);
+			List<String> os = ScriptFactory.asDistinguishedNameList(objectValue);
 			if (ListTools.isNotEmpty(os)) {
 				list.addAll(os);
 			}

+ 6 - 5
o2server/x_processplatform_service_processing/src/main/java/com/x/processplatform/service/processing/processor/TranslateReviewPersonTools.java

@@ -83,16 +83,17 @@ public class TranslateReviewPersonTools {
 	private static List<String> duty(AeiObjects aeiObjects) throws Exception {
 		List<String> list = new ArrayList<>();
 		if (StringUtils.isNotEmpty(aeiObjects.getActivity().getReviewDuty())) {
-			ScriptContext scriptContext = aeiObjects.scriptContext();
 			JsonArray array = XGsonBuilder.instance().fromJson(aeiObjects.getActivity().getReviewDuty(),
 					JsonArray.class);
 			Iterator<JsonElement> iterator = array.iterator();
 			while (iterator.hasNext()) {
 				JsonObject o = iterator.next().getAsJsonObject();
 				String name = o.get("name").getAsString();
-				Object objectValue = ScriptFactory.scriptEngine
-						.eval(ScriptFactory.functionalization(o.get("code").getAsString()), scriptContext);
-				List<String> ds = ScriptFactory.extrectDistinguishedNameList(objectValue);
+				String code = o.get("code").getAsString();
+				CompiledScript compiledScript = aeiObjects.business().element()
+						.getCompiledScript(aeiObjects.getActivity(), Business.EVENT_REVIEWDUTY, name, code);
+				Object objectValue = compiledScript.eval(aeiObjects.scriptContext());
+				List<String> ds = ScriptFactory.asDistinguishedNameList(objectValue);
 				if (ListTools.isNotEmpty(ds)) {
 					for (String str : ds) {
 						List<String> os = aeiObjects.business().organization().unitDuty()
@@ -116,7 +117,7 @@ public class TranslateReviewPersonTools {
 			CompiledScript compiledScript = aeiObjects.business().element().getCompiledScript(
 					aeiObjects.getWork().getApplication(), aeiObjects.getActivity(), Business.EVENT_REVIEW);
 			Object objectValue = compiledScript.eval(scriptContext);
-			List<String> os = ScriptFactory.extrectDistinguishedNameList(objectValue);
+			List<String> os = ScriptFactory.asDistinguishedNameList(objectValue);
 			if (ListTools.isNotEmpty(os)) {
 				list.addAll(os);
 			}

+ 5 - 2
o2server/x_processplatform_service_processing/src/main/java/com/x/processplatform/service/processing/processor/embed/EmbedProcessor.java

@@ -76,6 +76,8 @@ public class EmbedProcessor extends AbstractEmbedProcessor {
 			wrap.set(gson.toJson(assginData));
 			ScriptContext scriptContext = aeiObjects.scriptContext();
 			scriptContext.getBindings(ScriptContext.ENGINE_SCOPE).put(ScriptFactory.BINDING_NAME_ASSIGNDATA, wrap);
+			/* 重新注入对象需要重新运行 */
+			ScriptFactory.initialScriptText().eval(scriptContext);
 			aeiObjects.business().element().getCompiledScript(aeiObjects.getWork().getApplication(), embed,
 					Business.EVENT_EMBEDTARGETASSIGNDATA).eval(scriptContext);
 			assginData = gson.fromJson(wrap.get(), AssginData.class);
@@ -131,11 +133,12 @@ public class EmbedProcessor extends AbstractEmbedProcessor {
 		if (this.hasIdentityScript(embed)) {
 			ScriptContext scriptContext = aeiObjects.scriptContext();
 			scriptContext.getBindings(ScriptContext.ENGINE_SCOPE).put(ScriptFactory.BINDING_NAME_IDENTITY, value);
-
+			/* 重新注入对象需要重新运行 */
+			ScriptFactory.initialScriptText().eval(scriptContext);
 			Object objectValue = aeiObjects.business().element()
 					.getCompiledScript(aeiObjects.getWork().getApplication(), embed, Business.EVENT_EMBEDTARGETIDENTITY)
 					.eval(scriptContext);
-			List<String> os = ScriptFactory.extrectDistinguishedNameList(objectValue);
+			List<String> os = ScriptFactory.asDistinguishedNameList(objectValue);
 
 			os = ListTools.trim(os, true, false);
 			if (ListTools.isEmpty(os)) {

+ 14 - 0
o2server/x_processplatform_service_processing/src/main/java/com/x/processplatform/service/processing/processor/invoke/InvokeProcessor.java

@@ -95,6 +95,8 @@ public class InvokeProcessor extends AbstractInvokeProcessor {
 				ScriptContext scriptContext = aeiObjects.scriptContext();
 				scriptContext.getBindings(ScriptContext.ENGINE_SCOPE).put(ScriptFactory.BINDING_NAME_JAXWSRESPONSE,
 						response);
+				/* 重新注入对象需要重新运行 */
+				ScriptFactory.initialScriptText().eval(scriptContext);
 				CompiledScript cs = aeiObjects.business().element().getCompiledScript(
 						aeiObjects.getWork().getApplication(), aeiObjects.getActivity(),
 						Business.EVENT_INVOKEJAXWSRESPONSE);
@@ -110,6 +112,8 @@ public class InvokeProcessor extends AbstractInvokeProcessor {
 			ScriptContext scriptContext = aeiObjects.scriptContext();
 			scriptContext.getBindings(ScriptContext.ENGINE_SCOPE).put(ScriptFactory.BINDING_NAME_PARAMETERS,
 					parameters);
+			/* 重新注入对象需要重新运行 */
+			ScriptFactory.initialScriptText().eval(scriptContext);
 			CompiledScript cs = aeiObjects.business().element().getCompiledScript(aeiObjects.getWork().getApplication(),
 					aeiObjects.getActivity(), Business.EVENT_INVOKEJAXWSPARAMETER);
 			cs.eval(scriptContext);
@@ -216,6 +220,8 @@ public class InvokeProcessor extends AbstractInvokeProcessor {
 				ScriptContext scriptContext = aeiObjects.scriptContext();
 				scriptContext.getBindings(ScriptContext.ENGINE_SCOPE).put(ScriptFactory.BINDING_NAME_JAXRSRESPONSE,
 						jaxrsResponse);
+				/* 重新注入对象需要重新运行 */
+				ScriptFactory.initialScriptText().eval(scriptContext);
 				CompiledScript cs = aeiObjects.business().element().getCompiledScript(
 						aeiObjects.getWork().getApplication(), aeiObjects.getActivity(),
 						Business.EVENT_INVOKEJAXRSRESPONSE);
@@ -302,6 +308,8 @@ public class InvokeProcessor extends AbstractInvokeProcessor {
 				ScriptContext scriptContext = aeiObjects.scriptContext();
 				scriptContext.getBindings(ScriptContext.ENGINE_SCOPE).put(ScriptFactory.BINDING_NAME_JAXRSRESPONSE,
 						jaxrsResponse);
+				/* 重新注入对象需要重新运行 */
+				ScriptFactory.initialScriptText().eval(scriptContext);
 				CompiledScript cs = aeiObjects.business().element().getCompiledScript(
 						aeiObjects.getWork().getApplication(), aeiObjects.getActivity(),
 						Business.EVENT_INVOKEJAXRSRESPONSE);
@@ -319,6 +327,8 @@ public class InvokeProcessor extends AbstractInvokeProcessor {
 			ScriptContext scriptContext = aeiObjects.scriptContext();
 			scriptContext.getBindings(ScriptContext.ENGINE_SCOPE).put(ScriptFactory.BINDING_NAME_PARAMETERS,
 					parameters);
+			/* 重新注入对象需要重新运行 */
+			ScriptFactory.initialScriptText().eval(scriptContext);
 			CompiledScript cs = aeiObjects.business().element().getCompiledScript(aeiObjects.getWork().getApplication(),
 					aeiObjects.getActivity(), Business.EVENT_INVOKEJAXRSPARAMETER);
 			cs.eval(scriptContext);
@@ -336,6 +346,8 @@ public class InvokeProcessor extends AbstractInvokeProcessor {
 
 			ScriptContext scriptContext = aeiObjects.scriptContext();
 			scriptContext.getBindings(ScriptContext.ENGINE_SCOPE).put(ScriptFactory.BINDING_NAME_JAXRSBODY, jaxrsBody);
+			/* 重新注入对象需要重新运行 */
+			ScriptFactory.initialScriptText().eval(scriptContext);
 			CompiledScript cs = aeiObjects.business().element().getCompiledScript(aeiObjects.getWork().getApplication(),
 					aeiObjects.getActivity(), Business.EVENT_INVOKEJAXRSBODY);
 			cs.eval(scriptContext);
@@ -350,6 +362,8 @@ public class InvokeProcessor extends AbstractInvokeProcessor {
 
 			ScriptContext scriptContext = aeiObjects.scriptContext();
 			scriptContext.getBindings(ScriptContext.ENGINE_SCOPE).put(ScriptFactory.BINDING_NAME_JAXRSHEAD, map);
+			/* 重新注入对象需要重新运行 */
+			ScriptFactory.initialScriptText().eval(scriptContext);
 			CompiledScript cs = aeiObjects.business().element().getCompiledScript(aeiObjects.getWork().getApplication(),
 					aeiObjects.getActivity(), Business.EVENT_INVOKEJAXRSHEAD);
 			cs.eval(scriptContext);

+ 41 - 53
o2server/x_processplatform_service_processing/src/main/java/com/x/processplatform/service/processing/processor/manual/ManualProcessor.java

@@ -38,7 +38,6 @@ import com.x.processplatform.core.entity.element.Manual;
 import com.x.processplatform.core.entity.element.Route;
 import com.x.processplatform.core.entity.element.util.WorkLogTree;
 import com.x.processplatform.service.processing.Business;
-import com.x.processplatform.service.processing.MessageFactory;
 import com.x.processplatform.service.processing.processor.AeiObjects;
 
 public class ManualProcessor extends AbstractManualProcessor {
@@ -284,17 +283,17 @@ public class ManualProcessor extends AbstractManualProcessor {
 	/* 通过已办存根选择某条路由 */
 	private String choiceRouteName(List<TaskCompleted> list, List<Route> routes) throws Exception {
 		String result = "";
-		List<String> os = new ArrayList<>();
+		List<String> names = new ArrayList<>();
 		ListTools.trim(list, false, false).stream().forEach(o -> {
-			os.add(o.getRouteName());
+			names.add(o.getRouteName());
 		});
-		/* 进行独占路由的判断 */
+		/* 进行优先路由的判断 */
 		Route soleRoute = routes.stream().filter(o -> BooleanUtils.isTrue(o.getSole())).findFirst().orElse(null);
-		if ((null != soleRoute) && os.contains(soleRoute.getName())) {
+		if ((null != soleRoute) && names.contains(soleRoute.getName())) {
 			result = soleRoute.getName();
 		} else {
 			/* 进行默认的策略,选择占比多的 */
-			result = ListTools.maxCountElement(os);
+			result = ListTools.maxCountElement(names);
 		}
 		if (StringUtils.isEmpty(result)) {
 			throw new ExceptionChoiceRouteNameError(
@@ -356,16 +355,19 @@ public class ManualProcessor extends AbstractManualProcessor {
 		boolean passThrough = false;
 		/* 取得本环节已经处理的已办 */
 		List<TaskCompleted> taskCompleteds = this.listJoinInquireTaskCompleted(aeiObjects, identities);
-		if (ListTools.isEmpty(identities)) {
-			if (ListTools.isNotEmpty(taskCompleteds)) {
-				/* 预计的处理人全部不存在,且已经有人处理过了 */
-				passThrough = true;
-			} else {
-				/* 即没有预计的处理人也没有已经办理过的记录那么只能报错 */
-				throw new ExceptionExpectedEmpty(aeiObjects.getWork().getTitle(), aeiObjects.getWork().getId(),
-						manual.getName(), manual.getId());
+		/* 存在优先路由 */
+		Route soleRoute = aeiObjects.getRoutes().stream().filter(r -> BooleanUtils.isTrue(r.getSole())).findFirst()
+				.orElse(null);
+		if (null != soleRoute) {
+			TaskCompleted soleTaskCompleted = taskCompleteds.stream()
+					.filter(t -> BooleanUtils.isTrue(t.getJoinInquire())
+							&& StringUtils.equals(t.getRouteName(), soleRoute.getName()))
+					.findFirst().orElse(null);
+			if (null != soleTaskCompleted) {
+				return true;
 			}
 		}
+		/* 存在优先路由结束 */
 		/* 将已经处理的人从期望值中移除 */
 		aeiObjects.getJoinInquireTaskCompleteds().stream().filter(o -> {
 			return StringUtils.equals(aeiObjects.getWork().getActivityToken(), o.getActivityToken());
@@ -402,13 +404,23 @@ public class ManualProcessor extends AbstractManualProcessor {
 
 	private boolean queue(AeiObjects aeiObjects, Manual manual, List<String> identities) throws Exception {
 		boolean passThrough = false;
-		if (identities.isEmpty()) {
-			throw new ExceptionExpectedEmpty(aeiObjects.getWork().getTitle(), aeiObjects.getWork().getId(),
-					manual.getName(), manual.getId());
+		List<TaskCompleted> taskCompleteds = this.listJoinInquireTaskCompleted(aeiObjects, identities);
+		/* 存在优先路由 */
+		Route soleRoute = aeiObjects.getRoutes().stream().filter(r -> BooleanUtils.isTrue(r.getSole())).findFirst()
+				.orElse(null);
+		if (null != soleRoute) {
+			TaskCompleted soleTaskCompleted = taskCompleteds.stream()
+					.filter(t -> BooleanUtils.isTrue(t.getJoinInquire())
+							&& StringUtils.equals(t.getRouteName(), soleRoute.getName()))
+					.findFirst().orElse(null);
+			if (null != soleTaskCompleted) {
+				return true;
+			}
 		}
-		List<TaskCompleted> done = this.listJoinInquireTaskCompleted(aeiObjects, identities);
+		/* 存在优先路由结束 */
+
 		/* 将已经处理的人从期望值中移除 */
-		for (TaskCompleted o : done) {
+		for (TaskCompleted o : taskCompleteds) {
 			identities.remove(o.getIdentity());
 		}
 		if (identities.isEmpty()) {
@@ -418,17 +430,14 @@ public class ManualProcessor extends AbstractManualProcessor {
 			passThrough = false;
 			String identity = identities.get(0);
 			/* 还有人没有处理,开始判断待办,取到本环节的所有待办,理论上只能有一条待办 */
-			List<Task> existed = this.entityManagerContainer().fetch(
-					this.business().task().listWithActivityToken(aeiObjects.getWork().getActivityToken()), Task.class,
-					ListTools.toList(Task.identity_FIELDNAME));
-			/* 理论上只能有一条待办 */
 			boolean find = false;
-			for (Task _o : existed) {
-				if (!StringUtils.equals(_o.getIdentity(), identity)) {
-					this.entityManagerContainer().delete(Task.class, _o.getId());
-					MessageFactory.task_delete(_o);
-				} else {
-					find = true;
+			for (Task t : aeiObjects.getTasks()) {
+				if (StringUtils.equals(aeiObjects.getWork().getActivityToken(), t.getActivityToken())) {
+					if (!StringUtils.equals(t.getIdentity(), identity)) {
+						aeiObjects.deleteTask(t);
+					} else {
+						find = true;
+					}
 				}
 			}
 			/* 当前处理人没有待办 */
@@ -437,6 +446,7 @@ public class ManualProcessor extends AbstractManualProcessor {
 			}
 		}
 		return passThrough;
+
 	}
 
 	/* 所有有效的已办,去除 reset,retract,appendTask */
@@ -545,34 +555,12 @@ public class ManualProcessor extends AbstractManualProcessor {
 				.getCompiledScript(aeiObjects.getWork().getApplication(), manual, Business.EVENT_MANUALTASKEXPIRE)
 				.eval(scriptContext);
 		WorkTime wt = new WorkTime();
-		if (NumberUtils.isCreatable(objectValue.toString())){
+		if (NumberUtils.isCreatable(objectValue.toString())) {
 			task.setExpireTime(wt.forwardMinutes(new Date(), NumberUtils.toInt(ScriptFactory.asString(objectValue))));
 		} else {
 			task.setExpireTime(null);
 		}
 
-//		if (NumberTools.greaterThan(expire.getWorkHour(), 0)) {
-//			Integer m = 0;
-//			m += expire.getWorkHour() * 60;
-//			if (m > 0) {
-//			} else {
-//				task.setExpireTime(null);
-//			}
-//		} else if (NumberTools.greaterThan(expire.getHour(), 0)) {
-//			Integer m = 0;
-//			m += expire.getHour() * 60;
-//			if (m > 0) {
-//				Calendar cl = Calendar.getInstance();
-//				cl.add(Calendar.MINUTE, m);
-//				task.setExpireTime(cl.getTime());
-//			} else {
-//				task.setExpireTime(null);
-//			}
-//		} else if (null != expire.getDate()) {
-//			task.setExpireTime(expire.getDate());
-//		} else {
-//			task.setExpireTime(null);
-//		}
 	}
 
 	private Task createTask(AeiObjects aeiObjects, Manual manual, String identity) throws Exception {
@@ -599,8 +587,8 @@ public class ManualProcessor extends AbstractManualProcessor {
 			empowerTaskCompleted.setUnit(fromUnit);
 			empowerTaskCompleted.setPerson(fromPerson);
 			empowerTaskCompleted.setEmpowerToIdentity(identity);
-			Read empowerRead = new Read(aeiObjects.getWork(), fromIdentity, fromUnit, fromPerson);
 			aeiObjects.createTaskCompleted(empowerTaskCompleted);
+			Read empowerRead = new Read(aeiObjects.getWork(), fromIdentity, fromUnit, fromPerson);
 			aeiObjects.createRead(empowerRead);
 		}
 		return task;

+ 8 - 3
o2server/x_processplatform_service_processing/src/main/java/com/x/processplatform/service/processing/processor/manual/TranslateTaskIdentityTools.java

@@ -5,6 +5,8 @@ import java.util.Iterator;
 import java.util.List;
 import java.util.Objects;
 
+import javax.script.CompiledScript;
+
 import org.apache.commons.beanutils.PropertyUtils;
 import org.apache.commons.lang3.BooleanUtils;
 import org.apache.commons.lang3.StringUtils;
@@ -21,6 +23,7 @@ import com.x.base.core.project.script.ScriptFactory;
 import com.x.base.core.project.tools.ListTools;
 import com.x.processplatform.core.entity.content.Data;
 import com.x.processplatform.core.entity.element.Manual;
+import com.x.processplatform.core.entity.element.Script;
 import com.x.processplatform.service.processing.Business;
 import com.x.processplatform.service.processing.processor.AeiObjects;
 
@@ -78,9 +81,11 @@ public class TranslateTaskIdentityTools {
 			while (iterator.hasNext()) {
 				JsonObject o = iterator.next().getAsJsonObject();
 				String name = o.get("name").getAsString();
-				Object objectValue = ScriptFactory.scriptEngine
-						.eval(ScriptFactory.functionalization(o.get("code").getAsString()), aeiObjects.scriptContext());
-				List<String> ds = ScriptFactory.extrectDistinguishedNameList(objectValue);
+				String code = o.get("code").getAsString();
+				CompiledScript compiledScript = aeiObjects.business().element()
+						.getCompiledScript(aeiObjects.getActivity(), Business.EVENT_TASKDUTY, name, code);
+				Object objectValue = compiledScript.eval(aeiObjects.scriptContext());
+				List<String> ds = ScriptFactory.asDistinguishedNameList(objectValue);
 				if (ListTools.isNotEmpty(ds)) {
 					for (String str : ds) {
 						List<String> os = aeiObjects.business().organization().unitDuty()

+ 1 - 1
o2server/x_processplatform_service_processing/src/main/java/com/x/processplatform/service/processing/processor/split/SplitProcessor.java

@@ -90,7 +90,7 @@ public class SplitProcessor extends AbstractSplitProcessor {
 		List<String> list = new ArrayList<>();
 		if ((StringUtils.isNotEmpty(split.getScript())) || (StringUtils.isNotEmpty(split.getScriptText()))) {
 			Object objectValue = aeiObjects.business().element().getCompiledScript(aeiObjects.getWork().getApplication(), split, Business.EVENT_SPLIT).eval(aeiObjects.scriptContext());	
-			List<String> os =ScriptFactory.extrectDistinguishedNameList(objectValue);
+			List<String> os =ScriptFactory.asDistinguishedNameList(objectValue);
 			if (ListTools.isNotEmpty(os)) {
 				list.addAll(os);
 			}