|
@@ -711,6 +711,7 @@ public class WxCorpInfoServiceImpl extends ServiceImpl<WxCorpInfoMapper, WxCorpI
|
|
needRecaculate = true;
|
|
needRecaculate = true;
|
|
}
|
|
}
|
|
} else if (leaveText.startsWith("外出")) {
|
|
} else if (leaveText.startsWith("外出")) {
|
|
|
|
+
|
|
String string = holiday.getJSONObject("sp_description").getJSONArray("data").getJSONObject(m).getString("text");
|
|
String string = holiday.getJSONObject("sp_description").getJSONArray("data").getJSONObject(m).getString("text");
|
|
String[] s = string.split(" |\\~");
|
|
String[] s = string.split(" |\\~");
|
|
//获取到外出的开始时间和结束时间
|
|
//获取到外出的开始时间和结束时间
|
|
@@ -718,14 +719,65 @@ public class WxCorpInfoServiceImpl extends ServiceImpl<WxCorpInfoMapper, WxCorpI
|
|
if (s.length < 5) {
|
|
if (s.length < 5) {
|
|
isOldFormat = true;
|
|
isOldFormat = true;
|
|
}
|
|
}
|
|
- String outEnd = isOldFormat ? s[3] : s[4];
|
|
|
|
- String outStart = s[1];
|
|
|
|
|
|
+ //获取外出的日期; 9/1格式
|
|
|
|
+ String dateStart = localDate.getYear() + "/" + s[0];
|
|
|
|
+ String dateEnd = localDate.getYear() + "/" + (isOldFormat ? s[2] : s[3]);
|
|
|
|
+ LocalDate sDate = LocalDate.parse(dateStart, mdFormat);
|
|
|
|
+ LocalDate eDate = LocalDate.parse(dateEnd, mdFormat);
|
|
|
|
+ String outEnd = "";
|
|
|
|
+ String outStart = "";
|
|
|
|
+
|
|
|
|
+ if (sDate.isEqual(eDate)) {
|
|
|
|
+ //外出在一天内
|
|
|
|
+ outEnd = isOldFormat ? s[3] : s[4];
|
|
|
|
+ outStart = s[1];
|
|
|
|
+ } else {
|
|
|
|
+ if (showLog) System.out.println("跨天外出===");
|
|
|
|
+ if (showLog)
|
|
|
|
+ System.out.println("当天==" + localDate + ", sDate=" + sDate + ", 比较=" + (localDate.isEqual(sDate)));
|
|
|
|
+ //跨天外出,获取期间的非工作日,加进去
|
|
|
|
+ List<LocalDate> localDates = WorkDayCalculateUtils.getNonWorkDaysListInRange(dtf.format(sDate) ,dtf.format(eDate));
|
|
|
|
+ for (LocalDate curLdate : localDates) {
|
|
|
|
+ if (!betweenNonWorkDays.stream().anyMatch(be->be.isEqual(curLdate))) {
|
|
|
|
+ if (showLog) System.out.println("含非工作日请假:"+curLdate);
|
|
|
|
+ betweenNonWorkDays.add(curLdate);
|
|
|
|
+ }
|
|
|
|
+ }
|
|
|
|
+ if (betweenNonWorkDays.size() > 0) {
|
|
|
|
+ betweenTotalDays = (int)sDate.until(eDate, ChronoUnit.DAYS) + 1;
|
|
|
|
+ if (showLog) System.out.println("总跨度外出天数为:"+betweenTotalDays);
|
|
|
|
+ }
|
|
|
|
+ if (localDate.isEqual(sDate)) {
|
|
|
|
+ //当前日期第一天,需判断上下午半天请假的情况
|
|
|
|
+ if (showLog) System.out.println("跨天外出第一天outStart为:"+outStart);
|
|
|
|
+ if (outStart.equals("上午")) {
|
|
|
|
+ outStart = baseMorningStart;
|
|
|
|
+ } else if (outStart.equals("下午")) {
|
|
|
|
+ outStart = baseAfternoonStart;
|
|
|
|
+ }
|
|
|
|
+ //跨天请假的第一天,结束时间默认为18:00
|
|
|
|
+ outEnd = baseAfternoonEnd;//上午开始请假的算全天
|
|
|
|
+ } else if (localDate.isEqual(eDate)) {
|
|
|
|
+ //当前日期就是最后一天,需判断上下午半天请假的情况
|
|
|
|
+ if (outEnd.equals("下午")) {
|
|
|
|
+ outEnd = baseAfternoonEnd;//请假到最后一天的下午,就算是全天
|
|
|
|
+ } else if (outEnd.equals("上午")) {
|
|
|
|
+ //上午外出
|
|
|
|
+ outEnd = baseMorningEnd;
|
|
|
|
+ }
|
|
|
|
+ outStart = baseMorningStart;
|
|
|
|
+ } else {
|
|
|
|
+ //中间日期就是全天
|
|
|
|
+ outStart = baseMorningStart;
|
|
|
|
+ outEnd = baseAfternoonEnd;
|
|
|
|
+ if (showLog) System.out.println("===中间天请假===");
|
|
|
|
+ }
|
|
|
|
+ }
|
|
//获取外出的最早的开始时间和最晚的结束时间最为当天考勤的最早和最晚时间
|
|
//获取外出的最早的开始时间和最晚的结束时间最为当天考勤的最早和最晚时间
|
|
if (ct.getStartTime().equals("00:00") || ct.getStartTime().compareTo(outStart) > 0) {
|
|
if (ct.getStartTime().equals("00:00") || ct.getStartTime().compareTo(outStart) > 0) {
|
|
ct.setStartTime(outStart);
|
|
ct.setStartTime(outStart);
|
|
needRecaculate = true;
|
|
needRecaculate = true;
|
|
}
|
|
}
|
|
-
|
|
|
|
if (ct.getEndTime().compareTo(outEnd) < 0) {
|
|
if (ct.getEndTime().compareTo(outEnd) < 0) {
|
|
ct.setEndTime(outEnd);
|
|
ct.setEndTime(outEnd);
|
|
needRecaculate = true;
|
|
needRecaculate = true;
|