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

244 lines
9.1 KiB
Java

4 years ago
package com.docus.bgts.config;
2 years ago
import cn.hutool.core.collection.CollUtil;
import cn.hutool.core.date.DateUtil;
2 years ago
import cn.hutool.core.util.StrUtil;
import com.alibaba.fastjson.JSON;
import com.docus.bgts.entity.TableJsonRead;
import com.docus.bgts.enums.Codes;
import com.docus.bgts.facade.IBgtsService;
import com.docus.bgts.service.CheckIntegrityService;
4 years ago
import com.docus.bgts.utils.FileUtils;
import com.docus.bgts.utils.HttpUtils;
2 years ago
import io.swagger.models.auth.In;
import org.apache.commons.lang3.StringUtils;
4 years ago
import org.apache.logging.log4j.LogManager;
import org.apache.logging.log4j.Logger;
import org.springframework.beans.factory.annotation.Autowired;
4 years ago
import org.springframework.beans.factory.annotation.Value;
2 years ago
import org.springframework.scheduling.annotation.Async;
import org.springframework.scheduling.annotation.EnableAsync;
4 years ago
import org.springframework.scheduling.annotation.Scheduled;
import org.springframework.stereotype.Component;
2 years ago
import javax.annotation.Resource;
import java.text.SimpleDateFormat;
import java.time.LocalDate;
import java.time.LocalDateTime;
import java.time.format.DateTimeFormatter;
import java.util.*;
import java.util.concurrent.CountDownLatch;
import java.util.concurrent.ThreadPoolExecutor;
import java.util.concurrent.TimeUnit;
4 years ago
@Component
public class MyScheduling {
@Value("${beat.url}")
private String beatUrl;
public static String syncFlag;
2 years ago
private final String tempfilePrefix = "dataConfig\\temp";
private final String tempDataFileName = "collectTimeTemp";
private final String lastTimeStr = "lastTime";
// static {
// syncFlag=FileUtils.getJsonByName("syncFlag").toString();
// }
@Autowired
IBgtsService bgtsService;
@Autowired
CheckIntegrityService checkIntegrityService;
private Logger logger = LogManager.getLogger(MyScheduling.class);
4 years ago
2 years ago
@Autowired
private ThreadPoolExecutor threadPoolExecutor;
//5分钟执行一次心跳
2 years ago
@Scheduled(fixedRate = 1000 * 5)
public void beat() {
Map<String, String> params = new HashMap<>();
params.put("code", String.valueOf(FileUtils.getJsonByName("collectorid")));
try {
HttpUtils.get(beatUrl, params);
} catch (Exception e) {
e.printStackTrace();
logger.info("心跳推送出错,可能是住院服务没有开启");
}
}
/**
* /
* 10
*/
// @Scheduled(fixedRate = 1000 * 60 * 10)
// public void collect() {
// String collectorid = String.valueOf(FileUtils.getJsonByName("collectorid"));
// if ((!collectorid.equals(Codes.SMCODE.getCode())) && (!collectorid.equals(Codes.ZZCODE.getCode()))) {
// return;
// }
// bgtsService.timerCollect();
// }
2 years ago
// // 时间
// private static List<String> date = new ArrayList<>();
// // 上次任务执行时间
// private static int currentIndex = 0;
// public static void main(String[] args) throws Exception{
// MyScheduling myScheduling = new MyScheduling();
//
// for (int i = 0; i <=50;i++){
// myScheduling.collectByExamNo();
// TimeUnit.MILLISECONDS.sleep(500);
// }
//
//// System.out.println(date);
//// System.out.println(currentIndex);
// }
// private static void initDate() throws Exception {
// String configStart = String.valueOf(FileUtils.getJsonByName("collectStartDate"));
// String configEnd = String.valueOf(FileUtils.getJsonByName("collectEndDate"));
// if (StrUtil.isBlank(configStart) || StrUtil.isBlank(configEnd)) {
// throw new RuntimeException("check homeQualitySet.json collectStartDate AND collectEndDate confg");
// }
// DateTimeFormatter dtf = DateTimeFormatter.ofPattern("yyyy-MM-dd");
// LocalDate localDate = LocalDate.parse(configStart, dtf);
// LocalDate end = LocalDate.parse(configEnd);
// while (!localDate.isAfter(end)) {
// date.add(localDate.toString());
// localDate = localDate.plusDays(1);
// }
// }
/**
*
* 10
*/
2 years ago
//
// @Scheduled(fixedDelay = 1000 * 60 * 10)
// public void collectByExamNo() {
// String collectOpen = String.valueOf(FileUtils.getJsonByName("collectOpen"));
// if (collectOpen.equals("1")) {
// logger.info("按需采集任务执行----");
//// if (CollUtil.isEmpty(date)) {
//// try {
//// initDate();
//// } catch (Exception e) {
//// logger.error(e.getMessage());
//// return;
//// }
//// }
//// if (currentIndex >= date.size()) {
//// currentIndex = 0;
//// }
//// logger.info("index:{},Thread {}", currentIndex, Thread.currentThread().getName());
//// String collectStartDate = date.get(currentIndex);
//// String collectEndDate = collectStartDate + "\t23:59:59";
// String collectStartDate = String.valueOf(FileUtils.getJsonByName("collectStartDate"))+ "\t00:00:00";
// String collectEndDate = String.valueOf(FileUtils.getJsonByName("collectEndDate"))+ "\t23:59:59";
// logger.info("按需采集开始----------开始时间---" + collectStartDate + "------结束时间---" + collectEndDate);
// String collectorid = String.valueOf(FileUtils.getJsonByName("collectorid"));
// CountDownLatch countDownLatch = new CountDownLatch(1);
// threadPoolExecutor.execute(() -> {
// bgtsService.collectByDate(collectStartDate, collectEndDate, collectorid);
// countDownLatch.countDown();
// });
// try {
// countDownLatch.await();
// } catch (Exception e) {
// logger.error("JUC countDownLatch error {}", e.getMessage());
// }
// logger.info("{},采集结束----", collectStartDate);
// currentIndex++;
// System.gc();
// }
//
// }
@Scheduled(cron ="0 0 0 * * ?")
public void collect(){
String intervalDayOpen = String.valueOf(FileUtils.getJsonByName("intervalDayOpen"));
if (intervalDayOpen.equals("1")){
String collectorid = String.valueOf(FileUtils.getJsonByName("collectorid"));
2 years ago
int day = Integer.parseInt(String.valueOf(FileUtils.getJsonByName("intervalDay")));
logger.info("0点采集前"+day+"天出院数据");
Map<String, String> dateCollectionTime = getDateCollectionTime(new Date(), day);
logger.info("采集"+dateCollectionTime.get("startDate")+"至-------"+dateCollectionTime.get("endDate")+"数据");
bgtsService.collectByDate(dateCollectionTime.get("startDate"),dateCollectionTime.get("endDate"),collectorid);
}
}
2 years ago
/**
* x
*
* @param date
* @return
*/
public static Map<String, String> getDateCollectionTime(Date date, int day) {
Date dBefore;
Calendar calendar = Calendar.getInstance(); //得到日历
calendar.setTime(date);//把当前时间赋给日历
calendar.add(Calendar.DAY_OF_MONTH, -day); //设置为前day天
dBefore = calendar.getTime(); //得到前一天的时间
SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd"); //设置时间格式
String defaultStartDate = sdf.format(dBefore); //格式化前一天
defaultStartDate = defaultStartDate + " 00:00:00";
String defaultEndDate = defaultStartDate.substring(0, 10) + " 23:59:59";
Map<String, String> map = new HashMap<>();
map.put("startDate", defaultStartDate);
map.put("endDate", defaultEndDate);
return map;
}
/**
*
*/
// @Scheduled(fixedRate = 1000 * 5 * 60)
// public void syncIntegrality() {
// if (null == syncFlag || "0".equals(syncFlag)) {
//
// } else {
// //获取最后时间
// String lastDate = getLastDate();
// if(StringUtils.isNotBlank(lastDate)) {
// Date date = new Date();
// boolean flag = checkIntegrityService.addSyncIntegrality(lastDate, null);
// if(flag) {
// refreshLastDate(date);
// }
// }else{
// logger.info("采集时间为空");
// }
// }
// }
/**
*
* @return
*/
// private String getLastDate(){
// TableJsonRead tableJsonRead = new TableJsonRead();
// Map<String,String> map = tableJsonRead.Read(tempfilePrefix, tempDataFileName,Map.class);
// return map.get(lastTimeStr);
// }
/**
*
*/
// private void refreshLastDate(Date lastDate){
// String lastTime = DateUtil.format(lastDate, "yyyy-MM-dd HH:mm:ss");
// TableJsonRead tableJsonRead = new TableJsonRead();
// Map<String, String> map = new HashMap<>();
// map.put(lastTimeStr, lastTime);
// tableJsonRead.Save(tempfilePrefix, tempDataFileName, JSON.toJSONString(map));
// }
4 years ago
}