Explorar el Código

1.数据解析速度
2.节假日排除
3.推送—— qlm

qlm hace 4 años
padre
commit
b8a32bdf78

+ 1 - 1
src/main/java/com/zx/dataservice/controller/CallBackController.java

@@ -78,7 +78,7 @@ public class CallBackController {
     @ResponseBody
     public boolean updateZX(String code){
         try {
-            List<Record> records = Db.use("hb").find("select config_key,config_value from sys_config ");
+            List<Record> records = Db.use("gp").find("select config_key,config_value from sys_config ");
             for (Record record:records) {
                 ZXOptions.set(record.getStr("config_key"),record.getStr("config_value"));
             }

+ 1 - 1
src/main/java/com/zx/dataservice/controller/WebSocketController.java

@@ -119,7 +119,7 @@ public class WebSocketController {
             // 数据服务器 id   :
 
             Session session = map.get( id);               //发送消息给对方
-            if(session!=null){
+            if(session!=null&&session.isOpen()){
                 synchronized(session){
                     session.getBasicRemote().sendText(xMessage);
                 }

+ 6 - 0
src/main/java/com/zx/dataservice/service/ChoiceHisService.java

@@ -0,0 +1,6 @@
+package com.zx.dataservice.service;
+
+public interface ChoiceHisService {
+
+    void analysisHistData();
+}

+ 51 - 0
src/main/java/com/zx/dataservice/service/impl/ChoiceHisServiceImpl.java

@@ -0,0 +1,51 @@
+package com.zx.dataservice.service.impl;
+
+import com.jfinal.plugin.activerecord.Db;
+import com.jfinal.plugin.activerecord.Record;
+import com.zx.dataservice.service.ChoiceHisService;
+import com.zx.dataservice.utils.DateTimeUtil;
+import com.zx.dataservice.utils.DateUtils;
+import com.zx.dataservice.utils.WorkingDayUtil;
+import com.zx.dataservice.utils.ZXOptions;
+import org.apache.commons.lang3.StringUtils;
+import org.springframework.stereotype.Service;
+
+import java.util.Date;
+import java.util.List;
+
+@Service
+public class ChoiceHisServiceImpl implements ChoiceHisService {
+
+
+    @Override
+    public void analysisHistData() {
+        List<Record> records = Db.use("gp").find("select id, code, name from t_stock_base_info where is_rest_add = 0 order by id asc ");
+        for (Record record:records) {
+            String str = Db.use("gp").queryStr("select  dates  from  " +
+                    " data_hist_" + record.getStr("code").replace(".", "_").toLowerCase() +
+                    " order by realtime+0 desc  limit 1 ");
+            if(StringUtils.isNotBlank(str)){
+                String newTime = new WorkingDayUtil().getNewTime(str, "yyyy/MM/dd",5);
+                if(DateUtils.dateTime("yyyy/MM/dd",newTime).before(new Date())){  // 五天内还是 无数据
+                    System.out.println("五天内无数据股票****"+record.getStr("code")+"***"+newTime);
+                        Db.use("gp").update(" update t_stock_base_info set is_rest_add = 2  where id = ? ",record.get("id")+"");
+                }
+            }
+        }
+
+        List<Record> record2s = Db.use("zq").find("select id, code, name from t_stock_base_info where is_rest_add = 0 order by id asc ");
+        for (Record record:record2s) {
+            String str = Db.use("zq").queryStr("select  dates  from  " +
+                    " data_hist_" + record.getStr("code").replace(".", "_").toLowerCase() +
+                    " order by realtime+0 desc  limit 1 ");
+            if(StringUtils.isNotBlank(str)){
+                String newTime = new WorkingDayUtil().getNewTime(str, "yyyy/MM/dd",5);
+                if(DateUtils.dateTime("yyyy/MM/dd",newTime).before(new Date())){  // 五天内还是 无数据
+                    System.out.println("五天内无数据股票****"+record.getStr("code")+"***"+newTime);
+                        Db.use("zq").update(" update t_stock_base_info set is_rest_add = 2  where id = ? ",record.get("id")+"");
+                }
+            }
+        }
+
+    }
+}

+ 1 - 1
src/main/java/com/zx/dataservice/service/impl/ChoiceStockServiceImpl.java

@@ -517,7 +517,7 @@ public class ChoiceStockServiceImpl implements ChoiceStockService {
                     if(String.valueOf(entry.getValue().get(1)).equals("0")){
                         continue;
                     }
-                    stockRestPojo.setTime(entry.getValue().get(1));
+                    stockRestPojo.setTime(String.valueOf(entry.getValue().get(1)));
                     stockRestPojo.setNow(String.valueOf(entry.getValue().get(2)));
                     stockRestPojo.setHigh(String.valueOf(entry.getValue().get(3)));
                     stockRestPojo.setLow(String.valueOf(entry.getValue().get(4)));

+ 1 - 1
src/main/java/com/zx/dataservice/task/AnalysisBondRestDataTask.java

@@ -30,7 +30,7 @@ public class AnalysisBondRestDataTask {
     }
 
     @Async("executorAfterBond")
-    @Scheduled(cron = "0/10 * 15,16,17,18 * * ? ")
+    @Scheduled(cron = "0/2 * 15,16,17,18 * * ? ")
     public void toAnalysisRestAfterData() {
         this.choiceBondService.analysisBondRestDataAfter("after");
     }

+ 27 - 0
src/main/java/com/zx/dataservice/task/AnalysisHisDataTask.java

@@ -0,0 +1,27 @@
+package com.zx.dataservice.task;
+
+import com.zx.dataservice.service.ChoiceHisService;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.scheduling.annotation.Scheduled;
+import org.springframework.stereotype.Component;
+
+/**
+ * 凌晨去掉退盘数据
+ */
+@Component
+public class AnalysisHisDataTask {
+
+    private static final Logger log = LoggerFactory.getLogger(AnalysisHisDataTask.class);
+
+    @Autowired
+    private ChoiceHisService choiceHisService;
+
+
+    @Scheduled(cron = "1 1 1 * * ? ")
+    public void toAnalysisRestAfterData() {
+        this.choiceHisService.analysisHistData();
+    }
+
+}

+ 1 - 1
src/main/java/com/zx/dataservice/task/AnalysisStockRestDataTask.java

@@ -30,7 +30,7 @@ public class AnalysisStockRestDataTask {
     }
 
     @Async("executorAfterStock")
-    @Scheduled(cron = "0/10 * 15,16,17,18,19 * * ? ")
+    @Scheduled(cron = "0/2 * 15,16,17,18,19 * * ? ")
     public void toAnalysisRestAfterData() {
         this.choiceStockService.analysisStockRestDataAfter("after");
     }

+ 2 - 2
src/main/java/com/zx/dataservice/task/AnalysisTempIndexRestDataTask.java

@@ -20,7 +20,7 @@ public class AnalysisTempIndexRestDataTask {
     private ChoiceTempIndexService choiceTempIndexService;
 
     @Async("executorTempIndex")
-    @Scheduled(fixedRate=100)
+    @Scheduled(fixedRate=10)
     public void toAnalysisRestData() {
         doTask("now");
     }
@@ -30,7 +30,7 @@ public class AnalysisTempIndexRestDataTask {
     }
 
     @Async("executorTempAfterIndex")
-    @Scheduled(cron = "0/10 * 15,16,17,18 * * ? ")
+    @Scheduled(cron = "0/2 * 15,16,17,18 * * ? ")
     public void toAnalysisRestAfterData() {
         this.choiceTempIndexService.analysisStockRestDataAfter("after");
     }

+ 11 - 10
src/main/java/com/zx/dataservice/task/TaskConfig.java

@@ -16,12 +16,13 @@ public class TaskConfig {
     public Executor taskSchedulerStock() {
         ThreadPoolTaskExecutor executor = new ThreadPoolTaskExecutor();
         //核心线程数
-        executor.setCorePoolSize(100);
+        executor.setCorePoolSize(200);
         //最大核心线程数
-        executor.setMaxPoolSize(200);
+        executor.setMaxPoolSize(400);
         //队列中等待被调度的任务数
-        executor.setQueueCapacity(20);
+        executor.setQueueCapacity(50);
         executor.setRejectedExecutionHandler(new ThreadPoolExecutor.CallerRunsPolicy());
+//        executor.initialize();
         return executor;
     }
     @Bean("executorAfterStock")
@@ -67,11 +68,11 @@ public class TaskConfig {
     public Executor taskSchedulerTempIndex() {
         ThreadPoolTaskExecutor executor = new ThreadPoolTaskExecutor();
         //核心线程数
-        executor.setCorePoolSize(10);
+        executor.setCorePoolSize(100);
         //最大核心线程数
-        executor.setMaxPoolSize(20);
+        executor.setMaxPoolSize(200);
         //队列中等待被调度的任务数
-        executor.setQueueCapacity(10);
+        executor.setQueueCapacity(20);
         executor.setRejectedExecutionHandler(new ThreadPoolExecutor.CallerRunsPolicy());
         return executor;
     }
@@ -79,9 +80,9 @@ public class TaskConfig {
     public Executor taskSchedulerTempAfterIndex() {
         ThreadPoolTaskExecutor executor = new ThreadPoolTaskExecutor();
         //核心线程数
-        executor.setCorePoolSize(10);
+        executor.setCorePoolSize(50);
         //最大核心线程数
-        executor.setMaxPoolSize(20);
+        executor.setMaxPoolSize(100);
         //队列中等待被调度的任务数
         executor.setQueueCapacity(10);
         executor.setRejectedExecutionHandler(new ThreadPoolExecutor.CallerRunsPolicy());
@@ -92,9 +93,9 @@ public class TaskConfig {
     public Executor taskSchedulerTempInFrontStock() {
         ThreadPoolTaskExecutor executor = new ThreadPoolTaskExecutor();
         //核心线程数
-        executor.setCorePoolSize(10);
+        executor.setCorePoolSize(100);
         //最大核心线程数
-        executor.setMaxPoolSize(20);
+        executor.setMaxPoolSize(200);
         //队列中等待被调度的任务数
         executor.setQueueCapacity(10);
         executor.setRejectedExecutionHandler(new ThreadPoolExecutor.CallerRunsPolicy());

+ 615 - 0
src/main/java/com/zx/dataservice/utils/DateUtils.java

@@ -0,0 +1,615 @@
+package com.zx.dataservice.utils;
+
+import org.apache.commons.lang3.StringUtils;
+import org.apache.commons.lang3.time.DateFormatUtils;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
+import java.lang.management.ManagementFactory;
+import java.text.DateFormat;
+import java.text.ParseException;
+import java.text.SimpleDateFormat;
+import java.util.Calendar;
+import java.util.Date;
+import java.util.TimeZone;
+
+
+/**
+ * 时间工具类
+ *2020-12-12
+ * @author qlm
+ */
+public class DateUtils extends org.apache.commons.lang3.time.DateUtils {
+    private static Logger LOG = LoggerFactory.getLogger(DateUtils.class);
+
+    public static String YYYY = "yyyy";
+
+    public static String YYYY_MM = "yyyy-MM";
+
+    public static String YYYY_MM_DD = "yyyy-MM-dd";
+    public static String YYYYMMDD = "yyyyMMdd";
+
+    public static String HH_MM_SS = "HH:mm:ss";
+
+    public static String YYYYMMDDHHMMSS = "yyyyMMddHHmmss";
+    public static String YYYYMMDDHHMMSSSSS = "yyyyMMddHHmmssSSS";
+
+    public static String YYYY_MM_DD_HH_MM_SS = "yyyy-MM-dd HH:mm:ss";
+    public static String YYYY_MM_DD_HH_MM_SS_sss = "yyyy-MM-dd HH:mm:ss.SSS";
+    private static String[] parsePatterns = {
+            "yyyy-MM-dd", "yyyy-MM-dd HH:mm:ss", "yyyy-MM-dd HH:mm", "yyyy-MM",
+            "yyyy/MM/dd", "yyyy/MM/dd HH:mm:ss", "yyyy/MM/dd HH:mm", "yyyy/MM",
+            "yyyy.MM.dd", "yyyy.MM.dd HH:mm:ss", "yyyy.MM.dd HH:mm", "yyyy.MM"};
+
+    /**
+     * 获取当前Date型日期
+     *
+     * @return Date() 当前日期
+     */
+    public static Date getNowDate() {
+        return new Date();
+    }
+
+    /**
+     * 判断当前时间是否在时间段内
+     *
+     * @param startTime 开始 20:20
+     * @param endTime   结束  21:50
+     * @return
+     */
+    public static boolean belongCalendar(String startTime, String endTime) {
+        SimpleDateFormat df = new SimpleDateFormat("HH:mm");//设置日期格式
+        Date now = null;
+        Date beginTimeDate = null;
+        Date endTimeDate = null;
+        try {
+            now = df.parse(df.format(new Date()));
+            beginTimeDate = df.parse(startTime);
+            endTimeDate = df.parse(endTime);
+        } catch (Exception e) {
+            if(e.toString().length()>500){                LOG.error(e.toString().substring(0,450));            }else {                LOG.error(e.toString());            }
+        }
+        return belongCalendar(now, beginTimeDate, endTimeDate);
+    }
+
+    /**
+     * 判断时间是否在时间段内
+     *
+     * @param nowTime   目标时间
+     * @param beginTime 开始时间
+     * @param endTime   结束时间
+     * @return
+     */
+    public static boolean belongCalendar(Date nowTime, Date beginTime, Date endTime) {
+        Calendar date = Calendar.getInstance();
+        date.setTime(nowTime);
+
+        Calendar begin = Calendar.getInstance();
+        begin.setTime(beginTime);
+
+        Calendar end = Calendar.getInstance();
+        end.setTime(endTime);
+
+        if (date.after(begin) && date.before(end)) {
+            return true;
+        } else {
+            return false;
+        }
+    }
+
+    /**
+     * 计算两个时间差
+     */
+    public static String getDatePoor(Date endDate, Date nowDate) {
+        long nd = 1000 * 24 * 60 * 60;
+        long nh = 1000 * 60 * 60;
+        long nm = 1000 * 60;
+        // long ns = 1000;
+        // 获得两个时间的毫秒时间差异
+        long diff = endDate.getTime() - nowDate.getTime();
+        // 计算差多少天
+        long day = diff / nd;
+        // 计算差多少小时
+        long hour = diff % nd / nh;
+        // 计算差多少分钟
+        long min = diff % nd % nh / nm;
+        // 计算差多少秒//输出结果
+        // long sec = diff % nd % nh % nm / ns;
+        return day + "天" + hour + "小时" + min + "分钟";
+    }
+
+    /**
+     * 计算两个时间差多少天
+     */
+    public static String getDatePoorDay(String endDate, String nowDate) {
+        long nd = 1000 * 24 * 60 * 60;
+        long nh = 1000 * 60 * 60;
+        long nm = 1000 * 60;
+        // long ns = 1000;
+        // 获得两个时间的毫秒时间差异
+        long diff = formatToDate(endDate).getTime() - formatToDate(nowDate).getTime();
+        // 计算差多少天
+        long day = diff / nd;
+        // 计算差多少小时
+        long hour = diff % nd / nh;
+        // 计算差多少分钟
+        long min = diff % nd % nh / nm;
+        // 计算差多少秒//输出结果
+        // long sec = diff % nd % nh % nm / ns;
+        return day +"";
+    }
+
+    /**
+     * 获取当前日期, 默认格式为yyyy-MM-dd
+     *
+     * @return String
+     */
+    public static String getDate() {
+        return dateTimeNow(YYYY_MM_DD);
+    }
+
+    public static String getDate_() {
+        return dateTimeNow(YYYYMMDD);
+    }
+    public static String getDate_(int d) {
+        addDay(new Date(), d, YYYYMMDD, Calendar.DATE);
+        return dateTimeNow(YYYYMMDD);
+    }
+
+
+    public static String getHhMmSs() {
+        return dateTimeNow(HH_MM_SS);
+    }
+
+    public static String getCurrentTime() {
+        return dateTimeNow(YYYY_MM_DD_HH_MM_SS);
+    }
+
+    public synchronized static String getCurrentDay() {
+        return dateTimeNow(YYYY_MM_DD);
+    }
+
+    public static final String getTime() {
+        return dateTimeNow(YYYY_MM_DD_HH_MM_SS);
+    }
+
+    public static final String dateTimeNow() {
+        return dateTimeNow(YYYYMMDDHHMMSS);
+    }
+
+    public static final String getTimeSSS() {
+        return dateTimeNow(YYYYMMDDHHMMSSSSS);
+    }
+
+    public static final String dateTimeNow_YYYY_MM_DD_HH_MM_SS() {
+        return dateTimeNow(YYYY_MM_DD_HH_MM_SS);
+    }
+
+    public static final String getCurrentTimeSSS() {
+        return dateTimeNow(YYYY_MM_DD_HH_MM_SS_sss);
+    }
+
+    public static final String dateTimeNow(final String format) {
+        return parseDateToStr(format, new Date());
+    }
+
+    public static final String dateTime(final Date date) {
+        return parseDateToStr(YYYY_MM_DD, date);
+    }
+
+    public static final String parseDateToStr(final String format, final Date date) {
+        return new SimpleDateFormat(format).format(date);
+    }
+
+    public static final Date dateTime(final String format, final String ts) {
+        try {
+            return new SimpleDateFormat(format).parse(ts);
+        } catch (ParseException e) {
+            throw new RuntimeException(e);
+        }
+    }
+
+    /**
+     * 获取服务器启动时间
+     */
+    public static Date getServerStartDate() {
+        long time = ManagementFactory.getRuntimeMXBean().getStartTime();
+        return new Date(time);
+    }
+
+    /**
+     * 日期型字符串转化为日期 格式
+     */
+    public static Date parseDate(Object str) {
+        if (str == null) {
+            return null;
+        }
+        try {
+            return parseDate(str.toString(), parsePatterns);
+        } catch (ParseException e) {
+            return null;
+        }
+    }
+
+    public static Date strToDate(String dateStr) {
+        try {
+            SimpleDateFormat sDateFormat = new SimpleDateFormat("yyyyMMddHHmmss");
+            Date date = sDateFormat.parse(dateStr);
+            return date;
+        } catch (ParseException e) {
+            if(e.toString().length()>500){                LOG.error(e.toString().substring(0,450));            }else {                LOG.error(e.toString());            }
+        }
+        return null;
+    }
+
+    //时间戳转时间
+    public static String stampToDate(String s, String format) throws Exception {
+        String res;
+        SimpleDateFormat simpleDateFormat = new SimpleDateFormat(format);
+        long lt = new Long(s);
+        Date date = new Date(lt);
+        res = simpleDateFormat.format(date);
+        return res;
+    }
+
+    //获取今日凌晨时间戳
+    public static long getEarlyThisMorningStamp() {
+        long nowTime = System.currentTimeMillis();
+        long todayStartTime = nowTime - (nowTime + TimeZone.getDefault().getRawOffset()) % (1000 * 3600 * 24);
+        return todayStartTime;
+    }
+
+    /**
+     * 日期路径 即年/月/日 如2018/08/08
+     */
+    public static final String datePath() {
+        Date now = new Date();
+        return DateFormatUtils.format(now, "yyyy/MM/dd");
+    }
+
+    /**
+     * 日期路径 即年/月/日 如20180808
+     */
+    public static final String dateTime() {
+        Date now = new Date();
+        return DateFormatUtils.format(now, "yyyyMMdd");
+    }
+
+    /***
+     * 增加N天 ,可以是负数
+     * @param date
+     * @param dayNum
+     * @param formatStr
+     * @return
+     */
+    public static String addDay(Date date, int dayNum, String formatStr, int type) {
+        if (StringUtils.isBlank(formatStr)) {
+            formatStr = YYYY_MM_DD_HH_MM_SS;
+        }
+        SimpleDateFormat format = new SimpleDateFormat(formatStr);
+        Calendar c = Calendar.getInstance();
+        c.setTime(date);
+        c.add(type, dayNum);
+        Date m = c.getTime();
+        String mon = format.format(m);
+        return mon;
+    }
+
+    /**
+     * 增加N天 ,可以是负数
+     *
+     * @param date   字符串时间
+     * @param dayNum 天数
+     * @return
+     */
+    public static String addDay(String date, int dayNum) {
+        return addDay(formatToDateTime(date), dayNum, null, Calendar.DATE);
+    }
+
+    /**
+     * 增加n天
+     *
+     * @param dayNum
+     * @return
+     */
+    public static String addDay(int dayNum) {
+        return addDay(new Date(), dayNum, null, Calendar.DATE);
+    }
+
+    public static String addDayYMD(int dayNum) {
+        return addDay(new Date(), dayNum, YYYY_MM_DD, Calendar.DATE);
+    }
+
+    /***
+     * 增加N月
+     * @param month
+     * @return
+     */
+    public static String addMonth(int month) {
+        return addDay(new Date(), month, null, Calendar.MONTH);
+    }
+
+    /***
+     * 增加N年
+     * @param year
+     * @return
+     */
+    public static String addYear(int year) {
+        return addDay(new Date(), year, null, Calendar.YEAR);
+    }
+
+    /**
+     * 根据格式化字符串 把时间进行格式化
+     *
+     * @param formatStr
+     * @param date
+     * @return
+     */
+    public synchronized static String formatDate(String formatStr, Date date) {
+        SimpleDateFormat format = new SimpleDateFormat(formatStr);
+        String dateStr = format.format(date);
+        return dateStr;
+
+    }
+
+    /**
+     * @param time
+     * @return
+     */
+    public synchronized static Date formatToDate(String time) {
+        //规范时间格式
+        SimpleDateFormat pubTimeormatter = new SimpleDateFormat("yyyy-MM-dd");
+        Date pubTimedate = null;
+        try {
+            pubTimedate = pubTimeormatter.parse(time);
+        } catch (ParseException e) {
+            pubTimeormatter = new SimpleDateFormat("yyyy/MM/dd");
+            try {
+                pubTimedate = pubTimeormatter.parse(time);
+            } catch (ParseException e1) {
+                pubTimeormatter = new SimpleDateFormat(HH_MM_SS);
+                try {
+                    pubTimedate = pubTimeormatter.parse(time);
+                } catch (ParseException e3) {
+                    e3.printStackTrace();
+                }
+            }
+        }
+        return pubTimedate;
+    }
+
+    public synchronized static Date formatToDateTime(String time) {
+        //规范时间格式
+        SimpleDateFormat pubTimeormatter = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
+        Date pubTimedate = null;
+        try {
+            pubTimedate = pubTimeormatter.parse(time);
+        } catch (ParseException e) {
+            if(e.toString().length()>500){                LOG.error(e.toString().substring(0,450));            }else {                LOG.error(e.toString());            }
+        }
+        return pubTimedate;
+    }
+
+    public synchronized static String addDaysWithHms(int days) {
+        return addDay(new Date(), days, null, Calendar.DATE);
+    }
+
+    public synchronized static int differentDays(Date date1, Date date2) {
+        Calendar cal1 = Calendar.getInstance();
+        cal1.setTime(date1);
+
+        Calendar cal2 = Calendar.getInstance();
+        cal2.setTime(date2);
+        int day1 = cal1.get(Calendar.DAY_OF_YEAR);
+        int day2 = cal2.get(Calendar.DAY_OF_YEAR);
+
+        int year1 = cal1.get(Calendar.YEAR);
+        int year2 = cal2.get(Calendar.YEAR);
+        if (year1 != year2)   //同一年
+        {
+            int timeDistance = 0;
+            for (int i = year1; i < year2; i++) {
+                if (i % 4 == 0 && i % 100 != 0 || i % 400 == 0)    //闰年
+                {
+                    timeDistance += 366;
+                } else    //不是闰年
+                {
+                    timeDistance += 365;
+                }
+            }
+
+            return timeDistance + (day2 - day1);
+        } else    //不同年
+        {
+            System.out.println("判断day2 - day1 : " + (day2 - day1));
+            return day2 - day1;
+        }
+    }
+
+    //判断当前时间是否在时间date2之前
+    //时间格式 2005-4-21 16:16:34
+    public static boolean isDateBefore(String date2) {
+        try {
+            Date date1 = new Date();
+            DateFormat df = DateFormat.getDateTimeInstance();
+            return date1.before(df.parse(date2 + " 00:00:00"));
+        } catch (ParseException e) {
+            System.out.print("[SYS] " + e.getMessage());
+            return false;
+        }
+    }
+
+    // 2019-07-10 新增
+
+    /**
+     * 获取任意时间的下一个月的固定天
+     * @param repeatDate  // 时间
+     * @param format   传递过来的时间格式
+     * @return
+     */
+    public static String getPreMonthDay(String repeatDate,String format) {
+        Date repeatDateD =  dateTime(format,repeatDate);
+        repeatDate = formatDate("yyyyMMdd",repeatDateD);
+        String lastMonth = "";
+        Calendar cal = Calendar.getInstance();
+        SimpleDateFormat dft = new SimpleDateFormat(format);
+        int year = Integer.parseInt(repeatDate.substring(0, 4));
+        String monthsString = repeatDate.substring(4, 6);
+        int month;
+        if ("0".equals(monthsString.substring(0, 1))) {
+            month = Integer.parseInt(monthsString.substring(1, 2));
+        } else {
+            month = Integer.parseInt(monthsString.substring(0, 2));
+        }
+        int day = Integer.parseInt(repeatDate.substring(6, 8));
+
+        cal.set(year,month,day);
+        lastMonth = dft.format(cal.getTime());
+        return lastMonth;
+    }
+
+
+    /**
+     * 判断当前时间是否在[startTime, endTime]区间,注意时间格式要一致
+     *
+     * @param nowTime 当前时间
+     * @param startTime 开始时间
+     * @param endTime 结束时间
+     * @return
+     * @author jqlin
+     */
+    public static boolean isEffectiveDate(Date nowTime, Date startTime, Date endTime) {
+        if (nowTime.getTime() == startTime.getTime()
+                || nowTime.getTime() == endTime.getTime()) {
+            return true;
+        }
+
+        Calendar date = Calendar.getInstance();
+        date.setTime(nowTime);
+
+        Calendar begin = Calendar.getInstance();
+        begin.setTime(startTime);
+
+        Calendar end = Calendar.getInstance();
+        end.setTime(endTime);
+
+        if (date.after(begin) && date.before(end)) {
+            return true;
+        } else {
+            return false;
+        }
+    }
+
+    public static boolean isToday(String date) {
+        SimpleDateFormat fmt = new SimpleDateFormat("yyyy-MM-dd");
+        if (date.equals(fmt.format(new Date()).toString())) { //格式化为相同格式
+            return true;
+        } else {
+            return false;
+        }
+    }
+
+    //获取指定时间的时间戳
+    public static String timeInMillis(String str){
+        Date date = formatToDateTime(str);
+        Calendar cal = Calendar.getInstance();
+        cal.setTime(date);
+        long timestamp = cal.getTimeInMillis();
+        return timestamp +"";
+    }
+
+
+
+    // 获取当天0点时间戳
+    public static Long dayTimeInMillis() {
+        Calendar calendar = Calendar.getInstance();// 获取当前日期
+        calendar.set(Calendar.HOUR_OF_DAY, 0);
+        calendar.set(Calendar.MINUTE, 0);
+        calendar.set(Calendar.SECOND, 0);
+        Long time = calendar.getTimeInMillis();
+        return time;
+    }
+
+    // 获取当天0点时间戳
+    public static Long dayTimeInMillis(String oldtime) {
+        Calendar calendar = Calendar.getInstance();// 获取当前日期
+        calendar.setTime(formatToDate(oldtime));
+        calendar.set(Calendar.HOUR_OF_DAY, 0);
+        calendar.set(Calendar.MINUTE, 0);
+        calendar.set(Calendar.SECOND, 0);
+        Long time = calendar.getTimeInMillis()/1000;
+        return time;
+    }
+
+    // 获取当周0点时间戳
+    public static Long weekTimeInMillis() {
+        Calendar cal = Calendar.getInstance();
+        cal.set(cal.get(Calendar.YEAR),cal.get(Calendar.MONDAY), cal.get(Calendar.DAY_OF_MONTH), 0, 0,0);
+        cal.set(Calendar.DAY_OF_WEEK, Calendar.MONDAY);
+        return  (cal.getTimeInMillis()/1000);
+    }
+
+    // 获取指定周0点时间戳
+    public static Long weekTimeInMillis(String oldtime) {
+        Calendar cal = Calendar.getInstance();
+        cal.setTime(formatToDate(oldtime));
+        cal.set(cal.get(Calendar.YEAR),cal.get(Calendar.MONDAY), cal.get(Calendar.DAY_OF_MONTH), 0, 0,0);
+        cal.set(Calendar.DAY_OF_WEEK, Calendar.MONDAY);
+        return  (cal.getTimeInMillis()/1000);
+    }
+
+    // 获取当月0点时间戳
+    public static Long monthTimeInMillis() {
+        Calendar calendar = Calendar.getInstance();// 获取当前日期
+        calendar.add(Calendar.YEAR, 0);
+        calendar.add(Calendar.MONTH, 0);
+        calendar.set(Calendar.DAY_OF_MONTH, 1);// 设置为1号,当前日期既为本月第一天
+        calendar.set(Calendar.HOUR_OF_DAY, 0);
+        calendar.set(Calendar.MINUTE, 0);
+        calendar.set(Calendar.SECOND, 0);
+        Long time = calendar.getTimeInMillis()/1000;
+        return time;
+    }
+
+    // 获取当月0点时间戳
+    public static Long monthTimeInMillis(String oldtime) {
+        Calendar calendar = Calendar.getInstance();// 获取当前日期
+        calendar.setTime(formatToDate(oldtime));
+        calendar.add(Calendar.YEAR, 0);
+        calendar.add(Calendar.MONTH, 0);
+        calendar.set(Calendar.DAY_OF_MONTH, 1);// 设置为1号,当前日期既为本月第一天
+        calendar.set(Calendar.HOUR_OF_DAY, 0);
+        calendar.set(Calendar.MINUTE, 0);
+        calendar.set(Calendar.SECOND, 0);
+        Long time = calendar.getTimeInMillis()/1000;
+        return time;
+    }
+    // 获取当年0点时间戳
+    public static Long yearTimeInMillis() {
+        Calendar calendar = Calendar.getInstance();// 获取当前日期
+        calendar.add(Calendar.YEAR, 0);
+        calendar.add(Calendar.DATE, 0);
+        calendar.add(Calendar.MONTH, 0);
+        calendar.set(Calendar.DAY_OF_YEAR, 1);
+        calendar.set(Calendar.HOUR, 0);
+        calendar.set(Calendar.MINUTE, 0);
+        calendar.set(Calendar.SECOND, 0);
+        Long time = calendar.getTimeInMillis()/1000;
+        return time;
+    }
+
+    // 获取当年0点时间戳
+    public static Long yearTimeInMillis(String oldtime) {
+        Calendar calendar = Calendar.getInstance();// 获取当前日期
+        calendar.setTime(formatToDate(oldtime));
+        calendar.add(Calendar.YEAR, 0);
+        calendar.add(Calendar.DATE, 0);
+        calendar.add(Calendar.MONTH, 0);
+        calendar.set(Calendar.DAY_OF_YEAR, 1);
+        calendar.set(Calendar.HOUR, 0);
+        calendar.set(Calendar.MINUTE, 0);
+        calendar.set(Calendar.SECOND, 0);
+        Long time = calendar.getTimeInMillis()/1000;
+        return time;
+    }
+}

+ 1 - 1
src/main/java/com/zx/dataservice/utils/FileBondUtil.java

@@ -116,7 +116,7 @@ public class FileBondUtil {
 
     public static String readFileContent(String fileName) {
         File file = new File(fileName);
-        if(null == file){
+        if(null == file||(!file.isFile())||(!file.exists())){
             return null;
         }
         BufferedReader reader = null;

+ 5 - 7
src/main/java/com/zx/dataservice/utils/FileStockUtil.java

@@ -115,16 +115,14 @@ public class FileStockUtil {
     }
 
     public static String readFileContent(String fileName) {
-
+        File file = new File(fileName);
+        if(null == file||(!file.isFile())||(!file.exists())){
+            return null;
+        }
         BufferedReader reader = null;
         StringBuffer sbf = new StringBuffer();
         try {
-            File file = new File(fileName);
-            if(null == file||(!file.isFile())||(!file.exists())){
-                return null;
-            }else {
-                reader = new BufferedReader(new FileReader(file));
-            }
+            reader = new BufferedReader(new FileReader(file));
             String tempStr;
             while ((tempStr = reader.readLine()) != null) {
                 sbf.append(tempStr);

+ 1 - 1
src/main/java/com/zx/dataservice/utils/FileTempIndexUtil.java

@@ -113,7 +113,7 @@ public class FileTempIndexUtil {
 
     public static String readFileContent(String fileName) {
         File file = new File(fileName);
-        if(null == file){
+        if(null == file||(!file.isFile())||(!file.exists())){
             return null;
         }
         BufferedReader reader = null;

+ 216 - 0
src/main/java/com/zx/dataservice/utils/WorkingDayUtil.java

@@ -0,0 +1,216 @@
+package com.zx.dataservice.utils;
+
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
+import java.text.DateFormat;
+import java.text.ParseException;
+import java.text.SimpleDateFormat;
+import java.util.ArrayList;
+import java.util.Calendar;
+import java.util.Date;
+import java.util.List;
+
+/**
+ * 获取排除节假日和星期六,星期天的时间
+ * Created by qlm on 2020-12-07
+ */
+public class WorkingDayUtil {
+    private static List<Calendar> holidayList = new ArrayList<Calendar>();  //节假日列表
+    private static boolean holidayFlag;
+
+    private static Logger LOG = LoggerFactory.getLogger(WorkingDayUtil.class);
+
+
+    /**
+     * <p>Title: main </P>
+     * <p>Description: TODO </P>
+     * @param args
+     * return void    测试方法
+     * throws
+     * date
+     */
+    public static void main(String[] args) {
+        try {
+
+            DateFormat df = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
+            Calendar ca = Calendar.getInstance();
+            Date d = df.parse("2021-04-02 00:00:00");
+            ca.setTime(d);//设置当前时间
+
+            WorkingDayUtil wd = new WorkingDayUtil();//初始节假日
+            wd.initHolidayList("2021-01-01");
+            wd.initHolidayList("2021-01-02");
+            wd.initHolidayList("2021-01-03");
+            wd.initHolidayList("2021-02-11");
+            wd.initHolidayList("2021-02-12");
+            wd.initHolidayList("2021-02-13");
+            wd.initHolidayList("2021-02-14");
+            wd.initHolidayList("2021-02-15");
+            wd.initHolidayList("2021-02-16");
+            wd.initHolidayList("2021-02-17");
+            wd.initHolidayList("2021-04-03");
+            wd.initHolidayList("2021-04-04");
+            wd.initHolidayList("2021-04-05");
+            wd.initHolidayList("2021-05-01");
+            wd.initHolidayList("2021-05-02");
+            wd.initHolidayList("2021-05-03");
+            wd.initHolidayList("2021-05-04");
+            wd.initHolidayList("2021-05-05");
+            wd.initHolidayList("2021-06-12");
+            wd.initHolidayList("2021-06-13");
+            wd.initHolidayList("2021-06-14");
+            wd.initHolidayList("2021-09-19");
+            wd.initHolidayList("2021-09-20");
+            wd.initHolidayList("2021-09-21");
+            wd.initHolidayList("2021-10-01");
+            wd.initHolidayList("2021-10-02");
+            wd.initHolidayList("2021-10-03");
+            wd.initHolidayList("2021-10-04");
+            wd.initHolidayList("2021-10-05");
+            wd.initHolidayList("2021-10-06");
+            wd.initHolidayList("2021-10-07");
+
+            Calendar c = wd.addDateByWorkDay(ca,5);
+            System.out.println(df.format(c.getTime()));
+
+        } catch ( Exception e) {
+            // TODO: handle exception
+            System.out.println(e.getClass());
+            if(e.toString().length()>500){                LOG.error(e.toString().substring(0,450));            }else {                LOG.error(e.toString());            }
+        }
+
+    }
+
+    
+    //根据当前时间和天数获取 截至时间
+    public String getNewTime(String newTime,String format ,int workDay){
+        DateFormat df = new SimpleDateFormat(format);
+        Calendar ca = Calendar.getInstance();
+        Date d = null;
+        try {
+            d = df.parse(newTime);
+        } catch (ParseException e) {
+            if(e.toString().length()>500){                LOG.error(e.toString().substring(0,450));            }else {                LOG.error(e.toString());            }
+        }
+        ca.setTime(d);//设置当前时间
+
+        WorkingDayUtil wd = new WorkingDayUtil();
+        wd.initHolidayList("2021-01-01");
+        wd.initHolidayList("2021-01-02");
+        wd.initHolidayList("2021-01-03");
+        wd.initHolidayList("2021-02-11");
+        wd.initHolidayList("2021-02-12");
+        wd.initHolidayList("2021-02-13");
+        wd.initHolidayList("2021-02-14");
+        wd.initHolidayList("2021-02-15");
+        wd.initHolidayList("2021-02-16");
+        wd.initHolidayList("2021-02-17");
+        wd.initHolidayList("2021-04-03");
+        wd.initHolidayList("2021-04-04");
+        wd.initHolidayList("2021-04-05");
+        wd.initHolidayList("2021-05-01");
+        wd.initHolidayList("2021-05-02");
+        wd.initHolidayList("2021-05-03");
+        wd.initHolidayList("2021-05-04");
+        wd.initHolidayList("2021-05-05");
+        wd.initHolidayList("2021-06-12");
+        wd.initHolidayList("2021-06-13");
+        wd.initHolidayList("2021-06-14");
+        wd.initHolidayList("2021-09-19");
+        wd.initHolidayList("2021-09-20");
+        wd.initHolidayList("2021-09-21");
+        wd.initHolidayList("2021-10-01");
+        wd.initHolidayList("2021-10-02");
+        wd.initHolidayList("2021-10-03");
+        wd.initHolidayList("2021-10-04");
+        wd.initHolidayList("2021-10-05");
+        wd.initHolidayList("2021-10-06");
+        wd.initHolidayList("2021-10-07");
+
+        Calendar c = wd.addDateByWorkDay(ca,workDay);
+
+        return  df.format(c.getTime());
+
+    }
+
+    /**
+     *
+     * <p>Title: addDateByWorkDay </P>
+     * <p>Description: TODO  计算相加day天,并且排除节假日和周末后的日期</P>
+     * @param calendar  当前的日期
+     * @param day  相加天数
+     * @return
+     * return Calendar    返回类型   返回相加day天,并且排除节假日和周末后的日期
+     * throws
+     * date 2020-12-07 上午10:32:55
+     */
+    public Calendar addDateByWorkDay(Calendar calendar,int day){
+
+        try {
+            for (int i = 0; i < day; i++) {
+
+                calendar.add(Calendar.DAY_OF_MONTH, 1);
+
+                if(checkHoliday(calendar)){
+                    i--;
+                }
+            }
+            return calendar;
+
+        } catch (Exception e) {
+            if(e.toString().length()>500){                LOG.error(e.toString().substring(0,450));            }else {                LOG.error(e.toString());            }
+        }
+        return calendar;
+    }
+    /**
+     *
+     * <p>Title: checkHoliday </P>
+     * <p>Description: TODO 验证日期是否是节假日</P>
+     * @param calendar  传入需要验证的日期
+     * @return
+     * return boolean    返回类型  返回true是节假日,返回false不是节假日
+     * throws
+     * date 2020-12-07 上午10:13:07
+     */
+    public boolean checkHoliday(Calendar calendar) throws Exception{
+
+        //判断日期是否是周六周日
+        if(calendar.get(Calendar.DAY_OF_WEEK) == Calendar.SUNDAY ||
+                calendar.get(Calendar.DAY_OF_WEEK) == Calendar.SATURDAY){
+            return true;
+        }
+        //判断日期是否是节假日
+        for (Calendar ca : holidayList) {
+            if(ca.get(Calendar.MONTH) == calendar.get(Calendar.MONTH) &&
+                    ca.get(Calendar.DAY_OF_MONTH) == calendar.get(Calendar.DAY_OF_MONTH)&&
+                    ca.get(Calendar.YEAR) == calendar.get(Calendar.YEAR)){
+                return true;
+            }
+        }
+
+        return false;
+    }
+
+    /**
+     *
+     * <p>Title: initHolidayList </P>
+     * <p>Description: TODO  把所有节假日放入list</P>
+     * @param date 格式2020-12-07
+     * return void    返回类型
+     * throws
+     * date 2020-12-07 上午10:11:35
+     */
+    public void initHolidayList( String date){
+
+        String [] da = date.split("-");
+
+        Calendar calendar = Calendar.getInstance();
+        calendar.set(Calendar.YEAR, Integer.valueOf(da[0]));
+        calendar.set(Calendar.MONTH, Integer.valueOf(da[1])-1);//月份比正常小1,0代表一月
+        calendar.set(Calendar.DAY_OF_MONTH, Integer.valueOf(da[2]));
+        holidayList.add(calendar);
+    }
+
+}
+