提交 0e88bfb4 编写于 作者: Z zhourui

fix merge

上级 0660efc9
......@@ -14,6 +14,7 @@ import com.x.base.core.project.annotation.FieldDescribe;
import com.x.base.core.project.gson.XGsonBuilder;
import com.x.base.core.project.tools.DefaultCharset;
import com.x.base.core.project.tools.ListTools;
import com.x.base.core.project.tools.NumberTools;
/**
* @author Zhou Rui
......@@ -330,6 +331,8 @@ public class ProcessPlatform extends ConfigObject {
public static class Merge extends ConfigObject {
private static final long serialVersionUID = -5858277850858377338L;
public static Merge defaultInstance() {
Merge o = new Merge();
return o;
......@@ -341,15 +344,24 @@ public class ProcessPlatform extends ConfigObject {
public static final Integer DEFAULT_THRESHOLDDAYS = 365 * 2;
public static final Integer DEFAULT_BATCHSIZE = 100;
@FieldDescribe("是否启用")
private Boolean enable = DEFAULT_ENABLE;
@FieldDescribe("定时cron表达式")
private String cron = DEFAULT_CRON;
@FieldDescribe("期限,已完成工作结束间隔指定时间进行combine,默认两年后进行combine")
@FieldDescribe("期限,已完成工作结束间隔指定时间进行merge,默认两年后进行merge")
private Integer thresholdDays = DEFAULT_THRESHOLDDAYS;
@FieldDescribe("批量大小.")
private Integer batchSize = DEFAULT_BATCHSIZE;
public Integer getBatchSize() {
return NumberTools.nullOrLessThan(this.batchSize, 1) ? DEFAULT_BATCHSIZE : this.batchSize;
}
public String getCron() {
if (StringUtils.isNotEmpty(this.cron) && CronExpression.isValidExpression(this.cron)) {
return this.cron;
......
......@@ -80,7 +80,7 @@ class ActionAppend extends BaseAction {
if (ListTools.isNotEmpty(wi.getIdentityList())) {
identities.addAll(wi.getIdentityList());
}
if ((null != manual) && (route != null)) {
if (route != null) {
if (StringUtils.equals(route.getType(), Route.TYPE_APPENDTASK)
&& StringUtils.equals(manual.getId(), route.getActivity())) {
if (StringUtils.equals(route.getAppendTaskIdentityType(),
......@@ -107,7 +107,7 @@ class ActionAppend extends BaseAction {
}
Process process = business.element().get(task.getProcess(), Process.class);
identities = business.organization().identity().list(ListTools.trim(identities, true, true));
TaskIdentities taskIdentities = empower(business,process, task, identities);
TaskIdentities taskIdentities = empower(business, process, task, identities);
identities = taskIdentities.identities();
if (ListTools.isNotEmpty(identities)) {
List<TaskCompleted> os = emc.listEqualAndInAndNotEqual(TaskCompleted.class,
......@@ -118,23 +118,20 @@ class ActionAppend extends BaseAction {
emc.beginTransaction(TaskCompleted.class);
for (TaskCompleted o : os) {
o.setJoinInquire(false);
// o.setProcessingType(ProcessingType.beAppendedTask);
o.setProcessingType(TaskCompleted.PROCESSINGTYPE_BEAPPENDEDTASK);
}
}
/* 后面还要合并,clone一个新实例 */
// 后面还要合并,clone一个新实例
wo.getValueList().addAll(new ArrayList<>(identities));
identities = ListUtils.sum(ListUtils.subtract(work.getManualTaskIdentityList(),
ListTools.toList(task.getIdentity())), identities);
identities = business.organization().identity().list(ListTools.trim(identities, true, true));
emc.beginTransaction(Work.class);
for (TaskIdentity o : taskIdentities) {
if (StringUtils.isNotEmpty(o.getFromIdentity())) {
// work.properties().getManualEmpowerMap().put(o.getIdentity(),
// o.getFromIdentity());
}
}
work.setManualTaskIdentityList(identities);
emc.beginTransaction(Task.class);
// 转派后设置过期为空
task.setExpired(false);
task.setExpireTime(null);
emc.commit();
}
result.setData(wo);
......@@ -162,11 +159,12 @@ class ActionAppend extends BaseAction {
return scriptContext;
}
private TaskIdentities empower(Business business,Process process, Task task, List<String> identities) throws Exception {
private TaskIdentities empower(Business business, Process process, Task task, List<String> identities)
throws Exception {
TaskIdentities taskIdentities = new TaskIdentities();
taskIdentities.addIdentities(identities);
taskIdentities.empower(business.organization().empower().listWithIdentityObject(task.getApplication(),process.getEdition(),
task.getProcess(), task.getWork(), identities));
taskIdentities.empower(business.organization().empower().listWithIdentityObject(task.getApplication(),
process.getEdition(), task.getProcess(), task.getWork(), identities));
return taskIdentities;
}
......
package com.x.processplatform.service.processing.jaxrs.workcompleted;
import java.util.Collections;
import java.util.Comparator;
import java.util.Date;
import java.util.List;
import java.util.concurrent.Callable;
import java.util.stream.Collectors;
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.annotation.CheckRemoveType;
import com.x.base.core.entity.dataitem.DataItemConverter;
import com.x.base.core.entity.dataitem.ItemCategory;
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;
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.Data;
import com.x.processplatform.core.entity.content.DocumentVersion;
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.TaskCompleted;
import com.x.processplatform.core.entity.content.WorkCompleted;
import com.x.processplatform.core.entity.content.WorkLog;
import com.x.processplatform.service.processing.Business;
import com.x.query.core.entity.Item;
class ActionCombine extends BaseAction {
private static Logger logger = LoggerFactory.getLogger(ActionCombine.class);
ActionResult<Wo> execute(EffectivePerson effectivePerson, String id) throws Exception {
String executorSeed = null;
try (EntityManagerContainer emc = EntityManagerContainerFactory.instance().create()) {
WorkCompleted workCompleted = emc.fetch(id, WorkCompleted.class,
ListTools.toList(WorkCompleted.job_FIELDNAME));
if (null == workCompleted) {
throw new ExceptionEntityNotExist(id, WorkCompleted.class);
}
executorSeed = workCompleted.getJob();
}
return ProcessPlatformExecutorFactory.get(executorSeed).submit(new CallableAction(id)).get();
}
public static class Wo extends WoId {
}
public class CallableAction implements Callable<ActionResult<Wo>> {
private String id;
CallableAction(String id) {
this.id = id;
}
@Override
public ActionResult<Wo> call() throws Exception {
WorkCompleted workCompleted = null;
try (EntityManagerContainer emc = EntityManagerContainerFactory.instance().create()) {
workCompleted = emc.find(id, WorkCompleted.class);
Business business = new Business(emc);
if (null != workCompleted) {
List<DocumentVersion> documentVersions = listDocumentVersion(business, workCompleted);
List<Item> items = combineItem(business, workCompleted);
List<TaskCompleted> taskCompleteds = combineTaskCompleted(business, workCompleted);
List<ReadCompleted> readCompleteds = combineReadCompleted(business, workCompleted);
List<Review> reviews = combineReview(business, workCompleted);
List<WorkLog> workLogs = combineWorkLog(business, workCompleted);
List<Record> records = combineRecord(business, workCompleted);
emc.beginTransaction(WorkCompleted.class);
workCompleted.setMerged(true);
emc.commit();
this.remove(business, items, workLogs, records, documentVersions);
logger.print("已完成工作合并, id: {}, title:{}, sequence:{}.", workCompleted.getId(),
workCompleted.getTitle(), workCompleted.getSequence());
}
} catch (Exception e) {
throw new ExceptionCombine(e, id);
}
Wo wo = new Wo();
wo.setId(id);
ActionResult<Wo> result = new ActionResult<>();
result.setData(wo);
return result;
}
private void remove(Business business, List<Item> items, List<WorkLog> workLogs, List<Record> records,
List<DocumentVersion> documentVersions) throws Exception {
EntityManagerContainer emc = business.entityManagerContainer();
if (!items.isEmpty()) {
emc.beginTransaction(Item.class);
for (Item o : items) {
emc.remove(o, CheckRemoveType.all);
}
}
if (!workLogs.isEmpty()) {
emc.beginTransaction(WorkLog.class);
for (WorkLog o : workLogs) {
emc.remove(o, CheckRemoveType.all);
}
}
if (!records.isEmpty()) {
emc.beginTransaction(Record.class);
for (Record o : records) {
emc.remove(o, CheckRemoveType.all);
}
}
if (!documentVersions.isEmpty()) {
emc.beginTransaction(DocumentVersion.class);
for (DocumentVersion o : documentVersions) {
emc.remove(o, CheckRemoveType.all);
}
}
emc.commit();
}
private List<TaskCompleted> combineTaskCompleted(Business business, WorkCompleted workCompleted)
throws Exception {
List<TaskCompleted> list = business.entityManagerContainer().listEqual(TaskCompleted.class,
TaskCompleted.job_FIELDNAME, workCompleted.getJob());
list = list.stream()
.sorted(Comparator.comparing(TaskCompleted::getCreateTime, Comparator.nullsLast(Date::compareTo)))
.collect(Collectors.toList());
workCompleted.getProperties().setTaskCompletedList(list);
return list;
}
private List<ReadCompleted> combineReadCompleted(Business business, WorkCompleted workCompleted)
throws Exception {
List<ReadCompleted> list = business.entityManagerContainer().listEqual(ReadCompleted.class,
ReadCompleted.job_FIELDNAME, workCompleted.getJob());
list = list.stream()
.sorted(Comparator.comparing(ReadCompleted::getCreateTime, Comparator.nullsLast(Date::compareTo)))
.collect(Collectors.toList());
workCompleted.getProperties().setReadCompletedList(list);
return list;
}
private List<Review> combineReview(Business business, WorkCompleted workCompleted) throws Exception {
List<Review> list = business.entityManagerContainer().listEqual(Review.class, Review.job_FIELDNAME,
workCompleted.getJob());
list = list.stream()
.sorted(Comparator.comparing(Review::getCreateTime, Comparator.nullsLast(Date::compareTo)))
.collect(Collectors.toList());
workCompleted.getProperties().setReviewList(list);
return list;
}
private List<DocumentVersion> listDocumentVersion(Business business, WorkCompleted workCompleted)
throws Exception {
return business.entityManagerContainer().listEqual(DocumentVersion.class, DocumentVersion.job_FIELDNAME,
workCompleted.getJob());
}
private List<Item> combineItem(Business business, WorkCompleted workCompleted) throws Exception {
List<Item> list = business.entityManagerContainer().listEqualAndEqual(Item.class, Item.bundle_FIELDNAME,
workCompleted.getJob(), Item.itemCategory_FIELDNAME, ItemCategory.pp);
DataItemConverter<Item> converter = new DataItemConverter<Item>(Item.class);
JsonElement jsonElement = converter.assemble(list);
workCompleted.getProperties().setData(gson.fromJson(jsonElement, Data.class));
return list;
}
private List<Record> combineRecord(Business business, WorkCompleted workCompleted) throws Exception {
List<Record> list = business.entityManagerContainer().listEqual(Record.class, Record.job_FIELDNAME,
workCompleted.getJob());
Collections.sort(list, Comparator.comparing(Record::getOrder, Comparator.nullsLast(Long::compareTo)));
workCompleted.getProperties().setRecordList(list);
return list;
}
private List<WorkLog> combineWorkLog(Business business, WorkCompleted workCompleted) throws Exception {
List<WorkLog> list = business.entityManagerContainer().listEqual(WorkLog.class, WorkCompleted.job_FIELDNAME,
workCompleted.getJob());
Collections.sort(list, Comparator.comparing(WorkLog::getCreateTime, Comparator.nullsLast(Date::compareTo)));
workCompleted.getProperties().setWorkLogList(list);
return list;
}
}
}
\ No newline at end of file
package com.x.processplatform.service.processing.jaxrs.workcompleted;
import java.util.ArrayList;
import java.util.Comparator;
import java.util.Date;
import java.util.List;
import java.util.concurrent.Callable;
import java.util.concurrent.CompletableFuture;
import java.util.stream.Collectors;
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.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;
import com.x.base.core.project.executor.ProcessPlatformExecutorFactory;
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.Data;
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.TaskCompleted;
import com.x.processplatform.core.entity.content.WorkCompleted;
import com.x.processplatform.core.entity.content.WorkLog;
import com.x.processplatform.service.processing.Business;
import com.x.query.core.entity.Item;
class ActionMerge extends BaseAction {
private static Logger logger = LoggerFactory.getLogger(ActionMerge.class);
ActionResult<Wo> execute(EffectivePerson effectivePerson, String id) throws Exception {
String executorSeed = null;
try (EntityManagerContainer emc = EntityManagerContainerFactory.instance().create()) {
WorkCompleted workCompleted = emc.fetch(id, WorkCompleted.class,
ListTools.toList(WorkCompleted.job_FIELDNAME));
if (null == workCompleted) {
throw new ExceptionEntityNotExist(id, WorkCompleted.class);
}
executorSeed = workCompleted.getJob();
}
return ProcessPlatformExecutorFactory.get(executorSeed).submit(new CallableAction(id)).get();
}
public static class Wo extends WoId {
}
public class CallableAction implements Callable<ActionResult<Wo>> {
private String id;
CallableAction(String id) {
this.id = id;
}
@Override
public ActionResult<Wo> call() throws Exception {
WorkCompleted workCompleted = null;
try (EntityManagerContainer emc = EntityManagerContainerFactory.instance().create()) {
workCompleted = emc.find(id, WorkCompleted.class);
Business business = new Business(emc);
List<Item> items = new ArrayList<>();
List<TaskCompleted> taskCompleteds = new ArrayList<>();
List<ReadCompleted> readCompleteds = new ArrayList<>();
List<Review> reviews = new ArrayList<>();
List<WorkLog> workLogs = new ArrayList<>();
List<Record> records = new ArrayList<>();
List<Read> reads = new ArrayList<>();
List<DocumentVersion> documentVersions = new ArrayList<>();
if (null != workCompleted) {
CompletableFuture.allOf(mergeItem(business, workCompleted, items),
mergeTaskCompleted(business, workCompleted, taskCompleteds),
mergeReadCompleted(business, workCompleted, readCompleteds),
mergeReview(business, workCompleted, reviews),
mergeWorkLog(business, workCompleted, workLogs),
mergeRecord(business, workCompleted, records), listRead(business, workCompleted, reads),
listDocumentVersion(business, workCompleted, documentVersions)).get();
emc.beginTransaction(WorkCompleted.class);
workCompleted.setMerged(true);
emc.commit();
CompletableFuture
.allOf(deleteItem(business, items), deleteTaskCompleted(business, taskCompleteds),
deleteReadCompleted(business, readCompleteds), deleteReview(business, reviews),
deleteWorkLog(business, workLogs), deleteRecord(business, records),
deleteRead(business, reads), deleteDocumentVersion(business, documentVersions))
.get();
emc.commit();
logger.print("已完成工作合并, id: {}, title:{}, sequence:{}.", workCompleted.getId(),
workCompleted.getTitle(), workCompleted.getSequence());
}
} catch (Exception e) {
throw new ExceptionCombine(e, id);
}
Wo wo = new Wo();
wo.setId(id);
ActionResult<Wo> result = new ActionResult<>();
result.setData(wo);
return result;
}
private CompletableFuture<Void> mergeItem(Business business, WorkCompleted workCompleted, List<Item> items) {
return CompletableFuture.runAsync(() -> {
try {
List<Item> os = business.entityManagerContainer().listEqualAndEqual(Item.class,
DataItem.bundle_FIELDNAME, workCompleted.getJob(), DataItem.itemCategory_FIELDNAME,
ItemCategory.pp);
DataItemConverter<Item> converter = new DataItemConverter<>(Item.class);
JsonElement jsonElement = converter.assemble(os);
workCompleted.getProperties().setData(gson.fromJson(jsonElement, Data.class));
items.addAll(os);
} catch (Exception e) {
logger.error(e);
}
});
}
private CompletableFuture<Void> mergeTaskCompleted(Business business, WorkCompleted workCompleted,
List<TaskCompleted> taskCompleteds) {
return CompletableFuture.runAsync(() -> {
try {
List<TaskCompleted> os = business.entityManagerContainer()
.listEqual(TaskCompleted.class, TaskCompleted.job_FIELDNAME, workCompleted.getJob())
.stream().sorted(Comparator.comparing(TaskCompleted::getCreateTime,
Comparator.nullsLast(Date::compareTo)))
.collect(Collectors.toList());
workCompleted.getProperties().setTaskCompletedList(os);
taskCompleteds.addAll(os);
} catch (Exception e) {
logger.error(e);
}
});
}
private CompletableFuture<Void> mergeReadCompleted(Business business, WorkCompleted workCompleted,
List<ReadCompleted> readCompleteds) {
return CompletableFuture.runAsync(() -> {
try {
List<ReadCompleted> os = business.entityManagerContainer()
.listEqual(ReadCompleted.class, ReadCompleted.job_FIELDNAME, workCompleted.getJob())
.stream().sorted(Comparator.comparing(ReadCompleted::getCreateTime,
Comparator.nullsLast(Date::compareTo)))
.collect(Collectors.toList());
workCompleted.getProperties().setReadCompletedList(os);
readCompleteds.addAll(os);
} catch (Exception e) {
logger.error(e);
}
});
}
private CompletableFuture<Void> mergeReview(Business business, WorkCompleted workCompleted,
List<Review> reviews) {
return CompletableFuture.runAsync(() -> {
try {
List<Review> os = business.entityManagerContainer()
.listEqual(Review.class, Review.job_FIELDNAME, workCompleted.getJob()).stream()
.sorted(Comparator.comparing(Review::getCreateTime, Comparator.nullsLast(Date::compareTo)))
.collect(Collectors.toList());
workCompleted.getProperties().setReviewList(os);
reviews.addAll(os);
} catch (Exception e) {
logger.error(e);
}
});
}
private CompletableFuture<Void> mergeWorkLog(Business business, WorkCompleted workCompleted,
List<WorkLog> workLogs) {
return CompletableFuture.runAsync(() -> {
try {
List<WorkLog> os = business.entityManagerContainer()
.listEqual(WorkLog.class, WorkLog.job_FIELDNAME, workCompleted.getJob()).stream()
.sorted(Comparator.comparing(WorkLog::getCreateTime, Comparator.nullsLast(Date::compareTo)))
.collect(Collectors.toList());
workCompleted.getProperties().setWorkLogList(os);
workLogs.addAll(os);
} catch (Exception e) {
logger.error(e);
}
});
}
private CompletableFuture<Void> mergeRecord(Business business, WorkCompleted workCompleted,
List<Record> records) {
return CompletableFuture.runAsync(() -> {
try {
List<Record> os = business.entityManagerContainer()
.listEqual(Record.class, Record.job_FIELDNAME, workCompleted.getJob()).stream()
.sorted(Comparator.comparing(Record::getCreateTime, Comparator.nullsLast(Date::compareTo)))
.collect(Collectors.toList());
workCompleted.getProperties().setRecordList(os);
records.addAll(os);
} catch (Exception e) {
logger.error(e);
}
});
}
private CompletableFuture<Void> listDocumentVersion(Business business, WorkCompleted workCompleted,
List<DocumentVersion> documentVersions) {
return CompletableFuture.runAsync(() -> {
try {
List<DocumentVersion> os = business.entityManagerContainer().listEqual(DocumentVersion.class,
DocumentVersion.job_FIELDNAME, workCompleted.getJob());
documentVersions.addAll(os);
} catch (Exception e) {
logger.error(e);
}
});
}
private CompletableFuture<Void> listRead(Business business, WorkCompleted workCompleted, List<Read> reads) {
return CompletableFuture.runAsync(() -> {
try {
List<Read> os = business.entityManagerContainer()
.listEqual(Read.class, Read.job_FIELDNAME, workCompleted.getJob()).stream()
.sorted(Comparator.comparing(Read::getCreateTime, Comparator.nullsLast(Date::compareTo)))
.collect(Collectors.toList());
reads.addAll(os);
} catch (Exception e) {
logger.error(e);
}
});
}
private CompletableFuture<Void> deleteItem(Business business, List<Item> items) {
return CompletableFuture.runAsync(() -> {
try {
business.entityManagerContainer().beginTransaction(Item.class);
for (Item o : items) {
business.entityManagerContainer().remove(o);
}
} catch (Exception e) {
logger.error(e);
}
});
}
private CompletableFuture<Void> deleteTaskCompleted(Business business, List<TaskCompleted> taskCompleteds) {
return CompletableFuture.runAsync(() -> {
try {
business.entityManagerContainer().beginTransaction(TaskCompleted.class);
for (TaskCompleted o : taskCompleteds) {
business.entityManagerContainer().remove(o);
}
} catch (Exception e) {
logger.error(e);
}
});
}
private CompletableFuture<Void> deleteReadCompleted(Business business, List<ReadCompleted> readCompleteds) {
return CompletableFuture.runAsync(() -> {
try {
business.entityManagerContainer().beginTransaction(ReadCompleted.class);
for (ReadCompleted o : readCompleteds) {
business.entityManagerContainer().remove(o);
}
} catch (Exception e) {
logger.error(e);
}
});
}
private CompletableFuture<Void> deleteReview(Business business, List<Review> reviews) {
return CompletableFuture.runAsync(() -> {
try {
business.entityManagerContainer().beginTransaction(Review.class);
for (Review o : reviews) {
business.entityManagerContainer().remove(o);
}
} catch (Exception e) {
logger.error(e);
}
});
}
private CompletableFuture<Void> deleteWorkLog(Business business, List<WorkLog> workLogs) {
return CompletableFuture.runAsync(() -> {
try {
business.entityManagerContainer().beginTransaction(WorkLog.class);
for (WorkLog o : workLogs) {
business.entityManagerContainer().remove(o);
}
} catch (Exception e) {
logger.error(e);
}
});
}
private CompletableFuture<Void> deleteRecord(Business business, List<Record> records) {
return CompletableFuture.runAsync(() -> {
try {
business.entityManagerContainer().beginTransaction(Record.class);
for (Record o : records) {
business.entityManagerContainer().remove(o);
}
} catch (Exception e) {
logger.error(e);
}
});
}
private CompletableFuture<Void> deleteDocumentVersion(Business business,
List<DocumentVersion> documentVersions) {
return CompletableFuture.runAsync(() -> {
try {
business.entityManagerContainer().beginTransaction(DocumentVersion.class);
for (DocumentVersion o : documentVersions) {
business.entityManagerContainer().remove(o);
}
} catch (Exception e) {
logger.error(e);
}
});
}
private CompletableFuture<Void> deleteRead(Business business, List<Read> reads) {
return CompletableFuture.runAsync(() -> {
try {
business.entityManagerContainer().beginTransaction(Read.class);
for (Read o : reads) {
business.entityManagerContainer().remove(o);
}
} catch (Exception e) {
logger.error(e);
}
});
}
}
}
\ No newline at end of file
......@@ -49,17 +49,17 @@ public class WorkCompletedAction extends StandardJaxrsAction {
asyncResponse.resume(ResponseFactory.getEntityTagActionResultResponse(request, result));
}
@JaxrsMethodDescribe(value = "指定的已完成工作进行合并.", action = ActionCombine.class)
@JaxrsMethodDescribe(value = "指定的已完成工作进行合并.", action = ActionMerge.class)
@GET
@Path("{flag}/combine")
@Path("{flag}/merge")
@Produces(HttpMediaType.APPLICATION_JSON_UTF_8)
@Consumes(MediaType.APPLICATION_JSON)
public void combine(@Suspended final AsyncResponse asyncResponse, @Context HttpServletRequest request,
public void merge(@Suspended final AsyncResponse asyncResponse, @Context HttpServletRequest request,
@JaxrsParameterDescribe("完成工作") @PathParam("flag") String flag) {
ActionResult<ActionCombine.Wo> result = new ActionResult<>();
ActionResult<ActionMerge.Wo> result = new ActionResult<>();
EffectivePerson effectivePerson = this.effectivePerson(request);
try {
result = new ActionCombine().execute(effectivePerson, flag);
result = new ActionMerge().execute(effectivePerson, flag);
} catch (Exception e) {
logger.error(e, effectivePerson, request, null);
result.error(e);
......
......@@ -2,11 +2,11 @@ package com.x.processplatform.service.processing.schedule;
import com.x.base.core.project.exception.PromptException;
class ExceptionCombine extends PromptException {
class ExceptionMerge extends PromptException {
private static final long serialVersionUID = -7038279889683420366L;
ExceptionCombine(Exception e, String id, String title, String sequence) {
ExceptionMerge(Exception e, String id, String title, String sequence) {
super(e, "已完成工作合并失败, id:{}, title:{}, sequence:{}.");
}
......
......@@ -52,21 +52,7 @@ public class Merge extends AbstractJob {
if (!targets.isEmpty()) {
sequence = targets.get(targets.size() - 1).getSequence();
for (WorkCompleted workCompleted : targets) {
try {
try {
ThisApplication.context().applications()
.getQuery(x_processplatform_service_processing.class, Applications
.joinQueryUri("workcompleted", workCompleted.getId(), "combine"),
workCompleted.getJob())
.getData(WoId.class);
count.incrementAndGet();
} catch (Exception e) {
throw new ExceptionCombine(e, workCompleted.getId(), workCompleted.getTitle(),
workCompleted.getSequence());
}
} catch (Exception e) {
logger.error(e);
}
call(workCompleted, count);
}
}
} while (!targets.isEmpty());
......@@ -76,6 +62,18 @@ public class Merge extends AbstractJob {
}
}
private void call(WorkCompleted workCompleted, AtomicInteger count) {
try {
ThisApplication.context().applications().getQuery(x_processplatform_service_processing.class,
Applications.joinQueryUri("workcompleted", workCompleted.getId(), "merge"), workCompleted.getJob())
.getData(WoId.class);
count.incrementAndGet();
} catch (Exception e) {
logger.error(new ExceptionMerge(e, workCompleted.getId(), workCompleted.getTitle(),
workCompleted.getSequence()));
}
}
private List<WorkCompleted> list(EntityManagerContainer emc, String sequence) throws Exception {
Date date = new Date();
date = DateUtils.addDays(date, 0 - Config.processPlatform().getMerge().getThresholdDays());
......@@ -93,7 +91,8 @@ public class Merge extends AbstractJob {
p = cb.and(p, cb.greaterThan(sequencePath, sequence));
}
cq.multiselect(idPath, jobPath, sequencePath).where(p).orderBy(cb.asc(sequencePath));
List<Tuple> os = em.createQuery(cq).setMaxResults(100).getResultList();
List<Tuple> os = em.createQuery(cq).setMaxResults(Config.processPlatform().getMerge().getBatchSize())
.getResultList();
List<WorkCompleted> list = new ArrayList<>();
for (Tuple o : os) {
WorkCompleted workCompleted = new WorkCompleted();
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册