|
@@ -455,6 +455,10 @@ public class HKImplClient implements HKClient {
|
|
|
|
|
|
/**
|
|
|
* 全量同步考勤
|
|
|
+ * ppExt: 同步说明
|
|
|
+ * - monitor 考勤数据同步需要成对传递, 次日考勤不会更新, 若上班\下班缺卡, 则会导致后续都会持续异常. 且考勤记录不能早于之前的时间
|
|
|
+ * - 若是存在缺卡情况, 缺上班卡则下班卡减1s作为上班时间, 缺下班卡则上班卡加1s作为下班时间; 确保考勤先从clockIn 开始, clockOut 结束;
|
|
|
+ * - 同步前一日考勤全量数据; 取消钉钉考勤回调, 补卡同步, 不能成对出现的场景. 记录异常数据到宜搭日志, 后续手动修正
|
|
|
*/
|
|
|
@Override
|
|
|
public void syncAttendance(String tDate, List<String> userIds) {
|
|
@@ -465,8 +469,8 @@ public class HKImplClient implements HKClient {
|
|
|
if (ObjectUtil.isNull(userIds)) {
|
|
|
userIds = syncContact(true);
|
|
|
}
|
|
|
-// List<Map> reflects = getUserIdReflect();
|
|
|
- List<Map> reflects = Arrays.asList(UtilMap.map("textField_m4sjp8pf, textField_m4sjp8pg", "014729640938335186, 1082859770907354296"));
|
|
|
+ List<Map> reflects = getUserIdReflect(); // 钉钉Id -> monitorId
|
|
|
+// List<Map> reflects = Arrays.asList(UtilMap.map("textField_m4sjp8pf, textField_m4sjp8pg", "131022580326061279, 1082858538248001906"));
|
|
|
log.info("考勤同步信息, 人员数量 = {}, id映射表数据 = {}", userIds.size(), reflects.size());
|
|
|
|
|
|
for (String userId : userIds) {
|
|
@@ -480,6 +484,7 @@ public class HKImplClient implements HKClient {
|
|
|
Map record = ddClient_attendance.getAttendanceRecord(ddClient.getAccessToken(), userId, tDate);
|
|
|
List<Map> checks = UtilMap.getList(record, "attendance_result_list");
|
|
|
checks.sort(Comparator.comparingLong(item -> UtilDateTime.parseDateTime(UtilMap.getString(item, "user_check_time")).getTime())); // 排序
|
|
|
+ log.info("考勤记录, {}, result = {}, record = {}", UtilMap.getString((Map) optional.get(), "employeeField_lo47byyj"), checks.size(), UtilMap.getList(record, "check_record_list").size());
|
|
|
for (Map check : checks) {
|
|
|
boolean isIn = !"OffDuty".equals(UtilMap.getString(check, "check_type"));
|
|
|
try {
|