jin.shuai

农信停餐

......@@ -21,6 +21,7 @@ import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import java.time.DayOfWeek;
import java.time.Instant;
import java.time.LocalDate;
import java.time.LocalDateTime;
import java.time.LocalTime;
......@@ -29,6 +30,7 @@ import java.util.Collections;
import java.util.Date;
import java.util.List;
import java.util.Map;
import java.util.Objects;
import java.util.stream.Collectors;
@Slf4j
......@@ -277,12 +279,13 @@ public class MealOrderServiceImpl implements MealOrderService {
.toList();
// 5. 批量获取所有学校的停餐信息
final var now = Instant.now();
var schoolSuspensionRecords = mealOrderServiceRpcClient.queryDinerMealSuspensionRecordsByCondition(
loginInfo.getEnterpriseId(),
null,
null,
null
).stream().filter(r -> r.getClassId() == 0).toList();
).stream().filter(r -> r.getClassId() == 0).filter(r -> r.getEndAt() > now.toEpochMilli()).toList();
// 6. 批量获取所有学生的停餐信息
var studentSuspensionRecords = mealOrderServiceRpcClient.queryDinerMealSuspensionRecordsByCondition(
......@@ -290,7 +293,7 @@ public class MealOrderServiceImpl implements MealOrderService {
null,
null,
dinerIds
);
).stream().filter(r -> r.getEndAt() > now.toEpochMilli()).toList();
// 7. 构建学校停餐信息Map
var schoolSuspensionMap = schoolSuspensionRecords.stream()
......@@ -315,16 +318,41 @@ public class MealOrderServiceImpl implements MealOrderService {
// 9. 获取每个订餐人的停餐信息
return diners.stream()
.map(diner -> {
// 先查询学校级别的停餐信息
// 获取学校级别的停餐信息
var schoolSuspension = schoolSuspensionMap.get(Long.valueOf(diner.getClientId()).intValue());
if (schoolSuspension != null) {
// 获取学生级别的停餐信息
var studentSuspension = studentSuspensionMap.get(Long.valueOf(diner.getId()).intValue());
// 如果两个都没有停餐信息,返回null
if (schoolSuspension == null && studentSuspension == null) {
return null;
}
// 如果只有学校级别的停餐信息
if (schoolSuspension != null && studentSuspension == null) {
return schoolSuspension;
}
// 如果学校没有停餐信息,查询学生级别的停餐信息
return studentSuspensionMap.get(Long.valueOf(diner.getId()).intValue());
// 如果只有学生级别的停餐信息
if (schoolSuspension == null && studentSuspension != null) {
return studentSuspension;
}
// 如果两个都有停餐信息,合并时间范围
return DinerMealSuspensionRecordVO.builder()
.id(schoolSuspension.getId())
.enterpriseId(schoolSuspension.getEnterpriseId())
.clientId(schoolSuspension.getClientId())
.classId(studentSuspension.getClassId())
.dinerId(studentSuspension.getDinerId())
.dinerName(studentSuspension.getDinerName())
.studentNo(studentSuspension.getStudentNo())
.startAt(new Date(Math.min(schoolSuspension.getStartAt().getTime(), studentSuspension.getStartAt().getTime())))
.endAt(new Date(Math.max(schoolSuspension.getEndAt().getTime(), studentSuspension.getEndAt().getTime())))
.comment("")
.build();
})
.filter(record -> record != null)
.filter(Objects::nonNull)
.distinct()
.toList();
}
......