From f0b0ef2e5aed0a525819db91b0de223d27708fa8 Mon Sep 17 00:00:00 2001 From: Zhujx Date: Thu, 24 Jul 2025 17:44:19 +0800 Subject: [PATCH] =?UTF-8?q?feat:=E8=8A=AC=E7=8E=A9=E5=B2=9B=E5=AE=9A?= =?UTF-8?q?=E6=97=B6=E4=BB=BB=E5=8A=A1=E6=8B=89=E5=8F=96=E6=95=B0=E6=8D=AE?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- ...mProject.java => FPerformProjectInfo.java} | 4 +- .../mapper/FwdPerformProjectInfoMapper.java | 19 ++ .../fwd/schedule/PullDataFromFWDJob.java | 99 +++++++++ .../src/main/resources/application-local.yml | 2 +- .../fwd/FwdPerformProjectInfoMapper.xml | 196 ++++++++++++++++++ 5 files changed, 317 insertions(+), 3 deletions(-) rename script/src/main/java/com/xiang/xservice/fwd/entity/pojo/{FPerformProject.java => FPerformProjectInfo.java} (92%) create mode 100644 script/src/main/java/com/xiang/xservice/fwd/mapper/FwdPerformProjectInfoMapper.java create mode 100644 script/src/main/java/com/xiang/xservice/fwd/schedule/PullDataFromFWDJob.java create mode 100644 script/src/main/resources/mapper/fwd/FwdPerformProjectInfoMapper.xml diff --git a/script/src/main/java/com/xiang/xservice/fwd/entity/pojo/FPerformProject.java b/script/src/main/java/com/xiang/xservice/fwd/entity/pojo/FPerformProjectInfo.java similarity index 92% rename from script/src/main/java/com/xiang/xservice/fwd/entity/pojo/FPerformProject.java rename to script/src/main/java/com/xiang/xservice/fwd/entity/pojo/FPerformProjectInfo.java index 7a0530a..8a343ad 100644 --- a/script/src/main/java/com/xiang/xservice/fwd/entity/pojo/FPerformProject.java +++ b/script/src/main/java/com/xiang/xservice/fwd/entity/pojo/FPerformProjectInfo.java @@ -11,7 +11,7 @@ import java.time.LocalDate; @Data @AllArgsConstructor @NoArgsConstructor -public class FPerformProject { +public class FPerformProjectInfo { private Long id; private String projectName; @@ -44,7 +44,7 @@ public class FPerformProject { private BigDecimal highestPrice; - private String projectPrice; + private BigDecimal projectPrice; private LocalDate projectStartDate; diff --git a/script/src/main/java/com/xiang/xservice/fwd/mapper/FwdPerformProjectInfoMapper.java b/script/src/main/java/com/xiang/xservice/fwd/mapper/FwdPerformProjectInfoMapper.java new file mode 100644 index 0000000..12215d7 --- /dev/null +++ b/script/src/main/java/com/xiang/xservice/fwd/mapper/FwdPerformProjectInfoMapper.java @@ -0,0 +1,19 @@ +package com.xiang.xservice.fwd.mapper; + +import com.xiang.xservice.fwd.entity.pojo.FPerformProjectInfo; +import org.apache.ibatis.annotations.Mapper; +import org.springframework.stereotype.Repository; + +/** + * @Author: xiang + * @Date: 2025-07-24 17:22 + */ +@Repository +@Mapper +public interface FwdPerformProjectInfoMapper { + FPerformProjectInfo getProjectByProjectId(Long projectId); + + int insert(FPerformProjectInfo fPerformProjectInfo); + + int update(FPerformProjectInfo fPerformProjectInfo); +} 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 new file mode 100644 index 0000000..15506d3 --- /dev/null +++ b/script/src/main/java/com/xiang/xservice/fwd/schedule/PullDataFromFWDJob.java @@ -0,0 +1,99 @@ +package com.xiang.xservice.fwd.schedule; + +import com.xiang.xservice.basic.utils.DateUtils; +import com.xiang.xservice.fwd.entity.pojo.FPerformProjectInfo; +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.mapper.FwdPerformProjectInfoMapper; +import com.xiang.xservice.fwd.service.IPerformServiceHttp; +import lombok.RequiredArgsConstructor; +import lombok.extern.slf4j.Slf4j; +import org.springframework.scheduling.annotation.Scheduled; +import org.springframework.stereotype.Component; +import org.springframework.web.bind.annotation.PostMapping; +import org.springframework.web.bind.annotation.RestController; + +import java.util.List; +import java.util.Objects; + +/** + * 芬玩岛拉取数据定时任务 + * + * @Author: xiang + * @Date: 2025-07-24 17:19 + */ +@Component +@RequiredArgsConstructor +@Slf4j +@RestController +public class PullDataFromFWDJob { + + private final IPerformServiceHttp performServiceHttp; + private final FwdPerformProjectInfoMapper performProjectInfoMapper; + + /** + * 定时任务 每日2点爬取芬玩岛数据演出列表数据 + */ + @Scheduled(cron = "0 0 2 1/1 * ?") + @PostMapping("/pullProjectsDataJob") + public void pullProjectsDataJob() { + ProjectsResp showProjectsFromHttp = performServiceHttp.getShowProjectsFromHttp(); + if (Objects.isNull(showProjectsFromHttp)) { + return; + } + List projectList = showProjectsFromHttp.getList(); + for (ProjectList project : projectList) { + ProjectInfoResp projectInfoFromHttp = performServiceHttp.getProjectInfoFromHttp(project.getProjectId()); + if (Objects.nonNull(projectInfoFromHttp)) { + 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()); + projectInfo.setProjectStartDate(DateUtils.getDateFromStr(projectInfoFromHttp.getProjectStartDate())); + 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()); +// projectInfo.setProjectPrice(StringUtils.isBlank(projectInfoFromHttp.getProjectPrice()) ? BigDecimal.ZERO : new BigDecimal(projectInfoFromHttp.getProjectPrice())); + performProjectInfoMapper.update(projectInfo); + } 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()); + fPerformProjectInfo.setProjectStartDate(DateUtils.getDateFromStr(projectInfoFromHttp.getProjectStartDate())); + 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()); +// fPerformProjectInfo.setProjectPrice(StringUtils.isBlank(projectInfoFromHttp.getProjectPrice()) ? BigDecimal.ZERO : new BigDecimal(projectInfoFromHttp.getProjectPrice())); + performProjectInfoMapper.insert(fPerformProjectInfo); + } + } + } + } +} diff --git a/script/src/main/resources/application-local.yml b/script/src/main/resources/application-local.yml index 7c00b01..f3b6d22 100644 --- a/script/src/main/resources/application-local.yml +++ b/script/src/main/resources/application-local.yml @@ -2,5 +2,5 @@ spring: datasource: url: jdbc:mysql:///xservice-script?useUnicode=true&characterEncoding=utf-8&serverTimezone=Asia/Shanghai&allowMultiQueries=true username: root - password: Admin@123 + password: 12345678 driver-class-name: com.mysql.cj.jdbc.Driver \ No newline at end of file diff --git a/script/src/main/resources/mapper/fwd/FwdPerformProjectInfoMapper.xml b/script/src/main/resources/mapper/fwd/FwdPerformProjectInfoMapper.xml new file mode 100644 index 0000000..5c330a4 --- /dev/null +++ b/script/src/main/resources/mapper/fwd/FwdPerformProjectInfoMapper.xml @@ -0,0 +1,196 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + id, project_name, + status, + project_source, + is_has_seat, + is_choice_seat, + biz_id, + project_id, + tag_name, + tag_remark, + project_city, + short_city, + venue_name, + lowest_price, + highest_price, + project_price, + project_start_date, + project_end_date, + sub_classify_name + + + + INSERT INTO fwd_perform_project_info + + + project_name, + + + status, + + + project_source, + + + is_has_seat, + + + is_choice_seat, + + + biz_id, + + + project_id, + + + tag_name, + + + tag_remark, + + + project_city, + + + short_city, + + + venue_name, + + + lowest_price, + + + highest_price, + + + project_price, + + + project_start_date, + + + project_end_date, + + + sub_classify_name + + + + + #{projectName}, + + + #{status}, + + + #{projectSource}, + + + #{isHasSeat}, + + + #{isChoiceSeat}, + + + #{bizId}, + + + #{projectId}, + + + #{tagName}, + + + #{tagRemark}, + + + #{projectCity}, + + + #{shortCity}, + + + #{venueName}, + + + #{lowestPrice}, + + + #{highestPrice}, + + + #{projectPrice}, + + + #{projectStartDate}, + + + #{projectEndDate}, + + + #{subClassifyName} + + + + + + UPDATE fwd_perform_project_info + + project_name = #{projectName}, + status = #{status}, + project_source = #{projectSource}, + is_has_seat = #{isHasSeat}, + is_choice_seat = #{isChoiceSeat}, + biz_id = #{bizId}, + project_id = #{projectId}, + tag_name = #{tagName}, + tag_remark = #{tagRemark}, + project_city = #{projectCity}, + short_city = #{shortCity}, + venue_name = #{venueName}, + lowest_price = #{lowestPrice}, + highest_price = #{highestPrice}, + project_price = #{projectPrice}, + project_start_date = #{projectStartDate}, + project_end_date = #{projectEndDate}, + sub_classify_name = #{subClassifyName} + + WHERE id = #{id} + + + + + \ No newline at end of file