Pārlūkot izejas kodu

修复新入职员工周日报统计错误的问题

zhangjq 4 nedēļas atpakaļ
vecāks
revīzija
d88b98aad8

+ 34 - 1
zjugis-module-adm/zjugis-module-adm-biz/src/main/java/com/zjugis/module/adm/service/report/ReportServiceImpl.java

@@ -31,6 +31,7 @@ import com.zjugis.module.adm.controller.admin.report.vo.workload.ReportWorkloadI
 import com.zjugis.module.adm.controller.admin.report.vo.workload.ReportWorkloadRespVO;
 import com.zjugis.module.adm.controller.admin.report.vo.workload.ReportWorkloadStatisticVO;
 import com.zjugis.module.adm.dal.dataobject.reportworkload.ReportWorkloadDO;
+import com.zjugis.module.adm.dal.dataobject.staff.StaffRecordSDO;
 import com.zjugis.module.adm.dal.dataobject.workday.WorkdayDO;
 import com.zjugis.module.adm.dal.mysql.reportworkload.ReportWorkloadMapper;
 import com.zjugis.module.adm.remote.BusinessClient;
@@ -589,6 +590,14 @@ public class ReportServiceImpl implements ReportService {
             userList = userList.stream().filter(user -> userId.equals(user.getId())).collect(Collectors.toList());
         }
 
+        List<String> userIds = userList.stream().map(AdminUserRespDTO::getId).collect(Collectors.toList());
+        List<StaffRecordSDO> starfList = recordsService.getUserList(userIds);
+        Map<String, StaffRecordSDO> userMap = starfList.stream()
+                .collect(Collectors.toMap(StaffRecordSDO::getUserId,
+                        staffRecordSDO -> staffRecordSDO,
+                        (existing, replacement) -> existing));
+
+
         //获取当月的工作日列表及工作日/周数量
         List<WorkdayDO> monthWorkDay = new ArrayList<>();
         Integer workDayOrWeekCount = 0;
@@ -618,9 +627,33 @@ public class ReportServiceImpl implements ReportService {
             statisticRespVO.setDeptId(staff.getDeptId());
             statisticRespVO.setDeptName(staff.getDeptName());
 
+            Integer userWorkDayOrWeekCount = workDayOrWeekCount;
+            // 如果入职时间在本月 ,需要重新计算应填
+            LocalDateTime rgssj;
+            StaffRecordSDO staffRecords = userMap.get(staff.getId());
+            if(staffRecords != null) {
+                rgssj = staffRecords.getRgssj();
+
+                if (rgssj != null && rgssj.getYear() == year && rgssj.getMonthValue() == month) {
+                    // 根据入职日期重新计算应填数量
+                    if ("daily".equals(reportType)) {
+                        userWorkDayOrWeekCount = (int) monthWorkDay.stream()
+                                .filter(day -> !day.getDateDay().toLocalDate().isBefore(rgssj.toLocalDate()))
+                                .count();
+                    } else {
+                        Set<String> entryWeeks = monthWorkDay.stream()
+                                .filter(day -> !day.getDateDay().toLocalDate().isBefore(rgssj.toLocalDate()))
+                                .map(day -> day.getYear() + "-" + day.getMonth() + "-" + day.getWeek())
+                                .collect(Collectors.toSet());
+                        userWorkDayOrWeekCount = entryWeeks.size();
+                    }
+                }
+
+            }
+
             //应填数量 = 工作日/周数量 - 请假天数/周数
             Integer leaveDays = allLeaveDayOrWeekMap.get(staff.getId()) == null ? 0 : allLeaveDayOrWeekMap.get(staff.getId());
-            statisticRespVO.setShouldFilledCount(workDayOrWeekCount - leaveDays);
+            statisticRespVO.setShouldFilledCount(userWorkDayOrWeekCount - leaveDays);
             List<ReportDO> staffReportList = staffReportMap.get(staff.getId());
             statisticRespVO.setFilledCount(staffReportList == null ? 0 : staffReportList.size());
             statisticRespVO.setNotFilledCount(statisticRespVO.getShouldFilledCount() - statisticRespVO.getFilledCount() < 0 ? 0 : statisticRespVO.getShouldFilledCount() - statisticRespVO.getFilledCount());