连班加班,补卡不允许补当天还没到班次结束时间点的卡,消除值夜班班次的连班行政岗班次的迟到

dev-chenwnj
chenwei 2 years ago
parent 0d961a3d7c
commit c23078df0f

@ -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<String,Object> 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<String, Object> checkInfo = (Map<String, Object>) 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) {

@ -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<String,Object> 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;
}

@ -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,10 +15,7 @@ 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.*;
/**
*
@ -45,6 +43,10 @@ public class GetAttendanceCardCmd extends AbstractCommonCommand<Map<String, Obje
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;
@ -94,46 +96,106 @@ public class GetAttendanceCardCmd extends AbstractCommonCommand<Map<String, Obje
//考勤二开--迟到早退不允许补卡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);
// //迟到
// 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);
// //早退
// 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);
//下拉框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);
// 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) {
@ -153,14 +215,14 @@ public class GetAttendanceCardCmd extends AbstractCommonCommand<Map<String, Obje
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);
// 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) {
@ -175,6 +237,9 @@ public class GetAttendanceCardCmd extends AbstractCommonCommand<Map<String, Obje
}
}
/*考勤二开--当前时间在当前班次下班点之前不允许出现下班旷工补卡end*/
}
if (ButtonStatusEnum.NOSIGN.getStatusCode().equalsIgnoreCase(tmp_status)) {
//漏签
cardMap = new HashMap<>();

@ -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;
@ -27,6 +29,7 @@ import java.util.*;
public class GetKQDailyReportCmd extends AbstractCommonCommand<Map<String, Object>> {
private KQLog kqLog = new KQLog();
BaseBean bb = new BaseBean();
public GetKQDailyReportCmd(Map<String, Object> params, User user) {
this.user = user;
@ -202,12 +205,10 @@ public class GetKQDailyReportCmd extends AbstractCommonCommand<Map<String, Objec
} 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) {
@ -511,6 +512,7 @@ public class GetKQDailyReportCmd extends AbstractCommonCommand<Map<String, Objec
String sql = "";
KQTimesArrayComInfo kqTimesArrayComInfo = new KQTimesArrayComInfo();
try{
bb.writeLog("-----getSignDetailInfo start-----");
sql = " select kqdate,resourceid,serialid,serialnumber,workbegindate,workbegintime, " +
" workenddate,workendtime,workmins,signindate,signintime,signoutdate,signouttime, \n" +
" attendanceMins,belatemins,graveBeLateMins,leaveearlymins,graveLeaveEarlyMins,absenteeismmins,forgotcheckMins,forgotBeginWorkCheckMins," +
@ -519,6 +521,7 @@ public class GetKQDailyReportCmd extends AbstractCommonCommand<Map<String, Objec
" where resourceid = " + resourceId + " and kqdate ='" + kqDate + "' \n" +
" order by serialnumber \n";
rs.execute(sql);
bb.writeLog("sql: " + sql);
while (rs.next()) {
String resourceid = Util.null2String(rs.getString("resourceid"));
String kqdate = Util.null2String(rs.getString("kqdate"));
@ -560,6 +563,19 @@ public class GetKQDailyReportCmd extends AbstractCommonCommand<Map<String, Objec
signStatusInfo.put("leaveInfo",leaveInfo);
signStatusInfo.put("evectionMins",evectionMins);
signStatusInfo.put("outMins",outMins);
/*考勤二开--当前时间在当天班次下班点之前不显示旷工start*/
String nowDay = DateUtil.format(new Date(), "yyyy-MM-dd");
String nowTime = DateUtil.format(new Date(), "HH:mm");
bb.writeLog("nowDay: " + nowDay);
bb.writeLog("nowTime: " + nowTime);
bb.writeLog("workenddate: " + workenddate);
bb.writeLog("workendtime: " + kqTimesArrayComInfo.turn48to24Time(workendtime));
if (workenddate.equals(nowDay) && nowTime.compareTo(kqTimesArrayComInfo.turn48to24Time(workendtime)) < 0) {
signStatusInfo.put("isneedcal","1");
}
bb.writeLog("signStatusInfo: " + signStatusInfo);
/*考勤二开--当前时间在当天班次下班点之前不显示旷工end*/
data.put("signintime"+serialnumber, signintime.length()==0?SystemEnv.getHtmlLabelName(25994, user.getLanguage()):signintime);
data.put("signinstatus"+serialnumber, KQReportBiz.getSignStatus(signStatusInfo,user,"on"));
@ -578,6 +594,19 @@ public class GetKQDailyReportCmd extends AbstractCommonCommand<Map<String, Objec
signStatusInfo.put("leaveInfo",leaveInfo);
signStatusInfo.put("evectionMins",evectionMins);
signStatusInfo.put("outMins",outMins);
/*考勤二开--当前时间在当天班次下班点之前不显示旷工start*/
String nowDay = DateUtil.format(new Date(), "yyyy-MM-dd");
String nowTime = DateUtil.format(new Date(), "HH:mm");
bb.writeLog("nowDay: " + nowDay);
bb.writeLog("nowTime: " + nowTime);
bb.writeLog("workenddate: " + workenddate);
bb.writeLog("workendtime: " + kqTimesArrayComInfo.turn48to24Time(workendtime));
if (workenddate.equals(nowDay) && nowTime.compareTo(kqTimesArrayComInfo.turn48to24Time(workendtime)) < 0) {
signStatusInfo.put("isneedcal","1");
}
bb.writeLog("signStatusInfo: " + signStatusInfo);
/*考勤二开--当前时间在当天班次下班点之前不显示旷工end*/
data.put("signouttime"+serialnumber, signouttime.length()==0?SystemEnv.getHtmlLabelName(25994, user.getLanguage()):signouttime);
data.put("signoutstatus"+serialnumber, KQReportBiz.getSignStatus(signStatusInfo,user,"off"));

@ -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<String, Object> params = ParamUtil.request2Map(request);
Map<String, Object> resultDatas = getKqWorkflowService(user).checkConOverTime(params);
return new Gson().toJson(resultDatas);
}
}

@ -8,5 +8,10 @@ public interface KqWorkflowService {
*/
Map<String, Object> calWorkTime(Map<String, Object> params);
/**
*
*/
Map<String, Object> checkConOverTime(Map<String, Object> params);
}

@ -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<String, Object> checkConOverTime(Map<String, Object> params) {
Map<String, Object> 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<String, int[]> 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;
}
}

@ -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;
}
/**

@ -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 = "加班生成失败!";

Loading…
Cancel
Save