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

📄 cmccmm7recvservlet.java

📁 MM7彩信对接网关示例
💻 JAVA
📖 第 1 页 / 共 2 页
字号:
/*
 * Created on 2005-3-18
 *
 * TODO To change the template for this generated file go to
 * Window - Preferences - Java - Code Style - Code Templates
 */
package com.rainbow.mms.gateway;

import java.sql.CallableStatement;
import java.sql.Connection;
import java.sql.SQLException;
import java.util.Date;
import java.util.List;
import java.util.Timer;

import javax.servlet.ServletConfig;
import javax.sql.DataSource;

import log.DailyMessageLog;

import org.apache.log4j.Logger;
import org.apache.log4j.PropertyConfigurator;
import org.hibernate.Session;
import org.hibernate.Transaction;

import com.cmcc.mm7.vasp.common.MMConstants;
import com.cmcc.mm7.vasp.common.MMContent;
import com.cmcc.mm7.vasp.conf.MM7Config;
import com.cmcc.mm7.vasp.message.MM7DeliverReq;
import com.cmcc.mm7.vasp.message.MM7DeliverRes;
import com.cmcc.mm7.vasp.message.MM7DeliveryReportReq;
import com.cmcc.mm7.vasp.message.MM7DeliveryReportRes;
import com.cmcc.mm7.vasp.message.MM7ReadReplyReq;
import com.cmcc.mm7.vasp.message.MM7ReadReplyRes;
import com.cmcc.mm7.vasp.message.MM7VASPRes;
import com.cmcc.mm7.vasp.service.MM7ReceiveServlet;
import com.rainbow.mms.common.CMCCMM7DeliverMsg;
import com.rainbow.mms.common.MimeContent;
import com.rainbow.mms.common.MmsContent;
import com.rainbow.mms.common.MmsGatewayInfo;
import com.rainbow.mms.common.QueryMimeContentSaveStrategy;
import com.rainbow.util.tools.HibernateUtil;
import com.rainbow.util.tools.TimeOperate;

/**
 * 处理收到的彩信
 * @author Rainbow MMS Group Leader —— TrWorks
 *  
 */
public class CMCCMM7RecvServlet extends MM7ReceiveServlet {

	/**
	 * 数据库的数据源
	 */
	private DataSource ds = null;

	/**
	 * 接收帐单
	 */
	private static DailyMessageLog bill = new DailyMessageLog();

	/**
	 * 日志
	 */
	private Logger log = Logger.getLogger(CMCCMM7RecvServlet.class);
	
	/**
	 * 统计使用的定时器
	 */
	private Timer staticTimer = null;

	/**
	 *  MM7配置文件路径
	 */
	private String mm7ConfigFilePath = null;
	
	/**
	 * 接收网关的配置信息
	 */
	private List gateWayInfos = null;

	/**
	 * 初始化Servlet
	 */
	public void init(ServletConfig config) {
		
		System.out.println("++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++");

		// 设置帐单名称
		
		try {
			String billPath = (String) config.getInitParameter("billPath");
			String logConfigPath = (String)config.getInitParameter("logConfigPath");
			PropertyConfigurator.configure(logConfigPath);
			log.info("初始化接收型网关的Servlet");
			bill.setLogFile(billPath);

			mm7ConfigFilePath = (String) config
					.getInitParameter("mm7ConfigFilePath");

			System.out.println("MM7ConfigFile:" + mm7ConfigFilePath);
			System.out.println("billPath:" + billPath);
			System.out.println("logConfigPath:" + billPath);
			Config = new MM7Config(mm7ConfigFilePath);

			// 取数据库的网关配置信息
			Session sess = HibernateUtil.currentSession();
			
			try{
				gateWayInfos = sess.createCriteria(MmsGatewayInfo.class).list();
			}
			catch(Exception e){
				e.printStackTrace();
			}
			finally{
				HibernateUtil.closeSession();
			}
			
			RecverStaticInfo staticInfo = RecverStaticInfo.getInstance();
			staticTimer = new Timer();
			staticTimer.schedule(staticInfo, 0, (60*60*1000));

		} catch (Exception e) {
			e.printStackTrace();
			log.error("读取数据库和网关的连接信息时出现异常");
		}
		
		System.out.println("++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++");
	}
	
	public void destroy()
	{
		System.out.println("------------------------------------------------------------");
		System.out.println("------------------------------------------------------------");
	}

