zhourui 5 лет назад
Родитель
Сommit
01c0507a60
14 измененных файлов с 367 добавлено и 110 удалено
  1. 72 0
      o2server/x_processplatform_assemble_surface/src/main/java/com/x/processplatform/assemble/surface/jaxrs/record/ActionManageCreateWithJob.java
  2. 48 0
      o2server/x_processplatform_assemble_surface/src/main/java/com/x/processplatform/assemble/surface/jaxrs/record/ActionManageDelete.java
  3. 69 0
      o2server/x_processplatform_assemble_surface/src/main/java/com/x/processplatform/assemble/surface/jaxrs/record/ActionManageEdit.java
  4. 64 10
      o2server/x_processplatform_assemble_surface/src/main/java/com/x/processplatform/assemble/surface/jaxrs/record/RecordAction.java
  5. 11 20
      o2server/x_processplatform_assemble_surface/src/main/java/com/x/processplatform/assemble/surface/jaxrs/task/ActionManageDelete.java
  6. 4 4
      o2server/x_processplatform_assemble_surface/src/main/java/com/x/processplatform/assemble/surface/jaxrs/task/ActionManageOpinion.java
  7. 13 16
      o2server/x_processplatform_assemble_surface/src/main/java/com/x/processplatform/assemble/surface/jaxrs/task/ActionManagePress.java
  8. 13 13
      o2server/x_processplatform_assemble_surface/src/main/java/com/x/processplatform/assemble/surface/jaxrs/task/ActionManageProcessing.java
  9. 16 15
      o2server/x_processplatform_assemble_surface/src/main/java/com/x/processplatform/assemble/surface/jaxrs/task/ActionManageReset.java
  10. 18 13
      o2server/x_processplatform_service_processing/src/main/java/com/x/processplatform/service/processing/jaxrs/record/ActionCreateWithJob.java
  11. 3 1
      o2server/x_processplatform_service_processing/src/main/java/com/x/processplatform/service/processing/jaxrs/record/ActionEdit.java
  12. 2 0
      o2server/x_processplatform_service_processing/src/main/java/com/x/processplatform/service/processing/processor/cancel/CancelProcessor.java
  13. 11 1
      o2server/x_processplatform_service_processing/src/main/java/com/x/processplatform/service/processing/processor/end/AbstractEndProcessor.java
  14. 23 17
      o2server/x_processplatform_service_processing/src/main/java/com/x/processplatform/service/processing/processor/end/EndProcessor.java

+ 72 - 0
o2server/x_processplatform_assemble_surface/src/main/java/com/x/processplatform/assemble/surface/jaxrs/record/ActionManageCreateWithJob.java

@@ -0,0 +1,72 @@
+package com.x.processplatform.assemble.surface.jaxrs.record;
+
+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.Applications;
+import com.x.base.core.project.x_processplatform_service_processing;
+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.http.ActionResult;
+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.processplatform.assemble.surface.Business;
+import com.x.processplatform.assemble.surface.ThisApplication;
+import com.x.processplatform.core.entity.content.Record;
+import com.x.processplatform.core.entity.content.Work;
+import com.x.processplatform.core.entity.content.WorkCompleted;
+import com.x.processplatform.core.entity.element.Application;
+import com.x.processplatform.core.entity.element.Process;
+
+import org.apache.commons.lang3.BooleanUtils;
+
+class ActionManageCreateWithJob extends BaseAction {
+
+	private static Logger logger = LoggerFactory.getLogger(ActionManageCreateWithJob.class);
+
+	ActionResult<Wo> execute(EffectivePerson effectivePerson, String job, JsonElement jsonElement) throws Exception {
+
+		ActionResult<Wo> result = new ActionResult<>();
+		Wi wi = null;
+		try (EntityManagerContainer emc = EntityManagerContainerFactory.instance().create()) {
+			wi = this.convertToWrapIn(jsonElement, Wi.class);
+			if ((emc.countEqual(Work.class, Work.job_FIELDNAME, job) == 0)
+					&& (emc.countEqual(WorkCompleted.class, WorkCompleted.job_FIELDNAME, job) == 0)) {
+				throw new ExceptionEntityNotExist(job, "job");
+			}
+			Business business = new Business(emc);
+			Application application = business.application().pick(wi.getApplication());
+			Process process = business.process().pick(wi.getProcess());
+			// 需要对这个应用的管理权限
+			if (BooleanUtils.isFalse(business.canManageApplicationOrProcess(effectivePerson, application, process))) {
+				throw new ExceptionAccessDenied(effectivePerson);
+			}
+		}
+		WoId resp = ThisApplication.context().applications()
+				.postQuery(x_processplatform_service_processing.class, Applications.joinQueryUri("job", job), wi, job)
+				.getData(WoId.class);
+		Wo wo = new Wo();
+		wo.setId(resp.getId());
+		result.setData(wo);
+		return result;
+	}
+
+	public static class Wi extends Record {
+
+		private static final long serialVersionUID = 4179509440650818001L;
+
+		static WrapCopier<Wi, Record> copier = WrapCopierFactory.wi(Wi.class, Record.class, null,
+				JpaObject.FieldsUnmodify);
+
+	}
+
+	public static class Wo extends WoId {
+
+	}
+
+}

