package cn.timer.api.controller.kqgl.service; import java.math.BigDecimal; import java.text.ParseException; import java.text.SimpleDateFormat; import java.util.ArrayList; import java.util.Date; import java.util.List; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Value; import org.springframework.stereotype.Service; import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; import cn.timer.api.bean.kqmk.KqglAssoBcsz; import cn.timer.api.bean.kqmk.KqglAssoDkjl; import cn.timer.api.bean.kqmk.KqglAssoDkmx; import cn.timer.api.bean.kqmk.KqglAssoLeaveBalance; import cn.timer.api.bean.kqmk.KqglAssoLeaveEmployeeBalance; import cn.timer.api.bean.kqmk.KqglAssoLeaveRules; import cn.timer.api.bean.kqmk.KqglAssoLeaveRulesT; import cn.timer.api.bean.kqmk.KqglAssoOvertimeRange; import cn.timer.api.bean.kqmk.KqglAssoOvertimeRules; import cn.timer.api.bean.kqmk.KqglAssoRelationSummary; import cn.timer.api.bean.kqmk.KqglAssoTeshu; import cn.timer.api.bean.kqmk.KqglAssoYhkqz; import cn.timer.api.bean.kqmk.KqglAssoZhoupaiban; import cn.timer.api.bean.kqmk.KqglMainKqz; import cn.timer.api.bean.yggl.YgglMainEmp; import cn.timer.api.config.exception.CustomException; import cn.timer.api.controller.kqgl.ClockInTool; import cn.timer.api.controller.kqgl.EmptyUtil; 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.KqglMainKqzMapper; import cn.timer.api.dto.kqmk.AttEvectionApprovalDto; import cn.timer.api.dto.kqmk.AttLateLate; import cn.timer.api.dto.kqmk.AttLeaveApprovalDto; import cn.timer.api.dto.kqmk.AttOvertimeApprovalDto; import cn.timer.api.dto.kqmk.AttRepairApprovalDto; import cn.timer.api.dto.kqmk.AttSchedule; import cn.timer.api.dto.kqmk.AttendanceCardListDto; import cn.timer.api.dto.kqmk.KqglAssoPbmxDto; import cn.timer.api.utils.DateUtil; import cn.timer.api.utils.ResultUtil; /** * @author lal * 记录用户假期审批流程 对应减去剩余余额 */ @Service public class KqglServiceImpl implements KqglService { @Autowired private KqglAssoLeaveBalanceMapper kqglassoleavebalancemapper; /** * 考勤请假审批 */ @Override public boolean attleaveapproval(AttLeaveApprovalDto leaveappr) { String startdate = new SimpleDateFormat("yyyy-MM-dd").format(leaveappr.getStarttime()); String enddate = new SimpleDateFormat("yyyy-MM-dd").format(leaveappr.getEndtime()); String[] days=ClockInTool.listToString(ClockInTool.getDays(startdate,enddate)).split(","); int i = 1; for(String num : days) { //记入打卡月汇总关联表 KqglAssoRelationSummary.builder().userId(leaveappr.getUserid()).appTime(num).approvalId(leaveappr.getLeaveid()).approvalType(2).duration(leaveappr.getDuration()) .leaveTypeId(leaveappr.getLeavetype()).startTime(new SimpleDateFormat("yyyy-MM-dd' 'HH:mm:ss").format(leaveappr.getStarttime())) .endTime(new SimpleDateFormat("yyyy-MM-dd' 'HH:mm:ss").format(leaveappr.getEndtime())).orgCode(leaveappr.getOrgcode()).ordernum(i).totals(days.length).build().insert(); i++; } YgglMainEmp emp = YgglMainEmp.builder().build().selectOne(new QueryWrapper<YgglMainEmp>().lambda().eq(YgglMainEmp::getEmpNum, leaveappr.getUserid()).eq(YgglMainEmp::getOrgCode, leaveappr.getOrgcode())); int modifynumber = 1; KqglAssoLeaveBalance balan = kqglassoleavebalancemapper.selectOne(new QueryWrapper<KqglAssoLeaveBalance>().lambda().eq(KqglAssoLeaveBalance::getUserid, leaveappr.getUserid()).eq(KqglAssoLeaveBalance::getOrgCode, leaveappr.getOrgcode()) .orderByDesc(KqglAssoLeaveBalance :: getModifyNumber).last("LIMIT 1")); if(balan != null) { modifynumber = balan.getModifyNumber()+1; } String mse = "考勤请假审批"; KqglAssoLeaveRulesT rult = KqglAssoLeaveRulesT.builder().build().selectOne(new QueryWrapper<KqglAssoLeaveRulesT>().lambda().eq(KqglAssoLeaveRulesT::getId, leaveappr.getLeavetype())); if(rult != null) { mse = "考勤"+rult.getName()+"审批"; } KqglAssoLeaveBalance.builder().leaveRulesId(leaveappr.getLeavetype()).userid(leaveappr.getUserid()).modifyAction(2).balanceDays("-"+leaveappr.getDuration()) .reason(mse).modifyUserid(emp.getEmpNum()).modifyTimer(new Date().getTime()).orgCode(emp.getOrgCode()).isAutomatic(1).modifyNumber(modifynumber).build().insert();//员工假期余额 //查询员工假期余额表中所对应的假期id KqglAssoLeaveEmployeeBalance emba = KqglAssoLeaveEmployeeBalance.builder().build().selectOne(new QueryWrapper<KqglAssoLeaveEmployeeBalance>().lambda().eq(KqglAssoLeaveEmployeeBalance::getLeaveRulesId, leaveappr.getLeavetype()) .eq(KqglAssoLeaveEmployeeBalance::getUserid, leaveappr.getUserid()).eq(KqglAssoLeaveEmployeeBalance::getOrgCode, leaveappr.getOrgcode())); //获取最后得到的最终余额 double balance_days = kqglassoleavebalancemapper.Sumbalancedays(leaveappr.getUserid(), leaveappr.getOrgcode(),leaveappr.getLeavetype()); if(emba != null && balance_days > 0) { if(emba.getBalanceDays() != -1) {//确认为限制余额的 //修改最终的余额数 KqglAssoLeaveEmployeeBalance.builder().id(emba.getId()).balanceDays(balance_days).build().updateById(); } } return true; } /** * 考勤加班审批 */ @Override public boolean attovertimeapproval(AttOvertimeApprovalDto overappr) { String startdate = new SimpleDateFormat("yyyy-MM-dd").format(overappr.getStarttime()); String enddate = new SimpleDateFormat("yyyy-MM-dd").format(overappr.getEndtime()); String[] days=ClockInTool.listToString(ClockInTool.getDays(startdate,enddate)).split(","); int i = 1; for(String num : days) { //记入打卡月汇总关联表 KqglAssoRelationSummary.builder().userId(overappr.getUserid()).appTime(num).approvalId(overappr.getOvertimeid()).approvalType(1).duration(overappr.getDuration()) .overtimeTypeId(overappr.getOvertimetype()).compensateId(overappr.getCompensate()).startTime(new SimpleDateFormat("yyyy-MM-dd' 'HH:mm:ss").format(overappr.getStarttime())) .endTime(new SimpleDateFormat("yyyy-MM-dd' 'HH:mm:ss").format(overappr.getEndtime())).ordernum(i).orgCode(overappr.getOrgcode()).totals(days.length).build().insert(); i++; } YgglMainEmp emp = YgglMainEmp.builder().build().selectOne(new QueryWrapper<YgglMainEmp>().lambda().eq(YgglMainEmp::getEmpNum, overappr.getUserid()).eq(YgglMainEmp::getOrgCode, overappr.getOrgcode())); //查询当前公司调休的id KqglAssoLeaveRules learul = KqglAssoLeaveRules.builder().build().selectOne(new QueryWrapper<KqglAssoLeaveRules>().lambda().eq(KqglAssoLeaveRules::getOrgCode, emp.getOrgCode()).eq(KqglAssoLeaveRules::getRulesType, 2)); // if(overappr.getCompensate() == 1 || overappr.getCompensate() == 3) { double duration = 0l;// int modifynumber = 1; KqglAssoLeaveBalance balan = kqglassoleavebalancemapper.selectOne(new QueryWrapper<KqglAssoLeaveBalance>().lambda().eq(KqglAssoLeaveBalance::getUserid, overappr.getUserid()).eq(KqglAssoLeaveBalance::getOrgCode, overappr.getOrgcode()) .orderByDesc(KqglAssoLeaveBalance :: getModifyNumber).last("LIMIT 1")); if(balan != null) { modifynumber = balan.getModifyNumber()+1; } KqglAssoYhkqz yhd = KqglAssoYhkqz.builder().build().selectOne(new QueryWrapper<KqglAssoYhkqz>().lambda().eq(KqglAssoYhkqz::getUserid, overappr.getUserid()).eq(KqglAssoYhkqz::getQyid, overappr.getOrgcode())); if(yhd != null) { KqglAssoOvertimeRange timeran = KqglAssoOvertimeRange.builder().build().selectOne(new QueryWrapper<KqglAssoOvertimeRange>().lambda().eq(KqglAssoOvertimeRange::getAttgroupId, yhd.getKqzid())); if(timeran != null) { KqglAssoOvertimeRules rul = KqglAssoOvertimeRules.builder().build().selectOne(new QueryWrapper<KqglAssoOvertimeRules>().lambda().eq(KqglAssoOvertimeRules::getId, timeran.getOvertimeRulesId())); if(rul != null) { //1:工作日加班;2:休息日加班;3:节假日加班 if(overappr.getOvertimetype() == 1) { if(rul.getIsWorkovertime() == 1) { if(rul.getWork() == 1) {//1:调休 2:加班费 3:调休/加班费 duration = Double.valueOf(rul.getWorkOne()) * overappr.getDuration(); }else if(rul.getWork() == 3) { duration = Double.valueOf(rul.getWorkThree()) * overappr.getDuration(); } } }else if(overappr.getOvertimetype() == 2) { if(rul.getIsRestovertime() == 1) { if(rul.getRest() == 1) { duration = Double.valueOf(rul.getRestOne()) * overappr.getDuration(); }else if(rul.getRest() == 3) { duration = Double.valueOf(rul.getRestThree()) * overappr.getDuration(); } } }else { if(rul.getIsHolidays() == 1) { if(rul.getHolidays() == 1) { duration = Double.valueOf(rul.getHolidaysOne()) * overappr.getDuration(); }else if(rul.getHolidays() == 3) { duration = Double.valueOf(rul.getHolidaysThree()) * overappr.getDuration(); } } } } } } //调休单位是“天”时 按照=》加班时长/班次的工作时长=调休天数 if(learul.getCompany() == 1) { try { AttendanceCardListDto attdate = MethodCall(overappr.getOrgcode(),overappr.getUserid(),startdate);//获取当天打卡班次信息 long starttime1 = 0,endtime1 = 0,starttime2 = 0,endtime2 = 0,starttime3 = 0,endtime3 = 0; double time1 = 0,time2 = 0,time3 = 0; BigDecimal num0 = new BigDecimal(60); if(EmptyUtil.isNotEmpty(attdate.getAttsch())) {//班次不为空 List<AttSchedule> ash = attdate.getAttsch();//获取当天应打卡时间 if(attdate.getAttsch().size() == 2 || attdate.getAttsch().size() == 4 || attdate.getAttsch().size() == 6) { starttime1 = ash.get(0).getTime(); endtime1 = ash.get(1).getTime(); BigDecimal num = new BigDecimal((endtime1 - starttime1)/1000/60); time1 = num.divide(num0,2,BigDecimal.ROUND_HALF_UP).doubleValue(); } if(attdate.getAttsch().size() == 4 || attdate.getAttsch().size() == 6) { starttime2 = ash.get(2).getTime(); endtime2 = ash.get(3).getTime(); BigDecimal num = new BigDecimal((endtime2 - starttime2)/1000/60); time2 = num.divide(num0,2,BigDecimal.ROUND_HALF_UP).doubleValue(); } if(attdate.getAttsch().size() == 6) { starttime3 = ash.get(4).getTime(); endtime3 = ash.get(5).getTime(); BigDecimal num = new BigDecimal((endtime3 - starttime3)/1000/60); time3 = num.divide(num0,2,BigDecimal.ROUND_HALF_UP).doubleValue(); } } BigDecimal num1 = new BigDecimal(time1); BigDecimal num2 = new BigDecimal(time2); BigDecimal num3 = num1.add(num2); BigDecimal num4 = new BigDecimal(time3); double shift_duration = ClockInTool.round(num3.add(num4).doubleValue());//班次时长 if(shift_duration > 0) { BigDecimal num5 = new BigDecimal(duration); BigDecimal num6 = new BigDecimal(shift_duration); //加班时长/班次的工作时长=调休天数 duration = num5.divide(num6,2,BigDecimal.ROUND_HALF_UP).doubleValue(); } } catch (ParseException e) { e.printStackTrace(); } } KqglAssoLeaveBalance.builder().leaveRulesId(learul.getId()).userid(overappr.getUserid()).modifyAction(2).balanceDays("+"+duration) .reason("考勤加班审批").modifyUserid(emp.getEmpNum()).modifyTimer(overappr.getStarttime()).orgCode(emp.getOrgCode()).isAutomatic(1).modifyNumber(modifynumber).build().insert();//员工假期余额 //查询员工假期余额表中所对应的假期id KqglAssoLeaveEmployeeBalance emba = KqglAssoLeaveEmployeeBalance.builder().build().selectOne(new QueryWrapper<KqglAssoLeaveEmployeeBalance>().lambda().eq(KqglAssoLeaveEmployeeBalance::getLeaveRulesId, learul.getId()) .eq(KqglAssoLeaveEmployeeBalance::getUserid, overappr.getUserid()).eq(KqglAssoLeaveEmployeeBalance::getOrgCode, overappr.getOrgcode())); //获取最后得到的最终余额 double balance_days = kqglassoleavebalancemapper.Sumbalancedays(overappr.getUserid(), overappr.getOrgcode(),learul.getId()); if(emba != null && balance_days > 0) { if(emba.getBalanceDays() != -1) {//确认为限制余额的 //修改最终的余额数 KqglAssoLeaveEmployeeBalance.builder().id(emba.getId()).balanceDays(balance_days).build().updateById(); } } } return true; } /** * 考勤出差外出审批 */ @Override public boolean attevectionapproval(AttEvectionApprovalDto evecappr) { if(evecappr.getEvectiontype() == 1) { //出差 String startdate = new SimpleDateFormat("yyyy-MM-dd").format(evecappr.getStarttime()); String enddate = new SimpleDateFormat("yyyy-MM-dd").format(evecappr.getEndtime()); String[] days=ClockInTool.listToString(ClockInTool.getDays(startdate,enddate)).split(","); int i = 1; for(String num : days) { //记入打卡月汇总关联表 KqglAssoRelationSummary.builder().userId(evecappr.getUserid()).appTime(num).approvalId(evecappr.getEvectionid()).approvalType(3).duration(evecappr.getDuration()) .startTime(new SimpleDateFormat("yyyy-MM-dd' 'HH:mm:ss").format(evecappr.getStarttime())).endTime(new SimpleDateFormat("yyyy-MM-dd' 'HH:mm:ss").format(evecappr.getEndtime())) .orgCode(evecappr.getOrgcode()).ordernum(i).totals(days.length).build().insert(); i++; } }else { //外出 String startdate = new SimpleDateFormat("yyyy-MM-dd").format(evecappr.getStarttime()); String enddate = new SimpleDateFormat("yyyy-MM-dd").format(evecappr.getEndtime()); String[] days=ClockInTool.listToString(ClockInTool.getDays(startdate,enddate)).split(","); int i = 1; for(String num : days) { //记入打卡月汇总关联表 KqglAssoRelationSummary.builder().userId(evecappr.getUserid()).appTime(num).approvalId(evecappr.getEvectionid()).approvalType(4).duration(evecappr.getDuration()) .startTime(new SimpleDateFormat("yyyy-MM-dd' 'HH:mm:ss").format(evecappr.getStarttime())).endTime(new SimpleDateFormat("yyyy-MM-dd' 'HH:mm:ss").format(evecappr.getEndtime())) .orgCode(evecappr.getOrgcode()).ordernum(i).totals(days.length).build().insert(); i++; } } return true; } @Autowired private KqglMainKqzMapper kqglmainkqzmapper; @Autowired private KqglAssoRelationSummaryMapper kqglassorelationsummarymapper; /** * 考勤补卡审批 */ @Override public boolean attrepairapproval(AttRepairApprovalDto repaappr) { String cardrepltime = new SimpleDateFormat("yyyy-MM-dd").format(repaappr.getCardrepltime());//补卡时间 boolean isRange = true; int atttype = 0;//类型(0:无排班打卡 1:上班 2:下班) int results = 0;//打卡结果 int type = 0; long attime = 0l;//应打卡时间戳 int dkmxid = 0;//打卡明细ID Long start_time = null; Long end_time = null; try { start_time = DateUtil.getStartTime(0,DateUtil.getStringTime(cardrepltime,"yyyy-MM-dd")).getTime(); end_time = DateUtil.getnowEndTime(23,DateUtil.getStringTime(cardrepltime,"yyyy-MM-dd")).getTime(); } catch (ParseException e1) { e1.printStackTrace(); } //记入打卡月汇总关联表 KqglAssoRelationSummary.builder().userId(repaappr.getUserid()).appTime(cardrepltime).approvalId(repaappr.getRepairid()).approvalType(5).startTime(new SimpleDateFormat("yyyy-MM-dd' 'HH:mm:ss").format(repaappr.getCardrepltime())).orgCode(repaappr.getOrgcode()).build().insert(); int shifid = 0; try { KqglMainKqz attgro = kqglmainkqzmapper.getAttendanceGroupInformationByUserid(repaappr.getUserid(),repaappr.getOrgcode()); //考勤组信息 if(attgro != null) { AttendanceCardListDto attdate = MethodCall(repaappr.getOrgcode(),repaappr.getUserid(),cardrepltime);//获取当天打卡班次信息 //排班方式 // 考勤类型:1-固定排班、2-排班制、3-自由工时 //自由工时无班次ID 另行逻辑 if(attgro.getPbfs()<3 && EmptyUtil.isNotEmpty(attdate.getAttsch())) {//班次不为空 List<AttSchedule> ash = attdate.getAttsch();//获取当天应打卡时间 shifid = ash.get(0).getId();//班次id long starttime1 = 0,starttime1ks = 0,starttime1js = 0,endtime1 = 0,endtime1ks = 0,endtime1js = 0,starttime2 = 0,starttime2ks = 0,starttime2js = 0,endtime2 = 0,endtime2ks = 0,endtime2js = 0,starttime3 = 0,starttime3ks = 0,starttime3js = 0, endtime3 = 0,endtime3ks = 0,endtime3js = 0; if(attdate.getAttsch().size() == 2 || attdate.getAttsch().size() == 4 || attdate.getAttsch().size() == 6) { starttime1 = ash.get(0).getTime();starttime1ks = ash.get(0).getStarttime();starttime1js = ash.get(0).getEndtime(); endtime1 = ash.get(1).getTime();endtime1ks = ash.get(1).getStarttime();endtime1js = ash.get(1).getEndtime(); } if(attdate.getAttsch().size() == 4 || attdate.getAttsch().size() == 6) { starttime2 = ash.get(2).getTime();starttime2ks = ash.get(2).getStarttime();starttime2js = ash.get(2).getEndtime(); endtime2 = ash.get(3).getTime();endtime2ks = ash.get(3).getStarttime();endtime2js = ash.get(3).getEndtime(); } if(attdate.getAttsch().size() == 6) { starttime3 = ash.get(4).getTime();starttime3ks = ash.get(4).getStarttime();starttime3js = ash.get(4).getEndtime(); endtime3 = ash.get(5).getTime();endtime3ks = ash.get(5).getStarttime();endtime3js = ash.get(5).getEndtime(); } if(ash.get(0).getId() != 0) { //有排班 非休息 KqglAssoBcsz shif = KqglAssoBcsz.builder().build().selectOne(new QueryWrapper<KqglAssoBcsz>().lambda().eq(KqglAssoBcsz::getId, shifid)); KqglAssoDkmx dkmc = KqglAssoDkmx.builder().build().selectOne(new QueryWrapper<KqglAssoDkmx>().lambda().eq(KqglAssoDkmx::getUserid, repaappr.getUserid()).eq(KqglAssoDkmx::getQyid, repaappr.getOrgcode()) .ge(KqglAssoDkmx::getDksj, start_time).le(KqglAssoDkmx::getDksj, end_time));//获取补卡当天是否有打卡记录 if(dkmc != null) { dkmxid = dkmc.getId(); if(attdate.getAttsch().size() == 2) {//一套班次 if(repaappr.getCardreplperiod() == 1 && dkmc.getSbdk1() == null) {//上班 if(starttime1ks > 0 && starttime1js > 0) { // boolean sb1 = verification_range(starttime1ks,starttime1js,repaappr.getCardrepltime()); String staputime = new SimpleDateFormat("yyyy-MM-dd HH:mm").format(starttime1ks);//应打卡开始时间 String entputime = new SimpleDateFormat("yyyy-MM-dd HH:mm").format(starttime1js);//应打卡结束时间 String DKputime = new SimpleDateFormat("yyyy-MM-dd HH:mm").format(repaappr.getCardrepltime());//打卡时间 boolean effectiveDate = ClockInTool.hourMinuteBetween(DKputime, staputime, entputime,"yyyy-MM-dd HH:mm"); if (!effectiveDate) { Logoutput("当前打卡时间不在范围内"); isRange = false; } } int sbdkjg = 0; if(isRange) { Long time = (repaappr.getCardrepltime() - starttime1)/1000/60; if(time > 0){//上班1打卡结果 sbdkjg = Math.abs(Integer.valueOf(time.toString())); } Double gzsctime = null;//工作时长 if(dkmc.getXbdk1() != null){ Long time1 = (repaappr.getCardrepltime() - dkmc.getXbdk1())/1000/60; gzsctime = Math.abs(Double.valueOf(time1.toString()));//只打一次卡时计算工作时长 } KqglAssoDkmx.builder().id(dkmc.getId()).sbdk1(repaappr.getCardrepltime()).sbdk1jg(sbdkjg).dktj1(1).gzsc(gzsctime).build().updateById(); } atttype = 1; results = sbdkjg; attime = starttime1; }else if(repaappr.getCardreplperiod() == 2 && dkmc.getXbdk1() == null) {//下班 if(endtime1ks > 0 && endtime1js > 0) { String staputime = new SimpleDateFormat("yyyy-MM-dd HH:mm").format(endtime1ks);//应打卡开始时间 String entputime = new SimpleDateFormat("yyyy-MM-dd HH:mm").format(endtime1js);//应打卡结束时间 String DKputime = new SimpleDateFormat("yyyy-MM-dd HH:mm").format(repaappr.getCardrepltime());//打卡时间 boolean effectiveDate = ClockInTool.hourMinuteBetween(DKputime, staputime, entputime,"yyyy-MM-dd HH:mm"); if (!effectiveDate) { Logoutput("当前打卡时间不在范围内"); isRange = false; } } int xbdk1jg = 0; if(isRange) { Long time = (repaappr.getCardrepltime() - endtime1)/1000/60; if(time > 0){}else{ xbdk1jg = Math.abs(Integer.valueOf(time.toString())); } Double gzsctime = null;//工作时长 if(dkmc.getSbdk1() != null) { Long time1 = (repaappr.getCardrepltime() - dkmc.getSbdk1())/1000/60; gzsctime = Math.abs(Double.valueOf(time1.toString())); } KqglAssoDkmx.builder().id(dkmc.getId()).xbdk1(repaappr.getCardrepltime()).xbdk1jg(xbdk1jg).dktj2(1).gzsc(gzsctime).build().updateById(); } atttype = 2; results = xbdk1jg; attime = endtime1; } }else if(attdate.getAttsch().size() == 4 || attdate.getAttsch().size() == 6) { if(repaappr.getCardreplperiod() == 1) { boolean sb1 = verification_range(starttime1ks,starttime1js,repaappr.getCardrepltime()); if(sb1 && dkmc.getSbdk1() == null) { int sbdkjg = 0; Long time = (repaappr.getCardrepltime() - starttime1)/1000/60; if(time > 0){//上班1打卡结果 sbdkjg = Math.abs(Integer.valueOf(time.toString())); } Double gzsctime = null;//工作时长 KqglAssoDkmx.builder().id(dkmc.getId()).sbdk1(repaappr.getCardrepltime()).sbdk1jg(sbdkjg).dktj1(1).gzsc(gzsctime).build().updateById(); atttype = 1; results = sbdkjg; attime = starttime1; } boolean sb2 = verification_range(starttime2ks,starttime2js,repaappr.getCardrepltime()); if(sb2 && dkmc.getSbdk2() == null) { int sbdkjg = 0; Long time = (repaappr.getCardrepltime() - starttime2)/1000/60; if(time > 0){//上班1打卡结果 sbdkjg = Math.abs(Integer.valueOf(time.toString())); } Double gzsctime = null;//工作时长 KqglAssoDkmx.builder().id(dkmc.getId()).sbdk2(repaappr.getCardrepltime()).sbdk2jg(sbdkjg).dktj3(1).gzsc(gzsctime).build().updateById(); atttype = 3; results = sbdkjg; attime = starttime2; } }else if(repaappr.getCardreplperiod() == 2) { boolean xb1 = verification_range(endtime1ks,endtime1js,repaappr.getCardrepltime()); if(xb1 && dkmc.getXbdk1() == null) { int xbdk1jg = 0; Long time = (repaappr.getCardrepltime() - endtime1)/1000/60; if(time > 0){}else{ xbdk1jg = Math.abs(Integer.valueOf(time.toString())); } Double gzsctime = null;//工作时长 KqglAssoDkmx.builder().id(dkmc.getId()).xbdk1(repaappr.getCardrepltime()).xbdk1jg(xbdk1jg).dktj2(1).gzsc(gzsctime).build().updateById(); atttype = 2; results = xbdk1jg; attime = endtime1; } boolean xb2 = verification_range(endtime2ks,endtime2js,repaappr.getCardrepltime()); if(xb2 && dkmc.getXbdk2() == null) { int xbdk2jg = 0; Long time = (repaappr.getCardrepltime() - endtime2)/1000/60; if(time > 0){}else{ xbdk2jg = Math.abs(Integer.valueOf(time.toString())); } Double gzsctime = null;//工作时长 KqglAssoDkmx.builder().id(dkmc.getId()).xbdk2(repaappr.getCardrepltime()).xbdk2jg(xbdk2jg).dktj4(1).gzsc(gzsctime).build().updateById(); atttype = 4; results = xbdk2jg; attime = endtime2; } } }else if(attdate.getAttsch().size() == 6) { if(repaappr.getCardreplperiod() == 1) { boolean sb3 = verification_range(starttime3ks,starttime3js,repaappr.getCardrepltime()); if(sb3 && dkmc.getSbdk3() == null) { int sbdkjg = 0; Long time = (repaappr.getCardrepltime() - starttime3)/1000/60; if(time > 0){//上班1打卡结果 sbdkjg = Math.abs(Integer.valueOf(time.toString())); } Double gzsctime = null;//工作时长 KqglAssoDkmx.builder().id(dkmc.getId()).sbdk3(repaappr.getCardrepltime()).sbdk3jg(sbdkjg).dktj5(1).gzsc(gzsctime).build().updateById(); atttype = 5; results = sbdkjg; attime = starttime3; } }else if(repaappr.getCardreplperiod() == 2) { boolean xb3 = verification_range(endtime3ks,endtime3js,repaappr.getCardrepltime()); if(xb3 && dkmc.getXbdk3() == null) { int xbdk3jg = 0; Long time = (repaappr.getCardrepltime() - endtime3)/1000/60; if(time > 0){}else{ xbdk3jg = Math.abs(Integer.valueOf(time.toString())); } Double gzsctime = null;//工作时长 KqglAssoDkmx.builder().id(dkmc.getId()).xbdk3(repaappr.getCardrepltime()).xbdk3jg(xbdk3jg).dktj6(1).gzsc(gzsctime).build().updateById(); atttype = 6; results = xbdk3jg; attime = endtime3; } } } }else {//补卡当天无打卡记录时 KqglAssoDkmx pcd = KqglAssoDkmx.builder().userid(repaappr.getUserid()).data(cardrepltime).qyid(repaappr.getOrgcode()).dksj(start_time).ydkcs(shif.getSxbcs()*2) .gzsc(0d).build(); // int yzcd = shif.getYzcdfzs();//严重迟到分钟数 // int kgcdfzs = shif.getKgcdfzs();//旷工迟到分钟数 if(attdate.getAttsch().size() == 2) {//一套班次 if(repaappr.getCardreplperiod() == 1) {//上班 if(starttime1ks > 0 && starttime1js > 0) { String staputime = new SimpleDateFormat("yyyy-MM-dd HH:mm").format(starttime1ks);//应打卡开始时间 String entputime = new SimpleDateFormat("yyyy-MM-dd HH:mm").format(starttime1js);//应打卡结束时间 String DKputime = new SimpleDateFormat("yyyy-MM-dd HH:mm").format(repaappr.getCardrepltime());//打卡时间 boolean effectiveDate = ClockInTool.hourMinuteBetween(DKputime, staputime, entputime,"yyyy-MM-dd HH:mm"); if (!effectiveDate) { Logoutput("当前打卡时间不在范围内"); isRange = false; } } int sbdkjg = 0; if(isRange) { Long time = (repaappr.getCardrepltime() - starttime1)/1000/60; if(time > 0){//上班1打卡结果 sbdkjg = Math.abs(Integer.valueOf(time.toString())); } pcd.setSbdk1(repaappr.getCardrepltime()); pcd.setSbdk1jg(sbdkjg); pcd.setDktj1(1); if (!pcd.insert()) { throw new CustomException("打卡明细-新增异常-1"); } } atttype = 1; results = sbdkjg; attime = starttime1; }else if(repaappr.getCardreplperiod() == 2) {//下班 if(endtime1ks > 0 && endtime1js > 0) { String staputime = new SimpleDateFormat("yyyy-MM-dd HH:mm").format(endtime1ks);//应打卡开始时间 String entputime = new SimpleDateFormat("yyyy-MM-dd HH:mm").format(endtime1js);//应打卡结束时间 String DKputime = new SimpleDateFormat("yyyy-MM-dd HH:mm").format(repaappr.getCardrepltime());//打卡时间 boolean effectiveDate = ClockInTool.hourMinuteBetween(DKputime, staputime, entputime,"yyyy-MM-dd HH:mm"); if (!effectiveDate) { Logoutput("当前打卡时间不在范围内"); isRange = false; } } int xbdk1jg = 0; if(isRange) { Long time = (repaappr.getCardrepltime() - endtime1)/1000/60; if(time > 0){}else{ xbdk1jg = Math.abs(Integer.valueOf(time.toString())); } pcd.setXbdk1(repaappr.getCardrepltime()); pcd.setXbdk1jg(xbdk1jg); pcd.setDktj2(1); if (!pcd.insert()) { throw new CustomException("打卡明细-新增异常-1"); } } atttype = 2; results = xbdk1jg; attime = endtime1; } }else if(attdate.getAttsch().size() == 4 || attdate.getAttsch().size() == 6) { if(repaappr.getCardreplperiod() == 1) { boolean sb1 = verification_range(starttime1ks,starttime1js,repaappr.getCardrepltime()); if(sb1) { int sbdkjg = 0; Long time = (repaappr.getCardrepltime() - starttime1)/1000/60; if(time > 0){//上班1打卡结果 sbdkjg = Math.abs(Integer.valueOf(time.toString())); } pcd.setSbdk1(repaappr.getCardrepltime()); pcd.setSbdk1jg(sbdkjg); pcd.setDktj1(1); if (!pcd.insert()) { throw new CustomException("打卡明细-新增异常-1"); } atttype = 1; results = sbdkjg; attime = starttime1; } boolean sb2 = verification_range(starttime2ks,starttime2js,repaappr.getCardrepltime()); if(sb2) { int sbdkjg = 0; Long time = (repaappr.getCardrepltime() - starttime2)/1000/60; if(time > 0){//上班1打卡结果 sbdkjg = Math.abs(Integer.valueOf(time.toString())); } pcd.setSbdk2(repaappr.getCardrepltime()); pcd.setSbdk2jg(sbdkjg); pcd.setDktj3(1); if (!pcd.insert()) { throw new CustomException("打卡明细-新增异常-1"); } atttype = 3; results = sbdkjg; attime = starttime2; } }else if(repaappr.getCardreplperiod() == 2) { boolean xb1 = verification_range(endtime1ks,endtime1js,repaappr.getCardrepltime()); if(xb1) { int xbdk1jg = 0; Long time = (repaappr.getCardrepltime() - endtime1)/1000/60; if(time > 0){}else{ xbdk1jg = Math.abs(Integer.valueOf(time.toString())); } pcd.setXbdk1(repaappr.getCardrepltime()); pcd.setXbdk1jg(xbdk1jg); pcd.setDktj2(1); if (!pcd.insert()) { throw new CustomException("打卡明细-新增异常-1"); } atttype = 2; results = xbdk1jg; attime = endtime1; } boolean xb2 = verification_range(endtime2ks,endtime2js,repaappr.getCardrepltime()); if(xb2) { int xbdk2jg = 0; Long time = (repaappr.getCardrepltime() - endtime2)/1000/60; if(time > 0){}else{ xbdk2jg = Math.abs(Integer.valueOf(time.toString())); } pcd.setXbdk2(repaappr.getCardrepltime()); pcd.setXbdk2jg(xbdk2jg); pcd.setDktj4(1); if (!pcd.insert()) { throw new CustomException("打卡明细-新增异常-1"); } atttype = 4; results = xbdk2jg; attime = endtime2; } } }else if(attdate.getAttsch().size() == 6) { if(repaappr.getCardreplperiod() == 1) { boolean sb3 = verification_range(starttime3ks,starttime3js,repaappr.getCardrepltime()); if(sb3) { int sbdkjg = 0; Long time = (repaappr.getCardrepltime() - starttime3)/1000/60; if(time > 0){//上班1打卡结果 sbdkjg = Math.abs(Integer.valueOf(time.toString())); } pcd.setSbdk3(repaappr.getCardrepltime()); pcd.setSbdk3jg(sbdkjg); pcd.setDktj5(1); if (!pcd.insert()) { throw new CustomException("打卡明细-新增异常-1"); } atttype = 5; results = sbdkjg; attime = starttime3; } }else if(repaappr.getCardreplperiod() == 2) { boolean xb3 = verification_range(endtime3ks,endtime3js,repaappr.getCardrepltime()); if(xb3) { int xbdk3jg = 0; Long time = (repaappr.getCardrepltime() - endtime3)/1000/60; if(time > 0){}else{ xbdk3jg = Math.abs(Integer.valueOf(time.toString())); } pcd.setXbdk3(repaappr.getCardrepltime()); pcd.setXbdk3jg(xbdk3jg); pcd.setDktj6(1); if (!pcd.insert()) { throw new CustomException("打卡明细-新增异常-1"); } atttype = 6; results = xbdk3jg; attime = endtime3; } } } if(isRange) { dkmxid = pcd.getId(); }else { throw new CustomException("当前时间,没有考勤异常无需补卡"); } } //0:打卡无效:此记录已被更新 1:正常 2:异常 3:迟到 4:早退 5:补卡 6:请假 7:加班 8:调休 //9:管理员改为正常 10:管理员改为迟到 11:管理员改为早退 12:补卡通过/正常 13:补卡通过/迟到 14:补卡通过/早退 int status = 2; if((atttype)%2 > 0){ type = 1; if(results == 0) { status = 12; }else { status = 13; } }else { type = 2; if(results == 0) { status = 12; }else { status = 14; } } Long startDate = DateUtil.getStartTime(0,DateUtil.getStringTime(cardrepltime,"yyyy-MM-dd")).getTime(); String attdate_ = new SimpleDateFormat("yy-MM-dd").format(Double.valueOf(startDate));//转换打卡时间格式 //attime 应打卡时间 double gzsc = 0; long rest_time = 0; if(shif.getStartTime() != null && !("").equals(shif.getStartTime()) && shif.getEndTime() != null && !("").equals(shif.getEndTime())) { long kaishixiuxi = Long.valueOf(ClockInTool.dateToStamp(cardrepltime + " " +shif.getStartTime()+":00")); long jieshuxiuxi = Long.valueOf(ClockInTool.dateToStamp(cardrepltime + " " +shif.getEndTime()+":00")); rest_time = (jieshuxiuxi - kaishixiuxi)/1000/60;//休息时间 } //请假时长 KqglAssoRelationSummary qjsc = kqglassorelationsummarymapper.Businessdayclockin(repaappr.getUserid(), 2, cardrepltime, repaappr.getOrgcode()); //计算工作时长 KqglAssoDkmx dkgzsc = KqglAssoDkmx.builder().id(dkmxid).build().selectById(); if(dkgzsc.getYdkcs() == 2 || dkgzsc.getYdkcs() == 4 || dkgzsc.getYdkcs() == 6) { if(dkgzsc.getSbdk1() != null && dkgzsc.getXbdk1() != null) { gzsc = gzsc + (dkgzsc.getXbdk1() - dkgzsc.getSbdk1())/1000/60; } } if(dkgzsc.getYdkcs() == 4 || dkgzsc.getYdkcs() == 6) { if(dkgzsc.getSbdk2() != null && dkgzsc.getXbdk2() != null) { gzsc = gzsc + (dkgzsc.getXbdk2() - dkgzsc.getSbdk2())/1000/60; } } if(dkgzsc.getYdkcs() == 6) { if(dkgzsc.getSbdk3() != null && dkgzsc.getXbdk3() != null) { gzsc = gzsc + (dkgzsc.getXbdk3() - dkgzsc.getSbdk3())/1000/60; } } gzsc = gzsc - rest_time - qjsc.getDuration(); KqglAssoDkmx.builder().id(dkmxid).gzsc(gzsc).build().updateById(); KqglAssoDkjl pre = KqglAssoDkjl.builder().dktime(repaappr.getCardrepltime()).results(results).userId(repaappr.getUserid()).type(type).status(status).sort(atttype) .cardType(0).qyid(repaappr.getOrgcode()).attdate(attdate_+" "+ClockInTool.dateToWeek2(cardrepltime)).attime(attime).dkmxid(dkmxid).bcid(shifid).remarks("审批补卡通过打卡").punchmode(0) .punchequipment("").commentary("成功打卡").build(); if (!pre.insert()) { throw new CustomException("打卡记录-新增异常-2"); } } } if(attgro.getPbfs() == 3){ long starttime1 = 0,starttime1ks = 0,starttime1js = 0,endtime1 = 0,endtime1ks = 0,endtime1js = 0,starttime2 = 0,starttime2ks = 0,starttime2js = 0,endtime2 = 0,endtime2ks = 0,endtime2js = 0,starttime3 = 0,starttime3ks = 0,starttime3js = 0, endtime3 = 0,endtime3ks = 0,endtime3js = 0; KqglAssoDkmx dkmc = KqglAssoDkmx.builder().build().selectOne(new QueryWrapper<KqglAssoDkmx>().lambda().eq(KqglAssoDkmx::getUserid, repaappr.getUserid()).eq(KqglAssoDkmx::getQyid, repaappr.getOrgcode()) .ge(KqglAssoDkmx::getDksj, start_time).le(KqglAssoDkmx::getDksj, end_time));//获取补卡当天是否有打卡记录 if(dkmc != null) { dkmxid = dkmc.getId(); if(repaappr.getCardreplperiod() == 1 && dkmc.getSbdk1() == null) {//上班 int sbdkjg = 0; if(isRange) { Long time = (repaappr.getCardrepltime() - starttime1)/1000/60; if(time > 0){//上班1打卡结果 sbdkjg = Math.abs(Integer.valueOf(time.toString())); } Double gzsctime = null;//工作时长 if(dkmc.getXbdk1() != null){ Long time1 = (repaappr.getCardrepltime() - dkmc.getXbdk1())/1000/60; gzsctime = Math.abs(Double.valueOf(time1.toString()));//只打一次卡时计算工作时长 } KqglAssoDkmx.builder().id(dkmc.getId()).sbdk1(repaappr.getCardrepltime()).sbdk1jg(sbdkjg).dktj1(1).gzsc(gzsctime).build().updateById(); } atttype = 1; results = sbdkjg; }else if(repaappr.getCardreplperiod() == 2 && dkmc.getXbdk1() == null) {//下班 int xbdk1jg = 0; if(isRange) { Long time = (repaappr.getCardrepltime() - endtime1)/1000/60; if(time > 0){}else{ xbdk1jg = Math.abs(Integer.valueOf(time.toString())); } Double gzsctime = null;//工作时长 if(dkmc.getSbdk1() != null) { Long time1 = (repaappr.getCardrepltime() - dkmc.getSbdk1())/1000/60; gzsctime = Math.abs(Double.valueOf(time1.toString())); } KqglAssoDkmx.builder().id(dkmc.getId()).xbdk1(repaappr.getCardrepltime()).xbdk1jg(xbdk1jg).dktj2(1).gzsc(gzsctime).build().updateById(); } atttype = 2; results = xbdk1jg; } }else {//补卡当天无打卡记录时 KqglAssoDkmx pcd = KqglAssoDkmx.builder().userid(repaappr.getUserid()).data(cardrepltime).qyid(repaappr.getOrgcode()).dksj(start_time).ydkcs(2) .gzsc(0d).build(); if(repaappr.getCardreplperiod() == 1) {//上班 int sbdkjg = 0; if(isRange) { pcd.setSbdk1(repaappr.getCardrepltime()); pcd.setSbdk1jg(sbdkjg); pcd.setDktj1(1); if (!pcd.insert()) { throw new CustomException("打卡明细-新增异常-1"); } } atttype = 1; }else if(repaappr.getCardreplperiod() == 2) {//下班 int xbdk1jg = 0; if(isRange) { pcd.setXbdk1(repaappr.getCardrepltime()); pcd.setXbdk1jg(xbdk1jg); pcd.setDktj2(1); if (!pcd.insert()) { throw new CustomException("打卡明细-新增异常-1"); } } atttype = 2; } if(isRange) { dkmxid = pcd.getId(); }else { throw new CustomException("当前时间,没有考勤异常无需补卡"); } } //0:打卡无效:此记录已被更新 1:正常 2:异常 3:迟到 4:早退 5:补卡 6:请假 7:加班 8:调休 //9:管理员改为正常 10:管理员改为迟到 11:管理员改为早退 12:补卡通过/正常 13:补卡通过/迟到 14:补卡通过/早退 int status = 2; if((atttype)%2 > 0){ type = 1; if(results == 0) { status = 12; }else { status = 13; } }else { type = 2; if(results == 0) { status = 12; }else { status = 14; } } Long startDate = DateUtil.getStartTime(0,DateUtil.getStringTime(cardrepltime,"yyyy-MM-dd")).getTime(); String attdate_ = new SimpleDateFormat("yy-MM-dd").format(Double.valueOf(startDate));//转换打卡时间格式 //attime 应打卡时间 double gzsc = 0; //long rest_time = 0; /*if(shif.getStartTime() != null && !("").equals(shif.getStartTime()) && shif.getEndTime() != null && !("").equals(shif.getEndTime())) { long kaishixiuxi = Long.valueOf(ClockInTool.dateToStamp(cardrepltime + " " +shif.getStartTime()+":00")); long jieshuxiuxi = Long.valueOf(ClockInTool.dateToStamp(cardrepltime + " " +shif.getEndTime()+":00")); rest_time = (jieshuxiuxi - kaishixiuxi)/1000/60;//休息时间 }*/ //请假时长 //KqglAssoRelationSummary qjsc = kqglassorelationsummarymapper.Businessdayclockin(repaappr.getUserid(), 2, cardrepltime, repaappr.getOrgcode()); //计算工作时长 KqglAssoDkmx dkgzsc = KqglAssoDkmx.builder().id(dkmxid).build().selectById(); if(dkgzsc.getYdkcs() == 2 || dkgzsc.getYdkcs() == 4 || dkgzsc.getYdkcs() == 6) { if(dkgzsc.getSbdk1() != null && dkgzsc.getXbdk1() != null) { gzsc = gzsc + (dkgzsc.getXbdk1() - dkgzsc.getSbdk1())/1000/60; } } if(dkgzsc.getYdkcs() == 4 || dkgzsc.getYdkcs() == 6) { if(dkgzsc.getSbdk2() != null && dkgzsc.getXbdk2() != null) { gzsc = gzsc + (dkgzsc.getXbdk2() - dkgzsc.getSbdk2())/1000/60; } } if(dkgzsc.getYdkcs() == 6) { if(dkgzsc.getSbdk3() != null && dkgzsc.getXbdk3() != null) { gzsc = gzsc + (dkgzsc.getXbdk3() - dkgzsc.getSbdk3())/1000/60; } } //gzsc = gzsc - rest_time - qjsc.getDuration(); KqglAssoDkmx.builder().id(dkmxid).gzsc(gzsc).build().updateById(); KqglAssoDkjl pre = KqglAssoDkjl.builder().dktime(repaappr.getCardrepltime()).results(results).userId(repaappr.getUserid()).type(type).status(status).sort(atttype) .cardType(0).qyid(repaappr.getOrgcode()).attdate(attdate_+" "+ClockInTool.dateToWeek2(cardrepltime)).attime(repaappr.getCardrepltime()).dkmxid(dkmxid).bcid(shifid).remarks("审批补卡通过打卡").punchmode(0) .punchequipment("").commentary("成功打卡").build(); if (!pre.insert()) { throw new CustomException("打卡记录-新增异常-2"); } } //} } } catch (ParseException e) { e.printStackTrace(); } return true; } public boolean verification_range(long punchstart,long punchend,long time_) { boolean isRange = true; String staputime = new SimpleDateFormat("yyyy-MM-dd HH:mm").format(punchstart);//应打卡开始时间 String entputime = new SimpleDateFormat("yyyy-MM-dd HH:mm").format(punchend);//应打卡结束时间 String DKputime = new SimpleDateFormat("yyyy-MM-dd HH:mm").format(time_);//打卡时间 boolean effectiveDate = ClockInTool.hourMinuteBetween(DKputime, staputime, entputime,"yyyy-MM-dd HH:mm"); if (!effectiveDate) { Logoutput("当前打卡时间不在范围内"); isRange = false; } return isRange; } @Autowired private KqglAssoPbmxMapper kqglassopbmxmapper; 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); } // Long startDate = DateUtil.getStartTime(0,DateUtil.getStringTime(str,"yyyy-MM-dd")).getTime(); // Long endDate = DateUtil.getnowEndTime(23,DateUtil.getStringTime(str,"yyyy-MM-dd")).getTime(); 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; } 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); } } @Value("${config-8timer.environmental-science}") public String environmental_science; public void Logoutput(String science) { if(!("pro").equals(environmental_science)) { System.out.println(science); }else { System.out.println(""); } } }