提交 dd868cfc 编写于 作者: Z zhourui

增加流程移动端可启动标识

上级 b5f103a9
......@@ -187,35 +187,6 @@ public class ProcessFactory extends ElementFactory {
return em.createQuery(cq).getResultList();
}
/* 获取用户可启动的流程,如果applicationId 为空则取到所有可启动流程 */
public List<String> listStartableWithApplicationTerminalMobile(EffectivePerson effectivePerson,
List<String> identities, List<String> units, Application application) throws Exception {
EntityManager em = this.entityManagerContainer().get(Process.class);
CriteriaBuilder cb = em.getCriteriaBuilder();
CriteriaQuery<String> cq = cb.createQuery(String.class);
Root<Process> root = cq.from(Process.class);
Predicate p = cb.conjunction();
if (effectivePerson.isNotManager() && (!this.business().organization().person().hasRole(effectivePerson,
OrganizationDefinition.Manager, OrganizationDefinition.ProcessPlatformManager))) {
p = cb.and(cb.isEmpty(root.get(Process_.startableIdentityList)),
cb.isEmpty(root.get(Process_.startableUnitList)));
p = cb.or(p, cb.equal(root.get(Process_.creatorPerson), effectivePerson.getDistinguishedName()));
if (ListTools.isNotEmpty(identities)) {
p = cb.or(p, root.get(Process_.startableIdentityList).in(identities));
}
if (ListTools.isNotEmpty(units)) {
p = cb.or(p, root.get(Process_.startableUnitList).in(units));
}
}
p = cb.and(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))));
// 不指名仅在client端可启动那么可启动
p = cb.and(p, cb.or(cb.isNull(root.get(Process_.startableTerminal)),
cb.notEqual(root.get(Process_.startableTerminal), Process.DEFAULTSTARTABLETERMINAL_CLIENT)));
cq.select(root.get(Process_.id)).where(p).distinct(true);
return em.createQuery(cq).getResultList();
}
/* 获取用户可启动的流程,如果applicationId 为空则取到所有可启动流程 */
public boolean startable(EffectivePerson effectivePerson, List<String> identities, List<String> units,
Process process) throws Exception {
......
......@@ -3,24 +3,41 @@ package com.x.processplatform.assemble.surface.jaxrs.process;
import java.util.ArrayList;
import java.util.List;
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 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.JpaObject;
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.exception.ExceptionAccessDenied;
import com.x.base.core.project.exception.ExceptionEntityNotExist;
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.organization.OrganizationDefinition;
import com.x.base.core.project.tools.ListTools;
import com.x.base.core.project.tools.SortTools;
import com.x.processplatform.assemble.surface.Business;
import com.x.processplatform.core.entity.element.Application;
import com.x.processplatform.core.entity.element.Process;
import com.x.processplatform.core.entity.element.Process_;
import org.apache.commons.lang3.BooleanUtils;
import org.apache.commons.lang3.StringUtils;
class ActionListWithPersonWithApplicationTerminalMobile extends BaseAction {
class ActionListWithPersonWithApplicationFilter extends BaseAction {
ActionResult<List<Wo>> execute(EffectivePerson effectivePerson, String applicationFlag) throws Exception {
ActionResult<List<Wo>> execute(EffectivePerson effectivePerson, String applicationFlag, JsonElement jsonElement)
throws Exception {
try (EntityManagerContainer emc = EntityManagerContainerFactory.instance().create()) {
Wi wi = this.convertToWrapIn(jsonElement, Wi.class);
ActionResult<List<Wo>> result = new ActionResult<>();
Business business = new Business(emc);
List<Wo> wos = new ArrayList<>();
......@@ -35,8 +52,7 @@ class ActionListWithPersonWithApplicationTerminalMobile extends BaseAction {
throw new ExceptionAccessDenied(effectivePerson);
}
List<String> ids = business.process().listStartableWithApplicationTerminalMobile(effectivePerson,
identities, units, application);
List<String> ids = list(business, effectivePerson, identities, units, application, wi);
for (String id : ids) {
wos.add(Wo.copier.copy(business.process().pick(id)));
}
......@@ -46,6 +62,44 @@ class ActionListWithPersonWithApplicationTerminalMobile extends BaseAction {
}
}
public List<String> list(Business business, EffectivePerson effectivePerson, List<String> identities,
List<String> units, Application application, Wi wi) throws Exception {
EntityManager em = business.entityManagerContainer().get(Process.class);
CriteriaBuilder cb = em.getCriteriaBuilder();
CriteriaQuery<String> cq = cb.createQuery(String.class);
Root<Process> root = cq.from(Process.class);
Predicate p = cb.conjunction();
if (effectivePerson.isNotManager()
&& (BooleanUtils.isTrue(business.organization().person().hasRole(effectivePerson,
OrganizationDefinition.Manager, OrganizationDefinition.ProcessPlatformManager)))) {
p = cb.and(cb.isEmpty(root.get(Process_.startableIdentityList)),
cb.isEmpty(root.get(Process_.startableUnitList)));
p = cb.or(p, cb.equal(root.get(Process_.creatorPerson), effectivePerson.getDistinguishedName()));
if (ListTools.isNotEmpty(identities)) {
p = cb.or(p, root.get(Process_.startableIdentityList).in(identities));
}
if (ListTools.isNotEmpty(units)) {
p = cb.or(p, root.get(Process_.startableUnitList).in(units));
}
}
p = cb.and(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))));
if (StringUtils.equals(wi.getStartableTerminal(), Process.STARTABLETERMINAL_CLIENT)) {
p = cb.and(p,
cb.or(cb.isNull(root.get(Process_.startableTerminal)),
cb.equal(root.get(Process_.startableTerminal), Process.STARTABLETERMINAL_CLIENT),
cb.equal(root.get(Process_.startableTerminal), Process.STARTABLETERMINAL_ALL)));
} else if (StringUtils.equals(wi.getStartableTerminal(), Process.STARTABLETERMINAL_MOBILE)) {
p = cb.and(p,
cb.or(cb.isNull(root.get(Process_.startableTerminal)),
cb.equal(root.get(Process_.startableTerminal), Process.STARTABLETERMINAL_MOBILE),
cb.equal(root.get(Process_.startableTerminal), Process.STARTABLETERMINAL_ALL)));
}
cq.select(root.get(Process_.id)).where(p).distinct(true);
return em.createQuery(cq).getResultList();
}
public static class Wo extends Process {
private static final long serialVersionUID = 1521228691441978462L;
......@@ -53,4 +107,17 @@ class ActionListWithPersonWithApplicationTerminalMobile extends BaseAction {
static WrapCopier<Process, Wo> copier = WrapCopierFactory.wo(Process.class, Wo.class, null,
JpaObject.FieldsInvisible);
}
public static class Wi extends GsonPropertyObject {
@FieldDescribe("可启动流程终端类型,可选值 client,mobile,all")
private String startableTerminal;
public String getStartableTerminal() {
return startableTerminal;
}
public void setStartableTerminal(String startableTerminal) {
this.startableTerminal = startableTerminal;
}
}
}
......@@ -100,18 +100,20 @@ public class ProcessAction extends StandardJaxrsAction {
asyncResponse.resume(ResponseFactory.getEntityTagActionResultResponse(request, result));
}
@JaxrsMethodDescribe(value = "根据指定Application获取mobile端可启动的流程.", action = ActionListWithPersonWithApplicationTerminalMobile.class)
@JaxrsMethodDescribe(value = "根据指定Application和指定条件获取可启动的流程.", action = ActionListWithPersonWithApplicationFilter.class)
@GET
@Path("list/application/{applicationFlag}/terminal/mobile")
@Path("list/application/{applicationFlag}/filter")
@Produces(HttpMediaType.APPLICATION_JSON_UTF_8)
@Consumes(MediaType.APPLICATION_JSON)
public void listWithPersonWithApplicationTerminalMobile(@Suspended final AsyncResponse asyncResponse,
public void listWithPersonWithApplicationFilter(@Suspended final AsyncResponse asyncResponse,
@Context HttpServletRequest request,
@JaxrsParameterDescribe("应用标识") @PathParam("applicationFlag") String applicationFlag) {
ActionResult<List<ActionListWithPersonWithApplicationTerminalMobile.Wo>> result = new ActionResult<>();
@JaxrsParameterDescribe("应用标识") @PathParam("applicationFlag") String applicationFlag,
JsonElement jsonElement) {
ActionResult<List<ActionListWithPersonWithApplicationFilter.Wo>> result = new ActionResult<>();
EffectivePerson effectivePerson = this.effectivePerson(request);
try {
result = new ActionListWithPersonWithApplicationTerminalMobile().execute(effectivePerson, applicationFlag);
result = new ActionListWithPersonWithApplicationFilter().execute(effectivePerson, applicationFlag,
jsonElement);
} catch (Exception e) {
logger.error(e, effectivePerson, request, null);
result.error(e);
......
......@@ -46,12 +46,12 @@ public class Process extends SliceJpaObject {
public static final String SERIALPHASE_ARRIVE = "arrive";
public static final String SERIALPHASE_INQUIRE = "inquire";
public static final String DEFAULTSTARTMODE_DRAFT = "draft";
public static final String DEFAULTSTARTMODE_INSTANCE = "instance";
public static final String STARTMODE_DRAFT = "draft";
public static final String STARTMODE_INSTANCE = "instance";
public static final String DEFAULTSTARTABLETERMINAL_CLIENT = "client";
public static final String DEFAULTSTARTABLETERMINAL_MOBILE = "mobile";
public static final String DEFAULTSTARTABLETERMINAL_ALL = "all";
public static final String STARTABLETERMINAL_CLIENT = "client";
public static final String STARTABLETERMINAL_MOBILE = "mobile";
public static final String STARTABLETERMINAL_ALL = "all";
public String getId() {
return id;
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册