瀏覽代碼

Merge branch 'fix/查询人员信息未排序的问题' into 'wrdp'

[人员组织]修复查询人员信息未排序的问题

See merge request o2oa/o2oa!2421
o2null 5 年之前
父節點
當前提交
c3a2c3781d

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

@@ -1,8 +1,6 @@
 package com.x.organization.assemble.express.jaxrs.person;
 package com.x.organization.assemble.express.jaxrs.person;
 
 
-import java.util.ArrayList;
-import java.util.List;
-import java.util.Optional;
+import java.util.*;
 import java.util.stream.Collectors;
 import java.util.stream.Collectors;
 
 
 import javax.persistence.EntityManager;
 import javax.persistence.EntityManager;
@@ -82,39 +80,63 @@ class ActionListWithUnitSubDirectLikeObject extends BaseAction {
 
 
 	}
 	}
 
 
-	private List<Wo> list(Business business, Wi wi, List<String> ids) throws Exception {
+	private List<Wo> list(Business business, Wi wi, List<Identity> identityList) throws Exception {
 		List<Wo> wos = new ArrayList<>();
 		List<Wo> wos = new ArrayList<>();
-		String str = StringUtils.lowerCase(StringTools.escapeSqlLikeKey(wi.getKey()));
 		EntityManager em = business.entityManagerContainer().get(Person.class);
 		EntityManager em = business.entityManagerContainer().get(Person.class);
 		CriteriaBuilder cb = em.getCriteriaBuilder();
 		CriteriaBuilder cb = em.getCriteriaBuilder();
 		CriteriaQuery<String> cq = cb.createQuery(String.class);
 		CriteriaQuery<String> cq = cb.createQuery(String.class);
 		Root<Person> root = cq.from(Person.class);
 		Root<Person> root = cq.from(Person.class);
-		Predicate p = cb.like(cb.lower(root.get(Person_.name)), "%" + str + "%", StringTools.SQL_ESCAPE_CHAR);
-		p = cb.or(p, cb.like(cb.lower(root.get(Person_.unique)), "%" + str + "%", StringTools.SQL_ESCAPE_CHAR));
-		p = cb.or(p, cb.like(cb.lower(root.get(Person_.pinyin)), str + "%", StringTools.SQL_ESCAPE_CHAR));
-		p = cb.or(p, cb.like(cb.lower(root.get(Person_.pinyinInitial)), str + "%", StringTools.SQL_ESCAPE_CHAR));
-		p = cb.or(p, cb.like(cb.lower(root.get(Person_.mobile)), str + "%", StringTools.SQL_ESCAPE_CHAR));
-		p = cb.or(p, cb.like(cb.lower(root.get(Person_.distinguishedName)), str + "%", StringTools.SQL_ESCAPE_CHAR));
-		p = cb.and(p, cb.isMember(root.get(Person_.id), cb.literal(ids)));
+		Predicate p = cb.conjunction();
+		if(StringUtils.isNotBlank(wi.getKey())) {
+			String str = StringUtils.lowerCase(StringTools.escapeSqlLikeKey(wi.getKey()));
+			p = cb.like(cb.lower(root.get(Person_.name)), "%" + str + "%", StringTools.SQL_ESCAPE_CHAR);
+			p = cb.or(p, cb.like(cb.lower(root.get(Person_.unique)), "%" + str + "%", StringTools.SQL_ESCAPE_CHAR));
+			p = cb.or(p, cb.like(cb.lower(root.get(Person_.pinyin)), str + "%", StringTools.SQL_ESCAPE_CHAR));
+			p = cb.or(p, cb.like(cb.lower(root.get(Person_.pinyinInitial)), str + "%", StringTools.SQL_ESCAPE_CHAR));
+			p = cb.or(p, cb.like(cb.lower(root.get(Person_.mobile)), str + "%", StringTools.SQL_ESCAPE_CHAR));
+			p = cb.or(p, cb.like(cb.lower(root.get(Person_.distinguishedName)), str + "%", StringTools.SQL_ESCAPE_CHAR));
+		}
+		Map<String,Integer> map = new HashMap<>();
+		if(ListTools.isNotEmpty(identityList)) {
+			for(Identity identity : identityList){
+				map.put(identity.getPerson(), identity.getOrderNumber());
+			}
+			p = cb.and(p, cb.isMember(root.get(Person_.id), cb.literal(map.keySet())));
+		}
 		List<String> list = em.createQuery(cq.select(root.get(Person_.id)).where(p))
 		List<String> list = em.createQuery(cq.select(root.get(Person_.id)).where(p))
 				.getResultList().stream().distinct().collect(Collectors.toList());
 				.getResultList().stream().distinct().collect(Collectors.toList());
 		for (Person o : business.person().pick(list)) {
 		for (Person o : business.person().pick(list)) {
+			if(!map.isEmpty()){
+				o.setOrderNumber(map.get(o.getId()));
+			}
 			wos.add(this.convert(business, o, Wo.class));
 			wos.add(this.convert(business, o, Wo.class));
 		}
 		}
+		wos = wos.stream()
+				.sorted(Comparator.comparing(Wo::getOrderNumber, Comparator.nullsLast(Integer::compareTo))
+						.thenComparing(Comparator
+								.comparing(Wo::getName, Comparator.nullsFirst(String::compareTo)).reversed()))
+				.collect(Collectors.toList());
 		return wos;
 		return wos;
 	}
 	}
 
 
