139 lines
4.8 KiB
Java
139 lines
4.8 KiB
Java
package com.ruoyi.web.task;
|
|
|
|
import com.fasterxml.jackson.databind.ObjectMapper;
|
|
import com.ruoyi.quartz.domain.SysJob;
|
|
import com.ruoyi.quartz.service.ISysJobService;
|
|
import com.ruoyi.system.domain.Apply;
|
|
import com.ruoyi.system.domain.Perform;
|
|
import com.ruoyi.system.mapper.ApplyMapper;
|
|
import com.ruoyi.system.mapper.PerformMapper;
|
|
import org.slf4j.Logger;
|
|
import org.slf4j.LoggerFactory;
|
|
import org.springframework.beans.factory.annotation.Autowired;
|
|
import org.springframework.stereotype.Component;
|
|
|
|
import java.net.URI;
|
|
import java.net.http.HttpClient;
|
|
import java.net.http.HttpRequest;
|
|
import java.net.http.HttpResponse;
|
|
import java.util.*;
|
|
import java.util.concurrent.CompletableFuture;
|
|
|
|
/**
|
|
* 定时任务调度测试
|
|
*
|
|
* @author ruoyi
|
|
*/
|
|
@Component("ryTask")
|
|
public class RyTask {
|
|
@Autowired
|
|
private ISysJobService jobService;
|
|
@Autowired
|
|
private PerformMapper performMapper;
|
|
@Autowired
|
|
private ApplyMapper applyMapper;
|
|
|
|
private static final Logger log = LoggerFactory.getLogger(RyTask.class);
|
|
|
|
/**
|
|
* 抢票
|
|
*
|
|
* @param pid
|
|
*/
|
|
public void rob(Long pid, Long jobId) throws Exception {
|
|
//status
|
|
Perform pStatus1 = new Perform();
|
|
pStatus1.setStatus("2");
|
|
pStatus1.setId(pid);
|
|
performMapper.updatePerform(pStatus1);
|
|
|
|
//执行完成停止任务
|
|
SysJob job = new SysJob();
|
|
job.setJobId(jobId);
|
|
job.setStatus("1");
|
|
jobService.changeStatus(job);
|
|
|
|
//演出
|
|
Perform perform = performMapper.selectPerformById(pid);
|
|
|
|
if (perform == null) {
|
|
throw new Exception("未找到演出");
|
|
}
|
|
|
|
//URL
|
|
String url = String.format("https://faneventapi.weverse.io/api/v1/events/%s/register", perform.getNum());
|
|
|
|
//人员
|
|
Apply apply = new Apply();
|
|
apply.setPerformId(pid);
|
|
List<Apply> applies = applyMapper.selectApplyListAllow(apply);
|
|
|
|
if (applies == null || applies.isEmpty()) {
|
|
throw new Exception("没有参与人员");
|
|
}
|
|
|
|
if (perform.getAgree() == null || "".equals(perform.getAgree())) {
|
|
throw new Exception("协议为空");
|
|
}
|
|
//协议
|
|
String[] agree = perform.getAgree().split(",");
|
|
int[] agrees = Arrays.stream(agree).mapToInt(Integer::parseInt).toArray();
|
|
|
|
|
|
List<MyReq> req = new ArrayList<>();
|
|
for (Apply a : applies) {
|
|
// 准备JSON负载
|
|
Map<String, Object> eventData = new HashMap<>();
|
|
eventData.put("eventId", Integer.parseInt(perform.getNum()));
|
|
eventData.put("language", "zh-cn");
|
|
Map<String, Object> data = new HashMap<>();
|
|
data.put("birthDate", a.getBirthday());
|
|
data.put("phoneNumber", a.getCountryCode() + " " + a.getPhoneNum());
|
|
|
|
data.put("agreedTermIds", agrees);
|
|
eventData.put("data", data);
|
|
|
|
ObjectMapper mapper = new ObjectMapper();
|
|
String jsonPayload = mapper.writeValueAsString(eventData);
|
|
System.out.println(jsonPayload);
|
|
HttpClient client = HttpClient.newHttpClient();
|
|
HttpRequest request = HttpRequest.newBuilder()
|
|
.uri(URI.create(url))
|
|
.header("Content-Type", "application/json")
|
|
.header("Authorization", "Bearer " + a.getToken())
|
|
.header("User-Agent", "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/91.0.4472.124 Safari/537.36")
|
|
.POST(HttpRequest.BodyPublishers.ofString(jsonPayload))
|
|
.build();
|
|
req.add(new MyReq(client, request, a.getName()));
|
|
}
|
|
|
|
Calendar calendar = Calendar.getInstance();
|
|
calendar.setTime(perform.getStartTime());
|
|
calendar.add(Calendar.HOUR_OF_DAY, -1);
|
|
long start = calendar.getTimeInMillis();
|
|
long now = System.currentTimeMillis();
|
|
Thread.sleep(start - now);
|
|
log.info("抢票开始了");
|
|
for (MyReq r : req) {
|
|
log.info("【用户】:"+r.getUser());
|
|
// 发起异步请求,但不等待结果
|
|
CompletableFuture<HttpResponse<String>> future2 = r.getClient().sendAsync(r.getRequest(), HttpResponse.BodyHandlers.ofString());
|
|
future2.thenAccept(response -> {
|
|
// 处理响应(例如,记录日志)
|
|
System.out.println("Response received: " + response.statusCode());
|
|
System.out.println(response.body());
|
|
}).exceptionally(ex -> {
|
|
// 处理异常
|
|
ex.printStackTrace();
|
|
return null;
|
|
});
|
|
}
|
|
|
|
//status
|
|
Perform pStatus2 = new Perform();
|
|
pStatus2.setStatus("3");
|
|
pStatus2.setId(pid);
|
|
performMapper.updatePerform(pStatus2);
|
|
}
|
|
}
|