فهرست منبع

修复人员查询接口bug,未判断参数为空的情况,导致查询出全量数据

o2sword 5 سال پیش
والد
کامیت
c6661c6778

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

@@ -82,6 +82,11 @@ class ActionListWithUnitSubDirectLike extends BaseAction {
 	}
 
 	private Wo list(Business business, Wi wi, List<String> ids) throws Exception {
+		Wo wo = new Wo();
+		if(StringUtils.isBlank(wi.getKey()) &&
+				(ListTools.isEmpty(wi.getUnitList()) || ListTools.isEmpty(ids))){
+			return wo;
+		}
 		String str = StringUtils.lowerCase(StringTools.escapeSqlLikeKey(wi.getKey()));
 		EntityManager em = business.entityManagerContainer().get(Person.class);
 		CriteriaBuilder cb = em.getCriteriaBuilder();
@@ -97,22 +102,24 @@ class ActionListWithUnitSubDirectLike extends BaseAction {
 		List<String> list = em.createQuery(cq.select(root.get(Person_.id)).where(p))
 				.getResultList().stream().distinct().collect(Collectors.toList());
 		List<String> values = business.person().listPersonDistinguishedNameSorted(list);
-		Wo wo = new Wo();
 		wo.getPersonList().addAll(values);
 		return wo;
 	}
 
 	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);
-		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> list = em.createQuery(cq.select(root.get(Identity_.person)).where(p))
-				.getResultList().stream().distinct().collect(Collectors.toList());
+		List<String> 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);
+			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 = em.createQuery(cq.select(root.get(Identity_.person)).where(p))
+					.getResultList().stream().distinct().collect(Collectors.toList());
+		}
 		return list;
 	}
 
-}
+}

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

@@ -82,6 +82,10 @@ class ActionListWithUnitSubDirectLikeObject extends BaseAction {
 
 	private List<Wo> list(Business business, Wi wi, List<Identity> identityList) throws Exception {
 		List<Wo> wos = new ArrayList<>();
+		if(StringUtils.isBlank(wi.getKey()) &&
+				(ListTools.isEmpty(wi.getUnitList()) || ListTools.isEmpty(identityList))){
+			return wos;
+		}
 		EntityManager em = business.entityManagerContainer().get(Person.class);
 		CriteriaBuilder cb = em.getCriteriaBuilder();
 		CriteriaQuery<String> cq = cb.createQuery(String.class);