|
|
|
@ -2,24 +2,29 @@ package com.engine.kq.biz;
|
|
|
|
|
|
|
|
|
|
import com.alibaba.fastjson.JSON;
|
|
|
|
|
import com.alibaba.fastjson.JSONObject;
|
|
|
|
|
import com.cloudstore.dev.api.util.Util_DataMap;
|
|
|
|
|
import com.engine.kq.biz.chain.shiftinfo.ShiftInfoBean;
|
|
|
|
|
import com.engine.kq.cmd.attendanceButton.ButtonStatusEnum;
|
|
|
|
|
import com.engine.kq.entity.KQShiftRuleEntity;
|
|
|
|
|
import com.engine.kq.entity.TimeScopeEntity;
|
|
|
|
|
import com.engine.kq.entity.TimeSignScopeEntity;
|
|
|
|
|
import com.engine.kq.entity.WorkTimeEntity;
|
|
|
|
|
import com.engine.kq.enums.FlowReportTypeEnum;
|
|
|
|
|
import com.engine.kq.log.KQLog;
|
|
|
|
|
import com.engine.kq.util.UtilKQ;
|
|
|
|
|
import com.google.common.collect.Lists;
|
|
|
|
|
import com.google.common.collect.Maps;
|
|
|
|
|
import com.googlecode.aviator.AviatorEvaluator;
|
|
|
|
|
import com.googlecode.aviator.Expression;
|
|
|
|
|
import java.util.concurrent.ConcurrentHashMap;
|
|
|
|
|
import org.apache.commons.lang3.StringUtils;
|
|
|
|
|
import weaver.common.DateUtil;
|
|
|
|
|
import weaver.conn.BatchRecordSet;
|
|
|
|
|
import weaver.conn.RecordSet;
|
|
|
|
|
import weaver.file.Prop;
|
|
|
|
|
import weaver.general.BaseBean;
|
|
|
|
|
import weaver.general.InitServer;
|
|
|
|
|
import weaver.general.Util;
|
|
|
|
|
|
|
|
|
|
import java.util.*;
|
|
|
|
|
import java.util.regex.Matcher;
|
|
|
|
|
import java.util.regex.Pattern;
|
|
|
|
@ -310,9 +315,28 @@ public class KQFormatData extends BaseBean {
|
|
|
|
|
|
|
|
|
|
int[] dayMins = new int[2880];//一天所有分钟数
|
|
|
|
|
Arrays.fill(dayMins, -1);
|
|
|
|
|
// 一天4次打卡单独做判断
|
|
|
|
|
// 一天4次打卡单独做判断,如果是上午下班打卡和下午上班打卡时间重叠,那么上午的下班卡取最早的,下午的上班卡取最晚的。用shiftCount是否等于-1判断,-1就走标准不重叠。2就表示重叠走新的逻辑
|
|
|
|
|
int shiftCount = lsWorkTime == null ? 0 : lsWorkTime.size();
|
|
|
|
|
int shiftI = 0;
|
|
|
|
|
String signEndDateTimeZero = "";
|
|
|
|
|
for (int i = 0; lsWorkTime != null && i < lsWorkTime.size(); i++) {
|
|
|
|
|
shiftI = i;
|
|
|
|
|
TimeScopeEntity signTimeScope = lsSignTime.get(i);
|
|
|
|
|
TimeScopeEntity workTimeScope = lsWorkTime.get(i);
|
|
|
|
|
String signBeginDateTime = signTimeScope.getBeginTimeAcross() ? nextDate : kqDate;
|
|
|
|
|
if(signTimeScope.isBeginTimePreAcross()){
|
|
|
|
|
signBeginDateTime = preDate;
|
|
|
|
|
}
|
|
|
|
|
signBeginDateTime+=" "+kqTimesArrayComInfo.turn48to24Time(signTimeScope.getBeginTime())+":00";
|
|
|
|
|
String signEndDateTime = signTimeScope.getEndTimeAcross() ? nextDate : kqDate;
|
|
|
|
|
signEndDateTime+=" "+kqTimesArrayComInfo.turn48to24Time(signTimeScope.getEndTime())+":59";
|
|
|
|
|
if (shiftCount == 2 && shiftI == 0) {
|
|
|
|
|
signEndDateTimeZero = signEndDateTime;
|
|
|
|
|
}
|
|
|
|
|
if (shiftCount == 2 && shiftI == 1) {
|
|
|
|
|
shiftCount = signBeginDateTime.compareTo(signEndDateTimeZero) <= 0 ? shiftCount : -1;
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
for (int i = 0; lsWorkTime != null && i < lsWorkTime.size(); i++) {
|
|
|
|
|
shiftI = i;
|
|
|
|
|
params = new ArrayList<>();
|
|
|
|
@ -591,7 +615,7 @@ public class KQFormatData extends BaseBean {
|
|
|
|
|
if(signInTimeOutdx4Sign<signInTimeIndx4Sign){
|
|
|
|
|
signMins = 1440 + signInTimeOutdx4Sign - signInTimeIndx4Sign;
|
|
|
|
|
}else{
|
|
|
|
|
signMins = signInTimeOutdx4Sign - signInTimeIndx4Sign;
|
|
|
|
|
signMins = 1440 + signInTimeOutdx4Sign - signInTimeIndx4Sign;
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
}else{
|
|
|
|
@ -670,6 +694,12 @@ public class KQFormatData extends BaseBean {
|
|
|
|
|
int tmpBeginIdx = beginIdx;
|
|
|
|
|
int tmpEndIdx = endIdx;
|
|
|
|
|
Integer val = 0;
|
|
|
|
|
if(beginIdx>=workEndIdx){
|
|
|
|
|
continue;
|
|
|
|
|
}
|
|
|
|
|
if(endIdx<=workBeginIdx){
|
|
|
|
|
continue;
|
|
|
|
|
}
|
|
|
|
|
if(leaveInfo.get(newLeaveType)==null){
|
|
|
|
|
leaveInfo.put(newLeaveType,val);
|
|
|
|
|
}else{
|
|
|
|
@ -854,7 +884,7 @@ public class KQFormatData extends BaseBean {
|
|
|
|
|
forgotCheckMins = 0;
|
|
|
|
|
forgotBeginWorkCheckMins = 0;
|
|
|
|
|
}
|
|
|
|
|
//允许下班不打卡 ,如果上班也没有打卡,那么算漏签
|
|
|
|
|
//允许下班不打卡 ,如果上班也没有打卡,那么算上班旷工0.5天
|
|
|
|
|
if (isoffdutyfreecheck) {
|
|
|
|
|
if (checkIn == 0) {//(无签到),就会有上班漏签,如果有下班卡,那么上班漏签
|
|
|
|
|
if(forgotBeginWorkCheckMins==0&&absenteeismMins>0){
|
|
|
|
|