diff --git a/o2server/x_attendance_assemble_control/src/main/java/com/x/attendance/assemble/control/service/AttendanceScheduleSettingService.java b/o2server/x_attendance_assemble_control/src/main/java/com/x/attendance/assemble/control/service/AttendanceScheduleSettingService.java index df4dc101453af60df6ea65fe21a52fdc80366e18..76dd493836a7ec558c181521e2bf856d7c8b05bb 100644 --- a/o2server/x_attendance_assemble_control/src/main/java/com/x/attendance/assemble/control/service/AttendanceScheduleSettingService.java +++ b/o2server/x_attendance_assemble_control/src/main/java/com/x/attendance/assemble/control/service/AttendanceScheduleSettingService.java @@ -3,6 +3,8 @@ package com.x.attendance.assemble.control.service; import java.util.List; import com.x.attendance.entity.AttendanceDetail; +import com.x.attendance.entity.AttendanceEmployeeConfig; +import com.x.base.core.project.tools.ListTools; import org.apache.commons.lang3.StringUtils; import com.x.attendance.assemble.control.Business; @@ -18,7 +20,8 @@ import com.x.base.core.project.logger.LoggerFactory; public class AttendanceScheduleSettingService { private static Logger logger = LoggerFactory.getLogger( AttendanceScheduleSettingService.class ); - + private AttendanceEmployeeConfigServiceAdv attendanceEmployeeConfigServiceAdv = new AttendanceEmployeeConfigServiceAdv(); + private String topUnit = ""; public List listAll( EntityManagerContainer emc ) throws Exception { Business business = new Business( emc ); return business.getAttendanceScheduleSettingFactory().listAll(); @@ -77,12 +80,21 @@ public class AttendanceScheduleSettingService { } public AttendanceScheduleSetting getAttendanceScheduleSettingWithPerson( String personName, Boolean debugger ) throws Exception { + topUnit = ""; UserManagerService userManagerService = new UserManagerService(); - String unitName = userManagerService.getUnitNameWithPersonName( personName ); + //先根据考勤人员配置去计算组织及顶级组织,如果没有符合条件的再按personName的人员组织计算 + //String unitName = userManagerService.getUnitNameWithPersonName( personName ); + String unitName = this.getUnitByconfig(userManagerService,personName); + if(StringUtils.isEmpty(unitName)){ + unitName = userManagerService.getUnitNameWithPersonName( personName ); + } AttendanceScheduleSetting attendanceScheduleSetting = getAttendanceScheduleSettingWithUnitName( unitName ); if( attendanceScheduleSetting == null ) { //如果没有找到,那么应该为该人员所属的组织创建一个新的排班配置 - String topUnitName = userManagerService.getTopUnitNameWithUnitName( unitName ); + String topUnitName = topUnit; + if(StringUtils.isEmpty(topUnit)){ + topUnitName = userManagerService.getTopUnitNameWithUnitName( unitName ); + } attendanceScheduleSetting = createNewScheduleSetting( unitName, topUnitName, debugger ); } return attendanceScheduleSetting; @@ -154,4 +166,23 @@ public class AttendanceScheduleSettingService { } return new_attendanceScheduleSetting; } + private String getUnitByconfig(UserManagerService userManagerService,String personName) throws Exception { + String result = ""; + List attendanceEmployeeConfigList = attendanceEmployeeConfigServiceAdv.listByConfigType( "REQUIRED" ); + if( ListTools.isNotEmpty( attendanceEmployeeConfigList ) ) { + for(AttendanceEmployeeConfig attendanceEmployeeConfig : attendanceEmployeeConfigList){ + if(StringUtils.isNotEmpty(attendanceEmployeeConfig.getEmployeeName())){ + if(StringUtils.equals(personName,attendanceEmployeeConfig.getEmployeeName())){ + result = attendanceEmployeeConfig.getUnitName(); + } + }else if(StringUtils.isNotEmpty(attendanceEmployeeConfig.getUnitName())){ + if(userManagerService.checkHasPerson(personName,attendanceEmployeeConfig.getUnitName(),true)){ + result = attendanceEmployeeConfig.getUnitName(); + topUnit = attendanceEmployeeConfig.getTopUnitName(); + } + } + } + } + return result; + } } diff --git a/o2server/x_attendance_assemble_control/src/main/java/com/x/attendance/assemble/control/service/UserManagerService.java b/o2server/x_attendance_assemble_control/src/main/java/com/x/attendance/assemble/control/service/UserManagerService.java index 1d39791a798efff386d4093168aa8096a98bf80a..a9ae17b707eb3d72dfbdfe7325e5312eb861359f 100644 --- a/o2server/x_attendance_assemble_control/src/main/java/com/x/attendance/assemble/control/service/UserManagerService.java +++ b/o2server/x_attendance_assemble_control/src/main/java/com/x/attendance/assemble/control/service/UserManagerService.java @@ -10,6 +10,7 @@ import com.x.base.core.project.organization.Identity; import com.x.base.core.project.organization.Person; import com.x.base.core.project.organization.Unit; import com.x.base.core.project.tools.ListTools; +import org.apache.commons.lang3.BooleanUtils; import org.apache.commons.lang3.StringUtils; import java.util.List; @@ -442,6 +443,23 @@ public class UserManagerService { } } + public Boolean checkHasPerson(String personName,String unitName,Boolean recursive) throws Exception { + if (personName == null || personName.isEmpty()) { + throw new Exception("personName is null!"); + } + if (unitName == null || unitName.isEmpty()) { + throw new Exception("unitName is null!"); + } + if (recursive ==null) { + throw new Exception("recursive is null!"); + } + Business business = null; + try (EntityManagerContainer emc = EntityManagerContainerFactory.instance().create()) { + business = new Business(emc); + return business.organization().unit().checkHasPerson(personName,unitName,recursive); + } + } + public List listUnitNamesWithPerson(String personName) throws Exception { if (personName == null || personName.isEmpty()) { throw new Exception("personName is null!");