-	private List<String> people(Business business, Wi wi) throws Exception {
-		List<Unit> os = business.unit().pick(wi.getUnitList());
-		List<String> unitIds = ListTools.extractField(os, Unit.id_FIELDNAME, String.class, true, true);
-		EntityManager em = business.entityManagerContainer().get(Identity.class);
+	private List<Identity> people(Business business, Wi wi) throws Exception {
+		List<Identity> list = new ArrayList<>();
+		if(ListTools.isNotEmpty(wi.getUnitList())) {
+			List<Unit> os = business.unit().pick(wi.getUnitList());
+			List<String> unitIds = ListTools.extractField(os, Unit.id_FIELDNAME, String.class, true, true);
+			if (ListTools.isNotEmpty(unitIds)) {
+				list = business.entityManagerContainer().fetchIn(Identity.class,
+						ListTools.toList(Identity.id_FIELDNAME, Identity.person_FIELDNAME, Identity.orderNumber_FIELDNAME), Identity.unit_FIELDNAME, unitIds);
+			}
+		}
+		/*EntityManager em = business.entityManagerContainer().get(Identity.class);
 		CriteriaBuilder cb = em.getCriteriaBuilder();
 		CriteriaBuilder cb = em.getCriteriaBuilder();
 		CriteriaQuery<String> cq = cb.createQuery(String.class);
 		CriteriaQuery<String> cq = cb.createQuery(String.class);
 		Root<Identity> root = cq.from(Identity.class);
 		Root<Identity> root = cq.from(Identity.class);
 		Predicate p = root.get(Identity_.unit).in(unitIds);
 		Predicate p = root.get(Identity_.unit).in(unitIds);
 		List<String> list = em.createQuery(cq.select(root.get(Identity_.person)).where(p))
 		List<String> list = em.createQuery(cq.select(root.get(Identity_.person)).where(p))
-				.getResultList().stream().distinct().collect(Collectors.toList());
+				.getResultList().stream().distinct().collect(Collectors.toList());*/
 		return list;
 		return list;
 	}
 	}
 
 
-}
+}

+ 25 - 15
o2server/x_organization_assemble_express/src/main/java/com/x/organization/assemble/express/jaxrs/person/ActionListWithUnitSubDirectObject.java

@@ -1,8 +1,6 @@
 package com.x.organization.assemble.express.jaxrs.person;
 package com.x.organization.assemble.express.jaxrs.person;
 
 
-import java.util.ArrayList;
-import java.util.List;
-import java.util.Optional;
+import java.util.*;
 import java.util.stream.Collectors;
 import java.util.stream.Collectors;
 
 
 import javax.persistence.EntityManager;
 import javax.persistence.EntityManager;
