From 45bd9b650f1ca04189814ad6c78e3898895129a3 Mon Sep 17 00:00:00 2001 From: luojing <13968186856@139.com> Date: Thu, 10 Sep 2020 10:37:55 +0800 Subject: [PATCH] =?UTF-8?q?=E4=BF=AE=E5=A4=8Djpql=20distinct=20=E5=AF=BC?= =?UTF-8?q?=E8=87=B4=E5=93=8D=E5=BA=94=E7=BC=93=E6=85=A2?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../factory/AttendanceDetailFactory.java | 55 ++++++++++--------- .../factory/DingdingAttendanceFactory.java | 9 +-- 2 files changed, 34 insertions(+), 30 deletions(-) diff --git a/o2server/x_attendance_assemble_control/src/main/java/com/x/attendance/assemble/control/factory/AttendanceDetailFactory.java b/o2server/x_attendance_assemble_control/src/main/java/com/x/attendance/assemble/control/factory/AttendanceDetailFactory.java index cb013a45f4..7e019cd0cd 100644 --- a/o2server/x_attendance_assemble_control/src/main/java/com/x/attendance/assemble/control/factory/AttendanceDetailFactory.java +++ b/o2server/x_attendance_assemble_control/src/main/java/com/x/attendance/assemble/control/factory/AttendanceDetailFactory.java @@ -3,6 +3,7 @@ package com.x.attendance.assemble.control.factory; import java.util.ArrayList; import java.util.Date; import java.util.List; +import java.util.stream.Collectors; import javax.persistence.EntityManager; import javax.persistence.Query; @@ -284,8 +285,10 @@ public class AttendanceDetailFactory extends AbstractFactory { } } - cq.distinct(true).select( root.get( AttendanceDetail_.empName ) ); - return em.createQuery(cq.where(p)).setMaxResults(20000).getResultList(); + /*cq.distinct(true).select( root.get( AttendanceDetail_.empName ) ); + return em.createQuery(cq.where(p)).setMaxResults(20000).getResultList();*/ + cq.select( root.get( AttendanceDetail_.empName ) ).where(p); + return em.createQuery(cq).setMaxResults(20000).getResultList().stream().distinct().collect(Collectors.toList()); } /** @@ -344,8 +347,8 @@ public class AttendanceDetailFactory extends AbstractFactory { } } - cq.distinct(true).select( root.get( AttendanceDetail_.empName ) ); - return em.createQuery(cq.where(p)).setMaxResults(20000).getResultList(); + cq.select( root.get( AttendanceDetail_.empName ) ).where(p); + return em.createQuery(cq).setMaxResults(20000).getResultList().stream().distinct().collect(Collectors.toList()); } //@MethodDescribe("按指定的开始时间,结束时间列示未被分析的AttendanceDetail信息列表") @@ -433,11 +436,11 @@ public class AttendanceDetailFactory extends AbstractFactory { CriteriaBuilder cb = em.getCriteriaBuilder(); CriteriaQuery cq = cb.createQuery(String.class); Root root = cq.from( AttendanceDetail.class); - cq.distinct(true).select( root.get(AttendanceDetail_.unitName )); + cq.select( root.get(AttendanceDetail_.unitName )); Predicate p = cb.equal( root.get(AttendanceDetail_.recordStatus), 1 ); p = cb.and(p, cb.equal( root.get(AttendanceDetail_.yearString), year )); p = cb.and(p, cb.equal( root.get(AttendanceDetail_.monthString), month )); - return em.createQuery(cq.where(p)).setMaxResults(20000).getResultList(); + return em.createQuery(cq.where(p)).setMaxResults(20000).getResultList().stream().distinct().collect(Collectors.toList()); } /** @@ -482,11 +485,11 @@ public class AttendanceDetailFactory extends AbstractFactory { CriteriaBuilder cb = em.getCriteriaBuilder(); CriteriaQuery cq = cb.createQuery(String.class); Root root = cq.from( AttendanceDetail.class); - cq.distinct(true).select( root.get(AttendanceDetail_.unitName )); + cq.select( root.get(AttendanceDetail_.unitName )); Predicate p = cb.equal( root.get(AttendanceDetail_.recordStatus), 1 ); p = cb.and(p, cb.equal( root.get(AttendanceDetail_.cycleYear), cycleYear )); p = cb.and(p, cb.equal( root.get(AttendanceDetail_.cycleMonth), cycleMonth )); - return em.createQuery(cq.where(p)).setMaxResults(20000).getResultList(); + return em.createQuery(cq.where(p)).setMaxResults(20000).getResultList().stream().distinct().collect(Collectors.toList()); } //@MethodDescribe("按指定的统计周期年份,月份列示AttendanceDetail信息中涉及的顶层组织名称列表") @@ -498,11 +501,11 @@ public class AttendanceDetailFactory extends AbstractFactory { CriteriaBuilder cb = em.getCriteriaBuilder(); CriteriaQuery cq = cb.createQuery(String.class); Root root = cq.from( AttendanceDetail.class); - cq.distinct(true).select( root.get(AttendanceDetail_.topUnitName )); + cq.select( root.get(AttendanceDetail_.topUnitName )); Predicate p = cb.equal( root.get(AttendanceDetail_.recordStatus), 1 ); p = cb.and(p, cb.equal( root.get(AttendanceDetail_.yearString), year )); p = cb.and(p, cb.equal( root.get(AttendanceDetail_.monthString), month )); - return em.createQuery(cq.where(p)).setMaxResults(1000).getResultList(); + return em.createQuery(cq.where(p)).setMaxResults(1000).getResultList().stream().distinct().collect(Collectors.toList()); } //@MethodDescribe("按指定的统计周期年份,月份列示AttendanceDetail信息中涉及的员工姓名列表") @@ -514,11 +517,11 @@ public class AttendanceDetailFactory extends AbstractFactory { CriteriaBuilder cb = em.getCriteriaBuilder(); CriteriaQuery cq = cb.createQuery(String.class); Root root = cq.from( AttendanceDetail.class); - cq.distinct(true).select( root.get(AttendanceDetail_.empName )); + cq.select( root.get(AttendanceDetail_.empName )); Predicate p = cb.equal( root.get(AttendanceDetail_.recordStatus), 1 ); p = cb.and(p, cb.equal( root.get(AttendanceDetail_.cycleYear), cycleYear )); p = cb.and(p, cb.equal( root.get(AttendanceDetail_.cycleMonth), cycleMonth )); - return em.createQuery(cq.where(p)).setMaxResults(20000).getResultList(); + return em.createQuery(cq.where(p)).setMaxResults(20000).getResultList().stream().distinct().collect(Collectors.toList()); } //@MethodDescribe("按指定的统计周期年份,月份列示AttendanceDetail信息中涉及的顶层组织名称列表") @@ -530,11 +533,11 @@ public class AttendanceDetailFactory extends AbstractFactory { CriteriaBuilder cb = em.getCriteriaBuilder(); CriteriaQuery cq = cb.createQuery(String.class); Root root = cq.from( AttendanceDetail.class); - cq.distinct(true).select( root.get(AttendanceDetail_.topUnitName )); + cq.select( root.get(AttendanceDetail_.topUnitName )); Predicate p = cb.equal( root.get(AttendanceDetail_.recordStatus), 1 ); p = cb.and(p, cb.equal( root.get(AttendanceDetail_.cycleYear), cycleYear )); p = cb.and(p, cb.equal( root.get(AttendanceDetail_.cycleMonth), cycleMonth )); - return em.createQuery(cq.where(p)).setMaxResults(20000).getResultList(); + return em.createQuery(cq.where(p)).setMaxResults(20000).getResultList().stream().distinct().collect(Collectors.toList()); } //@MethodDescribe("按指定的统计周期年份,月份列示AttendanceDetail信息中涉及的组织名称列表") @@ -546,11 +549,11 @@ public class AttendanceDetailFactory extends AbstractFactory { CriteriaBuilder cb = em.getCriteriaBuilder(); CriteriaQuery cq = cb.createQuery(String.class); Root root = cq.from( AttendanceDetail.class); - cq.distinct(true).select( root.get(AttendanceDetail_.unitName )); + cq.select( root.get(AttendanceDetail_.unitName )); Predicate p = cb.equal( root.get(AttendanceDetail_.recordStatus), 1 ); p = cb.and(p, cb.equal( root.get(AttendanceDetail_.cycleYear), cycleYear )); p = cb.and(p, cb.equal( root.get(AttendanceDetail_.cycleMonth), cycleMonth )); - return em.createQuery(cq.where(p)).setMaxResults(20000).getResultList(); + return em.createQuery(cq.where(p)).setMaxResults(20000).getResultList().stream().distinct().collect(Collectors.toList()); } //@MethodDescribe("按指定的统计周期年份,月份列示AttendanceDetail信息中涉及的组织名称列表") @@ -562,12 +565,12 @@ public class AttendanceDetailFactory extends AbstractFactory { CriteriaBuilder cb = em.getCriteriaBuilder(); CriteriaQuery cq = cb.createQuery(String.class); Root root = cq.from( AttendanceDetail.class); - cq.distinct(true).select( root.get(AttendanceDetail_.unitName )); + cq.select( root.get(AttendanceDetail_.unitName )); Predicate p = cb.equal( root.get(AttendanceDetail_.recordStatus), 1 ); p = cb.and(p, cb.equal( root.get(AttendanceDetail_.cycleYear), cycleYear )); p = cb.and(p, cb.equal( root.get(AttendanceDetail_.cycleMonth), cycleMonth )); p = cb.and(p, cb.equal( root.get(AttendanceDetail_.empName), employeeName )); - return em.createQuery(cq.where(p)).setMaxResults(20000).getResultList(); + return em.createQuery(cq.where(p)).setMaxResults(20000).getResultList().stream().distinct().collect(Collectors.toList()); } @@ -580,10 +583,10 @@ public class AttendanceDetailFactory extends AbstractFactory { CriteriaBuilder cb = em.getCriteriaBuilder(); CriteriaQuery cq = cb.createQuery(String.class); Root root = cq.from( AttendanceDetail.class); - cq.distinct(true).select( root.get(AttendanceDetail_.id )); + cq.select( root.get(AttendanceDetail_.id )); //一般始终为true, id is not null Predicate p = cb.equal( root.get(AttendanceDetail_.batchName), file_id ); - return em.createQuery(cq.where(p)).getResultList(); + return em.createQuery(cq.where(p)).getResultList().stream().distinct().collect(Collectors.toList()); } //@MethodDescribe("按年份月份查询某用户的打卡数据记录列表") @@ -1304,9 +1307,9 @@ public class AttendanceDetailFactory extends AbstractFactory { List> selectionList = new ArrayList>(); selectionList.add(root.get(AttendanceDetail_.cycleYear )); selectionList.add(root.get(AttendanceDetail_.cycleMonth )); - cq.distinct(true).multiselect(selectionList); + cq.multiselect(selectionList); - return em.createQuery(cq.where(p)).getResultList(); + return em.createQuery(cq.where(p)).getResultList().stream().distinct().collect(Collectors.toList()); } public List getCyclesFromDetailWithDateSplit( String empName, Date startDate, Date endDate ) throws Exception{ @@ -1322,9 +1325,9 @@ public class AttendanceDetailFactory extends AbstractFactory { List> selectionList = new ArrayList>(); selectionList.add(root.get(AttendanceDetail_.cycleYear )); selectionList.add(root.get(AttendanceDetail_.cycleMonth )); - cq.distinct(true).multiselect(selectionList); + cq.multiselect(selectionList); - return em.createQuery(cq.where(p)).getResultList(); + return em.createQuery(cq.where(p)).getResultList().stream().distinct().collect(Collectors.toList()); } //@MethodDescribe("查询未归档的条卡记录列表,最大2000条") @@ -1409,7 +1412,7 @@ public class AttendanceDetailFactory extends AbstractFactory { ); p = cb.and( p, p_or ); } - cq.distinct(true).select(root.get(AttendanceDetail_.empName)); - return em.createQuery(cq.where(p)).setMaxResults(100000).getResultList(); + cq.select(root.get(AttendanceDetail_.empName)); + return em.createQuery(cq.where(p)).setMaxResults(100000).getResultList().stream().distinct().collect(Collectors.toList()); } } \ No newline at end of file diff --git a/o2server/x_attendance_assemble_control/src/main/java/com/x/attendance/assemble/control/factory/DingdingAttendanceFactory.java b/o2server/x_attendance_assemble_control/src/main/java/com/x/attendance/assemble/control/factory/DingdingAttendanceFactory.java index 35dc00cde2..2a11272ad5 100644 --- a/o2server/x_attendance_assemble_control/src/main/java/com/x/attendance/assemble/control/factory/DingdingAttendanceFactory.java +++ b/o2server/x_attendance_assemble_control/src/main/java/com/x/attendance/assemble/control/factory/DingdingAttendanceFactory.java @@ -15,6 +15,7 @@ import javax.persistence.metamodel.SingularAttribute; import java.util.Calendar; import java.util.Date; import java.util.List; +import java.util.stream.Collectors; public class DingdingAttendanceFactory extends AbstractFactory { @@ -315,8 +316,8 @@ public class DingdingAttendanceFactory extends AbstractFactory { CriteriaQuery query = cb.createQuery(String.class); Root root = query.from(AttendanceDingtalkDetail.class); Predicate p = cb.between(root.get(AttendanceDingtalkDetail_.userCheckTime), startTime.getTime(), endTime.getTime()); - query.select(root.get(AttendanceDingtalkDetail_.o2Unit)).where(p).distinct(true); - return em.createQuery(query).getResultList(); + query.select(root.get(AttendanceDingtalkDetail_.o2Unit)).where(p); + return em.createQuery(query).getResultList().stream().distinct().collect(Collectors.toList()); } @@ -608,8 +609,8 @@ public class DingdingAttendanceFactory extends AbstractFactory { CriteriaQuery query = cb.createQuery(String.class); Root root = query.from(AttendanceQywxDetail.class); Predicate p = cb.between(root.get(AttendanceQywxDetail_.checkin_time_date), startTime, endTime); - query.select(root.get(AttendanceQywxDetail_.o2Unit)).where(p).distinct(true); - return em.createQuery(query).getResultList(); + query.select(root.get(AttendanceQywxDetail_.o2Unit)).where(p); + return em.createQuery(query).getResultList().stream().distinct().collect(Collectors.toList()); } /** -- GitLab