当前位置:主页 > 行业快报 >

『短信发送』如何用java实现触发短信提醒

日期:编辑:小编

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

首先需要注册518通讯518通讯短信接口平台账号,注册地址:

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

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

最后,就是进行测试。

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

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

packagecom.jeeplus.modules.jk.service;importjava.util.Date;importjava.util.HashSet;importjava.util.List;importjava.util.Set;importme.chanjar.weixin.cp.bean.WxCpMessage.Textcard;importorg.apache.log4j.Logger;importorg.springframework.beans.factory.annotation.Autowired;importorg.springframework.context.annotation.Lazy;importorg.springframework.scheduling.annotation.Scheduled;importorg.springframework.stereotype.Service;importcom.jeeplus.common.utils.IdGen;importcom.jeeplus.common.utils.SpringContextHolder;importcom.jeeplus.modules.jk.dao.JkListMapper;importcom.jeeplus.modules.jk.dao.JkNoticeLogMapper;importcom.jeeplus.modules.jk.entity.JkList;importcom.jeeplus.modules.jk.entity.JkNoticeLog;@Service@Lazy(false)publicclassDlswScanService{@AutowiredprivateJkListMapperjkListMapper;@AutowiredprivateJkNoticeLogMapperjkNoticeLogMapper;privatefinalstaticLoggerLOGGER=Logger.getLogger(DlswScanService.class);@Scheduled(cron=0/3****?)publicvoidscan(){//查询所有可用的监控项目ListJkListjkList=jkListMapper.selectByExample(null);for(JkListjkItem:jkList){DlswJkInterfacedjsDlswJkInterface=SpringContextHolder.getBean(jkItem.getFclassname());LOGGER.info(scan:+jkItem.getFname()+begin);if(djsDlswJkInterface==null){//如果得不到实例LOGGER.info(scan:+jkItem.getFname()+cantgetInstance);continue;}if(!djsDlswJkInterface.hasFinish(jkItem)){//如果上次未完成LOGGER.info(scan:+jkItem.getFname()+didntfinish);continue;}JkListjkList2=newJkList();jkList2.setFid(jkItem.getFid());StringscanResult=null;//需要扫描的项目if(djsDlswJkInterface.needScan(jkItem)){LOGGER.info(scan:+jkItem.getFname()+scanBegin);scanResult=djsDlswJkInterface.scan(jkItem);jkList2.setFlastScanTime(newDate());LOGGER.info(scan:+jkItem.getFname()+scanfisnish:+scanResult);}//需要通知if(djsDlswJkInterface.needNotice(jkItem,scanResult)){StringnoticeResult=sendNotice(jkItem,scanResult);//发送短信通知LOGGER.info(scan:+jkItem.getFname()+sendNoticefisnish:+noticeResult);jkList2.setFlastnottime(newDate());saveNoticeLog(jkItem,noticeResult,scanResult);//保存通知日志}jkListMapper.updateByPrimaryKeySelective(jkList2);LOGGER.info(scan:+jkItem.getFname()+end);}}//保存通知日志privatevoidsaveNoticeLog(JkListjkItem,StringnoticeResult,StringscanResult){JkNoticeLogjkNoticeLog=newJkNoticeLog();jkNoticeLog.setFid(IdGen.uuid());jkNoticeLog.setFlistId(jkItem.getFid());jkNoticeLog.setFnoticeContent(scanResult);jkNoticeLog.setFnoticeDate(newDate());jkNoticeLog.setFnoticeResult(noticeResult!=null?0:1);jkNoticeLog.setFnoticeMsg(noticeResult);jkNoticeLog.setFnoticeUser(jkItem.getFnoticeRole());jkNoticeLog.setFnoticeType(jkItem.getFnoticeType());jkNoticeLogMapper.insert(jkNoticeLog);}调用第三方接口发送短信通知/***调用第三方接口发送短信通知*@paramaccName第三方接口用户名*@paramaccPwd第三方接口密码*@paramseed当前时间格式:YYYYMMDDHHMISS例如:20130806102030*@paramaimcodes手机号多个手机号之间英文半角逗号隔开*@paramcontent内容后加签名*@paramschTime定时时间格式如:2010-01-0108:00:00*@return服务端返回的结果ok:业务id或者错误代码*/privateStringsendNotice(JkListjkItem,StringscanResult,StringaccName,StringaccPwd,StringschTime){StringBuffersb=newStringBuffer(http://sdk.lx198.com/sdk/send2?);try{//获得要通知角色的电话号码Stringrole=jkItem.getFnoticeRole();ListUseruser=userDao.findByRoleCode(role);accName=user.getAccMob();Stringroles=jkItem.getFnoticeRole();String[]roleArr=roles.split(,);SetUseruserSet=newHashSetUser();for(Stringrole:roleArr){userSet.addAll(userDao.findByRoleCode(role));}StringBuffersb=newStringBuffer();for(Useruser:userSet){sb.append(user.getAccMob()).append(,);}Stringseed=newSimpleDateFormat(dateFormatStr).format(newDate());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转换URLurl=newURL(sb.toString());HttpURLConnectionconnection=(HttpURLConnection)url.openConnection();connection.setRequestMethod(POST);BufferedReaderin=newBufferedReader(newInputStreamReader(url.openStream()));returnin.readLine();}catch(Exceptione){e.printStackTrace();}returnnull;}}

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

/**实现类代码如下:

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

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

*

*/

packagecom.jeeplus.modules.jk.service.imp;importjava.util.HashMap;importjava.util.List;importorg.springframework.beans.factory.annotation.Autowired;importorg.springframework.stereotype.Service;importcom.jeeplus.modules.jk.dao.SmsQueueMapper;importcom.jeeplus.modules.jk.entity.JkList;importcom.jeeplus.modules.jk.service.DlswJkAbstractImp;importcom.jeeplus.modules.jk.service.DlswJkInterface;importcom.jeeplus.modules.jk.service.DlswJkSysConfService;@ServicepublicclassDlswJkRealTimeQueueImpextendsDlswJkAbstractImpimplementsDlswJkInterface{privatestaticHashMapString,IntegergchHashMap=newHashMapString,Integer();privatestaticHashMapString,LonggchHashLastTimeMap=newHashMapString,Long();@AutowiredprivateDlswJkSysConfServicedlswJkSysConfService;@AutowiredprivateSmsQueueMappersmsQueueMapper;/***即时队列通道数据扫描*@paramjkItem监控项目*/@OverridepublicStringscan(JkListjkItem){StringscanResult=null;StringBuffersbf=newStringBuffer();ListHashMapString,Objectslist=smsQueueMapper.selectByExample2();//有效通道即时队列数集合//查询intConfvalue=dlswJkSysConfService.getSysConf1(RQ_COUNT);intredCount=dlswJkSysConfService.getSysConf1(RED_COUNT);for(HashMapString,ObjectstatusMap:slist){intrecordCount=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);}}returnsbf.toString();}}

3、短信接口

packagecom.jeeplus.modules.jk.service;importorg.springframework.stereotype.Service;importcom.jeeplus.modules.jk.entity.JkList;@ServicepublicinterfaceDlswJkInterface{/***判断上次扫描是否结束*@paramlock*@paramjkItem*@return*/publicbooleanhasFinish(JkListjkItem);/***结束扫描*@paramlock*@paramjkItem*/publicvoidfinishItem(JkListjkItem);/***是否需要扫描*@paramjkItem监控项目*@returntrue为需要*/publicbooleanneedScan(JkListjkItem);/***是否需要通知*@paramjkItem*@return*/publicbooleanneedNotice(JkListjkItem,StringscanResult);/***扫描*@paramjkItem*@return如果不需要通知返回null否则返回通知内容*/publicStringscan(JkListjkItem);}//判断是否需要扫描或通知packagecom.jeeplus.modules.jk.service;importjava.util.Date;importjava.util.concurrent.locks.ReentrantLock;importcom.jeeplus.modules.jk.entity.JkList;importcom.jeeplus.modules.jk.utils.NoticeUtil;publicabstractclassDlswJkAbstractImpimplementsDlswJkInterface{protectedReentrantLocklock=newReentrantLock();publicbooleanhasFinish(JkListjkItem){returnlock.tryLock();}publicvoidfinishItem(JkListjkItem){lock.unlock();}/***是否需要扫描默认实现为扫描间隔达到上次扫描时间后*@paramjkItem监控项目*@returntrue为需要*/publicbooleanneedScan(JkListjkItem){returnSystem.currentTimeMillis()-jkItem.getFlastScanTime().getTime()jkItem.getFcron().doubleValue()*1000;}/***是否需要通知默认实现为达到通知间隔,且扫描结果为需要通知,通知时间符合当前时间*@paramjkItem*@return*/publicbooleanneedNotice(JkListjkItem,StringscanResult){returnscanResult!=nullSystem.currentTimeMillis()-jkItem.getFlastnottime().getTime()jkItem.getFtzjg().doubleValue()*1000NoticeUtil.isNoticeTime(newDate(),jkItem);}}

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

packagecom.jeeplus.modules.jk.entity;importjava.io.Serializable;importjava.math.BigDecimal;importjava.util.Date;publicclassJkListimplementsSerializable{privateStringfid;privateStringfname;//监控名称privateBigDecimalfcron;//监控频率privateBigDecimalftzjg;//通知间隔时间privateStringfnoticeRole;//通知角色privateStringftitle;//标题privateStringfnoticeType;//通知类型privateStringfnoticeTime;//通知时间privateStringfclassname;//监控实现类privateDateflastnottime;//最后通知时间privateStringfcreateuser;privateDatefcreatedate;privateBigDecimalforder;privateDateflastScanTime;

本文标签: 触发 短信发送 如何用

相关阅读

  • 做短信接口的公司

  • 网站或app通过调用短信接口可以实现手机短信验证功能和发送各种短信通知功能,目前几乎所有的网站或app都有调用短信接口,因此短信接口需求很大,市场上做短信接口的公司也很多...
  • 短信网关接口是什么

  • 现在网站、app或各种软件系统都拥有短信功能,常见的如发送短信验证码,发送通知提醒短信等,这些短信功能的实现都需要用到短信网关接口才能实现,那么短信网关接口是什么呢?...
  • 订票短信通知是如何实现的

  • 互联网的快速发展,让我们的生活越来越便利,以前买票必须到售票点,现在在电脑和手机上就可以了,并且订完票后,还会自动发送一个订票通知短信,那么订票系统是如何实现自动...
  • 接收触发短信收费吗

  • 生活中手机经常会接收到各种各样的触发短信,如去银行自动取款机取钱后往往会收到一条提醒短信,或者当我们在一些网站或app上注册的帐户有异常的时候也会收到短信提醒,那么这...
  • 短信验证码平台的接口怎么快速接入

  • 短信验证现在几乎成为了互联网产品的标配,如网站或app应用的用户注册、密码找回、安全登录等都需要用到,网站或app要想实现短信验证功能,就需要接入短信验证码平台的接口,那...

热门文章

  • 做短信接口的公司

  • 网站或app通过调用短信接口可以实现手机短信验证功能和发送各种短信通知功能,目前几乎所...
  • 短信网关接口是什么

  • 现在网站、app或各种软件系统都拥有短信功能,常见的如发送短信验证码,发送通知提醒短信...
  • 订票短信通知是如何实现的

  • 互联网的快速发展,让我们的生活越来越便利,以前买票必须到售票点,现在在电脑和手机上...
  • 接收触发短信收费吗

  • 生活中手机经常会接收到各种各样的触发短信,如去银行自动取款机取钱后往往会收到一条提...