瀏覽代碼

泛薇考勤打卡 请假 出差 数据同步

yurk 2 年之前
父節點
當前提交
cce3cf0967

+ 33 - 13
fhKeeper/formulahousekeeper/management-platform/src/main/java/com/management/platform/task/TimingTask.java

@@ -34,10 +34,7 @@ import java.text.DecimalFormat;
 import java.time.*;
 import java.time.format.DateTimeFormatter;
 import java.time.temporal.TemporalAccessor;
-import java.util.ArrayList;
-import java.util.HashMap;
-import java.util.List;
-import java.util.Map;
+import java.util.*;
 import java.util.stream.Collectors;
 import java.util.stream.IntStream;
 
@@ -190,7 +187,7 @@ public class TimingTask {
     }
 
     //每天2:11 同步钉钉用户前2天到未来30天时间段的打卡,请假,出差数据
-    @Scheduled(cron = "0 30 2 ? * *")
+    @Scheduled(cron = "0 11 2 ? * *")
     private void synFanWeiWorkData() {
         if (isDev) return;
         List<TimeType> timeTypeList = timeTypeMapper.selectList(new QueryWrapper<TimeType>().eq("sync_fanwei", 1));
@@ -202,10 +199,13 @@ public class TimingTask {
         JSONObject jsonObject=new JSONObject();
         DateTimeFormatter dtf = DateTimeFormatter.ofPattern("yyyy-MM-dd");
         DateTimeFormatter dtf1 = DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss");
-        DateTimeFormatter dtf2 = DateTimeFormatter.ofPattern("HH:mm:ss");
+        DateTimeFormatter dtf2 = DateTimeFormatter.ofPattern("HH:mm");
         LocalDateTime yesterday = LocalDateTime.now().minusDays(2);
         String startDate = dtf.format(yesterday);
         String endDate = dtf.format(yesterday.plusDays(32));
+        List<UserFvTime> oldUserFvTimeList = userFvTimeService.list(new QueryWrapper<UserFvTime>().in("company_id", compIds));
+        List<LeaveSheet> oldLeaveSheetList = leaveSheetService.list(new QueryWrapper<LeaveSheet>().in("company_id", compIds));
+        List<BusinessTrip> oldBusinessTripList = businessTripService.list(new QueryWrapper<BusinessTrip>().in("company_id", compIds));
         jsonObject.put("startDate",startDate);
         jsonObject.put("endDate",endDate);
         String jsonString = jsonObject.toJSONString();
@@ -222,19 +222,27 @@ public class TimingTask {
                 continue;
             }
             if(compIds.contains(user.getCompanyId())){
-                userFvTime.setWorkDate((LocalDate) map.get("workDate"));
+                userFvTime.setWorkDate(LocalDate.parse(String.valueOf(map.get("workDate")),dtf));
                 LocalTime startTime = LocalTime.parse(String.valueOf(map.get("startTime")), dtf2);
-                LocalTime endTime = LocalTime.parse(String.valueOf(map.get("startTime")), dtf2);
-                Duration between = Duration.between(startTime, endTime);
+                LocalTime endTime = LocalTime.parse(String.valueOf(map.get("endTime")), dtf2);
+                LocalDateTime time1= LocalDate.now().atTime(startTime);
+                LocalDateTime time2 = LocalDate.now().atTime(endTime);
+                Duration between = Duration.between(time1, time2);
                 userFvTime.setStartTime((String) map.get("startTime"));
                 userFvTime.setEndTime((String) map.get("endTime"));
                 userFvTime.setCompanyId(user.getCompanyId());
                 userFvTime.setUserId(user.getId());
-                userFvTime.setWorkHours((float) between.toHours());
+                userFvTime.setWorkHours((float)between.toHours());
+                Optional<UserFvTime> first = oldUserFvTimeList.stream().filter(ol -> ol.getWorkDate().isEqual(userFvTime.getWorkDate()) && ol.getUserId().equals(userFvTime.getUserId())).findFirst();
+                if(first.isPresent()){
+                    userFvTime.setId(first.get().getId());
+                }
                 userFvTimeList.add(userFvTime);
             }
         }
-        userFvTimeService.saveBatch(userFvTimeList);
+        if(userFvTimeList.size()>0){
+            userFvTimeService.saveOrUpdateBatch(userFvTimeList);
+        }
         //Todo: 获取请假数据
         HttpRespMsg leaveRecordMsg = dockWithMLD.getResult("http://10.1.10.41:20170/api/cube/restful/interface/getModeDataPageList/getLeaveRecord", jsonString);
         List<Map<String,Object>> leaveRecordList= (List<Map<String, Object>>) leaveRecordMsg.data;
@@ -257,10 +265,16 @@ public class TimingTask {
                leaveSheet.setLeaveType(Integer.parseInt(String.valueOf(map.get("leaveType"))));
                leaveSheet.setProcinstId(String.valueOf(map.get("procinstId")));
                leaveSheet.setGmtFinished(String.valueOf(map.get("gmtFinished")));
+                Optional<LeaveSheet> first = oldLeaveSheetList.stream().filter(ol -> ol.getStartDate().isEqual(leaveSheet.getStartDate())&&ol.getEndDate().isEqual(leaveSheet.getEndDate()) && ol.getOwnerId().equals(leaveSheet.getOwnerId())).findFirst();
+                if(first.isPresent()){
+                    leaveSheet.setId(first.get().getId());
+                }
                leaveSheetList.add(leaveSheet);
             }
         }
-        leaveSheetService.saveBatch(leaveSheetList);
+        if(leaveSheetList.size()>0){
+            leaveSheetService.saveOrUpdateBatch(leaveSheetList);
+        }
         //Todo: 获取出差数据
         HttpRespMsg travelRecordMsg = dockWithMLD.getResult("http://10.1.10.41:20170/api/cube/restful/interface/getModeDataPageList/getTravelRecord", jsonString);
         List<Map<String,Object>> travelRecordList= (List<Map<String, Object>>) travelRecordMsg.data;
@@ -281,10 +295,16 @@ public class TimingTask {
                 businessTrip.setDayCount(Integer.valueOf(String.valueOf(map.get("dayCount"))));
                 businessTrip.setProcinstId((String) map.get("procinstId"));
                 businessTrip.setGmtFinished((String)map.get("gmtFinished"));
+                Optional<BusinessTrip> first = oldBusinessTripList.stream().filter(ol -> ol.getStartDate().isEqual(businessTrip.getStartDate())&&ol.getEndDate().isEqual(businessTrip.getEndDate()) && ol.getOwnerId().equals(businessTrip.getOwnerId())).findFirst();
+                if(first.isPresent()){
+                    businessTrip.setId(first.get().getId());
+                }
                 businessTripList.add(businessTrip);
             }
         }
-        businessTripService.saveBatch(businessTripList);
+        if(businessTripList.size()>0){
+            businessTripService.saveOrUpdateBatch(businessTripList);
+        }
     }
 
     //每天1:00 同步昨天的微信请假信息