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

Merge branch 'feature/Attendance.detail.analyse' into 'develop'

Merge for feature/Attendance.detail.analyse[考勤管理]修复考勤优化修改后,无法根据个人请假信息正确计算考勤结果的问题

See merge request o2oa/o2oa!635
李义 5 лет назад
Родитель
Сommit
e8c3fc9f9f

+ 30 - 30
o2server/x_attendance_assemble_control/src/main/java/com/x/attendance/assemble/control/factory/AttendanceAppealInfoFactory.java

@@ -261,16 +261,16 @@ public class AttendanceAppealInfoFactory extends AbstractFactory {
 			vs.add( wrapIn.getAppealReason() );
 			index++;
 		}
-		if ((null != wrapIn.getProcessPerson1()) && (!wrapIn.getProcessPerson1().isEmpty())) {
-			sql_stringBuffer.append(" and o.processPerson1 = ?" + (index));
-			vs.add( wrapIn.getProcessPerson1() );
-			index++;
-		}
-		if ((null != wrapIn.getProcessPerson2()) && (!wrapIn.getProcessPerson2().isEmpty())) {
-			sql_stringBuffer.append(" and o.processPerson2 = ?" + (index));
-			vs.add( wrapIn.getProcessPerson2() );
-			index++;
-		}
+//		if ((null != wrapIn.getProcessPerson1()) && (!wrapIn.getProcessPerson1().isEmpty())) {
+//			sql_stringBuffer.append(" and o.processPerson1 = ?" + (index));
+//			vs.add( wrapIn.getProcessPerson1() );
+//			index++;
+//		}
+//		if ((null != wrapIn.getProcessPerson2()) && (!wrapIn.getProcessPerson2().isEmpty())) {
+//			sql_stringBuffer.append(" and o.processPerson2 = ?" + (index));
+//			vs.add( wrapIn.getProcessPerson2() );
+//			index++;
+//		}
 		
 		//添加OR条件
 		if (wrapIn.getOrAtrribute() != null && wrapIn.getOrAtrribute().size() > 0) {
@@ -372,16 +372,16 @@ public class AttendanceAppealInfoFactory extends AbstractFactory {
 			vs.add( wrapIn.getAppealReason() );
 			index++;
 		}
-		if ((null != wrapIn.getProcessPerson1()) && (!wrapIn.getProcessPerson1().isEmpty())) {
-			sql_stringBuffer.append(" and o.processPerson1 = ?" + (index));
-			vs.add( wrapIn.getProcessPerson1() );
-			index++;
-		}
-		if ((null != wrapIn.getProcessPerson2()) && (!wrapIn.getProcessPerson2().isEmpty())) {
-			sql_stringBuffer.append(" and o.processPerson2 = ?" + (index));
-			vs.add( wrapIn.getProcessPerson2() );
-			index++;
-		}
+//		if ((null != wrapIn.getProcessPerson1()) && (!wrapIn.getProcessPerson1().isEmpty())) {
+//			sql_stringBuffer.append(" and o.processPerson1 = ?" + (index));
+//			vs.add( wrapIn.getProcessPerson1() );
+//			index++;
+//		}
+//		if ((null != wrapIn.getProcessPerson2()) && (!wrapIn.getProcessPerson2().isEmpty())) {
+//			sql_stringBuffer.append(" and o.processPerson2 = ?" + (index));
+//			vs.add( wrapIn.getProcessPerson2() );
+//			index++;
+//		}
 		//添加OR
 		if( wrapIn.getOrAtrribute() != null && wrapIn.getOrAtrribute().size() > 0){
 			sql_stringBuffer.append(" and (" );
@@ -470,16 +470,16 @@ public class AttendanceAppealInfoFactory extends AbstractFactory {
 			vs.add( wrapIn.getAppealReason() );
 			index++;
 		}
-		if ((null != wrapIn.getProcessPerson1()) && (!wrapIn.getProcessPerson1().isEmpty())) {
-			sql_stringBuffer.append(" and o.processPerson1 = ?" + (index));
-			vs.add( wrapIn.getProcessPerson1() );
-			index++;
-		}
-		if ((null != wrapIn.getProcessPerson2()) && (!wrapIn.getProcessPerson2().isEmpty())) {
-			sql_stringBuffer.append(" and o.processPerson2 = ?" + (index));
-			vs.add( wrapIn.getProcessPerson2() );
-			index++;
-		}
+//		if ((null != wrapIn.getProcessPerson1()) && (!wrapIn.getProcessPerson1().isEmpty())) {
+//			sql_stringBuffer.append(" and o.processPerson1 = ?" + (index));
+//			vs.add( wrapIn.getProcessPerson1() );
+//			index++;
+//		}
+//		if ((null != wrapIn.getProcessPerson2()) && (!wrapIn.getProcessPerson2().isEmpty())) {
+//			sql_stringBuffer.append(" and o.processPerson2 = ?" + (index));
+//			vs.add( wrapIn.getProcessPerson2() );
+//			index++;
+//		}
 		//添加OR
 		if (wrapIn.getOrAtrribute() != null && wrapIn.getOrAtrribute().size() > 0) {
 			sql_stringBuffer.append(" and (");

+ 24 - 0
o2server/x_attendance_assemble_control/src/main/java/com/x/attendance/assemble/control/factory/AttendanceDetailFactory.java

@@ -510,6 +510,30 @@ public class AttendanceDetailFactory extends AbstractFactory {
 		
 		return em.createQuery(cq.where(p)).getResultList();
 	}
+
+	public List<String> listDetailByCycleYearAndMonthWithOutStatus( String user, String year, String month )  throws Exception {
+		if( user == null || user.isEmpty() ||year == null || month == null || year.isEmpty() || month.isEmpty()  ){
+			return null;
+		}
+		EntityManager em = this.entityManagerContainer().get( AttendanceDetail.class );
+		CriteriaBuilder cb = em.getCriteriaBuilder();
+		CriteriaQuery<String> cq = cb.createQuery(String.class);
+		Root<AttendanceDetail> root = cq.from( AttendanceDetail.class);
+		cq.select( root.get(AttendanceDetail_.id ));
+		//一般始终为true, id is not null
+		Predicate p = cb.isNotNull( root.get(AttendanceDetail_.id) );
+		if( StringUtils.isNotEmpty( user ) ){
+			p = cb.and(p, cb.equal( root.get(AttendanceDetail_.empName), user ));
+		}
+		if( StringUtils.isNotEmpty( year ) ){
+			p = cb.and(p, cb.equal( root.get(AttendanceDetail_.cycleYear), year ));
+		}
+		if( StringUtils.isNotEmpty( month ) ){
+			p = cb.and(p, cb.equal( root.get(AttendanceDetail_.cycleMonth), month ));
+		}
+
+		return em.createQuery(cq.where(p)).getResultList();
+	}
 	
 	//@MethodDescribe("按年份月份查询某组织的打卡数据记录列表")
 	public List<String> listUnitAttendanceDetailByYearAndMonth( List<String> unitNames, String year, String month)  throws Exception {

+ 4 - 2
o2server/x_attendance_assemble_control/src/main/java/com/x/attendance/assemble/control/jaxrs/attendancedetail/ActionReAnalyseWithFilter.java

@@ -10,7 +10,8 @@ import com.x.base.core.project.http.EffectivePerson;
 import com.x.base.core.project.logger.Logger;
 import com.x.base.core.project.logger.LoggerFactory;
 import com.x.base.core.project.tools.ListTools;
-import org.codehaus.plexus.util.StringUtils;
+import org.apache.commons.lang3.StringUtils;
+
 import javax.servlet.http.HttpServletRequest;
 import java.util.List;
 
@@ -70,7 +71,7 @@ public class ActionReAnalyseWithFilter extends BaseAction {
 
 		if (check) {
 			try {
-				ids = attendanceDetailServiceAdv.listUserAttendanceDetailByYearAndMonth( q_empName, q_year, q_month );
+				ids = attendanceDetailServiceAdv.listDetailByCycleYearAndMonthWithOutStatus( q_empName, q_year, q_month );
 			} catch (Exception e) {
 				check = false;
 				Exception exception = new ExceptionAttendanceDetailProcess(e,
@@ -80,6 +81,7 @@ public class ActionReAnalyseWithFilter extends BaseAction {
 				logger.error(e, currentPerson, request, null);
 			}
 		}
+
 		if (check) {
 			if (ListTools.isNotEmpty( ids )) {
 

+ 2 - 2
o2server/x_attendance_assemble_control/src/main/java/com/x/attendance/assemble/control/service/AttendanceDetailAnalyseCoreService.java

@@ -200,7 +200,7 @@ class AttendanceDetailAnalyseCoreService {
 	 */
 	static Date getOnWorkTimeFromDetail(AttendanceDetail detail, Boolean debugger) {
 		try {
-			if( StringUtils.isEmpty( detail.getOnDutyTime() ) ){
+			if( StringUtils.isEmpty( detail.getOnWorkTime() ) ){
 				logger.debug( debugger, "onWorkTime " );
 			}else{
 				logger.debug( debugger, "onWorkTime=" +  detail.getRecordDateString() + " " + detail.getOnWorkTime() );
@@ -222,7 +222,7 @@ class AttendanceDetailAnalyseCoreService {
 	 */
 	static Date getOffWorkTimeFromDetail(AttendanceDetail detail, Boolean debugger) {
 		try {
-			if( StringUtils.isEmpty( detail.getOnDutyTime() ) ){
+			if( StringUtils.isEmpty( detail.getOffWorkTime() ) ){
 				logger.debug( debugger, "offWorkTime为空 " );
 			}else{
 				logger.debug( debugger, "offWorkTime=" +  detail.getRecordDateString() + " " + detail.getOffWorkTime() );

+ 13 - 4
o2server/x_attendance_assemble_control/src/main/java/com/x/attendance/assemble/control/service/AttendanceDetailService.java

@@ -4,16 +4,20 @@ import java.util.List;
 
 import com.x.attendance.assemble.common.date.DateOperation;
 import com.x.attendance.assemble.control.Business;
-import com.x.attendance.entity.AttendanceDetail;
-import com.x.attendance.entity.AttendanceDetailMobile;
-import com.x.attendance.entity.AttendanceEmployeeConfig;
-import com.x.attendance.entity.AttendanceSetting;
+import com.x.attendance.entity.*;
 import com.x.base.core.container.EntityManagerContainer;
 import com.x.base.core.entity.JpaObject;
 import com.x.base.core.entity.annotation.CheckPersistType;
 import com.x.base.core.project.logger.Logger;
 import com.x.base.core.project.logger.LoggerFactory;
 import com.x.base.core.project.tools.ListTools;
+import org.apache.commons.lang3.StringUtils;
+
+import javax.persistence.EntityManager;
+import javax.persistence.criteria.CriteriaBuilder;
+import javax.persistence.criteria.CriteriaQuery;
+import javax.persistence.criteria.Predicate;
+import javax.persistence.criteria.Root;
 
 
 public class AttendanceDetailService {
@@ -100,6 +104,11 @@ public class AttendanceDetailService {
 		return business.getAttendanceDetailFactory().listUserAttendanceDetailByYearAndMonth( q_empName, q_year, q_month );	
 	}
 
+	public List<String> listDetailByCycleYearAndMonthWithOutStatus( EntityManagerContainer emc, String user, String year, String month )  throws Exception {
+		Business business =  new Business( emc );
+		return business.getAttendanceDetailFactory().listDetailByCycleYearAndMonthWithOutStatus( user, year, month );
+	}
+
 	public List<String> listUserAttendanceDetailByCycleYearAndMonth(EntityManagerContainer emc, String q_empName, String cycleYear,
 			String cycleMonth) throws Exception {
 		Business business =  new Business( emc );

+ 8 - 0
o2server/x_attendance_assemble_control/src/main/java/com/x/attendance/assemble/control/service/AttendanceDetailServiceAdv.java

@@ -97,6 +97,14 @@ public class AttendanceDetailServiceAdv {
 		}
 	}
 
+	public List<String> listDetailByCycleYearAndMonthWithOutStatus( String q_empName, String q_year, String q_month )  throws Exception {
+		try (EntityManagerContainer emc = EntityManagerContainerFactory.instance().create()) {
+			return attendanceDetailService.listDetailByCycleYearAndMonthWithOutStatus( emc, q_empName, q_year, q_month );
+		} catch ( Exception e ) {
+			throw e;
+		}
+	}
+
 	public List<String> listUserAttendanceDetailByCycleYearAndMonth( String q_empName, String cycleYear, String cycleMonth ) throws Exception {
 		try (EntityManagerContainer emc = EntityManagerContainerFactory.instance().create()) {
 			return attendanceDetailService.listUserAttendanceDetailByCycleYearAndMonth( emc, q_empName, cycleYear, cycleMonth );