Sfoglia il codice sorgente

修正jpql的distinct的问题

Zhou Rui 5 anni fa
parent
commit
6ed0f9981f

+ 1 - 1
o2server/configSample/processPlatform.json

@@ -36,7 +36,7 @@
   "deleteDraft": {
     "enable": false,
     "cron": "0 0 20 * * ?",
-    "thresholdMinutes": 14400.0,
+    "thresholdMinutes": 86400.0,
     "###enable": "是否启用###",
     "###cron": "定时cron表达式###",
     "###thresholdMinutes": "设定阈值,如果超过这个时间认为是可以删除的草稿,默认为10天.###"

+ 7 - 1
o2server/configSample/qiyeweixin.json

@@ -13,6 +13,9 @@
   "messageRedirectPortal": "",
   "messageEnable": false,
   "scanLoginEnable": false,
+  "attendanceSyncEnable": false,
+  "attendanceSyncAgentId": "",
+  "attendanceSyncSecret": "",
   "###enable": "是否启用.###",
   "###syncCron": "拉入同步cron,默认每10分钟同步一次.###",
   "###forceSyncCron": "强制拉入同步cron,默认在每天的8点和12点强制进行同步.###",
@@ -26,5 +29,8 @@
   "###workUrl": "企业微信消息打开工作的url地址,如:http://dev.o2oa.net/x_desktop/###",
   "###messageRedirectPortal": "企业微信消息处理完成后跳转到特定的门户页面的Id###",
   "###messageEnable": "推送消息到企业微信###",
-  "###scanLoginEnable": "企业微信扫码登录###"
+  "###scanLoginEnable": "企业微信扫码登录###",
+  "###attendanceSyncEnable": "是否启用考勤信息###",
+  "###attendanceSyncAgentId": "企业微信考勤打卡应用id###",
+  "###attendanceSyncSecret": "企业微信考勤打卡应用secret###"
 }

+ 102 - 42
o2server/x_base_core_project/src/main/java/com/x/base/core/project/jaxrs/StandardJaxrsAction.java

@@ -16,6 +16,7 @@ import javax.servlet.http.HttpServletRequest;
 
 import org.apache.commons.beanutils.PropertyUtils;
 import org.apache.commons.collections4.map.ListOrderedMap;
+import org.apache.commons.lang3.BooleanUtils;
 import org.apache.commons.lang3.StringUtils;
 
 import com.x.base.core.container.EntityManagerContainer;
@@ -25,6 +26,7 @@ import com.x.base.core.project.bean.WrapCopier;
 import com.x.base.core.project.exception.ExceptionWhen;
 import com.x.base.core.project.gson.GsonPropertyObject;
 import com.x.base.core.project.http.ActionResult;
