diff --git a/src/com/engine/kq/biz/KQFormatData.java b/src/com/engine/kq/biz/KQFormatData.java index 1acf6a5..dfaa475 100644 --- a/src/com/engine/kq/biz/KQFormatData.java +++ b/src/com/engine/kq/biz/KQFormatData.java @@ -21,6 +21,10 @@ import weaver.general.InitServer; import weaver.general.Util; import weaver.interfaces.sskj.comInfo.PropBean; +import java.time.LocalDate; +import java.time.LocalTime; +import java.time.format.DateTimeFormatter; +import java.time.temporal.ChronoUnit; import java.util.*; import java.util.regex.Matcher; import java.util.regex.Pattern; @@ -31,6 +35,7 @@ import java.util.regex.Pattern; public class KQFormatData extends BaseBean { private String today = DateUtil.getCurrentDate(); private KQLog kqLog = new KQLog(); + BaseBean bb = new BaseBean(); private boolean writeLog = false; private LinkedHashMap logInfo = new LinkedHashMap<>(); @@ -704,12 +709,16 @@ public class KQFormatData extends BaseBean { kqShiftRuleEntity.setEarlyInMins(earlyInMins); kqShiftRuleEntity.setLateOutMins(lateOutMins); kqLog.info("人性化规则处理前数据" + JSONObject.toJSONString(kqShiftRuleEntity)); + bb.writeLog("人性化规则处理前数据" + JSONObject.toJSONString(kqShiftRuleEntity)); + if(this.writeLog) { logInfo.put(""+weaver.systeminfo.SystemEnv.getHtmlLabelName(10005301,weaver.general.ThreadVarLanguage.getLang())+"",kqShiftRuleEntity); } //人性化规则 kqShiftRuleEntity = kqFormatShiftRule.doShiftRule(workTime,kqShiftRuleEntity); kqLog.info("人性化规则处理后数据" + JSONObject.toJSONString(kqShiftRuleEntity)); + bb.writeLog("人性化规则处理后数据" + JSONObject.toJSONString(kqShiftRuleEntity)); + if(this.writeLog) { logInfo.put(""+weaver.systeminfo.SystemEnv.getHtmlLabelName(10005302,weaver.general.ThreadVarLanguage.getLang())+"",kqShiftRuleEntity); } @@ -787,6 +796,71 @@ public class KQFormatData extends BaseBean { forgotCheckMins = 0; forgotBeginWorkCheckMins = 0; } + /*考勤二开--值夜班班次的考勤人员,第二天排了行政班,在8:05之前打卡,行政班就算正常考勤start*/ + //首先获取当前班次,判断是否为行政岗这个班次 + bb.writeLog("-----连班行政岗二开start-----"); + String serialidKq = Util.null2String(workTime.getSerialId()); + bb.writeLog("serialidKq: " + serialidKq); + + String adminShift = Util.null2String(bb.getPropValue("project_sskj", "administrativeShift")); + bb.writeLog("adminShift: " + adminShift); + + String nightShift = Util.null2String(bb.getPropValue("project_sskj", "nightShift")); + bb.writeLog("nightShift: " + nightShift); + + if ( StringUtils.isNotBlank(adminShift) && serialidKq.equals(adminShift) ) { + //获取前一天的班次,判断是否为值夜班这个班次--因为肯定是排班制,所有只需要获取前一天排的班次就行了 + DateTimeFormatter formatter = DateTimeFormatter.ofPattern("yyyy-MM-dd"); + LocalDate date = LocalDate.parse(kqDate, formatter); + LocalDate yesterday = date.minusDays(1); + String yesterdayString = yesterday.format(formatter); + bb.writeLog("yesterdayString: " + yesterdayString); + + KQShiftScheduleComInfo kq = new KQShiftScheduleComInfo(); + String serialId = kq.getSerialId(userId, yesterdayString); + bb.writeLog("serialId: " + serialId); + + if (serialId.equals(nightShift)) { + //根据今天的考勤开始时间,判断打卡是否在班次开始时间后的五分钟之内 + //计算workBeginTime到worktime的时间差 + String beginTime = workBeginTime; + bb.writeLog("beginTime: " + beginTime); + + String endTime = ""; + for (int j = 0; lsCheckInfo != null && j < lsCheckInfo.size(); j++) { + Map checkInfo = (Map) lsCheckInfo.get(j); + String signType = Util.null2String(checkInfo.get("signType")); + String signTime = Util.null2String(checkInfo.get("signTime")); + if (signType.equals("1")) { + endTime = signTime; + } + } + bb.writeLog("endTime: " + endTime); + + if (StringUtils.isNotBlank(endTime)) { + if (beginTime.length() == 5) { + beginTime = beginTime + ":00"; + } + LocalTime timeEnd = LocalTime.parse(endTime); + LocalTime timeStart = LocalTime.parse(beginTime); + long minutesDifference = ChronoUnit.MINUTES.between(timeStart, timeEnd); + bb.writeLog("minutesDifference: " + minutesDifference); + if (minutesDifference<=5) { + //获取迟到时长 + if (beLateMins <= 5) { + beLateMins = 0; + } + } + } + } + + } + + bb.writeLog("attendanceMins: " + attendanceMins); + bb.writeLog("beLateMins: " + beLateMins); + bb.writeLog("leaveMins: " + leaveMins); + bb.writeLog("-----连班行政岗二开end-----"); + /*考勤二开--值夜班班次的考勤人员,第二天排了行政班,在8:05之前打卡,行政班就算正常考勤end*/ //考勤二开--取消漏签,改为旷工(规则:工作时长就是480,直接全天旷工)start if ( forgotCheckMins > 0) { @@ -879,11 +953,15 @@ public class KQFormatData extends BaseBean { params.add(0); params.add(0); params.add(0); - params.add(new JSONObject()); + + Map leaveInfo_gx = new HashMap<>();//请假信息 + Map otherinfo_gx = new HashMap<>();//存一些用得到的信息 + + params.add(JSONObject.toJSONString(leaveInfo_gx)); params.add(0); params.add(0); params.add(0); - params.add(new JSONObject()); + params.add(JSONObject.toJSONString(otherinfo_gx)); }else{ params.add(signInDate); diff --git a/src/com/engine/kq/biz/KQReportBiz.java b/src/com/engine/kq/biz/KQReportBiz.java index 6e1899a..f7c10ba 100644 --- a/src/com/engine/kq/biz/KQReportBiz.java +++ b/src/com/engine/kq/biz/KQReportBiz.java @@ -1368,6 +1368,20 @@ public class KQReportBiz extends BaseBean { signStatusInfo.put("outMins",outMins); signStatusInfo.put("isneedcal",isneedcal); + /*考勤二开--当前时间在当天班次下班点之前,不显示旷工start*/ + String nowDay = cn.hutool.core.date.DateUtil.format(new Date(), "yyyy-MM-dd"); + String nowTime = cn.hutool.core.date.DateUtil.format(new Date(), "HH:mm"); + basebean.writeLog("nowDay: " + nowDay); + basebean.writeLog("nowTime: " + nowTime); + basebean.writeLog("workenddate: " + workenddate); + basebean.writeLog("workendtime: " + kqTimesArrayComInfo.turn48to24Time(workendtime)); + + if (workenddate.equals(nowDay) && nowTime.compareTo(kqTimesArrayComInfo.turn48to24Time(workendtime)) < 0) { + signStatusInfo.put("isneedcal","1"); + } + basebean.writeLog("signStatusInfo: " + signStatusInfo); + /*考勤二开--当前时间在当天班次下班点之前,不显示旷工end*/ + data.put(tmpkey+"signintime"+serialnumber, signintime.length()==0?SystemEnv.getHtmlLabelName(25994, user.getLanguage()):signintime); data.put(tmpkey+"signinstatus"+serialnumber, KQReportBiz.getSignStatus(signStatusInfo,user,"on")); } @@ -1387,6 +1401,20 @@ public class KQReportBiz extends BaseBean { signStatusInfo.put("outMins",outMins); signStatusInfo.put("isneedcal",isneedcal); + /*考勤二开--当前时间在当天班次下班点之前,不显示旷工start*/ + String nowDay = cn.hutool.core.date.DateUtil.format(new Date(), "yyyy-MM-dd"); + String nowTime = cn.hutool.core.date.DateUtil.format(new Date(), "HH:mm"); + basebean.writeLog("nowDay: " + nowDay); + basebean.writeLog("nowTime: " + nowTime); + basebean.writeLog("workenddate: " + workenddate); + basebean.writeLog("workendtime: " + kqTimesArrayComInfo.turn48to24Time(workendtime)); + + if (workenddate.equals(nowDay) && nowTime.compareTo(kqTimesArrayComInfo.turn48to24Time(workendtime)) < 0) { + signStatusInfo.put("isneedcal","1"); + } + basebean.writeLog("signStatusInfo: " + signStatusInfo); + /*考勤二开--当前时间在当天班次下班点之前,不显示旷工end*/ + data.put(tmpkey+"signouttime"+serialnumber, signouttime.length()==0?SystemEnv.getHtmlLabelName(25994, user.getLanguage()):signouttime); data.put(tmpkey+"signoutstatus"+serialnumber, KQReportBiz.getSignStatus(signStatusInfo,user,"off")); } @@ -2282,11 +2310,19 @@ public class KQReportBiz extends BaseBean { } public static String getSignStatus(Map signInfo, User user,String onOrOff){ + BaseBean bb = new BaseBean(); + bb.writeLog("getSignStatus start"); KQLeaveRulesComInfo kqLeaveRulesComInfo = new KQLeaveRulesComInfo(); String text = ""; String isneedcal = Util.null2String(signInfo.get("isneedcal")); + bb.writeLog("isneedcal: " + isneedcal); + String workdate = Util.null2String(signInfo.get("workdate")); + bb.writeLog("workdate: " + workdate); + String worktime = Util.null2String(signInfo.get("worktime")); + bb.writeLog("worktime: " + worktime); + if(!new KQFormatBiz().needCal(workdate,worktime,isneedcal)) {//还未到时间无需计算 return text; } diff --git a/src/com/engine/kq/cmd/attendanceEvent/GetAttendanceCardCmd.java b/src/com/engine/kq/cmd/attendanceEvent/GetAttendanceCardCmd.java index f9d032c..1df3ac4 100644 --- a/src/com/engine/kq/cmd/attendanceEvent/GetAttendanceCardCmd.java +++ b/src/com/engine/kq/cmd/attendanceEvent/GetAttendanceCardCmd.java @@ -1,5 +1,6 @@ package com.engine.kq.cmd.attendanceEvent; +import cn.hutool.core.date.DateUtil; import com.engine.common.biz.AbstractCommonCommand; import com.engine.common.entity.BizLogContext; import com.engine.core.interceptor.CommandContext; @@ -14,208 +15,272 @@ import weaver.systeminfo.SystemEnv; import java.time.LocalDate; import java.time.format.DateTimeFormatter; -import java.util.ArrayList; -import java.util.HashMap; -import java.util.List; -import java.util.Map; +import java.util.*; /** * 获取补卡信息 */ public class GetAttendanceCardCmd extends AbstractCommonCommand> { - public GetAttendanceCardCmd(Map params, User user) { - this.user = user; - this.params = params; - } + public GetAttendanceCardCmd(Map params, User user) { + this.user = user; + this.params = params; + } BaseBean basebean = new BaseBean(); - @Override - public Map execute(CommandContext commandContext) { - Map retmap = new HashMap(); - RecordSet rs = new RecordSet(); + @Override + public Map execute(CommandContext commandContext) { + Map retmap = new HashMap(); + RecordSet rs = new RecordSet(); basebean.writeLog("-----------GetAttendanceCardCmd to do------------"); - try{ - String resourceId = Util.null2String(params.get("resourceId")); - String fromDate = Util.null2String(params.get("fromDate")); - String toDate = Util.null2String(params.get("toDate")); - - DateTimeFormatter dateFormatter = DateTimeFormatter.ofPattern("yyyy-MM-dd"); - LocalDate fromLocalDate = LocalDate.parse(fromDate); - LocalDate toLocalDate = LocalDate.parse(toDate); - - if(fromLocalDate.isAfter(toLocalDate)){ - retmap.put("status", "-1"); - return retmap; - } - - KQTimesArrayComInfo kqTimesArrayComInfo = new KQTimesArrayComInfo(); - - List> cardList = new ArrayList<>(); - Map cardMap = new HashMap<>(); - - KQReportBiz kqReportBiz = new KQReportBiz(); - - List reporsts = kqReportBiz.getKqDateInfo(resourceId, fromDate, toDate, false); - basebean.writeLog("reporsts: " + reporsts); - for(int i = 0 ; i < reporsts.size() ; i++) { - Map kqdateMap = (Map) reporsts.get(i); - String kqdate = Util.null2String(kqdateMap.get("kqdate")); - List checkInfoList = (List) kqdateMap.get("checkInfo"); - //每一个工作时段里的考勤状态 - for (int j = 0; j < checkInfoList.size(); j++) { - Map data = (Map) checkInfoList.get(j); - String status = Util.null2String(data.get("status")); - String workbegindate = Util.null2String(data.get("workbegindate")); - String workenddate = Util.null2String(data.get("workenddate")); - String signintime = Util.null2String(data.get("signintime")); - String signouttime = Util.null2String(data.get("signouttime")); - String workbegintime = Util.null2String(data.get("workbegintime")); - String workendtime = Util.null2String(data.get("workendtime")); - String start = Util.null2String(data.get("start")); - String end = Util.null2String(data.get("end")); - - int workbegintime_index = kqTimesArrayComInfo.getArrayindexByTimes(workbegintime); - int workbegintime_index_n = workbegintime_index > KQTimesArrayComInfo.getOneDayArraySize() ? workbegintime_index-KQTimesArrayComInfo.getOneDayArraySize() : workbegintime_index; - workbegintime = kqTimesArrayComInfo.getTimesByArrayindex(workbegintime_index_n); - - int workendtime_index = kqTimesArrayComInfo.getArrayindexByTimes(workendtime); - int workendtime_index_n = workendtime_index > KQTimesArrayComInfo.getOneDayArraySize() ? workendtime_index-KQTimesArrayComInfo.getOneDayArraySize() : workendtime_index; - workendtime = kqTimesArrayComInfo.getTimesByArrayindex(workendtime_index_n); - String scheduletime = workbegintime + "-" + workendtime; - - String[] status_s = status.split(","); - if(status_s != null && status.length() > 0){ - for(int s = 0 ; s < status_s.length ; s++){ - String tmp_status = status_s[s]; - cardMap = new HashMap<>(); - if (ButtonStatusEnum.BELATE.getStatusCode().equalsIgnoreCase(tmp_status)) { - //考勤二开--迟到早退不允许补卡start - continue; - //end -// //迟到 -// cardMap = new HashMap<>(); -// cardMap.put("signdate", workbegindate); -// cardMap.put("scheduletime", scheduletime); -// cardMap.put("atteStatus", SystemEnv.getHtmlLabelName(10000805, Util.getIntValue(user.getLanguage()))+signintime); -// //下拉框0是签到,1是签退 -// cardMap.put("signtype", "0"); -// cardMap.put("signtime", workbegintime); -// cardList.add(cardMap); - } - if (ButtonStatusEnum.LEAVEERALY.getStatusCode().equalsIgnoreCase(tmp_status)) { - //考勤二开--迟到早退不允许补卡start - continue; - //end -// //早退 -// cardMap = new HashMap<>(); -// cardMap.put("signdate", workenddate); -// cardMap.put("scheduletime", scheduletime); -// cardMap.put("atteStatus", SystemEnv.getHtmlLabelName(10000806, Util.getIntValue(user.getLanguage()))+signouttime); -// //下拉框0是签到,1是签退 -// cardMap.put("signtype", "1"); -// cardMap.put("signtime", workendtime); -// cardList.add(cardMap); - } - if (ButtonStatusEnum.ABSENT.getStatusCode().equalsIgnoreCase(tmp_status)) { - //旷工 - - if(!start.equals("1")) { + try{ + String resourceId = Util.null2String(params.get("resourceId")); + String fromDate = Util.null2String(params.get("fromDate")); + String toDate = Util.null2String(params.get("toDate")); + + DateTimeFormatter dateFormatter = DateTimeFormatter.ofPattern("yyyy-MM-dd"); + LocalDate fromLocalDate = LocalDate.parse(fromDate); + LocalDate toLocalDate = LocalDate.parse(toDate); + + //考勤二开 + String nowDay = DateUtil.format(new Date(),"yyyy-MM-dd"); + String nowTime = DateUtil.format(new Date(),"HH:mm"); + + if(fromLocalDate.isAfter(toLocalDate)){ + retmap.put("status", "-1"); + return retmap; + } + + KQTimesArrayComInfo kqTimesArrayComInfo = new KQTimesArrayComInfo(); + + List> cardList = new ArrayList<>(); + Map cardMap = new HashMap<>(); + + KQReportBiz kqReportBiz = new KQReportBiz(); + + List reporsts = kqReportBiz.getKqDateInfo(resourceId, fromDate, toDate, false); + basebean.writeLog("reporsts: " + reporsts); + for(int i = 0 ; i < reporsts.size() ; i++) { + Map kqdateMap = (Map) reporsts.get(i); + String kqdate = Util.null2String(kqdateMap.get("kqdate")); + List checkInfoList = (List) kqdateMap.get("checkInfo"); + //每一个工作时段里的考勤状态 + for (int j = 0; j < checkInfoList.size(); j++) { + Map data = (Map) checkInfoList.get(j); + String status = Util.null2String(data.get("status")); + String workbegindate = Util.null2String(data.get("workbegindate")); + String workenddate = Util.null2String(data.get("workenddate")); + String signintime = Util.null2String(data.get("signintime")); + String signouttime = Util.null2String(data.get("signouttime")); + String workbegintime = Util.null2String(data.get("workbegintime")); + String workendtime = Util.null2String(data.get("workendtime")); + String start = Util.null2String(data.get("start")); + String end = Util.null2String(data.get("end")); + + int workbegintime_index = kqTimesArrayComInfo.getArrayindexByTimes(workbegintime); + int workbegintime_index_n = workbegintime_index > KQTimesArrayComInfo.getOneDayArraySize() ? workbegintime_index-KQTimesArrayComInfo.getOneDayArraySize() : workbegintime_index; + workbegintime = kqTimesArrayComInfo.getTimesByArrayindex(workbegintime_index_n); + + int workendtime_index = kqTimesArrayComInfo.getArrayindexByTimes(workendtime); + int workendtime_index_n = workendtime_index > KQTimesArrayComInfo.getOneDayArraySize() ? workendtime_index-KQTimesArrayComInfo.getOneDayArraySize() : workendtime_index; + workendtime = kqTimesArrayComInfo.getTimesByArrayindex(workendtime_index_n); + String scheduletime = workbegintime + "-" + workendtime; + + String[] status_s = status.split(","); + if(status_s != null && status.length() > 0){ + for(int s = 0 ; s < status_s.length ; s++){ + String tmp_status = status_s[s]; cardMap = new HashMap<>(); - cardMap.put("signdate", workbegindate); - cardMap.put("scheduletime", scheduletime); - String atteStatus0 = SystemEnv.getHtmlLabelName(20085, Util.getIntValue(user.getLanguage())); -// if (signintime.length() > 0) { -// atteStatus0 += SystemEnv.getHtmlLabelName(10000807, Util.getIntValue(user.getLanguage())) + signintime; -// } -// cardMap.put("atteStatus", atteStatus0); -// //下拉框0是上班,1是下班 -// cardMap.put("signtype", "0"); -// cardMap.put("signtime", workbegintime); -// cardList.add(cardMap); - //考勤二开--漏签转旷工start - if (signintime.length() > 0) { - - } else { - cardMap.put("atteStatus", atteStatus0); - //下拉框0是上班,1是下班 - cardMap.put("signtype", "0"); - cardMap.put("signtime", workbegintime); - cardList.add(cardMap); + if (ButtonStatusEnum.BELATE.getStatusCode().equalsIgnoreCase(tmp_status)) { + //考勤二开--迟到早退不允许补卡start + continue; + //end + // //迟到 + // cardMap = new HashMap<>(); + // cardMap.put("signdate", workbegindate); + // cardMap.put("scheduletime", scheduletime); + // cardMap.put("atteStatus", SystemEnv.getHtmlLabelName(10000805, Util.getIntValue(user.getLanguage()))+signintime); + // //下拉框0是签到,1是签退 + // cardMap.put("signtype", "0"); + // cardMap.put("signtime", workbegintime); + // cardList.add(cardMap); } - //end + if (ButtonStatusEnum.LEAVEERALY.getStatusCode().equalsIgnoreCase(tmp_status)) { + //考勤二开--迟到早退不允许补卡start + continue; + //end + // //早退 + // cardMap = new HashMap<>(); + // cardMap.put("signdate", workenddate); + // cardMap.put("scheduletime", scheduletime); + // cardMap.put("atteStatus", SystemEnv.getHtmlLabelName(10000806, Util.getIntValue(user.getLanguage()))+signouttime); + // //下拉框0是签到,1是签退 + // cardMap.put("signtype", "1"); + // cardMap.put("signtime", workendtime); + // cardList.add(cardMap); + } + if (ButtonStatusEnum.ABSENT.getStatusCode().equalsIgnoreCase(tmp_status)) { + //旷工 + /*考勤二开--当前时间在当前班次下班点之前不允许出现下班旷工补卡start*/ + basebean.writeLog("workenddate: " + workenddate); + if (workenddate.equals(nowDay)) {//当天 + basebean.writeLog("nowTime: " + nowTime); + basebean.writeLog("workendtime: " + workendtime); + if (nowTime.compareTo(workendtime) > 0) { + if(!start.equals("1")) { + cardMap = new HashMap<>(); + cardMap.put("signdate", workbegindate); + cardMap.put("scheduletime", scheduletime); + String atteStatus0 = SystemEnv.getHtmlLabelName(20085, Util.getIntValue(user.getLanguage())); + // if (signintime.length() > 0) { + // atteStatus0 += SystemEnv.getHtmlLabelName(10000807, Util.getIntValue(user.getLanguage())) + signintime; + // } + // cardMap.put("atteStatus", atteStatus0); + // //下拉框0是上班,1是下班 + // cardMap.put("signtype", "0"); + // cardMap.put("signtime", workbegintime); + // cardList.add(cardMap); + //考勤二开--漏签转旷工start + if (signintime.length() > 0) { + } else { + cardMap.put("atteStatus", atteStatus0); + //下拉框0是上班,1是下班 + cardMap.put("signtype", "0"); + cardMap.put("signtime", workbegintime); + cardList.add(cardMap); + } + //end - } - if(!end.equals("1")) { - cardMap = new HashMap<>(); - cardMap.put("signdate", workenddate); - cardMap.put("scheduletime", scheduletime); - String atteStatus1 = SystemEnv.getHtmlLabelName(20085, Util.getIntValue(user.getLanguage())); -// if (signouttime.length() > 0) { -// atteStatus1 += SystemEnv.getHtmlLabelName(10000808, Util.getIntValue(user.getLanguage())) + signouttime; -// } -// cardMap.put("atteStatus", atteStatus1); -// //下拉框0是上班,1是下班 -// cardMap.put("signtype", "1"); -// cardMap.put("signtime", workendtime); -// cardList.add(cardMap); - //考勤二开--漏签转旷工start - if (signouttime.length() > 0) { - - } else { - cardMap.put("atteStatus", atteStatus1); + + } + if(!end.equals("1")) { + cardMap = new HashMap<>(); + cardMap.put("signdate", workenddate); + cardMap.put("scheduletime", scheduletime); + String atteStatus1 = SystemEnv.getHtmlLabelName(20085, Util.getIntValue(user.getLanguage())); + // if (signouttime.length() > 0) { + // atteStatus1 += SystemEnv.getHtmlLabelName(10000808, Util.getIntValue(user.getLanguage())) + signouttime; + // } + // cardMap.put("atteStatus", atteStatus1); + // //下拉框0是上班,1是下班 + // cardMap.put("signtype", "1"); + // cardMap.put("signtime", workendtime); + // cardList.add(cardMap); + //考勤二开--漏签转旷工start + if (signouttime.length() > 0) { + + } else { + cardMap.put("atteStatus", atteStatus1); + //下拉框0是上班,1是下班 + cardMap.put("signtype", "1"); + cardMap.put("signtime", workendtime); + cardList.add(cardMap); + } + //end + + } + } + } else { + if(!start.equals("1")) { + cardMap = new HashMap<>(); + cardMap.put("signdate", workbegindate); + cardMap.put("scheduletime", scheduletime); + String atteStatus0 = SystemEnv.getHtmlLabelName(20085, Util.getIntValue(user.getLanguage())); + // if (signintime.length() > 0) { + // atteStatus0 += SystemEnv.getHtmlLabelName(10000807, Util.getIntValue(user.getLanguage())) + signintime; + // } + // cardMap.put("atteStatus", atteStatus0); + // //下拉框0是上班,1是下班 + // cardMap.put("signtype", "0"); + // cardMap.put("signtime", workbegintime); + // cardList.add(cardMap); + //考勤二开--漏签转旷工start + if (signintime.length() > 0) { + + } else { + cardMap.put("atteStatus", atteStatus0); + //下拉框0是上班,1是下班 + cardMap.put("signtype", "0"); + cardMap.put("signtime", workbegintime); + cardList.add(cardMap); + } + //end + + + } + if(!end.equals("1")) { + cardMap = new HashMap<>(); + cardMap.put("signdate", workenddate); + cardMap.put("scheduletime", scheduletime); + String atteStatus1 = SystemEnv.getHtmlLabelName(20085, Util.getIntValue(user.getLanguage())); + // if (signouttime.length() > 0) { + // atteStatus1 += SystemEnv.getHtmlLabelName(10000808, Util.getIntValue(user.getLanguage())) + signouttime; + // } + // cardMap.put("atteStatus", atteStatus1); + // //下拉框0是上班,1是下班 + // cardMap.put("signtype", "1"); + // cardMap.put("signtime", workendtime); + // cardList.add(cardMap); + //考勤二开--漏签转旷工start + if (signouttime.length() > 0) { + + } else { + cardMap.put("atteStatus", atteStatus1); + //下拉框0是上班,1是下班 + cardMap.put("signtype", "1"); + cardMap.put("signtime", workendtime); + cardList.add(cardMap); + } + //end + + } + } + /*考勤二开--当前时间在当前班次下班点之前不允许出现下班旷工补卡end*/ + + } + if (ButtonStatusEnum.NOSIGN.getStatusCode().equalsIgnoreCase(tmp_status)) { + //漏签 + cardMap = new HashMap<>(); + cardMap.put("signdate", workenddate); + cardMap.put("scheduletime", scheduletime); + cardMap.put("atteStatus", SystemEnv.getHtmlLabelName(20086, Util.getIntValue(user.getLanguage()))); //下拉框0是上班,1是下班 cardMap.put("signtype", "1"); cardMap.put("signtime", workendtime); cardList.add(cardMap); } - //end - + if (ButtonStatusEnum.NOSIGN_ON.getStatusCode().equalsIgnoreCase(tmp_status)) { + //上班漏签 + cardMap = new HashMap<>(); + cardMap.put("signdate", workbegindate); + cardMap.put("scheduletime", scheduletime); + cardMap.put("atteStatus", SystemEnv.getHtmlLabelName(20086, Util.getIntValue(user.getLanguage()))); + //下拉框0是上班,1是下班 + cardMap.put("signtype", "0"); + cardMap.put("signtime", workbegintime); + cardList.add(cardMap); + } } } - if (ButtonStatusEnum.NOSIGN.getStatusCode().equalsIgnoreCase(tmp_status)) { - //漏签 - cardMap = new HashMap<>(); - cardMap.put("signdate", workenddate); - cardMap.put("scheduletime", scheduletime); - cardMap.put("atteStatus", SystemEnv.getHtmlLabelName(20086, Util.getIntValue(user.getLanguage()))); - //下拉框0是上班,1是下班 - cardMap.put("signtype", "1"); - cardMap.put("signtime", workendtime); - cardList.add(cardMap); - } - if (ButtonStatusEnum.NOSIGN_ON.getStatusCode().equalsIgnoreCase(tmp_status)) { - //上班漏签 - cardMap = new HashMap<>(); - cardMap.put("signdate", workbegindate); - cardMap.put("scheduletime", scheduletime); - cardMap.put("atteStatus", SystemEnv.getHtmlLabelName(20086, Util.getIntValue(user.getLanguage()))); - //下拉框0是上班,1是下班 - cardMap.put("signtype", "0"); - cardMap.put("signtime", workbegintime); - cardList.add(cardMap); - } } } - } - } - retmap.put("cardlist", cardList); - retmap.put("status", "1"); + retmap.put("cardlist", cardList); + retmap.put("status", "1"); - }catch (Exception e) { - retmap.put("status", "-1"); - retmap.put("message", SystemEnv.getHtmlLabelName(382661,user.getLanguage())); - writeLog(e); - } - return retmap; - } + }catch (Exception e) { + retmap.put("status", "-1"); + retmap.put("message", SystemEnv.getHtmlLabelName(382661,user.getLanguage())); + writeLog(e); + } + return retmap; + } @Override - public BizLogContext getLogContext() { - return null; - } + public BizLogContext getLogContext() { + return null; + } } diff --git a/src/com/engine/kq/cmd/report/GetKQDailyReportCmd.java b/src/com/engine/kq/cmd/report/GetKQDailyReportCmd.java index 6362898..20c4cbf 100644 --- a/src/com/engine/kq/cmd/report/GetKQDailyReportCmd.java +++ b/src/com/engine/kq/cmd/report/GetKQDailyReportCmd.java @@ -1,5 +1,6 @@ package com.engine.kq.cmd.report; +import cn.hutool.core.date.DateUtil; import com.alibaba.fastjson.JSON; import com.alibaba.fastjson.JSONObject; import com.engine.common.biz.AbstractCommonCommand; @@ -12,6 +13,7 @@ import com.engine.kq.log.KQLog; import com.engine.kq.util.KQDurationCalculatorUtil; import com.engine.kq.util.PageUidFactory; import weaver.conn.RecordSet; +import weaver.general.BaseBean; import weaver.general.TimeUtil; import weaver.general.Util; import weaver.hrm.User; @@ -26,7 +28,8 @@ import java.util.*; public class GetKQDailyReportCmd extends AbstractCommonCommand> { - private KQLog kqLog = new KQLog(); + private KQLog kqLog = new KQLog(); + BaseBean bb = new BaseBean(); public GetKQDailyReportCmd(Map params, User user) { this.user = user; @@ -42,7 +45,7 @@ public class GetKQDailyReportCmd extends AbstractCommonCommand0){ @@ -166,13 +169,13 @@ public class GetKQDailyReportCmd extends AbstractCommonCommand'' "); } - if(status.length()>0){ - if (!status.equals("8") && !status.equals("9")) { - sqlWhere += " and a.status = "+status+ ""; - }else if (status.equals("8")) { - sqlWhere += " and (a.status = 0 or a.status = 1 or a.status = 2 or a.status = 3) "; - } - } + if(status.length()>0){ + if (!status.equals("8") && !status.equals("9")) { + sqlWhere += " and a.status = "+status+ ""; + }else if (status.equals("8")) { + sqlWhere += " and (a.status = 0 or a.status = 1 or a.status = 2 or a.status = 3) "; + } + } sql = " select count(*) as c from ( select 1 as c "+sqlFrom+sqlWhere+") t"; rs.execute(sql); @@ -198,16 +201,14 @@ public class GetKQDailyReportCmd extends AbstractCommonCommand " + ((pageIndex - 1) * pageSize); + + (pageIndex * pageSize) + ") where rownum_ > " + ((pageIndex - 1) * pageSize); } else if (rs.getDBType().equals("mysql")) { sql = " select " + sql; sql = "select t1.* from (" + sql + ") t1 limit " + ((pageIndex - 1) * pageSize) + "," + pageSize; - } - else if (rs.getDBType().equals("postgresql")) { + } else if (rs.getDBType().equals("postgresql")) { sql = " select " + sql; sql = "select t1.* from (" + sql + ") t1 limit " + pageSize+ " offset " + ((pageIndex - 1) * pageSize); - } - else { + } else { orderBy = " order by dsporder asc, lastname asc, kqdate asc "; descOrderBy = " order by dsporder desc, lastname desc, kqdate desc "; if (pageIndex > 1) { @@ -216,7 +217,7 @@ public class GetKQDailyReportCmd extends AbstractCommonCommand flowData = kqReportBiz.getDailyFlowData(params,user); + Map flowData = kqReportBiz.getDailyFlowData(params,user); Map serialdata = new HashMap<>(); // #1475814-概述:满足考勤报分部部门显示及导出时显示全路径 @@ -293,7 +294,7 @@ public class GetKQDailyReportCmd extends AbstractCommonCommand> allLeaveRules = KQLeaveRulesBiz.getAllLeaveRules(); @@ -360,10 +361,10 @@ public class GetKQDailyReportCmd extends AbstractCommonCommand> leaveRules = kqLeaveRulesBiz.getAllLeaveRules(); - for(int i=0;leaveRules!=null&&i leaveRule = leaveRules.get(i); - String id = "leaveType_"+Util.null2String(leaveRule.get("id")); - String name = Util.null2String(leaveRule.get("name")); - String unitType = Util.null2String(leaveRule.get("unitType")); - column = new HashMap(); - column.put("title", name); - column.put("unit", KQUnitBiz.isLeaveHour(unitType) ?SystemEnv.getHtmlLabelName(391, user.getLanguage()):SystemEnv.getHtmlLabelName(1925, user.getLanguage())); - column.put("width", 65); - column.put("dataIndex", id); - column.put("key", id); - column.put("rowSpan", 2); - column.put("colSpan", 1); - column.put("showDetial","1"); - sumChildColumnWidth+=65; - lsChildColumns.add(column); - } - }else if(parentid.equals("overtime")){ - String[] overtimeChild = {"overtime_nonleave","overtime_4leave","overtimeTotal"}; - for(int i=0;i0){ - if(unitType.equals("1")){ - unitTypeName=SystemEnv.getHtmlLabelName(1925, user.getLanguage()); - }else if(unitType.equals("2")){ - unitTypeName=SystemEnv.getHtmlLabelName(391, user.getLanguage()); - }else if(unitType.equals("3")){ - unitTypeName=SystemEnv.getHtmlLabelName(18083, user.getLanguage()); - } - } - column.put("unit", unitTypeName); - } - column.put("title", SystemEnv.getHtmlLabelNames(fieldlabel, user.getLanguage())); - column.put("dataIndex", id); - column.put("key", id); - column.put("rowSpan", 1); - Map mapChildColumnInfo = getChildColumnsInfo(id, user); - int childWidth = 65; - List childColumns = (List)mapChildColumnInfo.get("childColumns"); - if(childColumns.size()>0) {//跨列width取子列的width - column.put("children", childColumns); - childWidth = Util.getIntValue(Util.null2String(mapChildColumnInfo.get("sumChildColumnWidth")),65); - } - column.put("width", childWidth+""); - sumChildColumnWidth+=childWidth; - lsChildColumns.add(column); - } - }else{ - KQReportFieldComInfo kqReportFieldComInfo = new KQReportFieldComInfo(); - while (kqReportFieldComInfo.next()){ - if(kqReportFieldComInfo.getParentid().equals(parentid)) { - if(!kqReportFieldComInfo.getReportType().equals("daily"))continue; - column = new HashMap(); - column.put("title", SystemEnv.getHtmlLabelNames(kqReportFieldComInfo.getFieldlabel(), user.getLanguage())); - column.put("unit", KQReportBiz.getUnitType(kqReportFieldComInfo, user)); - column.put("width", Util.getIntValue(kqReportFieldComInfo.getWidth())); - column.put("dataIndex", kqReportFieldComInfo.getFieldname()); - column.put("key", kqReportFieldComInfo.getFieldname()); - column.put("rowSpan", 2); - column.put("colSpan", 1); - column.put("isdaily", kqReportFieldComInfo.getReportType1().equals("daily")?"1":"0"); - sumChildColumnWidth+=Util.getIntValue(kqReportFieldComInfo.getWidth()); - lsChildColumns.add(column); - } - } - } + KQLeaveRulesBiz kqLeaveRulesBiz = new KQLeaveRulesBiz(); + List> leaveRules = kqLeaveRulesBiz.getAllLeaveRules(); + for(int i=0;leaveRules!=null&&i leaveRule = leaveRules.get(i); + String id = "leaveType_"+Util.null2String(leaveRule.get("id")); + String name = Util.null2String(leaveRule.get("name")); + String unitType = Util.null2String(leaveRule.get("unitType")); + column = new HashMap(); + column.put("title", name); + column.put("unit", KQUnitBiz.isLeaveHour(unitType) ?SystemEnv.getHtmlLabelName(391, user.getLanguage()):SystemEnv.getHtmlLabelName(1925, user.getLanguage())); + column.put("width", 65); + column.put("dataIndex", id); + column.put("key", id); + column.put("rowSpan", 2); + column.put("colSpan", 1); + column.put("showDetial","1"); + sumChildColumnWidth+=65; + lsChildColumns.add(column); + } + }else if(parentid.equals("overtime")){ + String[] overtimeChild = {"overtime_nonleave","overtime_4leave","overtimeTotal"}; + for(int i=0;i0){ + if(unitType.equals("1")){ + unitTypeName=SystemEnv.getHtmlLabelName(1925, user.getLanguage()); + }else if(unitType.equals("2")){ + unitTypeName=SystemEnv.getHtmlLabelName(391, user.getLanguage()); + }else if(unitType.equals("3")){ + unitTypeName=SystemEnv.getHtmlLabelName(18083, user.getLanguage()); + } + } + column.put("unit", unitTypeName); + } + column.put("title", SystemEnv.getHtmlLabelNames(fieldlabel, user.getLanguage())); + column.put("dataIndex", id); + column.put("key", id); + column.put("rowSpan", 1); + Map mapChildColumnInfo = getChildColumnsInfo(id, user); + int childWidth = 65; + List childColumns = (List)mapChildColumnInfo.get("childColumns"); + if(childColumns.size()>0) {//跨列width取子列的width + column.put("children", childColumns); + childWidth = Util.getIntValue(Util.null2String(mapChildColumnInfo.get("sumChildColumnWidth")),65); + } + column.put("width", childWidth+""); + sumChildColumnWidth+=childWidth; + lsChildColumns.add(column); + } + }else{ + KQReportFieldComInfo kqReportFieldComInfo = new KQReportFieldComInfo(); + while (kqReportFieldComInfo.next()){ + if(kqReportFieldComInfo.getParentid().equals(parentid)) { + if(!kqReportFieldComInfo.getReportType().equals("daily"))continue; + column = new HashMap(); + column.put("title", SystemEnv.getHtmlLabelNames(kqReportFieldComInfo.getFieldlabel(), user.getLanguage())); + column.put("unit", KQReportBiz.getUnitType(kqReportFieldComInfo, user)); + column.put("width", Util.getIntValue(kqReportFieldComInfo.getWidth())); + column.put("dataIndex", kqReportFieldComInfo.getFieldname()); + column.put("key", kqReportFieldComInfo.getFieldname()); + column.put("rowSpan", 2); + column.put("colSpan", 1); + column.put("isdaily", kqReportFieldComInfo.getReportType1().equals("daily")?"1":"0"); + sumChildColumnWidth+=Util.getIntValue(kqReportFieldComInfo.getWidth()); + lsChildColumns.add(column); + } + } + } returnMap.put("childColumns",lsChildColumns); returnMap.put("sumChildColumnWidth",sumChildColumnWidth); return returnMap; @@ -511,14 +512,16 @@ public class GetKQDailyReportCmd extends AbstractCommonCommand0){ - //弹性工时打卡时间取自签到签退数据 + //弹性工时打卡时间取自签到签退数据 + } + signStatusInfo = new HashMap(); + signStatusInfo.put("leaveMins",leaveMins); + signStatusInfo.put("leaveInfo",leaveInfo); + signStatusInfo.put("evectionMins",evectionMins); + signStatusInfo.put("outMins",outMins); + + if(signinid.length() > 0){ + data.put("signintime"+serialnumber, signintime.length()==0?SystemEnv.getHtmlLabelName(25994, user.getLanguage()):signintime); + data.put("signinstatus"+serialnumber, KQReportBiz.getSignStatus(signStatusInfo,user,"on")); + if(signoutid.length() > 0){ + data.put("signouttime"+serialnumber, signouttime.length()==0?SystemEnv.getHtmlLabelName(25994, user.getLanguage()):signouttime); + data.put("signoutstatus"+serialnumber, KQReportBiz.getSignStatus(signStatusInfo,user,"off")); + } + }else{ + data.put("signinstatus"+serialnumber, KQReportBiz.getSignStatus(signStatusInfo,user,"on")); } - signStatusInfo = new HashMap(); - signStatusInfo.put("leaveMins",leaveMins); - signStatusInfo.put("leaveInfo",leaveInfo); - signStatusInfo.put("evectionMins",evectionMins); - signStatusInfo.put("outMins",outMins); - - if(signinid.length() > 0){ - data.put("signintime"+serialnumber, signintime.length()==0?SystemEnv.getHtmlLabelName(25994, user.getLanguage()):signintime); - data.put("signinstatus"+serialnumber, KQReportBiz.getSignStatus(signStatusInfo,user,"on")); - if(signoutid.length() > 0){ - data.put("signouttime"+serialnumber, signouttime.length()==0?SystemEnv.getHtmlLabelName(25994, user.getLanguage()):signouttime); - data.put("signoutstatus"+serialnumber, KQReportBiz.getSignStatus(signStatusInfo,user,"off")); - } - }else{ - data.put("signinstatus"+serialnumber, KQReportBiz.getSignStatus(signStatusInfo,user,"on")); - } } } }catch (Exception e){ diff --git a/src/com/engine/sskj/controller/KqWorkflowController.java b/src/com/engine/sskj/controller/KqWorkflowController.java index dd94d0c..769fdaa 100644 --- a/src/com/engine/sskj/controller/KqWorkflowController.java +++ b/src/com/engine/sskj/controller/KqWorkflowController.java @@ -35,5 +35,15 @@ public class KqWorkflowController { return new Gson().toJson(resultDatas); } + @POST + @Path("/checkConOverTime") + @Produces(MediaType.APPLICATION_JSON) + public String checkConOverTime(@Context HttpServletRequest request, @Context HttpServletResponse response) { + User user = HrmUserVarify.getUser(request, response); + Map params = ParamUtil.request2Map(request); + Map resultDatas = getKqWorkflowService(user).checkConOverTime(params); + return new Gson().toJson(resultDatas); + } + } diff --git a/src/com/engine/sskj/service/KqWorkflowService.java b/src/com/engine/sskj/service/KqWorkflowService.java index d69f791..a532b58 100644 --- a/src/com/engine/sskj/service/KqWorkflowService.java +++ b/src/com/engine/sskj/service/KqWorkflowService.java @@ -8,5 +8,10 @@ public interface KqWorkflowService { */ Map calWorkTime(Map params); + /** + * 连班加班流程去重校验 + */ + Map checkConOverTime(Map params); + } diff --git a/src/com/engine/sskj/service/impl/KqWorkflowServiceImpl.java b/src/com/engine/sskj/service/impl/KqWorkflowServiceImpl.java index 6a014bc..3bff272 100644 --- a/src/com/engine/sskj/service/impl/KqWorkflowServiceImpl.java +++ b/src/com/engine/sskj/service/impl/KqWorkflowServiceImpl.java @@ -2,6 +2,7 @@ package com.engine.sskj.service.impl; import cn.hutool.core.date.DateUtil; import com.engine.core.impl.Service; +import com.engine.kq.biz.KQTimesArrayComInfo; import com.engine.kq.util.KQDurationCalculatorUtil; import com.engine.sskj.service.KqWorkflowService; import com.engine.sskj.util.SskjUtil; @@ -48,4 +49,192 @@ public class KqWorkflowServiceImpl extends Service implements KqWorkflowService result.put("data",betweenHours); return result; } + + @Override + public Map checkConOverTime(Map params) { + + Map result = new HashMap<>(); + BaseBean bb = new BaseBean(); + bb.writeLog("checkConOverTime start"); + + try { + RecordSet rs = new RecordSet(); + KQTimesArrayComInfo kqTimesArrayComInfo = new KQTimesArrayComInfo(); + + String overTimeInfo = Util.null2String(params.get("overtimeinfo")); + bb.writeLog("overTimeInfo: " + overTimeInfo); + + if (StringUtils.isBlank(overTimeInfo)) { + result.put("code", 500); + result.put("msg", "请传入加班明细数据"); + return result; + } + + //resourceId=10_fromDate=2023-11-24_fromTime=12:00_toDate=2023-11-24_toTime=13:00|resourceId=10_fromDate=2023-11-24_fromTime=12:00_toDate=2023-11-24_toTime=13:00 + String[] overTimeInfos = overTimeInfo.split("\\|"); + /*同条流程间校验*/ + if (overTimeInfos.length > 1) { + Map resToOvInMap = new HashMap<>(); + for (String oti : overTimeInfos) { + + String resourceId = ""; + String fromDate = ""; + String fromTime = ""; + String toDate = ""; + String toTime = ""; + + String[] otiArray = oti.split("_"); + for (String ot : otiArray) { + String[] split = ot.split("="); + if ("resourceId".equals(split[0])) { + resourceId = split[1]; + } + if ("fromDate".equals(split[0])) { + fromDate = split[1]; + } + if ("fromTime".equals(split[0])) { + fromTime = split[1]; + } + if ("toDate".equals(split[0])) { + toDate = split[1]; + } + if ("toTime".equals(split[0])) { + toTime = split[1]; + } + + bb.writeLog("ot: " + ot); + } + if (resToOvInMap.containsKey(resourceId)) { + bb.writeLog("containsKey" ); + + int[] dayMins = resToOvInMap.get(resourceId); + int fromTimeIdx = kqTimesArrayComInfo.getArrayindexByTimes(fromTime); + bb.writeLog("fromTimeIdx: " + fromTimeIdx ); + + int toTimeIdx = kqTimesArrayComInfo.getArrayindexByTimes(toTime); + bb.writeLog("toTimeIdx: " + toTimeIdx ); + + //先判断是否已经存在了 + boolean isExist = false; + for (int i = fromTimeIdx; i <= toTimeIdx; i++) { + if (dayMins[i] == 1) { + isExist = true; + } + } + bb.writeLog("isExist: " + isExist ); + + if (!isExist) { + Arrays.fill(dayMins, fromTimeIdx, toTimeIdx, 1);//加班时段标识 1 + } else { + String lastname = ""; + String acqResLastNameSql = "select lastname from hrmresource where id = ? "; + rs.executeQuery(acqResLastNameSql, resourceId); + while (rs.next()) { + lastname = Util.null2String(rs.getString("lastname")); + } + bb.writeLog("lastname: " + lastname ); + + result.put("code", 500); + result.put("msg", "加班人员:" + lastname + " 的" + fromDate + " " + fromTime + "--" + toDate + " " + toTime + "在明细表中存在重复部分,请调整!"); + return result; + } + + resToOvInMap.put(resourceId, dayMins); + } else { + int[] dayMins = new int[1440];//一天所有分钟数 + + bb.writeLog("fromTime: " + fromTime ); + int fromTimeIdx = kqTimesArrayComInfo.getArrayindexByTimes(fromTime); + bb.writeLog("fromTimeIdx: " + fromTimeIdx ); + + bb.writeLog("toTime: " + toTime ); + int toTimeIdx = kqTimesArrayComInfo.getArrayindexByTimes(toTime); + bb.writeLog("toTimeIdx: " + toTimeIdx ); + + Arrays.fill(dayMins, fromTimeIdx, toTimeIdx, 1);//加班时段标识 1 + resToOvInMap.put(resourceId, dayMins); + } + } + } + + + /*与历史数据校验*/ + for (String oti : overTimeInfos) { + String[] otiArray = oti.split("_"); + + String resourceId = ""; + String fromDate = ""; + String fromTime = ""; + String toDate = ""; + String toTime = ""; + + //取出加班数据 + for (String ot : otiArray) { + String[] split = ot.split("="); + if ("resourceId".equals(split[0])) { + resourceId = split[1]; + } + if ("fromDate".equals(split[0])) { + fromDate = split[1]; + } + if ("fromTime".equals(split[0])) { + fromTime = split[1]; + } + if ("toDate".equals(split[0])) { + toDate = split[1]; + } + if ("toTime".equals(split[0])) { + toTime = split[1]; + } + } + + //获取已有的连班加班的数据--(此处连班加班指班次的休息时间) + //设置一个时间轴数组,长度为一天的分钟数 + int[] dayMins = new int[1440];//一天所有分钟数 + Arrays.fill(dayMins, 0); + String acqConOverTimeSql = "select fromTime, toTime from uf_conOvertime where resourceId = ? and fromDate = ? and toDate = ?"; + rs.executeQuery(acqConOverTimeSql, resourceId, fromDate, toDate); + while (rs.next()) { + String fTime = Util.null2String(rs.getString("fromTime")); + String tTime = Util.null2String(rs.getString("toTime")); + //将时间转成时间轴上对应的点 + int fTimeIdx = kqTimesArrayComInfo.getArrayindexByTimes(fTime); + int tTimeIdx = kqTimesArrayComInfo.getArrayindexByTimes(tTime); + Arrays.fill(dayMins, fTimeIdx, tTimeIdx, 1);//加班时段标识 1 + } + int fromTimeIdx = kqTimesArrayComInfo.getArrayindexByTimes(fromTime); + int toTimeIdx = kqTimesArrayComInfo.getArrayindexByTimes(toTime); + + //确认fromTimeIdx-toTimeIdx在时间轴上是否有1 + boolean isExist = false; + for (int i = fromTimeIdx; i <= toTimeIdx; i++) { + if (dayMins[i] == 1) { + isExist = true; + } + } + + if (isExist) { + String lastname = ""; + String acqResLastNameSql = "select lastname from hrmresource where id = ? "; + rs.executeQuery(acqResLastNameSql, resourceId); + while (rs.next()) { + lastname = Util.null2String(rs.getString("lastname")); + } + result.put("code", 500); + result.put("msg", "加班人员:" + lastname + " 的" + fromDate + " " + fromTime + "--" + toDate + " " + toTime + "已经申请过连班加班,不可重复申请!"); + return result; + } + + } + } catch (Exception e) { + bb.writeLog("checkConOverTime exception: " + e); + result.put("code",500); + result.put("msg","加班数据校验异常"); + return result; + } + + result.put("code",200); + result.put("msg","加班数据没有重复"); + return result; + } } diff --git a/src/weaver/interfaces/sskj/action/OverTimeAction.java b/src/weaver/interfaces/sskj/action/OverTimeAction.java index ff5be51..2804468 100644 --- a/src/weaver/interfaces/sskj/action/OverTimeAction.java +++ b/src/weaver/interfaces/sskj/action/OverTimeAction.java @@ -1,5 +1,6 @@ package weaver.interfaces.sskj.action; +import cn.hutool.core.date.DateUtil; import com.engine.kq.biz.*; import com.engine.kq.entity.KQOvertimeRulesDetailEntity; import com.engine.sskj.util.SskjUtil; @@ -13,7 +14,9 @@ import weaver.soa.workflow.request.MainTableInfo; import weaver.soa.workflow.request.Property; import weaver.soa.workflow.request.RequestInfo; +import java.util.Date; import java.util.Map; +import java.util.UUID; /** * 连班加班流程 @@ -119,6 +122,32 @@ public class OverTimeAction implements Action { boolean b = genOvertimeData(requestId, Util.null2String(resourceId), fromDate, toDate, belongTo, fromTime, toTime, String.valueOf(durationOfOvertime), String.valueOf(changeType), "1", String.valueOf(paidLeaveEnable), String.valueOf(computingMode), null); if (b) { + + //将加班数据记录到连班加班建模表中 + String syncConOverTimeSql = "insert into uf_conOvertime (resourceId, fromDate, fromTime, toDate, toTime, formmodeid, modedatacreater, modedatacreatertype, modedatacreatedate, modedatacreatetime, MODEUUID)" + + " values (?,?,?,?,?,?,?,?,?,?,?)"; + String conOvertimeModeId = bb.getPropValue("project_sskj", "conOvertimeModeId"); + Integer modedatacreater = 1; + Integer modedatacreatertype = 0; + String modedatacreatedate = DateUtil.format(new Date(), "yyyy-MM-dd"); + String modedatacreatetime = DateUtil.format(new Date(), "HH:mm:ss"); + String uuid = UUID.randomUUID().toString(); + bb.writeLog("syncConOverTimeSql:" + syncConOverTimeSql); + + boolean addFlag = rs.executeUpdate(syncConOverTimeSql, resourceId, fromDate, fromTime, toDate, toTime, conOvertimeModeId, modedatacreater, modedatacreatertype, modedatacreatedate, + modedatacreatetime, uuid); + bb.writeLog("addFlag:" + addFlag); + if (addFlag) { + String billid = "-1"; + String acqModeIdSql = "select id from uf_conOvertime where MODEUUID = ?"; + rs.executeQuery(acqModeIdSql, uuid); + while (rs.next()) { + billid = Util.null2String(rs.getString("id")); + } + bb.writeLog("billid:" + billid); + sskjUtil.modePerRecon(modedatacreater, conOvertimeModeId, billid); + } + return Action.SUCCESS; } else { String error = "加班生成失败!"; @@ -155,6 +184,31 @@ public class OverTimeAction implements Action { boolean b = genOvertimeData(requestId, Util.null2String(resourceId), fromDate, toDate, belongTo, fromTime, toTime, String.valueOf(durationOfOvertime), String.valueOf(changeType), "1", String.valueOf(paidLeaveEnable), String.valueOf(computingMode), tiaoxiuId); if (b) { + //将加班数据记录到连班加班建模表中 + String syncConOverTimeSql = "insert into uf_conOvertime (resourceId, fromDate, fromTime, toDate, toTime, formmodeid, modedatacreater, modedatacreatertype, modedatacreatedate, modedatacreatetime, MODEUUID)" + + " values (?,?,?,?,?,?,?,?,?,?,?)"; + String conOvertimeModeId = bb.getPropValue("project_sskj", "conOvertimeModeId"); + Integer modedatacreater = 1; + Integer modedatacreatertype = 0; + String modedatacreatedate = DateUtil.format(new Date(), "yyyy-MM-dd"); + String modedatacreatetime = DateUtil.format(new Date(), "HH:mm:ss"); + String uuid = UUID.randomUUID().toString(); + bb.writeLog("syncConOverTimeSql:" + syncConOverTimeSql); + + boolean addFlag = rs.executeUpdate(syncConOverTimeSql, resourceId, fromDate, fromTime, toDate, toTime, conOvertimeModeId, modedatacreater, modedatacreatertype, modedatacreatedate, + modedatacreatetime, uuid); + bb.writeLog("addFlag:" + addFlag); + if (addFlag) { + String billid = "-1"; + String acqModeIdSql = "select id from uf_conOvertime where MODEUUID = ?"; + rs.executeQuery(acqModeIdSql, uuid); + while (rs.next()) { + billid = Util.null2String(rs.getString("id")); + } + bb.writeLog("billid:" + billid); + sskjUtil.modePerRecon(modedatacreater, conOvertimeModeId, billid); + } + return Action.SUCCESS; } else { String error = "加班生成失败!"; @@ -174,9 +228,9 @@ public class OverTimeAction implements Action { }catch(Exception e) { bb.writeLog("OverTimeAction Exception: " + e); + return Action.FAILURE_AND_CONTINUE; } - return Action.SUCCESS; } /** diff --git a/src/weaver/interfaces/sskj/action/OverTimeBatchAction.java b/src/weaver/interfaces/sskj/action/OverTimeBatchAction.java index 5b7fc93..178fb0e 100644 --- a/src/weaver/interfaces/sskj/action/OverTimeBatchAction.java +++ b/src/weaver/interfaces/sskj/action/OverTimeBatchAction.java @@ -1,5 +1,6 @@ package weaver.interfaces.sskj.action; +import cn.hutool.core.date.DateUtil; import com.engine.kq.biz.*; import com.engine.kq.entity.KQOvertimeRulesDetailEntity; import com.engine.sskj.util.SskjUtil; @@ -11,10 +12,7 @@ import weaver.general.Util; import weaver.interfaces.workflow.action.Action; import weaver.soa.workflow.request.*; -import java.util.ArrayList; -import java.util.HashMap; -import java.util.List; -import java.util.Map; +import java.util.*; /** * 批量连班加班流程 @@ -159,6 +157,32 @@ public class OverTimeBatchAction implements Action { boolean b = genOvertimeData(requestId, Util.null2String(resourceId), fromDate, toDate, belongTo, fromTime, toTime, String.valueOf(durationOfOvertime), String.valueOf(changeType), "1", String.valueOf(paidLeaveEnable), String.valueOf(computingMode), null); if (b) { + + //将加班数据记录到连班加班建模表中 + String syncConOverTimeSql = "insert into uf_conOvertime (resourceId, fromDate, fromTime, toDate, toTime, formmodeid, modedatacreater, modedatacreatertype, modedatacreatedate, modedatacreatetime, MODEUUID)" + + " values (?,?,?,?,?,?,?,?,?,?,?)"; + String conOvertimeModeId = bb.getPropValue("project_sskj", "conOvertimeModeId"); + Integer modedatacreater = 1; + Integer modedatacreatertype = 0; + String modedatacreatedate = DateUtil.format(new Date(), "yyyy-MM-dd"); + String modedatacreatetime = DateUtil.format(new Date(), "HH:mm:ss"); + String uuid = UUID.randomUUID().toString(); + bb.writeLog("syncConOverTimeSql:" + syncConOverTimeSql); + + boolean addFlag = rs.executeUpdate(syncConOverTimeSql, resourceId, fromDate, fromTime, toDate, toTime, conOvertimeModeId, modedatacreater, modedatacreatertype, modedatacreatedate, + modedatacreatetime, uuid); + bb.writeLog("addFlag:" + addFlag); + if (addFlag) { + String billid = "-1"; + String acqModeIdSql = "select id from uf_conOvertime where MODEUUID = ?"; + rs.executeQuery(acqModeIdSql, uuid); + while (rs.next()) { + billid = Util.null2String(rs.getString("id")); + } + bb.writeLog("billid:" + billid); + sskjUtil.modePerRecon(modedatacreater, conOvertimeModeId, billid); + } + return Action.SUCCESS; } else { String error = "加班生成失败!"; @@ -195,6 +219,32 @@ public class OverTimeBatchAction implements Action { boolean b = genOvertimeData(requestId, Util.null2String(resourceId), fromDate, toDate, belongTo, fromTime, toTime, String.valueOf(durationOfOvertime), String.valueOf(changeType), "1", String.valueOf(paidLeaveEnable), String.valueOf(computingMode), tiaoxiuId); if (b) { + + //将加班数据记录到连班加班建模表中 + String syncConOverTimeSql = "insert into uf_conOvertime (resourceId, fromDate, fromTime, toDate, toTime, formmodeid, modedatacreater, modedatacreatertype, modedatacreatedate, modedatacreatetime, MODEUUID)" + + " values (?,?,?,?,?,?,?,?,?,?,?)"; + String conOvertimeModeId = bb.getPropValue("project_sskj", "conOvertimeModeId"); + Integer modedatacreater = 1; + Integer modedatacreatertype = 0; + String modedatacreatedate = DateUtil.format(new Date(), "yyyy-MM-dd"); + String modedatacreatetime = DateUtil.format(new Date(), "HH:mm:ss"); + String uuid = UUID.randomUUID().toString(); + bb.writeLog("syncConOverTimeSql:" + syncConOverTimeSql); + + boolean addFlag = rs.executeUpdate(syncConOverTimeSql, resourceId, fromDate, fromTime, toDate, toTime, conOvertimeModeId, modedatacreater, modedatacreatertype, modedatacreatedate, + modedatacreatetime, uuid); + bb.writeLog("addFlag:" + addFlag); + if (addFlag) { + String billid = "-1"; + String acqModeIdSql = "select id from uf_conOvertime where MODEUUID = ?"; + rs.executeQuery(acqModeIdSql, uuid); + while (rs.next()) { + billid = Util.null2String(rs.getString("id")); + } + bb.writeLog("billid:" + billid); + sskjUtil.modePerRecon(modedatacreater, conOvertimeModeId, billid); + } + return Action.SUCCESS; } else { String error = "加班生成失败!";