⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 smsfwdthread.java

📁 短信
💻 JAVA
字号:
package com.asiainfo.batchsend.sms.sms;

import java.util.ArrayList;
import java.util.List;

import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;

import com.asiainfo.batchsend.sms.sms.db.SmsFwLoadSvc;
import com.asiainfo.batchsend.util.SmsUtil;
import com.asiainfo.batchsend.sms.sms.cmpp.CMPP_Service;
import com.asiainfo.batchsend.sms.sms.cmpp.message.SubmitMsg;
import com.asiainfo.batchsend.sms.sms.cmpp.type.CMPP2;
import com.asiainfo.batchsend.sms.sms.cmpp.type.CMPP3;
import com.asiainfo.batchsend.sms.sms.cmpp.type.CMPP_DR;
import com.asiainfo.batchsend.sms.sms.cmpp.type.CMPP_HW;
import com.asiainfo.batchsend.sms.sms.cmpp.type.CMPP_SX;
import com.asiainfo.batchsend.sms.sms.cmpp.type.CMPP_YX;

   
/**
 * <p>Title: 转发线程,没有多大的用处</p>
 * <p>Description: </p>
 * <p>Company: Asiainfo Technologies(China),Inc </p>
 * <p>Date: Dec 19, 2007 5:44:19 PM </p>
 * <p>Email to: jiangyl@asiainfo.com </p>
 * @author jiangyl
 * @version 1.0  
 */

public class SmsFwdThread extends Thread {
	private static final Log log = LogFactory.getLog(SmsFwdThread.class);
	private CMPP_Service cmpp=null;
	private SmsChannelConfig config = null; 
	private int verson = 0;
	private String channelId ;
	private boolean safeExit = false;
	
	public void safeExit() {
		this.safeExit = true;
	}
	
	public SmsFwdThread(String channelId) {
		super("SMS-SmsFwdThread");
		this.channelId = channelId;
	    //从配置文件中获取 网关类型
		config = SmsUtil.getSmsConfig(channelId);
		String gatewaytype = config.getGatewaytype().trim();
		if(gatewaytype.equals("CMPP2")){
			this.cmpp = new CMPP2();
			this.verson = 0x20;
		} else if(gatewaytype.equals("CMPP3")){
			this.cmpp = new CMPP3();
			this.verson = 0x30;
		} else if(gatewaytype.equals("DR")){
			this.cmpp = new CMPP_DR();
			this.verson = 0x12;
		} else if(gatewaytype.equals("YX")){
			this.cmpp = new CMPP_YX();
			this.verson = 0x30;
		} else if(gatewaytype.equals("HW")){
			this.cmpp = new CMPP_HW();
			this.verson = 0x30;
		} else if(gatewaytype.equals("SX")){
			this.cmpp = new CMPP_SX();
			this.verson = 0x30;
		}
	}

	
	public void run() {
		//jiangyl 2008-02-21 修改成不需要转发 直接跳出
		if ( true)
			return;
		SmsFwLoadSvc loader = new SmsFwLoadSvc(this.channelId);
		while ( !safeExit ){
			List list = loader.loadData();
			if ( list.size() == 0){
				threadSleep(10000);
				continue;
			}
			try{	
				int stat = this.cmpp.initCMPP(config.getISMG_ADDR(), config.getICP_ID(),config.getICP_ID(),	config.getICP_PASS(), "", this.verson, config.getISMG_PORT(), "MT", config.getChannelId());
				if (stat==0) {
					log.info("以 " + config.getICP_ID() + "/" + config.getICP_PASS() + " 建立到短信网关(" + config.getISMG_ADDR() + ":" + config.getISMG_PORT()	+ ")的连接成功.");
					while  ( !safeExit  && list.size() > 0 ) {
						doStart(list);
						list = loader.loadData();
					}
				}else{
					log.info("以 " + config.getICP_ID() + "/" + config.getICP_PASS() + " 建立到短信网关(" + config.getISMG_ADDR() + ":" + config.getISMG_PORT()	+ ")的连接不成功,请联系系统管理员.");
				}
			}catch(Exception e){
				log.error("发送数据时发送严重的错误",e);
			}finally{
				try{
					this.cmpp.quit();
				} catch(Exception e){
				}	
				log.info("以" + config.getICP_ID() + "/" + config.getICP_PASS() + "建立到短信网关(" + config.getISMG_ADDR() + ":" + config.getISMG_PORT()	+ ")的连接已经退出.");
			}
		}
	}

	/**
	 * 处理包括数据库操作和短信发送的整个流程方法,一次处理500条数据库记录
	 * 
	 * @throws Exception
	 * 
	 */
	public void doStart( List messages ) throws Exception {
		List errors = new ArrayList();
		for (int i = 0; i < messages.size(); i++) {
			MessageInfo mbi = (MessageInfo) messages.get(i);
			// 创建消息体并发送短信
			try {				
				SubmitMsg msg = new SubmitMsg();
				this.new_cmpp_submit(msg, mbi.getPhonenumber(), mbi.getMessage());
				int stat = this.cmpp.submit(msg);
				threadSleep(15);
				if(stat!=0){
					errors.add(mbi);
				}
			} catch (Exception ex) {
				errors.add(mbi);// 当消息发送发现错误的时候
				threadSleep(5*1000);
			}
		}	
		if(errors.size()>0){
			SmsFwLoadSvc.failDone(errors,config.getSenduplimit());
		}
	}


	/**
	 * 创建短信发送消息包内容
	 * 
	 * @param cmppe_submit1
	 * @param msgScrAddr
	 * @param msgContent
	 * @throws Exception
	 */
	private void new_cmpp_submit(SubmitMsg msg, String msisdn, String msgContent)
			throws Exception {
		if(msgContent!=null){
			msgContent.getBytes("GBK");
		}
		msg.nFeeUserType = 0;
		//msg.nMsgFormat = 8; // ucs2编码方式
		msg.nMsgFormat = 15;
		msg.nDestUsrTl = 1;
		msg.nMsgLength = msgContent.length();
		msg.nNeedReply = 0;
		msg.sFeeCode = config.getINFO_FEE();
		msg.sFeeMobile = null;
		msg.sDestTerminalId = msisdn;
		msg.sMsgContent = msgContent;
		
		msg.sMsgSrc = config.getSERVICE_TYPE();
		msg.sSrcId = config.getSERVICE_TYPE();
		msg.sFeeType = config.getFEE_TYPE();
		msg.sServiceId = config.getSERVICE_TYPE();
		msg.sValidTime = config.getMSG_VALIDATE();
		msg.picAndRing = null;

	}
	
	public static void threadSleep(long millis) {
		try {
			Thread.sleep(millis);
		} catch (InterruptedException e) {
		}
	}
}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -