diff --git a/o2server/x_processplatform_service_processing/src/main/java/com/x/processplatform/service/processing/jaxrs/data/ActionUpdateWithWorkCompleted.java b/o2server/x_processplatform_service_processing/src/main/java/com/x/processplatform/service/processing/jaxrs/data/ActionUpdateWithWorkCompleted.java index 632ca2990e2b842ebb60e3c51ac41c32e6da8ce3..8e066ad50c3e5da4806ddbb547ffb5e87486b6a6 100644 --- a/o2server/x_processplatform_service_processing/src/main/java/com/x/processplatform/service/processing/jaxrs/data/ActionUpdateWithWorkCompleted.java +++ b/o2server/x_processplatform_service_processing/src/main/java/com/x/processplatform/service/processing/jaxrs/data/ActionUpdateWithWorkCompleted.java @@ -11,14 +11,17 @@ import com.x.base.core.container.factory.EntityManagerContainerFactory; import com.x.base.core.project.annotation.ActionLogger; import com.x.base.core.project.exception.ExceptionEntityNotExist; import com.x.base.core.project.executor.ProcessPlatformExecutorFactory; +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.WoId; 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.processplatform.core.entity.content.Work; import com.x.processplatform.core.entity.content.WorkCompleted; import com.x.processplatform.service.processing.Business; +import com.x.processplatform.service.processing.jaxrs.data.ActionUpdateWithWork.Wo; class ActionUpdateWithWorkCompleted extends BaseAction { @@ -31,6 +34,11 @@ class ActionUpdateWithWorkCompleted extends BaseAction { Wo wo = new Wo(); String executorSeed = null; + // 防止提交空数据清空data + if (null == jsonElement || (!jsonElement.isJsonObject())) { + throw new ExceptionNotJsonObject(); + } + try (EntityManagerContainer emc = EntityManagerContainerFactory.instance().create()) { WorkCompleted workCompleted = emc.fetch(id, WorkCompleted.class, ListTools.toList(WorkCompleted.job_FIELDNAME)); @@ -40,16 +48,11 @@ class ActionUpdateWithWorkCompleted extends BaseAction { executorSeed = workCompleted.getJob(); } - Callable callable = new Callable() { - public String call() throws Exception { + Callable> callable = new Callable>() { + public ActionResult call() throws Exception { + ActionResult result = new ActionResult<>(); + Wo wo = new Wo(); try (EntityManagerContainer emc = EntityManagerContainerFactory.instance().create()) { - /** 防止提交空数据清空data */ - if (null == jsonElement || (!jsonElement.isJsonObject())) { - throw new ExceptionNotJsonObject(); - } - if (jsonElement.getAsJsonObject().entrySet().isEmpty()) { - throw new ExceptionEmptyData(); - } Business business = new Business(emc); WorkCompleted workCompleted = emc.find(id, WorkCompleted.class); if (null == workCompleted) { @@ -58,11 +61,19 @@ class ActionUpdateWithWorkCompleted extends BaseAction { if (BooleanUtils.isTrue(workCompleted.getMerged())) { throw new ExceptionModifyMerged(workCompleted.getId()); } - wo.setId(workCompleted.getId()); - updateData(business, workCompleted, jsonElement); + + JsonElement source = getData(business, workCompleted.getJob()); + + JsonElement merge = XGsonBuilder.merge(jsonElement, source); + + /* 先更新title和serial,再更新DataItem,因为旧的DataItem中也有title和serial数据. */ + updateTitleSerial(business, workCompleted, merge); + updateData(business, workCompleted, merge); /* updateTitleSerial 和 updateData 方法内进行了提交 */ + wo.setId(workCompleted.getId()); } - return ""; + result.setData(wo); + return result; } }; diff --git a/o2server/x_processplatform_service_processing/src/main/java/com/x/processplatform/service/processing/jaxrs/data/BaseAction.java b/o2server/x_processplatform_service_processing/src/main/java/com/x/processplatform/service/processing/jaxrs/data/BaseAction.java index 775a35a14adde7ab0df2daa8449b3fd12a8538b6..42e6dc5e04ce1ef77552e242aa5eda00275aa741 100644 --- a/o2server/x_processplatform_service_processing/src/main/java/com/x/processplatform/service/processing/jaxrs/data/BaseAction.java +++ b/o2server/x_processplatform_service_processing/src/main/java/com/x/processplatform/service/processing/jaxrs/data/BaseAction.java @@ -91,6 +91,41 @@ abstract class BaseAction extends StandardJaxrsAction { } } + // 将data中的Title 和 serial 字段同步到work中 + void updateTitleSerial(Business business, WorkCompleted workCompleted, JsonElement jsonElement) throws Exception { + String title = XGsonBuilder.extractString(jsonElement, WorkCompleted.title_FIELDNAME); + String serial = XGsonBuilder.extractString(jsonElement, WorkCompleted.serial_FIELDNAME); + // 如果有数据就将数据覆盖到work task taskCompleted read readCompleted review 中 + if (((null != title) && (!Objects.equals(title, workCompleted.getTitle()))) + || ((null != serial) && (!Objects.equals(serial, workCompleted.getSerial())))) { + business.entityManagerContainer().beginTransaction(WorkCompleted.class); + business.entityManagerContainer().beginTransaction(Task.class); + business.entityManagerContainer().beginTransaction(TaskCompleted.class); + business.entityManagerContainer().beginTransaction(Read.class); + business.entityManagerContainer().beginTransaction(ReadCompleted.class); + business.entityManagerContainer().beginTransaction(Review.class); + + List tasks = business.entityManagerContainer().listEqual(Task.class, Task.job_FIELDNAME, + workCompleted.getJob()); + List taskCompleteds = business.entityManagerContainer().listEqual(TaskCompleted.class, + TaskCompleted.job_FIELDNAME, workCompleted.getJob()); + List reads = business.entityManagerContainer().listEqual(Read.class, Read.job_FIELDNAME, + workCompleted.getJob()); + List readCompleteds = business.entityManagerContainer().listEqual(ReadCompleted.class, + ReadCompleted.job_FIELDNAME, workCompleted.getJob()); + List reviews = business.entityManagerContainer().listEqual(Review.class, Review.job_FIELDNAME, + workCompleted.getJob()); + + this.updateTitle(title, workCompleted, tasks, taskCompleteds, reads, readCompleteds, reviews); + this.updateSerial(serial, workCompleted, tasks, taskCompleteds, reads, readCompleteds, reviews); + // 这里必须先提交掉,不然后面的获取会得到不一致的状态 + // + // org.apache.openjpa.persistence.InvalidStateException: Opera tion attempted on + // a deleted instance. + business.entityManagerContainer().commit(); + } + } + private void updateTitle(String title, Work work, List tasks, List taskCompleteds, List reads, List readCompleteds, List reviews) { if ((null != title) && (!Objects.equals(title, work.getTitle()))) { @@ -114,6 +149,30 @@ abstract class BaseAction extends StandardJaxrsAction { } + private void updateTitle(String title, WorkCompleted workCompleted, List tasks, + List taskCompleteds, List reads, List readCompleteds, + List reviews) { + if ((null != title) && (!Objects.equals(title, workCompleted.getTitle()))) { + workCompleted.setTitle(title); + for (Task o : tasks) { + o.setTitle(title); + } + for (TaskCompleted o : taskCompleteds) { + o.setTitle(title); + } + for (Read o : reads) { + o.setTitle(title); + } + for (ReadCompleted o : readCompleteds) { + o.setTitle(title); + } + for (Review o : reviews) { + o.setTitle(title); + } + } + + } + private void updateSerial(String serial, Work work, List tasks, List taskCompleteds, List reads, List readCompleteds, List reviews) { if ((null != serial) && (!Objects.equals(serial, work.getSerial()))) { @@ -135,6 +194,28 @@ abstract class BaseAction extends StandardJaxrsAction { } } } + + private void updateSerial(String serial, WorkCompleted workCompleted, List tasks, List taskCompleteds, + List reads, List readCompleteds, List reviews) { + if ((null != serial) && (!Objects.equals(serial, workCompleted.getSerial()))) { + workCompleted.setSerial(serial); + for (Task o : tasks) { + o.setSerial(serial); + } + for (TaskCompleted o : taskCompleteds) { + o.setSerial(serial); + } + for (Read o : reads) { + o.setSerial(serial); + } + for (ReadCompleted o : readCompleteds) { + o.setSerial(serial); + } + for (Review o : reviews) { + o.setSerial(serial); + } + } + } void updateData(Business business, Work work, JsonElement jsonElement, String... paths) throws Exception { JsonObject jsonObject = jsonElement.getAsJsonObject();