From 279633f53bd5fe3328756465fe0a00dfd760b634 Mon Sep 17 00:00:00 2001 From: xiang Date: Mon, 28 Jul 2025 22:12:17 +0800 Subject: [PATCH] =?UTF-8?q?fix:=E5=88=B7=E6=96=B0=E6=95=B0=E6=8D=AE?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../fwd/entity/pojo/FPerformSeatInfo.java | 2 +- .../fwd/mapper/FwdPerformSeatInfoMapper.java | 2 + .../fwd/schedule/PullDataFromFWDJob.java | 257 ++++++++++++++---- .../fwd/server/FwdDataController.java | 104 +++++++ .../xservice/fwd/service/IPerformService.java | 11 + .../impl/PerformServiceHttpServiceImpl.java | 18 +- .../fwd/service/impl/PerformServiceImpl.java | 28 ++ .../fwd/FwdPerformProjectSeatInfoMapper.xml | 7 +- 8 files changed, 362 insertions(+), 67 deletions(-) create mode 100644 script/src/main/java/com/xiang/xservice/fwd/server/FwdDataController.java diff --git a/script/src/main/java/com/xiang/xservice/fwd/entity/pojo/FPerformSeatInfo.java b/script/src/main/java/com/xiang/xservice/fwd/entity/pojo/FPerformSeatInfo.java index 5a9a0f2..ed8eaf1 100644 --- a/script/src/main/java/com/xiang/xservice/fwd/entity/pojo/FPerformSeatInfo.java +++ b/script/src/main/java/com/xiang/xservice/fwd/entity/pojo/FPerformSeatInfo.java @@ -103,7 +103,7 @@ public class FPerformSeatInfo implements Serializable { /** * ash_show_desc */ - private Integer ashShowDesc; + private String ashShowDesc; /** * selectable diff --git a/script/src/main/java/com/xiang/xservice/fwd/mapper/FwdPerformSeatInfoMapper.java b/script/src/main/java/com/xiang/xservice/fwd/mapper/FwdPerformSeatInfoMapper.java index d784cd0..dbd2b19 100644 --- a/script/src/main/java/com/xiang/xservice/fwd/mapper/FwdPerformSeatInfoMapper.java +++ b/script/src/main/java/com/xiang/xservice/fwd/mapper/FwdPerformSeatInfoMapper.java @@ -24,4 +24,6 @@ public interface FwdPerformSeatInfoMapper { @Param("seatId") Long seatId, @Param("performId") Long performId, @Param("projectId") Long projectId); List getPerformSeatByProjectId(Long projectId); + + FPerformSeatInfo getBySeatPlanId(@Param("id") Long seatPlanId); } 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 69ebbea..a093e64 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 @@ -79,7 +79,7 @@ public class PullDataFromFWDJob { /** * 定时任务 每日1点爬取芬玩岛数据演出列表数据 */ - @Scheduled(cron = "0 0 1 1/1 * ?") +// @Scheduled(cron = "0 0 1 1/1 * ?") @PostMapping("/pullProjectsDataJob") public void pullProjectsDataJob() { int i = 0; @@ -107,30 +107,7 @@ public class PullDataFromFWDJob { FPerformProjectInfo projectInfo = performProjectInfoMapper.getProjectByProjectId(project.getProjectId()); if (Objects.nonNull(projectInfo)) { // 更新projectInfo的信息 - projectInfo.setNameDisplay(projectInfoFromHttp.getNameDisplay()); - projectInfo.setStatus(projectInfoFromHttp.getStatus()); - projectInfo.setProjectSource(projectInfoFromHttp.getProjectSource()); - projectInfo.setIsHasSeat(projectInfoFromHttp.getIsHasSeat()); - projectInfo.setIsChoiceSeat(projectInfoFromHttp.getIsChoiceSeat()); - projectInfo.setHighestPrice(projectInfoFromHttp.getHighPrice()); - 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()); - projectInfo.setTagName(project.getTagName()); - projectInfo.setTagRemark(project.getTagRemark()); - projectInfo.setProjectCity(project.getCity()); - projectInfo.setShortCity(project.getShortCity()); - projectInfo.setVenueName(project.getVenueName()); - projectInfo.setLowestPrice(project.getLowestPrice()); - if (StringUtils.isNotBlank(projectInfoFromHttp.getPreSaleTime())) { - projectInfo.setPreSaleTime(DateUtils.getDateTimeFromStr(projectInfoFromHttp.getPreSaleTime())); - } + buildUpdateProjectInfo(project, projectInfo, projectInfoFromHttp); performProjectInfoMapper.update(projectInfo); List fPerformSeatInfoInsertList = Lists.newArrayList(); if (CollectionUtils.isNotEmpty(performsByProjectIdFromHttp.getPerformInfos())) { @@ -163,7 +140,7 @@ public class PullDataFromFWDJob { fPerformSeatInfo.setLeftStock(seatPlan.getLeftStock()); fPerformSeatInfo.setAbleSaleQuantity(seatPlan.getAbleSaleQuantity()); fPerformSeatInfo.setAshShow(seatPlan.getAshShow()); - fPerformSeatInfo.setAshShowDesc(seatPlan.getAshShow()); + fPerformSeatInfo.setAshShowDesc(seatPlan.getAshShowDesc()); fPerformSeatInfo.setSelectable(seatPlan.getSelectable()); fPerformSeatInfo.setDisplay(seatPlan.getDisplay()); fPerformSeatInfo.setAvailableTicketQuantity(seatPlan.getAvailableTicketQuantity()); @@ -192,34 +169,7 @@ public class PullDataFromFWDJob { } } else { // 新增projectInfo的信息 - FPerformProjectInfo fPerformProjectInfo = new FPerformProjectInfo(); - fPerformProjectInfo.setNameDisplay(projectInfoFromHttp.getNameDisplay()); - fPerformProjectInfo.setStatus(projectInfoFromHttp.getStatus()); - fPerformProjectInfo.setProjectSource(projectInfoFromHttp.getProjectSource()); - fPerformProjectInfo.setIsHasSeat(projectInfoFromHttp.getIsHasSeat()); - fPerformProjectInfo.setIsChoiceSeat(projectInfoFromHttp.getIsChoiceSeat()); - fPerformProjectInfo.setHighestPrice(projectInfoFromHttp.getHighPrice()); - 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()); - fPerformProjectInfo.setBizId(project.getBizId()); - fPerformProjectInfo.setProjectId(project.getProjectId()); - fPerformProjectInfo.setTagName(project.getTagName()); - fPerformProjectInfo.setTagRemark(project.getTagRemark()); - fPerformProjectInfo.setProjectCity(project.getCity()); - fPerformProjectInfo.setShortCity(project.getShortCity()); - fPerformProjectInfo.setVenueName(project.getVenueName()); - fPerformProjectInfo.setLowestPrice(project.getLowestPrice()); - if (StringUtils.isNotBlank(projectInfoFromHttp.getPreSaleTime())) { - fPerformProjectInfo.setPreSaleTime(DateUtils.getDateTimeFromStr(projectInfoFromHttp.getPreSaleTime())); - } - performProjectInfoMapper.insert(fPerformProjectInfo); + saveProjectInfo(project, projectInfoFromHttp); List fPerformSeatInfos = Lists.newArrayList(); if (CollectionUtils.isNotEmpty(performsByProjectIdFromHttp.getPerformInfos())) { @@ -251,7 +201,7 @@ public class PullDataFromFWDJob { fPerformSeatInfo.setLeftStock(seatPlan.getLeftStock()); fPerformSeatInfo.setAbleSaleQuantity(seatPlan.getAbleSaleQuantity()); fPerformSeatInfo.setAshShow(seatPlan.getAshShow()); - fPerformSeatInfo.setAshShowDesc(seatPlan.getAshShow()); + fPerformSeatInfo.setAshShowDesc(seatPlan.getAshShowDesc()); fPerformSeatInfo.setSelectable(seatPlan.getSelectable()); fPerformSeatInfo.setDisplay(seatPlan.getDisplay()); fPerformSeatInfo.setAvailableTicketQuantity(seatPlan.getAvailableTicketQuantity()); @@ -288,6 +238,37 @@ public class PullDataFromFWDJob { } } + private void saveProjectInfo(ProjectList project, ProjectInfoResp projectInfoFromHttp) { + FPerformProjectInfo fPerformProjectInfo = new FPerformProjectInfo(); + fPerformProjectInfo.setNameDisplay(projectInfoFromHttp.getNameDisplay()); + fPerformProjectInfo.setStatus(projectInfoFromHttp.getStatus()); + fPerformProjectInfo.setProjectSource(projectInfoFromHttp.getProjectSource()); + fPerformProjectInfo.setIsHasSeat(projectInfoFromHttp.getIsHasSeat()); + fPerformProjectInfo.setIsChoiceSeat(projectInfoFromHttp.getIsChoiceSeat()); + fPerformProjectInfo.setHighestPrice(projectInfoFromHttp.getHighPrice()); + 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()); + fPerformProjectInfo.setBizId(project.getBizId()); + fPerformProjectInfo.setProjectId(project.getProjectId()); + fPerformProjectInfo.setTagName(project.getTagName()); + fPerformProjectInfo.setTagRemark(project.getTagRemark()); + fPerformProjectInfo.setProjectCity(project.getCity()); + fPerformProjectInfo.setShortCity(project.getShortCity()); + fPerformProjectInfo.setVenueName(project.getVenueName()); + fPerformProjectInfo.setLowestPrice(project.getLowestPrice()); + if (StringUtils.isNotBlank(projectInfoFromHttp.getPreSaleTime())) { + fPerformProjectInfo.setPreSaleTime(DateUtils.getDateTimeFromStr(projectInfoFromHttp.getPreSaleTime())); + } + performProjectInfoMapper.insert(fPerformProjectInfo); + } + @Scheduled(cron = "0 10 8 1/1 * ?") @PostMapping("/pullSeatDataJob") public void pullSeatDataJob() { @@ -339,7 +320,7 @@ public class PullDataFromFWDJob { seatInfo.setLeftStock(seatPlan.getLeftStock()); seatInfo.setAbleSaleQuantity(seatPlan.getAbleSaleQuantity()); seatInfo.setAshShow(seatPlan.getAshShow()); - seatInfo.setAshShowDesc(seatPlan.getAshShow()); + seatInfo.setAshShowDesc(seatPlan.getAshShowDesc()); seatInfo.setSelectable(seatPlan.getSelectable()); seatInfo.setDisplay(seatPlan.getDisplay()); seatInfo.setAvailableTicketQuantity(seatPlan.getAvailableTicketQuantity()); @@ -392,6 +373,170 @@ public class PullDataFromFWDJob { }); } + @PostMapping("/pullPerformDataJob") + @Scheduled(cron = "0 0 1 1/1 * ?") + public void pullPerformDataJob() { + int pageNum = 0; + while (true) { + pageNum++; + BaseRequest baseRequest = new BaseRequest(); + baseRequest.setCurrent(pageNum); + baseRequest.setPageSize(50); + // 查询所有的演出 + ProjectsResp projectsResp = performServiceHttp.getShowProjectsFromHttp(baseRequest); + if (Objects.isNull(projectsResp)) { + break; + } + List projectLists = projectsResp.getList(); + if (CollectionUtils.isEmpty(projectLists)) { + break; + } + for (ProjectList projectList : projectLists) { + List seatPlans = Lists.newArrayList(); + // 查询演出的详情 + ProjectInfoResp projectInfoFromHttp = performServiceHttp.getProjectInfoFromHttp(projectList.getProjectId()); + if (Objects.isNull(projectInfoFromHttp)) { + continue; + } + // 查询演出信息 + Perform performsByProjectIdFromHttp = performServiceHttp.getPerformsByProjectIdFromHttp(projectList.getProjectId()); + if (Objects.isNull(performsByProjectIdFromHttp)) { + continue; + } + + // 查询数据库 + FPerformProjectInfo projectInfo = performProjectInfoMapper.getProjectByProjectId(performsByProjectIdFromHttp.getProjectId()); + if (Objects.isNull(projectInfo)) { + // 不存在则新增 + saveProjectInfo(projectList, projectInfoFromHttp); + } else { + // 存在则更新 + buildUpdateProjectInfo(projectList, projectInfo, projectInfoFromHttp); + performProjectInfoMapper.update(projectInfo); + } + + // 查询演出信息 + List performInfos = performsByProjectIdFromHttp.getPerformInfos(); + if (CollectionUtils.isEmpty(performInfos)) { + continue; + } + // 查询演出座位档次信息 + for (PerformInfo performInfo : performInfos) { + List performs = performInfo.getPerformInfo(); + if (CollectionUtils.isEmpty(performs)) { + continue; + } + for (PerformDetail perform : performs) { + seatPlans.addAll(perform.getSeatPlans()); + } + } + + Map seatPlanMap = seatPlans.stream().collect(Collectors.toMap(SeatPlan::getSeatPlanId, Function.identity(), (a, b) -> a)); + List seatPlanIds = new ArrayList<>(seatPlanMap.keySet()); + List seatPlanStatusFromHttp = performServiceHttp.getSeatPlanStatusFromHttp(seatPlanIds); + if (CollectionUtils.isEmpty(seatPlanStatusFromHttp)) { + continue; + } + Map seatMap = seatPlanStatusFromHttp.stream() + .collect(Collectors.toMap(SeatPlanStatus::getSeatPlanId, Function.identity(), (a, b) -> a)); + List insertList = Lists.newCopyOnWriteArrayList(); + List updateList = Lists.newCopyOnWriteArrayList(); + Map existSeatMap = performSeatInfoMapper.getPerformSeatInfoBySeatIds(seatPlanIds) + .stream() + .collect(Collectors.toMap(FPerformSeatInfo::getSeatPlanId, Function.identity(), (a, b) -> a)); + seatMap.forEach((k, v) -> { + if (v.getSoldOutFlag()) { + return; + } + if (existSeatMap.containsKey(k)) { + FPerformSeatInfo fPerformSeatInfo = existSeatMap.get(k); + if (v.getStandbyStatus().equals(10)) { + fPerformSeatInfo.setSoldStock(0); + } + updateList.add(fPerformSeatInfo); + } else { + SeatPlan seatPlan = seatPlanMap.get(k); + if (Objects.isNull(seatPlan)) { + return; + } + saveSeatInfo(projectList, k, v, seatPlan, insertList); + } + }); + if (!CollectionUtils.isEmpty(insertList)) { + performSeatInfoMapper.batchSave(insertList); + } + if (!CollectionUtils.isEmpty(updateList)) { + for (FPerformSeatInfo seatInfo : updateList) { + performSeatInfoMapper.update(seatInfo); + } + } + } + } + try { + Thread.sleep(1000); + } catch (InterruptedException e) { + log.error("" , e); + } + } + + private static void saveSeatInfo(ProjectList projectList, Long seatPlanId, SeatPlanStatus seatPlanStatus, SeatPlan seatPlan, List insertList) { + FPerformSeatInfo fPerformSeatInfo = new FPerformSeatInfo(); + fPerformSeatInfo.setSeatPlanId(seatPlanId); + fPerformSeatInfo.setSeatPlanName(seatPlan.getSeatPlanName()); + fPerformSeatInfo.setPerformId(seatPlan.getPerformId()); + fPerformSeatInfo.setPerformName(seatPlan.getPerformName()); + fPerformSeatInfo.setStopSale(seatPlan.getStopSale()); + fPerformSeatInfo.setShelfStatus(seatPlan.getShelfStatus()); + fPerformSeatInfo.setPrice(seatPlan.getPrice()); + fPerformSeatInfo.setDiscountPrice(seatPlan.getDiscountPrice()); + fPerformSeatInfo.setSubStatus(seatPlan.getSubStatus()); + fPerformSeatInfo.setQuantity(seatPlan.getQuantity()); + fPerformSeatInfo.setStatus(seatPlan.getStatus()); + fPerformSeatInfo.setMaxSellStock(seatPlan.getMaxSellStock()); + fPerformSeatInfo.setSoldStock(seatPlan.getSoldStock()); + fPerformSeatInfo.setLeftStock(seatPlan.getLeftStock()); + fPerformSeatInfo.setAbleSaleQuantity(seatPlan.getAbleSaleQuantity()); + fPerformSeatInfo.setAshShow(seatPlan.getAshShow()); + fPerformSeatInfo.setAshShowDesc(seatPlan.getAshShowDesc()); + fPerformSeatInfo.setSelectable(seatPlan.getSelectable()); + fPerformSeatInfo.setDisplay(seatPlan.getDisplay()); + fPerformSeatInfo.setAvailableTicketQuantity(seatPlan.getAvailableTicketQuantity()); + fPerformSeatInfo.setAvailableAllTicketQuantity(seatPlan.getAvailableAllTicketQuantity()); + fPerformSeatInfo.setSaleTime(DateUtils.getTimeFromStr(seatPlan.getSaleTime())); + fPerformSeatInfo.setProjectId(projectList.getProjectId()); + if (!seatPlanStatus.getSoldOutFlag() && seatPlanStatus.getStandbyStatus().equals(10)) { + fPerformSeatInfo.setSoldStock(0); + } + insertList.add(fPerformSeatInfo); + } + + private static void buildUpdateProjectInfo(ProjectList projectList, FPerformProjectInfo projectInfo, ProjectInfoResp projectInfoFromHttp) { + projectInfo.setNameDisplay(projectInfoFromHttp.getNameDisplay()); + projectInfo.setStatus(projectInfoFromHttp.getStatus()); + projectInfo.setProjectSource(projectInfoFromHttp.getProjectSource()); + projectInfo.setIsHasSeat(projectInfoFromHttp.getIsHasSeat()); + projectInfo.setIsChoiceSeat(projectInfoFromHttp.getIsChoiceSeat()); + projectInfo.setHighestPrice(projectInfoFromHttp.getHighPrice()); + 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(projectList.getName()); + projectInfo.setBizId(projectList.getBizId()); + projectInfo.setTagName(projectList.getTagName()); + projectInfo.setTagRemark(projectList.getTagRemark()); + projectInfo.setProjectCity(projectList.getCity()); + projectInfo.setShortCity(projectList.getShortCity()); + projectInfo.setVenueName(projectList.getVenueName()); + projectInfo.setLowestPrice(projectList.getLowestPrice()); + if (StringUtils.isNotBlank(projectInfoFromHttp.getPreSaleTime())) { + projectInfo.setPreSaleTime(DateUtils.getDateTimeFromStr(projectInfoFromHttp.getPreSaleTime())); + } + } + private Map getSeatMap(List seatPlanIds) { List statusFromHttp = performServiceHttp.getSeatPlanStatusFromHttp(seatPlanIds); if (CollectionUtils.isEmpty(statusFromHttp)) { diff --git a/script/src/main/java/com/xiang/xservice/fwd/server/FwdDataController.java b/script/src/main/java/com/xiang/xservice/fwd/server/FwdDataController.java new file mode 100644 index 0000000..7c486f7 --- /dev/null +++ b/script/src/main/java/com/xiang/xservice/fwd/server/FwdDataController.java @@ -0,0 +1,104 @@ +package com.xiang.xservice.fwd.server; + +import com.xiang.xservice.basic.common.resp.Result; +import com.xiang.xservice.basic.utils.DateUtils; +import com.xiang.xservice.fwd.entity.pojo.FPerformConfig; +import com.xiang.xservice.fwd.entity.pojo.FPerformProjectInfo; +import com.xiang.xservice.fwd.entity.pojo.FPerformSeatInfo; +import com.xiang.xservice.fwd.entity.resp.http.perform.*; +import com.xiang.xservice.fwd.service.IPerformService; +import com.xiang.xservice.fwd.service.IPerformServiceHttp; +import lombok.RequiredArgsConstructor; +import org.apache.commons.collections4.CollectionUtils; +import org.springframework.web.bind.annotation.PostMapping; +import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.RestController; + +import java.util.List; +import java.util.Map; +import java.util.Objects; +import java.util.function.Function; +import java.util.stream.Collectors; + +@RestController +@RequestMapping("/system/fwd") +@RequiredArgsConstructor +public class FwdDataController { + + private final IPerformService performService; + private final IPerformServiceHttp performServiceHttp; + + @PostMapping("/refreshData") + public Result refreshData() { + List availablePerforms = performService.getAvailablePerform(); + for (FPerformConfig availablePerform : availablePerforms) { + ProjectInfoResp info = performServiceHttp.getProjectInfoFromHttp(availablePerform.getProjectId()); + Perform performsByProjectIdFromHttp = performServiceHttp.getPerformsByProjectIdFromHttp(availablePerform.getProjectId()); + FPerformProjectInfo performByProjectId = performService.getPerformByProjectId(availablePerform.getProjectId()); + performByProjectId.setStatus(info.getStatus()); + performByProjectId.setPreSaleTime(DateUtils.getDateTimeFromStr(info.getPreSaleTime())); + performService.updateProjectInfo(performByProjectId); + List performInfos = performsByProjectIdFromHttp.getPerformInfos(); + if (CollectionUtils.isEmpty(performInfos)) { + continue; + } + for (PerformInfo performInfo : performInfos) { + List performInfo1 = performInfo.getPerformInfo(); + if (CollectionUtils.isEmpty(performInfo1)) { + continue; + } + for (PerformDetail performDetail : performInfo1) { + List seatPlans = performDetail.getSeatPlans(); + if (CollectionUtils.isEmpty(seatPlans)) { + continue; + } + List seatIds = seatPlans.stream().map(SeatPlan::getSeatPlanId).collect(Collectors.toList()); + List seatPlanStatusFromHttp = performServiceHttp.getSeatPlanStatusFromHttp(seatIds); + if (CollectionUtils.isEmpty(seatPlanStatusFromHttp)) { + continue; + } + Map map = seatPlanStatusFromHttp.stream().collect(Collectors.toMap(SeatPlanStatus::getSeatPlanId, Function.identity(), (a, b) -> a)); + for (SeatPlan seatPlan : seatPlans) { + FPerformSeatInfo seatInfoBySeatId = performService.getSeatInfoBySeatId(seatPlan.getSeatPlanId()); + if (Objects.isNull(seatInfoBySeatId)) { + FPerformSeatInfo fPerformSeatInfo = new FPerformSeatInfo(); + fPerformSeatInfo.setSeatPlanId(seatPlan.getSeatPlanId()); + fPerformSeatInfo.setSeatPlanName(seatPlan.getSeatPlanName()); + fPerformSeatInfo.setPerformId(seatPlan.getPerformId()); + fPerformSeatInfo.setPerformName(seatPlan.getPerformName()); + fPerformSeatInfo.setStopSale(seatPlan.getStopSale()); + fPerformSeatInfo.setShelfStatus(seatPlan.getShelfStatus()); + fPerformSeatInfo.setPrice(seatPlan.getPrice()); + fPerformSeatInfo.setDiscountPrice(seatPlan.getDiscountPrice()); + fPerformSeatInfo.setSubStatus(seatPlan.getSubStatus()); + fPerformSeatInfo.setQuantity(seatPlan.getQuantity()); + fPerformSeatInfo.setStatus(seatPlan.getStatus()); + fPerformSeatInfo.setMaxSellStock(seatPlan.getMaxSellStock()); + fPerformSeatInfo.setSoldStock(seatPlan.getSoldStock()); + fPerformSeatInfo.setLeftStock(seatPlan.getLeftStock()); + fPerformSeatInfo.setAbleSaleQuantity(seatPlan.getAbleSaleQuantity()); + fPerformSeatInfo.setAshShow(seatPlan.getAshShow()); + fPerformSeatInfo.setAshShowDesc(seatPlan.getAshShowDesc()); + fPerformSeatInfo.setSelectable(seatPlan.getSelectable()); + fPerformSeatInfo.setDisplay(seatPlan.getDisplay()); + fPerformSeatInfo.setAvailableTicketQuantity(seatPlan.getAvailableTicketQuantity()); + fPerformSeatInfo.setAvailableAllTicketQuantity(seatPlan.getAvailableAllTicketQuantity()); + fPerformSeatInfo.setSaleTime(DateUtils.getTimeFromStr(seatPlan.getSaleTime())); + fPerformSeatInfo.setProjectId(availablePerform.getProjectId()); + fPerformSeatInfo.setSoldOut(seatPlan.getSoldStock()); + performService.addSeatInfo(fPerformSeatInfo); + } else { + SeatPlanStatus seatPlanStatus = map.get(seatPlan.getSeatPlanId()); + if (Objects.isNull(seatPlanStatus)) { + continue; + } + seatInfoBySeatId.setSoldStock(seatPlanStatus.getSoldOutFlag() ? 1 : 0); + performService.updateSeatInfo(seatInfoBySeatId); + } + } + } + } + } + return Result.success("success"); + } +} diff --git a/script/src/main/java/com/xiang/xservice/fwd/service/IPerformService.java b/script/src/main/java/com/xiang/xservice/fwd/service/IPerformService.java index 8fb04ca..e7658e9 100644 --- a/script/src/main/java/com/xiang/xservice/fwd/service/IPerformService.java +++ b/script/src/main/java/com/xiang/xservice/fwd/service/IPerformService.java @@ -1,5 +1,6 @@ package com.xiang.xservice.fwd.service; +import com.xiang.xservice.fwd.entity.pojo.FPerformConfig; import com.xiang.xservice.fwd.entity.pojo.FPerformProjectInfo; import com.xiang.xservice.fwd.entity.pojo.FPerformSeatInfo; @@ -16,4 +17,14 @@ public interface IPerformService { List getPerformSeatInfoByProjectId(Long projectId); Boolean createProjectOrder(Long projectId, List frequentIds) throws Exception; + + List getAvailablePerform(); + + Boolean updateProjectInfo(FPerformProjectInfo projectInfo); + + FPerformSeatInfo getSeatInfoBySeatId(Long seatId); + + Boolean updateSeatInfo(FPerformSeatInfo seatInfoBySeatId); + + Boolean addSeatInfo(FPerformSeatInfo fPerformSeatInfo); } diff --git a/script/src/main/java/com/xiang/xservice/fwd/service/impl/PerformServiceHttpServiceImpl.java b/script/src/main/java/com/xiang/xservice/fwd/service/impl/PerformServiceHttpServiceImpl.java index 8e83af8..1a6145e 100644 --- a/script/src/main/java/com/xiang/xservice/fwd/service/impl/PerformServiceHttpServiceImpl.java +++ b/script/src/main/java/com/xiang/xservice/fwd/service/impl/PerformServiceHttpServiceImpl.java @@ -48,7 +48,7 @@ public class PerformServiceHttpServiceImpl implements IPerformServiceHttp { } String respStr = HttpUtils.doGet(UrlConstants.PROJECTS_URL, buildFWDHeaders(null), params); if (StringUtils.isBlank(respStr)) { - return new ProjectsResp(); + return null; } log.info("【Http请求】 http请求查询演出列表结果:{}", respStr); JSONObject resp = JSON.parseObject(respStr); @@ -56,11 +56,11 @@ public class PerformServiceHttpServiceImpl implements IPerformServiceHttp { if (Objects.nonNull(code) && Objects.equals(code, CodeConstants.SUCCESS)) { ProjectsResp projectsResp = JSON.parseObject(resp.get("data").toString(), ProjectsResp.class); if (Objects.isNull(projectsResp)) { - return new ProjectsResp(); + return null; } return projectsResp; } - return new ProjectsResp(); + return null; } @Override @@ -69,7 +69,7 @@ public class PerformServiceHttpServiceImpl implements IPerformServiceHttp { params.put("project_id", String.valueOf(projectId)); String respStr = HttpUtils.doGet(UrlConstants.PROJECTS_INFO_URL, buildFWDHeaders(UrlConstants.token), params); if (StringUtils.isBlank(respStr)) { - return new ProjectInfoResp(); + return null; } log.info("【Http请求】 根据projectId:{},http请求查询演出信息结果:{}", projectId, respStr); JSONObject resp = JSON.parseObject(respStr); @@ -77,11 +77,11 @@ public class PerformServiceHttpServiceImpl implements IPerformServiceHttp { if (Objects.nonNull(code) && Objects.equals(code, CodeConstants.SUCCESS)) { ProjectInfoResp projectInfoResp = JSON.parseObject(resp.get("data").toString(), ProjectInfoResp.class); if (Objects.isNull(projectInfoResp)) { - return new ProjectInfoResp(); + return null; } return projectInfoResp; } - return new ProjectInfoResp(); + return null; } @Override @@ -109,7 +109,7 @@ public class PerformServiceHttpServiceImpl implements IPerformServiceHttp { params.put("project_id", String.valueOf(projectId)); String respStr = HttpUtils.doGet(UrlConstants.PERFORMS_URL, buildFWDHeaders(UrlConstants.token), params); if (StringUtils.isBlank(respStr)) { - return new Perform(); + return null; } log.info("【Http请求】 根据projectId:{}http请求查询演出票务信息结果:{}", projectId, respStr); JSONObject resp = JSON.parseObject(respStr); @@ -117,11 +117,11 @@ public class PerformServiceHttpServiceImpl implements IPerformServiceHttp { if (Objects.nonNull(code) && Objects.equals(code, CodeConstants.SUCCESS)) { Perform projectInfoResp = JSON.parseObject(resp.get("data").toString(), Perform.class); if (Objects.isNull(projectInfoResp)) { - return new Perform(); + return null; } return projectInfoResp; } - return new Perform(); + return null; } @Override diff --git a/script/src/main/java/com/xiang/xservice/fwd/service/impl/PerformServiceImpl.java b/script/src/main/java/com/xiang/xservice/fwd/service/impl/PerformServiceImpl.java index cb64e7c..e5dece1 100644 --- a/script/src/main/java/com/xiang/xservice/fwd/service/impl/PerformServiceImpl.java +++ b/script/src/main/java/com/xiang/xservice/fwd/service/impl/PerformServiceImpl.java @@ -2,10 +2,12 @@ package com.xiang.xservice.fwd.service.impl; import com.alibaba.fastjson2.JSONObject; import com.xiang.xservice.basic.xservice.dingTalk.service.DingTalkService; +import com.xiang.xservice.fwd.entity.pojo.FPerformConfig; import com.xiang.xservice.fwd.entity.pojo.FPerformProjectInfo; import com.xiang.xservice.fwd.entity.pojo.FPerformSeatInfo; import com.xiang.xservice.fwd.entity.req.ProjectOrderCreateReq; import com.xiang.xservice.fwd.entity.resp.http.perform.ProjectOrderCreateResp; +import com.xiang.xservice.fwd.mapper.FwdPerformConfigMapper; import com.xiang.xservice.fwd.mapper.FwdPerformProjectInfoMapper; import com.xiang.xservice.fwd.mapper.FwdPerformSeatInfoMapper; import com.xiang.xservice.fwd.service.IPerformService; @@ -33,6 +35,7 @@ public class PerformServiceImpl implements IPerformService { private final FwdPerformSeatInfoMapper fwdPerformSeatInfoMapper; private final FwdPerformProjectInfoMapper fwdPerformProjectInfoMapper; + private final FwdPerformConfigMapper fwdPerformConfigMapper; private final IPerformServiceHttp performServiceHttp; private final DingTalkService dingTalkService; @Value("${DingTalk.chatId}") @@ -89,4 +92,29 @@ public class PerformServiceImpl implements IPerformService { } return Boolean.FALSE; } + + @Override + public List getAvailablePerform() { + return fwdPerformConfigMapper.getAvailablePerform(); + } + + @Override + public Boolean updateProjectInfo(FPerformProjectInfo projectInfo) { + return fwdPerformProjectInfoMapper.update(projectInfo) > 0; + } + + @Override + public FPerformSeatInfo getSeatInfoBySeatId(Long seatId) { + return fwdPerformSeatInfoMapper.getBySeatPlanId(seatId); + } + + @Override + public Boolean updateSeatInfo(FPerformSeatInfo seatInfoBySeatId) { + return fwdPerformSeatInfoMapper.update(seatInfoBySeatId) > 0; + } + + @Override + public Boolean addSeatInfo(FPerformSeatInfo fPerformSeatInfo) { + return fwdPerformSeatInfoMapper.batchSave(Collections.singletonList(fPerformSeatInfo)) > 0; + } } diff --git a/script/src/main/resources/mapper/fwd/FwdPerformProjectSeatInfoMapper.xml b/script/src/main/resources/mapper/fwd/FwdPerformProjectSeatInfoMapper.xml index caf672f..4d14ee9 100644 --- a/script/src/main/resources/mapper/fwd/FwdPerformProjectSeatInfoMapper.xml +++ b/script/src/main/resources/mapper/fwd/FwdPerformProjectSeatInfoMapper.xml @@ -278,10 +278,15 @@ from fwd_perform_seat_info where seat_plan_id = #{seatId} and perform_id = #{performId} and project_id = #{projectId} - select from fwd_perform_seat_info where project_id = #{projectId} and sold_out = 0 + \ No newline at end of file