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.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.KqglAssoBcszMapper; import cn.timer.api.dao.kqmk.KqglAssoDkjlMapper; import cn.timer.api.dao.kqmk.KqglAssoDkmxMapper; import cn.timer.api.dao.kqmk.KqglAssoPbmxMapper; import cn.timer.api.dao.kqmk.KqglMainKqzMapper; 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; //打卡明细表 @Autowired private KqglAssoDkmxMapper kqglassodkmxmapper; @Autowired private KqglAssoDkjlMapper kqglassodkjlmapper; @Autowired private KqglAssoBcszMapper kqglassobcszmapper; SimpleDateFormat sdf1 = new SimpleDateFormat("yyyy-MM-dd"); SimpleDateFormat sdf2 = new SimpleDateFormat("EEE"); SimpleDateFormat df1 = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss"); /** * 考勤打卡 * * @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 { String current_time = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss").format(new Date()); String current = new SimpleDateFormat("yyyy-MM-dd").format(new Date()); String yesterday = ClockInTool.requires_extra_times(current,-1,3,1);//前一天 Long startDateyesterday = DateUtil.getStartTime(0,DateUtil.getStringTime(yesterday,"yyyy-MM-dd")).getTime(); Long endDateyesterday = DateUtil.getnowEndTime(23,DateUtil.getStringTime(yesterday,"yyyy-MM-dd")).getTime(); Long attendance_date = 0l;//考勤日期 String toweek = ""; String msg = "未知错误,请联系管理员"; int sbyf = 1;//0:失败;1:成功 JSONObject jsonArray = new JSONObject(json); String asDevId = jsonArray.get("dev_id").toString();//考勤机编码 String asUserId = jsonArray.get("user_id").toString();//打卡用户id String asVerifyMode = jsonArray.get("verify_mode").toString();//考勤机打卡方式(1:指纹;20:人脸;40:掌纹;60:密码(猜的^v^)) 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 = YgglMainEmp.builder().build().selectOne(new QueryWrapper<YgglMainEmp>().lambda().eq(YgglMainEmp::getEmpNum, asUserId).eq(YgglMainEmp::getOrgCode, kqjdev.getQyid())); if(user != null) { int qyid = user.getOrgCode(); int userid = user.getEmpNum(); KqglMainKqz attgro = kqglmainkqzmapper.getAttendanceGroupInformationByUserid(userid,qyid); //考勤组信息 //pbfs;// 排班方式 1:固定排班;2:自由排班;3:自由工时 /*******/ 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; int shifid = 0; long punchcardtime = 0,punchstart,punchend = 0;//应打卡时间,应打卡开始时间,应打卡结束时间 boolean isRange = true; int atttype = 0; ClockCollectData clockt = new ClockCollectData(); //putime: 根据日期 得到打卡所需的详细信息 AttendanceCardListDto attdate = MethodCall(qyid,userid,putime); /*******/ if(attgro != null) {//判断考勤组是否存在 List<KqglAssoKqzdkfs> kqjs = KqglAssoKqzdkfs.builder().build().selectList(new QueryWrapper<KqglAssoKqzdkfs>().lambda().eq(KqglAssoKqzdkfs::getKqzId, attgro.getId())); if(kqjs.size() > 0) { /** * 当考勤组为“固定排班”和“自定义排班”时 方可使用 */ if(attdate.getAttgrouptype() != 3) { //查询打卡当天是否有记录********************************** KqglAssoDkmx dkmc = KqglAssoDkmx.builder().build(); //putime: 根据日期 得到打卡所需的详细信息 // AttendanceCardListDto attdate = MethodCall(qyid,userid,putime); String dakariqi = new SimpleDateFormat("yy-MM-dd").format(Double.valueOf(startDateyesterday))+" "+ClockInTool.dateToWeek2(yesterday); //检查昨日的班次是否存在次日打卡 KqglAssoDkjl balan = kqglassodkjlmapper.selectOne(new QueryWrapper<KqglAssoDkjl>().lambda().eq(KqglAssoDkjl::getUserId, userid).eq(KqglAssoDkjl::getAttdate, dakariqi).ne(KqglAssoDkjl::getBcid, 0).orderByDesc(KqglAssoDkjl :: getSort).last("LIMIT 1")); boolean dnck = false; boolean crdk = false;//当次打卡是否存在次日打卡 if(balan != null) {//前一天是否打过卡 去班次id查询是否存在次日打卡 //班次信息 KqglAssoBcsz shif = kqglassobcszmapper.selectOne(new QueryWrapper<KqglAssoBcsz>().lambda().eq(KqglAssoBcsz::getId, balan.getBcid())); int dkcs = shif.getSxbcs()*2; List<AttSchedule> ashss = attdate.getAttsch();//获取今天应打卡时间 // boolean dnck = false; if(ashss.size() > 0) { Date sd1=df1.parse(ClockInTool.stampToDate(String.valueOf(ashss.get(0).getTime())));//当天应打的首次上班卡时间 Date sd2=df1.parse(current_time);//当前时间 if(sd1.after(sd2)) { dnck = true; } } int isXbdk1Cr = shif.getIsXbdk1Cr();//下班1是否次日(0:否;1:是) int isSbdk2Cr = shif.getIsSbdk2Cr();//上班2是否次日(0:否;1:是) int isXbdk2Cr = shif.getIsXbdk2Cr();//下班2是否次日(0:否;1:是) int isSbdk3Cr = shif.getIsSbdk3Cr();//上班3是否次日(0:否;1:是) int isXbdk3Cr = shif.getIsXbdk3Cr();//下班3是否次日(0:否;1:是) // boolean crdk = false;//当次打卡是否存在次日打卡 if(balan.getSort() < dkcs) { if(balan.getSort()+1 == 2 && dkcs == 2) { if(isXbdk1Cr > 0) {//次日 crdk = true; } } if(balan.getSort()+1 == 3 && dkcs == 4) { if(isSbdk2Cr > 0) {//次日 crdk = true; } } if(balan.getSort()+1 == 4 && dkcs == 4) { if(isXbdk2Cr > 0) {//次日 crdk = true; } } if(balan.getSort()+1 == 5 && dkcs == 6) { if(isSbdk3Cr > 0) {//次日 crdk = true; } } if(balan.getSort()+1 == 6 && dkcs == 6) { if(isXbdk3Cr > 0) {//次日 crdk = true; } } } }else { //无记录的话就找昨天的数据 // AttendanceCardListDto attdate1 = MethodCall(qyid,userid,yesterday); } if(crdk && dnck) { dkmc = KqglAssoDkmx.builder().build().selectOne(new QueryWrapper<KqglAssoDkmx>().lambda().eq(KqglAssoDkmx::getUserid, userid) .ge(KqglAssoDkmx::getDksj, startDateyesterday).le(KqglAssoDkmx::getDksj, endDateyesterday)); attdate = MethodCall(qyid,userid,yesterday); attendance_date = startDateyesterday; toweek = yesterday; }else { dkmc = KqglAssoDkmx.builder().build().selectOne(new QueryWrapper<KqglAssoDkmx>().lambda().eq(KqglAssoDkmx::getUserid, userid) .ge(KqglAssoDkmx::getDksj, startDate).le(KqglAssoDkmx::getDksj, endDate)); // attdate = MethodCall(qyid,userid,putime); attendance_date = startDate; toweek = putime; } //putime: 根据日期 得到打卡所需的详细信息 // AttendanceCardListDto attdate = MethodCall(qyid,userid,putime); // ClockCollectData clockt = new ClockCollectData(); if(EmptyUtil.isEmpty(attdate.getAttsch())) { msg = "当前未排班"; sbyf = 0; }else { 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()); shifid = ash.get(y).getId();//班次id 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; } } if(clockt.getShifid() != 0) { 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,"HH:mm"); if (!effectiveDate) { System.out.println("当前打卡时间不在范围内"); // 手动抛出异常 isRange = false; // throw new Exception(); } } if(isRange) { int yzcd = shif.getYzcdfzs();//严重迟到分钟数 int kgcdfzs = shif.getKgcdfzs();//旷工迟到分钟数 if(dkmc == null) {//上班1 ****新增 int sbdk1jg = 0,yzcdsc = 0,yzcdcs = 0,kgcdcs = 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;}//应打卡次数 if(sbdk1jg > yzcd) { yzcdcs++; yzcdsc = sbdk1jg - yzcd; } if(sbdk1jg > kgcdfzs) {kgcdcs++;} KqglAssoDkmx pcd = KqglAssoDkmx.builder().userid(userid).data(putime).sbdk1(time_).sbdk1jg(sbdk1jg).ydkcs(ydkcs).qyid(qyid).dksj(startDate).yzcdcs(yzcdcs).yzcdsc(Double.valueOf(yzcdsc)).kgcdfzs(kgcdcs).build(); if (!pcd.insert()) { throw new CustomException("打卡明细-新增异常-1"); } dkmx = pcd.getId(); }else { //*****修改 dkmx = dkmc.getId(); KqglAssoDkmx pcd = KqglAssoDkmx.builder().build(); if((!("").equals(dkmc.getSbdk1()) || dkmc.getSbdk1() != null) && (("").equals(dkmc.getXbdk1()) || dkmc.getXbdk1() == null)){//下班1 pcd.setId(dkmc.getId()); pcd.setXbdk1(time_);//下班1打卡时间 if(punchcardtime != 0){//有应打卡时间时 Long time = (time_ - punchcardtime)/1000/60; if(time > 0){ pcd.setXbdk1jg(0);// 打卡结果 }else{ pcd.setXbdk1jg(Math.abs(Integer.valueOf(time.toString())));//上班1打卡结果 } } if(dkmc.getSbdk1() != null){ Long time = (time_ - dkmc.getSbdk1())/1000/60; pcd.setGzsc(Math.abs(Double.valueOf(time.toString())));//只打一次卡时计算工作时长 } kqglassodkmxmapper.updateByPrimaryKeySelective(pcd);//修改打卡记录 }else if((!("").equals(dkmc.getSbdk1()) || dkmc.getSbdk1() != null) && (!("").equals(dkmc.getXbdk1()) || dkmc.getXbdk1() != null) && (("").equals(dkmc.getSbdk2()) || dkmc.getSbdk2() == null)){//上班2 int sbdk2jg = 0,yzcdsc = 0,yzcdcs = 0,kgcdcs = 0; if(punchcardtime != 0){//有应打卡时间时 Long time = (time_ - punchcardtime)/1000/60; if(time > 0){sbdk2jg = Math.abs(Integer.valueOf(time.toString()));} } if(sbdk2jg > yzcd) { yzcdcs = dkmc.getYzcdcs()+1; yzcdsc = sbdk2jg - yzcd; } if(sbdk2jg > kgcdfzs) {kgcdcs++;} pcd.setId(dkmc.getId()); pcd.setSbdk2(time_);//上班1打卡时间 pcd.setSbdk2jg(sbdk2jg); pcd.setYzcdcs(yzcdcs); pcd.setYzcdsc(Double.valueOf(yzcdsc)); pcd.setKgcdfzs(kgcdcs); kqglassodkmxmapper.updateByPrimaryKeySelective(pcd);//修改打卡记录 }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 pcd.setId(dkmc.getId()); pcd.setXbdk2(time_);//下班1打卡时间 if(punchcardtime != 0){//有应打卡时间时 Long time = (time_ - punchcardtime)/1000/60; if(time > 0){ pcd.setXbdk2jg(0);// 打卡结果 }else{ pcd.setXbdk2jg(Math.abs(Integer.valueOf(time.toString()))); } } //班次为4次时,计算工作时长 if(dkmc.getSbdk2() != null){ Long time = (time_ - dkmc.getSbdk2())/1000/60; BigDecimal om = new BigDecimal(dkmc.getGzsc()); BigDecimal on = new BigDecimal(time); double worktime = Math.abs(om.add(on).doubleValue()); pcd.setGzsc(worktime); } kqglassodkmxmapper.updateByPrimaryKeySelective(pcd);//修改打卡记录 }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,yzcdsc = 0,yzcdcs = 0,kgcdcs = 0; if(punchcardtime != 0){//有应打卡时间时 Long time = (time_ - punchcardtime)/1000/60; if(time > 0){sbdk3jg = Math.abs(Integer.valueOf(time.toString()));} } if(sbdk3jg > yzcd) { yzcdcs = dkmc.getYzcdcs()+1; yzcdsc = sbdk3jg - yzcd; } if(sbdk3jg > kgcdfzs) {kgcdcs++;} pcd.setId(dkmc.getId()); pcd.setSbdk3(time_);//上班1打卡时间 pcd.setSbdk3jg(sbdk3jg); pcd.setYzcdcs(yzcdcs); pcd.setYzcdsc(Double.valueOf(yzcdsc)); pcd.setKgcdfzs(kgcdcs); kqglassodkmxmapper.updateByPrimaryKeySelective(pcd);//修改打卡记录 }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 pcd.setId(dkmc.getId()); pcd.setXbdk3(time_);//下班1打卡时间 if(punchcardtime != 0){//有应打卡时间时 Long time = (time_ - punchcardtime)/1000/60; if(time > 0){ pcd.setXbdk3jg(0);// 打卡结果 }else{ pcd.setXbdk3jg(Math.abs(Integer.valueOf(time.toString()))); } } //班次为6次时,计算工作时长 if(dkmc.getSbdk3() != null){ Long time = (time_ - dkmc.getSbdk3())/1000/60; BigDecimal om = new BigDecimal(dkmc.getGzsc());//第二次 BigDecimal on = new BigDecimal(time); double worktime = Math.abs(om.add(on).doubleValue()); pcd.setGzsc(worktime); } } pcd.setId(dkmc.getId()); if(atttype <= 6){ int update = kqglassodkmxmapper.updateByPrimaryKeySelective(pcd);//修改打卡记录 } } }else { msg = "当前打卡时间不在范围内"; sbyf = 0; } }else { msg = "当前是休息时间"; sbyf = 0; } } }else { //自由工时打卡 Long stapclotime = attdate.getStapclotime();// 今天考勤 自由排班开始时间 int canpunchworkdate = Integer.valueOf(String.valueOf(attdate.getCanpunchworkdate()).replaceAll("(\\d+)(?:(\\.\\d*[^0])|\\.)0*", "$1$2"));// 上班打卡后多久大下班卡 KqglAssoDkmx zydkmc = KqglAssoDkmx.builder().build(); Date sd1=df1.parse(ClockInTool.stampToDate(String.valueOf(stapclotime)));//应打卡时间 2020-06-10 18:30:00 Date sd2=df1.parse(current_time);//当前时间 2020-06-10 16:06:58 if(sd1.after(sd2)) {//为true时 打的是昨天的卡 zydkmc = KqglAssoDkmx.builder().build().selectOne(new QueryWrapper<KqglAssoDkmx>().lambda().eq(KqglAssoDkmx::getUserid, userid) .ge(KqglAssoDkmx::getDksj, startDateyesterday).le(KqglAssoDkmx::getDksj, endDateyesterday)); attendance_date = startDateyesterday; toweek = yesterday; }else { zydkmc = KqglAssoDkmx.builder().build().selectOne(new QueryWrapper<KqglAssoDkmx>().lambda().eq(KqglAssoDkmx::getUserid, userid) .ge(KqglAssoDkmx::getDksj, startDate).le(KqglAssoDkmx::getDksj, endDate)); attendance_date = startDate; toweek = putime; } if(zydkmc == null) {//新增 KqglAssoDkmx pcd = KqglAssoDkmx.builder().build(); if(sd1.after(sd2)) { pcd = KqglAssoDkmx.builder().userid(userid).data(yesterday).sbdk1(time_).sbdk1jg(0).ydkcs(0).qyid(qyid).dksj(startDateyesterday).yzcdcs(0).yzcdsc(Double.valueOf(0)).kgcdfzs(0).build(); }else { pcd = KqglAssoDkmx.builder().userid(userid).data(putime).sbdk1(time_).sbdk1jg(0).ydkcs(0).qyid(qyid).dksj(startDate).yzcdcs(0).yzcdsc(Double.valueOf(0)).kgcdfzs(0).build(); } // KqglAssoDkmx pcd = KqglAssoDkmx.builder().userid(userid).data(putime).sbdk1(time_).sbdk1jg(0).ydkcs(0).qyid(qyid).dksj(startDate).yzcdcs(0).yzcdsc(Double.valueOf(0)).kgcdfzs(0).build(); if (!pcd.insert()) { throw new CustomException("打卡明细-新增异常-1"); } dkmx = pcd.getId(); atttype = 1; }else {//修改 dkmx = zydkmc.getId(); KqglAssoDkmx zypcd = KqglAssoDkmx.builder().build(); if((!("").equals(zydkmc.getSbdk1()) || zydkmc.getSbdk1() != null) && (("").equals(zydkmc.getXbdk1()) || zydkmc.getXbdk1() == null)){//下班1 String clock_time = ClockInTool.requires_extra_times(ClockInTool.stampToDate(String.valueOf(zydkmc.getSbdk1())),canpunchworkdate,5,2); Date zysd1=df1.parse(clock_time);//上班打卡后多久大下班卡的时间 Date zysd2=df1.parse(current_time);//当前时间 if(zysd1.after(zysd2)) {//当zysd1大于zysd2时,返回TRUE,当小于等于时,返回false; msg = "自由工时:上班打卡后"+canpunchworkdate+"小时后,才可打下班卡"; sbyf = 0; }else { zypcd.setId(zydkmc.getId()); zypcd.setXbdk1(time_);//下班1打卡时间 if(zydkmc.getSbdk1() != null){ Long time = (time_ - zydkmc.getSbdk1())/1000/60; zypcd.setGzsc(Math.abs(Double.valueOf(time.toString())));//只打一次卡时计算工作时长 } kqglassodkmxmapper.updateByPrimaryKeySelective(zypcd);//修改打卡记录 } atttype = 2; }else if((!("").equals(zydkmc.getSbdk1()) || zydkmc.getSbdk1() != null) && (!("").equals(zydkmc.getXbdk1()) || zydkmc.getXbdk1() != null) && (("").equals(zydkmc.getSbdk2()) || zydkmc.getSbdk2() == null)){//上班2 zypcd.setId(zydkmc.getId()); zypcd.setSbdk2(time_);//上班1打卡时间 kqglassodkmxmapper.updateByPrimaryKeySelective(zypcd);//修改打卡记录 atttype = 3; }else if((!("").equals(zydkmc.getSbdk1()) || zydkmc.getSbdk1() != null) && (!("").equals(zydkmc.getXbdk1()) || zydkmc.getXbdk1() != null) && (!("").equals(zydkmc.getSbdk2()) || zydkmc.getSbdk2() != null) && (("").equals(zydkmc.getXbdk2()) || zydkmc.getXbdk2() == null)){//下班2 String clock_time = ClockInTool.requires_extra_times(ClockInTool.stampToDate(String.valueOf(zydkmc.getSbdk2())),canpunchworkdate,5,2); Date zysd1=df1.parse(clock_time);//上班打卡后多久大下班卡的时间 Date zysd2=df1.parse(current_time);//当前时间 if(zysd1.after(zysd2)) {//当zysd1大于zysd2时,返回TRUE,当小于等于时,返回false; msg = "自由工时:上班打卡后"+canpunchworkdate+"小时后,才可打下班卡"; sbyf = 0; }else { zypcd.setId(zydkmc.getId()); zypcd.setXbdk2(time_);//下班1打卡时间 //班次为4次时,计算工作时长 if(zydkmc.getSbdk2() != null){ Long time = (time_ - zydkmc.getSbdk2())/1000/60; BigDecimal om = new BigDecimal(zydkmc.getGzsc()); BigDecimal on = new BigDecimal(time); double worktime = Math.abs(om.add(on).doubleValue()); zypcd.setGzsc(worktime); } kqglassodkmxmapper.updateByPrimaryKeySelective(zypcd);//修改打卡记录 } atttype = 4; }else if((!("").equals(zydkmc.getSbdk1()) || zydkmc.getSbdk1() != null) && (!("").equals(zydkmc.getXbdk1()) || zydkmc.getXbdk1() != null) && (!("").equals(zydkmc.getSbdk2()) || zydkmc.getSbdk2() != null) && (!("").equals(zydkmc.getXbdk2()) || zydkmc.getXbdk2() != null) && (("").equals(zydkmc.getSbdk3()) || zydkmc.getSbdk3() == null)){//上班3 zypcd.setId(zydkmc.getId()); zypcd.setSbdk3(time_);//上班1打卡时间 kqglassodkmxmapper.updateByPrimaryKeySelective(zypcd);//修改打卡记录 atttype = 5; }else if((!("").equals(zydkmc.getSbdk1()) || zydkmc.getSbdk1() != null) && (!("").equals(zydkmc.getXbdk1()) || zydkmc.getXbdk1() != null) && (!("").equals(zydkmc.getSbdk2()) || zydkmc.getSbdk2() != null) && (!("").equals(zydkmc.getXbdk2()) || zydkmc.getXbdk2() != null) && (!("").equals(zydkmc.getSbdk3()) || zydkmc.getSbdk3() != null) && (("").equals(zydkmc.getXbdk3()) || zydkmc.getXbdk3() == null)){//下班3 String clock_time = ClockInTool.requires_extra_times(ClockInTool.stampToDate(String.valueOf(zydkmc.getSbdk3())),canpunchworkdate,5,2); Date zysd1=df1.parse(clock_time);//上班打卡后多久大下班卡的时间 Date zysd2=df1.parse(current_time);//当前时间 if(zysd1.after(zysd2)) {//当zysd1大于zysd2时,返回TRUE,当小于等于时,返回false; msg = "自由工时:上班打卡后"+canpunchworkdate+"小时后,才可打下班卡"; sbyf = 0; }else { zypcd.setId(zydkmc.getId()); zypcd.setXbdk3(time_);//下班1打卡时间 //班次为6次时,计算工作时长 if(zydkmc.getSbdk3() != null){ Long time = (time_ - zydkmc.getSbdk3())/1000/60; BigDecimal om = new BigDecimal(zydkmc.getGzsc());//第二次 BigDecimal on = new BigDecimal(time); double worktime = Math.abs(om.add(on).doubleValue()); zypcd.setGzsc(worktime); } kqglassodkmxmapper.updateByPrimaryKeySelective(zypcd);//修改打卡记录 } atttype = 6; }else { atttype = 7; } } } }else { msg = "未检测到考勤机"; sbyf = 0; } /*************************************************************************************************************************************************************************************/ /*************************************************************************************************************************************************************************************/ // 原始打卡记录数据录入 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(attdate.getAttgrouptype() != 3) { if(EmptyUtil.isNotEmpty(attdate.getAttsch())) { if(punchcardtime == 0 && clockt.getShifid() != 0){ status = 1; }if(punchcardtime == 0 && clockt.getShifid() == 0) { status = 2; }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 if(EmptyUtil.isEmpty(attdate.getAttsch())) { status = 2; } }else { if(sbyf == 1) { status = 1; }else { status = 2; } } }else{ type = 2;// 类型(类型 0:无排班打卡 1:上班 2:下班) if(attdate.getAttgrouptype() != 3) { if(EmptyUtil.isNotEmpty(attdate.getAttsch())) { if(punchcardtime == 0 && clockt.getShifid() != 0){ status = 1; }if(punchcardtime == 0 && clockt.getShifid() == 0) { status = 2; }else{ if(isRange) { if(time < 0){ status = 4; }else if(results == 0){ status = 1; } }else { status = 2; } } }else if(EmptyUtil.isEmpty(attdate.getAttsch())) { status = 2; } }else { if(sbyf == 1) { status = 1; }else { status = 2; } } } String attdate_ = new SimpleDateFormat("yy-MM-dd").format(Double.valueOf(attendance_date));//转换打卡时间格式 long attime; // if(punchcardtime == 0 && !isRange){attime = new Date().getTime();}else{attime = punchcardtime;}// 考勤时间(应打卡时间) if(punchcardtime == 0){// 考勤时间(应打卡时间) attime = new Date().getTime(); }else{ attime = punchcardtime; } String remarks = ""; if(("1").equals(asVerifyMode)) { remarks = "考勤机指纹打卡"; }else if(("20").equals(asVerifyMode)) { remarks = "考勤机人脸打卡"; }else if(("40").equals(asVerifyMode)) { remarks = "考勤机掌纹打卡"; }else if(("60").equals(asVerifyMode)) { remarks = "考勤机密码打卡"; } String commentary = "未知"; if(sbyf == 1) { commentary = "打卡成功"; }else { commentary = msg; } //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(toweek)).attime(attime).dkmxid(dkmx).bcid(shifid).remarks(remarks).punchmode(Integer.valueOf(asVerifyMode)) .punchequipment(asDevId).commentary(commentary).build(); if (!pre.insert()) { throw new CustomException("打卡记录-新增异常-2"); } }else { msg="打卡失败!,未加入考勤组!"; sbyf = 0; } }else { return ResultUtil.error("打卡失败!,用户不存在!"); } if(sbyf == 1) { return ResultUtil.data(null, "打卡成功"); }else { return ResultUtil.data(msg, "打卡失败"); } } @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); } } }