From eb38c349b351250913ff630f6acb75ea5558b9e2 Mon Sep 17 00:00:00 2001 From: zhourui Date: Fri, 17 Jul 2020 19:10:57 +0800 Subject: [PATCH] =?UTF-8?q?=E5=A2=9E=E5=8A=A0=E4=BF=9D=E5=AD=98=E6=97=B6?= =?UTF-8?q?=E8=BF=9B=E8=A1=8C=E6=98=A0=E5=B0=84=E5=8A=9F=E8=83=BD?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../core/project/config/ProcessPlatform.java | 59 ++++--- .../processing/jaxrs/data/BaseAction.java | 156 +++++++++++++++++- .../jaxrs/data/ExceptionDataNotExist.java | 14 ++ .../jaxrs/data/ExceptionParentNotExist.java | 17 ++ .../jaxrs/data/ExceptionUnexpectedData.java | 18 ++ 5 files changed, 232 insertions(+), 32 deletions(-) create mode 100644 o2server/x_processplatform_service_processing/src/main/java/com/x/processplatform/service/processing/jaxrs/data/ExceptionDataNotExist.java create mode 100644 o2server/x_processplatform_service_processing/src/main/java/com/x/processplatform/service/processing/jaxrs/data/ExceptionParentNotExist.java create mode 100644 o2server/x_processplatform_service_processing/src/main/java/com/x/processplatform/service/processing/jaxrs/data/ExceptionUnexpectedData.java diff --git a/o2server/x_base_core_project/src/main/java/com/x/base/core/project/config/ProcessPlatform.java b/o2server/x_base_core_project/src/main/java/com/x/base/core/project/config/ProcessPlatform.java index 6c4f675f35..1c1b84fe09 100644 --- a/o2server/x_base_core_project/src/main/java/com/x/base/core/project/config/ProcessPlatform.java +++ b/o2server/x_base_core_project/src/main/java/com/x/base/core/project/config/ProcessPlatform.java @@ -2,6 +2,7 @@ package com.x.base.core.project.config; import java.io.File; +import org.apache.commons.collections4.Get; import org.apache.commons.io.FileUtils; import org.apache.commons.lang3.BooleanUtils; import org.apache.commons.lang3.StringUtils; @@ -44,6 +45,8 @@ public class ProcessPlatform extends ConfigObject { public final static Boolean DEFAULT_DELETEAPPLICATIONINUSE = false; + public final static Boolean DEFAULT_UPDATEDATAPROJECTIONENABLE = false; + public static ProcessPlatform defaultInstance() { return new ProcessPlatform(); } @@ -58,6 +61,7 @@ public class ProcessPlatform extends ConfigObject { this.docToWordDefaultFileName = DEFAULT_DOCTOWORDDEFAULTFILENAME; this.docToWordDefaultSite = DEFAULT_DOCTOWORDDEFAULTSITE; this.executorCount = DEFAULT_EXECUTORCOUNT; + this.updateDataProjectionEnable = DEFAULT_UPDATEDATAPROJECTIONENABLE; this.urge = new Urge(); this.expire = new Expire(); this.touchDelay = new TouchDelay(); @@ -68,30 +72,6 @@ public class ProcessPlatform extends ConfigObject { } - @FieldDescribe("维护身份,当工作发生意外错误,无法找到对应的处理人情况下,先尝试将工作分配给创建身份,如果创建身份也不可获取,那么分配给指定人员,默认情况下这个值为空.") - private String maintenanceIdentity; - - @FieldDescribe("表单历史版本保留数量,0为不保留.") - private Integer formVersionCount; - - @FieldDescribe("流程历史版本保留数量,0为不保留.") - private Integer processVersionCount; - - @FieldDescribe("脚本历史版本保留数量,0为不保留.") - private Integer scriptVersionCount; - - @FieldDescribe("HTML版式公文转换成Word文件方式,local,cloud.") - private String docToWordType; - - @FieldDescribe("HTML版式公文转换成Word文件缺省文件名.") - private String docToWordDefaultFileName; - - @FieldDescribe("HTML版式公文转换成Word文件缺省site.") - private String docToWordDefaultSite; - - @FieldDescribe("执行器数量") - private Integer executorCount; - public Integer getExecutorCount() { return ((null == executorCount) || (executorCount < 1)) ? DEFAULT_EXECUTORCOUNT : this.executorCount; } @@ -121,6 +101,37 @@ public class ProcessPlatform extends ConfigObject { return StringUtils.isEmpty(docToWordDefaultSite) ? DEFAULT_DOCTOWORDDEFAULTSITE : docToWordDefaultSite; } + public Boolean getUpdateDataProjectionEnable() { + return BooleanUtils.isTrue(this.updateDataProjectionEnable); + } + + @FieldDescribe("维护身份,当工作发生意外错误,无法找到对应的处理人情况下,先尝试将工作分配给创建身份,如果创建身份也不可获取,那么分配给指定人员,默认情况下这个值为空.") + private String maintenanceIdentity; + + @FieldDescribe("表单历史版本保留数量,0为不保留.") + private Integer formVersionCount; + + @FieldDescribe("流程历史版本保留数量,0为不保留.") + private Integer processVersionCount; + + @FieldDescribe("脚本历史版本保留数量,0为不保留.") + private Integer scriptVersionCount; + + @FieldDescribe("HTML版式公文转换成Word文件方式,local,cloud.") + private String docToWordType; + + @FieldDescribe("HTML版式公文转换成Word文件缺省文件名.") + private String docToWordDefaultFileName; + + @FieldDescribe("HTML版式公文转换成Word文件缺省site.") + private String docToWordDefaultSite; + + @FieldDescribe("执行器数量") + private Integer executorCount; + + @FieldDescribe("更新data数据是否执行映射.") + private boolean updateDataProjectionEnable; + @FieldDescribe("催办任务设置,发现即将过期时发送提醒消息.") private Urge urge; 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 6edc9b3202..775a35a14a 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 @@ -1,19 +1,24 @@ package com.x.processplatform.service.processing.jaxrs.data; +import java.util.ArrayList; import java.util.List; import java.util.Objects; -import org.apache.commons.lang3.StringUtils; -import org.apache.commons.lang3.math.NumberUtils; - import com.google.gson.Gson; import com.google.gson.JsonElement; import com.google.gson.JsonObject; +import com.google.gson.reflect.TypeToken; +import com.x.base.core.entity.JpaObject; import com.x.base.core.entity.dataitem.DataItemConverter; import com.x.base.core.entity.dataitem.ItemCategory; import com.x.base.core.entity.dataitem.ItemType; +import com.x.base.core.project.annotation.ActionLogger; +import com.x.base.core.project.config.Config; import com.x.base.core.project.gson.XGsonBuilder; import com.x.base.core.project.jaxrs.StandardJaxrsAction; +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.Attachment; import com.x.processplatform.core.entity.content.Data; import com.x.processplatform.core.entity.content.Data.DataWork; @@ -24,11 +29,20 @@ import com.x.processplatform.core.entity.content.Task; import com.x.processplatform.core.entity.content.TaskCompleted; import com.x.processplatform.core.entity.content.Work; import com.x.processplatform.core.entity.content.WorkCompleted; +import com.x.processplatform.core.entity.element.Process; +import com.x.processplatform.core.entity.element.Projection; +import com.x.processplatform.core.entity.element.util.ProjectionFactory; import com.x.processplatform.service.processing.Business; import com.x.query.core.entity.Item; +import org.apache.commons.lang3.BooleanUtils; +import org.apache.commons.lang3.math.NumberUtils; + abstract class BaseAction extends StandardJaxrsAction { + @ActionLogger + private static Logger logger = LoggerFactory.getLogger(BaseAction.class); + protected Gson gson = XGsonBuilder.instance(); JsonElement getData(Business business, String job, String... paths) throws Exception { @@ -150,6 +164,14 @@ abstract class BaseAction extends StandardJaxrsAction { // 标记数据已经被修改 business.entityManagerContainer().beginTransaction(Work.class); work.setDataChanged(true); + if (BooleanUtils.isTrue(Config.processPlatform().getUpdateDataProjectionEnable())) { + 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); + projection(business, work, XGsonBuilder.convert(jsonObject, Data.class)); + } // 基于前面的原因,这里进行单独提交 business.entityManagerContainer().commit(); } @@ -181,6 +203,15 @@ abstract class BaseAction extends StandardJaxrsAction { this.fill(_o, workCompleted); business.entityManagerContainer().persist(_o); } + if (BooleanUtils.isTrue(Config.processPlatform().getUpdateDataProjectionEnable())) { + 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); + projection(business, workCompleted, XGsonBuilder.convert(jsonObject, Data.class)); + } // 基于前面的原因,这里进行单独提交 business.entityManagerContainer().commit(); @@ -208,7 +239,7 @@ abstract class BaseAction extends StandardJaxrsAction { Item parent = business.item().getWithJobWithPath(work.getJob(), parentPaths[0], parentPaths[1], parentPaths[2], parentPaths[3], parentPaths[4], parentPaths[5], parentPaths[6], parentPaths[7]); if (null == parent) { - throw new Exception("parent not existed."); + throw new ExceptionParentNotExist(paths); } Item cursor = business.item().getWithJobWithPath(work.getJob(), cursorPaths[0], cursorPaths[1], cursorPaths[2], cursorPaths[3], cursorPaths[4], cursorPaths[5], cursorPaths[6], cursorPaths[7]); @@ -236,20 +267,26 @@ abstract class BaseAction extends StandardJaxrsAction { business.entityManagerContainer().persist(o); } } else { - throw new Exception("unexpected post data with work" + work + ".path:" + StringUtils.join(paths, ".") - + "json:" + jsonElement); + throw new ExceptionUnexpectedData(work.getId(), paths, jsonElement); } // 标记数据已经被修改 business.entityManagerContainer().beginTransaction(Work.class); work.setDataChanged(true); + if (BooleanUtils.isTrue(Config.processPlatform().getUpdateDataProjectionEnable())) { + 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); + projection(business, work, XGsonBuilder.convert(jsonElement, Data.class)); + } business.entityManagerContainer().commit(); } void deleteData(Business business, Work work, String... paths) throws Exception { List exists = business.item().listWithJobWithPath(work.getJob(), paths); if (exists.isEmpty()) { - throw new Exception( - "data{job:" + work.getJob() + "} on path:" + StringUtils.join(paths, ".") + " is not existed."); + throw new ExceptionDataNotExist(work.getJob(), paths); } business.entityManagerContainer().beginTransaction(Item.class); for (Item o : exists) { @@ -287,4 +324,107 @@ abstract class BaseAction extends StandardJaxrsAction { Attachment.job_FIELDNAME, job); } + private void projection(Business business, Work work, Data data) throws Exception { + Process process = business.element().get(work.getProcess(), Process.class); + if (null != process) { + List list = this.listProjection(process); + if (ListTools.isNotEmpty(list)) { + ProjectionFactory.projectionWork(list, data, work); + business.entityManagerContainer().listEqualAndNotEqual(Work.class, Work.job_FIELDNAME, work.getJob(), + JpaObject.id_FIELDNAME, work.getId()).forEach(o -> { + try { + ProjectionFactory.projectionWork(list, data, o); + } catch (Exception e) { + logger.error(e); + } + }); + projectionTask(business, work.getJob(), data, list); + projectionTaskCompleted(business, work.getJob(), data, list); + projectionRead(business, work.getJob(), data, list); + projectionReadCompleted(business, work.getJob(), data, list); + projectionReview(business, work.getJob(), data, list); + } + } + } + + private void projection(Business business, WorkCompleted workCompleted, Data data) throws Exception { + Process process = business.element().get(workCompleted.getProcess(), Process.class); + + if (null != process) { + List list = this.listProjection(process); + + if (ListTools.isNotEmpty(list)) { + ProjectionFactory.projectionWorkCompleted(list, data, workCompleted); + projectionTaskCompleted(business, workCompleted.getJob(), data, list); + projectionRead(business, workCompleted.getJob(), data, list); + projectionReadCompleted(business, workCompleted.getJob(), data, list); + projectionReview(business, workCompleted.getJob(), data, list); + } + } + } + + private void projectionTask(Business business, String job, Data data, List list) throws Exception { + business.entityManagerContainer().listEqual(Task.class, Task.job_FIELDNAME, job).forEach(o -> { + try { + ProjectionFactory.projectionTask(list, data, o); + } catch (Exception e) { + logger.error(e); + } + }); + } + + private void projectionTaskCompleted(Business business, String job, Data data, List list) + throws Exception { + business.entityManagerContainer().listEqual(TaskCompleted.class, TaskCompleted.job_FIELDNAME, job) + .forEach(o -> { + try { + ProjectionFactory.projectionTaskCompleted(list, data, o); + } catch (Exception e) { + logger.error(e); + } + }); + } + + private void projectionRead(Business business, String job, Data data, List list) throws Exception { + business.entityManagerContainer().listEqual(Read.class, Read.job_FIELDNAME, job).forEach(o -> { + try { + ProjectionFactory.projectionRead(list, data, o); + } catch (Exception e) { + logger.error(e); + } + }); + } + + private void projectionReadCompleted(Business business, String job, Data data, List list) + throws Exception { + business.entityManagerContainer().listEqual(ReadCompleted.class, ReadCompleted.job_FIELDNAME, job) + .forEach(o -> { + try { + ProjectionFactory.projectionReadCompleted(list, data, o); + } catch (Exception e) { + logger.error(e); + } + }); + } + + private void projectionReview(Business business, String job, Data data, List list) throws Exception { + business.entityManagerContainer().listEqual(Review.class, Review.job_FIELDNAME, job).forEach(o -> { + try { + ProjectionFactory.projectionReview(list, data, o); + } catch (Exception e) { + logger.error(e); + } + }); + } + + public List listProjection(Process process) { + List list = new ArrayList<>(); + String text = process.getProjection(); + if (XGsonBuilder.isJsonArray(text)) { + list = XGsonBuilder.instance().fromJson(text, new TypeToken>() { + }.getType()); + } + return list; + } + } \ No newline at end of file diff --git a/o2server/x_processplatform_service_processing/src/main/java/com/x/processplatform/service/processing/jaxrs/data/ExceptionDataNotExist.java b/o2server/x_processplatform_service_processing/src/main/java/com/x/processplatform/service/processing/jaxrs/data/ExceptionDataNotExist.java new file mode 100644 index 0000000000..8a18f3b4f1 --- /dev/null +++ b/o2server/x_processplatform_service_processing/src/main/java/com/x/processplatform/service/processing/jaxrs/data/ExceptionDataNotExist.java @@ -0,0 +1,14 @@ +package com.x.processplatform.service.processing.jaxrs.data; + +import com.x.base.core.project.exception.PromptException; + +import org.apache.commons.lang3.StringUtils; + +class ExceptionDataNotExist extends PromptException { + + private static final long serialVersionUID = -665095222445791960L; + + ExceptionDataNotExist(String job, String[] paths) { + super("data not exist job: {}, path: {}.", job, StringUtils.join(paths, ".")); + } +} diff --git a/o2server/x_processplatform_service_processing/src/main/java/com/x/processplatform/service/processing/jaxrs/data/ExceptionParentNotExist.java b/o2server/x_processplatform_service_processing/src/main/java/com/x/processplatform/service/processing/jaxrs/data/ExceptionParentNotExist.java new file mode 100644 index 0000000000..c3be129ac2 --- /dev/null +++ b/o2server/x_processplatform_service_processing/src/main/java/com/x/processplatform/service/processing/jaxrs/data/ExceptionParentNotExist.java @@ -0,0 +1,17 @@ +package com.x.processplatform.service.processing.jaxrs.data; + +import java.util.Objects; + +import com.google.gson.JsonElement; +import com.x.base.core.project.exception.PromptException; + +import org.apache.commons.lang3.StringUtils; + +class ExceptionParentNotExist extends PromptException { + + private static final long serialVersionUID = -665095222445791960L; + + ExceptionParentNotExist(String[] paths) { + super("parent not exist: {}.", StringUtils.join(paths, ".")); + } +} diff --git a/o2server/x_processplatform_service_processing/src/main/java/com/x/processplatform/service/processing/jaxrs/data/ExceptionUnexpectedData.java b/o2server/x_processplatform_service_processing/src/main/java/com/x/processplatform/service/processing/jaxrs/data/ExceptionUnexpectedData.java new file mode 100644 index 0000000000..f688898b8a --- /dev/null +++ b/o2server/x_processplatform_service_processing/src/main/java/com/x/processplatform/service/processing/jaxrs/data/ExceptionUnexpectedData.java @@ -0,0 +1,18 @@ +package com.x.processplatform.service.processing.jaxrs.data; + +import java.util.Objects; + +import com.google.gson.JsonElement; +import com.x.base.core.project.exception.PromptException; + +import org.apache.commons.lang3.StringUtils; + +class ExceptionUnexpectedData extends PromptException { + + private static final long serialVersionUID = -665095222445791960L; + + ExceptionUnexpectedData(String work, String[] paths, JsonElement jsonElement) { + super("unexpected post data with work :{}, path :{}, json :{}.", work, StringUtils.join(paths, "."), + Objects.toString(jsonElement, "")); + } +} -- GitLab