package cn.timer.api.controller.kqgl.service; import java.text.ParseException; import java.text.SimpleDateFormat; import java.util.Date; import java.util.List; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; import cn.timer.api.bean.kqmk.KqglAssoDkmx; import cn.timer.api.bean.kqmk.KqglAssoLeaveBalance; import cn.timer.api.bean.kqmk.KqglAssoLeaveRules; import cn.timer.api.bean.kqmk.KqglAssoRelationSummary; import cn.timer.api.bean.kqmk.KqglMainKqz; import cn.timer.api.bean.yggl.YgglMainEmp; import cn.timer.api.controller.kqgl.ClockInController; import cn.timer.api.controller.kqgl.ClockInTool; import cn.timer.api.controller.kqgl.EmptyUtil; import cn.timer.api.dao.kqmk.KqglAssoLeaveBalanceMapper; import cn.timer.api.dao.kqmk.KqglMainKqzMapper; import cn.timer.api.dto.kqmk.AttEvectionApprovalDto; 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.utils.DateUtil; /** * @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(","); 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()).build().insert(); } YgglMainEmp emp = YgglMainEmp.builder().build().selectOne(new QueryWrapper<YgglMainEmp>().lambda().eq(YgglMainEmp::getEmpNum, leaveappr.getUserid())); 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; } KqglAssoLeaveBalance.builder().leaveRulesId(leaveappr.getLeavetype()).userid(leaveappr.getUserid()).modifyAction(2).balanceDays("-"+leaveappr.getDuration()) .reason("系统按照规则自动").modifyUserid(emp.getEmpNum()).modifyTimer(new Date().getTime()).orgCode(emp.getOrgCode()).isAutomatic(1).modifyNumber(modifynumber).build().insert();//员工假期余额 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(","); 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())).orgCode(overappr.getOrgcode()).build().insert(); } 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) { 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; } KqglAssoLeaveBalance.builder().leaveRulesId(learul.getId()).userid(overappr.getUserid()).modifyAction(2).balanceDays("+"+overappr.getDuration()) .reason("系统按照规则自动(加班)").modifyUserid(emp.getEmpNum()).modifyTimer(new Date().getTime()).orgCode(emp.getOrgCode()).isAutomatic(1).modifyNumber(modifynumber).build().insert();//员工假期余额 } 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(","); for(String num : days) { //记入打卡月汇总关联表 KqglAssoRelationSummary.builder().userId(evecappr.getUserid()).appTime(num).approvalId(evecappr.getEvectionid()).approvalType(3) .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()).build().insert(); } }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(","); for(String num : days) { //记入打卡月汇总关联表 KqglAssoRelationSummary.builder().userId(evecappr.getUserid()).appTime(num).approvalId(evecappr.getEvectionid()).approvalType(4) .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()).build().insert(); } } return true; } @Autowired private KqglMainKqzMapper kqglmainkqzmapper; /** * 考勤补卡审批 */ @Override public boolean attrepairapproval(AttRepairApprovalDto repaappr) { String cardrepltime = new SimpleDateFormat("yyyy-MM-dd").format(repaappr.getCardrepltime());//补卡时间 boolean isRange = true; 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(); ClockInController clo = new ClockInController(); try { KqglMainKqz attgro = kqglmainkqzmapper.getAttendanceGroupInformationByUserid(repaappr.getUserid(),repaappr.getOrgcode()); //考勤组信息 if(attgro != null) { AttendanceCardListDto attdate = clo.MethodCall(repaappr.getOrgcode(),repaappr.getUserid(),cardrepltime);//获取当天打卡班次信息 if(EmptyUtil.isNotEmpty(attdate.getAttsch())) {//班次不为空 List<AttSchedule> ash = attdate.getAttsch();//获取当天应打卡时间 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) {//有排班 非休息 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) { 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) { System.out.println("当前打卡时间不在范围内"); isRange = false; } } if(isRange) { int sbdkjg = 0; 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).gzsc(gzsctime).build().updateById(); } }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) { System.out.println("当前打卡时间不在范围内"); isRange = false; } } if(isRange) { int xbdk1jg = 0 ; 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).gzsc(gzsctime).build().updateById(); } } }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).gzsc(gzsctime).build().updateById(); } 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).gzsc(gzsctime).build().updateById(); } }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).gzsc(gzsctime).build().updateById(); } 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).gzsc(gzsctime).build().updateById(); } } }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).gzsc(gzsctime).build().updateById(); } }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).gzsc(gzsctime).build().updateById(); } } } } } } } } 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) { System.out.println("当前打卡时间不在范围内"); isRange = false; } return isRange; } }