Browse Source

修复bug代码

seyanew 1 week ago
parent
commit
0eb66e50fa

+ 3 - 0
fhKeeper/formulahousekeeper/management-platform/src/main/java/com/management/platform/entity/UserDingdingTime.java

@@ -66,12 +66,15 @@ public class UserDingdingTime extends Model<UserDingdingTime> {
     @TableField("work_hours")
     @TableField("work_hours")
     private Float workHours;
     private Float workHours;
 
 
+
     /**
     /**
      * 是否是出差
      * 是否是出差
      */
      */
     @TableField("is_offi_business")
     @TableField("is_offi_business")
     private Integer isOffiBusiness;
     private Integer isOffiBusiness;
 
 
+    @TableField("modified_by_admin")
+    private Boolean modifiedByAdmin;
 
 
     @TableField(exist = false)
     @TableField(exist = false)
     private String name;
     private String name;

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

@@ -163,8 +163,8 @@ public class ExcelParserService {
     }
     }
 
 
     public static void main(String[] args) {
     public static void main(String[] args) {
-        String startTime = "20:06";
-        String endTime = "次日08:35";
+        String startTime = "08:25";
+        String endTime = "12:30";
         double workHours = calculateZhengBeiWorkHours(startTime, endTime);
         double workHours = calculateZhengBeiWorkHours(startTime, endTime);
 
 
         System.out.println("工作时长:" + workHours + "小时");
         System.out.println("工作时长:" + workHours + "小时");
@@ -184,6 +184,9 @@ public class ExcelParserService {
         if (startTime.compareTo("12:00") > 0 && startTime.compareTo("13:00") < 0) {
         if (startTime.compareTo("12:00") > 0 && startTime.compareTo("13:00") < 0) {
             startTime = "13:00";
             startTime = "13:00";
         }
         }
+        if (endTime.compareTo("12:00") > 0 && endTime.compareTo("13:00") < 0) {
+            endTime = "12:00";
+        }
         String[] startParts = startTime.split(":");
         String[] startParts = startTime.split(":");
         boolean isEndNextDay = endTime.startsWith("次日");
         boolean isEndNextDay = endTime.startsWith("次日");
         if (endTime.startsWith("次日")) {
         if (endTime.startsWith("次日")) {

+ 20 - 2
fhKeeper/formulahousekeeper/management-platform/src/main/java/com/management/platform/service/impl/DingDingServiceImpl.java

@@ -2326,13 +2326,13 @@ public class DingDingServiceImpl implements DingDingService {
                                 }
                                 }
                             }
                             }
                             if (onDutyEarleast == null) {
                             if (onDutyEarleast == null) {
-                                //再尝试获取最早的下班打卡,作为上班时间,但是要在13:30之前
+                                //再尝试获取最早的下班打卡,作为上班时间,但是要在15:00之前
                                 find = oneDayTimes.stream().filter(p->"OffDuty".equals(p.getCheckType())).min(comparator);
                                 find = oneDayTimes.stream().filter(p->"OffDuty".equals(p.getCheckType())).min(comparator);
                                 if (find.isPresent()) {
                                 if (find.isPresent()) {
                                     DdingCardTimeItem time = find.get();
                                     DdingCardTimeItem time = find.get();
                                     LocalDateTime sLt = LocalDateTime.ofEpochSecond(time.getUserCheckTime()/1000, 0, ZoneOffset.ofHours(8));
                                     LocalDateTime sLt = LocalDateTime.ofEpochSecond(time.getUserCheckTime()/1000, 0, ZoneOffset.ofHours(8));
                                     String checkTime = hmFormat.format(sLt);
                                     String checkTime = hmFormat.format(sLt);
-                                    if (checkTime.compareTo("13:30") < 0) {
+                                    if (checkTime.compareTo("15:00") < 0) {
                                         onDutyEarleast = time;
                                         onDutyEarleast = time;
                                     }
                                     }
                                 }
                                 }
@@ -2378,6 +2378,20 @@ public class DingDingServiceImpl implements DingDingService {
                             if (SysConstant.ZhengBeiCompIds.contains(dingding.getCompanyId())) {
                             if (SysConstant.ZhengBeiCompIds.contains(dingding.getCompanyId())) {
                                 //休息时间段:苏州正北-午休12:00-13:00, 晚修:17:30-18:00
                                 //休息时间段:苏州正北-午休12:00-13:00, 晚修:17:30-18:00
                                 double workHours = ExcelParserService.calculateZhengBeiWorkHours(timeItem.getStartTime(), timeItem.getEndTime());
                                 double workHours = ExcelParserService.calculateZhengBeiWorkHours(timeItem.getStartTime(), timeItem.getEndTime());
+                                //如果工作时长大于8小时,需要检查是否有当天的请假,有的话得减去请假的时长
+                                if (workHours >= 8.0) {
+                                    List<LeaveSheet> leaveSheets = leaveSheetMapper.selectList(new QueryWrapper<LeaveSheet>()
+                                            .eq("owner_id", timeItem.getUserId()).eq("company_id", timeItem.getCompanyId())
+                                            .eq("start_date", dateTimeFormatter.format(timeItem.getWorkDate()))
+                                            .eq("end_date", dateTimeFormatter.format(timeItem.getWorkDate())));
+                                    if (leaveSheets.size() > 0) {
+                                        double sum = leaveSheets.stream().mapToDouble(LeaveSheet::getTimeHours).sum();
+                                        workHours -= sum;
+                                        if (workHours < 0) {
+                                            workHours = 0;
+                                        }
+                                    }
+                                }
                                 timeItem.setWorkHours((float)workHours);
                                 timeItem.setWorkHours((float)workHours);
                             } else {
                             } else {
                                 long seconds = (offDutyLatest.getUserCheckTime() - onDutyEarleast.getUserCheckTime())/1000;
                                 long seconds = (offDutyLatest.getUserCheckTime() - onDutyEarleast.getUserCheckTime())/1000;
@@ -2387,6 +2401,10 @@ public class DingDingServiceImpl implements DingDingService {
                             //对比,看看之前是否已经存了
                             //对比,看看之前是否已经存了
                             Optional<UserDingdingTime> findOld = oldList.stream().filter(old->old.getUserId().equals(timeItem.getUserId()) && old.getWorkDate().isEqual(timeItem.getWorkDate())).findFirst();
                             Optional<UserDingdingTime> findOld = oldList.stream().filter(old->old.getUserId().equals(timeItem.getUserId()) && old.getWorkDate().isEqual(timeItem.getWorkDate())).findFirst();
                             if (findOld.isPresent()) {
                             if (findOld.isPresent()) {
+                                //被手动修改过了,则不覆盖
+                                if (findOld.get().getModifiedByAdmin()) {
+                                    continue;
+                                }
                                 timeItem.setId(findOld.get().getId());
                                 timeItem.setId(findOld.get().getId());
                             }
                             }
                             if (timeItem.getWorkHours() > 0) {
                             if (timeItem.getWorkHours() > 0) {

+ 2 - 1
fhKeeper/formulahousekeeper/management-platform/src/main/resources/mapper/UserDingdingTimeMapper.xml

@@ -16,11 +16,12 @@
         <result column="week_day_txt" property="weekDayTxt" />
         <result column="week_day_txt" property="weekDayTxt" />
         <result column="work_hours" property="workHours" />
         <result column="work_hours" property="workHours" />
         <result column="is_offi_business" property="isOffiBusiness" />
         <result column="is_offi_business" property="isOffiBusiness" />
+        <result column="modified_by_admin" property="modifiedByAdmin" />
     </resultMap>
     </resultMap>
 
 
     <!-- 通用查询结果列 -->
     <!-- 通用查询结果列 -->
     <sql id="Base_Column_List">
     <sql id="Base_Column_List">
-        id, work_date, dingding_userid, user_id, dingding_corpid, company_id, start_time, end_time, week_day, week_day_txt, work_hours, is_offi_business
+        id, work_date, dingding_userid, user_id, dingding_corpid, company_id, start_time, end_time, week_day, week_day_txt, work_hours, is_offi_business,modified_by_admin
     </sql>
     </sql>
 
 
 </mapper>
 </mapper>

+ 1 - 1
fhKeeper/formulahousekeeper/management-workshop/src/main/java/com/management/platform/service/impl/AttendanceStaffServiceImpl.java

@@ -567,7 +567,7 @@ public class AttendanceStaffServiceImpl extends ServiceImpl<AttendanceStaffMappe
         // 1. 解析月份参数
         // 1. 解析月份参数
         DateTimeFormatter formatter = DateTimeFormatter.ofPattern("yyyy-MM");
         DateTimeFormatter formatter = DateTimeFormatter.ofPattern("yyyy-MM");
         DateTimeFormatter formatter1 = DateTimeFormatter.ofPattern("yyyy-MM-dd");
         DateTimeFormatter formatter1 = DateTimeFormatter.ofPattern("yyyy-MM-dd");
-        DateTimeFormatter formatter2 = DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm");
+        DateTimeFormatter formatter2 = DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss");
         YearMonth yearMonth = YearMonth.parse(month, formatter);
         YearMonth yearMonth = YearMonth.parse(month, formatter);
         // 3. 生成该月所有日期的信息
         // 3. 生成该月所有日期的信息
         List<AttendanceStaff> allList = new ArrayList<>();
         List<AttendanceStaff> allList = new ArrayList<>();