From 27b761721d6c77d1ea80bafa1b2d466e0437e98e Mon Sep 17 00:00:00 2001 From: luojing <13968186856@139.com> Date: Wed, 5 Aug 2020 17:23:22 +0800 Subject: [PATCH] =?UTF-8?q?=E8=80=83=E5=8B=A4=EF=BC=8C=E9=83=A8=E9=97=A8?= =?UTF-8?q?=E8=80=83=E5=8B=A4=E6=9C=88=E6=8A=A5=E6=8E=92=E9=99=A4=E4=B8=8D?= =?UTF-8?q?=E5=8F=82=E5=8A=A0=E8=80=83=E5=8B=A4=E7=9A=84=E7=BB=84=E7=BB=87?= =?UTF-8?q?=E5=92=8C=E4=BA=BA=E5=91=98?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../StatisticPersonForMonthFactory.java | 34 +++++++++++ .../ActionShowStForPersonInUnitSubNested.java | 11 +++- .../jaxrs/attendancestatistic/BaseAction.java | 56 +++++++++++++++++++ .../AttendanceDetailAnalyseService.java | 5 +- .../service/AttendanceStatisticService.java | 7 +++ .../AttendanceStatisticServiceAdv.java | 9 +++ .../entity/AttendanceEmployeeConfig.java | 2 +- 7 files changed, 120 insertions(+), 4 deletions(-) diff --git a/o2server/x_attendance_assemble_control/src/main/java/com/x/attendance/assemble/control/factory/StatisticPersonForMonthFactory.java b/o2server/x_attendance_assemble_control/src/main/java/com/x/attendance/assemble/control/factory/StatisticPersonForMonthFactory.java index 109163055e..72448d46c9 100644 --- a/o2server/x_attendance_assemble_control/src/main/java/com/x/attendance/assemble/control/factory/StatisticPersonForMonthFactory.java +++ b/o2server/x_attendance_assemble_control/src/main/java/com/x/attendance/assemble/control/factory/StatisticPersonForMonthFactory.java @@ -21,6 +21,7 @@ import com.x.attendance.entity.StatisticPersonForMonth_; import com.x.base.core.project.exception.ExceptionWhen; import com.x.base.core.project.logger.Logger; import com.x.base.core.project.logger.LoggerFactory; +import com.x.base.core.project.tools.ListTools; public class StatisticPersonForMonthFactory extends AbstractFactory { @@ -109,6 +110,39 @@ public class StatisticPersonForMonthFactory extends AbstractFactory { return em.createQuery( cq.where( p ) ).setMaxResults( 60 ).getResultList(); } + //排除不需要的组织和人员 + public List listPersonForMonthByUnitYearMonthAndUn( List unitNameList,List unUnitNameList,List personNameList, String year, String month ) throws Exception{ + + if( unitNameList == null || unitNameList.size() == 0 ){ + logger.error( new UnitNamesEmptyException() ); + return null; + } + + EntityManager em = this.entityManagerContainer().get( StatisticPersonForMonth.class ); + CriteriaBuilder cb = em.getCriteriaBuilder(); + CriteriaQuery cq = cb.createQuery(String.class ); + Root root = cq.from( StatisticPersonForMonth.class ); + Predicate p = root.get( StatisticPersonForMonth_.unitName ).in(unitNameList); + if(ListTools.isNotEmpty(unUnitNameList)){ + p = cb.and( p, cb.isNotMember(root.get( StatisticPersonForMonth_.unitName ), cb.literal(unUnitNameList))); + } + if(ListTools.isNotEmpty(personNameList)){ + p = cb.and( p, cb.isNotMember(root.get( StatisticPersonForMonth_.employeeName ), cb.literal(personNameList))); + } + if( year == null || year.isEmpty() ){ + logger.error( new StatisticYearEmptyException() ); + }else{ + p = cb.and( p, cb.equal( root.get( StatisticPersonForMonth_.statisticYear ), year ) ); + } + if( month == null || month.isEmpty() ){ + logger.error( new StatisticMonthEmptyException() ); + }else{ + p = cb.and( p, cb.equal( root.get( StatisticPersonForMonth_.statisticMonth ), month )); + } + cq.select(root.get( StatisticPersonForMonth_.id )); + return em.createQuery( cq.where( p ) ).setMaxResults( 60 ).getResultList(); + } + /** * 查询下一页的信息数据 * @param id diff --git a/o2server/x_attendance_assemble_control/src/main/java/com/x/attendance/assemble/control/jaxrs/attendancestatistic/ActionShowStForPersonInUnitSubNested.java b/o2server/x_attendance_assemble_control/src/main/java/com/x/attendance/assemble/control/jaxrs/attendancestatistic/ActionShowStForPersonInUnitSubNested.java index 2458ac9c3d..2320dbdaa4 100644 --- a/o2server/x_attendance_assemble_control/src/main/java/com/x/attendance/assemble/control/jaxrs/attendancestatistic/ActionShowStForPersonInUnitSubNested.java +++ b/o2server/x_attendance_assemble_control/src/main/java/com/x/attendance/assemble/control/jaxrs/attendancestatistic/ActionShowStForPersonInUnitSubNested.java @@ -22,6 +22,8 @@ public class ActionShowStForPersonInUnitSubNested extends BaseAction { List wraps = null; List ids = null; List unitNameList = new ArrayList(); + List unUnitNameList = new ArrayList(); + List personNameList = new ArrayList(); List statisticPersonForMonth_list = null; Boolean check = true; if ( "(0)".equals( year ) ) { @@ -52,10 +54,17 @@ public class ActionShowStForPersonInUnitSubNested extends BaseAction { unitNameList = new ArrayList<>(); } unitNameList.add( name ); + unUnitNameList = getUnUnitNameList(); + personNameList = getUnPersonNameList(); + System.out.println("ActionShowStForPersonInUnitSubNested____unitNameList="+unitNameList); + System.out.println("ActionShowStForPersonInUnitSubNested____unUnitNameList="+unUnitNameList); + System.out.println("ActionShowStForPersonInUnitSubNested____personNameList="+personNameList); } if( check ){ try { - ids = attendanceStatisticServiceAdv.listPersonForMonthByUnitYearAndMonth( unitNameList, year, month); + //ids = attendanceStatisticServiceAdv.listPersonForMonthByUnitYearAndMonth( unitNameList, year, month); + ids = attendanceStatisticServiceAdv.listPersonForMonthByUnitYearMonthAndUn( unitNameList, unUnitNameList,personNameList,year, month); + System.out.println("ActionShowStForPersonInUnitSubNested____ids="+ids.size()); } catch (Exception e) { check = false; Exception exception = new ExceptionAttendanceStatisticProcess(e, diff --git a/o2server/x_attendance_assemble_control/src/main/java/com/x/attendance/assemble/control/jaxrs/attendancestatistic/BaseAction.java b/o2server/x_attendance_assemble_control/src/main/java/com/x/attendance/assemble/control/jaxrs/attendancestatistic/BaseAction.java index 2f11181691..4bcfa730c4 100644 --- a/o2server/x_attendance_assemble_control/src/main/java/com/x/attendance/assemble/control/jaxrs/attendancestatistic/BaseAction.java +++ b/o2server/x_attendance_assemble_control/src/main/java/com/x/attendance/assemble/control/jaxrs/attendancestatistic/BaseAction.java @@ -5,19 +5,23 @@ import java.util.List; import org.apache.commons.lang3.StringUtils; +import com.x.attendance.assemble.control.service.AttendanceEmployeeConfigServiceAdv; import com.x.attendance.assemble.control.service.AttendanceStatisticServiceAdv; import com.x.attendance.assemble.control.service.UserManagerService; +import com.x.attendance.entity.AttendanceEmployeeConfig; import com.x.base.core.container.EntityManagerContainer; import com.x.base.core.container.factory.EntityManagerContainerFactory; import com.x.base.core.project.jaxrs.StandardJaxrsAction; import com.x.base.core.project.logger.Logger; import com.x.base.core.project.logger.LoggerFactory; +import com.x.base.core.project.tools.ListTools; public class BaseAction extends StandardJaxrsAction { protected Logger logger = LoggerFactory.getLogger( BaseAction.class ); protected UserManagerService userManagerService = new UserManagerService(); protected AttendanceStatisticServiceAdv attendanceStatisticServiceAdv = new AttendanceStatisticServiceAdv(); + protected AttendanceEmployeeConfigServiceAdv attendanceEmployeeConfigServiceAdv = new AttendanceEmployeeConfigServiceAdv(); // 根据组织递归查询下级组织 protected List getUnitNameList( String unitName, List unitNameList ) throws Exception { @@ -107,5 +111,57 @@ public class BaseAction extends StandardJaxrsAction { } return unitNameList; } + + /** + * 获取不需要考勤的组织 + * @return + * @throws Exception + */ + protected List getUnUnitNameList() throws Exception { + List unUnitNameList = new ArrayList(); + + List attendanceEmployeeConfigs = attendanceEmployeeConfigServiceAdv.listByConfigType("NOTREQUIRED"); + + if(ListTools.isNotEmpty(attendanceEmployeeConfigs)){ + for (AttendanceEmployeeConfig attendanceEmployeeConfig : attendanceEmployeeConfigs) { + String unitName = attendanceEmployeeConfig.getUnitName(); + String employeeName = attendanceEmployeeConfig.getEmployeeName(); + + if(StringUtils.isEmpty(employeeName) && StringUtils.isNotEmpty(unitName)){ + unUnitNameList.add(unitName); + List tempUnitNameList = userManagerService.listSubUnitNameWithParent(unitName); + if(ListTools.isNotEmpty(tempUnitNameList)){ + for(String tempUnit:tempUnitNameList){ + if(!ListTools.contains(unUnitNameList, tempUnit)){ + unUnitNameList.add(tempUnit); + } + } + } + } + } + } + return unUnitNameList; + } + + /** + * 获取不需要考勤的人员 + * @return + * @throws Exception + */ + protected List getUnPersonNameList() throws Exception { + List personNameList = new ArrayList(); + List attendanceEmployeeConfigs = attendanceEmployeeConfigServiceAdv.listByConfigType("NOTREQUIRED"); + + if(ListTools.isNotEmpty(attendanceEmployeeConfigs)){ + for (AttendanceEmployeeConfig attendanceEmployeeConfig : attendanceEmployeeConfigs) { + String employeeName = attendanceEmployeeConfig.getEmployeeName(); + + if(StringUtils.isNotEmpty(employeeName) && !ListTools.contains(personNameList, employeeName)){ + personNameList.add(employeeName); + } + } + } + return personNameList; + } } diff --git a/o2server/x_attendance_assemble_control/src/main/java/com/x/attendance/assemble/control/service/AttendanceDetailAnalyseService.java b/o2server/x_attendance_assemble_control/src/main/java/com/x/attendance/assemble/control/service/AttendanceDetailAnalyseService.java index 50fe902d39..1159fc2eca 100644 --- a/o2server/x_attendance_assemble_control/src/main/java/com/x/attendance/assemble/control/service/AttendanceDetailAnalyseService.java +++ b/o2server/x_attendance_assemble_control/src/main/java/com/x/attendance/assemble/control/service/AttendanceDetailAnalyseService.java @@ -310,11 +310,12 @@ public class AttendanceDetailAnalyseService { if( check ){ if( scheduleSetting != null ){ detail.setTopUnitName( scheduleSetting.getTopUnitName() ); - if( StringUtils.isNotEmpty( scheduleSetting.getUnitName() ) && !"*".equals( scheduleSetting.getUnitName() )) { + /*if( StringUtils.isNotEmpty( scheduleSetting.getUnitName() ) && !"*".equals( scheduleSetting.getUnitName() )) { detail.setUnitName( scheduleSetting.getUnitName() ); }else { detail.setUnitName( userManagerService.getUnitNameWithPersonName( detail.getEmpName() ) ); - } + }*/ + detail.setUnitName( userManagerService.getUnitNameWithPersonName( detail.getEmpName() ) ); detail.setOnWorkTime( scheduleSetting.getOnDutyTime() ); detail.setMiddayRestStartTime( scheduleSetting.getMiddayRestStartTime() ); detail.setMiddayRestEndTime( scheduleSetting.getMiddayRestEndTime() ); diff --git a/o2server/x_attendance_assemble_control/src/main/java/com/x/attendance/assemble/control/service/AttendanceStatisticService.java b/o2server/x_attendance_assemble_control/src/main/java/com/x/attendance/assemble/control/service/AttendanceStatisticService.java index c30a779c84..9aa784c140 100644 --- a/o2server/x_attendance_assemble_control/src/main/java/com/x/attendance/assemble/control/service/AttendanceStatisticService.java +++ b/o2server/x_attendance_assemble_control/src/main/java/com/x/attendance/assemble/control/service/AttendanceStatisticService.java @@ -692,6 +692,13 @@ public class AttendanceStatisticService { Business business = new Business( emc ); return business.getStatisticPersonForMonthFactory().listByUnitYearAndMonth( unitNameList, year, month ); } + //排除不需要的组织和人员 + public List listPersonForMonthByUnitYearMonthAndUn(EntityManagerContainer emc, List unitNameList,List unUnitNameList,List personNameList, + String year, String month) throws Exception { + Business business = new Business( emc ); + return business.getStatisticPersonForMonthFactory().listPersonForMonthByUnitYearMonthAndUn( unitNameList,unUnitNameList,personNameList, year, month ); + } + public List listUnitForMonthByUnitYearAndMonth(EntityManagerContainer emc, List unitNameList, String year, String month) throws Exception { Business business = new Business( emc ); return business.getStatisticUnitForMonthFactory().listByUnitYearAndMonth( unitNameList, year, month ); diff --git a/o2server/x_attendance_assemble_control/src/main/java/com/x/attendance/assemble/control/service/AttendanceStatisticServiceAdv.java b/o2server/x_attendance_assemble_control/src/main/java/com/x/attendance/assemble/control/service/AttendanceStatisticServiceAdv.java index f12a84f6ff..e0b55782c4 100644 --- a/o2server/x_attendance_assemble_control/src/main/java/com/x/attendance/assemble/control/service/AttendanceStatisticServiceAdv.java +++ b/o2server/x_attendance_assemble_control/src/main/java/com/x/attendance/assemble/control/service/AttendanceStatisticServiceAdv.java @@ -236,6 +236,15 @@ public class AttendanceStatisticServiceAdv { throw e; } } + + //排除不需要的组织和人员 + public List listPersonForMonthByUnitYearMonthAndUn(List unitNameList,List unUnitNameList,List personNameList, String year, String month) throws Exception { + try (EntityManagerContainer emc = EntityManagerContainerFactory.instance().create()) { + return attendanceStatisticService.listPersonForMonthByUnitYearMonthAndUn( emc, unitNameList,unUnitNameList,personNameList, year, month); + } catch ( Exception e ) { + throw e; + } + } public List listUnitForMonthByUnitYearAndMonth(List unitNameList, String year, String month) throws Exception { try (EntityManagerContainer emc = EntityManagerContainerFactory.instance().create()) { diff --git a/o2server/x_attendance_core_entity/src/main/java/com/x/attendance/entity/AttendanceEmployeeConfig.java b/o2server/x_attendance_core_entity/src/main/java/com/x/attendance/entity/AttendanceEmployeeConfig.java index 57ca89b131..ffb856d843 100644 --- a/o2server/x_attendance_core_entity/src/main/java/com/x/attendance/entity/AttendanceEmployeeConfig.java +++ b/o2server/x_attendance_core_entity/src/main/java/com/x/attendance/entity/AttendanceEmployeeConfig.java @@ -81,7 +81,7 @@ public class AttendanceEmployeeConfig extends SliceJpaObject { public static final String employeeName_FIELDNAME = "employeeName"; @FieldDescribe("员工姓名distinguishedName") @Column( length = AbstractPersistenceProperties.organization_name_length, name = ColumnNamePrefix + employeeName_FIELDNAME ) - @CheckPersist(allowEmpty = false) + @CheckPersist(allowEmpty = true) private String employeeName = ""; public static final String employeeNumber_FIELDNAME = "employeeNumber"; -- GitLab