@@ -72,20 +70,32 @@ class ActionListWithUnitSubDirectObject extends BaseAction {
 		List<Unit> os = business.unit().pick(wi.getUnitList());
 		List<Unit> os = business.unit().pick(wi.getUnitList());
 		List<String> unitIds = new ArrayList<>();
 		List<String> unitIds = new ArrayList<>();
 		for (Unit o : os) {
 		for (Unit o : os) {
-			unitIds.add(o.getId());
+			if(!unitIds.contains(o.getId())) {
+				unitIds.add(o.getId());
+			}
+		}
+		unitIds = ListTools.trim(unitIds, true, true);
+		List<Identity> list = new ArrayList<>();
+		if(ListTools.isNotEmpty(unitIds)) {
+			list = business.entityManagerContainer().fetchIn(Identity.class,
+					ListTools.toList(Identity.id_FIELDNAME, Identity.person_FIELDNAME, Identity.orderNumber_FIELDNAME), Identity.unit_FIELDNAME, unitIds);
 		}
 		}
-		EntityManager em = business.entityManagerContainer().get(Identity.class);
-		CriteriaBuilder cb = em.getCriteriaBuilder();
-		CriteriaQuery<String> cq = cb.createQuery(String.class);
-		Root<Identity> root = cq.from(Identity.class);
-		Predicate p = root.get(Identity_.unit).in(unitIds);
-		List<String> personIds = em.createQuery(cq.select(root.get(Identity_.person)).where(p))
-				.getResultList().stream().distinct().collect(Collectors.toList());
-		personIds = ListTools.trim(personIds, true, true);
-		for (Person o : business.person().pick(personIds)) {
-			wos.add(this.convert(business, o, Wo.class));
+		if(ListTools.isNotEmpty(list)) {
+			Map<String,Integer> map = new HashMap<>();
+			for(Identity identity : list){
+				map.put(identity.getPerson(), identity.getOrderNumber());
+			}
+			for (Person o : business.person().pick(new ArrayList<>(map.keySet()))) {
+				o.setOrderNumber(map.get(o.getId()));
+				wos.add(this.convert(business, o, Wo.class));
+			}
+			wos = wos.stream()
+					.sorted(Comparator.comparing(Wo::getOrderNumber, Comparator.nullsLast(Integer::compareTo))
+							.thenComparing(Comparator
+									.comparing(Wo::getName, Comparator.nullsFirst(String::compareTo)).reversed()))
+					.collect(Collectors.toList());
 		}
 		}
 		return wos;
 		return wos;
 	}
 	}
 
 
-}
+}

+ 44 - 22
o2server/x_organization_assemble_express/src/main/java/com/x/organization/assemble/express/jaxrs/person/ActionListWithUnitSubNestedLikeObject.java

@@ -1,8 +1,6 @@
 package com.x.organization.assemble.express.jaxrs.person;
 package com.x.organization.assemble.express.jaxrs.person;
 
 
-import java.util.ArrayList;
-import java.util.List;
-import java.util.Optional;
+import java.util.*;
 import java.util.stream.Collectors;
 import java.util.stream.Collectors;
 
 
 import javax.persistence.EntityManager;
 import javax.persistence.EntityManager;
@@ -82,44 +80,68 @@ class ActionListWithUnitSubNestedLikeObject extends BaseAction {
 
 
 	}
 	}
 
 
