`
liufei.fir
  • 浏览: 687270 次
  • 性别: Icon_minigender_1
  • 来自: 上海
社区版块
存档分类
最新评论

短信平台开发

阅读更多
package com.smp.webservice;

import java.io.BufferedInputStream;
import java.io.IOException;
import java.io.InputStream;
import java.sql.Timestamp;
import java.text.SimpleDateFormat;
import java.util.List;

import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

import org.apache.log4j.Logger;
import org.dom4j.Document;
import org.dom4j.DocumentException;
import org.dom4j.DocumentHelper;
import org.dom4j.Element;
import org.springframework.web.context.support.WebApplicationContextUtils;

import com.smp.bean.MsgDeliver;
import com.smp.bean.MsgSubmit;
import com.smp.sev.service.JobService;
import com.smp.sev.service.MsgService;
import com.smp.sev.service.ParameterService;
import com.smp.util.Constants;

public class SmsDeliver extends HttpServlet {

	private static Logger LOG = Logger.getLogger(SmsDeliver.class);
	private MsgService ms;
	private ParameterService parameters;
	
	private JobService jobService ;
	
	private static final long serialVersionUID = 2454345053369427942L;

	public void doGet(HttpServletRequest request, HttpServletResponse response)
	throws ServletException, IOException {
		doPost(request, response);
	}
		
		public void doPost(HttpServletRequest request, HttpServletResponse response)
			throws ServletException, IOException {
			
		//根据短号找msgid,以后需要扩展为根据规则找msgid
			
			//首先验证系统开关
			if("关闭".equals(parameters.getPrarameterByName("shangxing"))){
				response.getWriter().write("0");
				return;
			}
			try {
				StringBuffer data =new StringBuffer();
				String state = "0";
				try {
					InputStream in = request.getInputStream();
					BufferedInputStream buf = new BufferedInputStream(in);
					byte[] buffer = new byte[1024];
					
					int a ;
					while((a = buf.read(buffer))!= -1){
						data.append(new String(buffer,0,a,"gbk"));
					}
					if(LOG.isDebugEnabled()) {
						LOG.debug(data.toString());
					}
				} catch (Exception e) {
					LOG.debug("接收上行短信失败:"+e.getMessage());
					state = "9";
				}
				response.getWriter().write(state);
				Document doc = DocumentHelper.parseText(data.toString());
				Element root = doc.getRootElement();
				List<Element> deliverElements = (List<Element>)root.elements("deliver");
				SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
				for(Element deliver:deliverElements){
					
					String corp_id = deliver.elementText("corp_id");
					String mobile = deliver.elementText("mobile");
					String sno = deliver.elementText("ext");
					String time = deliver.elementText("time");
					String msg = deliver.elementText("content");
					if(LOG.isDebugEnabled()) {
						LOG.debug(corp_id+":"+mobile+":"+sno+":"+time+":"+msg);
					}
					int msgid = -1;
					
					try {
						if(sno==null) sno = "";
						else {
							sno = sno.trim();
							msgid = ms.getMsgIdByShortNo(sno);
						}
						MsgDeliver msgDeliver = new MsgDeliver();
						MsgSubmit msgSubmit = new MsgSubmit();
						msgSubmit.setMsId(msgid);
						msgDeliver.setMsgSubmit(msgSubmit);
						msgDeliver.setMdPhone(mobile);
						msgDeliver.setMdShortno(sno);
						msgDeliver.setMdContent(msg);
						msgDeliver.setMdRevicetime(new Timestamp(sdf.parse(time).getTime()));
						if( !sno.equals(Constants.SMSNO_JOBDX) ) {
							ms.addDeliver(msgDeliver);			//如果不是就业通知则进行保存
							//如果有回复,则状态改为成功
							ms.updateState(msgid, mobile, "发送成功");
						}
						if( sno.equals(Constants.SMSNO_JOBDX) ) {//如果是就业通知则处理就业状态
							jobService.updateJobState(mobile,msgDeliver) ;
						}
						
					}catch (Exception e) {
						LOG.error("保存上行短信失败:"+e.getMessage());
					}
				}
				
			} catch (DocumentException e1) {
				e1.printStackTrace();
			}
		}

		public void init() throws ServletException {
			super.init();
			ms=(MsgService) WebApplicationContextUtils
			   .getRequiredWebApplicationContext(getServletContext())
			   .getBean("msgService");
			parameters=(ParameterService) WebApplicationContextUtils
			   .getRequiredWebApplicationContext(getServletContext())
			   .getBean("parameterService");
			jobService = (JobService) WebApplicationContextUtils
				.getRequiredWebApplicationContext(getServletContext())
				.getBean("jobService") ;
		}
}


package com.smp.webservice;

import java.io.IOException;
import java.io.UnsupportedEncodingException;
import java.sql.Timestamp;

import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

import org.apache.log4j.Logger;
import org.springframework.web.context.support.WebApplicationContextUtils;

import com.smp.bean.MsgDeliver;
import com.smp.bean.MsgSubmit;
import com.smp.sev.service.JobService;
import com.smp.sev.service.MsgService;
import com.smp.sev.sms.MsgSender;
import com.smp.util.Constants;
import com.smp.util.Tools;

public class SmsXb extends HttpServlet {
	private static final long serialVersionUID = 2065706035313209076L;
	private static Logger LOG = Logger.getLogger(SmsXb.class);
	private MsgService ms;
	private JobService jobService ;
	

	public void doGet(HttpServletRequest request, HttpServletResponse response)
			throws ServletException, IOException {
		doPost(request, response);
	}

	public void doPost(HttpServletRequest request, HttpServletResponse response)
			throws ServletException, IOException {

		// 根据短号找msgid,以后需要扩展为根据规则找msgid
		String m = request.getParameter("m");
		String sno = request.getParameter("sno");
		String phone = request.getParameter("phone");
		String msg = request.getParameter("msg");
		
		String msgid = request.getParameter("msgid");
		//发送状态,0:到达网关失败,1到达网关成功,2到达用户手机失败,3到达用户手机成功。
		String state = request.getParameter("state");
		
		if(LOG.isDebugEnabled()) {
			LOG.debug(sno+"--"+phone+"--"+msg+"--"+msgid+"--"+state);
		}
		try {
			if("res".equals(m)) {
				upState(ms, msgid, phone, state);
			}else if("deliver".equals(m)) {
				addDeliver(ms, sno, phone, msg);
			}
		} catch (Exception e) {
			LOG.error(e.getMessage());
		}
	}
	
	public void upState(MsgService service, String msgid, String phone, String state) {
		if(Tools.isEmpty(msgid)||Tools.isEmpty(phone)||Tools.isEmpty(state)) return;
		msgid = msgid.trim();
		phone = phone.trim();
		state = state.trim();
		//0:到达网关失败,1到达网关成功,2到达用户手机失败,3到达用户手机成功。
		if("0".equals(state)) {
			state = "发送失败";
		}else if("3".equals(state)) {
			state = "发送成功";
		}else if("2".equals(state)) {
			state = "发送失败";
		}else if("1".equals(state)) {
			state = "发送成功";
		}else state = "未知状态";
		try {
			int mid = Integer.parseInt(msgid);
			service.updateState(mid, phone, state);
		} catch (NumberFormatException e) {
			LOG.error("短信回应中短信id非整数");
		}catch (Exception e) {
			LOG.error("更新短信发送状态失败:"+e.getMessage());
		}
	}
	
	public void addDeliver(MsgService service, String sno, String phone, String msg) throws UnsupportedEncodingException {
		
		if (Tools.isEmpty(phone))
			return;
		phone = phone.trim();
		int msgid = -1;
		if (msg == null)
			msg = "";
		else {
			msg = msg.trim();
			msg = new String(msg.getBytes("ISO8859-1"), "GBK");
		}

		try {
			if (sno == null)
				sno = "";
			else {
				sno = sno.trim();
				if(!sno.equals(MsgSender.getStartSno()))msgid = service.getMsgIdByShortNo(sno);
			}

			MsgDeliver deliver = new MsgDeliver();
			if(msgid!=-1) {
				
				MsgSubmit sub = new MsgSubmit();
				sub.setMsId(msgid);
				deliver.setMsgSubmit(sub);
			}
			
			deliver.setMdPhone(phone);
			deliver.setMdShortno(sno);
			deliver.setMdContent(msg);
			deliver.setMdRevicetime(new Timestamp(System.currentTimeMillis()));
			if( !sno.equals(Constants.SMSNO_JOBDX) ) {
				ms.addDeliver(deliver);			//如果不是就业通知则进行保存
				//如果有回复,则状态改为成功
				ms.updateState(msgid, phone, "发送成功");
			}
			if( sno.equals(Constants.SMSNO_JOBDX) ) {//如果是就业通知则处理就业状态
				jobService.updateJobState(phone,deliver) ;
			}
		} catch (Exception e) {
			LOG.error("保存上行短信失败:" + e.getMessage());
			e.printStackTrace();
		}
	}

	public void init() throws ServletException {
		super.init();
		ms = (MsgService) WebApplicationContextUtils
				.getRequiredWebApplicationContext(getServletContext()).getBean(
						"msgService");
		jobService = (JobService) WebApplicationContextUtils
		.getRequiredWebApplicationContext(getServletContext())
		.getBean("jobService") ;
	}
}

分享到:
评论

相关推荐

    短信平台开发实践及案例

    短信平台开发实践及案例的知识点可以从以下几个方面展开: 1. 开发前的准备 首先,为了开发短信平台,开发者需要选择合适的开发工具和环境。在本案例中,开发团队选择了JDK 1.6作为Java开发的基础环境。安装JDK后,...

    daima.rar_daima_java 短信_短信平台_短信平台开发

    "daima.rar_daima_java 短信_短信平台_短信平台开发"这个标题揭示了我们正在讨论一个与Java编程语言相关的短信平台开发项目。中国电信作为国内主要的电信运营商,其短信平台的开发接口协议对开发者来说具有很高的...

    C# VB java 短信平台开发包

    在IT行业中,短信平台开发包通常是指一组软件开发工具,用于帮助程序员集成短信发送功能到他们的应用程序中。这种开发包可以支持多种编程语言,如C#、VB(Visual Basic)和Java,使得开发者无需深入了解底层通信协议...

    短信平台开发接口文件

    在IT行业中,短信平台开发接口文件是连接应用系统与短信服务提供商的关键,它定义了如何进行通信、发送和接收短信的规范。这个压缩包文件包含了必要的文档和示例程序,对于开发者来说,是一个宝贵的资源,可以帮助...

    eas短信平台开发2.pdf

    根据所提供的文件内容和要求,以下是对“eas短信平台开发2.pdf”文档中提到的知识点的详细解读: 标题:“eas短信平台开发2.pdf” 描述:“eas短信平台开发2.pdf” 标签:技术及资料 从文档内容来看,主要涉及的是...

    短信平台开发框架介绍

    介绍短信平台开发框架及技术。Vue 是一套用于构建用户界面的渐进式框架,它是以数据驱动和组件化的思想构建的。如果你之前已经习惯了用jQuery操作DOM,学习Vue.js时请先抛开手动操作DOM的思维,因为Vue.js是数据驱动...

    SMGP短信平台开发包

    SMGP短信平台开发包的核心功能包括: 1. **多网关支持**:平台支持接入不同运营商的短信网关,通过统一的接口处理来自各个网关的短信请求,简化了SP对接多个运营商的复杂性。 2. **数据库接口**:灵狐短信平台使用...

    短信开发接口 企业短信开发平台 短信数据库接口

    短信开发接口,企业短信开发平台,短信数据库接口简介 为了简化软件开发流程,减少各应用系统相同模块的重复开发工作,提高系统稳定性和可靠性,我们开发了本套“企业短信数据库二次开发平台”。 功能1:基于本短信...

    毕业设计-pyhton-flask基于多源海洋数据的信息平台开发与应用研究

    毕业设计-pyhton-flask基于多源海洋数据的信息平台开发与应用研究 基于Python和Flask的多源海洋数据信息平台是一个涉及数据处理、Web开发和海洋科学研究的项目。以下是一个基于这些技术的毕业设计建议方案: ### ...

    ssh框架开发短信平台

    在短信平台开发中,Struts2可以处理用户的请求,调用相应的业务逻辑,并将结果返回给用户界面。 **Spring** 框架是Java企业级应用的核心。它提供了全面的DI(Dependency Injection,依赖注入)和AOP(Aspect-...

    短信平台.rar,网页版本短信平台源代码,带发送服务程序和后台客户端

    【标题】"短信平台.rar" 是一个压缩包文件,其中包含了一个网页版本的短信平台的源代码。这个平台不仅提供了一种...对于想要学习短信平台开发或者希望自定义短信服务的开发者来说,这是一个非常宝贵的学习和实践资源。

    各种平台短信猫开发解决方案.

    短信猫的跨平台开发主要涉及在Windows、Linux、Mac OS等操作系统上实现相同的功能。这通常需要一个统一的API或者驱动程序,使得开发者可以在不同系统环境下调用相同的接口进行短信收发。例如,使用Java这样的跨平台...

    短信机开发包 短信平台源码

    短信机开发包是一种用于构建短信发送和接收功能的软件工具,通常被开发者用来集成到自己的应用程序中,以实现批量发送短信、接收短信验证码或者进行其他相关的通信服务。在这个开发包中,包含了多种编程语言的示例...

    华信短信平台通道开发.docx

    ### 华信短信平台通道开发知识点详解 #### 一、华信开源社区介绍 华信开源社区致力于分享高质量、...通过以上步骤,开发者可以成功地为华信短信平台开发一个新的第三方短信通道模板,进一步拓展平台的功能性和兼容性。

    202x年XX市“多规合一”信息平台开发与应用(专业完整版).pdf

    202x年XX市“多规合一”信息平台开发与应用(专业完整版).pdf

    手机短信平台软件开发

    提供短信平台,sp平台软件(支持三网),企信通平台. 运营商,电视台,报业集团,气象局,各行业企业,单位,sp等等电信增值业务运营公司 专用的著名稳定,短信平台,彩信平台软件 帮助测试接入移动,联通,电信运营...

    警用地理信息平台服务开发手册[PGIS]最新

    警用地理信息平台服务开发手册[PGIS],PGIS平台软件(即警用地理信息基础平台软件)是根据统一的标准规范,基于开放的商用基础GIS软件,能够为各类应用开发提供统一的工具软件、基础服务和应用模版,具有部、省、市...

    短信平台二次开发API插件

    综上所述,短信平台二次开发API插件是现代软件系统不可或缺的一部分,它简化了短信服务的集成过程,提升了开发效率,同时为各行业提供了便捷的信息传递途径。开发者可以根据实际需求选择合适的开发语言,充分利用...

Global site tag (gtag.js) - Google Analytics