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") ;
}
}