package cn.timer.api.controller.kqgl; 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.transaction.annotation.Transactional; import org.springframework.web.bind.annotation.PostMapping; import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.RequestParam; import org.springframework.web.bind.annotation.RestController; import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; import com.baomidou.mybatisplus.extension.conditions.query.LambdaQueryChainWrapper; import com.github.xiaoymin.knife4j.annotations.ApiOperationSupport; import cn.hutool.json.JSONObject; 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.KqglAssoKqj; import cn.timer.api.bean.kqmk.KqglAssoKqzdkfs; 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.yggl.YgglMainEmp; import cn.timer.api.config.exception.CustomException; import cn.timer.api.dao.kqmk.KqglAssoPbmxMapper; import cn.timer.api.dao.kqmk.KqglMainKqzMapper; import cn.timer.api.dao.yggl.YgglMainEmpMapper; import cn.timer.api.dto.kqmk.AttLateLate; import cn.timer.api.dto.kqmk.AttSchedule; import cn.timer.api.dto.kqmk.AttendanceCardListDto; import cn.timer.api.dto.kqmk.ClockCollectData; import cn.timer.api.dto.kqmk.KqglAssoPbmxDto; import cn.timer.api.utils.DateUtil; import cn.timer.api.utils.Result; import cn.timer.api.utils.ResultUtil; import io.swagger.annotations.Api; import io.swagger.annotations.ApiOperation; @Api(tags = "3.0[3]考勤打卡") @RestController @Transactional @RequestMapping(value = "/kqdk", produces = { "application/json", "multipart/form-data" }) public class ClockInController { @Autowired private KqglMainKqzMapper kqglmainkqzmapper; /** * 考勤打卡 * * @param json dev_id : 考勤机id user_id : 打卡用户id verify_mode : 打卡方式(1:指纹、20:人脸) * io_time : 打卡时间 * @return */ @PostMapping(value = "/punchclock") @ApiOperation(value = "1:考勤机打卡", httpMethod = "POST", notes = "接口发布说明") @ApiOperationSupport(order = 1) public Result<Object> punchclock(@RequestParam String json) throws Exception { JSONObject jsonArray = new JSONObject(json); String asDevId = jsonArray.get("dev_id").toString(); String asUserId = jsonArray.get("user_id").toString(); String asVerifyMode = jsonArray.get("verify_mode").toString(); String asIOMode = "0"; String sStdIoTime = jsonArray.get("io_time").toString(); KqglAssoKqj kqjdev = KqglAssoKqj.builder().build().selectOne(new QueryWrapper<KqglAssoKqj>().lambda().eq(KqglAssoKqj::getCode, asDevId)); if (kqjdev == null) return ResultUtil.error("考勤机不存在!"); // YgglMainEmp user = new LambdaQueryChainWrapper<YgglMainEmp>(ygglmainempmapper).eq(YgglMainEmp::getEmpNum, asUserId).eq(YgglMainEmp::getOrgCode, kqjdev.getQyid()).one(); YgglMainEmp user = YgglMainEmp.builder().build().selectOne(new QueryWrapper<YgglMainEmp>().lambda().eq(YgglMainEmp::getEmpNum, asUserId).eq(YgglMainEmp::getOrgCode, kqjdev.getQyid())); if(user != null) { int qyid = user.getOrgCode();//坏小孩【企业id】 int userid = user.getEmpNum();//用户id KqglMainKqz attgro = kqglmainkqzmapper.getAttendanceGroupInformationByUserid(userid,qyid); //考勤组信息 //pbfs;// 排班方式 1:固定排班;2:自由排班;3:自由工时 if(attgro != null) { List<KqglAssoKqzdkfs> kqjs = KqglAssoKqzdkfs.builder().build().selectList(new QueryWrapper<KqglAssoKqzdkfs>().lambda().eq(KqglAssoKqzdkfs::getKqzId, attgro.getId())); if(kqjs.size() > 0) { long time_ = DateUtil.getStringTime(sStdIoTime, "yyyy-MM-dd HH:mm:ss"); String putime = new SimpleDateFormat("yyyy-MM-dd").format(time_);//转换打卡时间格式 //打卡当天开始时间,打卡当天结束时间 Long startDate = DateUtil.getStartTime(0,DateUtil.getStringTime(putime,"yyyy-MM-dd")).getTime(); Long endDate = DateUtil.getnowEndTime(23,DateUtil.getStringTime(putime,"yyyy-MM-dd")).getTime(); int dkmx = 0; //查询打卡当天是否有记录 KqglAssoDkmx dkmc = KqglAssoDkmx.builder().build().selectOne(new QueryWrapper<KqglAssoDkmx>().lambda().eq(KqglAssoDkmx::getUserid, userid) .gt(KqglAssoDkmx::getDksj, startDate).lt(KqglAssoDkmx::getDksj, endDate)); AttendanceCardListDto attdate = MethodCall(qyid,userid,putime); ClockCollectData clockt = new ClockCollectData(); 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() > 0) { List<AttSchedule> ash = attdate.getAttsch(); int y = 0; clockt.setShifid(ash.get(y).getId()); 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(); } } long punchcardtime,punchstart,punchend = 0;//应打卡时间,应打卡开始时间,应打卡结束时间 int atttype = 0; if(dkmc == null) {//上班1 ****新增 punchcardtime = starttime1; punchstart = starttime1ks; punchend = starttime1js; atttype = 1; }else { if((!("").equals(dkmc.getSbdk1()) || dkmc.getSbdk1() != null) && (("").equals(dkmc.getXbdk1()) || dkmc.getXbdk1() == null)){ //下班1 punchcardtime = endtime1;punchstart = endtime1ks;punchend = endtime1js;atttype = 2; }else if((!("").equals(dkmc.getSbdk1()) || dkmc.getSbdk1() != null) && (!("").equals(dkmc.getXbdk1()) || dkmc.getXbdk1() != null) && (("").equals(dkmc.getSbdk2()) || dkmc.getSbdk2() == null)){ //上班2 punchcardtime = starttime2;punchstart = starttime2ks;punchend = starttime2js;atttype = 3; }else if((!("").equals(dkmc.getSbdk1()) || dkmc.getSbdk1() != null) && (!("").equals(dkmc.getXbdk1()) || dkmc.getXbdk1() != null) && (!("").equals(dkmc.getSbdk2()) || dkmc.getSbdk2() != null) && (("").equals(dkmc.getXbdk2()) || dkmc.getXbdk2() == null)){ //下班2 punchcardtime = endtime2;punchstart = endtime2ks;punchend = endtime2js;atttype = 4; }else if((!("").equals(dkmc.getSbdk1()) || dkmc.getSbdk1() != null) && (!("").equals(dkmc.getXbdk1()) || dkmc.getXbdk1() != null) && (!("").equals(dkmc.getSbdk2()) || dkmc.getSbdk2() != null) && (!("").equals(dkmc.getXbdk2()) || dkmc.getXbdk2() != null) && (("").equals(dkmc.getSbdk3()) || dkmc.getSbdk3() == null)){ //上班3 punchcardtime = starttime3;punchstart = starttime3ks;punchend = starttime3js;atttype = 5; }else if((!("").equals(dkmc.getSbdk1()) || dkmc.getSbdk1() != null) && (!("").equals(dkmc.getXbdk1()) || dkmc.getXbdk1() != null) && (!("").equals(dkmc.getSbdk2()) || dkmc.getSbdk2() != null) && (!("").equals(dkmc.getXbdk2()) || dkmc.getXbdk2() != null) && (!("").equals(dkmc.getSbdk3()) || dkmc.getSbdk3() != null) && (("").equals(dkmc.getXbdk3()) || dkmc.getXbdk3() == null)){ //下班3 punchcardtime = endtime3;punchstart = endtime3ks;punchend = endtime3js;atttype = 6; }else { punchcardtime = 0;punchstart = 0;punchend = 0;atttype = 7; } } KqglAssoBcsz shif = KqglAssoBcsz.builder().build(); if(attdate.getAttsch().size() > 0 && clockt.getShifid() > 0){//有无班次 shif = shif.selectOne(new QueryWrapper<KqglAssoBcsz>().lambda().eq(KqglAssoBcsz::getId, clockt.getShifid())); } //打卡记录录入 -- 打卡是否有时间范围限制 boolean isRange = true; if(punchstart>0 && punchend>0) { String staputime = new SimpleDateFormat("HH:mm").format(punchstart);//应打卡开始时间 String entputime = new SimpleDateFormat("HH:mm").format(punchend);//应打卡结束时间 String DKputime = new SimpleDateFormat("HH:mm").format(time_);//打卡时间 boolean effectiveDate = ClockInTool.hourMinuteBetween(DKputime, staputime, entputime); if (!effectiveDate) { System.out.println("当前打卡时间不在范围内"); // 手动抛出异常 isRange = false; // throw new Exception(); } } if(isRange) { if(dkmc == null) {//上班1 ****新增 int sbdk1jg = 0; if(punchcardtime != 0){//有应打卡时间时 Long time = (time_ - punchcardtime)/1000/60; if(time > 0){sbdk1jg = Math.abs(Integer.valueOf(time.toString()));}//上班1打卡结果 } int ydkcs = 0; if(shif != null){ydkcs = shif.getSxbcs()*2;}//应打卡次数 KqglAssoDkmx pcd = KqglAssoDkmx.builder().userid(userid).data(putime).sbdk1(time_).sbdk1jg(sbdk1jg).ydkcs(ydkcs).qyid(qyid).dksj(startDate).build(); if (!pcd.insert()) { throw new CustomException("打卡明细-新增异常-1"); } dkmx = pcd.getId(); }else { //*****修改 dkmx = dkmc.getId(); if((!("").equals(dkmc.getSbdk1()) || dkmc.getSbdk1() != null) && (("").equals(dkmc.getXbdk1()) || dkmc.getXbdk1() == null)){//下班1 int xbdk1jg = 0; if(punchcardtime != 0){//有应打卡时间时 Long time = (time_ - punchcardtime)/1000/60; if(time > 0){}else{xbdk1jg = Math.abs(Integer.valueOf(time.toString()));}//上班1打卡结果 } double gzsc = 0; if(dkmc.getSbdk1() != null){ Long time = (time_ - dkmc.getSbdk1())/1000/60; gzsc = Math.abs(Double.valueOf(time.toString()));//只打一次卡时计算工作时长 } KqglAssoDkmx.builder().id(dkmc.getId()).xbdk1(time_).xbdk1jg(xbdk1jg).gzsc(gzsc).build().updateById(); }else if((!("").equals(dkmc.getSbdk1()) || dkmc.getSbdk1() != null) && (!("").equals(dkmc.getXbdk1()) || dkmc.getXbdk1() != null) && (("").equals(dkmc.getSbdk2()) || dkmc.getSbdk2() == null)){//上班2 int sbdk2jg = 0; if(punchcardtime != 0){//有应打卡时间时 Long time = (time_ - punchcardtime)/1000/60; if(time > 0){sbdk2jg = Math.abs(Integer.valueOf(time.toString()));} } KqglAssoDkmx.builder().id(dkmc.getId()).sbdk2(time_).sbdk2jg(sbdk2jg).build().updateById(); }else if((!("").equals(dkmc.getSbdk1()) || dkmc.getSbdk1() != null) && (!("").equals(dkmc.getXbdk1()) || dkmc.getXbdk1() != null) && (!("").equals(dkmc.getSbdk2()) || dkmc.getSbdk2() != null) && (("").equals(dkmc.getXbdk2()) || dkmc.getXbdk2() == null)){//下班2 int xbdk2jg = 0; if(punchcardtime != 0){//有应打卡时间时 Long time = (time_ - punchcardtime)/1000/60; if(time > 0){}else{xbdk2jg = Math.abs(Integer.valueOf(time.toString()));} } //班次为4次时,计算工作时长 double worktime = 0; if(dkmc.getSbdk2() != null){ Long time = (time_ - dkmc.getSbdk2())/1000/60; BigDecimal om = new BigDecimal(dkmc.getGzsc()); BigDecimal on = new BigDecimal(time); worktime = Math.abs(om.add(on).doubleValue()); } KqglAssoDkmx.builder().id(dkmc.getId()).xbdk2(time_).xbdk2jg(xbdk2jg).gzsc(worktime).build().updateById(); }else if((!("").equals(dkmc.getSbdk1()) || dkmc.getSbdk1() != null) && (!("").equals(dkmc.getXbdk1()) || dkmc.getXbdk1() != null) && (!("").equals(dkmc.getSbdk2()) || dkmc.getSbdk2() != null) && (!("").equals(dkmc.getXbdk2()) || dkmc.getXbdk2() != null) && (("").equals(dkmc.getSbdk3()) || dkmc.getSbdk3() == null)){//上班3 int sbdk3jg = 0; if(punchcardtime != 0){//有应打卡时间时 Long time = (time_ - punchcardtime)/1000/60; if(time > 0){sbdk3jg = Math.abs(Integer.valueOf(time.toString()));} } KqglAssoDkmx.builder().id(dkmc.getId()).sbdk3(time_).sbdk3jg(sbdk3jg).build().updateById(); }else if((!("").equals(dkmc.getSbdk1()) || dkmc.getSbdk1() != null) && (!("").equals(dkmc.getXbdk1()) || dkmc.getXbdk1() != null) && (!("").equals(dkmc.getSbdk2()) || dkmc.getSbdk2() != null) && (!("").equals(dkmc.getXbdk2()) || dkmc.getXbdk2() != null) && (!("").equals(dkmc.getSbdk3()) || dkmc.getSbdk3() != null) && (("").equals(dkmc.getXbdk3()) || dkmc.getXbdk3() == null)){//下班3 int xbdk3jg = 0; if(punchcardtime != 0){//有应打卡时间时 Long time = (time_ - punchcardtime)/1000/60; if(time > 0){}else{xbdk3jg = Math.abs(Integer.valueOf(time.toString()));} } //班次为6次时,计算工作时长 double worktime = 0; if(dkmc.getSbdk3() != null){ Long time = (time_ - dkmc.getSbdk3())/1000/60; BigDecimal om = new BigDecimal(dkmc.getGzsc());//第二次 BigDecimal on = new BigDecimal(time); worktime = Math.abs(om.add(on).doubleValue()); } KqglAssoDkmx.builder().id(dkmc.getId()).xbdk3(time_).xbdk3jg(xbdk3jg).gzsc(worktime).build().updateById(); } if(atttype <= 6){ KqglAssoDkmx.builder().id(dkmc.getId()).build().updateById(); } } } //原始打卡记录数据录入************************************************************************************************************************************** int results = 0; Long time = (time_ - punchcardtime)/1000/60; if(punchcardtime != 0){ if(isRange) { if((atttype)%2 > 0){//上班 if(time > 0){results = Integer.valueOf(time.toString());}// 打卡结果 }else{//下班 if(time > 0){}else{results = Math.abs(Integer.valueOf(time.toString()));}// 打卡结果 } } } int type,status = 0; if((atttype)%2 > 0){ type = 1;// 类型(类型 0:无排班打卡 1:上班 2:下班) punchcardtime == 0:无班次打卡 if(punchcardtime == 0){status = 1;}else{ if(isRange) {// 状态(0:打卡无效:此记录已被更新 1:正常 2:异常 3:迟到 4:早退 5:补卡 6:请假 7:加班 8:调休) if(time > 0){status = 3;}else if(results == 0){status = 1;} }else {status = 2;} } }else{ type = 2;// 类型(类型 0:无排班打卡 1:上班 2:下班) if(punchcardtime == 0){status = 1;}else{ if(isRange) { if(time < 0){status = 4;}else if(results == 0){status = 1;} }else {status = 2;} } } String attdate_ = new SimpleDateFormat("yy-MM-dd").format(Double.valueOf(startDate));//转换打卡时间格式 long attime; if(punchcardtime == 0 && !isRange){attime = new Date().getTime();}else{attime = punchcardtime;}// 考勤时间(应打卡时间) String remarks = ""; if(("1").equals(asVerifyMode)) {remarks = "考勤机指纹打卡";}else if(("20").equals(asVerifyMode)) {remarks = "考勤机人脸打卡";} //cardtype--1:GPS,2:WIFI,3:考勤机 KqglAssoDkjl pre = KqglAssoDkjl.builder().dktime(time_).results(results).userId(userid).type(type).status(status).sort(atttype) .cardType(3).qyid(qyid).attdate(attdate_+" "+ClockInTool.dateToWeek2(putime)).attime(attime).dkmxid(dkmx).bcid(clockt.getShifid()).remarks(remarks).punchmode(Integer.valueOf(asVerifyMode)) .punchequipment(asDevId).build(); if (!pre.insert()) { throw new CustomException("打卡记录-新增异常-2"); } } }else { return ResultUtil.error("打卡失败!,未加入考勤组!"); } }else { return ResultUtil.error("打卡失败!,用户不存在!"); } return ResultUtil.data(null, "打卡成功"); } @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){ 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+" "+ClockInTool.dealDateFormat(shiftm.getSbdk1(),2)+":00"))) .starttime(("").equals(shiftm.getSbqjks1()) ? 0 : Long.valueOf(ClockInTool.dateToStamp(str+" "+ClockInTool.dealDateFormat(shiftm.getSbqjks1(),2)+":00"))) .endtime(("").equals(shiftm.getSbqjjs1()) ? 0 : Long.valueOf(ClockInTool.dateToStamp(str+" "+ClockInTool.dealDateFormat(shiftm.getSbqjjs1(),2)+":00"))).build(); atts.add(as); }else{ AttSchedule as = AttSchedule.builder().id(shiftm.getId()).sort(2).time(Long.valueOf(ClockInTool.dateToStamp(str+" "+ClockInTool.dealDateFormat(shiftm.getXbdk1(),2)+":00"))) .starttime(("").equals(shiftm.getXbqjks1()) ? 0 : Long.valueOf(ClockInTool.dateToStamp(str+" "+ClockInTool.dealDateFormat(shiftm.getXbqjks1(),2)+":00"))) .endtime(("").equals(shiftm.getXbqjjs1()) ? 0 : Long.valueOf(ClockInTool.dateToStamp(str+" "+ClockInTool.dealDateFormat(shiftm.getXbqjjs1(),2)+":00"))).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){ AttSchedule as = AttSchedule.builder().id(shiftm.getId()).sort(3).time(Long.valueOf(ClockInTool.dateToStamp(str+" "+ClockInTool.dealDateFormat(shiftm.getSbdk2(),2)+":00"))) .starttime(("").equals(shiftm.getSbqjks2()) ? 0 : Long.valueOf(ClockInTool.dateToStamp(str+" "+ClockInTool.dealDateFormat(shiftm.getSbqjks2(),2)+":00"))) .endtime(("").equals(shiftm.getSbqjjs2()) ? 0 : Long.valueOf(ClockInTool.dateToStamp(str+" "+ClockInTool.dealDateFormat(shiftm.getSbqjjs2(),2)+":00"))).build(); atts.add(as); }else{ AttSchedule as = AttSchedule.builder().id(shiftm.getId()).sort(4).time(Long.valueOf(ClockInTool.dateToStamp(str+" "+ClockInTool.dealDateFormat(shiftm.getXbdk2(),2)+":00"))) .starttime(("").equals(shiftm.getXbqjks2()) ? 0 : Long.valueOf(ClockInTool.dateToStamp(str+" "+ClockInTool.dealDateFormat(shiftm.getXbqjks2(),2)+":00"))) .endtime(("").equals(shiftm.getXbqjjs2()) ? 0 : Long.valueOf(ClockInTool.dateToStamp(str+" "+ClockInTool.dealDateFormat(shiftm.getXbqjjs2(),2)+":00"))).build(); atts.add(as); } } attcar.setAttsch(atts); } if(shiftm.getSxbcs() == 3){//3次上下班 for(int o=0;o<2;o++){ if(o==0){ AttSchedule as = AttSchedule.builder().id(shiftm.getId()).sort(5).time(Long.valueOf(ClockInTool.dateToStamp(str+" "+ClockInTool.dealDateFormat(shiftm.getSbdk3(),2)+":00"))) .starttime(("").equals(shiftm.getSbqjks3()) ? 0 : Long.valueOf(ClockInTool.dateToStamp(str+" "+ClockInTool.dealDateFormat(shiftm.getSbqjks3(),2)+":00"))) .endtime(("").equals(shiftm.getSbqjjs3()) ? 0 : Long.valueOf(ClockInTool.dateToStamp(str+" "+ClockInTool.dealDateFormat(shiftm.getSbqjjs3(),2)+":00"))).build(); atts.add(as); }else{ AttSchedule as = AttSchedule.builder().id(shiftm.getId()).sort(6).time(Long.valueOf(ClockInTool.dateToStamp(str+" "+ClockInTool.dealDateFormat(shiftm.getXbdk3(),2)+":00"))) .starttime(("").equals(shiftm.getXbqjks3()) ? 0 : Long.valueOf(ClockInTool.dateToStamp(str+" "+ClockInTool.dealDateFormat(shiftm.getXbqjks3(),2)+":00"))) .endtime(("").equals(shiftm.getXbqjjs3()) ? 0 : Long.valueOf(ClockInTool.dateToStamp(str+" "+ClockInTool.dealDateFormat(shiftm.getXbqjjs3(),2)+":00"))).build(); atts.add(as); } } attcar.setAttsch(atts); } } }