-	private List<Wo> list(Business business, Wi wi, List<String> ids) throws Exception {
+	private List<Wo> list(Business business, Wi wi, List<Identity> identityList) throws Exception {
 		List<Wo> wos = new ArrayList<>();
 		List<Wo> wos = new ArrayList<>();
-		String str = StringUtils.lowerCase(StringTools.escapeSqlLikeKey(wi.getKey()));
 		EntityManager em = business.entityManagerContainer().get(Person.class);
 		EntityManager em = business.entityManagerContainer().get(Person.class);
 		CriteriaBuilder cb = em.getCriteriaBuilder();
 		CriteriaBuilder cb = em.getCriteriaBuilder();
 		CriteriaQuery<String> cq = cb.createQuery(String.class);
 		CriteriaQuery<String> cq = cb.createQuery(String.class);
 		Root<Person> root = cq.from(Person.class);
 		Root<Person> root = cq.from(Person.class);
-		Predicate p = cb.like(cb.lower(root.get(Person_.name)), "%" + str + "%", StringTools.SQL_ESCAPE_CHAR);
-		p = cb.or(p, cb.like(cb.lower(root.get(Person_.unique)), "%" + str + "%", StringTools.SQL_ESCAPE_CHAR));
-		p = cb.or(p, cb.like(cb.lower(root.get(Person_.pinyin)), str + "%", StringTools.SQL_ESCAPE_CHAR));
-		p = cb.or(p, cb.like(cb.lower(root.get(Person_.pinyinInitial)), str + "%", StringTools.SQL_ESCAPE_CHAR));
-		p = cb.or(p, cb.like(cb.lower(root.get(Person_.mobile)), str + "%", StringTools.SQL_ESCAPE_CHAR));
-		p = cb.or(p, cb.like(cb.lower(root.get(Person_.distinguishedName)), str + "%", StringTools.SQL_ESCAPE_CHAR));
-		p = cb.and(p, cb.isMember(root.get(Person_.id), cb.literal(ids)));
+		Predicate p = cb.conjunction();
+		if(StringUtils.isNotBlank(wi.getKey())) {
+			String str = StringUtils.lowerCase(StringTools.escapeSqlLikeKey(wi.getKey()));
+			p = cb.like(cb.lower(root.get(Person_.name)), "%" + str + "%", StringTools.SQL_ESCAPE_CHAR);
+			p = cb.or(p, cb.like(cb.lower(root.get(Person_.unique)), "%" + str + "%", StringTools.SQL_ESCAPE_CHAR));
+			p = cb.or(p, cb.like(cb.lower(root.get(Person_.pinyin)), str + "%", StringTools.SQL_ESCAPE_CHAR));
+			p = cb.or(p, cb.like(cb.lower(root.get(Person_.pinyinInitial)), str + "%", StringTools.SQL_ESCAPE_CHAR));
+			p = cb.or(p, cb.like(cb.lower(root.get(Person_.mobile)), str + "%", StringTools.SQL_ESCAPE_CHAR));
+			p = cb.or(p, cb.like(cb.lower(root.get(Person_.distinguishedName)), str + "%", StringTools.SQL_ESCAPE_CHAR));
+		}
+		Map<String,Integer> map = new HashMap<>();
+		if(ListTools.isNotEmpty(identityList)) {
+			for(Identity identity : identityList){
+				map.put(identity.getPerson(), identity.getOrderNumber());
+			}
+			p = cb.and(p, cb.isMember(root.get(Person_.id), cb.literal(map.keySet())));
+		}
 		List<String> list = em.createQuery(cq.select(root.get(Person_.id)).where(p))
 		List<String> list = em.createQuery(cq.select(root.get(Person_.id)).where(p))
 				.getResultList().stream().distinct().collect(Collectors.toList());
 				.getResultList().stream().distinct().collect(Collectors.toList());
 		for (Person o : business.person().pick(list)) {
 		for (Person o : business.person().pick(list)) {
+			if(!map.isEmpty()){
+				o.setOrderNumber(map.get(o.getId()));
+			}
 			wos.add(this.convert(business, o, Wo.class));
 			wos.add(this.convert(business, o, Wo.class));
 		}
 		}
+		wos = wos.stream()
+				.sorted(Comparator.comparing(Wo::getOrderNumber, Comparator.nullsLast(Integer::compareTo))
+						.thenComparing(Comparator
+								.comparing(Wo::getName, Comparator.nullsFirst(String::compareTo)).reversed()))
+				.collect(Collectors.toList());
 		return wos;
 		return wos;
 	}
 	}
 
 
