| 
					
				 | 
			
			
				@@ -52,36 +52,184 @@ public class AttendanceServiceImpl extends ServiceImpl<AttendanceMapper, Attenda 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				     public Map<String,Object> queryList(String userid, String date) throws ParseException { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				         Map<String,Object> map=new HashMap<>(); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				         List<Attendance>lit=new ArrayList<>(); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-        //List<Map<String,Object>> oneUserShift = userShiftMapper.getOneUserShift(userid, date,""); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        // 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				             List<Attendance> attendances = attendanceMapper.queryList(userid, date);//查询当前用户的打卡时间 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				             SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd"); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            SimpleDateFormat sdt = new SimpleDateFormat("HH:mm:ss"); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				             SimpleDateFormat sd = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss"); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				             Calendar calendar = Calendar.getInstance(); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				             calendar.setTime(sdf.parse(date)); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				             int year = calendar.get(calendar.YEAR);//年份 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				             int month = calendar.get(calendar.MONTH) + 1;//月份 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            String cont = "2"; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            String ed="0"; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				             int actualMaximum = calendar.getActualMaximum(Calendar.DAY_OF_MONTH);//获取前端传过来的时间获取月份的总天数 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                String cont = "2"; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                if (attendances!=null&&attendances.size()>1){ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                    cont=exitprio(attendances); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                }else if(attendances!=null&&attendances.size()==1){ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                    cont="1"; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            AttendanceRule attendanceRule = attendanceRuleService.UserRule(userid); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            if (attendanceRule!=null){ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                ed="1"; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            }else { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                List<UserDept> depNamesByUserIds = userShiftMapper.getDepNamesByUserIds(Arrays.asList(userid.split(","))); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                String str=" and "; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                for (int i=0;i<depNamesByUserIds.size();i++){ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                    if (i<depNamesByUserIds.size()-1){ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                        str+="find_in_set("+depNamesByUserIds.get(i).getId()+",dept) or"; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                    }else { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                        str+="find_in_set("+depNamesByUserIds.get(i).getId()+",dept)"; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                    } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                AttendanceRule attendanceRule1 = attendanceRuleService.UserRules(str); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                if (attendanceRule1!=null){ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                    attendanceRule=attendanceRule1; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                    ed="1"; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                 } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				  
			 | 
		
	
		
			
				 | 
				 | 
			
			
				  
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            if (ed.equals("1")){ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                if (attendanceRule.getType().equals("1")){//判断规则类型1,固定时间上下班 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                    String state="1"; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                    String[] split = attendanceRule.getWorkDay().split(",");//获取工作日 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                    Date da = DateUtils.str2Date(date, sdf); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                    for (String day:split){ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                        if (day.equals(String.valueOf(da.getDay()))){ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                            state="2"; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                            break; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                        } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                    } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                    if (state.equals("2")){//在工作日内 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                        if (attendances!=null&&attendances.size()>1){//判断打卡记录是否有上下班 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                            if (exitprio(attendances).equals("1")){//判断打卡记录是否异常,1,异常 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                                cont="1"; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                            }else { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                                Date startDate = DateUtils.str2Date("2021-10-21 "+sdt.format(attendanceRule.getStartDate()), sd); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                                Date endDate = DateUtils.str2Date("2021-10-21 "+sdt.format(attendanceRule.getEndDate()), sd); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                                Date usStartDate = DateUtils.str2Date("2021-10-21 "+sdt.format(attendances.get(0).getUsDate()), sd); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                                Date usEndDate = DateUtils.str2Date("2021-10-21 "+sdt.format(attendances.get(attendances.size() - 1).getUsDate()), sd); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                                if (usStartDate.getTime()>startDate.getTime()||usEndDate.getTime()<endDate.getTime()){ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                                    cont="1"; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                                } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                            } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                        }else { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                            cont="1"; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                        } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                    } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                }else  if (attendanceRule.getType().equals("2")){//规则类型 2,按班次上下班 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                    List<Map<String,Object>> oneUserShift = userShiftMapper.getOneUserShift(userid, date,""); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                    if (oneUserShift!=null&&oneUserShift.size()>0){ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                        if (attendances!=null&&attendances.size()>1){//判断打卡记录是否有上下班 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                            if (exitprio(attendances).equals("1")){//判断打卡记录是否异常,1,异常 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                                cont="1"; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                            }else { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                                Date startDate = DateUtils.str2Date("2021-10-21 "+oneUserShift.get(0).get("startDate"), sd); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                                Date endDate = DateUtils.str2Date("2021-10-21 "+oneUserShift.get(0).get("endDate"), sd); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                                Date usStartDate = DateUtils.str2Date("2021-10-21 "+sdt.format(attendances.get(0).getUsDate()), sd); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                                Date usEndDate = DateUtils.str2Date("2021-10-21 "+sdt.format(attendances.get(attendances.size() - 1).getUsDate()), sd); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                                if (usStartDate.getTime()>startDate.getTime()||usEndDate.getTime()<endDate.getTime()){ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                                    cont="1"; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                                } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                            } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                        }else { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                            cont="1"; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                        } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                    } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                }else if (attendanceRule.getType().equals("3")){//规则类型 3,自由上下班 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                    if (attendances!=null&&attendances.size()>1){//判断打卡记录是否有上下班 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                        if (exitprio(attendances).equals("1")){//判断打卡记录是否异常,1,异常 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                            cont="1"; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                        } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                    }else { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                        cont="1"; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                    } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				         //----------------------------------------------------------------下面是获取当前月份所有天数的考勤------------------------------------------------- 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				             for (int i = 1; i <= actualMaximum; i++) {//循环获取时间月份的总天数 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                 Attendance at = new Attendance(); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                 at.setIss(i + "");//获取所有天数,前端js需要绑定的数据 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                 String aDate = String.valueOf(year) + "-" + month + "-" + i;//循环拼接所有天数进行查询是否正常 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                //List<Map<String,Object>> oneUserShifts = userShiftMapper.getOneUserShift(userid, aDate,""); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                 List<Attendance> acs = attendanceMapper.queryList(userid, aDate); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                 at.setIs("2"); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                    if (acs!=null&&acs.size()>1){ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                        at.setIs(exitprio(acs)); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                    }else if(acs!=null&&acs.size()==1){ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                        at.setIs("1"); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                String eds="0"; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                AttendanceRule attendanceRules = attendanceRuleService.UserRule(userid); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                if (attendanceRules!=null){ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                    eds="1"; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                }else { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                    List<UserDept> depNamesByUserIds = userShiftMapper.getDepNamesByUserIds(Arrays.asList(userid.split(","))); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                    String str="where "; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                    for (int is=0;i<depNamesByUserIds.size();is++){ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                        if (is<depNamesByUserIds.size()-1){ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                            str+="find_in_set("+depNamesByUserIds.get(is).getId()+",dept) or"; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                        }else { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                            str+="find_in_set("+depNamesByUserIds.get(is).getId()+",dept)"; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                        } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                     } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                    AttendanceRule attendanceRule1 = attendanceRuleService.UserRules(str); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                    if (attendanceRule1!=null){ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                        attendanceRules=attendanceRule1; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                        eds="1"; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                    } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                if (eds.equals("1")){ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                    if (attendanceRules.getType().equals("1")){//判断规则类型1,固定时间上下班 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                        String state="1"; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                        String[] split = attendanceRules.getWorkDay().split(",");//获取工作日 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                        Date da = DateUtils.str2Date(aDate, sdf); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                        for (String day:split){ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                            if (day.equals(String.valueOf(da.getDay()))){ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                                state="2"; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                                break; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                            } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                        } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                        if (state.equals("2")){//在工作日内 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                            if (acs!=null&&acs.size()>1){//判断打卡记录是否有上下班 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                                if (exitprio(acs).equals("1")){//判断打卡记录是否异常,1,异常 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                                    at.setIs("1"); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                                }else { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                                    Date startDate = DateUtils.str2Date("2021-10-21 "+sdt.format(attendanceRules.getStartDate()), sd); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                                    Date endDate = DateUtils.str2Date("2021-10-21 "+sdt.format(attendanceRules.getEndDate()), sd); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                                    Date usStartDate = DateUtils.str2Date("2021-10-21 "+sdt.format(acs.get(0).getUsDate()), sd); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                                    Date usEndDate = DateUtils.str2Date("2021-10-21 "+sdt.format(acs.get(acs.size() - 1).getUsDate()), sd); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                                    if (usStartDate.getTime()>startDate.getTime()||usEndDate.getTime()<endDate.getTime()){ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                                        at.setIs("1"); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                                    } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                                } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                            }else { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                                at.setIs("1"); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                            } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                        } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                    }else  if (attendanceRules.getType().equals("2")){//规则类型 2,按班次上下班 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                        List<Map<String,Object>> oneUserShift = userShiftMapper.getOneUserShift(userid, date,""); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                        if (oneUserShift!=null&&oneUserShift.size()>0){ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                            if (acs!=null&&acs.size()>1){//判断打卡记录是否有上下班 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                                if (exitprio(acs).equals("1")){//判断打卡记录是否异常,1,异常 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                                    at.setIs("1"); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                                }else { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                                    Date startDate = DateUtils.str2Date("2021-10-21 "+oneUserShift.get(0).get("startDate"), sd); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                                    Date endDate = DateUtils.str2Date("2021-10-21 "+oneUserShift.get(0).get("endDate"), sd); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                                    Date usStartDate = DateUtils.str2Date("2021-10-21 "+sdt.format(acs.get(0).getUsDate()), sd); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                                    Date usEndDate = DateUtils.str2Date("2021-10-21 "+sdt.format(acs.get(acs.size() - 1).getUsDate()), sd); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                                    if (usStartDate.getTime()>startDate.getTime()||usEndDate.getTime()<endDate.getTime()){ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                                        at.setIs("1"); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                                    } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                                } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                            }else { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                                at.setIs("1"); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                            } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                        } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                    }else if (attendanceRules.getType().equals("3")){//规则类型 3,自由上下班 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                        if (acs!=null&&acs.size()>1){//判断打卡记录是否有上下班 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                            if (exitprio(acs).equals("1")){//判断打卡记录是否异常,1,异常 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                                at.setIs("1"); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                            } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                        }else { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                            at.setIs("1"); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                        } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                    } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                     lit.add(at); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				             } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				             Vacation vacation = vacationMapper.vacation(userid, date);//获取当前用户的假期数据 
			 | 
		
	
	
		
			
				| 
					
				 | 
			
			
				@@ -103,26 +251,106 @@ public class AttendanceServiceImpl extends ServiceImpl<AttendanceMapper, Attenda 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				     public String querymoth(String userid,String date) throws ParseException { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				         String sum="2";//用来判断按月份查询考勤情况的字符串 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				         SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd"); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        SimpleDateFormat sdt = new SimpleDateFormat("HH:mm:ss"); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        SimpleDateFormat sd = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss"); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				         Calendar calendar = Calendar.getInstance(); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				         calendar.setTime(sdf.parse(date)); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				         int year = calendar.get(calendar.YEAR);//年份 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				         int month = calendar.get(calendar.MONTH) + 1;//月份 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				         int actualMaximum = calendar.getActualMaximum(Calendar.DAY_OF_MONTH); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                 for (int i = 1; i <= actualMaximum; i++){ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                    String aDate = String.valueOf(year)+"-"+month+"-"+i; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                    //List<Map<String,Object>> oneUserShift = userShiftMapper.getOneUserShift(userid, aDate,""); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                    List<Attendance> attendances = attendanceMapper.queryList(userid, aDate); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                        if (attendances!=null&&attendances.size()>1){ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                            String exitprio = exitprio(attendances); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                            sum=exitprio; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                            if (exitprio.equals("1")){ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                    String aDate = String.valueOf(year) + "-" + month + "-" + i;//循环拼接所有天数进行查询是否正常 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                    List<Attendance> acs = attendanceMapper.queryList(userid, aDate); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                    String eds="0"; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                    AttendanceRule attendanceRules = attendanceRuleService.UserRule(userid); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                    if (attendanceRules!=null){ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                        eds="1"; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                    }else { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                        List<UserDept> depNamesByUserIds = userShiftMapper.getDepNamesByUserIds(Arrays.asList(userid.split(","))); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                        String str="where "; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                        for (int is=0;i<depNamesByUserIds.size();is++){ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                            if (is<depNamesByUserIds.size()-1){ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                                str+="find_in_set("+depNamesByUserIds.get(is).getId()+",dept) or"; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                            }else { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                                str+="find_in_set("+depNamesByUserIds.get(is).getId()+",dept)"; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                            } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                        } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                        AttendanceRule attendanceRule1 = attendanceRuleService.UserRules(str); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                        if (attendanceRule1!=null){ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                            attendanceRules=attendanceRule1; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                            eds="1"; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                        } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                    } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                    if (eds.equals("1")){ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                        if (attendanceRules.getType().equals("1")){//判断规则类型1,固定时间上下班 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                            String state="1"; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                            String[] split = attendanceRules.getWorkDay().split(",");//获取工作日 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                            Date da = DateUtils.str2Date(aDate, sdf); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                            for (String day:split){ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                                if (day.equals(String.valueOf(da.getDay()))){ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                                    state="2"; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                                    break; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                                } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                            } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                            if (state.equals("2")){//在工作日内 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                                if (acs!=null&&acs.size()>1){//判断打卡记录是否有上下班 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                                    if (exitprio(acs).equals("1")){//判断打卡记录是否异常,1,异常 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                                        sum="1"; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                                        break; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                                    }else { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                                        Date startDate = DateUtils.str2Date("2021-10-21 "+sdt.format(attendanceRules.getStartDate()), sd); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                                        Date endDate = DateUtils.str2Date("2021-10-21 "+sdt.format(attendanceRules.getEndDate()), sd); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                                        Date usStartDate = DateUtils.str2Date("2021-10-21 "+sdt.format(acs.get(0).getUsDate()), sd); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                                        Date usEndDate = DateUtils.str2Date("2021-10-21 "+sdt.format(acs.get(acs.size() - 1).getUsDate()), sd); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                                        if (usStartDate.getTime()>startDate.getTime()||usEndDate.getTime()<endDate.getTime()){ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                                            sum="1"; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                                            break; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                                        } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                                    } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                                }else { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                                    sum="1"; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                                    break; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                                } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                            } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                        }else  if (attendanceRules.getType().equals("2")){//规则类型 2,按班次上下班 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                            List<Map<String,Object>> oneUserShift = userShiftMapper.getOneUserShift(userid, date,""); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                            if (oneUserShift!=null&&oneUserShift.size()>0){ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                                if (acs!=null&&acs.size()>1){//判断打卡记录是否有上下班 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                                    if (exitprio(acs).equals("1")){//判断打卡记录是否异常,1,异常 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                                        sum="1"; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                                        break; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                                    }else { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                                        Date startDate = DateUtils.str2Date("2021-10-21 "+oneUserShift.get(0).get("startDate"), sd); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                                        Date endDate = DateUtils.str2Date("2021-10-21 "+oneUserShift.get(0).get("endDate"), sd); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                                        Date usStartDate = DateUtils.str2Date("2021-10-21 "+sdt.format(acs.get(0).getUsDate()), sd); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                                        Date usEndDate = DateUtils.str2Date("2021-10-21 "+sdt.format(acs.get(acs.size() - 1).getUsDate()), sd); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                                        if (usStartDate.getTime()>startDate.getTime()||usEndDate.getTime()<endDate.getTime()){ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                                            sum="1"; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                                            break; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                                        } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                                    } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                                }else { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                                    sum="1"; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                                    break; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                                } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                            } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                        }else if (attendanceRules.getType().equals("3")){//规则类型 3,自由上下班 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                            if (acs!=null&&acs.size()>1){//判断打卡记录是否有上下班 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                                if (exitprio(acs).equals("1")){//判断打卡记录是否异常,1,异常 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                                    sum="1"; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                                    break; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                                } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                            }else { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                                sum="1"; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                                 break; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                             } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                        }else if (attendances!=null&&attendances.size()==1){ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                            sum="1"; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                            break; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                         } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                     } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                    } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				         return sum; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				     } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				  
			 |