|
|
|
@ -274,6 +274,8 @@ public class GetClockInPointCmd extends AbstractCommonCommand<Map<String, Object
|
|
|
|
|
|
|
|
|
|
/**卡点集合*/
|
|
|
|
|
List<ClockPointDTO> clcokInTimeData = Lists.newArrayList();
|
|
|
|
|
List<Map<String, Object>> restScheduleList = scheduleResult.stream().filter(e -> (ClassSegmentTypeEnum.REST_AND_DINE.getKey().equals(e.get("bdlx")) || ClassSegmentTypeEnum.REST_PERIOD.getKey().equals(e.get("bdlx"))
|
|
|
|
|
|| ClassSegmentTypeEnum.DINING_PERIOD.getKey().equals(e.get("bdlx"))) && CheckBoxEnum.CHECKED.getKey().equals(e.get("dtsfdx"))).collect(Collectors.toList());
|
|
|
|
|
|
|
|
|
|
for (Map<String, Object> needClockIn : scheduleResult) {
|
|
|
|
|
/**非请假外出开始打卡逻辑处理*/
|
|
|
|
@ -324,8 +326,7 @@ public class GetClockInPointCmd extends AbstractCommonCommand<Map<String, Object
|
|
|
|
|
/**
|
|
|
|
|
* 计算休息时间段的弹性上下班
|
|
|
|
|
*/
|
|
|
|
|
List<Map<String, Object>> restScheduleList = scheduleResult.stream().filter(e -> (ClassSegmentTypeEnum.REST_AND_DINE.getKey().equals(e.get("bdlx")) || ClassSegmentTypeEnum.REST_PERIOD.getKey().equals(e.get("bdlx"))
|
|
|
|
|
|| ClassSegmentTypeEnum.DINING_PERIOD.getKey().equals(e.get("bdlx"))) && CheckBoxEnum.CHECKED.getKey().equals(e.get("dtsfdx"))).collect(Collectors.toList());
|
|
|
|
|
|
|
|
|
|
if (restScheduleList.size() > 0){
|
|
|
|
|
flexibleRestClass(restScheduleList,clcokInTimeData,scheduleResult);
|
|
|
|
|
}
|
|
|
|
@ -981,6 +982,7 @@ public class GetClockInPointCmd extends AbstractCommonCommand<Map<String, Object
|
|
|
|
|
//打卡时间大于等于最早打卡时间
|
|
|
|
|
timeType = ClockPointEnum.BEFORE;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
}
|
|
|
|
|
if (ClockPointEnum.EMPTY.equals(timeType) && ksdkNearestClcokInTime.get(ClockPointEnum.AFTER) != null) {
|
|
|
|
|
String clockInTime = ksdkNearestClcokInTime.get(ClockPointEnum.AFTER).get("signdate") + " " + ksdkNearestClcokInTime.get(ClockPointEnum.AFTER).get("signtime");
|
|
|
|
@ -989,6 +991,7 @@ public class GetClockInPointCmd extends AbstractCommonCommand<Map<String, Object
|
|
|
|
|
//打卡时间小于结束时间
|
|
|
|
|
timeType = ClockPointEnum.AFTER;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
}
|
|
|
|
|
return timeType;
|
|
|
|
|
}
|
|
|
|
@ -1015,16 +1018,40 @@ public class GetClockInPointCmd extends AbstractCommonCommand<Map<String, Object
|
|
|
|
|
}
|
|
|
|
|
if (ClockPointEnum.EMPTY.equals(timeType) && jsdkNearestClcokInTime.get(ClockPointEnum.AFTER) != null) {
|
|
|
|
|
String clockInTime = jsdkNearestClcokInTime.get(ClockPointEnum.AFTER).get("signdate") + " " + jsdkNearestClcokInTime.get(ClockPointEnum.AFTER).get("signtime");
|
|
|
|
|
if (DateUtil.getTime(clockInTime).compareTo(DateUtil.getTime(DateUtil.AfterMinutes(maxelasticTime, thdkfzs))) <= 0 &&
|
|
|
|
|
(getNextClockTime(needClockDateList,dtjssj).equals("") || DateUtil.getTime(clockInTime).compareTo(DateUtil.getTime(getNextClockTime(needClockDateList,dtjssj))) < 0)) {
|
|
|
|
|
if (dtjssj.equals(maxelasticTime)){
|
|
|
|
|
if (DateUtil.getTime(clockInTime).compareTo(DateUtil.getTime(DateUtil.AfterMinutes(maxelasticTime, thdkfzs))) <= 0 &&
|
|
|
|
|
(getNextClockTime(needClockDateList,dtjssj).equals("") || DateUtil.getTime(clockInTime).compareTo(DateUtil.getTime(getNextClockTime(needClockDateList,dtjssj))) < 0)) {
|
|
|
|
|
timeType = ClockPointEnum.AFTER;
|
|
|
|
|
}
|
|
|
|
|
}else {
|
|
|
|
|
//弹性逻辑
|
|
|
|
|
if (DateUtil.getTime(clockInTime).compareTo(DateUtil.getTime(DateUtil.AfterMinutes(maxelasticTime, thdkfzs))) <= 0 &&
|
|
|
|
|
(getNextClockTime(needClockDateList,dtjssj).equals("") || DateUtil.getTime(clockInTime).compareTo(DateUtil.getTime(getNextClockTime(needClockDateList,dtjssj))) < 0 ||
|
|
|
|
|
DateUtil.getTime(maxelasticTime).compareTo(DateUtil.getTime(getNextClockTime(needClockDateList,dtjssj))) >= 0)) {
|
|
|
|
|
timeType = ClockPointEnum.AFTER;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
if (DateUtil.getTime(clockInTime).compareTo(DateUtil.getTime(DateUtil.AfterMinutes(maxelasticTime, thdkfzs))) <= 0) {
|
|
|
|
|
timeType = ClockPointEnum.AFTER;
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
if (ClockPointEnum.EMPTY.equals(timeType) && jsdkNearestClcokInTime.get(ClockPointEnum.BEFORE) != null) {
|
|
|
|
|
String clockInTime = jsdkNearestClcokInTime.get(ClockPointEnum.BEFORE).get("signdate") + " " + jsdkNearestClcokInTime.get(ClockPointEnum.BEFORE).get("signtime");
|
|
|
|
|
if (getBeforeClockTime(needClockDateList,dtjssj).equals("") || DateUtil.getTime(clockInTime).compareTo(DateUtil.getTime(getBeforeClockTime(needClockDateList,dtjssj))) > 0) {
|
|
|
|
|
timeType = ClockPointEnum.BEFORE;
|
|
|
|
|
if (dtjssj.equals(maxelasticTime)){
|
|
|
|
|
if (getBeforeClockTime(needClockDateList,dtjssj).equals("") || DateUtil.getTime(clockInTime).compareTo(DateUtil.getTime(getBeforeClockTime(needClockDateList,dtjssj))) > 0) {
|
|
|
|
|
timeType = ClockPointEnum.BEFORE;
|
|
|
|
|
}
|
|
|
|
|
}else {
|
|
|
|
|
int betweenTime = DateUtil.getBetWeenMinutes(dtjssj,maxelasticTime);
|
|
|
|
|
if (getBeforeClockTime(needClockDateList,dtjssj).equals("") || DateUtil.getTime(clockInTime).compareTo(DateUtil.getTime(getBeforeClockTime(needClockDateList,dtjssj))) > 0
|
|
|
|
|
|| DateUtil.getTime(clockInTime).compareTo(DateUtil.getTime(DateUtil.beforeMinutes(dtjssj,betweenTime))) >=0) {
|
|
|
|
|
timeType = ClockPointEnum.BEFORE;
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
timeType = ClockPointEnum.BEFORE;
|
|
|
|
|
}
|
|
|
|
|
return timeType;
|
|
|
|
|
}
|
|
|
|
|