feat:拉取座位状态信息

This commit is contained in:
Zhujx
2025-07-25 16:40:47 +08:00
parent 044ab25c2a
commit 58cd81bf7e
2 changed files with 45 additions and 8 deletions

View File

@@ -12,8 +12,8 @@ import lombok.NoArgsConstructor;
@AllArgsConstructor @AllArgsConstructor
@NoArgsConstructor @NoArgsConstructor
public class SeatPlanStatus { public class SeatPlanStatus {
private Integer seatPlanId; private Long seatPlanId;
private Integer performId; private Long performId;
private Boolean soldOutFlag; private Boolean soldOutFlag;
private Integer enableNoTicketLabel; private Integer enableNoTicketLabel;
private Integer standbyStatus; private Integer standbyStatus;

View File

@@ -1,6 +1,7 @@
package com.xiang.xservice.fwd.schedule; package com.xiang.xservice.fwd.schedule;
import com.google.common.collect.Lists; import com.google.common.collect.Lists;
import com.google.common.collect.Maps;
import com.xiang.xservice.basic.config.MyThreadFactory; import com.xiang.xservice.basic.config.MyThreadFactory;
import com.xiang.xservice.basic.utils.DateUtils; import com.xiang.xservice.basic.utils.DateUtils;
import com.xiang.xservice.fwd.entity.pojo.FPerformProjectInfo; import com.xiang.xservice.fwd.entity.pojo.FPerformProjectInfo;
@@ -12,12 +13,14 @@ import com.xiang.xservice.fwd.entity.resp.http.perform.ProjectInfoResp;
import com.xiang.xservice.fwd.entity.resp.http.perform.ProjectList; import com.xiang.xservice.fwd.entity.resp.http.perform.ProjectList;
import com.xiang.xservice.fwd.entity.resp.http.perform.ProjectsResp; import com.xiang.xservice.fwd.entity.resp.http.perform.ProjectsResp;
import com.xiang.xservice.fwd.entity.resp.http.perform.SeatPlan; import com.xiang.xservice.fwd.entity.resp.http.perform.SeatPlan;
import com.xiang.xservice.fwd.entity.resp.http.perform.SeatPlanStatus;
import com.xiang.xservice.fwd.mapper.FwdPerformProjectInfoMapper; import com.xiang.xservice.fwd.mapper.FwdPerformProjectInfoMapper;
import com.xiang.xservice.fwd.mapper.FwdPerformSeatInfoMapper; import com.xiang.xservice.fwd.mapper.FwdPerformSeatInfoMapper;
import com.xiang.xservice.fwd.service.IPerformServiceHttp; import com.xiang.xservice.fwd.service.IPerformServiceHttp;
import lombok.RequiredArgsConstructor; import lombok.RequiredArgsConstructor;
import lombok.extern.slf4j.Slf4j; import lombok.extern.slf4j.Slf4j;
import org.apache.commons.collections4.CollectionUtils; import org.apache.commons.collections4.CollectionUtils;
import org.apache.commons.collections4.MapUtils;
import org.apache.commons.lang3.StringUtils; import org.apache.commons.lang3.StringUtils;
import org.springframework.scheduling.annotation.Scheduled; import org.springframework.scheduling.annotation.Scheduled;
import org.springframework.stereotype.Component; import org.springframework.stereotype.Component;
@@ -25,12 +28,14 @@ import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RestController; import org.springframework.web.bind.annotation.RestController;
import java.util.List; import java.util.List;
import java.util.Map;
import java.util.Objects; import java.util.Objects;
import java.util.concurrent.CompletableFuture; import java.util.concurrent.CompletableFuture;
import java.util.concurrent.ExecutorService; import java.util.concurrent.ExecutorService;
import java.util.concurrent.LinkedBlockingQueue; import java.util.concurrent.LinkedBlockingQueue;
import java.util.concurrent.ThreadPoolExecutor; import java.util.concurrent.ThreadPoolExecutor;
import java.util.concurrent.TimeUnit; import java.util.concurrent.TimeUnit;
import java.util.stream.Collectors;
/** /**
* 芬玩岛拉取数据定时任务 * 芬玩岛拉取数据定时任务
@@ -85,8 +90,12 @@ public class PullDataFromFWDJob {
projectInfo.setIsHasSeat(projectInfoFromHttp.getIsHasSeat()); projectInfo.setIsHasSeat(projectInfoFromHttp.getIsHasSeat());
projectInfo.setIsChoiceSeat(projectInfoFromHttp.getIsChoiceSeat()); projectInfo.setIsChoiceSeat(projectInfoFromHttp.getIsChoiceSeat());
projectInfo.setHighestPrice(projectInfoFromHttp.getHighPrice()); projectInfo.setHighestPrice(projectInfoFromHttp.getHighPrice());
projectInfo.setProjectStartDate(DateUtils.getDateFromStr(projectInfoFromHttp.getProjectStartDate())); if (StringUtils.isNotBlank(projectInfoFromHttp.getProjectStartDate())) {
projectInfo.setProjectEndDate(DateUtils.getDateFromStr(projectInfoFromHttp.getProjectEndDate())); projectInfo.setProjectStartDate(DateUtils.getDateFromStr(projectInfoFromHttp.getProjectStartDate()));
}
if (StringUtils.isNotBlank(projectInfoFromHttp.getProjectEndDate())) {
projectInfo.setProjectEndDate(DateUtils.getDateFromStr(projectInfoFromHttp.getProjectEndDate()));
}
projectInfo.setSubClassifyName(projectInfoFromHttp.getSubClassifyName()); projectInfo.setSubClassifyName(projectInfoFromHttp.getSubClassifyName());
projectInfo.setProjectName(project.getName()); projectInfo.setProjectName(project.getName());
projectInfo.setBizId(project.getBizId()); projectInfo.setBizId(project.getBizId());
@@ -106,9 +115,17 @@ public class PullDataFromFWDJob {
if (CollectionUtils.isNotEmpty(performInfo.getPerformInfo())) { if (CollectionUtils.isNotEmpty(performInfo.getPerformInfo())) {
for (PerformDetail performDetail : performInfo.getPerformInfo()) { for (PerformDetail performDetail : performInfo.getPerformInfo()) {
if (CollectionUtils.isNotEmpty(performDetail.getSeatPlans())) { if (CollectionUtils.isNotEmpty(performDetail.getSeatPlans())) {
List<Long> seatPlanIds = performDetail.getSeatPlans().stream().map(SeatPlan::getSeatPlanId).toList();
List<Long> seatPlanIds = performDetail.getSeatPlans().stream().map(SeatPlan::getSeatPlanId).toList();
Map<Long, Boolean> seatMap = getSeatMap(seatPlanIds);
if (MapUtils.isEmpty(seatMap)) continue;
for (SeatPlan seatPlan : performDetail.getSeatPlans()) { for (SeatPlan seatPlan : performDetail.getSeatPlans()) {
if (!seatMap.containsKey(seatPlan.getSeatPlanId())) {
continue;
}
if (!seatMap.get(seatPlan.getSeatPlanId())) {
continue;
}
FPerformSeatInfo fPerformSeatInfo = new FPerformSeatInfo(); FPerformSeatInfo fPerformSeatInfo = new FPerformSeatInfo();
fPerformSeatInfo.setSeatPlanId(seatPlan.getSeatPlanId()); fPerformSeatInfo.setSeatPlanId(seatPlan.getSeatPlanId());
fPerformSeatInfo.setSeatPlanName(seatPlan.getSeatPlanName()); fPerformSeatInfo.setSeatPlanName(seatPlan.getSeatPlanName());
@@ -144,7 +161,6 @@ public class PullDataFromFWDJob {
} }
} }
} }
} }
} }
} }
@@ -162,8 +178,12 @@ public class PullDataFromFWDJob {
fPerformProjectInfo.setIsHasSeat(projectInfoFromHttp.getIsHasSeat()); fPerformProjectInfo.setIsHasSeat(projectInfoFromHttp.getIsHasSeat());
fPerformProjectInfo.setIsChoiceSeat(projectInfoFromHttp.getIsChoiceSeat()); fPerformProjectInfo.setIsChoiceSeat(projectInfoFromHttp.getIsChoiceSeat());
fPerformProjectInfo.setHighestPrice(projectInfoFromHttp.getHighPrice()); fPerformProjectInfo.setHighestPrice(projectInfoFromHttp.getHighPrice());
fPerformProjectInfo.setProjectStartDate(DateUtils.getDateFromStr(projectInfoFromHttp.getProjectStartDate())); if (StringUtils.isNotBlank(projectInfoFromHttp.getProjectStartDate())) {
fPerformProjectInfo.setProjectEndDate(DateUtils.getDateFromStr(projectInfoFromHttp.getProjectEndDate())); fPerformProjectInfo.setProjectStartDate(DateUtils.getDateFromStr(projectInfoFromHttp.getProjectStartDate()));
}
if (StringUtils.isNotBlank(projectInfoFromHttp.getProjectEndDate())) {
fPerformProjectInfo.setProjectEndDate(DateUtils.getDateFromStr(projectInfoFromHttp.getProjectEndDate()));
}
fPerformProjectInfo.setSubClassifyName(projectInfoFromHttp.getSubClassifyName()); fPerformProjectInfo.setSubClassifyName(projectInfoFromHttp.getSubClassifyName());
fPerformProjectInfo.setProjectName(project.getName()); fPerformProjectInfo.setProjectName(project.getName());
@@ -186,7 +206,16 @@ public class PullDataFromFWDJob {
if (CollectionUtils.isNotEmpty(performInfo.getPerformInfo())) { if (CollectionUtils.isNotEmpty(performInfo.getPerformInfo())) {
for (PerformDetail performDetail : performInfo.getPerformInfo()) { for (PerformDetail performDetail : performInfo.getPerformInfo()) {
if (CollectionUtils.isNotEmpty(performDetail.getSeatPlans())) { if (CollectionUtils.isNotEmpty(performDetail.getSeatPlans())) {
List<Long> seatPlanIds = performDetail.getSeatPlans().stream().map(SeatPlan::getSeatPlanId).toList();
Map<Long, Boolean> seatMap = getSeatMap(seatPlanIds);
if (MapUtils.isEmpty(seatMap)) continue;
for (SeatPlan seatPlan : performDetail.getSeatPlans()) { for (SeatPlan seatPlan : performDetail.getSeatPlans()) {
if (!seatMap.containsKey(seatPlan.getSeatPlanId())) {
continue;
}
if (!seatMap.get(seatPlan.getSeatPlanId())) {
continue;
}
FPerformSeatInfo fPerformSeatInfo = new FPerformSeatInfo(); FPerformSeatInfo fPerformSeatInfo = new FPerformSeatInfo();
fPerformSeatInfo.setSeatPlanId(seatPlan.getSeatPlanId()); fPerformSeatInfo.setSeatPlanId(seatPlan.getSeatPlanId());
fPerformSeatInfo.setSeatPlanName(seatPlan.getSeatPlanName()); fPerformSeatInfo.setSeatPlanName(seatPlan.getSeatPlanName());
@@ -231,4 +260,12 @@ public class PullDataFromFWDJob {
CompletableFuture[] futureArr = futureList.toArray(futureList.toArray(new CompletableFuture[0])); CompletableFuture[] futureArr = futureList.toArray(futureList.toArray(new CompletableFuture[0]));
CompletableFuture.allOf(futureArr).join(); CompletableFuture.allOf(futureArr).join();
} }
private Map<Long, Boolean> getSeatMap(List<Long> seatPlanIds) {
List<SeatPlanStatus> statusFromHttp = performServiceHttp.getSeatPlanStatusFromHttp(seatPlanIds);
if (CollectionUtils.isEmpty(statusFromHttp)) {
return Maps.newHashMap();
}
return statusFromHttp.stream().collect(Collectors.toMap(SeatPlanStatus::getSeatPlanId, SeatPlanStatus::getSoldOutFlag, (a, b) -> a));
}
} }