Parcourir la source

钉钉考勤加休息时间处理

QuYueTing il y a 2 semaines
Parent
commit
c8baecaa21

+ 3 - 3
fhKeeper/formulahousekeeper/management-platform/src/main/java/com/management/platform/service/ExcelParserService.java

@@ -99,7 +99,7 @@ public class ExcelParserService {
                     // 计算工作时长(这里简化处理,实际需要更精确的计算)
                     if (startTime != null && endTime != null) {
                         try {
-                            double workHours = calculateWorkHours(startTime, endTime);
+                            double workHours = calculateZhengBeiWorkHours(startTime, endTime);
                             attendance.setWorkHours(workHours);
                         } catch (Exception e) {
                             // 时间格式不正确时忽略
@@ -147,12 +147,12 @@ public class ExcelParserService {
     public static void main(String[] args) {
         String startTime = "08:30";
         String endTime = "18:16";
-        double workHours = calculateWorkHours(startTime, endTime);
+        double workHours = calculateZhengBeiWorkHours(startTime, endTime);
 
         System.out.println("工作时长:" + workHours + "小时");
     }
 
-    public static double calculateWorkHours(String startTime, String endTime) {
+    public static double calculateZhengBeiWorkHours(String startTime, String endTime) {
         // 简单计算工作时长(小时)
         // 实际应用中需要更精确的计算,考虑午休时间等
         String[] startParts = startTime.split(":");

+ 9 - 3
fhKeeper/formulahousekeeper/management-platform/src/main/java/com/management/platform/service/impl/DingDingServiceImpl.java

@@ -2351,9 +2351,15 @@ public class DingDingServiceImpl implements DingDingService {
                                 long timeInSeconds = localDateTime.toEpochSecond(ZoneOffset.UTC);
                                 onDutyEarleast.setUserCheckTime(timeInSeconds*1000);
                             }
-                            long seconds = (offDutyLatest.getUserCheckTime() - onDutyEarleast.getUserCheckTime())/1000;
-                            float hours = seconds*1.0f/3600;
-                            timeItem.setWorkHours(hours);
+                            if (8138 == dingding.getCompanyId()) {
+                                //休息时间段:苏州正北-午休12:00-13:00, 晚修:17:30-18:00
+                                double workHours = ExcelParserService.calculateZhengBeiWorkHours(timeItem.getStartTime(), timeItem.getEndTime());
+                                timeItem.setWorkHours((float)workHours);
+                            } else {
+                                long seconds = (offDutyLatest.getUserCheckTime() - onDutyEarleast.getUserCheckTime())/1000;
+                                float hours = seconds*1.0f/3600;
+                                timeItem.setWorkHours(hours);
+                            }
                             //对比,看看之前是否已经存了
                             Optional<UserDingdingTime> findOld = oldList.stream().filter(old->old.getUserId().equals(timeItem.getUserId()) && old.getWorkDate().isEqual(timeItem.getWorkDate())).findFirst();
                             if (findOld.isPresent()) {

+ 25 - 2
fhKeeper/formulahousekeeper/management-platform/src/main/java/com/management/platform/service/impl/ReportServiceImpl.java

@@ -6543,7 +6543,7 @@ public class ReportServiceImpl extends ServiceImpl<ReportMapper, Report> impleme
                 //titles.add("审核状态");
                 titles.add(MessageUtils.message("excel.auditStatus"));
             }
-            if(timeType.getSyncCorpwxTime()==1){
+            if(timeType.getSyncCorpwxTime()==1 || timeType.getSyncDingding()==1){
                 //titles.add("考勤时长");
                 titles.add(MessageUtils.message("excel.attDuration"));
             }
@@ -6633,6 +6633,10 @@ public class ReportServiceImpl extends ServiceImpl<ReportMapper, Report> impleme
             if(timeType.getSyncCorpwxTime()==1) {
                 userCorpwxTimeList = userCorpwxTimeMapper.selectList(new QueryWrapper<UserCorpwxTime>().eq("company_id", user.getCompanyId()).between("create_date", startDate, endDate));
             }
+            List<UserDingdingTime> userDingdingTimeList = new ArrayList<>();
+            if(timeType.getSyncDingding()==1) {
+                userDingdingTimeList = userDingdingTimeMapper.selectList(new QueryWrapper<UserDingdingTime>().eq("company_id", user.getCompanyId()).between("work_date", startDate, endDate));
+            }
             if (timeType.getMultiWorktime() == 1) {
                 java.text.DecimalFormat df = new java.text.DecimalFormat("#0.00");
                 //重新处理一下数据,把工作时间和工作事项移出来
@@ -7078,7 +7082,26 @@ public class ReportServiceImpl extends ServiceImpl<ReportMapper, Report> impleme
                     }else {
                         item.add(cellValue);
                     }
-
+                } else if (timeType.getSyncDingding() == 1) {
+                    String cellValue = "";
+                    String uid = map.get("creatorId") + "";
+                    String reportDate = null;
+                    if (map.get("createDate") instanceof java.sql.Date) {
+                        reportDate = timeDf.format(map.get("createDate"));
+                    } else {
+                        reportDate = (String)map.get("createDate");
+                    }
+                    for (UserDingdingTime userDingdingTime : userDingdingTimeList) {
+                        if (userDingdingTime.getUserId().equals(uid) && reportDate.equals(DateTimeFormatter.ofPattern("yyyy-MM-dd").format(userDingdingTime.getWorkDate()))) {
+                            cellValue = userDingdingTime.getStartTime() + "-" + userDingdingTime.getEndTime() + "," + MessageUtils.message("entry.workingHours") + userDingdingTime.getWorkHours();
+                            break;
+                        }
+                    }
+                    if (hideTimeCount>0){
+                        item.add("*");
+                    }else {
+                        item.add(cellValue);
+                    }
                 }
                 //审核流程状态
                 if (exportType==0) {

+ 4 - 4
fhKeeper/formulahousekeeper/timesheet/src/views/Login.vue

@@ -277,12 +277,12 @@
                 window.location.href = weixinUrl;
             },
             ddworkCli() {
-                var appId = "71020";//钉钉三方的SUIT ID
-                var url = "https://worktime.ttkuaiban.com/api/dingtalk/callback";//授权回调页面
+                var url = encodeURIComponent("https://worktime.ttkuaiban.com/api/dingtalk/callback");//授权回调页面
                 // var weixinUrl=`https://oapi.dingtalk.com/connect/qrconnect?appid=${appId}&response_type=code&scope=snsapi_login&state=STATE&redirect_uri=${url}`;
                 const appKey = 'suitejwoq9dw4bxv4stdb'
-                var ddUrl =`https://login.dingtalk.com/oauth2/auth?redirect_uri=${url}&response_type=code&client_id=${appKey}&scope=openid corpid &state=dddd&prompt=consent`;
-                window.location.href = ddUrl ;
+                var scope = encodeURIComponent("openid corpid");
+                var ddUrl =`https://login.dingtalk.com/oauth2/auth?redirect_uri=${url}&response_type=code&client_id=${appKey}&scope=${scope}&state=dddd&prompt=consent`;
+                window.location.href = ddUrl;
             },
             getStaffInfo() {
                 console.log('执行了没')