提交 993702ea 编写于 作者: O o2null

Merge branch 'hotfix/embed' into 'master'

修改embed调用线程错误.

See merge request o2oa/o2oa!109
...@@ -120,7 +120,6 @@ public class PersonFactory extends AbstractFactory { ...@@ -120,7 +120,6 @@ public class PersonFactory extends AbstractFactory {
p = cb.or(p, cb.equal(root.get(Person_.open4Id), credential)); p = cb.or(p, cb.equal(root.get(Person_.open4Id), credential));
p = cb.or(p, cb.equal(root.get(Person_.open5Id), credential)); p = cb.or(p, cb.equal(root.get(Person_.open5Id), credential));
cq.select(root.get(Person_.id)); cq.select(root.get(Person_.id));
Query query = em.createQuery(cq.where(p));
List<String> list = em.createQuery(cq.where(p).distinct(true)).getResultList(); List<String> list = em.createQuery(cq.where(p).distinct(true)).getResultList();
if (list.size() == 1) { if (list.size() == 1) {
return list.get(0); return list.get(0);
......
...@@ -3,7 +3,6 @@ package com.x.processplatform.service.processing.jaxrs.work; ...@@ -3,7 +3,6 @@ package com.x.processplatform.service.processing.jaxrs.work;
import java.util.ArrayList; import java.util.ArrayList;
import java.util.Date; import java.util.Date;
import java.util.List; import java.util.List;
import java.util.concurrent.Callable;
import javax.persistence.EntityManager; import javax.persistence.EntityManager;
import javax.persistence.criteria.CriteriaBuilder; import javax.persistence.criteria.CriteriaBuilder;
...@@ -11,9 +10,6 @@ import javax.persistence.criteria.CriteriaQuery; ...@@ -11,9 +10,6 @@ import javax.persistence.criteria.CriteriaQuery;
import javax.persistence.criteria.Predicate; import javax.persistence.criteria.Predicate;
import javax.persistence.criteria.Root; import javax.persistence.criteria.Root;
import org.apache.commons.lang3.BooleanUtils;
import org.apache.commons.lang3.StringUtils;
import com.google.gson.JsonElement; import com.google.gson.JsonElement;
import com.x.base.core.container.EntityManagerContainer; import com.x.base.core.container.EntityManagerContainer;
import com.x.base.core.container.factory.EntityManagerContainerFactory; import com.x.base.core.container.factory.EntityManagerContainerFactory;
...@@ -27,7 +23,6 @@ import com.x.base.core.project.bean.WrapCopier; ...@@ -27,7 +23,6 @@ import com.x.base.core.project.bean.WrapCopier;
import com.x.base.core.project.bean.WrapCopierFactory; import com.x.base.core.project.bean.WrapCopierFactory;
import com.x.base.core.project.config.StorageMapping; import com.x.base.core.project.config.StorageMapping;
import com.x.base.core.project.exception.ExceptionEntityNotExist; import com.x.base.core.project.exception.ExceptionEntityNotExist;
import com.x.base.core.project.executor.ProcessPlatformExecutorFactory;
import com.x.base.core.project.gson.GsonPropertyObject; import com.x.base.core.project.gson.GsonPropertyObject;
import com.x.base.core.project.http.ActionResult; import com.x.base.core.project.http.ActionResult;
import com.x.base.core.project.http.EffectivePerson; import com.x.base.core.project.http.EffectivePerson;
...@@ -51,11 +46,15 @@ import com.x.processplatform.service.processing.MessageFactory; ...@@ -51,11 +46,15 @@ import com.x.processplatform.service.processing.MessageFactory;
import com.x.processplatform.service.processing.ThisApplication; import com.x.processplatform.service.processing.ThisApplication;
import com.x.processplatform.service.processing.WorkDataHelper; import com.x.processplatform.service.processing.WorkDataHelper;
import org.apache.commons.lang3.BooleanUtils;
import org.apache.commons.lang3.StringUtils;
/** /**
* 创建处于start状态的work * 创建处于start状态的work
* *
* @author Rui * @author Rui
* *
* 此方法不需要推入线程池运行
*/ */
class ActionAssignCreate extends BaseAction { class ActionAssignCreate extends BaseAction {
...@@ -67,86 +66,70 @@ class ActionAssignCreate extends BaseAction { ...@@ -67,86 +66,70 @@ class ActionAssignCreate extends BaseAction {
Wo wo = new Wo(); Wo wo = new Wo();
Wi wi = this.convertToWrapIn(jsonElement, Wi.class); Wi wi = this.convertToWrapIn(jsonElement, Wi.class);
Boolean processing = wi.getProcessing(); Boolean processing = wi.getProcessing();
CallWrapObject callWrapObject = new CallWrapObject();
Work work = null;
Callable<String> callable = new Callable<String>() {
public String call() throws Exception { try (EntityManagerContainer emc = EntityManagerContainerFactory.instance().create()) {
try (EntityManagerContainer emc = EntityManagerContainerFactory.instance().create()) { Business business = new Business(emc);
Business business = new Business(emc); List<String> applicationIds = listApplication(business, wi.getApplication());
List<String> applicationIds = listApplication(business, wi.getApplication()); if (ListTools.isEmpty(applicationIds)) {
if (ListTools.isEmpty(applicationIds)) { throw new ExceptionEntityNotExist(wi.getApplication(), Application.class);
throw new ExceptionEntityNotExist(wi.getApplication(), Application.class); }
} Process process = getProcess(business, applicationIds, wi.getProcess());
Process process = getProcess(business, applicationIds, wi.getProcess()); Application application = business.element().get(process.getApplication(), Application.class);
Application application = business.element().get(process.getApplication(), Application.class); Begin begin = business.element().getBeginWithProcess(process.getId());
Begin begin = business.element().getBeginWithProcess(process.getId()); work = create(application, process, begin);
Work work = create(application, process, begin); String identityDn = business.organization().identity().get(wi.getIdentity());
callWrapObject.job = work.getJob(); if (StringUtils.isEmpty(identityDn)) {
callWrapObject.id = work.getId(); throw new ExceptionIdentityNotExist(wi.getIdentity());
String identityDn = business.organization().identity().get(wi.getIdentity()); }
if (StringUtils.isEmpty(identityDn)) { work.setTitle(wi.getTitle());
throw new ExceptionIdentityNotExist(wi.getIdentity()); work.setCreatorIdentity(identityDn);
} work.setCreatorPerson(business.organization().person().getWithIdentity(identityDn));
work.setTitle(wi.getTitle()); work.setCreatorUnit(business.organization().unit().getWithIdentity(identityDn));
work.setCreatorIdentity(identityDn); /* 通过赋值调用的是不能被作为草稿删除的 */
work.setCreatorPerson(business.organization().person().getWithIdentity(identityDn)); work.setDataChanged(true);
work.setCreatorUnit(business.organization().unit().getWithIdentity(identityDn)); if (ListTools.isNotEmpty(wi.getAttachmentList())) {
/* 通过赋值调用的是不能被作为草稿删除的 */ emc.beginTransaction(Attachment.class);
work.setDataChanged(true); /** 这个attachmentList要手动初始化 */
if (ListTools.isNotEmpty(wi.getAttachmentList())) { // work.setAttachmentList(new ArrayList<String>());
emc.beginTransaction(Attachment.class); for (WiAttachment o : wi.getAttachmentList()) {
/** 这个attachmentList要手动初始化 */ StorageMapping fromMapping = ThisApplication.context().storageMappings().get(Attachment.class,
// work.setAttachmentList(new ArrayList<String>()); o.getStorage());
for (WiAttachment o : wi.getAttachmentList()) { if (null == fromMapping) {
StorageMapping fromMapping = ThisApplication.context().storageMappings() throw new ExceptionFromMappingNotExist(o.getStorage());
.get(Attachment.class, o.getStorage());
if (null == fromMapping) {
throw new ExceptionFromMappingNotExist(o.getStorage());
}
StorageMapping toMapping = ThisApplication.context().storageMappings()
.random(Attachment.class);
if (null == toMapping) {
throw new ExceptionToMappingNotExist(Attachment.class);
}
Attachment attachment = new Attachment(work, effectivePerson.getDistinguishedName(),
o.getSite());
attachment.setActivity(begin.getId());
attachment.setActivityName(begin.getName());
attachment.setActivityType(ActivityType.begin);
attachment.setActivityToken(work.getActivityToken());
attachment.saveContent(toMapping, o.readContent(fromMapping), o.getName());
emc.persist(attachment, CheckPersistType.all);
}
} }
emc.beginTransaction(Work.class); StorageMapping toMapping = ThisApplication.context().storageMappings().random(Attachment.class);
emc.persist(work, CheckPersistType.all); if (null == toMapping) {
if (null != wi.getData()) { throw new ExceptionToMappingNotExist(Attachment.class);
WorkDataHelper workDataHelper = new WorkDataHelper(emc, work);
workDataHelper.update(wi.getData());
} }
emc.commit(); Attachment attachment = new Attachment(work, effectivePerson.getDistinguishedName(), o.getSite());
MessageFactory.work_create(work); attachment.setActivity(begin.getId());
attachment.setActivityName(begin.getName());
attachment.setActivityType(ActivityType.begin);
attachment.setActivityToken(work.getActivityToken());
attachment.saveContent(toMapping, o.readContent(fromMapping), o.getName());
emc.persist(attachment, CheckPersistType.all);
} }
return "";
} }
}; emc.beginTransaction(Work.class);
emc.persist(work, CheckPersistType.all);
ProcessPlatformExecutorFactory.get(wi.getProcess()).submit(callable).get(); if (null != wi.getData()) {
WorkDataHelper workDataHelper = new WorkDataHelper(emc, work);
workDataHelper.update(wi.getData());
}
emc.commit();
}
MessageFactory.work_create(work);
if (BooleanUtils.isTrue(processing)) { if (BooleanUtils.isTrue(processing)) {
ThisApplication.context().applications().putQuery(x_processplatform_service_processing.class, ThisApplication.context().applications().putQuery(x_processplatform_service_processing.class,
Applications.joinQueryUri("work", callWrapObject.id, "processing"), null, callWrapObject.job); Applications.joinQueryUri("work", work.getId(), "processing"), null, work.getJob());
} }
wo.setId(callWrapObject.id); wo.setId(work.getId());
result.setData(wo); result.setData(wo);
return result; return result;
} }
public static class CallWrapObject {
private String job;
private String id;
}
public static class Wi extends GsonPropertyObject { public static class Wi extends GsonPropertyObject {
@FieldDescribe("应用标识") @FieldDescribe("应用标识")
...@@ -282,7 +265,7 @@ class ActionAssignCreate extends BaseAction { ...@@ -282,7 +265,7 @@ class ActionAssignCreate extends BaseAction {
work.setProcessAlias(process.getAlias()); work.setProcessAlias(process.getAlias());
work.setJob(StringTools.uniqueToken()); work.setJob(StringTools.uniqueToken());
work.setStartTime(now); work.setStartTime(now);
// work.setErrorRetry(0); // work.setErrorRetry(0);
work.setWorkStatus(WorkStatus.start); work.setWorkStatus(WorkStatus.start);
work.setDestinationActivity(begin.getId()); work.setDestinationActivity(begin.getId());
work.setDestinationActivityType(ActivityType.begin); work.setDestinationActivityType(ActivityType.begin);
......
package com.x.processplatform.service.processing.jaxrs.work; package com.x.processplatform.service.processing.jaxrs.work;
import java.util.Date; import java.util.Date;
import java.util.concurrent.Callable;
import com.google.gson.JsonElement; import com.google.gson.JsonElement;
import com.x.base.core.container.EntityManagerContainer; import com.x.base.core.container.EntityManagerContainer;
import com.x.base.core.container.factory.EntityManagerContainerFactory; import com.x.base.core.container.factory.EntityManagerContainerFactory;
import com.x.base.core.entity.annotation.CheckPersistType; import com.x.base.core.entity.annotation.CheckPersistType;
import com.x.base.core.project.executor.ProcessPlatformExecutorFactory;
import com.x.base.core.project.http.ActionResult; import com.x.base.core.project.http.ActionResult;
import com.x.base.core.project.http.EffectivePerson; import com.x.base.core.project.http.EffectivePerson;
import com.x.base.core.project.jaxrs.WoId; import com.x.base.core.project.jaxrs.WoId;
...@@ -26,7 +24,8 @@ import com.x.processplatform.service.processing.WorkDataHelper; ...@@ -26,7 +24,8 @@ import com.x.processplatform.service.processing.WorkDataHelper;
* 创建处于start状态的work * 创建处于start状态的work
* *
* @author Rui * @author Rui
* *
* 此方法不需要推入线程池运行
*/ */
class ActionCreate extends BaseAction { class ActionCreate extends BaseAction {
...@@ -35,33 +34,24 @@ class ActionCreate extends BaseAction { ...@@ -35,33 +34,24 @@ class ActionCreate extends BaseAction {
ActionResult<Wo> result = new ActionResult<>(); ActionResult<Wo> result = new ActionResult<>();
Wo wo = new Wo(); Wo wo = new Wo();
Work work = null;
try (EntityManagerContainer emc = EntityManagerContainerFactory.instance().create()) {
Business business = new Business(emc);
Process process = business.element().get(processId, Process.class);
Application application = business.element().get(process.getApplication(), Application.class);
Begin begin = business.element().getBeginWithProcess(process.getId());
Callable<String> callable = new Callable<String>() { work = create(application, process, begin);
public String call() throws Exception { emc.beginTransaction(Work.class);
try (EntityManagerContainer emc = EntityManagerContainerFactory.instance().create()) { if ((null != jsonElement) && jsonElement.isJsonObject()) {
Business business = new Business(emc); WorkDataHelper workDataHelper = new WorkDataHelper(emc, work);
Process process = business.element().get(processId, Process.class); workDataHelper.update(jsonElement);
Application application = business.element().get(process.getApplication(), Application.class);
Begin begin = business.element().getBeginWithProcess(process.getId());
Work work = create(application, process, begin);
emc.beginTransaction(Work.class);
if ((null != jsonElement) && jsonElement.isJsonObject()) {
WorkDataHelper workDataHelper = new WorkDataHelper(emc, work);
workDataHelper.update(jsonElement);
}
emc.persist(work, CheckPersistType.all);
emc.commit();
wo.setId(work.getId());
MessageFactory.work_create(work);
}
return "";
} }
}; emc.persist(work, CheckPersistType.all);
emc.commit();
/* 根据流程应用id分派进程号. */ wo.setId(work.getId());
ProcessPlatformExecutorFactory.get(processId).submit(callable).get(); }
MessageFactory.work_create(work);
result.setData(wo); result.setData(wo);
return result; return result;
} }
...@@ -85,7 +75,7 @@ class ActionCreate extends BaseAction { ...@@ -85,7 +75,7 @@ class ActionCreate extends BaseAction {
work.setProcessAlias(process.getAlias()); work.setProcessAlias(process.getAlias());
work.setJob(StringTools.uniqueToken()); work.setJob(StringTools.uniqueToken());
work.setStartTime(now); work.setStartTime(now);
// work.setErrorRetry(0); // work.setErrorRetry(0);
work.setWorkStatus(WorkStatus.start); work.setWorkStatus(WorkStatus.start);
work.setDestinationActivity(begin.getId()); work.setDestinationActivity(begin.getId());
work.setDestinationActivityType(ActivityType.begin); work.setDestinationActivityType(ActivityType.begin);
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册