|
|
@@ -1,16 +1,14 @@
|
|
|
package com.x.processplatform.assemble.designer;
|
|
|
|
|
|
-import java.util.ArrayList;
|
|
|
import java.util.List;
|
|
|
-import java.util.Objects;
|
|
|
|
|
|
import org.apache.commons.lang3.BooleanUtils;
|
|
|
-import org.apache.commons.lang3.StringUtils;
|
|
|
|
|
|
import com.google.gson.JsonElement;
|
|
|
import com.google.gson.reflect.TypeToken;
|
|
|
import com.x.base.core.container.EntityManagerContainer;
|
|
|
import com.x.base.core.container.factory.EntityManagerContainerFactory;
|
|
|
+import com.x.base.core.entity.dataitem.DataItem;
|
|
|
import com.x.base.core.entity.dataitem.DataItemConverter;
|
|
|
import com.x.base.core.entity.dataitem.ItemCategory;
|
|
|
import com.x.base.core.project.exception.ExceptionEntityNotExist;
|
|
|
@@ -35,7 +33,7 @@ public class ProjectionExecuteQueue extends AbstractQueue<String> {
|
|
|
|
|
|
private static Logger logger = LoggerFactory.getLogger(ProjectionExecuteQueue.class);
|
|
|
|
|
|
- private DataItemConverter<Item> converter = new DataItemConverter<Item>(Item.class);
|
|
|
+ private DataItemConverter<Item> converter = new DataItemConverter<>(Item.class);
|
|
|
|
|
|
@Override
|
|
|
protected void execute(String id) throws Exception {
|
|
|
@@ -59,99 +57,105 @@ public class ProjectionExecuteQueue extends AbstractQueue<String> {
|
|
|
|
|
|
private void work(Business business, Process process, List<Projection> projections) throws Exception {
|
|
|
String sequence = "";
|
|
|
- List<Work> os = new ArrayList<>();
|
|
|
- Data data = null;
|
|
|
+ List<Work> os;
|
|
|
do {
|
|
|
os = business.entityManagerContainer().listEqualAndSequenceAfter(Work.class, Work.process_FIELDNAME,
|
|
|
process.getId(), 100, sequence);
|
|
|
if (!os.isEmpty()) {
|
|
|
- business.entityManagerContainer().beginTransaction(Work.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);
|
|
|
- for (Work o : os) {
|
|
|
- sequence = o.getSequence();
|
|
|
- data = this.data(business, o);
|
|
|
- ProjectionFactory.projectionWork(projections, data, o);
|
|
|
- for (Task task : business.entityManagerContainer().listEqualAndEqual(Task.class, Task.job_FIELDNAME,
|
|
|
- o.getJob(), Task.process_FIELDNAME, o.getProcess())) {
|
|
|
- ProjectionFactory.projectionTask(projections, data, task);
|
|
|
- }
|
|
|
- for (TaskCompleted taskCompleted : business.entityManagerContainer().listEqualAndEqual(
|
|
|
- TaskCompleted.class, TaskCompleted.job_FIELDNAME, o.getJob(),
|
|
|
- TaskCompleted.process_FIELDNAME, o.getProcess())) {
|
|
|
- ProjectionFactory.projectionTaskCompleted(projections, data, taskCompleted);
|
|
|
- }
|
|
|
- for (Read read : business.entityManagerContainer().listEqualAndEqual(Read.class, Read.job_FIELDNAME,
|
|
|
- o.getJob(), Read.process_FIELDNAME, o.getProcess())) {
|
|
|
- ProjectionFactory.projectionRead(projections, data, read);
|
|
|
- }
|
|
|
- for (ReadCompleted readCompleted : business.entityManagerContainer().listEqualAndEqual(
|
|
|
- ReadCompleted.class, ReadCompleted.job_FIELDNAME, o.getJob(),
|
|
|
- ReadCompleted.process_FIELDNAME, o.getProcess())) {
|
|
|
- ProjectionFactory.projectionReadCompleted(projections, data, readCompleted);
|
|
|
- }
|
|
|
- for (Review review : business.entityManagerContainer().listEqualAndEqual(Review.class,
|
|
|
- Review.job_FIELDNAME, o.getJob(), Review.process_FIELDNAME, o.getProcess())) {
|
|
|
- ProjectionFactory.projectionReview(projections, data, review);
|
|
|
- }
|
|
|
- }
|
|
|
- business.entityManagerContainer().commit();
|
|
|
+ sequence = workProjection(business, projections, sequence, os);
|
|
|
}
|
|
|
} while (!os.isEmpty());
|
|
|
}
|
|
|
|
|
|
+ private String workProjection(Business business, List<Projection> projections, String sequence, List<Work> os)
|
|
|
+ throws Exception {
|
|
|
+ business.entityManagerContainer().beginTransaction(Work.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);
|
|
|
+ for (Work o : os) {
|
|
|
+ sequence = o.getSequence();
|
|
|
+ Data data = this.data(business, o);
|
|
|
+ ProjectionFactory.projectionWork(projections, data, o);
|
|
|
+ for (Task task : business.entityManagerContainer().listEqualAndEqual(Task.class, Task.job_FIELDNAME,
|
|
|
+ o.getJob(), Task.process_FIELDNAME, o.getProcess())) {
|
|
|
+ ProjectionFactory.projectionTask(projections, data, task);
|
|
|
+ }
|
|
|
+ for (TaskCompleted taskCompleted : business.entityManagerContainer().listEqualAndEqual(TaskCompleted.class,
|
|
|
+ TaskCompleted.job_FIELDNAME, o.getJob(), TaskCompleted.process_FIELDNAME, o.getProcess())) {
|
|
|
+ ProjectionFactory.projectionTaskCompleted(projections, data, taskCompleted);
|
|
|
+ }
|
|
|
+ for (Read read : business.entityManagerContainer().listEqualAndEqual(Read.class, Read.job_FIELDNAME,
|
|
|
+ o.getJob(), Read.process_FIELDNAME, o.getProcess())) {
|
|
|
+ ProjectionFactory.projectionRead(projections, data, read);
|
|
|
+ }
|
|
|
+ for (ReadCompleted readCompleted : business.entityManagerContainer().listEqualAndEqual(ReadCompleted.class,
|
|
|
+ ReadCompleted.job_FIELDNAME, o.getJob(), ReadCompleted.process_FIELDNAME, o.getProcess())) {
|
|
|
+ ProjectionFactory.projectionReadCompleted(projections, data, readCompleted);
|
|
|
+ }
|
|
|
+ for (Review review : business.entityManagerContainer().listEqualAndEqual(Review.class, Review.job_FIELDNAME,
|
|
|
+ o.getJob(), Review.process_FIELDNAME, o.getProcess())) {
|
|
|
+ ProjectionFactory.projectionReview(projections, data, review);
|
|
|
+ }
|
|
|
+ }
|
|
|
+ business.entityManagerContainer().commit();
|
|
|
+ return sequence;
|
|
|
+ }
|
|
|
+
|
|
|
private void workCompleted(Business business, Process process, List<Projection> projections) throws Exception {
|
|
|
String sequence = "";
|
|
|
- List<WorkCompleted> os = new ArrayList<>();
|
|
|
- Data data = null;
|
|
|
+ List<WorkCompleted> os;
|
|
|
do {
|
|
|
os = business.entityManagerContainer().listEqualAndSequenceAfter(WorkCompleted.class,
|
|
|
WorkCompleted.process_FIELDNAME, process.getId(), 100, sequence);
|
|
|
if (!os.isEmpty()) {
|
|
|
- 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);
|
|
|
- for (WorkCompleted o : os) {
|
|
|
- sequence = o.getSequence();
|
|
|
- data = this.data(business, o);
|
|
|
- ProjectionFactory.projectionWorkCompleted(projections, data, o);
|
|
|
- for (Task task : business.entityManagerContainer().listEqualAndEqual(Task.class, Task.job_FIELDNAME,
|
|
|
- o.getJob(), Task.process_FIELDNAME, o.getProcess())) {
|
|
|
- ProjectionFactory.projectionTask(projections, data, task);
|
|
|
- }
|
|
|
- for (TaskCompleted taskCompleted : business.entityManagerContainer().listEqualAndEqual(
|
|
|
- TaskCompleted.class, TaskCompleted.job_FIELDNAME, o.getJob(),
|
|
|
- TaskCompleted.process_FIELDNAME, o.getProcess())) {
|
|
|
- ProjectionFactory.projectionTaskCompleted(projections, data, taskCompleted);
|
|
|
- }
|
|
|
- for (Read read : business.entityManagerContainer().listEqualAndEqual(Read.class, Read.job_FIELDNAME,
|
|
|
- o.getJob(), Read.process_FIELDNAME, o.getProcess())) {
|
|
|
- ProjectionFactory.projectionRead(projections, data, read);
|
|
|
- }
|
|
|
- for (ReadCompleted readCompleted : business.entityManagerContainer().listEqualAndEqual(
|
|
|
- ReadCompleted.class, ReadCompleted.job_FIELDNAME, o.getJob(),
|
|
|
- ReadCompleted.process_FIELDNAME, o.getProcess())) {
|
|
|
- ProjectionFactory.projectionReadCompleted(projections, data, readCompleted);
|
|
|
- }
|
|
|
- for (Review review : business.entityManagerContainer().listEqualAndEqual(Review.class,
|
|
|
- Review.job_FIELDNAME, o.getJob(), Review.process_FIELDNAME, o.getProcess())) {
|
|
|
- ProjectionFactory.projectionReview(projections, data, review);
|
|
|
- }
|
|
|
- }
|
|
|
- business.entityManagerContainer().commit();
|
|
|
+ sequence = workCompletedProjection(business, projections, sequence, os);
|
|
|
}
|
|
|
} while (!os.isEmpty());
|
|
|
}
|
|
|
|
|
|
+ private String workCompletedProjection(Business business, List<Projection> projections, String sequence,
|
|
|
+ List<WorkCompleted> os) throws Exception {
|
|
|
+ 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);
|
|
|
+ for (WorkCompleted o : os) {
|
|
|
+ sequence = o.getSequence();
|
|
|
+ Data data = this.data(business, o);
|
|
|
+ ProjectionFactory.projectionWorkCompleted(projections, data, o);
|
|
|
+ for (Task task : business.entityManagerContainer().listEqualAndEqual(Task.class, Task.job_FIELDNAME,
|
|
|
+ o.getJob(), Task.process_FIELDNAME, o.getProcess())) {
|
|
|
+ ProjectionFactory.projectionTask(projections, data, task);
|
|
|
+ }
|
|
|
+ for (TaskCompleted taskCompleted : business.entityManagerContainer().listEqualAndEqual(TaskCompleted.class,
|
|
|
+ TaskCompleted.job_FIELDNAME, o.getJob(), TaskCompleted.process_FIELDNAME, o.getProcess())) {
|
|
|
+ ProjectionFactory.projectionTaskCompleted(projections, data, taskCompleted);
|
|
|
+ }
|
|
|
+ for (Read read : business.entityManagerContainer().listEqualAndEqual(Read.class, Read.job_FIELDNAME,
|
|
|
+ o.getJob(), Read.process_FIELDNAME, o.getProcess())) {
|
|
|
+ ProjectionFactory.projectionRead(projections, data, read);
|
|
|
+ }
|
|
|
+ for (ReadCompleted readCompleted : business.entityManagerContainer().listEqualAndEqual(ReadCompleted.class,
|
|
|
+ ReadCompleted.job_FIELDNAME, o.getJob(), ReadCompleted.process_FIELDNAME, o.getProcess())) {
|
|
|
+ ProjectionFactory.projectionReadCompleted(projections, data, readCompleted);
|
|
|
+ }
|
|
|
+ for (Review review : business.entityManagerContainer().listEqualAndEqual(Review.class, Review.job_FIELDNAME,
|
|
|
+ o.getJob(), Review.process_FIELDNAME, o.getProcess())) {
|
|
|
+ ProjectionFactory.projectionReview(projections, data, review);
|
|
|
+ }
|
|
|
+ }
|
|
|
+ business.entityManagerContainer().commit();
|
|
|
+ return sequence;
|
|
|
+ }
|
|
|
+
|
|
|
private Data data(Business business, Work work) throws Exception {
|
|
|
- List<Item> items = business.entityManagerContainer().listEqualAndEqual(Item.class, Item.bundle_FIELDNAME,
|
|
|
- work.getJob(), Item.itemCategory_FIELDNAME, ItemCategory.pp);
|
|
|
+ List<Item> items = business.entityManagerContainer().listEqualAndEqual(Item.class, DataItem.bundle_FIELDNAME,
|
|
|
+ work.getJob(), DataItem.itemCategory_FIELDNAME, ItemCategory.pp);
|
|
|
if (items.isEmpty()) {
|
|
|
return new Data();
|
|
|
} else {
|
|
|
@@ -159,7 +163,7 @@ public class ProjectionExecuteQueue extends AbstractQueue<String> {
|
|
|
if (jsonElement.isJsonObject()) {
|
|
|
return XGsonBuilder.convert(jsonElement, Data.class);
|
|
|
} else {
|
|
|
- /* 如果不是Object强制返回一个Map对象 */
|
|
|
+ // 如果不是Object强制返回一个Map对象
|
|
|
return new Data();
|
|
|
}
|
|
|
}
|
|
|
@@ -169,8 +173,8 @@ public class ProjectionExecuteQueue extends AbstractQueue<String> {
|
|
|
if (BooleanUtils.isTrue(workCompleted.getMerged())) {
|
|
|
return workCompleted.getProperties().getData();
|
|
|
}
|
|
|
- List<Item> items = business.entityManagerContainer().listEqualAndEqual(Item.class, Item.bundle_FIELDNAME,
|
|
|
- workCompleted.getJob(), Item.itemCategory_FIELDNAME, ItemCategory.pp);
|
|
|
+ List<Item> items = business.entityManagerContainer().listEqualAndEqual(Item.class, DataItem.bundle_FIELDNAME,
|
|
|
+ workCompleted.getJob(), DataItem.itemCategory_FIELDNAME, ItemCategory.pp);
|
|
|
if (items.isEmpty()) {
|
|
|
return new Data();
|
|
|
} else {
|
|
|
@@ -178,7 +182,7 @@ public class ProjectionExecuteQueue extends AbstractQueue<String> {
|
|
|
if (jsonElement.isJsonObject()) {
|
|
|
return XGsonBuilder.convert(jsonElement, Data.class);
|
|
|
} else {
|
|
|
- /* 如果不是Object强制返回一个Map对象 */
|
|
|
+ // 如果不是Object强制返回一个Map对象
|
|
|
return new Data();
|
|
|
}
|
|
|
}
|