+ 48 - 0
o2server/x_processplatform_assemble_surface/src/main/java/com/x/processplatform/assemble/surface/jaxrs/record/ActionManageDelete.java

@@ -0,0 +1,48 @@
+package com.x.processplatform.assemble.surface.jaxrs.record;
+
+import com.x.base.core.container.EntityManagerContainer;
+import com.x.base.core.container.factory.EntityManagerContainerFactory;
+import com.x.base.core.project.Applications;
+import com.x.base.core.project.x_processplatform_service_processing;
+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.jaxrs.WoId;
+import com.x.processplatform.assemble.surface.Business;
+import com.x.processplatform.assemble.surface.ThisApplication;
+import com.x.processplatform.core.entity.content.Record;
+import com.x.processplatform.core.entity.element.Application;
+import com.x.processplatform.core.entity.element.Process;
+
+import org.apache.commons.lang3.BooleanUtils;
+
+class ActionManageDelete extends BaseAction {
+
+	ActionResult<Wo> execute(EffectivePerson effectivePerson, String id) throws Exception {
+		Record record = null;
+		ActionResult<Wo> result = new ActionResult<>();
+		try (EntityManagerContainer emc = EntityManagerContainerFactory.instance().create()) {
+			Business business = new Business(emc);
+			record = emc.find(id, Record.class);
+			if (null == record) {
+				throw new ExceptionEntityNotExist(id, Record.class);
+			}
+			Application application = business.application().pick(record.getApplication());
+			Process process = business.process().pick(record.getProcess());
+			// 需要对这个应用的管理权限
+			if (BooleanUtils.isFalse(business.canManageApplicationOrProcess(effectivePerson, application, process))) {
+				throw new ExceptionAccessDenied(effectivePerson);
+			}
+		}
+		WoId resp = ThisApplication.context().applications().deleteQuery(x_processplatform_service_processing.class,
+				Applications.joinQueryUri("record", record.getId()), record.getJob()).getData(WoId.class);
+		Wo wo = new Wo();
+		wo.setId(resp.getId());
+		result.setData(wo);
+		return result;
+	}
+
+	public static class Wo extends WoId {
+	}
+}

+ 69 - 0
o2server/x_processplatform_assemble_surface/src/main/java/com/x/processplatform/assemble/surface/jaxrs/record/ActionManageEdit.java

@@ -0,0 +1,69 @@
+package com.x.processplatform.assemble.surface.jaxrs.record;
+
+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.Applications;
+import com.x.base.core.project.x_processplatform_service_processing;
+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.http.ActionResult;
+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.processplatform.assemble.surface.Business;
+import com.x.processplatform.assemble.surface.ThisApplication;
+import com.x.processplatform.core.entity.content.Record;
+import com.x.processplatform.core.entity.element.Application;
+import com.x.processplatform.core.entity.element.Process;
+
+import org.apache.commons.lang3.BooleanUtils;
+
+class ActionManageEdit extends BaseAction {
+
+	private static Logger logger = LoggerFactory.getLogger(ActionManageEdit.class);
+
+	ActionResult<Wo> execute(EffectivePerson effectivePerson, String id, JsonElement jsonElement) throws Exception {
+		Record record = null;
+		ActionResult<Wo> result = new ActionResult<>();
+		Wi wi = null;
+		try (EntityManagerContainer emc = EntityManagerContainerFactory.instance().create()) {
+			wi = this.convertToWrapIn(jsonElement, Wi.class);
+			Business business = new Business(emc);
+			record = emc.find(id, Record.class);
+			if (null == record) {
+				throw new ExceptionEntityNotExist(id, Record.class);
+			}
+			Application application = business.application().pick(record.getApplication());
+			Process process = business.process().pick(record.getProcess());
+			// 需要对这个应用的管理权限
+			if (BooleanUtils.isFalse(business.canManageApplicationOrProcess(effectivePerson, application, process))) {
+				throw new ExceptionAccessDenied(effectivePerson);
+			}
+		}
+		WoId resp = ThisApplication.context().applications().putQuery(x_processplatform_service_processing.class,
+				Applications.joinQueryUri("record", record.getId()), wi, record.getJob()).getData(WoId.class);
+		Wo wo = new Wo();
+		wo.setId(resp.getId());
+		result.setData(wo);
+		return result;
+	}
+
+	public static class Wi extends Record {
+
+		private static final long serialVersionUID = 4179509440650818001L;
+
+		static WrapCopier<Wi, Record> copier = WrapCopierFactory.wi(Wi.class, Record.class, null,
+				JpaObject.FieldsUnmodify);
+
+	}
+
+	public static class Wo extends WoId {
+
+	}
+
+}

+ 64 - 10
o2server/x_processplatform_assemble_surface/src/main/java/com/x/processplatform/assemble/surface/jaxrs/record/RecordAction.java

