Compare commits
10 Commits
539656b91a
...
54afcf47fc
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
54afcf47fc | ||
|
|
2b68a860c2 | ||
|
|
70224d4c3e | ||
|
|
422ae693b2 | ||
|
|
7c2b8f4731 | ||
|
|
bccf5ad774 | ||
|
|
1e54ee39d4 | ||
|
|
388287fc65 | ||
|
|
e65cc97ef9 | ||
|
|
97b4b6a1a8 |
@@ -0,0 +1,35 @@
|
|||||||
|
package com.xiang.xservice.application.script.fwd.constants;
|
||||||
|
|
||||||
|
import lombok.AllArgsConstructor;
|
||||||
|
import lombok.Getter;
|
||||||
|
|
||||||
|
import java.math.BigDecimal;
|
||||||
|
import java.util.Arrays;
|
||||||
|
|
||||||
|
@Getter
|
||||||
|
@AllArgsConstructor
|
||||||
|
public enum PriceRange {
|
||||||
|
RANGE_600_900(0, BigDecimal.valueOf(600), BigDecimal.valueOf(900)),
|
||||||
|
RANGE_900_1300(1, BigDecimal.valueOf(900), BigDecimal.valueOf(1300)),
|
||||||
|
RANGE_1300_1600(2, BigDecimal.valueOf(1300), BigDecimal.valueOf(1600)),
|
||||||
|
RANGE_OVER_1600(3, BigDecimal.valueOf(1600), null),
|
||||||
|
RANGE_UNDER_600(4, null, BigDecimal.valueOf(600));
|
||||||
|
|
||||||
|
private final int index;
|
||||||
|
private final BigDecimal min;
|
||||||
|
private final BigDecimal max;
|
||||||
|
|
||||||
|
public boolean contains(BigDecimal price) {
|
||||||
|
boolean minCondition = min == null || price.compareTo(min) > 0;
|
||||||
|
boolean maxCondition = max == null || price.compareTo(max) <= 0;
|
||||||
|
return minCondition && maxCondition;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
public static PriceRange fromPrice(BigDecimal price) {
|
||||||
|
return Arrays.stream(values())
|
||||||
|
.filter(range -> range.contains(price))
|
||||||
|
.findFirst()
|
||||||
|
.orElseThrow(() -> new IllegalArgumentException("Invalid price: " + price));
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -2,8 +2,6 @@ package com.xiang.xservice.application.script.fwd.constants;
|
|||||||
|
|
||||||
public class UrlConstants {
|
public class UrlConstants {
|
||||||
|
|
||||||
public static final String token = "Bearer eyJhbGciOiJIUzUxMiJ9.eyJjdCI6MTc1MjYzODAwNTUxNywic3ViIjoiTDIxMTQzMjU2NDEiLCJhdWQiOiJMSVZFTEFCIiwiaXNzIjoiVElDS0VUIiwibWlkIjoxNzU4ODA4NTcxMzgzNjcxNTUzLCJ0eXBlIjoiYXBwbGV0IiwiaWF0IjoxNzUyNjM4MDA1LCJkaWQiOiI2RTRDMDQ5RS00RkFBLTQ0NDMtQjI3NC1DNjRBMjZEMUFGNTkiLCJrZXkiOiJMSVZFTEFCIn0.iw1u3LyCYlxYCI1gMwTeuJlPdv-rQKCVlO2ySF_UrJ-lrEH6fm5lGo4wGalLn1qGkyqZaxuTx1K6X7Oy7sHgBA";
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 芬玩岛的基础URL
|
* 芬玩岛的基础URL
|
||||||
*/
|
*/
|
||||||
|
|||||||
@@ -25,4 +25,6 @@ public class ProjectOrderCreateReq {
|
|||||||
private String blackBox;
|
private String blackBox;
|
||||||
private String combineTicketVos;
|
private String combineTicketVos;
|
||||||
private String ordinaryTicketVos;
|
private String ordinaryTicketVos;
|
||||||
|
private Integer activityType;
|
||||||
|
private String activityId;
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -3,6 +3,7 @@ package com.xiang.xservice.application.script.fwd.schedule;
|
|||||||
import com.alibaba.fastjson.JSON;
|
import com.alibaba.fastjson.JSON;
|
||||||
import com.alibaba.fastjson.JSONObject;
|
import com.alibaba.fastjson.JSONObject;
|
||||||
import com.google.common.collect.Maps;
|
import com.google.common.collect.Maps;
|
||||||
|
import com.xiang.xservice.application.script.fwd.entity.pojo.FUserConfig;
|
||||||
import com.xiang.xservice.basic.utils.DateUtils;
|
import com.xiang.xservice.basic.utils.DateUtils;
|
||||||
import com.xiang.xservice.basic.utils.PrimaryKeyUtils;
|
import com.xiang.xservice.basic.utils.PrimaryKeyUtils;
|
||||||
import com.xiang.xservice.application.script.fwd.entity.param.FwdOrderTaskParam;
|
import com.xiang.xservice.application.script.fwd.entity.param.FwdOrderTaskParam;
|
||||||
@@ -78,7 +79,7 @@ public class FwdImportantMsgJob {
|
|||||||
List<ScheduledTaskEntity> taskList = dynamicTaskSchedulerService.getTaskList(scheduledTaskEntity);
|
List<ScheduledTaskEntity> taskList = dynamicTaskSchedulerService.getTaskList(scheduledTaskEntity);
|
||||||
for (ScheduledTaskEntity taskEntity : taskList) {
|
for (ScheduledTaskEntity taskEntity : taskList) {
|
||||||
HashMap params = com.alibaba.fastjson2.JSON.parseObject(taskEntity.getParameters(), HashMap.class);
|
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());
|
FwdOrderTaskParam param = MapUtils.isEmpty(params) ? new FwdOrderTaskParam(null, taskEntity.getId()) : new FwdOrderTaskParam(Long.parseLong(params.get("projectId").toString()), taskEntity.getId());
|
||||||
LocalDateTime runTime = taskEntity.getRunTime().isBefore(TimeSyncUtils.now()) ? TimeSyncUtils.now() : taskEntity.getRunTime();
|
LocalDateTime runTime = taskEntity.getRunTime().isBefore(TimeSyncUtils.now()) ? TimeSyncUtils.now() : taskEntity.getRunTime();
|
||||||
dynamicTaskScheduler.schedule(
|
dynamicTaskScheduler.schedule(
|
||||||
new TaskConfig(taskEntity.getId(), taskEntity.getTaskName(), taskEntity.getTaskGroup(), runTime, params),
|
new TaskConfig(taskEntity.getId(), taskEntity.getTaskName(), taskEntity.getTaskGroup(), runTime, params),
|
||||||
@@ -139,6 +140,9 @@ public class FwdImportantMsgJob {
|
|||||||
@PostMapping("/presaleSeatReminderJob")
|
@PostMapping("/presaleSeatReminderJob")
|
||||||
public void presaleSeatReminderJob() {
|
public void presaleSeatReminderJob() {
|
||||||
|
|
||||||
|
List<FUserConfig> availableUser = fwdUserConfigMapper.getAvailableUser();
|
||||||
|
String token = availableUser.get(0).getToken();
|
||||||
|
|
||||||
ScheduledTaskEntity entity = new ScheduledTaskEntity();
|
ScheduledTaskEntity entity = new ScheduledTaskEntity();
|
||||||
entity.setStatus(TaskStatusEnum.UN_START.getCode());
|
entity.setStatus(TaskStatusEnum.UN_START.getCode());
|
||||||
List<ScheduledTaskEntity> taskList = dynamicTaskSchedulerService.getTaskList(entity);
|
List<ScheduledTaskEntity> taskList = dynamicTaskSchedulerService.getTaskList(entity);
|
||||||
@@ -162,7 +166,7 @@ public class FwdImportantMsgJob {
|
|||||||
log.error("异常错误信息:{}", JSON.toJSONString(taskEntity), e);
|
log.error("异常错误信息:{}", JSON.toJSONString(taskEntity), e);
|
||||||
}
|
}
|
||||||
if (Objects.nonNull(projectId)) {
|
if (Objects.nonNull(projectId)) {
|
||||||
Perform performsByProjectIdFromHttp = iPerformServiceHttp.getPerformsByProjectIdFromHttp(projectId);
|
Perform performsByProjectIdFromHttp = iPerformServiceHttp.getPerformsByProjectIdFromHttp(projectId, token);
|
||||||
if (Objects.nonNull(performsByProjectIdFromHttp)) {
|
if (Objects.nonNull(performsByProjectIdFromHttp)) {
|
||||||
for (PerformInfo performInfo : performsByProjectIdFromHttp.getPerformInfos()) {
|
for (PerformInfo performInfo : performsByProjectIdFromHttp.getPerformInfos()) {
|
||||||
for (PerformDetail performDetail : performInfo.getPerformInfo()) {
|
for (PerformDetail performDetail : performInfo.getPerformInfo()) {
|
||||||
@@ -171,7 +175,7 @@ public class FwdImportantMsgJob {
|
|||||||
List<SeatPlan> seatPlans = performDetail.getSeatPlans();
|
List<SeatPlan> seatPlans = performDetail.getSeatPlans();
|
||||||
Map<Long, SeatPlan> seatPlanMap = seatPlans.stream().collect(Collectors.toMap(SeatPlan::getSeatPlanId, Function.identity(), (a, b) -> a));
|
Map<Long, SeatPlan> seatPlanMap = seatPlans.stream().collect(Collectors.toMap(SeatPlan::getSeatPlanId, Function.identity(), (a, b) -> a));
|
||||||
List<Long> seatPlanIds = seatPlans.stream().map(SeatPlan::getSeatPlanId).collect(Collectors.toList());
|
List<Long> seatPlanIds = seatPlans.stream().map(SeatPlan::getSeatPlanId).collect(Collectors.toList());
|
||||||
List<SeatPlanStatus> seatPlanStatusFromHttp = iPerformServiceHttp.getSeatPlanStatusFromHttp(seatPlanIds);
|
List<SeatPlanStatus> seatPlanStatusFromHttp = iPerformServiceHttp.getSeatPlanStatusFromHttp(seatPlanIds, token);
|
||||||
for (SeatPlanStatus seatPlanStatus : seatPlanStatusFromHttp) {
|
for (SeatPlanStatus seatPlanStatus : seatPlanStatusFromHttp) {
|
||||||
if (!seatPlanStatus.getSoldOutFlag()) {
|
if (!seatPlanStatus.getSoldOutFlag()) {
|
||||||
FPerformSeatInfo seatInfoBySeatId = iPerformService.getSeatInfoBySeatId(seatPlanStatus.getSeatPlanId());
|
FPerformSeatInfo seatInfoBySeatId = iPerformService.getSeatInfoBySeatId(seatPlanStatus.getSeatPlanId());
|
||||||
|
|||||||
@@ -1,9 +1,6 @@
|
|||||||
package com.xiang.xservice.application.script.fwd.schedule;
|
package com.xiang.xservice.application.script.fwd.schedule;
|
||||||
|
|
||||||
import com.google.common.collect.Lists;
|
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.application.script.fwd.entity.pojo.FAudienceConfig;
|
import com.xiang.xservice.application.script.fwd.entity.pojo.FAudienceConfig;
|
||||||
import com.xiang.xservice.application.script.fwd.entity.pojo.FPerformProjectInfo;
|
import com.xiang.xservice.application.script.fwd.entity.pojo.FPerformProjectInfo;
|
||||||
import com.xiang.xservice.application.script.fwd.entity.pojo.FPerformSeatInfo;
|
import com.xiang.xservice.application.script.fwd.entity.pojo.FPerformSeatInfo;
|
||||||
@@ -23,6 +20,10 @@ import com.xiang.xservice.application.script.fwd.mapper.FwdPerformProjectInfoMap
|
|||||||
import com.xiang.xservice.application.script.fwd.mapper.FwdPerformSeatInfoMapper;
|
import com.xiang.xservice.application.script.fwd.mapper.FwdPerformSeatInfoMapper;
|
||||||
import com.xiang.xservice.application.script.fwd.mapper.FwdUserConfigMapper;
|
import com.xiang.xservice.application.script.fwd.mapper.FwdUserConfigMapper;
|
||||||
import com.xiang.xservice.application.script.fwd.service.IPerformServiceHttp;
|
import com.xiang.xservice.application.script.fwd.service.IPerformServiceHttp;
|
||||||
|
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.basic.utils.RandomCodeUtils;
|
||||||
import com.xiang.xservice.http.helper.HttpRequestHelper;
|
import com.xiang.xservice.http.helper.HttpRequestHelper;
|
||||||
import lombok.RequiredArgsConstructor;
|
import lombok.RequiredArgsConstructor;
|
||||||
import lombok.extern.slf4j.Slf4j;
|
import lombok.extern.slf4j.Slf4j;
|
||||||
@@ -36,7 +37,6 @@ import org.springframework.web.bind.annotation.RestController;
|
|||||||
import java.util.List;
|
import java.util.List;
|
||||||
import java.util.Map;
|
import java.util.Map;
|
||||||
import java.util.Objects;
|
import java.util.Objects;
|
||||||
import java.util.concurrent.CompletableFuture;
|
|
||||||
import java.util.concurrent.ExecutorService;
|
import java.util.concurrent.ExecutorService;
|
||||||
import java.util.concurrent.LinkedBlockingQueue;
|
import java.util.concurrent.LinkedBlockingQueue;
|
||||||
import java.util.concurrent.ThreadPoolExecutor;
|
import java.util.concurrent.ThreadPoolExecutor;
|
||||||
@@ -139,6 +139,8 @@ public class PullDataFromFWDJob {
|
|||||||
@Scheduled(cron = "0 0 1 1/1 * ?")
|
@Scheduled(cron = "0 0 1 1/1 * ?")
|
||||||
public void pullPerformDataJobV2() {
|
public void pullPerformDataJobV2() {
|
||||||
int pageNum = 0;
|
int pageNum = 0;
|
||||||
|
List<FUserConfig> availableUser = userConfigMapper.getAvailableUser();
|
||||||
|
String token = availableUser.get(0).getToken();
|
||||||
while (true) {
|
while (true) {
|
||||||
pageNum++;
|
pageNum++;
|
||||||
BaseRequest baseRequest = new BaseRequest();
|
BaseRequest baseRequest = new BaseRequest();
|
||||||
@@ -149,12 +151,12 @@ public class PullDataFromFWDJob {
|
|||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
List<ProjectList> projects = projectsResp.getList();
|
List<ProjectList> projects = projectsResp.getList();
|
||||||
List<CompletableFuture<FPerformProjectInfo>> futures = Lists.newArrayList();
|
List<FPerformProjectInfo> results = Lists.newArrayList();
|
||||||
for (ProjectList project : projects) {
|
for (ProjectList project : projects) {
|
||||||
CompletableFuture<FPerformProjectInfo> future = CompletableFuture.supplyAsync(() -> handleProjectData(project), es);
|
FPerformProjectInfo performProjectInfo = handleProjectData(project, token);
|
||||||
futures.add(future);
|
results.add(performProjectInfo);
|
||||||
}
|
}
|
||||||
List<FPerformProjectInfo> results = futures.stream().map(CompletableFuture::join).toList();
|
results = results.stream().filter(Objects::nonNull).toList();
|
||||||
// 查询演出座位档次信息
|
// 查询演出座位档次信息
|
||||||
List<FPerformSeatInfo> insertList = Lists.newCopyOnWriteArrayList();
|
List<FPerformSeatInfo> insertList = Lists.newCopyOnWriteArrayList();
|
||||||
List<FPerformSeatInfo> updateList = Lists.newCopyOnWriteArrayList();
|
List<FPerformSeatInfo> updateList = Lists.newCopyOnWriteArrayList();
|
||||||
@@ -164,7 +166,7 @@ public class PullDataFromFWDJob {
|
|||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
List<Long> seatPlanIds = seatPlans.stream().map(SeatPlan::getSeatPlanId).toList();
|
List<Long> seatPlanIds = seatPlans.stream().map(SeatPlan::getSeatPlanId).toList();
|
||||||
List<SeatPlanStatus> seatPlanStatusList = httpRequestHelper.fetchWithRetry(() -> performServiceHttp.getSeatPlanStatusFromHttp(seatPlanIds), "fetch-seat-plan-status");
|
List<SeatPlanStatus> seatPlanStatusList = httpRequestHelper.fetchWithRetry(() -> performServiceHttp.getSeatPlanStatusFromHttp(seatPlanIds, token), "fetch-seat-plan-status");
|
||||||
if (CollectionUtils.isEmpty(seatPlanStatusList)) {
|
if (CollectionUtils.isEmpty(seatPlanStatusList)) {
|
||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
@@ -186,6 +188,7 @@ public class PullDataFromFWDJob {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
stopThread();
|
||||||
}
|
}
|
||||||
if (!CollectionUtils.isEmpty(insertList)) {
|
if (!CollectionUtils.isEmpty(insertList)) {
|
||||||
performSeatInfoMapper.batchSave(insertList);
|
performSeatInfoMapper.batchSave(insertList);
|
||||||
@@ -198,14 +201,14 @@ public class PullDataFromFWDJob {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
private FPerformProjectInfo handleProjectData(ProjectList project) {
|
private FPerformProjectInfo handleProjectData(ProjectList project, String token) {
|
||||||
// 查询演出的详情
|
// 查询演出的详情
|
||||||
ProjectInfoResp projectInfoFromHttp = httpRequestHelper.fetchWithRetry(() -> performServiceHttp.getProjectInfoFromHttp(project.getProjectId()), "fetch-project-info");
|
ProjectInfoResp projectInfoFromHttp = httpRequestHelper.fetchWithRetry(() -> performServiceHttp.getProjectInfoFromHttp(project.getProjectId(), token), "fetch-project-info");
|
||||||
if (Objects.isNull(projectInfoFromHttp)) {
|
if (Objects.isNull(projectInfoFromHttp)) {
|
||||||
return null;
|
return null;
|
||||||
}
|
}
|
||||||
// 查询演出信息
|
// 查询演出信息
|
||||||
Perform performsByProjectIdFromHttp = httpRequestHelper.fetchWithRetry(() -> performServiceHttp.getPerformsByProjectIdFromHttp(project.getProjectId()), "fetch-perform-by-project-id");
|
Perform performsByProjectIdFromHttp = httpRequestHelper.fetchWithRetry(() -> performServiceHttp.getPerformsByProjectIdFromHttp(project.getProjectId(), token), "fetch-perform-by-project-id");
|
||||||
if (Objects.isNull(performsByProjectIdFromHttp)) {
|
if (Objects.isNull(performsByProjectIdFromHttp)) {
|
||||||
return null;
|
return null;
|
||||||
}
|
}
|
||||||
@@ -235,100 +238,17 @@ public class PullDataFromFWDJob {
|
|||||||
|
|
||||||
}
|
}
|
||||||
projectInfo.setSeatPlans(seats);
|
projectInfo.setSeatPlans(seats);
|
||||||
|
stopThread();
|
||||||
return projectInfo;
|
return projectInfo;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
private static void stopThread() {
|
||||||
public void pullPerformDataJob() {
|
try {
|
||||||
int pageNum = 0;
|
String random = RandomCodeUtils.getNumberRandomCode(1);
|
||||||
while (true) {
|
log.info("线程暂停:{}s", random);
|
||||||
pageNum++;
|
Thread.sleep(Long.parseLong(random) * 1000);
|
||||||
BaseRequest baseRequest = new BaseRequest();
|
} catch (InterruptedException e) {
|
||||||
baseRequest.setCurrent(pageNum);
|
log.error("线程暂停1s失败");
|
||||||
baseRequest.setPageSize(50);
|
|
||||||
// 查询所有的演出
|
|
||||||
ProjectsResp projectsResp = httpRequestHelper.fetchWithRetry(() -> performServiceHttp.getShowProjectsFromHttp(baseRequest), "fetch-projects");
|
|
||||||
if (Objects.isNull(projectsResp)) {
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
List<ProjectList> projectLists = projectsResp.getList();
|
|
||||||
if (CollectionUtils.isEmpty(projectLists)) {
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
for (ProjectList projectList : projectLists) {
|
|
||||||
// 查询演出的详情
|
|
||||||
ProjectInfoResp projectInfoFromHttp = httpRequestHelper.fetchWithRetry(() -> performServiceHttp.getProjectInfoFromHttp(projectList.getProjectId()), "fetch-project-info");
|
|
||||||
if (Objects.isNull(projectInfoFromHttp)) {
|
|
||||||
continue;
|
|
||||||
}
|
|
||||||
// 查询演出信息
|
|
||||||
Perform performsByProjectIdFromHttp = httpRequestHelper.fetchWithRetry(() -> performServiceHttp.getPerformsByProjectIdFromHttp(projectList.getProjectId()), "fetch-perform-by-project-id");
|
|
||||||
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<PerformInfo> performInfos = performsByProjectIdFromHttp.getPerformInfos();
|
|
||||||
if (CollectionUtils.isEmpty(performInfos)) {
|
|
||||||
continue;
|
|
||||||
}
|
|
||||||
// 查询演出座位档次信息
|
|
||||||
List<FPerformSeatInfo> insertList = Lists.newCopyOnWriteArrayList();
|
|
||||||
List<FPerformSeatInfo> updateList = Lists.newCopyOnWriteArrayList();
|
|
||||||
for (PerformInfo performInfo : performInfos) {
|
|
||||||
List<PerformDetail> performs = performInfo.getPerformInfo();
|
|
||||||
if (CollectionUtils.isEmpty(performs)) {
|
|
||||||
continue;
|
|
||||||
}
|
|
||||||
for (PerformDetail perform : performs) {
|
|
||||||
if (CollectionUtils.isEmpty(perform.getSeatPlans())) {
|
|
||||||
continue;
|
|
||||||
}
|
|
||||||
List<Long> seatPlanIds = perform.getSeatPlans().stream().map(SeatPlan::getSeatPlanId).collect(Collectors.toList());
|
|
||||||
List<SeatPlanStatus> seatPlanStatusList = httpRequestHelper.fetchWithRetry(() -> performServiceHttp.getSeatPlanStatusFromHttp(seatPlanIds), "fetch-seat-plan-status");
|
|
||||||
if (CollectionUtils.isEmpty(seatPlanStatusList)) {
|
|
||||||
continue;
|
|
||||||
}
|
|
||||||
Map<Long, SeatPlanStatus> map = seatPlanStatusList.stream().collect(Collectors.toMap(SeatPlanStatus::getSeatPlanId, Function.identity(), (a, b) -> a));
|
|
||||||
Map<Long, FPerformSeatInfo> 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.getProjectId(), seatPlan.getSeatPlanId(), value, seatPlan, insertList);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
if (!CollectionUtils.isEmpty(insertList)) {
|
|
||||||
performSeatInfoMapper.batchSave(insertList);
|
|
||||||
}
|
|
||||||
if (!CollectionUtils.isEmpty(updateList)) {
|
|
||||||
for (FPerformSeatInfo seatInfo : updateList) {
|
|
||||||
performSeatInfoMapper.update(seatInfo);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -45,7 +45,7 @@ public class TicketGrabTask implements Runnable {
|
|||||||
for (FUserConfig userConfig : availableUser) {
|
for (FUserConfig userConfig : availableUser) {
|
||||||
List<FAudienceConfig> audiences = audienceConfigMapper.getAudienceByUserId(userConfig.getId());
|
List<FAudienceConfig> audiences = audienceConfigMapper.getAudienceByUserId(userConfig.getId());
|
||||||
try {
|
try {
|
||||||
performService.createProjectOrder(param.getProjectId(), audiences.stream().map(FAudienceConfig::getFrequentId).collect(Collectors.toList()));
|
performService.createProjectOrder(param.getProjectId(), audiences.stream().map(FAudienceConfig::getFrequentId).collect(Collectors.toList()), userConfig.getToken());
|
||||||
dynamicTaskSchedulerService.finishTask(param.getTaskId());
|
dynamicTaskSchedulerService.finishTask(param.getTaskId());
|
||||||
} catch (Exception e) {
|
} catch (Exception e) {
|
||||||
log.error("创建订单失败", e);
|
log.error("创建订单失败", e);
|
||||||
|
|||||||
@@ -1,5 +1,6 @@
|
|||||||
package com.xiang.xservice.application.script.fwd.server;
|
package com.xiang.xservice.application.script.fwd.server;
|
||||||
|
|
||||||
|
import com.xiang.xservice.application.script.fwd.mapper.FwdUserConfigMapper;
|
||||||
import com.xiang.xservice.basic.common.resp.Result;
|
import com.xiang.xservice.basic.common.resp.Result;
|
||||||
import com.xiang.xservice.basic.utils.DateUtils;
|
import com.xiang.xservice.basic.utils.DateUtils;
|
||||||
import com.xiang.xservice.application.script.fwd.entity.pojo.FPerformConfig;
|
import com.xiang.xservice.application.script.fwd.entity.pojo.FPerformConfig;
|
||||||
@@ -27,13 +28,15 @@ public class FwdDataController {
|
|||||||
|
|
||||||
private final IPerformService performService;
|
private final IPerformService performService;
|
||||||
private final IPerformServiceHttp performServiceHttp;
|
private final IPerformServiceHttp performServiceHttp;
|
||||||
|
private final FwdUserConfigMapper userConfigMapper;
|
||||||
|
|
||||||
@PostMapping("/refreshData")
|
@PostMapping("/refreshData")
|
||||||
public Result<String> refreshData() {
|
public Result<String> refreshData() {
|
||||||
|
String token = userConfigMapper.getAvailableUser().get(0).getToken();
|
||||||
List<FPerformConfig> availablePerforms = performService.getAvailablePerform();
|
List<FPerformConfig> availablePerforms = performService.getAvailablePerform();
|
||||||
for (FPerformConfig availablePerform : availablePerforms) {
|
for (FPerformConfig availablePerform : availablePerforms) {
|
||||||
ProjectInfoResp info = performServiceHttp.getProjectInfoFromHttp(availablePerform.getProjectId());
|
ProjectInfoResp info = performServiceHttp.getProjectInfoFromHttp(availablePerform.getProjectId(), token);
|
||||||
Perform performsByProjectIdFromHttp = performServiceHttp.getPerformsByProjectIdFromHttp(availablePerform.getProjectId());
|
Perform performsByProjectIdFromHttp = performServiceHttp.getPerformsByProjectIdFromHttp(availablePerform.getProjectId(), token);
|
||||||
FPerformProjectInfo performByProjectId = performService.getPerformByProjectId(availablePerform.getProjectId());
|
FPerformProjectInfo performByProjectId = performService.getPerformByProjectId(availablePerform.getProjectId());
|
||||||
performByProjectId.setStatus(info.getStatus());
|
performByProjectId.setStatus(info.getStatus());
|
||||||
performByProjectId.setPreSaleTime(DateUtils.getDateTimeFromStr(info.getPreSaleTime()));
|
performByProjectId.setPreSaleTime(DateUtils.getDateTimeFromStr(info.getPreSaleTime()));
|
||||||
@@ -53,7 +56,7 @@ public class FwdDataController {
|
|||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
List<Long> seatIds = seatPlans.stream().map(SeatPlan::getSeatPlanId).collect(Collectors.toList());
|
List<Long> seatIds = seatPlans.stream().map(SeatPlan::getSeatPlanId).collect(Collectors.toList());
|
||||||
List<SeatPlanStatus> seatPlanStatusFromHttp = performServiceHttp.getSeatPlanStatusFromHttp(seatIds);
|
List<SeatPlanStatus> seatPlanStatusFromHttp = performServiceHttp.getSeatPlanStatusFromHttp(seatIds, token);
|
||||||
if (CollectionUtils.isEmpty(seatPlanStatusFromHttp)) {
|
if (CollectionUtils.isEmpty(seatPlanStatusFromHttp)) {
|
||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -1,5 +1,6 @@
|
|||||||
package com.xiang.xservice.application.script.fwd.server;
|
package com.xiang.xservice.application.script.fwd.server;
|
||||||
|
|
||||||
|
import com.xiang.xservice.application.script.fwd.mapper.FwdUserConfigMapper;
|
||||||
import com.xiang.xservice.basic.common.req.BaseRequest;
|
import com.xiang.xservice.basic.common.req.BaseRequest;
|
||||||
import com.xiang.xservice.basic.common.resp.Result;
|
import com.xiang.xservice.basic.common.resp.Result;
|
||||||
import com.xiang.xservice.application.script.fwd.entity.resp.http.perform.Perform;
|
import com.xiang.xservice.application.script.fwd.entity.resp.http.perform.Perform;
|
||||||
@@ -28,6 +29,7 @@ public class FwdOuterController {
|
|||||||
|
|
||||||
private final IPerformServiceHttp performServiceHttp;
|
private final IPerformServiceHttp performServiceHttp;
|
||||||
private final IPerformService performService;
|
private final IPerformService performService;
|
||||||
|
private final FwdUserConfigMapper fwdUserConfigMapper;
|
||||||
private static final List<Long> FREQUENT_IDS = List.of(50438548L, 35320661L, 50436621L, 50442739L);
|
private static final List<Long> FREQUENT_IDS = List.of(50438548L, 35320661L, 50436621L, 50442739L);
|
||||||
|
|
||||||
|
|
||||||
@@ -39,19 +41,22 @@ public class FwdOuterController {
|
|||||||
|
|
||||||
@GetMapping("/getProjectInfo/{id}")
|
@GetMapping("/getProjectInfo/{id}")
|
||||||
public Result<Perform> getProjectInfo(@PathVariable("id") Long id) {
|
public Result<Perform> getProjectInfo(@PathVariable("id") Long id) {
|
||||||
Perform performsByProjectIdFromHttp = performServiceHttp.getPerformsByProjectIdFromHttp(id);
|
String token = fwdUserConfigMapper.getAvailableUser().get(0).getToken();
|
||||||
|
Perform performsByProjectIdFromHttp = performServiceHttp.getPerformsByProjectIdFromHttp(id, token);
|
||||||
return Result.success("查询成功!", performsByProjectIdFromHttp);
|
return Result.success("查询成功!", performsByProjectIdFromHttp);
|
||||||
}
|
}
|
||||||
|
|
||||||
@GetMapping("/getPerformsByProjectIdFromHttp/{id}")
|
@GetMapping("/getPerformsByProjectIdFromHttp/{id}")
|
||||||
public Result<Perform> getPerformsByProjectIdFromHttp(@PathVariable("id") Long id) {
|
public Result<Perform> getPerformsByProjectIdFromHttp(@PathVariable("id") Long id) {
|
||||||
Perform performsByProjectIdFromHttp = performServiceHttp.getPerformsByProjectIdFromHttp(id);
|
String token = fwdUserConfigMapper.getAvailableUser().get(0).getToken();
|
||||||
|
Perform performsByProjectIdFromHttp = performServiceHttp.getPerformsByProjectIdFromHttp(id, token);
|
||||||
return Result.success("查询成功!", performsByProjectIdFromHttp);
|
return Result.success("查询成功!", performsByProjectIdFromHttp);
|
||||||
}
|
}
|
||||||
|
|
||||||
@PostMapping("/createOrder")
|
@PostMapping("/createOrder")
|
||||||
public Result<String> createOrder(Long projectId) throws Exception {
|
public Result<String> createOrder(Long projectId) throws Exception {
|
||||||
if (performService.createProjectOrder(projectId, FREQUENT_IDS)) {
|
String token = fwdUserConfigMapper.getAvailableUser().get(0).getToken();
|
||||||
|
if (performService.createProjectOrder(projectId, FREQUENT_IDS, token)) {
|
||||||
return Result.success("下单成功!");
|
return Result.success("下单成功!");
|
||||||
}
|
}
|
||||||
return Result.error("下单失败!");
|
return Result.error("下单失败!");
|
||||||
@@ -59,7 +64,8 @@ public class FwdOuterController {
|
|||||||
|
|
||||||
@GetMapping("/getSeatPlanStatus")
|
@GetMapping("/getSeatPlanStatus")
|
||||||
public Result<SeatPlanStatus> getSeatPlanStatu (@RequestParam List<Long> ids) {
|
public Result<SeatPlanStatus> getSeatPlanStatu (@RequestParam List<Long> ids) {
|
||||||
List<SeatPlanStatus> seatPlanStatusFromHttp = performServiceHttp.getSeatPlanStatusFromHttp(ids);
|
String token = fwdUserConfigMapper.getAvailableUser().get(0).getToken();
|
||||||
|
List<SeatPlanStatus> seatPlanStatusFromHttp = performServiceHttp.getSeatPlanStatusFromHttp(ids, token);
|
||||||
return Result.success("查询成功!", seatPlanStatusFromHttp);
|
return Result.success("查询成功!", seatPlanStatusFromHttp);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -16,7 +16,7 @@ public interface IPerformService {
|
|||||||
|
|
||||||
List<FPerformSeatInfo> getPerformSeatInfoByProjectId(Long projectId);
|
List<FPerformSeatInfo> getPerformSeatInfoByProjectId(Long projectId);
|
||||||
|
|
||||||
Boolean createProjectOrder(Long projectId, List<Long> frequentIds) throws Exception;
|
Boolean createProjectOrder(Long projectId, List<Long> frequentIds, String token) throws Exception;
|
||||||
|
|
||||||
List<FPerformConfig> getAvailablePerform();
|
List<FPerformConfig> getAvailablePerform();
|
||||||
|
|
||||||
|
|||||||
@@ -24,7 +24,7 @@ public interface IPerformServiceHttp {
|
|||||||
* @param projectId projectId
|
* @param projectId projectId
|
||||||
* @return ProjectInfoResp
|
* @return ProjectInfoResp
|
||||||
*/
|
*/
|
||||||
ProjectInfoResp getProjectInfoFromHttp(Long projectId);
|
ProjectInfoResp getProjectInfoFromHttp(Long projectId, String token);
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* http请求创建演出订单
|
* http请求创建演出订单
|
||||||
@@ -38,14 +38,14 @@ public interface IPerformServiceHttp {
|
|||||||
* @param projectId
|
* @param projectId
|
||||||
* @return
|
* @return
|
||||||
*/
|
*/
|
||||||
Perform getPerformsByProjectIdFromHttp(Long projectId);
|
Perform getPerformsByProjectIdFromHttp(Long projectId, String token);
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* http请求获取座位状态信息
|
* http请求获取座位状态信息
|
||||||
* @param seatPlanIds
|
* @param seatPlanIds
|
||||||
* @return
|
* @return
|
||||||
*/
|
*/
|
||||||
List<SeatPlanStatus> getSeatPlanStatusFromHttp(List<Long> seatPlanIds);
|
List<SeatPlanStatus> getSeatPlanStatusFromHttp(List<Long> seatPlanIds, String token);
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* http请求查询观影人信息
|
* http请求查询观影人信息
|
||||||
|
|||||||
@@ -66,11 +66,11 @@ public class PerformServiceHttpServiceImpl implements IPerformServiceHttp {
|
|||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public ProjectInfoResp getProjectInfoFromHttp(Long projectId) {
|
public ProjectInfoResp getProjectInfoFromHttp(Long projectId, String token) {
|
||||||
Map<String, String> params = Maps.newHashMap();
|
Map<String, String> params = Maps.newHashMap();
|
||||||
params.put("project_id", String.valueOf(projectId));
|
params.put("project_id", String.valueOf(projectId));
|
||||||
params.put("v", String.valueOf(Instant.now().getEpochSecond()));
|
params.put("v", String.valueOf(Instant.now().getEpochSecond()));
|
||||||
String respStr = HttpUtils.doGet(UrlConstants.PROJECTS_INFO_URL, buildFWDHeaders(UrlConstants.token), params);
|
String respStr = HttpUtils.doGet(UrlConstants.PROJECTS_INFO_URL, buildFWDHeaders(token), params);
|
||||||
if (StringUtils.isBlank(respStr)) {
|
if (StringUtils.isBlank(respStr)) {
|
||||||
return null;
|
return null;
|
||||||
}
|
}
|
||||||
@@ -89,7 +89,7 @@ public class PerformServiceHttpServiceImpl implements IPerformServiceHttp {
|
|||||||
|
|
||||||
@Override
|
@Override
|
||||||
public ProjectOrderCreateResp createProjectOrder(ProjectOrderCreateReq req, String token) {
|
public ProjectOrderCreateResp createProjectOrder(ProjectOrderCreateReq req, String token) {
|
||||||
String respStr = HttpUtils.doPost(UrlConstants.PROJECT_ORDER_CREATE_URL, buildFWDHeaders(token), JsonUtils.toJsonString(req));
|
String respStr = HttpUtils.doPost(UrlConstants.PROJECT_ORDER_CREATE_URL, buildFWDOrderHeaders(token), JsonUtils.toJsonString(req));
|
||||||
if (StringUtils.isBlank(respStr)) {
|
if (StringUtils.isBlank(respStr)) {
|
||||||
return null;
|
return null;
|
||||||
}
|
}
|
||||||
@@ -104,19 +104,26 @@ public class PerformServiceHttpServiceImpl implements IPerformServiceHttp {
|
|||||||
return projectOrderCreateResp;
|
return projectOrderCreateResp;
|
||||||
}
|
}
|
||||||
if (Objects.nonNull(code) && Objects.equals(code, CodeConstants.LIMIT)) {
|
if (Objects.nonNull(code) && Objects.equals(code, CodeConstants.LIMIT)) {
|
||||||
Integer waitTime = new Random().nextInt(10);
|
int waitTime = new Random().nextInt(3);
|
||||||
|
if (Objects.equals(waitTime, 0)) {
|
||||||
|
waitTime = 3;
|
||||||
|
}
|
||||||
|
try {
|
||||||
log.info("触发FWD限流机制,等待:{}秒后重新发送。", waitTime);
|
log.info("触发FWD限流机制,等待:{}秒后重新发送。", waitTime);
|
||||||
|
Thread.sleep((long) waitTime * 1000);
|
||||||
|
} catch (InterruptedException e) {
|
||||||
|
log.error("线程暂停失败!");
|
||||||
|
}
|
||||||
return null;
|
return null;
|
||||||
}
|
}
|
||||||
return null;
|
return null;
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public Perform getPerformsByProjectIdFromHttp(Long projectId) {
|
public Perform getPerformsByProjectIdFromHttp(Long projectId, String token) {
|
||||||
Map<String, String> params = Maps.newHashMap();
|
Map<String, String> params = Maps.newHashMap();
|
||||||
params.put("project_id", String.valueOf(projectId));
|
params.put("project_id", String.valueOf(projectId));
|
||||||
params.put("v", String.valueOf(Instant.now().getEpochSecond()));
|
params.put("v", String.valueOf(Instant.now().getEpochSecond()));
|
||||||
String respStr = HttpUtils.doGet(UrlConstants.PERFORMS_URL, buildFWDHeaders(UrlConstants.token), params);
|
String respStr = HttpUtils.doGet(UrlConstants.PERFORMS_URL, buildFWDHeaders(token), params);
|
||||||
if (StringUtils.isBlank(respStr)) {
|
if (StringUtils.isBlank(respStr)) {
|
||||||
return null;
|
return null;
|
||||||
}
|
}
|
||||||
@@ -134,7 +141,7 @@ public class PerformServiceHttpServiceImpl implements IPerformServiceHttp {
|
|||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public List<SeatPlanStatus> getSeatPlanStatusFromHttp(List<Long> seatPlanIds) {
|
public List<SeatPlanStatus> getSeatPlanStatusFromHttp(List<Long> seatPlanIds, String token) {
|
||||||
StringBuilder seatIds = new StringBuilder();
|
StringBuilder seatIds = new StringBuilder();
|
||||||
for (Long seatPlanId : seatPlanIds) {
|
for (Long seatPlanId : seatPlanIds) {
|
||||||
seatIds.append(seatPlanId).append(",");
|
seatIds.append(seatPlanId).append(",");
|
||||||
@@ -142,7 +149,7 @@ public class PerformServiceHttpServiceImpl implements IPerformServiceHttp {
|
|||||||
Map<String, String> params = Maps.newHashMap();
|
Map<String, String> params = Maps.newHashMap();
|
||||||
params.put("seatPlanIds", seatIds.substring(0, seatIds.length() - 2));
|
params.put("seatPlanIds", seatIds.substring(0, seatIds.length() - 2));
|
||||||
params.put("type", "3");
|
params.put("type", "3");
|
||||||
String respStr = HttpUtils.doGet(UrlConstants.PROJECT_SEAT_STATUS_URL, buildFWDHeaders(UrlConstants.token), params);
|
String respStr = HttpUtils.doGet(UrlConstants.PROJECT_SEAT_STATUS_URL, buildFWDHeaders(token), params);
|
||||||
if (StringUtils.isBlank(respStr)) {
|
if (StringUtils.isBlank(respStr)) {
|
||||||
return Lists.newArrayList();
|
return Lists.newArrayList();
|
||||||
}
|
}
|
||||||
@@ -219,6 +226,20 @@ public class PerformServiceHttpServiceImpl implements IPerformServiceHttp {
|
|||||||
|
|
||||||
private Map<String, String> buildFWDOrderHeaders(String token) {
|
private Map<String, String> buildFWDOrderHeaders(String token) {
|
||||||
Map<String, String> headers = Maps.newHashMap();
|
Map<String, String> headers = Maps.newHashMap();
|
||||||
|
headers.put("Host", "api.livelab.com.cn");
|
||||||
|
headers.put("x-fwd-anonymousId", "ocXac5C25MY5O3UM_EfL0oTgm7Jw");
|
||||||
|
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("Authorization", token);
|
||||||
|
headers.put("platform-version", "3.17.1");
|
||||||
|
headers.put("xweb_xhr", "1");
|
||||||
|
headers.put("Content-Type", "application/json");
|
||||||
|
headers.put("User-Agent", "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/132.0.0.0 Safari/537.36 MicroMessenger/7.0.20.1781(0x6700143B) NetType/WIFI MiniProgramEnv/Mac MacWechat/WMPF MacWechat/3.8.7(0x13080712) UnifiedPCMacWechat(0xf2641110) XWEB/16730");
|
||||||
|
headers.put("Accept", "*/*");
|
||||||
|
headers.put("Sec-Fetch-Site", "cross-site");
|
||||||
|
headers.put("Sec-Fetch-Mode", "cors");
|
||||||
|
headers.put("Sec-Fetch-Dest", "empty");
|
||||||
|
headers.put("Referer", "https://servicewechat.com/wx5a8f481d967649eb/123/page-frame.html");
|
||||||
|
headers.put("Accept-Language", "zh-CN,zh;q=0.9");
|
||||||
return headers;
|
return headers;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -1,7 +1,7 @@
|
|||||||
package com.xiang.xservice.application.script.fwd.service.impl;
|
package com.xiang.xservice.application.script.fwd.service.impl;
|
||||||
|
|
||||||
import com.alibaba.fastjson2.JSONObject;
|
import com.alibaba.fastjson.JSONObject;
|
||||||
import com.xiang.xservice.basic.config.MyThreadFactory;
|
import com.xiang.xservice.application.script.fwd.constants.PriceRange;
|
||||||
import com.xiang.xservice.application.script.fwd.entity.pojo.FPerformConfig;
|
import com.xiang.xservice.application.script.fwd.entity.pojo.FPerformConfig;
|
||||||
import com.xiang.xservice.application.script.fwd.entity.pojo.FPerformProjectInfo;
|
import com.xiang.xservice.application.script.fwd.entity.pojo.FPerformProjectInfo;
|
||||||
import com.xiang.xservice.application.script.fwd.entity.pojo.FPerformSeatInfo;
|
import com.xiang.xservice.application.script.fwd.entity.pojo.FPerformSeatInfo;
|
||||||
@@ -15,22 +15,28 @@ import com.xiang.xservice.application.script.fwd.mapper.FwdUserConfigMapper;
|
|||||||
import com.xiang.xservice.application.script.fwd.service.DingTalkScriptFWDService;
|
import com.xiang.xservice.application.script.fwd.service.DingTalkScriptFWDService;
|
||||||
import com.xiang.xservice.application.script.fwd.service.IPerformService;
|
import com.xiang.xservice.application.script.fwd.service.IPerformService;
|
||||||
import com.xiang.xservice.application.script.fwd.service.IPerformServiceHttp;
|
import com.xiang.xservice.application.script.fwd.service.IPerformServiceHttp;
|
||||||
|
import com.xiang.xservice.basic.config.MyThreadFactory;
|
||||||
import com.xiang.xservice.http.helper.HttpRequestHelper;
|
import com.xiang.xservice.http.helper.HttpRequestHelper;
|
||||||
import lombok.RequiredArgsConstructor;
|
import lombok.RequiredArgsConstructor;
|
||||||
import lombok.extern.slf4j.Slf4j;
|
import lombok.extern.slf4j.Slf4j;
|
||||||
import org.apache.commons.collections4.CollectionUtils;
|
import org.apache.commons.collections4.CollectionUtils;
|
||||||
|
import org.apache.logging.log4j.util.Strings;
|
||||||
import org.jetbrains.annotations.NotNull;
|
import org.jetbrains.annotations.NotNull;
|
||||||
import org.springframework.stereotype.Service;
|
import org.springframework.stereotype.Service;
|
||||||
|
|
||||||
import java.math.BigDecimal;
|
import java.math.BigDecimal;
|
||||||
import java.util.ArrayList;
|
import java.util.ArrayList;
|
||||||
import java.util.Collections;
|
import java.util.Collections;
|
||||||
|
import java.util.Comparator;
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
|
import java.util.Map;
|
||||||
import java.util.Objects;
|
import java.util.Objects;
|
||||||
import java.util.concurrent.ExecutorService;
|
import java.util.concurrent.ExecutorService;
|
||||||
import java.util.concurrent.LinkedBlockingQueue;
|
import java.util.concurrent.LinkedBlockingQueue;
|
||||||
import java.util.concurrent.ThreadPoolExecutor;
|
import java.util.concurrent.ThreadPoolExecutor;
|
||||||
import java.util.concurrent.TimeUnit;
|
import java.util.concurrent.TimeUnit;
|
||||||
|
import java.util.concurrent.atomic.AtomicReference;
|
||||||
|
import java.util.stream.Collectors;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @Author: xiang
|
* @Author: xiang
|
||||||
@@ -69,11 +75,7 @@ public class PerformServiceImpl implements IPerformService {
|
|||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public Boolean createProjectOrder(Long projectId, List<Long> frequentIds) throws Exception {
|
public Boolean createProjectOrder(Long projectId, List<Long> frequentIds, String token) throws Exception {
|
||||||
List<FUserConfig> availableUser = fwdUserConfigMapper.getAvailableUser();
|
|
||||||
if (CollectionUtils.isEmpty(availableUser)) {
|
|
||||||
return Boolean.FALSE;
|
|
||||||
}
|
|
||||||
FPerformProjectInfo performByProjectId = getPerformByProjectId(projectId);
|
FPerformProjectInfo performByProjectId = getPerformByProjectId(projectId);
|
||||||
if (Objects.isNull(performByProjectId)) {
|
if (Objects.isNull(performByProjectId)) {
|
||||||
log.info("该projectId:{}暂无演出信息", projectId);
|
log.info("该projectId:{}暂无演出信息", projectId);
|
||||||
@@ -84,16 +86,39 @@ public class PerformServiceImpl implements IPerformService {
|
|||||||
log.info("该projectId:{}暂无座位信息", projectId);
|
log.info("该projectId:{}暂无座位信息", projectId);
|
||||||
return Boolean.FALSE;
|
return Boolean.FALSE;
|
||||||
}
|
}
|
||||||
for (FPerformSeatInfo fPerformSeatInfo : seatInfoByProjectId) {
|
Map<Long, List<FPerformSeatInfo>> performMap = seatInfoByProjectId.stream().filter(item -> 0 == item.getSoldOut()).collect(Collectors.groupingBy(FPerformSeatInfo::getPerformId));
|
||||||
if (1 == fPerformSeatInfo.getSoldOut()) {
|
for (Long performId : performMap.keySet()) {
|
||||||
continue;
|
List<FPerformSeatInfo> fPerformSeatInfos = performMap.get(performId);
|
||||||
}
|
AtomicReference<BigDecimal> atomicPrice = new AtomicReference<>();
|
||||||
ProjectOrderCreateReq projectOrderCreateReq = buildReq(projectId, frequentIds, fPerformSeatInfo);
|
fPerformSeatInfos.stream().map(FPerformSeatInfo::getPrice).max(BigDecimal::compareTo).ifPresent(atomicPrice::set);
|
||||||
for (int i = 1; i <= 10; i++) {
|
BigDecimal price = atomicPrice.get();
|
||||||
ProjectOrderCreateResp projectOrder = httpRequestHelper.fetchWithRetry(() -> performServiceHttp.createProjectOrder(projectOrderCreateReq, availableUser.get(0).getToken()), "create-project-order");
|
// 排序座位
|
||||||
|
/*
|
||||||
|
0: 600-900
|
||||||
|
1: 900-1300
|
||||||
|
2: 1300-1600
|
||||||
|
3: >1600
|
||||||
|
4: <=600
|
||||||
|
*/
|
||||||
|
List<Long> seatIds = fPerformSeatInfos.stream()
|
||||||
|
.collect(Collectors.groupingBy(
|
||||||
|
seat -> PriceRange.fromPrice(seat.getPrice()),
|
||||||
|
Collectors.collectingAndThen(Collectors.toList(), list -> {
|
||||||
|
Collections.shuffle(list);
|
||||||
|
return list;
|
||||||
|
})
|
||||||
|
))
|
||||||
|
.entrySet().stream()
|
||||||
|
.sorted(Comparator.comparing(entry -> entry.getKey().getIndex()))
|
||||||
|
.flatMap(entry -> entry.getValue().stream())
|
||||||
|
.map(FPerformSeatInfo::getSeatPlanId)
|
||||||
|
.collect(Collectors.toList());
|
||||||
|
ProjectOrderCreateReq projectOrderCreateReq = buildReqV2(projectId, frequentIds, seatIds, performId, price);
|
||||||
|
for (int i = 1; i <= 100; i++) {
|
||||||
|
ProjectOrderCreateResp projectOrder = httpRequestHelper.fetchWithRetry(() -> performServiceHttp.createProjectOrder(projectOrderCreateReq, token), "create-project-order");
|
||||||
if (Objects.nonNull(projectOrder)) {
|
if (Objects.nonNull(projectOrder)) {
|
||||||
log.info("下单成功,订单信息:{}", JSONObject.toJSONString(projectOrder));
|
log.info("下单成功,订单信息:{}", JSONObject.toJSONString(projectOrder));
|
||||||
String msg = "【芬玩岛】下单成功✅✅✅,演出名称:" + performByProjectId.getProjectName() + ",请在2分钟内完成付款!";
|
String msg = "【芬玩岛】下单成功✅✅✅,演出名称:" + performByProjectId.getProjectName() + ",请在5分钟内完成付款!订单号:" + projectOrder.getOrderNo();
|
||||||
dingTalkService.sendScriptMsg(msg);
|
dingTalkService.sendScriptMsg(msg);
|
||||||
return Boolean.TRUE;
|
return Boolean.TRUE;
|
||||||
}
|
}
|
||||||
@@ -120,6 +145,30 @@ public class PerformServiceImpl implements IPerformService {
|
|||||||
projectOrderCreateReq.setBlackBox(":0");
|
projectOrderCreateReq.setBlackBox(":0");
|
||||||
projectOrderCreateReq.setCombineTicketVos(null);
|
projectOrderCreateReq.setCombineTicketVos(null);
|
||||||
projectOrderCreateReq.setOrdinaryTicketVos(null);
|
projectOrderCreateReq.setOrdinaryTicketVos(null);
|
||||||
|
projectOrderCreateReq.setActivityId(Strings.EMPTY);
|
||||||
|
projectOrderCreateReq.setActivityType(0);
|
||||||
|
return projectOrderCreateReq;
|
||||||
|
}
|
||||||
|
|
||||||
|
@NotNull
|
||||||
|
private static ProjectOrderCreateReq buildReqV2(Long projectId, List<Long> frequentIds, List<Long> seatPlanIds, Long perfomrId, BigDecimal price) {
|
||||||
|
ProjectOrderCreateReq projectOrderCreateReq = new ProjectOrderCreateReq();
|
||||||
|
projectOrderCreateReq.setDeliveryType(1);
|
||||||
|
projectOrderCreateReq.setContactName("朱吉祥");
|
||||||
|
projectOrderCreateReq.setContactPhone("15858717571");
|
||||||
|
projectOrderCreateReq.setPayment(price.multiply(BigDecimal.valueOf(frequentIds.size())).setScale(2));
|
||||||
|
projectOrderCreateReq.setTotalPrice(price.multiply(BigDecimal.valueOf(frequentIds.size())).setScale(2, BigDecimal.ROUND_HALF_UP));
|
||||||
|
projectOrderCreateReq.setPerformId(perfomrId);
|
||||||
|
projectOrderCreateReq.setProjectId(projectId.toString());
|
||||||
|
projectOrderCreateReq.setPrivilegeCodeList(new ArrayList<>());
|
||||||
|
projectOrderCreateReq.setAudienceCount(frequentIds.size());
|
||||||
|
projectOrderCreateReq.setFrequentIds(frequentIds);
|
||||||
|
projectOrderCreateReq.setSeatPlanIds(seatPlanIds);
|
||||||
|
projectOrderCreateReq.setBlackBox(":0");
|
||||||
|
projectOrderCreateReq.setCombineTicketVos(null);
|
||||||
|
projectOrderCreateReq.setOrdinaryTicketVos(null);
|
||||||
|
projectOrderCreateReq.setActivityId(Strings.EMPTY);
|
||||||
|
projectOrderCreateReq.setActivityType(0);
|
||||||
return projectOrderCreateReq;
|
return projectOrderCreateReq;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -1,13 +1,17 @@
|
|||||||
package com.xiang.xservice.application.script.stock.data.schedule;
|
package com.xiang.xservice.application.script.stock.data.schedule;
|
||||||
|
|
||||||
import com.xiang.xservice.basic.utils.DateUtils;
|
import com.alibaba.fastjson.JSON;
|
||||||
import com.xiang.xservice.cache.service.IRedisService;
|
import com.alibaba.fastjson.JSONObject;
|
||||||
import com.xiang.xservice.application.script.stock.data.common.constants.RedisConstants;
|
import com.xiang.xservice.application.script.stock.data.common.constants.RedisConstants;
|
||||||
import com.xiang.xservice.application.script.stock.data.entity.StockSinaDataRecordDO;
|
import com.xiang.xservice.application.script.stock.data.entity.StockSinaDataRecordDO;
|
||||||
import com.xiang.xservice.application.script.stock.data.service.DingTalkScriptStockService;
|
import com.xiang.xservice.application.script.stock.data.service.DingTalkScriptStockService;
|
||||||
import com.xiang.xservice.application.script.stock.data.service.IStockDataService;
|
import com.xiang.xservice.application.script.stock.data.service.IStockDataService;
|
||||||
import com.xiang.xservice.application.script.stock.gnshyx.entity.StockGnshyxRecordDataDO;
|
import com.xiang.xservice.application.script.stock.gnshyx.entity.StockGnshyxRecordDataDO;
|
||||||
import com.xiang.xservice.application.script.stock.gnshyx.service.ICloudRecordDataService;
|
import com.xiang.xservice.application.script.stock.gnshyx.service.ICloudRecordDataService;
|
||||||
|
import com.xiang.xservice.basic.utils.DateUtils;
|
||||||
|
import com.xiang.xservice.cache.service.IRedisService;
|
||||||
|
import com.xiang.xservice.common.entity.DayResult;
|
||||||
|
import com.xiang.xservice.common.enums.RedisConstant;
|
||||||
import lombok.RequiredArgsConstructor;
|
import lombok.RequiredArgsConstructor;
|
||||||
import lombok.extern.slf4j.Slf4j;
|
import lombok.extern.slf4j.Slf4j;
|
||||||
import org.apache.commons.lang3.StringUtils;
|
import org.apache.commons.lang3.StringUtils;
|
||||||
@@ -15,6 +19,7 @@ import org.springframework.scheduling.annotation.Scheduled;
|
|||||||
import org.springframework.stereotype.Component;
|
import org.springframework.stereotype.Component;
|
||||||
|
|
||||||
import java.time.DayOfWeek;
|
import java.time.DayOfWeek;
|
||||||
|
import java.time.LocalDate;
|
||||||
import java.time.LocalDateTime;
|
import java.time.LocalDateTime;
|
||||||
import java.time.LocalTime;
|
import java.time.LocalTime;
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
@@ -31,10 +36,49 @@ public class DataMsgSendJob {
|
|||||||
private final DingTalkScriptStockService dingTalkScriptStockService;
|
private final DingTalkScriptStockService dingTalkScriptStockService;
|
||||||
private final IRedisService redisService;
|
private final IRedisService redisService;
|
||||||
|
|
||||||
@Scheduled(cron = "0/10 * * * * ?")
|
@Scheduled(cron = "0 27 9 1/1 * ?")
|
||||||
public void stockGetTargetMsgSend() {
|
public void stockDataGetMsgSendJob() {
|
||||||
if (DateUtils.validWeekTime()) return;
|
if (DateUtils.validWeekTime()) return;
|
||||||
|
LocalDate now = LocalDate.now();
|
||||||
|
JSONObject dayResult = (JSONObject) redisService.hGet(RedisConstant.DAY_INFO_PREFIX_KEY + RedisConstant.getDate4Key(), DateUtils.getDateFromDate(now));
|
||||||
|
if (com.xiang.xservice.common.utils.DateUtils.validHoliday(JSON.toJavaObject(dayResult, DayResult.class)))
|
||||||
|
return;
|
||||||
|
|
||||||
|
StringBuffer msg = new StringBuffer();
|
||||||
|
List<StockGnshyxRecordDataDO> list = cloudRecordDataService.getList();
|
||||||
|
list.parallelStream().forEach(item -> {
|
||||||
|
String stockCode = item.getStockCode();
|
||||||
|
String[] values = stockCode.split("\\.");
|
||||||
|
String c1 = values[1].toLowerCase();
|
||||||
|
String c2 = values[0];
|
||||||
|
String code = c1 + c2;
|
||||||
|
|
||||||
|
String resp = stockDataService.getStockDataFromHttp(code);
|
||||||
|
|
||||||
|
StockSinaDataRecordDO recordDO = stockDataService.buildRecordDO(resp);
|
||||||
|
if (Objects.nonNull(recordDO)) {
|
||||||
|
|
||||||
|
if (recordDO.getXjPrice().compareTo(item.getAttentionPrice()) > 0) {
|
||||||
|
msg.append("股票代码:").append(item.getStockCode()).append(",名称:").append(item.getStockName())
|
||||||
|
.append(",现在价格:").append(recordDO.getXjPrice()).append(",目标价格:").append(item.getAttentionPrice()).append("\n");
|
||||||
|
}
|
||||||
|
if (recordDO.getXjPrice().compareTo(item.getStopPrice()) < 0) {
|
||||||
|
msg.append("股票代码:").append(item.getStockCode()).append(",名称:").append(item.getStockName())
|
||||||
|
.append(",现在价格:").append(recordDO.getXjPrice()).append(",止损价格:").append(item.getStopPrice()).append("\n");
|
||||||
|
}
|
||||||
|
}
|
||||||
|
});
|
||||||
|
if (StringUtils.isNotBlank(msg)) {
|
||||||
|
dingTalkScriptStockService.sendScriptMsg(msg.toString());
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
@Scheduled(cron = "0/10 * * * * ?")
|
||||||
|
public void stockGetTargetMsgSendJob() {
|
||||||
|
if (DateUtils.validWeekTime()) return;
|
||||||
|
LocalDate now = LocalDate.now();
|
||||||
|
JSONObject dayResult = (JSONObject) redisService.hGet(RedisConstant.DAY_INFO_PREFIX_KEY + RedisConstant.getDate4Key(), DateUtils.getDateFromDate(now));
|
||||||
|
if (com.xiang.xservice.common.utils.DateUtils.validHoliday(JSON.toJavaObject(dayResult, DayResult.class))) return;
|
||||||
StringBuilder msg = new StringBuilder();
|
StringBuilder msg = new StringBuilder();
|
||||||
List<StockGnshyxRecordDataDO> list = cloudRecordDataService.getList();
|
List<StockGnshyxRecordDataDO> list = cloudRecordDataService.getList();
|
||||||
for (StockGnshyxRecordDataDO stockGnshyxRecordDataDO : list) {
|
for (StockGnshyxRecordDataDO stockGnshyxRecordDataDO : list) {
|
||||||
|
|||||||
@@ -1,6 +1,7 @@
|
|||||||
package com.xiang.xservice.application.script.stock.data.schedule;
|
package com.xiang.xservice.application.script.stock.data.schedule;
|
||||||
|
|
||||||
import com.alibaba.fastjson.JSON;
|
import com.alibaba.fastjson.JSON;
|
||||||
|
import com.alibaba.fastjson.JSONObject;
|
||||||
import com.google.common.collect.Lists;
|
import com.google.common.collect.Lists;
|
||||||
import com.xiang.xservice.basic.utils.DateUtils;
|
import com.xiang.xservice.basic.utils.DateUtils;
|
||||||
import com.xiang.xservice.cache.service.IRedisService;
|
import com.xiang.xservice.cache.service.IRedisService;
|
||||||
@@ -34,8 +35,8 @@ public class StockDataPullJob {
|
|||||||
public void sinaDataPullJob() {
|
public void sinaDataPullJob() {
|
||||||
if (DateUtils.validWeekTime()) return;
|
if (DateUtils.validWeekTime()) return;
|
||||||
LocalDate now = LocalDate.now();
|
LocalDate now = LocalDate.now();
|
||||||
String dayResult = (String) redisService.hGet(RedisConstant.DAY_INFO_PREFIX_KEY, DateUtils.getDateFromDate(now));
|
JSONObject dayResult = (JSONObject) redisService.hGet(RedisConstant.DAY_INFO_PREFIX_KEY + RedisConstant.getDate4Key(), DateUtils.getDateFromDate(now));
|
||||||
if (com.xiang.xservice.common.utils.DateUtils.validHoliday(JSON.parseObject(dayResult, DayResult.class))) return;
|
if (com.xiang.xservice.common.utils.DateUtils.validHoliday(JSON.toJavaObject(dayResult, DayResult.class))) return;
|
||||||
log.info(">>>>>>>>>>>>>>>>>新浪财经数据拉取开始>>>>>>>>>>>>>>>>>");
|
log.info(">>>>>>>>>>>>>>>>>新浪财经数据拉取开始>>>>>>>>>>>>>>>>>");
|
||||||
List<StockGnshyxRecordDataDO> dataList = cloudRecordDataService.getList();
|
List<StockGnshyxRecordDataDO> dataList = cloudRecordDataService.getList();
|
||||||
List<StockSinaDataRecordDO> result = Lists.newArrayList();
|
List<StockSinaDataRecordDO> result = Lists.newArrayList();
|
||||||
|
|||||||
@@ -75,8 +75,8 @@ public class FundInfoQueryJob {
|
|||||||
// 周六周日过滤
|
// 周六周日过滤
|
||||||
if (DateUtils.validWeekTime()) return;
|
if (DateUtils.validWeekTime()) return;
|
||||||
LocalDate now = LocalDate.now();
|
LocalDate now = LocalDate.now();
|
||||||
String dayResult = (String) redisService.hGet(RedisConstant.DAY_INFO_PREFIX_KEY, DateUtils.getDateFromDate(now));
|
com.alibaba.fastjson.JSONObject dayResult = (com.alibaba.fastjson.JSONObject) redisService.hGet(RedisConstant.DAY_INFO_PREFIX_KEY + RedisConstant.getDate4Key(), DateUtils.getDateFromDate(now));
|
||||||
if (com.xiang.xservice.common.utils.DateUtils.validHoliday(JSON.parseObject(dayResult, DayResult.class))) return;
|
if (com.xiang.xservice.common.utils.DateUtils.validHoliday(JSON.toJavaObject(dayResult, DayResult.class))) return;
|
||||||
|
|
||||||
List<com.xiang.xservice.application.script.xb.entity.pojo.xb.FundInfo> fundInfos = xbFundMapper.queryListIn2Min();
|
List<com.xiang.xservice.application.script.xb.entity.pojo.xb.FundInfo> fundInfos = xbFundMapper.queryListIn2Min();
|
||||||
if (CollectionUtils.isEmpty(fundInfos)) {
|
if (CollectionUtils.isEmpty(fundInfos)) {
|
||||||
|
|||||||
@@ -0,0 +1,36 @@
|
|||||||
|
package com.xiang.xservice.config;
|
||||||
|
|
||||||
|
import org.apache.log4j.MDC;
|
||||||
|
import org.springframework.stereotype.Component;
|
||||||
|
|
||||||
|
import javax.servlet.Filter;
|
||||||
|
import javax.servlet.FilterChain;
|
||||||
|
import javax.servlet.ServletException;
|
||||||
|
import javax.servlet.ServletRequest;
|
||||||
|
import javax.servlet.ServletResponse;
|
||||||
|
import javax.servlet.http.HttpServletRequest;
|
||||||
|
import java.io.IOException;
|
||||||
|
import java.util.UUID;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @Author: xiang
|
||||||
|
* @Date: 2025-11-12 17:03
|
||||||
|
*/
|
||||||
|
@Component
|
||||||
|
public class TraceIdFilter implements Filter {
|
||||||
|
@Override
|
||||||
|
public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain) throws IOException, ServletException {
|
||||||
|
try {
|
||||||
|
// 从请求头中获取 traceId,如果没有则新建一个
|
||||||
|
String traceId = ((HttpServletRequest) request).getHeader("traceId");
|
||||||
|
if (traceId == null || traceId.isEmpty()) {
|
||||||
|
traceId = UUID.randomUUID().toString().replace("-", "");
|
||||||
|
}
|
||||||
|
|
||||||
|
MDC.put("traceId", traceId);
|
||||||
|
chain.doFilter(request, response);
|
||||||
|
} finally {
|
||||||
|
MDC.remove("traceId");
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -17,7 +17,7 @@
|
|||||||
<!--设置输出格式-->
|
<!--设置输出格式-->
|
||||||
<encoder class="ch.qos.logback.classic.encoder.PatternLayoutEncoder">
|
<encoder class="ch.qos.logback.classic.encoder.PatternLayoutEncoder">
|
||||||
<!--格式化输出:%d表示日期,%thread表示线程名,%-5level:级别从左显示5个字符宽度%msg:日志消息,%n是换行符-->
|
<!--格式化输出:%d表示日期,%thread表示线程名,%-5level:级别从左显示5个字符宽度%msg:日志消息,%n是换行符-->
|
||||||
<pattern>%boldGreen(%contextName): %boldCyan(%d{yyyy-MM-dd HH:mm:ss:SSS}) %highlight([%c]) %boldMagenta([%t]) %boldCyan([%L]) %highlight([traceId:%X{traceId:-},spanId:%X{spanId:-},localIp:%X{localIp:-}]) %boldGreen([%p]) - %msg%n
|
<pattern>%boldGreen(%contextName): %boldCyan(%d{yyyy-MM-dd HH:mm:ss:SSS}) %highlight([%c]) %boldMagenta([%t]) %boldCyan([%L]) %highlight([traceId:%X{traceId:-})] %boldGreen([%p]) - %msg%n
|
||||||
</pattern>
|
</pattern>
|
||||||
<!--设置编码-->
|
<!--设置编码-->
|
||||||
<charset>UTF-8</charset>
|
<charset>UTF-8</charset>
|
||||||
@@ -34,7 +34,7 @@
|
|||||||
</rollingPolicy>
|
</rollingPolicy>
|
||||||
<encoder class="ch.qos.logback.classic.encoder.PatternLayoutEncoder">
|
<encoder class="ch.qos.logback.classic.encoder.PatternLayoutEncoder">
|
||||||
<!--格式化输出:%d表示日期,%c类名,%t表示线程名,%L行, %p日志级别 %msg:日志消息,%n是换行符 -->
|
<!--格式化输出:%d表示日期,%c类名,%t表示线程名,%L行, %p日志级别 %msg:日志消息,%n是换行符 -->
|
||||||
<pattern>%contextName: %d{yyyy-MM-dd HH:mm:ss.SSS} [%c][%t][%L][%p] [traceId:%X{traceId:-},spanId:%X{spanId:-},localIp:%X{localIp:-}] - %msg%n</pattern>
|
<pattern>%contextName: %d{yyyy-MM-dd HH:mm:ss.SSS} [%c][%t][%L][%p] [traceId:%X{traceId:-}] - %msg%n</pattern>
|
||||||
<charset>UTF-8</charset>
|
<charset>UTF-8</charset>
|
||||||
</encoder>
|
</encoder>
|
||||||
<!-- 此日志文件只记录debug级别的 -->
|
<!-- 此日志文件只记录debug级别的 -->
|
||||||
@@ -55,7 +55,7 @@
|
|||||||
</rollingPolicy>
|
</rollingPolicy>
|
||||||
<encoder class="ch.qos.logback.classic.encoder.PatternLayoutEncoder">
|
<encoder class="ch.qos.logback.classic.encoder.PatternLayoutEncoder">
|
||||||
<!--格式化输出:%d表示日期,%c类名,%t表示线程名,%L行, %p日志级别 %msg:日志消息,%n是换行符 -->
|
<!--格式化输出:%d表示日期,%c类名,%t表示线程名,%L行, %p日志级别 %msg:日志消息,%n是换行符 -->
|
||||||
<pattern>%contextName: %d{yyyy-MM-dd HH:mm:ss.SSS} [%c][%t][%L][%p] [traceId:%X{traceId:-},spanId:%X{spanId:-},localIp:%X{localIp:-}] - %msg%n</pattern>
|
<pattern>%contextName: %d{yyyy-MM-dd HH:mm:ss.SSS} [%c][%t][%L][%p] [traceId:%X{traceId:-}] - %msg%n</pattern>
|
||||||
<charset>UTF-8</charset>
|
<charset>UTF-8</charset>
|
||||||
</encoder>
|
</encoder>
|
||||||
|
|
||||||
@@ -77,7 +77,7 @@
|
|||||||
</rollingPolicy>
|
</rollingPolicy>
|
||||||
<encoder class="ch.qos.logback.classic.encoder.PatternLayoutEncoder">
|
<encoder class="ch.qos.logback.classic.encoder.PatternLayoutEncoder">
|
||||||
<!--格式化输出:%d表示日期,%c类名,%t表示线程名,%L行, %p日志级别 %msg:日志消息,%n是换行符 -->
|
<!--格式化输出:%d表示日期,%c类名,%t表示线程名,%L行, %p日志级别 %msg:日志消息,%n是换行符 -->
|
||||||
<pattern>%contextName: %d{yyyy-MM-dd HH:mm:ss.SSS} [%c][%t][%L][%p] [traceId:%X{traceId:-},spanId:%X{spanId:-},localIp:%X{localIp:-}] - %msg%n</pattern>
|
<pattern>%contextName: %d{yyyy-MM-dd HH:mm:ss.SSS} [%c][%t][%L][%p] [traceId:%X{traceId:-}] - %msg%n</pattern>
|
||||||
<charset>UTF-8</charset>
|
<charset>UTF-8</charset>
|
||||||
</encoder>
|
</encoder>
|
||||||
<!-- 此日志文件只记录error级别的 -->
|
<!-- 此日志文件只记录error级别的 -->
|
||||||
|
|||||||
@@ -1,7 +1,7 @@
|
|||||||
<?xml version="1.0" encoding="UTF-8"?>
|
<?xml version="1.0" encoding="UTF-8"?>
|
||||||
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
|
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
|
||||||
"http://mybatis.org/dtd/mybatis-3-mapper.dtd">
|
"http://mybatis.org/dtd/mybatis-3-mapper.dtd">
|
||||||
<mapper namespace="com.xiang.xservice.fwd.mapper.FwdAudienceConfigMapper">
|
<mapper namespace="com.xiang.xservice.application.script.fwd.mapper.FwdAudienceConfigMapper">
|
||||||
|
|
||||||
<resultMap id="BaseResultMap" type="com.xiang.xservice.application.script.fwd.entity.pojo.FAudienceConfig">
|
<resultMap id="BaseResultMap" type="com.xiang.xservice.application.script.fwd.entity.pojo.FAudienceConfig">
|
||||||
<result column="id" property="id"/>
|
<result column="id" property="id"/>
|
||||||
|
|||||||
@@ -1,7 +1,7 @@
|
|||||||
<?xml version="1.0" encoding="UTF-8"?>
|
<?xml version="1.0" encoding="UTF-8"?>
|
||||||
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
|
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
|
||||||
"http://mybatis.org/dtd/mybatis-3-mapper.dtd">
|
"http://mybatis.org/dtd/mybatis-3-mapper.dtd">
|
||||||
<mapper namespace="com.xiang.xservice.fwd.mapper.FwdPerformConfigMapper">
|
<mapper namespace="com.xiang.xservice.application.script.fwd.mapper.FwdPerformConfigMapper">
|
||||||
|
|
||||||
<resultMap id="BaseResultMap" type="com.xiang.xservice.application.script.fwd.entity.pojo.FPerformConfig" >
|
<resultMap id="BaseResultMap" type="com.xiang.xservice.application.script.fwd.entity.pojo.FPerformConfig" >
|
||||||
<result column="id" property="id"/>
|
<result column="id" property="id"/>
|
||||||
|
|||||||
@@ -1,7 +1,7 @@
|
|||||||
<?xml version="1.0" encoding="UTF-8"?>
|
<?xml version="1.0" encoding="UTF-8"?>
|
||||||
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
|
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
|
||||||
"http://mybatis.org/dtd/mybatis-3-mapper.dtd">
|
"http://mybatis.org/dtd/mybatis-3-mapper.dtd">
|
||||||
<mapper namespace="com.xiang.xservice.fwd.mapper.FwdPerformProjectInfoMapper">
|
<mapper namespace="com.xiang.xservice.application.script.fwd.mapper.FwdPerformProjectInfoMapper">
|
||||||
|
|
||||||
<resultMap id="BaseResultMap" type="com.xiang.xservice.application.script.fwd.entity.pojo.FPerformProjectInfo" >
|
<resultMap id="BaseResultMap" type="com.xiang.xservice.application.script.fwd.entity.pojo.FPerformProjectInfo" >
|
||||||
<result column="id" property="id"/>
|
<result column="id" property="id"/>
|
||||||
|
|||||||
@@ -1,7 +1,7 @@
|
|||||||
<?xml version="1.0" encoding="UTF-8"?>
|
<?xml version="1.0" encoding="UTF-8"?>
|
||||||
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
|
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
|
||||||
"http://mybatis.org/dtd/mybatis-3-mapper.dtd">
|
"http://mybatis.org/dtd/mybatis-3-mapper.dtd">
|
||||||
<mapper namespace="com.xiang.xservice.fwd.mapper.FwdPerformSeatInfoMapper">
|
<mapper namespace="com.xiang.xservice.application.script.fwd.mapper.FwdPerformSeatInfoMapper">
|
||||||
|
|
||||||
<resultMap id="BaseResultMap" type="com.xiang.xservice.application.script.fwd.entity.pojo.FPerformSeatInfo" >
|
<resultMap id="BaseResultMap" type="com.xiang.xservice.application.script.fwd.entity.pojo.FPerformSeatInfo" >
|
||||||
<result column="id" property="id"/>
|
<result column="id" property="id"/>
|
||||||
|
|||||||
@@ -1,7 +1,7 @@
|
|||||||
<?xml version="1.0" encoding="UTF-8"?>
|
<?xml version="1.0" encoding="UTF-8"?>
|
||||||
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
|
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
|
||||||
"http://mybatis.org/dtd/mybatis-3-mapper.dtd">
|
"http://mybatis.org/dtd/mybatis-3-mapper.dtd">
|
||||||
<mapper namespace="com.xiang.xservice.fwd.mapper.FwdUserConfigMapper">
|
<mapper namespace="com.xiang.xservice.application.script.fwd.mapper.FwdUserConfigMapper">
|
||||||
|
|
||||||
<resultMap id="BaseResultMap" type="com.xiang.xservice.application.script.fwd.entity.pojo.FUserConfig" >
|
<resultMap id="BaseResultMap" type="com.xiang.xservice.application.script.fwd.entity.pojo.FUserConfig" >
|
||||||
<result column="id" property="id"/>
|
<result column="id" property="id"/>
|
||||||
|
|||||||
@@ -1,7 +1,7 @@
|
|||||||
<?xml version="1.0" encoding="UTF-8"?>
|
<?xml version="1.0" encoding="UTF-8"?>
|
||||||
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
|
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
|
||||||
"http://mybatis.org/dtd/mybatis-3-mapper.dtd">
|
"http://mybatis.org/dtd/mybatis-3-mapper.dtd">
|
||||||
<mapper namespace="com.xiang.xservice.glados.repository.GladosMapper">
|
<mapper namespace="com.xiang.xservice.application.script.glados.repository.GladosMapper">
|
||||||
|
|
||||||
<resultMap id="BaseResultMap" type="com.xiang.xservice.application.script.xb.entity.pojo.User" >
|
<resultMap id="BaseResultMap" type="com.xiang.xservice.application.script.xb.entity.pojo.User" >
|
||||||
<result column="id" property="id"/>
|
<result column="id" property="id"/>
|
||||||
|
|||||||
@@ -1,7 +1,7 @@
|
|||||||
<?xml version="1.0" encoding="UTF-8"?>
|
<?xml version="1.0" encoding="UTF-8"?>
|
||||||
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
|
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
|
||||||
"http://mybatis.org/dtd/mybatis-3-mapper.dtd">
|
"http://mybatis.org/dtd/mybatis-3-mapper.dtd">
|
||||||
<mapper namespace="com.xiang.xservice.stock.gnshyx.mapper.StockGnshyxRecordDataMapper">
|
<mapper namespace="com.xiang.xservice.application.script.stock.gnshyx.mapper.StockGnshyxRecordDataMapper">
|
||||||
|
|
||||||
<resultMap id="BaseResultMap" type="com.xiang.xservice.application.script.stock.gnshyx.entity.StockGnshyxRecordDataDO" >
|
<resultMap id="BaseResultMap" type="com.xiang.xservice.application.script.stock.gnshyx.entity.StockGnshyxRecordDataDO" >
|
||||||
<result column="id" property="id" />
|
<result column="id" property="id" />
|
||||||
|
|||||||
@@ -1,7 +1,7 @@
|
|||||||
<?xml version="1.0" encoding="UTF-8"?>
|
<?xml version="1.0" encoding="UTF-8"?>
|
||||||
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
|
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
|
||||||
"http://mybatis.org/dtd/mybatis-3-mapper.dtd">
|
"http://mybatis.org/dtd/mybatis-3-mapper.dtd">
|
||||||
<mapper namespace="com.xiang.xservice.stock.data.mapper.StockSinaDataRecordPullMapper">
|
<mapper namespace="com.xiang.xservice.application.script.stock.data.mapper.StockSinaDataRecordPullMapper">
|
||||||
|
|
||||||
<resultMap id="BaseResultMap" type="com.xiang.xservice.application.script.stock.data.entity.StockSinaDataRecordDO" >
|
<resultMap id="BaseResultMap" type="com.xiang.xservice.application.script.stock.data.entity.StockSinaDataRecordDO" >
|
||||||
<result column="id" property="id" />
|
<result column="id" property="id" />
|
||||||
|
|||||||
@@ -1,7 +1,7 @@
|
|||||||
<?xml version="1.0" encoding="UTF-8"?>
|
<?xml version="1.0" encoding="UTF-8"?>
|
||||||
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
|
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
|
||||||
"http://mybatis.org/dtd/mybatis-3-mapper.dtd">
|
"http://mybatis.org/dtd/mybatis-3-mapper.dtd">
|
||||||
<mapper namespace="com.xiang.xservice.xb.repository.XBFundMapper">
|
<mapper namespace="com.xiang.xservice.application.script.xb.repository.XBFundMapper">
|
||||||
|
|
||||||
<resultMap id="BaseResultMap" type="com.xiang.xservice.application.script.xb.entity.pojo.xb.FundInfo" >
|
<resultMap id="BaseResultMap" type="com.xiang.xservice.application.script.xb.entity.pojo.xb.FundInfo" >
|
||||||
<result column="id" property="id"/>
|
<result column="id" property="id"/>
|
||||||
|
|||||||
Reference in New Issue
Block a user