roo00 %!s(int64=6) %!d(string=hai) anos
pai
achega
8623eed26c
Modificáronse 44 ficheiros con 300 adicións e 175 borrados
  1. 1 1
      o2server/x_component_assemble_control/src/main/java/com/x/component/assemble/control/jaxrs/component/ActionBase.java
  2. 11 7
      o2server/x_component_assemble_control/src/main/java/com/x/component/assemble/control/jaxrs/component/ActionListAll.java
  3. 2 2
      o2server/x_console/src/main/java/com/x/server/console/CommandFactory.java
  4. 1 1
      o2server/x_console/src/main/java/com/x/server/console/action/ActionUpdateFile.java
  5. 19 0
      o2server/x_console/src/test/java/com/x/server/console/test/TestClient.java
  6. 8 0
      o2server/x_console/src/test/java/com/x/server/console/test/package-info.java
  7. 3 3
      o2server/x_file_assemble_control/src/main/java/com/x/file/assemble/control/jaxrs/attachment/ActionGetBase64.java
  8. 3 3
      o2server/x_file_assemble_control/src/main/java/com/x/file/assemble/control/jaxrs/attachment/ActionGetImageScaleBase64.java
  9. 3 3
      o2server/x_file_assemble_control/src/main/java/com/x/file/assemble/control/jaxrs/attachment/ActionGetImageWidthHeightBase64.java
  10. 1 1
      o2server/x_file_assemble_control/src/main/java/com/x/file/assemble/control/jaxrs/file/ActionCopy.java
  11. 1 1
      o2server/x_file_assemble_control/src/main/java/com/x/file/assemble/control/jaxrs/file/ActionGet.java
  12. 16 0
      o2server/x_mind_assemble_control/src/main/java/com/x/mind/assemble/control/jaxrs/exception/ExceptionCreatorHasNoIdentity.java
  13. 1 1
      o2server/x_mind_assemble_control/src/main/java/com/x/mind/assemble/control/jaxrs/exception/ExceptionEntityCanNotDelete.java
  14. 11 1
      o2server/x_mind_assemble_control/src/main/java/com/x/mind/assemble/control/jaxrs/folder/ActionFolderSave.java
  15. 11 1
      o2server/x_mind_assemble_control/src/main/java/com/x/mind/assemble/control/jaxrs/mind/ActionMindSave.java
  16. 0 7
      o2server/x_organization_assemble_control/src/main/java/com/x/organization/assemble/control/jaxrs/inputperson/ActionInput.java
  17. 5 4
      o2server/x_organization_assemble_control/src/main/java/com/x/organization/assemble/control/jaxrs/person/BaseAction.java
  18. 1 1
      o2server/x_organization_assemble_control/src/main/java/com/x/organization/assemble/control/jaxrs/unit/ActionListLike.java
  19. 1 1
      o2server/x_organization_assemble_control/src/main/java/com/x/organization/assemble/control/jaxrs/unit/ActionListLikePinyin.java
  20. 1 1
      o2server/x_organization_assemble_express/src/main/java/com/x/organization/assemble/express/jaxrs/personattribute/ActionAppendWithPersonWithName.java
  21. 1 1
      o2server/x_organization_assemble_express/src/main/java/com/x/organization/assemble/express/jaxrs/personattribute/ActionSetWithPersonWithName.java
  22. 1 1
      o2server/x_portal_assemble_designer/src/main/java/com/x/portal/assemble/designer/Business.java
  23. 4 4
      o2server/x_portal_assemble_designer/src/main/java/com/x/portal/assemble/designer/factory/TemplatePageFactory.java
  24. 2 2
      o2server/x_portal_assemble_surface/src/main/java/com/x/portal/assemble/surface/factory/PortalFactory.java
  25. 40 35
      o2server/x_processplatform_assemble_surface/src/main/java/com/x/processplatform/assemble/surface/Business.java
  26. 2 2
      o2server/x_processplatform_assemble_surface/src/main/java/com/x/processplatform/assemble/surface/factory/element/ApplicationFactory.java
  27. 1 1
      o2server/x_processplatform_assemble_surface/src/main/java/com/x/processplatform/assemble/surface/factory/element/ProcessFactory.java
  28. 3 3
      o2server/x_processplatform_assemble_surface/src/main/java/com/x/processplatform/assemble/surface/factory/element/QueryStatFactory.java
  29. 3 3
      o2server/x_processplatform_assemble_surface/src/main/java/com/x/processplatform/assemble/surface/factory/element/QueryViewFactory.java
  30. 1 1
      o2server/x_processplatform_assemble_surface/src/main/java/com/x/processplatform/assemble/surface/jaxrs/attachment/ActionEdit.java
  31. 35 18
      o2server/x_processplatform_assemble_surface/src/main/java/com/x/processplatform/assemble/surface/jaxrs/attachment/ActionListWithWorkOrWorkCompleted.java
  32. 1 1
      o2server/x_processplatform_assemble_surface/src/main/java/com/x/processplatform/assemble/surface/jaxrs/attachment/ActionUploadWithWorkCompleted.java
  33. 28 22
      o2server/x_processplatform_assemble_surface/src/main/java/com/x/processplatform/assemble/surface/jaxrs/control/ActionGetWorkOrWorkCompleted.java
  34. 1 1
      o2server/x_processplatform_assemble_surface/src/main/java/com/x/processplatform/assemble/surface/jaxrs/data/ActionUpdateWithWorkCompleted.java
  35. 1 1
      o2server/x_processplatform_assemble_surface/src/main/java/com/x/processplatform/assemble/surface/jaxrs/data/ActionUpdateWithWorkCompletedPath0.java
  36. 1 1
      o2server/x_processplatform_assemble_surface/src/main/java/com/x/processplatform/assemble/surface/jaxrs/data/ActionUpdateWithWorkCompletedPath1.java
  37. 1 1
      o2server/x_processplatform_assemble_surface/src/main/java/com/x/processplatform/assemble/surface/jaxrs/data/ActionUpdateWithWorkCompletedPath2.java
  38. 1 1
      o2server/x_processplatform_assemble_surface/src/main/java/com/x/processplatform/assemble/surface/jaxrs/data/ActionUpdateWithWorkCompletedPath3.java
  39. 1 1
      o2server/x_processplatform_assemble_surface/src/main/java/com/x/processplatform/assemble/surface/jaxrs/data/ActionUpdateWithWorkCompletedPath4.java
  40. 1 1
      o2server/x_processplatform_assemble_surface/src/main/java/com/x/processplatform/assemble/surface/jaxrs/data/ActionUpdateWithWorkCompletedPath5.java
  41. 1 1
      o2server/x_processplatform_assemble_surface/src/main/java/com/x/processplatform/assemble/surface/jaxrs/data/ActionUpdateWithWorkCompletedPath6.java
  42. 1 1
      o2server/x_processplatform_assemble_surface/src/main/java/com/x/processplatform/assemble/surface/jaxrs/data/ActionUpdateWithWorkCompletedPath7.java
  43. 34 15
      o2server/x_processplatform_assemble_surface/src/main/java/com/x/processplatform/assemble/surface/jaxrs/form/ActionGetWithWorkOrWorkCompleted.java
  44. 35 18
      o2server/x_processplatform_assemble_surface/src/main/java/com/x/processplatform/assemble/surface/jaxrs/form/ActionGetWithWorkOrWorkCompletedMobile.java

+ 1 - 1
o2server/x_component_assemble_control/src/main/java/com/x/component/assemble/control/jaxrs/component/ActionBase.java

@@ -30,7 +30,7 @@ class ActionBase extends StandardJaxrsAction {
 
 	List<String> DEFAULT_COMPONENT_LIST = ListTools.toList(COMPONENT_FILE, COMPONENT_NOTE, COMPONENT_MEETING,
 			COMPONENT_EXECUTION, COMPONENT_ATTENDANCE, COMPONENT_FORUM, COMPONENT_HOTARTICLE, COMPONENT_EXEMANAGER,
-			COMPONENT_ONLINEMEETING, COMPONENT_MINDER, COMPONENT_CALENDAR, COMPONENT_ANN);
+			COMPONENT_ONLINEMEETING, COMPONENT_ANN, COMPONENT_MINDER, COMPONENT_CALENDAR);
 
 	// {
 	// "name": "File",

+ 11 - 7
o2server/x_component_assemble_control/src/main/java/com/x/component/assemble/control/jaxrs/component/ActionListAll.java

