ソースを参照

修改del线程

Zhou Rui 5 年 前
コミット
ffcffd7112

+ 34 - 0
o2server/x_base_core_project/src/main/java/com/x/base/core/project/build/CreateVersion.java

@@ -0,0 +1,34 @@
+package com.x.base.core.project.build;
+
+import java.io.File;
+import java.io.FileReader;
+import java.util.Date;
+import java.util.LinkedHashMap;
+
+import com.x.base.core.project.gson.XGsonBuilder;
+import com.x.base.core.project.tools.DateTools;
+import com.x.base.core.project.tools.DefaultCharset;
+
+import org.apache.commons.io.FileUtils;
+import org.apache.maven.model.Model;
+import org.apache.maven.model.io.xpp3.MavenXpp3Reader;
+
+public class CreateVersion {
+	public static void main(String... args) throws Exception {
+		File base = new File(args[0]);
+		File file = new File(base, "../version.o2");
+		File pom = new File(base, "../pom.xml");
+
+		MavenXpp3Reader reader = new MavenXpp3Reader();
+		Model model = reader.read(new FileReader(pom));
+
+		LinkedHashMap<String, String> map = new LinkedHashMap<>();
+
+		map.put("version", model.getVersion() + "");
+		map.put("date", DateTools.format(new Date()));
+
+		FileUtils.write(file, XGsonBuilder.toJson(map), DefaultCharset.charset_utf_8);
+
+	}
+
+}

+ 1 - 0
o2server/x_base_core_project/src/main/java/com/x/base/core/project/build/PackageO2server.java

