|
@@ -37,6 +37,7 @@ import java.math.BigDecimal;
|
|
|
import java.time.LocalDate;
|
|
|
import java.time.LocalTime;
|
|
|
import java.time.ZoneId;
|
|
|
+import java.time.format.DateTimeFormatter;
|
|
|
import java.util.*;
|
|
|
import java.util.concurrent.ThreadLocalRandom;
|
|
|
import java.util.stream.Collectors;
|
|
@@ -303,7 +304,47 @@ public class OrderServiceImpl implements IOrderService {
|
|
|
|
|
|
@Override
|
|
|
public List<OrderVO.PreviewOrderPlaceSchoolTime> previewOrderPlaceSchoolTime(String placeId) {
|
|
|
- return appTeachingTimeMapper.previewOrderPlaceSchoolTime(appSitePlaceMapper.selectById(placeId).getOrgCode());
|
|
|
+ List<OrderVO.PreviewOrderPlaceSchoolTime> previewOrderPlaceSchoolTimes = appTeachingTimeMapper.previewOrderPlaceSchoolTime(appSitePlaceMapper.selectById(placeId).getOrgCode());
|
|
|
+ AppSite appSite = appSiteMapper.selectOne(Wrappers.<AppSite>lambdaQuery().eq(AppSite::getId, appSitePlaceMapper.selectById(placeId).getSiteId()));
|
|
|
+ // 解析教学日和非教学日数据
|
|
|
+ List<OrderVO.TimeSlotData> teachingList = parseTimeSlotData(appSite.getTeachingDay());
|
|
|
+ List<OrderVO.TimeSlotData> nonTeachingList = parseTimeSlotData(appSite.getNoTeachingDay());
|
|
|
+ previewOrderPlaceSchoolTimes.forEach(previewOrderPlaceSchoolTime -> {
|
|
|
+ boolean isTeaching = previewOrderPlaceSchoolTime.getIsTeaching() == 0;
|
|
|
+ List<OrderVO.TimeSlotData> targetList = isTeaching ? teachingList : nonTeachingList;
|
|
|
+ if (!targetList.isEmpty()) {
|
|
|
+ // 找到最早开始时间
|
|
|
+ Optional<OrderVO.TimeSlotData> earliest = targetList.stream()
|
|
|
+ .min(Comparator.comparing(t -> LocalTime.parse(t.getStartTime(), DateTimeFormatter.ofPattern("HH:mm"))));
|
|
|
+
|
|
|
+ // 找到最晚结束时间
|
|
|
+ Optional<OrderVO.TimeSlotData> latest = targetList.stream()
|
|
|
+ .max(Comparator.comparing(t -> LocalTime.parse(t.getEndTime(), DateTimeFormatter.ofPattern("HH:mm"))));
|
|
|
+
|
|
|
+ String earliestStart = earliest.map(OrderVO.TimeSlotData::getStartTime).orElse("未知");
|
|
|
+ String latestEnd = latest.map(OrderVO.TimeSlotData::getEndTime).orElse("未知");
|
|
|
+
|
|
|
+ int bookedCount = appOrderMapper.queryBookedCount(
|
|
|
+ placeId,
|
|
|
+ DateUtil.format(previewOrderPlaceSchoolTime.getDay(), "yyyy-MM-dd"),
|
|
|
+ earliestStart,
|
|
|
+ latestEnd
|
|
|
+ );
|
|
|
+ int totalTicketNum = targetList.stream()
|
|
|
+ .mapToInt(t -> {
|
|
|
+ try {
|
|
|
+ return Integer.parseInt(t.getTicketNum());
|
|
|
+ } catch (NumberFormatException e) {
|
|
|
+ return 0; // 默认值,或抛出异常
|
|
|
+ }
|
|
|
+ })
|
|
|
+ .sum();
|
|
|
+ previewOrderPlaceSchoolTime.setInventory(totalTicketNum - bookedCount);
|
|
|
+ }
|
|
|
+
|
|
|
+ });
|
|
|
+
|
|
|
+ return previewOrderPlaceSchoolTimes;
|
|
|
}
|
|
|
|
|
|
/**
|