diff --git a/src/com/engine/salary/service/impl/AttendQuoteDataServiceImpl.java b/src/com/engine/salary/service/impl/AttendQuoteDataServiceImpl.java index ee21da0bf..5b173edba 100644 --- a/src/com/engine/salary/service/impl/AttendQuoteDataServiceImpl.java +++ b/src/com/engine/salary/service/impl/AttendQuoteDataServiceImpl.java @@ -464,7 +464,7 @@ public class AttendQuoteDataServiceImpl extends Service implements AttendQuoteDa employeeIds = employeeIds.stream().filter(empId -> !specialAttendEmpIds.contains(empId)).collect(Collectors.toList()); } // 4.获取考勤模块数据 - List> attendQuoteSyncData = getAttendQuoteDataFromRemoteAttend(salarySobCycleDTO.getAttendCycle(), employeeIds, attendQuoteFields, specialAttendRangeMap); + List> attendQuoteSyncData = getAttendQuoteDataFromRemoteAttend(salarySobCycleDTO.getAttendCycle(), employeeIds, attendQuoteFields, specialAttendRangeMap, specialAttendEmpIds); List pos = new ArrayList<>(); List values = new ArrayList<>(); // 5.考勤引用数据处理 @@ -627,8 +627,18 @@ public class AttendQuoteDataServiceImpl extends Service implements AttendQuoteDa * @param attendQuoteFields * @return */ - private List> getAttendQuoteDataFromRemoteAttend(LocalDateRange attendCycleRange, List employeeIds, List attendQuoteFields, Map specialAttendRangeMap) { + private List> getAttendQuoteDataFromRemoteAttend(LocalDateRange attendCycleRange, List employeeIds, List attendQuoteFields, Map specialAttendRangeMap, Set specialAttendEmpIds) { List> attendQuoteSyncData = new ArrayList<>(); + // 获取哪些字段需要获取整月的值 + BaseBean baseBean = new BaseBean(); + List fullMonthAttendFields = Arrays.stream(baseBean.getPropValue("qzSalaryAttend", "full_month_attend_fields").split(",")).collect(Collectors.toList()); + List fullMonthAttendFieldList = new ArrayList<>(); + List specialAttednFieldList = new ArrayList<>(); + if (CollectionUtils.isNotEmpty(attendQuoteFields)) { + fullMonthAttendFieldList = attendQuoteFields.stream().filter(f -> fullMonthAttendFields.contains(f.getCode())).collect(Collectors.toList()); + specialAttednFieldList = attendQuoteFields.stream().filter(f -> !fullMonthAttendFields.contains(f.getCode())).collect(Collectors.toList()); + } + Attend4Salary attend4Salary = new Attend4Salary(); try { int partSize = 500; @@ -650,11 +660,35 @@ public class AttendQuoteDataServiceImpl extends Service implements AttendQuoteDa } + + if (CollectionUtils.isNotEmpty(specialAttendEmpIds)) { + //班次信息 + String attendanceSerial = fullMonthAttendFieldList.stream() + .filter(f -> f.getCode() != null && f.getCode().startsWith("attendanceSerial_")) + .map(f -> f.getCode().replace("attendanceSerial_", "")) + .collect(Collectors.joining(",")); + attend4Salary = new Attend4Salary(); + for (Map.Entry entry : specialAttendRangeMap.entrySet()) { + String[] split = entry.getKey().split("_split"); + Long taxAgentId = split.length > 0 && NumberUtils.isCreatable(split[0]) ? Long.valueOf(split[0]) : 0L; + Long employeeId = split.length > 1 && NumberUtils.isCreatable(split[1]) ? Long.valueOf(split[1]) : 0L; + attend4Salary.setBeginDate(attendCycleRange.getFromDate()); + attend4Salary.setEndDate(attendCycleRange.getEndDate()); + attend4Salary.setOnlyEmpIds(Collections.singletonList(employeeId)); + attend4Salary.setAttendanceSerial(attendanceSerial); + + List> attendResult = getRemoteAttend4SalaryService(user).getDatas(attend4Salary); + + AttendQuoteDataBO.buildAttendDataFromRemote(attendResult, fullMonthAttendFieldList, attendQuoteSyncData, taxAgentId); + } + } + //班次信息 - String attendanceSerial = attendQuoteFields.stream() + String attendanceSerial = specialAttednFieldList.stream() .filter(f -> f.getCode() != null && f.getCode().startsWith("attendanceSerial_")) .map(f -> f.getCode().replace("attendanceSerial_", "")) .collect(Collectors.joining(",")); + attend4Salary = new Attend4Salary(); for (Map.Entry entry : specialAttendRangeMap.entrySet()) { String[] split = entry.getKey().split("_split"); Long taxAgentId = split.length > 0 && NumberUtils.isCreatable(split[0]) ? Long.valueOf(split[0]) : 0L; @@ -666,7 +700,7 @@ public class AttendQuoteDataServiceImpl extends Service implements AttendQuoteDa List> attendResult = getRemoteAttend4SalaryService(user).getDatas(attend4Salary); - AttendQuoteDataBO.buildAttendDataFromRemote(attendResult, attendQuoteFields, attendQuoteSyncData, taxAgentId); + AttendQuoteDataBO.buildAttendDataFromRemote(attendResult, specialAttednFieldList, attendQuoteSyncData, taxAgentId); } } catch (Exception e) { log.error("salaryAttend获取考勤数据错误失败:{}", String.format("参数:%s,错误信息:%s", JSONObject.toJSONString(attend4Salary), e.getMessage()), e);