package cn.com.lzt.attendancetemp.service.impl; import cn.com.lzt.arrangeduty.entity.ArrangeDutyEntity; import cn.com.lzt.arrangeduty.service.ArrangeDutyServiceI; import cn.com.lzt.attendancetemp.dao.AttendanceTempDao; import cn.com.lzt.attendancetemp.entity.AttendanceTempEntity; import cn.com.lzt.attendancetemp.service.AttendanceTempServiceI; import cn.com.lzt.attendancetemp.service.AttendanceTempTransactionalServiceI; import cn.com.lzt.attendancewarnmsg.dao.AttendanceWarnMsgMinidao; import cn.com.lzt.attendancewarnmsg.dto.AttendanceWarnMsgDto; import cn.com.lzt.attendancewarnmsg.dto.ProjectAbnormalDetailDto; import cn.com.lzt.attendancewarnmsg.entity.AttendanceWarnMsgEntity; import cn.com.lzt.attendancewarnmsg.service.AttendanceWarnMsgServiceI; import cn.com.lzt.attendancewarnmsgdetail.entity.AttendanceWarnMsgDetailEntity; import cn.com.lzt.calendar.entity.CalendarEntity; import cn.com.lzt.calendar.service.CalendarServiceI; import cn.com.lzt.common.push.JPushProcessor; import cn.com.lzt.dingattendanceinfo.entity.DingAttendanceinfoEntity; import cn.com.lzt.dingattendanceinfo.service.DingAttendanceinfoServiceI; import cn.com.lzt.holiday.entity.HolidayEntity; import cn.com.lzt.overtimerecord.entity.OvertimeRecordEntity; import cn.com.lzt.personnelbasearchivesmanage.entity.PersonnelBaseArchivesManageEntity; import cn.com.lzt.personnelbasearchivesmanage.service.PersonnelBaseArchivesManageServiceI; import cn.com.lzt.projarrangedetail.entity.ProjarrangeDetailEntity; import cn.com.lzt.projarrangedetail.service.ProjarrangeDetailServiceI; import cn.com.lzt.userarrangedetail.entity.UserArrangeDetailEntity; import cn.com.lzt.userarrangedetail.service.UserArrangeDetailServiceI; import org.jeecgframework.core.common.hibernate.qbc.CriteriaQuery; import org.jeecgframework.core.common.service.CommonService; import org.jeecgframework.core.constant.Globals; import org.jeecgframework.core.util.DataUtils; import org.jeecgframework.core.util.ListUtils; import org.jeecgframework.core.util.StringUtil; import org.jeecgframework.core.util.oConvertUtils; import org.jeecgframework.tag.vo.datatable.SortDirection; import org.jeecgframework.web.system.pojo.base.TSDepart; import org.jeecgframework.web.system.pojo.base.TSUser; import org.jeecgframework.web.system.pojo.base.TSUserOrg; import org.jeecgframework.web.system.service.DepartServiceI; import org.jeecgframework.web.system.service.SystemService; import org.jeecgframework.web.system.service.UserService; import org.jeecgframework.workflow.common.WorkFlowGlobals; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; import org.springframework.transaction.annotation.Propagation; import org.springframework.transaction.annotation.Transactional; import javax.annotation.Resource; import java.text.ParseException; import java.text.SimpleDateFormat; import java.util.*; @Service("AttendanceTempTransactionalServiceI") @Transactional(propagation = Propagation.REQUIRES_NEW) public class AttendanceTempTransactionalServiceImpl implements AttendanceTempTransactionalServiceI { @Autowired private UserService userService; @Autowired private DingAttendanceinfoServiceI dingAttendanceinfoService; @Autowired private SystemService systemService; @Autowired private CalendarServiceI calendarService; @Autowired private AttendanceTempServiceI attendanceTempService; @Autowired private ProjarrangeDetailServiceI projarrangeDetailService; @Autowired private UserArrangeDetailServiceI userArrangeDetailService; @Autowired private ArrangeDutyServiceI arrangeDutyService; @Autowired private PersonnelBaseArchivesManageServiceI personnelBaseArchivesManageService; @Autowired private DepartServiceI departService; @Autowired private AttendanceWarnMsgServiceI attendanceWarnMsgService; @Autowired private CommonService commonService; @Autowired AttendanceWarnMsgMinidao attendanceWarnMsgMinidao; @Autowired private JPushProcessor pushProcessor; @Resource AttendanceTempDao attendanceTempDao; /** * 根据用户将每天的实时查看数据初始化 * */ @SuppressWarnings("deprecation") @Override public void attendanceTempInit(Date date) { // 检索所有用户 String userHql = "from TSUser where deleteFlag <> 1"; List userList = userService.findHql(userHql); SimpleDateFormat dfYMD = new SimpleDateFormat("yyyy-MM-dd"); //String nowDateString = df.format(new Date()) + " 00:00:00"; // 获取当前日期 Date nowDate = new Date(); if(null != date) { nowDate = date; } String nowDateString = dfYMD.format(nowDate); try { nowDate = dfYMD.parse(nowDateString); } catch (ParseException e1) { e1.printStackTrace(); } Map map_userid2Personnel = new HashMap<>(); String personnelByUserIdHql = "from PersonnelBaseArchivesManageEntity where POSITION_STATUS = '1' or POSITION_STATUS = '2'"; List personnelBaseArchivesManageEntitys = personnelBaseArchivesManageService.findHql(personnelByUserIdHql); for(PersonnelBaseArchivesManageEntity p : personnelBaseArchivesManageEntitys) { map_userid2Personnel.put(p.getUserid(), p); } String attendanceTempByUserIdAndDateHql = "from AttendanceTempEntity where attendanceDate = ?"; List attendanceTempEntitys = attendanceTempService.findHql(attendanceTempByUserIdAndDateHql, nowDate); Map map_user2AttendanceTemp = new HashMap<>(); for(AttendanceTempEntity tempentity : attendanceTempEntitys) { map_user2AttendanceTemp.put(tempentity.getUserId(), tempentity); } for(TSUser tsBaseUser : userList) { if(!map_userid2Personnel.containsKey(tsBaseUser.getId())) { continue; } PersonnelBaseArchivesManageEntity personnelBaseArchivesManageEntity = map_userid2Personnel.get(tsBaseUser.getId()); // 如果员工未离职 if(Globals.JOBSTATUS_1.equals(personnelBaseArchivesManageEntity.getPositionStatus()) || Globals.JOBSTATUS_2.equals(personnelBaseArchivesManageEntity.getPositionStatus())) { // 如果用户没有当天的实时查看信息,则新建一条 if(!map_user2AttendanceTemp.containsKey(tsBaseUser.getId())) { AttendanceTempEntity attendanceTempEntity = new AttendanceTempEntity(); // 员工ID attendanceTempEntity.setUserId(tsBaseUser.getId()); // 员工编号 attendanceTempEntity.setUserCode(tsBaseUser.getUserNum()); // 员工姓名 attendanceTempEntity.setRealname(tsBaseUser.getRealName()); // 查询所属单位 StringBuilder mainOrgSql = new StringBuilder(); mainOrgSql.append(" SELECT "); mainOrgSql.append(" depart.id id"); mainOrgSql.append(" FROM t_s_user_org userOrg "); mainOrgSql.append(" LEFT JOIN t_s_depart depart ON userOrg.org_id = depart.id "); mainOrgSql.append(" WHERE "); mainOrgSql.append(" userOrg.user_id = '" + tsBaseUser.getId() + "'"); mainOrgSql.append(" AND userOrg.status = '0' "); mainOrgSql.append(" AND userOrg.ifpluralism <> '1' "); List> mainOrgMapList = systemService.findForJdbc(mainOrgSql.toString()); // 所属单位ID attendanceTempEntity.setBelongUnitid((String)mainOrgMapList.get(0).get("id")); // 考勤日期 attendanceTempEntity.setAttendanceDate(nowDate); // 一线员工 if(Globals.MANAGETYPE_2.equals(personnelBaseArchivesManageEntity.getManagerType())) { // 获取班次信息 Map arrangeDutyEntityMap = this.getArrangeDutyInfo(nowDate, tsBaseUser.getId()); String returnFlg = (String)arrangeDutyEntityMap.get("returnFlg"); if("1".equals(returnFlg)) { ArrangeDutyEntity arrangeDutyEntity = (ArrangeDutyEntity)arrangeDutyEntityMap.get("arrangeDutyEntity"); attendanceTempEntity.setArrangeDutyId(arrangeDutyEntity.getId()); // 班次类型为夜班 int year = Integer.valueOf(nowDateString.substring(0,4)); int month = Integer.valueOf(nowDateString.substring(5,7)); int day = Integer.valueOf(nowDateString.substring(8,10)); if(Globals.DUTYTYPE_yeban115.equals(arrangeDutyEntity.getDutyType())) { // 基准时间计算 String normalworkStime = arrangeDutyEntity.getNormalworkStime(); String normalworkEtime = arrangeDutyEntity.getNormalworkEtime(); if(StringUtil.isNotEmpty(normalworkStime) && StringUtil.isNotEmpty(normalworkEtime)) { Date datumStime = new Date(year - 1900, month - 1, day, Integer.valueOf(normalworkStime.substring(0, 2)), Integer.valueOf(normalworkStime.substring(3, 5)), 0); Date datumEtimeTemp = new Date(year - 1900, month - 1, day, Integer.valueOf(normalworkEtime.substring(0, 2)), Integer.valueOf(normalworkEtime.substring(3, 5)), 0); Date datumEtime = new Date(datumEtimeTemp.getTime() + 1000 * 60 * 60 * 24); // 设置基准时间 attendanceTempEntity.setDatumStime(datumStime); attendanceTempEntity.setDatumEtime(datumEtime); } } else { // 基准时间计算 String normalworkStime = arrangeDutyEntity.getNormalworkStime(); String normalworkEtime = arrangeDutyEntity.getNormalworkEtime(); if(StringUtil.isNotEmpty(normalworkStime) && StringUtil.isNotEmpty(normalworkEtime)) { Date datumStime = new Date(year - 1900, month - 1, day, Integer.valueOf(normalworkStime.substring(0, 2)), Integer.valueOf(normalworkStime.substring(3, 5)), 0); Date datumEtime = new Date(year - 1900, month - 1, day, Integer.valueOf(normalworkEtime.substring(0, 2)), Integer.valueOf(normalworkEtime.substring(3, 5)), 0); // 设置基准时间 attendanceTempEntity.setDatumStime(datumStime); attendanceTempEntity.setDatumEtime(datumEtime); } } } else { attendanceTempEntity.setAttendanceStatus(Globals.ATTENDANCE_STATUS_6); } } else { // 一线员工以外 int year = Integer.valueOf(nowDateString.substring(0,4)); int month = Integer.valueOf(nowDateString.substring(5,7)); int day = Integer.valueOf(nowDateString.substring(8,10)); String calendarHql = "from CalendarEntity where year =? and month =? and day = ?"; List calendarList = calendarService.findHql(calendarHql, year, month, day); if(Globals.dtype_0.equals(calendarList.get(0).getDtype())) { Date datumStime = new Date(year - 1900, month - 1, day, 8, 30, 0); Date datumEtime = new Date(year - 1900, month - 1, day, 17, 0, 0); // 设置基准时间 attendanceTempEntity.setDatumStime(datumStime); attendanceTempEntity.setDatumEtime(datumEtime); } else { ; } } // 是否请假 // List holidayEntityList = attendanceTempDao.getHolidayEntityList(tsBaseUser.getId(), nowDateString, WorkFlowGlobals.BPM_BUS_STATUS_3); // if(holidayEntityList.size() > 0) { // String attendanceStatus = attendanceTempEntity.getAttendanceStatus(); // if(StringUtil.isEmpty(attendanceStatus)) { // attendanceTempEntity.setAttendanceStatus(Globals.ATTENDANCE_STATUS_4); // } else { // attendanceTempEntity.setAttendanceStatus(attendanceStatus + "," + Globals.ATTENDANCE_STATUS_4); // } // } try{ attendanceTempService.save(attendanceTempEntity); String message = "员工ID:" + attendanceTempEntity.getUserCode() + "实时查看基础数据添加成功"; //systemService.addLog(message, Globals.Log_Type_INSERT, Globals.Log_Leavel_INFO); }catch(Exception e){ e.printStackTrace(); String message = "员工ID:" + attendanceTempEntity.getUserCode() + "实时查看基础数据添加失败"; //systemService.addLog(message, Globals.Log_Type_INSERT, Globals.Log_Leavel_INFO); } } } } } /** * 处理钉钉考勤原始记录表中的数据到考勤实时查看表 * */ @Override public boolean attendanceTempSynchronization(Date date) { boolean returnFlg = true; // 根据原始记录表中未处理的信息对实时查看表进行编辑 String dingAttendanceInfoHql = "from DingAttendanceinfoEntity where isDispose <> 1"; List dingAttendanceinfoEntityList = null; if(date != null) { //手动刷新 SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd"); Date dateYesterday = new Date(date.getTime() - 1000 * 60 * 60 * 24); Date dateTomorrow = new Date(date.getTime() + 2000 * 60 * 60 * 24); //between field2 是小于不等于 CriteriaQuery cq = new CriteriaQuery(DingAttendanceinfoEntity.class); try { cq.between("attendanceTime",sdf.parse(sdf.format(dateYesterday)),sdf.parse(sdf.format(dateTomorrow))); } catch (ParseException e) { org.jeecgframework.core.util.LogUtil.error(e.getMessage()); e.printStackTrace(); } // cq.add(); // cq.eq("userId", "ff808081645a0c470164682d4a4a0488"); cq.add(); cq.addOrder("attendanceTime", SortDirection.desc); dingAttendanceinfoEntityList = systemService.getListByCriteriaQuery(cq, false); }else { dingAttendanceinfoEntityList = dingAttendanceinfoService.findHql(dingAttendanceInfoHql); } //String dingAttendanceInfoHql = "from DingAttendanceinfoEntity where userId='000000006120dd1c01612cf521d40173' order by attendanceDate desc"; //测试 for (DingAttendanceinfoEntity dingAttendanceinfoEntity : dingAttendanceinfoEntityList) { String personnelByUserIdHql = "from PersonnelBaseArchivesManageEntity where userid = ?"; List personnelBaseArchivesManageEntityList = personnelBaseArchivesManageService.findHql(personnelByUserIdHql, dingAttendanceinfoEntity.getUserId()); if(personnelBaseArchivesManageEntityList.size() == 0) { continue; } PersonnelBaseArchivesManageEntity personnelBaseArchivesManageEntity = personnelBaseArchivesManageEntityList.get(0); // 如果员工未离职 if(Globals.JOBSTATUS_1.equals(personnelBaseArchivesManageEntity.getPositionStatus()) || Globals.JOBSTATUS_2.equals(personnelBaseArchivesManageEntity.getPositionStatus())) { // 一线员工 if(Globals.MANAGETYPE_2.equals(personnelBaseArchivesManageEntity.getManagerType())) { // if("000000006120dd1c01612cf521d40173".equals(personnelBaseArchivesManageEntity.getUserid())) { // System.out.println("gllp"); // } // ----------值夜班情况处理 ---20180308---yangxi---add---start---------- // 获取前一天的日期 Date dateYesterday = new Date(dingAttendanceinfoEntity.getAttendanceDate().getTime() - 1000 * 60 * 60 * 24); // 获取班次信息 Map arrangeDutyEntityMapYesterday = this.getArrangeDutyInfo(dateYesterday, dingAttendanceinfoEntity.getUserId()); String arrangeDutyEntityMapYesterdayFlg = (String)arrangeDutyEntityMapYesterday.get("returnFlg"); if("1".equals(arrangeDutyEntityMapYesterdayFlg)) { ArrangeDutyEntity arrangeDutyEntityYesterday = (ArrangeDutyEntity)arrangeDutyEntityMapYesterday.get("arrangeDutyEntity"); if (Globals.DUTYTYPE_zhiban.equals(arrangeDutyEntityYesterday.getDutyType())) { String ondutyStime = arrangeDutyEntityYesterday.getOndutyStime(); String ondutyEtime = arrangeDutyEntityYesterday.getOndutyEtime(); if(ondutyStime.compareTo(ondutyEtime) > 0) { String attendanceTempByUserIdAndDateHql = "from AttendanceTempEntity where userId =? and attendanceDate = ?"; List attendanceTempEntityList = attendanceTempService.findHql(attendanceTempByUserIdAndDateHql, dingAttendanceinfoEntity.getUserId(), dateYesterday); if(attendanceTempEntityList.size() > 0) { AttendanceTempEntity attendanceTempEntity = attendanceTempEntityList.get(0); attendanceTempEntity = this.SetAttendanceStatus(attendanceTempEntity, attendanceTempEntityList, Globals.MANAGETYPE_2); // 所有签到时间List List attendanceAllDatetimeList = new ArrayList(); SimpleDateFormat dateFormat = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss"); String tempStr = dateFormat.format(dingAttendanceinfoEntity.getAttendanceTime()); attendanceAllDatetimeList.add(tempStr.substring(0, 16)); if(null != attendanceTempEntity.getAlldatetime()) { String tempStr3 = attendanceTempEntity.getAlldatetime(); List alldatetimeList = Arrays.asList(tempStr3.split(",")); for(String alldatetime : alldatetimeList) { attendanceAllDatetimeList.add(alldatetime); } } // 所有签到时间去重排序 HashSet allDatetimeHashSet = new HashSet(attendanceAllDatetimeList); attendanceAllDatetimeList.clear(); attendanceAllDatetimeList.addAll(allDatetimeHashSet); Collections.sort(attendanceAllDatetimeList); try { // 计算签到时间和最新打卡时间 Calendar yesterdayCalendar = Calendar.getInstance(); Calendar todayCalendar = Calendar.getInstance(); yesterdayCalendar.setTime(dateYesterday); todayCalendar.setTime(dingAttendanceinfoEntity.getAttendanceDate()); String[] ondutyStimeTemp = ondutyStime.split(":"); String[] ondutyEtimeTemp = ondutyStime.split(":"); yesterdayCalendar.set(Calendar.HOUR_OF_DAY, Integer.valueOf(ondutyStimeTemp[0])); yesterdayCalendar.set(Calendar.MINUTE, Integer.valueOf(ondutyStimeTemp[1])); todayCalendar.set(Calendar.HOUR_OF_DAY, Integer.valueOf(ondutyEtimeTemp[0])); todayCalendar.set(Calendar.MINUTE, Integer.valueOf(ondutyEtimeTemp[1])); String startStr = dateFormat.format(yesterdayCalendar.getTime()); String endStr = dateFormat.format(todayCalendar.getTime()); List attendanceTimeList = new ArrayList(); for (int i = 0; i < attendanceAllDatetimeList.size(); i++) { if(startStr.compareTo(attendanceAllDatetimeList.get(i) + ":00") <= 0 && endStr.compareTo(attendanceAllDatetimeList.get(i) + ":00") >= 0) { attendanceTimeList.add(attendanceAllDatetimeList.get(i)); } } // 设置签到时间和最新打卡时间 attendanceTempEntity = this.getZhibanTime(arrangeDutyEntityYesterday, dingAttendanceinfoEntity, attendanceAllDatetimeList, attendanceTempEntity, true); String attendanceAllDatetimeStr = ""; for(String str : attendanceAllDatetimeList) { attendanceAllDatetimeStr += str + ","; } if(StringUtil.isNotEmpty(attendanceAllDatetimeStr)) { attendanceAllDatetimeStr = attendanceAllDatetimeStr.substring(0,attendanceAllDatetimeStr.length() - 1); } attendanceTempEntity.setAlldatetime(attendanceAllDatetimeStr); attendanceTempService.saveOrUpdate(attendanceTempEntity); } catch (Exception e) { e.printStackTrace(); returnFlg = false; } } else { // ======为了容错的代码,正常情况下跑定时任务,每天的基本信息都会自动生成的,不会出现前一天的实时查看数据没有的情况====== START AttendanceTempEntity attendanceTempEntity = new AttendanceTempEntity(); // String userHql = "from TSBaseUser where id = ?"; // List userList = userService.findHql(userHql, dingAttendanceinfoEntity.getUserId()); // TSBaseUser tsBaseUser = userList.get(0); TSUser tsBaseUser = userService.get(TSUser.class, dingAttendanceinfoEntity.getUserId()); // 员工ID attendanceTempEntity.setUserId(tsBaseUser.getId()); // 员工编号 attendanceTempEntity.setUserCode(tsBaseUser.getUserNum()); // 员工姓名 attendanceTempEntity.setRealname(tsBaseUser.getRealName()); // 查询所属单位 StringBuilder mainOrgSql = new StringBuilder(); mainOrgSql.append(" SELECT "); mainOrgSql.append(" depart.id id"); mainOrgSql.append(" FROM t_s_user_org userOrg "); mainOrgSql.append(" LEFT JOIN t_s_depart depart ON userOrg.org_id = depart.id "); mainOrgSql.append(" WHERE "); mainOrgSql.append(" userOrg.user_id = '" + tsBaseUser.getId() + "'"); mainOrgSql.append(" AND userOrg.status = '0' "); mainOrgSql.append(" AND userOrg.ifpluralism <> '1' "); List> mainOrgMapList = systemService.findForJdbc(mainOrgSql.toString()); // 所属单位ID attendanceTempEntity.setBelongUnitid((String)mainOrgMapList.get(0).get("id")); // 考勤日期 attendanceTempEntity.setAttendanceDate(dateYesterday); SimpleDateFormat dfYMD = new SimpleDateFormat("yyyy-MM-dd"); String nowDateString = dfYMD.format(dateYesterday); // 获取班次信息 Map arrangeDutyEntityMapTemp1 = this.getArrangeDutyInfo(dateYesterday, tsBaseUser.getId()); String arrangeDutyEntityMapTemp1Flg = (String)arrangeDutyEntityMapTemp1.get("returnFlg"); if("1".equals(arrangeDutyEntityMapTemp1Flg)) { ArrangeDutyEntity arrangeDutyEntity1 = (ArrangeDutyEntity)arrangeDutyEntityMapTemp1.get("arrangeDutyEntity"); attendanceTempEntity.setArrangeDutyId(arrangeDutyEntity1.getId()); int year = Integer.valueOf(nowDateString.substring(0,4)); int month = Integer.valueOf(nowDateString.substring(5,7)); int day = Integer.valueOf(nowDateString.substring(8,10)); // 基准时间计算 String normalworkStime = arrangeDutyEntity1.getNormalworkStime(); String normalworkEtime = arrangeDutyEntity1.getNormalworkEtime(); if(StringUtil.isNotEmpty(normalworkStime) && StringUtil.isNotEmpty(normalworkEtime)) { Date datumStime = new Date(year - 1900, month - 1, day, Integer.valueOf(normalworkStime.substring(0, 2)), Integer.valueOf(normalworkStime.substring(3, 5)), 0); Date datumEtimeTemp = new Date(year - 1900, month - 1, day, Integer.valueOf(normalworkEtime.substring(0, 2)), Integer.valueOf(normalworkEtime.substring(3, 5)), 0); Date datumEtime = new Date(datumEtimeTemp.getTime() + 1000 * 60 * 60 * 24); // 设置基准时间 attendanceTempEntity.setDatumStime(datumStime); attendanceTempEntity.setDatumEtime(datumEtime); } // 所有签到时间List List attendanceAllDatetimeList = new ArrayList(); SimpleDateFormat dateFormat = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss"); String tempStr = dateFormat.format(dingAttendanceinfoEntity.getAttendanceTime()); attendanceAllDatetimeList.add(tempStr.substring(0, 16)); try { // 计算签到时间和最新打卡时间 Calendar yesterdayCalendar = Calendar.getInstance(); Calendar todayCalendar = Calendar.getInstance(); yesterdayCalendar.setTime(dateYesterday); todayCalendar.setTime(dingAttendanceinfoEntity.getAttendanceDate()); String[] ondutyStimeTemp = ondutyStime.split(":"); String[] ondutyEtimeTemp = ondutyStime.split(":"); yesterdayCalendar.set(Calendar.HOUR_OF_DAY, Integer.valueOf(ondutyStimeTemp[0])); yesterdayCalendar.set(Calendar.MINUTE, Integer.valueOf(ondutyStimeTemp[1])); todayCalendar.set(Calendar.HOUR_OF_DAY, Integer.valueOf(ondutyEtimeTemp[0])); todayCalendar.set(Calendar.MINUTE, Integer.valueOf(ondutyEtimeTemp[1])); String startStr = dateFormat.format(yesterdayCalendar.getTime()); String endStr = dateFormat.format(todayCalendar.getTime()); List attendanceTimeList = new ArrayList(); for (int i = 0; i < attendanceAllDatetimeList.size(); i++) { if(startStr.compareTo(attendanceAllDatetimeList.get(i) + ":00") <= 0 && endStr.compareTo(attendanceAllDatetimeList.get(i) + ":00") >= 0) { attendanceTimeList.add(attendanceAllDatetimeList.get(i)); } } // 设置签到时间和最新打卡时间 attendanceTempEntity = this.getZhibanTime(arrangeDutyEntityYesterday, dingAttendanceinfoEntity, attendanceAllDatetimeList, attendanceTempEntity, true); String attendanceAllDatetimeStr = ""; for(String str : attendanceAllDatetimeList) { attendanceAllDatetimeStr += str + ","; } if(StringUtil.isNotEmpty(attendanceAllDatetimeStr)) { attendanceAllDatetimeStr = attendanceAllDatetimeStr.substring(0,attendanceAllDatetimeStr.length() - 1); } attendanceTempEntity.setAlldatetime(attendanceAllDatetimeStr); attendanceTempService.saveOrUpdate(attendanceTempEntity); } catch (Exception e) { e.printStackTrace(); returnFlg = false; } // 所有签到时间去重排序 HashSet allDatetimeHashSet = new HashSet(attendanceAllDatetimeList); attendanceAllDatetimeList.clear(); attendanceAllDatetimeList.addAll(allDatetimeHashSet); Collections.sort(attendanceAllDatetimeList); String attendanceAllDatetimeStr = ""; for(String str : attendanceAllDatetimeList) { attendanceAllDatetimeStr += str + ","; } if(StringUtil.isNotEmpty(attendanceAllDatetimeStr)) { attendanceAllDatetimeStr = attendanceAllDatetimeStr.substring(0,attendanceAllDatetimeStr.length() - 1); } attendanceTempEntity.setAlldatetime(attendanceAllDatetimeStr); } else { attendanceTempEntity.setAttendanceStatus(Globals.ATTENDANCE_STATUS_6); } try { attendanceTempService.save(attendanceTempEntity); } catch (Exception e) { returnFlg = false; e.printStackTrace(); } // ======为了容错的代码,正常情况下跑定时任务,每天的基本信息都会自动生成的,不会出现前一天的实时查看数据没有的情况====== END } } } } // ----------值夜班情况处理 ---20180308---yangxi---add---end----------- // 获取班次信息 Map arrangeDutyEntityMap = this.getArrangeDutyInfo(dingAttendanceinfoEntity.getAttendanceDate(), dingAttendanceinfoEntity.getUserId()); String arrangeDutyFlg = (String)arrangeDutyEntityMap.get("returnFlg"); if("1".equals(arrangeDutyFlg)) { ArrangeDutyEntity arrangeDutyEntity = (ArrangeDutyEntity)arrangeDutyEntityMap.get("arrangeDutyEntity"); // 班次类型为休息时,判断休息前一天是不是夜班 if (Globals.DUTYTYPE_xiuxi.equals(arrangeDutyEntity.getDutyType())) { // 获取前一天的日期 Date dateTempDate = new Date(dingAttendanceinfoEntity.getAttendanceDate().getTime() - 1000 * 60 * 60 * 24); // 获取班次信息 Map arrangeDutyEntityMapTemp = this.getArrangeDutyInfo(dateTempDate, dingAttendanceinfoEntity.getUserId()); String arrangeDutyEntityMapTempFlg = (String)arrangeDutyEntityMapTemp.get("returnFlg"); if("1".equals(arrangeDutyEntityMapTempFlg)) { ArrangeDutyEntity arrangeDutyEntityTemp = (ArrangeDutyEntity)arrangeDutyEntityMapTemp.get("arrangeDutyEntity"); if (Globals.DUTYTYPE_yeban115.equals(arrangeDutyEntityTemp.getDutyType())) { String attendanceTempByUserIdAndDateHql = "from AttendanceTempEntity where userId =? and attendanceDate = ?"; List attendanceTempEntityList = attendanceTempService.findHql(attendanceTempByUserIdAndDateHql, dingAttendanceinfoEntity.getUserId(), dateTempDate); if(attendanceTempEntityList.size() > 0) { AttendanceTempEntity attendanceTempEntity = attendanceTempEntityList.get(0); // 计算签到时间,最新打卡时间 List attendanceTimeList = new ArrayList(); // 所有签到时间List List attendanceAllDatetimeList = new ArrayList(); SimpleDateFormat dateFormat = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss"); String tempStr = dateFormat.format(dingAttendanceinfoEntity.getAttendanceTime()); attendanceTimeList.add(tempStr.substring(0, 16)); attendanceAllDatetimeList.add(tempStr.substring(0, 16)); if (null != attendanceTempEntity.getSignDate()) { String tempStr1 = dateFormat.format(attendanceTempEntity.getSignDate()); attendanceTimeList.add(tempStr1.substring(0, 16)); } if (null != attendanceTempEntity.getNewestPunchcardDate()) { String tempStr2 = dateFormat.format(attendanceTempEntity.getNewestPunchcardDate()); attendanceTimeList.add(tempStr2.substring(0, 16)); } if(null != attendanceTempEntity.getAlldatetime()) { String tempStr3 = attendanceTempEntity.getAlldatetime(); List alldatetimeList = Arrays.asList(tempStr3.split(",")); for(String alldatetime : alldatetimeList) { attendanceAllDatetimeList.add(alldatetime); } } // 签到时间及最新打卡时间去重排序 HashSet hashSet = new HashSet(attendanceTimeList); attendanceTimeList.clear(); attendanceTimeList.addAll(hashSet); Collections.sort(attendanceTimeList); // 所有签到时间去重排序 HashSet allDatetimeHashSet = new HashSet(attendanceAllDatetimeList); attendanceAllDatetimeList.clear(); attendanceAllDatetimeList.addAll(allDatetimeHashSet); Collections.sort(attendanceAllDatetimeList); try { String attendanceAllDatetimeStr = ""; for(String str : attendanceAllDatetimeList) { attendanceAllDatetimeStr += str + ","; } if(StringUtil.isNotEmpty(attendanceAllDatetimeStr)) { attendanceAllDatetimeStr = attendanceAllDatetimeStr.substring(0,attendanceAllDatetimeStr.length() - 1); } attendanceTempEntity.setAlldatetime(attendanceAllDatetimeStr); if (attendanceTimeList.size() == 1) { attendanceTempEntity.setSignDate(dateFormat.parse(attendanceTimeList.get(0) + ":00")); } if (attendanceTimeList.size() > 1) { attendanceTempEntity.setSignDate(dateFormat.parse(attendanceTimeList.get(0) + ":00")); attendanceTempEntity.setNewestPunchcardDate(dateFormat.parse(attendanceTimeList.get(attendanceTimeList.size() - 1) + ":00")); } attendanceTempService.saveOrUpdate(attendanceTempEntity); } catch (ParseException e) { e.printStackTrace(); returnFlg = false; } catch (Exception e) { e.printStackTrace(); returnFlg = false; } } else { // ======为了容错的代码,正常情况下跑定时任务,每天的基本信息都会自动生成的,不会出现前一天的实时查看数据没有的情况====== START AttendanceTempEntity attendanceTempEntity = new AttendanceTempEntity(); // String userHql = "from TSBaseUser where id = ?"; // List userList = userService.findHql(userHql, dingAttendanceinfoEntity.getUserId()); // TSBaseUser tsBaseUser = userList.get(0); TSUser tsBaseUser = userService.get(TSUser.class, dingAttendanceinfoEntity.getUserId()); // 员工ID attendanceTempEntity.setUserId(tsBaseUser.getId()); // 员工编号 attendanceTempEntity.setUserCode(tsBaseUser.getUserNum()); // 员工姓名 attendanceTempEntity.setRealname(tsBaseUser.getRealName()); // 查询所属单位 StringBuilder mainOrgSql = new StringBuilder(); mainOrgSql.append(" SELECT "); mainOrgSql.append(" depart.id id"); mainOrgSql.append(" FROM t_s_user_org userOrg "); mainOrgSql.append(" LEFT JOIN t_s_depart depart ON userOrg.org_id = depart.id "); mainOrgSql.append(" WHERE "); mainOrgSql.append(" userOrg.user_id = '" + tsBaseUser.getId() + "'"); mainOrgSql.append(" AND userOrg.status = '0' "); mainOrgSql.append(" AND userOrg.ifpluralism <> '1' "); List> mainOrgMapList = systemService.findForJdbc(mainOrgSql.toString()); // 所属单位ID attendanceTempEntity.setBelongUnitid((String)mainOrgMapList.get(0).get("id")); // 考勤日期 attendanceTempEntity.setAttendanceDate(dateTempDate); SimpleDateFormat dfYMD = new SimpleDateFormat("yyyy-MM-dd"); String nowDateString = dfYMD.format(dateTempDate); // 获取班次信息 Map arrangeDutyEntityMapTemp1 = this.getArrangeDutyInfo(dateTempDate, tsBaseUser.getId()); String arrangeDutyEntityMapTemp1Flg = (String)arrangeDutyEntityMapTemp1.get("returnFlg"); if("1".equals(arrangeDutyEntityMapTemp1Flg)) { ArrangeDutyEntity arrangeDutyEntity1 = (ArrangeDutyEntity)arrangeDutyEntityMapTemp1.get("arrangeDutyEntity"); attendanceTempEntity.setArrangeDutyId(arrangeDutyEntity1.getId()); int year = Integer.valueOf(nowDateString.substring(0,4)); int month = Integer.valueOf(nowDateString.substring(5,7)); int day = Integer.valueOf(nowDateString.substring(8,10)); // 基准时间计算 String normalworkStime = arrangeDutyEntity1.getNormalworkStime(); String normalworkEtime = arrangeDutyEntity1.getNormalworkEtime(); if(StringUtil.isNotEmpty(normalworkStime) && StringUtil.isNotEmpty(normalworkEtime)) { Date datumStime = new Date(year - 1900, month - 1, day, Integer.valueOf(normalworkStime.substring(0, 2)), Integer.valueOf(normalworkStime.substring(3, 5)), 0); Date datumEtimeTemp = new Date(year - 1900, month - 1, day, Integer.valueOf(normalworkEtime.substring(0, 2)), Integer.valueOf(normalworkEtime.substring(3, 5)), 0); Date datumEtime = new Date(datumEtimeTemp.getTime() + 1000 * 60 * 60 * 24); // 设置基准时间 attendanceTempEntity.setDatumStime(datumStime); attendanceTempEntity.setDatumEtime(datumEtime); } // 计算签到时间,最新打卡时间 List attendanceTimeList = new ArrayList(); // 所有签到时间List List attendanceAllDatetimeList = new ArrayList(); SimpleDateFormat dateFormat = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss"); String tempStr = dateFormat.format(dingAttendanceinfoEntity.getAttendanceTime()); attendanceTimeList.add(tempStr.substring(0, 16)); attendanceAllDatetimeList.add(tempStr.substring(0, 16)); // 签到时间及最新打卡时间去重排序 HashSet h = new HashSet(attendanceTimeList); attendanceTimeList.clear(); attendanceTimeList.addAll(h); Collections.sort(attendanceTimeList); // 所有签到时间去重排序 HashSet allDatetimeHashSet = new HashSet(attendanceAllDatetimeList); attendanceAllDatetimeList.clear(); attendanceAllDatetimeList.addAll(allDatetimeHashSet); Collections.sort(attendanceAllDatetimeList); try { if (attendanceTimeList.size() == 1) { attendanceTempEntity.setSignDate(dateFormat.parse(attendanceTimeList.get(0) + ":00")); } if (attendanceTimeList.size() > 1) { attendanceTempEntity.setSignDate(dateFormat.parse(attendanceTimeList.get(0) + ":00")); attendanceTempEntity.setNewestPunchcardDate(dateFormat.parse(attendanceTimeList.get(attendanceTimeList.size() - 1) + ":00")); } String attendanceAllDatetimeStr = ""; for(String str : attendanceAllDatetimeList) { attendanceAllDatetimeStr += str + ","; } if(StringUtil.isNotEmpty(attendanceAllDatetimeStr)) { attendanceAllDatetimeStr = attendanceAllDatetimeStr.substring(0,attendanceAllDatetimeStr.length() - 1); } attendanceTempEntity.setAlldatetime(attendanceAllDatetimeStr); } catch (ParseException e) { e.printStackTrace(); returnFlg = false; } } else { attendanceTempEntity.setAttendanceStatus(Globals.ATTENDANCE_STATUS_6); } try { attendanceTempService.save(attendanceTempEntity); } catch (Exception e) { returnFlg = false; e.printStackTrace(); } // ======为了容错的代码,正常情况下跑定时任务,每天的基本信息都会自动生成的,不会出现前一天的实时查看数据没有的情况====== END } } } else { // 前一天未排班 ; } } else { // 当天不是休息 ; } } else { // 当天未排班 ; } } // 处理本日的数据 String attendanceTempByUserIdAndDateHql = "from AttendanceTempEntity where userId =? and attendanceDate = ?"; List attendanceTempEntityList = attendanceTempService.findHql(attendanceTempByUserIdAndDateHql, dingAttendanceinfoEntity.getUserId(), dingAttendanceinfoEntity.getAttendanceDate()); AttendanceTempEntity attendanceTempEntity = new AttendanceTempEntity(); if(attendanceTempEntityList.size() > 0) { attendanceTempEntity = attendanceTempEntityList.get(0); // 计算签到时间,最新打卡时间 List attendanceTimeList = new ArrayList(); // 所有签到时间List List attendanceAllDatetimeList = new ArrayList(); SimpleDateFormat dateFormat = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss"); String tempStr = dateFormat.format(dingAttendanceinfoEntity.getAttendanceTime()); attendanceTimeList.add(tempStr.substring(0, 16)); attendanceAllDatetimeList.add(tempStr.substring(0, 16)); if (null != attendanceTempEntity.getSignDate()) { String tempStr1 = dateFormat.format(attendanceTempEntity.getSignDate()); attendanceTimeList.add(tempStr1.substring(0, 16)); } if (null != attendanceTempEntity.getNewestPunchcardDate()) { String tempStr2 = dateFormat.format(attendanceTempEntity.getNewestPunchcardDate()); attendanceTimeList.add(tempStr2.substring(0, 16)); } if(null != attendanceTempEntity.getAlldatetime()) { String tempStr3 = attendanceTempEntity.getAlldatetime(); List alldatetimeList = Arrays.asList(tempStr3.split(",")); for(String alldatetime : alldatetimeList) { attendanceAllDatetimeList.add(alldatetime); } } HashSet h = new HashSet(attendanceTimeList); attendanceTimeList.clear(); attendanceTimeList.addAll(h); Collections.sort(attendanceTimeList); // 所有签到时间去重排序 HashSet allDatetimeHashSet = new HashSet(attendanceAllDatetimeList); attendanceAllDatetimeList.clear(); attendanceAllDatetimeList.addAll(allDatetimeHashSet); Collections.sort(attendanceAllDatetimeList); try { // 一线员工 if(Globals.MANAGETYPE_2.equals(personnelBaseArchivesManageEntity.getManagerType())) { // 获取班次信息 Map arrangeDutyEntityMap = this.getArrangeDutyInfo(dingAttendanceinfoEntity.getAttendanceDate(), dingAttendanceinfoEntity.getUserId()); String arrangeDutyFlg = (String)arrangeDutyEntityMap.get("returnFlg"); if("1".equals(arrangeDutyFlg)) { ArrangeDutyEntity arrangeDutyEntity = (ArrangeDutyEntity)arrangeDutyEntityMap.get("arrangeDutyEntity"); // 班次类型为休息时,判断休息前一天是不是夜班 if (Globals.DUTYTYPE_xiuxi.equals(arrangeDutyEntity.getDutyType())) { // 获取前一天的日期 Date dateTempDate = new Date(dingAttendanceinfoEntity.getAttendanceDate().getTime() - 1000 * 60 * 60 * 24); // 获取班次信息 Map arrangeDutyEntityMapTemp = this.getArrangeDutyInfo(dateTempDate, dingAttendanceinfoEntity.getUserId()); String arrangeDutyEntityMapTempFlg = (String)arrangeDutyEntityMapTemp.get("returnFlg"); if("1".equals(arrangeDutyEntityMapTempFlg)) { ArrangeDutyEntity arrangeDutyEntityTemp = (ArrangeDutyEntity)arrangeDutyEntityMapTemp.get("arrangeDutyEntity"); if (Globals.DUTYTYPE_yeban115.equals(arrangeDutyEntityTemp.getDutyType())) { ; } else { if (Globals.DUTYTYPE_zhiban.equals(arrangeDutyEntity.getDutyType())) { attendanceTempEntity = this.getZhibanTime(arrangeDutyEntity, dingAttendanceinfoEntity, attendanceAllDatetimeList, attendanceTempEntity, false); } else { if (attendanceTimeList.size() == 1) { attendanceTempEntity.setSignDate(dateFormat.parse(attendanceTimeList.get(0) + ":00")); } if (attendanceTimeList.size() > 1) { attendanceTempEntity.setSignDate(dateFormat.parse(attendanceTimeList.get(0) + ":00")); attendanceTempEntity.setNewestPunchcardDate(dateFormat.parse(attendanceTimeList.get(attendanceTimeList.size() - 1) + ":00")); } } } } else { if (Globals.DUTYTYPE_zhiban.equals(arrangeDutyEntity.getDutyType())) { attendanceTempEntity = this.getZhibanTime(arrangeDutyEntity, dingAttendanceinfoEntity, attendanceAllDatetimeList, attendanceTempEntity, false); } else { if (attendanceTimeList.size() == 1) { attendanceTempEntity.setSignDate(dateFormat.parse(attendanceTimeList.get(0) + ":00")); } if (attendanceTimeList.size() > 1) { attendanceTempEntity.setSignDate(dateFormat.parse(attendanceTimeList.get(0) + ":00")); attendanceTempEntity.setNewestPunchcardDate(dateFormat.parse(attendanceTimeList.get(attendanceTimeList.size() - 1) + ":00")); } } } } else { if (Globals.DUTYTYPE_zhiban.equals(arrangeDutyEntity.getDutyType())) { attendanceTempEntity = this.getZhibanTime(arrangeDutyEntity, dingAttendanceinfoEntity, attendanceAllDatetimeList, attendanceTempEntity, false); } else { if (attendanceTimeList.size() == 1) { attendanceTempEntity.setSignDate(dateFormat.parse(attendanceTimeList.get(0) + ":00")); } if (attendanceTimeList.size() > 1) { attendanceTempEntity.setSignDate(dateFormat.parse(attendanceTimeList.get(0) + ":00")); attendanceTempEntity.setNewestPunchcardDate(dateFormat.parse(attendanceTimeList.get(attendanceTimeList.size() - 1) + ":00")); } } } } else { if (attendanceTimeList.size() == 1) { attendanceTempEntity.setSignDate(dateFormat.parse(attendanceTimeList.get(0) + ":00")); } if (attendanceTimeList.size() > 1) { attendanceTempEntity.setSignDate(dateFormat.parse(attendanceTimeList.get(0) + ":00")); attendanceTempEntity.setNewestPunchcardDate(dateFormat.parse(attendanceTimeList.get(attendanceTimeList.size() - 1) + ":00")); } } } else { if (attendanceTimeList.size() == 1) { attendanceTempEntity.setSignDate(dateFormat.parse(attendanceTimeList.get(0) + ":00")); } if (attendanceTimeList.size() > 1) { attendanceTempEntity.setSignDate(dateFormat.parse(attendanceTimeList.get(0) + ":00")); attendanceTempEntity.setNewestPunchcardDate(dateFormat.parse(attendanceTimeList.get(attendanceTimeList.size() - 1) + ":00")); } } String attendanceAllDatetimeStr = ""; for(String str : attendanceAllDatetimeList) { attendanceAllDatetimeStr += str + ","; } if(StringUtil.isNotEmpty(attendanceAllDatetimeStr)) { attendanceAllDatetimeStr = attendanceAllDatetimeStr.substring(0,attendanceAllDatetimeStr.length() - 1); } attendanceTempEntity.setAlldatetime(attendanceAllDatetimeStr); attendanceTempService.saveOrUpdate(attendanceTempEntity); } catch (ParseException e) { e.printStackTrace(); returnFlg = false; } catch (Exception e) { e.printStackTrace(); returnFlg = false; } } else { // String userHql = "from TSBaseUser where id = ?"; // List userList = userService.findHql(userHql, dingAttendanceinfoEntity.getUserId()); // TSBaseUser tsBaseUser = userList.get(0); TSUser user = userService.get(TSUser.class, dingAttendanceinfoEntity.getUserId()); // 员工ID attendanceTempEntity.setUserId(user.getId()); // 员工编号 attendanceTempEntity.setUserCode(user.getUserNum()); // 员工姓名 attendanceTempEntity.setRealname(user.getRealName()); // 查询所属单位 StringBuilder mainOrgSql = new StringBuilder(); mainOrgSql.append(" SELECT "); mainOrgSql.append(" depart.id id"); mainOrgSql.append(" FROM t_s_user_org userOrg "); mainOrgSql.append(" LEFT JOIN t_s_depart depart ON userOrg.org_id = depart.id "); mainOrgSql.append(" WHERE "); mainOrgSql.append(" userOrg.user_id = '" + user.getId() + "'"); mainOrgSql.append(" AND userOrg.status = '0' "); mainOrgSql.append(" AND userOrg.ifpluralism <> '1' "); List> mainOrgMapList = systemService.findForJdbc(mainOrgSql.toString()); // 所属单位ID attendanceTempEntity.setBelongUnitid((String)mainOrgMapList.get(0).get("id")); // 考勤日期 attendanceTempEntity.setAttendanceDate(dingAttendanceinfoEntity.getAttendanceDate()); SimpleDateFormat dfYMD = new SimpleDateFormat("yyyy-MM-dd"); String nowDateString = dfYMD.format(dingAttendanceinfoEntity.getAttendanceDate()); // 一线员工 if(Globals.MANAGETYPE_2.equals(personnelBaseArchivesManageEntity.getManagerType())) { // 获取班次信息 Map arrangeDutyEntityMap = this.getArrangeDutyInfo(dingAttendanceinfoEntity.getAttendanceDate(), user.getId()); String arrangeDutyEntityFlg = (String)arrangeDutyEntityMap.get("returnFlg"); if("1".equals(arrangeDutyEntityFlg)) { ArrangeDutyEntity arrangeDutyEntity = (ArrangeDutyEntity)arrangeDutyEntityMap.get("arrangeDutyEntity"); attendanceTempEntity.setArrangeDutyId(arrangeDutyEntity.getId()); // 班次类型为夜班 int year = Integer.valueOf(nowDateString.substring(0,4)); int month = Integer.valueOf(nowDateString.substring(5,7)); int day = Integer.valueOf(nowDateString.substring(8,10)); if(Globals.DUTYTYPE_yeban115.equals(arrangeDutyEntity.getDutyType())) { // 基准时间计算 String normalworkStime = arrangeDutyEntity.getNormalworkStime(); String normalworkEtime = arrangeDutyEntity.getNormalworkEtime(); if(StringUtil.isNotEmpty(normalworkStime) && StringUtil.isNotEmpty(normalworkEtime)) { Date datumStime = new Date(year - 1900, month - 1, day, Integer.valueOf(normalworkStime.substring(0, 2)), Integer.valueOf(normalworkStime.substring(3, 5)), 0); Date datumEtimeTemp = new Date(year - 1900, month - 1, day, Integer.valueOf(normalworkEtime.substring(0, 2)), Integer.valueOf(normalworkEtime.substring(3, 5)), 0); Date datumEtime = new Date(datumEtimeTemp.getTime() + 1000 * 60 * 60 * 24); // 设置基准时间 attendanceTempEntity.setDatumStime(datumStime); attendanceTempEntity.setDatumEtime(datumEtime); } } else { // 基准时间计算 String normalworkStime = arrangeDutyEntity.getNormalworkStime(); String normalworkEtime = arrangeDutyEntity.getNormalworkEtime(); if(StringUtil.isNotEmpty(normalworkStime) && StringUtil.isNotEmpty(normalworkEtime)) { Date datumStime = new Date(year - 1900, month - 1, day, Integer.valueOf(normalworkStime.substring(0, 2)), Integer.valueOf(normalworkStime.substring(3, 5)), 0); Date datumEtime = new Date(year - 1900, month - 1, day, Integer.valueOf(normalworkEtime.substring(0, 2)), Integer.valueOf(normalworkEtime.substring(3, 5)), 0); // 设置基准时间 attendanceTempEntity.setDatumStime(datumStime); attendanceTempEntity.setDatumEtime(datumEtime); } } } else { attendanceTempEntity.setAttendanceStatus(Globals.ATTENDANCE_STATUS_6); } } else { // 一线员工以外 int year = Integer.valueOf(nowDateString.substring(0,4)); int month = Integer.valueOf(nowDateString.substring(5,7)); int day = Integer.valueOf(nowDateString.substring(8,10)); String calendarHql = "from CalendarEntity where year =? and month =? and day = ?"; List calendarList = calendarService.findHql(calendarHql, year, month, day); if(Globals.dtype_0.equals(calendarList.get(0).getDtype())) { Date datumStime = new Date(year - 1900, month - 1, day, 8, 30, 0); Date datumEtime = new Date(year - 1900, month - 1, day, 17, 0, 0); // 设置基准时间 attendanceTempEntity.setDatumStime(datumStime); attendanceTempEntity.setDatumEtime(datumEtime); } else { ; } } // 计算签到时间,最新打卡时间 List attendanceTimeList = new ArrayList(); // 所有签到时间List List attendanceAllDatetimeList = new ArrayList(); SimpleDateFormat dateFormat = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss"); String tempStr = dateFormat.format(dingAttendanceinfoEntity.getAttendanceTime()); attendanceTimeList.add(tempStr.substring(0, 16)); attendanceAllDatetimeList.add(tempStr.substring(0, 16)); if (null != attendanceTempEntity.getSignDate()) { String tempStr1 = dateFormat.format(attendanceTempEntity.getSignDate()); attendanceTimeList.add(tempStr1.substring(0, 16)); } if (null != attendanceTempEntity.getNewestPunchcardDate()) { String tempStr2 = dateFormat.format(attendanceTempEntity.getNewestPunchcardDate()); attendanceTimeList.add(tempStr2.substring(0, 16)); } if(null != attendanceTempEntity.getAlldatetime()) { String tempStr3 = attendanceTempEntity.getAlldatetime(); List alldatetimeList = Arrays.asList(tempStr3.split(",")); for(String alldatetime : alldatetimeList) { attendanceAllDatetimeList.add(alldatetime); } } HashSet h = new HashSet(attendanceTimeList); attendanceTimeList.clear(); attendanceTimeList.addAll(h); Collections.sort(attendanceTimeList); // 所有签到时间去重排序 HashSet allDatetimeHashSet = new HashSet(attendanceAllDatetimeList); attendanceAllDatetimeList.clear(); attendanceAllDatetimeList.addAll(allDatetimeHashSet); Collections.sort(attendanceAllDatetimeList); try { // 一线员工 if(Globals.MANAGETYPE_2.equals(personnelBaseArchivesManageEntity.getManagerType())) { // 获取班次信息 Map arrangeDutyEntityMap = this.getArrangeDutyInfo(dingAttendanceinfoEntity.getAttendanceDate(), dingAttendanceinfoEntity.getUserId()); String arrangeDutyFlg = (String)arrangeDutyEntityMap.get("returnFlg"); if("1".equals(arrangeDutyFlg)) { ArrangeDutyEntity arrangeDutyEntity = (ArrangeDutyEntity)arrangeDutyEntityMap.get("arrangeDutyEntity"); // 班次类型为休息时,判断休息前一天是不是夜班 if (Globals.DUTYTYPE_xiuxi.equals(arrangeDutyEntity.getDutyType())) { // 获取前一天的日期 Date dateTempDate = new Date(dingAttendanceinfoEntity.getAttendanceDate().getTime() - 1000 * 60 * 60 * 24); // 获取班次信息 Map arrangeDutyEntityMapTemp = this.getArrangeDutyInfo(dateTempDate, dingAttendanceinfoEntity.getUserId()); String arrangeDutyEntityMapTempFlg = (String)arrangeDutyEntityMapTemp.get("returnFlg"); if("1".equals(arrangeDutyEntityMapTempFlg)) { ArrangeDutyEntity arrangeDutyEntityTemp = (ArrangeDutyEntity)arrangeDutyEntityMapTemp.get("arrangeDutyEntity"); if (Globals.DUTYTYPE_yeban115.equals(arrangeDutyEntityTemp.getDutyType())) { ; } else { if (Globals.DUTYTYPE_zhiban.equals(arrangeDutyEntity.getDutyType())) { attendanceTempEntity = this.getZhibanTime(arrangeDutyEntity, dingAttendanceinfoEntity, attendanceAllDatetimeList, attendanceTempEntity, false); } else { if (attendanceTimeList.size() == 1) { attendanceTempEntity.setSignDate(dateFormat.parse(attendanceTimeList.get(0) + ":00")); } if (attendanceTimeList.size() > 1) { attendanceTempEntity.setSignDate(dateFormat.parse(attendanceTimeList.get(0) + ":00")); attendanceTempEntity.setNewestPunchcardDate(dateFormat.parse(attendanceTimeList.get(attendanceTimeList.size() - 1) + ":00")); } } } } else { if (Globals.DUTYTYPE_zhiban.equals(arrangeDutyEntity.getDutyType())) { attendanceTempEntity = this.getZhibanTime(arrangeDutyEntity, dingAttendanceinfoEntity, attendanceAllDatetimeList, attendanceTempEntity, false); } else { if (attendanceTimeList.size() == 1) { attendanceTempEntity.setSignDate(dateFormat.parse(attendanceTimeList.get(0) + ":00")); } if (attendanceTimeList.size() > 1) { attendanceTempEntity.setSignDate(dateFormat.parse(attendanceTimeList.get(0) + ":00")); attendanceTempEntity.setNewestPunchcardDate(dateFormat.parse(attendanceTimeList.get(attendanceTimeList.size() - 1) + ":00")); } } } } else { if (Globals.DUTYTYPE_zhiban.equals(arrangeDutyEntity.getDutyType())) { attendanceTempEntity = this.getZhibanTime(arrangeDutyEntity, dingAttendanceinfoEntity, attendanceAllDatetimeList, attendanceTempEntity, false); } else { if (attendanceTimeList.size() == 1) { attendanceTempEntity.setSignDate(dateFormat.parse(attendanceTimeList.get(0) + ":00")); } if (attendanceTimeList.size() > 1) { attendanceTempEntity.setSignDate(dateFormat.parse(attendanceTimeList.get(0) + ":00")); attendanceTempEntity.setNewestPunchcardDate(dateFormat.parse(attendanceTimeList.get(attendanceTimeList.size() - 1) + ":00")); } } } } else { if (attendanceTimeList.size() == 1) { attendanceTempEntity.setSignDate(dateFormat.parse(attendanceTimeList.get(0) + ":00")); } if (attendanceTimeList.size() > 1) { attendanceTempEntity.setSignDate(dateFormat.parse(attendanceTimeList.get(0) + ":00")); attendanceTempEntity.setNewestPunchcardDate(dateFormat.parse(attendanceTimeList.get(attendanceTimeList.size() - 1) + ":00")); } } } else { if (attendanceTimeList.size() == 1) { attendanceTempEntity.setSignDate(dateFormat.parse(attendanceTimeList.get(0) + ":00")); } if (attendanceTimeList.size() > 1) { attendanceTempEntity.setSignDate(dateFormat.parse(attendanceTimeList.get(0) + ":00")); attendanceTempEntity.setNewestPunchcardDate(dateFormat.parse(attendanceTimeList.get(attendanceTimeList.size() - 1) + ":00")); } } String attendanceAllDatetimeStr = ""; for(String str : attendanceAllDatetimeList) { attendanceAllDatetimeStr += str + ","; } if(StringUtil.isNotEmpty(attendanceAllDatetimeStr)) { attendanceAllDatetimeStr = attendanceAllDatetimeStr.substring(0,attendanceAllDatetimeStr.length() - 1); } attendanceTempEntity.setAlldatetime(attendanceAllDatetimeStr); attendanceTempService.save(attendanceTempEntity); } catch (ParseException e) { e.printStackTrace(); returnFlg = false; } catch (Exception e) { e.printStackTrace(); returnFlg = false; } } // 更新原始记录表中的数据为【已处理】 dingAttendanceinfoEntity.setIsDispose(Globals.SHIFOU_01_1); try { dingAttendanceinfoService.saveOrUpdate(dingAttendanceinfoEntity); } catch (Exception e) { e.printStackTrace(); returnFlg = false; } } } return returnFlg; } /** * 考勤实时查看分析考勤状态 * */ @Override public void SetAttendanceStatusAndWarning(Date date) { SimpleDateFormat dfYMD = new SimpleDateFormat("yyyy-MM-dd"); // 获取当前日期 Date nowDate = new Date(); if(null != date) { nowDate = date; } Date yesterdayDate = new Date(nowDate.getTime() - 1000 * 60 * 60 * 24); String nowDateString = dfYMD.format(nowDate); String yesterdayDateString = dfYMD.format(yesterdayDate); try { nowDate = dfYMD.parse(nowDateString); yesterdayDate = dfYMD.parse(yesterdayDateString); } catch (ParseException e1) { e1.printStackTrace(); } long time1 = System.currentTimeMillis(); String attendanceTempByDateHql = "from AttendanceTempEntity where attendanceDate =? or attendanceDate = ?"; List attendanceTempEntityList = attendanceTempService.findHql(attendanceTempByDateHql, nowDate, yesterdayDate); long time2 = System.currentTimeMillis(); //System.out.println("attendanceTempEntityList cost:"+(time2-time1) +" ms"); // 推送app消息的项目经理userid列表 ArrayList userIdList=new ArrayList(); for(AttendanceTempEntity attendanceTempEntity : attendanceTempEntityList) { // if("000000006120dd1c01612cf521d40173".equals(attendanceTempEntity.getUserId())) { // System.out.println("gllp"); // } long time3 = System.currentTimeMillis(); String personnelByUserIdHql = "from PersonnelBaseArchivesManageEntity where userid = ?"; List personnelBaseArchivesManageEntityList = personnelBaseArchivesManageService.findHql(personnelByUserIdHql, attendanceTempEntity.getUserId()); long time4 = System.currentTimeMillis(); //System.out.println("personnelBaseArchivesManageEntityList cost:"+(time4-time3) +" ms"); if(personnelBaseArchivesManageEntityList.size() == 0) { continue; } PersonnelBaseArchivesManageEntity personnelBaseArchivesManageEntity = personnelBaseArchivesManageEntityList.get(0); // 如果员工未离职 if(Globals.JOBSTATUS_1.equals(personnelBaseArchivesManageEntity.getPositionStatus()) || Globals.JOBSTATUS_2.equals(personnelBaseArchivesManageEntity.getPositionStatus())) { // 一线员工 if(Globals.MANAGETYPE_2.equals(personnelBaseArchivesManageEntity.getManagerType())) { long time5 = System.currentTimeMillis(); attendanceTempEntity = this.SetAttendanceStatus(attendanceTempEntity, attendanceTempEntityList,Globals.MANAGETYPE_2); long time6 = System.currentTimeMillis(); //System.out.println("SetAttendanceStatus cost:"+(time6-time5) +" ms"); } else { // 非一线员工(管理人员) } } // 添加项目经理维度的预警消息数据 if(Globals.DUTYTYPE_zhiban.equals(attendanceTempEntity.getDutyType())){ // 值班状态下, 超过最晚打卡时间 if(attendanceTempEntity.getDatumEtime() != null && new Date().after(attendanceTempEntity.getDatumEtime())) { long time7 = System.currentTimeMillis(); userIdList.addAll(this.setAttendanceWarnMsgByUser(attendanceTempEntity)); long time8 = System.currentTimeMillis(); //System.out.println("setAttendanceWarnMsgByUser cost:"+(time8-time7) +" ms"); } }else { long time9 = System.currentTimeMillis(); userIdList.addAll(this.setAttendanceWarnMsgByUser(attendanceTempEntity)); long time10 = System.currentTimeMillis(); //System.out.println("setAttendanceWarnMsgByUser cost:"+(time10-time9) +" ms"); } // try { // attendanceTempService.save(attendanceTempEntity); // } catch (Exception e) { // org.jeecgframework.core.util.LogUtil.error(e.getMessage()); // } } HashSet hashSet = new HashSet(userIdList); userIdList.clear(); userIdList.addAll(hashSet); pushProcessor.pushCommon(userIdList, Globals.msg_type_3); //通过项目维度 统计计算预警消息 long time11 = System.currentTimeMillis(); this.setAttendanceWarnMsgByProject(yesterdayDate); long time12 = System.currentTimeMillis(); //System.out.println("setAttendanceWarnMsgByProject yesterdayDate cost:"+(time12-time11) +" ms"); this.setAttendanceWarnMsgByProject(nowDate); long time13 = System.currentTimeMillis(); //System.out.println("setAttendanceWarnMsgByProject nowDate cost:"+(time13-time12) +" ms"); } /** * 获取班次信息 * * @param date * @param userId * @return */ private Map getArrangeDutyInfo(Date date, String userId) { Map returnMap = new HashMap(); // 检索项目排班详细表 String projarrangeDetailHql = "from ProjarrangeDetailEntity where userid =? and yearmonth = ?"; SimpleDateFormat dfYMD = new SimpleDateFormat("yyyy-MM-dd"); String dateString = dfYMD.format(date); String yearMonth = dateString.substring(0, 7); List projarrangeDetailEntityList = projarrangeDetailService.findHql(projarrangeDetailHql, userId, yearMonth); if(projarrangeDetailEntityList.size() > 0) { // 项目排班详细表ID String projarrangeDetailId = projarrangeDetailEntityList.get(0).getId(); // 检索日历表 String calendarHql = "from CalendarEntity where year =? and month =? and day = ?"; int year = Integer.valueOf(dateString.substring(0,4)); int month = Integer.valueOf(dateString.substring(5,7)); int day = Integer.valueOf(dateString.substring(8,10)); List calendarList = calendarService.findHql(calendarHql, year, month, day); // 日历表ID String calendarId = calendarList.get(0).getId(); // 检索员工排班详情表 String userArrangeDetailHql = "from UserArrangeDetailEntity where calendarid =? and projarrangeDetailid = ?"; List userArrangeDetailEntityList = userArrangeDetailService.findHql(userArrangeDetailHql, calendarId, projarrangeDetailId); if(userArrangeDetailEntityList.size() > 0) { // 班次ID String arrangeDutyId = userArrangeDetailEntityList.get(0).getShiftid(); // 班次信息 String arrangeDutyHql = "from ArrangeDutyEntity where id = ?"; List arrangeDutyEntityList = arrangeDutyService.findHql(arrangeDutyHql, arrangeDutyId); ArrangeDutyEntity arrangeDutyEntity = new ArrangeDutyEntity(); if (arrangeDutyEntityList.size() != 0) { arrangeDutyEntity = arrangeDutyEntityList.get(0); returnMap.put("returnFlg", "1"); returnMap.put("arrangeDutyEntity", arrangeDutyEntity); } else { returnMap.put("returnFlg", "0"); returnMap.put("arrangeDutyEntity", new ArrangeDutyEntity()); } } else { returnMap.put("returnFlg", "0"); returnMap.put("arrangeDutyEntity", new ArrangeDutyEntity()); } } else { returnMap.put("returnFlg", "0"); returnMap.put("arrangeDutyEntity", new ArrangeDutyEntity()); } return returnMap; } // /** // * 判断员工是否离职 // * // * @param entity // * @param date // * @return // * @throws Exception // */ // private boolean checkUserIsLeave(PersonnelBaseArchivesManageEntity entity, Date date) { // boolean result = true; // if (oConvertUtils.isNotEmpty(entity)&&oConvertUtils.isNotEmpty(date)) { // Date leaveDate = entity.getLeaveDate(); // if (oConvertUtils.isEmpty(leaveDate)) { // result = false; // } else { // result = leaveDate.before(date); // } // } // return result; // } /** * 设置考勤状态 * * @param attendanceTempEntity * @param attendanceTempEntityList * @param manageType * @return */ private AttendanceTempEntity SetAttendanceStatus(AttendanceTempEntity attendanceTempEntity, List attendanceTempEntityList, String manageType) { SimpleDateFormat dfYMD = new SimpleDateFormat("yyyy-MM-dd"); SimpleDateFormat dfYMDHm = new SimpleDateFormat("yyyy-MM-dd HH:mm"); // userId String userId = attendanceTempEntity.getUserId(); // 考勤日期 Date todayDate = attendanceTempEntity.getAttendanceDate(); Date tomorrowDate = new Date(attendanceTempEntity.getAttendanceDate().getTime() + 1000 * 60 * 60 * 24); Date yesterdayDate = new Date(attendanceTempEntity.getAttendanceDate().getTime() - 1000 * 60 * 60 * 24); String todayDateStr = dfYMD.format(todayDate); String tomorrowDateStr = dfYMD.format(tomorrowDate); String yesterdayDateStr = dfYMD.format(yesterdayDate); AttendanceTempEntity yesterdayTempEntity = getYesterdayTempEntity(attendanceTempEntityList, yesterdayDate); // 计算后的基准出勤时间 String userBaseAttendanceTime = ""; // 计算后的基准退勤时间 String userBaseRetreatTime = ""; // 开始打卡分钟数 int spunchMinute = 0; // 结束打卡分钟数 int epunchMinute = 0; if(attendanceTempEntity.getAttendanceStatus() != null) { attendanceTempEntity.setAttendanceStatus(Globals.ATTENDANCE_STATUS_0); } // // 是否请假 // List holidayEntityList = attendanceTempDao.getHolidayEntityList(userId, attendanceDateStr, WorkFlowGlobals.BPM_BUS_STATUS_3); // if(holidayEntityList.size() > 0) { // String attendanceStatus = attendanceTempEntity.getAttendanceStatus(); // if(StringUtil.isEmpty(attendanceStatus)) { // attendanceTempEntity.setAttendanceStatus(Globals.ATTENDANCE_STATUS_4); // } else { // attendanceTempEntity.setAttendanceStatus(attendanceStatus + "," + Globals.ATTENDANCE_STATUS_4); // } // } // 一线员工 if(Globals.MANAGETYPE_2.equals(manageType)) { String arrangeDutyId = attendanceTempEntity.getArrangeDutyId(); // 班次Id为空的情况,考勤状态设置未排班 if(StringUtil.isEmpty(arrangeDutyId)) { String attendanceStatus = attendanceTempEntity.getAttendanceStatus(); if(StringUtil.isNotEmpty(attendanceStatus)) { attendanceStatus += "," + Globals.ATTENDANCE_STATUS_6; attendanceStatus = attendanceStatusSort(attendanceStatus); } else{ attendanceStatus = Globals.ATTENDANCE_STATUS_6; } attendanceTempEntity.setAttendanceStatus(attendanceStatus); return attendanceTempEntity; } else { // 班次Id不为空的情况 String arrangeDutyHql = "from ArrangeDutyEntity where id = ?"; List arrangeDutyEntityList = arrangeDutyService.findHql(arrangeDutyHql, arrangeDutyId); ArrangeDutyEntity arrangeDutyEntity = arrangeDutyEntityList.get(0); // 班次为加班,休息的情况状态都是正常 if(Globals.DUTYTYPE_jiaban.equals(arrangeDutyEntity.getDutyType()) || Globals.DUTYTYPE_xiuxi.equals(arrangeDutyEntity.getDutyType())) { attendanceTempEntity.setAttendanceStatus(Globals.ATTENDANCE_STATUS_0); return attendanceTempEntity; } // 班次为值班的情况 if(Globals.DUTYTYPE_zhiban.equals(arrangeDutyEntity.getDutyType())) { attendanceTempEntity.setDutyType(Globals.DUTYTYPE_zhiban); String ondutyStimeTemp = todayDateStr + " " + arrangeDutyEntity.getOndutyStime(); Date nowDate = new Date(); SimpleDateFormat hmFormat = new SimpleDateFormat("yyyy-MM-dd HH:mm"); String nowDateStr = hmFormat.format(nowDate); if(nowDateStr.compareTo(ondutyStimeTemp) <= 0) { attendanceTempEntity.setAttendanceStatus(Globals.ATTENDANCE_STATUS_0); } else { String allDateTime = attendanceTempEntity.getAlldatetime(); if(StringUtil.isNotEmpty(allDateTime)) { String ondutyStime = arrangeDutyEntity.getOndutyStime(); String ondutyEtime = arrangeDutyEntity.getOndutyEtime(); if(ondutyStime.compareTo(ondutyEtime) > 0) { ondutyStime = todayDateStr + " " + ondutyStime; ondutyEtime = tomorrowDateStr + " " + ondutyEtime; } else { ondutyStime = todayDateStr + " " + ondutyStime; ondutyEtime = todayDateStr + " " + ondutyEtime; } List allDateTimeList = Arrays.asList(allDateTime.split(",")); for(String dateTime : allDateTimeList) { attendanceTempEntity.setAttendanceStatus(Globals.ATTENDANCE_STATUS_3); if (dateTime.compareTo(ondutyStime) >= 0 && dateTime.compareTo(ondutyEtime) <= 0) { attendanceTempEntity.setAttendanceStatus(Globals.ATTENDANCE_STATUS_0); break; } } } else { attendanceTempEntity.setAttendanceStatus(Globals.ATTENDANCE_STATUS_3); } } return attendanceTempEntity; } else { if(Globals.DUTYTYPE_yeban115.equals(arrangeDutyEntity.getDutyType())) { attendanceTempEntity.setDutyType(Globals.DUTYTYPE_yeban115); // 正常上班时间 String normalworkStime = todayDateStr + " " + arrangeDutyEntity.getNormalworkStime(); // 正常下班时间 String normalworkEtime = tomorrowDateStr + " " + arrangeDutyEntity.getNormalworkEtime(); // 值班开始时间 String ondutyStime = ""; if(StringUtil.isNotEmpty(arrangeDutyEntity.getOndutyStime())) { ondutyStime = tomorrowDateStr + " " + arrangeDutyEntity.getOndutyStime(); } // 值班结束时间 String ondutyEtime = ""; if(StringUtil.isNotEmpty(arrangeDutyEntity.getOndutyEtime())) { ondutyEtime = tomorrowDateStr + " " + arrangeDutyEntity.getOndutyEtime(); } // 超时加班开始时间 String timeoutOvertimeStime = ""; if(StringUtil.isNotEmpty(arrangeDutyEntity.getTimeOutOvertimeStime())) { timeoutOvertimeStime = tomorrowDateStr + " " + arrangeDutyEntity.getTimeOutOvertimeStime(); } // 超时加班结束时间 String timeoutOvertimeEtime = ""; if(StringUtil.isNotEmpty(arrangeDutyEntity.getTimeOutOvertimeEtime())) { timeoutOvertimeEtime = tomorrowDateStr + " " + arrangeDutyEntity.getTimeOutOvertimeEtime(); } // 开始打卡分钟数 if(null != arrangeDutyEntity.getSpunchMinute()) { spunchMinute = arrangeDutyEntity.getSpunchMinute(); } // 结束打卡分钟数 if(null != arrangeDutyEntity.getEpunchMinute()) { epunchMinute = arrangeDutyEntity.getEpunchMinute(); } // 加班备案时间 Map todayOvertimeRecord = new HashMap(); Map tomorrowOvertimeRecord = new HashMap(); List todayOvertimeRecordEntityList = attendanceTempDao.getOvertimeRecordEntityList(userId, todayDateStr); List tomorrowOvertimeRecordEntityList = attendanceTempDao.getOvertimeRecordEntityList(userId, tomorrowDateStr); int i = 1; for (OvertimeRecordEntity overtimeRecordEntity : todayOvertimeRecordEntityList) { todayOvertimeRecord.put("overtimeRecordStime" + i, dfYMDHm.format(overtimeRecordEntity.getOvertimeStime())); todayOvertimeRecord.put("overtimeRecordEtime" + i, dfYMDHm.format(overtimeRecordEntity.getOvertimeEtime())); i++; } i = 1; for (OvertimeRecordEntity overtimeRecordEntity : tomorrowOvertimeRecordEntityList) { tomorrowOvertimeRecord.put("overtimeRecordStime" + i, dfYMDHm.format(overtimeRecordEntity.getOvertimeStime())); tomorrowOvertimeRecord.put("overtimeRecordEtime" + i, dfYMDHm.format(overtimeRecordEntity.getOvertimeEtime())); i++; } Map baseTimeMap = getEffectiveAttendanceTime(normalworkStime, normalworkEtime, ondutyStime, ondutyEtime, timeoutOvertimeStime, timeoutOvertimeEtime, todayOvertimeRecord, tomorrowOvertimeRecord, "1"); String baseRetreatTimeTemp = baseTimeMap.get("baseRetreatTime"); String baseAttendanceTime = baseTimeMap.get("baseAttendanceTime"); String baseRetreatTime = baseTimeMap.get("baseRetreatTime"); userBaseAttendanceTime = baseAttendanceTime; userBaseRetreatTime = baseRetreatTime; HolidayEntity todayHolidayEntity = null; HolidayEntity tomorrowHolidayEntity = null; // 当天是否请假 List attendanceHolidayEntityList = attendanceTempDao.getHolidayEntityList(attendanceTempEntity.getUserId(), todayDateStr, WorkFlowGlobals.BPM_BUS_STATUS_3); // 当天请假开始时间和结束时间 String todayHolidayStime = ""; String todayHolidayEtime = ""; if(attendanceHolidayEntityList.size() != 0) { // 考勤状态添加【请假】 String attendanceStatus = attendanceTempEntity.getAttendanceStatus(); if(StringUtil.isEmpty(attendanceStatus)) { attendanceTempEntity.setAttendanceStatus(Globals.ATTENDANCE_STATUS_4); } else { attendanceStatus += "," + Globals.ATTENDANCE_STATUS_4; attendanceStatus = attendanceStatusSort(attendanceStatus); attendanceTempEntity.setAttendanceStatus(attendanceStatus); } todayHolidayEntity = attendanceHolidayEntityList.get(0); // 休假开始时间 Date holidayStime = todayHolidayEntity.getHolidayStime(); // 休假结束时间 Date holidayEtime = todayHolidayEntity.getHolidayEtime(); // 休假开始日期 String holidaySdate = dfYMD.format(holidayStime); // 休假结束日期 String holidayEdate = dfYMD.format(holidayEtime); // 请假开始日期等于当天 if(todayDateStr.equals(holidaySdate)) { todayHolidayStime = dfYMDHm.format(holidayStime); // 请假结束日期等于当天 if(todayDateStr.equals(holidayEdate)) { todayHolidayEtime = dfYMDHm.format(holidayEtime); } else { todayHolidayEtime = tomorrowDateStr + " 00:00"; } } else { todayHolidayStime = todayDateStr + " 00:00"; // 请假结束日期等于当天 if(todayDateStr.equals(holidayEdate)) { todayHolidayEtime = dfYMDHm.format(holidayEtime); } else { todayHolidayEtime = tomorrowDateStr + " 00:00"; } } if (todayHolidayStime.compareTo(baseAttendanceTime) <= 0 && todayHolidayEtime.compareTo(baseAttendanceTime) > 0) { baseAttendanceTime = todayHolidayEtime; } } // 第二天是否请假 List tomorrowHolidayEntityList = attendanceTempDao.getHolidayEntityList(attendanceTempEntity.getUserId(), tomorrowDateStr, WorkFlowGlobals.BPM_BUS_STATUS_3); // 第二天请假开始时间和结束时间 String tomorrowHolidayStime = ""; String tomorrowHolidayEtime = ""; if(tomorrowHolidayEntityList.size() != 0) { // 考勤状态添加【请假】 String attendanceStatus = attendanceTempEntity.getAttendanceStatus(); if(StringUtil.isEmpty(attendanceStatus)) { attendanceTempEntity.setAttendanceStatus(Globals.ATTENDANCE_STATUS_4); } else { attendanceStatus += "," + Globals.ATTENDANCE_STATUS_4; attendanceStatus = attendanceStatusSort(attendanceStatus); attendanceTempEntity.setAttendanceStatus(attendanceStatus); } tomorrowHolidayEntity = tomorrowHolidayEntityList.get(0); // 休假开始时间 Date holidayStime = tomorrowHolidayEntity.getHolidayStime(); // 休假结束时间 Date holidayEtime = tomorrowHolidayEntity.getHolidayEtime(); // 休假开始日期 String holidaySdate = dfYMD.format(holidayStime); // 休假结束日期 String holidayEdate = dfYMD.format(holidayEtime); // 请假开始日期等于当天 if(tomorrowDateStr.equals(holidaySdate)) { tomorrowHolidayStime = dfYMDHm.format(holidayStime); // 请假结束日期等于当天 if(tomorrowDateStr.equals(holidayEdate)) { tomorrowHolidayEtime = dfYMDHm.format(holidayEtime); } else { tomorrowHolidayEtime = tomorrowDateStr + " 23:59"; } } else { tomorrowHolidayStime = tomorrowDateStr + " 00:00"; // 请假结束日期等于当天 if(tomorrowDateStr.equals(holidayEdate)) { tomorrowHolidayEtime = dfYMDHm.format(holidayEtime); } else { tomorrowHolidayEtime = tomorrowDateStr + " 23:59"; } } if (tomorrowHolidayStime.compareTo(baseAttendanceTime) <= 0 && tomorrowHolidayEtime.compareTo(baseAttendanceTime) > 0) { if(tomorrowHolidayEtime.compareTo(baseRetreatTimeTemp) >= 0) { ; } else { baseAttendanceTime = tomorrowHolidayEtime; } } if (tomorrowHolidayStime.compareTo(baseRetreatTime) < 0 && tomorrowHolidayEtime.compareTo(baseRetreatTime) >= 0) { baseRetreatTime = tomorrowHolidayStime; } } if(todayHolidayEntity != null) { String holidayType = todayHolidayEntity.getHolidayType(); if(!Globals.REST_TYPE_0.equals(holidayType) && !Globals.REST_TYPE_1.equals(holidayType) &&!Globals.REST_TYPE_7.equals(holidayType)) { return attendanceTempEntity; } } if(baseAttendanceTime.equals(baseRetreatTime)) { return attendanceTempEntity; } else { userBaseAttendanceTime = baseAttendanceTime; userBaseRetreatTime = baseRetreatTime; } } else { // 正常上班时间 String normalworkStime = todayDateStr + " " + arrangeDutyEntity.getNormalworkStime(); // 正常下班时间 String normalworkEtime = todayDateStr + " " + arrangeDutyEntity.getNormalworkEtime(); // 值班开始时间 String ondutyStime = ""; if(StringUtil.isNotEmpty(arrangeDutyEntity.getOndutyStime())) { ondutyStime = todayDateStr + " " + arrangeDutyEntity.getOndutyStime(); } // 值班结束时间 String ondutyEtime = ""; if(StringUtil.isNotEmpty(arrangeDutyEntity.getOndutyEtime())) { ondutyEtime = todayDateStr + " " + arrangeDutyEntity.getOndutyEtime(); } // 超时加班开始时间 String timeoutOvertimeStime = ""; if(StringUtil.isNotEmpty(arrangeDutyEntity.getTimeOutOvertimeStime())) { timeoutOvertimeStime = todayDateStr + " " + arrangeDutyEntity.getTimeOutOvertimeStime(); } // 超时加班结束时间 String timeoutOvertimeEtime = ""; if(StringUtil.isNotEmpty(arrangeDutyEntity.getTimeOutOvertimeEtime())) { timeoutOvertimeEtime = todayDateStr + " " + arrangeDutyEntity.getTimeOutOvertimeEtime(); } // 开始打卡分钟数 if(null != arrangeDutyEntity.getSpunchMinute()) { spunchMinute = arrangeDutyEntity.getSpunchMinute(); } // 结束打卡分钟数 if(null != arrangeDutyEntity.getEpunchMinute()) { epunchMinute = arrangeDutyEntity.getEpunchMinute(); } // 加班备案时间 Map todayOvertimeRecord = new HashMap(); Map tomorrowOvertimeRecord = new HashMap(); List todayOvertimeRecordEntityList = attendanceTempDao.getOvertimeRecordEntityList(userId, todayDateStr); int i = 1; for (OvertimeRecordEntity overtimeRecordEntity : todayOvertimeRecordEntityList) { todayOvertimeRecord.put("overtimeRecordStime" + i, dfYMDHm.format(overtimeRecordEntity.getOvertimeStime())); todayOvertimeRecord.put("overtimeRecordEtime" + i, dfYMDHm.format(overtimeRecordEntity.getOvertimeEtime())); i++; } Map baseTimeMap = getEffectiveAttendanceTime(normalworkStime, normalworkEtime, ondutyStime, ondutyEtime, timeoutOvertimeStime, timeoutOvertimeEtime, todayOvertimeRecord, tomorrowOvertimeRecord, "0"); String baseAttendanceTime = baseTimeMap.get("baseAttendanceTime"); String baseRetreatTime = baseTimeMap.get("baseRetreatTime"); userBaseAttendanceTime = baseAttendanceTime; userBaseRetreatTime = baseRetreatTime; HolidayEntity todayHolidayEntity = null; // 当天是否请假 List attendanceHolidayEntityList = attendanceTempDao.getHolidayEntityList(attendanceTempEntity.getUserId(), todayDateStr, WorkFlowGlobals.BPM_BUS_STATUS_3); // 当天请假开始时间和结束时间 String todayHolidayStime = ""; String todayHolidayEtime = ""; if(attendanceHolidayEntityList.size() != 0) { // 考勤状态添加【请假】 String attendanceStatus = attendanceTempEntity.getAttendanceStatus(); if(StringUtil.isEmpty(attendanceStatus)) { attendanceTempEntity.setAttendanceStatus(Globals.ATTENDANCE_STATUS_4); } else { attendanceStatus += "," + Globals.ATTENDANCE_STATUS_4; attendanceStatus = attendanceStatusSort(attendanceStatus); attendanceTempEntity.setAttendanceStatus(attendanceStatus); } for(int j = 0; j < attendanceHolidayEntityList.size(); j++) { todayHolidayEntity = attendanceHolidayEntityList.get(j); // 休假开始时间 Date holidayStime = todayHolidayEntity.getHolidayStime(); // 休假结束时间 Date holidayEtime = todayHolidayEntity.getHolidayEtime(); // 休假开始日期 String holidaySdate = dfYMD.format(holidayStime); // 休假结束日期 String holidayEdate = dfYMD.format(holidayEtime); // 请假开始日期等于当天 if(todayDateStr.equals(holidaySdate)) { todayHolidayStime = dfYMDHm.format(holidayStime); // 请假结束日期等于当天 if(todayDateStr.equals(holidayEdate)) { todayHolidayEtime = dfYMDHm.format(holidayEtime); } else { todayHolidayEtime = tomorrowDateStr + " 00:00"; } } else { todayHolidayStime = todayDateStr + " 00:00"; // 请假结束日期等于当天 if(todayDateStr.equals(holidayEdate)) { todayHolidayEtime = dfYMDHm.format(holidayEtime); } else { todayHolidayEtime = tomorrowDateStr + " 00:00"; } } if(todayHolidayStime.equals(todayDateStr + " 00:00") && todayHolidayEtime.equals(tomorrowDateStr + " 00:00")) { return attendanceTempEntity; } else { if(todayHolidayStime.compareTo(baseAttendanceTime) <= 0) { if(todayHolidayEtime.compareTo(baseAttendanceTime) >= 0 && todayHolidayEtime.compareTo(baseRetreatTime) <= 0) { baseAttendanceTime = todayHolidayEtime; } if(todayHolidayEtime.compareTo(baseAttendanceTime) >= 0 && todayHolidayEtime.compareTo(baseRetreatTime) >= 0) { return attendanceTempEntity; } } if(todayHolidayStime.compareTo(baseAttendanceTime) > 0 && todayHolidayStime.compareTo(baseRetreatTime) < 0) { if(todayHolidayEtime.compareTo(baseRetreatTime) >= 0) { baseRetreatTime = todayHolidayStime; } } } if(todayHolidayEntity != null) { String holidayType = todayHolidayEntity.getHolidayType(); if(!Globals.REST_TYPE_0.equals(holidayType) && !Globals.REST_TYPE_1.equals(holidayType)) { return attendanceTempEntity; } } if(baseAttendanceTime.equals(baseRetreatTime)) { return attendanceTempEntity; } else { userBaseAttendanceTime = baseAttendanceTime; userBaseRetreatTime = baseRetreatTime; } } } } try { Date nowDate = new Date(); Date userBaseAttendanceDateTime = dfYMDHm.parse(userBaseAttendanceTime); Date userBaseRetreatDateTime = dfYMDHm.parse(userBaseRetreatTime); // 当前时间Calendar Calendar nowDateCalendar = Calendar.getInstance(); nowDateCalendar.setTime(nowDate); // 基准出勤时间Calendar Calendar userBaseAttendanceCalendar = Calendar.getInstance(); userBaseAttendanceCalendar.setTime(userBaseAttendanceDateTime); Calendar userBaseAttendanceTempCalendar = Calendar.getInstance(); userBaseAttendanceTempCalendar.setTime(userBaseAttendanceDateTime); // 基准退勤时间Calendar Calendar userBaseRetreatCalendar = Calendar.getInstance(); userBaseRetreatCalendar.setTime(userBaseRetreatDateTime); Calendar userBaseRetreatTempCalendar = Calendar.getInstance(); userBaseRetreatTempCalendar.setTime(userBaseRetreatDateTime); if(spunchMinute != 0) { userBaseAttendanceTempCalendar.add(Calendar.MINUTE, -spunchMinute); } if(epunchMinute != 0) { userBaseRetreatTempCalendar.add(Calendar.MINUTE, epunchMinute); } String allDateTime = attendanceTempEntity.getAlldatetime(); List allDateTimeList = new ArrayList(); if(StringUtil.isNotEmpty(allDateTime)) { List allDateTimeTempList = Arrays.asList(allDateTime.split(",")); for(String temp : allDateTimeTempList) { allDateTimeList.add(temp); } } // 实际出勤时间 String attendanceDateTime = ""; // 实际退勤时间 String retreatDateTime = ""; for(String dateTimeString : allDateTimeList) { Date dateTime = dfYMDHm.parse(dateTimeString); Calendar dateTimeCalendar = Calendar.getInstance(); dateTimeCalendar.setTime(dateTime); if(!dateTimeCalendar.before(userBaseAttendanceTempCalendar)) { if(StringUtil.isEmpty(attendanceDateTime)) { attendanceDateTime = dateTimeString; continue; } } else { continue; } if(!dateTimeCalendar.after(userBaseRetreatTempCalendar)) { retreatDateTime = dateTimeString; } } if(nowDateCalendar.after(userBaseAttendanceTempCalendar)) { if(StringUtil.isNotEmpty(attendanceDateTime)) { Date attendanceDateTimeForDate = dfYMDHm.parse(attendanceDateTime); Calendar attendanceDateTimeForDateCalendar = Calendar.getInstance(); attendanceDateTimeForDateCalendar.setTime(attendanceDateTimeForDate); int dateDiffint = DataUtils.dateDiff('m', attendanceDateTimeForDateCalendar,userBaseAttendanceCalendar); if(dateDiffint > 10 && dateDiffint <= 30) { attendanceTempEntity.setLateminute(dateDiffint); String attendanceStatus = attendanceTempEntity.getAttendanceStatus(); if(StringUtil.isEmpty(attendanceStatus)) { attendanceTempEntity.setAttendanceStatus(Globals.ATTENDANCE_STATUS_1); } else { attendanceStatus += "," + Globals.ATTENDANCE_STATUS_1; attendanceStatus = attendanceStatusSort(attendanceStatus); attendanceTempEntity.setAttendanceStatus(attendanceStatus); } } } if(StringUtil.isNotEmpty(retreatDateTime)) { Date retreatDateTimeForDate = dfYMDHm.parse(retreatDateTime); Calendar retreatDateTimeForDateCalendar = Calendar.getInstance(); retreatDateTimeForDateCalendar.setTime(retreatDateTimeForDate); int dateDiffint = DataUtils.dateDiff('m', userBaseRetreatCalendar,retreatDateTimeForDateCalendar); if(dateDiffint > 10 && dateDiffint <= 30) { attendanceTempEntity.setLeaveearlyminute(dateDiffint); String attendanceStatus = attendanceTempEntity.getAttendanceStatus(); if(StringUtil.isEmpty(attendanceStatus)) { attendanceTempEntity.setAttendanceStatus(Globals.ATTENDANCE_STATUS_2); } else { attendanceStatus += "," + Globals.ATTENDANCE_STATUS_2; attendanceStatus = attendanceStatusSort(attendanceStatus); attendanceTempEntity.setAttendanceStatus(attendanceStatus); } } } } if(nowDateCalendar.after(userBaseRetreatTempCalendar)) { if(arrangeDutyEntity.getDutyType().equals(Globals.DUTYTYPE_yeban115)) { retreatDateTime = getTomorrowTetreatDateTime(attendanceTempEntity, arrangeDutyEntity, userBaseRetreatDateTime); } if(StringUtil.isEmpty(attendanceDateTime) || StringUtil.isEmpty(retreatDateTime)) { if(StringUtil.isEmpty(attendanceDateTime) && StringUtil.isEmpty(retreatDateTime)) { // 两次都没打卡,算旷工 String attendanceStatus = attendanceTempEntity.getAttendanceStatus(); if(StringUtil.isEmpty(attendanceStatus)) { attendanceTempEntity.setAttendanceStatus(Globals.ATTENDANCE_STATUS_3); } else { attendanceStatus += "," + Globals.ATTENDANCE_STATUS_3; attendanceStatus = attendanceStatusSort(attendanceStatus); attendanceTempEntity.setAttendanceStatus(attendanceStatus); } }else { String attendanceStatus = attendanceTempEntity.getAttendanceStatus(); if(StringUtil.isEmpty(attendanceStatus)) { attendanceTempEntity.setAttendanceStatus(Globals.ATTENDANCE_STATUS_5); } else { attendanceStatus += "," + Globals.ATTENDANCE_STATUS_5; attendanceStatus = attendanceStatusSort(attendanceStatus); attendanceTempEntity.setAttendanceStatus(attendanceStatus); } } } else { // 出勤是否旷工 Date attendanceDateTimeForDate = dfYMDHm.parse(attendanceDateTime); Calendar attendanceDateTimeForDateCalendar = Calendar.getInstance(); attendanceDateTimeForDateCalendar.setTime(attendanceDateTimeForDate); int attendanceDateTimeDiffint = DataUtils.dateDiff('m', attendanceDateTimeForDateCalendar,userBaseAttendanceCalendar); if(attendanceDateTimeDiffint > 30) { String attendanceStatus = attendanceTempEntity.getAttendanceStatus(); if(StringUtil.isEmpty(attendanceStatus)) { attendanceTempEntity.setAttendanceStatus(Globals.ATTENDANCE_STATUS_3); } else { attendanceStatus += "," + Globals.ATTENDANCE_STATUS_3; attendanceStatus = attendanceStatusSort(attendanceStatus); attendanceTempEntity.setAttendanceStatus(attendanceStatus); } } // 退勤是否旷工 Date retreatDateTimeForDate = dfYMDHm.parse(retreatDateTime); Calendar retreatDateTimeForDateCalendar = Calendar.getInstance(); retreatDateTimeForDateCalendar.setTime(retreatDateTimeForDate); int retreatDateTimeDiffint = DataUtils.dateDiff('m', userBaseRetreatCalendar,retreatDateTimeForDateCalendar); if(retreatDateTimeDiffint > 30) { String attendanceStatus = attendanceTempEntity.getAttendanceStatus(); if(StringUtil.isEmpty(attendanceStatus)) { attendanceTempEntity.setAttendanceStatus(Globals.ATTENDANCE_STATUS_3); } else { attendanceStatus += "," + Globals.ATTENDANCE_STATUS_3; attendanceStatus = attendanceStatusSort(attendanceStatus); attendanceTempEntity.setAttendanceStatus(attendanceStatus); } } } } } catch (ParseException e1) { e1.printStackTrace(); } } } } else { // 非一线员工 } return attendanceTempEntity; } /** * @param attendanceTempEntity * @param arrangeDutyEntity * @param userBaseRetreatDateTime * @return */ private String getTomorrowTetreatDateTime(AttendanceTempEntity attendanceTempEntity, ArrangeDutyEntity arrangeDutyEntity, Date standardEndDateTime) { SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss"); Calendar standardEndCalendar = Calendar.getInstance(); standardEndCalendar.setTime(standardEndDateTime); Calendar retreatCalendar = Calendar.getInstance(); retreatCalendar.setTime(standardEndDateTime); if(null != arrangeDutyEntity.getEpunchMinute()) { retreatCalendar.add(Calendar.MINUTE, arrangeDutyEntity.getEpunchMinute()+1); } CriteriaQuery cq = new CriteriaQuery(DingAttendanceinfoEntity.class); cq.eq("userId", attendanceTempEntity.getUserId()); cq.add(); cq.between("attendanceTime", standardEndCalendar.getTime(), retreatCalendar.getTime()); cq.add(); cq.addOrder("attendanceTime", SortDirection.desc); // String hql = "from DingAttendanceinfoEntity where attendanceTime like '" +sdf.format(userBaseRetreatTempCalendar)+"%' " // + "and userId='" +attendanceTempEntity.getUserId() +"'"; List entitiesFromDB = systemService.getListByCriteriaQuery(cq, false); if(entitiesFromDB != null && entitiesFromDB.size()>0) { Date attTime = entitiesFromDB.get(0).getAttendanceTime(); return sdf.format(attTime); } return null; } /** * @param attendanceTempEntity * @param userBaseRetreatTempCalendar * @return */ private String getTomorrowTetreatDateTime(AttendanceTempEntity attendanceTempEntity, Calendar userBaseRetreatTempCalendar) { String strDateFormat = "yyyy-MM"; SimpleDateFormat sdf = new SimpleDateFormat(strDateFormat); // CriteriaQuery cq = new CriteriaQuery(DingAttendanceinfoEntity.class); // cq.like("attendanceTime", sdf.format(userBaseRetreatTempCalendar)+"%"); // cq.add(); // cq.between("attendanceTime", curdate, tomdate); // cq.add(); // cq.addOrder("attendanceTime", SortDirection.asc); String hql = "from DingAttendanceinfoEntity where attendanceTime like '" +sdf.format(userBaseRetreatTempCalendar)+"%' " + "and userId='" +attendanceTempEntity.getUserId() +"'"; List entitiesFromDB = systemService.findHql(hql); return null; } /** * @param attendanceTempEntityList * @param yesterdayDateStr * @return */ private AttendanceTempEntity getYesterdayTempEntity(List attendanceTempEntityList, Date yesterdayDate) { if(yesterdayDate != null && attendanceTempEntityList != null && attendanceTempEntityList.size()>0) { for(AttendanceTempEntity entity : attendanceTempEntityList) { if(entity.getAttendanceDate().compareTo(yesterdayDate) == 0) { return entity; } } } return null; } /** * 获取基准出退勤时间(不包含请假,开始结束打卡分钟数) * * @param normalworkStime 正常上班时间 * @param normalworkEtime 正常下班时间 * @param ondutyStime 值班开始时间 * @param ondutyEtime 值班结束时间 * @param timeoutOvertimeStime 超时加班开始时间 * @param timeoutOvertimeEtime 超时加班结束时间 * @param todayOvertimeRecord 当天加班备案开始时间 * @param tomorrowOvertimeRecord 第二天加班备案时间 * @param flg 白班夜班区分 1:夜班 * @return Map * baseAttendanceTime 基准开始时间 * baseRetreatTime 基准结束时间 */ private Map getEffectiveAttendanceTime( String normalworkStime, String normalworkEtime, String ondutyStime, String ondutyEtime, String timeoutOvertimeStime, String timeoutOvertimeEtime, Map todayOvertimeRecord, Map tomorrowOvertimeRecord, String flg) { Map returnMap = new HashMap(); // 基准出勤时间 String baseAttendanceTime = normalworkStime; // 基准退勤时间 String baseRetreatTime = normalworkEtime; // 基准出勤时间计算 if (StringUtil.isNotEmpty(ondutyStime)) { if (StringUtil.isNotEmpty(timeoutOvertimeStime)) { if (baseAttendanceTime.equals(timeoutOvertimeEtime)) { baseAttendanceTime = timeoutOvertimeStime; if (baseAttendanceTime.equals(ondutyEtime)) { baseAttendanceTime = ondutyStime; } else { ; } } else { if (baseAttendanceTime.equals(ondutyEtime)) { baseAttendanceTime = ondutyStime; if (baseAttendanceTime.equals(timeoutOvertimeEtime)) { baseAttendanceTime = timeoutOvertimeStime; } else { ; } } } } else { if (baseAttendanceTime.equals(ondutyEtime)) { baseAttendanceTime = ondutyStime; } else { ; } } } else { if (StringUtil.isNotEmpty(timeoutOvertimeStime)) { if (baseAttendanceTime.equals(timeoutOvertimeEtime)) { baseAttendanceTime = timeoutOvertimeStime; } else { ; } } } // 基准退勤时间计算 if (StringUtil.isNotEmpty(ondutyStime)) { if (StringUtil.isNotEmpty(timeoutOvertimeStime)) { if (baseRetreatTime.equals(timeoutOvertimeStime)) { baseRetreatTime = timeoutOvertimeEtime; if (baseRetreatTime.equals(ondutyStime)) { baseRetreatTime = ondutyEtime; } else { ; } } else { if (baseRetreatTime.equals(ondutyStime)) { baseRetreatTime = ondutyEtime; if (baseRetreatTime.equals(timeoutOvertimeStime)) { baseRetreatTime = timeoutOvertimeEtime; } else { ; } } else { ; } } } else { if (baseRetreatTime.equals(ondutyStime)) { baseRetreatTime = ondutyEtime; } else { ; } } } else { if (StringUtil.isNotEmpty(timeoutOvertimeStime)) { if (baseRetreatTime.equals(timeoutOvertimeStime)) { baseRetreatTime = timeoutOvertimeEtime; } else { ; } } } int todayOvertimeRecordSize = todayOvertimeRecord.size() / 2; int tomorrowOvertimeRecordSize = tomorrowOvertimeRecord.size() / 2; if("1".equals(flg)) { if(todayOvertimeRecordSize > 0) { for(int i = 1; i <= todayOvertimeRecordSize; i++) { String todayOvertimeRecordStr = todayOvertimeRecord.get("overtimeRecordEtime" + i); if (baseAttendanceTime.equals(todayOvertimeRecordStr)) { baseAttendanceTime = todayOvertimeRecord.get("overtimeRecordStime" + i); for(int j = i - 1; j > 0; j--) { String todayOvertimeRecordStr1 = todayOvertimeRecord.get("overtimeRecordEtime" + j); if (baseAttendanceTime.equals(todayOvertimeRecordStr1)) { baseAttendanceTime = todayOvertimeRecord.get("overtimeRecordStime" + j); } } } else { break; } } } if(tomorrowOvertimeRecordSize > 0) { for(int i = tomorrowOvertimeRecordSize; i >= 1; i--) { String tomorrowOvertimeRecordStr = tomorrowOvertimeRecord.get("overtimeRecordStime" + i); if (baseRetreatTime.equals(tomorrowOvertimeRecordStr)) { baseRetreatTime = tomorrowOvertimeRecord.get("overtimeRecordEtime" + i); for(int j = i + 1; j <= todayOvertimeRecordSize; j++) { String todayOvertimeRecordStr1 = todayOvertimeRecord.get("overtimeRecordStime" + j); if (baseRetreatTime.equals(todayOvertimeRecordStr1)) { baseRetreatTime = todayOvertimeRecord.get("overtimeRecordEtime" + j); } } } else { break; } } } } else { if(todayOvertimeRecordSize > 0) { // 获取基准出勤时间 for(int i = 1; i <= todayOvertimeRecordSize; i++) { String todayOvertimeRecordStr = todayOvertimeRecord.get("overtimeRecordEtime" + i); if (baseAttendanceTime.equals(todayOvertimeRecordStr)) { baseAttendanceTime = todayOvertimeRecord.get("overtimeRecordStime" + i); for(int j = i - 1; j > 0; j--) { String todayOvertimeRecordStr1 = todayOvertimeRecord.get("overtimeRecordEtime" + j); if (baseAttendanceTime.equals(todayOvertimeRecordStr1)) { baseAttendanceTime = todayOvertimeRecord.get("overtimeRecordStime" + j); } } } } // 获取基准退勤时间 for(int i = 1; i <= todayOvertimeRecordSize; i++) { String todayOvertimeRecordStr = todayOvertimeRecord.get("overtimeRecordStime" + i); if (baseRetreatTime.equals(todayOvertimeRecordStr)) { baseRetreatTime = todayOvertimeRecord.get("overtimeRecordEtime" + i); for(int j = i + 1; j <= todayOvertimeRecordSize; j++) { String todayOvertimeRecordStr1 = todayOvertimeRecord.get("overtimeRecordStime" + j); if (baseRetreatTime.equals(todayOvertimeRecordStr1)) { baseRetreatTime = todayOvertimeRecord.get("overtimeRecordEtime" + j); } } } } } } returnMap.put("baseAttendanceTime", baseAttendanceTime); returnMap.put("baseRetreatTime", baseRetreatTime); return returnMap; } /** * 对考勤状态进行去重排序 * * @param attendanceStatus * @return */ private String attendanceStatusSort(String attendanceStatus) { List attendanceStatusList = new ArrayList(); List attendanceStatusTempList = Arrays.asList(attendanceStatus.split(",")); for(String temp : attendanceStatusTempList) { attendanceStatusList.add(temp); } HashSet attendanceStatusHashSet = new HashSet(attendanceStatusList); attendanceStatusList.clear(); attendanceStatusList.addAll(attendanceStatusHashSet); Collections.sort(attendanceStatusList); attendanceStatus = ""; for(String str : attendanceStatusList) { attendanceStatus += str + ","; } attendanceStatus = attendanceStatus.substring(0,attendanceStatus.length() - 1); return attendanceStatus; } /** * 根据组织Id获取项目Id以及项目——部门之间的名称 * * @param belongUnitid * @return returnMap * projectId 项目Id * projectName 项目——部门名称 */ private Map getProjectNameByBelongUnitid(String belongUnitid) { Map returnMap = new HashMap(); String projectId = ""; String projectName = ""; List departNameList = new ArrayList(); while (1 == 1) { Map departInfo = this.getDepartById(belongUnitid); String id = departInfo.get("id"); belongUnitid = departInfo.get("parentDepartId"); String orgType = departInfo.get("orgType"); String departName = departInfo.get("departName"); if(StringUtil.isEmpty(id)) { break; } else { departNameList.add(departName); projectId = id; if (Globals.org_type_2.equals(orgType)) { if (StringUtil.isEmpty(belongUnitid)) { break; } else { ; } } else { break; } } } for(int i = departNameList.size() - 1; i >= 0; i--) { projectName += departNameList.get(i) + "-"; } if(StringUtil.isNotEmpty(projectName)) { projectName = projectName.substring(0, projectName.length() - 1); } returnMap.put("projectId", projectId); returnMap.put("projectName", projectName); return returnMap; } /** * 根据组织Id获取组织信息 * * @param id 组织Id * @return returnDepartInfo * id 组织Id * parentDepartId 父组织Id * orgType 组织类型 * departName 组织名 */ private Map getDepartById(String id) { Map returnDepartInfo = new HashMap(); // 查询组织信息 StringBuilder SelectDepartByIdSql = new StringBuilder(); SelectDepartByIdSql.append(" SELECT "); SelectDepartByIdSql.append(" id,parentdepartid,org_type,departname "); SelectDepartByIdSql.append(" FROM t_s_depart "); SelectDepartByIdSql.append(" WHERE "); SelectDepartByIdSql.append(" id = '" + id + "'"); List> departList = systemService .findForJdbc(SelectDepartByIdSql.toString()); Map departInfo = departList.get(0); String parentDepartId = (String) departInfo.get("parentdepartid"); String orgType = (String) departInfo.get("org_type"); String departName = (String) departInfo.get("departname"); returnDepartInfo.put("id", id); returnDepartInfo.put("parentDepartId", parentDepartId); returnDepartInfo.put("orgType", orgType); returnDepartInfo.put("departName", departName); return returnDepartInfo; } private AttendanceTempEntity getZhibanTime(ArrangeDutyEntity arrangeDutyEntity, DingAttendanceinfoEntity dingAttendanceinfoEntity, List attendanceAllDatetimeList, AttendanceTempEntity attendanceTempEntity, boolean yesterdayFlg) throws Exception { SimpleDateFormat dateFormat = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss"); String ondutyStime = arrangeDutyEntity.getOndutyStime(); String ondutyEtime = arrangeDutyEntity.getOndutyEtime(); if(ondutyStime.compareTo(ondutyEtime) > 0) { // 值夜班 Calendar startCalendar = Calendar.getInstance(); Calendar endCalendar = Calendar.getInstance(); if(yesterdayFlg) { // 开始日期 Date dateYesterday = new Date(dingAttendanceinfoEntity.getAttendanceDate().getTime() - 1000 * 60 * 60 * 24); startCalendar.setTime(dateYesterday); // 结束日期 endCalendar.setTime(dingAttendanceinfoEntity.getAttendanceDate()); } else { // 开始日期 startCalendar.setTime(dingAttendanceinfoEntity.getAttendanceDate()); Date dateTomorrow = new Date(dingAttendanceinfoEntity.getAttendanceDate().getTime() + 1000 * 60 * 60 * 24); // 结束日期 endCalendar.setTime(dateTomorrow); } String[] ondutyStimeTemp = ondutyStime.split(":"); String[] ondutyEtimeTemp = ondutyEtime.split(":"); startCalendar.set(Calendar.HOUR_OF_DAY, Integer.valueOf(ondutyStimeTemp[0])); startCalendar.set(Calendar.MINUTE, Integer.valueOf(ondutyStimeTemp[1])); endCalendar.set(Calendar.HOUR_OF_DAY, Integer.valueOf(ondutyEtimeTemp[0])); endCalendar.set(Calendar.MINUTE, Integer.valueOf(ondutyEtimeTemp[1])); String startStr = dateFormat.format(startCalendar.getTime()); String endStr = dateFormat.format(endCalendar.getTime()); List attendanceTimeListTemp = new ArrayList(); for (int i = 0; i < attendanceAllDatetimeList.size(); i++) { if(startStr.compareTo(attendanceAllDatetimeList.get(i) + ":00") <= 0 && endStr.compareTo(attendanceAllDatetimeList.get(i) + ":00") >= 0) { attendanceTimeListTemp.add(attendanceAllDatetimeList.get(i)); } } if (attendanceTimeListTemp.size() == 1) { attendanceTempEntity.setSignDate(dateFormat.parse(attendanceTimeListTemp.get(0) + ":00")); } if (attendanceTimeListTemp.size() > 1) { attendanceTempEntity.setSignDate(dateFormat.parse(attendanceTimeListTemp.get(0) + ":00")); attendanceTempEntity.setNewestPunchcardDate(dateFormat.parse(attendanceTimeListTemp.get(attendanceTimeListTemp.size() - 1) + ":00")); } } else { // 值日班 // 开始时间 Calendar startCalendar = Calendar.getInstance(); // 结束时间 Calendar endCalendar = Calendar.getInstance(); startCalendar.setTime(dingAttendanceinfoEntity.getAttendanceDate()); endCalendar.setTime(dingAttendanceinfoEntity.getAttendanceDate()); String[] ondutyStimeTemp = ondutyStime.split(":"); String[] ondutyEtimeTemp = ondutyEtime.split(":"); startCalendar.set(Calendar.HOUR_OF_DAY, Integer.valueOf(ondutyStimeTemp[0])); startCalendar.set(Calendar.MINUTE, Integer.valueOf(ondutyStimeTemp[1])); endCalendar.set(Calendar.HOUR_OF_DAY, Integer.valueOf(ondutyEtimeTemp[0])); endCalendar.set(Calendar.MINUTE, Integer.valueOf(ondutyEtimeTemp[1])); String startStr = dateFormat.format(startCalendar.getTime()); String endStr = dateFormat.format(endCalendar.getTime()); List attendanceTimeListTemp = new ArrayList(); for (int i = 0; i < attendanceAllDatetimeList.size(); i++) { if(startStr.compareTo(attendanceAllDatetimeList.get(i) + ":00") <= 0 && endStr.compareTo(attendanceAllDatetimeList.get(i) + ":00") >= 0) { attendanceTimeListTemp.add(attendanceAllDatetimeList.get(i)); } } if (attendanceTimeListTemp.size() == 1) { attendanceTempEntity.setSignDate(dateFormat.parse(attendanceTimeListTemp.get(0) + ":00")); } if (attendanceTimeListTemp.size() > 1) { attendanceTempEntity.setSignDate(dateFormat.parse(attendanceTimeListTemp.get(0) + ":00")); attendanceTempEntity.setNewestPunchcardDate(dateFormat.parse(attendanceTimeListTemp.get(attendanceTimeListTemp.size() - 1) + ":00")); } } return attendanceTempEntity; } /** * 给项目经理发送预警消息 * * @param attendanceTempEntity */ private List setAttendanceWarnMsgByUser(AttendanceTempEntity attendanceTempEntity) { //推送app消息的项目经理userid列表 ArrayList userIdList=new ArrayList(); // 考勤状态 String attendanceStatus = attendanceTempEntity.getAttendanceStatus(); List attendanceStatusList = new ArrayList(); if(StringUtil.isNotEmpty(attendanceStatus)) { attendanceStatusList = Arrays.asList(attendanceStatus.split(",")); } if(attendanceStatusList.size() > 0) { for(String status : attendanceStatusList) { if(Globals.ATTENDANCE_STATUS_1.equals(status) || Globals.ATTENDANCE_STATUS_2.equals(status) || Globals.ATTENDANCE_STATUS_3.equals(status) || Globals.ATTENDANCE_STATUS_5.equals(status)) { // 用户Id String userId = attendanceTempEntity.getUserId(); // 用户姓名 String realname = attendanceTempEntity.getRealname(); // if("0000000061459498016145fbf2ea0af1".equals(attendanceTempEntity.getUserId())) { // System.out.println(""); // } // 所属组织 String belongUnitid = attendanceTempEntity.getBelongUnitid(); // 考勤时间 Date attendanceDate = attendanceTempEntity.getAttendanceDate(); // 迟到分钟数 Integer lateminute = attendanceTempEntity.getLateminute(); // 早退分钟数 Integer leaveearlyminute = attendanceTempEntity.getLeaveearlyminute(); // 所属组织名称 // String belongUnitname = departService.get(TSDepart.class, belongUnitid).getDepartname(); // 所属项目名称 String projectId = this.getBybelongId(userId); String projectNameString = departService.get(TSDepart.class, belongUnitid).getDepartname(); // 状态名称 String statusName = ""; // 提示信息 String msgInfo = ""; // 消息类型 String msgType = ""; if(Globals.ATTENDANCE_STATUS_1.equals(status)) { statusName = "迟到"; msgType = "chidao"; msgInfo = realname + " " + statusName + "" + lateminute.intValue() + "分钟"; } if(Globals.ATTENDANCE_STATUS_2.equals(status)) { statusName = "早退"; msgType = "zaotui"; msgInfo = realname + " " + statusName + "" + leaveearlyminute.intValue() + "分钟"; } if(Globals.ATTENDANCE_STATUS_3.equals(status)) { statusName = "旷工"; msgType = "kuanggong"; msgInfo = realname + " " + statusName; } if(Globals.ATTENDANCE_STATUS_5.equals(status)) { statusName = "未打卡"; msgType = "weidaka"; msgInfo = realname + " " + statusName; } String attendanceWarnMsgHql = "from AttendanceWarnMsgEntity where userId =? and sendTime =? and msgType =? and msgContent = ?"; List attendanceWarnMsgEntityList = attendanceWarnMsgService.findHql(attendanceWarnMsgHql, userId, attendanceDate, msgType, msgInfo); if (attendanceWarnMsgEntityList.size() == 0) { AttendanceWarnMsgEntity attendanceWarnMsgEntity = new AttendanceWarnMsgEntity(); attendanceWarnMsgEntity.setMsgContent(msgInfo); attendanceWarnMsgEntity.setUserId(userId); attendanceWarnMsgEntity.setOrgId(projectId); attendanceWarnMsgEntity.setMsgTitle(projectNameString); attendanceWarnMsgEntity.setSendTime(attendanceDate); attendanceWarnMsgEntity.setCreateDate(new Date()); attendanceWarnMsgEntity.setMsgType(msgType); try { attendanceWarnMsgService.save(attendanceWarnMsgEntity); } catch (Exception e) { e.printStackTrace(); } List msgdetaillist = new ArrayList<>(); //将msg 发送给项目经理 String pid = attendanceWarnMsgEntity.getOrgId(); String mngid = null; TSDepart depart = commonService.get(TSDepart.class, pid); if (null!=depart) { mngid = depart.getDeptProjManagerid(); } if (oConvertUtils.isNotEmpty(mngid)) { AttendanceWarnMsgDetailEntity detailEntity = new AttendanceWarnMsgDetailEntity(); detailEntity.setMsgId(attendanceWarnMsgEntity.getId()); detailEntity.setReceivedId(mngid); detailEntity.setReadStatus(Globals.read_status_0); msgdetaillist.add(detailEntity); userIdList.add(mngid); } // 根据用户userIdList和消息具体类型批量推送 attendanceWarnMsgService.batchSave(msgdetaillist); } } } } return userIdList; } /** * 通过人查询所属项目 * @param userid * @return */ private String getBybelongId(String userid){ String temp = ""; StringBuffer hql = new StringBuffer("from TSUserOrg where tsUser.id = :userid and ifpluralism = 0 and status=0"); List tsList = commonService.getSession().createQuery(hql.toString()).setParameter("userid", userid).list(); if(!tsList.isEmpty()){ TSUserOrg uo = tsList.get(0); TSDepart tsDepart = uo.getTsDepart(); if("1".equals(tsDepart.getOrgType()) || "3".equals(tsDepart.getOrgType()) || "4".equals(tsDepart.getOrgType()) || "5".equals(tsDepart.getOrgType())){ temp = tsDepart.getId(); }else if("2".equals(tsDepart.getOrgType()) && "1".equals(tsDepart.getTSPDepart().getOrgType())){ temp = tsDepart.getId(); }else{ temp = selectById(tsDepart.getId()); } } return temp; } private String selectById(String id){ String temp = ""; TSDepart tsDepart = commonService.getEntity(TSDepart.class,id); if("3".equals(tsDepart.getOrgType()) || "5".equals(tsDepart.getOrgType())){ temp = tsDepart.getId(); }else{ if(tsDepart.getTSPDepart() != null){ selectById(tsDepart.getTSPDepart().getId()); temp = tsDepart.getTSPDepart().getId(); } } return temp; } private void setAttendanceWarnMsgByProject(Date date) { SimpleDateFormat dfYMD = new SimpleDateFormat("yyyy-MM-dd"); String dateStr = dfYMD.format(date); List padtolist = attendanceWarnMsgMinidao.getProjectAbnormalDetail(dateStr); if (!ListUtils.isNullOrEmpty(padtolist)) { ArrayList userIdList=new ArrayList(); for (ProjectAbnormalDetailDto dto :padtolist) { AttendanceWarnMsgEntity msgEntity = new AttendanceWarnMsgEntity(); String msgContent = ""; if (Globals.msg_type_chidao.equals(dto.getMsgtype())) { msgEntity.setMsgType(dto.getMsgtype()); /*迟到总人数达 10 人 已达总人数的 20 %*/ msgContent ="迟到总人数达 "+dto.getErrorcount()+" 人 已达总人数的 "+dto.getTotalpercent()+" %"; } if (Globals.msg_type_kuanggong.equals(dto.getMsgtype())) { msgEntity.setMsgType(dto.getMsgtype()); /*旷工总人数达 5 人 已达总人数的 10 %*/ msgContent ="旷工总人数达 "+dto.getErrorcount()+" 人 已达总人数的 "+dto.getTotalpercent()+" %"; } if (Globals.msg_type_zaotui.equals(dto.getMsgtype())) { msgEntity.setMsgType(dto.getMsgtype()); /*早退总人数达 10 人 已达总人数的 20 %*/ msgContent ="早退总人数达 "+dto.getErrorcount()+" 人 已达总人数的 "+dto.getTotalpercent()+" %"; } if (Globals.msg_type_weidaka.equals(dto.getMsgtype())) { msgEntity.setMsgType(dto.getMsgtype()); /*早退总人数达 10 人 已达总人数的 20 %*/ msgContent ="未打卡总人数达 "+dto.getErrorcount()+" 人 已达总人数的 "+dto.getTotalpercent()+" %"; } if (oConvertUtils.isNotEmpty(msgEntity.getMsgType())) { String projectname = ""; if (oConvertUtils.isNotEmpty(oConvertUtils.getString(dto.getPid()))) { TSDepart depart = commonService.get(TSDepart.class, dto.getPid()); if (null!=depart) { projectname =depart.getDepartname(); } } msgEntity.setMsgContent(msgContent); msgEntity.setOrgId(dto.getPid()); msgEntity.setMsgTitle(projectname); msgEntity.setSendTime(date); msgEntity.setCreateDate(new Date()); CriteriaQuery cq = new CriteriaQuery(AttendanceWarnMsgEntity.class); cq.eq("orgId", msgEntity.getOrgId()); cq.add(); cq.isNull("userId"); cq.add(); cq.eq("msgContent", msgEntity.getMsgContent()); cq.add(); List msglist = commonService.getListByCriteriaQuery( cq, false); if (ListUtils.isNullOrEmpty(msglist)) { commonService.save(msgEntity); HashSet useridHashSet = new HashSet(); List msgDtolist = new ArrayList(); //将msg 发送给系统的人事部人员 和管理层人员 List attendanceWarnMsgDtolist = attendanceWarnMsgMinidao.getAllLeaderUserIdList(); if (null==attendanceWarnMsgDtolist) { attendanceWarnMsgDtolist = new ArrayList(); } for (AttendanceWarnMsgDto msgDto: attendanceWarnMsgDtolist) { if (useridHashSet.contains(msgDto.getUserId())) { }else { msgDtolist.add(msgDto); useridHashSet.add(msgDto.getUserId()); } } //将msg 发送给区域管理人员 String orgid = msgEntity.getOrgId(); // 查询当前员工的区域组织机构 TSDepart tsDepart = getQyDepartByorgid(orgid); if (oConvertUtils.isEmpty(tsDepart)||oConvertUtils.isEmpty(tsDepart.getId())) { } else{ //根据departid 查询该区域的区域总经理 List attendanceWarnMsgDtos= attendanceWarnMsgMinidao.getAllQYJLUserIdListByOrgid(tsDepart.getId()); for (AttendanceWarnMsgDto msgDto: attendanceWarnMsgDtos) { if (useridHashSet.contains(msgDto.getUserId())) { }else { msgDtolist.add(msgDto); useridHashSet.add(msgDto.getUserId()); } } } List msgdetaillist = new ArrayList<>(); if (!ListUtils.isNullOrEmpty(msgDtolist)) { for (AttendanceWarnMsgDto msgDto : msgDtolist) { AttendanceWarnMsgDetailEntity detailEntity = new AttendanceWarnMsgDetailEntity(); detailEntity.setMsgId(msgEntity.getId()); detailEntity.setReceivedId(msgDto.getUserId()); detailEntity.setReadStatus(Globals.read_status_0); msgdetaillist.add(detailEntity); userIdList.add(msgDto.getUserId()); } commonService.batchSave(msgdetaillist); } } } } HashSet hashSet = new HashSet(userIdList); userIdList.clear(); userIdList.addAll(hashSet); // 根据用户userIdList和消息具体类型批量推送 pushProcessor.pushCommon(userIdList, Globals.msg_type_3); } } /** * 获取区域 * * @param orgid * @return */ private TSDepart getQyDepartByorgid(String orgid) { TSDepart tsDepart = commonService.get(TSDepart.class, orgid); if (tsDepart.getOrgType().equals(Globals.org_type_4)) { return tsDepart; } else { TSDepart parentdepart = tsDepart.getTSPDepart(); if (oConvertUtils.isEmpty(parentdepart)||oConvertUtils.isEmpty(parentdepart.getId())) { return null; } else { return getQyDepartByorgid(tsDepart.getTSPDepart().getId()); } } } }