提交 45bd9b65 编写于 作者: L luojing

修复jpql distinct 导致响应缓慢

上级 806dd65a
......@@ -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<String> cq = cb.createQuery(String.class);
Root<AttendanceDetail> 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<String> cq = cb.createQuery(String.class);
Root<AttendanceDetail> 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<String> cq = cb.createQuery(String.class);
Root<AttendanceDetail> 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<String> cq = cb.createQuery(String.class);
Root<AttendanceDetail> 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<String> cq = cb.createQuery(String.class);
Root<AttendanceDetail> 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<String> cq = cb.createQuery(String.class);
Root<AttendanceDetail> 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<String> cq = cb.createQuery(String.class);
Root<AttendanceDetail> 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<String> cq = cb.createQuery(String.class);
Root<AttendanceDetail> 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<Selection<?>> selectionList = new ArrayList<Selection<?>>();
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<AttendanceCycles> getCyclesFromDetailWithDateSplit( String empName, Date startDate, Date endDate ) throws Exception{
......@@ -1322,9 +1325,9 @@ public class AttendanceDetailFactory extends AbstractFactory {
List<Selection<?>> selectionList = new ArrayList<Selection<?>>();
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
......@@ -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<String> query = cb.createQuery(String.class);
Root<AttendanceDingtalkDetail> 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<String> query = cb.createQuery(String.class);
Root<AttendanceQywxDetail> 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());
}
/**
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册