|
@@ -1857,92 +1857,90 @@ public class WxCorpInfoServiceImpl extends ServiceImpl<WxCorpInfoMapper, WxCorpI
|
|
|
if (showLog) System.out.println("请假时长为:"+ct.getAskLeaveTime()+"小时");
|
|
if (showLog) System.out.println("请假时长为:"+ct.getAskLeaveTime()+"小时");
|
|
|
}
|
|
}
|
|
|
} else if (leaveText.startsWith("外出") || leaveText.startsWith("出差") || leaveText.startsWith("外勤")) {
|
|
} else if (leaveText.startsWith("外出") || leaveText.startsWith("出差") || leaveText.startsWith("外勤")) {
|
|
|
- //格式 "10/17 09:00 / 10/19 18:00", "10/17 上午 / 10/17 下午"
|
|
|
|
|
- String string = holiday.getJSONObject("sp_description").getJSONArray("data").getJSONObject(m).getString("text");
|
|
|
|
|
- String[] s = string.split(" \\/ | |\\~");
|
|
|
|
|
- if (showLog) {
|
|
|
|
|
- for (String ss : s) {
|
|
|
|
|
- System.out.println(ss);
|
|
|
|
|
- }
|
|
|
|
|
- }
|
|
|
|
|
- //获取到外出的开始时间和结束时间
|
|
|
|
|
- boolean isOldFormat = false;
|
|
|
|
|
- if (s.length < 5) {
|
|
|
|
|
- isOldFormat = true;
|
|
|
|
|
- }
|
|
|
|
|
- //获取外出的日期; 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);
|
|
|
|
|
- //跨年情况的校验
|
|
|
|
|
- if (eDate.isBefore(sDate)) {
|
|
|
|
|
- eDate = eDate.plusYears(1);
|
|
|
|
|
- }
|
|
|
|
|
- String outEnd = isOldFormat ? s[3] : s[4];
|
|
|
|
|
- String outStart = s[1];
|
|
|
|
|
- if (sDate.isEqual(eDate)) {
|
|
|
|
|
- //外出在一天内
|
|
|
|
|
- if (outStart.equals("上午")) {
|
|
|
|
|
- outStart = baseMorningStart;
|
|
|
|
|
- } else if (outStart.equals("下午")) {
|
|
|
|
|
- outStart = baseAfternoonStart;
|
|
|
|
|
- }
|
|
|
|
|
- if (outEnd.equals("上午")) {
|
|
|
|
|
- outEnd = baseMorningEnd;
|
|
|
|
|
- } else if (outEnd.equals("下午")) {
|
|
|
|
|
- outEnd = baseAfternoonEnd;
|
|
|
|
|
|
|
+ boolean isXiHe = corpInfo.getCompanyId() == Constant.XI_HE_CHAO_DAO_COMPANY_ID || corpInfo.getCompanyId() == Constant.XI_HE_CHAO_DAO_JIA_XING_COMPANY_ID;
|
|
|
|
|
+ if (!isXiHe || leaveText.startsWith("出差")) {//非羲合超导或者出差的情况,需要校准上下班时间。 羲合超导的外出和外勤情况也需要打卡,以打卡的为准。
|
|
|
|
|
+ //格式 "10/17 09:00 / 10/19 18:00", "10/17 上午 / 10/17 下午"
|
|
|
|
|
+ String string = holiday.getJSONObject("sp_description").getJSONArray("data").getJSONObject(m).getString("text");
|
|
|
|
|
+ String[] s = string.split(" \\/ | |\\~");
|
|
|
|
|
+ //获取到外出的开始时间和结束时间
|
|
|
|
|
+ boolean isOldFormat = false;
|
|
|
|
|
+ if (s.length < 5) {
|
|
|
|
|
+ isOldFormat = true;
|
|
|
}
|
|
}
|
|
|
- } 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);
|
|
|
|
|
- }
|
|
|
|
|
|
|
+ //获取外出的日期; 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);
|
|
|
|
|
+ //跨年情况的校验
|
|
|
|
|
+ if (eDate.isBefore(sDate)) {
|
|
|
|
|
+ eDate = eDate.plusYears(1);
|
|
|
}
|
|
}
|
|
|
- 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);
|
|
|
|
|
|
|
+ String outEnd = isOldFormat ? s[3] : s[4];
|
|
|
|
|
+ String outStart = s[1];
|
|
|
|
|
+ if (sDate.isEqual(eDate)) {
|
|
|
|
|
+ //外出在一天内
|
|
|
if (outStart.equals("上午")) {
|
|
if (outStart.equals("上午")) {
|
|
|
outStart = baseMorningStart;
|
|
outStart = baseMorningStart;
|
|
|
} else if (outStart.equals("下午")) {
|
|
} else if (outStart.equals("下午")) {
|
|
|
outStart = baseAfternoonStart;
|
|
outStart = baseAfternoonStart;
|
|
|
}
|
|
}
|
|
|
- //跨天请假的第一天,结束时间默认为18:00
|
|
|
|
|
- outEnd = baseAfternoonEnd;//上午开始请假的算全天
|
|
|
|
|
- } else if (localDate.isEqual(eDate)) {
|
|
|
|
|
- //当前日期就是最后一天,需判断上下午半天请假的情况
|
|
|
|
|
- if (outEnd.equals("下午")) {
|
|
|
|
|
- outEnd = baseAfternoonEnd;//请假到最后一天的下午,就算是全天
|
|
|
|
|
- } else if (outEnd.equals("上午")) {
|
|
|
|
|
- //上午外出
|
|
|
|
|
|
|
+ if (outEnd.equals("上午")) {
|
|
|
outEnd = baseMorningEnd;
|
|
outEnd = baseMorningEnd;
|
|
|
|
|
+ } else if (outEnd.equals("下午")) {
|
|
|
|
|
+ outEnd = baseAfternoonEnd;
|
|
|
}
|
|
}
|
|
|
- outStart = baseMorningStart;
|
|
|
|
|
} else {
|
|
} else {
|
|
|
- //中间日期就是全天
|
|
|
|
|
- outStart = baseMorningStart;
|
|
|
|
|
- outEnd = baseAfternoonEnd;
|
|
|
|
|
- if (showLog) System.out.println("===中间天外出===");
|
|
|
|
|
|
|
+ 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) {
|
|
|
|
|
+ ct.setStartTime(outStart);
|
|
|
|
|
+ needRecaculate = true;
|
|
|
|
|
+ }
|
|
|
|
|
+ if (ct.getEndTime().compareTo(outEnd) < 0) {
|
|
|
|
|
+ ct.setEndTime(outEnd);
|
|
|
|
|
+ needRecaculate = true;
|
|
|
}
|
|
}
|
|
|
- }
|
|
|
|
|
- //获取外出的最早的开始时间和最晚的结束时间最为当天考勤的最早和最晚时间
|
|
|
|
|
- if (ct.getStartTime().equals("00:00") || ct.getStartTime().compareTo(outStart) > 0) {
|
|
|
|
|
- ct.setStartTime(outStart);
|
|
|
|
|
- needRecaculate = true;
|
|
|
|
|
- }
|
|
|
|
|
- if (ct.getEndTime().compareTo(outEnd) < 0) {
|
|
|
|
|
- ct.setEndTime(outEnd);
|
|
|
|
|
- needRecaculate = true;
|
|
|
|
|
}
|
|
}
|
|
|
}
|
|
}
|
|
|
}
|
|
}
|
|
@@ -2017,7 +2015,7 @@ public class WxCorpInfoServiceImpl extends ServiceImpl<WxCorpInfoMapper, WxCorpI
|
|
|
}
|
|
}
|
|
|
break;
|
|
break;
|
|
|
case 2://补卡
|
|
case 2://补卡
|
|
|
- case 3://出差
|
|
|
|
|
|
|
+ case 3://出差;以出差为准
|
|
|
case 4://外出
|
|
case 4://外出
|
|
|
case 100://外勤
|
|
case 100://外勤
|
|
|
Double outdoorTime = ct.getOutdoorTime();
|
|
Double outdoorTime = ct.getOutdoorTime();
|
|
@@ -2274,21 +2272,11 @@ public class WxCorpInfoServiceImpl extends ServiceImpl<WxCorpInfoMapper, WxCorpI
|
|
|
} else {
|
|
} else {
|
|
|
if (hasTimeRecord) {
|
|
if (hasTimeRecord) {
|
|
|
if (showLog) System.out.println("插入考勤记录"+curUserid+", "+localDate);
|
|
if (showLog) System.out.println("插入考勤记录"+curUserid+", "+localDate);
|
|
|
-// userCorpwxTimeMapper.insert(ct);
|
|
|
|
|
insertList.add(ct);
|
|
insertList.add(ct);
|
|
|
}
|
|
}
|
|
|
- //影响性能,此处不再获取打卡,用户手动刷新单日接口本身有后续的获取打卡记录步骤,这里为冗余代码,需要去掉
|
|
|
|
|
-// else if (startTime == endTime){ //只在单日刷新考勤的情况下,才去获取打卡详情来计算
|
|
|
|
|
-// //调用打卡详情去获取,弥补外出打卡且时间不在自动同步范围内的情况; 仅对工作日有效
|
|
|
|
|
-// if (timeTypeService.isWorkDay(corpInfo.getCompanyId(), localDate, timeType, holidaySettings)) {
|
|
|
|
|
-// getUserPunchRecord(corpInfo.getCompanyId(), curUserid, localDate.atTime(0,0,0),
|
|
|
|
|
-// localDate.atTime(23,59,59), showLog);
|
|
|
|
|
-// }
|
|
|
|
|
-// }
|
|
|
|
|
}
|
|
}
|
|
|
//保存异常情况记录
|
|
//保存异常情况记录
|
|
|
if (corpInfo.getCompanyId() == Constant.XI_HE_CHAO_DAO_JIA_XING_COMPANY_ID || corpInfo.getCompanyId() == Constant.XI_HE_CHAO_DAO_COMPANY_ID) {
|
|
if (corpInfo.getCompanyId() == Constant.XI_HE_CHAO_DAO_JIA_XING_COMPANY_ID || corpInfo.getCompanyId() == Constant.XI_HE_CHAO_DAO_COMPANY_ID) {
|
|
|
-// saveException(ct, jsonObject.getJSONArray("exception_infos"));
|
|
|
|
|
List<ExceptionInfos> exceptionInfos = getExceptionInfos(ct, jsonObject.getJSONArray("exception_infos"));
|
|
List<ExceptionInfos> exceptionInfos = getExceptionInfos(ct, jsonObject.getJSONArray("exception_infos"));
|
|
|
if (exceptionInfos != null) {
|
|
if (exceptionInfos != null) {
|
|
|
allExceptionInfoList.addAll(exceptionInfos);
|
|
allExceptionInfoList.addAll(exceptionInfos);
|
|
@@ -2307,7 +2295,6 @@ public class WxCorpInfoServiceImpl extends ServiceImpl<WxCorpInfoMapper, WxCorpI
|
|
|
}
|
|
}
|
|
|
} else {
|
|
} else {
|
|
|
//TODO: 记录同步失败
|
|
//TODO: 记录同步失败
|
|
|
-
|
|
|
|
|
throw new Exception(json.toJSONString());
|
|
throw new Exception(json.toJSONString());
|
|
|
}
|
|
}
|
|
|
|
|
|
|
@@ -2330,16 +2317,6 @@ public class WxCorpInfoServiceImpl extends ServiceImpl<WxCorpInfoMapper, WxCorpI
|
|
|
return list;
|
|
return list;
|
|
|
}
|
|
}
|
|
|
|
|
|
|
|
- private double convertDayTimeToHours(double d) {
|
|
|
|
|
- if (d == 12) {
|
|
|
|
|
- return 4.0;
|
|
|
|
|
- } else if (d == 24) {
|
|
|
|
|
- return 8.0;
|
|
|
|
|
- } else {
|
|
|
|
|
- return d;
|
|
|
|
|
- }
|
|
|
|
|
- }
|
|
|
|
|
-
|
|
|
|
|
//更新审核中的请假单以及查询某时间段的微信请假单
|
|
//更新审核中的请假单以及查询某时间段的微信请假单
|
|
|
@Override
|
|
@Override
|
|
|
public List<LeaveSheet> wxLeaveNumber(String startTime,String endTime,List<WxCorpInfo> wxCorpInfos,List<LeaveSheet> approvalLeave) throws Exception {
|
|
public List<LeaveSheet> wxLeaveNumber(String startTime,String endTime,List<WxCorpInfo> wxCorpInfos,List<LeaveSheet> approvalLeave) throws Exception {
|