Copyright: without her consent, and not to reprint the article, if reproduced please note the link address! https://blog.csdn.net/qq_38366657/article/details/90669993
1. Create a scheduler (WeiXinScheduler.java) (jobs created folder on the inside ah) (code is just my own business so I do not write a full copy my code as long as you understand how to use and that they know how to write up!)
<dependency> <groupId>org.quartz-scheduler</groupId> <artifactId>quartz</artifactId> <version>2.2.1</version> </dependency> <dependency> <groupId>org.quartz-scheduler</groupId> <artifactId>quartz-jobs</artifactId> <version>2.2.1</version> </dependency>
package com.jobs; import com.yd.edb.ticket.Ticket; import org.quartz.*; import org.quartz.impl.StdSchedulerFactory; import java.util.List; import java.util.Map; public class WeiXinScheduler { //创建调度器 public static Scheduler getScheduler() throws SchedulerException{ SchedulerFactory schedulerFactory = new StdSchedulerFactory(); return schedulerFactory.getScheduler(); } public static void schedulerJob(Ticket ticket, String isStop) throws SchedulerException{ String __SQL="SELECT * FROM DCS_MESSAGE_PUSH_SETTING WHERE CODE='0001'"; List<Map<String, Object>> _json = ticket.getDB().queryBySql(__SQL); String IS_EXPRESSION=""; String EXPRESSION=""; String TIME="30"; if(_json.size()>0){ IS_EXPRESSION=_json.get(0).get("IS_EXPRESSION").toString();//是否启动表达式 EXPRESSION=_json.get(0).get("EXPRESSION").toString();//时间表达式 TIME=_json.get(0).get("IS_JG_TIME").toString();//间隔分钟 } //创建任务 Scheduler scheduler = getScheduler(); if(tool.ConvertHelper.ToBoolean(isStop)==false){ scheduler.shutdown();//停止调度 } if(tool.ConvertHelper.ToBoolean(isStop)==true){ JobDetail jobDetail = JobBuilder.newJob(WeiXinJob.class).withIdentity("weiXinJob", "WeiXinGroup").build(); //创建触发器 每3秒钟执行一次 if(tool.ConvertHelper.ToBoolean(IS_EXPRESSION)){ CronTrigger cronTrigger = TriggerBuilder.newTrigger().withIdentity("trigger1").withSchedule(CronScheduleBuilder.cronSchedule(EXPRESSION)).build(); //将任务及其触发器放入调度器 scheduler.scheduleJob(jobDetail, cronTrigger); } else{ Trigger trigger = TriggerBuilder.newTrigger().withIdentity("trigger1", "group3") .withSchedule(SimpleScheduleBuilder.simpleSchedule().withIntervalInMinutes(Integer.valueOf(TIME)).repeatForever()) // .withSchedule(SimpleScheduleBuilder.simpleSchedule().withIntervalInHours(100000).repeatForever()) //.withSchedule(SimpleScheduleBuilder.simpleSchedule().withIntervalInSeconds(10).repeatForever()) .build(); //将任务及其触发器放入调度器 scheduler.scheduleJob(jobDetail, trigger); } } //调度器开始调度任务 //scheduler.start(); if(tool.ConvertHelper.ToBoolean(isStop)){ // scheduler.shutdown();//停止调度 scheduler.start(); } // //创建任务 // JobDetail jobDetail = JobBuilder.newJob(WeiXinJob.class).withIdentity("weiXinJob", "WeiXinGroup").build(); // //创建触发器 每3秒钟执行一次 // Trigger trigger = TriggerBuilder.newTrigger().withIdentity("trigger1", "group3") // // .withSchedule(SimpleScheduleBuilder.simpleSchedule().withIntervalInMinutes(60).repeatForever()) // .withSchedule(SimpleScheduleBuilder.simpleSchedule().withIntervalInSeconds(10).repeatForever()) // .build(); // Scheduler scheduler = getScheduler(); // //将任务及其触发器放入调度器 // scheduler.scheduleJob(jobDetail, trigger); // //调度器开始调度任务 // scheduler.start(); //scheduler.shutdown();//停止调度 ///////////////////////////////////////////////// // JobDetail jobDetail = JobBuilder.newJob(WeiXinJob.class).withIdentity("weiXinJob").build(); // //cronTrigger // //每日的9点40触发任务 // CronTrigger cronTrigger = TriggerBuilder.newTrigger().withIdentity("cronTrigger").withSchedule(CronScheduleBuilder.cronSchedule("0 40 9 * * ? ")).build(); // //1.每日10点15分触发 0 15 10 ?* * // //2.每天下午的2点到2点59分(正点开始,隔5分触发) 0 0/5 14 * * ? // //3.从周一到周五每天的上午10点15触发 0 15 10 ? MON-FRI // //4.每月的第三周的星期五上午10点15触发 0 15 10 ? * 6#3 // //5.2016到2017年每月最后一周的星期五的10点15分触发 0 15 10 ? * 6L 2016-2017 // //Scheduler实例 // StdSchedulerFactory stdSchedulerFactory = new StdSchedulerFactory(); // Scheduler scheduler = stdSchedulerFactory.getScheduler(); // scheduler.start(); // scheduler.scheduleJob(jobDetail,cronTrigger); } // public static void main(String[] args) throws SchedulerException { // WeiXinScheduler mainScheduler = new WeiXinScheduler(); // mainScheduler.schedulerJob(); // } }
2.WeiXinJob.java
package com.jobs; import java.text.SimpleDateFormat; import java.util.Calendar; import java.util.Date; import java.util.List; import java.util.Map; import com.dcs.bapi.WeiXinMsg; import com.yd.edb.jdbc.IDGen; import com.yd.edb.ticket.Ticket; import org.openjdk.tools.javac.util.Convert; import org.quartz.Job; import org.quartz.JobExecutionContext; import org.quartz.JobExecutionException; import tool.ConvertHelper; import tool.DateTimeHelper; import static tool.ConvertHelper.StringToDate; public class WeiXinJob implements Job{ public void execute(JobExecutionContext context) throws JobExecutionException { SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd hh:mm:ss"); Ticket ticket=new Ticket(); try { //超期代码 //查询微信自动发送配置 String strw = String.format("SELECT * FROM DCS_MESSAGE_PUSH_SETTING WHERE IS_ENABLE='1' AND CODE='0001'"); List<Map<String, Object>> _listw = ticket.getDB().queryBySql(strw); if (_listw.size() > 0) { //调用发送微信通知的接口即可 String where = ""; String str = ""; String _str=""; //查询是否有开启的配置信息 String Field = " distinct DCS.ID,HR.ID as PERSON_ID,DCS.RMAN_DPT_NAME,DCS.RMAN_NAME,DCS.CNAME,DCS.LEVEL_NAME,DCS.LIMIT_TIME,HR.WEIXIN_ID,HR.ORGID,DATEDIFF(DAY,FIND_TIME ,GETDATE()) AS ADAY "; for (int i = 0; i < _listw.size(); i++) { String code = _listw.get(i).get("CODE").toString();//内码 String day = _listw.get(i).get("DAY").toString();//间隔多少天提醒 String ismany = _listw.get(i).get("IS_MANY").toString();//是否控制次数 String number = _listw.get(i).get("NUMBER").toString();//每天几次 String message=_listw.get(i).get("MESSAGE").toString();//消息模板 if(code.equals("0002")){ if(message.equals(null) || message.equals("")){ message="有一处隐患 [CNAME] 是 [LEVELNAME] 整改结束时间是 [LIMITTIME] 距离整改的结束时间还有 [TIME] 天 请及时整改处理"; } } if(code.equals("0001")){ if(message.equals(null) || message.equals("")){ message="有一处隐患 [CNAME] 是 [LEVELNAME] 整改结束时间是 [LIMITTIME] 已经超期 [TIME] 天 请及时处理"; } } String starttime=_listw.get(i).get("IS_START_TIME").toString();//开始时间 String now_time=tool.ConvertHelper.ToString(tool.DateTimeHelper.ToDateFormatString(tool.DateTimeHelper.Now(),"HH:mm:ss")); SimpleDateFormat formatter2 = new SimpleDateFormat("HH:mm:ss"); Date starttime2 =formatter2.parse(starttime);//开始时间 Date now_time2 =formatter2.parse(now_time);//现在时间 if(starttime2.getTime()>now_time2.getTime()){ continue; } //内码是0001 超期 代码 if (code.equals("0001")) { where = "DCS.STATUS_NAME !='已复查' AND DCS.LIMIT_TIME<'" + DateTimeHelper.ToDateFormatString(DateTimeHelper.Now(), "yyyy-MM-dd") + "' AND DCS.CORRECT_TYPE_NAME='限期整改'"; } //内码是0002 未整改 代码 if (code.equals("0002")) { where = "DCS.STATUS_NAME !='已复查'"; Field = " distinct DCS.ID,HR.ID as PERSON_ID,DCS.RMAN_DPT_NAME,DCS.RMAN_NAME,DCS.CNAME,DCS.LEVEL_NAME,DCS.LIMIT_TIME,HR.WEIXIN_ID,HR.ORGID,DATEDIFF(DAY,GETDATE(),FIND_TIME) AS ADAY "; } str = String.format("SELECT %s FROM DCS_ACCIDENT_POTENTIAL DCS LEFT JOIN HR_EMPLOYEE HR ON HR.ID=DCS.RMAN_ID WHERE %s", Field, where); List<Map<String, Object>> _list = ticket.getDB().queryBySql(str); //整改人发送 if (_list.size() > 0) { for (int j = 0; j < _list.size(); j++) { //判断 if (code.equals("0002")) { //是否临近超期时间 if (!_list.get(j).get("ADAY").toString().equals(day)) { continue; } } //是否开启多次 String nowtime = '%' + DateTimeHelper.ToDateFormatString(DateTimeHelper.Now(), "yyyy-MM-dd") + '%'; String countstr = String.format("SELECT * FROM DCS_WEIXIN_POST_MESSAGE WHERE Convert(varchar,CREATION_TIME,120) LIKE '%s' AND DCS_AP_ID='%s' and PERSON_ID='%s'", nowtime, _list.get(j).get("ID").toString(),tool.ConvertHelper.ToString(_list.get(j).get("PERSON_ID"))); List<Map<String, Object>> _listcountstr = ticket.getDB().queryBySql(countstr); if (ismany.equals("true")) { //如果发送的次数大于上限就跳出 if (_listcountstr.size() > Integer.valueOf(number)) { continue; } } //没有开启就发送一次 if (ismany.equals("false")) { //如果发送的次数等于1就跳出 if (_listcountstr.size() == 1) { continue; } } // String message = ""; // if (code.equals("0002")) { // message = "有一处隐患 @CNAME 是 @LEVELNAME 整改结束时间是 @LIMITTIME 距离整改的结束时间还有 @TIME 天 请及时整改处理"; // } // if (code.equals("0001")) { // message = "有一处隐患 @CNAME 是 @LEVELNAME 整改结束时间是 @LIMITTIME 已经超期 @TIME 天 请及时处理"; // } String _message=message; if(_list.get(j).get("CNAME").equals(null)){ _message= _message.replace("[CNAME]", ""); }else{ _message= _message.replace("[CNAME]", _list.get(j).get("CNAME").toString()); } if(tool.ConvertHelper.ToString(_list.get(j).get("RMAN_DPT_NAME")).equals("")){ _message= _message.replace("[RMANDPTNAME]", ""); }else{ _message= _message.replace("[RMANDPTNAME]", _list.get(j).get("RMAN_DPT_NAME").toString()); } if(tool.ConvertHelper.ToString(_list.get(j).get("RMAN_NAME")).equals("")){ _message= _message.replace("[RMANNAME]", ""); }else{ _message= _message.replace("[RMANNAME]", _list.get(j).get("RMAN_NAME").toString()); } boolean LIMIT_TIME=tool.ConvertHelper.ToString(_list.get(j).get("LIMIT_TIME")).equals(""); if(LIMIT_TIME){ _message= _message.replace("[LIMITTIME]", ""); }else{ _message= _message.replace("[LIMITTIME]", _list.get(j).get("LIMIT_TIME").toString().substring(0,10)); } String WEIXIN_ID=tool.ConvertHelper.ToString(_list.get(j).get("WEIXIN_ID")); if(WEIXIN_ID.equals("")){ WEIXIN_ID=""; } if(WEIXIN_ID.equals("")==false){ _message = _message.replace("[LEVELNAME]", _list.get(j).get("LEVEL_NAME").toString()).replace("[TIME]", _list.get(j).get("ADAY").toString()); ticket.getDB().execSql("insert into DCS_WEIXIN_POST_MESSAGE(ID,DCS_AP_ID,POST_MESSAGE,WEIXIN_ID,PERSON_ID,CREATION_TIME) values(?,?,?,?,?,?)", IDGen.getUUID(),_list.get(j).get("ID").toString(),_message,WEIXIN_ID,tool.ConvertHelper.ToString(_list.get(j).get("PERSON_ID")),sdf.format(new Date())); WeiXinMsg.fnSendWeiXinMsg(_list.get(j).get("ORGID").toString(),WEIXIN_ID,_message); } // message = message.replace("[CNAME]", _list.get(j).get("CNAME").toString()).replace("[LEVELNAME]", _list.get(j).get("LEVEL_NAME").toString()).replace("[LIMITTIME]", _list.get(j).get("LIMIT_TIME").toString()).replace("[TIME]", _list.get(j).get("ADAY").toString()); // // //ticket.getDB().execSql("insert into DCS_WEIXIN_POST_MESSAGE(ID,DCS_AP_ID,POST_MESSAGE,WEIXIN_ID,CREATION_TIME) values(?,?,?,?,?)", IDGen.getUUID(),_list.get(j).get("ID").toString(),message,_list.get(j).get("WEIXIN_ID").toString(),sdf.format(new Date())); // //WeiXinMsg.fnSendWeiXinMsg(_list.get(j).get("ORGID").toString(),_list.get(j).get("WEIXIN_ID").toString(),message); } } //管控人发送 _str=String.format("SELECT %s FROM DCS_ACCIDENT_POTENTIAL DCS LEFT JOIN HR_EMPLOYEE HR ON HR.ID=DCS.SUPERINTENDENT_MAN_ID WHERE %s", Field, where); List<Map<String, Object>> _listg = ticket.getDB().queryBySql(_str); if(_listg.size()>0) { for (int j = 0; j < _listg.size(); j++) { //判断 if (code.equals("0002")) { //是否临近超期时间 if (!_listg.get(j).get("ADAY").toString().equals(day)) { continue; } } //是否开启多次 String nowtimeg = '%' + DateTimeHelper.ToDateFormatString(DateTimeHelper.Now(), "yyyy-MM-dd") + '%'; String countstrg = String.format("SELECT * FROM DCS_WEIXIN_POST_MESSAGE WHERE Convert(varchar,CREATION_TIME,120) LIKE '%s' AND DCS_AP_ID='%s' and PERSON_ID='%s'", nowtimeg, _listg.get(j).get("ID").toString(), tool.ConvertHelper.ToString(_listg.get(j).get("PERSON_ID"))); List<Map<String, Object>> _listcountstrg = ticket.getDB().queryBySql(countstrg); if (ismany.equals("true")) { //如果发送的次数大于上限就跳出 if (_listcountstrg.size() > Integer.valueOf(number)) { continue; } } //没有开启就发送一次 if (ismany.equals("false")) { //如果发送的次数等于1就跳出 if (_listcountstrg.size() == 1) { continue; } } String _messageg=message; if (_listg.get(j).get("CNAME").equals(null)) { _messageg = _messageg.replace("[CNAME]", ""); } else { _messageg = _messageg.replace("[CNAME]", _listg.get(j).get("CNAME").toString()); } if(tool.ConvertHelper.ToString(_list.get(j).get("RMAN_DPT_NAME")).equals("")){ _messageg= _messageg.replace("[RMANDPTNAME]", ""); }else{ _messageg= _messageg.replace("[RMANDPTNAME]", _list.get(j).get("RMAN_DPT_NAME").toString()); } if(tool.ConvertHelper.ToString(_list.get(j).get("RMAN_NAME")).equals("")){ _messageg= _messageg.replace("[RMANNAME]", ""); }else{ _messageg= _messageg.replace("[RMANNAME]", _list.get(j).get("RMAN_NAME").toString()); } boolean LIMIT_TIME = tool.ConvertHelper.ToString(_listg.get(j).get("LIMIT_TIME")).equals(""); if (LIMIT_TIME) { _messageg = _messageg.replace("[LIMITTIME]", ""); } else { _messageg = _messageg.replace("[LIMITTIME]", _listg.get(j).get("LIMIT_TIME").toString().substring(0,10)); } String WEIXIN_IDG = tool.ConvertHelper.ToString(_listg.get(j).get("WEIXIN_ID")); if (WEIXIN_IDG.equals("")) { WEIXIN_IDG = ""; } if (WEIXIN_IDG.equals("") == false) { _messageg = _messageg.replace("[LEVELNAME]", _listg.get(j).get("LEVEL_NAME").toString()).replace("[TIME]", _listg.get(j).get("ADAY").toString()); ticket.getDB().execSql("insert into DCS_WEIXIN_POST_MESSAGE(ID,DCS_AP_ID,POST_MESSAGE,WEIXIN_ID,PERSON_ID,CREATION_TIME) values(?,?,?,?,?,?)", IDGen.getUUID(), _listg.get(j).get("ID").toString(),_messageg, WEIXIN_IDG, tool.ConvertHelper.ToString(_listg.get(j).get("PERSON_ID")), sdf.format(new Date())); WeiXinMsg.fnSendWeiXinMsg(_listg.get(j).get("ORGID").toString(),WEIXIN_IDG,_messageg); } } } } } } catch (Exception e){ }finally { ticket.Dispose(); } System.out.println(sdf.format(new Date())); } }