From 58cd81bf7e77098fae005dc62808a1e1503032eb Mon Sep 17 00:00:00 2001 From: Zhujx Date: Fri, 25 Jul 2025 16:40:47 +0800 Subject: [PATCH] =?UTF-8?q?feat:=E6=8B=89=E5=8F=96=E5=BA=A7=E4=BD=8D?= =?UTF-8?q?=E7=8A=B6=E6=80=81=E4=BF=A1=E6=81=AF?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../resp/http/perform/SeatPlanStatus.java | 4 +- .../fwd/schedule/PullDataFromFWDJob.java | 49 ++++++++++++++++--- 2 files changed, 45 insertions(+), 8 deletions(-) diff --git a/script/src/main/java/com/xiang/xservice/fwd/entity/resp/http/perform/SeatPlanStatus.java b/script/src/main/java/com/xiang/xservice/fwd/entity/resp/http/perform/SeatPlanStatus.java index 8a84210..e0e7891 100644 --- a/script/src/main/java/com/xiang/xservice/fwd/entity/resp/http/perform/SeatPlanStatus.java +++ b/script/src/main/java/com/xiang/xservice/fwd/entity/resp/http/perform/SeatPlanStatus.java @@ -12,8 +12,8 @@ import lombok.NoArgsConstructor; @AllArgsConstructor @NoArgsConstructor public class SeatPlanStatus { - private Integer seatPlanId; - private Integer performId; + private Long seatPlanId; + private Long performId; private Boolean soldOutFlag; private Integer enableNoTicketLabel; private Integer standbyStatus; diff --git a/script/src/main/java/com/xiang/xservice/fwd/schedule/PullDataFromFWDJob.java b/script/src/main/java/com/xiang/xservice/fwd/schedule/PullDataFromFWDJob.java index 272807a..3c9ad08 100644 --- a/script/src/main/java/com/xiang/xservice/fwd/schedule/PullDataFromFWDJob.java +++ b/script/src/main/java/com/xiang/xservice/fwd/schedule/PullDataFromFWDJob.java @@ -1,6 +1,7 @@ package com.xiang.xservice.fwd.schedule; import com.google.common.collect.Lists; +import com.google.common.collect.Maps; import com.xiang.xservice.basic.config.MyThreadFactory; import com.xiang.xservice.basic.utils.DateUtils; 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.ProjectsResp; 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.FwdPerformSeatInfoMapper; import com.xiang.xservice.fwd.service.IPerformServiceHttp; import lombok.RequiredArgsConstructor; import lombok.extern.slf4j.Slf4j; import org.apache.commons.collections4.CollectionUtils; +import org.apache.commons.collections4.MapUtils; import org.apache.commons.lang3.StringUtils; import org.springframework.scheduling.annotation.Scheduled; import org.springframework.stereotype.Component; @@ -25,12 +28,14 @@ import org.springframework.web.bind.annotation.PostMapping; import org.springframework.web.bind.annotation.RestController; import java.util.List; +import java.util.Map; import java.util.Objects; import java.util.concurrent.CompletableFuture; import java.util.concurrent.ExecutorService; import java.util.concurrent.LinkedBlockingQueue; import java.util.concurrent.ThreadPoolExecutor; import java.util.concurrent.TimeUnit; +import java.util.stream.Collectors; /** * 芬玩岛拉取数据定时任务 @@ -85,8 +90,12 @@ public class PullDataFromFWDJob { projectInfo.setIsHasSeat(projectInfoFromHttp.getIsHasSeat()); projectInfo.setIsChoiceSeat(projectInfoFromHttp.getIsChoiceSeat()); projectInfo.setHighestPrice(projectInfoFromHttp.getHighPrice()); - projectInfo.setProjectStartDate(DateUtils.getDateFromStr(projectInfoFromHttp.getProjectStartDate())); - projectInfo.setProjectEndDate(DateUtils.getDateFromStr(projectInfoFromHttp.getProjectEndDate())); + if (StringUtils.isNotBlank(projectInfoFromHttp.getProjectStartDate())) { + projectInfo.setProjectStartDate(DateUtils.getDateFromStr(projectInfoFromHttp.getProjectStartDate())); + } + if (StringUtils.isNotBlank(projectInfoFromHttp.getProjectEndDate())) { + projectInfo.setProjectEndDate(DateUtils.getDateFromStr(projectInfoFromHttp.getProjectEndDate())); + } projectInfo.setSubClassifyName(projectInfoFromHttp.getSubClassifyName()); projectInfo.setProjectName(project.getName()); projectInfo.setBizId(project.getBizId()); @@ -106,9 +115,17 @@ public class PullDataFromFWDJob { if (CollectionUtils.isNotEmpty(performInfo.getPerformInfo())) { for (PerformDetail performDetail : performInfo.getPerformInfo()) { if (CollectionUtils.isNotEmpty(performDetail.getSeatPlans())) { - List seatPlanIds = performDetail.getSeatPlans().stream().map(SeatPlan::getSeatPlanId).toList(); + List seatPlanIds = performDetail.getSeatPlans().stream().map(SeatPlan::getSeatPlanId).toList(); + Map seatMap = getSeatMap(seatPlanIds); + if (MapUtils.isEmpty(seatMap)) continue; for (SeatPlan seatPlan : performDetail.getSeatPlans()) { + if (!seatMap.containsKey(seatPlan.getSeatPlanId())) { + continue; + } + if (!seatMap.get(seatPlan.getSeatPlanId())) { + continue; + } FPerformSeatInfo fPerformSeatInfo = new FPerformSeatInfo(); fPerformSeatInfo.setSeatPlanId(seatPlan.getSeatPlanId()); fPerformSeatInfo.setSeatPlanName(seatPlan.getSeatPlanName()); @@ -144,7 +161,6 @@ public class PullDataFromFWDJob { } } } - } } } @@ -162,8 +178,12 @@ public class PullDataFromFWDJob { fPerformProjectInfo.setIsHasSeat(projectInfoFromHttp.getIsHasSeat()); fPerformProjectInfo.setIsChoiceSeat(projectInfoFromHttp.getIsChoiceSeat()); fPerformProjectInfo.setHighestPrice(projectInfoFromHttp.getHighPrice()); - fPerformProjectInfo.setProjectStartDate(DateUtils.getDateFromStr(projectInfoFromHttp.getProjectStartDate())); - fPerformProjectInfo.setProjectEndDate(DateUtils.getDateFromStr(projectInfoFromHttp.getProjectEndDate())); + if (StringUtils.isNotBlank(projectInfoFromHttp.getProjectStartDate())) { + fPerformProjectInfo.setProjectStartDate(DateUtils.getDateFromStr(projectInfoFromHttp.getProjectStartDate())); + } + if (StringUtils.isNotBlank(projectInfoFromHttp.getProjectEndDate())) { + fPerformProjectInfo.setProjectEndDate(DateUtils.getDateFromStr(projectInfoFromHttp.getProjectEndDate())); + } fPerformProjectInfo.setSubClassifyName(projectInfoFromHttp.getSubClassifyName()); fPerformProjectInfo.setProjectName(project.getName()); @@ -186,7 +206,16 @@ public class PullDataFromFWDJob { if (CollectionUtils.isNotEmpty(performInfo.getPerformInfo())) { for (PerformDetail performDetail : performInfo.getPerformInfo()) { if (CollectionUtils.isNotEmpty(performDetail.getSeatPlans())) { + List seatPlanIds = performDetail.getSeatPlans().stream().map(SeatPlan::getSeatPlanId).toList(); + Map seatMap = getSeatMap(seatPlanIds); + if (MapUtils.isEmpty(seatMap)) continue; for (SeatPlan seatPlan : performDetail.getSeatPlans()) { + if (!seatMap.containsKey(seatPlan.getSeatPlanId())) { + continue; + } + if (!seatMap.get(seatPlan.getSeatPlanId())) { + continue; + } FPerformSeatInfo fPerformSeatInfo = new FPerformSeatInfo(); fPerformSeatInfo.setSeatPlanId(seatPlan.getSeatPlanId()); fPerformSeatInfo.setSeatPlanName(seatPlan.getSeatPlanName()); @@ -231,4 +260,12 @@ public class PullDataFromFWDJob { CompletableFuture[] futureArr = futureList.toArray(futureList.toArray(new CompletableFuture[0])); CompletableFuture.allOf(futureArr).join(); } + + private Map getSeatMap(List seatPlanIds) { + List statusFromHttp = performServiceHttp.getSeatPlanStatusFromHttp(seatPlanIds); + if (CollectionUtils.isEmpty(statusFromHttp)) { + return Maps.newHashMap(); + } + return statusFromHttp.stream().collect(Collectors.toMap(SeatPlanStatus::getSeatPlanId, SeatPlanStatus::getSoldOutFlag, (a, b) -> a)); + } }