From 1fc66ca0f499bf9b280a1bb82f6d289f3c065b53 Mon Sep 17 00:00:00 2001 From: xiang Date: Sun, 3 Aug 2025 17:39:54 +0800 Subject: [PATCH] =?UTF-8?q?perf=EF=BC=9Aget=E8=AF=B7=E6=B1=82=E5=8F=91?= =?UTF-8?q?=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");