|
@@ -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());
|