From 7f85ca5468e097f1749ab1ed812046cb8eb979b7 Mon Sep 17 00:00:00 2001 From: liurunyu <lry9898@163.com> Date: 星期日, 27 四月 2025 17:58:48 +0800 Subject: [PATCH] 表阀一体机与测控一体阀协议中的阀门状态不兼容,做兼容处理。 --- pipIrr-platform/pipIrr-common/src/main/java/com/dy/common/schedulerTask/SchedulerTaskSupport.java | 464 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 files changed, 464 insertions(+), 0 deletions(-) diff --git a/pipIrr-platform/pipIrr-common/src/main/java/com/dy/common/schedulerTask/SchedulerTaskSupport.java b/pipIrr-platform/pipIrr-common/src/main/java/com/dy/common/schedulerTask/SchedulerTaskSupport.java new file mode 100644 index 0000000..0fc205e --- /dev/null +++ b/pipIrr-platform/pipIrr-common/src/main/java/com/dy/common/schedulerTask/SchedulerTaskSupport.java @@ -0,0 +1,464 @@ +package com.dy.common.schedulerTask; + + +import java.util.*; + +import org.quartz.*; + + +public class SchedulerTaskSupport { + + private static Integer threadPoolMaxCount; + private static Integer threadPoolPriority; + + public static void setThreadPoolPro(Integer threadPoolMaxCount, Integer threadPoolPriority){ + if(SchedulerTaskSupport.threadPoolMaxCount == null){ + SchedulerTaskSupport.threadPoolMaxCount = threadPoolMaxCount; + } + if(SchedulerTaskSupport.threadPoolPriority == null){ + SchedulerTaskSupport.threadPoolPriority = threadPoolPriority; + } + } + + /** + * 娣诲姞姣廥绉掗挓閲嶅宸ヤ綔涓�娆$殑宸ヤ綔浠诲姟锛� + * @param jobName 宸ヤ綔鍚嶇О + * @param jobGroupName 宸ヤ綔缁勫悕绉� + * @param jobClass 宸ヤ綔绫� + * @param futureSecond 寤惰繜鍒板皢鏉ユ椂闀�(鍗曚綅绉�)浠ュ紑濮嬪伐浣� + * @param intervalInSeconds 閲嶅宸ヤ綔闂撮殧鏃堕暱(绉�) + * @param repeatCount 閲嶅宸ヤ綔娆℃暟(濡傛灉灏忎簬0锛屽皢涓�鐩撮噸澶嶆墽琛屼笅鍘� , 濡傛灉鏄�0鎵ц涓�娆★紝濡傛灉鏄�1鎵ц2娆★紝渚濇绫绘帹) + * @return 宸ヤ綔浠诲姟Key + * @throws Exception + */ + @SuppressWarnings({"unchecked","rawtypes"}) + public static String addSecondlyJob( + String jobName, + String jobGroupName, + Class jobClass , + HashMap<String , Object> jobDataMap , + int futureSecond, + int intervalInSeconds , + int repeatCount) throws Exception { + SchedulerTaskSupport.checkDelayStart(futureSecond) ; + if(intervalInSeconds < 1){ + throw new Exception("閲嶅宸ヤ綔闂撮殧鏃堕暱(鍗曚綅绉�)涓嶈兘灏忎簬1绉�)!") ; + } + Scheduler sched = SchedulerTaskFactory.getSingleScheduler(threadPoolMaxCount, threadPoolPriority) ; + + Date futureDate = DateBuilder.futureDate(futureSecond, DateBuilder.IntervalUnit.SECOND) ; + Date startTime = DateBuilder.evenSecondDate(futureDate); + + JobDetail job = JobBuilder.newJob(jobClass) + .withIdentity(jobName, jobGroupName) + .build(); + SchedulerTaskSupport.setDataMap(job, jobDataMap) ; + + Trigger trigger = TriggerBuilder.newTrigger() + .withIdentity(jobName + "_trigger", jobGroupName + "_trigger") + .startAt(startTime) + .withSchedule(SimpleScheduleBuilder.simpleSchedule() + .withIntervalInSeconds(intervalInSeconds) + .withRepeatCount(repeatCount)) + .build(); + + sched.scheduleJob(job, trigger); + sched.start(); + + return job.getKey().toString() ; + } + /** + * 娣诲姞姣廥鍒嗛挓閲嶅宸ヤ綔涓�娆$殑宸ヤ綔浠诲姟锛� + * @param jobName 宸ヤ綔鍚嶇О + * @param jobGroupName 宸ヤ綔缁勫悕绉� + * @param jobClass 宸ヤ綔绫� + * @param futureSecond 寤惰繜鍒板皢鏉ユ椂闀�(鍗曚綅绉�)浠ュ紑濮嬪伐浣� + * @param intervalInMinutes 閲嶅宸ヤ綔闂撮殧鏃堕暱(鍒嗛挓) + * @param repeatCount 閲嶅宸ヤ綔娆℃暟(濡傛灉灏忎簬0锛屽皢涓�鐩撮噸澶嶆墽琛屼笅鍘� , 濡傛灉鏄�0鎵ц涓�娆★紝濡傛灉鏄�1鎵ц2娆★紝渚濇绫绘帹) + * @throws Exception + */ + @SuppressWarnings({"unchecked","rawtypes"}) + public static String addMinutelyJob( + String jobName, + String jobGroupName, + Class jobClass , + HashMap<String , Object> jobDataMap , + int futureSecond, + int intervalInMinutes , + int repeatCount) throws Exception { + SchedulerTaskSupport.checkDelayStart(futureSecond) ; + if(intervalInMinutes < 1){ + throw new Exception("閲嶅宸ヤ綔闂撮殧鏃堕暱(鍗曚綅鍒嗛挓)涓嶈兘灏忎簬1鍒嗛挓)!") ; + } + + Scheduler sched = SchedulerTaskFactory.getSingleScheduler(threadPoolMaxCount, threadPoolPriority) ; + + Date futureDate = DateBuilder.futureDate(futureSecond, DateBuilder.IntervalUnit.SECOND) ; + Date startTime = DateBuilder.evenSecondDate(futureDate); + + JobDetail job = JobBuilder.newJob(jobClass) + .withIdentity(jobName, jobGroupName) + .build(); + SchedulerTaskSupport.setDataMap(job, jobDataMap) ; + + Trigger trigger = TriggerBuilder.newTrigger() + .withIdentity(jobName + "_trigger", jobGroupName + "_trigger") + .startAt(startTime) + .withSchedule(SimpleScheduleBuilder.simpleSchedule() + .withIntervalInMinutes(intervalInMinutes) + .withRepeatCount(repeatCount)) + .build(); + + sched.scheduleJob(job, trigger); + sched.start(); + + return job.getKey().toString() ; + + } + /** + * 娣诲姞姣廥灏忔椂閲嶅宸ヤ綔涓�娆$殑宸ヤ綔浠诲姟锛� + * @param jobName 宸ヤ綔鍚嶇О + * @param jobGroupName 宸ヤ綔缁勫悕绉� + * @param jobClass 宸ヤ綔绫� + * @param futureSecond 寤惰繜鍒板皢鏉ユ椂闀�(鍗曚綅绉�)浠ュ紑濮嬪伐浣� + * @param intervalInHour 閲嶅宸ヤ綔闂撮殧鏃堕暱(灏忔椂) + * @param repeatCount 閲嶅宸ヤ綔娆℃暟(濡傛灉灏忎簬0锛屽皢涓�鐩撮噸澶嶆墽琛屼笅鍘� , 濡傛灉鏄�0鎵ц涓�娆★紝濡傛灉鏄�1鎵ц2娆★紝渚濇绫绘帹) + * @throws Exception + */ + @SuppressWarnings({"unchecked","rawtypes"}) + public static String addHourlyJob( + String jobName, + String jobGroupName, + Class jobClass , + HashMap<String , Object> jobDataMap , + int futureSecond, + int intervalInHour , + int repeatCount) throws Exception { + SchedulerTaskSupport.checkDelayStart(futureSecond) ; + if(intervalInHour < 1){ + throw new Exception("閲嶅宸ヤ綔闂撮殧鏃堕暱(鍗曚綅灏忔椂)涓嶈兘灏忎簬1灏忔椂)!") ; + } + + Scheduler sched = SchedulerTaskFactory.getSingleScheduler(threadPoolMaxCount, threadPoolPriority) ; + + Date futureDate = DateBuilder.futureDate(futureSecond, DateBuilder.IntervalUnit.SECOND) ; + Date startTime = DateBuilder.evenSecondDate(futureDate); + + JobDetail job = JobBuilder.newJob(jobClass) + .withIdentity(jobName, jobGroupName) + .build(); + SchedulerTaskSupport.setDataMap(job, jobDataMap) ; + + Trigger trigger = TriggerBuilder.newTrigger() + .withIdentity(jobName + "_trigger", jobGroupName + "_trigger") + .startAt(startTime) + .withSchedule(SimpleScheduleBuilder.simpleSchedule() + .withIntervalInHours(intervalInHour) + .withRepeatCount(repeatCount)) + .build(); + + sched.scheduleJob(job, trigger); + sched.start(); + + return job.getKey().toString() ; + } + + /** + * 娣诲姞姣忓ぉ鏌愭椂鏌愬垎閲嶅宸ヤ綔涓�娆$殑宸ヤ綔浠诲姟锛� + * @param jobName 宸ヤ綔鍚嶇О + * @param jobGroupName 宸ヤ綔缁勫悕绉� + * @param jobClass 宸ヤ綔绫� + * @param hour 鏌愭椂(0-23涔嬮棿(鍖呮嫭0涓�23)) + * @param minute 鏌愬垎(0-59涔嬮棿(鍖呮嫭0涓�59)) + * @throws Exception + */ +// 琛ㄨ揪寮� 鎰忎箟 +// "0 0 12 * * ?" 姣忓ぉ涓崍12鐐硅Е鍙� +// "0 15 10 ? * *" 姣忓ぉ涓婂崍10:15瑙﹀彂 +// "0 15 10 * * ?" 姣忓ぉ涓婂崍10:15瑙﹀彂 +// "0 15 10 * * ? *" 姣忓ぉ涓婂崍10:15瑙﹀彂 +// "0 15 10 * * ? 2005" 2005骞寸殑姣忓ぉ涓婂崍10:15瑙﹀彂 +// "0 * 14 * * ?" 鍦ㄦ瘡澶╀笅鍗�2鐐瑰埌涓嬪崍2:59鏈熼棿鐨勬瘡1鍒嗛挓瑙﹀彂 +// "0 0/5 14 * * ?" 鍦ㄦ瘡澶╀笅鍗�2鐐瑰埌涓嬪崍2:55鏈熼棿鐨勬瘡5鍒嗛挓瑙﹀彂 +// "0 0/5 14,18 * * ?" 鍦ㄦ瘡澶╀笅鍗�2鐐瑰埌2:55鏈熼棿鍜屼笅鍗�6鐐瑰埌6:55鏈熼棿鐨勬瘡5鍒嗛挓瑙﹀彂 +// "0 0-5 14 * * ?" 鍦ㄦ瘡澶╀笅鍗�2鐐瑰埌涓嬪崍2:05鏈熼棿鐨勬瘡1鍒嗛挓瑙﹀彂 +// "0 10,44 14 ? 3 WED" 姣忓勾涓夋湀鐨勬槦鏈熶笁鐨勪笅鍗�2:10鍜�2:44瑙﹀彂 +// "0 15 10 ? * MON-FRI" 鍛ㄤ竴鑷冲懆浜旂殑涓婂崍10:15瑙﹀彂 +// "0 15 10 15 * ?" 姣忔湀15鏃ヤ笂鍗�10:15瑙﹀彂 +// "0 15 10 L * ?" 姣忔湀鏈�鍚庝竴鏃ョ殑涓婂崍10:15瑙﹀彂 +// "0 15 10 ? * 6L" 姣忔湀鐨勬渶鍚庝竴涓槦鏈熶簲涓婂崍10:15瑙﹀彂 +// "0 15 10 ? * 6L 2002-2005" 2002骞磋嚦2005骞寸殑姣忔湀鐨勬渶鍚庝竴涓槦鏈熶簲涓婂崍10:15瑙﹀彂 +// "0 15 10 ? * 6#3" 姣忔湀鐨勭涓変釜鏄熸湡浜斾笂鍗�10:15瑙﹀彂 + @SuppressWarnings({"unchecked","rawtypes"}) + public static String addDailyJob( + String jobName, + String jobGroupName, + Class jobClass , + HashMap<String , Object> jobDataMap , + int hour , + int minute) throws Exception { + SchedulerTaskSupport.checkHour(hour) ; + SchedulerTaskSupport.checkMinute(minute) ; + + Scheduler sched = SchedulerTaskFactory.getSingleScheduler(threadPoolMaxCount, threadPoolPriority) ; + + JobDetail job = JobBuilder.newJob(jobClass) + .withIdentity(jobName, jobGroupName) + .build(); + SchedulerTaskSupport.setDataMap(job, jobDataMap) ; + + Trigger trigger = TriggerBuilder.newTrigger() + .withIdentity(jobName + "_trigger", jobGroupName + "_trigger") + .withSchedule(CronScheduleBuilder.cronSchedule("0 " + minute + " " + hour + " * * ? *")) + .build(); + + sched.scheduleJob(job, trigger); + sched.start(); + + return job.getKey().toString() ; + } + + /** + * 娣诲姞姣忓懆涓�銆佸懆浜屻�佸懆涓夈�佸懆鍥涖�佸懆浜斿悇閲嶅宸ヤ綔涓�娆$殑宸ヤ綔浠诲姟锛� + * @param jobName 宸ヤ綔鍚嶇О + * @param jobGroupName 宸ヤ綔缁勫悕绉� + * @param jobClass 宸ヤ綔绫� + * @param hour 鏌愭椂(0-23涔嬮棿(鍖呮嫭0涓�23)) + * @param minute 鏌愬垎(0-59涔嬮棿(鍖呮嫭0涓�59)) + * @throws Exception + */ + @SuppressWarnings({"unchecked","rawtypes"}) + public static String addWorkingDayInWeekJob( + String jobName, + String jobGroupName, + Class jobClass , + HashMap<String , Object> jobDataMap , + int hour , + int minute) throws Exception { + SchedulerTaskSupport.checkHour(hour) ; + SchedulerTaskSupport.checkMinute(minute) ; + + Scheduler sched = SchedulerTaskFactory.getSingleScheduler(threadPoolMaxCount, threadPoolPriority) ; + + JobDetail job = JobBuilder.newJob(jobClass) + .withIdentity(jobName, jobGroupName) + .build(); + SchedulerTaskSupport.setDataMap(job, jobDataMap) ; + + Trigger trigger = TriggerBuilder.newTrigger() + .withIdentity(jobName + "_trigger", jobGroupName + "_trigger") + .withSchedule(CronScheduleBuilder.cronSchedule("0 " + minute + " " + hour + " ? * MON-FRI" )) + .build(); + + sched.scheduleJob(job, trigger); + sched.start(); + + return job.getKey().toString() ; + } + /** + * 娣诲姞姣忎竴鍛ㄧ殑鏌愪竴澶╂煇鏃舵煇鍒嗛噸澶嶅伐浣滀竴娆$殑宸ヤ綔浠诲姟锛� + * @param jobName 宸ヤ綔鍚嶇О + * @param jobGroupName 宸ヤ綔缁勫悕绉� + * @param jobClass 宸ヤ綔绫� + * @param dayOfWeek 涓�鍛ㄧ殑鏌愪竴澶�(1浠h〃鍛ㄤ竴,渚濇绫绘帹)(鍙栧��1-7(鍖呮嫭1涓�7)) + * @param hour 鏌愭椂(0-23涔嬮棿(鍖呮嫭0涓�23)) + * @param minute 鏌愬垎(0-59涔嬮棿(鍖呮嫭0涓�59)) + * @throws Exception + */ + @SuppressWarnings({"unchecked","rawtypes"}) + public static String addWeeklyJob( + String jobName, + String jobGroupName, + Class jobClass , + HashMap<String , Object> jobDataMap , + int dayOfWeek, + int hour , + int minute) throws Exception { + SchedulerTaskSupport.checkHour(hour) ; + SchedulerTaskSupport.checkMinute(minute) ; + dayOfWeek = SchedulerTaskSupport.checkDayOfWeek(dayOfWeek); + + Scheduler sched = SchedulerTaskFactory.getSingleScheduler(threadPoolMaxCount, threadPoolPriority) ; + + JobDetail job = JobBuilder.newJob(jobClass) + .withIdentity(jobName, jobGroupName) + .build(); + SchedulerTaskSupport.setDataMap(job, jobDataMap) ; + + Trigger trigger = TriggerBuilder.newTrigger() + .withIdentity(jobName + "_trigger", jobGroupName + "_trigger") + .withSchedule(CronScheduleBuilder.cronSchedule("0 " + minute + " " + hour + " ? * " + dayOfWeek )) + .build(); + + sched.scheduleJob(job, trigger); + sched.start(); + + return job.getKey().toString() ; + } + /** + * 娣诲姞姣忔湀鐨勬煇涓�澶╂煇鏃舵煇鍒嗛噸澶嶅伐浣滀竴娆$殑宸ヤ綔浠诲姟锛� + * @param jobName 宸ヤ綔鍚嶇О + * @param jobGroupName 宸ヤ綔缁勫悕绉� + * @param jobClass 宸ヤ綔绫� + * @param dayOfMonth 涓�鏈堢殑鏌愪竴澶�(1-31涔嬮棿(鍖呮嫭1涓�31)) + * @param hour 鏌愭椂(0-23涔嬮棿(鍖呮嫭0涓�23)) + * @param minute 鏌愬垎(0-59涔嬮棿(鍖呮嫭0涓�59)) + * @throws Exception + */ + @SuppressWarnings({"unchecked","rawtypes"}) + public static String addMonthlyJob( + String jobName, + String jobGroupName, + Class jobClass , + HashMap<String , Object> jobDataMap , + int dayOfMonth, + int hour , + int minute) throws Exception { + SchedulerTaskSupport.checkHour(hour) ; + SchedulerTaskSupport.checkMinute(minute) ; + SchedulerTaskSupport.checkDayOfMonth(dayOfMonth); + + Scheduler sched = SchedulerTaskFactory.getSingleScheduler(threadPoolMaxCount, threadPoolPriority) ; + + JobDetail job = JobBuilder.newJob(jobClass) + .withIdentity(jobName, jobGroupName) + .build(); + SchedulerTaskSupport.setDataMap(job, jobDataMap) ; + + Trigger trigger = TriggerBuilder.newTrigger() + .withIdentity(jobName + "_trigger", jobGroupName + "_trigger") + .withSchedule(CronScheduleBuilder.cronSchedule("0 " + minute + " " + hour + " " + dayOfMonth + " * ?")) + .build(); + + sched.scheduleJob(job, trigger); + sched.start(); + + return job.getKey().toString() ; + } + /** + * 娣诲姞姣忔湀鐨勬渶鍚庝竴澶╂煇鏃舵煇鍒嗛噸澶嶅伐浣滀竴娆$殑宸ヤ綔浠诲姟锛� + * @param jobName 宸ヤ綔鍚嶇О + * @param jobGroupName 宸ヤ綔缁勫悕绉� + * @param jobClass 宸ヤ綔绫� + * @param hour 鏌愭椂(0-23涔嬮棿(鍖呮嫭0涓�23)) + * @param minute 鏌愬垎(0-59涔嬮棿(鍖呮嫭0涓�59)) + * @throws Exception + */ + @SuppressWarnings({"unchecked","rawtypes"}) + public static String addLastDateOfMonthJob( + String jobName, + String jobGroupName, + Class jobClass , + HashMap<String , Object> jobDataMap , + int hour , + int minute) throws Exception { + SchedulerTaskSupport.checkHour(hour) ; + SchedulerTaskSupport.checkMinute(minute) ; + + Scheduler sched = SchedulerTaskFactory.getSingleScheduler(threadPoolMaxCount, threadPoolPriority) ; + + JobDetail job = JobBuilder.newJob(jobClass) + .withIdentity(jobName, jobGroupName) + .build(); + SchedulerTaskSupport.setDataMap(job, jobDataMap) ; + + Trigger trigger = TriggerBuilder.newTrigger() + .withIdentity(jobName + "_trigger", jobGroupName + "_trigger") + .withSchedule(CronScheduleBuilder.cronSchedule("0 " + minute + " " + hour + " L * ?")) + .build(); + + sched.scheduleJob(job, trigger); + sched.start(); + + return job.getKey().toString() ; + } + + + /** + * 璁剧疆鍙傛暟鏁版嵁 + */ + private static void setDataMap(JobDetail job , HashMap<String , Object> jobDataMap){ + if(jobDataMap != null && jobDataMap.size() > 0){ + JobDataMap map = job.getJobDataMap(); + Set<Map.Entry<String , Object>> set = jobDataMap.entrySet() ; + Iterator<Map.Entry<String , Object>> it = set.iterator() ; + Map.Entry<String , Object> entry = null ; + String key = null ; + Object value = null ; + while(it.hasNext()){ + entry = it.next() ; + key = entry.getKey() ; + value = entry.getValue() ; + map.put(key, value); + } + } + } + + /** + * + * @param futureSecond + */ + private static void checkDelayStart(int futureSecond)throws Exception { + if(futureSecond < 0){ + throw new Exception("寤惰繜寮�濮嬪伐浣滄椂闀�(鍗曚綅绉�)涓嶈兘灏忎簬0!") ; + } + } + + /** + * + * @param hour + * @throws Exception + */ + private static void checkHour(int hour)throws Exception { + if(hour < 0 || hour >= 24){ + throw new Exception("閲嶅宸ヤ綔鐨勫皬鏃舵椂闂寸偣鍙栧�煎繀椤诲湪0-23涔嬮棿(鍖呮嫭0涓�23)!") ; + } + } + /** + * + * @param minute + * @throws Exception + */ + private static void checkMinute(int minute)throws Exception { + if(minute < 0 || minute >= 60){ + throw new Exception("閲嶅宸ヤ綔鐨勫垎閽熸椂闂寸偣鍙栧�煎繀椤诲湪0-59涔嬮棿(鍖呮嫭0涓�59)!") ; + } + } + /** + * + * @param dayOfWeek + * @throws Exception + */ + private static int checkDayOfWeek(int dayOfWeek)throws Exception { + if(dayOfWeek < 1 || dayOfWeek > 7){ + throw new Exception("閲嶅宸ヤ綔鐨勪竴鏄熸湡鐨勬煇涓�澶╁彇鍊煎繀椤诲湪1(鍛ㄤ竴)-7(鍛ㄦ棩)闂�(鍖呮嫭1涓�7)!") ; + } + int d = 0 ; + if(dayOfWeek == 1){ + d = DateBuilder.MONDAY ; + }else if(dayOfWeek == 2){ + d = DateBuilder.TUESDAY ; + }else if(dayOfWeek == 3){ + d = DateBuilder.WEDNESDAY ; + }else if(dayOfWeek == 4){ + d = DateBuilder.THURSDAY ; + }else if(dayOfWeek == 5){ + d = DateBuilder.FRIDAY ; + }else if(dayOfWeek == 6){ + d = DateBuilder.SATURDAY ; + }else if(dayOfWeek == 7){ + d = DateBuilder.SUNDAY ; + } + return d ; + } + /** + * + * @param dayOfMonth + * @throws Exception + */ + private static void checkDayOfMonth(int dayOfMonth)throws Exception { + if(dayOfMonth < 1 || dayOfMonth > 31){ + throw new Exception("閲嶅宸ヤ綔涓�鏈堟煇涓�澶╁彇鍊煎繀椤诲湪1-31涔嬮棿(鍖呮嫭1涓�31)!") ; + } + } +} -- Gitblit v1.8.0