Browse Source

默认去掉云文件和网络会议,增加form的V2版本

zhourui 5 years ago
parent
commit
e139aa1f12
19 changed files with 560 additions and 128 deletions
  1. 2 2
      o2server/configSample/processPlatform.json
  2. 10 10
      o2server/x_base_core_project/src/main/java/com/x/base/core/project/config/Components.java
  3. 7 7
      o2server/x_base_core_project/src/main/java/com/x/base/core/project/config/ProcessPlatform.java
  4. 1 1
      o2server/x_processplatform_assemble_designer/src/main/java/com/x/processplatform/assemble/designer/MappingExecuteQueue.java
  5. 1 2
      o2server/x_processplatform_assemble_designer/src/main/java/com/x/processplatform/assemble/designer/jaxrs/workcompleted/ActionMergeWithProcess.java
  6. 11 0
      o2server/x_processplatform_assemble_surface/src/main/java/com/x/processplatform/assemble/surface/jaxrs/form/BaseAction.java
  7. 73 18
      o2server/x_processplatform_assemble_surface/src/main/java/com/x/processplatform/assemble/surface/jaxrs/form/FormAction.java
  8. 90 0
      o2server/x_processplatform_assemble_surface/src/main/java/com/x/processplatform/assemble/surface/jaxrs/form/V2Get.java
  9. 99 0
      o2server/x_processplatform_assemble_surface/src/main/java/com/x/processplatform/assemble/surface/jaxrs/form/V2GetMobile.java
  10. 13 30
      o2server/x_processplatform_assemble_surface/src/main/java/com/x/processplatform/assemble/surface/jaxrs/form/V2LookupWorkOrWorkCompleted.java
  11. 133 0
      o2server/x_processplatform_assemble_surface/src/main/java/com/x/processplatform/assemble/surface/jaxrs/form/V2LookupWorkOrWorkCompletedMobile.java
  12. 0 12
      o2server/x_processplatform_assemble_surface/src/main/java/com/x/processplatform/assemble/surface/jaxrs/work/ActionGetWithWorkOrWorkCompleted.java
  13. 10 11
      o2server/x_processplatform_core_entity/src/main/java/com/x/processplatform/core/entity/content/WorkCompleted.java
  14. 33 0
      o2server/x_processplatform_core_entity/src/main/java/com/x/processplatform/core/entity/content/WorkCompletedProperties.java
  15. 5 5
      o2server/x_processplatform_service_processing/src/main/java/com/x/processplatform/service/processing/ThisApplication.java
  16. 9 8
      o2server/x_processplatform_service_processing/src/main/java/com/x/processplatform/service/processing/jaxrs/data/ActionUpdateWithWorkCompletedPrimitivePath0.java
  17. 2 2
      o2server/x_processplatform_service_processing/src/main/java/com/x/processplatform/service/processing/jaxrs/test/ActionCombine.java
  18. 54 13
      o2server/x_processplatform_service_processing/src/main/java/com/x/processplatform/service/processing/jaxrs/workcompleted/ActionCombine.java
  19. 7 7
      o2server/x_processplatform_service_processing/src/main/java/com/x/processplatform/service/processing/schedule/Merge.java

+ 2 - 2
o2server/configSample/processPlatform.json

@@ -26,7 +26,7 @@
     "###enable": "是否启用###",
     "###cron": "定时cron表达式###"
   },
