From 91a40bd516b9fcda6db7897ba49a816bec7458aa Mon Sep 17 00:00:00 2001 From: xiang Date: Tue, 22 Jul 2025 23:01:32 +0800 Subject: [PATCH 01/49] =?UTF-8?q?feat:=E8=8A=AC=E7=8E=A9=E5=B2=9B=E6=BC=94?= =?UTF-8?q?=E5=87=BA=E5=88=97=E8=A1=A8=E6=8E=A5=E5=8F=A3?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../xservice/fwd/constants/UrlConstants.java | 14 +++++ .../fwd/entity/pojo/FPerformProject.java | 54 +++++++++++++++++++ .../xservice/fwd/entity/resp/BaseResult.java | 18 +++++++ .../fwd/entity/resp/perform/ProjectList.java | 39 ++++++++++++++ .../fwd/entity/resp/perform/ProjectsResp.java | 45 ++++++++++++++++ .../fwd/service/IPerformServiceHttp.java | 10 ++++ .../impl/PerformServiceHttpServiceImpl.java | 52 ++++++++++++++++++ .../src/main/resources/application-local.yml | 4 +- 8 files changed, 234 insertions(+), 2 deletions(-) create mode 100644 script/src/main/java/com/xiang/xservice/fwd/constants/UrlConstants.java create mode 100644 script/src/main/java/com/xiang/xservice/fwd/entity/pojo/FPerformProject.java create mode 100644 script/src/main/java/com/xiang/xservice/fwd/entity/resp/BaseResult.java create mode 100644 script/src/main/java/com/xiang/xservice/fwd/entity/resp/perform/ProjectList.java create mode 100644 script/src/main/java/com/xiang/xservice/fwd/entity/resp/perform/ProjectsResp.java create mode 100644 script/src/main/java/com/xiang/xservice/fwd/service/IPerformServiceHttp.java create mode 100644 script/src/main/java/com/xiang/xservice/fwd/service/impl/PerformServiceHttpServiceImpl.java diff --git a/script/src/main/java/com/xiang/xservice/fwd/constants/UrlConstants.java b/script/src/main/java/com/xiang/xservice/fwd/constants/UrlConstants.java new file mode 100644 index 0000000..15fb56f --- /dev/null +++ b/script/src/main/java/com/xiang/xservice/fwd/constants/UrlConstants.java @@ -0,0 +1,14 @@ +package com.xiang.xservice.fwd.constants; + +public class UrlConstants { + + /** + * 芬玩岛的基础URL + */ + public final static String BASE_URL = "https://api.livelab.com.cn"; + + /** + * 全部演出列表URL + */ + public final static String PROJECTS_URL = BASE_URL + "/appShow/app/homepage/projects"; +} 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/FPerformProject.java new file mode 100644 index 0000000..7a0530a --- /dev/null +++ b/script/src/main/java/com/xiang/xservice/fwd/entity/pojo/FPerformProject.java @@ -0,0 +1,54 @@ +package com.xiang.xservice.fwd.entity.pojo; + + +import lombok.AllArgsConstructor; +import lombok.Data; +import lombok.NoArgsConstructor; + +import java.math.BigDecimal; +import java.time.LocalDate; + +@Data +@AllArgsConstructor +@NoArgsConstructor +public class FPerformProject { + private Long id; + + private String projectName; + + private String nameDisplay; + + private Integer status; + + private String projectSource; + + private Integer isHasSeat; + + private Integer isChoiceSeat; + + private Long bizId; + + private Long projectId; + + private String tagName; + + private String tagRemark; + + private String projectCity; + + private String shortCity; + + private String venueName; + + private BigDecimal lowestPrice; + + private BigDecimal highestPrice; + + private String projectPrice; + + private LocalDate projectStartDate; + + private LocalDate projectEndDate; + + private String subClassifyName; +} diff --git a/script/src/main/java/com/xiang/xservice/fwd/entity/resp/BaseResult.java b/script/src/main/java/com/xiang/xservice/fwd/entity/resp/BaseResult.java new file mode 100644 index 0000000..04900da --- /dev/null +++ b/script/src/main/java/com/xiang/xservice/fwd/entity/resp/BaseResult.java @@ -0,0 +1,18 @@ +package com.xiang.xservice.fwd.entity.resp; + +public class BaseResult { + /** + * 响应码 10000成功 + */ + private Long code; + + /** + * 消息 + */ + private String msg; + + /** + * 数据 + */ + private T data; +} diff --git a/script/src/main/java/com/xiang/xservice/fwd/entity/resp/perform/ProjectList.java b/script/src/main/java/com/xiang/xservice/fwd/entity/resp/perform/ProjectList.java new file mode 100644 index 0000000..fa6dd8b --- /dev/null +++ b/script/src/main/java/com/xiang/xservice/fwd/entity/resp/perform/ProjectList.java @@ -0,0 +1,39 @@ +package com.xiang.xservice.fwd.entity.resp.perform; + +import lombok.AllArgsConstructor; +import lombok.Data; +import lombok.NoArgsConstructor; + +import java.math.BigDecimal; + +/** + * 全部演出列表 + */ +@Data +@AllArgsConstructor +@NoArgsConstructor +public class ProjectList { + private Long id; + + private String name; + + private Long bizId; + + private Long projectId; + + private String tagName; + + private String tagRemark; + + private String city; + + private String shortCity; + + private String venueName; + + private BigDecimal lowestPrice; + + private String projectPrice; + + private String dateRange; +} diff --git a/script/src/main/java/com/xiang/xservice/fwd/entity/resp/perform/ProjectsResp.java b/script/src/main/java/com/xiang/xservice/fwd/entity/resp/perform/ProjectsResp.java new file mode 100644 index 0000000..5b24f20 --- /dev/null +++ b/script/src/main/java/com/xiang/xservice/fwd/entity/resp/perform/ProjectsResp.java @@ -0,0 +1,45 @@ +package com.xiang.xservice.fwd.entity.resp.perform; + +import lombok.AllArgsConstructor; +import lombok.Data; +import lombok.NoArgsConstructor; + +import java.util.List; + +@Data@NoArgsConstructor +@AllArgsConstructor +public class ProjectsResp { + private Integer total; + + private List list; + + private Integer pageNum; + + private Integer pageSize; + + private Integer startRow; + + private Integer endRow; + + private Integer pages; + + private Integer prePage; + + private Integer nextPage; + + private Boolean isFirstPage; + + private Boolean isLastPage; + + private Boolean hasPreviousPage; + + private Boolean hasNextPage; + + private Integer navigatePages; + + private Integer navigatepageNums; + + private Integer navigateFirstPage; + + private Integer navigateLastPage; +} diff --git a/script/src/main/java/com/xiang/xservice/fwd/service/IPerformServiceHttp.java b/script/src/main/java/com/xiang/xservice/fwd/service/IPerformServiceHttp.java new file mode 100644 index 0000000..80f37c4 --- /dev/null +++ b/script/src/main/java/com/xiang/xservice/fwd/service/IPerformServiceHttp.java @@ -0,0 +1,10 @@ +package com.xiang.xservice.fwd.service; + +import com.xiang.xservice.fwd.entity.resp.perform.ProjectsResp; + +public interface IPerformServiceHttp { + + ProjectsResp getShowProjectsFromHttp(); + + +} 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 new file mode 100644 index 0000000..fca01bd --- /dev/null +++ b/script/src/main/java/com/xiang/xservice/fwd/service/impl/PerformServiceHttpServiceImpl.java @@ -0,0 +1,52 @@ +package com.xiang.xservice.fwd.service.impl; + +import com.alibaba.fastjson.JSON; +import com.google.common.collect.Maps; +import com.xiang.xservice.basic.utils.HttpUtils; +import com.xiang.xservice.fwd.constants.UrlConstants; +import com.xiang.xservice.fwd.entity.resp.perform.ProjectsResp; +import com.xiang.xservice.fwd.service.IPerformServiceHttp; +import lombok.RequiredArgsConstructor; +import lombok.extern.slf4j.Slf4j; +import org.apache.commons.lang3.StringUtils; +import org.springframework.stereotype.Service; + +import java.util.HashMap; +import java.util.Map; + +@Service +@Slf4j +@RequiredArgsConstructor +public class PerformServiceHttpServiceImpl implements IPerformServiceHttp { + + @Override + public ProjectsResp getShowProjectsFromHttp() { + int pageNum = 1; + int pageSize = 9999; + Map headers = Maps.newHashMap(); + + Map params = Maps.newHashMap(); + params.put("projectModuleId", "7"); + params.put("pageNum", String.valueOf(pageNum)); + params.put("pageSize", String.valueOf(pageSize)); + String resp = HttpUtils.doGet(UrlConstants.PROJECTS_URL, buildFWDHeaders(null), params); + if (StringUtils.isBlank(resp)) { + return new ProjectsResp(); + } + JSON.parse(resp).var + } + + + private Map buildFWDHeaders(String token) { + Map headers = Maps.newHashMap(); + headers.put("content-type", "application/json"); + headers.put("Host", "api.livelab.com.cn"); + headers.put("platform-type", "%E7%BA%B7%E7%8E%A9%E5%B2%9B%E5%BE%AE%E4%BF%A1%E5%B0%8F%E7%A8%8B%E5%BA%8F"); + headers.put("x-fwd-anonymousId", "ocXac5C25MY5O3UM_EfL0oTgm7Jw"); + headers.put("User-Agent", "Mozilla/5.0 (iPhone; CPU iPhone OS 18_5 like Mac OS X) AppleWebKit/605.1.15 (KHTML, like Gecko) Mobile/15E148 MicroMessenger/8.0.61(0x18003d2e) NetType/WIFI Language/zh_CN"); + if (StringUtils.isNotBlank(token)) { + headers.put("Authorization", token); + } + return headers; + } +} diff --git a/script/src/main/resources/application-local.yml b/script/src/main/resources/application-local.yml index 3324d40..a6f9a37 100644 --- a/script/src/main/resources/application-local.yml +++ b/script/src/main/resources/application-local.yml @@ -1,6 +1,6 @@ spring: datasource: - url: jdbc:mysql:///xservice-script?useUnicode=true&characterEncoding=utf-8&serverTimezone=Asia/Shanghai&allowMultiQueries=true + url: jdbc:mysql://192.168.2.10:3306/xservice-script-local?useUnicode=true&characterEncoding=utf-8&serverTimezone=Asia/Shanghai&allowMultiQueries=true username: root - password: 123456 + password: Admin@123 driver-class-name: com.mysql.cj.jdbc.Driver \ No newline at end of file From 1e41fb847a834391f47542f177b2f829616c254c Mon Sep 17 00:00:00 2001 From: xiang Date: Tue, 22 Jul 2025 23:56:46 +0800 Subject: [PATCH 02/49] =?UTF-8?q?feat:=E8=8A=AC=E7=8E=A9=E5=B2=9B=E6=BC=94?= =?UTF-8?q?=E5=87=BA=E8=AF=A6=E6=83=85=E6=8E=A5=E5=8F=A3=E4=BB=A5=E5=8F=8A?= =?UTF-8?q?=E4=B8=8B=E8=AE=A2=E5=8D=95=E6=8E=A5=E5=8F=A3?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../xservice/fwd/constants/CodeConstants.java | 5 + .../xservice/fwd/constants/UrlConstants.java | 12 +++ .../fwd/entity/req/PrivilegeCode.java | 13 +++ .../fwd/entity/req/ProjectOrderCreateReq.java | 27 ++++++ .../entity/resp/perform/DeductionRuleDTO.java | 18 ++++ .../fwd/entity/resp/perform/Notice.java | 32 +++++++ .../entity/resp/perform/ProjectInfoResp.java | 67 ++++++++++++++ .../resp/perform/ProjectOrderCreateResp.java | 37 ++++++++ .../entity/resp/perform/ProjectService.java | 18 ++++ .../resp/perform/RefundBeanRuleDTO.java | 16 ++++ .../fwd/entity/resp/perform/RefundRule.java | 18 ++++ .../entity/resp/perform/RefundRuleInfo.java | 17 ++++ .../entity/resp/perform/StandByNotice.java | 4 + .../fwd/entity/resp/perform/Ticket.java | 18 ++++ .../fwd/entity/resp/perform/TicketNotice.java | 32 +++++++ .../fwd/entity/resp/perform/VenueInfo.java | 39 ++++++++ .../fwd/service/IPerformServiceHttp.java | 21 +++++ .../impl/PerformServiceHttpServiceImpl.java | 91 ++++++++++++++++++- 18 files changed, 480 insertions(+), 5 deletions(-) create mode 100644 script/src/main/java/com/xiang/xservice/fwd/constants/CodeConstants.java create mode 100644 script/src/main/java/com/xiang/xservice/fwd/entity/req/PrivilegeCode.java create mode 100644 script/src/main/java/com/xiang/xservice/fwd/entity/req/ProjectOrderCreateReq.java create mode 100644 script/src/main/java/com/xiang/xservice/fwd/entity/resp/perform/DeductionRuleDTO.java create mode 100644 script/src/main/java/com/xiang/xservice/fwd/entity/resp/perform/Notice.java create mode 100644 script/src/main/java/com/xiang/xservice/fwd/entity/resp/perform/ProjectInfoResp.java create mode 100644 script/src/main/java/com/xiang/xservice/fwd/entity/resp/perform/ProjectOrderCreateResp.java create mode 100644 script/src/main/java/com/xiang/xservice/fwd/entity/resp/perform/ProjectService.java create mode 100644 script/src/main/java/com/xiang/xservice/fwd/entity/resp/perform/RefundBeanRuleDTO.java create mode 100644 script/src/main/java/com/xiang/xservice/fwd/entity/resp/perform/RefundRule.java create mode 100644 script/src/main/java/com/xiang/xservice/fwd/entity/resp/perform/RefundRuleInfo.java create mode 100644 script/src/main/java/com/xiang/xservice/fwd/entity/resp/perform/StandByNotice.java create mode 100644 script/src/main/java/com/xiang/xservice/fwd/entity/resp/perform/Ticket.java create mode 100644 script/src/main/java/com/xiang/xservice/fwd/entity/resp/perform/TicketNotice.java create mode 100644 script/src/main/java/com/xiang/xservice/fwd/entity/resp/perform/VenueInfo.java diff --git a/script/src/main/java/com/xiang/xservice/fwd/constants/CodeConstants.java b/script/src/main/java/com/xiang/xservice/fwd/constants/CodeConstants.java new file mode 100644 index 0000000..fdaa507 --- /dev/null +++ b/script/src/main/java/com/xiang/xservice/fwd/constants/CodeConstants.java @@ -0,0 +1,5 @@ +package com.xiang.xservice.fwd.constants; + +public class CodeConstants { + public static final Integer SUCCESS = 10000; +} diff --git a/script/src/main/java/com/xiang/xservice/fwd/constants/UrlConstants.java b/script/src/main/java/com/xiang/xservice/fwd/constants/UrlConstants.java index 15fb56f..ce49c42 100644 --- a/script/src/main/java/com/xiang/xservice/fwd/constants/UrlConstants.java +++ b/script/src/main/java/com/xiang/xservice/fwd/constants/UrlConstants.java @@ -2,6 +2,8 @@ package com.xiang.xservice.fwd.constants; public class UrlConstants { + public static final String token = "Bearer eyJhbGciOiJIUzUxMiJ9.eyJjdCI6MTc1MjYzODAwNTUxNywic3ViIjoiTDIxMTQzMjU2NDEiLCJhdWQiOiJMSVZFTEFCIiwiaXNzIjoiVElDS0VUIiwibWlkIjoxNzU4ODA4NTcxMzgzNjcxNTUzLCJ0eXBlIjoiYXBwbGV0IiwiaWF0IjoxNzUyNjM4MDA1LCJkaWQiOiI2RTRDMDQ5RS00RkFBLTQ0NDMtQjI3NC1DNjRBMjZEMUFGNTkiLCJrZXkiOiJMSVZFTEFCIn0.iw1u3LyCYlxYCI1gMwTeuJlPdv-rQKCVlO2ySF_UrJ-lrEH6fm5lGo4wGalLn1qGkyqZaxuTx1K6X7Oy7sHgBA"; + /** * 芬玩岛的基础URL */ @@ -11,4 +13,14 @@ public class UrlConstants { * 全部演出列表URL */ public final static String PROJECTS_URL = BASE_URL + "/appShow/app/homepage/projects"; + + /** + * 查询演出详情URL + */ + public final static String PROJECTS_INFO_URL = BASE_URL + "/performance/app/project/get_project_info"; + + /** + * 创建订单URL + */ + public final static String PROJECT_ORDER_CREATE_URL = BASE_URL + "/order/app/center/v3/create"; } diff --git a/script/src/main/java/com/xiang/xservice/fwd/entity/req/PrivilegeCode.java b/script/src/main/java/com/xiang/xservice/fwd/entity/req/PrivilegeCode.java new file mode 100644 index 0000000..676b7a3 --- /dev/null +++ b/script/src/main/java/com/xiang/xservice/fwd/entity/req/PrivilegeCode.java @@ -0,0 +1,13 @@ +package com.xiang.xservice.fwd.entity.req; + +import lombok.AllArgsConstructor; +import lombok.Data; +import lombok.NoArgsConstructor; +import org.checkerframework.checker.units.qual.N; + +@Data +@AllArgsConstructor +@NoArgsConstructor +public class PrivilegeCode { + +} diff --git a/script/src/main/java/com/xiang/xservice/fwd/entity/req/ProjectOrderCreateReq.java b/script/src/main/java/com/xiang/xservice/fwd/entity/req/ProjectOrderCreateReq.java new file mode 100644 index 0000000..50f3b18 --- /dev/null +++ b/script/src/main/java/com/xiang/xservice/fwd/entity/req/ProjectOrderCreateReq.java @@ -0,0 +1,27 @@ +package com.xiang.xservice.fwd.entity.req; + +import lombok.AllArgsConstructor; +import lombok.Data; +import lombok.NoArgsConstructor; +import org.checkerframework.checker.units.qual.A; + +import java.math.BigDecimal; +import java.util.List; + +@Data +@AllArgsConstructor +@NoArgsConstructor +public class ProjectOrderCreateReq { + private Integer deliveryType; + private String contactName; + private String contactPhone; + private Integer payment; + private BigDecimal totalPrice; + private Long performId; + private String projectId; + private List privilegeCodeList; + private Integer audienceCount; + private List frequentIds; + private List seatPlanId; + private String blackBox; +} diff --git a/script/src/main/java/com/xiang/xservice/fwd/entity/resp/perform/DeductionRuleDTO.java b/script/src/main/java/com/xiang/xservice/fwd/entity/resp/perform/DeductionRuleDTO.java new file mode 100644 index 0000000..f140177 --- /dev/null +++ b/script/src/main/java/com/xiang/xservice/fwd/entity/resp/perform/DeductionRuleDTO.java @@ -0,0 +1,18 @@ +package com.xiang.xservice.fwd.entity.resp.perform; + +import lombok.AllArgsConstructor; +import lombok.Data; +import lombok.NoArgsConstructor; + +import java.math.BigDecimal; +import java.util.List; + +@Data +@AllArgsConstructor +@NoArgsConstructor +public class DeductionRuleDTO { + private BigDecimal commonRatio; + private BigDecimal commonMinUnit; + private BigDecimal commonThreshold; + private List specialRefundBeanRuleDtoList; +} diff --git a/script/src/main/java/com/xiang/xservice/fwd/entity/resp/perform/Notice.java b/script/src/main/java/com/xiang/xservice/fwd/entity/resp/perform/Notice.java new file mode 100644 index 0000000..d311aa9 --- /dev/null +++ b/script/src/main/java/com/xiang/xservice/fwd/entity/resp/perform/Notice.java @@ -0,0 +1,32 @@ +package com.xiang.xservice.fwd.entity.resp.perform; + +import lombok.AllArgsConstructor; +import lombok.Data; +import lombok.NoArgsConstructor; + +import java.time.LocalDateTime; +import java.util.List; + +@Data +@AllArgsConstructor +@NoArgsConstructor +public class Notice { + private String searchValue; + private String createBy; + private LocalDateTime createTime; + private String updateBy; + private LocalDateTime updateTime; + private String remark; + private List params; + private Long id; + private Long projectId; + private String name; + private Integer choose; + private String content; + private String tag; + private Integer type; + private Integer enhanced; + private String description; + private Integer sort; + private String delFlag; +} diff --git a/script/src/main/java/com/xiang/xservice/fwd/entity/resp/perform/ProjectInfoResp.java b/script/src/main/java/com/xiang/xservice/fwd/entity/resp/perform/ProjectInfoResp.java new file mode 100644 index 0000000..fd58714 --- /dev/null +++ b/script/src/main/java/com/xiang/xservice/fwd/entity/resp/perform/ProjectInfoResp.java @@ -0,0 +1,67 @@ +package com.xiang.xservice.fwd.entity.resp.perform; + +import lombok.AllArgsConstructor; +import lombok.Data; +import lombok.NoArgsConstructor; + +import java.math.BigDecimal; +import java.util.List; + +@Data +@AllArgsConstructor +@NoArgsConstructor +public class ProjectInfoResp { + private Long projectId; + private String projectName; + private String nameDisplay; + private Integer status; + private String projectSource; + private Integer isHasSeat; + private Integer isChoiceSeat; + private String poster; + private BigDecimal highPrice; + private BigDecimal lowPrice; + private String projectPrice; + private String projectStartDate; + private String projectEndDate; + private String timeDisplay; + private String projectCity; + private String subClassifyName; + private List projectServices; + private Integer showFlag; + private String preSaleTime; + private String saleStartTime; + private Long lastTime; + private Integer buttonStatus; + private String deliveryType; + private String details; + private VenueInfo venueInfo; + private List ticketNotices; + private List watchNotices; + private List standByNotices; + private String bkImg; + private Integer dialogFlag; + private String dialogTitle; + private String dialogContent; + private Integer isPrivilegeCode; + private Integer canBuyQuantity; + private String dialogButtonContent; + private List projectNoticeList; + private String dialogChangeTime; + private Integer dialogAlwayShow; + private Integer serviceSettingSwitch; + private String calendarRemindersTitle; + private String calendarRemindersContent; + private String dyProductId; + private Boolean showCalendar; + private Integer dyShelfStatus; + private String venueUnderlayUrl; + private String changeDialogContent; + private String licenseInfo; + private Integer isPreview; + private Boolean existGrabTicketActivity; + private Boolean existMoreTicketActivity; + private DeductionRuleDTO deductionRuleDto; + private RefundBeanRuleDTO refundBeanRuleDto; + private Boolean likesShowFlag; +} diff --git a/script/src/main/java/com/xiang/xservice/fwd/entity/resp/perform/ProjectOrderCreateResp.java b/script/src/main/java/com/xiang/xservice/fwd/entity/resp/perform/ProjectOrderCreateResp.java new file mode 100644 index 0000000..a348ef8 --- /dev/null +++ b/script/src/main/java/com/xiang/xservice/fwd/entity/resp/perform/ProjectOrderCreateResp.java @@ -0,0 +1,37 @@ +package com.xiang.xservice.fwd.entity.resp.perform; + +import lombok.AllArgsConstructor; +import lombok.Data; +import lombok.NoArgsConstructor; + +import java.math.BigDecimal; +import java.util.List; + +@Data +@AllArgsConstructor +@NoArgsConstructor +public class ProjectOrderCreateResp { + private String orderNo; + private String totalPrice; + private Integer cancelTimestamp; + private List tickets; + private Integer deliveryType; + private String expressFee; + private BigDecimal price; + private String projectName; + private String poster; + private String projectCity; + private String performStartTime; + private String performEndTime; + private Integer performType; + private String venueName; + private String repeatBeardIds; + private Long projectId; + private Long performId; + private Long orderId; + private DeductionRuleDTO deductionRuleDto; + private RefundBeanRuleDTO refundBeanRuleDto; + private Integer refundBeanNum; + private Integer deductBeanNum; + private Integer sourceType; +} diff --git a/script/src/main/java/com/xiang/xservice/fwd/entity/resp/perform/ProjectService.java b/script/src/main/java/com/xiang/xservice/fwd/entity/resp/perform/ProjectService.java new file mode 100644 index 0000000..a283a36 --- /dev/null +++ b/script/src/main/java/com/xiang/xservice/fwd/entity/resp/perform/ProjectService.java @@ -0,0 +1,18 @@ +package com.xiang.xservice.fwd.entity.resp.perform; + +import lombok.AllArgsConstructor; +import lombok.Data; +import lombok.NoArgsConstructor; + +import java.util.List; + +@Data +@AllArgsConstructor +@NoArgsConstructor +public class ProjectService { + private String title; + private Integer type; + private List description; + private List refundRuleList; + +} diff --git a/script/src/main/java/com/xiang/xservice/fwd/entity/resp/perform/RefundBeanRuleDTO.java b/script/src/main/java/com/xiang/xservice/fwd/entity/resp/perform/RefundBeanRuleDTO.java new file mode 100644 index 0000000..a4ce568 --- /dev/null +++ b/script/src/main/java/com/xiang/xservice/fwd/entity/resp/perform/RefundBeanRuleDTO.java @@ -0,0 +1,16 @@ +package com.xiang.xservice.fwd.entity.resp.perform; + +import lombok.AllArgsConstructor; +import lombok.Data; +import lombok.NoArgsConstructor; + +import java.math.BigDecimal; +import java.util.List; + +@Data +@AllArgsConstructor +@NoArgsConstructor +public class RefundBeanRuleDTO { + private BigDecimal commonRatio; + private List specialRefundBeanRuleDtoList; +} diff --git a/script/src/main/java/com/xiang/xservice/fwd/entity/resp/perform/RefundRule.java b/script/src/main/java/com/xiang/xservice/fwd/entity/resp/perform/RefundRule.java new file mode 100644 index 0000000..9470599 --- /dev/null +++ b/script/src/main/java/com/xiang/xservice/fwd/entity/resp/perform/RefundRule.java @@ -0,0 +1,18 @@ +package com.xiang.xservice.fwd.entity.resp.perform; + +import lombok.AllArgsConstructor; +import lombok.Data; +import lombok.NoArgsConstructor; + +import java.util.List; + +@Data +@AllArgsConstructor +@NoArgsConstructor +public class RefundRule { + private String performId; + private String performName; + private String performStartTime; + private List refundRules; + private String refundRuleUndeterminedStr; +} diff --git a/script/src/main/java/com/xiang/xservice/fwd/entity/resp/perform/RefundRuleInfo.java b/script/src/main/java/com/xiang/xservice/fwd/entity/resp/perform/RefundRuleInfo.java new file mode 100644 index 0000000..9873ef4 --- /dev/null +++ b/script/src/main/java/com/xiang/xservice/fwd/entity/resp/perform/RefundRuleInfo.java @@ -0,0 +1,17 @@ +package com.xiang.xservice.fwd.entity.resp.perform; + +import lombok.AllArgsConstructor; +import lombok.Data; +import lombok.NoArgsConstructor; + +@Data +@AllArgsConstructor +@NoArgsConstructor +public class RefundRuleInfo { + private String entrances; + private String sourceTypes; + private String startTime; + private String endTime; + private String procedureFeeRatio; + private String expressFeeFlag; +} diff --git a/script/src/main/java/com/xiang/xservice/fwd/entity/resp/perform/StandByNotice.java b/script/src/main/java/com/xiang/xservice/fwd/entity/resp/perform/StandByNotice.java new file mode 100644 index 0000000..e290110 --- /dev/null +++ b/script/src/main/java/com/xiang/xservice/fwd/entity/resp/perform/StandByNotice.java @@ -0,0 +1,4 @@ +package com.xiang.xservice.fwd.entity.resp.perform; + +public class StandByNotice { +} diff --git a/script/src/main/java/com/xiang/xservice/fwd/entity/resp/perform/Ticket.java b/script/src/main/java/com/xiang/xservice/fwd/entity/resp/perform/Ticket.java new file mode 100644 index 0000000..a9e4ef6 --- /dev/null +++ b/script/src/main/java/com/xiang/xservice/fwd/entity/resp/perform/Ticket.java @@ -0,0 +1,18 @@ +package com.xiang.xservice.fwd.entity.resp.perform; + +import lombok.AllArgsConstructor; +import lombok.Data; +import lombok.NoArgsConstructor; + +import java.math.BigDecimal; + +@Data +@AllArgsConstructor +@NoArgsConstructor +public class Ticket { + private Integer seatPlanType; + private String seatPlanName; + private Integer seatPlanQuantity; + private BigDecimal seatPlanPrice; + private Long seatPlanId; +} diff --git a/script/src/main/java/com/xiang/xservice/fwd/entity/resp/perform/TicketNotice.java b/script/src/main/java/com/xiang/xservice/fwd/entity/resp/perform/TicketNotice.java new file mode 100644 index 0000000..4e01b92 --- /dev/null +++ b/script/src/main/java/com/xiang/xservice/fwd/entity/resp/perform/TicketNotice.java @@ -0,0 +1,32 @@ +package com.xiang.xservice.fwd.entity.resp.perform; + +import lombok.AllArgsConstructor; +import lombok.Data; +import lombok.NoArgsConstructor; + +import java.time.LocalDateTime; +import java.util.List; + +@Data +@AllArgsConstructor +@NoArgsConstructor +public class TicketNotice { + private String searchValue; + private String createBy; + private LocalDateTime createTime; + private String updateBy; + private LocalDateTime updateTime; + private String remark; + private List params; + private Long id; + private Long projectId; + private String name; + private Integer choose; + private String content; + private String tag; + private Integer type; + private Integer enhanced; + private String description; + private Integer sort; + private String delFlag; +} diff --git a/script/src/main/java/com/xiang/xservice/fwd/entity/resp/perform/VenueInfo.java b/script/src/main/java/com/xiang/xservice/fwd/entity/resp/perform/VenueInfo.java new file mode 100644 index 0000000..a461b92 --- /dev/null +++ b/script/src/main/java/com/xiang/xservice/fwd/entity/resp/perform/VenueInfo.java @@ -0,0 +1,39 @@ +package com.xiang.xservice.fwd.entity.resp.perform; + +import lombok.AllArgsConstructor; +import lombok.Data; +import lombok.NoArgsConstructor; + +import java.math.BigDecimal; +import java.time.LocalDateTime; +import java.util.List; + +@Data +@AllArgsConstructor +@NoArgsConstructor + +public class VenueInfo { + private String searchValue; + private String createBy; + private LocalDateTime createTime; + private String updateBy; + private LocalDateTime updateTime; + private String remark; + private List params; + private Integer id; + private String name; + private String province; + private String city; + private String area; + private String address; + private String planeImage; + private String panoramicImage; + private String contactsName; + private String contactsPhone; + private Integer enable; + private String code; + private Integer delFlag; + private BigDecimal lng; + private BigDecimal lat; + private Integer externalId; +} diff --git a/script/src/main/java/com/xiang/xservice/fwd/service/IPerformServiceHttp.java b/script/src/main/java/com/xiang/xservice/fwd/service/IPerformServiceHttp.java index 80f37c4..3a33fed 100644 --- a/script/src/main/java/com/xiang/xservice/fwd/service/IPerformServiceHttp.java +++ b/script/src/main/java/com/xiang/xservice/fwd/service/IPerformServiceHttp.java @@ -1,10 +1,31 @@ package com.xiang.xservice.fwd.service; +import com.xiang.xservice.fwd.entity.req.ProjectOrderCreateReq; +import com.xiang.xservice.fwd.entity.resp.perform.ProjectInfoResp; +import com.xiang.xservice.fwd.entity.resp.perform.ProjectOrderCreateResp; import com.xiang.xservice.fwd.entity.resp.perform.ProjectsResp; public interface IPerformServiceHttp { + /** + * http请求查询全部演出列表 + * @return ProjectsResp + */ ProjectsResp getShowProjectsFromHttp(); + /** + * http请求根据projectId查询演出详情 + * @param projectId projectId + * @return ProjectInfoResp + */ + ProjectInfoResp getProjectInfoFromHttp(Long projectId); + + /** + * http请求创建演出订单 + * @param req 创建请求参数 + * @return ProjectOrderCreateResp + */ + ProjectOrderCreateResp createProjectOrder(ProjectOrderCreateReq req); + } 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 fca01bd..18a1aae 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 @@ -1,9 +1,14 @@ package com.xiang.xservice.fwd.service.impl; import com.alibaba.fastjson.JSON; +import com.alibaba.fastjson.JSONObject; import com.google.common.collect.Maps; import com.xiang.xservice.basic.utils.HttpUtils; +import com.xiang.xservice.fwd.constants.CodeConstants; import com.xiang.xservice.fwd.constants.UrlConstants; +import com.xiang.xservice.fwd.entity.req.ProjectOrderCreateReq; +import com.xiang.xservice.fwd.entity.resp.perform.ProjectInfoResp; +import com.xiang.xservice.fwd.entity.resp.perform.ProjectOrderCreateResp; import com.xiang.xservice.fwd.entity.resp.perform.ProjectsResp; import com.xiang.xservice.fwd.service.IPerformServiceHttp; import lombok.RequiredArgsConstructor; @@ -13,6 +18,7 @@ import org.springframework.stereotype.Service; import java.util.HashMap; import java.util.Map; +import java.util.Objects; @Service @Slf4j @@ -23,17 +29,62 @@ public class PerformServiceHttpServiceImpl implements IPerformServiceHttp { public ProjectsResp getShowProjectsFromHttp() { int pageNum = 1; int pageSize = 9999; - Map headers = Maps.newHashMap(); - Map params = Maps.newHashMap(); params.put("projectModuleId", "7"); params.put("pageNum", String.valueOf(pageNum)); params.put("pageSize", String.valueOf(pageSize)); - String resp = HttpUtils.doGet(UrlConstants.PROJECTS_URL, buildFWDHeaders(null), params); - if (StringUtils.isBlank(resp)) { + String respStr = HttpUtils.doGet(UrlConstants.PROJECTS_URL, buildFWDHeaders(null), params); + if (StringUtils.isBlank(respStr)) { return new ProjectsResp(); } - JSON.parse(resp).var + JSONObject resp = JSON.parseObject(respStr); + Integer code = (Integer) resp.get("code"); + 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 projectsResp; + } + return new ProjectsResp(); + } + + @Override + public ProjectInfoResp getProjectInfoFromHttp(Long projectId) { + Map params = Maps.newHashMap(); + 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(); + } + JSONObject resp = JSON.parseObject(respStr); + Integer code = (Integer) resp.get("code"); + 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 projectInfoResp; + } + return new ProjectInfoResp(); + } + + @Override + public ProjectOrderCreateResp createProjectOrder(ProjectOrderCreateReq req) { + String respStr = HttpUtils.doPost(UrlConstants.PROJECT_ORDER_CREATE_URL, buildFWDHeaders(UrlConstants.token), JSON.toJSONString(req)); + if (StringUtils.isBlank(respStr)) { + return new ProjectOrderCreateResp(); + } + JSONObject resp = JSON.parseObject(respStr); + Integer code = (Integer) resp.get("code"); + if (Objects.nonNull(code) && Objects.equals(code, CodeConstants.SUCCESS)) { + ProjectOrderCreateResp projectOrderCreateResp = JSON.parseObject(resp.get("data").toString(), ProjectOrderCreateResp.class); + if (Objects.isNull(projectOrderCreateResp)) { + return new ProjectOrderCreateResp(); + } + return projectOrderCreateResp; + } + return new ProjectOrderCreateResp(); } @@ -41,12 +92,42 @@ public class PerformServiceHttpServiceImpl implements IPerformServiceHttp { Map headers = Maps.newHashMap(); headers.put("content-type", "application/json"); headers.put("Host", "api.livelab.com.cn"); + headers.put("Connection", "keep-alive"); headers.put("platform-type", "%E7%BA%B7%E7%8E%A9%E5%B2%9B%E5%BE%AE%E4%BF%A1%E5%B0%8F%E7%A8%8B%E5%BA%8F"); headers.put("x-fwd-anonymousId", "ocXac5C25MY5O3UM_EfL0oTgm7Jw"); headers.put("User-Agent", "Mozilla/5.0 (iPhone; CPU iPhone OS 18_5 like Mac OS X) AppleWebKit/605.1.15 (KHTML, like Gecko) Mobile/15E148 MicroMessenger/8.0.61(0x18003d2e) NetType/WIFI Language/zh_CN"); + headers.put("X-REQUEST-STARTTIME", String.valueOf(System.currentTimeMillis())); if (StringUtils.isNotBlank(token)) { headers.put("Authorization", token); } return headers; } + + public static void main(String[] args) { + Map params = Maps.newHashMap(); + Long projectId = 7484116591L; + params.put("project_id", String.valueOf(projectId)); + Map headers = Maps.newHashMap(); + headers.put("content-type", "application/json"); + headers.put("Host", "api.livelab.com.cn"); + headers.put("Connection", "keep-alive"); + headers.put("platform-type", "%E7%BA%B7%E7%8E%A9%E5%B2%9B%E5%BE%AE%E4%BF%A1%E5%B0%8F%E7%A8%8B%E5%BA%8F"); + headers.put("x-fwd-anonymousId", "ocXac5C25MY5O3UM_EfL0oTgm7Jw"); + headers.put("User-Agent", "Mozilla/5.0 (iPhone; CPU iPhone OS 18_5 like Mac OS X) AppleWebKit/605.1.15 (KHTML, like Gecko) Mobile/15E148 MicroMessenger/8.0.61(0x18003d2e) NetType/WIFI Language/zh_CN"); + headers.put("X-REQUEST-STARTTIME", String.valueOf(System.currentTimeMillis())); + headers.put("Authorization", UrlConstants.token); + String respStr = HttpUtils.doGet(UrlConstants.PROJECTS_INFO_URL, headers, params); + if (StringUtils.isBlank(respStr)) { + log.info("1"); + } + JSONObject resp = JSON.parseObject(respStr); + Integer code = (Integer) resp.get("code"); + if (Objects.nonNull(code) && Objects.equals(code, CodeConstants.SUCCESS)) { + ProjectInfoResp projectInfoResp = JSON.parseObject(resp.get("data").toString(), ProjectInfoResp.class); + if (Objects.isNull(projectInfoResp)) { + log.info("2"); + } + log.info("查询结果:{}", projectInfoResp); + } + } } From 1ccfa3ba8d8d84283ba91a797d078bccfd67b385 Mon Sep 17 00:00:00 2001 From: xiang Date: Wed, 23 Jul 2025 00:06:19 +0800 Subject: [PATCH 03/49] =?UTF-8?q?feat:=E6=97=A0=E5=8F=82=E6=9E=84=E9=80=A0?= =?UTF-8?q?=E4=BF=AE=E5=A4=8D?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../fwd/entity/req/PrivilegeCode.java | 1 - .../impl/PerformServiceHttpServiceImpl.java | 30 +++++++++++++++---- 2 files changed, 24 insertions(+), 7 deletions(-) diff --git a/script/src/main/java/com/xiang/xservice/fwd/entity/req/PrivilegeCode.java b/script/src/main/java/com/xiang/xservice/fwd/entity/req/PrivilegeCode.java index 676b7a3..074a2c0 100644 --- a/script/src/main/java/com/xiang/xservice/fwd/entity/req/PrivilegeCode.java +++ b/script/src/main/java/com/xiang/xservice/fwd/entity/req/PrivilegeCode.java @@ -7,7 +7,6 @@ import org.checkerframework.checker.units.qual.N; @Data @AllArgsConstructor -@NoArgsConstructor public class PrivilegeCode { } 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 18a1aae..0c3c84e 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 @@ -104,10 +104,28 @@ public class PerformServiceHttpServiceImpl implements IPerformServiceHttp { } public static void main(String[] args) { - Map params = Maps.newHashMap(); - Long projectId = 7484116591L; - params.put("project_id", String.valueOf(projectId)); Map headers = Maps.newHashMap(); + String req = "{" + + " \"deliveryType\": 1," + + " \"contactName\": \"朱吉祥\"," + + " \"contactPhone\": \"15858717571\"," + + " \"combineTicketVos\": null," + + " \"ordinaryTicketVos\": null," + + " \"payment\": 999," + + " \"totalPrice\": 999," + + " \"performId\": 2772," + + " \"projectId\": \"5881698656\"," + + " \"privilegeCodeList\": []," + + " \"audienceCount\": 1," + + " \"frequentIds\": [" + + " 35320661" + + " ]," + + " \"seatPlanIds\": [" + + " 14118," + + " 14117" + + " ]," + + " \"blackBox\": \":0\"" + + "}"; headers.put("content-type", "application/json"); headers.put("Host", "api.livelab.com.cn"); headers.put("Connection", "keep-alive"); @@ -116,18 +134,18 @@ public class PerformServiceHttpServiceImpl implements IPerformServiceHttp { headers.put("User-Agent", "Mozilla/5.0 (iPhone; CPU iPhone OS 18_5 like Mac OS X) AppleWebKit/605.1.15 (KHTML, like Gecko) Mobile/15E148 MicroMessenger/8.0.61(0x18003d2e) NetType/WIFI Language/zh_CN"); headers.put("X-REQUEST-STARTTIME", String.valueOf(System.currentTimeMillis())); headers.put("Authorization", UrlConstants.token); - String respStr = HttpUtils.doGet(UrlConstants.PROJECTS_INFO_URL, headers, params); + String respStr = HttpUtils.doPost(UrlConstants.PROJECT_ORDER_CREATE_URL, headers, req); if (StringUtils.isBlank(respStr)) { log.info("1"); } JSONObject resp = JSON.parseObject(respStr); Integer code = (Integer) resp.get("code"); if (Objects.nonNull(code) && Objects.equals(code, CodeConstants.SUCCESS)) { - ProjectInfoResp projectInfoResp = JSON.parseObject(resp.get("data").toString(), ProjectInfoResp.class); + ProjectOrderCreateResp projectInfoResp = JSON.parseObject(resp.get("data").toString(), ProjectOrderCreateResp.class); if (Objects.isNull(projectInfoResp)) { log.info("2"); } - log.info("查询结果:{}", projectInfoResp); } + log.info("查询结果:{}", resp); } } From a564e38de27748b10b9118afb705a9138d8a1791 Mon Sep 17 00:00:00 2001 From: xiang Date: Wed, 23 Jul 2025 00:32:29 +0800 Subject: [PATCH 04/49] =?UTF-8?q?feat:=E6=9F=A5=E8=AF=A2=E6=BC=94=E5=87=BA?= =?UTF-8?q?=E5=85=B7=E4=BD=93=E7=A5=A8=E5=8A=A1=E4=BF=A1=E6=81=AF?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../xservice/fwd/constants/UrlConstants.java | 4 ++ .../fwd/entity/resp/perform/Delivery.java | 14 +++++++ .../fwd/entity/resp/perform/Perform.java | 19 +++++++++ .../entity/resp/perform/PerformDetail.java | 37 +++++++++++++++++ .../fwd/entity/resp/perform/PerformInfo.java | 15 +++++++ .../fwd/entity/resp/perform/SeatPlan.java | 41 +++++++++++++++++++ .../fwd/service/IPerformServiceHttp.java | 7 ++++ .../impl/PerformServiceHttpServiceImpl.java | 25 +++++++++++ 8 files changed, 162 insertions(+) create mode 100644 script/src/main/java/com/xiang/xservice/fwd/entity/resp/perform/Delivery.java create mode 100644 script/src/main/java/com/xiang/xservice/fwd/entity/resp/perform/Perform.java create mode 100644 script/src/main/java/com/xiang/xservice/fwd/entity/resp/perform/PerformDetail.java create mode 100644 script/src/main/java/com/xiang/xservice/fwd/entity/resp/perform/PerformInfo.java create mode 100644 script/src/main/java/com/xiang/xservice/fwd/entity/resp/perform/SeatPlan.java diff --git a/script/src/main/java/com/xiang/xservice/fwd/constants/UrlConstants.java b/script/src/main/java/com/xiang/xservice/fwd/constants/UrlConstants.java index ce49c42..66fbf29 100644 --- a/script/src/main/java/com/xiang/xservice/fwd/constants/UrlConstants.java +++ b/script/src/main/java/com/xiang/xservice/fwd/constants/UrlConstants.java @@ -19,6 +19,10 @@ public class UrlConstants { */ public final static String PROJECTS_INFO_URL = BASE_URL + "/performance/app/project/get_project_info"; + /** + * 查询演出具体票务信息 + */ + public final static String PERFORMS_URL = BASE_URL + "/performance/app/project/get_performs"; /** * 创建订单URL */ diff --git a/script/src/main/java/com/xiang/xservice/fwd/entity/resp/perform/Delivery.java b/script/src/main/java/com/xiang/xservice/fwd/entity/resp/perform/Delivery.java new file mode 100644 index 0000000..8aaa49e --- /dev/null +++ b/script/src/main/java/com/xiang/xservice/fwd/entity/resp/perform/Delivery.java @@ -0,0 +1,14 @@ +package com.xiang.xservice.fwd.entity.resp.perform; + +import lombok.AllArgsConstructor; +import lombok.Data; +import lombok.NoArgsConstructor; + +@Data +@AllArgsConstructor +@NoArgsConstructor +public class Delivery { + private Integer deliveryType; + private String beforeDays; + private String address; +} diff --git a/script/src/main/java/com/xiang/xservice/fwd/entity/resp/perform/Perform.java b/script/src/main/java/com/xiang/xservice/fwd/entity/resp/perform/Perform.java new file mode 100644 index 0000000..969a92f --- /dev/null +++ b/script/src/main/java/com/xiang/xservice/fwd/entity/resp/perform/Perform.java @@ -0,0 +1,19 @@ +package com.xiang.xservice.fwd.entity.resp.perform; + +import lombok.AllArgsConstructor; +import lombok.Data; +import lombok.NoArgsConstructor; + +import java.util.List; + +@Data +@AllArgsConstructor +@NoArgsConstructor +public class Perform { + private Long projectId; + private Integer purchaseLimitationOnce; + private String limitationPrompt; + private Integer showDate; + private List dates; + private List performInfos; +} diff --git a/script/src/main/java/com/xiang/xservice/fwd/entity/resp/perform/PerformDetail.java b/script/src/main/java/com/xiang/xservice/fwd/entity/resp/perform/PerformDetail.java new file mode 100644 index 0000000..a6419b2 --- /dev/null +++ b/script/src/main/java/com/xiang/xservice/fwd/entity/resp/perform/PerformDetail.java @@ -0,0 +1,37 @@ +package com.xiang.xservice.fwd.entity.resp.perform; + +import java.util.List; + +public class PerformDetail { + private Long id; + private String name; + private Integer status; + private String beginTime; + private String endTime; + private String beginDate; + private String endDate; + private String validityPeriod; + private Integer includeSpecial; + private String specialDate; + private Integer isOneOrderOneCard; + private Integer isOneTicketOneCard; + private String cardType; + private Integer performType; + private List delivery; + private String isChoiceSeat; + private Integer ashShow; + private String ashShowDesc; + private Integer selectable; + private List tags; + private List tagsCustom; + private String subStatus; + private List seatPlans; + private String expressFeeStr; + private String saleTime; + private Integer allowAppointment; + private Integer enableNoTicketLabel; + private String standbyChannel; + private Integer sort; + private String openLabel; + private String label; +} diff --git a/script/src/main/java/com/xiang/xservice/fwd/entity/resp/perform/PerformInfo.java b/script/src/main/java/com/xiang/xservice/fwd/entity/resp/perform/PerformInfo.java new file mode 100644 index 0000000..25e212e --- /dev/null +++ b/script/src/main/java/com/xiang/xservice/fwd/entity/resp/perform/PerformInfo.java @@ -0,0 +1,15 @@ +package com.xiang.xservice.fwd.entity.resp.perform; + +import lombok.AllArgsConstructor; +import lombok.Data; +import lombok.NoArgsConstructor; + +import java.util.List; + +@Data +@AllArgsConstructor +@NoArgsConstructor +public class PerformInfo { + private String dateStr; + private List performInfo; +} diff --git a/script/src/main/java/com/xiang/xservice/fwd/entity/resp/perform/SeatPlan.java b/script/src/main/java/com/xiang/xservice/fwd/entity/resp/perform/SeatPlan.java new file mode 100644 index 0000000..7889b90 --- /dev/null +++ b/script/src/main/java/com/xiang/xservice/fwd/entity/resp/perform/SeatPlan.java @@ -0,0 +1,41 @@ +package com.xiang.xservice.fwd.entity.resp.perform; + +import lombok.AllArgsConstructor; +import lombok.Data; +import lombok.NoArgsConstructor; + +import java.math.BigDecimal; +import java.util.List; + +@Data +@AllArgsConstructor +@NoArgsConstructor +public class SeatPlan { + private Long seatPlanId; + private String seatPlanName; + private Long performId; + private String performName; + private Integer stopSale; + private Integer type; + private Integer ableSell; + private Integer shelfStatus; + private BigDecimal price; + private BigDecimal discountPrice; + private Integer subStatus; + private Integer quantity; + private Integer status; + private Integer maxSellStock; + private Integer soldStock; + private Integer leftStock; + private Integer ableSaleQuantity; + private Integer ashShow; + private String ashShowDesc; + private Integer selectable; + private Integer display; + private List tags; + private List tagsCustom; + private Integer availableTicketQuantity; + private Integer availableAllTicketQuantity; + private BigDecimal standbyServiceFeeRate; + private String saleTime; +} diff --git a/script/src/main/java/com/xiang/xservice/fwd/service/IPerformServiceHttp.java b/script/src/main/java/com/xiang/xservice/fwd/service/IPerformServiceHttp.java index 3a33fed..9b05e02 100644 --- a/script/src/main/java/com/xiang/xservice/fwd/service/IPerformServiceHttp.java +++ b/script/src/main/java/com/xiang/xservice/fwd/service/IPerformServiceHttp.java @@ -1,6 +1,7 @@ package com.xiang.xservice.fwd.service; import com.xiang.xservice.fwd.entity.req.ProjectOrderCreateReq; +import com.xiang.xservice.fwd.entity.resp.perform.Perform; import com.xiang.xservice.fwd.entity.resp.perform.ProjectInfoResp; import com.xiang.xservice.fwd.entity.resp.perform.ProjectOrderCreateResp; import com.xiang.xservice.fwd.entity.resp.perform.ProjectsResp; @@ -27,5 +28,11 @@ public interface IPerformServiceHttp { */ ProjectOrderCreateResp createProjectOrder(ProjectOrderCreateReq req); + /** + * http请求查询演出票务信息 + * @param projectId + * @return + */ + Perform getPerformsByProjectIdFromHttp(Long projectId); } 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 0c3c84e..16d8bb4 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 @@ -7,6 +7,7 @@ import com.xiang.xservice.basic.utils.HttpUtils; import com.xiang.xservice.fwd.constants.CodeConstants; import com.xiang.xservice.fwd.constants.UrlConstants; import com.xiang.xservice.fwd.entity.req.ProjectOrderCreateReq; +import com.xiang.xservice.fwd.entity.resp.perform.Perform; import com.xiang.xservice.fwd.entity.resp.perform.ProjectInfoResp; import com.xiang.xservice.fwd.entity.resp.perform.ProjectOrderCreateResp; import com.xiang.xservice.fwd.entity.resp.perform.ProjectsResp; @@ -37,6 +38,7 @@ public class PerformServiceHttpServiceImpl implements IPerformServiceHttp { if (StringUtils.isBlank(respStr)) { return new ProjectsResp(); } + log.info("【Http请求】 http请求查询演出列表结果:{}", respStr); JSONObject resp = JSON.parseObject(respStr); Integer code = (Integer) resp.get("code"); if (Objects.nonNull(code) && Objects.equals(code, CodeConstants.SUCCESS)) { @@ -57,6 +59,7 @@ public class PerformServiceHttpServiceImpl implements IPerformServiceHttp { if (StringUtils.isBlank(respStr)) { return new ProjectInfoResp(); } + log.info("【Http请求】 根据projectId:{},http请求查询演出信息结果:{}", projectId, respStr); JSONObject resp = JSON.parseObject(respStr); Integer code = (Integer) resp.get("code"); if (Objects.nonNull(code) && Objects.equals(code, CodeConstants.SUCCESS)) { @@ -75,6 +78,7 @@ public class PerformServiceHttpServiceImpl implements IPerformServiceHttp { if (StringUtils.isBlank(respStr)) { return new ProjectOrderCreateResp(); } + log.info("【Http请求】 http请求创建订单结果:{}", respStr); JSONObject resp = JSON.parseObject(respStr); Integer code = (Integer) resp.get("code"); if (Objects.nonNull(code) && Objects.equals(code, CodeConstants.SUCCESS)) { @@ -87,6 +91,27 @@ public class PerformServiceHttpServiceImpl implements IPerformServiceHttp { return new ProjectOrderCreateResp(); } + @Override + public Perform getPerformsByProjectIdFromHttp(Long projectId) { + Map params = Maps.newHashMap(); + 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(); + } + log.info("【Http请求】 根据projectId:{}http请求查询演出票务信息结果:{}", projectId, respStr); + JSONObject resp = JSON.parseObject(respStr); + Integer code = (Integer) resp.get("code"); + 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 projectInfoResp; + } + return new Perform(); + } + private Map buildFWDHeaders(String token) { Map headers = Maps.newHashMap(); From c0cd49dc486627fa8b5f2450638b8babf938fa4e Mon Sep 17 00:00:00 2001 From: Zhujx Date: Thu, 24 Jul 2025 17:16:21 +0800 Subject: [PATCH 05/49] style:file remove --- .../{ => http}/perform/DeductionRuleDTO.java | 2 +- .../resp/{ => http}/perform/Delivery.java | 2 +- .../resp/{ => http}/perform/Notice.java | 2 +- .../resp/{ => http}/perform/Perform.java | 2 +- .../{ => http}/perform/PerformDetail.java | 2 +- .../resp/{ => http}/perform/PerformInfo.java | 2 +- .../{ => http}/perform/ProjectInfoResp.java | 2 +- .../resp/{ => http}/perform/ProjectList.java | 2 +- .../perform/ProjectOrderCreateResp.java | 2 +- .../{ => http}/perform/ProjectService.java | 2 +- .../resp/{ => http}/perform/ProjectsResp.java | 2 +- .../{ => http}/perform/RefundBeanRuleDTO.java | 2 +- .../resp/{ => http}/perform/RefundRule.java | 2 +- .../{ => http}/perform/RefundRuleInfo.java | 2 +- .../resp/{ => http}/perform/SeatPlan.java | 2 +- .../resp/http/perform/StandByNotice.java | 4 ++ .../resp/{ => http}/perform/Ticket.java | 2 +- .../resp/{ => http}/perform/TicketNotice.java | 2 +- .../resp/{ => http}/perform/VenueInfo.java | 2 +- .../entity/resp/perform/StandByNotice.java | 4 -- .../fwd/server/FwdOuterController.java | 42 +++++++++++++++++++ .../fwd/service/IPerformServiceHttp.java | 8 ++-- .../impl/PerformServiceHttpServiceImpl.java | 9 ++-- .../src/main/resources/application-local.yml | 2 +- 24 files changed, 73 insertions(+), 32 deletions(-) rename script/src/main/java/com/xiang/xservice/fwd/entity/resp/{ => http}/perform/DeductionRuleDTO.java (87%) rename script/src/main/java/com/xiang/xservice/fwd/entity/resp/{ => http}/perform/Delivery.java (81%) rename script/src/main/java/com/xiang/xservice/fwd/entity/resp/{ => http}/perform/Notice.java (92%) rename script/src/main/java/com/xiang/xservice/fwd/entity/resp/{ => http}/perform/Perform.java (87%) rename script/src/main/java/com/xiang/xservice/fwd/entity/resp/{ => http}/perform/PerformDetail.java (94%) rename script/src/main/java/com/xiang/xservice/fwd/entity/resp/{ => http}/perform/PerformInfo.java (82%) rename script/src/main/java/com/xiang/xservice/fwd/entity/resp/{ => http}/perform/ProjectInfoResp.java (97%) rename script/src/main/java/com/xiang/xservice/fwd/entity/resp/{ => http}/perform/ProjectList.java (90%) rename script/src/main/java/com/xiang/xservice/fwd/entity/resp/{ => http}/perform/ProjectOrderCreateResp.java (94%) rename script/src/main/java/com/xiang/xservice/fwd/entity/resp/{ => http}/perform/ProjectService.java (85%) rename script/src/main/java/com/xiang/xservice/fwd/entity/resp/{ => http}/perform/ProjectsResp.java (92%) rename script/src/main/java/com/xiang/xservice/fwd/entity/resp/{ => http}/perform/RefundBeanRuleDTO.java (84%) rename script/src/main/java/com/xiang/xservice/fwd/entity/resp/{ => http}/perform/RefundRule.java (86%) rename script/src/main/java/com/xiang/xservice/fwd/entity/resp/{ => http}/perform/RefundRuleInfo.java (86%) rename script/src/main/java/com/xiang/xservice/fwd/entity/resp/{ => http}/perform/SeatPlan.java (95%) create mode 100644 script/src/main/java/com/xiang/xservice/fwd/entity/resp/http/perform/StandByNotice.java rename script/src/main/java/com/xiang/xservice/fwd/entity/resp/{ => http}/perform/Ticket.java (86%) rename script/src/main/java/com/xiang/xservice/fwd/entity/resp/{ => http}/perform/TicketNotice.java (92%) rename script/src/main/java/com/xiang/xservice/fwd/entity/resp/{ => http}/perform/VenueInfo.java (94%) delete mode 100644 script/src/main/java/com/xiang/xservice/fwd/entity/resp/perform/StandByNotice.java create mode 100644 script/src/main/java/com/xiang/xservice/fwd/server/FwdOuterController.java diff --git a/script/src/main/java/com/xiang/xservice/fwd/entity/resp/perform/DeductionRuleDTO.java b/script/src/main/java/com/xiang/xservice/fwd/entity/resp/http/perform/DeductionRuleDTO.java similarity index 87% rename from script/src/main/java/com/xiang/xservice/fwd/entity/resp/perform/DeductionRuleDTO.java rename to script/src/main/java/com/xiang/xservice/fwd/entity/resp/http/perform/DeductionRuleDTO.java index f140177..460ae8d 100644 --- a/script/src/main/java/com/xiang/xservice/fwd/entity/resp/perform/DeductionRuleDTO.java +++ b/script/src/main/java/com/xiang/xservice/fwd/entity/resp/http/perform/DeductionRuleDTO.java @@ -1,4 +1,4 @@ -package com.xiang.xservice.fwd.entity.resp.perform; +package com.xiang.xservice.fwd.entity.resp.http.perform; import lombok.AllArgsConstructor; import lombok.Data; diff --git a/script/src/main/java/com/xiang/xservice/fwd/entity/resp/perform/Delivery.java b/script/src/main/java/com/xiang/xservice/fwd/entity/resp/http/perform/Delivery.java similarity index 81% rename from script/src/main/java/com/xiang/xservice/fwd/entity/resp/perform/Delivery.java rename to script/src/main/java/com/xiang/xservice/fwd/entity/resp/http/perform/Delivery.java index 8aaa49e..6358c63 100644 --- a/script/src/main/java/com/xiang/xservice/fwd/entity/resp/perform/Delivery.java +++ b/script/src/main/java/com/xiang/xservice/fwd/entity/resp/http/perform/Delivery.java @@ -1,4 +1,4 @@ -package com.xiang.xservice.fwd.entity.resp.perform; +package com.xiang.xservice.fwd.entity.resp.http.perform; import lombok.AllArgsConstructor; import lombok.Data; diff --git a/script/src/main/java/com/xiang/xservice/fwd/entity/resp/perform/Notice.java b/script/src/main/java/com/xiang/xservice/fwd/entity/resp/http/perform/Notice.java similarity index 92% rename from script/src/main/java/com/xiang/xservice/fwd/entity/resp/perform/Notice.java rename to script/src/main/java/com/xiang/xservice/fwd/entity/resp/http/perform/Notice.java index d311aa9..cfc3a44 100644 --- a/script/src/main/java/com/xiang/xservice/fwd/entity/resp/perform/Notice.java +++ b/script/src/main/java/com/xiang/xservice/fwd/entity/resp/http/perform/Notice.java @@ -1,4 +1,4 @@ -package com.xiang.xservice.fwd.entity.resp.perform; +package com.xiang.xservice.fwd.entity.resp.http.perform; import lombok.AllArgsConstructor; import lombok.Data; diff --git a/script/src/main/java/com/xiang/xservice/fwd/entity/resp/perform/Perform.java b/script/src/main/java/com/xiang/xservice/fwd/entity/resp/http/perform/Perform.java similarity index 87% rename from script/src/main/java/com/xiang/xservice/fwd/entity/resp/perform/Perform.java rename to script/src/main/java/com/xiang/xservice/fwd/entity/resp/http/perform/Perform.java index 969a92f..4719973 100644 --- a/script/src/main/java/com/xiang/xservice/fwd/entity/resp/perform/Perform.java +++ b/script/src/main/java/com/xiang/xservice/fwd/entity/resp/http/perform/Perform.java @@ -1,4 +1,4 @@ -package com.xiang.xservice.fwd.entity.resp.perform; +package com.xiang.xservice.fwd.entity.resp.http.perform; import lombok.AllArgsConstructor; import lombok.Data; diff --git a/script/src/main/java/com/xiang/xservice/fwd/entity/resp/perform/PerformDetail.java b/script/src/main/java/com/xiang/xservice/fwd/entity/resp/http/perform/PerformDetail.java similarity index 94% rename from script/src/main/java/com/xiang/xservice/fwd/entity/resp/perform/PerformDetail.java rename to script/src/main/java/com/xiang/xservice/fwd/entity/resp/http/perform/PerformDetail.java index a6419b2..8295810 100644 --- a/script/src/main/java/com/xiang/xservice/fwd/entity/resp/perform/PerformDetail.java +++ b/script/src/main/java/com/xiang/xservice/fwd/entity/resp/http/perform/PerformDetail.java @@ -1,4 +1,4 @@ -package com.xiang.xservice.fwd.entity.resp.perform; +package com.xiang.xservice.fwd.entity.resp.http.perform; import java.util.List; diff --git a/script/src/main/java/com/xiang/xservice/fwd/entity/resp/perform/PerformInfo.java b/script/src/main/java/com/xiang/xservice/fwd/entity/resp/http/perform/PerformInfo.java similarity index 82% rename from script/src/main/java/com/xiang/xservice/fwd/entity/resp/perform/PerformInfo.java rename to script/src/main/java/com/xiang/xservice/fwd/entity/resp/http/perform/PerformInfo.java index 25e212e..384df72 100644 --- a/script/src/main/java/com/xiang/xservice/fwd/entity/resp/perform/PerformInfo.java +++ b/script/src/main/java/com/xiang/xservice/fwd/entity/resp/http/perform/PerformInfo.java @@ -1,4 +1,4 @@ -package com.xiang.xservice.fwd.entity.resp.perform; +package com.xiang.xservice.fwd.entity.resp.http.perform; import lombok.AllArgsConstructor; import lombok.Data; diff --git a/script/src/main/java/com/xiang/xservice/fwd/entity/resp/perform/ProjectInfoResp.java b/script/src/main/java/com/xiang/xservice/fwd/entity/resp/http/perform/ProjectInfoResp.java similarity index 97% rename from script/src/main/java/com/xiang/xservice/fwd/entity/resp/perform/ProjectInfoResp.java rename to script/src/main/java/com/xiang/xservice/fwd/entity/resp/http/perform/ProjectInfoResp.java index fd58714..c35ddc4 100644 --- a/script/src/main/java/com/xiang/xservice/fwd/entity/resp/perform/ProjectInfoResp.java +++ b/script/src/main/java/com/xiang/xservice/fwd/entity/resp/http/perform/ProjectInfoResp.java @@ -1,4 +1,4 @@ -package com.xiang.xservice.fwd.entity.resp.perform; +package com.xiang.xservice.fwd.entity.resp.http.perform; import lombok.AllArgsConstructor; import lombok.Data; diff --git a/script/src/main/java/com/xiang/xservice/fwd/entity/resp/perform/ProjectList.java b/script/src/main/java/com/xiang/xservice/fwd/entity/resp/http/perform/ProjectList.java similarity index 90% rename from script/src/main/java/com/xiang/xservice/fwd/entity/resp/perform/ProjectList.java rename to script/src/main/java/com/xiang/xservice/fwd/entity/resp/http/perform/ProjectList.java index fa6dd8b..8b33a7c 100644 --- a/script/src/main/java/com/xiang/xservice/fwd/entity/resp/perform/ProjectList.java +++ b/script/src/main/java/com/xiang/xservice/fwd/entity/resp/http/perform/ProjectList.java @@ -1,4 +1,4 @@ -package com.xiang.xservice.fwd.entity.resp.perform; +package com.xiang.xservice.fwd.entity.resp.http.perform; import lombok.AllArgsConstructor; import lombok.Data; diff --git a/script/src/main/java/com/xiang/xservice/fwd/entity/resp/perform/ProjectOrderCreateResp.java b/script/src/main/java/com/xiang/xservice/fwd/entity/resp/http/perform/ProjectOrderCreateResp.java similarity index 94% rename from script/src/main/java/com/xiang/xservice/fwd/entity/resp/perform/ProjectOrderCreateResp.java rename to script/src/main/java/com/xiang/xservice/fwd/entity/resp/http/perform/ProjectOrderCreateResp.java index a348ef8..851045f 100644 --- a/script/src/main/java/com/xiang/xservice/fwd/entity/resp/perform/ProjectOrderCreateResp.java +++ b/script/src/main/java/com/xiang/xservice/fwd/entity/resp/http/perform/ProjectOrderCreateResp.java @@ -1,4 +1,4 @@ -package com.xiang.xservice.fwd.entity.resp.perform; +package com.xiang.xservice.fwd.entity.resp.http.perform; import lombok.AllArgsConstructor; import lombok.Data; diff --git a/script/src/main/java/com/xiang/xservice/fwd/entity/resp/perform/ProjectService.java b/script/src/main/java/com/xiang/xservice/fwd/entity/resp/http/perform/ProjectService.java similarity index 85% rename from script/src/main/java/com/xiang/xservice/fwd/entity/resp/perform/ProjectService.java rename to script/src/main/java/com/xiang/xservice/fwd/entity/resp/http/perform/ProjectService.java index a283a36..b188d0b 100644 --- a/script/src/main/java/com/xiang/xservice/fwd/entity/resp/perform/ProjectService.java +++ b/script/src/main/java/com/xiang/xservice/fwd/entity/resp/http/perform/ProjectService.java @@ -1,4 +1,4 @@ -package com.xiang.xservice.fwd.entity.resp.perform; +package com.xiang.xservice.fwd.entity.resp.http.perform; import lombok.AllArgsConstructor; import lombok.Data; diff --git a/script/src/main/java/com/xiang/xservice/fwd/entity/resp/perform/ProjectsResp.java b/script/src/main/java/com/xiang/xservice/fwd/entity/resp/http/perform/ProjectsResp.java similarity index 92% rename from script/src/main/java/com/xiang/xservice/fwd/entity/resp/perform/ProjectsResp.java rename to script/src/main/java/com/xiang/xservice/fwd/entity/resp/http/perform/ProjectsResp.java index 5b24f20..5978a66 100644 --- a/script/src/main/java/com/xiang/xservice/fwd/entity/resp/perform/ProjectsResp.java +++ b/script/src/main/java/com/xiang/xservice/fwd/entity/resp/http/perform/ProjectsResp.java @@ -1,4 +1,4 @@ -package com.xiang.xservice.fwd.entity.resp.perform; +package com.xiang.xservice.fwd.entity.resp.http.perform; import lombok.AllArgsConstructor; import lombok.Data; diff --git a/script/src/main/java/com/xiang/xservice/fwd/entity/resp/perform/RefundBeanRuleDTO.java b/script/src/main/java/com/xiang/xservice/fwd/entity/resp/http/perform/RefundBeanRuleDTO.java similarity index 84% rename from script/src/main/java/com/xiang/xservice/fwd/entity/resp/perform/RefundBeanRuleDTO.java rename to script/src/main/java/com/xiang/xservice/fwd/entity/resp/http/perform/RefundBeanRuleDTO.java index a4ce568..0eaaf18 100644 --- a/script/src/main/java/com/xiang/xservice/fwd/entity/resp/perform/RefundBeanRuleDTO.java +++ b/script/src/main/java/com/xiang/xservice/fwd/entity/resp/http/perform/RefundBeanRuleDTO.java @@ -1,4 +1,4 @@ -package com.xiang.xservice.fwd.entity.resp.perform; +package com.xiang.xservice.fwd.entity.resp.http.perform; import lombok.AllArgsConstructor; import lombok.Data; diff --git a/script/src/main/java/com/xiang/xservice/fwd/entity/resp/perform/RefundRule.java b/script/src/main/java/com/xiang/xservice/fwd/entity/resp/http/perform/RefundRule.java similarity index 86% rename from script/src/main/java/com/xiang/xservice/fwd/entity/resp/perform/RefundRule.java rename to script/src/main/java/com/xiang/xservice/fwd/entity/resp/http/perform/RefundRule.java index 9470599..650436a 100644 --- a/script/src/main/java/com/xiang/xservice/fwd/entity/resp/perform/RefundRule.java +++ b/script/src/main/java/com/xiang/xservice/fwd/entity/resp/http/perform/RefundRule.java @@ -1,4 +1,4 @@ -package com.xiang.xservice.fwd.entity.resp.perform; +package com.xiang.xservice.fwd.entity.resp.http.perform; import lombok.AllArgsConstructor; import lombok.Data; diff --git a/script/src/main/java/com/xiang/xservice/fwd/entity/resp/perform/RefundRuleInfo.java b/script/src/main/java/com/xiang/xservice/fwd/entity/resp/http/perform/RefundRuleInfo.java similarity index 86% rename from script/src/main/java/com/xiang/xservice/fwd/entity/resp/perform/RefundRuleInfo.java rename to script/src/main/java/com/xiang/xservice/fwd/entity/resp/http/perform/RefundRuleInfo.java index 9873ef4..f3d3c9a 100644 --- a/script/src/main/java/com/xiang/xservice/fwd/entity/resp/perform/RefundRuleInfo.java +++ b/script/src/main/java/com/xiang/xservice/fwd/entity/resp/http/perform/RefundRuleInfo.java @@ -1,4 +1,4 @@ -package com.xiang.xservice.fwd.entity.resp.perform; +package com.xiang.xservice.fwd.entity.resp.http.perform; import lombok.AllArgsConstructor; import lombok.Data; diff --git a/script/src/main/java/com/xiang/xservice/fwd/entity/resp/perform/SeatPlan.java b/script/src/main/java/com/xiang/xservice/fwd/entity/resp/http/perform/SeatPlan.java similarity index 95% rename from script/src/main/java/com/xiang/xservice/fwd/entity/resp/perform/SeatPlan.java rename to script/src/main/java/com/xiang/xservice/fwd/entity/resp/http/perform/SeatPlan.java index 7889b90..4ab4c9b 100644 --- a/script/src/main/java/com/xiang/xservice/fwd/entity/resp/perform/SeatPlan.java +++ b/script/src/main/java/com/xiang/xservice/fwd/entity/resp/http/perform/SeatPlan.java @@ -1,4 +1,4 @@ -package com.xiang.xservice.fwd.entity.resp.perform; +package com.xiang.xservice.fwd.entity.resp.http.perform; import lombok.AllArgsConstructor; import lombok.Data; diff --git a/script/src/main/java/com/xiang/xservice/fwd/entity/resp/http/perform/StandByNotice.java b/script/src/main/java/com/xiang/xservice/fwd/entity/resp/http/perform/StandByNotice.java new file mode 100644 index 0000000..46a7e34 --- /dev/null +++ b/script/src/main/java/com/xiang/xservice/fwd/entity/resp/http/perform/StandByNotice.java @@ -0,0 +1,4 @@ +package com.xiang.xservice.fwd.entity.resp.http.perform; + +public class StandByNotice { +} diff --git a/script/src/main/java/com/xiang/xservice/fwd/entity/resp/perform/Ticket.java b/script/src/main/java/com/xiang/xservice/fwd/entity/resp/http/perform/Ticket.java similarity index 86% rename from script/src/main/java/com/xiang/xservice/fwd/entity/resp/perform/Ticket.java rename to script/src/main/java/com/xiang/xservice/fwd/entity/resp/http/perform/Ticket.java index a9e4ef6..6cda740 100644 --- a/script/src/main/java/com/xiang/xservice/fwd/entity/resp/perform/Ticket.java +++ b/script/src/main/java/com/xiang/xservice/fwd/entity/resp/http/perform/Ticket.java @@ -1,4 +1,4 @@ -package com.xiang.xservice.fwd.entity.resp.perform; +package com.xiang.xservice.fwd.entity.resp.http.perform; import lombok.AllArgsConstructor; import lombok.Data; diff --git a/script/src/main/java/com/xiang/xservice/fwd/entity/resp/perform/TicketNotice.java b/script/src/main/java/com/xiang/xservice/fwd/entity/resp/http/perform/TicketNotice.java similarity index 92% rename from script/src/main/java/com/xiang/xservice/fwd/entity/resp/perform/TicketNotice.java rename to script/src/main/java/com/xiang/xservice/fwd/entity/resp/http/perform/TicketNotice.java index 4e01b92..20bcd45 100644 --- a/script/src/main/java/com/xiang/xservice/fwd/entity/resp/perform/TicketNotice.java +++ b/script/src/main/java/com/xiang/xservice/fwd/entity/resp/http/perform/TicketNotice.java @@ -1,4 +1,4 @@ -package com.xiang.xservice.fwd.entity.resp.perform; +package com.xiang.xservice.fwd.entity.resp.http.perform; import lombok.AllArgsConstructor; import lombok.Data; diff --git a/script/src/main/java/com/xiang/xservice/fwd/entity/resp/perform/VenueInfo.java b/script/src/main/java/com/xiang/xservice/fwd/entity/resp/http/perform/VenueInfo.java similarity index 94% rename from script/src/main/java/com/xiang/xservice/fwd/entity/resp/perform/VenueInfo.java rename to script/src/main/java/com/xiang/xservice/fwd/entity/resp/http/perform/VenueInfo.java index a461b92..e9f4501 100644 --- a/script/src/main/java/com/xiang/xservice/fwd/entity/resp/perform/VenueInfo.java +++ b/script/src/main/java/com/xiang/xservice/fwd/entity/resp/http/perform/VenueInfo.java @@ -1,4 +1,4 @@ -package com.xiang.xservice.fwd.entity.resp.perform; +package com.xiang.xservice.fwd.entity.resp.http.perform; import lombok.AllArgsConstructor; import lombok.Data; diff --git a/script/src/main/java/com/xiang/xservice/fwd/entity/resp/perform/StandByNotice.java b/script/src/main/java/com/xiang/xservice/fwd/entity/resp/perform/StandByNotice.java deleted file mode 100644 index e290110..0000000 --- a/script/src/main/java/com/xiang/xservice/fwd/entity/resp/perform/StandByNotice.java +++ /dev/null @@ -1,4 +0,0 @@ -package com.xiang.xservice.fwd.entity.resp.perform; - -public class StandByNotice { -} diff --git a/script/src/main/java/com/xiang/xservice/fwd/server/FwdOuterController.java b/script/src/main/java/com/xiang/xservice/fwd/server/FwdOuterController.java new file mode 100644 index 0000000..13e37ed --- /dev/null +++ b/script/src/main/java/com/xiang/xservice/fwd/server/FwdOuterController.java @@ -0,0 +1,42 @@ +package com.xiang.xservice.fwd.server; + +import com.xiang.xservice.basic.common.resp.Result; +import com.xiang.xservice.fwd.entity.resp.http.perform.Perform; +import com.xiang.xservice.fwd.entity.resp.http.perform.ProjectsResp; +import com.xiang.xservice.fwd.service.IPerformServiceHttp; +import lombok.RequiredArgsConstructor; +import org.springframework.web.bind.annotation.GetMapping; +import org.springframework.web.bind.annotation.PathVariable; +import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.RestController; + +/** + * @Author: xiang + * @Date: 2025-07-24 16:55 + */ +@RestController +@RequiredArgsConstructor +@RequestMapping("/system/fwd/outer") +public class FwdOuterController { + + private final IPerformServiceHttp performServiceHttp; + + @GetMapping("/getShowProjects") + public Result getShowProjects() { + ProjectsResp showProjectsFromHttp = performServiceHttp.getShowProjectsFromHttp(); + return Result.success("查询成功!", showProjectsFromHttp); + } + + @GetMapping("/getProjectInfo/{id}") + public Result getProjectInfo(@PathVariable("id") Long id) { + Perform performsByProjectIdFromHttp = performServiceHttp.getPerformsByProjectIdFromHttp(id); + return Result.success("查询成功!", performsByProjectIdFromHttp); + } + + @GetMapping("/getPerformsByProjectIdFromHttp/{id}") + public Result getPerformsByProjectIdFromHttp(@PathVariable("id") Long id) { + Perform performsByProjectIdFromHttp = performServiceHttp.getPerformsByProjectIdFromHttp(id); + return Result.success("查询成功!", performsByProjectIdFromHttp); + } + +} diff --git a/script/src/main/java/com/xiang/xservice/fwd/service/IPerformServiceHttp.java b/script/src/main/java/com/xiang/xservice/fwd/service/IPerformServiceHttp.java index 9b05e02..fe6d582 100644 --- a/script/src/main/java/com/xiang/xservice/fwd/service/IPerformServiceHttp.java +++ b/script/src/main/java/com/xiang/xservice/fwd/service/IPerformServiceHttp.java @@ -1,10 +1,10 @@ package com.xiang.xservice.fwd.service; import com.xiang.xservice.fwd.entity.req.ProjectOrderCreateReq; -import com.xiang.xservice.fwd.entity.resp.perform.Perform; -import com.xiang.xservice.fwd.entity.resp.perform.ProjectInfoResp; -import com.xiang.xservice.fwd.entity.resp.perform.ProjectOrderCreateResp; -import com.xiang.xservice.fwd.entity.resp.perform.ProjectsResp; +import com.xiang.xservice.fwd.entity.resp.http.perform.Perform; +import com.xiang.xservice.fwd.entity.resp.http.perform.ProjectInfoResp; +import com.xiang.xservice.fwd.entity.resp.http.perform.ProjectOrderCreateResp; +import com.xiang.xservice.fwd.entity.resp.http.perform.ProjectsResp; public interface IPerformServiceHttp { 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 16d8bb4..876fdec 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 @@ -7,17 +7,16 @@ import com.xiang.xservice.basic.utils.HttpUtils; import com.xiang.xservice.fwd.constants.CodeConstants; import com.xiang.xservice.fwd.constants.UrlConstants; import com.xiang.xservice.fwd.entity.req.ProjectOrderCreateReq; -import com.xiang.xservice.fwd.entity.resp.perform.Perform; -import com.xiang.xservice.fwd.entity.resp.perform.ProjectInfoResp; -import com.xiang.xservice.fwd.entity.resp.perform.ProjectOrderCreateResp; -import com.xiang.xservice.fwd.entity.resp.perform.ProjectsResp; +import com.xiang.xservice.fwd.entity.resp.http.perform.Perform; +import com.xiang.xservice.fwd.entity.resp.http.perform.ProjectInfoResp; +import com.xiang.xservice.fwd.entity.resp.http.perform.ProjectOrderCreateResp; +import com.xiang.xservice.fwd.entity.resp.http.perform.ProjectsResp; import com.xiang.xservice.fwd.service.IPerformServiceHttp; import lombok.RequiredArgsConstructor; import lombok.extern.slf4j.Slf4j; import org.apache.commons.lang3.StringUtils; import org.springframework.stereotype.Service; -import java.util.HashMap; import java.util.Map; import java.util.Objects; diff --git a/script/src/main/resources/application-local.yml b/script/src/main/resources/application-local.yml index a6f9a37..7c00b01 100644 --- a/script/src/main/resources/application-local.yml +++ b/script/src/main/resources/application-local.yml @@ -1,6 +1,6 @@ spring: datasource: - url: jdbc:mysql://192.168.2.10:3306/xservice-script-local?useUnicode=true&characterEncoding=utf-8&serverTimezone=Asia/Shanghai&allowMultiQueries=true + url: jdbc:mysql:///xservice-script?useUnicode=true&characterEncoding=utf-8&serverTimezone=Asia/Shanghai&allowMultiQueries=true username: root password: Admin@123 driver-class-name: com.mysql.cj.jdbc.Driver \ No newline at end of file From f0b0ef2e5aed0a525819db91b0de223d27708fa8 Mon Sep 17 00:00:00 2001 From: Zhujx Date: Thu, 24 Jul 2025 17:44:19 +0800 Subject: [PATCH 06/49] =?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 From 6eb2fe01f83f78c5a936dca6de8d7e92fdefbf46 Mon Sep 17 00:00:00 2001 From: Zhujx Date: Fri, 25 Jul 2025 13:52:39 +0800 Subject: [PATCH 07/49] =?UTF-8?q?perf:=E6=8B=89=E5=8F=96=E8=8A=AC=E7=8E=A9?= =?UTF-8?q?=E5=B2=9B=E6=95=B0=E6=8D=AE=E4=BF=A1=E6=81=AF=EF=BC=8C=E6=9B=B4?= =?UTF-8?q?=E6=96=B0=E5=BA=A7=E4=BD=8D=E4=BF=A1=E6=81=AF?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../fwd/entity/pojo/FPerformSeatInfo.java | 137 +++++++++ .../resp/http/perform/PerformDetail.java | 7 + .../fwd/entity/resp/http/perform/Tags.java | 18 ++ .../fwd/mapper/FwdPerformSeatInfoMapper.java | 25 ++ .../fwd/schedule/PullDataFromFWDJob.java | 219 ++++++++++---- .../fwd/service/IPerformServiceHttp.java | 1 - .../src/main/resources/application-local.yml | 4 +- .../fwd/FwdPerformProjectSeatInfoMapper.xml | 273 ++++++++++++++++++ 8 files changed, 632 insertions(+), 52 deletions(-) create mode 100644 script/src/main/java/com/xiang/xservice/fwd/entity/pojo/FPerformSeatInfo.java create mode 100644 script/src/main/java/com/xiang/xservice/fwd/entity/resp/http/perform/Tags.java create mode 100644 script/src/main/java/com/xiang/xservice/fwd/mapper/FwdPerformSeatInfoMapper.java create mode 100644 script/src/main/resources/mapper/fwd/FwdPerformProjectSeatInfoMapper.xml 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 new file mode 100644 index 0000000..6c72f2b --- /dev/null +++ b/script/src/main/java/com/xiang/xservice/fwd/entity/pojo/FPerformSeatInfo.java @@ -0,0 +1,137 @@ +package com.xiang.xservice.fwd.entity.pojo; + +import lombok.AllArgsConstructor; +import lombok.Data; +import lombok.NoArgsConstructor; + +import java.io.Serializable; +import java.math.BigDecimal; +import java.time.LocalDateTime; + +/** + * @Author: xiang + * @Date: 2025-07-25 10:36 + */ +@Data +@AllArgsConstructor +@NoArgsConstructor +public class FPerformSeatInfo implements Serializable { + private static final long serialVersionUID = 1L; + + private Long id; + + /** + * 座位计划id + */ + private Long seatPlanId; + + /** + * 座位计划名称 + */ + private String seatPlanName; + + /** + * 演出id + */ + private Long performId; + + /** + * 演出名称 + */ + private String performName; + + /** + * 停止销售 + */ + private Integer stopSale; + + /** + * shelf_status + */ + private Integer shelfStatus; + + /** + * 价格 + */ + private BigDecimal price; + + /** + * 折扣价 + */ + private BigDecimal discountPrice; + + /** + * sub_status + */ + private Integer subStatus; + + /** + * quantity + */ + private Integer quantity; + + /** + * status + */ + private Integer status; + + /** + * max_sell_stock + */ + private Integer maxSellStock; + + /** + * sold_stock + */ + private Integer soldStock; + + /** + * left_stock + */ + private Integer leftStock; + + /** + * able_sale_quantity + */ + private Integer ableSaleQuantity; + + /** + * ash_show + */ + private Integer ashShow; + + /** + * ash_show_desc + */ + private Integer ashShowDesc; + + /** + * selectable + */ + private Integer selectable; + + /** + * display + */ + private Integer display; + + /** + * available_ticket_quantity + */ + private Integer availableTicketQuantity; + + /** + * available_all_ticket_quantity + */ + private Integer availableAllTicketQuantity; + + /** + * sale_time + */ + private LocalDateTime saleTime; + + /** + * 演出id(总) + */ + private Long projectId; +} diff --git a/script/src/main/java/com/xiang/xservice/fwd/entity/resp/http/perform/PerformDetail.java b/script/src/main/java/com/xiang/xservice/fwd/entity/resp/http/perform/PerformDetail.java index 8295810..b6197e7 100644 --- a/script/src/main/java/com/xiang/xservice/fwd/entity/resp/http/perform/PerformDetail.java +++ b/script/src/main/java/com/xiang/xservice/fwd/entity/resp/http/perform/PerformDetail.java @@ -1,7 +1,14 @@ package com.xiang.xservice.fwd.entity.resp.http.perform; +import lombok.AllArgsConstructor; +import lombok.Data; +import lombok.NoArgsConstructor; + import java.util.List; +@Data +@AllArgsConstructor +@NoArgsConstructor public class PerformDetail { private Long id; private String name; diff --git a/script/src/main/java/com/xiang/xservice/fwd/entity/resp/http/perform/Tags.java b/script/src/main/java/com/xiang/xservice/fwd/entity/resp/http/perform/Tags.java new file mode 100644 index 0000000..e2155c8 --- /dev/null +++ b/script/src/main/java/com/xiang/xservice/fwd/entity/resp/http/perform/Tags.java @@ -0,0 +1,18 @@ +package com.xiang.xservice.fwd.entity.resp.http.perform; + +import lombok.AllArgsConstructor; +import lombok.Data; +import lombok.NoArgsConstructor; + +/** + * @Author: xiang + * @Date: 2025-07-25 10:13 + */ +@Data +@AllArgsConstructor +@NoArgsConstructor +public class Tags { + private int type; + + private String tag; +} 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 new file mode 100644 index 0000000..6013485 --- /dev/null +++ b/script/src/main/java/com/xiang/xservice/fwd/mapper/FwdPerformSeatInfoMapper.java @@ -0,0 +1,25 @@ +package com.xiang.xservice.fwd.mapper; + +import com.xiang.xservice.fwd.entity.pojo.FPerformSeatInfo; +import org.apache.ibatis.annotations.Mapper; +import org.apache.ibatis.annotations.Param; +import org.springframework.stereotype.Repository; + +import java.util.List; + +/** + * @Author: xiang + * @Date: 2025-07-25 10:53 + */ +@Repository +@Mapper +public interface FwdPerformSeatInfoMapper { + int batchSave(List fPerformSeatInfos); + + int update(FPerformSeatInfo fPerformSeatInfo); + + List getPerformSeatInfoBySeatIds(@Param("list") List seatIds); + + FPerformSeatInfo getPerformSeatInfoBySeatIdAndPerformIdAndProjectId( + @Param("seatId") Long seatId, @Param("performId") Long performId, @Param("projectId") Long projectId); +} 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 15506d3..cc73f5e 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,14 +1,24 @@ package com.xiang.xservice.fwd.schedule; +import com.google.common.collect.Lists; +import com.xiang.xservice.basic.config.MyThreadFactory; import com.xiang.xservice.basic.utils.DateUtils; 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.Perform; +import com.xiang.xservice.fwd.entity.resp.http.perform.PerformDetail; +import com.xiang.xservice.fwd.entity.resp.http.perform.PerformInfo; 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.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.lang3.StringUtils; import org.springframework.scheduling.annotation.Scheduled; import org.springframework.stereotype.Component; import org.springframework.web.bind.annotation.PostMapping; @@ -16,6 +26,11 @@ import org.springframework.web.bind.annotation.RestController; import java.util.List; 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; /** * 芬玩岛拉取数据定时任务 @@ -31,6 +46,17 @@ public class PullDataFromFWDJob { private final IPerformServiceHttp performServiceHttp; private final FwdPerformProjectInfoMapper performProjectInfoMapper; + private final FwdPerformSeatInfoMapper performSeatInfoMapper; + + private final ExecutorService es = + new ThreadPoolExecutor( + 5, + 10, + 1000, + TimeUnit.MILLISECONDS, + new LinkedBlockingQueue<>(), + new MyThreadFactory("fwd-pull-data-http", Boolean.TRUE), + new ThreadPoolExecutor.AbortPolicy()); /** * 定时任务 每日2点爬取芬玩岛数据演出列表数据 @@ -43,57 +69,152 @@ public class PullDataFromFWDJob { 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); + List futureList = Lists.newArrayList(); + for (ProjectList project : projectList) { + CompletableFuture future = CompletableFuture.runAsync(() -> { + ProjectInfoResp projectInfoFromHttp = performServiceHttp.getProjectInfoFromHttp(project.getProjectId()); + Perform performsByProjectIdFromHttp = performServiceHttp.getPerformsByProjectIdFromHttp(project.getProjectId()); + if (Objects.nonNull(projectInfoFromHttp) && Objects.nonNull(performsByProjectIdFromHttp)) { + 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()); + performProjectInfoMapper.update(projectInfo); + List fPerformSeatInfoInsertList = Lists.newArrayList(); + for (PerformInfo performInfo : performsByProjectIdFromHttp.getPerformInfos()) { + if (CollectionUtils.isNotEmpty(performInfo.getPerformInfo())) { + for (PerformDetail performDetail : performInfo.getPerformInfo()) { + if (CollectionUtils.isNotEmpty(performDetail.getSeatPlans())) { + for (SeatPlan seatPlan : performDetail.getSeatPlans()) { + 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.getAshShow()); + fPerformSeatInfo.setSelectable(seatPlan.getSelectable()); + fPerformSeatInfo.setDisplay(seatPlan.getDisplay()); + fPerformSeatInfo.setAvailableTicketQuantity(seatPlan.getAvailableTicketQuantity()); + fPerformSeatInfo.setAvailableAllTicketQuantity(seatPlan.getAvailableAllTicketQuantity()); + if (StringUtils.isNotBlank(seatPlan.getSaleTime())) { + fPerformSeatInfo.setSaleTime(DateUtils.getTimeFromStr(seatPlan.getSaleTime())); + } + fPerformSeatInfo.setProjectId(project.getProjectId()); + FPerformSeatInfo seatInfo = performSeatInfoMapper.getPerformSeatInfoBySeatIdAndPerformIdAndProjectId(fPerformSeatInfo.getSeatPlanId(), fPerformSeatInfo.getPerformId(), project.getProjectId()); + if (Objects.nonNull(seatInfo)) { + fPerformSeatInfo.setId(seatInfo.getId()); + performSeatInfoMapper.update(fPerformSeatInfo); + } else { + fPerformSeatInfoInsertList.add(fPerformSeatInfo); + } + } + } + + } + } + } + if (CollectionUtils.isNotEmpty(fPerformSeatInfoInsertList)) { + performSeatInfoMapper.batchSave(fPerformSeatInfoInsertList); + } + } 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()); + performProjectInfoMapper.insert(fPerformProjectInfo); + + List fPerformSeatInfos = Lists.newArrayList(); + for (PerformInfo performInfo : performsByProjectIdFromHttp.getPerformInfos()) { + if (CollectionUtils.isNotEmpty(performInfo.getPerformInfo())) { + for (PerformDetail performDetail : performInfo.getPerformInfo()) { + if (CollectionUtils.isNotEmpty(performDetail.getSeatPlans())) { + for (SeatPlan seatPlan : performDetail.getSeatPlans()) { + 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.getAshShow()); + fPerformSeatInfo.setSelectable(seatPlan.getSelectable()); + fPerformSeatInfo.setDisplay(seatPlan.getDisplay()); + fPerformSeatInfo.setAvailableTicketQuantity(seatPlan.getAvailableTicketQuantity()); + fPerformSeatInfo.setAvailableAllTicketQuantity(seatPlan.getAvailableAllTicketQuantity()); + if (StringUtils.isNotBlank(seatPlan.getSaleTime())) { + fPerformSeatInfo.setSaleTime(DateUtils.getTimeFromStr(seatPlan.getSaleTime())); + } + fPerformSeatInfo.setProjectId(project.getProjectId()); + } + } + } + } + } + if (CollectionUtils.isNotEmpty(fPerformSeatInfos)) { + performSeatInfoMapper.batchSave(fPerformSeatInfos); + } + } } - } + }, es); + futureList.add(future); } + CompletableFuture[] futureArr = futureList.toArray(futureList.toArray(new CompletableFuture[0])); + CompletableFuture.allOf(futureArr).join(); } } diff --git a/script/src/main/java/com/xiang/xservice/fwd/service/IPerformServiceHttp.java b/script/src/main/java/com/xiang/xservice/fwd/service/IPerformServiceHttp.java index fe6d582..a70ad2e 100644 --- a/script/src/main/java/com/xiang/xservice/fwd/service/IPerformServiceHttp.java +++ b/script/src/main/java/com/xiang/xservice/fwd/service/IPerformServiceHttp.java @@ -34,5 +34,4 @@ public interface IPerformServiceHttp { * @return */ Perform getPerformsByProjectIdFromHttp(Long projectId); - } diff --git a/script/src/main/resources/application-local.yml b/script/src/main/resources/application-local.yml index f3b6d22..f679f23 100644 --- a/script/src/main/resources/application-local.yml +++ b/script/src/main/resources/application-local.yml @@ -1,6 +1,6 @@ spring: datasource: - url: jdbc:mysql:///xservice-script?useUnicode=true&characterEncoding=utf-8&serverTimezone=Asia/Shanghai&allowMultiQueries=true + url: jdbc:mysql://120.27.153.87:3306/xservice-script-test?useUnicode=true&characterEncoding=utf-8&serverTimezone=Asia/Shanghai&allowMultiQueries=true username: root - password: 12345678 + password: 123456 driver-class-name: com.mysql.cj.jdbc.Driver \ No newline at end of file diff --git a/script/src/main/resources/mapper/fwd/FwdPerformProjectSeatInfoMapper.xml b/script/src/main/resources/mapper/fwd/FwdPerformProjectSeatInfoMapper.xml new file mode 100644 index 0000000..4c55f39 --- /dev/null +++ b/script/src/main/resources/mapper/fwd/FwdPerformProjectSeatInfoMapper.xml @@ -0,0 +1,273 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + id, seat_plan_id, + seat_plan_name, + perform_id, + perform_name, + stop_sale, + shelf_status, + price, + discount_price, + sub_status, + quantity, + status, + max_sell_stock, + sold_stock, + left_stock, + able_sale_quantity, + ash_show, + ash_show_desc, + selectable, + display, + available_ticket_quantity, + available_all_ticket_quantity, + sale_time, + project_id + + + + INSERT INTO fwd_perform_seat_info + + + seat_plan_id, + + + seat_plan_name, + + + perform_id, + + + perform_name, + + + stop_sale, + + + shelf_status, + + + price, + + + discount_price, + + + sub_status, + + + quantity, + + + status, + + + max_sell_stock, + + + sold_stock, + + + left_stock, + + + able_sale_quantity, + + + ash_show, + + + ash_show_desc, + + + selectable, + + + display, + + + available_ticket_quantity, + + + available_all_ticket_quantity, + + + sale_time, + + + project_id + + + + + #{seatPlanId}, + + + #{seatPlanName}, + + + #{performId}, + + + #{performName}, + + + #{stopSale}, + + + #{shelfStatus}, + + + #{price}, + + + #{discountPrice}, + + + #{subStatus}, + + + #{quantity}, + + + #{status}, + + + #{maxSellStock}, + + + #{soldStock}, + + + #{leftStock}, + + + #{ableSaleQuantity}, + + + #{ashShow}, + + + #{ashShowDesc}, + + + #{selectable}, + + + #{display}, + + + #{availableTicketQuantity}, + + + #{availableAllTicketQuantity}, + + + #{saleTime}, + + + #{projectId} + + + + + INSERT INTO fwd_perform_seat_info + ( + seat_plan_id, seat_plan_name, perform_id, perform_name, stop_sale, + shelf_status, price, discount_price, sub_status, quantity, + status, max_sell_stock, sold_stock, left_stock, able_sale_quantity, + ash_show, ash_show_desc, selectable, display, + available_ticket_quantity, available_all_ticket_quantity, + sale_time, project_id + ) + VALUES + + ( + #{item.seatPlanId}, #{item.seatPlanName}, #{item.performId}, #{item.performName}, #{item.stopSale}, + #{item.shelfStatus}, #{item.price}, #{item.discountPrice}, #{item.subStatus}, #{item.quantity}, + #{item.status}, #{item.maxSellStock}, #{item.soldStock}, #{item.leftStock}, #{item.ableSaleQuantity}, + #{item.ashShow}, #{item.ashShowDesc}, #{item.selectable}, #{item.display}, + #{item.availableTicketQuantity}, #{item.availableAllTicketQuantity}, + #{item.saleTime}, #{item.projectId} + ) + + + + + + + UPDATE fwd_perform_seat_info + + seat_plan_id = #{seatPlanId}, + seat_plan_name = #{seatPlanName}, + perform_id = #{performId}, + perform_name = #{performName}, + stop_sale = #{stopSale}, + shelf_status = #{shelfStatus}, + price = #{price}, + discount_price = #{discountPrice}, + sub_status = #{subStatus}, + quantity = #{quantity}, + status = #{status}, + max_sell_stock = #{maxSellStock}, + sold_stock = #{soldStock}, + left_stock = #{leftStock}, + able_sale_quantity = #{ableSaleQuantity}, + ash_show = #{ashShow}, + ash_show_desc = #{ashShowDesc}, + selectable = #{selectable}, + display = #{display}, + available_ticket_quantity = #{availableTicketQuantity}, + available_all_ticket_quantity = #{availableAllTicketQuantity}, + sale_time = #{saleTime}, + project_id = #{projectId} + + WHERE id = #{id} + + + + + \ No newline at end of file From e6b0fa2ff81a85ef33275d71f630798754fb36ae Mon Sep 17 00:00:00 2001 From: Zhujx Date: Fri, 25 Jul 2025 14:12:45 +0800 Subject: [PATCH 08/49] =?UTF-8?q?fix:=E9=9B=86=E5=90=88=E9=9D=9E=E7=A9=BA?= =?UTF-8?q?=E6=A0=A1=E9=AA=8C=EF=BC=8C=E6=95=B0=E6=8D=AE=E5=BA=93update?= =?UTF-8?q?=E8=84=9A=E6=9C=AC=E4=BF=AE=E6=94=B9?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../fwd/entity/pojo/FPerformProjectInfo.java | 3 + .../fwd/schedule/PullDataFromFWDJob.java | 152 ++++++++++-------- .../fwd/FwdPerformProjectInfoMapper.xml | 13 +- 3 files changed, 95 insertions(+), 73 deletions(-) diff --git a/script/src/main/java/com/xiang/xservice/fwd/entity/pojo/FPerformProjectInfo.java b/script/src/main/java/com/xiang/xservice/fwd/entity/pojo/FPerformProjectInfo.java index 8a343ad..a8ee3f2 100644 --- a/script/src/main/java/com/xiang/xservice/fwd/entity/pojo/FPerformProjectInfo.java +++ b/script/src/main/java/com/xiang/xservice/fwd/entity/pojo/FPerformProjectInfo.java @@ -7,6 +7,7 @@ import lombok.NoArgsConstructor; import java.math.BigDecimal; import java.time.LocalDate; +import java.time.LocalDateTime; @Data @AllArgsConstructor @@ -51,4 +52,6 @@ public class FPerformProjectInfo { private LocalDate projectEndDate; private String subClassifyName; + + private LocalDateTime preSaleTime; } 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 cc73f5e..31c2b82 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 @@ -59,9 +59,9 @@ public class PullDataFromFWDJob { new ThreadPoolExecutor.AbortPolicy()); /** - * 定时任务 每日2点爬取芬玩岛数据演出列表数据 + * 定时任务 每日1点爬取芬玩岛数据演出列表数据 */ - @Scheduled(cron = "0 0 2 1/1 * ?") + @Scheduled(cron = "0 0 1 1/1 * ?") @PostMapping("/pullProjectsDataJob") public void pullProjectsDataJob() { ProjectsResp showProjectsFromHttp = performServiceHttp.getShowProjectsFromHttp(); @@ -96,52 +96,58 @@ public class PullDataFromFWDJob { projectInfo.setShortCity(project.getShortCity()); projectInfo.setVenueName(project.getVenueName()); projectInfo.setLowestPrice(project.getLowestPrice()); + if (StringUtils.isNotBlank(projectInfoFromHttp.getPreSaleTime())) { + projectInfo.setPreSaleTime(DateUtils.getDateTimeFromStr(projectInfoFromHttp.getPreSaleTime())); + } performProjectInfoMapper.update(projectInfo); List fPerformSeatInfoInsertList = Lists.newArrayList(); - for (PerformInfo performInfo : performsByProjectIdFromHttp.getPerformInfos()) { - if (CollectionUtils.isNotEmpty(performInfo.getPerformInfo())) { - for (PerformDetail performDetail : performInfo.getPerformInfo()) { - if (CollectionUtils.isNotEmpty(performDetail.getSeatPlans())) { - for (SeatPlan seatPlan : performDetail.getSeatPlans()) { - 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.getAshShow()); - fPerformSeatInfo.setSelectable(seatPlan.getSelectable()); - fPerformSeatInfo.setDisplay(seatPlan.getDisplay()); - fPerformSeatInfo.setAvailableTicketQuantity(seatPlan.getAvailableTicketQuantity()); - fPerformSeatInfo.setAvailableAllTicketQuantity(seatPlan.getAvailableAllTicketQuantity()); - if (StringUtils.isNotBlank(seatPlan.getSaleTime())) { - fPerformSeatInfo.setSaleTime(DateUtils.getTimeFromStr(seatPlan.getSaleTime())); - } - fPerformSeatInfo.setProjectId(project.getProjectId()); - FPerformSeatInfo seatInfo = performSeatInfoMapper.getPerformSeatInfoBySeatIdAndPerformIdAndProjectId(fPerformSeatInfo.getSeatPlanId(), fPerformSeatInfo.getPerformId(), project.getProjectId()); - if (Objects.nonNull(seatInfo)) { - fPerformSeatInfo.setId(seatInfo.getId()); - performSeatInfoMapper.update(fPerformSeatInfo); - } else { - fPerformSeatInfoInsertList.add(fPerformSeatInfo); + if (CollectionUtils.isNotEmpty(performsByProjectIdFromHttp.getPerformInfos())) { + for (PerformInfo performInfo : performsByProjectIdFromHttp.getPerformInfos()) { + if (CollectionUtils.isNotEmpty(performInfo.getPerformInfo())) { + for (PerformDetail performDetail : performInfo.getPerformInfo()) { + if (CollectionUtils.isNotEmpty(performDetail.getSeatPlans())) { + for (SeatPlan seatPlan : performDetail.getSeatPlans()) { + 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.getAshShow()); + fPerformSeatInfo.setSelectable(seatPlan.getSelectable()); + fPerformSeatInfo.setDisplay(seatPlan.getDisplay()); + fPerformSeatInfo.setAvailableTicketQuantity(seatPlan.getAvailableTicketQuantity()); + fPerformSeatInfo.setAvailableAllTicketQuantity(seatPlan.getAvailableAllTicketQuantity()); + if (StringUtils.isNotBlank(seatPlan.getSaleTime())) { + fPerformSeatInfo.setSaleTime(DateUtils.getTimeFromStr(seatPlan.getSaleTime())); + } + fPerformSeatInfo.setProjectId(project.getProjectId()); + FPerformSeatInfo seatInfo = performSeatInfoMapper.getPerformSeatInfoBySeatIdAndPerformIdAndProjectId(fPerformSeatInfo.getSeatPlanId(), fPerformSeatInfo.getPerformId(), project.getProjectId()); + if (Objects.nonNull(seatInfo)) { + fPerformSeatInfo.setId(seatInfo.getId()); + performSeatInfoMapper.update(fPerformSeatInfo); + } else { + fPerformSeatInfoInsertList.add(fPerformSeatInfo); + } } } - } + } } } } + if (CollectionUtils.isNotEmpty(fPerformSeatInfoInsertList)) { performSeatInfoMapper.batchSave(fPerformSeatInfoInsertList); } @@ -167,45 +173,51 @@ public class PullDataFromFWDJob { 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); List fPerformSeatInfos = Lists.newArrayList(); - for (PerformInfo performInfo : performsByProjectIdFromHttp.getPerformInfos()) { - if (CollectionUtils.isNotEmpty(performInfo.getPerformInfo())) { - for (PerformDetail performDetail : performInfo.getPerformInfo()) { - if (CollectionUtils.isNotEmpty(performDetail.getSeatPlans())) { - for (SeatPlan seatPlan : performDetail.getSeatPlans()) { - 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.getAshShow()); - fPerformSeatInfo.setSelectable(seatPlan.getSelectable()); - fPerformSeatInfo.setDisplay(seatPlan.getDisplay()); - fPerformSeatInfo.setAvailableTicketQuantity(seatPlan.getAvailableTicketQuantity()); - fPerformSeatInfo.setAvailableAllTicketQuantity(seatPlan.getAvailableAllTicketQuantity()); - if (StringUtils.isNotBlank(seatPlan.getSaleTime())) { - fPerformSeatInfo.setSaleTime(DateUtils.getTimeFromStr(seatPlan.getSaleTime())); + if (CollectionUtils.isNotEmpty(performsByProjectIdFromHttp.getPerformInfos())) { + for (PerformInfo performInfo : performsByProjectIdFromHttp.getPerformInfos()) { + if (CollectionUtils.isNotEmpty(performInfo.getPerformInfo())) { + for (PerformDetail performDetail : performInfo.getPerformInfo()) { + if (CollectionUtils.isNotEmpty(performDetail.getSeatPlans())) { + for (SeatPlan seatPlan : performDetail.getSeatPlans()) { + 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.getAshShow()); + fPerformSeatInfo.setSelectable(seatPlan.getSelectable()); + fPerformSeatInfo.setDisplay(seatPlan.getDisplay()); + fPerformSeatInfo.setAvailableTicketQuantity(seatPlan.getAvailableTicketQuantity()); + fPerformSeatInfo.setAvailableAllTicketQuantity(seatPlan.getAvailableAllTicketQuantity()); + if (StringUtils.isNotBlank(seatPlan.getSaleTime())) { + fPerformSeatInfo.setSaleTime(DateUtils.getTimeFromStr(seatPlan.getSaleTime())); + } + fPerformSeatInfo.setProjectId(project.getProjectId()); } - fPerformSeatInfo.setProjectId(project.getProjectId()); } } } } } + if (CollectionUtils.isNotEmpty(fPerformSeatInfos)) { performSeatInfoMapper.batchSave(fPerformSeatInfos); } diff --git a/script/src/main/resources/mapper/fwd/FwdPerformProjectInfoMapper.xml b/script/src/main/resources/mapper/fwd/FwdPerformProjectInfoMapper.xml index 5c330a4..066a6f6 100644 --- a/script/src/main/resources/mapper/fwd/FwdPerformProjectInfoMapper.xml +++ b/script/src/main/resources/mapper/fwd/FwdPerformProjectInfoMapper.xml @@ -101,7 +101,10 @@ project_end_date, - sub_classify_name + sub_classify_name, + + + pre_sale_time @@ -157,7 +160,10 @@ #{projectEndDate}, - #{subClassifyName} + #{subClassifyName}, + + + #{preSaleTime} @@ -182,7 +188,8 @@ project_price = #{projectPrice}, project_start_date = #{projectStartDate}, project_end_date = #{projectEndDate}, - sub_classify_name = #{subClassifyName} + sub_classify_name = #{subClassifyName}, + pre_sale_time = #{preSaleTime} WHERE id = #{id} From 6c8b828ca0db32cfe10f4946d22f966d756941e6 Mon Sep 17 00:00:00 2001 From: Zhujx Date: Fri, 25 Jul 2025 14:29:33 +0800 Subject: [PATCH 09/49] =?UTF-8?q?feat:=E8=8A=AC=E7=8E=A9=E5=B2=9B=E6=BC=94?= =?UTF-8?q?=E5=94=B1=E4=BC=9A=E9=A2=84=E5=94=AE=E6=8F=90=E9=86=92?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../mapper/FwdPerformProjectInfoMapper.java | 5 ++ .../fwd/schedule/FwdImportantMsgJob.java | 56 +++++++++++++++++++ .../fwd/FwdPerformProjectInfoMapper.xml | 9 ++- 3 files changed, 69 insertions(+), 1 deletion(-) create mode 100644 script/src/main/java/com/xiang/xservice/fwd/schedule/FwdImportantMsgJob.java 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 index 12215d7..c794030 100644 --- a/script/src/main/java/com/xiang/xservice/fwd/mapper/FwdPerformProjectInfoMapper.java +++ b/script/src/main/java/com/xiang/xservice/fwd/mapper/FwdPerformProjectInfoMapper.java @@ -4,6 +4,9 @@ import com.xiang.xservice.fwd.entity.pojo.FPerformProjectInfo; import org.apache.ibatis.annotations.Mapper; import org.springframework.stereotype.Repository; +import java.time.LocalDateTime; +import java.util.List; + /** * @Author: xiang * @Date: 2025-07-24 17:22 @@ -16,4 +19,6 @@ public interface FwdPerformProjectInfoMapper { int insert(FPerformProjectInfo fPerformProjectInfo); int update(FPerformProjectInfo fPerformProjectInfo); + + List getPreSaleTodayData(LocalDateTime startTime, LocalDateTime endTime); } diff --git a/script/src/main/java/com/xiang/xservice/fwd/schedule/FwdImportantMsgJob.java b/script/src/main/java/com/xiang/xservice/fwd/schedule/FwdImportantMsgJob.java new file mode 100644 index 0000000..f514c7a --- /dev/null +++ b/script/src/main/java/com/xiang/xservice/fwd/schedule/FwdImportantMsgJob.java @@ -0,0 +1,56 @@ +package com.xiang.xservice.fwd.schedule; + +import com.alibaba.fastjson2.JSONObject; +import com.xiang.xservice.basic.utils.DateUtils; +import com.xiang.xservice.basic.xservice.dingTalk.service.DingTalkService; +import com.xiang.xservice.fwd.entity.pojo.FPerformProjectInfo; +import com.xiang.xservice.fwd.mapper.FwdPerformProjectInfoMapper; +import lombok.RequiredArgsConstructor; +import lombok.extern.slf4j.Slf4j; +import org.apache.commons.collections4.CollectionUtils; +import org.springframework.beans.factory.annotation.Value; +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.time.LocalDate; +import java.util.List; + +/** + * @Author: xiang + * @Date: 2025-07-25 14:13 + */ +@Component +@RequiredArgsConstructor +@Slf4j +@RestController +public class FwdImportantMsgJob { + + private final FwdPerformProjectInfoMapper performProjectInfoMapper; + private final DingTalkService dingTalkService; + + @Value("${DingTalk.chatId}") + private String chatId; + + @Scheduled(cron = "0 0 8 1/1 * ?") + @PostMapping("/preSaleReminderJob") + public void preSaleReminderJob() throws Exception { + log.info("【芬玩岛】演唱会预售定时任务开始!time:{}", System.currentTimeMillis()); + + // 查询所有即将今天预售的演唱会信息 + LocalDate now = LocalDate.now(); + List saleTodayData = performProjectInfoMapper.getPreSaleTodayData(now.atTime(0, 0, 0), now.atTime(23, 59, 59)); + if (CollectionUtils.isEmpty(saleTodayData)) { + log.info("【芬玩岛】 今天:{}暂无预售的演唱会门票信息.", now); + return; + } + log.info("【芬玩岛】 即将:{}预售的演唱会门票信息:{}", now, JSONObject.toJSONString(saleTodayData)); + StringBuilder msg = new StringBuilder("今日" + now + "演唱会门票预售信息:\n"); + for (FPerformProjectInfo data : saleTodayData) { + msg.append("演唱会名称:").append(data.getProjectName()).append("预售时间:").append(DateUtils.getDateTimeStr(data.getPreSaleTime())).append("\n"); + } + dingTalkService.sendChatMessage(chatId, msg.toString()); + log.info("【芬玩岛】演唱会预售定时任务结束!time:{}", System.currentTimeMillis()); + } +} diff --git a/script/src/main/resources/mapper/fwd/FwdPerformProjectInfoMapper.xml b/script/src/main/resources/mapper/fwd/FwdPerformProjectInfoMapper.xml index 066a6f6..3bbbb70 100644 --- a/script/src/main/resources/mapper/fwd/FwdPerformProjectInfoMapper.xml +++ b/script/src/main/resources/mapper/fwd/FwdPerformProjectInfoMapper.xml @@ -23,6 +23,7 @@ + @@ -43,7 +44,8 @@ project_price, project_start_date, project_end_date, - sub_classify_name + sub_classify_name, + pre_sale_time @@ -198,6 +200,11 @@ from fwd_perform_project_info where project_id = #{projectId} + \ No newline at end of file From 19add26e64debcaab3131b1c29739284f71d8170 Mon Sep 17 00:00:00 2001 From: Zhujx Date: Fri, 25 Jul 2025 15:15:27 +0800 Subject: [PATCH 10/49] =?UTF-8?q?feat:=E5=88=9B=E5=BB=BA=E8=AE=A2=E5=8D=95?= =?UTF-8?q?=E6=8E=A5=E5=8F=A3?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../fwd/entity/req/ProjectOrderCreateReq.java | 5 +- .../fwd/server/FwdOuterController.java | 20 +++++++ .../impl/PerformServiceHttpServiceImpl.java | 52 ++----------------- 3 files changed, 26 insertions(+), 51 deletions(-) diff --git a/script/src/main/java/com/xiang/xservice/fwd/entity/req/ProjectOrderCreateReq.java b/script/src/main/java/com/xiang/xservice/fwd/entity/req/ProjectOrderCreateReq.java index 50f3b18..05b95c2 100644 --- a/script/src/main/java/com/xiang/xservice/fwd/entity/req/ProjectOrderCreateReq.java +++ b/script/src/main/java/com/xiang/xservice/fwd/entity/req/ProjectOrderCreateReq.java @@ -3,7 +3,6 @@ package com.xiang.xservice.fwd.entity.req; import lombok.AllArgsConstructor; import lombok.Data; import lombok.NoArgsConstructor; -import org.checkerframework.checker.units.qual.A; import java.math.BigDecimal; import java.util.List; @@ -22,6 +21,8 @@ public class ProjectOrderCreateReq { private List privilegeCodeList; private Integer audienceCount; private List frequentIds; - private List seatPlanId; + private List seatPlanIds; private String blackBox; + private String combineTicketVos; + private String ordinaryTicketVos; } diff --git a/script/src/main/java/com/xiang/xservice/fwd/server/FwdOuterController.java b/script/src/main/java/com/xiang/xservice/fwd/server/FwdOuterController.java index 13e37ed..3dbe3ac 100644 --- a/script/src/main/java/com/xiang/xservice/fwd/server/FwdOuterController.java +++ b/script/src/main/java/com/xiang/xservice/fwd/server/FwdOuterController.java @@ -1,15 +1,22 @@ package com.xiang.xservice.fwd.server; import com.xiang.xservice.basic.common.resp.Result; +import com.xiang.xservice.fwd.entity.req.ProjectOrderCreateReq; import com.xiang.xservice.fwd.entity.resp.http.perform.Perform; +import com.xiang.xservice.fwd.entity.resp.http.perform.ProjectOrderCreateResp; import com.xiang.xservice.fwd.entity.resp.http.perform.ProjectsResp; import com.xiang.xservice.fwd.service.IPerformServiceHttp; import lombok.RequiredArgsConstructor; import org.springframework.web.bind.annotation.GetMapping; import org.springframework.web.bind.annotation.PathVariable; +import org.springframework.web.bind.annotation.PostMapping; +import org.springframework.web.bind.annotation.RequestBody; import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.RestController; +import javax.validation.Valid; +import java.util.Objects; + /** * @Author: xiang * @Date: 2025-07-24 16:55 @@ -39,4 +46,17 @@ public class FwdOuterController { return Result.success("查询成功!", performsByProjectIdFromHttp); } + @PostMapping("/createOrder") + public Result createOrder(@RequestBody @Valid ProjectOrderCreateReq req) { + req.setDeliveryType(1); + req.setBlackBox("0"); + req.setContactName("朱吉祥"); + req.setContactPhone("15858717571"); + ProjectOrderCreateResp projectOrder = performServiceHttp.createProjectOrder(req); + if (Objects.nonNull(projectOrder)) { + return Result.success("下单成功!", projectOrder); + } + return Result.success("下单失败!", null); + } + } 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 876fdec..68fe3ac 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 @@ -75,7 +75,7 @@ public class PerformServiceHttpServiceImpl implements IPerformServiceHttp { public ProjectOrderCreateResp createProjectOrder(ProjectOrderCreateReq req) { String respStr = HttpUtils.doPost(UrlConstants.PROJECT_ORDER_CREATE_URL, buildFWDHeaders(UrlConstants.token), JSON.toJSONString(req)); if (StringUtils.isBlank(respStr)) { - return new ProjectOrderCreateResp(); + return null; } log.info("【Http请求】 http请求创建订单结果:{}", respStr); JSONObject resp = JSON.parseObject(respStr); @@ -83,11 +83,11 @@ public class PerformServiceHttpServiceImpl implements IPerformServiceHttp { if (Objects.nonNull(code) && Objects.equals(code, CodeConstants.SUCCESS)) { ProjectOrderCreateResp projectOrderCreateResp = JSON.parseObject(resp.get("data").toString(), ProjectOrderCreateResp.class); if (Objects.isNull(projectOrderCreateResp)) { - return new ProjectOrderCreateResp(); + return null; } return projectOrderCreateResp; } - return new ProjectOrderCreateResp(); + return null; } @Override @@ -126,50 +126,4 @@ public class PerformServiceHttpServiceImpl implements IPerformServiceHttp { } return headers; } - - public static void main(String[] args) { - Map headers = Maps.newHashMap(); - String req = "{" + - " \"deliveryType\": 1," + - " \"contactName\": \"朱吉祥\"," + - " \"contactPhone\": \"15858717571\"," + - " \"combineTicketVos\": null," + - " \"ordinaryTicketVos\": null," + - " \"payment\": 999," + - " \"totalPrice\": 999," + - " \"performId\": 2772," + - " \"projectId\": \"5881698656\"," + - " \"privilegeCodeList\": []," + - " \"audienceCount\": 1," + - " \"frequentIds\": [" + - " 35320661" + - " ]," + - " \"seatPlanIds\": [" + - " 14118," + - " 14117" + - " ]," + - " \"blackBox\": \":0\"" + - "}"; - headers.put("content-type", "application/json"); - headers.put("Host", "api.livelab.com.cn"); - headers.put("Connection", "keep-alive"); - headers.put("platform-type", "%E7%BA%B7%E7%8E%A9%E5%B2%9B%E5%BE%AE%E4%BF%A1%E5%B0%8F%E7%A8%8B%E5%BA%8F"); - headers.put("x-fwd-anonymousId", "ocXac5C25MY5O3UM_EfL0oTgm7Jw"); - headers.put("User-Agent", "Mozilla/5.0 (iPhone; CPU iPhone OS 18_5 like Mac OS X) AppleWebKit/605.1.15 (KHTML, like Gecko) Mobile/15E148 MicroMessenger/8.0.61(0x18003d2e) NetType/WIFI Language/zh_CN"); - headers.put("X-REQUEST-STARTTIME", String.valueOf(System.currentTimeMillis())); - headers.put("Authorization", UrlConstants.token); - String respStr = HttpUtils.doPost(UrlConstants.PROJECT_ORDER_CREATE_URL, headers, req); - if (StringUtils.isBlank(respStr)) { - log.info("1"); - } - JSONObject resp = JSON.parseObject(respStr); - Integer code = (Integer) resp.get("code"); - if (Objects.nonNull(code) && Objects.equals(code, CodeConstants.SUCCESS)) { - ProjectOrderCreateResp projectInfoResp = JSON.parseObject(resp.get("data").toString(), ProjectOrderCreateResp.class); - if (Objects.isNull(projectInfoResp)) { - log.info("2"); - } - } - log.info("查询结果:{}", resp); - } } From 044ab25c2a92dca3d239925b341b1cda33c1de10 Mon Sep 17 00:00:00 2001 From: Zhujx Date: Fri, 25 Jul 2025 16:21:26 +0800 Subject: [PATCH 11/49] =?UTF-8?q?feat:=E6=9F=A5=E8=AF=A2=E5=BA=A7=E4=BD=8D?= =?UTF-8?q?=E4=BF=A1=E6=81=AF?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- script/pom.xml | 2 +- .../xservice/fwd/constants/UrlConstants.java | 5 ++ .../fwd/entity/pojo/FPerformSeatInfo.java | 6 ++ .../fwd/entity/req/ProjectOrderCreateReq.java | 2 +- .../resp/http/perform/SeatPlanStatus.java | 20 +++++ .../fwd/mapper/FwdPerformSeatInfoMapper.java | 2 + .../fwd/schedule/PullDataFromFWDJob.java | 2 + .../fwd/server/FwdOuterController.java | 29 +++--- .../xservice/fwd/service/IPerformService.java | 19 ++++ .../fwd/service/IPerformServiceHttp.java | 12 +++ .../impl/PerformServiceHttpServiceImpl.java | 32 ++++++- .../fwd/service/impl/PerformServiceImpl.java | 89 +++++++++++++++++++ .../fwd/FwdPerformProjectSeatInfoMapper.xml | 26 ++++-- 13 files changed, 223 insertions(+), 23 deletions(-) create mode 100644 script/src/main/java/com/xiang/xservice/fwd/entity/resp/http/perform/SeatPlanStatus.java create mode 100644 script/src/main/java/com/xiang/xservice/fwd/service/IPerformService.java create mode 100644 script/src/main/java/com/xiang/xservice/fwd/service/impl/PerformServiceImpl.java diff --git a/script/pom.xml b/script/pom.xml index 9d1de9c..a67ab6b 100644 --- a/script/pom.xml +++ b/script/pom.xml @@ -16,7 +16,7 @@ script - 1.8 + 17 UTF-8 diff --git a/script/src/main/java/com/xiang/xservice/fwd/constants/UrlConstants.java b/script/src/main/java/com/xiang/xservice/fwd/constants/UrlConstants.java index 66fbf29..8a91e17 100644 --- a/script/src/main/java/com/xiang/xservice/fwd/constants/UrlConstants.java +++ b/script/src/main/java/com/xiang/xservice/fwd/constants/UrlConstants.java @@ -27,4 +27,9 @@ public class UrlConstants { * 创建订单URL */ public final static String PROJECT_ORDER_CREATE_URL = BASE_URL + "/order/app/center/v3/create"; + + /** + * 获取演出座位信息 + */ + public final static String PROJECT_SEAT_STATUS_URL = BASE_URL + "/performance/app/project/seatPlanStatus"; } 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 6c72f2b..5a9a0f2 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 @@ -134,4 +134,10 @@ public class FPerformSeatInfo implements Serializable { * 演出id(总) */ private Long projectId; + + /** + * 是否售罄 + * 0:否 1:是 + */ + private Integer soldOut; } diff --git a/script/src/main/java/com/xiang/xservice/fwd/entity/req/ProjectOrderCreateReq.java b/script/src/main/java/com/xiang/xservice/fwd/entity/req/ProjectOrderCreateReq.java index 05b95c2..22fd97e 100644 --- a/script/src/main/java/com/xiang/xservice/fwd/entity/req/ProjectOrderCreateReq.java +++ b/script/src/main/java/com/xiang/xservice/fwd/entity/req/ProjectOrderCreateReq.java @@ -14,7 +14,7 @@ public class ProjectOrderCreateReq { private Integer deliveryType; private String contactName; private String contactPhone; - private Integer payment; + private BigDecimal payment; private BigDecimal totalPrice; private Long performId; private String projectId; 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 new file mode 100644 index 0000000..8a84210 --- /dev/null +++ b/script/src/main/java/com/xiang/xservice/fwd/entity/resp/http/perform/SeatPlanStatus.java @@ -0,0 +1,20 @@ +package com.xiang.xservice.fwd.entity.resp.http.perform; + +import lombok.AllArgsConstructor; +import lombok.Data; +import lombok.NoArgsConstructor; + +/** + * @Author: xiang + * @Date: 2025-07-25 16:10 + */ +@Data +@AllArgsConstructor +@NoArgsConstructor +public class SeatPlanStatus { + private Integer seatPlanId; + private Integer performId; + private Boolean soldOutFlag; + private Integer enableNoTicketLabel; + private Integer standbyStatus; +} 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 6013485..d784cd0 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 @@ -22,4 +22,6 @@ public interface FwdPerformSeatInfoMapper { FPerformSeatInfo getPerformSeatInfoBySeatIdAndPerformIdAndProjectId( @Param("seatId") Long seatId, @Param("performId") Long performId, @Param("projectId") Long projectId); + + List getPerformSeatByProjectId(Long projectId); } 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 31c2b82..272807a 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 @@ -106,6 +106,8 @@ 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(); + for (SeatPlan seatPlan : performDetail.getSeatPlans()) { FPerformSeatInfo fPerformSeatInfo = new FPerformSeatInfo(); fPerformSeatInfo.setSeatPlanId(seatPlan.getSeatPlanId()); diff --git a/script/src/main/java/com/xiang/xservice/fwd/server/FwdOuterController.java b/script/src/main/java/com/xiang/xservice/fwd/server/FwdOuterController.java index 3dbe3ac..828e3c0 100644 --- a/script/src/main/java/com/xiang/xservice/fwd/server/FwdOuterController.java +++ b/script/src/main/java/com/xiang/xservice/fwd/server/FwdOuterController.java @@ -1,21 +1,20 @@ package com.xiang.xservice.fwd.server; import com.xiang.xservice.basic.common.resp.Result; -import com.xiang.xservice.fwd.entity.req.ProjectOrderCreateReq; import com.xiang.xservice.fwd.entity.resp.http.perform.Perform; -import com.xiang.xservice.fwd.entity.resp.http.perform.ProjectOrderCreateResp; import com.xiang.xservice.fwd.entity.resp.http.perform.ProjectsResp; +import com.xiang.xservice.fwd.entity.resp.http.perform.SeatPlanStatus; +import com.xiang.xservice.fwd.service.IPerformService; import com.xiang.xservice.fwd.service.IPerformServiceHttp; import lombok.RequiredArgsConstructor; import org.springframework.web.bind.annotation.GetMapping; import org.springframework.web.bind.annotation.PathVariable; import org.springframework.web.bind.annotation.PostMapping; -import org.springframework.web.bind.annotation.RequestBody; import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.RequestParam; import org.springframework.web.bind.annotation.RestController; -import javax.validation.Valid; -import java.util.Objects; +import java.util.List; /** * @Author: xiang @@ -27,6 +26,7 @@ import java.util.Objects; public class FwdOuterController { private final IPerformServiceHttp performServiceHttp; + private final IPerformService performService; @GetMapping("/getShowProjects") public Result getShowProjects() { @@ -47,16 +47,17 @@ public class FwdOuterController { } @PostMapping("/createOrder") - public Result createOrder(@RequestBody @Valid ProjectOrderCreateReq req) { - req.setDeliveryType(1); - req.setBlackBox("0"); - req.setContactName("朱吉祥"); - req.setContactPhone("15858717571"); - ProjectOrderCreateResp projectOrder = performServiceHttp.createProjectOrder(req); - if (Objects.nonNull(projectOrder)) { - return Result.success("下单成功!", projectOrder); + public Result createOrder(Long projectId) throws Exception { + if (performService.createProjectOrder(projectId)) { + return Result.success("下单成功!"); } - return Result.success("下单失败!", null); + return Result.error("下单失败!"); + } + + @GetMapping("/getSeatPlanStatus") + public Result getSeatPlanStatu (@RequestParam List ids) { + List seatPlanStatusFromHttp = performServiceHttp.getSeatPlanStatusFromHttp(ids); + return Result.success("查询成功!", seatPlanStatusFromHttp); } } 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 new file mode 100644 index 0000000..0453b7c --- /dev/null +++ b/script/src/main/java/com/xiang/xservice/fwd/service/IPerformService.java @@ -0,0 +1,19 @@ +package com.xiang.xservice.fwd.service; + +import com.xiang.xservice.fwd.entity.pojo.FPerformProjectInfo; +import com.xiang.xservice.fwd.entity.pojo.FPerformSeatInfo; + +import java.util.List; + +/** + * @Author: xiang + * @Date: 2025-07-25 15:15 + */ +public interface IPerformService { + + FPerformProjectInfo getPerformByProjectId(Long projectId); + + List getPerformSeatInfoByProjectId(Long projectId); + + Boolean createProjectOrder(Long projectId) throws Exception; +} diff --git a/script/src/main/java/com/xiang/xservice/fwd/service/IPerformServiceHttp.java b/script/src/main/java/com/xiang/xservice/fwd/service/IPerformServiceHttp.java index a70ad2e..f292f92 100644 --- a/script/src/main/java/com/xiang/xservice/fwd/service/IPerformServiceHttp.java +++ b/script/src/main/java/com/xiang/xservice/fwd/service/IPerformServiceHttp.java @@ -5,6 +5,9 @@ import com.xiang.xservice.fwd.entity.resp.http.perform.Perform; import com.xiang.xservice.fwd.entity.resp.http.perform.ProjectInfoResp; import com.xiang.xservice.fwd.entity.resp.http.perform.ProjectOrderCreateResp; import com.xiang.xservice.fwd.entity.resp.http.perform.ProjectsResp; +import com.xiang.xservice.fwd.entity.resp.http.perform.SeatPlanStatus; + +import java.util.List; public interface IPerformServiceHttp { @@ -34,4 +37,13 @@ public interface IPerformServiceHttp { * @return */ Perform getPerformsByProjectIdFromHttp(Long projectId); + + /** + * http请求获取座位状态信息 + * @param seatPlanIds + * @return + */ + List getSeatPlanStatusFromHttp(List seatPlanIds); + + } 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 68fe3ac..0f3d895 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 @@ -2,8 +2,10 @@ package com.xiang.xservice.fwd.service.impl; import com.alibaba.fastjson.JSON; import com.alibaba.fastjson.JSONObject; +import com.google.common.collect.Lists; import com.google.common.collect.Maps; import com.xiang.xservice.basic.utils.HttpUtils; +import com.xiang.xservice.basic.utils.JsonUtils; import com.xiang.xservice.fwd.constants.CodeConstants; import com.xiang.xservice.fwd.constants.UrlConstants; import com.xiang.xservice.fwd.entity.req.ProjectOrderCreateReq; @@ -11,12 +13,15 @@ import com.xiang.xservice.fwd.entity.resp.http.perform.Perform; import com.xiang.xservice.fwd.entity.resp.http.perform.ProjectInfoResp; import com.xiang.xservice.fwd.entity.resp.http.perform.ProjectOrderCreateResp; import com.xiang.xservice.fwd.entity.resp.http.perform.ProjectsResp; +import com.xiang.xservice.fwd.entity.resp.http.perform.SeatPlanStatus; 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.lang3.StringUtils; import org.springframework.stereotype.Service; +import java.util.List; import java.util.Map; import java.util.Objects; @@ -73,7 +78,7 @@ public class PerformServiceHttpServiceImpl implements IPerformServiceHttp { @Override public ProjectOrderCreateResp createProjectOrder(ProjectOrderCreateReq req) { - String respStr = HttpUtils.doPost(UrlConstants.PROJECT_ORDER_CREATE_URL, buildFWDHeaders(UrlConstants.token), JSON.toJSONString(req)); + String respStr = HttpUtils.doPost(UrlConstants.PROJECT_ORDER_CREATE_URL, buildFWDHeaders(UrlConstants.token), JsonUtils.toJsonString(req)); if (StringUtils.isBlank(respStr)) { return null; } @@ -111,6 +116,31 @@ public class PerformServiceHttpServiceImpl implements IPerformServiceHttp { return new Perform(); } + @Override + public List getSeatPlanStatusFromHttp(List seatPlanIds) { + StringBuilder seatIds = new StringBuilder(); + for (Long seatPlanId : seatPlanIds) { + seatIds.append(seatPlanId).append(","); + } + Map params = Maps.newHashMap(); + params.put("seatPlanIds", seatIds.substring(0, seatIds.length() - 2)); + params.put("type", "3"); + String respStr = HttpUtils.doGet(UrlConstants.PROJECT_SEAT_STATUS_URL, buildFWDHeaders(UrlConstants.token), params); + if (StringUtils.isBlank(respStr)) { + return Lists.newArrayList(); + } + log.info("【Http请求】 根据seatPlanIds:{}http请求查询演出座位信息结果:{}", seatPlanIds, respStr); + JSONObject resp = JSON.parseObject(respStr); + Integer code = (Integer) resp.get("code"); + if (Objects.nonNull(code) && Objects.equals(code, CodeConstants.SUCCESS)) { + List data = JSON.parseArray(resp.get("data").toString(), SeatPlanStatus.class); + if (CollectionUtils.isEmpty(data)) { + return Lists.newArrayList(); + } + return data; + } + return Lists.newArrayList(); + } private Map buildFWDHeaders(String token) { Map headers = Maps.newHashMap(); 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 new file mode 100644 index 0000000..0df6fc7 --- /dev/null +++ b/script/src/main/java/com/xiang/xservice/fwd/service/impl/PerformServiceImpl.java @@ -0,0 +1,89 @@ +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.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.FwdPerformProjectInfoMapper; +import com.xiang.xservice.fwd.mapper.FwdPerformSeatInfoMapper; +import com.xiang.xservice.fwd.service.IPerformService; +import com.xiang.xservice.fwd.service.IPerformServiceHttp; +import lombok.RequiredArgsConstructor; +import lombok.extern.slf4j.Slf4j; +import org.apache.commons.collections4.CollectionUtils; +import org.springframework.beans.factory.annotation.Value; +import org.springframework.stereotype.Service; + +import java.math.BigDecimal; +import java.util.ArrayList; +import java.util.Collections; +import java.util.List; +import java.util.Objects; + +/** + * @Author: xiang + * @Date: 2025-07-25 15:16 + */ +@Slf4j +@Service +@RequiredArgsConstructor +public class PerformServiceImpl implements IPerformService { + + private final FwdPerformSeatInfoMapper fwdPerformSeatInfoMapper; + private final FwdPerformProjectInfoMapper fwdPerformProjectInfoMapper; + private final IPerformServiceHttp performServiceHttp; + private final DingTalkService dingTalkService; + @Value("${DingTalk.chatId}") + private String chatId; +// private static final List FREQUENT_IDS = List.of(50438548L, 35320661L, 50436621L, 50442739L); + private static final List FREQUENT_IDS = List.of(50438548L, 35320661L); + @Override + public FPerformProjectInfo getPerformByProjectId(Long projectId) { + return fwdPerformProjectInfoMapper.getProjectByProjectId(projectId); + } + + @Override + public List getPerformSeatInfoByProjectId(Long projectId) { + return fwdPerformSeatInfoMapper.getPerformSeatByProjectId(projectId); + } + + @Override + public Boolean createProjectOrder(Long projectId) throws Exception { + FPerformProjectInfo performByProjectId = getPerformByProjectId(projectId); + if (Objects.isNull(performByProjectId)) { + log.info("该projectId:{}暂无演出信息", projectId); + return Boolean.FALSE; + } + List seatInfoByProjectId = getPerformSeatInfoByProjectId(projectId); + if (CollectionUtils.isEmpty(seatInfoByProjectId)) { + log.info("该projectId:{}暂无座位信息", projectId); + return Boolean.FALSE; + } + for (FPerformSeatInfo fPerformSeatInfo : seatInfoByProjectId) { + ProjectOrderCreateReq projectOrderCreateReq = new ProjectOrderCreateReq(); + projectOrderCreateReq.setDeliveryType(1); + projectOrderCreateReq.setContactName("朱吉祥"); + projectOrderCreateReq.setContactPhone("15858717571"); + projectOrderCreateReq.setPayment(fPerformSeatInfo.getPrice().multiply(BigDecimal.valueOf(FREQUENT_IDS.size())).setScale(2)); + projectOrderCreateReq.setTotalPrice(fPerformSeatInfo.getPrice().multiply(BigDecimal.valueOf(FREQUENT_IDS.size())).setScale(2, BigDecimal.ROUND_HALF_UP)); + projectOrderCreateReq.setPerformId(fPerformSeatInfo.getPerformId()); + projectOrderCreateReq.setProjectId(projectId.toString()); + projectOrderCreateReq.setPrivilegeCodeList(new ArrayList<>()); + projectOrderCreateReq.setAudienceCount(FREQUENT_IDS.size()); + projectOrderCreateReq.setFrequentIds(FREQUENT_IDS); + projectOrderCreateReq.setSeatPlanIds(Collections.singletonList(fPerformSeatInfo.getSeatPlanId())); + projectOrderCreateReq.setBlackBox("0"); + projectOrderCreateReq.setCombineTicketVos(null); + projectOrderCreateReq.setOrdinaryTicketVos(null); + ProjectOrderCreateResp projectOrder = performServiceHttp.createProjectOrder(projectOrderCreateReq); + if (Objects.nonNull(projectOrder)) { + log.info("下单成功,订单信息:{}", JSONObject.toJSONString(projectOrder)); + dingTalkService.sendChatMessage(chatId, "订单编号:" + projectOrder.getOrderNo() + "下单成功!!!,请在两分钟之内付款"); + return Boolean.TRUE; + } + } + return Boolean.FALSE; + } +} diff --git a/script/src/main/resources/mapper/fwd/FwdPerformProjectSeatInfoMapper.xml b/script/src/main/resources/mapper/fwd/FwdPerformProjectSeatInfoMapper.xml index 4c55f39..3015f1d 100644 --- a/script/src/main/resources/mapper/fwd/FwdPerformProjectSeatInfoMapper.xml +++ b/script/src/main/resources/mapper/fwd/FwdPerformProjectSeatInfoMapper.xml @@ -28,6 +28,7 @@ + @@ -53,7 +54,8 @@ available_ticket_quantity, available_all_ticket_quantity, sale_time, - project_id + project_id, + sold_out @@ -126,7 +128,10 @@ sale_time, - project_id + project_id, + + + sold_out @@ -197,7 +202,10 @@ #{saleTime}, - #{projectId} + #{projectId}, + + + #{soldOut}, @@ -209,7 +217,7 @@ status, max_sell_stock, sold_stock, left_stock, able_sale_quantity, ash_show, ash_show_desc, selectable, display, available_ticket_quantity, available_all_ticket_quantity, - sale_time, project_id + sale_time, project_id, sold_out ) VALUES @@ -219,7 +227,7 @@ #{item.status}, #{item.maxSellStock}, #{item.soldStock}, #{item.leftStock}, #{item.ableSaleQuantity}, #{item.ashShow}, #{item.ashShowDesc}, #{item.selectable}, #{item.display}, #{item.availableTicketQuantity}, #{item.availableAllTicketQuantity}, - #{item.saleTime}, #{item.projectId} + #{item.saleTime}, #{item.projectId}, #{item.soldOut} ) @@ -251,7 +259,8 @@ available_ticket_quantity = #{availableTicketQuantity}, available_all_ticket_quantity = #{availableAllTicketQuantity}, sale_time = #{saleTime}, - project_id = #{projectId} + project_id = #{projectId}, + sold_out = #{soldOut} WHERE id = #{id} @@ -269,5 +278,10 @@ from fwd_perform_seat_info where seat_plan_id = #{seatId} and perform_id = #{performId} and project_id = #{projectId} + \ No newline at end of file From 58cd81bf7e77098fae005dc62808a1e1503032eb Mon Sep 17 00:00:00 2001 From: Zhujx Date: Fri, 25 Jul 2025 16:40:47 +0800 Subject: [PATCH 12/49] =?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)); + } } From 3b19a75e522e8a27bfb215821fae1e0eb2873bd0 Mon Sep 17 00:00:00 2001 From: Zhujx Date: Fri, 25 Jul 2025 17:10:53 +0800 Subject: [PATCH 13/49] =?UTF-8?q?perf:=E7=88=AC=E8=99=AB=E6=95=B0=E6=8D=AE?= =?UTF-8?q?=E6=8B=89=E5=8F=96=E4=BC=98=E5=8C=96?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../fwd/schedule/PullDataFromFWDJob.java | 345 +++++++++--------- .../fwd/server/FwdOuterController.java | 3 +- .../fwd/service/IPerformServiceHttp.java | 3 +- .../impl/PerformServiceHttpServiceImpl.java | 17 +- .../fwd/service/impl/PerformServiceImpl.java | 3 + 5 files changed, 195 insertions(+), 176 deletions(-) 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 3c9ad08..1d1bfcd 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 @@ -2,6 +2,7 @@ package com.xiang.xservice.fwd.schedule; import com.google.common.collect.Lists; import com.google.common.collect.Maps; +import com.xiang.xservice.basic.common.req.BaseRequest; import com.xiang.xservice.basic.config.MyThreadFactory; import com.xiang.xservice.basic.utils.DateUtils; import com.xiang.xservice.fwd.entity.pojo.FPerformProjectInfo; @@ -69,196 +70,202 @@ public class PullDataFromFWDJob { @Scheduled(cron = "0 0 1 1/1 * ?") @PostMapping("/pullProjectsDataJob") public void pullProjectsDataJob() { - ProjectsResp showProjectsFromHttp = performServiceHttp.getShowProjectsFromHttp(); - if (Objects.isNull(showProjectsFromHttp)) { - return; - } - List projectList = showProjectsFromHttp.getList(); + int i = 0; + while (true) { + i++; + BaseRequest request = new BaseRequest(); + request.setCurrent(i); + request.setPageSize(10 * i); + ProjectsResp showProjectsFromHttp = performServiceHttp.getShowProjectsFromHttp(request); + if (Objects.isNull(showProjectsFromHttp)) { + return; + } + if (CollectionUtils.isEmpty(showProjectsFromHttp.getList())) { + break; + } + List projectList = showProjectsFromHttp.getList(); - List futureList = Lists.newArrayList(); - for (ProjectList project : projectList) { - CompletableFuture future = CompletableFuture.runAsync(() -> { - ProjectInfoResp projectInfoFromHttp = performServiceHttp.getProjectInfoFromHttp(project.getProjectId()); - Perform performsByProjectIdFromHttp = performServiceHttp.getPerformsByProjectIdFromHttp(project.getProjectId()); - if (Objects.nonNull(projectInfoFromHttp) && Objects.nonNull(performsByProjectIdFromHttp)) { - 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())); - } - performProjectInfoMapper.update(projectInfo); - List fPerformSeatInfoInsertList = Lists.newArrayList(); - if (CollectionUtils.isNotEmpty(performsByProjectIdFromHttp.getPerformInfos())) { - for (PerformInfo performInfo : performsByProjectIdFromHttp.getPerformInfos()) { - if (CollectionUtils.isNotEmpty(performInfo.getPerformInfo())) { - for (PerformDetail performDetail : performInfo.getPerformInfo()) { - if (CollectionUtils.isNotEmpty(performDetail.getSeatPlans())) { + List futureList = Lists.newArrayList(); + for (ProjectList project : projectList) { + CompletableFuture future = CompletableFuture.runAsync(() -> { + ProjectInfoResp projectInfoFromHttp = performServiceHttp.getProjectInfoFromHttp(project.getProjectId()); + Perform performsByProjectIdFromHttp = performServiceHttp.getPerformsByProjectIdFromHttp(project.getProjectId()); + if (Objects.nonNull(projectInfoFromHttp) && Objects.nonNull(performsByProjectIdFromHttp)) { + 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())); + } + performProjectInfoMapper.update(projectInfo); + List fPerformSeatInfoInsertList = Lists.newArrayList(); + if (CollectionUtils.isNotEmpty(performsByProjectIdFromHttp.getPerformInfos())) { + for (PerformInfo performInfo : performsByProjectIdFromHttp.getPerformInfos()) { + 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()); - 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.getAshShow()); - fPerformSeatInfo.setSelectable(seatPlan.getSelectable()); - fPerformSeatInfo.setDisplay(seatPlan.getDisplay()); - fPerformSeatInfo.setAvailableTicketQuantity(seatPlan.getAvailableTicketQuantity()); - fPerformSeatInfo.setAvailableAllTicketQuantity(seatPlan.getAvailableAllTicketQuantity()); - if (StringUtils.isNotBlank(seatPlan.getSaleTime())) { - fPerformSeatInfo.setSaleTime(DateUtils.getTimeFromStr(seatPlan.getSaleTime())); - } - fPerformSeatInfo.setProjectId(project.getProjectId()); - FPerformSeatInfo seatInfo = performSeatInfoMapper.getPerformSeatInfoBySeatIdAndPerformIdAndProjectId(fPerformSeatInfo.getSeatPlanId(), fPerformSeatInfo.getPerformId(), project.getProjectId()); - if (Objects.nonNull(seatInfo)) { - fPerformSeatInfo.setId(seatInfo.getId()); - performSeatInfoMapper.update(fPerformSeatInfo); - } else { - fPerformSeatInfoInsertList.add(fPerformSeatInfo); + 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; + } + 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.getAshShow()); + fPerformSeatInfo.setSelectable(seatPlan.getSelectable()); + fPerformSeatInfo.setDisplay(seatPlan.getDisplay()); + fPerformSeatInfo.setAvailableTicketQuantity(seatPlan.getAvailableTicketQuantity()); + fPerformSeatInfo.setAvailableAllTicketQuantity(seatPlan.getAvailableAllTicketQuantity()); + if (StringUtils.isNotBlank(seatPlan.getSaleTime())) { + fPerformSeatInfo.setSaleTime(DateUtils.getTimeFromStr(seatPlan.getSaleTime())); + } + fPerformSeatInfo.setProjectId(project.getProjectId()); + fPerformSeatInfo.setSoldOut(seatMap.get(seatPlan.getSeatPlanId()) ? 1 : 0); + FPerformSeatInfo seatInfo = performSeatInfoMapper.getPerformSeatInfoBySeatIdAndPerformIdAndProjectId(fPerformSeatInfo.getSeatPlanId(), fPerformSeatInfo.getPerformId(), project.getProjectId()); + if (Objects.nonNull(seatInfo)) { + fPerformSeatInfo.setId(seatInfo.getId()); + performSeatInfoMapper.update(fPerformSeatInfo); + } else { + fPerformSeatInfoInsertList.add(fPerformSeatInfo); + } } } } } } } - } - if (CollectionUtils.isNotEmpty(fPerformSeatInfoInsertList)) { - performSeatInfoMapper.batchSave(fPerformSeatInfoInsertList); - } - } 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()); + if (CollectionUtils.isNotEmpty(fPerformSeatInfoInsertList)) { + performSeatInfoMapper.batchSave(fPerformSeatInfoInsertList); + } + } 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); + 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); - List fPerformSeatInfos = Lists.newArrayList(); - if (CollectionUtils.isNotEmpty(performsByProjectIdFromHttp.getPerformInfos())) { - for (PerformInfo performInfo : performsByProjectIdFromHttp.getPerformInfos()) { - 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; + List fPerformSeatInfos = Lists.newArrayList(); + if (CollectionUtils.isNotEmpty(performsByProjectIdFromHttp.getPerformInfos())) { + for (PerformInfo performInfo : performsByProjectIdFromHttp.getPerformInfos()) { + 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; + } + 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.getAshShow()); + fPerformSeatInfo.setSelectable(seatPlan.getSelectable()); + fPerformSeatInfo.setDisplay(seatPlan.getDisplay()); + fPerformSeatInfo.setAvailableTicketQuantity(seatPlan.getAvailableTicketQuantity()); + fPerformSeatInfo.setAvailableAllTicketQuantity(seatPlan.getAvailableAllTicketQuantity()); + if (StringUtils.isNotBlank(seatPlan.getSaleTime())) { + fPerformSeatInfo.setSaleTime(DateUtils.getTimeFromStr(seatPlan.getSaleTime())); + } + fPerformSeatInfo.setProjectId(project.getProjectId()); + fPerformSeatInfo.setSoldOut(seatMap.get(seatPlan.getSeatPlanId()) ? 1 : 0); } - if (!seatMap.get(seatPlan.getSeatPlanId())) { - continue; - } - 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.getAshShow()); - fPerformSeatInfo.setSelectable(seatPlan.getSelectable()); - fPerformSeatInfo.setDisplay(seatPlan.getDisplay()); - fPerformSeatInfo.setAvailableTicketQuantity(seatPlan.getAvailableTicketQuantity()); - fPerformSeatInfo.setAvailableAllTicketQuantity(seatPlan.getAvailableAllTicketQuantity()); - if (StringUtils.isNotBlank(seatPlan.getSaleTime())) { - fPerformSeatInfo.setSaleTime(DateUtils.getTimeFromStr(seatPlan.getSaleTime())); - } - fPerformSeatInfo.setProjectId(project.getProjectId()); } } } } } - } - if (CollectionUtils.isNotEmpty(fPerformSeatInfos)) { - performSeatInfoMapper.batchSave(fPerformSeatInfos); + if (CollectionUtils.isNotEmpty(fPerformSeatInfos)) { + performSeatInfoMapper.batchSave(fPerformSeatInfos); + } } } - } - }, es); - futureList.add(future); + }, es); + futureList.add(future); + } + CompletableFuture[] futureArr = futureList.toArray(futureList.toArray(new CompletableFuture[0])); + CompletableFuture.allOf(futureArr).join(); } - CompletableFuture[] futureArr = futureList.toArray(futureList.toArray(new CompletableFuture[0])); - CompletableFuture.allOf(futureArr).join(); } private Map getSeatMap(List seatPlanIds) { diff --git a/script/src/main/java/com/xiang/xservice/fwd/server/FwdOuterController.java b/script/src/main/java/com/xiang/xservice/fwd/server/FwdOuterController.java index 828e3c0..f812151 100644 --- a/script/src/main/java/com/xiang/xservice/fwd/server/FwdOuterController.java +++ b/script/src/main/java/com/xiang/xservice/fwd/server/FwdOuterController.java @@ -1,5 +1,6 @@ package com.xiang.xservice.fwd.server; +import com.xiang.xservice.basic.common.req.BaseRequest; import com.xiang.xservice.basic.common.resp.Result; import com.xiang.xservice.fwd.entity.resp.http.perform.Perform; import com.xiang.xservice.fwd.entity.resp.http.perform.ProjectsResp; @@ -30,7 +31,7 @@ public class FwdOuterController { @GetMapping("/getShowProjects") public Result getShowProjects() { - ProjectsResp showProjectsFromHttp = performServiceHttp.getShowProjectsFromHttp(); + ProjectsResp showProjectsFromHttp = performServiceHttp.getShowProjectsFromHttp(new BaseRequest()); return Result.success("查询成功!", showProjectsFromHttp); } diff --git a/script/src/main/java/com/xiang/xservice/fwd/service/IPerformServiceHttp.java b/script/src/main/java/com/xiang/xservice/fwd/service/IPerformServiceHttp.java index f292f92..fb6e00f 100644 --- a/script/src/main/java/com/xiang/xservice/fwd/service/IPerformServiceHttp.java +++ b/script/src/main/java/com/xiang/xservice/fwd/service/IPerformServiceHttp.java @@ -1,5 +1,6 @@ package com.xiang.xservice.fwd.service; +import com.xiang.xservice.basic.common.req.BaseRequest; import com.xiang.xservice.fwd.entity.req.ProjectOrderCreateReq; import com.xiang.xservice.fwd.entity.resp.http.perform.Perform; import com.xiang.xservice.fwd.entity.resp.http.perform.ProjectInfoResp; @@ -15,7 +16,7 @@ public interface IPerformServiceHttp { * http请求查询全部演出列表 * @return ProjectsResp */ - ProjectsResp getShowProjectsFromHttp(); + ProjectsResp getShowProjectsFromHttp(BaseRequest request); /** * http请求根据projectId查询演出详情 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 0f3d895..5db16c2 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 @@ -4,6 +4,7 @@ import com.alibaba.fastjson.JSON; import com.alibaba.fastjson.JSONObject; import com.google.common.collect.Lists; import com.google.common.collect.Maps; +import com.xiang.xservice.basic.common.req.BaseRequest; import com.xiang.xservice.basic.utils.HttpUtils; import com.xiang.xservice.basic.utils.JsonUtils; import com.xiang.xservice.fwd.constants.CodeConstants; @@ -31,13 +32,19 @@ import java.util.Objects; public class PerformServiceHttpServiceImpl implements IPerformServiceHttp { @Override - public ProjectsResp getShowProjectsFromHttp() { - int pageNum = 1; - int pageSize = 9999; + public ProjectsResp getShowProjectsFromHttp(BaseRequest request) { Map params = Maps.newHashMap(); params.put("projectModuleId", "7"); - params.put("pageNum", String.valueOf(pageNum)); - params.put("pageSize", String.valueOf(pageSize)); + if (Objects.isNull(request.getCurrent())) { + params.put("pageNum", String.valueOf(1)); + } else { + params.put("pageNum", String.valueOf(request.getCurrent())); + } + if (Objects.isNull(request.getPageSize())) { + params.put("pageSize", String.valueOf(10)); + } else { + params.put("pageSize", String.valueOf(request.getPageSize())); + } String respStr = HttpUtils.doGet(UrlConstants.PROJECTS_URL, buildFWDHeaders(null), params); if (StringUtils.isBlank(respStr)) { return new ProjectsResp(); 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 0df6fc7..a6ad17c 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 @@ -62,6 +62,9 @@ public class PerformServiceImpl implements IPerformService { return Boolean.FALSE; } for (FPerformSeatInfo fPerformSeatInfo : seatInfoByProjectId) { + if (1 == fPerformSeatInfo.getSoldOut()) { + continue; + } ProjectOrderCreateReq projectOrderCreateReq = new ProjectOrderCreateReq(); projectOrderCreateReq.setDeliveryType(1); projectOrderCreateReq.setContactName("朱吉祥"); From 8b7cc57b912aca398e3acbe5129aede885afe25a Mon Sep 17 00:00:00 2001 From: Zhujx Date: Fri, 25 Jul 2025 17:17:24 +0800 Subject: [PATCH 14/49] =?UTF-8?q?perf:=E4=B8=8B=E5=8D=95=E4=BC=98=E5=8C=96?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../xiang/xservice/fwd/service/impl/PerformServiceImpl.java | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) 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 a6ad17c..6ddf423 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 @@ -37,8 +37,7 @@ public class PerformServiceImpl implements IPerformService { private final DingTalkService dingTalkService; @Value("${DingTalk.chatId}") private String chatId; -// private static final List FREQUENT_IDS = List.of(50438548L, 35320661L, 50436621L, 50442739L); - private static final List FREQUENT_IDS = List.of(50438548L, 35320661L); + private static final List FREQUENT_IDS = List.of(50438548L, 35320661L, 50436621L, 50442739L); @Override public FPerformProjectInfo getPerformByProjectId(Long projectId) { return fwdPerformProjectInfoMapper.getProjectByProjectId(projectId); @@ -83,7 +82,8 @@ public class PerformServiceImpl implements IPerformService { ProjectOrderCreateResp projectOrder = performServiceHttp.createProjectOrder(projectOrderCreateReq); if (Objects.nonNull(projectOrder)) { log.info("下单成功,订单信息:{}", JSONObject.toJSONString(projectOrder)); - dingTalkService.sendChatMessage(chatId, "订单编号:" + projectOrder.getOrderNo() + "下单成功!!!,请在两分钟之内付款"); + String msg = "【芬玩岛】下单成功✅✅✅,演出名称:" + performByProjectId.getProjectName() + ",请在2分钟内完成付款!"; + dingTalkService.sendChatMessage(chatId, msg); return Boolean.TRUE; } } From 2491123b5b485eb8b3c18280177c92ee289fc4ad Mon Sep 17 00:00:00 2001 From: Zhujx Date: Fri, 25 Jul 2025 17:28:03 +0800 Subject: [PATCH 15/49] =?UTF-8?q?perf:=E5=AE=9A=E6=97=B6=E4=BB=BB=E5=8A=A1?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../java/com/xiang/xservice/fwd/schedule/FwdImportantMsgJob.java | 1 + 1 file changed, 1 insertion(+) diff --git a/script/src/main/java/com/xiang/xservice/fwd/schedule/FwdImportantMsgJob.java b/script/src/main/java/com/xiang/xservice/fwd/schedule/FwdImportantMsgJob.java index f514c7a..353e9e4 100644 --- a/script/src/main/java/com/xiang/xservice/fwd/schedule/FwdImportantMsgJob.java +++ b/script/src/main/java/com/xiang/xservice/fwd/schedule/FwdImportantMsgJob.java @@ -50,6 +50,7 @@ public class FwdImportantMsgJob { for (FPerformProjectInfo data : saleTodayData) { msg.append("演唱会名称:").append(data.getProjectName()).append("预售时间:").append(DateUtils.getDateTimeStr(data.getPreSaleTime())).append("\n"); } + msg.append("请注意进行数据库配置的更改!"); dingTalkService.sendChatMessage(chatId, msg.toString()); log.info("【芬玩岛】演唱会预售定时任务结束!time:{}", System.currentTimeMillis()); } From f0104bf168bd09f21fce8b48cfa6873833109403 Mon Sep 17 00:00:00 2001 From: Zhujx Date: Fri, 25 Jul 2025 17:36:35 +0800 Subject: [PATCH 16/49] =?UTF-8?q?feat:=E8=87=AA=E5=8A=A8=E4=B8=8B=E5=8D=95?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../xiang/xservice/fwd/schedule/FwdImportantMsgJob.java | 9 +++++++++ 1 file changed, 9 insertions(+) diff --git a/script/src/main/java/com/xiang/xservice/fwd/schedule/FwdImportantMsgJob.java b/script/src/main/java/com/xiang/xservice/fwd/schedule/FwdImportantMsgJob.java index 353e9e4..9f53dd9 100644 --- a/script/src/main/java/com/xiang/xservice/fwd/schedule/FwdImportantMsgJob.java +++ b/script/src/main/java/com/xiang/xservice/fwd/schedule/FwdImportantMsgJob.java @@ -5,6 +5,7 @@ import com.xiang.xservice.basic.utils.DateUtils; import com.xiang.xservice.basic.xservice.dingTalk.service.DingTalkService; import com.xiang.xservice.fwd.entity.pojo.FPerformProjectInfo; import com.xiang.xservice.fwd.mapper.FwdPerformProjectInfoMapper; +import com.xiang.xservice.fwd.service.IPerformService; import lombok.RequiredArgsConstructor; import lombok.extern.slf4j.Slf4j; import org.apache.commons.collections4.CollectionUtils; @@ -28,6 +29,7 @@ import java.util.List; public class FwdImportantMsgJob { private final FwdPerformProjectInfoMapper performProjectInfoMapper; + private final IPerformService performService; private final DingTalkService dingTalkService; @Value("${DingTalk.chatId}") @@ -54,4 +56,11 @@ public class FwdImportantMsgJob { dingTalkService.sendChatMessage(chatId, msg.toString()); log.info("【芬玩岛】演唱会预售定时任务结束!time:{}", System.currentTimeMillis()); } + + @Scheduled(cron = "0 0 12 * * ? ") + public void orderCreateJob() throws Exception { + for (int i = 0; i < 3; i++) { + performService.createProjectOrder(1295746988L); + } + } } From da2bebc80dd2c767d03595219de260d8db208206 Mon Sep 17 00:00:00 2001 From: xiang Date: Sat, 26 Jul 2025 23:33:55 +0800 Subject: [PATCH 17/49] =?UTF-8?q?feat:=E4=BF=9D=E5=AD=98=E9=85=8D=E7=BD=AE?= =?UTF-8?q?=E4=BF=A1=E6=81=AF?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- pom.xml | 57 +-------------- .../xservice/fwd/constants/UrlConstants.java | 5 ++ .../fwd/entity/pojo/FAudienceConfig.java | 19 +++++ .../fwd/entity/pojo/FPerformConfig.java | 17 +++++ .../xservice/fwd/entity/pojo/FUserConfig.java | 15 ++++ .../http/audience/AudienceMemberInfo.java | 18 +++++ .../fwd/mapper/FwdAudienceConfigMapper.java | 17 +++++ .../fwd/mapper/FwdPerformConfigMapper.java | 18 +++++ .../fwd/mapper/FwdUserConfigMapper.java | 18 +++++ .../fwd/schedule/FwdImportantMsgJob.java | 20 ++++++ .../fwd/schedule/PullDataFromFWDJob.java | 33 +++++++++ .../fwd/service/IPerformServiceHttp.java | 8 +++ .../impl/PerformServiceHttpServiceImpl.java | 21 ++++++ .../fwd/service/impl/PerformServiceImpl.java | 70 ++++++++++++------- .../mapper/fwd/FwdAudienceConfigMapper.xml | 56 +++++++++++++++ .../mapper/fwd/FwdPerformConfigMapper.xml | 33 +++++++++ .../fwd/FwdPerformProjectSeatInfoMapper.xml | 2 +- .../mapper/fwd/FwdUserConfigMapper.xml | 22 ++++++ 18 files changed, 366 insertions(+), 83 deletions(-) create mode 100644 script/src/main/java/com/xiang/xservice/fwd/entity/pojo/FAudienceConfig.java create mode 100644 script/src/main/java/com/xiang/xservice/fwd/entity/pojo/FPerformConfig.java create mode 100644 script/src/main/java/com/xiang/xservice/fwd/entity/pojo/FUserConfig.java create mode 100644 script/src/main/java/com/xiang/xservice/fwd/entity/resp/http/audience/AudienceMemberInfo.java create mode 100644 script/src/main/java/com/xiang/xservice/fwd/mapper/FwdAudienceConfigMapper.java create mode 100644 script/src/main/java/com/xiang/xservice/fwd/mapper/FwdPerformConfigMapper.java create mode 100644 script/src/main/java/com/xiang/xservice/fwd/mapper/FwdUserConfigMapper.java create mode 100644 script/src/main/resources/mapper/fwd/FwdAudienceConfigMapper.xml create mode 100644 script/src/main/resources/mapper/fwd/FwdPerformConfigMapper.xml create mode 100644 script/src/main/resources/mapper/fwd/FwdUserConfigMapper.xml diff --git a/pom.xml b/pom.xml index 37732db..7dfe569 100644 --- a/pom.xml +++ b/pom.xml @@ -30,68 +30,13 @@ com.xiang xservice-common - 1.0-snapshot + 1.0.1-snapshot com.xiang xservice-third-part 1.0-snapshot - diff --git a/script/src/main/java/com/xiang/xservice/fwd/constants/UrlConstants.java b/script/src/main/java/com/xiang/xservice/fwd/constants/UrlConstants.java index 8a91e17..c3af89a 100644 --- a/script/src/main/java/com/xiang/xservice/fwd/constants/UrlConstants.java +++ b/script/src/main/java/com/xiang/xservice/fwd/constants/UrlConstants.java @@ -32,4 +32,9 @@ public class UrlConstants { * 获取演出座位信息 */ public final static String PROJECT_SEAT_STATUS_URL = BASE_URL + "/performance/app/project/seatPlanStatus"; + + /** + * 查询观影人列表 + */ + public final static String PROJECT_AUDIENCE_MEMBER_INFO = BASE_URL + "/member/member/bearer/app/list"; } diff --git a/script/src/main/java/com/xiang/xservice/fwd/entity/pojo/FAudienceConfig.java b/script/src/main/java/com/xiang/xservice/fwd/entity/pojo/FAudienceConfig.java new file mode 100644 index 0000000..164e480 --- /dev/null +++ b/script/src/main/java/com/xiang/xservice/fwd/entity/pojo/FAudienceConfig.java @@ -0,0 +1,19 @@ +package com.xiang.xservice.fwd.entity.pojo; + +import lombok.AllArgsConstructor; +import lombok.Data; +import lombok.NoArgsConstructor; + +@Data +@AllArgsConstructor +@NoArgsConstructor +public class FAudienceConfig { + private Long id; + private Integer status; + private Long frequentId; + private String frequentName; + private String frequentNo; + private String frequentPhone; + private Integer delFlag; + private Long userId; +} diff --git a/script/src/main/java/com/xiang/xservice/fwd/entity/pojo/FPerformConfig.java b/script/src/main/java/com/xiang/xservice/fwd/entity/pojo/FPerformConfig.java new file mode 100644 index 0000000..ebfe9e5 --- /dev/null +++ b/script/src/main/java/com/xiang/xservice/fwd/entity/pojo/FPerformConfig.java @@ -0,0 +1,17 @@ +package com.xiang.xservice.fwd.entity.pojo; + +import lombok.AllArgsConstructor; +import lombok.Data; +import lombok.NoArgsConstructor; + +import java.time.LocalDateTime; + +@Data +@AllArgsConstructor +@NoArgsConstructor +public class FPerformConfig { + private Long id; + private Long projectId; + private LocalDateTime time; + private Integer delFlag; +} diff --git a/script/src/main/java/com/xiang/xservice/fwd/entity/pojo/FUserConfig.java b/script/src/main/java/com/xiang/xservice/fwd/entity/pojo/FUserConfig.java new file mode 100644 index 0000000..d3d2d8c --- /dev/null +++ b/script/src/main/java/com/xiang/xservice/fwd/entity/pojo/FUserConfig.java @@ -0,0 +1,15 @@ +package com.xiang.xservice.fwd.entity.pojo; + +import lombok.AllArgsConstructor; +import lombok.Data; +import lombok.NoArgsConstructor; + +@Data +@AllArgsConstructor +@NoArgsConstructor +public class FUserConfig { + private Long id; + private String name; + private String token; + private Integer status; +} diff --git a/script/src/main/java/com/xiang/xservice/fwd/entity/resp/http/audience/AudienceMemberInfo.java b/script/src/main/java/com/xiang/xservice/fwd/entity/resp/http/audience/AudienceMemberInfo.java new file mode 100644 index 0000000..071f427 --- /dev/null +++ b/script/src/main/java/com/xiang/xservice/fwd/entity/resp/http/audience/AudienceMemberInfo.java @@ -0,0 +1,18 @@ +package com.xiang.xservice.fwd.entity.resp.http.audience; + +import lombok.AllArgsConstructor; +import lombok.Data; +import lombok.NoArgsConstructor; + +@Data +@AllArgsConstructor +@NoArgsConstructor +public class AudienceMemberInfo { + private Long frequentContactsId; + private String name; + private String idTypeCode; + private String idType; + private String idTypeDesc; + private String idCard; + private String phone; +} diff --git a/script/src/main/java/com/xiang/xservice/fwd/mapper/FwdAudienceConfigMapper.java b/script/src/main/java/com/xiang/xservice/fwd/mapper/FwdAudienceConfigMapper.java new file mode 100644 index 0000000..fc150da --- /dev/null +++ b/script/src/main/java/com/xiang/xservice/fwd/mapper/FwdAudienceConfigMapper.java @@ -0,0 +1,17 @@ +package com.xiang.xservice.fwd.mapper; + +import com.xiang.xservice.fwd.entity.pojo.FAudienceConfig; +import org.apache.ibatis.annotations.Mapper; +import org.springframework.stereotype.Repository; + +import java.util.List; + +@Mapper +@Repository +public interface FwdAudienceConfigMapper { + + List getAudienceByUserId(Long userId); + + int batchSave(List list); + int delByUserId(Long userId); +} diff --git a/script/src/main/java/com/xiang/xservice/fwd/mapper/FwdPerformConfigMapper.java b/script/src/main/java/com/xiang/xservice/fwd/mapper/FwdPerformConfigMapper.java new file mode 100644 index 0000000..4c1eed3 --- /dev/null +++ b/script/src/main/java/com/xiang/xservice/fwd/mapper/FwdPerformConfigMapper.java @@ -0,0 +1,18 @@ +package com.xiang.xservice.fwd.mapper; + +import com.xiang.xservice.fwd.entity.pojo.FPerformConfig; +import org.apache.ibatis.annotations.Mapper; +import org.springframework.stereotype.Repository; + +import java.util.List; + +@Repository +@Mapper +public interface FwdPerformConfigMapper { + + List getAvailablePerform(); + + int delPerforms(); + + int insertPerforms(List list); +} diff --git a/script/src/main/java/com/xiang/xservice/fwd/mapper/FwdUserConfigMapper.java b/script/src/main/java/com/xiang/xservice/fwd/mapper/FwdUserConfigMapper.java new file mode 100644 index 0000000..85dd40a --- /dev/null +++ b/script/src/main/java/com/xiang/xservice/fwd/mapper/FwdUserConfigMapper.java @@ -0,0 +1,18 @@ +package com.xiang.xservice.fwd.mapper; + +import com.xiang.xservice.fwd.entity.pojo.FUserConfig; +import org.apache.ibatis.annotations.Mapper; +import org.springframework.stereotype.Repository; + +import java.util.List; + +@Repository +@Mapper +public interface FwdUserConfigMapper { + + /** + * 查询可用配置用户 + * @return + */ + List getAvailableUser(); +} diff --git a/script/src/main/java/com/xiang/xservice/fwd/schedule/FwdImportantMsgJob.java b/script/src/main/java/com/xiang/xservice/fwd/schedule/FwdImportantMsgJob.java index 9f53dd9..8430302 100644 --- a/script/src/main/java/com/xiang/xservice/fwd/schedule/FwdImportantMsgJob.java +++ b/script/src/main/java/com/xiang/xservice/fwd/schedule/FwdImportantMsgJob.java @@ -1,9 +1,12 @@ package com.xiang.xservice.fwd.schedule; import com.alibaba.fastjson2.JSONObject; +import com.google.common.collect.Lists; import com.xiang.xservice.basic.utils.DateUtils; 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.mapper.FwdPerformConfigMapper; import com.xiang.xservice.fwd.mapper.FwdPerformProjectInfoMapper; import com.xiang.xservice.fwd.service.IPerformService; import lombok.RequiredArgsConstructor; @@ -17,6 +20,7 @@ import org.springframework.web.bind.annotation.RestController; import java.time.LocalDate; import java.util.List; +import java.util.stream.Collectors; /** * @Author: xiang @@ -29,6 +33,7 @@ import java.util.List; public class FwdImportantMsgJob { private final FwdPerformProjectInfoMapper performProjectInfoMapper; + private final FwdPerformConfigMapper performConfigMapper; private final IPerformService performService; private final DingTalkService dingTalkService; @@ -40,6 +45,9 @@ public class FwdImportantMsgJob { public void preSaleReminderJob() throws Exception { log.info("【芬玩岛】演唱会预售定时任务开始!time:{}", System.currentTimeMillis()); + // 删除配置表里面今日配置的项目信息 + performConfigMapper.delPerforms(); + // 查询所有即将今天预售的演唱会信息 LocalDate now = LocalDate.now(); List saleTodayData = performProjectInfoMapper.getPreSaleTodayData(now.atTime(0, 0, 0), now.atTime(23, 59, 59)); @@ -48,6 +56,17 @@ public class FwdImportantMsgJob { return; } log.info("【芬玩岛】 即将:{}预售的演唱会门票信息:{}", now, JSONObject.toJSONString(saleTodayData)); + List addList = saleTodayData.stream().map(data -> { + FPerformConfig performConfig = new FPerformConfig(); + performConfig.setTime(data.getPreSaleTime()); + performConfig.setProjectId(data.getProjectId()); + performConfig.setDelFlag(0); + return performConfig; + }).collect(Collectors.toList()); + if (CollectionUtils.isNotEmpty(addList)) { + performConfigMapper.insertPerforms(addList); + } + StringBuilder msg = new StringBuilder("今日" + now + "演唱会门票预售信息:\n"); for (FPerformProjectInfo data : saleTodayData) { msg.append("演唱会名称:").append(data.getProjectName()).append("预售时间:").append(DateUtils.getDateTimeStr(data.getPreSaleTime())).append("\n"); @@ -58,6 +77,7 @@ public class FwdImportantMsgJob { } @Scheduled(cron = "0 0 12 * * ? ") + @PostMapping("/orderCreateJob") public void orderCreateJob() throws Exception { for (int i = 0; i < 3; i++) { performService.createProjectOrder(1295746988L); 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 1d1bfcd..19c2e7f 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 @@ -5,8 +5,11 @@ import com.google.common.collect.Maps; import com.xiang.xservice.basic.common.req.BaseRequest; import com.xiang.xservice.basic.config.MyThreadFactory; import com.xiang.xservice.basic.utils.DateUtils; +import com.xiang.xservice.fwd.entity.pojo.FAudienceConfig; import com.xiang.xservice.fwd.entity.pojo.FPerformProjectInfo; import com.xiang.xservice.fwd.entity.pojo.FPerformSeatInfo; +import com.xiang.xservice.fwd.entity.pojo.FUserConfig; +import com.xiang.xservice.fwd.entity.resp.http.audience.AudienceMemberInfo; import com.xiang.xservice.fwd.entity.resp.http.perform.Perform; import com.xiang.xservice.fwd.entity.resp.http.perform.PerformDetail; import com.xiang.xservice.fwd.entity.resp.http.perform.PerformInfo; @@ -15,8 +18,10 @@ 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.FwdAudienceConfigMapper; import com.xiang.xservice.fwd.mapper.FwdPerformProjectInfoMapper; import com.xiang.xservice.fwd.mapper.FwdPerformSeatInfoMapper; +import com.xiang.xservice.fwd.mapper.FwdUserConfigMapper; import com.xiang.xservice.fwd.service.IPerformServiceHttp; import lombok.RequiredArgsConstructor; import lombok.extern.slf4j.Slf4j; @@ -53,6 +58,8 @@ public class PullDataFromFWDJob { private final IPerformServiceHttp performServiceHttp; private final FwdPerformProjectInfoMapper performProjectInfoMapper; private final FwdPerformSeatInfoMapper performSeatInfoMapper; + private final FwdUserConfigMapper userConfigMapper; + private final FwdAudienceConfigMapper audienceConfigMapper; private final ExecutorService es = new ThreadPoolExecutor( @@ -268,6 +275,32 @@ public class PullDataFromFWDJob { } } + @Scheduled(cron = "0 0 0 1 1/1 ? ") + public void pullAudienceMemberInfo() { + List availableUser = userConfigMapper.getAvailableUser(); + if (CollectionUtils.isEmpty(availableUser)) { + return; + } + availableUser.forEach(user -> { + List audienceMemberInfo = performServiceHttp.getAudienceMemberInfo(user.getToken()); + if (CollectionUtils.isNotEmpty(audienceMemberInfo)) { + List list = audienceMemberInfo.stream().map(audience -> { + FAudienceConfig info = new FAudienceConfig(); + info.setDelFlag(0); + info.setFrequentId(audience.getFrequentContactsId()); + info.setFrequentNo(audience.getIdCard()); + info.setFrequentName(audience.getName()); + info.setStatus(1); + info.setFrequentPhone(audience.getPhone()); + info.setUserId(user.getId()); + return info; + }).collect(Collectors.toList()); + audienceConfigMapper.delByUserId(user.getId()); + audienceConfigMapper.batchSave(list); + } + }); + } + 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/service/IPerformServiceHttp.java b/script/src/main/java/com/xiang/xservice/fwd/service/IPerformServiceHttp.java index fb6e00f..bcd389d 100644 --- a/script/src/main/java/com/xiang/xservice/fwd/service/IPerformServiceHttp.java +++ b/script/src/main/java/com/xiang/xservice/fwd/service/IPerformServiceHttp.java @@ -2,6 +2,7 @@ package com.xiang.xservice.fwd.service; import com.xiang.xservice.basic.common.req.BaseRequest; import com.xiang.xservice.fwd.entity.req.ProjectOrderCreateReq; +import com.xiang.xservice.fwd.entity.resp.http.audience.AudienceMemberInfo; import com.xiang.xservice.fwd.entity.resp.http.perform.Perform; import com.xiang.xservice.fwd.entity.resp.http.perform.ProjectInfoResp; import com.xiang.xservice.fwd.entity.resp.http.perform.ProjectOrderCreateResp; @@ -46,5 +47,12 @@ public interface IPerformServiceHttp { */ List getSeatPlanStatusFromHttp(List seatPlanIds); + /** + * http请求查询观影人信息 + * @param token + * @return + */ + List getAudienceMemberInfo(String token); + } 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 5db16c2..8e83af8 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 @@ -10,6 +10,7 @@ import com.xiang.xservice.basic.utils.JsonUtils; import com.xiang.xservice.fwd.constants.CodeConstants; import com.xiang.xservice.fwd.constants.UrlConstants; import com.xiang.xservice.fwd.entity.req.ProjectOrderCreateReq; +import com.xiang.xservice.fwd.entity.resp.http.audience.AudienceMemberInfo; import com.xiang.xservice.fwd.entity.resp.http.perform.Perform; import com.xiang.xservice.fwd.entity.resp.http.perform.ProjectInfoResp; import com.xiang.xservice.fwd.entity.resp.http.perform.ProjectOrderCreateResp; @@ -149,6 +150,26 @@ public class PerformServiceHttpServiceImpl implements IPerformServiceHttp { return Lists.newArrayList(); } + @Override + public List getAudienceMemberInfo(String token) { + Map params = Maps.newHashMap(); + String respStr = HttpUtils.doGet(UrlConstants.PROJECT_AUDIENCE_MEMBER_INFO, buildFWDHeaders(token), params); + if (StringUtils.isBlank(respStr)) { + return Lists.newArrayList(); + } + log.info("【Http请求】 根据token:{}http请求查询观影人信息结果:{}", token, respStr); + JSONObject resp = JSON.parseObject(respStr); + Integer code = (Integer) resp.get("code"); + if (Objects.nonNull(code) && Objects.equals(code, CodeConstants.SUCCESS)) { + List data = JSON.parseArray(resp.get("data").toString(), AudienceMemberInfo.class); + if (CollectionUtils.isEmpty(data)) { + return Lists.newArrayList(); + } + return data; + } + return Lists.newArrayList(); + } + private Map buildFWDHeaders(String token) { Map headers = Maps.newHashMap(); headers.put("content-type", "application/json"); 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 6ddf423..c5ec2ec 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,12 +2,16 @@ 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.FAudienceConfig; import com.xiang.xservice.fwd.entity.pojo.FPerformProjectInfo; import com.xiang.xservice.fwd.entity.pojo.FPerformSeatInfo; +import com.xiang.xservice.fwd.entity.pojo.FUserConfig; import com.xiang.xservice.fwd.entity.req.ProjectOrderCreateReq; import com.xiang.xservice.fwd.entity.resp.http.perform.ProjectOrderCreateResp; +import com.xiang.xservice.fwd.mapper.FwdAudienceConfigMapper; import com.xiang.xservice.fwd.mapper.FwdPerformProjectInfoMapper; import com.xiang.xservice.fwd.mapper.FwdPerformSeatInfoMapper; +import com.xiang.xservice.fwd.mapper.FwdUserConfigMapper; import com.xiang.xservice.fwd.service.IPerformService; import com.xiang.xservice.fwd.service.IPerformServiceHttp; import lombok.RequiredArgsConstructor; @@ -21,6 +25,7 @@ import java.util.ArrayList; import java.util.Collections; import java.util.List; import java.util.Objects; +import java.util.stream.Collectors; /** * @Author: xiang @@ -35,9 +40,11 @@ public class PerformServiceImpl implements IPerformService { private final FwdPerformProjectInfoMapper fwdPerformProjectInfoMapper; private final IPerformServiceHttp performServiceHttp; private final DingTalkService dingTalkService; + private final FwdUserConfigMapper userConfigMapper; + private final FwdAudienceConfigMapper audienceConfigMapper; @Value("${DingTalk.chatId}") private String chatId; - private static final List FREQUENT_IDS = List.of(50438548L, 35320661L, 50436621L, 50442739L); + @Override public FPerformProjectInfo getPerformByProjectId(Long projectId) { return fwdPerformProjectInfoMapper.getProjectByProjectId(projectId); @@ -60,31 +67,42 @@ public class PerformServiceImpl implements IPerformService { log.info("该projectId:{}暂无座位信息", projectId); return Boolean.FALSE; } - for (FPerformSeatInfo fPerformSeatInfo : seatInfoByProjectId) { - if (1 == fPerformSeatInfo.getSoldOut()) { - continue; - } - ProjectOrderCreateReq projectOrderCreateReq = new ProjectOrderCreateReq(); - projectOrderCreateReq.setDeliveryType(1); - projectOrderCreateReq.setContactName("朱吉祥"); - projectOrderCreateReq.setContactPhone("15858717571"); - projectOrderCreateReq.setPayment(fPerformSeatInfo.getPrice().multiply(BigDecimal.valueOf(FREQUENT_IDS.size())).setScale(2)); - projectOrderCreateReq.setTotalPrice(fPerformSeatInfo.getPrice().multiply(BigDecimal.valueOf(FREQUENT_IDS.size())).setScale(2, BigDecimal.ROUND_HALF_UP)); - projectOrderCreateReq.setPerformId(fPerformSeatInfo.getPerformId()); - projectOrderCreateReq.setProjectId(projectId.toString()); - projectOrderCreateReq.setPrivilegeCodeList(new ArrayList<>()); - projectOrderCreateReq.setAudienceCount(FREQUENT_IDS.size()); - projectOrderCreateReq.setFrequentIds(FREQUENT_IDS); - projectOrderCreateReq.setSeatPlanIds(Collections.singletonList(fPerformSeatInfo.getSeatPlanId())); - projectOrderCreateReq.setBlackBox("0"); - projectOrderCreateReq.setCombineTicketVos(null); - projectOrderCreateReq.setOrdinaryTicketVos(null); - ProjectOrderCreateResp projectOrder = performServiceHttp.createProjectOrder(projectOrderCreateReq); - if (Objects.nonNull(projectOrder)) { - log.info("下单成功,订单信息:{}", JSONObject.toJSONString(projectOrder)); - String msg = "【芬玩岛】下单成功✅✅✅,演出名称:" + performByProjectId.getProjectName() + ",请在2分钟内完成付款!"; - dingTalkService.sendChatMessage(chatId, msg); - return Boolean.TRUE; + List availableUser = userConfigMapper.getAvailableUser(); + if (CollectionUtils.isEmpty(availableUser)) { + return Boolean.FALSE; + } + for (FUserConfig userConfig : availableUser) { + List audiences = audienceConfigMapper.getAudienceByUserId(userConfig.getId()); + if (CollectionUtils.isNotEmpty(audiences)) { + List frequentIds = audiences.stream().map(FAudienceConfig::getFrequentId).collect(Collectors.toList()); + for (FPerformSeatInfo fPerformSeatInfo : seatInfoByProjectId) { + if (1 == fPerformSeatInfo.getSoldOut()) { + continue; + } + ProjectOrderCreateReq projectOrderCreateReq = new ProjectOrderCreateReq(); + projectOrderCreateReq.setDeliveryType(1); + projectOrderCreateReq.setContactName("朱吉祥"); + projectOrderCreateReq.setContactPhone("15858717571"); + projectOrderCreateReq.setPayment(fPerformSeatInfo.getPrice().multiply(BigDecimal.valueOf(frequentIds.size())).setScale(2)); + projectOrderCreateReq.setTotalPrice(fPerformSeatInfo.getPrice().multiply(BigDecimal.valueOf(frequentIds.size())).setScale(2, BigDecimal.ROUND_HALF_UP)); + projectOrderCreateReq.setPerformId(fPerformSeatInfo.getPerformId()); + projectOrderCreateReq.setProjectId(projectId.toString()); + projectOrderCreateReq.setPrivilegeCodeList(new ArrayList<>()); + projectOrderCreateReq.setAudienceCount(frequentIds.size()); + projectOrderCreateReq.setFrequentIds(frequentIds); + projectOrderCreateReq.setSeatPlanIds(Collections.singletonList(fPerformSeatInfo.getSeatPlanId())); + projectOrderCreateReq.setBlackBox("0"); + projectOrderCreateReq.setCombineTicketVos(null); + projectOrderCreateReq.setOrdinaryTicketVos(null); + ProjectOrderCreateResp projectOrder = performServiceHttp.createProjectOrder(projectOrderCreateReq); + if (Objects.nonNull(projectOrder)) { + log.info("下单成功,订单信息:{}", JSONObject.toJSONString(projectOrder)); + String msg = "【芬玩岛】下单成功✅✅✅,演出名称:" + performByProjectId.getProjectName() + ",请在2分钟内完成付款!"; + dingTalkService.sendChatMessage(chatId, msg); + return Boolean.TRUE; + } + } + } } return Boolean.FALSE; diff --git a/script/src/main/resources/mapper/fwd/FwdAudienceConfigMapper.xml b/script/src/main/resources/mapper/fwd/FwdAudienceConfigMapper.xml new file mode 100644 index 0000000..3215229 --- /dev/null +++ b/script/src/main/resources/mapper/fwd/FwdAudienceConfigMapper.xml @@ -0,0 +1,56 @@ + + + + + + + + + + + + + + + + + id, frequent_id, frequent_name, status,frequent_no,frequent_phone,del_flag,user_id + + + + delete + from fwd_audience_config + where user_id = #{user_id} + + + + INSERT INTO fwd_audience_config ( + status, + frequent_id, + frequent_name, + frequent_no, + frequent_phone, + del_flag, + user_id + ) + VALUES + + ( + #{item.status}, + #{item.frequentId}, + #{item.frequentName}, + #{item.frequentNo}, + #{item.frequentPhone}, + #{item.delFlag}, + #{item.userId} + ) + + + + + \ No newline at end of file diff --git a/script/src/main/resources/mapper/fwd/FwdPerformConfigMapper.xml b/script/src/main/resources/mapper/fwd/FwdPerformConfigMapper.xml new file mode 100644 index 0000000..c052857 --- /dev/null +++ b/script/src/main/resources/mapper/fwd/FwdPerformConfigMapper.xml @@ -0,0 +1,33 @@ + + + + + + + + + + + + + id, project_id, time, del_flag + + + + update fwd_perform_config set del_flag = 1 where 1=1 + + + + insert into fwd_perform_config(project_id, time, del_flag) + values + + (#{item.projectId}, #{item.time}, #{item.delFlag}) + + + + + \ No newline at end of file diff --git a/script/src/main/resources/mapper/fwd/FwdPerformProjectSeatInfoMapper.xml b/script/src/main/resources/mapper/fwd/FwdPerformProjectSeatInfoMapper.xml index 3015f1d..caf672f 100644 --- a/script/src/main/resources/mapper/fwd/FwdPerformProjectSeatInfoMapper.xml +++ b/script/src/main/resources/mapper/fwd/FwdPerformProjectSeatInfoMapper.xml @@ -281,7 +281,7 @@ \ No newline at end of file diff --git a/script/src/main/resources/mapper/fwd/FwdUserConfigMapper.xml b/script/src/main/resources/mapper/fwd/FwdUserConfigMapper.xml new file mode 100644 index 0000000..055cca7 --- /dev/null +++ b/script/src/main/resources/mapper/fwd/FwdUserConfigMapper.xml @@ -0,0 +1,22 @@ + + + + + + + + + + + + + id, name, token, status + + + + + \ No newline at end of file From 322079079ffec1e07f34a58a38e2cf1bbd2581b2 Mon Sep 17 00:00:00 2001 From: xiang Date: Sun, 27 Jul 2025 00:27:54 +0800 Subject: [PATCH 18/49] =?UTF-8?q?feat:=E5=8A=A8=E6=80=81=E8=B0=83=E5=BA=A6?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- pom.xml | 6 ++ .../fwd/schedule/FwdImportantMsgJob.java | 19 +++--- .../fwd/schedule/PullDataFromFWDJob.java | 3 + .../xservice/fwd/schedule/TicketGrabTask.java | 49 +++++++++++++++ .../fwd/server/FwdOuterController.java | 4 +- .../xservice/fwd/service/IPerformService.java | 2 +- .../fwd/service/impl/PerformServiceImpl.java | 63 ++++++++----------- 7 files changed, 98 insertions(+), 48 deletions(-) create mode 100644 script/src/main/java/com/xiang/xservice/fwd/schedule/TicketGrabTask.java diff --git a/pom.xml b/pom.xml index 7dfe569..6009ed6 100644 --- a/pom.xml +++ b/pom.xml @@ -37,6 +37,12 @@ xservice-third-part 1.0-snapshot + + com.xiang + xservice-schedule-starter + 1.0-snapshot + + diff --git a/script/src/main/java/com/xiang/xservice/fwd/schedule/FwdImportantMsgJob.java b/script/src/main/java/com/xiang/xservice/fwd/schedule/FwdImportantMsgJob.java index 8430302..70606ce 100644 --- a/script/src/main/java/com/xiang/xservice/fwd/schedule/FwdImportantMsgJob.java +++ b/script/src/main/java/com/xiang/xservice/fwd/schedule/FwdImportantMsgJob.java @@ -6,9 +6,12 @@ import com.xiang.xservice.basic.utils.DateUtils; 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.mapper.FwdAudienceConfigMapper; import com.xiang.xservice.fwd.mapper.FwdPerformConfigMapper; import com.xiang.xservice.fwd.mapper.FwdPerformProjectInfoMapper; +import com.xiang.xservice.fwd.mapper.FwdUserConfigMapper; import com.xiang.xservice.fwd.service.IPerformService; +import com.xiang.xservice.schedule.service.IDynamicTaskSchedulerService; import lombok.RequiredArgsConstructor; import lombok.extern.slf4j.Slf4j; import org.apache.commons.collections4.CollectionUtils; @@ -20,6 +23,7 @@ import org.springframework.web.bind.annotation.RestController; import java.time.LocalDate; import java.util.List; +import java.util.UUID; import java.util.stream.Collectors; /** @@ -34,8 +38,11 @@ public class FwdImportantMsgJob { private final FwdPerformProjectInfoMapper performProjectInfoMapper; private final FwdPerformConfigMapper performConfigMapper; - private final IPerformService performService; + private final IDynamicTaskSchedulerService dynamicTaskSchedulerService; private final DingTalkService dingTalkService; + private final FwdUserConfigMapper fwdUserConfigMapper; + private final FwdAudienceConfigMapper fwdAudienceConfigMapper; + private final IPerformService iPerformService; @Value("${DingTalk.chatId}") private String chatId; @@ -70,17 +77,11 @@ public class FwdImportantMsgJob { StringBuilder msg = new StringBuilder("今日" + now + "演唱会门票预售信息:\n"); for (FPerformProjectInfo data : saleTodayData) { msg.append("演唱会名称:").append(data.getProjectName()).append("预售时间:").append(DateUtils.getDateTimeStr(data.getPreSaleTime())).append("\n"); + String taskId = UUID.randomUUID().toString(); + dynamicTaskSchedulerService.schedule(taskId, data.getPreSaleTime(), new TicketGrabTask(fwdUserConfigMapper, fwdAudienceConfigMapper, performConfigMapper, iPerformService)); } msg.append("请注意进行数据库配置的更改!"); dingTalkService.sendChatMessage(chatId, msg.toString()); log.info("【芬玩岛】演唱会预售定时任务结束!time:{}", System.currentTimeMillis()); } - - @Scheduled(cron = "0 0 12 * * ? ") - @PostMapping("/orderCreateJob") - public void orderCreateJob() throws Exception { - for (int i = 0; i < 3; i++) { - performService.createProjectOrder(1295746988L); - } - } } 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 19c2e7f..dd1bd04 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 @@ -275,6 +275,9 @@ public class PullDataFromFWDJob { } } + /** + * 每月拉取观影人数据更新 + */ @Scheduled(cron = "0 0 0 1 1/1 ? ") public void pullAudienceMemberInfo() { List availableUser = userConfigMapper.getAvailableUser(); diff --git a/script/src/main/java/com/xiang/xservice/fwd/schedule/TicketGrabTask.java b/script/src/main/java/com/xiang/xservice/fwd/schedule/TicketGrabTask.java new file mode 100644 index 0000000..da894f4 --- /dev/null +++ b/script/src/main/java/com/xiang/xservice/fwd/schedule/TicketGrabTask.java @@ -0,0 +1,49 @@ +package com.xiang.xservice.fwd.schedule; + +import com.xiang.xservice.fwd.entity.pojo.FAudienceConfig; +import com.xiang.xservice.fwd.entity.pojo.FPerformConfig; +import com.xiang.xservice.fwd.entity.pojo.FPerformProjectInfo; +import com.xiang.xservice.fwd.entity.pojo.FUserConfig; +import com.xiang.xservice.fwd.mapper.FwdAudienceConfigMapper; +import com.xiang.xservice.fwd.mapper.FwdPerformConfigMapper; +import com.xiang.xservice.fwd.mapper.FwdUserConfigMapper; +import com.xiang.xservice.fwd.service.IPerformService; +import lombok.RequiredArgsConstructor; +import lombok.extern.slf4j.Slf4j; +import org.apache.commons.collections4.CollectionUtils; +import org.springframework.stereotype.Component; + +import java.util.List; +import java.util.stream.Collectors; + +@Slf4j +@Component +@RequiredArgsConstructor +public class TicketGrabTask implements Runnable { + + private final FwdUserConfigMapper userConfigMapper; + private final FwdAudienceConfigMapper audienceConfigMapper; + private final FwdPerformConfigMapper performConfigMapper; + private final IPerformService performService; + + @Override + public void run() { + List availableUser = userConfigMapper.getAvailableUser(); + if (CollectionUtils.isEmpty(availableUser)) { + return; + } + for (FUserConfig userConfig : availableUser) { + List audiences = audienceConfigMapper.getAudienceByUserId(userConfig.getId()); + List availablePerform = performConfigMapper.getAvailablePerform(); + if (CollectionUtils.isNotEmpty(availablePerform)) { + for (FPerformConfig performConfig : availablePerform) { + try { + performService.createProjectOrder(performConfig.getProjectId(), audiences.stream().map(FAudienceConfig::getFrequentId).collect(Collectors.toList())); + } catch (Exception e) { + log.error("创建订单失败", e); + } + } + } + } + } +} diff --git a/script/src/main/java/com/xiang/xservice/fwd/server/FwdOuterController.java b/script/src/main/java/com/xiang/xservice/fwd/server/FwdOuterController.java index f812151..15035aa 100644 --- a/script/src/main/java/com/xiang/xservice/fwd/server/FwdOuterController.java +++ b/script/src/main/java/com/xiang/xservice/fwd/server/FwdOuterController.java @@ -28,6 +28,8 @@ public class FwdOuterController { private final IPerformServiceHttp performServiceHttp; private final IPerformService performService; + private static final List FREQUENT_IDS = List.of(50438548L, 35320661L, 50436621L, 50442739L); + @GetMapping("/getShowProjects") public Result getShowProjects() { @@ -49,7 +51,7 @@ public class FwdOuterController { @PostMapping("/createOrder") public Result createOrder(Long projectId) throws Exception { - if (performService.createProjectOrder(projectId)) { + if (performService.createProjectOrder(projectId, FREQUENT_IDS)) { return Result.success("下单成功!"); } return Result.error("下单失败!"); 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 0453b7c..8fb04ca 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 @@ -15,5 +15,5 @@ public interface IPerformService { List getPerformSeatInfoByProjectId(Long projectId); - Boolean createProjectOrder(Long projectId) throws Exception; + Boolean createProjectOrder(Long projectId, List frequentIds) throws Exception; } 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 c5ec2ec..350fed9 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 @@ -56,7 +56,7 @@ public class PerformServiceImpl implements IPerformService { } @Override - public Boolean createProjectOrder(Long projectId) throws Exception { + public Boolean createProjectOrder(Long projectId, List frequentIds) throws Exception { FPerformProjectInfo performByProjectId = getPerformByProjectId(projectId); if (Objects.isNull(performByProjectId)) { log.info("该projectId:{}暂无演出信息", projectId); @@ -67,42 +67,31 @@ public class PerformServiceImpl implements IPerformService { log.info("该projectId:{}暂无座位信息", projectId); return Boolean.FALSE; } - List availableUser = userConfigMapper.getAvailableUser(); - if (CollectionUtils.isEmpty(availableUser)) { - return Boolean.FALSE; - } - for (FUserConfig userConfig : availableUser) { - List audiences = audienceConfigMapper.getAudienceByUserId(userConfig.getId()); - if (CollectionUtils.isNotEmpty(audiences)) { - List frequentIds = audiences.stream().map(FAudienceConfig::getFrequentId).collect(Collectors.toList()); - for (FPerformSeatInfo fPerformSeatInfo : seatInfoByProjectId) { - if (1 == fPerformSeatInfo.getSoldOut()) { - continue; - } - ProjectOrderCreateReq projectOrderCreateReq = new ProjectOrderCreateReq(); - projectOrderCreateReq.setDeliveryType(1); - projectOrderCreateReq.setContactName("朱吉祥"); - projectOrderCreateReq.setContactPhone("15858717571"); - projectOrderCreateReq.setPayment(fPerformSeatInfo.getPrice().multiply(BigDecimal.valueOf(frequentIds.size())).setScale(2)); - projectOrderCreateReq.setTotalPrice(fPerformSeatInfo.getPrice().multiply(BigDecimal.valueOf(frequentIds.size())).setScale(2, BigDecimal.ROUND_HALF_UP)); - projectOrderCreateReq.setPerformId(fPerformSeatInfo.getPerformId()); - projectOrderCreateReq.setProjectId(projectId.toString()); - projectOrderCreateReq.setPrivilegeCodeList(new ArrayList<>()); - projectOrderCreateReq.setAudienceCount(frequentIds.size()); - projectOrderCreateReq.setFrequentIds(frequentIds); - projectOrderCreateReq.setSeatPlanIds(Collections.singletonList(fPerformSeatInfo.getSeatPlanId())); - projectOrderCreateReq.setBlackBox("0"); - projectOrderCreateReq.setCombineTicketVos(null); - projectOrderCreateReq.setOrdinaryTicketVos(null); - ProjectOrderCreateResp projectOrder = performServiceHttp.createProjectOrder(projectOrderCreateReq); - if (Objects.nonNull(projectOrder)) { - log.info("下单成功,订单信息:{}", JSONObject.toJSONString(projectOrder)); - String msg = "【芬玩岛】下单成功✅✅✅,演出名称:" + performByProjectId.getProjectName() + ",请在2分钟内完成付款!"; - dingTalkService.sendChatMessage(chatId, msg); - return Boolean.TRUE; - } - } - + for (FPerformSeatInfo fPerformSeatInfo : seatInfoByProjectId) { + if (1 == fPerformSeatInfo.getSoldOut()) { + continue; + } + ProjectOrderCreateReq projectOrderCreateReq = new ProjectOrderCreateReq(); + projectOrderCreateReq.setDeliveryType(1); + projectOrderCreateReq.setContactName("朱吉祥"); + projectOrderCreateReq.setContactPhone("15858717571"); + projectOrderCreateReq.setPayment(fPerformSeatInfo.getPrice().multiply(BigDecimal.valueOf(frequentIds.size())).setScale(2)); + projectOrderCreateReq.setTotalPrice(fPerformSeatInfo.getPrice().multiply(BigDecimal.valueOf(frequentIds.size())).setScale(2, BigDecimal.ROUND_HALF_UP)); + projectOrderCreateReq.setPerformId(fPerformSeatInfo.getPerformId()); + projectOrderCreateReq.setProjectId(projectId.toString()); + projectOrderCreateReq.setPrivilegeCodeList(new ArrayList<>()); + projectOrderCreateReq.setAudienceCount(frequentIds.size()); + projectOrderCreateReq.setFrequentIds(frequentIds); + projectOrderCreateReq.setSeatPlanIds(Collections.singletonList(fPerformSeatInfo.getSeatPlanId())); + projectOrderCreateReq.setBlackBox("0"); + projectOrderCreateReq.setCombineTicketVos(null); + projectOrderCreateReq.setOrdinaryTicketVos(null); + ProjectOrderCreateResp projectOrder = performServiceHttp.createProjectOrder(projectOrderCreateReq); + if (Objects.nonNull(projectOrder)) { + log.info("下单成功,订单信息:{}", JSONObject.toJSONString(projectOrder)); + String msg = "【芬玩岛】下单成功✅✅✅,演出名称:" + performByProjectId.getProjectName() + ",请在2分钟内完成付款!"; + dingTalkService.sendChatMessage(chatId, msg); + return Boolean.TRUE; } } return Boolean.FALSE; From cba62804323d5337fafdb87332c6fe4f4e1fcd63 Mon Sep 17 00:00:00 2001 From: xiang Date: Sun, 27 Jul 2025 14:11:00 +0800 Subject: [PATCH 19/49] =?UTF-8?q?feat:=E5=8A=A8=E6=80=81=E8=B0=83=E5=BA=A6?= =?UTF-8?q?=E4=BC=98=E5=8C=96?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- pom.xml | 2 +- .../fwd/entity/param/FwdOrderTaskParam.java | 12 +++++++ .../fwd/schedule/FwdImportantMsgJob.java | 9 +++--- .../xservice/fwd/schedule/TicketGrabTask.java | 32 +++++++++---------- .../src/main/resources/application-local.yml | 14 +++++++- 5 files changed, 46 insertions(+), 23 deletions(-) create mode 100644 script/src/main/java/com/xiang/xservice/fwd/entity/param/FwdOrderTaskParam.java diff --git a/pom.xml b/pom.xml index 6009ed6..6ebf149 100644 --- a/pom.xml +++ b/pom.xml @@ -40,7 +40,7 @@ com.xiang xservice-schedule-starter - 1.0-snapshot + 1.1-snapshot diff --git a/script/src/main/java/com/xiang/xservice/fwd/entity/param/FwdOrderTaskParam.java b/script/src/main/java/com/xiang/xservice/fwd/entity/param/FwdOrderTaskParam.java new file mode 100644 index 0000000..8975931 --- /dev/null +++ b/script/src/main/java/com/xiang/xservice/fwd/entity/param/FwdOrderTaskParam.java @@ -0,0 +1,12 @@ +package com.xiang.xservice.fwd.entity.param; + +import lombok.AllArgsConstructor; +import lombok.Data; +import lombok.NoArgsConstructor; + +@Data +@AllArgsConstructor +@NoArgsConstructor +public class FwdOrderTaskParam { + private Long projectId; +} diff --git a/script/src/main/java/com/xiang/xservice/fwd/schedule/FwdImportantMsgJob.java b/script/src/main/java/com/xiang/xservice/fwd/schedule/FwdImportantMsgJob.java index 70606ce..9fc56ef 100644 --- a/script/src/main/java/com/xiang/xservice/fwd/schedule/FwdImportantMsgJob.java +++ b/script/src/main/java/com/xiang/xservice/fwd/schedule/FwdImportantMsgJob.java @@ -1,9 +1,9 @@ package com.xiang.xservice.fwd.schedule; import com.alibaba.fastjson2.JSONObject; -import com.google.common.collect.Lists; import com.xiang.xservice.basic.utils.DateUtils; import com.xiang.xservice.basic.xservice.dingTalk.service.DingTalkService; +import com.xiang.xservice.fwd.entity.param.FwdOrderTaskParam; import com.xiang.xservice.fwd.entity.pojo.FPerformConfig; import com.xiang.xservice.fwd.entity.pojo.FPerformProjectInfo; import com.xiang.xservice.fwd.mapper.FwdAudienceConfigMapper; @@ -11,6 +11,7 @@ import com.xiang.xservice.fwd.mapper.FwdPerformConfigMapper; import com.xiang.xservice.fwd.mapper.FwdPerformProjectInfoMapper; import com.xiang.xservice.fwd.mapper.FwdUserConfigMapper; import com.xiang.xservice.fwd.service.IPerformService; +import com.xiang.xservice.schedule.entity.TaskConfig; import com.xiang.xservice.schedule.service.IDynamicTaskSchedulerService; import lombok.RequiredArgsConstructor; import lombok.extern.slf4j.Slf4j; @@ -23,7 +24,6 @@ import org.springframework.web.bind.annotation.RestController; import java.time.LocalDate; import java.util.List; -import java.util.UUID; import java.util.stream.Collectors; /** @@ -77,8 +77,9 @@ public class FwdImportantMsgJob { StringBuilder msg = new StringBuilder("今日" + now + "演唱会门票预售信息:\n"); for (FPerformProjectInfo data : saleTodayData) { msg.append("演唱会名称:").append(data.getProjectName()).append("预售时间:").append(DateUtils.getDateTimeStr(data.getPreSaleTime())).append("\n"); - String taskId = UUID.randomUUID().toString(); - dynamicTaskSchedulerService.schedule(taskId, data.getPreSaleTime(), new TicketGrabTask(fwdUserConfigMapper, fwdAudienceConfigMapper, performConfigMapper, iPerformService)); + dynamicTaskSchedulerService.schedule( + new TaskConfig(System.currentTimeMillis(), data.getProjectName(), data.getPreSaleTime()), + new TicketGrabTask(fwdUserConfigMapper, fwdAudienceConfigMapper, iPerformService, new FwdOrderTaskParam(data.getProjectId()))); } msg.append("请注意进行数据库配置的更改!"); dingTalkService.sendChatMessage(chatId, msg.toString()); diff --git a/script/src/main/java/com/xiang/xservice/fwd/schedule/TicketGrabTask.java b/script/src/main/java/com/xiang/xservice/fwd/schedule/TicketGrabTask.java index da894f4..f478e7d 100644 --- a/script/src/main/java/com/xiang/xservice/fwd/schedule/TicketGrabTask.java +++ b/script/src/main/java/com/xiang/xservice/fwd/schedule/TicketGrabTask.java @@ -1,48 +1,46 @@ package com.xiang.xservice.fwd.schedule; +import com.alibaba.fastjson.JSON; +import com.xiang.xservice.fwd.entity.param.FwdOrderTaskParam; import com.xiang.xservice.fwd.entity.pojo.FAudienceConfig; -import com.xiang.xservice.fwd.entity.pojo.FPerformConfig; -import com.xiang.xservice.fwd.entity.pojo.FPerformProjectInfo; import com.xiang.xservice.fwd.entity.pojo.FUserConfig; import com.xiang.xservice.fwd.mapper.FwdAudienceConfigMapper; -import com.xiang.xservice.fwd.mapper.FwdPerformConfigMapper; import com.xiang.xservice.fwd.mapper.FwdUserConfigMapper; import com.xiang.xservice.fwd.service.IPerformService; -import lombok.RequiredArgsConstructor; import lombok.extern.slf4j.Slf4j; import org.apache.commons.collections4.CollectionUtils; -import org.springframework.stereotype.Component; import java.util.List; import java.util.stream.Collectors; @Slf4j -@Component -@RequiredArgsConstructor public class TicketGrabTask implements Runnable { private final FwdUserConfigMapper userConfigMapper; private final FwdAudienceConfigMapper audienceConfigMapper; - private final FwdPerformConfigMapper performConfigMapper; private final IPerformService performService; + private final FwdOrderTaskParam param; + + public TicketGrabTask(FwdUserConfigMapper userConfigMapper, FwdAudienceConfigMapper audienceConfigMapper, IPerformService performService, FwdOrderTaskParam param) { + this.userConfigMapper = userConfigMapper; + this.audienceConfigMapper = audienceConfigMapper; + this.performService = performService; + this.param = param; + } @Override public void run() { + log.info("【TicketGrabTask】 run start. 获取到参数:{}", JSON.toJSONString(param)); List availableUser = userConfigMapper.getAvailableUser(); if (CollectionUtils.isEmpty(availableUser)) { return; } for (FUserConfig userConfig : availableUser) { List audiences = audienceConfigMapper.getAudienceByUserId(userConfig.getId()); - List availablePerform = performConfigMapper.getAvailablePerform(); - if (CollectionUtils.isNotEmpty(availablePerform)) { - for (FPerformConfig performConfig : availablePerform) { - try { - performService.createProjectOrder(performConfig.getProjectId(), audiences.stream().map(FAudienceConfig::getFrequentId).collect(Collectors.toList())); - } catch (Exception e) { - log.error("创建订单失败", e); - } - } + try { + performService.createProjectOrder(param.getProjectId(), audiences.stream().map(FAudienceConfig::getFrequentId).collect(Collectors.toList())); + } catch (Exception e) { + log.error("创建订单失败", e); } } } diff --git a/script/src/main/resources/application-local.yml b/script/src/main/resources/application-local.yml index f679f23..535cc9a 100644 --- a/script/src/main/resources/application-local.yml +++ b/script/src/main/resources/application-local.yml @@ -3,4 +3,16 @@ spring: url: jdbc:mysql://120.27.153.87:3306/xservice-script-test?useUnicode=true&characterEncoding=utf-8&serverTimezone=Asia/Shanghai&allowMultiQueries=true username: root password: 123456 - driver-class-name: com.mysql.cj.jdbc.Driver \ No newline at end of file + driver-class-name: com.mysql.cj.jdbc.Driver + redis: + host: r-bp1dqqbzlfw04fldp3pd.redis.rds.aliyuncs.com + port: 6379 + password: Admin@123 # 如果无密码可以省略 + database: 0 + timeout: 5000 + lettuce: + pool: + max-active: 8 + max-idle: 8 + min-idle: 0 + max-wait: 1000 \ No newline at end of file From 162e7191eaad7ec8cc1aa213d4b7faccda00b7a7 Mon Sep 17 00:00:00 2001 From: xiang Date: Sun, 27 Jul 2025 16:50:19 +0800 Subject: [PATCH 20/49] =?UTF-8?q?feat:=E5=8A=A8=E6=80=81=E8=B0=83=E5=BA=A6?= =?UTF-8?q?=E4=BC=98=E5=8C=96?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../com/xiang/xservice/fwd/schedule/FwdImportantMsgJob.java | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/script/src/main/java/com/xiang/xservice/fwd/schedule/FwdImportantMsgJob.java b/script/src/main/java/com/xiang/xservice/fwd/schedule/FwdImportantMsgJob.java index 9fc56ef..38f6cbd 100644 --- a/script/src/main/java/com/xiang/xservice/fwd/schedule/FwdImportantMsgJob.java +++ b/script/src/main/java/com/xiang/xservice/fwd/schedule/FwdImportantMsgJob.java @@ -11,8 +11,8 @@ import com.xiang.xservice.fwd.mapper.FwdPerformConfigMapper; import com.xiang.xservice.fwd.mapper.FwdPerformProjectInfoMapper; import com.xiang.xservice.fwd.mapper.FwdUserConfigMapper; import com.xiang.xservice.fwd.service.IPerformService; +import com.xiang.xservice.schedule.core.DynamicTaskScheduler; import com.xiang.xservice.schedule.entity.TaskConfig; -import com.xiang.xservice.schedule.service.IDynamicTaskSchedulerService; import lombok.RequiredArgsConstructor; import lombok.extern.slf4j.Slf4j; import org.apache.commons.collections4.CollectionUtils; @@ -38,7 +38,7 @@ public class FwdImportantMsgJob { private final FwdPerformProjectInfoMapper performProjectInfoMapper; private final FwdPerformConfigMapper performConfigMapper; - private final IDynamicTaskSchedulerService dynamicTaskSchedulerService; + private final DynamicTaskScheduler dynamicTaskScheduler; private final DingTalkService dingTalkService; private final FwdUserConfigMapper fwdUserConfigMapper; private final FwdAudienceConfigMapper fwdAudienceConfigMapper; @@ -77,7 +77,7 @@ public class FwdImportantMsgJob { StringBuilder msg = new StringBuilder("今日" + now + "演唱会门票预售信息:\n"); for (FPerformProjectInfo data : saleTodayData) { msg.append("演唱会名称:").append(data.getProjectName()).append("预售时间:").append(DateUtils.getDateTimeStr(data.getPreSaleTime())).append("\n"); - dynamicTaskSchedulerService.schedule( + dynamicTaskScheduler.schedule( new TaskConfig(System.currentTimeMillis(), data.getProjectName(), data.getPreSaleTime()), new TicketGrabTask(fwdUserConfigMapper, fwdAudienceConfigMapper, iPerformService, new FwdOrderTaskParam(data.getProjectId()))); } From fbecd0a03a63be1e7ca9a154e7f32cfdab94b76b Mon Sep 17 00:00:00 2001 From: xiang Date: Sun, 27 Jul 2025 23:16:14 +0800 Subject: [PATCH 21/49] =?UTF-8?q?feat:=E6=8C=81=E4=B9=85=E5=8C=96=E4=BB=BB?= =?UTF-8?q?=E5=8A=A1?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- pom.xml | 2 +- .../com/xiang/ServiceScriptApplication.java | 2 ++ .../fwd/entity/param/FwdOrderTaskParam.java | 1 + .../fwd/schedule/FwdImportantMsgJob.java | 28 +++++++++++++++++-- .../xservice/fwd/schedule/TicketGrabTask.java | 12 ++++++-- 5 files changed, 40 insertions(+), 5 deletions(-) diff --git a/pom.xml b/pom.xml index 6ebf149..903ba07 100644 --- a/pom.xml +++ b/pom.xml @@ -30,7 +30,7 @@ com.xiang xservice-common - 1.0.1-snapshot + 1.0.2-SNAPSHOT com.xiang diff --git a/script/src/main/java/com/xiang/ServiceScriptApplication.java b/script/src/main/java/com/xiang/ServiceScriptApplication.java index 835c988..5fa3553 100644 --- a/script/src/main/java/com/xiang/ServiceScriptApplication.java +++ b/script/src/main/java/com/xiang/ServiceScriptApplication.java @@ -1,5 +1,6 @@ package com.xiang; +import org.mybatis.spring.annotation.MapperScan; import org.springframework.boot.SpringApplication; import org.springframework.boot.autoconfigure.SpringBootApplication; import org.springframework.scheduling.annotation.EnableScheduling; @@ -10,6 +11,7 @@ import org.springframework.scheduling.annotation.EnableScheduling; */ @SpringBootApplication @EnableScheduling +@MapperScan("com.xiang.xservice.fwd.mapper") public class ServiceScriptApplication { public static void main(String[] args) { SpringApplication.run(ServiceScriptApplication.class, args); diff --git a/script/src/main/java/com/xiang/xservice/fwd/entity/param/FwdOrderTaskParam.java b/script/src/main/java/com/xiang/xservice/fwd/entity/param/FwdOrderTaskParam.java index 8975931..cfaee02 100644 --- a/script/src/main/java/com/xiang/xservice/fwd/entity/param/FwdOrderTaskParam.java +++ b/script/src/main/java/com/xiang/xservice/fwd/entity/param/FwdOrderTaskParam.java @@ -9,4 +9,5 @@ import lombok.NoArgsConstructor; @NoArgsConstructor public class FwdOrderTaskParam { private Long projectId; + private Long taskId; } diff --git a/script/src/main/java/com/xiang/xservice/fwd/schedule/FwdImportantMsgJob.java b/script/src/main/java/com/xiang/xservice/fwd/schedule/FwdImportantMsgJob.java index 38f6cbd..11d95e0 100644 --- a/script/src/main/java/com/xiang/xservice/fwd/schedule/FwdImportantMsgJob.java +++ b/script/src/main/java/com/xiang/xservice/fwd/schedule/FwdImportantMsgJob.java @@ -2,6 +2,7 @@ package com.xiang.xservice.fwd.schedule; import com.alibaba.fastjson2.JSONObject; import com.xiang.xservice.basic.utils.DateUtils; +import com.xiang.xservice.basic.utils.PrimaryKeyUtils; import com.xiang.xservice.basic.xservice.dingTalk.service.DingTalkService; import com.xiang.xservice.fwd.entity.param.FwdOrderTaskParam; import com.xiang.xservice.fwd.entity.pojo.FPerformConfig; @@ -12,7 +13,11 @@ import com.xiang.xservice.fwd.mapper.FwdPerformProjectInfoMapper; import com.xiang.xservice.fwd.mapper.FwdUserConfigMapper; import com.xiang.xservice.fwd.service.IPerformService; import com.xiang.xservice.schedule.core.DynamicTaskScheduler; +import com.xiang.xservice.schedule.entity.ScheduledTaskEntity; import com.xiang.xservice.schedule.entity.TaskConfig; +import com.xiang.xservice.schedule.enums.TaskGroupEnum; +import com.xiang.xservice.schedule.enums.TaskStatusEnum; +import com.xiang.xservice.schedule.service.IDynamicTaskSchedulerService; import lombok.RequiredArgsConstructor; import lombok.extern.slf4j.Slf4j; import org.apache.commons.collections4.CollectionUtils; @@ -23,6 +28,7 @@ import org.springframework.web.bind.annotation.PostMapping; import org.springframework.web.bind.annotation.RestController; import java.time.LocalDate; +import java.time.LocalDateTime; import java.util.List; import java.util.stream.Collectors; @@ -43,6 +49,7 @@ public class FwdImportantMsgJob { private final FwdUserConfigMapper fwdUserConfigMapper; private final FwdAudienceConfigMapper fwdAudienceConfigMapper; private final IPerformService iPerformService; + private final IDynamicTaskSchedulerService dynamicTaskSchedulerService; @Value("${DingTalk.chatId}") private String chatId; @@ -77,12 +84,29 @@ public class FwdImportantMsgJob { StringBuilder msg = new StringBuilder("今日" + now + "演唱会门票预售信息:\n"); for (FPerformProjectInfo data : saleTodayData) { msg.append("演唱会名称:").append(data.getProjectName()).append("预售时间:").append(DateUtils.getDateTimeStr(data.getPreSaleTime())).append("\n"); + long taskId = PrimaryKeyUtils.snowflakeId(); dynamicTaskScheduler.schedule( - new TaskConfig(System.currentTimeMillis(), data.getProjectName(), data.getPreSaleTime()), - new TicketGrabTask(fwdUserConfigMapper, fwdAudienceConfigMapper, iPerformService, new FwdOrderTaskParam(data.getProjectId()))); + new TaskConfig(taskId, "芬玩岛演唱会抢票-【" + data.getProjectName() + "】", TaskGroupEnum.SERVICE_FWD_SCHEDULE.getCode(), + data.getPreSaleTime(), null), + new TicketGrabTask(fwdUserConfigMapper, fwdAudienceConfigMapper, iPerformService, + new FwdOrderTaskParam(data.getProjectId(), taskId), dynamicTaskSchedulerService)); + savaTask(data, taskId); } msg.append("请注意进行数据库配置的更改!"); dingTalkService.sendChatMessage(chatId, msg.toString()); log.info("【芬玩岛】演唱会预售定时任务结束!time:{}", System.currentTimeMillis()); } + + private void savaTask(FPerformProjectInfo data, long taskId) { + ScheduledTaskEntity entity = new ScheduledTaskEntity(); + entity.setId(taskId); + entity.setTaskName("芬玩岛演唱会抢票-【" + data.getProjectName() + "】"); + entity.setTaskGroup(TaskGroupEnum.SERVICE_FWD_SCHEDULE.getCode()); + entity.setRunTime(data.getPreSaleTime()); + entity.setStatus(TaskStatusEnum.UN_START.getCode()); + entity.setParameters(null); + entity.setCreatedTime(LocalDateTime.now()); + entity.setUpdatedTime(LocalDateTime.now()); + dynamicTaskSchedulerService.saveTask(entity); + } } diff --git a/script/src/main/java/com/xiang/xservice/fwd/schedule/TicketGrabTask.java b/script/src/main/java/com/xiang/xservice/fwd/schedule/TicketGrabTask.java index f478e7d..418a611 100644 --- a/script/src/main/java/com/xiang/xservice/fwd/schedule/TicketGrabTask.java +++ b/script/src/main/java/com/xiang/xservice/fwd/schedule/TicketGrabTask.java @@ -7,6 +7,7 @@ import com.xiang.xservice.fwd.entity.pojo.FUserConfig; import com.xiang.xservice.fwd.mapper.FwdAudienceConfigMapper; import com.xiang.xservice.fwd.mapper.FwdUserConfigMapper; import com.xiang.xservice.fwd.service.IPerformService; +import com.xiang.xservice.schedule.service.IDynamicTaskSchedulerService; import lombok.extern.slf4j.Slf4j; import org.apache.commons.collections4.CollectionUtils; @@ -20,17 +21,22 @@ public class TicketGrabTask implements Runnable { private final FwdAudienceConfigMapper audienceConfigMapper; private final IPerformService performService; private final FwdOrderTaskParam param; + private final IDynamicTaskSchedulerService dynamicTaskSchedulerService; - public TicketGrabTask(FwdUserConfigMapper userConfigMapper, FwdAudienceConfigMapper audienceConfigMapper, IPerformService performService, FwdOrderTaskParam param) { + public TicketGrabTask(FwdUserConfigMapper userConfigMapper, FwdAudienceConfigMapper audienceConfigMapper, + IPerformService performService, FwdOrderTaskParam param, + IDynamicTaskSchedulerService dynamicTaskSchedulerService) { this.userConfigMapper = userConfigMapper; this.audienceConfigMapper = audienceConfigMapper; this.performService = performService; this.param = param; + this.dynamicTaskSchedulerService = dynamicTaskSchedulerService; } @Override public void run() { log.info("【TicketGrabTask】 run start. 获取到参数:{}", JSON.toJSONString(param)); + dynamicTaskSchedulerService.updateProcess(param.getTaskId()); List availableUser = userConfigMapper.getAvailableUser(); if (CollectionUtils.isEmpty(availableUser)) { return; @@ -38,7 +44,9 @@ public class TicketGrabTask implements Runnable { for (FUserConfig userConfig : availableUser) { List audiences = audienceConfigMapper.getAudienceByUserId(userConfig.getId()); try { - performService.createProjectOrder(param.getProjectId(), audiences.stream().map(FAudienceConfig::getFrequentId).collect(Collectors.toList())); + if (performService.createProjectOrder(param.getProjectId(), audiences.stream().map(FAudienceConfig::getFrequentId).collect(Collectors.toList()))) { + dynamicTaskSchedulerService.finishTask(param.getTaskId()); + } } catch (Exception e) { log.error("创建订单失败", e); } From d34cc44950fa6f47f03fe9b71148a8f08f8a7287 Mon Sep 17 00:00:00 2001 From: xiang Date: Sun, 27 Jul 2025 23:31:49 +0800 Subject: [PATCH 22/49] =?UTF-8?q?feat:mapperScan=E5=AF=BC=E5=85=A5?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../src/main/java/com/xiang/ServiceScriptApplication.java | 6 +++++- .../xservice/fwd/service/impl/PerformServiceImpl.java | 7 ------- 2 files changed, 5 insertions(+), 8 deletions(-) diff --git a/script/src/main/java/com/xiang/ServiceScriptApplication.java b/script/src/main/java/com/xiang/ServiceScriptApplication.java index 5fa3553..2f02538 100644 --- a/script/src/main/java/com/xiang/ServiceScriptApplication.java +++ b/script/src/main/java/com/xiang/ServiceScriptApplication.java @@ -11,7 +11,11 @@ import org.springframework.scheduling.annotation.EnableScheduling; */ @SpringBootApplication @EnableScheduling -@MapperScan("com.xiang.xservice.fwd.mapper") +@MapperScan(basePackages = { + "com.xiang.xservice.fwd.mapper", + "com.xiang.xservice.glados.repository", + "com.xiang.xservice.xb.repository" +}) public class ServiceScriptApplication { public static void main(String[] args) { SpringApplication.run(ServiceScriptApplication.class, args); 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 350fed9..cb64e7c 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,16 +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.FAudienceConfig; import com.xiang.xservice.fwd.entity.pojo.FPerformProjectInfo; import com.xiang.xservice.fwd.entity.pojo.FPerformSeatInfo; -import com.xiang.xservice.fwd.entity.pojo.FUserConfig; import com.xiang.xservice.fwd.entity.req.ProjectOrderCreateReq; import com.xiang.xservice.fwd.entity.resp.http.perform.ProjectOrderCreateResp; -import com.xiang.xservice.fwd.mapper.FwdAudienceConfigMapper; import com.xiang.xservice.fwd.mapper.FwdPerformProjectInfoMapper; import com.xiang.xservice.fwd.mapper.FwdPerformSeatInfoMapper; -import com.xiang.xservice.fwd.mapper.FwdUserConfigMapper; import com.xiang.xservice.fwd.service.IPerformService; import com.xiang.xservice.fwd.service.IPerformServiceHttp; import lombok.RequiredArgsConstructor; @@ -25,7 +21,6 @@ import java.util.ArrayList; import java.util.Collections; import java.util.List; import java.util.Objects; -import java.util.stream.Collectors; /** * @Author: xiang @@ -40,8 +35,6 @@ public class PerformServiceImpl implements IPerformService { private final FwdPerformProjectInfoMapper fwdPerformProjectInfoMapper; private final IPerformServiceHttp performServiceHttp; private final DingTalkService dingTalkService; - private final FwdUserConfigMapper userConfigMapper; - private final FwdAudienceConfigMapper audienceConfigMapper; @Value("${DingTalk.chatId}") private String chatId; From e199d144a3df5ebde1d3476a624aae50a0b11dec Mon Sep 17 00:00:00 2001 From: xiang Date: Sun, 27 Jul 2025 23:56:46 +0800 Subject: [PATCH 23/49] =?UTF-8?q?feat:pom=E7=89=88=E6=9C=AC=E4=BF=AE?= =?UTF-8?q?=E5=A4=8D?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- pom.xml | 2 +- script/src/main/resources/application.yml | 1 + 2 files changed, 2 insertions(+), 1 deletion(-) diff --git a/pom.xml b/pom.xml index 903ba07..b0812cf 100644 --- a/pom.xml +++ b/pom.xml @@ -7,7 +7,7 @@ com.xiang xservice-basic - 1.0-SNAPSHOT + 1.1-SNAPSHOT com.xiang diff --git a/script/src/main/resources/application.yml b/script/src/main/resources/application.yml index cdfd58a..c4fe5ce 100644 --- a/script/src/main/resources/application.yml +++ b/script/src/main/resources/application.yml @@ -1,6 +1,7 @@ mybatis: mapper-locations: - classpath*:mapper/*/*.xml + - classpath*:mapper/*.xml configuration: map-underscore-to-camel-case: true From 8f955e63e129385f24d6f615606081800acbe2bd Mon Sep 17 00:00:00 2001 From: xiang Date: Mon, 28 Jul 2025 00:15:47 +0800 Subject: [PATCH 24/49] =?UTF-8?q?feat:redis=E9=9B=86=E6=88=90?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- pom.xml | 5 +++++ .../java/com/xiang/xservice/IndexController.java | 12 ++++++++++++ 2 files changed, 17 insertions(+) diff --git a/pom.xml b/pom.xml index b0812cf..7810b90 100644 --- a/pom.xml +++ b/pom.xml @@ -42,6 +42,11 @@ xservice-schedule-starter 1.1-snapshot + + com.xiang + xservice-cache + 1.0-SNAPSHOT + diff --git a/script/src/main/java/com/xiang/xservice/IndexController.java b/script/src/main/java/com/xiang/xservice/IndexController.java index 482378a..a2bbe3d 100644 --- a/script/src/main/java/com/xiang/xservice/IndexController.java +++ b/script/src/main/java/com/xiang/xservice/IndexController.java @@ -1,7 +1,9 @@ package com.xiang.xservice; import com.xiang.xservice.basic.common.resp.Result; +import lombok.RequiredArgsConstructor; import org.springframework.beans.factory.annotation.Value; +import org.springframework.data.redis.core.RedisTemplate; import org.springframework.web.bind.annotation.GetMapping; import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.RestController; @@ -12,8 +14,11 @@ import org.springframework.web.bind.annotation.RestController; */ @RestController @RequestMapping("/system/demo") +@RequiredArgsConstructor public class IndexController { + private final RedisTemplate redisTemplate; + @Value("${spring.profiles.active}") private String env; @@ -28,4 +33,11 @@ public class IndexController { String msg = "已激活环境:" + env + ",web端口启用:" + port + "使用datasource:" + url; return Result.success(msg); } + + @GetMapping("/redisTest") + private Result redisTest() { + redisTemplate.opsForValue().set("2222", "231"); + + return Result.success("redis获取到key为test的值为:" + redisTemplate.opsForValue().get("2222")); + } } From 9c2ae604e60c9f0950b344f58e5748db956a9874 Mon Sep 17 00:00:00 2001 From: Zhujx Date: Mon, 28 Jul 2025 15:02:11 +0800 Subject: [PATCH 25/49] =?UTF-8?q?feat:=E5=88=9D=E5=A7=8B=E5=8C=96=E8=B0=83?= =?UTF-8?q?=E5=BA=A6?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../fwd/schedule/FwdImportantMsgJob.java | 34 +++++++++++++++--- .../xservice/fwd/schedule/TicketGrabTask.java | 36 +++++++++++-------- .../xb/schedule/jntyzx/QueryVenueJob.java | 24 ------------- .../src/main/resources/application-test.yml | 2 +- 4 files changed, 53 insertions(+), 43 deletions(-) delete mode 100644 script/src/main/java/com/xiang/xservice/xb/schedule/jntyzx/QueryVenueJob.java diff --git a/script/src/main/java/com/xiang/xservice/fwd/schedule/FwdImportantMsgJob.java b/script/src/main/java/com/xiang/xservice/fwd/schedule/FwdImportantMsgJob.java index 11d95e0..434386c 100644 --- a/script/src/main/java/com/xiang/xservice/fwd/schedule/FwdImportantMsgJob.java +++ b/script/src/main/java/com/xiang/xservice/fwd/schedule/FwdImportantMsgJob.java @@ -1,6 +1,8 @@ package com.xiang.xservice.fwd.schedule; +import com.alibaba.fastjson.JSON; import com.alibaba.fastjson2.JSONObject; +import com.google.common.collect.Maps; import com.xiang.xservice.basic.utils.DateUtils; import com.xiang.xservice.basic.utils.PrimaryKeyUtils; import com.xiang.xservice.basic.xservice.dingTalk.service.DingTalkService; @@ -21,15 +23,19 @@ import com.xiang.xservice.schedule.service.IDynamicTaskSchedulerService; import lombok.RequiredArgsConstructor; import lombok.extern.slf4j.Slf4j; import org.apache.commons.collections4.CollectionUtils; +import org.apache.commons.collections4.MapUtils; import org.springframework.beans.factory.annotation.Value; 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 javax.annotation.PostConstruct; import java.time.LocalDate; import java.time.LocalDateTime; +import java.util.HashMap; import java.util.List; +import java.util.Map; import java.util.stream.Collectors; /** @@ -54,6 +60,24 @@ public class FwdImportantMsgJob { @Value("${DingTalk.chatId}") private String chatId; + @PostConstruct + public void init() { + log.info("xs-fwd任务调度系统初始化!"); + ScheduledTaskEntity scheduledTaskEntity = new ScheduledTaskEntity(); + scheduledTaskEntity.setTaskGroup(TaskGroupEnum.SERVICE_FWD_SCHEDULE.getCode()); + scheduledTaskEntity.setStatus(TaskStatusEnum.UN_START.getCode()); + List taskList = dynamicTaskSchedulerService.getTaskList(scheduledTaskEntity); + for (ScheduledTaskEntity taskEntity : taskList) { + HashMap params = com.alibaba.fastjson2.JSON.parseObject(taskEntity.getParameters(), HashMap.class); + FwdOrderTaskParam param = MapUtils.isEmpty(params) ? new FwdOrderTaskParam(null, taskEntity.getId()) : new FwdOrderTaskParam((Long) params.get("projectId"), taskEntity.getId()); + LocalDateTime runTime = taskEntity.getRunTime().isBefore(LocalDateTime.now()) ? LocalDateTime.now().plusMinutes(1) : taskEntity.getRunTime(); + dynamicTaskScheduler.schedule( + new TaskConfig(taskEntity.getId(), taskEntity.getTaskName(), taskEntity.getTaskGroup(), runTime, params), + new TicketGrabTask(fwdUserConfigMapper, fwdAudienceConfigMapper, iPerformService, param, dynamicTaskSchedulerService) + ); + } + } + @Scheduled(cron = "0 0 8 1/1 * ?") @PostMapping("/preSaleReminderJob") public void preSaleReminderJob() throws Exception { @@ -85,26 +109,28 @@ public class FwdImportantMsgJob { for (FPerformProjectInfo data : saleTodayData) { msg.append("演唱会名称:").append(data.getProjectName()).append("预售时间:").append(DateUtils.getDateTimeStr(data.getPreSaleTime())).append("\n"); long taskId = PrimaryKeyUtils.snowflakeId(); + Map params = Maps.newHashMap(); + params.put("projectId", data.getProjectId()); dynamicTaskScheduler.schedule( new TaskConfig(taskId, "芬玩岛演唱会抢票-【" + data.getProjectName() + "】", TaskGroupEnum.SERVICE_FWD_SCHEDULE.getCode(), - data.getPreSaleTime(), null), + data.getPreSaleTime(), params), new TicketGrabTask(fwdUserConfigMapper, fwdAudienceConfigMapper, iPerformService, new FwdOrderTaskParam(data.getProjectId(), taskId), dynamicTaskSchedulerService)); - savaTask(data, taskId); + savaTask(data, taskId, params); } msg.append("请注意进行数据库配置的更改!"); dingTalkService.sendChatMessage(chatId, msg.toString()); log.info("【芬玩岛】演唱会预售定时任务结束!time:{}", System.currentTimeMillis()); } - private void savaTask(FPerformProjectInfo data, long taskId) { + private void savaTask(FPerformProjectInfo data, long taskId, Map params) { ScheduledTaskEntity entity = new ScheduledTaskEntity(); entity.setId(taskId); entity.setTaskName("芬玩岛演唱会抢票-【" + data.getProjectName() + "】"); entity.setTaskGroup(TaskGroupEnum.SERVICE_FWD_SCHEDULE.getCode()); entity.setRunTime(data.getPreSaleTime()); entity.setStatus(TaskStatusEnum.UN_START.getCode()); - entity.setParameters(null); + entity.setParameters(JSON.toJSONString(params)); entity.setCreatedTime(LocalDateTime.now()); entity.setUpdatedTime(LocalDateTime.now()); dynamicTaskSchedulerService.saveTask(entity); diff --git a/script/src/main/java/com/xiang/xservice/fwd/schedule/TicketGrabTask.java b/script/src/main/java/com/xiang/xservice/fwd/schedule/TicketGrabTask.java index 418a611..ae6b271 100644 --- a/script/src/main/java/com/xiang/xservice/fwd/schedule/TicketGrabTask.java +++ b/script/src/main/java/com/xiang/xservice/fwd/schedule/TicketGrabTask.java @@ -35,21 +35,29 @@ public class TicketGrabTask implements Runnable { @Override public void run() { - log.info("【TicketGrabTask】 run start. 获取到参数:{}", JSON.toJSONString(param)); - dynamicTaskSchedulerService.updateProcess(param.getTaskId()); - List availableUser = userConfigMapper.getAvailableUser(); - if (CollectionUtils.isEmpty(availableUser)) { - return; - } - for (FUserConfig userConfig : availableUser) { - List audiences = audienceConfigMapper.getAudienceByUserId(userConfig.getId()); - try { - if (performService.createProjectOrder(param.getProjectId(), audiences.stream().map(FAudienceConfig::getFrequentId).collect(Collectors.toList()))) { - dynamicTaskSchedulerService.finishTask(param.getTaskId()); - } - } catch (Exception e) { - log.error("创建订单失败", e); + try { + log.info("【TicketGrabTask】 run start. 获取到参数:{}", JSON.toJSONString(param)); + dynamicTaskSchedulerService.updateProcess(param.getTaskId()); + List availableUser = userConfigMapper.getAvailableUser(); + if (CollectionUtils.isEmpty(availableUser)) { + return; } + for (FUserConfig userConfig : availableUser) { + List audiences = audienceConfigMapper.getAudienceByUserId(userConfig.getId()); + try { + if (performService.createProjectOrder(param.getProjectId(), audiences.stream().map(FAudienceConfig::getFrequentId).collect(Collectors.toList()))) { + dynamicTaskSchedulerService.finishTask(param.getTaskId()); + } else { + dynamicTaskSchedulerService.finishTask(param.getTaskId()); + } + } catch (Exception e) { + log.error("创建订单失败", e); + dynamicTaskSchedulerService.errTask(param.getTaskId()); + } + } + } catch (Exception e) { + log.error("任务调度运行失败", e); + dynamicTaskSchedulerService.errTask(param.getTaskId()); } } } diff --git a/script/src/main/java/com/xiang/xservice/xb/schedule/jntyzx/QueryVenueJob.java b/script/src/main/java/com/xiang/xservice/xb/schedule/jntyzx/QueryVenueJob.java deleted file mode 100644 index 4bd7e10..0000000 --- a/script/src/main/java/com/xiang/xservice/xb/schedule/jntyzx/QueryVenueJob.java +++ /dev/null @@ -1,24 +0,0 @@ -package com.xiang.xservice.xb.schedule.jntyzx; - -import com.xiang.xservice.jntyzx.service.JntyzxService; -import lombok.RequiredArgsConstructor; -import lombok.extern.slf4j.Slf4j; -import org.springframework.stereotype.Component; - -/** - * @Author: xiang - * @Date: 2025-05-14 15:34 - */ -@Component -@RequiredArgsConstructor -@Slf4j -public class QueryVenueJob { - private final JntyzxService jntyzxService; - -// @Scheduled(cron = "0 0 14 1/1 * ?") - public void query() throws Exception{ - log.info("[查询场地] 查询当天场地定时任务启动!"); - jntyzxService.queryAvailable(); - log.info("[查询场地] 查询当天场地定时任务结束!"); - } -} diff --git a/script/src/main/resources/application-test.yml b/script/src/main/resources/application-test.yml index 297b5fd..b1df890 100644 --- a/script/src/main/resources/application-test.yml +++ b/script/src/main/resources/application-test.yml @@ -1,6 +1,6 @@ spring: datasource: - url: jdbc:mysql://172.28.159.213:3306/xservice-script?useUnicode=true&characterEncoding=utf-8&serverTimezone=Asia/Shanghai&allowMultiQueries=true + url: jdbc:mysql://120.27.153.87:3306/xservice-script-test?useUnicode=true&characterEncoding=utf-8&serverTimezone=Asia/Shanghai&allowMultiQueries=true username: root password: 123456 driver-class-name: com.mysql.cj.jdbc.Driver From 71ea7a599479587f9663f2c5538c971cf0ba804d Mon Sep 17 00:00:00 2001 From: Zhujx Date: Mon, 28 Jul 2025 15:05:17 +0800 Subject: [PATCH 26/49] =?UTF-8?q?feat:=E5=88=9D=E5=A7=8B=E5=8C=96=E8=B0=83?= =?UTF-8?q?=E5=BA=A6?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../com/xiang/xservice/fwd/schedule/FwdImportantMsgJob.java | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/script/src/main/java/com/xiang/xservice/fwd/schedule/FwdImportantMsgJob.java b/script/src/main/java/com/xiang/xservice/fwd/schedule/FwdImportantMsgJob.java index 434386c..b0e6ffb 100644 --- a/script/src/main/java/com/xiang/xservice/fwd/schedule/FwdImportantMsgJob.java +++ b/script/src/main/java/com/xiang/xservice/fwd/schedule/FwdImportantMsgJob.java @@ -111,9 +111,10 @@ public class FwdImportantMsgJob { long taskId = PrimaryKeyUtils.snowflakeId(); Map params = Maps.newHashMap(); params.put("projectId", data.getProjectId()); + LocalDateTime runTime = data.getPreSaleTime().isBefore(LocalDateTime.now()) ? LocalDateTime.now().plusMinutes(1) : data.getPreSaleTime(); dynamicTaskScheduler.schedule( new TaskConfig(taskId, "芬玩岛演唱会抢票-【" + data.getProjectName() + "】", TaskGroupEnum.SERVICE_FWD_SCHEDULE.getCode(), - data.getPreSaleTime(), params), + runTime, params), new TicketGrabTask(fwdUserConfigMapper, fwdAudienceConfigMapper, iPerformService, new FwdOrderTaskParam(data.getProjectId(), taskId), dynamicTaskSchedulerService)); savaTask(data, taskId, params); From 95faf1e23fe660d1f06399a16129dea9daef3daa Mon Sep 17 00:00:00 2001 From: Zhujx Date: Mon, 28 Jul 2025 15:49:45 +0800 Subject: [PATCH 27/49] =?UTF-8?q?feat:=E8=B0=83=E5=BA=A6=E5=BA=A7=E4=BD=8D?= =?UTF-8?q?=E4=BF=A1=E6=81=AF?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../fwd/schedule/PullDataFromFWDJob.java | 80 +++++++++++++++++++ .../mapper/fwd/FwdPerformConfigMapper.xml | 2 +- 2 files changed, 81 insertions(+), 1 deletion(-) 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 dd1bd04..20d59b4 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 @@ -6,6 +6,7 @@ import com.xiang.xservice.basic.common.req.BaseRequest; import com.xiang.xservice.basic.config.MyThreadFactory; import com.xiang.xservice.basic.utils.DateUtils; import com.xiang.xservice.fwd.entity.pojo.FAudienceConfig; +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.pojo.FUserConfig; @@ -19,6 +20,7 @@ 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.FwdAudienceConfigMapper; +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.mapper.FwdUserConfigMapper; @@ -33,6 +35,7 @@ import org.springframework.stereotype.Component; import org.springframework.web.bind.annotation.PostMapping; import org.springframework.web.bind.annotation.RestController; +import java.util.ArrayList; import java.util.List; import java.util.Map; import java.util.Objects; @@ -41,6 +44,7 @@ import java.util.concurrent.ExecutorService; import java.util.concurrent.LinkedBlockingQueue; import java.util.concurrent.ThreadPoolExecutor; import java.util.concurrent.TimeUnit; +import java.util.function.Function; import java.util.stream.Collectors; /** @@ -57,6 +61,7 @@ public class PullDataFromFWDJob { private final IPerformServiceHttp performServiceHttp; private final FwdPerformProjectInfoMapper performProjectInfoMapper; + private final FwdPerformConfigMapper performConfigMapper; private final FwdPerformSeatInfoMapper performSeatInfoMapper; private final FwdUserConfigMapper userConfigMapper; private final FwdAudienceConfigMapper audienceConfigMapper; @@ -275,6 +280,81 @@ public class PullDataFromFWDJob { } } + @Scheduled(cron = "0 10 8 1/1 * ?") + @PostMapping("/pullSeatDataJob") + public void pullSeatDataJob() { + List availablePerform = performConfigMapper.getAvailablePerform(); + if (CollectionUtils.isEmpty(availablePerform)) { + return; + } + for (FPerformConfig performConfig : availablePerform) { + Perform performs = performServiceHttp.getPerformsByProjectIdFromHttp(performConfig.getProjectId()); + if (Objects.isNull(performs)) { + continue; + } + if (CollectionUtils.isEmpty(performs.getPerformInfos())) { + continue; + } + for (PerformInfo performInfo : performs.getPerformInfos()) { + List info = performInfo.getPerformInfo(); + if (CollectionUtils.isEmpty(info)) { + continue; + } + for (PerformDetail performDetail : info) { + List seatPlans = performDetail.getSeatPlans(); + if (CollectionUtils.isEmpty(seatPlans)) { + continue; + } + Map map = seatPlans.stream().collect(Collectors.toMap(SeatPlan::getSeatPlanId, Function.identity(), (a, b) -> a)); + List planStatusFromHttp = performServiceHttp.getSeatPlanStatusFromHttp(new ArrayList<>(map.keySet())); + List seatInfoAddList = Lists.newArrayList(); + for (SeatPlanStatus seatPlanStatus : planStatusFromHttp) { + if (!seatPlanStatus.getSoldOutFlag() && seatPlanStatus.getStandbyStatus() == 10) { + FPerformSeatInfo seatInfo = performSeatInfoMapper.getPerformSeatInfoBySeatIdAndPerformIdAndProjectId(seatPlanStatus.getSeatPlanId(), seatPlanStatus.getPerformId(), performs.getProjectId()); + SeatPlan seatPlan = map.get(seatPlanStatus.getSeatPlanId()); + if (Objects.isNull(seatInfo)) { + if (Objects.nonNull(seatPlan)) { + seatInfo = new FPerformSeatInfo(); + seatInfo.setSeatPlanId(seatPlanStatus.getSeatPlanId()); + seatInfo.setSeatPlanName(seatPlan.getSeatPlanName()); + seatInfo.setPerformId(seatPlanStatus.getPerformId()); + seatInfo.setPerformName(seatPlan.getPerformName()); + seatInfo.setStopSale(seatPlan.getStopSale()); + seatInfo.setShelfStatus(seatPlan.getShelfStatus()); + seatInfo.setPrice(seatPlan.getPrice()); + seatInfo.setDiscountPrice(seatPlan.getDiscountPrice()); + seatInfo.setSubStatus(seatPlan.getSubStatus()); + seatInfo.setQuantity(seatPlan.getQuantity()); + seatInfo.setStatus(seatPlan.getStatus()); + seatInfo.setMaxSellStock(seatPlan.getMaxSellStock()); + seatInfo.setSoldStock(seatPlan.getSoldStock()); + seatInfo.setLeftStock(seatPlan.getLeftStock()); + seatInfo.setAbleSaleQuantity(seatPlan.getAbleSaleQuantity()); + seatInfo.setAshShow(seatPlan.getAshShow()); + seatInfo.setAshShowDesc(seatPlan.getAshShow()); + seatInfo.setSelectable(seatPlan.getSelectable()); + seatInfo.setDisplay(seatPlan.getDisplay()); + seatInfo.setAvailableTicketQuantity(seatPlan.getAvailableTicketQuantity()); + seatInfo.setAvailableAllTicketQuantity(seatPlan.getAvailableAllTicketQuantity()); + seatInfo.setSaleTime(DateUtils.getDateTimeFromStr(seatPlan.getSaleTime())); + seatInfo.setProjectId(performs.getProjectId()); + seatInfo.setSoldOut(0); + seatInfoAddList.add(seatInfo); + } + } else { + seatInfo.setSoldOut(0); + performSeatInfoMapper.update(seatInfo); + } + } + } + if (CollectionUtils.isNotEmpty(seatInfoAddList)) { + performSeatInfoMapper.batchSave(seatInfoAddList); + } + } + } + } + } + /** * 每月拉取观影人数据更新 */ diff --git a/script/src/main/resources/mapper/fwd/FwdPerformConfigMapper.xml b/script/src/main/resources/mapper/fwd/FwdPerformConfigMapper.xml index c052857..dd55130 100644 --- a/script/src/main/resources/mapper/fwd/FwdPerformConfigMapper.xml +++ b/script/src/main/resources/mapper/fwd/FwdPerformConfigMapper.xml @@ -26,7 +26,7 @@ - select from fwd_perform_config where del_flag = 0 From d20ff8dc05d4d2b3d29528cbbe687d6de1f9a2af Mon Sep 17 00:00:00 2001 From: Zhujx Date: Mon, 28 Jul 2025 16:29:52 +0800 Subject: [PATCH 28/49] feat:mapper --- .../xiang/xservice/fwd/mapper/FwdPerformProjectInfoMapper.java | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) 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 index c794030..22ea850 100644 --- a/script/src/main/java/com/xiang/xservice/fwd/mapper/FwdPerformProjectInfoMapper.java +++ b/script/src/main/java/com/xiang/xservice/fwd/mapper/FwdPerformProjectInfoMapper.java @@ -2,6 +2,7 @@ package com.xiang.xservice.fwd.mapper; import com.xiang.xservice.fwd.entity.pojo.FPerformProjectInfo; import org.apache.ibatis.annotations.Mapper; +import org.apache.ibatis.annotations.Param; import org.springframework.stereotype.Repository; import java.time.LocalDateTime; @@ -20,5 +21,5 @@ public interface FwdPerformProjectInfoMapper { int update(FPerformProjectInfo fPerformProjectInfo); - List getPreSaleTodayData(LocalDateTime startTime, LocalDateTime endTime); + List getPreSaleTodayData(@Param("startTime") LocalDateTime startTime, @Param("endTime") LocalDateTime endTime); } From 56987b850a18a9e44b81a5a62cd18f86ce0f0b6d Mon Sep 17 00:00:00 2001 From: Zhujx Date: Mon, 28 Jul 2025 17:24:52 +0800 Subject: [PATCH 29/49] feat:gc --- .../fwd/schedule/PullDataFromFWDJob.java | 346 +++++++++--------- 1 file changed, 177 insertions(+), 169 deletions(-) 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 20d59b4..69ebbea 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 @@ -87,196 +87,204 @@ public class PullDataFromFWDJob { i++; BaseRequest request = new BaseRequest(); request.setCurrent(i); - request.setPageSize(10 * i); - ProjectsResp showProjectsFromHttp = performServiceHttp.getShowProjectsFromHttp(request); - if (Objects.isNull(showProjectsFromHttp)) { - return; - } - if (CollectionUtils.isEmpty(showProjectsFromHttp.getList())) { - break; - } - List projectList = showProjectsFromHttp.getList(); + request.setPageSize(50); + try { + ProjectsResp showProjectsFromHttp = performServiceHttp.getShowProjectsFromHttp(request); + if (Objects.isNull(showProjectsFromHttp)) { + return; + } + if (CollectionUtils.isEmpty(showProjectsFromHttp.getList())) { + break; + } + List projectList = showProjectsFromHttp.getList(); - List futureList = Lists.newArrayList(); - for (ProjectList project : projectList) { - CompletableFuture future = CompletableFuture.runAsync(() -> { - ProjectInfoResp projectInfoFromHttp = performServiceHttp.getProjectInfoFromHttp(project.getProjectId()); - Perform performsByProjectIdFromHttp = performServiceHttp.getPerformsByProjectIdFromHttp(project.getProjectId()); - if (Objects.nonNull(projectInfoFromHttp) && Objects.nonNull(performsByProjectIdFromHttp)) { - 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())); - } - performProjectInfoMapper.update(projectInfo); - List fPerformSeatInfoInsertList = Lists.newArrayList(); - if (CollectionUtils.isNotEmpty(performsByProjectIdFromHttp.getPerformInfos())) { - for (PerformInfo performInfo : performsByProjectIdFromHttp.getPerformInfos()) { - if (CollectionUtils.isNotEmpty(performInfo.getPerformInfo())) { - for (PerformDetail performDetail : performInfo.getPerformInfo()) { - if (CollectionUtils.isNotEmpty(performDetail.getSeatPlans())) { + List futureList = Lists.newArrayList(); + for (ProjectList project : projectList) { + CompletableFuture future = CompletableFuture.runAsync(() -> { + ProjectInfoResp projectInfoFromHttp = performServiceHttp.getProjectInfoFromHttp(project.getProjectId()); + Perform performsByProjectIdFromHttp = performServiceHttp.getPerformsByProjectIdFromHttp(project.getProjectId()); + if (Objects.nonNull(projectInfoFromHttp) && Objects.nonNull(performsByProjectIdFromHttp)) { + 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())); + } + performProjectInfoMapper.update(projectInfo); + List fPerformSeatInfoInsertList = Lists.newArrayList(); + if (CollectionUtils.isNotEmpty(performsByProjectIdFromHttp.getPerformInfos())) { + for (PerformInfo performInfo : performsByProjectIdFromHttp.getPerformInfos()) { + 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; - } - 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.getAshShow()); - fPerformSeatInfo.setSelectable(seatPlan.getSelectable()); - fPerformSeatInfo.setDisplay(seatPlan.getDisplay()); - fPerformSeatInfo.setAvailableTicketQuantity(seatPlan.getAvailableTicketQuantity()); - fPerformSeatInfo.setAvailableAllTicketQuantity(seatPlan.getAvailableAllTicketQuantity()); - if (StringUtils.isNotBlank(seatPlan.getSaleTime())) { - fPerformSeatInfo.setSaleTime(DateUtils.getTimeFromStr(seatPlan.getSaleTime())); - } - fPerformSeatInfo.setProjectId(project.getProjectId()); - fPerformSeatInfo.setSoldOut(seatMap.get(seatPlan.getSeatPlanId()) ? 1 : 0); - FPerformSeatInfo seatInfo = performSeatInfoMapper.getPerformSeatInfoBySeatIdAndPerformIdAndProjectId(fPerformSeatInfo.getSeatPlanId(), fPerformSeatInfo.getPerformId(), project.getProjectId()); - if (Objects.nonNull(seatInfo)) { - fPerformSeatInfo.setId(seatInfo.getId()); - performSeatInfoMapper.update(fPerformSeatInfo); - } else { - fPerformSeatInfoInsertList.add(fPerformSeatInfo); + 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; + } + 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.getAshShow()); + fPerformSeatInfo.setSelectable(seatPlan.getSelectable()); + fPerformSeatInfo.setDisplay(seatPlan.getDisplay()); + fPerformSeatInfo.setAvailableTicketQuantity(seatPlan.getAvailableTicketQuantity()); + fPerformSeatInfo.setAvailableAllTicketQuantity(seatPlan.getAvailableAllTicketQuantity()); + if (StringUtils.isNotBlank(seatPlan.getSaleTime())) { + fPerformSeatInfo.setSaleTime(DateUtils.getTimeFromStr(seatPlan.getSaleTime())); + } + fPerformSeatInfo.setProjectId(project.getProjectId()); + fPerformSeatInfo.setSoldOut(seatMap.get(seatPlan.getSeatPlanId()) ? 1 : 0); + FPerformSeatInfo seatInfo = performSeatInfoMapper.getPerformSeatInfoBySeatIdAndPerformIdAndProjectId(fPerformSeatInfo.getSeatPlanId(), fPerformSeatInfo.getPerformId(), project.getProjectId()); + if (Objects.nonNull(seatInfo)) { + fPerformSeatInfo.setId(seatInfo.getId()); + performSeatInfoMapper.update(fPerformSeatInfo); + } else { + fPerformSeatInfoInsertList.add(fPerformSeatInfo); + } } } } } } } - } - if (CollectionUtils.isNotEmpty(fPerformSeatInfoInsertList)) { - performSeatInfoMapper.batchSave(fPerformSeatInfoInsertList); - } - } 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()); + if (CollectionUtils.isNotEmpty(fPerformSeatInfoInsertList)) { + performSeatInfoMapper.batchSave(fPerformSeatInfoInsertList); + } + } 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); + 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); - List fPerformSeatInfos = Lists.newArrayList(); - if (CollectionUtils.isNotEmpty(performsByProjectIdFromHttp.getPerformInfos())) { - for (PerformInfo performInfo : performsByProjectIdFromHttp.getPerformInfos()) { - 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; + List fPerformSeatInfos = Lists.newArrayList(); + if (CollectionUtils.isNotEmpty(performsByProjectIdFromHttp.getPerformInfos())) { + for (PerformInfo performInfo : performsByProjectIdFromHttp.getPerformInfos()) { + 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; + } + 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.getAshShow()); + fPerformSeatInfo.setSelectable(seatPlan.getSelectable()); + fPerformSeatInfo.setDisplay(seatPlan.getDisplay()); + fPerformSeatInfo.setAvailableTicketQuantity(seatPlan.getAvailableTicketQuantity()); + fPerformSeatInfo.setAvailableAllTicketQuantity(seatPlan.getAvailableAllTicketQuantity()); + if (StringUtils.isNotBlank(seatPlan.getSaleTime())) { + fPerformSeatInfo.setSaleTime(DateUtils.getTimeFromStr(seatPlan.getSaleTime())); + } + fPerformSeatInfo.setProjectId(project.getProjectId()); + fPerformSeatInfo.setSoldOut(seatMap.get(seatPlan.getSeatPlanId()) ? 1 : 0); } - 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.getAshShow()); - fPerformSeatInfo.setSelectable(seatPlan.getSelectable()); - fPerformSeatInfo.setDisplay(seatPlan.getDisplay()); - fPerformSeatInfo.setAvailableTicketQuantity(seatPlan.getAvailableTicketQuantity()); - fPerformSeatInfo.setAvailableAllTicketQuantity(seatPlan.getAvailableAllTicketQuantity()); - if (StringUtils.isNotBlank(seatPlan.getSaleTime())) { - fPerformSeatInfo.setSaleTime(DateUtils.getTimeFromStr(seatPlan.getSaleTime())); - } - fPerformSeatInfo.setProjectId(project.getProjectId()); - fPerformSeatInfo.setSoldOut(seatMap.get(seatPlan.getSeatPlanId()) ? 1 : 0); } } } } } - } - if (CollectionUtils.isNotEmpty(fPerformSeatInfos)) { - performSeatInfoMapper.batchSave(fPerformSeatInfos); + if (CollectionUtils.isNotEmpty(fPerformSeatInfos)) { + performSeatInfoMapper.batchSave(fPerformSeatInfos); + } } } - } - }, es); - futureList.add(future); + }, es); + futureList.add(future); + } + CompletableFuture[] futureArr = futureList.toArray(futureList.toArray(new CompletableFuture[0])); + CompletableFuture.allOf(futureArr).join(); + Thread.sleep(1000); + } catch (Exception e) { + log.error("拉取数据失败", e); + } finally { + System.gc(); } - CompletableFuture[] futureArr = futureList.toArray(futureList.toArray(new CompletableFuture[0])); - CompletableFuture.allOf(futureArr).join(); + } } From 279633f53bd5fe3328756465fe0a00dfd760b634 Mon Sep 17 00:00:00 2001 From: xiang Date: Mon, 28 Jul 2025 22:12:17 +0800 Subject: [PATCH 30/49] =?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 From 7bb78e608b7857587f1df13612e4fc9dd9c86cda Mon Sep 17 00:00:00 2001 From: Zhujx Date: Tue, 29 Jul 2025 09:46:20 +0800 Subject: [PATCH 31/49] =?UTF-8?q?fix:=E5=BA=A7=E4=BD=8D=E6=97=A5=E6=9C=9F?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../com/xiang/xservice/fwd/schedule/PullDataFromFWDJob.java | 2 +- script/src/main/resources/application-local.yml | 4 ++-- script/src/main/resources/application-test.yml | 4 ++-- 3 files changed, 5 insertions(+), 5 deletions(-) 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 a093e64..c475aad 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 @@ -325,7 +325,7 @@ public class PullDataFromFWDJob { seatInfo.setDisplay(seatPlan.getDisplay()); seatInfo.setAvailableTicketQuantity(seatPlan.getAvailableTicketQuantity()); seatInfo.setAvailableAllTicketQuantity(seatPlan.getAvailableAllTicketQuantity()); - seatInfo.setSaleTime(DateUtils.getDateTimeFromStr(seatPlan.getSaleTime())); + seatInfo.setSaleTime(DateUtils.getTimeFromStr(seatPlan.getSaleTime())); seatInfo.setProjectId(performs.getProjectId()); seatInfo.setSoldOut(0); seatInfoAddList.add(seatInfo); diff --git a/script/src/main/resources/application-local.yml b/script/src/main/resources/application-local.yml index f30a80e..9db2558 100644 --- a/script/src/main/resources/application-local.yml +++ b/script/src/main/resources/application-local.yml @@ -1,8 +1,8 @@ spring: datasource: - url: jdbc:mysql://120.27.153.87:3306/xservice-script-test?useUnicode=true&characterEncoding=utf-8&serverTimezone=Asia/Shanghai&allowMultiQueries=true + url: jdbc:mysql://rm-bp1j371yx9d9894ewbo.mysql.rds.aliyuncs.com:3306/xservice-script-test?useUnicode=true&characterEncoding=utf-8&serverTimezone=Asia/Shanghai&allowMultiQueries=true username: root - password: 123456 + password: xb#UWqnhH24&XpX driver-class-name: com.mysql.cj.jdbc.Driver redis: host: r-bp1dqqbzlfw04fldp3pd.redis.rds.aliyuncs.com diff --git a/script/src/main/resources/application-test.yml b/script/src/main/resources/application-test.yml index b1df890..41e2a60 100644 --- a/script/src/main/resources/application-test.yml +++ b/script/src/main/resources/application-test.yml @@ -1,8 +1,8 @@ spring: datasource: - url: jdbc:mysql://120.27.153.87:3306/xservice-script-test?useUnicode=true&characterEncoding=utf-8&serverTimezone=Asia/Shanghai&allowMultiQueries=true + url: jdbc:mysql://rm-bp1j371yx9d9894ew.mysql.rds.aliyuncs.com:3306/xservice-script-test?useUnicode=true&characterEncoding=utf-8&serverTimezone=Asia/Shanghai&allowMultiQueries=true username: root - password: 123456 + password: xb#UWqnhH24&XpX driver-class-name: com.mysql.cj.jdbc.Driver redis: host: r-bp1dqqbzlfw04fldp3pd.redis.rds.aliyuncs.com From 7408d05eafb95a129d3729b4ca7fa3fcdfdc499f Mon Sep 17 00:00:00 2001 From: Zhujx Date: Tue, 29 Jul 2025 10:01:38 +0800 Subject: [PATCH 32/49] fix:test config --- script/src/main/resources/application-test.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/script/src/main/resources/application-test.yml b/script/src/main/resources/application-test.yml index 41e2a60..b5ae739 100644 --- a/script/src/main/resources/application-test.yml +++ b/script/src/main/resources/application-test.yml @@ -1,6 +1,6 @@ spring: datasource: - url: jdbc:mysql://rm-bp1j371yx9d9894ew.mysql.rds.aliyuncs.com:3306/xservice-script-test?useUnicode=true&characterEncoding=utf-8&serverTimezone=Asia/Shanghai&allowMultiQueries=true + url: jdbc:mysql://rm-bp1j371yx9d9894ewbo.mysql.rds.aliyuncs.com:3306/xservice-script-test?useUnicode=true&characterEncoding=utf-8&serverTimezone=Asia/Shanghai&allowMultiQueries=true username: root password: xb#UWqnhH24&XpX driver-class-name: com.mysql.cj.jdbc.Driver From 39af53d1de2cf821eb85124dabd018b14c31b3bb Mon Sep 17 00:00:00 2001 From: xiang Date: Tue, 29 Jul 2025 21:48:31 +0800 Subject: [PATCH 33/49] =?UTF-8?q?perf=EF=BC=9A=E6=8B=89=E5=8F=96=E6=95=B0?= =?UTF-8?q?=E6=8D=AE+=E9=87=8D=E8=AF=95?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- pom.xml | 5 + .../fwd/schedule/PullDataFromFWDJob.java | 281 +++--------------- .../xb/schedule/xb/FundInfoQueryJob.java | 4 +- .../src/main/resources/application-local.yml | 1 + script/src/main/resources/application.yml | 6 +- 5 files changed, 57 insertions(+), 240 deletions(-) diff --git a/pom.xml b/pom.xml index 7810b90..47fb50b 100644 --- a/pom.xml +++ b/pom.xml @@ -47,6 +47,11 @@ xservice-cache 1.0-SNAPSHOT + + com.xiang + xservice-http-starter + 1.0-SNAPSHOT + 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 c475aad..f19ac22 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,34 +1,18 @@ package com.xiang.xservice.fwd.schedule; import com.google.common.collect.Lists; -import com.google.common.collect.Maps; import com.xiang.xservice.basic.common.req.BaseRequest; import com.xiang.xservice.basic.config.MyThreadFactory; import com.xiang.xservice.basic.utils.DateUtils; -import com.xiang.xservice.fwd.entity.pojo.FAudienceConfig; -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.pojo.FUserConfig; +import com.xiang.xservice.fwd.entity.pojo.*; import com.xiang.xservice.fwd.entity.resp.http.audience.AudienceMemberInfo; -import com.xiang.xservice.fwd.entity.resp.http.perform.Perform; -import com.xiang.xservice.fwd.entity.resp.http.perform.PerformDetail; -import com.xiang.xservice.fwd.entity.resp.http.perform.PerformInfo; -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.FwdAudienceConfigMapper; -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.mapper.FwdUserConfigMapper; +import com.xiang.xservice.fwd.entity.resp.http.perform.*; +import com.xiang.xservice.fwd.mapper.*; import com.xiang.xservice.fwd.service.IPerformServiceHttp; +import com.xiang.xservice.http.helper.HttpRequestHelper; 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; @@ -39,7 +23,6 @@ import java.util.ArrayList; 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; @@ -65,6 +48,7 @@ public class PullDataFromFWDJob { private final FwdPerformSeatInfoMapper performSeatInfoMapper; private final FwdUserConfigMapper userConfigMapper; private final FwdAudienceConfigMapper audienceConfigMapper; + private final HttpRequestHelper httpRequestHelper; private final ExecutorService es = new ThreadPoolExecutor( @@ -76,168 +60,6 @@ public class PullDataFromFWDJob { new MyThreadFactory("fwd-pull-data-http", Boolean.TRUE), new ThreadPoolExecutor.AbortPolicy()); - /** - * 定时任务 每日1点爬取芬玩岛数据演出列表数据 - */ -// @Scheduled(cron = "0 0 1 1/1 * ?") - @PostMapping("/pullProjectsDataJob") - public void pullProjectsDataJob() { - int i = 0; - while (true) { - i++; - BaseRequest request = new BaseRequest(); - request.setCurrent(i); - request.setPageSize(50); - try { - ProjectsResp showProjectsFromHttp = performServiceHttp.getShowProjectsFromHttp(request); - if (Objects.isNull(showProjectsFromHttp)) { - return; - } - if (CollectionUtils.isEmpty(showProjectsFromHttp.getList())) { - break; - } - List projectList = showProjectsFromHttp.getList(); - - List futureList = Lists.newArrayList(); - for (ProjectList project : projectList) { - CompletableFuture future = CompletableFuture.runAsync(() -> { - ProjectInfoResp projectInfoFromHttp = performServiceHttp.getProjectInfoFromHttp(project.getProjectId()); - Perform performsByProjectIdFromHttp = performServiceHttp.getPerformsByProjectIdFromHttp(project.getProjectId()); - if (Objects.nonNull(projectInfoFromHttp) && Objects.nonNull(performsByProjectIdFromHttp)) { - FPerformProjectInfo projectInfo = performProjectInfoMapper.getProjectByProjectId(project.getProjectId()); - if (Objects.nonNull(projectInfo)) { - // 更新projectInfo的信息 - buildUpdateProjectInfo(project, projectInfo, projectInfoFromHttp); - performProjectInfoMapper.update(projectInfo); - List fPerformSeatInfoInsertList = Lists.newArrayList(); - if (CollectionUtils.isNotEmpty(performsByProjectIdFromHttp.getPerformInfos())) { - for (PerformInfo performInfo : performsByProjectIdFromHttp.getPerformInfos()) { - 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; - } - 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()); - if (StringUtils.isNotBlank(seatPlan.getSaleTime())) { - fPerformSeatInfo.setSaleTime(DateUtils.getTimeFromStr(seatPlan.getSaleTime())); - } - fPerformSeatInfo.setProjectId(project.getProjectId()); - fPerformSeatInfo.setSoldOut(seatMap.get(seatPlan.getSeatPlanId()) ? 1 : 0); - FPerformSeatInfo seatInfo = performSeatInfoMapper.getPerformSeatInfoBySeatIdAndPerformIdAndProjectId(fPerformSeatInfo.getSeatPlanId(), fPerformSeatInfo.getPerformId(), project.getProjectId()); - if (Objects.nonNull(seatInfo)) { - fPerformSeatInfo.setId(seatInfo.getId()); - performSeatInfoMapper.update(fPerformSeatInfo); - } else { - fPerformSeatInfoInsertList.add(fPerformSeatInfo); - } - } - } - } - } - } - } - - if (CollectionUtils.isNotEmpty(fPerformSeatInfoInsertList)) { - performSeatInfoMapper.batchSave(fPerformSeatInfoInsertList); - } - } else { - // 新增projectInfo的信息 - saveProjectInfo(project, projectInfoFromHttp); - - List fPerformSeatInfos = Lists.newArrayList(); - if (CollectionUtils.isNotEmpty(performsByProjectIdFromHttp.getPerformInfos())) { - for (PerformInfo performInfo : performsByProjectIdFromHttp.getPerformInfos()) { - 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; - } - 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()); - if (StringUtils.isNotBlank(seatPlan.getSaleTime())) { - fPerformSeatInfo.setSaleTime(DateUtils.getTimeFromStr(seatPlan.getSaleTime())); - } - fPerformSeatInfo.setProjectId(project.getProjectId()); - fPerformSeatInfo.setSoldOut(seatMap.get(seatPlan.getSeatPlanId()) ? 1 : 0); - } - } - } - } - } - } - - if (CollectionUtils.isNotEmpty(fPerformSeatInfos)) { - performSeatInfoMapper.batchSave(fPerformSeatInfos); - } - } - } - }, es); - futureList.add(future); - } - CompletableFuture[] futureArr = futureList.toArray(futureList.toArray(new CompletableFuture[0])); - CompletableFuture.allOf(futureArr).join(); - Thread.sleep(1000); - } catch (Exception e) { - log.error("拉取数据失败", e); - } finally { - System.gc(); - } - - } - } - private void saveProjectInfo(ProjectList project, ProjectInfoResp projectInfoFromHttp) { FPerformProjectInfo fPerformProjectInfo = new FPerformProjectInfo(); fPerformProjectInfo.setNameDisplay(projectInfoFromHttp.getNameDisplay()); @@ -277,7 +99,7 @@ public class PullDataFromFWDJob { return; } for (FPerformConfig performConfig : availablePerform) { - Perform performs = performServiceHttp.getPerformsByProjectIdFromHttp(performConfig.getProjectId()); + Perform performs = httpRequestHelper.fetchWithRetry(() -> performServiceHttp.getPerformsByProjectIdFromHttp(performConfig.getProjectId()), "seat-perform-info"); if (Objects.isNull(performs)) { continue; } @@ -295,7 +117,7 @@ public class PullDataFromFWDJob { continue; } Map map = seatPlans.stream().collect(Collectors.toMap(SeatPlan::getSeatPlanId, Function.identity(), (a, b) -> a)); - List planStatusFromHttp = performServiceHttp.getSeatPlanStatusFromHttp(new ArrayList<>(map.keySet())); + List planStatusFromHttp = httpRequestHelper.fetchWithRetry(() -> performServiceHttp.getSeatPlanStatusFromHttp(new ArrayList<>(map.keySet())), "seat-seat-status"); List seatInfoAddList = Lists.newArrayList(); for (SeatPlanStatus seatPlanStatus : planStatusFromHttp) { if (!seatPlanStatus.getSoldOutFlag() && seatPlanStatus.getStandbyStatus() == 10) { @@ -383,7 +205,7 @@ public class PullDataFromFWDJob { baseRequest.setCurrent(pageNum); baseRequest.setPageSize(50); // 查询所有的演出 - ProjectsResp projectsResp = performServiceHttp.getShowProjectsFromHttp(baseRequest); + ProjectsResp projectsResp = httpRequestHelper.fetchWithRetry(() -> performServiceHttp.getShowProjectsFromHttp(baseRequest), "fetch-projects"); if (Objects.isNull(projectsResp)) { break; } @@ -392,14 +214,13 @@ public class PullDataFromFWDJob { break; } for (ProjectList projectList : projectLists) { - List seatPlans = Lists.newArrayList(); // 查询演出的详情 - ProjectInfoResp projectInfoFromHttp = performServiceHttp.getProjectInfoFromHttp(projectList.getProjectId()); + ProjectInfoResp projectInfoFromHttp = httpRequestHelper.fetchWithRetry(() -> performServiceHttp.getProjectInfoFromHttp(projectList.getProjectId()), "fetch-project-info"); if (Objects.isNull(projectInfoFromHttp)) { continue; } // 查询演出信息 - Perform performsByProjectIdFromHttp = performServiceHttp.getPerformsByProjectIdFromHttp(projectList.getProjectId()); + Perform performsByProjectIdFromHttp = httpRequestHelper.fetchWithRetry(() -> performServiceHttp.getPerformsByProjectIdFromHttp(projectList.getProjectId()), "fetch-perform-by-project-id"); if (Objects.isNull(performsByProjectIdFromHttp)) { continue; } @@ -421,47 +242,42 @@ public class PullDataFromFWDJob { continue; } // 查询演出座位档次信息 + List insertList = Lists.newCopyOnWriteArrayList(); + List updateList = Lists.newCopyOnWriteArrayList(); for (PerformInfo performInfo : performInfos) { List performs = performInfo.getPerformInfo(); if (CollectionUtils.isEmpty(performs)) { continue; } for (PerformDetail perform : performs) { - seatPlans.addAll(perform.getSeatPlans()); + if (CollectionUtils.isEmpty(perform.getSeatPlans())) { + continue; + } + List seatPlanIds = perform.getSeatPlans().stream().map(SeatPlan::getSeatPlanId).collect(Collectors.toList()); + List seatPlanStatusList = httpRequestHelper.fetchWithRetry(() -> performServiceHttp.getSeatPlanStatusFromHttp(seatPlanIds), "fetch-seat-plan-status"); + if (CollectionUtils.isEmpty(seatPlanStatusList)) { + continue; + } + Map map = seatPlanStatusList.stream().collect(Collectors.toMap(SeatPlanStatus::getSeatPlanId, Function.identity(), (a, b) -> a)); + Map existSeatMap = performSeatInfoMapper.getPerformSeatInfoBySeatIds(seatPlanIds) + .stream() + .collect(Collectors.toMap(FPerformSeatInfo::getSeatPlanId, Function.identity(), (a, b) -> a)); + for (SeatPlan seatPlan : perform.getSeatPlans()) { + if (map.containsKey(seatPlan.getSeatPlanId())) { + SeatPlanStatus value = map.get(seatPlan.getSeatPlanId()); + if (existSeatMap.containsKey(seatPlan.getSeatPlanId())) { + // 更新 + FPerformSeatInfo performSeatInfo = existSeatMap.get(seatPlan.getSeatPlanId()); + performSeatInfo.setSoldStock(value.getSoldOutFlag() ? 1 : 0); + updateList.add(performSeatInfo); + } else { + // 新增 + saveSeatInfo(projectList, seatPlan.getSeatPlanId(), value, seatPlan, insertList); + } + } + } } } - - 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); } @@ -472,11 +288,6 @@ public class PullDataFromFWDJob { } } } - try { - Thread.sleep(1000); - } catch (InterruptedException e) { - log.error("" , e); - } } private static void saveSeatInfo(ProjectList projectList, Long seatPlanId, SeatPlanStatus seatPlanStatus, SeatPlan seatPlan, List insertList) { @@ -502,10 +313,14 @@ public class PullDataFromFWDJob { fPerformSeatInfo.setDisplay(seatPlan.getDisplay()); fPerformSeatInfo.setAvailableTicketQuantity(seatPlan.getAvailableTicketQuantity()); fPerformSeatInfo.setAvailableAllTicketQuantity(seatPlan.getAvailableAllTicketQuantity()); - fPerformSeatInfo.setSaleTime(DateUtils.getTimeFromStr(seatPlan.getSaleTime())); + if (StringUtils.isNotBlank(seatPlan.getSaleTime())) { + fPerformSeatInfo.setSaleTime(DateUtils.getTimeFromStr(seatPlan.getSaleTime())); + } fPerformSeatInfo.setProjectId(projectList.getProjectId()); if (!seatPlanStatus.getSoldOutFlag() && seatPlanStatus.getStandbyStatus().equals(10)) { - fPerformSeatInfo.setSoldStock(0); + fPerformSeatInfo.setSoldOut(0); + } else { + fPerformSeatInfo.setSoldOut(1); } insertList.add(fPerformSeatInfo); } @@ -536,12 +351,4 @@ public class PullDataFromFWDJob { projectInfo.setPreSaleTime(DateUtils.getDateTimeFromStr(projectInfoFromHttp.getPreSaleTime())); } } - - 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)); - } } diff --git a/script/src/main/java/com/xiang/xservice/xb/schedule/xb/FundInfoQueryJob.java b/script/src/main/java/com/xiang/xservice/xb/schedule/xb/FundInfoQueryJob.java index 2999aaf..e092c69 100644 --- a/script/src/main/java/com/xiang/xservice/xb/schedule/xb/FundInfoQueryJob.java +++ b/script/src/main/java/com/xiang/xservice/xb/schedule/xb/FundInfoQueryJob.java @@ -146,7 +146,7 @@ public class FundInfoQueryJob { } log.info("查询的港股基金涨跌幅数据:{}", JSONObject.toJSONString(result)); result = result.stream().sorted(Comparator.comparing(FundMessage::getChange)).collect(Collectors.toList()); - StringBuilder sb = new StringBuilder("今天的美股行情:\n"); + StringBuilder sb = new StringBuilder("今天的港股行情:\n"); for (FundMessage fundMessage : result) { sb.append("基金名称:") .append(fundMessage.getName()) @@ -165,7 +165,7 @@ public class FundInfoQueryJob { /** * 基金涨跌幅5分钟超过2%重点通知 */ - @Scheduled(cron = "0 0/5 * * * ? ") + @Scheduled(cron = "0 0/5 9,10,11,13,14,15 * * ? ") public void queryFundEmergencyJob() throws Exception { // 周六周日过滤 if (Objects.equals(LocalDateTime.now().getDayOfWeek(), DayOfWeek.SATURDAY) || diff --git a/script/src/main/resources/application-local.yml b/script/src/main/resources/application-local.yml index 9db2558..3790241 100644 --- a/script/src/main/resources/application-local.yml +++ b/script/src/main/resources/application-local.yml @@ -16,6 +16,7 @@ spring: max-idle: 8 min-idle: 0 max-wait: 1000 + aliyun: dns: RR: diff --git a/script/src/main/resources/application.yml b/script/src/main/resources/application.yml index c4fe5ce..a729076 100644 --- a/script/src/main/resources/application.yml +++ b/script/src/main/resources/application.yml @@ -22,4 +22,8 @@ server: spring: profiles: - active: local \ No newline at end of file + active: local + +http: + maxAttempts: 10 + sleepMs: 200 \ No newline at end of file From 76251a1a2dc50fa46345f9a3d79414d01188d9a0 Mon Sep 17 00:00:00 2001 From: xiang Date: Tue, 29 Jul 2025 21:56:37 +0800 Subject: [PATCH 34/49] =?UTF-8?q?perf=EF=BC=9A=E4=B8=8B=E5=8D=95=E9=87=8D?= =?UTF-8?q?=E8=AF=95?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../fwd/service/impl/PerformServiceImpl.java | 16 ++++++++++------ 1 file changed, 10 insertions(+), 6 deletions(-) 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 e5dece1..4dafea6 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 @@ -12,6 +12,7 @@ import com.xiang.xservice.fwd.mapper.FwdPerformProjectInfoMapper; import com.xiang.xservice.fwd.mapper.FwdPerformSeatInfoMapper; import com.xiang.xservice.fwd.service.IPerformService; import com.xiang.xservice.fwd.service.IPerformServiceHttp; +import com.xiang.xservice.http.helper.HttpRequestHelper; import lombok.RequiredArgsConstructor; import lombok.extern.slf4j.Slf4j; import org.apache.commons.collections4.CollectionUtils; @@ -40,6 +41,7 @@ public class PerformServiceImpl implements IPerformService { private final DingTalkService dingTalkService; @Value("${DingTalk.chatId}") private String chatId; + private final HttpRequestHelper httpRequestHelper; @Override public FPerformProjectInfo getPerformByProjectId(Long projectId) { @@ -82,12 +84,14 @@ public class PerformServiceImpl implements IPerformService { projectOrderCreateReq.setBlackBox("0"); projectOrderCreateReq.setCombineTicketVos(null); projectOrderCreateReq.setOrdinaryTicketVos(null); - ProjectOrderCreateResp projectOrder = performServiceHttp.createProjectOrder(projectOrderCreateReq); - if (Objects.nonNull(projectOrder)) { - log.info("下单成功,订单信息:{}", JSONObject.toJSONString(projectOrder)); - String msg = "【芬玩岛】下单成功✅✅✅,演出名称:" + performByProjectId.getProjectName() + ",请在2分钟内完成付款!"; - dingTalkService.sendChatMessage(chatId, msg); - return Boolean.TRUE; + for (int i = 0; i <= 999; i++) { + ProjectOrderCreateResp projectOrder = httpRequestHelper.fetchWithRetry(() -> performServiceHttp.createProjectOrder(projectOrderCreateReq), "create-project-order"); + if (Objects.nonNull(projectOrder)) { + log.info("下单成功,订单信息:{}", JSONObject.toJSONString(projectOrder)); + String msg = "【芬玩岛】下单成功✅✅✅,演出名称:" + performByProjectId.getProjectName() + ",请在2分钟内完成付款!"; + dingTalkService.sendChatMessage(chatId, msg); + return Boolean.TRUE; + } } } return Boolean.FALSE; From 03b540b2ae117620f5bfd44f3a96a108d3a23a13 Mon Sep 17 00:00:00 2001 From: xiang Date: Tue, 29 Jul 2025 23:46:27 +0800 Subject: [PATCH 35/49] =?UTF-8?q?perf=EF=BC=9A=E4=B8=8B=E5=8D=95=E4=BC=98?= =?UTF-8?q?=E5=8C=96?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- pom.xml | 2 +- .../domain/service/IDomainServiceImpl.java | 4 ++-- .../xservice/fwd/constants/CodeConstants.java | 1 + .../xservice/fwd/schedule/TicketGrabTask.java | 7 ++----- .../impl/PerformServiceHttpServiceImpl.java | 8 ++++++++ .../fwd/service/impl/PerformServiceImpl.java | 18 ++++++++++++++++-- .../glados/service/GLaDOSServiceImpl.java | 2 +- 7 files changed, 31 insertions(+), 11 deletions(-) diff --git a/pom.xml b/pom.xml index 47fb50b..6e05f59 100644 --- a/pom.xml +++ b/pom.xml @@ -35,7 +35,7 @@ com.xiang xservice-third-part - 1.0-snapshot + 1.1-snapshot com.xiang diff --git a/script/src/main/java/com/xiang/xservice/domain/service/IDomainServiceImpl.java b/script/src/main/java/com/xiang/xservice/domain/service/IDomainServiceImpl.java index 92e2cdd..4f4dd6e 100644 --- a/script/src/main/java/com/xiang/xservice/domain/service/IDomainServiceImpl.java +++ b/script/src/main/java/com/xiang/xservice/domain/service/IDomainServiceImpl.java @@ -58,14 +58,14 @@ public class IDomainServiceImpl implements IDomainService { if (records.isEmpty()) { log.info("未找到记录,添加记录..., ip:{}", publicIp); addDnsRecord(client, publicIp, rr); - dingTalkService.sendChatMessage(chatId, "动态解析公网ip成功,域名:" + rr + "." + DOMAIN_NAME + ", 新ip:" + publicIp); + dingTalkService.sendRobotMessage("动态解析公网ip成功,域名:" + rr + "." + DOMAIN_NAME + ", 新ip:" + publicIp); } else { String recordId = records.get(0).getRecordId(); String currentValue = records.get(0).getValue(); if (!publicIp.equals(currentValue)) { log.info("IP变更,更新记录...,ip:{}", publicIp); updateDnsRecord(client, recordId, publicIp, rr); - dingTalkService.sendChatMessage(chatId, "动态解析公网ip成功,域名:" + rr + "." + DOMAIN_NAME + ", 新ip:" + publicIp); + dingTalkService.sendRobotMessage("动态解析公网ip成功,域名:" + rr + "." + DOMAIN_NAME + ", 新ip:" + publicIp); } else { log.info("ip未变更,无需修改,ip:{}", publicIp); } diff --git a/script/src/main/java/com/xiang/xservice/fwd/constants/CodeConstants.java b/script/src/main/java/com/xiang/xservice/fwd/constants/CodeConstants.java index fdaa507..39c160b 100644 --- a/script/src/main/java/com/xiang/xservice/fwd/constants/CodeConstants.java +++ b/script/src/main/java/com/xiang/xservice/fwd/constants/CodeConstants.java @@ -2,4 +2,5 @@ package com.xiang.xservice.fwd.constants; public class CodeConstants { public static final Integer SUCCESS = 10000; + public static final Integer LIMIT = 47009; } diff --git a/script/src/main/java/com/xiang/xservice/fwd/schedule/TicketGrabTask.java b/script/src/main/java/com/xiang/xservice/fwd/schedule/TicketGrabTask.java index ae6b271..88eee70 100644 --- a/script/src/main/java/com/xiang/xservice/fwd/schedule/TicketGrabTask.java +++ b/script/src/main/java/com/xiang/xservice/fwd/schedule/TicketGrabTask.java @@ -45,11 +45,8 @@ public class TicketGrabTask implements Runnable { for (FUserConfig userConfig : availableUser) { List audiences = audienceConfigMapper.getAudienceByUserId(userConfig.getId()); try { - if (performService.createProjectOrder(param.getProjectId(), audiences.stream().map(FAudienceConfig::getFrequentId).collect(Collectors.toList()))) { - dynamicTaskSchedulerService.finishTask(param.getTaskId()); - } else { - dynamicTaskSchedulerService.finishTask(param.getTaskId()); - } + performService.createProjectOrder(param.getProjectId(), audiences.stream().map(FAudienceConfig::getFrequentId).collect(Collectors.toList())); + dynamicTaskSchedulerService.finishTask(param.getTaskId()); } catch (Exception e) { log.error("创建订单失败", e); dynamicTaskSchedulerService.errTask(param.getTaskId()); 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 1a6145e..2ea1380 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 @@ -100,6 +100,14 @@ public class PerformServiceHttpServiceImpl implements IPerformServiceHttp { } return projectOrderCreateResp; } + if (Objects.nonNull(code) && Objects.equals(code, CodeConstants.LIMIT)) { + try { + Thread.sleep(60000); + } catch (InterruptedException e) { + e.printStackTrace(); + } + return null; + } return null; } 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 4dafea6..3980f78 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 @@ -1,6 +1,7 @@ package com.xiang.xservice.fwd.service.impl; import com.alibaba.fastjson2.JSONObject; +import com.xiang.xservice.basic.config.MyThreadFactory; 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; @@ -24,6 +25,10 @@ import java.util.ArrayList; import java.util.Collections; import java.util.List; import java.util.Objects; +import java.util.concurrent.ExecutorService; +import java.util.concurrent.LinkedBlockingQueue; +import java.util.concurrent.ThreadPoolExecutor; +import java.util.concurrent.TimeUnit; /** * @Author: xiang @@ -42,6 +47,15 @@ public class PerformServiceImpl implements IPerformService { @Value("${DingTalk.chatId}") private String chatId; private final HttpRequestHelper httpRequestHelper; + private final ExecutorService es = + new ThreadPoolExecutor( + 10, + 20, + 1000, + TimeUnit.MILLISECONDS, + new LinkedBlockingQueue<>(), + new MyThreadFactory("ticket-", Boolean.TRUE), + new ThreadPoolExecutor.AbortPolicy()); @Override public FPerformProjectInfo getPerformByProjectId(Long projectId) { @@ -84,12 +98,12 @@ public class PerformServiceImpl implements IPerformService { projectOrderCreateReq.setBlackBox("0"); projectOrderCreateReq.setCombineTicketVos(null); projectOrderCreateReq.setOrdinaryTicketVos(null); - for (int i = 0; i <= 999; i++) { + for (int i = 1; i <= 30; i++) { ProjectOrderCreateResp projectOrder = httpRequestHelper.fetchWithRetry(() -> performServiceHttp.createProjectOrder(projectOrderCreateReq), "create-project-order"); if (Objects.nonNull(projectOrder)) { log.info("下单成功,订单信息:{}", JSONObject.toJSONString(projectOrder)); String msg = "【芬玩岛】下单成功✅✅✅,演出名称:" + performByProjectId.getProjectName() + ",请在2分钟内完成付款!"; - dingTalkService.sendChatMessage(chatId, msg); + dingTalkService.sendRobotMessage(msg); return Boolean.TRUE; } } diff --git a/script/src/main/java/com/xiang/xservice/glados/service/GLaDOSServiceImpl.java b/script/src/main/java/com/xiang/xservice/glados/service/GLaDOSServiceImpl.java index 18fbb0f..7ae1cab 100644 --- a/script/src/main/java/com/xiang/xservice/glados/service/GLaDOSServiceImpl.java +++ b/script/src/main/java/com/xiang/xservice/glados/service/GLaDOSServiceImpl.java @@ -84,7 +84,7 @@ public class GLaDOSServiceImpl implements GLaDOSService{ log.info("签到成功, 签到积分:{}, 签到消息:{}", gLaDOSResponse.getPoints(), gLaDOSResponse.getMessage()); sb.append(user.getEmail()).append("签到成功,获得积分:").append(gLaDOSResponse.getPoints()).append("\n"); try { - dingTalkService.sendChatMessage(chatId, "[时间:" + LocalDateTime.now() + "] 用户: " + + dingTalkService.sendRobotMessage("[时间:" + LocalDateTime.now() + "] 用户: " + user.getEmail() + "签到成功,获得积分:" + gLaDOSResponse.getPoints()); } catch (Exception e) { log.error("发送钉钉消息失败", e); From f25e8638d242b122ae66e163e61abce215390d7a Mon Sep 17 00:00:00 2001 From: xiang Date: Wed, 30 Jul 2025 23:04:08 +0800 Subject: [PATCH 36/49] =?UTF-8?q?perf=EF=BC=9A=E4=B8=8B=E5=8D=95=E4=BC=98?= =?UTF-8?q?=E5=8C=96?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../fwd/service/IPerformServiceHttp.java | 2 +- .../impl/PerformServiceHttpServiceImpl.java | 21 +++++++------------ .../fwd/service/impl/PerformServiceImpl.java | 11 ++++++++-- 3 files changed, 18 insertions(+), 16 deletions(-) diff --git a/script/src/main/java/com/xiang/xservice/fwd/service/IPerformServiceHttp.java b/script/src/main/java/com/xiang/xservice/fwd/service/IPerformServiceHttp.java index bcd389d..fe88a32 100644 --- a/script/src/main/java/com/xiang/xservice/fwd/service/IPerformServiceHttp.java +++ b/script/src/main/java/com/xiang/xservice/fwd/service/IPerformServiceHttp.java @@ -31,7 +31,7 @@ public interface IPerformServiceHttp { * @param req 创建请求参数 * @return ProjectOrderCreateResp */ - ProjectOrderCreateResp createProjectOrder(ProjectOrderCreateReq req); + ProjectOrderCreateResp createProjectOrder(ProjectOrderCreateReq req, String token); /** * http请求查询演出票务信息 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 2ea1380..d360601 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 @@ -85,8 +85,8 @@ public class PerformServiceHttpServiceImpl implements IPerformServiceHttp { } @Override - public ProjectOrderCreateResp createProjectOrder(ProjectOrderCreateReq req) { - String respStr = HttpUtils.doPost(UrlConstants.PROJECT_ORDER_CREATE_URL, buildFWDHeaders(UrlConstants.token), JsonUtils.toJsonString(req)); + public ProjectOrderCreateResp createProjectOrder(ProjectOrderCreateReq req, String token) { + String respStr = HttpUtils.doPost(UrlConstants.PROJECT_ORDER_CREATE_URL, buildFWDHeaders(token), JsonUtils.toJsonString(req)); if (StringUtils.isBlank(respStr)) { return null; } @@ -100,14 +100,6 @@ public class PerformServiceHttpServiceImpl implements IPerformServiceHttp { } return projectOrderCreateResp; } - if (Objects.nonNull(code) && Objects.equals(code, CodeConstants.LIMIT)) { - try { - Thread.sleep(60000); - } catch (InterruptedException e) { - e.printStackTrace(); - } - return null; - } return null; } @@ -180,16 +172,19 @@ public class PerformServiceHttpServiceImpl implements IPerformServiceHttp { private Map buildFWDHeaders(String token) { Map headers = Maps.newHashMap(); - headers.put("content-type", "application/json"); headers.put("Host", "api.livelab.com.cn"); headers.put("Connection", "keep-alive"); + headers.put("Content-Length", "316"); headers.put("platform-type", "%E7%BA%B7%E7%8E%A9%E5%B2%9B%E5%BE%AE%E4%BF%A1%E5%B0%8F%E7%A8%8B%E5%BA%8F"); + headers.put("content-type", "application/json"); headers.put("x-fwd-anonymousId", "ocXac5C25MY5O3UM_EfL0oTgm7Jw"); - headers.put("User-Agent", "Mozilla/5.0 (iPhone; CPU iPhone OS 18_5 like Mac OS X) AppleWebKit/605.1.15 (KHTML, like Gecko) Mobile/15E148 MicroMessenger/8.0.61(0x18003d2e) NetType/WIFI Language/zh_CN"); - headers.put("X-REQUEST-STARTTIME", String.valueOf(System.currentTimeMillis())); + headers.put("platform-version", "3.12.0"); if (StringUtils.isNotBlank(token)) { headers.put("Authorization", token); } + headers.put("Accept-Encoding", "gzip,compress,br,deflate"); + headers.put("User-Agent", "Mozilla/5.0 (iPhone; CPU iPhone OS 18_5 like Mac OS X) AppleWebKit/605.1.15 (KHTML, like Gecko) Mobile/15E148 MicroMessenger/8.0.61(0x18003d30) NetType/4G Language/zh_CN"); + headers.put("Referer", "https://servicewechat.com/wx5a8f481d967649eb/114/page-frame.html"); return headers; } } 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 3980f78..308e20b 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 @@ -6,11 +6,13 @@ 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.pojo.FUserConfig; 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.mapper.FwdUserConfigMapper; import com.xiang.xservice.fwd.service.IPerformService; import com.xiang.xservice.fwd.service.IPerformServiceHttp; import com.xiang.xservice.http.helper.HttpRequestHelper; @@ -44,6 +46,7 @@ public class PerformServiceImpl implements IPerformService { private final FwdPerformConfigMapper fwdPerformConfigMapper; private final IPerformServiceHttp performServiceHttp; private final DingTalkService dingTalkService; + private final FwdUserConfigMapper fwdUserConfigMapper; @Value("${DingTalk.chatId}") private String chatId; private final HttpRequestHelper httpRequestHelper; @@ -69,6 +72,10 @@ public class PerformServiceImpl implements IPerformService { @Override public Boolean createProjectOrder(Long projectId, List frequentIds) throws Exception { + List availableUser = fwdUserConfigMapper.getAvailableUser(); + if (CollectionUtils.isEmpty(availableUser)) { + return Boolean.FALSE; + } FPerformProjectInfo performByProjectId = getPerformByProjectId(projectId); if (Objects.isNull(performByProjectId)) { log.info("该projectId:{}暂无演出信息", projectId); @@ -98,8 +105,8 @@ public class PerformServiceImpl implements IPerformService { projectOrderCreateReq.setBlackBox("0"); projectOrderCreateReq.setCombineTicketVos(null); projectOrderCreateReq.setOrdinaryTicketVos(null); - for (int i = 1; i <= 30; i++) { - ProjectOrderCreateResp projectOrder = httpRequestHelper.fetchWithRetry(() -> performServiceHttp.createProjectOrder(projectOrderCreateReq), "create-project-order"); + for (int i = 1; i <= 10; i++) { + ProjectOrderCreateResp projectOrder = httpRequestHelper.fetchWithRetry(() -> performServiceHttp.createProjectOrder(projectOrderCreateReq, availableUser.get(0).getToken()), "create-project-order"); if (Objects.nonNull(projectOrder)) { log.info("下单成功,订单信息:{}", JSONObject.toJSONString(projectOrder)); String msg = "【芬玩岛】下单成功✅✅✅,演出名称:" + performByProjectId.getProjectName() + ",请在2分钟内完成付款!"; From 2bb8508ca47d60a28d3930691d8406cef9351966 Mon Sep 17 00:00:00 2001 From: Zhujx Date: Thu, 31 Jul 2025 18:31:55 +0800 Subject: [PATCH 37/49] =?UTF-8?q?perf:=E5=9F=BA=E9=87=91=E6=95=B0=E6=8D=AE?= =?UTF-8?q?=E5=8F=98=E6=9B=B4=E5=AE=9A=E6=97=B6=E4=BB=BB=E5=8A=A1?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../xservice/xb/schedule/xb/FundCountJob.java | 2 +- .../xb/schedule/xb/FundInfoQueryJob.java | 11 +- .../xb/schedule/xb/FundMsgReportJob.java | 152 ++++++++++++++++++ 3 files changed, 158 insertions(+), 7 deletions(-) create mode 100644 script/src/main/java/com/xiang/xservice/xb/schedule/xb/FundMsgReportJob.java diff --git a/script/src/main/java/com/xiang/xservice/xb/schedule/xb/FundCountJob.java b/script/src/main/java/com/xiang/xservice/xb/schedule/xb/FundCountJob.java index 0cc9e02..e1aee66 100644 --- a/script/src/main/java/com/xiang/xservice/xb/schedule/xb/FundCountJob.java +++ b/script/src/main/java/com/xiang/xservice/xb/schedule/xb/FundCountJob.java @@ -61,7 +61,7 @@ public class FundCountJob { xbFundCount.setLId(xbFundList.getId()); xbFundCount.setCode(xbFundList.getCode()); xbFundCount.setName(xbFundList.getName()); - xbFundCount.setChange(fund.get(0).getChange()); + xbFundCount.setChange(fund.get(0).getChange().multiply(new BigDecimal("100")).setScale(2, RoundingMode.HALF_UP)); xbFundCount.setUpdateTime(LocalDateTime.now()); counts.add(xbFundCount); } diff --git a/script/src/main/java/com/xiang/xservice/xb/schedule/xb/FundInfoQueryJob.java b/script/src/main/java/com/xiang/xservice/xb/schedule/xb/FundInfoQueryJob.java index e092c69..6673380 100644 --- a/script/src/main/java/com/xiang/xservice/xb/schedule/xb/FundInfoQueryJob.java +++ b/script/src/main/java/com/xiang/xservice/xb/schedule/xb/FundInfoQueryJob.java @@ -66,7 +66,7 @@ public class FundInfoQueryJob { * 基金增长定时任务查询 * 半个小时一次 9点开始到3.30结束 */ - @Scheduled(cron = "0 1,31 9,10,11,13,14 * * ? ") +// @Scheduled(cron = "0 1,31 9,10,11,13,14 * * ? ") public void queryFundJob() throws Exception { // 周六周日过滤 if (Objects.equals(LocalDateTime.now().getDayOfWeek(), DayOfWeek.SATURDAY) || @@ -96,10 +96,9 @@ public class FundInfoQueryJob { log.info("==========================[基金查询] 基金查询定时任务结束!=========================="); } /** - * 基金增长定时任务查询 - * 半个小时一次 9点开始到3.30结束 + * 美股基金每日早上9点消息一次 */ - @Scheduled(cron = "0 0 9 * * ? ") +// @Scheduled(cron = "0 0 9 * * ? ") public void queryFundJob3() throws Exception { // 周六周日过滤 if (Objects.equals(LocalDateTime.now().getDayOfWeek(), DayOfWeek.SATURDAY) || @@ -129,10 +128,10 @@ public class FundInfoQueryJob { log.info("==========================[基金查询] 基金查询定时任务结束!=========================="); } /** - * 基金增长定时任务查询 + * 港股基金增长定时任务查询 * 半个小时一次 9点开始到3.30结束 */ - @Scheduled(cron = "0 1,31 9,10,11,13,14,15 * * ? ") +// @Scheduled(cron = "0 1,31 9,10,11,13,14,15 * * ? ") public void queryFundJob2() throws Exception { // 周六周日过滤 if (Objects.equals(LocalDateTime.now().getDayOfWeek(), DayOfWeek.SATURDAY) || diff --git a/script/src/main/java/com/xiang/xservice/xb/schedule/xb/FundMsgReportJob.java b/script/src/main/java/com/xiang/xservice/xb/schedule/xb/FundMsgReportJob.java new file mode 100644 index 0000000..9ce3dc4 --- /dev/null +++ b/script/src/main/java/com/xiang/xservice/xb/schedule/xb/FundMsgReportJob.java @@ -0,0 +1,152 @@ +package com.xiang.xservice.xb.schedule.xb; + +import com.alibaba.fastjson.JSON; +import com.xiang.xservice.basic.xservice.dingTalk.service.DingTalkService; +import com.xiang.xservice.xb.entity.pojo.xb.XbFundList; +import com.xiang.xservice.xb.entity.response.xbyj.fund.FundList; +import com.xiang.xservice.xb.service.FundService; +import lombok.RequiredArgsConstructor; +import lombok.extern.slf4j.Slf4j; +import org.apache.commons.collections4.CollectionUtils; +import org.springframework.beans.factory.annotation.Value; +import org.springframework.scheduling.annotation.Scheduled; +import org.springframework.stereotype.Component; + +import java.math.BigDecimal; +import java.math.RoundingMode; +import java.time.DayOfWeek; +import java.time.LocalDate; +import java.time.LocalDateTime; +import java.time.format.DateTimeFormatter; +import java.util.ArrayList; +import java.util.List; +import java.util.Map; +import java.util.Objects; +import java.util.function.Function; +import java.util.stream.Collectors; + +/** + * @Author: xiang + * @Date: 2025-07-31 18:10 + */ +@Component +@Slf4j +@RequiredArgsConstructor +public class FundMsgReportJob { + + private final FundService fundService; + private final DingTalkService dingTalkService; + @Value("${DingTalk.chatId}") + private String chatId; + private static final Integer TYPE_A = 1; + private static final Integer TYPE_M = 3; + private static final Integer TYPE_G = 2; + + @Scheduled(cron = "0 1,31 9,10,11,13,14 * * ?") + public void fundReport4A() { + log.info("===========A股基金变化通知!==========="); + // 周六周日过滤 + if (Objects.equals(LocalDateTime.now().getDayOfWeek(), DayOfWeek.SATURDAY) || + Objects.equals(LocalDateTime.now().getDayOfWeek(), DayOfWeek.SUNDAY)) { + log.info("当前时间为:{}", LocalDateTime.now()); + return; + } + List fundLists = fundService.queryFundList(TYPE_A); + if (CollectionUtils.isEmpty(fundLists)) { + log.info("查询配置的A股信息为空"); + return; + } + Map fundMap = fundLists.stream().collect(Collectors.toMap(XbFundList::getCode, Function.identity(), (a, b) -> a)); + String date = LocalDate.now().format(DateTimeFormatter.ofPattern("yyyy-MM-dd")); + List funds = fundService.queryTodayList(date, "2", Boolean.TRUE, new ArrayList<>(fundMap.keySet())); + if (CollectionUtils.isEmpty(funds)) { + log.info("http请求查询基金信息为空"); + return; + } + log.info("http查询基金信息:{}", JSON.toJSONString(funds)); + StringBuilder msg = new StringBuilder(date).append("===》A股基金变化通知:\n"); + buildMsg(funds, fundMap, msg); + try { + dingTalkService.sendChatMessage(chatId, msg.toString()); + } catch (Exception e) { + log.error("钉钉消息通知异常.", e); + } + } + + @Scheduled(cron = "0 1,31 9,10,11,13,14,15 * * ?") + public void fundReport4G() { + log.info("===========港股基金变化通知!==========="); + // 周六周日过滤 + if (Objects.equals(LocalDateTime.now().getDayOfWeek(), DayOfWeek.SATURDAY) || + Objects.equals(LocalDateTime.now().getDayOfWeek(), DayOfWeek.SUNDAY)) { + log.info("当前时间为:{}", LocalDateTime.now()); + return; + } + List fundLists = fundService.queryFundList(TYPE_G); + if (CollectionUtils.isEmpty(fundLists)) { + log.info("查询配置的港股信息为空"); + return; + } + Map fundMap = fundLists.stream().collect(Collectors.toMap(XbFundList::getCode, Function.identity(), (a, b) -> a)); + String date = LocalDate.now().format(DateTimeFormatter.ofPattern("yyyy-MM-dd")); + List funds = fundService.queryTodayList(date, "2", Boolean.TRUE, new ArrayList<>(fundMap.keySet())); + if (CollectionUtils.isEmpty(funds)) { + log.info("http请求查询基金信息为空"); + return; + } + log.info("http查询港股基金信息:{}", JSON.toJSONString(funds)); + StringBuilder msg = new StringBuilder(date).append("===》港股基金变化通知:\n"); + buildMsg(funds, fundMap, msg); + try { + dingTalkService.sendChatMessage(chatId, msg.toString()); + } catch (Exception e) { + log.error("钉钉消息通知异常.", e); + } + } + + @Scheduled(cron = "0 0 9 * * ?") + public void fundReport4M() { + log.info("===========美股基金变化通知!==========="); + // 周六周日过滤 + if (Objects.equals(LocalDateTime.now().getDayOfWeek(), DayOfWeek.SATURDAY) || + Objects.equals(LocalDateTime.now().getDayOfWeek(), DayOfWeek.SUNDAY)) { + log.info("当前时间为:{}", LocalDateTime.now()); + return; + } + List fundLists = fundService.queryFundList(TYPE_M); + if (CollectionUtils.isEmpty(fundLists)) { + log.info("查询配置的美股信息为空"); + return; + } + Map fundMap = fundLists.stream().collect(Collectors.toMap(XbFundList::getCode, Function.identity(), (a, b) -> a)); + String date = LocalDate.now().format(DateTimeFormatter.ofPattern("yyyy-MM-dd")); + List funds = fundService.queryTodayList(date, "2", Boolean.TRUE, new ArrayList<>(fundMap.keySet())); + if (CollectionUtils.isEmpty(funds)) { + log.info("http请求查询基金信息为空"); + return; + } + log.info("http查询美股基金信息:{}", JSON.toJSONString(funds)); + StringBuilder msg = new StringBuilder(date).append("===》美股基金变化通知:\n"); + buildMsg(funds, fundMap, msg); + try { + dingTalkService.sendChatMessage(chatId, msg.toString()); + } catch (Exception e) { + log.error("钉钉消息通知异常.", e); + } + } + + private static void buildMsg(List funds, Map fundMap, StringBuilder msg) { + for (FundList fund : funds) { + if (fundMap.containsKey(fund.getCode())) { + XbFundList fundList = fundMap.get(fund.getCode()); + msg.append("基金名称:") + .append(fundList.getName()) + .append("涨跌幅:") + .append(fund.getChange() + .multiply(new BigDecimal("100")) + .setScale(2, RoundingMode.HALF_UP)) + .append("\n"); + } + } + } +} From 1fc66ca0f499bf9b280a1bb82f6d289f3c065b53 Mon Sep 17 00:00:00 2001 From: xiang Date: Sun, 3 Aug 2025 17:39:54 +0800 Subject: [PATCH 38/49] =?UTF-8?q?perf=EF=BC=9Aget=E8=AF=B7=E6=B1=82?= =?UTF-8?q?=E5=8F=91=E9=80=81=E4=BC=98=E5=8C=96?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- pom.xml | 14 +-- .../fwd/schedule/FwdImportantMsgJob.java | 113 +++++++++++++++++- .../fwd/schedule/PullDataFromFWDJob.java | 2 +- .../impl/PerformServiceHttpServiceImpl.java | 1 - 4 files changed, 119 insertions(+), 11 deletions(-) diff --git a/pom.xml b/pom.xml index 6e05f59..3bd8869 100644 --- a/pom.xml +++ b/pom.xml @@ -7,7 +7,7 @@ com.xiang xservice-basic - 1.1-SNAPSHOT + 1.0 com.xiang @@ -30,27 +30,27 @@ com.xiang xservice-common - 1.0.2-SNAPSHOT + 1.0 com.xiang - xservice-third-part - 1.1-snapshot + xservice-message-starter + 1.0 com.xiang xservice-schedule-starter - 1.1-snapshot + 1.0 com.xiang xservice-cache - 1.0-SNAPSHOT + 1.0 com.xiang xservice-http-starter - 1.0-SNAPSHOT + 1.0 diff --git a/script/src/main/java/com/xiang/xservice/fwd/schedule/FwdImportantMsgJob.java b/script/src/main/java/com/xiang/xservice/fwd/schedule/FwdImportantMsgJob.java index b0e6ffb..dbedf15 100644 --- a/script/src/main/java/com/xiang/xservice/fwd/schedule/FwdImportantMsgJob.java +++ b/script/src/main/java/com/xiang/xservice/fwd/schedule/FwdImportantMsgJob.java @@ -1,7 +1,7 @@ package com.xiang.xservice.fwd.schedule; import com.alibaba.fastjson.JSON; -import com.alibaba.fastjson2.JSONObject; +import com.alibaba.fastjson.JSONObject; import com.google.common.collect.Maps; import com.xiang.xservice.basic.utils.DateUtils; import com.xiang.xservice.basic.utils.PrimaryKeyUtils; @@ -9,11 +9,14 @@ import com.xiang.xservice.basic.xservice.dingTalk.service.DingTalkService; import com.xiang.xservice.fwd.entity.param.FwdOrderTaskParam; 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.mapper.FwdAudienceConfigMapper; import com.xiang.xservice.fwd.mapper.FwdPerformConfigMapper; import com.xiang.xservice.fwd.mapper.FwdPerformProjectInfoMapper; import com.xiang.xservice.fwd.mapper.FwdUserConfigMapper; import com.xiang.xservice.fwd.service.IPerformService; +import com.xiang.xservice.fwd.service.IPerformServiceHttp; import com.xiang.xservice.schedule.core.DynamicTaskScheduler; import com.xiang.xservice.schedule.entity.ScheduledTaskEntity; import com.xiang.xservice.schedule.entity.TaskConfig; @@ -28,6 +31,7 @@ import org.springframework.beans.factory.annotation.Value; import org.springframework.scheduling.annotation.Scheduled; import org.springframework.stereotype.Component; import org.springframework.web.bind.annotation.PostMapping; +import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.RestController; import javax.annotation.PostConstruct; @@ -36,6 +40,8 @@ import java.time.LocalDateTime; import java.util.HashMap; import java.util.List; import java.util.Map; +import java.util.Objects; +import java.util.function.Function; import java.util.stream.Collectors; /** @@ -46,6 +52,7 @@ import java.util.stream.Collectors; @RequiredArgsConstructor @Slf4j @RestController +@RequestMapping("/system/job/fwd") public class FwdImportantMsgJob { private final FwdPerformProjectInfoMapper performProjectInfoMapper; @@ -56,6 +63,7 @@ public class FwdImportantMsgJob { private final FwdAudienceConfigMapper fwdAudienceConfigMapper; private final IPerformService iPerformService; private final IDynamicTaskSchedulerService dynamicTaskSchedulerService; + private final IPerformServiceHttp iPerformServiceHttp; @Value("${DingTalk.chatId}") private String chatId; @@ -120,10 +128,111 @@ public class FwdImportantMsgJob { savaTask(data, taskId, params); } msg.append("请注意进行数据库配置的更改!"); - dingTalkService.sendChatMessage(chatId, msg.toString()); + dingTalkService.sendRobotMessage(msg.toString()); log.info("【芬玩岛】演唱会预售定时任务结束!time:{}", System.currentTimeMillis()); } + @Scheduled(cron = "0 10 8 1/1 * ?") + @PostMapping("/presaleSeatReminderJob") + public void presaleSeatReminderJob() { + + ScheduledTaskEntity entity = new ScheduledTaskEntity(); + entity.setStatus(TaskStatusEnum.UN_START.getCode()); + List taskList = dynamicTaskSchedulerService.getTaskList(entity); + if (CollectionUtils.isEmpty(taskList)) { + log.info("今天暂无预售的演出,time:{}", LocalDateTime.now()); + return; + } + log.info("今天:{}的预售的项目信息:{}", LocalDateTime.now(), JSON.toJSONString(taskList)); + LocalDateTime todayStartTime = LocalDate.now().atTime(0, 0, 0); + LocalDateTime todayEndTime = LocalDate.now().atTime(23, 59, 59); + + StringBuffer msg = new StringBuffer(); + + taskList.forEach(taskEntity -> { + String parameters = taskEntity.getParameters(); + JSONObject jsonObject = JSON.parseObject(parameters); + Long projectId = null; + try { + projectId = (Long) jsonObject.get("projectId"); + } catch (Exception e) { + log.error("异常错误信息:{}", JSON.toJSONString(taskEntity), e); + } + if (Objects.nonNull(projectId)) { + Perform performsByProjectIdFromHttp = iPerformServiceHttp.getPerformsByProjectIdFromHttp(projectId); + if (Objects.nonNull(performsByProjectIdFromHttp)) { + for (PerformInfo performInfo : performsByProjectIdFromHttp.getPerformInfos()) { + for (PerformDetail performDetail : performInfo.getPerformInfo()) { + LocalDateTime saleTime = DateUtils.getTimeFromStr(performDetail.getSaleTime()); + if (saleTime.isAfter(todayStartTime) && saleTime.isBefore(todayEndTime)) { + List seatPlans = performDetail.getSeatPlans(); + Map seatPlanMap = seatPlans.stream().collect(Collectors.toMap(SeatPlan::getSeatPlanId, Function.identity(), (a, b) -> a)); + List seatPlanIds = seatPlans.stream().map(SeatPlan::getSeatPlanId).collect(Collectors.toList()); + List seatPlanStatusFromHttp = iPerformServiceHttp.getSeatPlanStatusFromHttp(seatPlanIds); + for (SeatPlanStatus seatPlanStatus : seatPlanStatusFromHttp) { + if (!seatPlanStatus.getSoldOutFlag()) { + FPerformSeatInfo seatInfoBySeatId = iPerformService.getSeatInfoBySeatId(seatPlanStatus.getSeatPlanId()); + if (Objects.nonNull(seatInfoBySeatId)) { + seatInfoBySeatId.setSoldOut(0); + iPerformService.updateSeatInfo(seatInfoBySeatId); + msg.append("演出任务名称").append(taskEntity.getTaskName()).append("的场次信息") + .append(performDetail.getName()).append("的座位信息") + .append(seatInfoBySeatId.getSeatPlanName()).append("信息已更新\n"); + } else { + if (seatPlanMap.containsKey(seatPlanStatus.getSeatPlanId())) { + SeatPlan seatPlan = seatPlanMap.get(seatPlanStatus.getSeatPlanId()); + FPerformSeatInfo fPerformSeatInfo = new FPerformSeatInfo(); + fPerformSeatInfo.setSeatPlanId(seatInfoBySeatId.getSeatPlanId()); + fPerformSeatInfo.setSeatPlanName(seatPlan.getSeatPlanName()); + fPerformSeatInfo.setPerformId(seatInfoBySeatId.getPerformId()); + fPerformSeatInfo.setPerformName(seatInfoBySeatId.getPerformName()); + fPerformSeatInfo.setStopSale(seatInfoBySeatId.getStopSale()); + fPerformSeatInfo.setShelfStatus(seatInfoBySeatId.getShelfStatus()); + fPerformSeatInfo.setPrice(seatInfoBySeatId.getPrice()); + fPerformSeatInfo.setDiscountPrice(seatInfoBySeatId.getDiscountPrice()); + fPerformSeatInfo.setSubStatus(seatInfoBySeatId.getSubStatus()); + fPerformSeatInfo.setQuantity(seatInfoBySeatId.getQuantity()); + fPerformSeatInfo.setStatus(seatInfoBySeatId.getStatus()); + fPerformSeatInfo.setMaxSellStock(seatInfoBySeatId.getMaxSellStock()); + fPerformSeatInfo.setSoldStock(seatInfoBySeatId.getSoldStock()); + fPerformSeatInfo.setLeftStock(seatInfoBySeatId.getLeftStock()); + fPerformSeatInfo.setAbleSaleQuantity(seatInfoBySeatId.getAbleSaleQuantity()); + fPerformSeatInfo.setAshShow(seatInfoBySeatId.getAshShow()); + fPerformSeatInfo.setAshShowDesc(seatInfoBySeatId.getAshShowDesc()); + fPerformSeatInfo.setSelectable(seatInfoBySeatId.getSelectable()); + fPerformSeatInfo.setDisplay(seatInfoBySeatId.getDisplay()); + fPerformSeatInfo.setAvailableTicketQuantity(seatInfoBySeatId.getAvailableTicketQuantity()); + fPerformSeatInfo.setAvailableAllTicketQuantity(seatInfoBySeatId.getAvailableAllTicketQuantity()); + fPerformSeatInfo.setSaleTime(seatInfoBySeatId.getSaleTime()); + fPerformSeatInfo.setProjectId(seatInfoBySeatId.getProjectId()); + fPerformSeatInfo.setSoldOut(seatInfoBySeatId.getSoldOut()); + iPerformService.addSeatInfo(fPerformSeatInfo); + msg.append("演出任务名称").append(taskEntity.getTaskName()).append("的场次信息") + .append(performDetail.getName()).append("的座位信息") + .append(seatPlan.getSeatPlanName()).append("信息已更新\n"); + } + } + + } else { + log.info("演出:{},座位:{},已售罄", performDetail.getName(), seatPlanStatus.getSeatPlanId()); + msg.append("演出任务名称").append(taskEntity.getTaskName()).append("的场次信息") + .append(performDetail.getName()).append("的座位信息").append("已售罄\n"); + } + } + } + } + } + } + } + }); + try { + dingTalkService.sendRobotMessage(msg.toString()); + } catch (Exception e) { + log.error("信息发送异常, 信息:{}", msg, e); + } + + } + private void savaTask(FPerformProjectInfo data, long taskId, Map params) { ScheduledTaskEntity entity = new ScheduledTaskEntity(); entity.setId(taskId); 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 f19ac22..c31e5f6 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 @@ -91,7 +91,7 @@ public class PullDataFromFWDJob { performProjectInfoMapper.insert(fPerformProjectInfo); } - @Scheduled(cron = "0 10 8 1/1 * ?") +// @Scheduled(cron = "0 10 8 1/1 * ?") @PostMapping("/pullSeatDataJob") public void pullSeatDataJob() { List availablePerform = performConfigMapper.getAvailablePerform(); 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 d360601..9749518 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 @@ -174,7 +174,6 @@ public class PerformServiceHttpServiceImpl implements IPerformServiceHttp { Map headers = Maps.newHashMap(); headers.put("Host", "api.livelab.com.cn"); headers.put("Connection", "keep-alive"); - headers.put("Content-Length", "316"); headers.put("platform-type", "%E7%BA%B7%E7%8E%A9%E5%B2%9B%E5%BE%AE%E4%BF%A1%E5%B0%8F%E7%A8%8B%E5%BA%8F"); headers.put("content-type", "application/json"); headers.put("x-fwd-anonymousId", "ocXac5C25MY5O3UM_EfL0oTgm7Jw"); From d8511c9c48a01a9e7ebe3768118bbce69764125a Mon Sep 17 00:00:00 2001 From: Zhujx Date: Tue, 5 Aug 2025 11:17:30 +0800 Subject: [PATCH 39/49] =?UTF-8?q?fix:=E9=92=89=E9=92=89=E6=B6=88=E6=81=AF?= =?UTF-8?q?=E5=8F=91=E9=80=81?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../com/xiang/xservice/glados/service/GLaDOSServiceImpl.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/script/src/main/java/com/xiang/xservice/glados/service/GLaDOSServiceImpl.java b/script/src/main/java/com/xiang/xservice/glados/service/GLaDOSServiceImpl.java index 7ae1cab..9199472 100644 --- a/script/src/main/java/com/xiang/xservice/glados/service/GLaDOSServiceImpl.java +++ b/script/src/main/java/com/xiang/xservice/glados/service/GLaDOSServiceImpl.java @@ -98,7 +98,7 @@ public class GLaDOSServiceImpl implements GLaDOSService{ log.warn("签到失败,用户:{}, cookie过期:{}", user.getEmail(), gLaDOSResponse.getMessage()); String message = "[时间:" + LocalDateTime.now() + "] 用户: " + user.getEmail() + ",签到消息: " + gLaDOSResponse.getMessage(); try { - dingTalkService.sendChatMessage(chatId, message); + dingTalkService.sendRobotMessage(message); } catch (Exception e) { log.error("发送钉钉消息失败", e); } From 84adaeca72a0150e8a2650418b637c99ea57800a Mon Sep 17 00:00:00 2001 From: Zhujx Date: Tue, 5 Aug 2025 15:03:08 +0800 Subject: [PATCH 40/49] =?UTF-8?q?fix=EF=BC=9Apom=E4=BF=AE=E6=94=B9?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- pom.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/pom.xml b/pom.xml index 3bd8869..833e1f1 100644 --- a/pom.xml +++ b/pom.xml @@ -44,7 +44,7 @@ com.xiang - xservice-cache + xservice-cache-starter 1.0 From a9b550bc1e13010ba2dc50cc5582aea16b132bfd Mon Sep 17 00:00:00 2001 From: xiang Date: Tue, 5 Aug 2025 20:46:28 +0800 Subject: [PATCH 41/49] =?UTF-8?q?feat:pom=E7=89=88=E6=9C=AC=E6=9B=B4?= =?UTF-8?q?=E6=9B=BF?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- pom.xml | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/pom.xml b/pom.xml index 833e1f1..7c96eb0 100644 --- a/pom.xml +++ b/pom.xml @@ -7,7 +7,7 @@ com.xiang xservice-basic - 1.0 + 1.1 com.xiang @@ -30,27 +30,27 @@ com.xiang xservice-common - 1.0 + 1.1 com.xiang xservice-message-starter - 1.0 + 1.1 com.xiang xservice-schedule-starter - 1.0 + 1.1 com.xiang xservice-cache-starter - 1.0 + 1.1 com.xiang xservice-http-starter - 1.0 + 1.1 From 3903a38ead8d469788f94767768c6a3a96acb01b Mon Sep 17 00:00:00 2001 From: Zhujx Date: Wed, 6 Aug 2025 11:32:21 +0800 Subject: [PATCH 42/49] =?UTF-8?q?fix=EF=BC=9A=E6=97=A5=E6=9C=9F=E5=B7=A5?= =?UTF-8?q?=E5=85=B7=E7=B1=BB=E4=BF=AE=E5=A4=8D=EF=BC=9B=20feat=EF=BC=9A?= =?UTF-8?q?=E6=96=B0=E5=A2=9E=E6=9B=B4=E6=96=B0user=20token=E5=B7=A5?= =?UTF-8?q?=E5=85=B7?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- pom.xml | 12 +- .../fwd/mapper/FwdUserConfigMapper.java | 23 ++++ .../fwd/schedule/FwdImportantMsgJob.java | 4 +- .../fwd/schedule/PullDataFromFWDJob.java | 110 ++++-------------- .../fwd/server/FwdDataController.java | 2 +- .../fwd/server/FwdUserController.java | 46 ++++++++ .../xservice/fwd/service/IPerformService.java | 2 + .../fwd/service/impl/PerformServiceImpl.java | 14 +++ .../mapper/fwd/FwdUserConfigMapper.xml | 12 ++ 9 files changed, 130 insertions(+), 95 deletions(-) create mode 100644 script/src/main/java/com/xiang/xservice/fwd/server/FwdUserController.java diff --git a/pom.xml b/pom.xml index 833e1f1..47df84c 100644 --- a/pom.xml +++ b/pom.xml @@ -7,7 +7,7 @@ com.xiang xservice-basic - 1.0 + 1.1 com.xiang @@ -30,27 +30,27 @@ com.xiang xservice-common - 1.0 + 1.2 com.xiang xservice-message-starter - 1.0 + 1.1 com.xiang xservice-schedule-starter - 1.0 + 1.1 com.xiang xservice-cache-starter - 1.0 + 1.1 com.xiang xservice-http-starter - 1.0 + 1.1 diff --git a/script/src/main/java/com/xiang/xservice/fwd/mapper/FwdUserConfigMapper.java b/script/src/main/java/com/xiang/xservice/fwd/mapper/FwdUserConfigMapper.java index 85dd40a..45b09e3 100644 --- a/script/src/main/java/com/xiang/xservice/fwd/mapper/FwdUserConfigMapper.java +++ b/script/src/main/java/com/xiang/xservice/fwd/mapper/FwdUserConfigMapper.java @@ -2,6 +2,7 @@ package com.xiang.xservice.fwd.mapper; import com.xiang.xservice.fwd.entity.pojo.FUserConfig; import org.apache.ibatis.annotations.Mapper; +import org.apache.ibatis.annotations.Param; import org.springframework.stereotype.Repository; import java.util.List; @@ -15,4 +16,26 @@ public interface FwdUserConfigMapper { * @return */ List getAvailableUser(); + + /** + * 根据用户名查询用户 + * @param name + * @return + */ + FUserConfig getUserByName(String name); + + /** + * 更新用户token + * @param name + * @param token + * @return + */ + int updateTokenByName(@Param("name") String name, @Param("token") String token); + + /** + * 新增用户token + * @param userConfig + * @return + */ + int insert(FUserConfig userConfig); } diff --git a/script/src/main/java/com/xiang/xservice/fwd/schedule/FwdImportantMsgJob.java b/script/src/main/java/com/xiang/xservice/fwd/schedule/FwdImportantMsgJob.java index dbedf15..0b53927 100644 --- a/script/src/main/java/com/xiang/xservice/fwd/schedule/FwdImportantMsgJob.java +++ b/script/src/main/java/com/xiang/xservice/fwd/schedule/FwdImportantMsgJob.java @@ -115,7 +115,7 @@ public class FwdImportantMsgJob { StringBuilder msg = new StringBuilder("今日" + now + "演唱会门票预售信息:\n"); for (FPerformProjectInfo data : saleTodayData) { - msg.append("演唱会名称:").append(data.getProjectName()).append("预售时间:").append(DateUtils.getDateTimeStr(data.getPreSaleTime())).append("\n"); + msg.append("演唱会名称:").append(data.getProjectName()).append("预售时间:").append(DateUtils.getDateTimeFromDateTime(data.getPreSaleTime())).append("\n"); long taskId = PrimaryKeyUtils.snowflakeId(); Map params = Maps.newHashMap(); params.put("projectId", data.getProjectId()); @@ -163,7 +163,7 @@ public class FwdImportantMsgJob { if (Objects.nonNull(performsByProjectIdFromHttp)) { for (PerformInfo performInfo : performsByProjectIdFromHttp.getPerformInfos()) { for (PerformDetail performDetail : performInfo.getPerformInfo()) { - LocalDateTime saleTime = DateUtils.getTimeFromStr(performDetail.getSaleTime()); + LocalDateTime saleTime = DateUtils.getDateTimeFromStr(performDetail.getSaleTime()); if (saleTime.isAfter(todayStartTime) && saleTime.isBefore(todayEndTime)) { List seatPlans = performDetail.getSeatPlans(); Map seatPlanMap = seatPlans.stream().collect(Collectors.toMap(SeatPlan::getSeatPlanId, Function.identity(), (a, b) -> a)); 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 c31e5f6..96db816 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 @@ -4,10 +4,24 @@ import com.google.common.collect.Lists; import com.xiang.xservice.basic.common.req.BaseRequest; import com.xiang.xservice.basic.config.MyThreadFactory; import com.xiang.xservice.basic.utils.DateUtils; -import com.xiang.xservice.fwd.entity.pojo.*; +import com.xiang.xservice.fwd.entity.pojo.FAudienceConfig; +import com.xiang.xservice.fwd.entity.pojo.FPerformProjectInfo; +import com.xiang.xservice.fwd.entity.pojo.FPerformSeatInfo; +import com.xiang.xservice.fwd.entity.pojo.FUserConfig; import com.xiang.xservice.fwd.entity.resp.http.audience.AudienceMemberInfo; -import com.xiang.xservice.fwd.entity.resp.http.perform.*; -import com.xiang.xservice.fwd.mapper.*; +import com.xiang.xservice.fwd.entity.resp.http.perform.Perform; +import com.xiang.xservice.fwd.entity.resp.http.perform.PerformDetail; +import com.xiang.xservice.fwd.entity.resp.http.perform.PerformInfo; +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.FwdAudienceConfigMapper; +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.mapper.FwdUserConfigMapper; import com.xiang.xservice.fwd.service.IPerformServiceHttp; import com.xiang.xservice.http.helper.HttpRequestHelper; import lombok.RequiredArgsConstructor; @@ -19,7 +33,6 @@ import org.springframework.stereotype.Component; import org.springframework.web.bind.annotation.PostMapping; import org.springframework.web.bind.annotation.RestController; -import java.util.ArrayList; import java.util.List; import java.util.Map; import java.util.Objects; @@ -69,10 +82,10 @@ public class PullDataFromFWDJob { fPerformProjectInfo.setIsChoiceSeat(projectInfoFromHttp.getIsChoiceSeat()); fPerformProjectInfo.setHighestPrice(projectInfoFromHttp.getHighPrice()); if (StringUtils.isNotBlank(projectInfoFromHttp.getProjectStartDate())) { - fPerformProjectInfo.setProjectStartDate(DateUtils.getDateFromStr(projectInfoFromHttp.getProjectStartDate())); + fPerformProjectInfo.setProjectStartDate(DateUtils.getDateFromStr(projectInfoFromHttp.getProjectStartDate(), "yyyy/MM/dd")); } if (StringUtils.isNotBlank(projectInfoFromHttp.getProjectEndDate())) { - fPerformProjectInfo.setProjectEndDate(DateUtils.getDateFromStr(projectInfoFromHttp.getProjectEndDate())); + fPerformProjectInfo.setProjectEndDate(DateUtils.getDateFromStr(projectInfoFromHttp.getProjectEndDate(), "yyyy/MM/dd")); } fPerformProjectInfo.setSubClassifyName(projectInfoFromHttp.getSubClassifyName()); @@ -86,86 +99,11 @@ public class PullDataFromFWDJob { fPerformProjectInfo.setVenueName(project.getVenueName()); fPerformProjectInfo.setLowestPrice(project.getLowestPrice()); if (StringUtils.isNotBlank(projectInfoFromHttp.getPreSaleTime())) { - fPerformProjectInfo.setPreSaleTime(DateUtils.getDateTimeFromStr(projectInfoFromHttp.getPreSaleTime())); + fPerformProjectInfo.setPreSaleTime(DateUtils.getDateTimeFromStr(projectInfoFromHttp.getPreSaleTime(), "yyyy/MM/dd HH:mm:ss")); } performProjectInfoMapper.insert(fPerformProjectInfo); } -// @Scheduled(cron = "0 10 8 1/1 * ?") - @PostMapping("/pullSeatDataJob") - public void pullSeatDataJob() { - List availablePerform = performConfigMapper.getAvailablePerform(); - if (CollectionUtils.isEmpty(availablePerform)) { - return; - } - for (FPerformConfig performConfig : availablePerform) { - Perform performs = httpRequestHelper.fetchWithRetry(() -> performServiceHttp.getPerformsByProjectIdFromHttp(performConfig.getProjectId()), "seat-perform-info"); - if (Objects.isNull(performs)) { - continue; - } - if (CollectionUtils.isEmpty(performs.getPerformInfos())) { - continue; - } - for (PerformInfo performInfo : performs.getPerformInfos()) { - List info = performInfo.getPerformInfo(); - if (CollectionUtils.isEmpty(info)) { - continue; - } - for (PerformDetail performDetail : info) { - List seatPlans = performDetail.getSeatPlans(); - if (CollectionUtils.isEmpty(seatPlans)) { - continue; - } - Map map = seatPlans.stream().collect(Collectors.toMap(SeatPlan::getSeatPlanId, Function.identity(), (a, b) -> a)); - List planStatusFromHttp = httpRequestHelper.fetchWithRetry(() -> performServiceHttp.getSeatPlanStatusFromHttp(new ArrayList<>(map.keySet())), "seat-seat-status"); - List seatInfoAddList = Lists.newArrayList(); - for (SeatPlanStatus seatPlanStatus : planStatusFromHttp) { - if (!seatPlanStatus.getSoldOutFlag() && seatPlanStatus.getStandbyStatus() == 10) { - FPerformSeatInfo seatInfo = performSeatInfoMapper.getPerformSeatInfoBySeatIdAndPerformIdAndProjectId(seatPlanStatus.getSeatPlanId(), seatPlanStatus.getPerformId(), performs.getProjectId()); - SeatPlan seatPlan = map.get(seatPlanStatus.getSeatPlanId()); - if (Objects.isNull(seatInfo)) { - if (Objects.nonNull(seatPlan)) { - seatInfo = new FPerformSeatInfo(); - seatInfo.setSeatPlanId(seatPlanStatus.getSeatPlanId()); - seatInfo.setSeatPlanName(seatPlan.getSeatPlanName()); - seatInfo.setPerformId(seatPlanStatus.getPerformId()); - seatInfo.setPerformName(seatPlan.getPerformName()); - seatInfo.setStopSale(seatPlan.getStopSale()); - seatInfo.setShelfStatus(seatPlan.getShelfStatus()); - seatInfo.setPrice(seatPlan.getPrice()); - seatInfo.setDiscountPrice(seatPlan.getDiscountPrice()); - seatInfo.setSubStatus(seatPlan.getSubStatus()); - seatInfo.setQuantity(seatPlan.getQuantity()); - seatInfo.setStatus(seatPlan.getStatus()); - seatInfo.setMaxSellStock(seatPlan.getMaxSellStock()); - seatInfo.setSoldStock(seatPlan.getSoldStock()); - seatInfo.setLeftStock(seatPlan.getLeftStock()); - seatInfo.setAbleSaleQuantity(seatPlan.getAbleSaleQuantity()); - seatInfo.setAshShow(seatPlan.getAshShow()); - seatInfo.setAshShowDesc(seatPlan.getAshShowDesc()); - seatInfo.setSelectable(seatPlan.getSelectable()); - seatInfo.setDisplay(seatPlan.getDisplay()); - seatInfo.setAvailableTicketQuantity(seatPlan.getAvailableTicketQuantity()); - seatInfo.setAvailableAllTicketQuantity(seatPlan.getAvailableAllTicketQuantity()); - seatInfo.setSaleTime(DateUtils.getTimeFromStr(seatPlan.getSaleTime())); - seatInfo.setProjectId(performs.getProjectId()); - seatInfo.setSoldOut(0); - seatInfoAddList.add(seatInfo); - } - } else { - seatInfo.setSoldOut(0); - performSeatInfoMapper.update(seatInfo); - } - } - } - if (CollectionUtils.isNotEmpty(seatInfoAddList)) { - performSeatInfoMapper.batchSave(seatInfoAddList); - } - } - } - } - } - /** * 每月拉取观影人数据更新 */ @@ -314,7 +252,7 @@ public class PullDataFromFWDJob { fPerformSeatInfo.setAvailableTicketQuantity(seatPlan.getAvailableTicketQuantity()); fPerformSeatInfo.setAvailableAllTicketQuantity(seatPlan.getAvailableAllTicketQuantity()); if (StringUtils.isNotBlank(seatPlan.getSaleTime())) { - fPerformSeatInfo.setSaleTime(DateUtils.getTimeFromStr(seatPlan.getSaleTime())); + fPerformSeatInfo.setSaleTime(DateUtils.getDateTimeFromStr(seatPlan.getSaleTime())); } fPerformSeatInfo.setProjectId(projectList.getProjectId()); if (!seatPlanStatus.getSoldOutFlag() && seatPlanStatus.getStandbyStatus().equals(10)) { @@ -333,10 +271,10 @@ public class PullDataFromFWDJob { projectInfo.setIsChoiceSeat(projectInfoFromHttp.getIsChoiceSeat()); projectInfo.setHighestPrice(projectInfoFromHttp.getHighPrice()); if (StringUtils.isNotBlank(projectInfoFromHttp.getProjectStartDate())) { - projectInfo.setProjectStartDate(DateUtils.getDateFromStr(projectInfoFromHttp.getProjectStartDate())); + projectInfo.setProjectStartDate(DateUtils.getDateFromStr(projectInfoFromHttp.getProjectStartDate(), "yyyy/MM/dd")); } if (StringUtils.isNotBlank(projectInfoFromHttp.getProjectEndDate())) { - projectInfo.setProjectEndDate(DateUtils.getDateFromStr(projectInfoFromHttp.getProjectEndDate())); + projectInfo.setProjectEndDate(DateUtils.getDateFromStr(projectInfoFromHttp.getProjectEndDate(), "yyyy/MM/dd")); } projectInfo.setSubClassifyName(projectInfoFromHttp.getSubClassifyName()); projectInfo.setProjectName(projectList.getName()); @@ -348,7 +286,7 @@ public class PullDataFromFWDJob { projectInfo.setVenueName(projectList.getVenueName()); projectInfo.setLowestPrice(projectList.getLowestPrice()); if (StringUtils.isNotBlank(projectInfoFromHttp.getPreSaleTime())) { - projectInfo.setPreSaleTime(DateUtils.getDateTimeFromStr(projectInfoFromHttp.getPreSaleTime())); + projectInfo.setPreSaleTime(DateUtils.getDateTimeFromStr(projectInfoFromHttp.getPreSaleTime(), "yyyy/MM/dd HH:mm:ss")); } } } 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 index 7c486f7..50bbb6c 100644 --- a/script/src/main/java/com/xiang/xservice/fwd/server/FwdDataController.java +++ b/script/src/main/java/com/xiang/xservice/fwd/server/FwdDataController.java @@ -83,7 +83,7 @@ public class FwdDataController { fPerformSeatInfo.setDisplay(seatPlan.getDisplay()); fPerformSeatInfo.setAvailableTicketQuantity(seatPlan.getAvailableTicketQuantity()); fPerformSeatInfo.setAvailableAllTicketQuantity(seatPlan.getAvailableAllTicketQuantity()); - fPerformSeatInfo.setSaleTime(DateUtils.getTimeFromStr(seatPlan.getSaleTime())); + fPerformSeatInfo.setSaleTime(DateUtils.getDateTimeFromStr(seatPlan.getSaleTime(), "yyyy/MM/dd HH:mm:ss")); fPerformSeatInfo.setProjectId(availablePerform.getProjectId()); fPerformSeatInfo.setSoldOut(seatPlan.getSoldStock()); performService.addSeatInfo(fPerformSeatInfo); diff --git a/script/src/main/java/com/xiang/xservice/fwd/server/FwdUserController.java b/script/src/main/java/com/xiang/xservice/fwd/server/FwdUserController.java new file mode 100644 index 0000000..c3453f8 --- /dev/null +++ b/script/src/main/java/com/xiang/xservice/fwd/server/FwdUserController.java @@ -0,0 +1,46 @@ +package com.xiang.xservice.fwd.server; + +import com.alibaba.fastjson.JSON; +import com.xiang.xservice.basic.common.resp.Result; +import com.xiang.xservice.basic.xservice.dingTalk.service.DingTalkService; +import com.xiang.xservice.fwd.service.IPerformService; +import lombok.RequiredArgsConstructor; +import lombok.extern.slf4j.Slf4j; +import org.springframework.web.bind.annotation.GetMapping; +import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.RequestParam; +import org.springframework.web.bind.annotation.RestController; + +import java.util.Map; + +/** + * @Author: xiang + * @Date: 2025-08-06 10:41 + */ +@Slf4j +@RestController +@RequestMapping("/open/fwd/user") +@RequiredArgsConstructor +public class FwdUserController { + + private final IPerformService performService; + private final DingTalkService dingTalkService; + + @GetMapping("/token") + public Result updateUserTokenFromHttpProxy(@RequestParam Map params) { + String name = params.get("name"); + String token = params.get("token"); + log.info("接收到的参数有===>{}, name:{}, token:{}", JSON.toJSONString(params), name, token); + Boolean b = performService.updateTokenByName(name, token); + if (b) { + String msg = "用户:" + name + "的token更新成功!"; + try { + dingTalkService.sendRobotMessage(msg); + } catch (Exception e) { + log.error("消息发送失败", e); + return Result.error("消息发送失败"); + } + } + return Result.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 e7658e9..83c53d7 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 @@ -27,4 +27,6 @@ public interface IPerformService { Boolean updateSeatInfo(FPerformSeatInfo seatInfoBySeatId); Boolean addSeatInfo(FPerformSeatInfo fPerformSeatInfo); + + Boolean updateTokenByName(String name, String token); } 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 308e20b..58977a5 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 @@ -142,4 +142,18 @@ public class PerformServiceImpl implements IPerformService { public Boolean addSeatInfo(FPerformSeatInfo fPerformSeatInfo) { return fwdPerformSeatInfoMapper.batchSave(Collections.singletonList(fPerformSeatInfo)) > 0; } + + @Override + public Boolean updateTokenByName(String name, String token) { + FUserConfig userByName = fwdUserConfigMapper.getUserByName(name); + if (Objects.isNull(userByName)) { + FUserConfig fUserConfig = new FUserConfig(); + fUserConfig.setName(name); + fUserConfig.setToken(token); + fUserConfig.setStatus(1); + return fwdUserConfigMapper.insert(fUserConfig) > 0; + } else { + return fwdUserConfigMapper.updateTokenByName(name, token) > 0; + } + } } diff --git a/script/src/main/resources/mapper/fwd/FwdUserConfigMapper.xml b/script/src/main/resources/mapper/fwd/FwdUserConfigMapper.xml index 055cca7..3c3913d 100644 --- a/script/src/main/resources/mapper/fwd/FwdUserConfigMapper.xml +++ b/script/src/main/resources/mapper/fwd/FwdUserConfigMapper.xml @@ -13,10 +13,22 @@ id, name, token, status + + insert into fwd_user_config (name, token, status) values (#{name}, #{token}, #{status}); + + + update fwd_user_config set token = #{token} where name = #{name} + + + + \ No newline at end of file From 443267a51b8fd2f0933c08a9501a48cef9bcd47f Mon Sep 17 00:00:00 2001 From: Zhujx Date: Wed, 6 Aug 2025 13:51:24 +0800 Subject: [PATCH 43/49] =?UTF-8?q?fix:=E5=93=8D=E5=BA=94code=E5=8F=98?= =?UTF-8?q?=E6=9B=B4?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../java/com/xiang/xservice/xb/service/FundServiceImpl.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/script/src/main/java/com/xiang/xservice/xb/service/FundServiceImpl.java b/script/src/main/java/com/xiang/xservice/xb/service/FundServiceImpl.java index d43e741..fd0fb75 100644 --- a/script/src/main/java/com/xiang/xservice/xb/service/FundServiceImpl.java +++ b/script/src/main/java/com/xiang/xservice/xb/service/FundServiceImpl.java @@ -65,7 +65,7 @@ public class FundServiceImpl implements FundService{ if (StringUtils.isNotBlank(resp)) { QueryFundListResponse response = JSONObject.parseObject(resp, QueryFundListResponse.class); if (Objects.nonNull(response)) { - if (Objects.equals(SUCCESS_0, response.getCode())) { + if (Objects.equals(SUCCESS_200, response.getCode())) { return response.getData(); } } From df1e58eb9dd8d1d0591bc8137120c23954d94603 Mon Sep 17 00:00:00 2001 From: Zhujx Date: Thu, 7 Aug 2025 10:36:20 +0800 Subject: [PATCH 44/49] =?UTF-8?q?perf:fwd=E9=92=89=E9=92=89=E7=BE=A4?= =?UTF-8?q?=E6=B6=88=E6=81=AF=E5=8F=91=E9=80=81?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- pom.xml | 2 +- script/pom.xml | 2 +- .../fwd/schedule/FwdImportantMsgJob.java | 19 +++++----- .../fwd/service/DingTalkFWDMsgService.java | 35 +++++++++++++++++++ .../fwd/service/impl/PerformServiceImpl.java | 6 ++-- .../xb/schedule/xb/FundMsgReportJob.java | 3 ++ .../src/main/resources/application-local.yml | 11 ++++++ .../src/main/resources/application-prod.yml | 13 ++++++- .../src/main/resources/application-test.yml | 13 ++++++- script/src/main/resources/application.yml | 6 ---- 10 files changed, 87 insertions(+), 23 deletions(-) create mode 100644 script/src/main/java/com/xiang/xservice/fwd/service/DingTalkFWDMsgService.java diff --git a/pom.xml b/pom.xml index 47df84c..3214797 100644 --- a/pom.xml +++ b/pom.xml @@ -35,7 +35,7 @@ com.xiang xservice-message-starter - 1.1 + 1.2 com.xiang diff --git a/script/pom.xml b/script/pom.xml index a67ab6b..88fb10f 100644 --- a/script/pom.xml +++ b/script/pom.xml @@ -11,7 +11,7 @@ com.xiang - 1.0-SNAPSHOT + 1.0 jar script diff --git a/script/src/main/java/com/xiang/xservice/fwd/schedule/FwdImportantMsgJob.java b/script/src/main/java/com/xiang/xservice/fwd/schedule/FwdImportantMsgJob.java index 0b53927..e0014ed 100644 --- a/script/src/main/java/com/xiang/xservice/fwd/schedule/FwdImportantMsgJob.java +++ b/script/src/main/java/com/xiang/xservice/fwd/schedule/FwdImportantMsgJob.java @@ -5,16 +5,20 @@ import com.alibaba.fastjson.JSONObject; import com.google.common.collect.Maps; import com.xiang.xservice.basic.utils.DateUtils; import com.xiang.xservice.basic.utils.PrimaryKeyUtils; -import com.xiang.xservice.basic.xservice.dingTalk.service.DingTalkService; import com.xiang.xservice.fwd.entity.param.FwdOrderTaskParam; 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.entity.resp.http.perform.Perform; +import com.xiang.xservice.fwd.entity.resp.http.perform.PerformDetail; +import com.xiang.xservice.fwd.entity.resp.http.perform.PerformInfo; +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.FwdAudienceConfigMapper; import com.xiang.xservice.fwd.mapper.FwdPerformConfigMapper; import com.xiang.xservice.fwd.mapper.FwdPerformProjectInfoMapper; import com.xiang.xservice.fwd.mapper.FwdUserConfigMapper; +import com.xiang.xservice.fwd.service.DingTalkFWDMsgService; import com.xiang.xservice.fwd.service.IPerformService; import com.xiang.xservice.fwd.service.IPerformServiceHttp; import com.xiang.xservice.schedule.core.DynamicTaskScheduler; @@ -58,7 +62,7 @@ public class FwdImportantMsgJob { private final FwdPerformProjectInfoMapper performProjectInfoMapper; private final FwdPerformConfigMapper performConfigMapper; private final DynamicTaskScheduler dynamicTaskScheduler; - private final DingTalkService dingTalkService; + private final DingTalkFWDMsgService dingTalkFWDMsgService; private final FwdUserConfigMapper fwdUserConfigMapper; private final FwdAudienceConfigMapper fwdAudienceConfigMapper; private final IPerformService iPerformService; @@ -128,7 +132,7 @@ public class FwdImportantMsgJob { savaTask(data, taskId, params); } msg.append("请注意进行数据库配置的更改!"); - dingTalkService.sendRobotMessage(msg.toString()); + dingTalkFWDMsgService.sendFWDMsg(msg.toString()); log.info("【芬玩岛】演唱会预售定时任务结束!time:{}", System.currentTimeMillis()); } @@ -225,12 +229,7 @@ public class FwdImportantMsgJob { } } }); - try { - dingTalkService.sendRobotMessage(msg.toString()); - } catch (Exception e) { - log.error("信息发送异常, 信息:{}", msg, e); - } - + dingTalkFWDMsgService.sendFWDMsg(msg.toString()); } private void savaTask(FPerformProjectInfo data, long taskId, Map params) { diff --git a/script/src/main/java/com/xiang/xservice/fwd/service/DingTalkFWDMsgService.java b/script/src/main/java/com/xiang/xservice/fwd/service/DingTalkFWDMsgService.java new file mode 100644 index 0000000..077771b --- /dev/null +++ b/script/src/main/java/com/xiang/xservice/fwd/service/DingTalkFWDMsgService.java @@ -0,0 +1,35 @@ +package com.xiang.xservice.fwd.service; + +import com.xiang.xservice.basic.xservice.dingTalk.service.DingTalkService; +import lombok.RequiredArgsConstructor; +import lombok.extern.slf4j.Slf4j; +import org.springframework.stereotype.Service; + +import java.util.List; + +/** + * @Author: xiang + * @Date: 2025-08-07 10:30 + */ +@Slf4j +@Service +@RequiredArgsConstructor +public class DingTalkFWDMsgService { + + private final DingTalkService dingTalkService; + private static final String SECRET = "SEC768ed578c0fb31a9aec84b1c1db4f195f5aca203985bbb9d549e23e41c8874d1"; + private static final String TOKEN = "4709b708d961846e0aee523c5abc3b67e8fa424ee292501d85efd4e504f15a8b"; + private static final String USER_ID = "450841600726084717"; + + /** + * 发送芬玩岛消息 + * @param msg 消息 + */ + public void sendFWDMsg(String msg) { + try { + dingTalkService.sendRobotMessage(SECRET, TOKEN, List.of(USER_ID), msg); + } catch (Exception e) { + log.error("信息发送异常, 信息:{}", msg, e); + } + } +} 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 58977a5..be1f03b 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,7 +2,6 @@ package com.xiang.xservice.fwd.service.impl; import com.alibaba.fastjson2.JSONObject; import com.xiang.xservice.basic.config.MyThreadFactory; -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; @@ -13,6 +12,7 @@ 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.mapper.FwdUserConfigMapper; +import com.xiang.xservice.fwd.service.DingTalkFWDMsgService; import com.xiang.xservice.fwd.service.IPerformService; import com.xiang.xservice.fwd.service.IPerformServiceHttp; import com.xiang.xservice.http.helper.HttpRequestHelper; @@ -45,7 +45,7 @@ public class PerformServiceImpl implements IPerformService { private final FwdPerformProjectInfoMapper fwdPerformProjectInfoMapper; private final FwdPerformConfigMapper fwdPerformConfigMapper; private final IPerformServiceHttp performServiceHttp; - private final DingTalkService dingTalkService; + private final DingTalkFWDMsgService dingTalkService; private final FwdUserConfigMapper fwdUserConfigMapper; @Value("${DingTalk.chatId}") private String chatId; @@ -110,7 +110,7 @@ public class PerformServiceImpl implements IPerformService { if (Objects.nonNull(projectOrder)) { log.info("下单成功,订单信息:{}", JSONObject.toJSONString(projectOrder)); String msg = "【芬玩岛】下单成功✅✅✅,演出名称:" + performByProjectId.getProjectName() + ",请在2分钟内完成付款!"; - dingTalkService.sendRobotMessage(msg); + dingTalkService.sendFWDMsg(msg); return Boolean.TRUE; } } diff --git a/script/src/main/java/com/xiang/xservice/xb/schedule/xb/FundMsgReportJob.java b/script/src/main/java/com/xiang/xservice/xb/schedule/xb/FundMsgReportJob.java index 9ce3dc4..c434e32 100644 --- a/script/src/main/java/com/xiang/xservice/xb/schedule/xb/FundMsgReportJob.java +++ b/script/src/main/java/com/xiang/xservice/xb/schedule/xb/FundMsgReportJob.java @@ -19,6 +19,7 @@ import java.time.LocalDate; import java.time.LocalDateTime; import java.time.format.DateTimeFormatter; import java.util.ArrayList; +import java.util.Comparator; import java.util.List; import java.util.Map; import java.util.Objects; @@ -136,6 +137,8 @@ public class FundMsgReportJob { } private static void buildMsg(List funds, Map fundMap, StringBuilder msg) { + funds = funds.stream().sorted(Comparator.comparing(FundList::getChange).reversed()) + .collect(Collectors.toList()); for (FundList fund : funds) { if (fundMap.containsKey(fund.getCode())) { XbFundList fundList = fundMap.get(fund.getCode()); diff --git a/script/src/main/resources/application-local.yml b/script/src/main/resources/application-local.yml index 3790241..f62b645 100644 --- a/script/src/main/resources/application-local.yml +++ b/script/src/main/resources/application-local.yml @@ -21,3 +21,14 @@ aliyun: dns: RR: - local + +DingTalk: + # 钉钉消息用户,用逗号隔开 + userList: "450841600726084717" + # 钉钉消息群ID,需要调用/chat/create api创建群返回 + chatId: "chatd16d8daeea33b36b73588c676d508096" + robot: + token: ad21ead99f0fdc63aa00d6732b7b0888c17590f7612c68297edfcb71844d1437 + secret: SECc09d8aad6635f1a4cbadb7c0ab365523c46299f138438cd885e445e0f5f4d730 + userIds: + - 450841600726084717 \ No newline at end of file diff --git a/script/src/main/resources/application-prod.yml b/script/src/main/resources/application-prod.yml index 30da4e8..3485cac 100644 --- a/script/src/main/resources/application-prod.yml +++ b/script/src/main/resources/application-prod.yml @@ -21,4 +21,15 @@ aliyun: dns: RR: - client - - file \ No newline at end of file + - file + +DingTalk: + # 钉钉消息用户,用逗号隔开 + userList: "450841600726084717" + # 钉钉消息群ID,需要调用/chat/create api创建群返回 + chatId: "chatd16d8daeea33b36b73588c676d508096" + robot: + token: 340a9d39a5b0b6a52ba2262f9c27179cf50e3c8cfe6883ca082649d306038f41 + secret: SECe10ade3058880b84df5c6f46ab072c11f4ac2a5ef9f134d684705c2a3b004de2 + userIds: + - 450841600726084717 \ No newline at end of file diff --git a/script/src/main/resources/application-test.yml b/script/src/main/resources/application-test.yml index b5ae739..7aa136d 100644 --- a/script/src/main/resources/application-test.yml +++ b/script/src/main/resources/application-test.yml @@ -20,4 +20,15 @@ spring: aliyun: dns: RR: - - test \ No newline at end of file + - test + +DingTalk: + # 钉钉消息用户,用逗号隔开 + userList: "450841600726084717" + # 钉钉消息群ID,需要调用/chat/create api创建群返回 + chatId: "chatd16d8daeea33b36b73588c676d508096" + robot: + token: ad21ead99f0fdc63aa00d6732b7b0888c17590f7612c68297edfcb71844d1437 + secret: SECc09d8aad6635f1a4cbadb7c0ab365523c46299f138438cd885e445e0f5f4d730 + userIds: + - 450841600726084717 \ No newline at end of file diff --git a/script/src/main/resources/application.yml b/script/src/main/resources/application.yml index a729076..9d81df6 100644 --- a/script/src/main/resources/application.yml +++ b/script/src/main/resources/application.yml @@ -5,12 +5,6 @@ mybatis: configuration: map-underscore-to-camel-case: true -DingTalk: - # 钉钉消息用户,用逗号隔开 - userList: "450841600726084717" - # 钉钉消息群ID,需要调用/chat/create api创建群返回 - chatId: "chatd16d8daeea33b36b73588c676d508096" - xiaobei: unionId: o896o5y8bJZYMh2gdKhDdmUKc0Wk codeArr: "010364, 022150, 013224, 008960, 013841, 015528, 012414, 020412, 014662, 016814, 014422, 015596, 007844, From 9566b67a8b840f406be8841566926c11352f702e Mon Sep 17 00:00:00 2001 From: Zhujx Date: Thu, 7 Aug 2025 10:38:10 +0800 Subject: [PATCH 45/49] =?UTF-8?q?perf:=E8=84=9A=E6=9C=AC=E7=BE=A4=E6=9C=BA?= =?UTF-8?q?=E5=99=A8=E4=BA=BA=E6=B6=88=E6=81=AF?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../service/DingTalkScriptMsgService.java | 35 +++++++++++++++++++ .../glados/service/GLaDOSServiceImpl.java | 9 +++-- 2 files changed, 39 insertions(+), 5 deletions(-) create mode 100644 script/src/main/java/com/xiang/xservice/glados/service/DingTalkScriptMsgService.java diff --git a/script/src/main/java/com/xiang/xservice/glados/service/DingTalkScriptMsgService.java b/script/src/main/java/com/xiang/xservice/glados/service/DingTalkScriptMsgService.java new file mode 100644 index 0000000..839e2e6 --- /dev/null +++ b/script/src/main/java/com/xiang/xservice/glados/service/DingTalkScriptMsgService.java @@ -0,0 +1,35 @@ +package com.xiang.xservice.glados.service; + +import com.xiang.xservice.basic.xservice.dingTalk.service.DingTalkService; +import lombok.RequiredArgsConstructor; +import lombok.extern.slf4j.Slf4j; +import org.springframework.stereotype.Service; + +import java.util.List; + +/** + * @Author: xiang + * @Date: 2025-08-07 10:30 + */ +@Slf4j +@Service +@RequiredArgsConstructor +public class DingTalkScriptMsgService { + + private final DingTalkService dingTalkService; + private static final String SECRET = "SEC768ed578c0fb31a9aec84b1c1db4f195f5aca203985bbb9d549e23e41c8874d1"; + private static final String TOKEN = "4709b708d961846e0aee523c5abc3b67e8fa424ee292501d85efd4e504f15a8b"; + private static final String USER_ID = "450841600726084717"; + + /** + * 发送脚本消息 + * @param msg 消息 + */ + public void sendScriptMsg(String msg) { + try { + dingTalkService.sendRobotMessage(SECRET, TOKEN, List.of(USER_ID), msg); + } catch (Exception e) { + log.error("信息发送异常, 信息:{}", msg, e); + } + } +} diff --git a/script/src/main/java/com/xiang/xservice/glados/service/GLaDOSServiceImpl.java b/script/src/main/java/com/xiang/xservice/glados/service/GLaDOSServiceImpl.java index 9199472..bac1b22 100644 --- a/script/src/main/java/com/xiang/xservice/glados/service/GLaDOSServiceImpl.java +++ b/script/src/main/java/com/xiang/xservice/glados/service/GLaDOSServiceImpl.java @@ -3,13 +3,12 @@ package com.xiang.xservice.glados.service; import com.alibaba.fastjson2.JSONObject; import com.google.common.collect.Maps; import com.xiang.xservice.basic.utils.HttpUtils; -import com.xiang.xservice.basic.xservice.dingTalk.service.DingTalkService; import com.xiang.xservice.glados.common.GladosConstants; import com.xiang.xservice.glados.common.URLConstants; import com.xiang.xservice.glados.entity.GladosRunLog; -import com.xiang.xservice.xb.entity.pojo.User; import com.xiang.xservice.glados.entity.resp.GLaDOSResponse; import com.xiang.xservice.glados.repository.GladosMapper; +import com.xiang.xservice.xb.entity.pojo.User; import lombok.RequiredArgsConstructor; import lombok.extern.slf4j.Slf4j; import org.springframework.beans.factory.annotation.Value; @@ -33,7 +32,7 @@ public class GLaDOSServiceImpl implements GLaDOSService{ private final GladosMapper gladosMapper; - private final DingTalkService dingTalkService; + private final DingTalkScriptMsgService dingTalkService; @Value("${DingTalk.userList}") private String userList; @@ -84,7 +83,7 @@ public class GLaDOSServiceImpl implements GLaDOSService{ log.info("签到成功, 签到积分:{}, 签到消息:{}", gLaDOSResponse.getPoints(), gLaDOSResponse.getMessage()); sb.append(user.getEmail()).append("签到成功,获得积分:").append(gLaDOSResponse.getPoints()).append("\n"); try { - dingTalkService.sendRobotMessage("[时间:" + LocalDateTime.now() + "] 用户: " + + dingTalkService.sendScriptMsg("[时间:" + LocalDateTime.now() + "] 用户: " + user.getEmail() + "签到成功,获得积分:" + gLaDOSResponse.getPoints()); } catch (Exception e) { log.error("发送钉钉消息失败", e); @@ -98,7 +97,7 @@ public class GLaDOSServiceImpl implements GLaDOSService{ log.warn("签到失败,用户:{}, cookie过期:{}", user.getEmail(), gLaDOSResponse.getMessage()); String message = "[时间:" + LocalDateTime.now() + "] 用户: " + user.getEmail() + ",签到消息: " + gLaDOSResponse.getMessage(); try { - dingTalkService.sendRobotMessage(message); + dingTalkService.sendScriptMsg(message); } catch (Exception e) { log.error("发送钉钉消息失败", e); } From dadf90927c68106e73aa63be1d4d72026e4760a2 Mon Sep 17 00:00:00 2001 From: Zhujx Date: Thu, 7 Aug 2025 10:45:33 +0800 Subject: [PATCH 46/49] =?UTF-8?q?perf:=E9=85=8D=E7=BD=AE=E6=96=87=E4=BB=B6?= =?UTF-8?q?=E4=BF=AE=E6=94=B9?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- script/src/main/resources/application-local.yml | 14 ++++++++++---- script/src/main/resources/application-prod.yml | 14 ++++++++++---- script/src/main/resources/application-test.yml | 14 ++++++++++---- 3 files changed, 30 insertions(+), 12 deletions(-) diff --git a/script/src/main/resources/application-local.yml b/script/src/main/resources/application-local.yml index f62b645..ad132ed 100644 --- a/script/src/main/resources/application-local.yml +++ b/script/src/main/resources/application-local.yml @@ -28,7 +28,13 @@ DingTalk: # 钉钉消息群ID,需要调用/chat/create api创建群返回 chatId: "chatd16d8daeea33b36b73588c676d508096" robot: - token: ad21ead99f0fdc63aa00d6732b7b0888c17590f7612c68297edfcb71844d1437 - secret: SECc09d8aad6635f1a4cbadb7c0ab365523c46299f138438cd885e445e0f5f4d730 - userIds: - - 450841600726084717 \ No newline at end of file + script: + token: 797be7f32062e31dec1d567f8b490a5649a5366083618e236c7a1263df1f4af3 + secret: SEC9aca642c0c29c9da261462869c464d34623247583d98fc82343a0a4464abbe91 + userIds: + - 450841600726084717 + xb: + token: ad21ead99f0fdc63aa00d6732b7b0888c17590f7612c68297edfcb71844d1437 + secret: SECc09d8aad6635f1a4cbadb7c0ab365523c46299f138438cd885e445e0f5f4d730 + userIds: + - 450841600726084717 \ No newline at end of file diff --git a/script/src/main/resources/application-prod.yml b/script/src/main/resources/application-prod.yml index 3485cac..fe4c04d 100644 --- a/script/src/main/resources/application-prod.yml +++ b/script/src/main/resources/application-prod.yml @@ -29,7 +29,13 @@ DingTalk: # 钉钉消息群ID,需要调用/chat/create api创建群返回 chatId: "chatd16d8daeea33b36b73588c676d508096" robot: - token: 340a9d39a5b0b6a52ba2262f9c27179cf50e3c8cfe6883ca082649d306038f41 - secret: SECe10ade3058880b84df5c6f46ab072c11f4ac2a5ef9f134d684705c2a3b004de2 - userIds: - - 450841600726084717 \ No newline at end of file + script: + token: 4709b708d961846e0aee523c5abc3b67e8fa424ee292501d85efd4e504f15a8b + secret: SEC768ed578c0fb31a9aec84b1c1db4f195f5aca203985bbb9d549e23e41c8874d1 + userIds: + - 450841600726084717 + xb: + token: 340a9d39a5b0b6a52ba2262f9c27179cf50e3c8cfe6883ca082649d306038f41 + secret: ad21ead99f0fdc63aa00d6732b7b0888c17590f7612c68297edfcb71844d1437 + userIds: + - 450841600726084717 \ No newline at end of file diff --git a/script/src/main/resources/application-test.yml b/script/src/main/resources/application-test.yml index 7aa136d..380b989 100644 --- a/script/src/main/resources/application-test.yml +++ b/script/src/main/resources/application-test.yml @@ -28,7 +28,13 @@ DingTalk: # 钉钉消息群ID,需要调用/chat/create api创建群返回 chatId: "chatd16d8daeea33b36b73588c676d508096" robot: - token: ad21ead99f0fdc63aa00d6732b7b0888c17590f7612c68297edfcb71844d1437 - secret: SECc09d8aad6635f1a4cbadb7c0ab365523c46299f138438cd885e445e0f5f4d730 - userIds: - - 450841600726084717 \ No newline at end of file + script: + token: 797be7f32062e31dec1d567f8b490a5649a5366083618e236c7a1263df1f4af3 + secret: SEC9aca642c0c29c9da261462869c464d34623247583d98fc82343a0a4464abbe91 + userIds: + - 450841600726084717 + xb: + token: ad21ead99f0fdc63aa00d6732b7b0888c17590f7612c68297edfcb71844d1437 + secret: SECc09d8aad6635f1a4cbadb7c0ab365523c46299f138438cd885e445e0f5f4d730 + userIds: + - 450841600726084717 \ No newline at end of file From af929b1c1d187f265cce0301f676c721bbd3bd1f Mon Sep 17 00:00:00 2001 From: Zhujx Date: Thu, 7 Aug 2025 10:57:59 +0800 Subject: [PATCH 47/49] =?UTF-8?q?perf:fwd=E6=B6=88=E6=81=AF=E9=85=8D?= =?UTF-8?q?=E7=BD=AE?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../com/xiang/ServiceScriptApplication.java | 6 +++++ .../fwd/config/DingTalkRobotConfig.java | 22 +++++++++++++++++++ .../fwd/schedule/FwdImportantMsgJob.java | 8 +++---- ...ice.java => DingTalkScriptMsgService.java} | 15 +++++-------- .../fwd/service/impl/PerformServiceImpl.java | 6 ++--- .../src/main/resources/application-local.yml | 6 ++--- 6 files changed, 44 insertions(+), 19 deletions(-) create mode 100644 script/src/main/java/com/xiang/xservice/fwd/config/DingTalkRobotConfig.java rename script/src/main/java/com/xiang/xservice/fwd/service/{DingTalkFWDMsgService.java => DingTalkScriptMsgService.java} (52%) diff --git a/script/src/main/java/com/xiang/ServiceScriptApplication.java b/script/src/main/java/com/xiang/ServiceScriptApplication.java index 2f02538..7043da4 100644 --- a/script/src/main/java/com/xiang/ServiceScriptApplication.java +++ b/script/src/main/java/com/xiang/ServiceScriptApplication.java @@ -3,6 +3,7 @@ package com.xiang; import org.mybatis.spring.annotation.MapperScan; import org.springframework.boot.SpringApplication; import org.springframework.boot.autoconfigure.SpringBootApplication; +import org.springframework.boot.context.properties.ConfigurationPropertiesScan; import org.springframework.scheduling.annotation.EnableScheduling; /** @@ -16,6 +17,11 @@ import org.springframework.scheduling.annotation.EnableScheduling; "com.xiang.xservice.glados.repository", "com.xiang.xservice.xb.repository" }) +@ConfigurationPropertiesScan(basePackages = { + "com.xiang.xservice.fwd.config", + "com.xiang.xservice.xb.config", + "com.xiang.xservice.glados.config", +}) public class ServiceScriptApplication { public static void main(String[] args) { SpringApplication.run(ServiceScriptApplication.class, args); diff --git a/script/src/main/java/com/xiang/xservice/fwd/config/DingTalkRobotConfig.java b/script/src/main/java/com/xiang/xservice/fwd/config/DingTalkRobotConfig.java new file mode 100644 index 0000000..7bc1cab --- /dev/null +++ b/script/src/main/java/com/xiang/xservice/fwd/config/DingTalkRobotConfig.java @@ -0,0 +1,22 @@ +package com.xiang.xservice.fwd.config; + +import lombok.Getter; +import lombok.Setter; +import org.springframework.boot.context.properties.ConfigurationProperties; + +import java.util.List; + +/** + * @Author: xiang + * @Date: 2025-08-07 10:46 + */ +@Getter +@Setter +@ConfigurationProperties(prefix = "dingtalk.robot.script") +public class DingTalkRobotConfig { + + private String token; + private String secret; + private List users; + +} diff --git a/script/src/main/java/com/xiang/xservice/fwd/schedule/FwdImportantMsgJob.java b/script/src/main/java/com/xiang/xservice/fwd/schedule/FwdImportantMsgJob.java index e0014ed..3becca2 100644 --- a/script/src/main/java/com/xiang/xservice/fwd/schedule/FwdImportantMsgJob.java +++ b/script/src/main/java/com/xiang/xservice/fwd/schedule/FwdImportantMsgJob.java @@ -18,7 +18,7 @@ import com.xiang.xservice.fwd.mapper.FwdAudienceConfigMapper; import com.xiang.xservice.fwd.mapper.FwdPerformConfigMapper; import com.xiang.xservice.fwd.mapper.FwdPerformProjectInfoMapper; import com.xiang.xservice.fwd.mapper.FwdUserConfigMapper; -import com.xiang.xservice.fwd.service.DingTalkFWDMsgService; +import com.xiang.xservice.fwd.service.DingTalkScriptMsgService; import com.xiang.xservice.fwd.service.IPerformService; import com.xiang.xservice.fwd.service.IPerformServiceHttp; import com.xiang.xservice.schedule.core.DynamicTaskScheduler; @@ -62,7 +62,7 @@ public class FwdImportantMsgJob { private final FwdPerformProjectInfoMapper performProjectInfoMapper; private final FwdPerformConfigMapper performConfigMapper; private final DynamicTaskScheduler dynamicTaskScheduler; - private final DingTalkFWDMsgService dingTalkFWDMsgService; + private final DingTalkScriptMsgService dingTalkScriptMsgService; private final FwdUserConfigMapper fwdUserConfigMapper; private final FwdAudienceConfigMapper fwdAudienceConfigMapper; private final IPerformService iPerformService; @@ -132,7 +132,7 @@ public class FwdImportantMsgJob { savaTask(data, taskId, params); } msg.append("请注意进行数据库配置的更改!"); - dingTalkFWDMsgService.sendFWDMsg(msg.toString()); + dingTalkScriptMsgService.sendScriptMsg(msg.toString()); log.info("【芬玩岛】演唱会预售定时任务结束!time:{}", System.currentTimeMillis()); } @@ -229,7 +229,7 @@ public class FwdImportantMsgJob { } } }); - dingTalkFWDMsgService.sendFWDMsg(msg.toString()); + dingTalkScriptMsgService.sendScriptMsg(msg.toString()); } private void savaTask(FPerformProjectInfo data, long taskId, Map params) { diff --git a/script/src/main/java/com/xiang/xservice/fwd/service/DingTalkFWDMsgService.java b/script/src/main/java/com/xiang/xservice/fwd/service/DingTalkScriptMsgService.java similarity index 52% rename from script/src/main/java/com/xiang/xservice/fwd/service/DingTalkFWDMsgService.java rename to script/src/main/java/com/xiang/xservice/fwd/service/DingTalkScriptMsgService.java index 077771b..fe249dd 100644 --- a/script/src/main/java/com/xiang/xservice/fwd/service/DingTalkFWDMsgService.java +++ b/script/src/main/java/com/xiang/xservice/fwd/service/DingTalkScriptMsgService.java @@ -1,12 +1,11 @@ package com.xiang.xservice.fwd.service; import com.xiang.xservice.basic.xservice.dingTalk.service.DingTalkService; +import com.xiang.xservice.fwd.config.DingTalkRobotConfig; import lombok.RequiredArgsConstructor; import lombok.extern.slf4j.Slf4j; import org.springframework.stereotype.Service; -import java.util.List; - /** * @Author: xiang * @Date: 2025-08-07 10:30 @@ -14,20 +13,18 @@ import java.util.List; @Slf4j @Service @RequiredArgsConstructor -public class DingTalkFWDMsgService { +public class DingTalkScriptMsgService { private final DingTalkService dingTalkService; - private static final String SECRET = "SEC768ed578c0fb31a9aec84b1c1db4f195f5aca203985bbb9d549e23e41c8874d1"; - private static final String TOKEN = "4709b708d961846e0aee523c5abc3b67e8fa424ee292501d85efd4e504f15a8b"; - private static final String USER_ID = "450841600726084717"; + private final DingTalkRobotConfig dingTalkRobotConfig; /** - * 发送芬玩岛消息 + * 发送脚本消息 * @param msg 消息 */ - public void sendFWDMsg(String msg) { + public void sendScriptMsg(String msg) { try { - dingTalkService.sendRobotMessage(SECRET, TOKEN, List.of(USER_ID), msg); + dingTalkService.sendRobotMessage(dingTalkRobotConfig.getSecret(), dingTalkRobotConfig.getToken(), dingTalkRobotConfig.getUsers(), msg); } catch (Exception e) { log.error("信息发送异常, 信息:{}", msg, e); } 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 be1f03b..00d816d 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 @@ -12,7 +12,7 @@ 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.mapper.FwdUserConfigMapper; -import com.xiang.xservice.fwd.service.DingTalkFWDMsgService; +import com.xiang.xservice.fwd.service.DingTalkScriptMsgService; import com.xiang.xservice.fwd.service.IPerformService; import com.xiang.xservice.fwd.service.IPerformServiceHttp; import com.xiang.xservice.http.helper.HttpRequestHelper; @@ -45,7 +45,7 @@ public class PerformServiceImpl implements IPerformService { private final FwdPerformProjectInfoMapper fwdPerformProjectInfoMapper; private final FwdPerformConfigMapper fwdPerformConfigMapper; private final IPerformServiceHttp performServiceHttp; - private final DingTalkFWDMsgService dingTalkService; + private final DingTalkScriptMsgService dingTalkService; private final FwdUserConfigMapper fwdUserConfigMapper; @Value("${DingTalk.chatId}") private String chatId; @@ -110,7 +110,7 @@ public class PerformServiceImpl implements IPerformService { if (Objects.nonNull(projectOrder)) { log.info("下单成功,订单信息:{}", JSONObject.toJSONString(projectOrder)); String msg = "【芬玩岛】下单成功✅✅✅,演出名称:" + performByProjectId.getProjectName() + ",请在2分钟内完成付款!"; - dingTalkService.sendFWDMsg(msg); + dingTalkService.sendScriptMsg(msg); return Boolean.TRUE; } } diff --git a/script/src/main/resources/application-local.yml b/script/src/main/resources/application-local.yml index ad132ed..49718f7 100644 --- a/script/src/main/resources/application-local.yml +++ b/script/src/main/resources/application-local.yml @@ -22,7 +22,7 @@ aliyun: RR: - local -DingTalk: +dingtalk: # 钉钉消息用户,用逗号隔开 userList: "450841600726084717" # 钉钉消息群ID,需要调用/chat/create api创建群返回 @@ -31,10 +31,10 @@ DingTalk: script: token: 797be7f32062e31dec1d567f8b490a5649a5366083618e236c7a1263df1f4af3 secret: SEC9aca642c0c29c9da261462869c464d34623247583d98fc82343a0a4464abbe91 - userIds: + users: - 450841600726084717 xb: token: ad21ead99f0fdc63aa00d6732b7b0888c17590f7612c68297edfcb71844d1437 secret: SECc09d8aad6635f1a4cbadb7c0ab365523c46299f138438cd885e445e0f5f4d730 - userIds: + users: - 450841600726084717 \ No newline at end of file From 2e872192df27e7bd397370eca3e15069064f55f8 Mon Sep 17 00:00:00 2001 From: Zhujx Date: Thu, 7 Aug 2025 11:02:47 +0800 Subject: [PATCH 48/49] =?UTF-8?q?perf:glados=E6=B6=88=E6=81=AF=E9=85=8D?= =?UTF-8?q?=E7=BD=AE?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../DingTalkRobotScriptConfig.java} | 4 ++-- .../config/DingTalkRobotXbConfig.java | 22 +++++++++++++++++++ .../fwd/service/DingTalkScriptMsgService.java | 4 ++-- .../service/DingTalkScriptMsgService.java | 10 ++++----- .../xb/service/DingTalkRobotService.java | 8 +++++++ 5 files changed, 38 insertions(+), 10 deletions(-) rename script/src/main/java/com/xiang/xservice/{fwd/config/DingTalkRobotConfig.java => config/DingTalkRobotScriptConfig.java} (82%) create mode 100644 script/src/main/java/com/xiang/xservice/config/DingTalkRobotXbConfig.java create mode 100644 script/src/main/java/com/xiang/xservice/xb/service/DingTalkRobotService.java diff --git a/script/src/main/java/com/xiang/xservice/fwd/config/DingTalkRobotConfig.java b/script/src/main/java/com/xiang/xservice/config/DingTalkRobotScriptConfig.java similarity index 82% rename from script/src/main/java/com/xiang/xservice/fwd/config/DingTalkRobotConfig.java rename to script/src/main/java/com/xiang/xservice/config/DingTalkRobotScriptConfig.java index 7bc1cab..8e6d91a 100644 --- a/script/src/main/java/com/xiang/xservice/fwd/config/DingTalkRobotConfig.java +++ b/script/src/main/java/com/xiang/xservice/config/DingTalkRobotScriptConfig.java @@ -1,4 +1,4 @@ -package com.xiang.xservice.fwd.config; +package com.xiang.xservice.config; import lombok.Getter; import lombok.Setter; @@ -13,7 +13,7 @@ import java.util.List; @Getter @Setter @ConfigurationProperties(prefix = "dingtalk.robot.script") -public class DingTalkRobotConfig { +public class DingTalkRobotScriptConfig { private String token; private String secret; diff --git a/script/src/main/java/com/xiang/xservice/config/DingTalkRobotXbConfig.java b/script/src/main/java/com/xiang/xservice/config/DingTalkRobotXbConfig.java new file mode 100644 index 0000000..979ba8a --- /dev/null +++ b/script/src/main/java/com/xiang/xservice/config/DingTalkRobotXbConfig.java @@ -0,0 +1,22 @@ +package com.xiang.xservice.config; + +import lombok.Getter; +import lombok.Setter; +import org.springframework.boot.context.properties.ConfigurationProperties; + +import java.util.List; + +/** + * @Author: xiang + * @Date: 2025-08-07 10:46 + */ +@Getter +@Setter +@ConfigurationProperties(prefix = "dingtalk.robot.xb") +public class DingTalkRobotXbConfig { + + private String token; + private String secret; + private List users; + +} diff --git a/script/src/main/java/com/xiang/xservice/fwd/service/DingTalkScriptMsgService.java b/script/src/main/java/com/xiang/xservice/fwd/service/DingTalkScriptMsgService.java index fe249dd..d340163 100644 --- a/script/src/main/java/com/xiang/xservice/fwd/service/DingTalkScriptMsgService.java +++ b/script/src/main/java/com/xiang/xservice/fwd/service/DingTalkScriptMsgService.java @@ -1,7 +1,7 @@ package com.xiang.xservice.fwd.service; import com.xiang.xservice.basic.xservice.dingTalk.service.DingTalkService; -import com.xiang.xservice.fwd.config.DingTalkRobotConfig; +import com.xiang.xservice.config.DingTalkRobotScriptConfig; import lombok.RequiredArgsConstructor; import lombok.extern.slf4j.Slf4j; import org.springframework.stereotype.Service; @@ -16,7 +16,7 @@ import org.springframework.stereotype.Service; public class DingTalkScriptMsgService { private final DingTalkService dingTalkService; - private final DingTalkRobotConfig dingTalkRobotConfig; + private final DingTalkRobotScriptConfig dingTalkRobotConfig; /** * 发送脚本消息 diff --git a/script/src/main/java/com/xiang/xservice/glados/service/DingTalkScriptMsgService.java b/script/src/main/java/com/xiang/xservice/glados/service/DingTalkScriptMsgService.java index 839e2e6..d5acdc7 100644 --- a/script/src/main/java/com/xiang/xservice/glados/service/DingTalkScriptMsgService.java +++ b/script/src/main/java/com/xiang/xservice/glados/service/DingTalkScriptMsgService.java @@ -1,12 +1,11 @@ package com.xiang.xservice.glados.service; import com.xiang.xservice.basic.xservice.dingTalk.service.DingTalkService; +import com.xiang.xservice.config.DingTalkRobotScriptConfig; import lombok.RequiredArgsConstructor; import lombok.extern.slf4j.Slf4j; import org.springframework.stereotype.Service; -import java.util.List; - /** * @Author: xiang * @Date: 2025-08-07 10:30 @@ -17,9 +16,7 @@ import java.util.List; public class DingTalkScriptMsgService { private final DingTalkService dingTalkService; - private static final String SECRET = "SEC768ed578c0fb31a9aec84b1c1db4f195f5aca203985bbb9d549e23e41c8874d1"; - private static final String TOKEN = "4709b708d961846e0aee523c5abc3b67e8fa424ee292501d85efd4e504f15a8b"; - private static final String USER_ID = "450841600726084717"; + private final DingTalkRobotScriptConfig dingTalkRobotScriptConfig; /** * 发送脚本消息 @@ -27,7 +24,8 @@ public class DingTalkScriptMsgService { */ public void sendScriptMsg(String msg) { try { - dingTalkService.sendRobotMessage(SECRET, TOKEN, List.of(USER_ID), msg); + dingTalkService.sendRobotMessage(dingTalkRobotScriptConfig.getSecret(), dingTalkRobotScriptConfig.getToken(), + dingTalkRobotScriptConfig.getUsers(), msg); } catch (Exception e) { log.error("信息发送异常, 信息:{}", msg, e); } diff --git a/script/src/main/java/com/xiang/xservice/xb/service/DingTalkRobotService.java b/script/src/main/java/com/xiang/xservice/xb/service/DingTalkRobotService.java new file mode 100644 index 0000000..08ad4a1 --- /dev/null +++ b/script/src/main/java/com/xiang/xservice/xb/service/DingTalkRobotService.java @@ -0,0 +1,8 @@ +package com.xiang.xservice.xb.service; + +/** + * @Author: xiang + * @Date: 2025-08-07 11:02 + */ +public class DingTalkRobotService { +} From 9aa27a63e0f252700de6ce55c018c3e0f7bbc050 Mon Sep 17 00:00:00 2001 From: Zhujx Date: Thu, 7 Aug 2025 11:17:29 +0800 Subject: [PATCH 49/49] =?UTF-8?q?perf:=E6=B6=88=E6=81=AF=E9=85=8D=E7=BD=AE?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- pom.xml | 2 +- .../com/xiang/ServiceScriptApplication.java | 4 +- .../service/DingTalkScriptDomainService.java | 33 ++++++ .../domain/service/IDomainServiceImpl.java | 11 +- .../fwd/schedule/FwdImportantMsgJob.java | 12 +-- .../fwd/server/FwdUserController.java | 6 +- ...ice.java => DingTalkScriptFWDService.java} | 2 +- .../fwd/service/impl/PerformServiceImpl.java | 7 +- .../glados/schedule/GladosCheckInJob.java | 1 - ....java => DingTalkScriptGladosService.java} | 2 +- .../glados/service/GLaDOSServiceImpl.java | 9 +- .../jntyzx/service/JntyzxServiceImpl.java | 2 +- .../xservice/xb/schedule/xb/FundCountJob.java | 9 +- .../xb/schedule/xb/FundInfoQueryJob.java | 102 +----------------- .../xb/schedule/xb/FundMsgReportJob.java | 29 ++--- .../xb/service/DingTalkRobotService.java | 23 ++++ 16 files changed, 87 insertions(+), 167 deletions(-) create mode 100644 script/src/main/java/com/xiang/xservice/domain/service/DingTalkScriptDomainService.java rename script/src/main/java/com/xiang/xservice/fwd/service/{DingTalkScriptMsgService.java => DingTalkScriptFWDService.java} (95%) rename script/src/main/java/com/xiang/xservice/glados/service/{DingTalkScriptMsgService.java => DingTalkScriptGladosService.java} (95%) diff --git a/pom.xml b/pom.xml index 3214797..3b8e75f 100644 --- a/pom.xml +++ b/pom.xml @@ -35,7 +35,7 @@ com.xiang xservice-message-starter - 1.2 + 2.0 com.xiang diff --git a/script/src/main/java/com/xiang/ServiceScriptApplication.java b/script/src/main/java/com/xiang/ServiceScriptApplication.java index 7043da4..5791f5c 100644 --- a/script/src/main/java/com/xiang/ServiceScriptApplication.java +++ b/script/src/main/java/com/xiang/ServiceScriptApplication.java @@ -18,9 +18,7 @@ import org.springframework.scheduling.annotation.EnableScheduling; "com.xiang.xservice.xb.repository" }) @ConfigurationPropertiesScan(basePackages = { - "com.xiang.xservice.fwd.config", - "com.xiang.xservice.xb.config", - "com.xiang.xservice.glados.config", + "com.xiang.xservice.config" }) public class ServiceScriptApplication { public static void main(String[] args) { diff --git a/script/src/main/java/com/xiang/xservice/domain/service/DingTalkScriptDomainService.java b/script/src/main/java/com/xiang/xservice/domain/service/DingTalkScriptDomainService.java new file mode 100644 index 0000000..8acc72f --- /dev/null +++ b/script/src/main/java/com/xiang/xservice/domain/service/DingTalkScriptDomainService.java @@ -0,0 +1,33 @@ +package com.xiang.xservice.domain.service; + +import com.xiang.xservice.basic.xservice.dingTalk.service.DingTalkService; +import com.xiang.xservice.config.DingTalkRobotScriptConfig; +import lombok.RequiredArgsConstructor; +import lombok.extern.slf4j.Slf4j; +import org.springframework.stereotype.Service; + +/** + * @Author: xiang + * @Date: 2025-08-07 10:30 + */ +@Slf4j +@Service +@RequiredArgsConstructor +public class DingTalkScriptDomainService { + + private final DingTalkService dingTalkService; + private final DingTalkRobotScriptConfig dingTalkRobotScriptConfig; + + /** + * 发送脚本消息 + * @param msg 消息 + */ + public void sendScriptMsg(String msg) { + try { + dingTalkService.sendRobotMessage(dingTalkRobotScriptConfig.getSecret(), dingTalkRobotScriptConfig.getToken(), + dingTalkRobotScriptConfig.getUsers(), msg); + } catch (Exception e) { + log.error("信息发送异常, 信息:{}", msg, e); + } + } +} diff --git a/script/src/main/java/com/xiang/xservice/domain/service/IDomainServiceImpl.java b/script/src/main/java/com/xiang/xservice/domain/service/IDomainServiceImpl.java index 4f4dd6e..7376c7f 100644 --- a/script/src/main/java/com/xiang/xservice/domain/service/IDomainServiceImpl.java +++ b/script/src/main/java/com/xiang/xservice/domain/service/IDomainServiceImpl.java @@ -8,11 +8,9 @@ import com.aliyun.alidns20150109.models.DescribeSubDomainRecordsResponse; import com.aliyun.alidns20150109.models.DescribeSubDomainRecordsResponseBody; import com.aliyun.alidns20150109.models.UpdateDomainRecordRequest; import com.aliyun.teaopenapi.models.Config; -import com.xiang.xservice.basic.xservice.dingTalk.service.DingTalkService; import com.xiang.xservice.domain.config.AliyunDnsPropertyConfig; import lombok.RequiredArgsConstructor; import lombok.extern.slf4j.Slf4j; -import org.springframework.beans.factory.annotation.Value; import org.springframework.stereotype.Service; import java.util.List; @@ -38,10 +36,7 @@ public class IDomainServiceImpl implements IDomainService { private final AliyunDnsPropertyConfig aliyunDnsPropertyConfig; private static final String TYPE = "A"; - private final DingTalkService dingTalkService; - @Value("${DingTalk.chatId}") - private String chatId; - + private final DingTalkScriptDomainService dingTalkService; @Override public void dynamicDomainAnalysis(String publicIp) throws Exception { Client client = createClient(); @@ -58,14 +53,14 @@ public class IDomainServiceImpl implements IDomainService { if (records.isEmpty()) { log.info("未找到记录,添加记录..., ip:{}", publicIp); addDnsRecord(client, publicIp, rr); - dingTalkService.sendRobotMessage("动态解析公网ip成功,域名:" + rr + "." + DOMAIN_NAME + ", 新ip:" + publicIp); + dingTalkService.sendScriptMsg("动态解析公网ip成功,域名:" + rr + "." + DOMAIN_NAME + ", 新ip:" + publicIp); } else { String recordId = records.get(0).getRecordId(); String currentValue = records.get(0).getValue(); if (!publicIp.equals(currentValue)) { log.info("IP变更,更新记录...,ip:{}", publicIp); updateDnsRecord(client, recordId, publicIp, rr); - dingTalkService.sendRobotMessage("动态解析公网ip成功,域名:" + rr + "." + DOMAIN_NAME + ", 新ip:" + publicIp); + dingTalkService.sendScriptMsg("动态解析公网ip成功,域名:" + rr + "." + DOMAIN_NAME + ", 新ip:" + publicIp); } else { log.info("ip未变更,无需修改,ip:{}", publicIp); } diff --git a/script/src/main/java/com/xiang/xservice/fwd/schedule/FwdImportantMsgJob.java b/script/src/main/java/com/xiang/xservice/fwd/schedule/FwdImportantMsgJob.java index 3becca2..2693c5f 100644 --- a/script/src/main/java/com/xiang/xservice/fwd/schedule/FwdImportantMsgJob.java +++ b/script/src/main/java/com/xiang/xservice/fwd/schedule/FwdImportantMsgJob.java @@ -18,7 +18,7 @@ import com.xiang.xservice.fwd.mapper.FwdAudienceConfigMapper; import com.xiang.xservice.fwd.mapper.FwdPerformConfigMapper; import com.xiang.xservice.fwd.mapper.FwdPerformProjectInfoMapper; import com.xiang.xservice.fwd.mapper.FwdUserConfigMapper; -import com.xiang.xservice.fwd.service.DingTalkScriptMsgService; +import com.xiang.xservice.fwd.service.DingTalkScriptFWDService; import com.xiang.xservice.fwd.service.IPerformService; import com.xiang.xservice.fwd.service.IPerformServiceHttp; import com.xiang.xservice.schedule.core.DynamicTaskScheduler; @@ -31,7 +31,6 @@ import lombok.RequiredArgsConstructor; import lombok.extern.slf4j.Slf4j; import org.apache.commons.collections4.CollectionUtils; import org.apache.commons.collections4.MapUtils; -import org.springframework.beans.factory.annotation.Value; import org.springframework.scheduling.annotation.Scheduled; import org.springframework.stereotype.Component; import org.springframework.web.bind.annotation.PostMapping; @@ -62,16 +61,13 @@ public class FwdImportantMsgJob { private final FwdPerformProjectInfoMapper performProjectInfoMapper; private final FwdPerformConfigMapper performConfigMapper; private final DynamicTaskScheduler dynamicTaskScheduler; - private final DingTalkScriptMsgService dingTalkScriptMsgService; + private final DingTalkScriptFWDService dingTalkScriptFWDService; private final FwdUserConfigMapper fwdUserConfigMapper; private final FwdAudienceConfigMapper fwdAudienceConfigMapper; private final IPerformService iPerformService; private final IDynamicTaskSchedulerService dynamicTaskSchedulerService; private final IPerformServiceHttp iPerformServiceHttp; - @Value("${DingTalk.chatId}") - private String chatId; - @PostConstruct public void init() { log.info("xs-fwd任务调度系统初始化!"); @@ -132,7 +128,7 @@ public class FwdImportantMsgJob { savaTask(data, taskId, params); } msg.append("请注意进行数据库配置的更改!"); - dingTalkScriptMsgService.sendScriptMsg(msg.toString()); + dingTalkScriptFWDService.sendScriptMsg(msg.toString()); log.info("【芬玩岛】演唱会预售定时任务结束!time:{}", System.currentTimeMillis()); } @@ -229,7 +225,7 @@ public class FwdImportantMsgJob { } } }); - dingTalkScriptMsgService.sendScriptMsg(msg.toString()); + dingTalkScriptFWDService.sendScriptMsg(msg.toString()); } private void savaTask(FPerformProjectInfo data, long taskId, Map params) { diff --git a/script/src/main/java/com/xiang/xservice/fwd/server/FwdUserController.java b/script/src/main/java/com/xiang/xservice/fwd/server/FwdUserController.java index c3453f8..9dec7a3 100644 --- a/script/src/main/java/com/xiang/xservice/fwd/server/FwdUserController.java +++ b/script/src/main/java/com/xiang/xservice/fwd/server/FwdUserController.java @@ -2,7 +2,7 @@ package com.xiang.xservice.fwd.server; import com.alibaba.fastjson.JSON; import com.xiang.xservice.basic.common.resp.Result; -import com.xiang.xservice.basic.xservice.dingTalk.service.DingTalkService; +import com.xiang.xservice.fwd.service.DingTalkScriptFWDService; import com.xiang.xservice.fwd.service.IPerformService; import lombok.RequiredArgsConstructor; import lombok.extern.slf4j.Slf4j; @@ -24,7 +24,7 @@ import java.util.Map; public class FwdUserController { private final IPerformService performService; - private final DingTalkService dingTalkService; + private final DingTalkScriptFWDService dingTalkService; @GetMapping("/token") public Result updateUserTokenFromHttpProxy(@RequestParam Map params) { @@ -35,7 +35,7 @@ public class FwdUserController { if (b) { String msg = "用户:" + name + "的token更新成功!"; try { - dingTalkService.sendRobotMessage(msg); + dingTalkService.sendScriptMsg(msg); } catch (Exception e) { log.error("消息发送失败", e); return Result.error("消息发送失败"); diff --git a/script/src/main/java/com/xiang/xservice/fwd/service/DingTalkScriptMsgService.java b/script/src/main/java/com/xiang/xservice/fwd/service/DingTalkScriptFWDService.java similarity index 95% rename from script/src/main/java/com/xiang/xservice/fwd/service/DingTalkScriptMsgService.java rename to script/src/main/java/com/xiang/xservice/fwd/service/DingTalkScriptFWDService.java index d340163..2d7bd1f 100644 --- a/script/src/main/java/com/xiang/xservice/fwd/service/DingTalkScriptMsgService.java +++ b/script/src/main/java/com/xiang/xservice/fwd/service/DingTalkScriptFWDService.java @@ -13,7 +13,7 @@ import org.springframework.stereotype.Service; @Slf4j @Service @RequiredArgsConstructor -public class DingTalkScriptMsgService { +public class DingTalkScriptFWDService { private final DingTalkService dingTalkService; private final DingTalkRobotScriptConfig dingTalkRobotConfig; 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 00d816d..23f7cf2 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 @@ -12,14 +12,13 @@ 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.mapper.FwdUserConfigMapper; -import com.xiang.xservice.fwd.service.DingTalkScriptMsgService; +import com.xiang.xservice.fwd.service.DingTalkScriptFWDService; import com.xiang.xservice.fwd.service.IPerformService; import com.xiang.xservice.fwd.service.IPerformServiceHttp; import com.xiang.xservice.http.helper.HttpRequestHelper; import lombok.RequiredArgsConstructor; import lombok.extern.slf4j.Slf4j; import org.apache.commons.collections4.CollectionUtils; -import org.springframework.beans.factory.annotation.Value; import org.springframework.stereotype.Service; import java.math.BigDecimal; @@ -45,10 +44,8 @@ public class PerformServiceImpl implements IPerformService { private final FwdPerformProjectInfoMapper fwdPerformProjectInfoMapper; private final FwdPerformConfigMapper fwdPerformConfigMapper; private final IPerformServiceHttp performServiceHttp; - private final DingTalkScriptMsgService dingTalkService; + private final DingTalkScriptFWDService dingTalkService; private final FwdUserConfigMapper fwdUserConfigMapper; - @Value("${DingTalk.chatId}") - private String chatId; private final HttpRequestHelper httpRequestHelper; private final ExecutorService es = new ThreadPoolExecutor( diff --git a/script/src/main/java/com/xiang/xservice/glados/schedule/GladosCheckInJob.java b/script/src/main/java/com/xiang/xservice/glados/schedule/GladosCheckInJob.java index 02d76bf..631df26 100644 --- a/script/src/main/java/com/xiang/xservice/glados/schedule/GladosCheckInJob.java +++ b/script/src/main/java/com/xiang/xservice/glados/schedule/GladosCheckInJob.java @@ -20,7 +20,6 @@ public class GladosCheckInJob { private final GLaDOSService glaDOSService; @Scheduled(cron = "0 0 8,16 1/1 * ?") -// @Scheduled(cron = "0 0/1 * * * ?") public void checkInJon() { log.info("[job] Glados Check In Job start, time:{}", LocalDateTime.now()); glaDOSService.checkIn(); diff --git a/script/src/main/java/com/xiang/xservice/glados/service/DingTalkScriptMsgService.java b/script/src/main/java/com/xiang/xservice/glados/service/DingTalkScriptGladosService.java similarity index 95% rename from script/src/main/java/com/xiang/xservice/glados/service/DingTalkScriptMsgService.java rename to script/src/main/java/com/xiang/xservice/glados/service/DingTalkScriptGladosService.java index d5acdc7..646eccf 100644 --- a/script/src/main/java/com/xiang/xservice/glados/service/DingTalkScriptMsgService.java +++ b/script/src/main/java/com/xiang/xservice/glados/service/DingTalkScriptGladosService.java @@ -13,7 +13,7 @@ import org.springframework.stereotype.Service; @Slf4j @Service @RequiredArgsConstructor -public class DingTalkScriptMsgService { +public class DingTalkScriptGladosService { private final DingTalkService dingTalkService; private final DingTalkRobotScriptConfig dingTalkRobotScriptConfig; diff --git a/script/src/main/java/com/xiang/xservice/glados/service/GLaDOSServiceImpl.java b/script/src/main/java/com/xiang/xservice/glados/service/GLaDOSServiceImpl.java index bac1b22..1e470ef 100644 --- a/script/src/main/java/com/xiang/xservice/glados/service/GLaDOSServiceImpl.java +++ b/script/src/main/java/com/xiang/xservice/glados/service/GLaDOSServiceImpl.java @@ -11,7 +11,6 @@ import com.xiang.xservice.glados.repository.GladosMapper; import com.xiang.xservice.xb.entity.pojo.User; import lombok.RequiredArgsConstructor; import lombok.extern.slf4j.Slf4j; -import org.springframework.beans.factory.annotation.Value; import org.springframework.stereotype.Service; import org.springframework.util.CollectionUtils; import org.springframework.util.StringUtils; @@ -32,13 +31,7 @@ public class GLaDOSServiceImpl implements GLaDOSService{ private final GladosMapper gladosMapper; - private final DingTalkScriptMsgService dingTalkService; - - @Value("${DingTalk.userList}") - private String userList; - - @Value("${DingTalk.chatId}") - private String chatId; + private final DingTalkScriptGladosService dingTalkService; /** * 签到 diff --git a/script/src/main/java/com/xiang/xservice/jntyzx/service/JntyzxServiceImpl.java b/script/src/main/java/com/xiang/xservice/jntyzx/service/JntyzxServiceImpl.java index ce5e291..cdbf235 100644 --- a/script/src/main/java/com/xiang/xservice/jntyzx/service/JntyzxServiceImpl.java +++ b/script/src/main/java/com/xiang/xservice/jntyzx/service/JntyzxServiceImpl.java @@ -33,7 +33,7 @@ public class JntyzxServiceImpl implements JntyzxService{ private final DingTalkService dingTalkService; - @Value("${DingTalk.chatId}") + @Value("${dingtalk.chatId}") private String chatId; @Override diff --git a/script/src/main/java/com/xiang/xservice/xb/schedule/xb/FundCountJob.java b/script/src/main/java/com/xiang/xservice/xb/schedule/xb/FundCountJob.java index e1aee66..04f7b32 100644 --- a/script/src/main/java/com/xiang/xservice/xb/schedule/xb/FundCountJob.java +++ b/script/src/main/java/com/xiang/xservice/xb/schedule/xb/FundCountJob.java @@ -2,16 +2,15 @@ package com.xiang.xservice.xb.schedule.xb; import com.alibaba.fastjson2.JSONObject; import com.google.common.collect.Lists; -import com.xiang.xservice.basic.xservice.dingTalk.service.DingTalkService; import com.xiang.xservice.xb.entity.pojo.xb.XbFundCount; import com.xiang.xservice.xb.entity.pojo.xb.XbFundList; import com.xiang.xservice.xb.entity.response.xbyj.fund.FundList; +import com.xiang.xservice.xb.service.DingTalkRobotService; import com.xiang.xservice.xb.service.FundService; import lombok.RequiredArgsConstructor; import lombok.extern.slf4j.Slf4j; import org.apache.commons.collections4.CollectionUtils; import org.apache.commons.lang3.StringUtils; -import org.springframework.beans.factory.annotation.Value; import org.springframework.scheduling.annotation.Scheduled; import org.springframework.stereotype.Component; @@ -37,9 +36,7 @@ import java.util.stream.Collectors; public class FundCountJob { private final FundService fundService; - private final DingTalkService dingTalkService; - @Value("${DingTalk.chatId}") - private String chatId; + private final DingTalkRobotService dingTalkService; @Scheduled(cron = "0 0 22 * * ?") public void countFundJob() { // 周六周日过滤 @@ -96,7 +93,7 @@ public class FundCountJob { sb.append("【").append(fundCounts.get(0).getName()).append("】本周平均涨跌幅为:").append(avg).append("\n"); }); if (StringUtils.isNotBlank(sb)) { - dingTalkService.sendChatMessage(chatId, sb.toString()); + dingTalkService.sendXbMsg(sb.toString()); } log.info("==========================[基金统计] 基金本周涨跌幅消息发送定时任务结束!=========================="); } diff --git a/script/src/main/java/com/xiang/xservice/xb/schedule/xb/FundInfoQueryJob.java b/script/src/main/java/com/xiang/xservice/xb/schedule/xb/FundInfoQueryJob.java index 6673380..207b33b 100644 --- a/script/src/main/java/com/xiang/xservice/xb/schedule/xb/FundInfoQueryJob.java +++ b/script/src/main/java/com/xiang/xservice/xb/schedule/xb/FundInfoQueryJob.java @@ -25,7 +25,6 @@ import java.time.LocalDate; import java.time.LocalDateTime; import java.time.format.DateTimeFormatter; import java.util.Arrays; -import java.util.Comparator; import java.util.List; import java.util.Map; import java.util.Objects; @@ -59,108 +58,9 @@ public class FundInfoQueryJob { new ThreadPoolExecutor.AbortPolicy()); @Value("${xiaobei.codeArr}") private String codeArr; - @Value("${DingTalk.chatId}") + @Value("${dingtalk.chatId}") private String chatId; - /** - * 基金增长定时任务查询 - * 半个小时一次 9点开始到3.30结束 - */ -// @Scheduled(cron = "0 1,31 9,10,11,13,14 * * ? ") - public void queryFundJob() throws Exception { - // 周六周日过滤 - if (Objects.equals(LocalDateTime.now().getDayOfWeek(), DayOfWeek.SATURDAY) || - Objects.equals(LocalDateTime.now().getDayOfWeek(), DayOfWeek.SUNDAY)) { - return; - } - log.info("==========================[基金查询] 基金查询定时任务启动!=========================="); - List result = queryFund(1); - if (CollectionUtils.isEmpty(result)) { - return; - } - log.info("查询的基金涨跌幅数据:{}", JSONObject.toJSONString(result)); - result = result.stream().sorted(Comparator.comparing(FundMessage::getChange)).collect(Collectors.toList()); - StringBuilder sb = new StringBuilder("今天的A股行情:"); - for (FundMessage fundMessage : result) { - sb.append("基金名称:") - .append(fundMessage.getName()) - .append("于") - .append(fundMessage.getUpdate()) - .append("更新涨跌幅:") - .append(fundMessage.getChange() - .multiply(new BigDecimal("100")) - .setScale(2, RoundingMode.HALF_UP).toString()) - .append("%\n"); - } - dingTalkService.sendChatMessage(chatId, sb.toString()); - log.info("==========================[基金查询] 基金查询定时任务结束!=========================="); - } - /** - * 美股基金每日早上9点消息一次 - */ -// @Scheduled(cron = "0 0 9 * * ? ") - public void queryFundJob3() throws Exception { - // 周六周日过滤 - if (Objects.equals(LocalDateTime.now().getDayOfWeek(), DayOfWeek.SATURDAY) || - Objects.equals(LocalDateTime.now().getDayOfWeek(), DayOfWeek.SUNDAY)) { - return; - } - log.info("==========================[基金查询] 基金查询定时任务启动!=========================="); - List result = queryFund(3); - if (CollectionUtils.isEmpty(result)) { - return; - } - log.info("查询的美股基金涨跌幅数据:{}", JSONObject.toJSONString(result)); - result = result.stream().sorted(Comparator.comparing(FundMessage::getChange)).collect(Collectors.toList()); - StringBuilder sb = new StringBuilder("今天的美股行情:\n"); - for (FundMessage fundMessage : result) { - sb.append("基金名称:") - .append(fundMessage.getName()) - .append("于") - .append(fundMessage.getUpdate()) - .append("更新涨跌幅:") - .append(fundMessage.getChange() - .multiply(new BigDecimal("100")) - .setScale(2, RoundingMode.HALF_UP).toString()) - .append("%\n"); - } - dingTalkService.sendChatMessage(chatId, sb.toString()); - log.info("==========================[基金查询] 基金查询定时任务结束!=========================="); - } - /** - * 港股基金增长定时任务查询 - * 半个小时一次 9点开始到3.30结束 - */ -// @Scheduled(cron = "0 1,31 9,10,11,13,14,15 * * ? ") - public void queryFundJob2() throws Exception { - // 周六周日过滤 - if (Objects.equals(LocalDateTime.now().getDayOfWeek(), DayOfWeek.SATURDAY) || - Objects.equals(LocalDateTime.now().getDayOfWeek(), DayOfWeek.SUNDAY)) { - return; - } - log.info("==========================[基金查询] 基金查询定时任务启动!=========================="); - List result = queryFund(2); - if (CollectionUtils.isEmpty(result)) { - return; - } - log.info("查询的港股基金涨跌幅数据:{}", JSONObject.toJSONString(result)); - result = result.stream().sorted(Comparator.comparing(FundMessage::getChange)).collect(Collectors.toList()); - StringBuilder sb = new StringBuilder("今天的港股行情:\n"); - for (FundMessage fundMessage : result) { - sb.append("基金名称:") - .append(fundMessage.getName()) - .append("于") - .append(fundMessage.getUpdate()) - .append("更新涨跌幅:") - .append(fundMessage.getChange() - .multiply(new BigDecimal("100")) - .setScale(2, RoundingMode.HALF_UP).toString()) - .append("%\n"); - } - dingTalkService.sendChatMessage(chatId, sb.toString()); - log.info("==========================[基金查询] 基金查询定时任务结束!=========================="); - } - /** * 基金涨跌幅5分钟超过2%重点通知 */ diff --git a/script/src/main/java/com/xiang/xservice/xb/schedule/xb/FundMsgReportJob.java b/script/src/main/java/com/xiang/xservice/xb/schedule/xb/FundMsgReportJob.java index c434e32..f28f36b 100644 --- a/script/src/main/java/com/xiang/xservice/xb/schedule/xb/FundMsgReportJob.java +++ b/script/src/main/java/com/xiang/xservice/xb/schedule/xb/FundMsgReportJob.java @@ -1,16 +1,17 @@ package com.xiang.xservice.xb.schedule.xb; import com.alibaba.fastjson.JSON; -import com.xiang.xservice.basic.xservice.dingTalk.service.DingTalkService; import com.xiang.xservice.xb.entity.pojo.xb.XbFundList; import com.xiang.xservice.xb.entity.response.xbyj.fund.FundList; +import com.xiang.xservice.xb.service.DingTalkRobotService; import com.xiang.xservice.xb.service.FundService; import lombok.RequiredArgsConstructor; import lombok.extern.slf4j.Slf4j; import org.apache.commons.collections4.CollectionUtils; -import org.springframework.beans.factory.annotation.Value; 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.math.BigDecimal; import java.math.RoundingMode; @@ -32,18 +33,18 @@ import java.util.stream.Collectors; */ @Component @Slf4j +@RestController @RequiredArgsConstructor public class FundMsgReportJob { private final FundService fundService; - private final DingTalkService dingTalkService; - @Value("${DingTalk.chatId}") - private String chatId; + private final DingTalkRobotService dingTalkService; private static final Integer TYPE_A = 1; private static final Integer TYPE_M = 3; private static final Integer TYPE_G = 2; @Scheduled(cron = "0 1,31 9,10,11,13,14 * * ?") + @PostMapping("/asdasda") public void fundReport4A() { log.info("===========A股基金变化通知!==========="); // 周六周日过滤 @@ -67,11 +68,7 @@ public class FundMsgReportJob { log.info("http查询基金信息:{}", JSON.toJSONString(funds)); StringBuilder msg = new StringBuilder(date).append("===》A股基金变化通知:\n"); buildMsg(funds, fundMap, msg); - try { - dingTalkService.sendChatMessage(chatId, msg.toString()); - } catch (Exception e) { - log.error("钉钉消息通知异常.", e); - } + dingTalkService.sendXbMsg(msg.toString()); } @Scheduled(cron = "0 1,31 9,10,11,13,14,15 * * ?") @@ -98,11 +95,7 @@ public class FundMsgReportJob { log.info("http查询港股基金信息:{}", JSON.toJSONString(funds)); StringBuilder msg = new StringBuilder(date).append("===》港股基金变化通知:\n"); buildMsg(funds, fundMap, msg); - try { - dingTalkService.sendChatMessage(chatId, msg.toString()); - } catch (Exception e) { - log.error("钉钉消息通知异常.", e); - } + dingTalkService.sendXbMsg(msg.toString()); } @Scheduled(cron = "0 0 9 * * ?") @@ -129,11 +122,7 @@ public class FundMsgReportJob { log.info("http查询美股基金信息:{}", JSON.toJSONString(funds)); StringBuilder msg = new StringBuilder(date).append("===》美股基金变化通知:\n"); buildMsg(funds, fundMap, msg); - try { - dingTalkService.sendChatMessage(chatId, msg.toString()); - } catch (Exception e) { - log.error("钉钉消息通知异常.", e); - } + dingTalkService.sendXbMsg(msg.toString()); } private static void buildMsg(List funds, Map fundMap, StringBuilder msg) { diff --git a/script/src/main/java/com/xiang/xservice/xb/service/DingTalkRobotService.java b/script/src/main/java/com/xiang/xservice/xb/service/DingTalkRobotService.java index 08ad4a1..69d41b4 100644 --- a/script/src/main/java/com/xiang/xservice/xb/service/DingTalkRobotService.java +++ b/script/src/main/java/com/xiang/xservice/xb/service/DingTalkRobotService.java @@ -1,8 +1,31 @@ package com.xiang.xservice.xb.service; +import com.xiang.xservice.basic.xservice.dingTalk.service.DingTalkService; +import com.xiang.xservice.config.DingTalkRobotXbConfig; +import lombok.RequiredArgsConstructor; +import lombok.extern.slf4j.Slf4j; +import org.springframework.stereotype.Service; + /** * @Author: xiang * @Date: 2025-08-07 11:02 */ +@Service +@RequiredArgsConstructor +@Slf4j public class DingTalkRobotService { + private final DingTalkService dingTalkService; + private final DingTalkRobotXbConfig dingTalkRobotConfig; + + /** + * 发送脚本消息 + * @param msg 消息 + */ + public void sendXbMsg(String msg) { + try { + dingTalkService.sendRobotMessage(dingTalkRobotConfig.getSecret(), dingTalkRobotConfig.getToken(), dingTalkRobotConfig.getUsers(), msg); + } catch (Exception e) { + log.error("信息发送异常, 信息:{}", msg, e); + } + } }