jin.shuai

农信停餐

...@@ -21,6 +21,7 @@ import org.springframework.beans.factory.annotation.Autowired; ...@@ -21,6 +21,7 @@ import org.springframework.beans.factory.annotation.Autowired;
21 import org.springframework.stereotype.Service; 21 import org.springframework.stereotype.Service;
22 22
23 import java.time.DayOfWeek; 23 import java.time.DayOfWeek;
24 +import java.time.Instant;
24 import java.time.LocalDate; 25 import java.time.LocalDate;
25 import java.time.LocalDateTime; 26 import java.time.LocalDateTime;
26 import java.time.LocalTime; 27 import java.time.LocalTime;
...@@ -29,6 +30,7 @@ import java.util.Collections; ...@@ -29,6 +30,7 @@ import java.util.Collections;
29 import java.util.Date; 30 import java.util.Date;
30 import java.util.List; 31 import java.util.List;
31 import java.util.Map; 32 import java.util.Map;
33 +import java.util.Objects;
32 import java.util.stream.Collectors; 34 import java.util.stream.Collectors;
33 35
34 @Slf4j 36 @Slf4j
...@@ -277,12 +279,13 @@ public class MealOrderServiceImpl implements MealOrderService { ...@@ -277,12 +279,13 @@ public class MealOrderServiceImpl implements MealOrderService {
277 .toList(); 279 .toList();
278 280
279 // 5. 批量获取所有学校的停餐信息 281 // 5. 批量获取所有学校的停餐信息
282 + final var now = Instant.now();
280 var schoolSuspensionRecords = mealOrderServiceRpcClient.queryDinerMealSuspensionRecordsByCondition( 283 var schoolSuspensionRecords = mealOrderServiceRpcClient.queryDinerMealSuspensionRecordsByCondition(
281 loginInfo.getEnterpriseId(), 284 loginInfo.getEnterpriseId(),
282 null, 285 null,
283 null, 286 null,
284 null 287 null
285 - ).stream().filter(r -> r.getClassId() == 0).toList(); 288 + ).stream().filter(r -> r.getClassId() == 0).filter(r -> r.getEndAt() > now.toEpochMilli()).toList();
286 289
287 // 6. 批量获取所有学生的停餐信息 290 // 6. 批量获取所有学生的停餐信息
288 var studentSuspensionRecords = mealOrderServiceRpcClient.queryDinerMealSuspensionRecordsByCondition( 291 var studentSuspensionRecords = mealOrderServiceRpcClient.queryDinerMealSuspensionRecordsByCondition(
...@@ -290,7 +293,7 @@ public class MealOrderServiceImpl implements MealOrderService { ...@@ -290,7 +293,7 @@ public class MealOrderServiceImpl implements MealOrderService {
290 null, 293 null,
291 null, 294 null,
292 dinerIds 295 dinerIds
293 - ); 296 + ).stream().filter(r -> r.getEndAt() > now.toEpochMilli()).toList();
294 297
295 // 7. 构建学校停餐信息Map 298 // 7. 构建学校停餐信息Map
296 var schoolSuspensionMap = schoolSuspensionRecords.stream() 299 var schoolSuspensionMap = schoolSuspensionRecords.stream()
...@@ -315,16 +318,41 @@ public class MealOrderServiceImpl implements MealOrderService { ...@@ -315,16 +318,41 @@ public class MealOrderServiceImpl implements MealOrderService {
315 // 9. 获取每个订餐人的停餐信息 318 // 9. 获取每个订餐人的停餐信息
316 return diners.stream() 319 return diners.stream()
317 .map(diner -> { 320 .map(diner -> {
318 - // 先查询学校级别的停餐信息 321 + // 获取学校级别的停餐信息
319 var schoolSuspension = schoolSuspensionMap.get(Long.valueOf(diner.getClientId()).intValue()); 322 var schoolSuspension = schoolSuspensionMap.get(Long.valueOf(diner.getClientId()).intValue());
320 - if (schoolSuspension != null) { 323 + // 获取学生级别的停餐信息
324 + var studentSuspension = studentSuspensionMap.get(Long.valueOf(diner.getId()).intValue());
325 +
326 + // 如果两个都没有停餐信息,返回null
327 + if (schoolSuspension == null && studentSuspension == null) {
328 + return null;
329 + }
330 +
331 + // 如果只有学校级别的停餐信息
332 + if (schoolSuspension != null && studentSuspension == null) {
321 return schoolSuspension; 333 return schoolSuspension;
322 } 334 }
323 335
324 - // 如果学校没有停餐信息,查询学生级别的停餐信息 336 + // 如果只有学生级别的停餐信息
325 - return studentSuspensionMap.get(Long.valueOf(diner.getId()).intValue()); 337 + if (schoolSuspension == null && studentSuspension != null) {
338 + return studentSuspension;
339 + }
340 +
341 + // 如果两个都有停餐信息,合并时间范围
342 + return DinerMealSuspensionRecordVO.builder()
343 + .id(schoolSuspension.getId())
344 + .enterpriseId(schoolSuspension.getEnterpriseId())
345 + .clientId(schoolSuspension.getClientId())
346 + .classId(studentSuspension.getClassId())
347 + .dinerId(studentSuspension.getDinerId())
348 + .dinerName(studentSuspension.getDinerName())
349 + .studentNo(studentSuspension.getStudentNo())
350 + .startAt(new Date(Math.min(schoolSuspension.getStartAt().getTime(), studentSuspension.getStartAt().getTime())))
351 + .endAt(new Date(Math.max(schoolSuspension.getEndAt().getTime(), studentSuspension.getEndAt().getTime())))
352 + .comment("")
353 + .build();
326 }) 354 })
327 - .filter(record -> record != null) 355 + .filter(Objects::nonNull)
328 .distinct() 356 .distinct()
329 .toList(); 357 .toList();
330 } 358 }
......