-  "combine": {
+  "merge": {
     "enable": false,
     "cron": "30 30 6 * * ?",
     "thresholdDays": 730.0,
@@ -69,7 +69,7 @@
   "###urge": "催办任务设置,发现即将过期时发送提醒消息.###",
   "###expire": "将已经过了截至时间的待办标记过期.###",
   "###touchDelay": "延时任务设置,定时触发延时任务,当超过延时时间后继续流转.###",
-  "###combine": "合并任务设置,定时触发合并任务,将已完成工作的Data从Item表中提取合并到WorkCompleted的Data字段中,默认工作完成后2年开始进行合并.###",
+  "###merge": "合并任务设置,定时触发合并任务,将已完成工作的Data从Item表中提取合并到WorkCompleted的Data字段中,默认工作完成后2年开始进行合并.###",
   "###deleteDraft": "清除草稿状态的工作.###",
   "###passExpired": "超时工作路由设置.###",
   "###touchDetained": "触发长时间未处理的工作.###",

+ 10 - 10
o2server/x_base_core_project/src/main/java/com/x/base/core/project/config/Components.java

@@ -29,10 +29,10 @@ public class Components extends ConfigObject {
 	public static final String NAME_TASKCENTER = "TaskCenter";
 	public static final String NAME_HOMEPAGE = "Homepage";
 	public static final String NAME_HOTARTICLE = "HotArticle";
-	public static final String NAME_FILE = "File";
+//	public static final String NAME_FILE = "File";
 	public static final String NAME_NOTE = "Note";
 	public static final String NAME_MEETING = "Meeting";
-	public static final String NAME_ONLINEMEETING = "OnlineMeeting";
+	//public static final String NAME_ONLINEMEETING = "OnlineMeeting";
 	public static final String NAME_ATTENDANCE = "Attendance";
 	public static final String NAME_FORUM = "Forum";
 	public static final String NAME_MINDER = "Minder";
@@ -44,7 +44,7 @@ public class Components extends ConfigObject {
 	public static List<String> SYSTEM_NAME_NAMES = ListTools.toList(NAME_SETTING, NAME_ORG, NAME_CMSMANAGER,
 			NAME_APPLICATIONEXPLORER, NAME_PORTALEXPLORER, NAME_DATAEXPLORER, NAME_SERVICEMANAGER, NAME_APPMARKET,
 			NAME_APPCENTER, NAME_LOGVIEWER, NAME_PROFILE, NAME_BAM, NAME_CMS, NAME_TASKCENTER, NAME_HOMEPAGE,
-			NAME_HOTARTICLE, NAME_FILE, NAME_NOTE, NAME_MEETING, NAME_ONLINEMEETING, NAME_ATTENDANCE, NAME_FORUM,
+			NAME_HOTARTICLE, NAME_NOTE, NAME_MEETING, NAME_ATTENDANCE, NAME_FORUM,
 			NAME_MINDER, NAME_CALENDAR, NAME_ANN, NAME_SEARCH, NAME_IM);
 
 	public static final String APPICON_PNG = "appicon.png";
@@ -87,15 +87,15 @@ public class Components extends ConfigObject {
 			return new Component(NAME_HOMEPAGE, NAME_HOMEPAGE, "首页", APPICON_PNG, 14, Component.TYPE_SYSTEM);
 		case NAME_HOTARTICLE:
 			return new Component(NAME_HOTARTICLE, NAME_HOTARTICLE, "热点", APPICON_PNG, 15, Component.TYPE_SYSTEM);
-		case NAME_FILE:
-			return new Component(NAME_FILE, NAME_FILE, "云文件", APPICON_PNG, 16, Component.TYPE_SYSTEM);
+//		case NAME_FILE:
+//			return new Component(NAME_FILE, NAME_FILE, "云文件", APPICON_PNG, 16, Component.TYPE_SYSTEM);
 		case NAME_NOTE:
 			return new Component(NAME_NOTE, NAME_NOTE, "便签", APPICON_PNG, 17, Component.TYPE_SYSTEM);
 		case NAME_MEETING:
 			return new Component(NAME_MEETING, NAME_MEETING, "会议管理", APPICON_PNG, 18, Component.TYPE_SYSTEM);
-		case NAME_ONLINEMEETING:
-			return new Component(NAME_ONLINEMEETING, NAME_ONLINEMEETING, "网络会议", APPICON_PNG, 19,
-					Component.TYPE_SYSTEM);
+//		case NAME_ONLINEMEETING:
+//			return new Component(NAME_ONLINEMEETING, NAME_ONLINEMEETING, "网络会议", APPICON_PNG, 19,
+//					Component.TYPE_SYSTEM);
 		case NAME_ATTENDANCE:
 			return new Component(NAME_ATTENDANCE, NAME_ATTENDANCE, "考勤管理", APPICON_PNG, 20, Component.TYPE_SYSTEM);
 		case NAME_FORUM:
@@ -133,10 +133,10 @@ public class Components extends ConfigObject {
 		o.systems.add(systemComponent(NAME_TASKCENTER));
 		o.systems.add(systemComponent(NAME_HOMEPAGE));
 		o.systems.add(systemComponent(NAME_HOTARTICLE));
-		o.systems.add(systemComponent(NAME_FILE));
+//		o.systems.add(systemComponent(NAME_FILE));
 		o.systems.add(systemComponent(NAME_NOTE));
 		o.systems.add(systemComponent(NAME_MEETING));
-		o.systems.add(systemComponent(NAME_ONLINEMEETING));
+//		o.systems.add(systemComponent(NAME_ONLINEMEETING));
 		o.systems.add(systemComponent(NAME_ATTENDANCE));
 		o.systems.add(systemComponent(NAME_FORUM));
 		o.systems.add(systemComponent(NAME_MINDER));

+ 7 - 7
o2server/x_base_core_project/src/main/java/com/x/base/core/project/config/ProcessPlatform.java

@@ -69,7 +69,7 @@ public class ProcessPlatform extends ConfigObject {
 		this.urge = new Urge();
 		this.expire = new Expire();
 		this.touchDelay = new TouchDelay();
-		this.combine = new Combine();
+		this.merge = new Merge();
 		this.touchDetained = new TouchDetained();
 		this.deleteDraft = new DeleteDraft();
 		this.passExpired = new PassExpired();
@@ -146,7 +146,7 @@ public class ProcessPlatform extends ConfigObject {
 	private TouchDelay touchDelay;
 
 	@FieldDescribe("合并任务设置,定时触发合并任务,将已完成工作的Data从Item表中提取合并到WorkCompleted的Data字段中,默认工作完成后2年开始进行合并.")
-	private Combine combine;
+	private Merge merge;
 
 	@FieldDescribe("清除草稿状态的工作.")
 	private DeleteDraft deleteDraft;
@@ -211,8 +211,8 @@ public class ProcessPlatform extends ConfigObject {
 		return this.logLongDetained == null ? new LogLongDetained() : this.logLongDetained;
 	}
 
-	public Combine getCombine() {
-		return this.combine == null ? new Combine() : this.combine;
+	public Merge getMerge() {
+		return this.merge == null ? new Merge() : this.merge;
 	}
 
 	public Press getPress() {
@@ -328,10 +328,10 @@ public class ProcessPlatform extends ConfigObject {
 
 	}
 
-	public static class Combine extends ConfigObject {
+	public static class Merge extends ConfigObject {
 
-		public static Combine defaultInstance() {
-			Combine o = new Combine();
+		public static Merge defaultInstance() {
+			Merge o = new Merge();
 			return o;
 		}
 

+ 1 - 1
o2server/x_processplatform_assemble_designer/src/main/java/com/x/processplatform/assemble/designer/MappingExecuteQueue.java

@@ -82,7 +82,7 @@ public class MappingExecuteQueue extends AbstractQueue<String> {
 	}
 
 	private Data data(Business business, WorkCompleted workCompleted) throws Exception {
-		if (BooleanUtils.isTrue(workCompleted.getMerged()) && (null!= workCompleted.getProperties().getData())) {
+		if (BooleanUtils.isTrue(workCompleted.getMerged()) && (null != workCompleted.getProperties().getData())) {
 			return workCompleted.getProperties().getData();
 		}
 		List<Item> items = business.entityManagerContainer().listEqualAndEqual(Item.class, Item.bundle_FIELDNAME,

+ 1 - 2
o2server/x_processplatform_assemble_designer/src/main/java/com/x/processplatform/assemble/designer/jaxrs/workcompleted/ActionMergeWithProcess.java

@@ -20,15 +20,14 @@ import com.x.base.core.entity.dataitem.DataItemConverter;
 import com.x.base.core.entity.dataitem.ItemCategory;
 import com.x.base.core.project.exception.ExceptionAccessDenied;
 import com.x.base.core.project.exception.ExceptionEntityNotExist;
-import com.x.base.core.project.gson.XGsonBuilder;
 import com.x.base.core.project.http.ActionResult;
 import com.x.base.core.project.http.EffectivePerson;
 import com.x.base.core.project.jaxrs.WrapInteger;
 import com.x.base.core.project.tools.ListTools;
 import com.x.processplatform.assemble.designer.Business;
+import com.x.processplatform.core.entity.content.Data;
 import com.x.processplatform.core.entity.content.Record;
 import com.x.processplatform.core.entity.content.WorkCompleted;
-import com.x.processplatform.core.entity.content.Data;
 import com.x.processplatform.core.entity.content.WorkCompleted_;
 import com.x.processplatform.core.entity.element.Application;
 import com.x.processplatform.core.entity.element.Process;

+ 11 - 0
o2server/x_processplatform_assemble_surface/src/main/java/com/x/processplatform/assemble/surface/jaxrs/form/BaseAction.java

@@ -188,6 +188,8 @@ abstract class BaseAction extends StandardJaxrsAction {
 
 	public static class AbstractWo extends GsonPropertyObject {
 
+		private String id;
+
 		private WoForm form;
 
 		private Map<String, WoForm> relatedFormMap = new HashMap<>();
@@ -218,6 +220,15 @@ abstract class BaseAction extends StandardJaxrsAction {
 			this.relatedScriptMap = relatedScriptMap;
 		}
 
+		public String getId() {
+			return id;
+		}
+
+		public void setId(String id) {
+			this.id = id;
+		}
+
+		
 	}
 
 }

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

@@ -141,23 +141,78 @@ public class FormAction extends StandardJaxrsAction {
 		asyncResponse.resume(ResponseFactory.getEntityTagActionResultResponse(request, result));
 	}
 
-//	@JaxrsMethodDescribe(value = "V2根据工作或完成工作标识获取表单,合并关联表单和关联脚本输出.", action = V2GetWithWorkOrWorkCompleted.class)
-//	@GET
-//	@Path("v2/workorworkcompleted/{workOrWorkCompleted}")
-//	@Produces(HttpMediaType.APPLICATION_JSON_UTF_8)
-//	@Consumes(MediaType.APPLICATION_JSON)
-//	public void V2GetWithWorkOrWorkCompleted(@Suspended final AsyncResponse asyncResponse,
-//			@Context HttpServletRequest request,
-//			@JaxrsParameterDescribe("工作或完成工作标识") @PathParam("workOrWorkCompleted") String workOrWorkCompleted) {
-//		ActionResult<V2GetWithWorkOrWorkCompleted.Wo> result = new ActionResult<>();
-//		EffectivePerson effectivePerson = this.effectivePerson(request);
-//		try {
-//			result = new V2GetWithWorkOrWorkCompleted().execute(effectivePerson, workOrWorkCompleted);
-//		} catch (Exception e) {
-//			logger.error(e, effectivePerson, request, null);
-//			result.error(e);
-//		}
-//		asyncResponse.resume(ResponseFactory.getEntityTagActionResultResponse(request, result));
-//	}
+	@JaxrsMethodDescribe(value = "查询表单,如果有表单那么返回表单id,如果使用的是combine的表单直接返回内容.", action = V2LookupWorkOrWorkCompleted.class)
+	@GET
+	@Path("v2/lookup/workorworkcompleted/{workOrWorkCompleted}")
+	@Produces(HttpMediaType.APPLICATION_JSON_UTF_8)
+	@Consumes(MediaType.APPLICATION_JSON)
+	public void V2LookupWorkOrWorkCompleted(@Suspended final AsyncResponse asyncResponse,
+			@Context HttpServletRequest request,
+			@JaxrsParameterDescribe("工作或已完成工作标识") @PathParam("workOrWorkCompleted") String workOrWorkCompleted) {
+		ActionResult<V2LookupWorkOrWorkCompleted.Wo> result = new ActionResult<>();
+		EffectivePerson effectivePerson = this.effectivePerson(request);
+		try {
+			result = new V2LookupWorkOrWorkCompleted().execute(effectivePerson, workOrWorkCompleted);
+		} catch (Exception e) {
+			logger.error(e, effectivePerson, request, null);
+			result.error(e);
+		}
+		asyncResponse.resume(ResponseFactory.getEntityTagActionResultResponse(request, result));
+	}
+
+	@JaxrsMethodDescribe(value = "查询移动端表单,如果有表单那么返回表单id,如果使用的是combine的表单直接返回内容.", action = V2LookupWorkOrWorkCompletedMobile.class)
+	@GET
+	@Path("v2/lookup/workorworkcompleted/{workOrWorkCompleted}/mobile")
+	@Produces(HttpMediaType.APPLICATION_JSON_UTF_8)
+	@Consumes(MediaType.APPLICATION_JSON)
+	public void V2LookupWorkOrWorkCompletedMobile(@Suspended final AsyncResponse asyncResponse,
+			@Context HttpServletRequest request,
+			@JaxrsParameterDescribe("工作或已完成工作标识") @PathParam("workOrWorkCompleted") String workOrWorkCompleted) {
+		ActionResult<V2LookupWorkOrWorkCompletedMobile.Wo> result = new ActionResult<>();
+		EffectivePerson effectivePerson = this.effectivePerson(request);
+		try {
+			result = new V2LookupWorkOrWorkCompletedMobile().execute(effectivePerson, workOrWorkCompleted);
+		} catch (Exception e) {
+			logger.error(e, effectivePerson, request, null);
+			result.error(e);
+		}
+		asyncResponse.resume(ResponseFactory.getEntityTagActionResultResponse(request, result));
+	}
+
+	@JaxrsMethodDescribe(value = "获取表单.", action = V2Get.class)
+	@GET
+	@Path("v2/{id}")
+	@Produces(HttpMediaType.APPLICATION_JSON_UTF_8)
+	@Consumes(MediaType.APPLICATION_JSON)
+	public void V2Get(@Suspended final AsyncResponse asyncResponse, @Context HttpServletRequest request,
+			@JaxrsParameterDescribe("标识") @PathParam("id") String id) {
+		ActionResult<V2Get.Wo> result = new ActionResult<>();
+		EffectivePerson effectivePerson = this.effectivePerson(request);
+		try {
+			result = new V2Get().execute(effectivePerson, id);
+		} catch (Exception e) {
+			logger.error(e, effectivePerson, request, null);
+			result.error(e);
+		}
+		asyncResponse.resume(ResponseFactory.getEntityTagActionResultResponse(request, result));
+	}
+
+	@JaxrsMethodDescribe(value = "获取表单Mobile.", action = V2GetMobile.class)
+	@GET
+	@Path("v2/{id}/mobile")
+	@Produces(HttpMediaType.APPLICATION_JSON_UTF_8)
+	@Consumes(MediaType.APPLICATION_JSON)
+	public void V2GetMobile(@Suspended final AsyncResponse asyncResponse, @Context HttpServletRequest request,
+			@JaxrsParameterDescribe("标识") @PathParam("id") String id) {
+		ActionResult<V2GetMobile.Wo> result = new ActionResult<>();
+		EffectivePerson effectivePerson = this.effectivePerson(request);
+		try {
+			result = new V2GetMobile().execute(effectivePerson, id);
+		} catch (Exception e) {
+			logger.error(e, effectivePerson, request, null);
+			result.error(e);
+		}
+		asyncResponse.resume(ResponseFactory.getEntityTagActionResultResponse(request, result));
+	}
 
 }

+ 90 - 0
o2server/x_processplatform_assemble_surface/src/main/java/com/x/processplatform/assemble/surface/jaxrs/form/V2Get.java

@@ -0,0 +1,90 @@
+package com.x.processplatform.assemble.surface.jaxrs.form;
+
+import java.util.Map.Entry;
+import java.util.Objects;
+
+import org.apache.commons.lang3.StringUtils;
+
+import com.x.base.core.container.EntityManagerContainer;
+import com.x.base.core.container.factory.EntityManagerContainerFactory;
+import com.x.base.core.project.exception.ExceptionEntityNotExist;
+import com.x.base.core.project.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.processplatform.assemble.surface.Business;
+import com.x.processplatform.core.entity.content.WorkCompletedProperties;
+import com.x.processplatform.core.entity.element.Form;
+import com.x.processplatform.core.entity.element.Script;
+
+class V2Get extends BaseAction {
+
+	private static Logger logger = LoggerFactory.getLogger(V2Get.class);
+
+	ActionResult<Wo> execute(EffectivePerson effectivePerson, String id) throws Exception {
+		try (EntityManagerContainer emc = EntityManagerContainerFactory.instance().create()) {
+			ActionResult<Wo> result = new ActionResult<>();
+			Business business = new Business(emc);
+			Form form = emc.find(id, Form.class);
+			if (Objects.isNull(form)) {
+				throw new ExceptionEntityNotExist(id, Form.class);
+			}
+			Wo wo = new Wo();
+			wo.setForm(toWoFormDataOrMobileData(form));
+			related(business, wo, form);
+			result.setData(wo);
+			return result;
+		}
+	}
+
+	private void related(Business business, Wo wo, Form form) throws Exception {
+		if (StringUtils.isNotBlank(form.getData())) {
+			for (String relatedFormId : form.getProperties().getRelatedFormList()) {
+				Form relatedForm = business.form().pick(relatedFormId);
+				if (null != relatedForm) {
+					wo.getRelatedFormMap().put(relatedFormId, toWoFormDataOrMobileData(relatedForm));
+				}
+			}
+		} else {
+			for (String mobileRelatedFormId : form.getProperties().getMobileRelatedFormList()) {
+				Form mobileRelatedForm = business.form().pick(mobileRelatedFormId);
+				if (null != mobileRelatedForm) {
+					wo.getRelatedFormMap().put(mobileRelatedFormId, toWoFormMobileDataOrData(mobileRelatedForm));
+				}
+			}
+		}
+		relatedScript(business, wo, form);
+	}
+
+	protected void relatedScript(Business business, AbstractWo wo, Form form) throws Exception {
+		for (Entry<String, String> entry : form.getProperties().getRelatedScriptMap().entrySet()) {
+			switch (entry.getValue()) {
+			case WorkCompletedProperties.Script.TYPE_PROCESSPLATFORM:
+				Script relatedScript = business.script().pick(entry.getKey());
+				if (null != relatedScript) {
+					wo.getRelatedScriptMap().put(entry.getKey(), toWoScript(relatedScript));
+				}
+				break;
+			case WorkCompletedProperties.Script.TYPE_CMS:
+				com.x.cms.core.entity.element.Script relatedCmsScript = business.cms().script().pick(entry.getKey());
+				if (null != relatedCmsScript) {
+					wo.getRelatedScriptMap().put(entry.getKey(), toWoScript(relatedCmsScript));
+				}
+				break;
+			case WorkCompletedProperties.Script.TYPE_PORTAL:
+				com.x.portal.core.entity.Script relatedPortalScript = business.portal().script().pick(entry.getKey());
+				if (null != relatedPortalScript) {
+					wo.getRelatedScriptMap().put(entry.getKey(), toWoScript(relatedPortalScript));
+				}
+				break;
+			default:
+				break;
+			}
+		}
+	}
+
+	public static class Wo extends AbstractWo {
+
+	}
+
+}

+ 99 - 0
o2server/x_processplatform_assemble_surface/src/main/java/com/x/processplatform/assemble/surface/jaxrs/form/V2GetMobile.java

@@ -0,0 +1,99 @@
+package com.x.processplatform.assemble.surface.jaxrs.form;
+
+import java.util.Objects;
+import java.util.Map.Entry;
+
+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.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.Audit;
+import com.x.base.core.project.logger.Logger;
+import com.x.base.core.project.logger.LoggerFactory;
+import com.x.base.core.project.tools.PropertyTools;
+import com.x.processplatform.assemble.surface.Business;
+import com.x.processplatform.assemble.surface.jaxrs.form.ActionGetWithWorkOrWorkCompletedMobile.Wo;
+import com.x.processplatform.assemble.surface.jaxrs.form.BaseAction.AbstractWo;
+import com.x.processplatform.core.entity.content.Work;
+import com.x.processplatform.core.entity.content.WorkCompleted;
+import com.x.processplatform.core.entity.content.WorkCompletedProperties;
+import com.x.processplatform.core.entity.element.Activity;
+import com.x.processplatform.core.entity.element.Form;
+import com.x.processplatform.core.entity.element.Script;
+
+class V2GetMobile extends BaseAction {
+
+	private static Logger logger = LoggerFactory.getLogger(V2GetMobile.class);
+
+	ActionResult<Wo> execute(EffectivePerson effectivePerson, String id) throws Exception {
+		try (EntityManagerContainer emc = EntityManagerContainerFactory.instance().create()) {
+			ActionResult<Wo> result = new ActionResult<>();
+			Business business = new Business(emc);
+			Form form = emc.find(id, Form.class);
+			if (Objects.isNull(form)) {
+				throw new ExceptionEntityNotExist(id, Form.class);
+			}
+			Wo wo = new Wo();
+			wo.setForm(toWoFormMobileDataOrData(form));
+			related(business, wo, form);
+			result.setData(wo);
+			return result;
+		}
+	}
+
+	private void related(Business business, Wo wo, Form form) throws Exception {
+		if (StringUtils.isNotBlank(form.getMobileData())) {
+			for (String mobileRelatedFormId : form.getProperties().getMobileRelatedFormList()) {
+				Form relatedForm = business.form().pick(mobileRelatedFormId);
+				if (null != relatedForm) {
+					wo.getRelatedFormMap().put(mobileRelatedFormId, toWoFormMobileDataOrData(relatedForm));
+				}
+			}
+		} else {
+			for (String relatedFormId : form.getProperties().getRelatedFormList()) {
+				Form relatedForm = business.form().pick(relatedFormId);
+				if (null != relatedForm) {
+					wo.getRelatedFormMap().put(relatedFormId, toWoFormDataOrMobileData(relatedForm));
+				}
+			}
+		}
+		relatedScript(business, wo, form);
+	}
+
+	protected void relatedScript(Business business, AbstractWo wo, Form form) throws Exception {
+		for (Entry<String, String> entry : form.getProperties().getMobileRelatedScriptMap().entrySet()) {
+			switch (entry.getValue()) {
+			case WorkCompletedProperties.Script.TYPE_PROCESSPLATFORM:
+				Script relatedScript = business.script().pick(entry.getKey());
+				if (null != relatedScript) {
+					wo.getRelatedScriptMap().put(entry.getKey(), toWoScript(relatedScript));
+				}
+				break;
+			case WorkCompletedProperties.Script.TYPE_CMS:
+				com.x.cms.core.entity.element.Script relatedCmsScript = business.cms().script().pick(entry.getKey());
+				if (null != relatedCmsScript) {
+					wo.getRelatedScriptMap().put(entry.getKey(), toWoScript(relatedCmsScript));
+				}
+				break;
+			case WorkCompletedProperties.Script.TYPE_PORTAL:
+				com.x.portal.core.entity.Script relatedPortalScript = business.portal().script().pick(entry.getKey());
+				if (null != relatedPortalScript) {
+					wo.getRelatedScriptMap().put(entry.getKey(), toWoScript(relatedPortalScript));
+				}
+				break;
+			default:
+				break;
+			}
+		}
+	}
+
+	public static class Wo extends AbstractWo {
+
+	}
+
+}

+ 13 - 30
o2server/x_processplatform_assemble_surface/src/main/java/com/x/processplatform/assemble/surface/jaxrs/form/V2FindWithWorkOrWorkCompleted2.java → o2server/x_processplatform_assemble_surface/src/main/java/com/x/processplatform/assemble/surface/jaxrs/form/V2LookupWorkOrWorkCompleted.java

@@ -4,14 +4,12 @@ import java.util.Map.Entry;
 
 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.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.Audit;
 import com.x.base.core.project.logger.Logger;
 import com.x.base.core.project.logger.LoggerFactory;
 import com.x.base.core.project.tools.PropertyTools;
@@ -23,56 +21,42 @@ import com.x.processplatform.core.entity.element.Activity;
 import com.x.processplatform.core.entity.element.Form;
 import com.x.processplatform.core.entity.element.Script;
 
-class V2FindWithWorkOrWorkCompleted2 extends BaseAction {
+class V2LookupWorkOrWorkCompleted extends BaseAction {
 
-	private static Logger logger = LoggerFactory.getLogger(V2FindWithWorkOrWorkCompleted2.class);
+	private static Logger logger = LoggerFactory.getLogger(V2LookupWorkOrWorkCompleted.class);
 
-	ActionResult<JsonElement> execute(EffectivePerson effectivePerson, String workOrWorkCompleted) throws Exception {
+	ActionResult<Wo> execute(EffectivePerson effectivePerson, String workOrWorkCompleted) throws Exception {
 		try (EntityManagerContainer emc = EntityManagerContainerFactory.instance().create()) {
-			Audit audit = logger.audit(effectivePerson);
-			ActionResult<JsonElement> result = new ActionResult<>();
-
+			ActionResult<Wo> result = new ActionResult<>();
 			Business business = new Business(emc);
-
 			if (!business.readableWithWorkOrWorkCompleted(effectivePerson, workOrWorkCompleted,
 					new ExceptionEntityNotExist(workOrWorkCompleted))) {
 				throw new ExceptionAccessDenied(effectivePerson);
 			}
-
-			JsonElement wo = null;
-
+			Wo wo = new Wo();
 			Work work = emc.find(workOrWorkCompleted, Work.class);
-
 			if (null != work) {
-				wo = gson.toJsonTree(this.work(business, work));
+				this.work(business, work, wo);
 			} else {
-				wo = gson.toJsonTree(this.workCompleted(business, emc.flag(workOrWorkCompleted, WorkCompleted.class)));
+				this.workCompleted(business, emc.flag(workOrWorkCompleted, WorkCompleted.class), wo);
 			}
-			audit.log(null, "查看");
 			result.setData(wo);
 			return result;
 		}
 	}
 
-	private Wo work(Business business, Work work) throws Exception {
-		Wo wo = new Wo();
+	private void work(Business business, Work work, Wo wo) throws Exception {
 		String id = work.getForm();
-		if (StringUtils.isEmpty(id)) {
+		if (!StringUtils.isEmpty(id)) {
+			wo.setId(id);
+		} else {
 			Activity activity = business.getActivity(work);
 			id = PropertyTools.getOrElse(activity, Activity.form_FIELDNAME, String.class, "");
 		}
-		if (StringUtils.isNotEmpty(id)) {
-			Form form = business.form().pick(id);
-			if (null != form) {
-				wo.setForm(toWoFormDataOrMobileData(form));
-				related(business, wo, form);
-			}
-		}
-		return wo;
+		wo.setId(id);
 	}
 
-	private Wo workCompleted(Business business, WorkCompleted workCompleted) throws Exception {
-		Wo wo = new Wo();
+	private void workCompleted(Business business, WorkCompleted workCompleted, Wo wo) throws Exception {
 		// 先使用当前库的表单,如果不存在使用储存的表单.
 		if (StringUtils.isNotEmpty(workCompleted.getForm())) {
 			Form form = business.form().pick(workCompleted.getForm());
@@ -92,7 +76,6 @@ class V2FindWithWorkOrWorkCompleted2 extends BaseAction {
 		}
 		workCompleted.getProperties().getRelatedScriptList().stream()
 				.forEach(o -> wo.getRelatedScriptMap().put(o.getId(), toWoScript(o)));
-		return wo;
 	}
 
 	private void related(Business business, Wo wo, Form form) throws Exception {

+ 133 - 0
o2server/x_processplatform_assemble_surface/src/main/java/com/x/processplatform/assemble/surface/jaxrs/form/V2LookupWorkOrWorkCompletedMobile.java

@@ -0,0 +1,133 @@
+package com.x.processplatform.assemble.surface.jaxrs.form;
+
+import java.util.Map.Entry;
+
+import org.apache.commons.lang3.StringUtils;
+
+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.PropertyTools;
+import com.x.processplatform.assemble.surface.Business;
+import com.x.processplatform.assemble.surface.jaxrs.form.ActionGetWithWorkOrWorkCompletedMobile.Wo;
+import com.x.processplatform.assemble.surface.jaxrs.form.BaseAction.AbstractWo;
+import com.x.processplatform.core.entity.content.Work;
+import com.x.processplatform.core.entity.content.WorkCompleted;
+import com.x.processplatform.core.entity.content.WorkCompletedProperties;
+import com.x.processplatform.core.entity.element.Activity;
+import com.x.processplatform.core.entity.element.Form;
+import com.x.processplatform.core.entity.element.Script;
+
+class V2LookupWorkOrWorkCompletedMobile extends BaseAction {
+
+	private static Logger logger = LoggerFactory.getLogger(V2LookupWorkOrWorkCompletedMobile.class);
+
+	ActionResult<Wo> execute(EffectivePerson effectivePerson, String workOrWorkCompleted) throws Exception {
+		try (EntityManagerContainer emc = EntityManagerContainerFactory.instance().create()) {
+			ActionResult<Wo> result = new ActionResult<>();
+			Business business = new Business(emc);
+			if (!business.readableWithWorkOrWorkCompleted(effectivePerson, workOrWorkCompleted,
+					new ExceptionEntityNotExist(workOrWorkCompleted))) {
+				throw new ExceptionAccessDenied(effectivePerson);
+			}
+			Wo wo = new Wo();
+			Work work = emc.find(workOrWorkCompleted, Work.class);
+			if (null != work) {
+				this.work(business, work, wo);
+			} else {
+				this.workCompleted(business, emc.flag(workOrWorkCompleted, WorkCompleted.class), wo);
+			}
+			result.setData(wo);
+			return result;
+		}
+	}
+
+	private void work(Business business, Work work, Wo wo) throws Exception {
+		String id = work.getForm();
+		if (!StringUtils.isEmpty(id)) {
+			wo.setId(id);
+		} else {
+			Activity activity = business.getActivity(work);
+			id = PropertyTools.getOrElse(activity, Activity.form_FIELDNAME, String.class, "");
+		}
+		wo.setId(id);
+	}
+
+	private void workCompleted(Business business, WorkCompleted workCompleted, Wo wo) throws Exception {
+		// 先使用当前库的表单,如果不存在使用储存的表单.
+		if (StringUtils.isNotEmpty(workCompleted.getForm())) {
+			Form form = business.form().pick(workCompleted.getForm());
+			if (null != form) {
+				wo.setForm(toWoFormDataOrMobileData(form));
+				related(business, wo, form);
+			}
+		} else if (null != workCompleted.getProperties().getForm()) {
+			wo.setForm(toWoFormDataOrMobileData(workCompleted.getProperties().getForm()));
+			if (StringUtils.isNotBlank(workCompleted.getProperties().getForm().getData())) {
+				workCompleted.getProperties().getRelatedFormList()
+						.forEach(o -> wo.getRelatedFormMap().put(o.getId(), toWoFormDataOrMobileData(o)));
+			} else {
+				workCompleted.getProperties().getMobileRelatedFormList()
+						.forEach(o -> wo.getRelatedFormMap().put(o.getId(), toWoFormMobileDataOrData(o)));
+			}
+		}
+		workCompleted.getProperties().getRelatedScriptList().stream()
+				.forEach(o -> wo.getRelatedScriptMap().put(o.getId(), toWoScript(o)));
+	}
+
+	private void related(Business business, Wo wo, Form form) throws Exception {
+		if (StringUtils.isNotBlank(form.getMobileData())) {
+			for (String mobileRelatedFormId : form.getProperties().getMobileRelatedFormList()) {
+				Form relatedForm = business.form().pick(mobileRelatedFormId);
+				if (null != relatedForm) {
+					wo.getRelatedFormMap().put(mobileRelatedFormId, toWoFormMobileDataOrData(relatedForm));
+				}
+			}
+		} else {
+			for (String relatedFormId : form.getProperties().getRelatedFormList()) {
+				Form relatedForm = business.form().pick(relatedFormId);
+				if (null != relatedForm) {
+					wo.getRelatedFormMap().put(relatedFormId, toWoFormDataOrMobileData(relatedForm));
+				}
+			}
+		}
+		relatedScript(business, wo, form);
+	}
+
+	protected void relatedScript(Business business, AbstractWo wo, Form form) throws Exception {
+		for (Entry<String, String> entry : form.getProperties().getMobileRelatedScriptMap().entrySet()) {
+			switch (entry.getValue()) {
+			case WorkCompletedProperties.Script.TYPE_PROCESSPLATFORM:
+				Script relatedScript = business.script().pick(entry.getKey());
+				if (null != relatedScript) {
+					wo.getRelatedScriptMap().put(entry.getKey(), toWoScript(relatedScript));
+				}
+				break;
+			case WorkCompletedProperties.Script.TYPE_CMS:
+				com.x.cms.core.entity.element.Script relatedCmsScript = business.cms().script().pick(entry.getKey());
+				if (null != relatedCmsScript) {
+					wo.getRelatedScriptMap().put(entry.getKey(), toWoScript(relatedCmsScript));
+				}
+				break;
+			case WorkCompletedProperties.Script.TYPE_PORTAL:
+				com.x.portal.core.entity.Script relatedPortalScript = business.portal().script().pick(entry.getKey());
+				if (null != relatedPortalScript) {
+					wo.getRelatedScriptMap().put(entry.getKey(), toWoScript(relatedPortalScript));
+				}
+				break;
+			default:
+				break;
+			}
+		}
+	}
+
+	public static class Wo extends AbstractWo {
+
+	}
+
+}

+ 0 - 12
o2server/x_processplatform_assemble_surface/src/main/java/com/x/processplatform/assemble/surface/jaxrs/work/ActionGetWithWorkOrWorkCompleted.java

@@ -166,18 +166,6 @@ class ActionGetWithWorkOrWorkCompleted extends BaseAction {
 		for (WoTask task : wo.getTaskList()) {
 			if (effectivePerson.isPerson(task.getPerson())) {
 				wo.setCurrentTaskIndex(loop);
-//				/* 发送抢办信号 */
-//				if (Objects.equals(ManualMode.grab, wo.getActivity().getManualMode())) {
-//					CompletableFuture.runAsync(() -> {
-//						try {
-//							ThisApplication.context().applications().getQuery(
-//									x_processplatform_service_processing.class,
-//									Applications.joinQueryUri("task", task.getId(), "grab"));
-//						} catch (Exception e) {
-//							logger.error(e);
-//						}
-//					});
-//				}
 				break;
 			}
 			loop++;

+ 10 - 11
o2server/x_processplatform_core_entity/src/main/java/com/x/processplatform/core/entity/content/WorkCompleted.java

@@ -16,6 +16,11 @@ import javax.persistence.Temporal;
 import javax.persistence.TemporalType;
 import javax.persistence.UniqueConstraint;
 
+import org.apache.commons.lang3.StringUtils;
+import org.apache.openjpa.persistence.Persistent;
+import org.apache.openjpa.persistence.jdbc.Index;
+import org.apache.openjpa.persistence.jdbc.Strategy;
+
 import com.x.base.core.entity.JpaObject;
 import com.x.base.core.entity.SliceJpaObject;
 import com.x.base.core.entity.annotation.CheckPersist;
@@ -26,12 +31,6 @@ import com.x.base.core.project.tools.DateTools;
 import com.x.base.core.project.tools.StringTools;
 import com.x.processplatform.core.entity.PersistenceProperties;
 
-import org.apache.commons.lang3.BooleanUtils;
-import org.apache.commons.lang3.StringUtils;
-import org.apache.openjpa.persistence.Persistent;
-import org.apache.openjpa.persistence.jdbc.Index;
-import org.apache.openjpa.persistence.jdbc.Strategy;
-
 @Entity
 @ContainerEntity(dumpSize = 100, type = ContainerEntity.Type.content, reference = ContainerEntity.Reference.strong)
 @Table(name = PersistenceProperties.Content.WorkCompleted.table, uniqueConstraints = {
@@ -155,10 +154,6 @@ public class WorkCompleted extends SliceJpaObject implements ProjectionInterface
 		}
 	}
 
-	public Boolean getMerged() {
-		return BooleanUtils.isTrue(merged);
-	}
-
 	public static final String job_FIELDNAME = "job";
 	@FieldDescribe("工作")
 	@Column(length = JpaObject.length_id, name = ColumnNamePrefix + job_FIELDNAME)
@@ -375,7 +370,7 @@ public class WorkCompleted extends SliceJpaObject implements ProjectionInterface
 	private WorkCompletedProperties properties;
 
 	public static final String merged_FIELDNAME = "merged";
-	@FieldDescribe("业务数据是否从item表中合并至data字段")
+	@FieldDescribe("合并数据")
 	@Column(name = ColumnNamePrefix + merged_FIELDNAME)
 	@Index(name = TABLE + IndexNameMiddle + merged_FIELDNAME)
 	@CheckPersist(allowEmpty = true)
@@ -1047,6 +1042,10 @@ public class WorkCompleted extends SliceJpaObject implements ProjectionInterface
 		this.timeValue02 = timeValue02;
 	}
 
+	public Boolean getMerged() {
+		return merged;
+	}
+
 	public void setMerged(Boolean merged) {
 		this.merged = merged;
 	}

+ 33 - 0
o2server/x_processplatform_core_entity/src/main/java/com/x/processplatform/core/entity/content/WorkCompletedProperties.java

@@ -9,6 +9,15 @@ import com.x.processplatform.core.entity.element.Form;
 
 public class WorkCompletedProperties extends JsonProperties {
 
+	@FieldDescribe("合并已办对象")
+	private List<TaskCompleted> taskCompletedList = new ArrayList<>();
+
+	@FieldDescribe("合并已阅对象")
+	private List<ReadCompleted> readCompletedList = new ArrayList<>();
+
+	@FieldDescribe("合并参阅对象")
+	private List<Review> reviewList = new ArrayList<>();
+
 	@FieldDescribe("合并记录对象")
 	private List<Record> recordList = new ArrayList<>();
 
@@ -108,6 +117,30 @@ public class WorkCompletedProperties extends JsonProperties {
 		this.mobileRelatedScriptList = mobileRelatedScriptList;
 	}
 
+	public List<TaskCompleted> getTaskCompletedList() {
+		return taskCompletedList;
+	}
+
+	public void setTaskCompletedList(List<TaskCompleted> taskCompletedList) {
+		this.taskCompletedList = taskCompletedList;
+	}
+
+	public List<ReadCompleted> getReadCompletedList() {
+		return readCompletedList;
+	}
+
+	public void setReadCompletedList(List<ReadCompleted> readCompletedList) {
+		this.readCompletedList = readCompletedList;
+	}
+
+	public List<Review> getReviewList() {
+		return reviewList;
+	}
+
+	public void setReviewList(List<Review> reviewList) {
+		this.reviewList = reviewList;
+	}
+
 	public static class Script {
 
 		public static final String TYPE_PROCESSPLATFORM = "processPlatform";

+ 5 - 5
o2server/x_processplatform_service_processing/src/main/java/com/x/processplatform/service/processing/ThisApplication.java

@@ -1,5 +1,7 @@
 package com.x.processplatform.service.processing;
 
+import org.apache.commons.lang3.BooleanUtils;
+
 import com.x.base.core.project.Context;
 import com.x.base.core.project.cache.CacheManager;
 import com.x.base.core.project.config.Config;
@@ -8,17 +10,15 @@ import com.x.base.core.project.message.MessageConnector;
 import com.x.processplatform.service.processing.processor.embed.SyncEmbedQueue;
 import com.x.processplatform.service.processing.processor.invoke.SyncJaxrsInvokeQueue;
 import com.x.processplatform.service.processing.processor.invoke.SyncJaxwsInvokeQueue;
-import com.x.processplatform.service.processing.schedule.Combine;
 import com.x.processplatform.service.processing.schedule.DeleteDraft;
 import com.x.processplatform.service.processing.schedule.Expire;
 import com.x.processplatform.service.processing.schedule.LogLongDetained;
+import com.x.processplatform.service.processing.schedule.Merge;
 import com.x.processplatform.service.processing.schedule.PassExpired;
 import com.x.processplatform.service.processing.schedule.TouchDelay;
 import com.x.processplatform.service.processing.schedule.TouchDetained;
 import com.x.processplatform.service.processing.schedule.Urge;
 
-import org.apache.commons.lang3.BooleanUtils;
-
 public class ThisApplication {
 
 	private ThisApplication() {
@@ -51,8 +51,8 @@ public class ThisApplication {
 			context().startQueue(syncJaxrsInvokeQueue);
 			context().startQueue(syncJaxwsInvokeQueue);
 			context().startQueue(syncEmbedQueue);
-			if (BooleanUtils.isTrue(Config.processPlatform().getCombine().getEnable())) {
-				context.schedule(Combine.class, Config.processPlatform().getCombine().getCron());
+			if (BooleanUtils.isTrue(Config.processPlatform().getMerge().getEnable())) {
+				context.schedule(Merge.class, Config.processPlatform().getMerge().getCron());
 			}
 			if (BooleanUtils.isTrue(Config.processPlatform().getDeleteDraft().getEnable())) {
 				context.schedule(DeleteDraft.class, Config.processPlatform().getDeleteDraft().getCron());

+ 9 - 8
o2server/x_processplatform_service_processing/src/main/java/com/x/processplatform/service/processing/jaxrs/data/ActionUpdateWithWorkCompletedPrimitivePath0.java

@@ -5,7 +5,6 @@ import java.util.concurrent.Callable;
 
 import org.apache.commons.lang3.BooleanUtils;
 
-import com.google.gson.Gson;
 import com.x.base.core.container.EntityManagerContainer;
 import com.x.base.core.container.factory.EntityManagerContainerFactory;
 import com.x.base.core.entity.dataitem.ItemPrimitiveType;
@@ -26,7 +25,7 @@ import com.x.query.core.entity.Item;
 class ActionUpdateWithWorkCompletedPrimitivePath0 extends BaseAction {
 	/*
 	 * 更新workCompletedPath0 基本类型数据
-	 * */
+	 */
 
 	@ActionLogger
 	private static Logger logger = LoggerFactory.getLogger(ActionUpdateWithWorkCompletedPrimitivePath0.class);
@@ -38,7 +37,8 @@ class ActionUpdateWithWorkCompletedPrimitivePath0 extends BaseAction {
 		String executorSeed = null;
 
 		try (EntityManagerContainer emc = EntityManagerContainerFactory.instance().create()) {
-			WorkCompleted workCompleted = emc.fetch(id, WorkCompleted.class, ListTools.toList(WorkCompleted.job_FIELDNAME));
+			WorkCompleted workCompleted = emc.fetch(id, WorkCompleted.class,
+					ListTools.toList(WorkCompleted.job_FIELDNAME));
 			if (null == workCompleted) {
 				throw new ExceptionEntityNotExist(id, WorkCompleted.class);
 			}
@@ -63,25 +63,26 @@ class ActionUpdateWithWorkCompletedPrimitivePath0 extends BaseAction {
 
 					if (1 == exists.size()) {
 						Item existsItem = exists.get(0);
-						if (existsItem.getItemType().equals(ItemType.p) || existsItem.getItemType().equals(ItemType.n)) {
+						if (existsItem.getItemType().equals(ItemType.p)
+								|| existsItem.getItemType().equals(ItemType.n)) {
 
 							if (existsItem.getItemPrimitiveType().equals(ItemPrimitiveType.s)) {
-								//字符
+								// 字符
 								existsItem.setStringShortValue(val);
 							}
 
 							if (existsItem.getItemPrimitiveType().equals(ItemPrimitiveType.b)) {
-								//Boolean
+								// Boolean
 								existsItem.setBooleanValue(Boolean.parseBoolean(val));
 							}
 
 							if (existsItem.getItemPrimitiveType().equals(ItemPrimitiveType.n)) {
-								//number
+								// number
 								existsItem.setNumberValue(Double.parseDouble(val));
 							}
 
 							if (existsItem.getItemPrimitiveType().equals(ItemPrimitiveType.u)) {
-								//这是啥?问狗哥去吧。
+								// 这是啥?问狗哥去吧。
 								existsItem.setStringShortValue(val);
 							}
 							business.entityManagerContainer().beginTransaction(Item.class);

+ 2 - 2
o2server/x_processplatform_service_processing/src/main/java/com/x/processplatform/service/processing/jaxrs/test/ActionCombine.java

@@ -6,14 +6,14 @@ import com.x.base.core.project.http.ActionResult;
 import com.x.base.core.project.http.EffectivePerson;
 import com.x.base.core.project.jaxrs.WrapBoolean;
 import com.x.processplatform.service.processing.ThisApplication;
-import com.x.processplatform.service.processing.schedule.Combine;
+import com.x.processplatform.service.processing.schedule.Merge;
 
 class ActionCombine extends BaseAction {
 
 	ActionResult<Wo> execute(EffectivePerson effectivePerson) throws Exception {
 		try (EntityManagerContainer emc = EntityManagerContainerFactory.instance().create()) {
 			ActionResult<Wo> result = new ActionResult<>();
-			ThisApplication.context().scheduleLocal(Combine.class, 1);
+			ThisApplication.context().scheduleLocal(Merge.class, 1);
 			Wo wo = new Wo();
 			wo.setValue(true);
 			result.setData(wo);

+ 54 - 13
o2server/x_processplatform_service_processing/src/main/java/com/x/processplatform/service/processing/jaxrs/workcompleted/ActionCombine.java

@@ -5,6 +5,7 @@ import java.util.Comparator;
 import java.util.Date;
 import java.util.List;
 import java.util.concurrent.Callable;
+import java.util.stream.Collectors;
 
 import com.google.gson.JsonElement;
 import com.x.base.core.container.EntityManagerContainer;
@@ -22,7 +23,10 @@ import com.x.base.core.project.logger.LoggerFactory;
 import com.x.base.core.project.tools.ListTools;
 import com.x.processplatform.core.entity.content.Data;
 import com.x.processplatform.core.entity.content.DocumentVersion;
+import com.x.processplatform.core.entity.content.ReadCompleted;
 import com.x.processplatform.core.entity.content.Record;
+import com.x.processplatform.core.entity.content.Review;
+import com.x.processplatform.core.entity.content.TaskCompleted;
 import com.x.processplatform.core.entity.content.WorkCompleted;
 import com.x.processplatform.core.entity.content.WorkLog;
 import com.x.processplatform.service.processing.Business;
@@ -66,14 +70,17 @@ class ActionCombine extends BaseAction {
 				workCompleted = emc.find(id, WorkCompleted.class);
 				Business business = new Business(emc);
 				if (null != workCompleted) {
-					emc.beginTransaction(WorkCompleted.class);
-					List<Item> items = mergeItem(business, workCompleted);
-					List<WorkLog> workLogs = mergeWorkLog(business, workCompleted);
-					List<Record> records = mergeRecord(business, workCompleted);
 					List<DocumentVersion> documentVersions = listDocumentVersion(business, workCompleted);
+					List<Item> items = combineItem(business, workCompleted);
+					List<TaskCompleted> taskCompleteds = combineTaskCompleted(business, workCompleted);
+					List<ReadCompleted> readCompleteds = combineReadCompleted(business, workCompleted);
+					List<Review> reviews = combineReview(business, workCompleted);
+					List<WorkLog> workLogs = combineWorkLog(business, workCompleted);
+					List<Record> records = combineRecord(business, workCompleted);
+					emc.beginTransaction(WorkCompleted.class);
 					workCompleted.setMerged(true);
 					emc.commit();
-					this.remove(business, items, workLogs, records,documentVersions);
+					this.remove(business, items, workLogs, records, documentVersions);
 					logger.print("已完成工作合并, id: {}, title:{}, sequence:{}.", workCompleted.getId(),
 							workCompleted.getTitle(), workCompleted.getSequence());
 				}
@@ -87,8 +94,8 @@ class ActionCombine extends BaseAction {
 			return result;
 		}
 
-		private void remove(Business business, List<Item> items, List<WorkLog> workLogs, List<Record> records,List<DocumentVersion> documentVersions)
-				throws Exception {
+		private void remove(Business business, List<Item> items, List<WorkLog> workLogs, List<Record> records,
+				List<DocumentVersion> documentVersions) throws Exception {
 			EntityManagerContainer emc = business.entityManagerContainer();
 			if (!items.isEmpty()) {
 				emc.beginTransaction(Item.class);
@@ -108,7 +115,7 @@ class ActionCombine extends BaseAction {
 					emc.remove(o, CheckRemoveType.all);
 				}
 			}
-	
+
 			if (!documentVersions.isEmpty()) {
 				emc.beginTransaction(DocumentVersion.class);
 				for (DocumentVersion o : documentVersions) {
@@ -118,12 +125,45 @@ class ActionCombine extends BaseAction {
 			emc.commit();
 		}
 
-		private List<DocumentVersion> listDocumentVersion(Business business, WorkCompleted workCompleted) throws Exception {
-			return  business.entityManagerContainer().listEqual(DocumentVersion.class, DocumentVersion.job_FIELDNAME,
+		private List<TaskCompleted> combineTaskCompleted(Business business, WorkCompleted workCompleted)
+				throws Exception {
+			List<TaskCompleted> list = business.entityManagerContainer().listEqual(TaskCompleted.class,
+					TaskCompleted.job_FIELDNAME, workCompleted.getJob());
+			list = list.stream()
+					.sorted(Comparator.comparing(TaskCompleted::getCreateTime, Comparator.nullsLast(Date::compareTo)))
+					.collect(Collectors.toList());
+			workCompleted.getProperties().setTaskCompletedList(list);
+			return list;
+		}
+
+		private List<ReadCompleted> combineReadCompleted(Business business, WorkCompleted workCompleted)
+				throws Exception {
+			List<ReadCompleted> list = business.entityManagerContainer().listEqual(ReadCompleted.class,
+					ReadCompleted.job_FIELDNAME, workCompleted.getJob());
+			list = list.stream()
+					.sorted(Comparator.comparing(ReadCompleted::getCreateTime, Comparator.nullsLast(Date::compareTo)))
+					.collect(Collectors.toList());
+			workCompleted.getProperties().setReadCompletedList(list);
+			return list;
+		}
+
+		private List<Review> combineReview(Business business, WorkCompleted workCompleted) throws Exception {
+			List<Review> list = business.entityManagerContainer().listEqual(Review.class, Review.job_FIELDNAME,
 					workCompleted.getJob());
+			list = list.stream()
+					.sorted(Comparator.comparing(Review::getCreateTime, Comparator.nullsLast(Date::compareTo)))
+					.collect(Collectors.toList());
+			workCompleted.getProperties().setReviewList(list);
+			return list;
 		}
 
-		private List<Item> mergeItem(Business business, WorkCompleted workCompleted) throws Exception {
+		private List<DocumentVersion> listDocumentVersion(Business business, WorkCompleted workCompleted)
+				throws Exception {
+			return business.entityManagerContainer().listEqual(DocumentVersion.class, DocumentVersion.job_FIELDNAME,
+					workCompleted.getJob());
+		}
+
+		private List<Item> combineItem(Business business, WorkCompleted workCompleted) throws Exception {
 			List<Item> list = business.entityManagerContainer().listEqualAndEqual(Item.class, Item.bundle_FIELDNAME,
 					workCompleted.getJob(), Item.itemCategory_FIELDNAME, ItemCategory.pp);
 			DataItemConverter<Item> converter = new DataItemConverter<Item>(Item.class);
@@ -132,7 +172,7 @@ class ActionCombine extends BaseAction {
 			return list;
 		}
 
-		private List<Record> mergeRecord(Business business, WorkCompleted workCompleted) throws Exception {
+		private List<Record> combineRecord(Business business, WorkCompleted workCompleted) throws Exception {
 			List<Record> list = business.entityManagerContainer().listEqual(Record.class, Record.job_FIELDNAME,
 					workCompleted.getJob());
 			Collections.sort(list, Comparator.comparing(Record::getOrder, Comparator.nullsLast(Long::compareTo)));
@@ -140,13 +180,14 @@ class ActionCombine extends BaseAction {
 			return list;
 		}
 
-		private List<WorkLog> mergeWorkLog(Business business, WorkCompleted workCompleted) throws Exception {
+		private List<WorkLog> combineWorkLog(Business business, WorkCompleted workCompleted) throws Exception {
 			List<WorkLog> list = business.entityManagerContainer().listEqual(WorkLog.class, WorkCompleted.job_FIELDNAME,
 					workCompleted.getJob());
 			Collections.sort(list, Comparator.comparing(WorkLog::getCreateTime, Comparator.nullsLast(Date::compareTo)));
 			workCompleted.getProperties().setWorkLogList(list);
 			return list;
 		}
+
 	}
 
 }

+ 7 - 7
o2server/x_processplatform_service_processing/src/main/java/com/x/processplatform/service/processing/schedule/Combine.java → o2server/x_processplatform_service_processing/src/main/java/com/x/processplatform/service/processing/schedule/Merge.java

@@ -13,6 +13,10 @@ import javax.persistence.criteria.Path;
 import javax.persistence.criteria.Predicate;
 import javax.persistence.criteria.Root;
 
+import org.apache.commons.lang3.time.DateUtils;
+import org.quartz.JobExecutionContext;
+import org.quartz.JobExecutionException;
+
 import com.x.base.core.container.EntityManagerContainer;
 import com.x.base.core.container.factory.EntityManagerContainerFactory;
 import com.x.base.core.entity.JpaObject_;
@@ -28,15 +32,11 @@ import com.x.processplatform.core.entity.content.WorkCompleted;
 import com.x.processplatform.core.entity.content.WorkCompleted_;
 import com.x.processplatform.service.processing.ThisApplication;
 
-import org.apache.commons.lang3.time.DateUtils;
-import org.quartz.JobExecutionContext;
-import org.quartz.JobExecutionException;
-
 import fr.opensagres.poi.xwpf.converter.core.utils.StringUtils;
 
-public class Combine extends AbstractJob {
+public class Merge extends AbstractJob {
 
-	private static Logger logger = LoggerFactory.getLogger(Combine.class);
+	private static Logger logger = LoggerFactory.getLogger(Merge.class);
 
 	@Override
 	public void schedule(JobExecutionContext jobExecutionContext) throws Exception {
@@ -78,7 +78,7 @@ public class Combine extends AbstractJob {
 
 	private List<WorkCompleted> list(EntityManagerContainer emc, String sequence) throws Exception {
 		Date date = new Date();
-		date = DateUtils.addDays(date, 0 - Config.processPlatform().getCombine().getThresholdDays());
+		date = DateUtils.addDays(date, 0 - Config.processPlatform().getMerge().getThresholdDays());
 		EntityManager em = emc.get(WorkCompleted.class);
 		CriteriaBuilder cb = em.getCriteriaBuilder();
 		CriteriaQuery<Tuple> cq = cb.createQuery(Tuple.class);