Преглед изворни кода

针对盛立安元按0.5h四舍五入考勤,修复getPunchRecord考勤错误

seyason пре 2 година
родитељ
комит
3e9f662cae

+ 23 - 4
fhKeeper/formulahousekeeper/management-platform/src/main/java/com/management/platform/service/impl/WxCorpInfoServiceImpl.java

@@ -982,13 +982,20 @@ public class WxCorpInfoServiceImpl extends ServiceImpl<WxCorpInfoMapper, WxCorpI
                     userCorpwxTime.setWeekDay(date.getDayOfWeek().getValue());
                     userCorpwxTime.setWeekDayTxt(DateTimeUtil.getWeekDayTxt(userCorpwxTime.getWeekDay()));
                     BigDecimal bigDecimal=new BigDecimal(Duration.between(LocalTime.parse(minTime,df).plusHours(8),LocalTime.parse(maxTime,df).plusHours(8)).toMinutes());
+
                     if (LocalTime.parse(maxTime,df).plusHours(8).compareTo(LocalTime.parse(baseAfternoonStart,df)) >= 0) {
                         //重新计算打卡工时时,需要减去中间午休时间
-                        bigDecimal=bigDecimal.divide(BigDecimal.valueOf(60),1,BigDecimal.ROUND_HALF_UP).subtract(new BigDecimal(restTime));
+                        bigDecimal = bigDecimal.divide(BigDecimal.valueOf(60),1,BigDecimal.ROUND_HALF_UP).subtract(new BigDecimal(restTime));
+                    } else {
+                        bigDecimal = bigDecimal.divide(BigDecimal.valueOf(60),1,BigDecimal.ROUND_HALF_UP);
                     }
-                    double time = bigDecimal.divide(BigDecimal.valueOf(60),1,BigDecimal.ROUND_HALF_UP).doubleValue();
+                    double time = bigDecimal.doubleValue();
                     if (time < 0) {
                         time = 0;
+                    } else {
+                        if (corpInfo.getCompanyId() == 481) {
+                            time = DateTimeUtil.getHalfHoursFromDouble(time);
+                        }
                     }
                     userCorpwxTime.setWorkHours(time);
                     synchronized (userLock){
@@ -1489,7 +1496,14 @@ public class WxCorpInfoServiceImpl extends ServiceImpl<WxCorpInfoMapper, WxCorpI
                             ct.setEndTime(baseAfternoonEnd);
                         }
                         if (showLog) System.out.println("工作时长==" + workHours);
-                        ct.setWorkHours(DateTimeUtil.getHoursFromDouble(workHours));
+
+                        if (corpInfo.getCompanyId() == 481) {
+                            //给盛立安元0.5单位进位
+                            ct.setWorkHours(DateTimeUtil.getHalfHoursFromDouble(workHours));
+                        } else {
+                            ct.setWorkHours(DateTimeUtil.getHoursFromDouble(workHours));
+                        }
+
 //                        if (regular_work_sec < standard_work_sec) {
 //                            ct.setWorkHours(DateTimeUtil.getHoursFromDouble(ct.getCardTime() + ct.getOutdoorTime()));
 //                        } else {
@@ -1512,7 +1526,12 @@ public class WxCorpInfoServiceImpl extends ServiceImpl<WxCorpInfoMapper, WxCorpI
                                 if (calTime < 8.0 && ct.getOutdoorTime() > 0) {
                                     calTime += ct.getOutdoorTime();
                                 }
-                                ct.setWorkHours(calTime);
+                                if (corpInfo.getCompanyId() == 481) {
+                                    //给盛立安元0.5单位进位
+                                    ct.setWorkHours(DateTimeUtil.getHalfHoursFromDouble(calTime));
+                                } else {
+                                    ct.setWorkHours(calTime);
+                                }
                                 if (showLog) System.out.println("workTime="+workTime+", 二次校正后workHours="+ct.getWorkHours());
                             }
                         }

+ 15 - 5
fhKeeper/formulahousekeeper/management-platform/src/main/java/com/management/platform/util/DateTimeUtil.java

@@ -45,6 +45,11 @@ public class DateTimeUtil {
         return decimal.setScale(0, BigDecimal.ROUND_HALF_UP).doubleValue();
     }
 
+    public static double getHalfHoursFromDouble(double time) {
+        BigDecimal decimal = new BigDecimal(time*2);
+        return decimal.setScale(0, BigDecimal.ROUND_HALF_UP).doubleValue()/2;
+    }
+
     public static LocalDate getLocalDateFromSeconds(long time) {
         LocalDate localDate = LocalDateTime.ofInstant(Instant.ofEpochSecond(time), ZoneId.systemDefault()).toLocalDate();
         return localDate;
@@ -65,10 +70,15 @@ public class DateTimeUtil {
     }
 
     public static void main(String[] args) {
-
-        DateTimeFormatter mdFormat = DateTimeFormatter.ofPattern("yyyy/M/d");
-        LocalDate parse = LocalDate.parse("2022/1/29", mdFormat);
-        LocalDate parse2 = LocalDate.parse("2022/1/29", mdFormat);
-        System.out.println(parse.isEqual(parse2));
+        double d = getHalfHoursFromDouble(0.4);
+        System.out.println(d);
+        d = getHalfHoursFromDouble(1.2);
+        System.out.println(d);
+        d = getHalfHoursFromDouble(1.24);
+        System.out.println(d);
+        d = getHalfHoursFromDouble(1.25);
+        System.out.println(d);
+        d = getHalfHoursFromDouble(1.26);
+        System.out.println(d);
     }
 }