	/**
	 * 处理收到的普通的Deliver消息,并回复应答消息
	 */
	public MM7VASPRes doDeliver(MM7DeliverReq request) {
		if (request == null) {
			return null;
		}

		// 累加统计计数器
		RecverStaticInfo.getInstance().addDeliverNum();
		
		// 取出符合接入号码的目的号码
		String dstNum = getValidDstNum(request);

		// 将收到的Deliver消息在界面上打印出来
		StringBuffer buffer = new StringBuffer();
		//System.out.println("------收到Deliver消息------");
		buffer.append("------收到Deliver消息------");
		buffer.append("\n");
		buffer.append("MMSCID:" + request.getMMSRelayServerID() + "\n");
		buffer.append("recvTime: " + TimeOperate.getNowTime() + "\n");
		buffer.append("srcNum: " + request.getSender() + "\n");
		buffer.append("dstNum: " + dstNum + "\n");
		buffer.append("subject: " + request.getSubject() + "\n");
		buffer.append("transactionID: " + request.getTransactionID() + "\n");
		//buffer.append("gatewayID: " + this.gwGateWayID + "\n");
		buffer.append("priority: " + request.getPriority() + "\n");
		buffer.append("linkID: " + request.getLinkedID() + "\n");
		buffer.append("replyCharging: " + request.getReplyChargingID() + "\n");
		System.out.println(buffer.toString());

		// 将收到的Deliver消息保存到帐单中
		bill.log(buffer.toString());

		if (dstNum == null) {
			log.warn("收到的目的号码不符合我们的接入号码");
		} else {
			// 处理收到的请求消息
			doDeliverMsg(request, dstNum);
		}

		// 回复应答消息
		MM7DeliverRes mm7DeliverRes = new MM7DeliverRes();
		mm7DeliverRes.setStatusCode(MMConstants.RequestStatus.SUCCESS);
		mm7DeliverRes.setTransactionID(request.getTransactionID());
		//mm7DeliverRes.setServiceCode(gwServiceID);

		// 在界面上打印出应答消息
		StringBuffer resOutput = new StringBuffer();
		resOutput.append("------发送Deliver应答消息------\n");
		resOutput.append("    transactionID: " + mm7DeliverRes.getTransactionID()
				+ "\n");
		resOutput.append("    statusCode: " + mm7DeliverRes.getStatusCode() + "\n");
/*		resOutput.append("serviceCode: " + mm7DeliverRes.getServiceCode()
				+ "\n");*/
		System.out.println(resOutput.toString());

		return (MM7VASPRes) mm7DeliverRes;
	}

	/**
	 * 处理收到的普通的Deliver消息,将消息放入到数据库中
	 * 
	 * @param request
	 */
	protected void doDeliverMsg(MM7DeliverReq request, String dstNum) {

		if (request == null || dstNum == null) {
			return;
		}
		
		int gwGateWayID = 0;
		for (int i = 0; i < gateWayInfos.size(); i++){
			MmsGatewayInfo gw = (MmsGatewayInfo)gateWayInfos.get(i);
			if (request.getMMSRelayServerID().equalsIgnoreCase(gw.getMmscId())){
				gwGateWayID = gw.getGatewayID();
			}
		}
		if (gwGateWayID == 0){
			log.error("没有找到符合彩信中心编号的网关配置信息.");
		}
		
		
		Session sess = HibernateUtil.currentSession();
		int deliverID = 0;
		
		try {
			
			Connection con = sess.connection();
			CallableStatement s = con.prepareCall("select tnGateWayId from MMS_TSysComConfigGateway where tcMmscID = (?)");
			
			
			CMCCMM7DeliverMsg deliverMsg = new CMCCMM7DeliverMsg();
			deliverMsg.setContentType(0);
			deliverMsg.setDstNum(dstNum);
			
			deliverMsg.setGateWayId(gwGateWayID);
			deliverMsg.setLinkId(request.getLinkedID());
			deliverMsg.setMmscId(request.getMMSRelayServerID());
			deliverMsg.setMsgId(request.getTransactionID());
			deliverMsg.setRecvTime(new Date());
			deliverMsg.setSrcNum(request.getSender());
			deliverMsg.setWantRead(0);
			deliverMsg.setWantReport(0);

			MmsContent mmsContent = new MmsContent();
			mmsContent.setCreateFrom(1);
			mmsContent.setCreaterMemo("user");
			mmsContent.setCreateTime(new Date());
			mmsContent.setSubject(request.getSubject());

			Transaction tx = sess.beginTransaction();

			// 请求消息内有多媒体内容
			if (request.isContentExist() == true) {
				//System.out.println("Has MMS Content");
				MMContent parentContent = request.getContent();
				MMContent c = parentContent;
				
				// 多媒体内容是由多个多媒体元素组成的
				if (parentContent.isMultipart()) {
					//System.out.println("Has Many MMS Content");
					List listElements = parentContent.getSubContents();
					for (int i = 0; i < listElements.size(); i++) {
						c = (MMContent) listElements.get(i);
						MimeContent e = new MimeContent();
						e.setMimeType(c.getContentType().getPrimaryType() + "/"
								+ c.getContentType().getSubType());
						e.setMimeContentName(c.getContentID());
						e.setCreateTime(new Date());
						// 按照文本格式保存
						if (QueryMimeContentSaveStrategy.getSaveStrategy(e
								.getMimeType(), sess) == 1) {
							e.setCharacterContent(c.getContentAsString());
						} else { // 按照二进制格式保存
							e.setBinaryContent(c.getContent());
						}
						//System.out.println(e.toString());
						// 保存该多媒体元素
						sess.save(e);
						// 将该多媒体元素加入到彩信内容体中
						mmsContent.getMmsContentElments().add(e);
					}
				} else {

⌨️ 快捷键说明

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