-	private List<String> people(Business business, Wi wi) throws Exception {
-		List<Unit> os = business.unit().pick(wi.getUnitList());
-		List<String> unitIds = new ArrayList<>();
-		for (Unit o : os) {
-			unitIds.add(o.getId());
-			unitIds.addAll(business.unit().listSubNested(o.getId()));
+	private List<Identity> people(Business business, Wi wi) throws Exception {
+		List<Identity> list = new ArrayList<>();
+		if(ListTools.isNotEmpty(wi.getUnitList())) {
+			List<Unit> os = business.unit().pick(wi.getUnitList());
+			List<String> unitIds = new ArrayList<>();
+			for (Unit o : os) {
+				unitIds.add(o.getId());
+				unitIds.addAll(business.unit().listSubNested(o.getId()));
+			}
+			unitIds = ListTools.trim(unitIds, true, true);
+			if (ListTools.isNotEmpty(unitIds)) {
+				list = business.entityManagerContainer().fetchIn(Identity.class,
+						ListTools.toList(Identity.id_FIELDNAME, Identity.person_FIELDNAME, Identity.orderNumber_FIELDNAME), Identity.unit_FIELDNAME, unitIds);
+			}
 		}
 		}
-		unitIds = ListTools.trim(unitIds, true, true);
-		EntityManager em = business.entityManagerContainer().get(Identity.class);
+		/*EntityManager em = business.entityManagerContainer().get(Identity.class);
 		CriteriaBuilder cb = em.getCriteriaBuilder();
 		CriteriaBuilder cb = em.getCriteriaBuilder();
 		CriteriaQuery<String> cq = cb.createQuery(String.class);
 		CriteriaQuery<String> cq = cb.createQuery(String.class);
 		Root<Identity> root = cq.from(Identity.class);
 		Root<Identity> root = cq.from(Identity.class);
 		Predicate p = root.get(Identity_.unit).in(unitIds);
 		Predicate p = root.get(Identity_.unit).in(unitIds);
 		List<String> list = em.createQuery(cq.select(root.get(Identity_.person)).where(p))
 		List<String> list = em.createQuery(cq.select(root.get(Identity_.person)).where(p))
-				.getResultList().stream().distinct().collect(Collectors.toList());
+				.getResultList().stream().distinct().collect(Collectors.toList());*/
 		return list;
 		return list;
 	}
 	}
 
 
-}
+}

+ 21 - 14
o2server/x_organization_assemble_express/src/main/java/com/x/organization/assemble/express/jaxrs/person/ActionListWithUnitSubNestedObject.java

@@ -1,8 +1,6 @@
 package com.x.organization.assemble.express.jaxrs.person;
 package com.x.organization.assemble.express.jaxrs.person;
 
 
-import java.util.ArrayList;
-import java.util.List;
-import java.util.Optional;
+import java.util.*;
 import java.util.stream.Collectors;
 import java.util.stream.Collectors;
 
 
 import javax.persistence.EntityManager;
 import javax.persistence.EntityManager;
@@ -76,18 +74,27 @@ class ActionListWithUnitSubNestedObject extends BaseAction {
 			unitIds.addAll(business.unit().listSubNested(o.getId()));
 			unitIds.addAll(business.unit().listSubNested(o.getId()));
 		}
 		}
 		unitIds = ListTools.trim(unitIds, true, true);
 		unitIds = ListTools.trim(unitIds, true, true);
-		EntityManager em = business.entityManagerContainer().get(Identity.class);
-		CriteriaBuilder cb = em.getCriteriaBuilder();
-		CriteriaQuery<String> cq = cb.createQuery(String.class);
-		Root<Identity> root = cq.from(Identity.class);
-		Predicate p = root.get(Identity_.unit).in(unitIds);
-		List<String> personIds = em.createQuery(cq.select(root.get(Identity_.person)).where(p))
-				.getResultList().stream().distinct().collect(Collectors.toList());
-		personIds = ListTools.trim(personIds, true, true);
-		for (Person o : business.person().pick(personIds)) {
-			wos.add(this.convert(business, o, Wo.class));
+		List<Identity> list = new ArrayList<>();
+		if(ListTools.isNotEmpty(unitIds)) {
+			list = business.entityManagerContainer().fetchIn(Identity.class,
+					ListTools.toList(Identity.id_FIELDNAME, Identity.person_FIELDNAME, Identity.orderNumber_FIELDNAME), Identity.unit_FIELDNAME, unitIds);
+		}
+		if(ListTools.isNotEmpty(list)) {
+			Map<String,Integer> map = new HashMap<>();
+			for(Identity identity : list){
+				map.put(identity.getPerson(), identity.getOrderNumber());
+			}
+			for (Person o : business.person().pick(new ArrayList<>(map.keySet()))) {
+				o.setOrderNumber(map.get(o.getId()));
+				wos.add(this.convert(business, o, Wo.class));
+			}
+			wos = wos.stream()
+					.sorted(Comparator.comparing(Wo::getOrderNumber, Comparator.nullsLast(Integer::compareTo))
+							.thenComparing(Comparator
+									.comparing(Wo::getName, Comparator.nullsFirst(String::compareTo)).reversed()))
+					.collect(Collectors.toList());
 		}
 		}
 		return wos;
 		return wos;
 	}
 	}
 
 
-}
+}