package cn.timer.api.controller.kqgl.atttimer; import java.text.DateFormat; import java.text.ParseException; import java.text.SimpleDateFormat; import java.util.ArrayList; import java.util.Arrays; import java.util.Calendar; import java.util.Date; import java.util.List; import java.util.Locale; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.transaction.annotation.Transactional; import org.springframework.web.bind.annotation.RestController; import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; import cn.timer.api.bean.kqgl.AttendanceWeeklySch; import cn.timer.api.bean.kqgl.PunchCardDetails; import cn.timer.api.bean.kqgl.PunchRecord; import cn.timer.api.bean.kqgl.Schedule; import cn.timer.api.bean.kqmk.KqglAssoBcsz; import cn.timer.api.bean.kqmk.KqglAssoDkmx; import cn.timer.api.bean.kqmk.KqglAssoLeaveRules; import cn.timer.api.bean.kqmk.KqglAssoMonthPunchSummary; import cn.timer.api.bean.kqmk.KqglAssoOvertimeBasics; import cn.timer.api.bean.kqmk.KqglAssoPbmx; import cn.timer.api.bean.kqmk.KqglAssoRelationSummary; import cn.timer.api.bean.kqmk.KqglAssoTeshu; import cn.timer.api.bean.kqmk.KqglAssoZhoupaiban; import cn.timer.api.bean.kqmk.KqglMainKqz; import cn.timer.api.bean.kqmk.KqmkRedletterDay; import cn.timer.api.controller.kqgl.ClockInController; import cn.timer.api.controller.kqgl.ClockInTool; import cn.timer.api.controller.kqgl.EmptyUtil; import cn.timer.api.dao.kqgl.AttendanceWeeklySchMapper; import cn.timer.api.dao.kqgl.PunchCardDetailsMapper; import cn.timer.api.dao.kqgl.PunchRecordMapper; import cn.timer.api.dao.kqgl.ScheduleMapper; import cn.timer.api.dao.kqmk.KqglAssoDkmxMapper; import cn.timer.api.dao.kqmk.KqglAssoLeaveBalanceMapper; import cn.timer.api.dao.kqmk.KqglAssoPbmxMapper; import cn.timer.api.dao.kqmk.KqglAssoRelationSummaryMapper; import cn.timer.api.dao.kqmk.KqglAssoTeshuMapper; import cn.timer.api.dao.kqmk.KqglMainKqzMapper; import cn.timer.api.dao.qyzx.QyzxEntInfoMMapper; import cn.timer.api.dto.kqmk.AdditionalDto; import cn.timer.api.dto.kqmk.AttLateLate; import cn.timer.api.dto.kqmk.AttSchedule; import cn.timer.api.dto.kqmk.AttSubsidiaryDto; import cn.timer.api.dto.kqmk.AttendanceCardListDto; import cn.timer.api.dto.kqmk.KqglAssoPbmxDto; import cn.timer.api.utils.DateUtil; /** * @author lal * 考勤报表实时更新 */ @RestController @Transactional public class RealTimeUpdate{ static SimpleDateFormat sdf1 = new SimpleDateFormat("yyyy-MM-dd"); static SimpleDateFormat sdf2 = new SimpleDateFormat("EEE",Locale.CHINA); static String tablename = null; @Autowired private KqglMainKqzMapper kqglmainkqzmapper; @Autowired private KqglAssoLeaveBalanceMapper kqglassoleavebalancemapper; @Autowired private KqglAssoTeshuMapper kqglassoteshumapper; @Autowired private PunchCardDetailsMapper punchcarddetailsmapper; @Autowired private AttendanceWeeklySchMapper attendanceweeklyschmapper; @Autowired private ScheduleMapper schedulemapper; @Autowired private KqglAssoRelationSummaryMapper kqglassorelationsummarymapper; @Autowired private PunchRecordMapper punchrecordmapper; @Autowired private KqglAssoDkmxMapper kqglassodkmxmapper; /** * @param orgCode 公司组织代码 * @param numcode 考勤组id或者添加员工id * @param typeid 1:考勤组 2:添加员工 * @throws ParseException */ public void AttendanceTask(int orgCode,int numcode,int typeid,List<AdditionalDto> userlist_) throws ParseException { Calendar c = Calendar.getInstance(); c.add(Calendar.MONTH, 0); c.set(Calendar.DAY_OF_MONTH,1);//设置为1号,当前日期既为本月第一天 Long startDate = DateUtil.getStartTime(0,DateUtil.getStringTime(sdf1.format(c.getTime()),"yyyy-MM-dd")).getTime(); //获取当前月最后一天 Calendar ca = Calendar.getInstance(); ca.set(Calendar.DAY_OF_MONTH, ca.getActualMaximum(Calendar.DAY_OF_MONTH)); Long endDate = DateUtil.getnowEndTime(23,DateUtil.getStringTime(sdf1.format(ca.getTime()),"yyyy-MM-dd")).getTime(); String str = new SimpleDateFormat("yyyy-MM-dd").format(new Date()).toString();// String ttstr = new SimpleDateFormat("yyyy-MM").format(new Date()).toString();// String yesterday = str;//ClockInTool.requires_extra_times(str,-1,3,1);//前一天 String[] rangeArray=ClockInTool.listToString(ClockInTool.getDays(sdf1.format(c.getTime()),yesterday)).split(";");//目前为止所有日期 String[] range=rangeArray[0].split(","); Long endDateyesterday = DateUtil.getnowEndTime(23,DateUtil.getStringTime(yesterday,"yyyy-MM-dd")).getTime(); int year = Calendar.getInstance().get(Calendar.YEAR); int month = Calendar.getInstance().get(Calendar.MONTH) + 1; int summaryid = 0;//汇总id int org_code = orgCode;//企业组织代码 List<AdditionalDto> userlist = null; if(typeid == 1) {//考勤组 userlist = kqglassoleavebalancemapper.RealTimeUpdate(org_code,numcode); }else if(typeid == 2) {//添加员工 离职员工 userlist = kqglassoleavebalancemapper.selectAdditionalByempnum(org_code,numcode); }else if(typeid == 3) { userlist = userlist_; } for(AdditionalDto user : userlist) { KqglAssoMonthPunchSummary sum = KqglAssoMonthPunchSummary.builder().build().selectOne(new QueryWrapper<KqglAssoMonthPunchSummary>().lambda().eq(KqglAssoMonthPunchSummary::getOrgCode, org_code) .eq(KqglAssoMonthPunchSummary::getBelongYear, year).eq(KqglAssoMonthPunchSummary::getBelongMonth, month).eq(KqglAssoMonthPunchSummary::getNum, user.getEmpnum())); if(sum != null) { summaryid = sum.getId(); } double traveltotal = 0,egresstotal = 0,overtimetotal = 0; //出差总时长 KqglAssoRelationSummary travel = kqglassorelationsummarymapper.SecondaryValue(user.getEmpnum(), 3, ttstr); if(travel !=null) { traveltotal = travel.getDuration(); } //外出总时长 KqglAssoRelationSummary egress = kqglassorelationsummarymapper.SecondaryValue(user.getEmpnum(), 4, ttstr); if(egress!=null) { egresstotal = egress.getDuration(); } //加班总时长 KqglAssoRelationSummary overtime = kqglassorelationsummarymapper.SecondaryValue(user.getEmpnum(), 1, ttstr); if(overtime!= null) { overtimetotal = overtime.getDuration(); } //考勤组信息 KqglMainKqz attgro = kqglmainkqzmapper.getAttendanceGroupInformationByUserid(user.getEmpnum(),org_code); //目前为止打卡记录 List<PunchCardDetails> attendance = punchcarddetailsmapper.selectAttendanceDays(user.getEmpnum(), startDate, endDateyesterday,org_code); int fdjjrnum = 0; if(attgro != null) { //特殊日期中 为法定带薪休假的 List<KqglAssoTeshu> fdjjr = KqglAssoTeshu.builder().build().selectList(new QueryWrapper<KqglAssoTeshu>().lambda().eq(KqglAssoTeshu::getKqzid, attgro.getId()).eq(KqglAssoTeshu::getLegalday, 1).eq(KqglAssoTeshu::getType, 2)); fdjjrnum = fdjjr.size(); } int dkjl = 0;//目前为止打卡次数 int sbqkcs = 0,xbqkcs = 0,dk=0; String[] sblacks = new String[31];//上班缺卡天数 String[] xblacks = new String[31];//下班缺卡天数 String[] dkjtts = new String[attendance.size()];//目前打卡日期明细 int bccs = 0; if(attendance.size() > 0) { dkjl = attendance.size() + fdjjrnum; for(PunchCardDetails pcd:attendance){ AttendanceCardListDto attdate = MethodCall(org_code, user.getEmpnum(), pcd.getData()); List<AttSchedule> ashss = attdate.getAttsch();//获取今天应打卡时间 if(EmptyUtil.isNotEmpty(attdate.getAttsch()) && ashss.get(0).getId() != 0) {//班次不为空 bccs = attdate.getAttsch().size(); } dkjtts[dk] = pcd.getData(); dk++; if(bccs == 2 || bccs == 4 || bccs == 6){ if(pcd.getSbdk1() == null){ sblacks[sbqkcs] = pcd.getData(); sbqkcs++; } if(pcd.getXbdk1() == null){ xblacks[xbqkcs] = pcd.getData(); xbqkcs++; } } if(bccs == 4 || bccs == 6){ if(pcd.getSbdk2() == null){ sblacks[sbqkcs] = pcd.getData(); sbqkcs++; } if(pcd.getXbdk2() == null){ xblacks[xbqkcs] = pcd.getData(); xbqkcs++; } } if(bccs == 6){ if(pcd.getSbdk3() == null){ sblacks[sbqkcs] = pcd.getData(); sbqkcs++; } if(pcd.getXbdk3() == null){ xblacks[xbqkcs] = pcd.getData(); xbqkcs++; } } } sblacks = ClockInTool.deleteArrayNull(sblacks); sbqkcs= sblacks.length; xblacks = ClockInTool.deleteArrayNull(xblacks); xbqkcs = xblacks.length; } //具体打卡时间入汇总表(打卡成功才会录入汇总表) // KqglAssoMonthPunchSummary isyessum = KqglAssoMonthPunchSummary.builder().build().selectOne(new QueryWrapper<KqglAssoMonthPunchSummary>().lambda() // .eq(KqglAssoMonthPunchSummary::getNum, user.getEmpnum()).eq(KqglAssoMonthPunchSummary::getOrgCode, org_code)); String[] ycqts = new String[31];//应上班的具体天数(yyyy-MM-dd) String[] xxts = new String[31];//休息的具体天数(yyyy-MM-dd) String[] fdxx = new String[10];//法定休息的具体天数(yyyy-MM-dd) List<String> rowData = new ArrayList<String>(); //休息天数,应出勤天数,实际出勤 double daysOff = 0,daysOnDuty = 0;//,actualAttDays = 0; int zjgzts = 0;//目前为止应该出勤的天数 //工作时长(分钟)、严重迟到次数、严重迟到时长(分钟)、旷工迟到次数 double workinghours = 0,seriouslatetimes = 0,seriouslatehours = 0,absenlatetimes = 0; // 迟到次数 迟到时长 早退次数 早退时长 int latenum = 0,latehours = 0,leanum = 0,leahours = 0;// 迟到次数 int answer =0;//班次ID //工作日(转调休)、休息日(转调休)、节假日(转调休) double workingturncompenleave = 0,restturncompenleave = 0,holidayturncompenleave = 0;//工作日(转调休) //工作日(转加班费)、休息日(转加班费)、节假日(转加班费) double workingtransferovertime = 0,resttransferovertime = 0,holidaytransferovertime = 0; int attgroid = 0; if(attgro != null){//该员工是否加入到考勤组 排班方式 1:固定排班;2:自由排班;3:自由工时 计算出应出勤,实际出勤,休息天数 attgroid = attgro.getId(); // KqglAssoBcsz shif = KqglAssoBcsz.builder().build(); // //休息天数,应出勤天数,实际出勤 // double daysOff = 0,daysOnDuty = 0;//,actualAttDays = 0; // int zjgzts = 0;//目前为止应该出勤的天数 if(attgro.getPbfs() == 1){ //固定排班 List<KqglAssoTeshu> bxdklist = kqglassoteshumapper.ShouldSpecialDatessetByKqzid(attgro.getId(), ttstr,1);//当前月 必须打卡日期 int bxdk = bxdklist.size(); String[] bxdkss = new String[bxdk];////特殊-必须打卡天数(工作日) int b = 0; for(KqglAssoTeshu bxd : bxdklist) { bxdkss[b] = bxd.getTsrq(); b++; } List<KqglAssoTeshu> wxdk = kqglassoteshumapper.ShouldSpecialDatessetByKqzid(attgro.getId(), ttstr,2);//当前月 无需打卡日期 String[] appmaps= new String[wxdk.size()];//特殊-无需打卡天数(休息日) int d1 = 0; for(KqglAssoTeshu spe:wxdk){ appmaps[d1] = spe.getTsrq(); d1++; } //应打卡周期时间 List<AttendanceWeeklySch> atwek = attendanceweeklyschmapper.selectAttendanceMadeByUserid(user.getEmpnum(),org_code); String[] week= new String[atwek.size()]; String[] needfig = new String[atwek.size()];//应打卡周期时间 int e = 0; for(AttendanceWeeklySch awek : atwek){ week[e] = awek.getWekmc(); needfig[e] = String.valueOf(awek.getType());//获取设置的应打卡周几 e++; } //法定節假日 List<KqmkRedletterDay> etter = KqmkRedletterDay.builder().build().selectList(new QueryWrapper<KqmkRedletterDay>().lambda().eq(KqmkRedletterDay::getHolidayStatus, 1).eq(KqmkRedletterDay::getBelongYearmonth, ttstr)); String[] holidays = new String[etter.size()];//法定节假日沦为休息日计算 int h = 0; for(KqmkRedletterDay spe:etter){ holidays[h] = spe.getHoliday(); h++; } String yemo = year + "-" + month; sdf1.setLenient(false); int y = 0,q = 0,jj = 0,xx = 0;//jj:节假日 String[] zdxx = new String[31];//法定休息的具体天数(yyyy-MM-dd) for(int i = 1; i <= ClockInTool.getDaysByYearMonth(year,month); i++){ boolean xixi = true; Date date1 = sdf1.parse(yemo + "-" + i); for(int u=0;u<week.length;u++){ if(sdf2.format(date1).equals(week[u])){ q++; y++; if(Arrays.asList(appmaps).contains(String.valueOf(sdf1.format(date1)))){ y = y-1; } if(attgro.getIsFdjjr().equals(1111)) { if(Arrays.asList(holidays).contains(String.valueOf(sdf1.format(date1)))){ y = y-1; jj ++; } } xixi = false; } } if(xixi) { zdxx[xx] = yemo + "-" + i; xx++; } } if(appmaps.length > 0) { for(String aa : ClockInTool.deleteArrayNull(zdxx)) { if(appmaps.length > 0) { appmaps = ClockInTool.doChinFilters(ClockInTool.deleteArrayNull(appmaps), aa); } } } //全月时间 - 应打卡时间 - 必须打卡时间 + 无需打卡时间 int xiuxi = ClockInTool.getDaysByYearMonth(year,month) - q - bxdk + appmaps.length+jj;//ClockInTool.getDaysByYearMonth(year,month) - q - bxdk + wxdk.size()+jj; daysOff = xiuxi; daysOnDuty = y+bxdk; // String[] range=ClockInTool.listToString(ClockInTool.getDays(sdf1.format(c.getTime()),str)).split(";");//目前为止所有日期 // int zjgzts = 0;//目前为止应该出勤的天数 //目前为止应出勤天数 int w = 0,x=0; int zj = 6; int fd = 0; for(String num : range) { boolean xxr = true; if(Arrays.binarySearch(needfig, String.valueOf(ClockInTool.dateToWeek(num))) >= 0) {//对比排班应打卡时间 String[] ycqtst = new String[ycqts.length + zj]; System.arraycopy(ycqts, 0, ycqtst, 0, ycqts.length); ycqtst[w] = num; ycqts = ycqtst; //ycqts[w] = num; w++; zjgzts++; }else { String[] xxtst = new String[xxts.length + zj]; System.arraycopy(xxts, 0, xxtst, 0, xxts.length); xxtst[x] = num; xxts = xxtst; //xxts[x] = num; x++; xxr = false; } if(Arrays.binarySearch(bxdkss, num) >= 0) {//检查是否存在 必须打卡名单中 String[] ycqtst = new String[ycqts.length + zj]; System.arraycopy(ycqts, 0, ycqtst, 0, ycqts.length); ycqtst[w] = num; ycqts = ycqtst; //ycqts[w] = num; w++; zjgzts++; xxts = ClockInTool.doChinFilters(ClockInTool.deleteArrayNull(xxts), num);//为必须上班的话从休息日期中去除 } if(Arrays.binarySearch(appmaps, num) >= 0) {//检查是否存在 无需打卡名单中 ycqts = ClockInTool.doChinFilters(ycqts, num);//为必须休息的话从上班日期中去除 // ycqts = ClockInTool.doChinFilters(ClockInTool.deleteArrayNull(ycqts), num);//为必须休息的话从上班日期中去除 //防止休息日重复减 if(xxr) { zjgzts = zjgzts - 1; } String[] xxtst = new String[xxts.length + zj]; System.arraycopy(xxts, 0, xxtst, 0, xxts.length); xxtst[x] = num; //xxts[x] = num; xxts = xxtst; x++; } //当前考勤组开启法定节假日休息开关 if(attgro.getIsFdjjr().equals(1111)) { //法定节假日 if(ClockInTool.useArrayUtils(holidays, num)) {//法定节假日沦为休息日计算 // ycqts = ClockInTool.doChinFilters(ClockInTool.deleteArrayNull(ycqts), num);//为必须休息的话从上班日期中去除 if(ClockInTool.doChinFilters(ClockInTool.deleteArrayNull(ycqts), num) != null) { ycqts = ClockInTool.doChinFilters(ClockInTool.deleteArrayNull(ycqts), num);//为必须休息的话从上班日期中去除 } fdxx[fd] = num; fd ++; zjgzts = zjgzts - 1; String[] xxtst = new String[xxts.length + zj]; System.arraycopy(xxts, 0, xxtst, 0, xxts.length); xxtst[x] = num; xxts = xxtst; x++; } } } }else if(attgro.getPbfs() == 2){ //自由排班 DateFormat df = new SimpleDateFormat("EEE MMM dd HH:mm:ss zzz yyyy", Locale.US); List<Schedule> ycqs = schedulemapper.getAttendanceShouldList(user.getEmpnum(),startDate,endDate); int xiuxi = 0,shangban = 0,z=0; String[] ziyoupb = new String[ycqs.size()]; for(Schedule sc : ycqs){ String data = new SimpleDateFormat("yyyy-MM-dd").format(df.parse(String.valueOf(sc.getData())));// 获得格式化后的日期字符串 ziyoupb[z] = data; z++; if(sc.getBcid().equals(0)){ xiuxi++; }else{ shangban++; } } daysOff = xiuxi; daysOnDuty = shangban; //目前为止应出勤天数 int y = 0,x=0; for(String num : range) { if(Arrays.binarySearch(ziyoupb, num) >= 0) { KqglAssoPbmx pbx = KqglAssoPbmx.builder().build().selectOne(new QueryWrapper<KqglAssoPbmx>().lambda().eq(KqglAssoPbmx::getUserid, user.getEmpnum()).eq(KqglAssoPbmx::getData, num).eq(KqglAssoPbmx::getKqzid, attgro.getId())); if(pbx!=null && pbx.getBcid()!=0) { ycqts[y] = num; y++; zjgzts++; }else { xxts[x] = num; x++; } } } }else{ List<AttendanceWeeklySch> atwek = attendanceweeklyschmapper.selectAttendanceMadeByZhou(user.getEmpnum(),org_code); String[] week= new String[atwek.size()]; int e = 0; String[] ziyoupb = new String[atwek.size()]; for(AttendanceWeeklySch awek : atwek){ week[e] = awek.getWekmc(); ziyoupb[e] = String.valueOf(awek.getType()); e++; } String yemo = year + "-" + month; sdf1.setLenient(false); int y = 0; for(int i = 1; i <= ClockInTool.getDaysByYearMonth(year,month); i++){ Date date1 = sdf1.parse(yemo + "-" + i); for(int u=0;u<week.length;u++){ if(sdf2.format(date1).equals(week[u])){ y++; } } } int xiuxi = ClockInTool.getDaysByYearMonth(year,month) - y; daysOff = xiuxi; daysOnDuty = y; //目前为止应出勤天数 int g = 0,x=0; for(String num : range) { if(Arrays.binarySearch(ziyoupb, String.valueOf(ClockInTool.dateToWeek(num))) >= 0) {//对比排班应打卡时间 ycqts[g] = num; g++; zjgzts++; }else { xxts[x] = num; x++; } } } List<PunchRecord> initial = punchrecordmapper.getMaintenancePunchCardList(startDate,endDateyesterday,user.getEmpnum(),orgCode); // // 迟到次数 迟到时长 早退次数 早退时长 // int latenum = 0,latehours = 0,leanum = 0,leahours = 0;// 迟到次数 String[] cdts = new String[31];//迟到的具体天数 String[] ztts = new String[31];//早退的具体天数 if(initial.size() > 0){ for(PunchRecord prd : initial){ if(prd.getType() == 1 && prd.getResults() > 0){ cdts[latenum] = new SimpleDateFormat("yyyy-MM-dd").format(prd.getDktime()); latenum++; latehours += prd.getResults(); } if(prd.getType() == 2 && prd.getResults() > 0){ ztts[leanum] = new SimpleDateFormat("yyyy-MM-dd").format(prd.getDktime()); leanum++; leahours += prd.getResults(); } } } AttSubsidiaryDto subs = kqglassodkmxmapper.subsidiary(user.getEmpnum(), ttstr,org_code); // //工作时长(分钟)、严重迟到次数、严重迟到时长(分钟)、旷工迟到次数 // double workinghours = 0,seriouslatetimes = 0,seriouslatehours = 0,absenlatetimes = 0; if(subs != null) { workinghours = subs.getGzsctotalgzsc(); seriouslatetimes = subs.getYzcdcstotal(); seriouslatehours = subs.getYzcdsctotal(); absenlatetimes = subs.getKgcdfzstotal(); } //具体请假天数 List<KqglAssoRelationSummary> leavetotal = kqglassorelationsummarymapper.SpecificLeave(user.getEmpnum(), 2, ttstr,org_code); String[] leaves = new String[leavetotal.size()]; int l = 0; if(leavetotal.size()>0) { for(KqglAssoRelationSummary lea : leavetotal){ leaves[l] = lea.getAppTime(); l++; } } //具体加班天数 List<KqglAssoRelationSummary> overtitotal = kqglassorelationsummarymapper.SpecificLeave(user.getEmpnum(), 1, ttstr,org_code); String[] overtimes = new String[overtitotal.size()]; int o = 0; if(overtitotal.size() > 0) { for(KqglAssoRelationSummary over : overtitotal) { overtimes[o] = over.getAppTime(); o++; } } //具体出差天数 List<KqglAssoRelationSummary> trtotal = kqglassorelationsummarymapper.SpecificLeave(user.getEmpnum(), 3, ttstr,org_code); String[] travels = new String[trtotal.size()]; int cx = 0; if(trtotal.size()>0) { for(KqglAssoRelationSummary trt : trtotal) { travels[cx] = trt.getAppTime(); cx++; } } //具体外出天数 List<KqglAssoRelationSummary> goouttotal = kqglassorelationsummarymapper.SpecificLeave(user.getEmpnum(), 4, ttstr,org_code); String[] goouts = new String[goouttotal.size()]; int wc = 0; if(goouttotal.size()>0) { for(KqglAssoRelationSummary go:goouttotal) { goouts[wc] = go.getAppTime(); wc++; } } //具体补卡天数 List<KqglAssoRelationSummary> cardtotal = kqglassorelationsummarymapper.SpecificLeave(user.getEmpnum(), 5, ttstr,org_code); String[] cards = new String[cardtotal.size()]; int bk = 0; if(cardtotal.size()>0) { for(KqglAssoRelationSummary car : cardtotal) { cards[bk] = car.getAppTime(); bk++; } } //排查请假是否在最后一次打卡范围内 查询当月的请假所有日期 List<KqglAssoRelationSummary> leainv = kqglassorelationsummarymapper.LeaveInvestigation(user.getEmpnum(), 2, ttstr,org_code); // KqglAssoBcsz shif = KqglAssoBcsz.builder().build(); String beginTime = sdf1.format(new Date()); // List<String> rowData = new ArrayList<String>(); //遍历目前为止所有日期 结合该用户发起的审批进行结合 //1:加班 2:请假 3:出差 4:外出 5:补卡 int u = 0; int p = 1; for(String num : range) { try { String sjs = "",qinjia = "",chuaca = "",waichu = "",buka = "",jiaban = ""; if(ClockInTool.useArrayUtils(ClockInTool.deleteArrayNull(xxts), num) && ClockInTool.useArrayUtils(ClockInTool.deleteArrayNull(dkjtts),num)) { rowData.add("休息并打卡"); }else if(ClockInTool.useArrayUtils(ClockInTool.deleteArrayNull(xxts), num) && !ClockInTool.useArrayUtils(ClockInTool.deleteArrayNull(fdxx), num)){ rowData.add("休息"); }else if(ClockInTool.useArrayUtils(ClockInTool.deleteArrayNull(fdxx), num)){ rowData.add("法定节假日休息"); }else { if(ClockInTool.useArrayUtils(ClockInTool.deleteArrayNull(ycqts), num) && !ClockInTool.useArrayUtils(ClockInTool.deleteArrayNull(dkjtts), num) && !ClockInTool.useArrayUtils(ClockInTool.deleteArrayNull(leaves), num) && !ClockInTool.useArrayUtils(ClockInTool.deleteArrayNull(travels), num) && !ClockInTool.useArrayUtils(ClockInTool.deleteArrayNull(goouts), num) && !ClockInTool.useArrayUtils(ClockInTool.deleteArrayNull(cards), num)) { rowData.add("旷工"); }else if(!ClockInTool.useArrayUtils(ClockInTool.deleteArrayNull(ycqts), num) && !ClockInTool.useArrayUtils(ClockInTool.deleteArrayNull(xxts), num)) {//日期不在上班也不在休息里面即为未排班 rowData.add("未排班"); }else if(sdf1.parse(beginTime).getTime() < sdf1.parse(num).getTime()) { rowData.add("未到班期"); }else { if(ClockInTool.useArrayUtils(ClockInTool.deleteArrayNull(sblacks), num)) { rowData.add("上班缺卡"); }else if(ClockInTool.useArrayUtils(ClockInTool.deleteArrayNull(sblacks), num) && ClockInTool.useArrayUtils(ClockInTool.deleteArrayNull(ztts), num)) { rowData.add("上班缺卡,下班早退"); }else if(ClockInTool.useArrayUtils(ClockInTool.deleteArrayNull(cdts), num)) { // rowData.add("上班迟到"); KqglAssoDkmx dkm = KqglAssoDkmx.builder().build().selectOne(new QueryWrapper<KqglAssoDkmx>().lambda().eq(KqglAssoDkmx::getUserid, user.getEmpnum()) .eq(KqglAssoDkmx::getQyid, org_code).eq(KqglAssoDkmx::getData, num)); if(dkm.getYdkcs() == 2 || dkm.getYdkcs() == 4 || dkm.getYdkcs() == 6) { if(dkm.getSbdk1jg() > 0) { rowData.add("上班1迟到,打卡时间:"+ClockInTool.stampToDate3(String.valueOf(dkm.getSbdk1()))+",迟到"+dkm.getSbdk1jg()+"分钟"); } } if(dkm.getYdkcs() == 4 || dkm.getYdkcs() == 6) { if(dkm.getSbdk2jg() > 0) { rowData.add("上班2迟到,打卡时间:"+ClockInTool.stampToDate3(String.valueOf(dkm.getSbdk2()))+",迟到"+dkm.getSbdk2jg()+"分钟"); } } if(dkm.getYdkcs() == 6) { if(dkm.getSbdk3jg() > 0) { rowData.add("上班3迟到,打卡时间:"+ClockInTool.stampToDate3(String.valueOf(dkm.getSbdk3()))+",迟到"+dkm.getSbdk3jg()+"分钟"); } } }else if(ClockInTool.useArrayUtils(ClockInTool.deleteArrayNull(cdts), num) && ClockInTool.useArrayUtils(ClockInTool.deleteArrayNull(xblacks), num)) { rowData.add("上班迟到,下班缺卡"); }else if(ClockInTool.useArrayUtils(ClockInTool.deleteArrayNull(cdts), num) && ClockInTool.useArrayUtils(ClockInTool.deleteArrayNull(ztts), num)) { rowData.add("上班迟到,下班早退"); // }else if(Arrays.binarySearch(ClockInTool.deleteArrayNull(xblacks), num) >= 0) { }else if(ClockInTool.useArrayUtils(ClockInTool.deleteArrayNull(xblacks),num)) { rowData.add("下班缺卡"); }else if(ClockInTool.useArrayUtils(ClockInTool.deleteArrayNull(ztts), num)) { // rowData.add("下班早退"); KqglAssoDkmx dkm = KqglAssoDkmx.builder().build().selectOne(new QueryWrapper<KqglAssoDkmx>().lambda().eq(KqglAssoDkmx::getUserid, user.getEmpnum()) .eq(KqglAssoDkmx::getQyid, org_code).eq(KqglAssoDkmx::getData, num)); if(dkm.getYdkcs() == 2 || dkm.getYdkcs() == 4 || dkm.getYdkcs() == 6) { if(dkm.getXbdk1jg() > 0) { rowData.add("下班1早退,打卡时间:"+ClockInTool.stampToDate3(String.valueOf(dkm.getXbdk1()))+",早退"+dkm.getXbdk1jg()+"分钟"); } } if(dkm.getYdkcs() == 4 || dkm.getYdkcs() == 6) { if(dkm.getXbdk2jg() > 0) { rowData.add("下班2早退,打卡时间:"+ClockInTool.stampToDate3(String.valueOf(dkm.getXbdk2()))+",早退"+dkm.getXbdk2jg()+"分钟"); } } if(dkm.getYdkcs() == 6) { if(dkm.getXbdk3jg() > 0) { rowData.add("下班3早退,打卡时间:"+ClockInTool.stampToDate3(String.valueOf(dkm.getXbdk3()))+",早退"+dkm.getXbdk3jg()+"分钟"); } } }else { rowData.add("正常"); } } } /******/ if(ClockInTool.contains(ClockInTool.deleteArrayNull(leaves),num)) { KqglAssoRelationSummary lea = KqglAssoRelationSummary.builder().build().selectOne(new QueryWrapper<KqglAssoRelationSummary>().lambda().eq(KqglAssoRelationSummary::getUserId, user.getEmpnum()).eq(KqglAssoRelationSummary::getAppTime, num).eq(KqglAssoRelationSummary::getApprovalType, 2).eq(KqglAssoRelationSummary::getOrgCode, org_code)); String leavetype = "未知";//请假类型 String company = "未知";//请假单位 if(lea != null) { KqglAssoLeaveRules rul = KqglAssoLeaveRules.builder().build().selectOne(new QueryWrapper<KqglAssoLeaveRules>().lambda().eq(KqglAssoLeaveRules::getId, lea.getLeaveTypeId())); if(rul != null) { leavetype = rul.getName(); //1:按天请假;2:按半天;3:按小时 if(rul.getCompany() == 1) { company = "天"; } else if(rul.getCompany() == 2) { company = "半天"; } else { company = "小时"; } } } qinjia = "#"+(lea.getStartTime()).substring(5, 16) +"到"+ (lea.getEndTime()).substring(5, 16)+"请"+leavetype+lea.getDuration()+company; } if(ClockInTool.contains(ClockInTool.deleteArrayNull(travels),num)) { KqglAssoRelationSummary lea = KqglAssoRelationSummary.builder().build().selectOne(new QueryWrapper<KqglAssoRelationSummary>().lambda().eq(KqglAssoRelationSummary::getUserId, user.getEmpnum()).eq(KqglAssoRelationSummary::getAppTime, num).eq(KqglAssoRelationSummary::getApprovalType, 3).eq(KqglAssoRelationSummary::getOrgCode, org_code)); chuaca = "#"+(lea.getStartTime()).substring(5, 16) +"到"+ (lea.getEndTime()).substring(5, 16)+"出差"+lea.getDuration()+"天"; } if(ClockInTool.contains(ClockInTool.deleteArrayNull(goouts),num)) { KqglAssoRelationSummary lea = KqglAssoRelationSummary.builder().build().selectOne(new QueryWrapper<KqglAssoRelationSummary>().lambda().eq(KqglAssoRelationSummary::getUserId, user.getEmpnum()).eq(KqglAssoRelationSummary::getAppTime, num).eq(KqglAssoRelationSummary::getApprovalType, 4).eq(KqglAssoRelationSummary::getOrgCode, org_code)); waichu = "#"+(lea.getStartTime()).substring(5, 16) +"到"+ (lea.getEndTime()).substring(5, 16)+"外出"+lea.getDuration()+"天"; } if(ClockInTool.contains(ClockInTool.deleteArrayNull(cards),num)) { KqglAssoRelationSummary lea = KqglAssoRelationSummary.builder().build().selectOne(new QueryWrapper<KqglAssoRelationSummary>().lambda().eq(KqglAssoRelationSummary::getUserId, user.getEmpnum()).eq(KqglAssoRelationSummary::getAppTime, num).eq(KqglAssoRelationSummary::getApprovalType, 5).eq(KqglAssoRelationSummary::getOrgCode, org_code)); buka = "#"+"已补卡:"+(lea.getStartTime()).substring(5, 16); } if(ClockInTool.contains(ClockInTool.deleteArrayNull(overtimes),num)) { String company = "未知",method = "无";//加班单位、加班补偿方式 List<KqglAssoRelationSummary> leas = KqglAssoRelationSummary.builder().build().selectList(new QueryWrapper<KqglAssoRelationSummary>().lambda().eq(KqglAssoRelationSummary::getUserId, user.getEmpnum()).eq(KqglAssoRelationSummary::getAppTime, num).eq(KqglAssoRelationSummary::getApprovalType, 1).eq(KqglAssoRelationSummary::getOrgCode, org_code)); for(KqglAssoRelationSummary lea : leas) { //最小加班单位 1:按分钟加班、2:按半小时加班、3:按小时加班、4:按半天加班、5:按天加班 KqglAssoOvertimeBasics basics = KqglAssoOvertimeBasics.builder().build().selectOne(new QueryWrapper<KqglAssoOvertimeBasics>().lambda().eq(KqglAssoOvertimeBasics::getOrgCode, org_code)); if(basics.getMinimumUnit() == 1) { company = "分钟"; } else if(basics.getMinimumUnit() == 2) { company = "半小时";} else if(basics.getMinimumUnit() == 3) { company = "小时";} else if(basics.getMinimumUnit() == 4) { company = "半天";} else if(basics.getMinimumUnit() == 5) { company = "天";} //1:转调休;2:转加班费;3:转调休或加班费 if(lea.getCompensateId() == 1) { method="转调休"; } else if(lea.getCompensateId() == 2) { method="转加班费"; } else {method="转调休或加班费";} jiaban = "#"+(lea.getStartTime()).substring(5, 16) +"到"+ (lea.getEndTime()).substring(5, 16)+"加班"+lea.getDuration()+company+"["+method+"]"; //防止多运算 if(lea.getOrdernum() == lea.getTotals()) { //加班补偿方式 1:转调休;2:转加班费;3:转调休或加班费 //工作日 if(ClockInTool.contains(ClockInTool.deleteArrayNull(ycqts),num)) { if(lea.getOvertimeTypeId() == 1) { if(lea.getCompensateId() == 1 || lea.getCompensateId() == 3) { workingturncompenleave = workingturncompenleave + lea.getDuration(); }else if(lea.getCompensateId() == 2 || lea.getCompensateId() == 4) { workingtransferovertime = workingtransferovertime + + lea.getDuration(); } } } //休息日 if(ClockInTool.contains(ClockInTool.deleteArrayNull(xxts),num)) { if(lea.getOvertimeTypeId() == 2) { if(lea.getCompensateId() == 1 || lea.getCompensateId() == 3) { restturncompenleave = restturncompenleave + lea.getDuration(); }else if(lea.getCompensateId() == 2 || lea.getCompensateId() == 4) { resttransferovertime = resttransferovertime + lea.getDuration(); } } } if(!ClockInTool.contains(ClockInTool.deleteArrayNull(ycqts),num) && !ClockInTool.contains(ClockInTool.deleteArrayNull(xxts),num)) { if(lea.getOvertimeTypeId() == 3) { if(lea.getCompensateId() == 1 || lea.getCompensateId() == 3) { holidayturncompenleave = holidayturncompenleave + lea.getDuration(); }else if(lea.getCompensateId() == 2 || lea.getCompensateId() == 4) { holidaytransferovertime = holidaytransferovertime + lea.getDuration(); } } } } } } if(rowData.size() == p) { sjs = ""; if(("").equals(qinjia) && ("").equals(chuaca) && ("").equals(waichu) && ("").equals(buka) && ("").equals(jiaban)) { sjs = rowData.get(u); }else { sjs = rowData.get(u)+";"; } } rowData.remove(u); rowData.add(u,sjs + qinjia+chuaca+waichu+buka+jiaban); /****/ //////// KqglAssoBcsz shif = KqglAssoBcsz.builder().build(); if(attgro.getPbfs() == 1){ int several = Integer.valueOf(ClockInTool.dateToWeek(num));// KqglAssoTeshu tesu = KqglAssoTeshu.builder().build().selectOne(new QueryWrapper<KqglAssoTeshu>().lambda().eq(KqglAssoTeshu::getKqzid, attgro.getId()).eq(KqglAssoTeshu::getTsrq, num)); if(tesu == null) { //获取该员工最新班次 KqglAssoZhoupaiban gudingpb = KqglAssoZhoupaiban.builder().build().selectOne(new QueryWrapper<KqglAssoZhoupaiban>().lambda().eq(KqglAssoZhoupaiban::getKqzid, attgro.getId()) .eq(KqglAssoZhoupaiban::getType, several)); if(gudingpb!=null) { shif = shif.selectOne(new QueryWrapper<KqglAssoBcsz>().lambda().eq(KqglAssoBcsz::getId, gudingpb.getBcid())); } }else { if(tesu.getBcid() > 0) { shif = shif.selectOne(new QueryWrapper<KqglAssoBcsz>().lambda().eq(KqglAssoBcsz::getId, tesu.getBcid())); } } //获取该员工最新班次 KqglAssoZhoupaiban gudingpb = KqglAssoZhoupaiban.builder().build().selectOne(new QueryWrapper<KqglAssoZhoupaiban>().lambda().eq(KqglAssoZhoupaiban::getKqzid, attgro.getId()) .eq(KqglAssoZhoupaiban::getType, several)); if(gudingpb != null) { shif = KqglAssoBcsz.builder().build(); shif = shif.selectOne(new QueryWrapper<KqglAssoBcsz>().lambda().eq(KqglAssoBcsz::getId, gudingpb.getBcid())); } }else if(attgro.getPbfs() == 2){ KqglAssoPbmx pbmxx = KqglAssoPbmx.builder().build().selectOne(new QueryWrapper<KqglAssoPbmx>().lambda().eq(KqglAssoPbmx::getUserid, user.getEmpnum()).eq(KqglAssoPbmx::getData, num).eq(KqglAssoPbmx::getKqzid, attgro.getId())); if(pbmxx != null && pbmxx.getBcid() != 0) { shif = shif.selectOne(new QueryWrapper<KqglAssoBcsz>().lambda().eq(KqglAssoBcsz::getId, pbmxx.getBcid())); } } if(shif != null && shif.getSxbcs() != null) { System.out.println(shif.getSxbcs()); answer = shif.getSxbcs();//1=2次 2=4次 3=6次 //未打最后一次卡的时候 判断最后一次打卡时间是否在请假范围内 相对应减少下班缺卡次数 //最后一次应打卡时间 String latimeclock = ""; if(answer == 1) { latimeclock = num +" "+ shif.getXbdk1();//ClockInTool.dealDateFormat(shif.getXbdk1(),3); }else if(answer == 2) { latimeclock = num +" "+ shif.getXbdk2();//ClockInTool.dealDateFormat(shif.getXbdk2(),3); }else { latimeclock = num +" "+ shif.getXbdk3();//ClockInTool.dealDateFormat(shif.getXbdk3(),3); } for(KqglAssoRelationSummary learel:leainv) { boolean adopt = ClockInTool.hourMinuteBetween(latimeclock, learel.getStartTime().substring(0, 16), learel.getEndTime().substring(0, 16),"yyyy-MM-dd HH:mm"); if(adopt) { xbqkcs = xbqkcs-1; } } } u++; p++; } catch (Exception e) { System.err.println("出错"); } } }else { for (String num2 : range) { if (Arrays.binarySearch(dkjtts, num2) >= 0) { rowData.add("未排班并打卡"); }else{ rowData.add("未排班"); } } System.err.print("该员工未加入考勤组"); } String[] range1=ClockInTool.listToString(rowData).split(";"); String[] noticesArray=range1[0].split(","); noticesArray = ClockInTool.arrycopy(noticesArray); for(int ct=noticesArray.length-1;ct<31;ct++) { noticesArray[ct] = ""; if(ct<30) { noticesArray = ClockInTool.arrycopy(noticesArray); } } String department = "",position=""; if(user.getDepartment() != null) { department = user.getDepartment(); } if(user.getPosition() != null) { position = user.getPosition(); } KqglAssoMonthPunchSummary summary = KqglAssoMonthPunchSummary.builder().name(user.getEmpname()).num(user.getEmpnum()).dept(department) .post(position).attGroup(attgroid).shift(answer).build(); summary.setDaysOnDuty(daysOnDuty);//应出勤天数 summary.setActualAttDays(Double.valueOf(dkjl));//实际出勤天数 summary.setDaysOff(daysOff);//休息天数 summary.setWorkingHours(workinghours); summary.setLateTimes(Double.valueOf(latenum));//迟到次数 summary.setLateHours(Double.valueOf(latehours));//迟到时长(分钟) summary.setSeriousLateTimes(seriouslatetimes);//严重迟到次数 summary.setSeriousLateHours(seriouslatehours);//严重迟到时长(分钟) summary.setAbsenLateTimes(absenlatetimes);//旷工迟到次数 summary.setEarlyLeaveTimes(Double.valueOf(leanum));//早退次数 summary.setLengthEarlyLeave(Double.valueOf(leahours));//早退时长(分钟) summary.setNumberWorkCardShortage(Double.valueOf(sbqkcs));//上班缺卡次数 summary.setNumberDutyCardShortage(Double.valueOf(xbqkcs < 0 ? 0 : xbqkcs));//下班缺卡次数 summary.setLengthBusinessTrip(traveltotal);//出差时长 summary.setTimeOut(egresstotal);//外出时长 summary.setTotalOvertimeHours(overtimetotal);//加班总时长 summary.setBelongYear(ca.get(Calendar.YEAR)); summary.setBelongMonth(ca.get(Calendar.MONTH)+1); summary.setOrgCode(org_code); summary.setLastModified(new Date().getTime()); int absenteeismdays=0; if(zjgzts-dkjl > 0) { absenteeismdays = zjgzts-dkjl; } summary.setAbsenteeismDays(Double.valueOf(absenteeismdays));//旷工天数 summary.setWorkingTurnCompenLeave(workingturncompenleave);//工作日(转调休) summary.setRestTurnCompenLeave(restturncompenleave);//休息日(转调休) summary.setHolidayTurnCompenLeave(holidayturncompenleave);//节假日(转调休) summary.setWorkingTransferOvertime(workingtransferovertime);//工作日(转加班费) summary.setRestTransferOvertime(resttransferovertime);//休息日(转加班费) summary.setHolidayTransferOvertime(holidaytransferovertime);//节假日(转加班费) summary.setDay1(noticesArray[0]); summary.setDay2(noticesArray[1]); summary.setDay3(noticesArray[2]); summary.setDay4(noticesArray[3]); summary.setDay5(noticesArray[4]); summary.setDay6(noticesArray[5]); summary.setDay7(noticesArray[6]); summary.setDay8(noticesArray[7]); summary.setDay9(noticesArray[8]); summary.setDay10(noticesArray[9]); summary.setDay11(noticesArray[10]); summary.setDay12(noticesArray[11]); summary.setDay13(noticesArray[12]); summary.setDay14(noticesArray[13]); summary.setDay15(noticesArray[14]); summary.setDay16(noticesArray[15]); summary.setDay17(noticesArray[16]); summary.setDay18(noticesArray[17]); summary.setDay19(noticesArray[18]); summary.setDay20(noticesArray[19]); summary.setDay21(noticesArray[20]); summary.setDay22(noticesArray[21]); summary.setDay23(noticesArray[22]); summary.setDay24(noticesArray[23]); summary.setDay25(noticesArray[24]); summary.setDay26(noticesArray[25]); summary.setDay27(noticesArray[26]); summary.setDay28(noticesArray[27]); summary.setDay29(noticesArray[28]); summary.setDay30(noticesArray[29]); summary.setDay31(noticesArray[30]); // if(summaryid > 0) { summary.setId(summaryid); // } summary.insertOrUpdate(); } } @Autowired private KqglAssoPbmxMapper kqglassopbmxmapper; /** * @param qyid * @param userid * @param date * @return * 获取当天打卡班次数据 */ public AttendanceCardListDto MethodCall(int qyid,int userid,String date) throws ParseException { AttendanceCardListDto attcar = new AttendanceCardListDto(); String str = null; if(!("").equals(date)){ str = date; }else{ Date d = new Date(); SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd"); str = sdf.format(d); } KqglMainKqz attgro = kqglmainkqzmapper.getAttendanceGroupInformationByUserid(userid,qyid); //考勤组信息 //pbfs:排班方式 1:固定排班;2:自由排班;3:自由工时 if(attgro != null){//判断当前用户是否加入到考勤组 //排班制 KqglAssoPbmxDto jrpb = kqglassopbmxmapper.getScheduleSpecificAttendance(attgro.getId(),userid,str); //固定排班 int week = Integer.valueOf(ClockInTool.dateToWeek(str));//4 KqglAssoZhoupaiban atwek = KqglAssoZhoupaiban.builder().build().selectOne(new QueryWrapper<KqglAssoZhoupaiban>().lambda().eq(KqglAssoZhoupaiban::getKqzid, attgro.getId()) .eq(KqglAssoZhoupaiban::getType, week).ne(KqglAssoZhoupaiban::getBcid, 0)); if(attgro.getPbfs() == 1){//固定排班 if(atwek != null){//有固定周排班 KqglAssoTeshu rest = KqglAssoTeshu.builder().build().selectOne(new QueryWrapper<KqglAssoTeshu>().lambda().eq(KqglAssoTeshu::getKqzid, attgro.getId()) .eq(KqglAssoTeshu::getTsrq, str).eq(KqglAssoTeshu::getBcid, 0)); if(rest != null){//今天休息 Sort返回0【特殊日期--休息】 List<AttSchedule> atts = new ArrayList<AttSchedule>(); AttSchedule as = AttSchedule.builder().id(0).sort(0).time(0l).starttime(0l).endtime(0l).build(); atts.add(as); attcar.setAttsch(atts); }else{//今天上班 KqglAssoBcsz bcz = KqglAssoBcsz.builder().build().selectOne(new QueryWrapper<KqglAssoBcsz>().lambda().eq(KqglAssoBcsz::getId, atwek.getBcid())); if(bcz != null){ Getshiftinformationbatch(bcz,attcar,str); } } }else{//必须打卡 KqglAssoTeshu tsri = KqglAssoTeshu.builder().build().selectOne(new QueryWrapper<KqglAssoTeshu>().lambda().eq(KqglAssoTeshu::getKqzid, attgro.getId()) .eq(KqglAssoTeshu::getTsrq, str).ne(KqglAssoTeshu::getBcid, 0)); if(tsri != null){ KqglAssoBcsz tsrq = KqglAssoBcsz.builder().build().selectOne(new QueryWrapper<KqglAssoBcsz>().lambda().eq(KqglAssoBcsz::getId, tsri.getBcid())); if(tsrq!=null){ Getshiftinformationbatch(tsrq,attcar,str); } }else{//休息 List<AttSchedule> atts = new ArrayList<AttSchedule>(); AttSchedule as = AttSchedule.builder().id(0).sort(0).time(0l).starttime(0l).endtime(0l).build(); atts.add(as); attcar.setAttsch(atts); } } }else if(attgro.getPbfs() == 2){//自由排班 //未排班时,员工可选择班次打卡 // if(attgro.getIsXzbcdk() == 1){ // attcar.setOptscheduling(true); // }else{ // attcar.setOptscheduling(false); // } if(jrpb != null){ if(jrpb.getBcid() != 0){//有班次时("Bcid"不为0时) KqglAssoBcsz tsrq = KqglAssoBcsz.builder().build().selectOne(new QueryWrapper<KqglAssoBcsz>().lambda().eq(KqglAssoBcsz::getId, jrpb.getBcid())); /**已简化**/ Getshiftinformationbatch(tsrq,attcar,str); }else{//当天排班为休息 List<AttSchedule> atts1 = new ArrayList<AttSchedule>(); AttSchedule as = AttSchedule.builder().id(0).sort(0).time(0l).starttime(0l).endtime(0l).build(); atts1.add(as); attcar.setAttsch(atts1); } } }else{//自由工时 KqglAssoZhoupaiban wekz = KqglAssoZhoupaiban.builder().build().selectOne(new QueryWrapper<KqglAssoZhoupaiban>().lambda().eq(KqglAssoZhoupaiban::getKqzid, attgro.getId()) .eq(KqglAssoZhoupaiban::getBcid, 0).eq(KqglAssoZhoupaiban::getType, week)); if(wekz != null){// String dada = str+" "+attgro.getKqkssjTime()+":00"; attcar.setStapclotime(Long.valueOf(ClockInTool.dateToStamp(dada))); } if(!("").equals(attgro.getJbzdsc())){ attcar.setCanpunchworkdate(Double.valueOf(attgro.getJbzdsc()));//上班打卡后多久大下班卡 } } if(jrpb != null || atwek != null){ KqglAssoBcsz shif = KqglAssoBcsz.builder().build(); if(attgro.getPbfs() == 1){ shif = shif.selectOne(new QueryWrapper<KqglAssoBcsz>().lambda().eq(KqglAssoBcsz::getId, atwek.getBcid())); }else if(attgro.getPbfs() == 2){ shif = shif.selectOne(new QueryWrapper<KqglAssoBcsz>().lambda().eq(KqglAssoBcsz::getId, jrpb.getBcid())); } if(shif != null){ if(shif.getIsXbdk() == 1){ attcar.setNoclockout(true);// 下班不用打卡 }else{ attcar.setNoclockout(false);// 下班不用打卡 } attcar.setAllowlate(shif.getYxcdfzs());// 允许迟到分钟数 attcar.setSeriouslate(shif.getYzcdfzs());// 严重迟到分钟数 attcar.setAbsenteeismlate(shif.getKgcdfzs());// 旷工迟到分钟数 if(shif.getIsWzwd() == 1){ attcar.setIslatelate(true);// 晚走晚到 List<AttLateLate> atwzwd = new ArrayList<AttLateLate>(); int p = 0; if(!("").equals(shif.getXbwz1()) && !("").equals(shif.getSbwd1())){p = 2;} if(!("").equals(shif.getXbwz1()) && !("").equals(shif.getSbwd1()) && !("").equals(shif.getXbwz2()) && !("").equals(shif.getSbwd2())){p = 4;} if(!("").equals(shif.getXbwz1()) && !("").equals(shif.getSbwd1()) && !("").equals(shif.getXbwz2()) && !("").equals(shif.getSbwd2()) && !("").equals(shif.getXbwz3()) && !("").equals(shif.getSbwd3())){p = 6;} AttLateLate ala = AttLateLate.builder().build(); ala.setLatewalk(shif.getXbwz1()); ala.setArrivelate(shif.getSbwd1()); atwzwd.add(ala); if(p == 4 || p == 6){ AttLateLate alat = AttLateLate.builder().build(); alat.setLatewalk(shif.getXbwz2()); alat.setArrivelate(shif.getSbwd2()); atwzwd.add(alat); } if(p == 6){ AttLateLate alas = AttLateLate.builder().build(); alas.setLatewalk(shif.getXbwz3()); alas.setArrivelate(shif.getSbwd3()); atwzwd.add(alas); } attcar.setAttlat(atwzwd); }else{ attcar.setIslatelate(false);// 晚走晚到 } } } attcar.setAttgrouptype(attgro.getPbfs());//1:固定排班;2:自由排班;3:自由工时 }else{ attcar.setAttgrouptype(0);//1:固定排班;2:自由排班;3:自由工时 } return attcar; } /** * @param shiftm * @param attcar * @param str */ public void Getshiftinformationbatch(KqglAssoBcsz shiftm,AttendanceCardListDto attcar,String str){ int isXbdk1Cr = shiftm.getIsXbdk1Cr();//下班1是否次日(0:否;1:是) int isSbdk2Cr = shiftm.getIsSbdk2Cr();//上班2是否次日(0:否;1:是) int isXbdk2Cr = shiftm.getIsXbdk2Cr();//下班2是否次日(0:否;1:是) int isSbdk3Cr = shiftm.getIsSbdk3Cr();//上班3是否次日(0:否;1:是) int isXbdk3Cr = shiftm.getIsXbdk3Cr();//下班3是否次日(0:否;1:是) //次日专用 String next_day = ClockInTool.requires_extra_times(str,1,2,1); List<AttSchedule> atts = new ArrayList<AttSchedule>(); if(shiftm.getSxbcs() == 1 || shiftm.getSxbcs() == 2 || shiftm.getSxbcs() == 3){//1次上下班 for(int o=0;o<2;o++){ if(o==0){ AttSchedule as = AttSchedule.builder().id(shiftm.getId()).sort(1).time(Long.valueOf(ClockInTool.dateToStamp((str+" "+shiftm.getSbdk1()+":00").replaceAll("\r|\n", "")))) .starttime(("").equals(shiftm.getSbqjks1()) || shiftm.getSbqjks1() == null ? 0 : Long.valueOf(ClockInTool.dateToStamp((str+" "+shiftm.getSbqjks1()+":00").replaceAll("\r|\n", "")))) .endtime(("").equals(shiftm.getSbqjjs1()) || shiftm.getSbqjjs1() == null ? 0 : Long.valueOf(ClockInTool.dateToStamp((str+" "+shiftm.getSbqjjs1()+":00").replaceAll("\r|\n", "")))) .nextday(0).build(); atts.add(as); }else{ //次日 if(isXbdk1Cr > 0) { AttSchedule as = AttSchedule.builder().id(shiftm.getId()).sort(2).time(Long.valueOf(ClockInTool.dateToStamp((next_day+" "+shiftm.getXbdk1()+":00").replaceAll("\r|\n", "")))) .starttime(("").equals(shiftm.getXbqjks1()) || shiftm.getXbqjks1() == null ? 0 : Long.valueOf(ClockInTool.dateToStamp((next_day+" "+shiftm.getXbqjks1()+":00").replaceAll("\r|\n", "")))) .endtime(("").equals(shiftm.getXbqjjs1()) || shiftm.getXbqjjs1() ==null ? 0 : Long.valueOf(ClockInTool.dateToStamp((next_day+" "+shiftm.getXbqjjs1()+":00").replaceAll("\r|\n", "")))) .nextday(1).build(); atts.add(as); }else { AttSchedule as = AttSchedule.builder().id(shiftm.getId()).sort(2).time(Long.valueOf(ClockInTool.dateToStamp((str+" "+shiftm.getXbdk1()+":00").replaceAll("\r|\n", "")))) .starttime(("").equals(shiftm.getXbqjks1()) || shiftm.getXbqjks1() == null ? 0 : Long.valueOf(ClockInTool.dateToStamp((str+" "+shiftm.getXbqjks1()+":00").replaceAll("\r|\n", "")))) .endtime(("").equals(shiftm.getXbqjjs1()) || shiftm.getXbqjjs1() ==null ? 0 : Long.valueOf(ClockInTool.dateToStamp((str+" "+shiftm.getXbqjjs1()+":00").replaceAll("\r|\n", "")))) .nextday(0).build(); atts.add(as); } } } attcar.setAttsch(atts); } if(shiftm.getSxbcs() == 2 || shiftm.getSxbcs() == 3){//2次上下班 for(int o=0;o<2;o++){ if(o==0){ if(isSbdk2Cr > 0) {//次日 AttSchedule as = AttSchedule.builder().id(shiftm.getId()).sort(3).time(Long.valueOf(ClockInTool.dateToStamp((next_day+" "+shiftm.getSbdk2()+":00").replaceAll("\r|\n", "")))) .starttime(("").equals(shiftm.getSbqjks2())|| shiftm.getSbqjks2()== null ? 0 : Long.valueOf(ClockInTool.dateToStamp((next_day+" "+shiftm.getSbqjks2()+":00").replaceAll("\r|\n", "")))) .endtime(("").equals(shiftm.getSbqjjs2()) || shiftm.getSbqjjs2()== null ? 0 : Long.valueOf(ClockInTool.dateToStamp((next_day+" "+shiftm.getSbqjjs2()+":00").replaceAll("\r|\n", "")))) .nextday(1).build(); atts.add(as); }else { AttSchedule as = AttSchedule.builder().id(shiftm.getId()).sort(3).time(Long.valueOf(ClockInTool.dateToStamp((str+" "+shiftm.getSbdk2()+":00").replaceAll("\r|\n", "")))) .starttime(("").equals(shiftm.getSbqjks2())|| shiftm.getSbqjks2()== null ? 0 : Long.valueOf(ClockInTool.dateToStamp((str+" "+shiftm.getSbqjks2()+":00").replaceAll("\r|\n", "")))) .endtime(("").equals(shiftm.getSbqjjs2()) || shiftm.getSbqjjs2()== null ? 0 : Long.valueOf(ClockInTool.dateToStamp((str+" "+shiftm.getSbqjjs2()+":00").replaceAll("\r|\n", "")))) .nextday(0).build(); atts.add(as); } }else{ if(isXbdk2Cr > 0) {//次日 AttSchedule as = AttSchedule.builder().id(shiftm.getId()).sort(4).time(Long.valueOf(ClockInTool.dateToStamp((next_day+" "+shiftm.getXbdk2()+":00").replaceAll("\r|\n", "")))) .starttime(("").equals(shiftm.getXbqjks2()) || shiftm.getXbqjks2()== null? 0 : Long.valueOf(ClockInTool.dateToStamp((next_day+" "+shiftm.getXbqjks2()+":00").replaceAll("\r|\n", "")))) .endtime(("").equals(shiftm.getXbqjjs2()) || shiftm.getXbqjjs2()== null? 0 : Long.valueOf(ClockInTool.dateToStamp((next_day+" "+shiftm.getXbqjjs2()+":00").replaceAll("\r|\n", "")))) .nextday(1).build(); atts.add(as); }else { AttSchedule as = AttSchedule.builder().id(shiftm.getId()).sort(4).time(Long.valueOf(ClockInTool.dateToStamp((str+" "+shiftm.getXbdk2()+":00").replaceAll("\r|\n", "")))) .starttime(("").equals(shiftm.getXbqjks2()) || shiftm.getXbqjks2()== null? 0 : Long.valueOf(ClockInTool.dateToStamp((str+" "+shiftm.getXbqjks2()+":00").replaceAll("\r|\n", "")))) .endtime(("").equals(shiftm.getXbqjjs2()) || shiftm.getXbqjjs2()== null? 0 : Long.valueOf(ClockInTool.dateToStamp((str+" "+shiftm.getXbqjjs2()+":00").replaceAll("\r|\n", "")))) .nextday(0).build(); atts.add(as); } } } attcar.setAttsch(atts); } if(shiftm.getSxbcs() == 3){//3次上下班 for(int o=0;o<2;o++){ if(o==0){ if(isSbdk3Cr > 0) {//次日 AttSchedule as = AttSchedule.builder().id(shiftm.getId()).sort(5).time(Long.valueOf(ClockInTool.dateToStamp((next_day+" "+shiftm.getSbdk3()+":00").replaceAll("\r|\n", "")))) .starttime(("").equals(shiftm.getSbqjks3()) || shiftm.getSbqjks3() == null? 0 : Long.valueOf(ClockInTool.dateToStamp((next_day+" "+shiftm.getSbqjks3()+":00").replaceAll("\r|\n", "")))) .endtime(("").equals(shiftm.getSbqjjs3()) || shiftm.getSbqjjs3() == null ? 0 : Long.valueOf(ClockInTool.dateToStamp((next_day+" "+shiftm.getSbqjjs3()+":00").replaceAll("\r|\n", "")))) .nextday(1).build(); atts.add(as); }else { AttSchedule as = AttSchedule.builder().id(shiftm.getId()).sort(5).time(Long.valueOf(ClockInTool.dateToStamp((str+" "+shiftm.getSbdk3()+":00").replaceAll("\r|\n", "")))) .starttime(("").equals(shiftm.getSbqjks3()) || shiftm.getSbqjks3() == null? 0 : Long.valueOf(ClockInTool.dateToStamp((str+" "+shiftm.getSbqjks3()+":00").replaceAll("\r|\n", "")))) .endtime(("").equals(shiftm.getSbqjjs3()) || shiftm.getSbqjjs3() == null ? 0 : Long.valueOf(ClockInTool.dateToStamp((str+" "+shiftm.getSbqjjs3()+":00").replaceAll("\r|\n", "")))) .nextday(0).build(); atts.add(as); } }else{ if(isXbdk3Cr > 0) {//次日 AttSchedule as = AttSchedule.builder().id(shiftm.getId()).sort(6).time(Long.valueOf(ClockInTool.dateToStamp((next_day+" "+shiftm.getXbdk3()+":00").replaceAll("\r|\n", "")))) .starttime(("").equals(shiftm.getXbqjks3()) || shiftm.getXbqjks3()== null ? 0 : Long.valueOf(ClockInTool.dateToStamp((next_day+" "+shiftm.getXbqjks3()+":00").replaceAll("\r|\n", "")))) .endtime(("").equals(shiftm.getXbqjjs3()) || shiftm.getXbqjjs3() ==null? 0 : Long.valueOf(ClockInTool.dateToStamp((next_day+" "+shiftm.getXbqjjs3()+":00").replaceAll("\r|\n", "")))) .nextday(1).build(); atts.add(as); }else { AttSchedule as = AttSchedule.builder().id(shiftm.getId()).sort(6).time(Long.valueOf(ClockInTool.dateToStamp((str+" "+shiftm.getXbdk3()+":00").replaceAll("\r|\n", "")))) .starttime(("").equals(shiftm.getXbqjks3()) || shiftm.getXbqjks3()== null ? 0 : Long.valueOf(ClockInTool.dateToStamp((str+" "+shiftm.getXbqjks3()+":00").replaceAll("\r|\n", "")))) .endtime(("").equals(shiftm.getXbqjjs3()) || shiftm.getXbqjjs3() ==null? 0 : Long.valueOf(ClockInTool.dateToStamp((str+" "+shiftm.getXbqjjs3()+":00").replaceAll("\r|\n", "")))) .nextday(0).build(); atts.add(as); } } } attcar.setAttsch(atts); } } }