You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

131 lines
4.1 KiB

package com.yingji.quartz;
import cn.hutool.core.collection.CollUtil;
import cn.hutool.core.util.StrUtil;
import com.yingji.entity.Alarm;
import com.yingji.entity.dto.request.AlarmRequest;
import com.yingji.service.AlarmService;
import com.yingji.service.SourceService;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.context.annotation.Configuration;
import org.springframework.scheduling.annotation.Async;
import org.springframework.scheduling.annotation.Scheduled;
import javax.annotation.Resource;
import java.time.LocalDateTime;
import java.time.format.DateTimeFormatter;
import java.util.ArrayList;
import java.util.List;
import java.util.Random;
/**
* 110
*
* @author wu
* @since 2024/05/06 10:18
*/
@Configuration
public class AlarmQuartz {
public static final Logger log = LoggerFactory.getLogger(AlarmQuartz.class);
@Resource
private AlarmService alarmService;
@Resource
private SourceService sourceService;
/**
*
*/
@Async
@Scheduled(cron = "0 */1 * * * ? ")
public void savaData() {
// 获取token
String token = alarmService.getToken();
// 查询所有id
List<String> idList = findId(token);
// 查询数据条件
AlarmRequest alarmRequest = new AlarmRequest();
alarmRequest.setType("getValue");
alarmRequest.setPageIndex(1);
alarmRequest.setPageSize(10);
// 定义成功条数
int successNum = 0;
// 定义保存数据的集合
List<Alarm> list = new ArrayList<>();
if (CollUtil.isNotEmpty(idList)) {
try {
for (String x : idList) {
alarmRequest.setValue(x);
Alarm alarm = alarmService.findDataList(alarmRequest, token);
if (alarm != null) {
alarm.setSourceId(x);
list.add(alarm);
successNum++;
// 生成100到200的随机数
Random random = new Random();
int randomNumber = random.nextInt(101) + 100;
Thread.sleep(randomNumber);
} else {
return;
}
}
} catch (Exception e) {
log.info("==========================" + e.getMessage());
}
}
alarmService.saveAll(list);
log.info("成功条数==========================" + successNum);
}
/**
* id
*
* @param token token
* @return token token
*/
private List<String> findId(String token) {
// 定义变量存放 id
List<String> idList = new ArrayList<>();
if (StrUtil.isEmpty(token)) {
return idList;
}
// 获取数据库中最新的时间
LocalDateTime nowTime = alarmService.findNowTime();
DateTimeFormatter formatter = DateTimeFormatter.ofPattern("yyyyMMddHHmm");
String yesterdayStr = nowTime.format(formatter) + "00";
// 定义起始页
int pageIndex = 1;
// 定义每页显示条数
int pageSize = 500;
// 定义总数据条数
int size = 0;
// 定义type
String type = "getId";
// 查询id条件
AlarmRequest req = new AlarmRequest();
req.setType(type);
req.setValue(yesterdayStr);
req.setPageIndex(pageIndex);
req.setPageSize(pageSize);
while (true) {
List<String> data = alarmService.findDataIdList(req, token);
if (data == null) {
return idList;
}
sourceService.addList(data);
idList.addAll(data);
size += data.size();
if (data.size() == pageSize) {
req.setPageIndex(pageIndex++);
log.info("第" + pageIndex + "页==========================" + size + "条数据");
} else {
break;
}
}
return idList;
}
}