+import com.x.base.core.project.tools.CollectionTools;
 import com.x.base.core.project.tools.ListTools;
 
 public abstract class StandardJaxrsAction extends AbstractJaxrsAction {
@@ -622,7 +624,7 @@ public abstract class StandardJaxrsAction extends AbstractJaxrsAction {
 			ListOrderedMap<String, Collection<?>> notIns, ListOrderedMap<String, Object> members,
 			ListOrderedMap<String, Object> notMembers, boolean andJoin, String order) throws Exception {
 		EntityManager em = emc.get(cls);
-		String str = "SELECT count(o) FROM " + cls.getCanonicalName() + " o";
+		String str = "SELECT count(distinct o) FROM " + cls.getCanonicalName() + " o";
 		/* 预编译的SQL语句的参数序号,必须由1开始 */
 		Integer index = 1;
 		List<String> ps = new ArrayList<>();
@@ -694,74 +696,132 @@ public abstract class StandardJaxrsAction extends AbstractJaxrsAction {
 		return (Long) query.getSingleResult() + 1;
 	}
 
+	// private <T extends JpaObject> Long count(EntityManagerContainer emc, Class<T>
+	// cls, EqualsTerms equals,
+	// NotEqualsTerms notEquals, LikeTerms likes, InTerms ins, NotInTerms notIns,
+	// MemberTerms members,
+	// NotMemberTerms notMembers, boolean andJoin) throws Exception {
+	// EntityManager em = emc.get(cls);
+	// String str = "SELECT count(distinct o) FROM " + cls.getCanonicalName() + "
+	// o";
+	// /* 预编译的SQL语句的参数序号,必须由1开始 */
+	// Integer index = 1;
+	// List<String> ps = new ArrayList<>();
+	// List<Object> vs = new ArrayList<>();
+	// if (null != equals && (!equals.isEmpty())) {
+	// for (Entry<String, Object> en : equals.entrySet()) {
+	// ps.add("o." + en.getKey() + (" = ?" + index));
+	// vs.add(en.getValue());
+	// index++;
+	// }
+	// }
+	// if (null != notEquals && (!notEquals.isEmpty())) {
+	// for (Entry<String, Object> en : notEquals.entrySet()) {
+	// ps.add("(o." + en.getKey() + (" <> ?" + index) + " or o." + en.getKey() + "
+	// is null)");
+	// vs.add(en.getValue());
+	// index++;
+	// }
+	// }
+	// if (null != likes && (!likes.isEmpty())) {
+	// List<String> ors = new ArrayList<>();
+	// for (Entry<String, Object> en : likes.entrySet()) {
+	// ors.add("o." + en.getKey() + (" Like ?" + index));
+	// vs.add("%" + en.getValue() + "%");
+	// index++;
+	// }
+	// ps.add("(" + StringUtils.join(ors, " or ") + ")");
+	// }
+	// if (null != ins && (!ins.isEmpty())) {
+	// for (Entry<String, Collection<?>> en : ins.entrySet()) {
+	// ps.add("o." + en.getKey() + (" in ?" + index));
+	// vs.add(en.getValue());
+	// index++;
+	// }
+	// }
+	// if (null != notIns && (!notIns.isEmpty())) {
+	// for (Entry<String, Collection<?>> en : notIns.entrySet()) {
+	// ps.add("o." + en.getKey() + (" not in ?" + index));
+	// vs.add(en.getValue());
+	// index++;
+	// }
+	// }
+	// if (null != members && (!members.isEmpty())) {
+	// for (Entry<String, Object> en : members.entrySet()) {
+	// ps.add(("?" + index) + (" member of o." + en.getKey()));
+	// vs.add(en.getValue());
+	// index++;
+	// }
+	// }
+	// if (null != notMembers && (!notMembers.isEmpty())) {
+	// for (Entry<String, Object> en : notMembers.entrySet()) {
+	// ps.add(("?" + index) + (" not member of o." + en.getKey()));
+	// vs.add(en.getValue());
+	// index++;
+	// }
+	// }
+	// if (!ps.isEmpty()) {
+	// str += " where " + StringUtils.join(ps, (andJoin ? " and " : " or "));
+	// }
+	// Query query = em.createQuery(str, cls);
+	// for (int i = 0; i < vs.size(); i++) {
+	// query.setParameter(i + 1, vs.get(i));
+	// }
+	// return (Long) query.getSingleResult();
+	// }
+
 	private <T extends JpaObject> Long count(EntityManagerContainer emc, Class<T> cls, EqualsTerms equals,
 			NotEqualsTerms notEquals, LikeTerms likes, InTerms ins, NotInTerms notIns, MemberTerms members,
 			NotMemberTerms notMembers, boolean andJoin) throws Exception {
 		EntityManager em = emc.get(cls);
-		String str = "SELECT count(o) FROM " + cls.getCanonicalName() + " o";
-		/* 预编译的SQL语句的参数序号,必须由1开始 */
-		Integer index = 1;
-		List<String> ps = new ArrayList<>();
-		List<Object> vs = new ArrayList<>();
+		CriteriaBuilder cb = em.getCriteriaBuilder();
+		CriteriaQuery<Long> cq = cb.createQuery(Long.class);
+		Root<T> root = cq.from(cls);
+		List<Predicate> ps = new ArrayList<>();
 		if (null != equals && (!equals.isEmpty())) {
 			for (Entry<String, Object> en : equals.entrySet()) {
-				ps.add("o." + en.getKey() + (" = ?" + index));
-				vs.add(en.getValue());
-				index++;
+				ps.add(cb.equal(root.get(en.getKey()), en.getValue()));
 			}
 		}
 		if (null != notEquals && (!notEquals.isEmpty())) {
 			for (Entry<String, Object> en : notEquals.entrySet()) {
-				ps.add("(o." + en.getKey() + (" <> ?" + index) + " or o." + en.getKey() + " is null)");
-				vs.add(en.getValue());
-				index++;
+				ps.add(cb.or(cb.isNull(root.get(en.getKey())), cb.notEqual(root.get(en.getKey()), en.getValue())));
 			}
 		}
 		if (null != likes && (!likes.isEmpty())) {
-			List<String> ors = new ArrayList<>();
+			List<Predicate> ors = new ArrayList<>();
 			for (Entry<String, Object> en : likes.entrySet()) {
-				ors.add("o." + en.getKey() + (" Like ?" + index));
-				vs.add("%" + en.getValue() + "%");
-				index++;
+				ors.add(cb.like(root.get(en.getKey()), "%" + en.getValue() + "%"));
 			}
-			ps.add("(" + StringUtils.join(ors, " or ") + ")");
+			ps.add(cb.or(CollectionTools.toArray(ors, Predicate.class)));
 		}
 		if (null != ins && (!ins.isEmpty())) {
 			for (Entry<String, Collection<?>> en : ins.entrySet()) {
-				ps.add("o." + en.getKey() + (" in ?" + index));
-				vs.add(en.getValue());
-				index++;
+				ps.add(root.get(en.getKey()).in(en.getValue()));
 			}
 		}
 		if (null != notIns && (!notIns.isEmpty())) {
 			for (Entry<String, Collection<?>> en : notIns.entrySet()) {
-				ps.add("o." + en.getKey() + (" not in ?" + index));
-				vs.add(en.getValue());
-				index++;
+				ps.add(cb.not(root.get(en.getKey()).in(en.getValue())));
 			}
 		}
 		if (null != members && (!members.isEmpty())) {
 			for (Entry<String, Object> en : members.entrySet()) {
-				ps.add(("?" + index) + (" member of o." + en.getKey()));
-				vs.add(en.getValue());
-				index++;
+				ps.add(cb.isMember(en.getValue(), root.get(en.getKey())));
 			}
 		}
 		if (null != notMembers && (!notMembers.isEmpty())) {
 			for (Entry<String, Object> en : notMembers.entrySet()) {
-				ps.add(("?" + index) + (" not member of o." + en.getKey()));
-				vs.add(en.getValue());
-				index++;
+				ps.add(cb.isNotMember(en.getValue(), root.get(en.getKey())));
 			}
 		}
-		if (!ps.isEmpty()) {
-			str += " where " + StringUtils.join(ps, (andJoin ? " and " : " or "));
-		}
-		Query query = em.createQuery(str, cls);
-		for (int i = 0; i < vs.size(); i++) {
-			query.setParameter(i + 1, vs.get(i));
+		Predicate p = null;
+		if (BooleanUtils.isTrue(andJoin)) {
+			p = cb.and(CollectionTools.toArray(ps, Predicate.class));
+		} else {
+			p = cb.or(CollectionTools.toArray(ps, Predicate.class));
 		}
-		return (Long) query.getSingleResult();
+		return em.createQuery(cq.select(cb.countDistinct(root)).where(p)).getSingleResult();
 	}
 
 	/**
@@ -1061,7 +1121,7 @@ public abstract class StandardJaxrsAction extends AbstractJaxrsAction {
 				selections.add(root.get(field));
 			}
 
-			List<Tuple> os = em.createQuery(cq.multiselect(selections))
+			List<Tuple> os = em.createQuery(cq.multiselect(selections).distinct(true))
 					.setMaxResults(Math.max(Math.min(count, list_max), list_min)).getResultList();
 
 			List<W> ws = new ArrayList<W>();
@@ -1121,7 +1181,7 @@ public abstract class StandardJaxrsAction extends AbstractJaxrsAction {
 				selections.add(root.get(field));
 			}
 
-			List<Tuple> os = em.createQuery(cq.multiselect(selections))
+			List<Tuple> os = em.createQuery(cq.multiselect(selections).distinct(true))
 					.setMaxResults(Math.max(Math.min(count, list_max), list_min)).getResultList();
 
 			List<W> ws = new ArrayList<W>();
@@ -1176,8 +1236,8 @@ public abstract class StandardJaxrsAction extends AbstractJaxrsAction {
 				cq.orderBy(cb.asc(root.get(sequenceField)));
 			}
 
-			List<T> os = em.createQuery(cq.select(root)).setMaxResults(Math.max(Math.min(count, list_max), list_min))
-					.getResultList();
+			List<T> os = em.createQuery(cq.select(root).distinct(true))
+					.setMaxResults(Math.max(Math.min(count, list_max), list_min)).getResultList();
 
 			ActionResult<List<T>> result = new ActionResult<>();
 			result.setData(new ArrayList<T>(os));
@@ -1240,14 +1300,14 @@ public abstract class StandardJaxrsAction extends AbstractJaxrsAction {
 		CriteriaBuilder cb = em.getCriteriaBuilder();
 		CriteriaQuery<Long> cq = cb.createQuery(Long.class);
 		Root<T> root = cq.from(cls);
-		return em.createQuery(cq.select(cb.count(root)).where(predicate)).getSingleResult();
+		return em.createQuery(cq.select(cb.countDistinct(root)).where(predicate)).getSingleResult();
 	}
 
 	/**
 	 * 将request参数值转为json
 	 */
 	public String request2Json(HttpServletRequest request) {
-		Map<String,String> map = new HashMap<>();
+		Map<String, String> map = new HashMap<>();
 		Enumeration paramNames = request.getParameterNames();
 		while (paramNames.hasMoreElements()) {
 			String paramName = (String) paramNames.nextElement();

+ 20 - 0
o2server/x_base_core_project/src/main/java/com/x/base/core/project/tools/CollectionTools.java

@@ -0,0 +1,20 @@
+package com.x.base.core.project.tools;
+
+import java.util.Collection;
+
+import org.apache.commons.collections4.IteratorUtils;
+
+/**
+ * @author Ray
+ */
+public class CollectionTools {
+
+    private CollectionTools() {
+        // nothing
+    }
+
+    public static <T> T[] toArray(Collection<T> col, Class<T> cls) {
+        return IteratorUtils.toArray(col.iterator(), cls);
+    }
+
+}

+ 2 - 4
o2server/x_message_assemble_communicate/src/main/webapp/describe/sources/com/x/message/assemble/communicate/jaxrs/message/ActionCustomCreate.java

@@ -1,7 +1,5 @@
 package com.x.message.assemble.communicate.jaxrs.message;
 
-import org.apache.commons.lang3.StringUtils;
-
 import com.google.gson.JsonElement;
 import com.x.base.core.container.EntityManagerContainer;
 import com.x.base.core.container.factory.EntityManagerContainerFactory;
@@ -14,13 +12,13 @@ import com.x.base.core.project.config.Config;
 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.jaxrs.WoId;
 import com.x.base.core.project.jaxrs.WrapBoolean;
 import com.x.base.core.project.logger.Logger;
 import com.x.base.core.project.logger.LoggerFactory;
 import com.x.base.core.project.message.MessageConnector;
 import com.x.message.assemble.communicate.ThisApplication;
-import com.x.message.core.entity.Message;
+
+import org.apache.commons.lang3.StringUtils;
 
 class ActionCustomCreate extends BaseAction {
 

+ 0 - 2
o2server/x_organization_assemble_express/src/main/java/com/x/organization/assemble/express/jaxrs/empower/ActionListWithIdentityObject.java

@@ -203,8 +203,6 @@ class ActionListWithIdentityObject extends BaseAction {
 				cb.and(cb.equal(root.get(Empower_.type), Empower.TYPE_FILTER),
 						cb.equal(root.get(Empower_.process), wi.getProcess())));
 		p = cb.and(p, root.get(Empower_.fromIdentity).in(names));
-		// p = cb.and(p, cb.isMember(root.get(Empower_.fromIdentity),
-		// cb.literal(names)));
 		p = cb.and(p, cb.equal(root.get(Empower_.enable), true));
 		p = cb.and(p, cb.lessThan(root.get(Empower_.startTime), new Date()),
 				cb.greaterThan(root.get(Empower_.completedTime), new Date()));

+ 2 - 3
o2server/x_organization_assemble_express/src/main/java/com/x/organization/assemble/express/jaxrs/person/ActionListWithUnitSubDirectLikeObject.java

@@ -9,8 +9,6 @@ import javax.persistence.criteria.CriteriaQuery;
 import javax.persistence.criteria.Predicate;
 import javax.persistence.criteria.Root;
 
-import org.apache.commons.lang3.StringUtils;
-
 import com.google.gson.JsonElement;
 import com.x.base.core.container.EntityManagerContainer;
 import com.x.base.core.container.factory.EntityManagerContainerFactory;
@@ -22,13 +20,14 @@ import com.x.base.core.project.http.EffectivePerson;
 import com.x.base.core.project.tools.ListTools;
 import com.x.base.core.project.tools.StringTools;
 import com.x.organization.assemble.express.Business;
-import com.x.organization.assemble.express.jaxrs.person.ActionListWithUnitSubDirectObject.Wo;
 import com.x.organization.core.entity.Identity;
 import com.x.organization.core.entity.Identity_;
 import com.x.organization.core.entity.Person;
 import com.x.organization.core.entity.Person_;
 import com.x.organization.core.entity.Unit;
 
+import org.apache.commons.lang3.StringUtils;
+
 import net.sf.ehcache.Element;
 
 class ActionListWithUnitSubDirectLikeObject extends BaseAction {

+ 22 - 2
o2server/x_organization_assemble_express/src/main/java/com/x/organization/assemble/express/jaxrs/role/ActionListWithPerson.java

@@ -9,8 +9,6 @@ import javax.persistence.criteria.CriteriaQuery;
 import javax.persistence.criteria.Predicate;
 import javax.persistence.criteria.Root;
 
-import org.apache.commons.lang3.StringUtils;
-
 import com.google.gson.JsonElement;
 import com.x.base.core.container.EntityManagerContainer;
 import com.x.base.core.container.factory.EntityManagerContainerFactory;
@@ -21,10 +19,14 @@ 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.organization.assemble.express.Business;
+import com.x.organization.core.entity.Group;
+import com.x.organization.core.entity.Identity;
 import com.x.organization.core.entity.Person;
 import com.x.organization.core.entity.Role;
 import com.x.organization.core.entity.Role_;
 
+import org.apache.commons.lang3.StringUtils;
+
 import net.sf.ehcache.Element;
 
 class ActionListWithPerson extends BaseAction {
@@ -71,11 +73,19 @@ class ActionListWithPerson extends BaseAction {
 		List<Person> os = business.person().pick(wi.getPersonList());
 		List<String> groupIds = new ArrayList<>();
 		List<String> personIds = new ArrayList<>();
+		List<String> unitIds = new ArrayList<>();
 		for (Person person : os) {
 			personIds.add(person.getId());
 			groupIds.addAll(business.group().listSupNestedWithPerson(person.getId()));
 		}
 		groupIds = ListTools.trim(groupIds, true, true);
+		List<Identity> identities = this.identities(business, personIds);
+		for (Identity o : identities) {
+			unitIds.add(o.getUnit());
+		}
+		unitIds = ListTools.trim(unitIds, true, true);
+		groupIds.addAll(this.groupsContainsUnit(business, unitIds));
+		groupIds = ListTools.trim(groupIds, true, true);
 		EntityManager em = business.entityManagerContainer().get(Role.class);
 		CriteriaBuilder cb = em.getCriteriaBuilder();
 		CriteriaQuery<String> cq = cb.createQuery(String.class);
@@ -88,4 +98,14 @@ class ActionListWithPerson extends BaseAction {
 		return wo;
 	}
 
+	private List<Identity> identities(Business business, List<String> personIds) throws Exception {
+		return business.entityManagerContainer().fetchIn(Identity.class,
+				ListTools.toList(Identity.unit_FIELDNAME), Identity.person_FIELDNAME,
+				personIds);
+	}
+
+	private List<String> groupsContainsUnit(Business business, List<String> units) throws Exception {
+		return business.entityManagerContainer().idsIn(Group.class, Group.unitList_FIELDNAME, units);
+	}
+
 }

+ 2 - 3
o2server/x_organization_assemble_express/src/main/webapp/describe/sources/com/x/organization/assemble/express/jaxrs/person/ActionListWithUnitSubDirectLikeObject.java

@@ -9,8 +9,6 @@ import javax.persistence.criteria.CriteriaQuery;
 import javax.persistence.criteria.Predicate;
 import javax.persistence.criteria.Root;
 
-import org.apache.commons.lang3.StringUtils;
-
 import com.google.gson.JsonElement;
 import com.x.base.core.container.EntityManagerContainer;
 import com.x.base.core.container.factory.EntityManagerContainerFactory;
@@ -22,13 +20,14 @@ import com.x.base.core.project.http.EffectivePerson;
 import com.x.base.core.project.tools.ListTools;
 import com.x.base.core.project.tools.StringTools;
 import com.x.organization.assemble.express.Business;
-import com.x.organization.assemble.express.jaxrs.person.ActionListWithUnitSubDirectObject.Wo;
 import com.x.organization.core.entity.Identity;
 import com.x.organization.core.entity.Identity_;
 import com.x.organization.core.entity.Person;
 import com.x.organization.core.entity.Person_;
 import com.x.organization.core.entity.Unit;
 
+import org.apache.commons.lang3.StringUtils;
+
 import net.sf.ehcache.Element;
 
 class ActionListWithUnitSubDirectLikeObject extends BaseAction {

+ 22 - 2
o2server/x_organization_assemble_express/src/main/webapp/describe/sources/com/x/organization/assemble/express/jaxrs/role/ActionListWithPerson.java

@@ -9,8 +9,6 @@ import javax.persistence.criteria.CriteriaQuery;
 import javax.persistence.criteria.Predicate;
 import javax.persistence.criteria.Root;
 
-import org.apache.commons.lang3.StringUtils;
-
 import com.google.gson.JsonElement;
 import com.x.base.core.container.EntityManagerContainer;
 import com.x.base.core.container.factory.EntityManagerContainerFactory;
@@ -21,10 +19,14 @@ 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.organization.assemble.express.Business;
+import com.x.organization.core.entity.Group;
+import com.x.organization.core.entity.Identity;
 import com.x.organization.core.entity.Person;
 import com.x.organization.core.entity.Role;
 import com.x.organization.core.entity.Role_;
 
+import org.apache.commons.lang3.StringUtils;
+
 import net.sf.ehcache.Element;
 
 class ActionListWithPerson extends BaseAction {
@@ -71,11 +73,19 @@ class ActionListWithPerson extends BaseAction {
 		List<Person> os = business.person().pick(wi.getPersonList());
 		List<String> groupIds = new ArrayList<>();
 		List<String> personIds = new ArrayList<>();
+		List<String> unitIds = new ArrayList<>();
 		for (Person person : os) {
 			personIds.add(person.getId());
 			groupIds.addAll(business.group().listSupNestedWithPerson(person.getId()));
 		}
 		groupIds = ListTools.trim(groupIds, true, true);
+		List<Identity> identities = this.identities(business, personIds);
+		for (Identity o : identities) {
+			unitIds.add(o.getUnit());
+		}
+		unitIds = ListTools.trim(unitIds, true, true);
+		groupIds.addAll(this.groupsContainsUnit(business, unitIds));
+		groupIds = ListTools.trim(groupIds, true, true);
 		EntityManager em = business.entityManagerContainer().get(Role.class);
 		CriteriaBuilder cb = em.getCriteriaBuilder();
 		CriteriaQuery<String> cq = cb.createQuery(String.class);
@@ -88,4 +98,14 @@ class ActionListWithPerson extends BaseAction {
 		return wo;
 	}
 
+	private List<Identity> identities(Business business, List<String> personIds) throws Exception {
+		return business.entityManagerContainer().fetchIn(Identity.class,
+				ListTools.toList(Identity.unit_FIELDNAME), Identity.person_FIELDNAME,
+				personIds);
+	}
+
+	private List<String> groupsContainsUnit(Business business, List<String> units) throws Exception {
+		return business.entityManagerContainer().idsIn(Group.class, Group.unitList_FIELDNAME, units);
+	}
+
 }

+ 12 - 0
o2server/x_processplatform_assemble_designer/src/main/webapp/describe/sources/com/x/processplatform/assemble/designer/jaxrs/output/ActionList.java

@@ -1,5 +1,6 @@
 package com.x.processplatform.assemble.designer.jaxrs.output;
 
+import java.util.ArrayList;
 import java.util.Comparator;
 import java.util.List;
 import java.util.stream.Collectors;
@@ -25,6 +26,8 @@ import com.x.processplatform.core.entity.element.wrap.WrapForm;
 import com.x.processplatform.core.entity.element.wrap.WrapProcess;
 import com.x.processplatform.core.entity.element.wrap.WrapProcessPlatform;
 import com.x.processplatform.core.entity.element.wrap.WrapScript;
+import org.apache.commons.lang3.BooleanUtils;
+import org.apache.commons.lang3.StringUtils;
 
 class ActionList extends BaseAction {
 
@@ -36,6 +39,15 @@ class ActionList extends BaseAction {
 			List<Wo> wos = emc.fetchAll(Application.class, Wo.copier);
 
 			List<WrapProcess> processList = emc.fetchAll(Process.class, processCopier);
+			processList.stream().forEach( o -> {
+				if(StringUtils.isEmpty(o.getEdition())){
+					o.setName(o.getName() + "_V1.0");
+				}else{
+					o.setName(o.getEditionName());
+				}
+			});
+			processList = processList.stream().sorted(Comparator.comparing(WrapProcess::getName, Comparator.nullsLast(String::compareTo)))
+					.collect(Collectors.toList());
 
 			List<WrapForm> formList = emc.fetchAll(Form.class, formCopier);