Showing
1 changed file
with
35 additions
and
7 deletions
| ... | @@ -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 | } | ... | ... |
-
Please register or login to post a comment