提交 0b617092 编写于 作者: NoSubject's avatar NoSubject

Merge branch 'feature/流程版本管理后台服务修改' into 'develop'

Merge of feature/[流程平台]流程版本管理后台服务修改 to develop

See merge request o2oa/o2oa!308
......@@ -15,7 +15,7 @@ import com.x.base.core.project.annotation.ModuleType;
"com.x.processplatform.core.entity.content.Review", "com.x.processplatform.core.entity.content.Work",
"com.x.processplatform.core.entity.content.WorkCompleted", "com.x.processplatform.core.entity.content.Task",
"com.x.processplatform.core.entity.content.TaskCompleted", "com.x.processplatform.core.entity.content.Read",
"com.x.processplatform.core.entity.content.ReadCompleted",
"com.x.processplatform.core.entity.content.ReadCompleted","com.x.processplatform.core.entity.element.Process",
"com.x.processplatform.core.entity.content.Attachment", "com.x.cms.core.entity.Document",
"com.x.cms.core.entity.AppInfo", "com.x.cms.core.entity.CategoryInfo", "com.x.cms.core.entity.Review",
"com.x.query.dynamic.entity.*" }, storageTypes = { StorageType.processPlatform }, storeJars = {
......
......@@ -16,7 +16,7 @@ import com.x.base.core.project.annotation.ModuleType;
"com.x.processplatform.core.entity.content.Task", "com.x.processplatform.core.entity.content.TaskCompleted",
"com.x.processplatform.core.entity.content.Read", "com.x.processplatform.core.entity.content.ReadCompleted",
"com.x.processplatform.core.entity.content.Review", "com.x.processplatform.core.entity.content.Work",
"com.x.processplatform.core.entity.content.WorkCompleted",
"com.x.processplatform.core.entity.content.WorkCompleted","com.x.processplatform.core.entity.element.Process",
"com.x.processplatform.core.entity.content.Attachment", "com.x.cms.core.entity.Document",
"com.x.cms.core.entity.Review", "com.x.cms.core.entity.AppInfo", "com.x.cms.core.entity.CategoryInfo",
"com.x.query.dynamic.entity.*" }, storageTypes = { StorageType.processPlatform, StorageType.cms }, storeJars = {
......
......@@ -128,6 +128,8 @@ class ActionListSummary extends BaseAction {
CriteriaQuery<Process> cq = cb.createQuery(Process.class);
Root<Process> root = cq.from(Process.class);
Predicate p = root.get(Process_.application).in(applicationIds);
p = cb.and(p, cb.or(cb.isTrue(root.get(Process_.editionEnable)),
cb.isNull(root.get(Process_.editionEnable))));
cq.select(root).where(p);
List<Process> os = em.createQuery(cq).getResultList();
List<WoProcess> wos = WoProcess.copier.copy(os);
......
......@@ -118,6 +118,8 @@ class ActionListSummaryWithApplicationCategory extends BaseAction {
CriteriaQuery<Process> cq = cb.createQuery(Process.class);
Root<Process> root = cq.from(Process.class);
Predicate p = cb.equal(root.get(Process_.application), application.getId());
p = cb.and(p, cb.or(cb.isTrue(root.get(Process_.editionEnable)),
cb.isNull(root.get(Process_.editionEnable))));
cq.select(root).where(p);
return em.createQuery(cq).getResultList();
}
......
......@@ -6,10 +6,7 @@ import java.util.List;
import java.util.stream.Collectors;
import javax.persistence.EntityManager;
import javax.persistence.criteria.CriteriaBuilder;
import javax.persistence.criteria.CriteriaQuery;
import javax.persistence.criteria.Predicate;
import javax.persistence.criteria.Root;
import javax.persistence.criteria.*;
import com.x.base.core.project.cache.ApplicationCache;
import com.x.base.core.project.http.EffectivePerson;
......@@ -299,4 +296,28 @@ public class ProcessFactory extends ElementFactory {
.collect(Collectors.toList());
return list;
}
/* 根据processList获取同版本的所有流程或者仅获取processList的流程 */
public List<Process> listObjectWithProcess(List<String> processList, boolean includeEdition) throws Exception {
EntityManager em = this.entityManagerContainer().get(Process.class);
CriteriaBuilder cb = em.getCriteriaBuilder();
CriteriaQuery<Process> cq = cb.createQuery(Process.class);
Root<Process> root = cq.from(Process.class);
Predicate p = cb.conjunction();
p = cb.and(p, root.get(Process_.id).in(processList));
if(includeEdition){
p = cb.and(p, cb.isNull(root.get(Process_.editionEnable)));
Subquery<Process> subquery = cq.subquery(Process.class);
Root<Process> subRoot = subquery.from(Process.class);
Predicate subP = cb.conjunction();
subP = cb.and(subP, cb.equal(root.get(Process_.edition), subRoot.get(Process_.edition)));
subP = cb.and(subP, subRoot.get(Process_.id).in(processList));
subP = cb.and(subP, cb.isNotNull(root.get(Process_.edition)));
subquery.select(subRoot).where(subP);
p = cb.or(p, cb.exists(subquery));
}
cq.select(root).where(p);
return em.createQuery(cq).getResultList();
}
}
\ No newline at end of file
package com.x.processplatform.assemble.surface.jaxrs.process;
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.project.annotation.FieldDescribe;
import com.x.base.core.project.bean.WrapCopier;
import com.x.base.core.project.bean.WrapCopierFactory;
import com.x.base.core.project.gson.GsonPropertyObject;
import com.x.base.core.project.http.ActionResult;
import com.x.base.core.project.http.EffectivePerson;
import com.x.base.core.project.tools.ListTools;
import com.x.processplatform.assemble.surface.Business;
import com.x.processplatform.core.entity.element.Process;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;
class ActionListWithProcess extends BaseAction {
ActionResult<List<Wo>> execute(EffectivePerson effectivePerson, JsonElement jsonElement) throws Exception {
ActionResult<List<Wo>> result = new ActionResult<>();
try (EntityManagerContainer emc = EntityManagerContainerFactory.instance().create()) {
Business business = new Business(emc);
List<Wo> wos = new ArrayList<>();
Wi wi = this.convertToWrapIn(jsonElement, Wi.class);
if(ListTools.isEmpty(wi.getProcessList())){
result.setData(wos);
return result;
}
wos = Wo.copier.copy(business.process().listObjectWithProcess(wi.getProcessList(), wi.isIncludeEdition()));
result.setData(wos);
return result;
}
}
public static class Wi extends GsonPropertyObject {
@FieldDescribe("流程(多值逗号隔开)")
private List<String> processList;
@FieldDescribe("是否同时查询同版本的流程(true|false)")
private boolean includeEdition;
public List<String> getProcessList() {
return processList;
}
public void setProcessList(List<String> processList) {
this.processList = processList;
}
public boolean isIncludeEdition() {
return includeEdition;
}
public void setIncludeEdition(boolean includeEdition) {
this.includeEdition = includeEdition;
}
}
public static class Wo extends Process {
private static final long serialVersionUID = -4124351386819473248L;
static WrapCopier<Process, Wo> copier = WrapCopierFactory.wo(Process.class, Wo.class,
Arrays.asList(Process.id_FIELDNAME, Process.name_FIELDNAME, Process.alias_FIELDNAME,
Process.edition_FIELDNAME, Process.editionNumber_FIELDNAME), null);
}
}
\ No newline at end of file
......@@ -3,16 +3,13 @@ package com.x.processplatform.assemble.surface.jaxrs.process;
import java.util.List;
import javax.servlet.http.HttpServletRequest;
import javax.ws.rs.Consumes;
import javax.ws.rs.GET;
import javax.ws.rs.Path;
import javax.ws.rs.PathParam;
import javax.ws.rs.Produces;
import javax.ws.rs.*;
import javax.ws.rs.container.AsyncResponse;
import javax.ws.rs.container.Suspended;
import javax.ws.rs.core.Context;
import javax.ws.rs.core.MediaType;
import com.google.gson.JsonElement;
import com.x.base.core.project.annotation.JaxrsDescribe;
import com.x.base.core.project.annotation.JaxrsMethodDescribe;
import com.x.base.core.project.annotation.JaxrsParameterDescribe;
......@@ -143,4 +140,22 @@ public class ProcessAction extends StandardJaxrsAction {
asyncResponse.resume(ResponseFactory.getEntityTagActionResultResponse(request, result));
}
@JaxrsMethodDescribe(value = "根据流程id查询流程简要信息.", action = ActionListWithProcess.class)
@POST
@Path("list/ids")
@Produces(HttpMediaType.APPLICATION_JSON_UTF_8)
@Consumes(MediaType.APPLICATION_JSON)
public void ListWithIds(@Suspended final AsyncResponse asyncResponse, @Context HttpServletRequest request,
JsonElement jsonElement) {
ActionResult<List<ActionListWithProcess.Wo>> result = new ActionResult<>();
EffectivePerson effectivePerson = this.effectivePerson(request);
try {
result = new ActionListWithProcess().execute(effectivePerson, jsonElement);
} catch (Exception e) {
logger.error(e, effectivePerson, request, jsonElement);
result.error(e);
}
asyncResponse.resume(ResponseFactory.getEntityTagActionResultResponse(request, result));
}
}
\ No newline at end of file
......@@ -15,6 +15,7 @@ import javax.tools.StandardJavaFileManager;
import javax.tools.StandardLocation;
import javax.tools.ToolProvider;
import com.x.query.assemble.designer.factory.*;
import org.apache.commons.io.FileUtils;
import org.apache.commons.io.IOUtils;
import org.apache.commons.io.filefilter.DirectoryFileFilter;
......@@ -37,12 +38,6 @@ import com.x.base.core.project.tools.JarTools;
import com.x.base.core.project.tools.ListTools;
import com.x.base.core.project.tools.StringTools;
import com.x.organization.core.express.Organization;
import com.x.query.assemble.designer.factory.QueryFactory;
import com.x.query.assemble.designer.factory.RevealFactory;
import com.x.query.assemble.designer.factory.StatFactory;
import com.x.query.assemble.designer.factory.StatementFactory;
import com.x.query.assemble.designer.factory.TableFactory;
import com.x.query.assemble.designer.factory.ViewFactory;
import com.x.query.assemble.designer.jaxrs.table.ExceptionCompileError;
import com.x.query.core.entity.Query;
import com.x.query.core.entity.schema.Enhance;
......@@ -128,6 +123,15 @@ public class Business {
return reveal;
}
private ProcessFactory process;
public ProcessFactory process() throws Exception {
if (null == this.process) {
this.process = new ProcessFactory(this);
}
return process;
}
public boolean controllable(EffectivePerson effectivePerson) throws Exception {
boolean result = false;
if (effectivePerson.isManager() || (this.organization().person().hasRole(effectivePerson,
......
package com.x.query.assemble.designer.factory;
import com.x.processplatform.core.entity.element.Process;
import com.x.processplatform.core.entity.element.Process_;
import com.x.query.assemble.designer.AbstractFactory;
import com.x.query.assemble.designer.Business;
import javax.persistence.EntityManager;
import javax.persistence.criteria.*;
import java.util.List;
public class ProcessFactory extends AbstractFactory {
public ProcessFactory(Business business) throws Exception {
super(business);
}
public List<Process> listObjectWithProcess(List<String> processList, boolean includeEdition) throws Exception {
EntityManager em = this.entityManagerContainer().get(Process.class);
CriteriaBuilder cb = em.getCriteriaBuilder();
CriteriaQuery<Process> cq = cb.createQuery(Process.class);
Root<Process> root = cq.from(Process.class);
Predicate p = cb.conjunction();
p = cb.and(p, root.get(Process_.id).in(processList));
if(includeEdition){
p = cb.and(p, cb.isNull(root.get(Process_.editionEnable)));
Subquery<Process> subquery = cq.subquery(Process.class);
Root<Process> subRoot = subquery.from(Process.class);
Predicate subP = cb.conjunction();
subP = cb.and(subP, cb.equal(root.get(Process_.edition), subRoot.get(Process_.edition)));
subP = cb.and(subP, subRoot.get(Process_.id).in(processList));
subP = cb.and(subP, cb.isNotNull(root.get(Process_.edition)));
subquery.select(subRoot).where(subP);
p = cb.or(p, cb.exists(subquery));
}
cq.select(root).where(p);
return em.createQuery(cq).getResultList();
}
}
\ No newline at end of file
......@@ -61,6 +61,7 @@ class ActionBundle extends BaseAction {
break;
case View.TYPE_PROCESSPLATFORM:
ProcessPlatformPlan processPlatformPlan = gson.fromJson(view.getData(), ProcessPlatformPlan.class);
this.setProcessEdition(business, processPlatformPlan);
processPlatformPlan.runtime = runtime;
os = processPlatformPlan.fetchBundles();
break;
......
......@@ -65,6 +65,7 @@ class ActionSimulate extends BaseAction {
case View.TYPE_PROCESSPLATFORM:
ProcessPlatformPlan processPlatformPlan = gson.fromJson(view.getData(), ProcessPlatformPlan.class);
this.setProcessEdition(business, processPlatformPlan);
processPlatformPlan.runtime = runtime;
processPlatformPlan.access();
result.setData(processPlatformPlan);
......
......@@ -6,6 +6,10 @@ import javax.persistence.criteria.CriteriaQuery;
import javax.persistence.criteria.Predicate;
import javax.persistence.criteria.Root;
import com.google.gson.reflect.TypeToken;
import com.x.base.core.project.tools.ListTools;
import com.x.processplatform.core.entity.element.Process;
import com.x.query.core.express.plan.ProcessPlatformPlan;
import org.apache.commons.lang3.math.NumberUtils;
import com.x.base.core.project.jaxrs.StandardJaxrsAction;
......@@ -14,6 +18,8 @@ import com.x.query.core.entity.Query;
import com.x.query.core.entity.View;
import com.x.query.core.entity.View_;
import java.util.List;
abstract class BaseAction extends StandardJaxrsAction {
protected boolean idleName(Business business, View view) throws Exception {
......@@ -44,4 +50,17 @@ abstract class BaseAction extends StandardJaxrsAction {
return NumberUtils.min(viewCount, wiCount);
}
protected void setProcessEdition(Business business, ProcessPlatformPlan processPlatformPlan) throws Exception {
if(!processPlatformPlan.where.processList.isEmpty()){
List<String> _process_ids = ListTools.extractField(processPlatformPlan.where.processList, Process.id_FIELDNAME, String.class,
true, true);
List<Process> processList = business.process().listObjectWithProcess(_process_ids, true);
List<ProcessPlatformPlan.WhereEntry.ProcessEntry> listProcessEntry = gson.fromJson(gson.toJson(processList),
new TypeToken<List<ProcessPlatformPlan.WhereEntry.ProcessEntry>>(){}.getType());
if(!listProcessEntry.isEmpty()) {
processPlatformPlan.where.processList = listProcessEntry;
}
}
}
}
......@@ -2,6 +2,7 @@ package com.x.query.assemble.surface;
import java.util.List;
import com.x.query.assemble.surface.factory.*;
import org.apache.commons.collections4.CollectionUtils;
import org.apache.commons.lang3.StringUtils;
......@@ -12,10 +13,6 @@ import com.x.base.core.project.http.EffectivePerson;
import com.x.base.core.project.organization.OrganizationDefinition;
import com.x.base.core.project.tools.ListTools;
import com.x.organization.core.express.Organization;
import com.x.query.assemble.surface.factory.QueryFactory;
import com.x.query.assemble.surface.factory.RevealFactory;
import com.x.query.assemble.surface.factory.StatFactory;
import com.x.query.assemble.surface.factory.ViewFactory;
import com.x.query.core.entity.Query;
import com.x.query.core.entity.Reveal;
import com.x.query.core.entity.Stat;
......@@ -90,6 +87,15 @@ public class Business {
return reveal;
}
private ProcessFactory process;
public ProcessFactory process() throws Exception {
if (null == this.process) {
this.process = new ProcessFactory(this);
}
return process;
}
@SuppressWarnings("unchecked")
public <T extends JpaObject> T pick(String flag, Class<T> cls) throws Exception {
String cacheKey = ApplicationCache.concreteCacheKey(cls, flag);
......
package com.x.query.assemble.surface.factory;
import com.x.processplatform.core.entity.element.Process;
import com.x.processplatform.core.entity.element.Process_;
import com.x.query.assemble.surface.AbstractFactory;
import com.x.query.assemble.surface.Business;
import javax.persistence.EntityManager;
import javax.persistence.criteria.*;
import java.util.List;
public class ProcessFactory extends AbstractFactory {
public ProcessFactory(Business business) throws Exception {
super(business);
}
public List<Process> listObjectWithProcess(List<String> processList, boolean includeEdition) throws Exception {
EntityManager em = this.entityManagerContainer().get(Process.class);
CriteriaBuilder cb = em.getCriteriaBuilder();
CriteriaQuery<Process> cq = cb.createQuery(Process.class);
Root<Process> root = cq.from(Process.class);
Predicate p = cb.conjunction();
p = cb.and(p, root.get(Process_.id).in(processList));
if(includeEdition){
p = cb.and(p, cb.isNull(root.get(Process_.editionEnable)));
Subquery<Process> subquery = cq.subquery(Process.class);
Root<Process> subRoot = subquery.from(Process.class);
Predicate subP = cb.conjunction();
subP = cb.and(subP, cb.equal(root.get(Process_.edition), subRoot.get(Process_.edition)));
subP = cb.and(subP, subRoot.get(Process_.id).in(processList));
subP = cb.and(subP, cb.isNotNull(root.get(Process_.edition)));
subquery.select(subRoot).where(subP);
p = cb.or(p, cb.exists(subquery));
}
cq.select(root).where(p);
return em.createQuery(cq).getResultList();
}
}
\ No newline at end of file
......@@ -5,6 +5,9 @@ import java.util.List;
import java.util.Map;
import java.util.Objects;
import com.google.gson.reflect.TypeToken;
import com.x.base.core.project.gson.XGsonBuilder;
import com.x.processplatform.core.entity.element.Process;
import org.apache.commons.lang3.BooleanUtils;
import org.apache.commons.lang3.StringUtils;
import org.apache.commons.lang3.math.NumberUtils;
......@@ -42,16 +45,16 @@ abstract class BaseAction extends StandardJaxrsAction {
if ((null != element) && (null != element.getObjectValue())) {
plan = (Plan) element.getObjectValue();
} else {
plan = this.accessPlan(view, runtime);
plan = this.dealPlan(business, view, runtime);
business.cache().put(new Element(cacheKey, plan));
}
} else {
plan = this.accessPlan(view, runtime);
plan = this.dealPlan(business, view, runtime);
}
return plan;
}
private Plan accessPlan(View view, Runtime runtime) throws Exception {
private Plan dealPlan(Business business, View view, Runtime runtime) throws Exception {
Plan plan = null;
switch (StringUtils.trimToEmpty(view.getType())) {
case View.TYPE_CMS:
......@@ -62,6 +65,7 @@ abstract class BaseAction extends StandardJaxrsAction {
break;
default:
ProcessPlatformPlan processPlatformPlan = gson.fromJson(view.getData(), ProcessPlatformPlan.class);
this.setProcessEdition(business, processPlatformPlan);
processPlatformPlan.runtime = runtime;
processPlatformPlan.access();
plan = processPlatformPlan;
......@@ -73,7 +77,20 @@ abstract class BaseAction extends StandardJaxrsAction {
return plan;
}
private List<String> fetchBundle(View view, Runtime runtime) throws Exception {
private void setProcessEdition(Business business, ProcessPlatformPlan processPlatformPlan) throws Exception {
if(!processPlatformPlan.where.processList.isEmpty()){
List<String> _process_ids = ListTools.extractField(processPlatformPlan.where.processList, Process.id_FIELDNAME, String.class,
true, true);
List<Process> processList = business.process().listObjectWithProcess(_process_ids, true);
List<ProcessPlatformPlan.WhereEntry.ProcessEntry> listProcessEntry = gson.fromJson(gson.toJson(processList),
new TypeToken<List<ProcessPlatformPlan.WhereEntry.ProcessEntry>>(){}.getType());
if(!listProcessEntry.isEmpty()) {
processPlatformPlan.where.processList = listProcessEntry;
}
}
}
private List<String> dealBundle(Business business, View view, Runtime runtime) throws Exception {
List<String> os = null;
switch (StringUtils.trimToEmpty(view.getType())) {
case View.TYPE_CMS:
......@@ -83,6 +100,7 @@ abstract class BaseAction extends StandardJaxrsAction {
break;
default:
ProcessPlatformPlan processPlatformPlan = gson.fromJson(view.getData(), ProcessPlatformPlan.class);
this.setProcessEdition(business, processPlatformPlan);
processPlatformPlan.runtime = runtime;
os = processPlatformPlan.fetchBundles();
break;
......@@ -99,11 +117,11 @@ abstract class BaseAction extends StandardJaxrsAction {
if ((null != element) && (null != element.getObjectValue())) {
os = (List<String>) element.getObjectValue();
} else {
os = this.fetchBundle(view, runtime);
os = this.dealBundle(business, view, runtime);
business.cache().put(new Element(cacheKey, os));
}
} else {
os = this.fetchBundle(view, runtime);
os = this.dealBundle(business, view, runtime);
}
return os;
}
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册