@@ -29,6 +29,7 @@ public class PackageO2server {
 		createO2Version(base.getAbsolutePath());
 		CreateConfigSample.main(base.getAbsolutePath());
 		CreateLocalSample.main(base.getAbsolutePath());
+		CreateVersion.main(base.getAbsolutePath());
 		File file = new File(base, "o2server.zip");
 		FileUtils.forceMkdir(new File(base.getAbsolutePath(), "servers"));
 		try (ZipOutputStream outputStream = new ZipOutputStream(new FileOutputStream(file))) {

+ 24 - 23
o2server/x_processplatform_service_processing/src/main/java/com/x/processplatform/service/processing/jaxrs/work/ActionDelete.java

@@ -55,29 +55,30 @@ class ActionDelete extends BaseAction {
 					if (null == work) {
 						throw new ExceptionEntityNotExist(id, Work.class);
 					}
-					if (business.work().listWithJob(work.getJob()).size() > 1) {
-						List<String> taskIds = emc.idsEqual(Task.class, Task.work_FIELDNAME, work.getId());
-						if (ListTools.isNotEmpty(taskIds)) {
-							emc.beginTransaction(Task.class);
-							emc.delete(Task.class, taskIds);
-						}
-						emc.beginTransaction(Work.class);
-						emc.remove(work, CheckRemoveType.all);
-						emc.commit();
-					} else {
-						deleteTask(business, work.getJob());
-						deleteTaskCompleted(business, work.getJob());
-						deleteRead(business, work.getJob());
-						deleteReadCompleted(business, work.getJob());
-						deleteReview(business, work.getJob());
-						deleteAttachment(business, work.getJob());
-						deleteWorkLog(business, work.getJob());
-						deleteItem(business, work.getJob());
-						deleteDocumentVersion(business, work.getJob());
-						deleteRecord(business, work.getJob());
-						deleteWork(business, work);
-						emc.commit();
-					}
+					// if (business.work().listWithJob(work.getJob()).size() > 1) {
+					// 	List<String> taskIds = emc.idsEqual(Task.class, Task.work_FIELDNAME, work.getId());
+					// 	if (ListTools.isNotEmpty(taskIds)) {
+					// 		emc.beginTransaction(Task.class);
+					// 		emc.delete(Task.class, taskIds);
+					// 	}
+					// 	emc.beginTransaction(Work.class);
+					// 	emc.remove(work, CheckRemoveType.all);
+					// 	emc.commit();
+					// } else {
+					// 	deleteTask(business, work.getJob());
+					// 	deleteTaskCompleted(business, work.getJob());
+					// 	deleteRead(business, work.getJob());
+					// 	deleteReadCompleted(business, work.getJob());
+					// 	deleteReview(business, work.getJob());
+					// 	deleteAttachment(business, work.getJob());
+					// 	deleteWorkLog(business, work.getJob());
+					// 	deleteItem(business, work.getJob());
+					// 	deleteDocumentVersion(business, work.getJob());
+					// 	deleteRecord(business, work.getJob());
+					// 	deleteWork(business, work);
+					// }
+					cascadeDeleteWorkBeginButNotCommit(business, work);
+					emc.commit();
 					ActionResult<Wo> result = new ActionResult<>();
 					Wo wo = new Wo();
 					wo.setId(work.getId());

+ 11 - 12
o2server/x_processplatform_service_processing/src/main/java/com/x/processplatform/service/processing/jaxrs/work/ActionDeleteDraft.java

@@ -2,12 +2,8 @@ package com.x.processplatform.service.processing.jaxrs.work;
 
 import java.util.concurrent.Callable;
 
-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.Applications;
-import com.x.base.core.project.x_processplatform_service_processing;
 import com.x.base.core.project.annotation.ActionLogger;
 import com.x.base.core.project.exception.ExceptionEntityNotExist;
 import com.x.base.core.project.executor.ProcessPlatformExecutorFactory;
@@ -20,7 +16,9 @@ import com.x.base.core.project.tools.ListTools;
 import com.x.processplatform.core.entity.content.ReadCompleted;
 import com.x.processplatform.core.entity.content.TaskCompleted;
 import com.x.processplatform.core.entity.content.Work;
-import com.x.processplatform.service.processing.ThisApplication;
+import com.x.processplatform.service.processing.Business;
+
+import org.apache.commons.lang3.StringUtils;
 
 /**
  * 
@@ -49,12 +47,12 @@ class ActionDeleteDraft extends BaseAction {
 				ActionResult<Wo> result = new ActionResult<>();
 				Wo wo = new Wo();
 				Work work = null;
-				boolean delete = false;
 				String workId = null;
 				String workTitle = null;
 				String workSequence = null;
 				try {
 					try (EntityManagerContainer emc = EntityManagerContainerFactory.instance().create()) {
+						Business business = new Business(emc);
 						work = emc.find(id, Work.class);
 						if (null != work) {
 							workId = work.getId();
@@ -66,7 +64,8 @@ class ActionDeleteDraft extends BaseAction {
 											work.getJob()) == 0) {
 										if (emc.countEqual(ReadCompleted.class, ReadCompleted.job_FIELDNAME,
 												work.getJob()) == 0) {
-											delete = true;
+											cascadeDeleteWorkBeginButNotCommit(business, work);
+											logger.print("删除长期处于草稿状态的工作, id:{}, title:{}, sequence:{}", workId, workTitle, workSequence);
 										}
 									}
 								}
@@ -78,11 +77,11 @@ class ActionDeleteDraft extends BaseAction {
 				} catch (Exception e) {
 					logger.error(e);
 				}
-				if (delete && (null != work)) {
-					ThisApplication.context().applications().deleteQuery(x_processplatform_service_processing.class,
-							Applications.joinQueryUri("work", work.getId()), work.getJob()).getData(WoId.class);
-					logger.print("删除长期处于草稿状态的工作, id:{}, title:{}, sequence:{}", workId, workTitle, workSequence);
-				}
+				// if (delete && (null != work)) {
+				// 	ThisApplication.context().applications().deleteQuery(x_processplatform_service_processing.class,
+				// 			Applications.joinQueryUri("work", work.getId()), work.getJob()).getData(WoId.class);
+				// 	logger.print("删除长期处于草稿状态的工作, id:{}, title:{}, sequence:{}", workId, workTitle, workSequence);
+				// }
 				wo.setId(work.getId());
 				result.setData(wo);
 				return result;

+ 167 - 0
o2server/x_processplatform_service_processing/src/main/java/com/x/processplatform/service/processing/jaxrs/work/BaseAction.java

@@ -1,7 +1,174 @@
 package com.x.processplatform.service.processing.jaxrs.work;
 
+import java.util.List;
+
+import com.x.base.core.entity.annotation.CheckRemoveType;
+import com.x.base.core.project.config.StorageMapping;
 import com.x.base.core.project.jaxrs.StandardJaxrsAction;
+import com.x.base.core.project.tools.ListTools;
+import com.x.processplatform.core.entity.content.Attachment;
+import com.x.processplatform.core.entity.content.DocumentVersion;
+import com.x.processplatform.core.entity.content.Read;
+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.Task;
+import com.x.processplatform.core.entity.content.TaskCompleted;
+import com.x.processplatform.core.entity.content.Work;
+import com.x.processplatform.core.entity.content.WorkLog;
+import com.x.processplatform.service.processing.Business;
+import com.x.processplatform.service.processing.MessageFactory;
+import com.x.processplatform.service.processing.ThisApplication;
+import com.x.query.core.entity.Item;
 
 abstract class BaseAction extends StandardJaxrsAction {
 
+    protected boolean cascadeDeleteWorkBeginButNotCommit(Business business, Work work) throws Exception {
+        if (business.work().listWithJob(work.getJob()).size() > 1) {
+            List<String> taskIds = business.entityManagerContainer().idsEqual(Task.class, Task.work_FIELDNAME,
+                    work.getId());
+            if (ListTools.isNotEmpty(taskIds)) {
+                business.entityManagerContainer().beginTransaction(Task.class);
+                business.entityManagerContainer().delete(Task.class, taskIds);
+            }
+            business.entityManagerContainer().beginTransaction(Work.class);
+            business.entityManagerContainer().remove(work, CheckRemoveType.all);
+            business.entityManagerContainer().commit();
+            return false;
+        } else {
+            deleteTask(business, work.getJob());
+            deleteTaskCompleted(business, work.getJob());
+            deleteRead(business, work.getJob());
+            deleteReadCompleted(business, work.getJob());
+            deleteReview(business, work.getJob());
+            deleteAttachment(business, work.getJob());
+            deleteWorkLog(business, work.getJob());
+            deleteItem(business, work.getJob());
+            deleteDocumentVersion(business, work.getJob());
+            deleteRecord(business, work.getJob());
+            deleteWork(business, work);
+            return true;
+        }
+    }
+
+    private void deleteTask(Business business, String job) throws Exception {
+        List<String> ids = business.entityManagerContainer().idsEqual(Task.class, Task.job_FIELDNAME, job);
+        if (ListTools.isNotEmpty(ids)) {
+            business.entityManagerContainer().beginTransaction(Task.class);
+            for (Task o : business.entityManagerContainer().list(Task.class, ids)) {
+                business.entityManagerContainer().remove(o);
+                MessageFactory.task_delete(o);
+            }
+        }
+    }
+
+    private void deleteTaskCompleted(Business business, String job) throws Exception {
+        List<String> ids = business.entityManagerContainer().idsEqual(TaskCompleted.class, TaskCompleted.job_FIELDNAME,
+                job);
+        if (ListTools.isNotEmpty(ids)) {
+            business.entityManagerContainer().beginTransaction(TaskCompleted.class);
+            for (TaskCompleted o : business.entityManagerContainer().list(TaskCompleted.class, ids)) {
+                business.entityManagerContainer().remove(o);
+                MessageFactory.taskCompleted_delete(o);
+            }
+        }
+    }
+
+    private void deleteRead(Business business, String job) throws Exception {
+        List<String> ids = business.entityManagerContainer().idsEqual(Read.class, Read.job_FIELDNAME, job);
+        if (ListTools.isNotEmpty(ids)) {
+            business.entityManagerContainer().beginTransaction(Read.class);
+            for (Read o : business.entityManagerContainer().list(Read.class, ids)) {
+                business.entityManagerContainer().remove(o);
+                MessageFactory.read_delete(o);
+            }
+        }
+    }
+
+    private void deleteReadCompleted(Business business, String job) throws Exception {
+        List<String> ids = business.entityManagerContainer().idsEqual(ReadCompleted.class, ReadCompleted.job_FIELDNAME,
+                job);
+        if (ListTools.isNotEmpty(ids)) {
+            business.entityManagerContainer().beginTransaction(ReadCompleted.class);
+            for (ReadCompleted o : business.entityManagerContainer().list(ReadCompleted.class, ids)) {
+                business.entityManagerContainer().remove(o);
+                MessageFactory.readCompleted_delete(o);
+            }
+        }
+    }
+
+    private void deleteReview(Business business, String job) throws Exception {
+        List<String> ids = business.entityManagerContainer().idsEqual(Review.class, Review.job_FIELDNAME, job);
+        if (ListTools.isNotEmpty(ids)) {
+            business.entityManagerContainer().beginTransaction(Review.class);
+            business.entityManagerContainer().delete(Review.class, ids);
+        }
+    }
+
+    private void deleteAttachment(Business business, String job) throws Exception {
+        List<String> ids = business.entityManagerContainer().idsEqual(Attachment.class, Attachment.job_FIELDNAME, job);
+        if (ListTools.isNotEmpty(ids)) {
+            business.entityManagerContainer().beginTransaction(Attachment.class);
+            Attachment obj;
+            for (String id : ids) {
+                obj = business.entityManagerContainer().find(id, Attachment.class);
+                if (null != obj) {
+                    StorageMapping mapping = ThisApplication.context().storageMappings().get(Attachment.class,
+                            obj.getStorage());
+                    if (null != mapping) {
+                        obj.deleteContent(mapping);
+                    }
+                    business.entityManagerContainer().remove(obj, CheckRemoveType.all);
+                }
+            }
+        }
+    }
+
+    private void deleteWorkLog(Business business, String job) throws Exception {
+        List<String> ids = business.entityManagerContainer().idsEqual(WorkLog.class, WorkLog.job_FIELDNAME, job);
+        if (ListTools.isNotEmpty(ids)) {
+            business.entityManagerContainer().beginTransaction(WorkLog.class);
+            business.entityManagerContainer().delete(WorkLog.class, ids);
+        }
+    }
+
+    private void deleteItem(Business business, String job) throws Exception {
+        List<String> ids = business.entityManagerContainer().idsEqual(Item.class, Item.bundle_FIELDNAME, job);
+        if (ListTools.isNotEmpty(ids)) {
+            business.entityManagerContainer().beginTransaction(Item.class);
+            business.entityManagerContainer().delete(Item.class, ids);
+        }
+    }
+
+    private void deleteWork(Business business, Work work) throws Exception {
+        business.entityManagerContainer().beginTransaction(Work.class);
+        List<String> ids = business.entityManagerContainer().idsEqualAndNotEqual(Work.class, Work.job_FIELDNAME,
+                work.getJob(), Work.id_FIELDNAME, work.getId());
+        if (ListTools.isNotEmpty(ids)) {
+            for (Work o : business.entityManagerContainer().list(Work.class, ids)) {
+                business.entityManagerContainer().remove(o);
+                MessageFactory.work_delete(o);
+            }
+        }
+        business.entityManagerContainer().remove(work);
+        MessageFactory.work_delete(work);
+    }
+
+    private void deleteDocumentVersion(Business business, String job) throws Exception {
+        List<String> ids = business.entityManagerContainer().idsEqual(DocumentVersion.class,
+                DocumentVersion.job_FIELDNAME, job);
+        if (ListTools.isNotEmpty(ids)) {
+            business.entityManagerContainer().beginTransaction(DocumentVersion.class);
+            business.entityManagerContainer().delete(DocumentVersion.class, ids);
+        }
+    }
+
+    private void deleteRecord(Business business, String job) throws Exception {
+        List<String> ids = business.entityManagerContainer().idsEqual(Record.class, Record.job_FIELDNAME, job);
+        if (ListTools.isNotEmpty(ids)) {
+            business.entityManagerContainer().beginTransaction(Record.class);
+            business.entityManagerContainer().delete(Record.class, ids);
+        }
+    }
+
 }