@@ -35,14 +35,18 @@ class ActionListAll extends ActionBase {
 				List<Component> os = emc.listAll(Component.class);
 				if (os.isEmpty()) {
 					/* 一个模块都没有新建默认 */
-					emc.beginTransaction(Component.class);
-					for (String name : DEFAULT_COMPONENT_LIST) {
-						Component o = this.createComponent(name);
-						emc.persist(o, CheckPersistType.all);
-						os.add(o);
+					synchronized (ActionListAll.class) {
+						if (emc.listAll(Component.class).isEmpty()) {
+							emc.beginTransaction(Component.class);
+							for (String name : DEFAULT_COMPONENT_LIST) {
+								Component o = this.createComponent(name);
+								emc.persist(o, CheckPersistType.all);
+								os.add(o);
+							}
+							emc.commit();
+							ApplicationCache.notify(Component.class);
+						}
 					}
-					emc.commit();
-					ApplicationCache.notify(Component.class);
 				}
 				wos = Wo.copier.copy(os);
 				wos = wos.stream().sorted(

A diferenza do arquivo foi suprimida porque é demasiado grande
+ 2 - 2
o2server/x_console/src/main/java/com/x/server/console/CommandFactory.java


+ 1 - 1
o2server/x_console/src/main/java/com/x/server/console/action/ActionUpdateFile.java

@@ -69,7 +69,7 @@ public class ActionUpdateFile extends ActionUpdate {
 		files.add(new File(Config.base(), "console.jar"));
 		files.add(new File(Config.base(), "index.html"));
 		files.add(new File(Config.base(), "version.o2"));
-		FileFilter fileFilter = new RegexFileFilter("^(start_|stop_|console_)(aix|windows|linux|macos).(sh|bat)$");
+		FileFilter fileFilter = new RegexFileFilter("^(start_|stop_|console_|service_)(aix|windows|linux|macos).(sh|bat)$");
 		for (File _f : new File(Config.base()).listFiles(fileFilter)) {
 			files.add(_f);
 		}

+ 19 - 0
o2server/x_console/src/test/java/com/x/server/console/test/TestClient.java

@@ -0,0 +1,19 @@
+package com.x.server.console.test;
+
+import java.io.File;
+import java.io.IOException;
+
+import org.apache.commons.codec.binary.Base64;
+import org.apache.commons.io.FileUtils;
+import org.junit.Test;
+
+import com.x.server.console.CommandFactory;
+
+public class TestClient {
+	
+	@Test
+	public void test1() throws Exception {
+		FileUtils.writeByteArrayToFile(new File("d:/111.png"),Base64.decodeBase64(CommandFactory.DEFAULT_STARTIMAGE));
+	}
+
+}

+ 8 - 0
o2server/x_console/src/test/java/com/x/server/console/test/package-info.java

@@ -0,0 +1,8 @@
+/**
+ * 
+ */
+/**
+ * @author zhour
+ *
+ */
+package com.x.server.console.test;

+ 3 - 3
o2server/x_file_assemble_control/src/main/java/com/x/file/assemble/control/jaxrs/attachment/ActionGetBase64.java

@@ -20,9 +20,9 @@ class ActionGetBase64 extends BaseAction {
 			ActionResult<Wo> result = new ActionResult<>();
 			Attachment attachment = emc.find(id, Attachment.class, ExceptionWhen.not_found);
 			/* 判断文件的当前用户是否是管理员或者文件创建者 或者当前用户在分享或者共同编辑中 */
-			if (effectivePerson.isNotManager() && effectivePerson.isNotUser(attachment.getPerson())
-					&& effectivePerson.isNotUser(attachment.getShareList())
-					&& effectivePerson.isNotUser(attachment.getEditorList())) {
+			if (effectivePerson.isNotManager() && effectivePerson.isNotPerson(attachment.getPerson())
+					&& effectivePerson.isNotPerson(attachment.getShareList())
+					&& effectivePerson.isNotPerson(attachment.getEditorList())) {
 				throw new Exception("person{name:" + effectivePerson.getDistinguishedName() + "} access attachment{id:"
 						+ id + "} denied.");
 			}

+ 3 - 3
o2server/x_file_assemble_control/src/main/java/com/x/file/assemble/control/jaxrs/attachment/ActionGetImageScaleBase64.java

@@ -27,9 +27,9 @@ class ActionGetImageScaleBase64 extends BaseAction {
 			ActionResult<Wo> result = new ActionResult<>();
 			Attachment attachment = emc.find(id, Attachment.class, ExceptionWhen.not_found);
 			/* 判断文件的当前用户是否是管理员或者文件创建者 或者当前用户在分享或者共同编辑中 */
-			if (effectivePerson.isNotManager() && effectivePerson.isNotUser(attachment.getPerson())
-					&& effectivePerson.isNotUser(attachment.getShareList())
-					&& effectivePerson.isNotUser(attachment.getEditorList())) {
+			if (effectivePerson.isNotManager() && effectivePerson.isNotPerson(attachment.getPerson())
+					&& effectivePerson.isNotPerson(attachment.getShareList())
+					&& effectivePerson.isNotPerson(attachment.getEditorList())) {
 				throw new Exception("person{name:" + effectivePerson.getDistinguishedName() + "} access attachment{id:"
 						+ id + "} denied.");
 			}

+ 3 - 3
o2server/x_file_assemble_control/src/main/java/com/x/file/assemble/control/jaxrs/attachment/ActionGetImageWidthHeightBase64.java

@@ -29,9 +29,9 @@ class ActionGetImageWidthHeightBase64 extends BaseAction {
 			ActionResult<Wo> result = new ActionResult<>();
 			Attachment attachment = emc.find(id, Attachment.class, ExceptionWhen.not_found);
 			/* 判断文件的当前用户是否是管理员或者文件创建者 或者当前用户在分享或者共同编辑中 */
-			if (effectivePerson.isNotManager() && effectivePerson.isNotUser(attachment.getPerson())
-					&& effectivePerson.isNotUser(attachment.getShareList())
-					&& effectivePerson.isNotUser(attachment.getEditorList())) {
+			if (effectivePerson.isNotManager() && effectivePerson.isNotPerson(attachment.getPerson())
+					&& effectivePerson.isNotPerson(attachment.getShareList())
+					&& effectivePerson.isNotPerson(attachment.getEditorList())) {
 				throw new Exception("person{name:" + effectivePerson.getDistinguishedName() + "} access attachment{id:"
 						+ id + "} denied.");
 			}

+ 1 - 1
o2server/x_file_assemble_control/src/main/java/com/x/file/assemble/control/jaxrs/file/ActionCopy.java

@@ -43,7 +43,7 @@ class ActionCopy extends BaseAction {
 			if (null == attachment) {
 				throw new ExceptionAttachmentNotExisted(attachmentId);
 			}
-			if (effectivePerson.isNotManager() && effectivePerson.isNotUser(attachment.getPerson())) {
+			if (effectivePerson.isNotManager() && effectivePerson.isNotPerson(attachment.getPerson())) {
 				throw new ExceptionAttachmentAccessDenied(effectivePerson.getDistinguishedName(), attachment.getName(),
 						attachment.getId());
 			}

+ 1 - 1
o2server/x_file_assemble_control/src/main/java/com/x/file/assemble/control/jaxrs/file/ActionGet.java

@@ -18,7 +18,7 @@ class ActionGet extends BaseAction {
 			if (null == file) {
 				throw new ExceptionFileNotExisted(id);
 			}
-			if (effectivePerson.isNotManager() && effectivePerson.isNotUser(file.getPerson())) {
+			if (effectivePerson.isNotManager() && effectivePerson.isNotPerson(file.getPerson())) {
 				throw new ExceptionFileAccessDenied(effectivePerson.getDistinguishedName(), file.getName(),
 						file.getId());
 			}

+ 16 - 0
o2server/x_mind_assemble_control/src/main/java/com/x/mind/assemble/control/jaxrs/exception/ExceptionCreatorHasNoIdentity.java

@@ -0,0 +1,16 @@
+package com.x.mind.assemble.control.jaxrs.exception;
+
+import com.x.base.core.project.exception.PromptException;
+
+public class ExceptionCreatorHasNoIdentity extends PromptException {
+
+	private static final long serialVersionUID = 1859164370743532895L;
+
+	public ExceptionCreatorHasNoIdentity( String message ) {
+		super("脑图信息删除时发生异常!MESSAGE:" + message );
+	}
+	
+	public ExceptionCreatorHasNoIdentity( Throwable e, String message ) {
+		super("脑图信息删除时发生异常!MESSAGE:" + message, e );
+	}
+}

+ 1 - 1
o2server/x_mind_assemble_control/src/main/java/com/x/mind/assemble/control/jaxrs/exception/ExceptionEntityCanNotDelete.java

@@ -7,6 +7,6 @@ public class ExceptionEntityCanNotDelete extends PromptException {
 	private static final long serialVersionUID = 1859164370743532895L;
 
 	public ExceptionEntityCanNotDelete( String message ) {
-		super( "信息无法删除!MESSAGE:" + message  );
+		super( "人员身份不存在!MESSAGE:" + message  );
 	}
 }

+ 11 - 1
o2server/x_mind_assemble_control/src/main/java/com/x/mind/assemble/control/jaxrs/folder/ActionFolderSave.java

@@ -2,6 +2,8 @@ package com.x.mind.assemble.control.jaxrs.folder;
 
 import javax.servlet.http.HttpServletRequest;
 
+import org.apache.commons.lang3.StringUtils;
+
 import com.google.gson.JsonElement;
 import com.x.base.core.project.bean.WrapCopier;
 import com.x.base.core.project.bean.WrapCopierFactory;
@@ -11,6 +13,7 @@ import com.x.base.core.project.http.EffectivePerson;
 import com.x.base.core.project.jaxrs.WoId;
 import com.x.base.core.project.logger.Logger;
 import com.x.base.core.project.logger.LoggerFactory;
+import com.x.mind.assemble.control.jaxrs.exception.ExceptionEntityCanNotDelete;
 import com.x.mind.assemble.control.jaxrs.exception.ExceptionFolderPersist;
 import com.x.mind.assemble.control.jaxrs.exception.ExceptionFolderWrapInConvert;
 import com.x.mind.entity.MindFolderInfo;
@@ -30,6 +33,13 @@ public class ActionFolderSave extends BaseAction {
 		Wo wo = new Wo();
 		MindFolderInfo mindFolderInfo = null;
 		Boolean check = true;
+		String creatorUnit = userManagerService.getUnitNameWithPerson(effectivePerson.getDistinguishedName());
+		
+		if( StringUtils.isEmpty( creatorUnit )) {
+			check = false;
+			Exception exception = new ExceptionEntityCanNotDelete("请为创建者分配组织后再进行此操作!");
+			result.error(exception);
+		}
 		
 		if( check ){
 			try {
@@ -49,7 +59,7 @@ public class ActionFolderSave extends BaseAction {
 		if( check ){
 			try {
 				wi.setCreator(effectivePerson.getDistinguishedName());
-				wi.setCreatorUnit(userManagerService.getUnitNameWithPerson(effectivePerson.getDistinguishedName()));
+				wi.setCreatorUnit( creatorUnit );
 				mindFolderInfo = mindFolderInfoService.save( Wi.copier.copy(wi) );
 				if( mindFolderInfo != null ) {
 					wo.setId(mindFolderInfo.getId());

+ 11 - 1
o2server/x_mind_assemble_control/src/main/java/com/x/mind/assemble/control/jaxrs/mind/ActionMindSave.java

@@ -5,6 +5,8 @@ import java.util.List;
 
 import javax.servlet.http.HttpServletRequest;
 
+import org.apache.commons.lang3.StringUtils;
+
 import com.google.gson.JsonElement;
 import com.x.base.core.project.bean.WrapCopier;
 import com.x.base.core.project.bean.WrapCopierFactory;
@@ -14,6 +16,7 @@ import com.x.base.core.project.http.EffectivePerson;
 import com.x.base.core.project.jaxrs.WoId;
 import com.x.base.core.project.logger.Logger;
 import com.x.base.core.project.logger.LoggerFactory;
+import com.x.mind.assemble.control.jaxrs.exception.ExceptionEntityCanNotDelete;
 import com.x.mind.assemble.control.jaxrs.exception.ExceptionFolderWrapInConvert;
 import com.x.mind.assemble.control.jaxrs.exception.ExceptionMindPersist;
 import com.x.mind.entity.MindBaseInfo;
@@ -33,6 +36,13 @@ public class ActionMindSave extends BaseAction {
 		Wo wo = new Wo();
 		MindBaseInfo mindBaseInfo = null;
 		Boolean check = true;
+		String creatorUnit = userManagerService.getUnitNameWithPerson(effectivePerson.getDistinguishedName());
+		
+		if( StringUtils.isEmpty( creatorUnit )) {
+			check = false;
+			Exception exception = new ExceptionEntityCanNotDelete("请为创建者分配组织后再进行此操作!");
+			result.error(exception);
+		}
 		
 		if( check ){
 			try {
@@ -49,7 +59,7 @@ public class ActionMindSave extends BaseAction {
 			editorList.add( effectivePerson.getDistinguishedName());
 			try {
 				wi.setCreator(effectivePerson.getDistinguishedName());
-				wi.setCreatorUnit(userManagerService.getUnitNameWithPerson(effectivePerson.getDistinguishedName()));
+				wi.setCreatorUnit( creatorUnit );
 				wi.setEditorList(editorList);
 				mindBaseInfo = mindInfoService.save( Wi.copier.copy(wi),  wi.getContent(), 50 );
 				if( mindBaseInfo != null ) {

+ 0 - 7
o2server/x_organization_assemble_control/src/main/java/com/x/organization/assemble/control/jaxrs/inputperson/ActionInput.java

@@ -92,13 +92,6 @@ class ActionInput extends BaseAction {
 			ScriptingEngine engine = Scripting.getEngine();
 			for (PersonItem o : people) {
 				engine.binding("person", o);
-				System.out.println("!!!!!!!!!!!!!!!!!");
-				System.out.println(engine);
-				System.out.println("!!!!!!!!!!!!!!!!!");
-				System.out.println(eval);
-				System.out.println("!!!!!!!!!!!!!!!!!");
-				System.out.println(o);
-				System.out.println("!!!!!!!!!!!!!!!!!");
 				String pass = engine.eval(eval).toString();
 				o.setPassword(pass);
 			}

+ 5 - 4
o2server/x_organization_assemble_control/src/main/java/com/x/organization/assemble/control/jaxrs/person/BaseAction.java

@@ -21,6 +21,8 @@ import com.x.base.core.project.gson.GsonPropertyObject;
 import com.x.base.core.project.http.EffectivePerson;
 import com.x.base.core.project.jaxrs.StandardJaxrsAction;
 import com.x.base.core.project.organization.OrganizationDefinition;
+import com.x.base.core.project.scripting.Scripting;
+import com.x.base.core.project.scripting.ScriptingEngine;
 import com.x.base.core.project.tools.ListTools;
 import com.x.base.core.project.tools.StringTools;
 import com.x.organization.assemble.control.Business;
@@ -183,10 +185,9 @@ abstract class BaseAction extends StandardJaxrsAction {
 		Matcher matcher = pattern.matcher(str);
 		if (matcher.matches()) {
 			String eval = matcher.group(1);
-			ScriptEngineManager factory = new ScriptEngineManager();
-			ScriptEngine engine = factory.getEngineByName("JavaScript");
-			engine.put("person", person);
-			String pass = engine.eval(eval).toString();
+			ScriptingEngine engine = Scripting.getEngine();
+			engine.binding("person", person);
+			String pass = engine.evalAsString(eval);
 			return pass;
 		} else {
 			return str;

+ 1 - 1
o2server/x_organization_assemble_control/src/main/java/com/x/organization/assemble/control/jaxrs/unit/ActionListLike.java

@@ -134,7 +134,7 @@ class ActionListLike extends BaseAction {
 		if (StringUtils.isEmpty(wi.getKey())) {
 			return wos;
 		}
-		List<String> unitIds = business.expendUnitToUnit(wi.getUnitList());
+		List<String> unitIds = business.expendUnitToUnit(ListTools.trim(wi.getUnitList(), true, true));
 		/** 去掉指定范围本身,仅包含下级 */
 		unitIds.removeAll(ListTools.extractProperty(business.unit().pick(wi.getUnitList()), JpaObject.id_FIELDNAME,
 				String.class, true, true));

+ 1 - 1
o2server/x_organization_assemble_control/src/main/java/com/x/organization/assemble/control/jaxrs/unit/ActionListLikePinyin.java

@@ -134,7 +134,7 @@ class ActionListLikePinyin extends BaseAction {
 		if (StringUtils.isEmpty(wi.getKey())) {
 			return wos;
 		}
-		List<String> unitIds = business.expendUnitToUnit(wi.getUnitList());
+		List<String> unitIds = business.expendUnitToUnit(ListTools.trim(wi.getUnitList(), true, true));
 		/** 去掉指定范围本身,仅包含下级 */
 		unitIds.removeAll(ListTools.extractProperty(business.unit().pick(wi.getUnitList()), JpaObject.id_FIELDNAME,
 				String.class, true, true));

+ 1 - 1
o2server/x_organization_assemble_express/src/main/java/com/x/organization/assemble/express/jaxrs/personattribute/ActionAppendWithPersonWithName.java

@@ -45,7 +45,7 @@ class ActionAppendWithPersonWithName extends BaseAction {
 				logger.warn("user {} append personAttribute {} fail, person {} not exist.",
 						effectivePerson.getDistinguishedName(), StringUtils.join(wi.getAttributeList(), ","),
 						wi.getPerson());
-			} else if ((!effectivePerson.isManager()) && effectivePerson.isNotUser(person.getDistinguishedName())) {
+			} else if ((!effectivePerson.isManager()) && effectivePerson.isNotPerson(person.getDistinguishedName())) {
 				wo.setValue(false);
 				logger.warn("user {} append personAttribute person: {}, value: {} fail, permission denied.",
 						effectivePerson.getDistinguishedName(), wi.getPerson(),

+ 1 - 1
o2server/x_organization_assemble_express/src/main/java/com/x/organization/assemble/express/jaxrs/personattribute/ActionSetWithPersonWithName.java

@@ -45,7 +45,7 @@ class ActionSetWithPersonWithName extends BaseAction {
 				logger.warn("user {} set personAttribute {} fail, person {} not exist.",
 						effectivePerson.getDistinguishedName(), StringUtils.join(wi.getAttributeList(), ","),
 						wi.getPerson());
-			} else if ((!effectivePerson.isManager()) && effectivePerson.isNotUser(person.getDistinguishedName())) {
+			} else if ((!effectivePerson.isManager()) && effectivePerson.isNotPerson(person.getDistinguishedName())) {
 				wo.setValue(false);
 				logger.warn("user {} set personAttribute person: {}, value: {} fail, permission denied.",
 						effectivePerson.getDistinguishedName(), wi.getPerson(),

+ 1 - 1
o2server/x_portal_assemble_designer/src/main/java/com/x/portal/assemble/designer/Business.java

@@ -102,7 +102,7 @@ public class Business {
 			result = true;
 		}
 		if (!result && (null != o)) {
-			if (effectivePerson.isUser(o.getControllerList()) || effectivePerson.isUser(o.getCreatorPerson())) {
+			if (effectivePerson.isPerson(o.getControllerList()) || effectivePerson.isPerson(o.getCreatorPerson())) {
 				result = true;
 			}
 		}

+ 4 - 4
o2server/x_portal_assemble_designer/src/main/java/com/x/portal/assemble/designer/factory/TemplatePageFactory.java

@@ -65,8 +65,8 @@ public class TemplatePageFactory extends AbstractFactory {
 		if (effectivePerson.isNotManager()
 				&& (!this.business().organization().person().hasRole(effectivePerson,
 						OrganizationDefinition.PortalManager))
-				&& (effectivePerson.isNotUser(o.getControllerList()))
-				&& effectivePerson.isNotUser(o.getCreatorPerson())) {
+				&& (effectivePerson.isNotPerson(o.getControllerList()))
+				&& effectivePerson.isNotPerson(o.getCreatorPerson())) {
 			return false;
 		}
 		return true;
@@ -111,10 +111,10 @@ public class TemplatePageFactory extends AbstractFactory {
 				OrganizationDefinition.PortalManager))) {
 			return true;
 		}
-		if (effectivePerson.isUser(o.getControllerList())) {
+		if (effectivePerson.isPerson(o.getControllerList())) {
 			return true;
 		}
-		if (effectivePerson.isUser(o.getCreatorPerson())) {
+		if (effectivePerson.isPerson(o.getCreatorPerson())) {
 			return true;
 		}
 

+ 2 - 2
o2server/x_portal_assemble_surface/src/main/java/com/x/portal/assemble/surface/factory/PortalFactory.java

@@ -56,10 +56,10 @@ public class PortalFactory extends AbstractFactory {
 				OrganizationDefinition.PortalManager)) {
 			return true;
 		}
-		if (effectivePerson.isUser(portal.getCreatorPerson())) {
+		if (effectivePerson.isPerson(portal.getCreatorPerson())) {
 			return true;
 		}
-		if (effectivePerson.isUser(portal.getControllerList())) {
+		if (effectivePerson.isPerson(portal.getControllerList())) {
 			return true;
 		}
 		if (ListTools.isEmpty(portal.getAvailableIdentityList(), portal.getAvailableUnitList())) {

+ 40 - 35
o2server/x_processplatform_assemble_surface/src/main/java/com/x/processplatform/assemble/surface/Business.java

@@ -7,6 +7,7 @@ import org.apache.commons.lang3.BooleanUtils;
 import org.apache.commons.lang3.StringUtils;
 
 import com.x.base.core.container.EntityManagerContainer;
+import com.x.base.core.project.exception.PromptException;
 import com.x.base.core.project.http.EffectivePerson;
 import com.x.base.core.project.organization.OrganizationDefinition;
 import com.x.base.core.project.tools.ListTools;
@@ -467,7 +468,7 @@ public class Business {
 	public Boolean canManageApplication(EffectivePerson effectivePerson, Application application) throws Exception {
 		if (effectivePerson.isManager()) {
 			return true;
-		} else if ((null != application) && effectivePerson.isUser(application.getControllerList())) {
+		} else if ((null != application) && effectivePerson.isPerson(application.getControllerList())) {
 			return true;
 		} else {
 			if (organization().person().hasRole(effectivePerson, OrganizationDefinition.Manager,
@@ -489,9 +490,9 @@ public class Business {
 			Process process) throws Exception {
 		if (effectivePerson.isManager()) {
 			return true;
-		} else if ((null != process) && effectivePerson.isUser(process.getControllerList())) {
+		} else if ((null != process) && effectivePerson.isPerson(process.getControllerList())) {
 			return true;
-		} else if ((null != application) && effectivePerson.isUser(application.getControllerList())) {
+		} else if ((null != application) && effectivePerson.isPerson(application.getControllerList())) {
 			return true;
 		} else {
 			if (organization().person().hasRole(effectivePerson, OrganizationDefinition.Manager,
@@ -521,7 +522,7 @@ public class Business {
 		/* 设置 allowReset */
 		if (this.canManageApplicationOrProcess(effectivePerson, application, process)) {
 			control.setAllowReset(true);
-		} else if (effectivePerson.isUser(task.getPerson())) {
+		} else if (effectivePerson.isPerson(task.getPerson())) {
 			if (Objects.equals(activity.getActivityType(), ActivityType.manual)
 					&& BooleanUtils.isTrue(((Manual) activity).getAllowReset()) && null != task) {
 				control.setAllowReset(true);
@@ -562,7 +563,7 @@ public class Business {
 		/* 设置allowProcessing */
 		if (this.canManageApplicationOrProcess(effectivePerson, application, process)) {
 			control.setAllowProcessing(true);
-		} else if (effectivePerson.isUser(read.getPerson())) {
+		} else if (effectivePerson.isPerson(read.getPerson())) {
 			control.setAllowProcessing(true);
 		}
 		/* 设置 allowReadReset */
@@ -653,7 +654,7 @@ public class Business {
 		if ((null != task) || (null != read) || (taskCompletedCount > 0) || (readCompletedCount > 0)
 				|| (reviewCount > 0)) {
 			control.setAllowVisit(true);
-		} else if (effectivePerson.isUser(work.getCreatorPerson())) {
+		} else if (effectivePerson.isPerson(work.getCreatorPerson())) {
 			control.setAllowVisit(true);
 		} else if (this.canManageApplicationOrProcess(effectivePerson, application, process)) {
 			control.setAllowVisit(true);
@@ -705,10 +706,10 @@ public class Business {
 			control.setAllowReroute(true);
 		} else if (null != activity && BooleanUtils.isTrue(activity.getAllowReroute())) {
 			/** 如果活动设置了可以调度 */
-			if ((null != process) && effectivePerson.isUser(process.getControllerList())) {
+			if ((null != process) && effectivePerson.isPerson(process.getControllerList())) {
 				/** 如果是流程的管理员那么可以调度 */
 				control.setAllowReroute(true);
-			} else if ((null != application) && effectivePerson.isUser(application.getControllerList())) {
+			} else if ((null != application) && effectivePerson.isPerson(application.getControllerList())) {
 				/** 如果是应用的管理员那么可以调度 */
 				control.setAllowReroute(true);
 			}
@@ -739,7 +740,7 @@ public class Business {
 		/* 设置 allowViist */
 		if (this.canManageApplicationOrProcess(effectivePerson, application, process)) {
 			control.setAllowVisit(true);
-		} else if (effectivePerson.isUser(workCompleted.getCreatorPerson())) {
+		} else if (effectivePerson.isPerson(workCompleted.getCreatorPerson())) {
 			control.setAllowVisit(true);
 		} else if (taskCompleted().countWithPersonWithWorkCompleted(effectivePerson.getDistinguishedName(),
 				workCompleted) > 0) {
@@ -768,7 +769,7 @@ public class Business {
 		if (null == task) {
 			return false;
 		}
-		if (effectivePerson.isUser(task.getPerson())) {
+		if (effectivePerson.isPerson(task.getPerson())) {
 			return true;
 		}
 		if (effectivePerson.isManager()) {
@@ -780,13 +781,13 @@ public class Business {
 		}
 		Application application = this.application().pick(task.getApplication());
 		if (null != application) {
-			if (effectivePerson.isUser(application.getControllerList())) {
+			if (effectivePerson.isPerson(application.getControllerList())) {
 				return true;
 			}
 		}
 		Process process = this.process().pick(task.getProcess());
 		if (null != process) {
-			if (effectivePerson.isUser(process.getControllerList())) {
+			if (effectivePerson.isPerson(process.getControllerList())) {
 				return true;
 			}
 		}
@@ -797,7 +798,7 @@ public class Business {
 		if (null == taskCompleted) {
 			return false;
 		}
-		if (effectivePerson.isUser(taskCompleted.getPerson())) {
+		if (effectivePerson.isPerson(taskCompleted.getPerson())) {
 			return true;
 		}
 		if (effectivePerson.isManager()) {
@@ -809,13 +810,13 @@ public class Business {
 		}
 		Application application = this.application().pick(taskCompleted.getApplication());
 		if (null != application) {
-			if (effectivePerson.isUser(application.getControllerList())) {
+			if (effectivePerson.isPerson(application.getControllerList())) {
 				return true;
 			}
 		}
 		Process process = this.process().pick(taskCompleted.getProcess());
 		if (null != process) {
-			if (effectivePerson.isUser(process.getControllerList())) {
+			if (effectivePerson.isPerson(process.getControllerList())) {
 				return true;
 			}
 		}
@@ -826,7 +827,7 @@ public class Business {
 		if (null == read) {
 			return false;
 		}
-		if (effectivePerson.isUser(read.getPerson())) {
+		if (effectivePerson.isPerson(read.getPerson())) {
 			return true;
 		}
 		if (effectivePerson.isManager()) {
@@ -838,13 +839,13 @@ public class Business {
 		}
 		Application application = this.application().pick(read.getApplication());
 		if (null != application) {
-			if (effectivePerson.isUser(application.getControllerList())) {
+			if (effectivePerson.isPerson(application.getControllerList())) {
 				return true;
 			}
 		}
 		Process process = this.process().pick(read.getProcess());
 		if (null != process) {
-			if (effectivePerson.isUser(process.getControllerList())) {
+			if (effectivePerson.isPerson(process.getControllerList())) {
 				return true;
 			}
 		}
@@ -855,7 +856,7 @@ public class Business {
 		if (null == readCompleted) {
 			return false;
 		}
-		if (effectivePerson.isUser(readCompleted.getPerson())) {
+		if (effectivePerson.isPerson(readCompleted.getPerson())) {
 			return true;
 		}
 		if (effectivePerson.isManager()) {
@@ -867,13 +868,13 @@ public class Business {
 		}
 		Application application = this.application().pick(readCompleted.getApplication());
 		if (null != application) {
-			if (effectivePerson.isUser(application.getControllerList())) {
+			if (effectivePerson.isPerson(application.getControllerList())) {
 				return true;
 			}
 		}
 		Process process = this.process().pick(readCompleted.getProcess());
 		if (null != process) {
-			if (effectivePerson.isUser(process.getControllerList())) {
+			if (effectivePerson.isPerson(process.getControllerList())) {
 				return true;
 			}
 		}
@@ -884,7 +885,7 @@ public class Business {
 		if (null == review) {
 			return false;
 		}
-		if (effectivePerson.isUser(review.getPerson())) {
+		if (effectivePerson.isPerson(review.getPerson())) {
 			return true;
 		}
 		if (effectivePerson.isManager()) {
@@ -896,13 +897,13 @@ public class Business {
 		}
 		Application application = this.application().pick(review.getApplication());
 		if (null != application) {
-			if (effectivePerson.isUser(application.getControllerList())) {
+			if (effectivePerson.isPerson(application.getControllerList())) {
 				return true;
 			}
 		}
 		Process process = this.process().pick(review.getProcess());
 		if (null != process) {
-			if (effectivePerson.isUser(process.getControllerList())) {
+			if (effectivePerson.isPerson(process.getControllerList())) {
 				return true;
 			}
 		}
@@ -913,7 +914,7 @@ public class Business {
 		if (null == work) {
 			return false;
 		}
-		if (effectivePerson.isUser(work.getCreatorPerson())) {
+		if (effectivePerson.isPerson(work.getCreatorPerson())) {
 			return true;
 		}
 		if (effectivePerson.isManager()) {
@@ -945,13 +946,13 @@ public class Business {
 		}
 		Application application = this.application().pick(work.getApplication());
 		if (null != application) {
-			if (effectivePerson.isUser(application.getControllerList())) {
+			if (effectivePerson.isPerson(application.getControllerList())) {
 				return true;
 			}
 		}
 		Process process = this.process().pick(work.getProcess());
 		if (null != process) {
-			if (effectivePerson.isUser(process.getControllerList())) {
+			if (effectivePerson.isPerson(process.getControllerList())) {
 				return true;
 			}
 		}
@@ -962,7 +963,7 @@ public class Business {
 		if (null == workCompleted) {
 			return false;
 		}
-		if (effectivePerson.isUser(workCompleted.getCreatorPerson())) {
+		if (effectivePerson.isPerson(workCompleted.getCreatorPerson())) {
 			return true;
 		}
 		if (effectivePerson.isManager()) {
@@ -990,21 +991,21 @@ public class Business {
 		}
 		Application application = this.application().pick(workCompleted.getApplication());
 		if (null != application) {
-			if (effectivePerson.isUser(application.getControllerList())) {
+			if (effectivePerson.isPerson(application.getControllerList())) {
 				return true;
 			}
 		}
 		Process process = this.process().pick(workCompleted.getProcess());
 		if (null != process) {
-			if (effectivePerson.isUser(process.getControllerList())) {
+			if (effectivePerson.isPerson(process.getControllerList())) {
 				return true;
 			}
 		}
 		return false;
 	}
 
-	public boolean readableWithWorkOrWorkCompleted(EffectivePerson effectivePerson, String workOrWorkCompleted)
-			throws Exception {
+	public boolean readableWithWorkOrWorkCompleted(EffectivePerson effectivePerson, String workOrWorkCompleted,
+			PromptException entityException) throws Exception {
 		Work work = emc.fetch(workOrWorkCompleted, Work.class, ListTools.toList(Work.job_FIELDNAME,
 				Work.application_FIELDNAME, Work.process_FIELDNAME, Work.creatorPerson_FIELDNAME));
 		WorkCompleted workCompleted = null;
@@ -1037,9 +1038,13 @@ public class Business {
 			processId = work.getProcess();
 		}
 		if (StringUtils.isEmpty(job)) {
-			return false;
+			if (null != entityException) {
+				throw entityException;
+			} else {
+				return false;
+			}
 		}
-		if (effectivePerson.isUser(creatorPerson)) {
+		if (effectivePerson.isPerson(creatorPerson)) {
 			return true;
 		}
 		if (emc.countEqualAndEqual(TaskCompleted.class, TaskCompleted.person_FIELDNAME,
@@ -1089,7 +1094,7 @@ public class Business {
 			applicationId = works.get(0).getApplication();
 			processId = works.get(0).getProcess();
 		}
-		if (effectivePerson.isUser(creatorPerson)) {
+		if (effectivePerson.isPerson(creatorPerson)) {
 			return true;
 		}
 		if (emc.countEqualAndEqual(TaskCompleted.class, TaskCompleted.person_FIELDNAME,

+ 2 - 2
o2server/x_processplatform_assemble_surface/src/main/java/com/x/processplatform/assemble/surface/factory/element/ApplicationFactory.java

@@ -82,10 +82,10 @@ public class ApplicationFactory extends ElementFactory {
 			return true;
 		}
 		if (null != application) {
-			if (effectivePerson.isUser(application.getControllerList())) {
+			if (effectivePerson.isPerson(application.getControllerList())) {
 				return true;
 			}
-			if (effectivePerson.isUser(application.getCreatorPerson())) {
+			if (effectivePerson.isPerson(application.getCreatorPerson())) {
 				return true;
 			}
 		}

+ 1 - 1
o2server/x_processplatform_assemble_surface/src/main/java/com/x/processplatform/assemble/surface/factory/element/ProcessFactory.java

@@ -178,7 +178,7 @@ public class ProcessFactory extends ElementFactory {
 		for (String str : ids) {
 			Process o = business.process().pick(str);
 			if (null != o) {
-				if (effectivePerson.isUser(o.getControllerList())) {
+				if (effectivePerson.isPerson(o.getControllerList())) {
 					list.add(str);
 				}
 			}

+ 3 - 3
o2server/x_processplatform_assemble_surface/src/main/java/com/x/processplatform/assemble/surface/factory/element/QueryStatFactory.java

@@ -80,16 +80,16 @@ public class QueryStatFactory extends ElementFactory {
 				&& ListTools.isEmpty(queryStat.getAvailablePersonList())) {
 			return true;
 		}
-		if (effectivePerson.isUser(queryStat.getCreatorPerson())) {
+		if (effectivePerson.isPerson(queryStat.getCreatorPerson())) {
 			return true;
 		}
 		if (effectivePerson.isManager()) {
 			return true;
 		}
-		if (effectivePerson.isUser(application.getControllerList())) {
+		if (effectivePerson.isPerson(application.getControllerList())) {
 			return true;
 		}
-		if (effectivePerson.isUser(queryStat.getControllerList())) {
+		if (effectivePerson.isPerson(queryStat.getControllerList())) {
 			return true;
 		}
 		if (ListTools.isNotEmpty(queryStat.getAvailablePersonList())) {

+ 3 - 3
o2server/x_processplatform_assemble_surface/src/main/java/com/x/processplatform/assemble/surface/factory/element/QueryViewFactory.java

@@ -80,16 +80,16 @@ public class QueryViewFactory extends ElementFactory {
 				&& ListTools.isEmpty(queryView.getAvailablePersonList())) {
 			return true;
 		}
-		if (effectivePerson.isUser(queryView.getCreatorPerson())) {
+		if (effectivePerson.isPerson(queryView.getCreatorPerson())) {
 			return true;
 		}
 		if (effectivePerson.isManager()) {
 			return true;
 		}
-		if (effectivePerson.isUser(application.getControllerList())) {
+		if (effectivePerson.isPerson(application.getControllerList())) {
 			return true;
 		}
-		if (effectivePerson.isUser(queryView.getControllerList())) {
+		if (effectivePerson.isPerson(queryView.getControllerList())) {
 			return true;
 		}
 		if (ListTools.isNotEmpty(queryView.getAvailablePersonList())) {

+ 1 - 1
o2server/x_processplatform_assemble_surface/src/main/java/com/x/processplatform/assemble/surface/jaxrs/attachment/ActionEdit.java

@@ -50,7 +50,7 @@ class ActionEdit extends BaseAction {
 			}
 			Application application = business.application().pick(work.getApplication());
 			Process process = business.process().pick(work.getProcess());
-			if (business.controllerable(business, effectivePerson, application, process, attachment)) {
+			if (!business.controllerable(business, effectivePerson, application, process, attachment)) {
 				throw new ExceptionAccessDenied(effectivePerson, attachment);
 			}
 			emc.beginTransaction(Attachment.class);

+ 35 - 18
o2server/x_processplatform_assemble_surface/src/main/java/com/x/processplatform/assemble/surface/jaxrs/attachment/ActionListWithWorkOrWorkCompleted.java

@@ -1,5 +1,6 @@
 package com.x.processplatform.assemble.surface.jaxrs.attachment;
 
+import java.util.ArrayList;
 import java.util.Comparator;
 import java.util.List;
 import java.util.stream.Collectors;
@@ -10,6 +11,7 @@ import com.x.base.core.entity.JpaObject;
 import com.x.base.core.project.bean.WrapCopier;
 import com.x.base.core.project.bean.WrapCopierFactory;
 import com.x.base.core.project.exception.ExceptionAccessDenied;
+import com.x.base.core.project.exception.ExceptionEntityNotExist;
 import com.x.base.core.project.gson.GsonPropertyObject;
 import com.x.base.core.project.http.ActionResult;
 import com.x.base.core.project.http.EffectivePerson;
@@ -29,7 +31,8 @@ class ActionListWithWorkOrWorkCompleted extends BaseAction {
 
 			Business business = new Business(emc);
 
-			if (!business.readableWithWorkOrWorkCompleted(effectivePerson, workOrWorkCompleted)) {
+			if (!business.readableWithWorkOrWorkCompleted(effectivePerson, workOrWorkCompleted,
+					new ExceptionEntityNotExist(workOrWorkCompleted))) {
 				throw new ExceptionAccessDenied(effectivePerson);
 			}
 
@@ -39,12 +42,15 @@ class ActionListWithWorkOrWorkCompleted extends BaseAction {
 
 			final String job = business.job().findWithWorkOrWorkCompleted(workOrWorkCompleted);
 
-			List<Wo> wos = this.list(business, job);
+			List<Wo> wos = new ArrayList<>();
 
-			for (Wo wo : wos) {
-				this.read(wo, identities, units);
-				this.edit(wo, identities, units);
-				this.control(wo, effectivePerson, identities, units);
+			for (Wo wo : this.list(business, job)) {
+				if (this.read(wo, identities, units)) {
+					wo.getControl().setAllowRead(true);
+					wo.getControl().setAllowEdit(this.edit(wo, identities, units));
+					wo.getControl().setAllowControl(this.control(wo, effectivePerson, identities, units));
+					wos.add(wo);
+				}
 			}
 
 			wos = wos.stream().sorted(Comparator.comparing(Wo::getCreateTime)).collect(Collectors.toList());
@@ -54,37 +60,48 @@ class ActionListWithWorkOrWorkCompleted extends BaseAction {
 		}
 	}
 
-	private void read(Wo wo, List<String> identities, List<String> units) throws Exception {
+	private boolean read(Wo wo, List<String> identities, List<String> units) throws Exception {
+		boolean value = false;
 		if (ListTools.isEmpty(wo.getReadIdentityList()) && ListTools.isEmpty(wo.getReadUnitList())) {
-			wo.getControl().setAllowRead(true);
+			value = true;
 		} else {
 			if (ListTools.containsAny(identities, wo.getReadIdentityList())
 					|| ListTools.containsAny(identities, wo.getReadUnitList())) {
-				wo.getControl().setAllowRead(true);
+				value = true;
 			}
 		}
+		wo.getControl().setAllowRead(value);
+		return value;
 	}
 
-	private void edit(Wo wo, List<String> identities, List<String> units) throws Exception {
+	private boolean edit(Wo wo, List<String> identities, List<String> units) throws Exception {
+		boolean value = false;
 		if (ListTools.isEmpty(wo.getEditIdentityList()) && ListTools.isEmpty(wo.getEditUnitList())) {
-			wo.getControl().setAllowEdit(true);
+			value = true;
 		} else {
 			if (ListTools.containsAny(identities, wo.getEditIdentityList())
 					|| ListTools.containsAny(identities, wo.getEditUnitList())) {
-				wo.getControl().setAllowEdit(true);
+				value = true;
 			}
 		}
+		return value;
 	}
 
-	private void control(Wo wo, EffectivePerson effectivePerson, List<String> identities, List<String> units)
+	private boolean control(Wo wo, EffectivePerson effectivePerson, List<String> identities, List<String> units)
 			throws Exception {
-		if (ListTools.containsAny(identities, wo.getControllerIdentityList())
-				|| ListTools.containsAny(identities, wo.getControllerUnitList())) {
-			wo.getControl().setAllowControl(true);
+		boolean value = false;
+		if (ListTools.isEmpty(wo.getControllerUnitList()) && ListTools.isEmpty(wo.getControllerIdentityList())) {
+			value = true;
+		} else {
+			if (ListTools.containsAny(identities, wo.getControllerIdentityList())
+					|| ListTools.containsAny(identities, wo.getControllerUnitList())) {
+				value = true;
+			}
 		}
-		if (effectivePerson.isUser(wo.getPerson())) {
-			wo.getControl().setAllowControl(true);
+		if (effectivePerson.isPerson(wo.getPerson())) {
+			value = true;
 		}
+		return value;
 	}
 
 	private List<Wo> list(Business business, String job) throws Exception {

+ 1 - 1
o2server/x_processplatform_assemble_surface/src/main/java/com/x/processplatform/assemble/surface/jaxrs/attachment/ActionUploadWithWorkCompleted.java

@@ -54,7 +54,7 @@ class ActionUploadWithWorkCompleted extends BaseAction {
 			if ((effectivePerson.isNotManager())
 					&& (!business.organization().person().hasRole(effectivePerson,
 							OrganizationDefinition.ProcessPlatformManager, OrganizationDefinition.Manager))
-					&& effectivePerson.isNotUser(application.getControllerList())) {
+					&& effectivePerson.isNotPerson(application.getControllerList())) {
 				throw new ExceptionAccessDenied(effectivePerson);
 			}
 			if (StringUtils.isEmpty(fileName)) {

+ 28 - 22
o2server/x_processplatform_assemble_surface/src/main/java/com/x/processplatform/assemble/surface/jaxrs/control/ActionGetWorkOrWorkCompleted.java

@@ -3,16 +3,16 @@ package com.x.processplatform.assemble.surface.jaxrs.control;
 import java.util.HashMap;
 import java.util.Map;
 
-import org.apache.commons.lang.BooleanUtils;
+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.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.logger.Logger;
 import com.x.base.core.project.logger.LoggerFactory;
-import com.x.base.core.project.tools.ListTools;
 import com.x.base.core.project.tools.PropertyTools;
 import com.x.processplatform.assemble.surface.Business;
 import com.x.processplatform.core.entity.content.Read;
@@ -26,6 +26,7 @@ import com.x.processplatform.core.entity.element.ActivityType;
 import com.x.processplatform.core.entity.element.Manual;
 import com.x.processplatform.core.entity.element.util.WorkLogTree;
 import com.x.processplatform.core.entity.element.util.WorkLogTree.Node;
+import com.x.processplatform.core.entity.element.util.WorkLogTree.Nodes;
 
 class ActionGetWorkOrWorkCompleted extends BaseAction {
 
@@ -47,7 +48,8 @@ class ActionGetWorkOrWorkCompleted extends BaseAction {
 
 			Business business = new Business(emc);
 
-			if (!business.readableWithWorkOrWorkCompleted(effectivePerson, workOrWorkCompleted)) {
+			if (!business.readableWithWorkOrWorkCompleted(effectivePerson, workOrWorkCompleted,
+					new ExceptionEntityNotExist(workOrWorkCompleted))) {
 				throw new ExceptionAccessDenied(effectivePerson);
 			}
 
@@ -71,8 +73,9 @@ class ActionGetWorkOrWorkCompleted extends BaseAction {
 		Wo wo = new Wo();
 		wo.setAllowVisit(true);
 		wo.setAllowReadProcessing(this.hasReadWithJob(business, effectivePerson, workCompleted.getJob()));
-		wo.setAllowRollback(this.canManageApplicationOrProcess(business, effectivePerson,
-				workCompleted.getApplication(), workCompleted.getProcess()));
+		wo.setAllowRollback(
+				this.canManageApplicationOrProcess(business, effectivePerson, workCompleted.getApplication(),
+						workCompleted.getProcess()) || BooleanUtils.isTrue(workCompleted.getAllowRollback()));
 		return wo;
 	}
 
@@ -106,29 +109,34 @@ class ActionGetWorkOrWorkCompleted extends BaseAction {
 				&& wo.getAllowSave());
 
 		/* 是否可以增加会签分支 */
-		if (PropertyTools.getOrElse(activity, Manual.allowAddSplit_FIELDNAME, Boolean.class, false)) {
+		if (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) {
-				Node up = node.upTo(ActivityType.manual, ActivityType.agent, ActivityType.choice, ActivityType.delay,
-						ActivityType.embed, ActivityType.invoke);
-				if (null != up) {
-					wo.setAllowAddSplit(
-							this.hasTaskCompletedWithActivityToken(business, effectivePerson, work.getActivityToken())
-									&& BooleanUtils.isTrue(work.getSplitting()));
+				Nodes ups = node.upTo(ActivityType.manual, ActivityType.agent, ActivityType.choice, ActivityType.delay,
+						ActivityType.embed, ActivityType.invoke, ActivityType.parallel, ActivityType.split,
+						ActivityType.message);
+				for (Node o : ups) {
+					if (this.hasTaskCompletedWithActivityToken(business, effectivePerson,
+							o.getWorkLog().getFromActivityToken())) {
+						wo.setAllowAddSplit(true);
+						break;
+					}
 				}
 			}
 		}
 		/* 是否可以召回 */
-		if (PropertyTools.getOrElse(activity, Manual.allowRetract_FIELDNAME, Boolean.class, false)) {
+		if (PropertyTools.getOrElse(activity, Manual.allowRetract_FIELDNAME, Boolean.class, false) && this
+				.canManageApplicationOrProcess(business, effectivePerson, work.getApplication(), work.getProcess())) {
 			Node node = this.workLogTree(business, work.getJob()).location(work);
 			if (null != node) {
-				Node up = node.upTo(ActivityType.manual, ActivityType.agent, ActivityType.choice, ActivityType.delay,
+				Nodes ups = node.upTo(ActivityType.manual, ActivityType.agent, ActivityType.choice, ActivityType.delay,
 						ActivityType.embed, ActivityType.invoke);
-				if (null != up) {
-					wo.setAllowRetract(
-							this.hasTaskCompletedWithActivityToken(business, effectivePerson, work.getActivityToken())
-									&& this.canManageApplicationOrProcess(business, effectivePerson,
-											work.getApplication(), work.getProcess()));
+				for (Node o : ups) {
+					if (this.hasTaskCompletedWithActivityToken(business, effectivePerson, work.getActivityToken())) {
+						wo.setAllowRetract(true);
+						break;
+					}
 				}
 			}
 		}
@@ -174,9 +182,7 @@ class ActionGetWorkOrWorkCompleted extends BaseAction {
 	private WorkLogTree workLogTree(Business business, String job) throws Exception {
 		if (null == this.workLogTree) {
 			this.workLogTree = new WorkLogTree(business.entityManagerContainer().fetchEqual(WorkLog.class,
-					ListTools.toList(WorkLog.arrivedActivityToken_FIELDNAME, WorkLog.arrivedActivityType_FIELDNAME,
-							WorkLog.fromActivityToken_FIELDNAME, WorkLog.fromActivityType_FIELDNAME),
-					WorkLog.job_FIELDNAME, job));
+					WorkLogTree.RELY_WORKLOG_ITEMS, WorkLog.job_FIELDNAME, job));
 		}
 		return this.workLogTree;
 	}

+ 1 - 1
o2server/x_processplatform_assemble_surface/src/main/java/com/x/processplatform/assemble/surface/jaxrs/data/ActionUpdateWithWorkCompleted.java

@@ -40,7 +40,7 @@ class ActionUpdateWithWorkCompleted extends BaseAction {
 			Application application = business.application().pick(workCompleted.getApplication());
 			Process process = business.process().pick(workCompleted.getProcess());
 			if (!business.canManageApplicationOrProcess(effectivePerson, application, process)
-					&& (!effectivePerson.isUser(workCompleted.getCreatorPerson()))) {
+					&& (!effectivePerson.isPerson(workCompleted.getCreatorPerson()))) {
 				throw new ExceptionWorkCompletedAccessDenied(effectivePerson.getDistinguishedName(),
 						workCompleted.getTitle(), workCompleted.getId());
 			}

+ 1 - 1
o2server/x_processplatform_assemble_surface/src/main/java/com/x/processplatform/assemble/surface/jaxrs/data/ActionUpdateWithWorkCompletedPath0.java

@@ -28,7 +28,7 @@ class ActionUpdateWithWorkCompletedPath0 extends BaseAction {
 			Application application = business.application().pick(workCompleted.getApplication());
 			Process process = business.process().pick(workCompleted.getProcess());
 			if (!business.canManageApplicationOrProcess(effectivePerson, application, process)
-					&& (!effectivePerson.isUser(workCompleted.getCreatorPerson()))) {
+					&& (!effectivePerson.isPerson(workCompleted.getCreatorPerson()))) {
 				throw new ExceptionWorkCompletedAccessDenied(effectivePerson.getDistinguishedName(),
 						workCompleted.getTitle(), workCompleted.getId());
 			}

+ 1 - 1
o2server/x_processplatform_assemble_surface/src/main/java/com/x/processplatform/assemble/surface/jaxrs/data/ActionUpdateWithWorkCompletedPath1.java

@@ -28,7 +28,7 @@ class ActionUpdateWithWorkCompletedPath1 extends BaseAction {
 			Application application = business.application().pick(workCompleted.getApplication());
 			Process process = business.process().pick(workCompleted.getProcess());
 			if (!business.canManageApplicationOrProcess(effectivePerson, application, process)
-					&& (!effectivePerson.isUser(workCompleted.getCreatorPerson()))) {
+					&& (!effectivePerson.isPerson(workCompleted.getCreatorPerson()))) {
 				throw new ExceptionWorkCompletedAccessDenied(effectivePerson.getDistinguishedName(),
 						workCompleted.getTitle(), workCompleted.getId());
 			}

+ 1 - 1
o2server/x_processplatform_assemble_surface/src/main/java/com/x/processplatform/assemble/surface/jaxrs/data/ActionUpdateWithWorkCompletedPath2.java

@@ -28,7 +28,7 @@ class ActionUpdateWithWorkCompletedPath2 extends BaseAction {
 			Application application = business.application().pick(workCompleted.getApplication());
 			Process process = business.process().pick(workCompleted.getProcess());
 			if (!business.canManageApplicationOrProcess(effectivePerson, application, process)
-					&& (!effectivePerson.isUser(workCompleted.getCreatorPerson()))) {
+					&& (!effectivePerson.isPerson(workCompleted.getCreatorPerson()))) {
 				throw new ExceptionWorkCompletedAccessDenied(effectivePerson.getDistinguishedName(),
 						workCompleted.getTitle(), workCompleted.getId());
 			}

+ 1 - 1
o2server/x_processplatform_assemble_surface/src/main/java/com/x/processplatform/assemble/surface/jaxrs/data/ActionUpdateWithWorkCompletedPath3.java

@@ -28,7 +28,7 @@ class ActionUpdateWithWorkCompletedPath3 extends BaseAction {
 			Application application = business.application().pick(workCompleted.getApplication());
 			Process process = business.process().pick(workCompleted.getProcess());
 			if (!business.canManageApplicationOrProcess(effectivePerson, application, process)
-					&& (!effectivePerson.isUser(workCompleted.getCreatorPerson()))) {
+					&& (!effectivePerson.isPerson(workCompleted.getCreatorPerson()))) {
 				throw new ExceptionWorkCompletedAccessDenied(effectivePerson.getDistinguishedName(),
 						workCompleted.getTitle(), workCompleted.getId());
 			}

+ 1 - 1
o2server/x_processplatform_assemble_surface/src/main/java/com/x/processplatform/assemble/surface/jaxrs/data/ActionUpdateWithWorkCompletedPath4.java

@@ -28,7 +28,7 @@ class ActionUpdateWithWorkCompletedPath4 extends BaseAction {
 			Application application = business.application().pick(workCompleted.getApplication());
 			Process process = business.process().pick(workCompleted.getProcess());
 			if (!business.canManageApplicationOrProcess(effectivePerson, application, process)
-					&& (!effectivePerson.isUser(workCompleted.getCreatorPerson()))) {
+					&& (!effectivePerson.isPerson(workCompleted.getCreatorPerson()))) {
 				throw new ExceptionWorkCompletedAccessDenied(effectivePerson.getDistinguishedName(),
 						workCompleted.getTitle(), workCompleted.getId());
 			}

+ 1 - 1
o2server/x_processplatform_assemble_surface/src/main/java/com/x/processplatform/assemble/surface/jaxrs/data/ActionUpdateWithWorkCompletedPath5.java

@@ -28,7 +28,7 @@ class ActionUpdateWithWorkCompletedPath5 extends BaseAction {
 			Application application = business.application().pick(workCompleted.getApplication());
 			Process process = business.process().pick(workCompleted.getProcess());
 			if (!business.canManageApplicationOrProcess(effectivePerson, application, process)
-					&& (!effectivePerson.isUser(workCompleted.getCreatorPerson()))) {
+					&& (!effectivePerson.isPerson(workCompleted.getCreatorPerson()))) {
 				throw new ExceptionWorkCompletedAccessDenied(effectivePerson.getDistinguishedName(),
 						workCompleted.getTitle(), workCompleted.getId());
 			}

+ 1 - 1
o2server/x_processplatform_assemble_surface/src/main/java/com/x/processplatform/assemble/surface/jaxrs/data/ActionUpdateWithWorkCompletedPath6.java

@@ -28,7 +28,7 @@ class ActionUpdateWithWorkCompletedPath6 extends BaseAction {
 			Application application = business.application().pick(workCompleted.getApplication());
 			Process process = business.process().pick(workCompleted.getProcess());
 			if (!business.canManageApplicationOrProcess(effectivePerson, application, process)
-					&& (!effectivePerson.isUser(workCompleted.getCreatorPerson()))) {
+					&& (!effectivePerson.isPerson(workCompleted.getCreatorPerson()))) {
 				throw new ExceptionWorkCompletedAccessDenied(effectivePerson.getDistinguishedName(),
 						workCompleted.getTitle(), workCompleted.getId());
 			}

+ 1 - 1
o2server/x_processplatform_assemble_surface/src/main/java/com/x/processplatform/assemble/surface/jaxrs/data/ActionUpdateWithWorkCompletedPath7.java

@@ -29,7 +29,7 @@ class ActionUpdateWithWorkCompletedPath7 extends BaseAction {
 			Application application = business.application().pick(workCompleted.getApplication());
 			Process process = business.process().pick(workCompleted.getProcess());
 			if (!business.canManageApplicationOrProcess(effectivePerson, application, process)
-					&& (!effectivePerson.isUser(workCompleted.getCreatorPerson()))) {
+					&& (!effectivePerson.isPerson(workCompleted.getCreatorPerson()))) {
 				throw new ExceptionWorkCompletedAccessDenied(effectivePerson.getDistinguishedName(),
 						workCompleted.getTitle(), workCompleted.getId());
 			}

+ 34 - 15
o2server/x_processplatform_assemble_surface/src/main/java/com/x/processplatform/assemble/surface/jaxrs/form/ActionGetWithWorkOrWorkCompleted.java

@@ -2,14 +2,20 @@ package com.x.processplatform.assemble.surface.jaxrs.form;
 
 import org.apache.commons.lang3.StringUtils;
 
+import com.google.gson.JsonElement;
 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.bean.WrapCopier;
+import com.x.base.core.project.bean.WrapCopierFactory;
 import com.x.base.core.project.exception.ExceptionAccessDenied;
+import com.x.base.core.project.exception.ExceptionEntityNotExist;
 import com.x.base.core.project.gson.GsonPropertyObject;
 import com.x.base.core.project.http.ActionResult;
 import com.x.base.core.project.http.EffectivePerson;
 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.base.core.project.tools.PropertyTools;
 import com.x.processplatform.assemble.surface.Business;
 import com.x.processplatform.core.entity.content.Work;
@@ -21,49 +27,53 @@ class ActionGetWithWorkOrWorkCompleted extends BaseAction {
 
 	private static Logger logger = LoggerFactory.getLogger(ActionGetWithWorkOrWorkCompleted.class);
 
-	ActionResult<Wo> execute(EffectivePerson effectivePerson, String workOrWorkCompleted) throws Exception {
+	ActionResult<JsonElement> execute(EffectivePerson effectivePerson, String workOrWorkCompleted) throws Exception {
 		try (EntityManagerContainer emc = EntityManagerContainerFactory.instance().create()) {
-			
-			ActionResult<Wo> result = new ActionResult<>();
+
+			ActionResult<JsonElement> result = new ActionResult<>();
 
 			Business business = new Business(emc);
 
-			if (!business.readableWithWorkOrWorkCompleted(effectivePerson, workOrWorkCompleted)) {
+			if (!business.readableWithWorkOrWorkCompleted(effectivePerson, workOrWorkCompleted,
+					new ExceptionEntityNotExist(workOrWorkCompleted))) {
 				throw new ExceptionAccessDenied(effectivePerson);
 			}
 
-			Wo wo = null;
+			JsonElement wo = null;
 
 			Work work = emc.find(workOrWorkCompleted, Work.class);
 
 			if (null != work) {
-				wo = this.work(business, work);
+				wo = gson.toJsonTree(this.work(business, work));
 			} else {
-				wo = this.workCompleted(business, emc.flag(workOrWorkCompleted, WorkCompleted.class));
+				wo = gson.toJsonTree(this.workCompleted(business, emc.flag(workOrWorkCompleted, WorkCompleted.class)));
 			}
 			result.setData(wo);
 			return result;
 		}
 	}
 
-	private Wo work(Business business, Work work) throws Exception {
-		Wo wo = new Wo();
+	private WoWorkForm work(Business business, Work work) throws Exception {
+		WoWorkForm wo = new WoWorkForm();
 		String id = work.getForm();
 		if (StringUtils.isEmpty(id)) {
 			Activity activity = business.getActivity(work);
 			id = PropertyTools.getOrElse(activity, Activity.form_FIELDNAME, String.class, "");
 		}
-		if (StringUtils.isEmpty(id)) {
+		if (StringUtils.isNotEmpty(id)) {
 			Form form = business.form().pick(id);
-			if (null != form) {
-				wo.setData(form.getDataOrMobileData());
+			wo = WoWorkForm.copier.copy(form);
+			if (StringUtils.isEmpty(wo.getData())) {
+				wo.setData(wo.getMobileData());
 			}
+			/* 清空移动端表单,减少传输量 */
+			wo.setMobileData("");
 		}
 		return wo;
 	}
 
-	private Wo workCompleted(Business business, WorkCompleted workCompleted) throws Exception {
-		Wo wo = new Wo();
+	private WoWorkCompletedForm workCompleted(Business business, WorkCompleted workCompleted) throws Exception {
+		WoWorkCompletedForm wo = new WoWorkCompletedForm();
 		if (StringUtils.isNotEmpty(workCompleted.getFormData())) {
 			wo.setData(workCompleted.getFormData());
 		} else {
@@ -72,7 +82,16 @@ class ActionGetWithWorkOrWorkCompleted extends BaseAction {
 		return wo;
 	}
 
-	public static class Wo extends GsonPropertyObject {
+	public static class WoWorkForm extends Form {
+
+		private static final long serialVersionUID = 1303951663975390089L;
+
+		static WrapCopier<Form, WoWorkForm> copier = WrapCopierFactory.wo(Form.class, WoWorkForm.class, null,
+				ListTools.toList(JpaObject.FieldsInvisible));
+
+	}
+
+	public static class WoWorkCompletedForm extends GsonPropertyObject {
 
 		private String data;
 

+ 35 - 18
o2server/x_processplatform_assemble_surface/src/main/java/com/x/processplatform/assemble/surface/jaxrs/form/ActionGetWithWorkOrWorkCompletedMobile.java

@@ -2,14 +2,20 @@ package com.x.processplatform.assemble.surface.jaxrs.form;
 
 import org.apache.commons.lang3.StringUtils;
 
+import com.google.gson.JsonElement;
 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.bean.WrapCopier;
+import com.x.base.core.project.bean.WrapCopierFactory;
 import com.x.base.core.project.exception.ExceptionAccessDenied;
+import com.x.base.core.project.exception.ExceptionEntityNotExist;
 import com.x.base.core.project.gson.GsonPropertyObject;
 import com.x.base.core.project.http.ActionResult;
 import com.x.base.core.project.http.EffectivePerson;
 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.base.core.project.tools.PropertyTools;
 import com.x.processplatform.assemble.surface.Business;
 import com.x.processplatform.core.entity.content.Work;
@@ -21,58 +27,69 @@ class ActionGetWithWorkOrWorkCompletedMobile extends BaseAction {
 
 	private static Logger logger = LoggerFactory.getLogger(ActionGetWithWorkOrWorkCompletedMobile.class);
 
-	ActionResult<Wo> execute(EffectivePerson effectivePerson, String workOrWorkCompleted) throws Exception {
+	ActionResult<JsonElement> execute(EffectivePerson effectivePerson, String workOrWorkCompleted) throws Exception {
 		try (EntityManagerContainer emc = EntityManagerContainerFactory.instance().create()) {
-			
-			ActionResult<Wo> result = new ActionResult<>();
+
+			ActionResult<JsonElement> result = new ActionResult<>();
 
 			Business business = new Business(emc);
 
-			if (!business.readableWithWorkOrWorkCompleted(effectivePerson, workOrWorkCompleted)) {
+			if (!business.readableWithWorkOrWorkCompleted(effectivePerson, workOrWorkCompleted,
+					new ExceptionEntityNotExist(workOrWorkCompleted))) {
 				throw new ExceptionAccessDenied(effectivePerson);
 			}
 
-			Wo wo = null;
+			JsonElement wo = null;
 
 			Work work = emc.find(workOrWorkCompleted, Work.class);
 
 			if (null != work) {
-				wo = this.work(business, work);
+				wo = gson.toJsonTree(this.work(business, work));
 			} else {
-				wo = this.workCompleted(business, emc.flag(workOrWorkCompleted, WorkCompleted.class));
+				wo = gson.toJsonTree(this.workCompleted(business, emc.flag(workOrWorkCompleted, WorkCompleted.class)));
 			}
 			result.setData(wo);
 			return result;
 		}
 	}
 
-	private Wo work(Business business, Work work) throws Exception {
-		Wo wo = new Wo();
+	private WoWorkForm work(Business business, Work work) throws Exception {
+		WoWorkForm wo = new WoWorkForm();
 		String id = work.getForm();
 		if (StringUtils.isEmpty(id)) {
 			Activity activity = business.getActivity(work);
 			id = PropertyTools.getOrElse(activity, Activity.form_FIELDNAME, String.class, "");
 		}
-		if (StringUtils.isEmpty(id)) {
+		if (StringUtils.isNotEmpty(id)) {
 			Form form = business.form().pick(id);
-			if (null != form) {
-				wo.setData(form.getDataOrMobileData());
+			wo = WoWorkForm.copier.copy(form);
+			if (StringUtils.isNotEmpty(wo.getMobileData())) {
+				wo.setData(wo.getMobileData());
 			}
+			/* 清空移动端表单,减少传输量 */
+			wo.setMobileData("");
 		}
 		return wo;
 	}
 
-	private Wo workCompleted(Business business, WorkCompleted workCompleted) throws Exception {
-		Wo wo = new Wo();
-		if (StringUtils.isNotEmpty(workCompleted.getFormData())) {
-			wo.setData(workCompleted.getFormData());
-		} else {
+	private WoWorkCompletedForm workCompleted(Business business, WorkCompleted workCompleted) throws Exception {
+		WoWorkCompletedForm wo = new WoWorkCompletedForm();
+		if (StringUtils.isNotEmpty(workCompleted.getFormMobileData())) {
 			wo.setData(workCompleted.getFormMobileData());
 		}
 		return wo;
 	}
 
-	public static class Wo extends GsonPropertyObject {
+	public static class WoWorkForm extends Form {
+
+		private static final long serialVersionUID = 1303951663975390089L;
+
+		static WrapCopier<Form, WoWorkForm> copier = WrapCopierFactory.wo(Form.class, WoWorkForm.class, null,
+				ListTools.toList(JpaObject.FieldsInvisible));
+
+	}
+
+	public static class WoWorkCompletedForm extends GsonPropertyObject {
 
 		private String data;
 

Algúns arquivos non se mostraron porque demasiados arquivos cambiaron neste cambio