• 永不沉没的泰坦尼克号工程开工仪式举行(一) 2019-08-19
  • 今年回南天为何掉线了?这其实并不奇怪 2019-08-19
  • 政能亮政府服务,当好“店小二”而非“二大爷” 2019-08-16
  • 女性之声——全国妇联 2019-08-16
  • 人傻有人爱,人聪明有人恨,人愚笨有人笑,人痴有人关心,不是每个人的命运都一样的 2019-08-11
  • 人民的力量——一份大报,与一个大党、一个大国的故事 2019-08-05
  • 中华人民共和国建筑法 2019-08-05
  • 转方式调结构显现阶段性成果(读数·发现经济运行的轨迹) 2019-08-02
  • 一语惊坛(6月8日):友谊勋章是给国际友人的最高荣誉。 2019-08-02
  • 《红海行动》出征中美电影节 2019-07-28
  • 发挥自身优势 奋力走在前列——习近平总书记在山东考察回访记 2019-07-28
  • 民生时评:上海支付宝回收垃圾并不现实(原创首发) 2019-07-28
  • 俺发现你还真是踩云的人。找不到谱。 2019-07-28
  • 12306网站用户信息外泄?铁总深夜“辟谣” 2019-07-25
  • 端午节期间 拉萨至日喀则增开列车 2019-07-24
  • 价格不是我们的优势,品质永远是我们的追求!
    当前位置:北京11选五和值走势图行业快讯 > 如何用java实现触发短信提醒
    如何用java实现触发短信提醒
    来源:北京11选五和值走势图  时间:2017-12-20 17:16

    北京11选五和值走势图 www.tqjw.net     如何用java实现触发短信提醒?这个是很多利用北京11选五和值走势图要实现的一个功能,如一个监控项目,其中当达到警告要求就要发送短信提醒,下面就介绍下具体的实现步骤,和接入的时部分代码供大家参考:

        首先需要注册动力思维乐信短信接口平台账号,注册地址://www.tqjw.net/acc/x5?i=110792

        其次,完善该账户企业信息,申请sdk接口试用。

        第三,就是下载乐信短信接口的API文档和对应语言的demo示例,然后进行对接。

        最后,就是进行测试。

        下面是有关短信接口接入的部分代码示例,供大家参考。

        1、通过定时任务对要监控的项目进行定时扫描通知

    package com.jeeplus.modules.jk.service;
    
    import java.util.Date;
    import java.util.HashSet;
    import java.util.List;
    import java.util.Set;
    import me.chanjar.weixin.cp.bean.WxCpMessage.Textcard;
    import org.apache.log4j.Logger;
    import org.springframework.beans.factory.annotation.Autowired;
    import org.springframework.context.annotation.Lazy;
    import org.springframework.scheduling.annotation.Scheduled;
    import org.springframework.stereotype.Service;
    import com.jeeplus.common.utils.IdGen;
    import com.jeeplus.common.utils.SpringContextHolder;
    import com.jeeplus.modules.jk.dao.JkListMapper;
    import com.jeeplus.modules.jk.dao.JkNoticeLogMapper;
    import com.jeeplus.modules.jk.entity.JkList;
    import com.jeeplus.modules.jk.entity.JkNoticeLog;
    
    @Service
    @Lazy(false)
    public class DlswScanService {
    	@Autowired
    	private JkListMapper jkListMapper;
    	@Autowired
    	private JkNoticeLogMapper jkNoticeLogMapper;
    
    	private final static Logger LOGGER=Logger.getLogger(DlswScanService.class);
    	
    	@Scheduled(cron = "0/3 * * * * ?")
    	public void scan(){
    		
    		//查询所有可用的监控项目
    		List<JkList> jkList=jkListMapper.selectByExample(null);
    		for(JkList jkItem:jkList){
    			DlswJkInterface djsDlswJkInterface=SpringContextHolder.getBean(jkItem.getFclassname());
    			LOGGER.info("scan:"+jkItem.getFname()+" begin");
    			
    			if(djsDlswJkInterface==null){//如果得不到实例
    				LOGGER.info("scan:"+jkItem.getFname()+" can't getInstance");
    				continue;
    			}
    			if(!djsDlswJkInterface.hasFinish(jkItem)){//如果上次未完成 
    				LOGGER.info("scan:"+jkItem.getFname()+" didn't finish");
    				continue;
    			}
    			JkList jkList2=new JkList();
    			jkList2.setFid(jkItem.getFid());
    			String scanResult=null;
    			//需要扫描的项目
    			if(djsDlswJkInterface.needScan(jkItem)){
    				LOGGER.info("scan:"+jkItem.getFname()+" scanBegin");
    				scanResult=djsDlswJkInterface.scan(jkItem);
    				jkList2.setFlastScanTime(new Date());
    				LOGGER.info("scan:"+jkItem.getFname()+" scan fisnish :"+scanResult);
    			}
    			//需要通知
    			if(djsDlswJkInterface.needNotice(jkItem, scanResult)){
    				String noticeResult=sendNotice(jkItem, scanResult);//发送短信通知
    				LOGGER.info("scan:"+jkItem.getFname()+" sendNotice fisnish:"+noticeResult);
    				jkList2.setFlastnottime(new Date());
    				saveNoticeLog(jkItem,noticeResult,scanResult);//保存通知日志
    			}
    			jkListMapper.updateByPrimaryKeySelective(jkList2);
    			LOGGER.info("scan:"+jkItem.getFname()+" end");
    		}
    		
    	}
    	//保存通知日志
    	private void saveNoticeLog(JkList jkItem, String noticeResult,
    			String scanResult) {
    		JkNoticeLog jkNoticeLog = new JkNoticeLog();
    		jkNoticeLog.setFid(IdGen.uuid());
    		jkNoticeLog.setFlistId(jkItem.getFid());
    		jkNoticeLog.setFnoticeContent(scanResult);
    		jkNoticeLog.setFnoticeDate(new Date());
    		jkNoticeLog.setFnoticeResult(noticeResult!=null?"0":"1");
    		jkNoticeLog.setFnoticeMsg(noticeResult);
    		jkNoticeLog.setFnoticeUser(jkItem.getFnoticeRole());
    		jkNoticeLog.setFnoticeType(jkItem.getFnoticeType());
    		jkNoticeLogMapper.insert(jkNoticeLog);
    	}
    	调用第三方接口发送短信通知
    	/**
    	 * 调用第三方接口发送短信通知
    	 * @param accName 第三方接口用户名
    	 * @param accPwd 第三方接口密码
    	 * @param seed 当前时间 格式:YYYYMMDD HHMISS 例如:20130806102030
    	 * @param aimcodes 手机号多个手机号之间英文半角逗号隔开
    	 * @param content 内容后加签名
    	 * @param schTime 定时时间格式如:2010-01-01 08:00:00
    	 * @return 服务端返回的结果 ok:业务id 或者 错误代码
    	 */
    	private String sendNotice(JkList jkItem,String scanResult,String accName,String accPwd,String schTime){
    		StringBuffer sb = new StringBuffer("//sdk.lx198.com/sdk/send2?");
    		try {
    			//获得要通知角色的电话号码
    			String role=jkItem.getFnoticeRole();
    			List<User> user = userDao.findByRoleCode(role);
    			accName = user.getAccMob();
    			String roles=jkItem.getFnoticeRole();
    			String[] roleArr=roles.split(",");
    			Set<User> userSet=new HashSet<User>();
    			for(String role:roleArr){
    				userSet.addAll(userDao.findByRoleCode(role));
    				}
    			StringBuffer sb=new StringBuffer();
    			for(User user:userSet){
    				sb.append(user.getAccMob()).append(",");
    			}
    
    			String seed=new SimpleDateFormat(dateFormatStr).format(new Date());
    			sb.append("&accName="+accName); 
    			sb.append("&seed="+seed);
    			sb.append("&accPwd="+MD5.getMd5String(MD5.getMd5String(accPwd)+seed)); 
    			sb.append("&aimcodes="+sb.toString());
    			sb.append("&schTime="+URLEncoder.encode(schTime,"UTF-8")); //空格标点符号做encode转换
    			sb.append("&content="+URLEncoder.encode(scanResult,"UTF-8")); //中文做encode转换
    			URL url = new URL(sb.toString());
    			HttpURLConnection connection = (HttpURLConnection) url.openConnection();
    			connection.setRequestMethod("POST");
    			BufferedReader in = new BufferedReader(new InputStreamReader(url.openStream()));
    			return in.readLine();
    		} catch (Exception e) {
    			e.printStackTrace();
    		}
    		return null;
    	}		
    
    }

        2、具体监控类实现代码如下

        /**实现类代码如下:

        *这是对通道一定时间内数据数的监控

        *在特定时间内超过特定值达到次数要求就会触发发送短信通知

        *

        */

    package com.jeeplus.modules.jk.service.imp;
    
    import java.util.HashMap;
    import java.util.List;
    import org.springframework.beans.factory.annotation.Autowired;
    import org.springframework.stereotype.Service;
    import com.jeeplus.modules.jk.dao.SmsQueueMapper;
    import com.jeeplus.modules.jk.entity.JkList;
    import com.jeeplus.modules.jk.service.DlswJkAbstractImp;
    import com.jeeplus.modules.jk.service.DlswJkInterface;
    import com.jeeplus.modules.jk.service.DlswJkSysConfService;
    @Service
    public class DlswJkRealTimeQueueImp  extends DlswJkAbstractImp implements DlswJkInterface {
    
    	private static HashMap<String,Integer> gchHashMap=new  HashMap<String, Integer>();
    	private static HashMap<String,Long> gchHashLastTimeMap=new  HashMap<String,Long>();
    	
    	@Autowired
    	private DlswJkSysConfService dlswJkSysConfService;
    	
    	@Autowired
    	private SmsQueueMapper smsQueueMapper;
    
    	/**
    	 * 即时队列通道数据扫描
    	 * @param jkItem 监控项目
    	 */
    
    	@Override
    	public String scan(JkList jkItem) {
    		String scanResult=null;
    		StringBuffer sbf = new StringBuffer();
    		
    		List<HashMap<String, Object>> slist =smsQueueMapper.selectByExample2();//有效通道 即时队列数集合
    		//查询	
    		int Confvalue  = dlswJkSysConfService.getSysConf1("RQ_COUNT");
    		int redCount  = dlswJkSysConfService.getSysConf1("RED_COUNT");	
    		
    		for (HashMap<String, Object> statusMap : slist) {
    			int recordCount = gchHashMap.get(String.valueOf(statusMap.get("GCHID"))==null?0:Integer.parseInt(String.valueOf(statusMap.get("GCHID"))));
    			if(Integer.parseInt(statusMap.get("QUEUECOUNT").toString())>=Confvalue){
    				if(!gchHashLastTimeMap.containsKey(String.valueOf(statusMap.get("GCHID")))){
    					gchHashLastTimeMap.put(String.valueOf(statusMap.get("GCHID")), System.currentTimeMillis());
    				}
    				recordCount++;
    				gchHashMap.put(String.valueOf(statusMap.get("GCHID")),recordCount);
    			}else{
    				recordCount = 0;
    				gchHashLastTimeMap.remove(String.valueOf(statusMap.get("GCHID")));
    				gchHashMap.put(String.valueOf(statusMap.get("GCHID")),recordCount);
    				continue;
    			}
    			
    			if(recordCount>=redCount&&(System.currentTimeMillis()-gchHashLastTimeMap.get(String.valueOf(statusMap.get("GCHID"))))>60*1000){
    				//触发通知,发送短信	
    				scanResult= statusMap.get("GCHNAME")+"通道,1分钟内即时队列数据无变化,请关注处理##";
    				sbf.append(scanResult);
    			}	
    		}
    		return sbf.toString();
    	}	
    }

        3、短信接口

    package com.jeeplus.modules.jk.service;
    import org.springframework.stereotype.Service;
    import com.jeeplus.modules.jk.entity.JkList;
    
    @Service
    public interface DlswJkInterface {
    	
    	/**
    	 * 判断上次扫描是否结束
    	 * @param lock
    	 * @param jkItem
    	 * @return
    	 */
    	public boolean hasFinish(JkList jkItem);
    	
    	/**
    	 * 结束扫描
    	 * @param lock
    	 * @param jkItem
    	 */
    	public void finishItem(JkList jkItem);
    	
    	/**
    	 * 是否需要扫描
    	 * @param jkItem 监控项目
    	 * @return true 为需要
    	 */
    	public boolean needScan(JkList jkItem);
    	
    	/**
    	 * 是否需要通知
    	 * @param jkItem
    	 * @return 
    	 */
    	public boolean needNotice(JkList jkItem,String scanResult);
    	
    	
    	/**
    	 * 扫描
    	 * @param jkItem
    	 * @return 如果不需要通知返回null 否则返回通知内容
    	 */
    	public String scan(JkList jkItem);
    	
    }
    
    // 判断是否需要扫描或通知
    package com.jeeplus.modules.jk.service;
    
    import java.util.Date;
    import java.util.concurrent.locks.ReentrantLock;
    import com.jeeplus.modules.jk.entity.JkList;
    import com.jeeplus.modules.jk.utils.NoticeUtil;
    
    public abstract class DlswJkAbstractImp implements DlswJkInterface{
    	
    	protected ReentrantLock lock=new ReentrantLock();
    
    	
    	public boolean hasFinish(JkList jkItem){
    		return lock.tryLock();
    	}
    	
    	public void finishItem(JkList jkItem){
    		lock.unlock();
    	}
    	/**
    	 * 是否需要扫描 默认实现为扫描间隔达到上次扫描时间后
    	 * @param jkItem 监控项目
    	 * @return true 为需要
    	 */
    	public boolean needScan(JkList jkItem){
    		return System.currentTimeMillis()-jkItem.getFlastScanTime().getTime()>jkItem.getFcron().doubleValue()*1000;
    	}
    	
    	/**
    	 * 是否需要通知 默认实现为达到通知间隔,且扫描结果为需要通知,通知时间符合当前时间
    	 * @param jkItem
    	 * @return 
    	 */
    	public boolean needNotice(JkList jkItem,String scanResult){
    		return scanResult!=null&&System.currentTimeMillis()-jkItem.getFlastnottime().getTime()>jkItem.getFtzjg().doubleValue()*1000&&NoticeUtil.isNoticeTime(new Date(),jkItem);
    	}	
    	
    }

        4、//只列举jklist类的属性,get,set方法以及构造函数就不放了,可以根据自己业务需要设置类

    package com.jeeplus.modules.jk.entity;
    
    import java.io.Serializable;
    import java.math.BigDecimal;
    import java.util.Date;
    
    public class JkList implements Serializable {
        private String fid;
    
        private String fname;//监控名称
    
        private BigDecimal fcron;//监控频率
    
        private BigDecimal ftzjg;//通知间隔时间
    
        private String fnoticeRole;// 通知角色
    
        private String ftitle;//标题
    
        private String fnoticeType;//通知类型
    
        private String fnoticeTime;//通知时间
    
        private String fclassname;//监控实现类
    
        private Date flastnottime;//最后通知时间
    
        private String fcreateuser;
    
        private Date fcreatedate;
    
        private BigDecimal forder;
    
        private Date flastScanTime;

     

  • 永不沉没的泰坦尼克号工程开工仪式举行(一) 2019-08-19
  • 今年回南天为何掉线了?这其实并不奇怪 2019-08-19
  • 政能亮政府服务,当好“店小二”而非“二大爷” 2019-08-16
  • 女性之声——全国妇联 2019-08-16
  • 人傻有人爱,人聪明有人恨,人愚笨有人笑,人痴有人关心,不是每个人的命运都一样的 2019-08-11
  • 人民的力量——一份大报,与一个大党、一个大国的故事 2019-08-05
  • 中华人民共和国建筑法 2019-08-05
  • 转方式调结构显现阶段性成果(读数·发现经济运行的轨迹) 2019-08-02
  • 一语惊坛(6月8日):友谊勋章是给国际友人的最高荣誉。 2019-08-02
  • 《红海行动》出征中美电影节 2019-07-28
  • 发挥自身优势 奋力走在前列——习近平总书记在山东考察回访记 2019-07-28
  • 民生时评:上海支付宝回收垃圾并不现实(原创首发) 2019-07-28
  • 俺发现你还真是踩云的人。找不到谱。 2019-07-28
  • 12306网站用户信息外泄?铁总深夜“辟谣” 2019-07-25
  • 端午节期间 拉萨至日喀则增开列车 2019-07-24
  • 新得利真人龙虎斗 甘肃快三软件 山西今天福彩快乐十分 广东省彩票中心在哪里 139期快乐双彩开奖结果 海南四码彩票賠率 排球少年第二季网盘 急速赛车 福建36选7开奖结果18068 贝西克塔VS里昂分析 排列3玩法 内蒙古快3开奖直播 六肖中特期期准王中+王皇中皇 河南22选5开奖走势图1 赛车竞猜是诈骗吗