@@ -4,7 +4,10 @@ import java.util.List;
 
 import javax.servlet.http.HttpServletRequest;
 import javax.ws.rs.Consumes;
+import javax.ws.rs.DELETE;
 import javax.ws.rs.GET;
+import javax.ws.rs.POST;
+import javax.ws.rs.PUT;
 import javax.ws.rs.Path;
 import javax.ws.rs.PathParam;
 import javax.ws.rs.Produces;
@@ -13,6 +16,7 @@ import javax.ws.rs.container.Suspended;
 import javax.ws.rs.core.Context;
 import javax.ws.rs.core.MediaType;
 
+import com.google.gson.JsonElement;
 import com.x.base.core.project.annotation.JaxrsDescribe;
 import com.x.base.core.project.annotation.JaxrsMethodDescribe;
 import com.x.base.core.project.annotation.JaxrsParameterDescribe;
@@ -76,9 +80,8 @@ public class RecordAction extends StandardJaxrsAction {
 	@Path("list/job/{job}")
 	@Produces(HttpMediaType.APPLICATION_JSON_UTF_8)
 	@Consumes(MediaType.APPLICATION_JSON)
-	public void listWithJob(@Suspended final AsyncResponse asyncResponse,
-											@Context HttpServletRequest request,
-											@JaxrsParameterDescribe("工作的job") @PathParam("job") String job) {
+	public void listWithJob(@Suspended final AsyncResponse asyncResponse, @Context HttpServletRequest request,
+			@JaxrsParameterDescribe("工作的job") @PathParam("job") String job) {
 		ActionResult<List<ActionListWithJob.Wo>> result = new ActionResult<>();
 		EffectivePerson effectivePerson = this.effectivePerson(request);
 		try {
@@ -95,16 +98,32 @@ public class RecordAction extends StandardJaxrsAction {
 	@Path("list/job/{job}/paging/{page}/size/{size}")
 	@Produces(HttpMediaType.APPLICATION_JSON_UTF_8)
 	@Consumes(MediaType.APPLICATION_JSON)
-	public void listWithJobPaging(@Suspended final AsyncResponse asyncResponse,
-												  @Context HttpServletRequest request,
-												  @JaxrsParameterDescribe("工作的job") @PathParam("job") String job,
-												  @JaxrsParameterDescribe("分页") @PathParam("page") Integer page,
-												  @JaxrsParameterDescribe("数量") @PathParam("size") Integer size) {
+	public void listWithJobPaging(@Suspended final AsyncResponse asyncResponse, @Context HttpServletRequest request,
+			@JaxrsParameterDescribe("工作的job") @PathParam("job") String job,
+			@JaxrsParameterDescribe("分页") @PathParam("page") Integer page,
+			@JaxrsParameterDescribe("数量") @PathParam("size") Integer size) {
 		ActionResult<List<ActionListWithJobPaging.Wo>> result = new ActionResult<>();
 		EffectivePerson effectivePerson = this.effectivePerson(request);
 		try {
-			result = new ActionListWithJobPaging().execute(effectivePerson, job, page,
-					size);
+			result = new ActionListWithJobPaging().execute(effectivePerson, job, page, size);
+		} catch (Exception e) {
+			logger.error(e, effectivePerson, request, null);
+			result.error(e);
+		}
+		asyncResponse.resume(ResponseFactory.getEntityTagActionResultResponse(request, result));
+	}
+
+	@JaxrsMethodDescribe(value = "管理删除记录.", action = ActionManageDelete.class)
+	@DELETE
+	@Path("{id}/manage")
+	@Produces(HttpMediaType.APPLICATION_JSON_UTF_8)
+	@Consumes(MediaType.APPLICATION_JSON)
+	public void manageDelete(@Suspended final AsyncResponse asyncResponse, @Context HttpServletRequest request,
+			@JaxrsParameterDescribe("标识") @PathParam("id") String id) {
+		ActionResult<ActionManageDelete.Wo> result = new ActionResult<>();
+		EffectivePerson effectivePerson = this.effectivePerson(request);
+		try {
+			result = new ActionManageDelete().execute(effectivePerson, id);
 		} catch (Exception e) {
 			logger.error(e, effectivePerson, request, null);
 			result.error(e);
@@ -112,4 +131,39 @@ public class RecordAction extends StandardJaxrsAction {
 		asyncResponse.resume(ResponseFactory.getEntityTagActionResultResponse(request, result));
 	}
 
+	@JaxrsMethodDescribe(value = "管理根据job创建记录.", action = ActionManageCreateWithJob.class)
+	@POST
+	@Path("job/{job}/manage")
+	@Produces(HttpMediaType.APPLICATION_JSON_UTF_8)
+	@Consumes(MediaType.APPLICATION_JSON)
+	public void manageCreateWithJob(@Suspended final AsyncResponse asyncResponse, @Context HttpServletRequest request,
+			@JaxrsParameterDescribe("标识") @PathParam("job") String job, JsonElement jsonElement) {
+		ActionResult<ActionManageCreateWithJob.Wo> result = new ActionResult<>();
+		EffectivePerson effectivePerson = this.effectivePerson(request);
+		try {
+			result = new ActionManageCreateWithJob().execute(effectivePerson, job, jsonElement);
+		} catch (Exception e) {
+			logger.error(e, effectivePerson, request, null);
+			result.error(e);
+		}
+		asyncResponse.resume(ResponseFactory.getEntityTagActionResultResponse(request, result));
+	}
+
+	@JaxrsMethodDescribe(value = "管理修改记录.", action = ActionManageEdit.class)
+	@PUT
+	@Path("{id}/manage")
+	@Produces(HttpMediaType.APPLICATION_JSON_UTF_8)
+	@Consumes(MediaType.APPLICATION_JSON)
+	public void manageEdit(@Suspended final AsyncResponse asyncResponse, @Context HttpServletRequest request,
+			@JaxrsParameterDescribe("标识") @PathParam("id") String id, JsonElement jsonElement) {
+		ActionResult<ActionManageEdit.Wo> result = new ActionResult<>();
+		EffectivePerson effectivePerson = this.effectivePerson(request);
+		try {
+			result = new ActionManageEdit().execute(effectivePerson, id, jsonElement);
+		} catch (Exception e) {
+			logger.error(e, effectivePerson, request, null);
+			result.error(e);
+		}
+		asyncResponse.resume(ResponseFactory.getEntityTagActionResultResponse(request, result));
+	}
 }

+ 11 - 20
o2server/x_processplatform_assemble_surface/src/main/java/com/x/processplatform/assemble/surface/jaxrs/task/ActionManageDelete.java

@@ -1,16 +1,14 @@
 package com.x.processplatform.assemble.surface.jaxrs.task;
 
-import java.net.URLEncoder;
-
 import com.x.base.core.container.EntityManagerContainer;
 import com.x.base.core.container.factory.EntityManagerContainerFactory;
+import com.x.base.core.project.Applications;
 import com.x.base.core.project.x_processplatform_service_processing;
 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.jaxrs.WoId;
-import com.x.base.core.project.tools.DefaultCharset;
 import com.x.processplatform.assemble.surface.Business;
 import com.x.processplatform.assemble.surface.ThisApplication;
 import com.x.processplatform.core.entity.content.Task;
@@ -20,34 +18,27 @@ import com.x.processplatform.core.entity.element.Process;
 class ActionManageDelete extends BaseAction {
 
 	ActionResult<Wo> execute(EffectivePerson effectivePerson, String id) throws Exception {
+		Task task = null;
+		ActionResult<Wo> result = new ActionResult<>();
 		try (EntityManagerContainer emc = EntityManagerContainerFactory.instance().create()) {
-			ActionResult<Wo> result = new ActionResult<>();
 			Business business = new Business(emc);
-			Task task = emc.find(id, Task.class);
+			task = emc.find(id, Task.class);
 			if (null == task) {
-				throw new ExceptionEntityNotExist(id,Task.class);
+				throw new ExceptionEntityNotExist(id, Task.class);
 			}
 			Application application = business.application().pick(task.getApplication());
-			if (null == application) {
-				throw new ExceptionEntityNotExist(task.getApplication(), Application.class);
-			}
 			Process process = business.process().pick(task.getProcess());
-			// if (!StringUtils.equals(task.getApplication(),
-			// application.getId())) {
-			// throw new ApplicationNotMatchException(application.getId(),
-			// task.getApplication());
-			// }
 			// 需要对这个应用的管理权限
 			if (!business.canManageApplicationOrProcess(effectivePerson, application, process)) {
 				throw new ExceptionAccessDenied(effectivePerson);
 			}
-			ThisApplication.context().applications().deleteQuery(x_processplatform_service_processing.class,
-					"task/" + URLEncoder.encode(task.getId(), DefaultCharset.name));
-			Wo wo = new Wo();
-			wo.setId(task.getId());
-			result.setData(wo);
-			return result;
 		}
+		ThisApplication.context().applications().deleteQuery(x_processplatform_service_processing.class,
+				Applications.joinQueryUri("task", task.getId()), task.getJob());
+		Wo wo = new Wo();
+		wo.setId(task.getId());
+		result.setData(wo);
+		return result;
 	}
 
 	public static class Wo extends WoId {

+ 4 - 4
o2server/x_processplatform_assemble_surface/src/main/java/com/x/processplatform/assemble/surface/jaxrs/task/ActionManageOpinion.java

@@ -1,10 +1,11 @@
 package com.x.processplatform.assemble.surface.jaxrs.task;
 
+import java.util.Objects;
+
 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.entity.annotation.CheckPersistType;
 import com.x.base.core.project.annotation.FieldDescribe;
 import com.x.base.core.project.exception.ExceptionAccessDenied;
 import com.x.base.core.project.exception.ExceptionEntityNotExist;
@@ -19,7 +20,7 @@ import com.x.processplatform.core.entity.content.Task;
 import com.x.processplatform.core.entity.element.Application;
 import com.x.processplatform.core.entity.element.Process;
 
-import java.util.Objects;
+import org.apache.commons.lang3.BooleanUtils;
 
 public class ActionManageOpinion extends BaseAction {
 
@@ -35,10 +36,9 @@ public class ActionManageOpinion extends BaseAction {
 			Process process = business.process().pick(task.getProcess());
 			Application application = business.application().pick(task.getApplication());
 			/* 需要对这个应用的管理权限 */
-			if (!business.canManageApplicationOrProcess(effectivePerson, application, process)) {
+			if (BooleanUtils.isFalse(business.canManageApplicationOrProcess(effectivePerson, application, process))) {
 				throw new ExceptionAccessDenied(effectivePerson);
 			}
-
 			emc.beginTransaction(Read.class);
 			if (StringTools.utf8Length(wi.getOpinion()) > JpaObject.length_255B) {
 				task.setOpinionLob(wi.getOpinion());

+ 13 - 16
o2server/x_processplatform_assemble_surface/src/main/java/com/x/processplatform/assemble/surface/jaxrs/task/ActionManagePress.java

@@ -3,47 +3,44 @@ package com.x.processplatform.assemble.surface.jaxrs.task;
 import com.x.base.core.container.EntityManagerContainer;
 import com.x.base.core.container.factory.EntityManagerContainerFactory;
 import com.x.base.core.project.Applications;
+import com.x.base.core.project.x_processplatform_service_processing;
 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.jaxrs.WoId;
-import com.x.base.core.project.tools.DefaultCharset;
-import com.x.base.core.project.x_processplatform_service_processing;
 import com.x.processplatform.assemble.surface.Business;
 import com.x.processplatform.assemble.surface.ThisApplication;
 import com.x.processplatform.core.entity.content.Task;
 import com.x.processplatform.core.entity.element.Application;
 import com.x.processplatform.core.entity.element.Process;
 
-import java.net.URLEncoder;
+import org.apache.commons.lang3.BooleanUtils;
 
 class ActionManagePress extends BaseAction {
 
 	ActionResult<Wo> execute(EffectivePerson effectivePerson, String id) throws Exception {
+		Task task = null;
+		ActionResult<Wo> result = new ActionResult<>();
 		try (EntityManagerContainer emc = EntityManagerContainerFactory.instance().create()) {
-			ActionResult<Wo> result = new ActionResult<>();
 			Business business = new Business(emc);
-			Task task = emc.find(id, Task.class);
+			task = emc.find(id, Task.class);
 			if (null == task) {
-				throw new ExceptionEntityNotExist(id,Task.class);
+				throw new ExceptionEntityNotExist(id, Task.class);
 			}
 			Application application = business.application().pick(task.getApplication());
-			if (null == application) {
-				throw new ExceptionEntityNotExist(task.getApplication(), Application.class);
-			}
 			Process process = business.process().pick(task.getProcess());
 			// 需要对这个应用的管理权限
-			if (!business.canManageApplicationOrProcess(effectivePerson, application, process)) {
+			if (BooleanUtils.isFalse(business.canManageApplicationOrProcess(effectivePerson, application, process))) {
 				throw new ExceptionAccessDenied(effectivePerson);
 			}
-			ThisApplication.context().applications().getQuery(x_processplatform_service_processing.class,
-					Applications.joinQueryUri("task", task.getId(), "press"));
-			Wo wo = new Wo();
-			wo.setId(task.getId());
-			result.setData(wo);
-			return result;
 		}
+		ThisApplication.context().applications().getQuery(x_processplatform_service_processing.class,
+				Applications.joinQueryUri("task", task.getId(), "press"), task.getJob());
+		Wo wo = new Wo();
+		wo.setId(task.getId());
+		result.setData(wo);
+		return result;
 	}
 
 	public static class Wo extends WoId {

+ 13 - 13
o2server/x_processplatform_assemble_surface/src/main/java/com/x/processplatform/assemble/surface/jaxrs/task/ActionManageProcessing.java

@@ -1,8 +1,5 @@
 package com.x.processplatform.assemble.surface.jaxrs.task;
 
-import com.x.processplatform.core.entity.element.Process;
-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;
@@ -17,14 +14,18 @@ import com.x.processplatform.assemble.surface.Business;
 import com.x.processplatform.assemble.surface.ThisApplication;
 import com.x.processplatform.core.entity.content.Task;
 import com.x.processplatform.core.entity.element.Application;
+import com.x.processplatform.core.entity.element.Process;
+
+import org.apache.commons.lang3.BooleanUtils;
+import org.apache.commons.lang3.StringUtils;
 
 class ActionManageProcessing extends BaseAction {
 
 	ActionResult<Wo> execute(EffectivePerson effectivePerson, String id, JsonElement jsonElement) throws Exception {
+		Task task = null;
+		ActionResult<Wo> result = new ActionResult<>();
 		try (EntityManagerContainer emc = EntityManagerContainerFactory.instance().create()) {
-			ActionResult<Wo> result = new ActionResult<>();
 			Wi wi = this.convertToWrapIn(jsonElement, Wi.class);
-			Task task = null;
 			Business business = new Business(emc);
 			task = emc.find(id, Task.class);
 			if (null == task) {
@@ -36,7 +37,7 @@ class ActionManageProcessing extends BaseAction {
 			}
 			Process process = business.process().pick(task.getProcess());
 			// 需要对这个应用的管理权限
-			if (!business.canManageApplicationOrProcess(effectivePerson, application, process)) {
+			if (BooleanUtils.isTrue(business.canManageApplicationOrProcess(effectivePerson, application, process))) {
 				throw new ExceptionAccessDenied(effectivePerson);
 			}
 			/* 如果有输入新的路由决策覆盖原有决策 */
@@ -48,14 +49,13 @@ class ActionManageProcessing extends BaseAction {
 				task.setOpinion(wi.getOpinion());
 			}
 			emc.commit();
-
-			ThisApplication.context().applications().putQuery(x_processplatform_service_processing.class,
-					Applications.joinQueryUri("task", task.getId(), "processing"), null);
-			Wo wo = new Wo();
-			wo.setId(task.getId());
-			result.setData(wo);
-			return result;
 		}
+		ThisApplication.context().applications().putQuery(x_processplatform_service_processing.class,
+				Applications.joinQueryUri("task", task.getId(), "processing"), null, task.getJob());
+		Wo wo = new Wo();
+		wo.setId(task.getId());
+		result.setData(wo);
+		return result;
 	}
 
 	public static class Wi extends Task {

+ 16 - 15
o2server/x_processplatform_assemble_surface/src/main/java/com/x/processplatform/assemble/surface/jaxrs/task/ActionManageReset.java

@@ -1,14 +1,11 @@
 package com.x.processplatform.assemble.surface.jaxrs.task;
 
-import java.net.URLEncoder;
 import java.util.List;
 
-import org.apache.commons.lang3.BooleanUtils;
-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.Applications;
 import com.x.base.core.project.x_processplatform_service_processing;
 import com.x.base.core.project.annotation.FieldDescribe;
 import com.x.base.core.project.exception.ExceptionAccessDenied;
@@ -17,23 +14,27 @@ 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.jaxrs.WoId;
-import com.x.base.core.project.tools.DefaultCharset;
 import com.x.processplatform.assemble.surface.Business;
 import com.x.processplatform.assemble.surface.ThisApplication;
 import com.x.processplatform.assemble.surface.WorkControl;
 import com.x.processplatform.core.entity.content.Task;
 
+import org.apache.commons.lang3.BooleanUtils;
+import org.apache.commons.lang3.StringUtils;
+
 class ActionManageReset extends BaseAction {
 
 	/** 将A的待办直接改为B的待办,转交 */
 	ActionResult<Wo> execute(EffectivePerson effectivePerson, String id, JsonElement jsonElement) throws Exception {
+		Task task = null;
+		ActionResult<Wo> result = new ActionResult<>();
+		Wi wi = null;
 		try (EntityManagerContainer emc = EntityManagerContainerFactory.instance().create()) {
-			ActionResult<Wo> result = new ActionResult<>();
-			Wi wi = this.convertToWrapIn(jsonElement, Wi.class);
+			wi = this.convertToWrapIn(jsonElement, Wi.class);
 			Business business = new Business(emc);
-			Task task = emc.find(id, Task.class);
+			task = emc.find(id, Task.class);
 			if (null == task) {
-				throw new ExceptionEntityNotExist(id,Task.class);
+				throw new ExceptionEntityNotExist(id, Task.class);
 			}
 			WoControl control = business.getControl(effectivePerson, task, WoControl.class);
 			if (BooleanUtils.isNotTrue(control.getAllowReset())) {
@@ -55,13 +56,13 @@ class ActionManageReset extends BaseAction {
 				task.setOpinion(wi.getOpinion());
 			}
 			emc.commit();
-			ThisApplication.context().applications().putQuery(x_processplatform_service_processing.class,
-					"task/" + URLEncoder.encode(task.getId(), DefaultCharset.name) + "/reset", wi);
-			Wo wo = new Wo();
-			wo.setId(task.getId());
-			result.setData(wo);
-			return result;
 		}
+		ThisApplication.context().applications().putQuery(x_processplatform_service_processing.class,
+				Applications.joinQueryUri("task", task.getId(), "reset"), wi, task.getJob());
+		Wo wo = new Wo();
+		wo.setId(task.getId());
+		result.setData(wo);
+		return result;
 	}
 
 	public static class Wi extends GsonPropertyObject {

+ 18 - 13
o2server/x_processplatform_service_processing/src/main/java/com/x/processplatform/service/processing/jaxrs/record/ActionCreateWithJob.java

@@ -8,6 +8,7 @@ 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.ExceptionEntityNotExist;
 import com.x.base.core.project.executor.ProcessPlatformExecutorFactory;
 import com.x.base.core.project.http.ActionResult;
 import com.x.base.core.project.http.EffectivePerson;
@@ -15,6 +16,8 @@ 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.processplatform.core.entity.content.Record;
+import com.x.processplatform.core.entity.content.Work;
+import com.x.processplatform.core.entity.content.WorkCompleted;
 
 class ActionCreateWithJob extends BaseAction {
 
@@ -24,20 +27,22 @@ class ActionCreateWithJob extends BaseAction {
 
 		Wi wi = this.convertToWrapIn(jsonElement, Wi.class);
 
-		Callable<ActionResult<Wo>> callable = new Callable<ActionResult<Wo>>() {
-			public ActionResult<Wo> call() throws Exception {
-				try (EntityManagerContainer emc = EntityManagerContainerFactory.instance().create()) {
-					emc.beginTransaction(Record.class);
-					Record record = Wi.copier.copy(wi);
-					record.setJob(job);
-					emc.persist(record);
-					emc.commit();
-					Wo wo = new Wo();
-					wo.setId(record.getId());
-					ActionResult<Wo> result = new ActionResult<>();
-					result.setData(wo);
-					return result;
+		Callable<ActionResult<Wo>> callable = () -> {
+			try (EntityManagerContainer emc = EntityManagerContainerFactory.instance().create()) {
+				if ((emc.countEqual(Work.class, Work.job_FIELDNAME, job) == 0)
+						&& (emc.countEqual(WorkCompleted.class, WorkCompleted.job_FIELDNAME, job) == 0)) {
+					throw new ExceptionEntityNotExist(job, "job");
 				}
+				emc.beginTransaction(Record.class);
+				Record record = Wi.copier.copy(wi);
+				record.setJob(job);
+				emc.persist(record);
+				emc.commit();
+				Wo wo = new Wo();
+				wo.setId(record.getId());
+				ActionResult<Wo> result = new ActionResult<>();
+				result.setData(wo);
+				return result;
 			}
 		};
 

+ 3 - 1
o2server/x_processplatform_service_processing/src/main/java/com/x/processplatform/service/processing/jaxrs/record/ActionEdit.java

@@ -20,6 +20,8 @@ import com.x.processplatform.core.entity.content.Record;
 import com.x.processplatform.core.entity.content.Work;
 import com.x.processplatform.core.entity.content.WorkCompleted;
 
+import org.apache.commons.lang3.StringUtils;
+
 class ActionEdit extends BaseAction {
 
 	private static Logger logger = LoggerFactory.getLogger(ActionEdit.class);
@@ -42,7 +44,7 @@ class ActionEdit extends BaseAction {
 				try (EntityManagerContainer emc = EntityManagerContainerFactory.instance().create()) {
 					Record record = emc.find(id, Record.class);
 					Wi.copier.copy(bag.wi, record);
-					if (record.getCompleted()) {
+					if (StringUtils.isNotEmpty(record.getWorkCompleted())) {
 						WorkCompleted workCompleted = emc.find(record.getWorkCompleted(), WorkCompleted.class);
 						if (null == workCompleted) {
 							throw new ExceptionEntityNotExist(record.getWorkCompleted(), WorkCompleted.class);

+ 2 - 0
o2server/x_processplatform_service_processing/src/main/java/com/x/processplatform/service/processing/processor/cancel/CancelProcessor.java

@@ -33,6 +33,7 @@ public class CancelProcessor extends AbstractCancelProcessor {
 
 	@Override
 	protected void arrivingCommitted(AeiObjects aeiObjects, Cancel cancel) throws Exception {
+		// nothing
 	}
 
 	@Override
@@ -82,6 +83,7 @@ public class CancelProcessor extends AbstractCancelProcessor {
 
 	@Override
 	protected void inquiringCommitted(AeiObjects aeiObjects, Cancel cancel) throws Exception {
+		// nothing
 	}
 
 }

+ 11 - 1
o2server/x_processplatform_service_processing/src/main/java/com/x/processplatform/service/processing/processor/end/AbstractEndProcessor.java

@@ -134,7 +134,6 @@ public abstract class AbstractEndProcessor extends AbstractProcessor {
 							&& StringUtils.equals(o.getWork(), work.getId()))
 					.forEach(o -> {
 						o.setWork(target.getId());
-						// o.setArrivedActivityToken(target.getActivityToken());
 						aeiObjects.getUpdateWorkLogs().add(o);
 					});
 		} catch (Exception e) {
@@ -142,4 +141,15 @@ public abstract class AbstractEndProcessor extends AbstractProcessor {
 		}
 	}
 
+	protected void mergeRecord(AeiObjects aeiObjects, Work work, Work target) {
+		try {
+			aeiObjects.getRecords().stream().filter(o -> StringUtils.equals(o.getWork(), work.getId())).forEach(o -> {
+				o.setWork(target.getId());
+				aeiObjects.getUpdateRecords().add(o);
+			});
+		} catch (Exception e) {
+			logger.error(e);
+		}
+	}
+
 }

+ 23 - 17
o2server/x_processplatform_service_processing/src/main/java/com/x/processplatform/service/processing/processor/end/EndProcessor.java

@@ -36,7 +36,7 @@ public class EndProcessor extends AbstractEndProcessor {
 
 	@Override
 	protected void arrivingCommitted(AeiObjects aeiObjects, End end) throws Exception {
-		//nothing
+		// nothing
 	}
 
 	@Override
@@ -57,6 +57,7 @@ public class EndProcessor extends AbstractEndProcessor {
 			this.mergeReview(aeiObjects, aeiObjects.getWork(), other);
 			this.mergeAttachment(aeiObjects, aeiObjects.getWork(), other);
 			this.mergeWorkLog(aeiObjects, aeiObjects.getWork(), other);
+			this.mergeRecord(aeiObjects, aeiObjects.getWork(), other);
 			aeiObjects.getWorkLogs().stream()
 					.filter(p -> StringUtils.equals(p.getFromActivityToken(), aeiObjects.getWork().getActivityToken()))
 					.forEach(obj -> {
@@ -69,52 +70,57 @@ public class EndProcessor extends AbstractEndProcessor {
 			aeiObjects.getTasks().stream().forEach(o -> aeiObjects.getDeleteTasks().add(o));
 			aeiObjects.getDocumentVersions().stream().forEach(o -> aeiObjects.getDeleteDocumentVersions().add(o));
 			aeiObjects.getTaskCompleteds().stream().forEach(o -> {
-				/* 已办的完成时间是不需要更新的 */
+				// 已办的完成时间是不需要更新的
 				o.setCompleted(true);
 				o.setWorkCompleted(workCompleted.getId());
-				/* 重新赋值映射字段 */
+				// 重新赋值映射字段
 				o.copyProjectionFields(workCompleted);
-				/* 加入到更新队列保证事务开启 */
+				// 加入到更新队列保证事务开启
 				aeiObjects.getUpdateTaskCompleteds().add(o);
 			});
 			aeiObjects.getReads().stream().forEach(o -> {
-				/* 待阅的完成时间是不需要更新的 */
+				// 待阅的完成时间是不需要更新的
 				o.setCompleted(true);
 				o.setWorkCompleted(workCompleted.getId());
-				/* 重新赋值映射字段 */
+				// 重新赋值映射字段
 				o.copyProjectionFields(workCompleted);
-				/* 加入到更新队列保证事务开启 */
+				// 加入到更新队列保证事务开启
 				aeiObjects.getUpdateReads().add(o);
 			});
 			aeiObjects.getReadCompleteds().stream().forEach(o -> {
-				/* 已阅的完成时间是不需要更新的 */
+				// 已阅的完成时间是不需要更新的
 				o.setCompleted(true);
 				o.setWorkCompleted(workCompleted.getId());
-				/* 重新赋值映射字段 */
+				// 重新赋值映射字段
 				o.copyProjectionFields(workCompleted);
-				/* 加入到更新队列保证事务开启 */
+				// 加入到更新队列保证事务开启
 				aeiObjects.getUpdateReadCompleteds().add(o);
 			});
+			aeiObjects.getRecords().stream().forEach(o -> {
+				o.setCompleted(true);
+				o.setWorkCompleted(workCompleted.getId());
+				aeiObjects.getUpdateRecords().add(o);
+			});
 			aeiObjects.getReviews().stream().forEach(o -> {
 				o.setCompleted(true);
 				o.setWorkCompleted(workCompleted.getId());
 				o.setCompletedTime(workCompleted.getCompletedTime());
 				o.setCompletedTimeMonth(workCompleted.getCompletedTimeMonth());
-				/* 重新赋值映射字段 */
+				// 重新赋值映射字段
 				o.copyProjectionFields(workCompleted);
-				/* 加入到更新队列保证事务开启 */
+				// 加入到更新队列保证事务开启
 				aeiObjects.getUpdateReviews().add(o);
 			});
 			aeiObjects.getWorkLogs().stream().forEach(o -> {
 				o.setSplitting(false);
 				o.setSplitToken("");
-				o.getProperties().setSplitTokenList(new ArrayList<String>());
+				o.getProperties().setSplitTokenList(new ArrayList<>());
 				o.setSplitValue("");
 				o.setCompleted(true);
 				o.setWorkCompleted(workCompleted.getId());
-				/* 加入到更新队列保证事务开启 */
+				// 加入到更新队列保证事务开启
 				aeiObjects.getUpdateWorkLogs().add(o);
-				/* 删除未连接的WorkLog */
+				// 删除未连接的WorkLog
 				if (BooleanUtils.isNotTrue(o.getConnected())) {
 					aeiObjects.getDeleteWorkLogs().add(o);
 				}
@@ -122,10 +128,10 @@ public class EndProcessor extends AbstractEndProcessor {
 			aeiObjects.getAttachments().stream().forEach(o -> {
 				o.setCompleted(true);
 				o.setWorkCompleted(workCompleted.getId());
-				/* 加入到更新队列保证事务开启 */
+				// 加入到更新队列保证事务开启
 				aeiObjects.getUpdateAttachments().add(o);
 			});
-			/* 已workCompleted数据为准进行更新 */
+			// 已workCompleted数据为准进行更新
 			aeiObjects.getData().setWork(workCompleted);
 			aeiObjects.getData().setAttachmentList(aeiObjects.getAttachments());
 			aeiObjects.getDeleteWorks().addAll(aeiObjects.getWorks());