Browse Source

哈克同步

pruple_boy 1 month ago
parent
commit
8a55c2e4ff

+ 7 - 2
mjava-hake/src/main/java/com/malk/hake/service/impl/HKImplClient.java

@@ -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 {

+ 1 - 1
mjava/src/main/java/com/malk/service/dingtalk/DDClient_Attendance.java

@@ -79,7 +79,7 @@ public interface DDClient_Attendance {
     List<Map> getLeaveTimeByNames(String access_token, String userid, List<String> leave_names, String from_date, String to_date);
 
     /**
-     * 获取用户考勤数据
+     * 获取用户考勤数据  [ ppExt: attendance_result_list 考勤结果仅最终上下班时间, check_record_list 考勤原始记录 ]
      */
     Map getAttendanceRecord(String access_token, String userid, String work_date);
 

+ 2 - 0
mjava/src/main/java/com/malk/service/dingtalk/impl/DDImplClient_Attendance.java

@@ -159,6 +159,8 @@ public class DDImplClient_Attendance implements DDClient_Attendance {
 
     /**
      * 获取用户考勤数据
+     *
+     * @apiNote https://open.dingtalk.com/document/orgapp/obtain-the-attendance-update-data
      */
     @Override
     public Map getAttendanceRecord(String access_token, String userid, String work_date) {