Просмотр исходного кода

Merge branch 'feature/attendance728' into 'develop'

考勤,部门考勤月报排除不参加考勤的组织和人员

See merge request o2oa/o2oa!1326
o2null 5 лет назад
Родитель
Сommit
ecb10c76fa

+ 34 - 0
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<String> listPersonForMonthByUnitYearMonthAndUn( List<String> unitNameList,List<String> unUnitNameList,List<String> 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<String> cq = cb.createQuery(String.class );
+		Root<StatisticPersonForMonth> 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

+ 10 - 1
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<Wo> wraps = null;
 		List<String> ids = null;
 		List<String> unitNameList = new ArrayList<String>();
+		List<String> unUnitNameList = new ArrayList<String>();
+		List<String> personNameList = new ArrayList<String>();
 		List<StatisticPersonForMonth> 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, 

+ 56 - 0
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<String> getUnitNameList( String unitName, List<String> unitNameList ) throws Exception {
@@ -107,5 +111,57 @@ public class BaseAction extends StandardJaxrsAction {
 		}
 		return unitNameList;
 	}
+	
+	/**
+	 * 获取不需要考勤的组织
+	 * @return
+	 * @throws Exception 
+	 */
+	protected  List<String> getUnUnitNameList() throws Exception {
+		List<String> unUnitNameList = new ArrayList<String>();
+
+		List<AttendanceEmployeeConfig> 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<String> 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<String> getUnPersonNameList() throws Exception {
+		List<String> personNameList = new ArrayList<String>();
+		List<AttendanceEmployeeConfig> 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;
+	}
 
 }

+ 3 - 2
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() );

+ 7 - 0
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<String> listPersonForMonthByUnitYearMonthAndUn(EntityManagerContainer emc, List<String> unitNameList,List<String> unUnitNameList,List<String> personNameList,
+			String year, String month) throws Exception {
+		Business business =  new Business( emc );
+		return business.getStatisticPersonForMonthFactory().listPersonForMonthByUnitYearMonthAndUn( unitNameList,unUnitNameList,personNameList, year, month );
+	}
+	
 	public List<String> listUnitForMonthByUnitYearAndMonth(EntityManagerContainer emc, List<String> unitNameList, String year, String month) throws Exception {
 		Business business =  new Business( emc );
 		return business.getStatisticUnitForMonthFactory().listByUnitYearAndMonth( unitNameList, year, month );

+ 9 - 0
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<String> listPersonForMonthByUnitYearMonthAndUn(List<String> unitNameList,List<String> unUnitNameList,List<String> 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<String> listUnitForMonthByUnitYearAndMonth(List<String> unitNameList, String year, String month) throws Exception {
 		try (EntityManagerContainer emc = EntityManagerContainerFactory.instance().create()) {

+ 1 - 1
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";