亚洲精品久久久久综合,卡一卡二卡三高清乱码网站,一边吃奶一边扎下边爽了,最近中文字幕完整版2018一页,国产经典三级av在线播放

價格不是我們的優(yōu)勢,品質(zhì)永遠是我們的追求!
當前位置:首頁行業(yè)快訊 > 如何用java實現(xiàn)觸發(fā)短信提醒
如何用java實現(xiàn)觸發(fā)短信提醒
來源:動力思維樂信  時間:2017-12-20 17:16

    如何用java實現(xiàn)觸發(fā)短信提醒?這個是很多利用短信接口要實現(xiàn)的一個功能,如一個監(jiān)控項目,其中當達到警告要求就要發(fā)送短信提醒,下面就介紹下具體的實現(xiàn)步驟,和接入的時部分代碼供大家參考:

    首先需要注冊動力思維樂信短信接口平臺賬號,注冊地址:http://www.iium.cn/acc/x5?i=110792

    其次,完善該賬戶企業(yè)信息,申請sdk接口試用。

    第三,就是下載樂信短信接口的API文檔和對應(yīng)語言的demo示例,然后進行對接。

    最后,就是進行測試。

    下面是有關(guān)短信接口接入的部分代碼示例,供大家參考。

    1、通過定時任務(wù)對要監(jiān)控的項目進行定時掃描通知

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(){
		
		//查詢所有可用的監(jiān)控項目
		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);//發(fā)送短信通知
				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);
	}
	調(diào)用第三方接口發(fā)送短信通知
	/**
	 * 調(diào)用第三方接口發(fā)送短信通知
	 * @param accName 第三方接口用戶名
	 * @param accPwd 第三方接口密碼
	 * @param seed 當前時間 格式:YYYYMMDD HHMISS 例如:20130806102030
	 * @param aimcodes 手機號多個手機號之間英文半角逗號隔開
	 * @param content 內(nèi)容后加簽名
	 * @param schTime 定時時間格式如:2010-01-01 08:00:00
	 * @return 服務(wù)端返回的結(jié)果 ok:業(yè)務(wù)id 或者 錯誤代碼
	 */
	private String sendNotice(JkList jkItem,String scanResult,String accName,String accPwd,String schTime){
		StringBuffer sb = new StringBuffer("https://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轉(zhuǎn)換
			sb.append("&content="+URLEncoder.encode(scanResult,"UTF-8")); //中文做encode轉(zhuǎn)換
			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、具體監(jiān)控類實現(xiàn)代碼如下

    /**實現(xiàn)類代碼如下:

    *這是對通道一定時間內(nèi)數(shù)據(jù)數(shù)的監(jiān)控

    *在特定時間內(nèi)超過特定值達到次數(shù)要求就會觸發(fā)發(fā)送短信通知

    *

    */

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;

	/**
	 * 即時隊列通道數(shù)據(jù)掃描
	 * @param jkItem 監(jiān)控項目
	 */

	@Override
	public String scan(JkList jkItem) {
		String scanResult=null;
		StringBuffer sbf = new StringBuffer();
		
		List<HashMap<String, Object>> slist =smsQueueMapper.selectByExample2();//有效通道 即時隊列數(shù)集合
		//查詢	
		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){
				//觸發(fā)通知,發(fā)送短信	
				scanResult= statusMap.get("GCHNAME")+"通道,1分鐘內(nèi)即時隊列數(shù)據(jù)無變化,請關(guān)注處理##";
				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 {
	
	/**
	 * 判斷上次掃描是否結(jié)束
	 * @param lock
	 * @param jkItem
	 * @return
	 */
	public boolean hasFinish(JkList jkItem);
	
	/**
	 * 結(jié)束掃描
	 * @param lock
	 * @param jkItem
	 */
	public void finishItem(JkList jkItem);
	
	/**
	 * 是否需要掃描
	 * @param jkItem 監(jiān)控項目
	 * @return true 為需要
	 */
	public boolean needScan(JkList jkItem);
	
	/**
	 * 是否需要通知
	 * @param jkItem
	 * @return 
	 */
	public boolean needNotice(JkList jkItem,String scanResult);
	
	
	/**
	 * 掃描
	 * @param jkItem
	 * @return 如果不需要通知返回null 否則返回通知內(nèi)容
	 */
	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();
	}
	/**
	 * 是否需要掃描 默認實現(xiàn)為掃描間隔達到上次掃描時間后
	 * @param jkItem 監(jiān)控項目
	 * @return true 為需要
	 */
	public boolean needScan(JkList jkItem){
		return System.currentTimeMillis()-jkItem.getFlastScanTime().getTime()>jkItem.getFcron().doubleValue()*1000;
	}
	
	/**
	 * 是否需要通知 默認實現(xiàn)為達到通知間隔,且掃描結(jié)果為需要通知,通知時間符合當前時間
	 * @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方法以及構(gòu)造函數(shù)就不放了,可以根據(jù)自己業(yè)務(wù)需要設(shè)置類

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;//監(jiān)控名稱

    private BigDecimal fcron;//監(jiān)控頻率

    private BigDecimal ftzjg;//通知間隔時間

    private String fnoticeRole;// 通知角色

    private String ftitle;//標題

    private String fnoticeType;//通知類型

    private String fnoticeTime;//通知時間

    private String fclassname;//監(jiān)控實現(xiàn)類

    private Date flastnottime;//最后通知時間

    private String fcreateuser;

    private Date fcreatedate;

    private BigDecimal forder;

    private Date flastScanTime;