package com.docus.bgts.config; import cn.hutool.core.collection.CollUtil; import cn.hutool.core.date.DateUtil; 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; import com.docus.bgts.utils.FileUtils; import com.docus.bgts.utils.HttpUtils; import io.swagger.models.auth.In; import org.apache.commons.lang3.StringUtils; import org.apache.logging.log4j.LogManager; import org.apache.logging.log4j.Logger; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Value; import org.springframework.scheduling.annotation.Async; import org.springframework.scheduling.annotation.EnableAsync; import org.springframework.scheduling.annotation.Scheduled; import org.springframework.stereotype.Component; 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; @Component public class MyScheduling { @Value("${beat.url}") private String beatUrl; public static String syncFlag; 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); @Autowired private ThreadPoolExecutor threadPoolExecutor; //5分钟执行一次心跳 @Scheduled(fixedRate = 1000 * 5) public void beat() { Map 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(); // } // // 时间 // private static List 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分钟执行一次 */ // // @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")); int day = Integer.parseInt(String.valueOf(FileUtils.getJsonByName("intervalDay"))); logger.info("0点采集前"+day+"天出院数据"); Map dateCollectionTime = getDateCollectionTime(new Date(), day); logger.info("采集"+dateCollectionTime.get("startDate")+"至-------"+dateCollectionTime.get("endDate")+"数据"); bgtsService.collectByDate(dateCollectionTime.get("startDate"),dateCollectionTime.get("endDate"),collectorid); } } /** * 获取前x天开始与结束时间 * * @param date * @return */ public static Map 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 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 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 map = new HashMap<>(); // map.put(lastTimeStr, lastTime); // tableJsonRead.Save(tempfilePrefix, tempDataFileName, JSON.toJSONString(map)); // } }