后台:
定时timer.xml
<job>
<name>sync sendMessage time</name>
<impl>com.kuuwin.eggcoo.order.sync.SyncSendMessageJob
</impl>
<!-- 单位毫秒 -->
<interal>10000</interal>
</job>
SyncSendMessageJob.java
package com.kuuwin.eggcoo.order.sync;
import java.util.List;
import org.apache.log4j.Logger;
import org.dom4j.Element;
import com.kuuwin.context.timer.Job;
import com.kuuwin.eggcoo.order.model.AgentSendMessage;
import com.kuuwin.eggcoo.order.model.OrderManager;
import com.kuuwin.util.Base64;
public class SyncSendMessageJob implements Job {
private Logger log = Logger.getLogger(SyncSendMessageJob.class);
OrderManager om = new OrderManager();
public void doJob() {
// 得到需要同步的短信列表
log.error("=========sync sendMessage start===========");
List<Long> messageList = SyncOrderServiceClient.getDirtyMessageList();
for (Long mid : messageList) {
log.error("=========sync sendMessage id:" + mid);
Element messageElement = SyncOrderServiceClient
.getMessageDataOfDirty(mid);
if (messageElement == null) {
continue;
}
// 保存数据
if (saveOrUpdateMessage(messageElement)) {
// 设置服务器上短信为干净状态
SyncOrderServiceClient.resetMessageDirty(mid);
}
}
}
/**
* 保存数据
*
* @param ce
*/
private boolean saveOrUpdateMessage(Element ce) {
Element baseInfo = ce.element("baseInfo");
// 保存基本信息
String idString = baseInfo.attributeValue("id");
String orderIdString = baseInfo.element("orderId").getTextTrim();
String userNameString = baseInfo.element("userName").getTextTrim();
String mobileString = baseInfo.element("mobile").getTextTrim();
String statusString = baseInfo.element("status").getTextTrim();
String contentString = baseInfo.element("content").getTextTrim();
String resultString = baseInfo.element("result").getTextTrim();
long messid = -1;
try {
messid = new Long(idString);
} catch (Exception e) {
}
AgentSendMessage mess = om.getMessageById(messid);
boolean create = false;
if (mess == null) {
create = true;
mess = new AgentSendMessage();
mess.setId(messid);
}
mess.setUserName(userNameString);
mess.setMobile(mobileString);
mess.setOrderId(new Long(orderIdString));
mess.setStatus(new Integer(statusString));
mess.setResult(new Integer(resultString));
try {
contentString = new String(Base64.decode(contentString), "GBK");
mess.setContent(contentString);
} catch (Exception e1) {
}
if (create) {
try {
om.saveByID(mess);
} catch (Exception e) {
log.error("save message error", e);
return false;
}
} else {
try {
om.update(mess);
} catch (Exception e) {
log.error("update message to db error", e);
return false;
}
}
return true;
}
}
SyncOrderServiceClient.java
/**
* 得到需要同步的短信列表
* @return
*/
public static List<Long> getDirtyMessageList() {
Properties params = new Properties();
params.setProperty("type", "get_dirty_sendMessages");
String result = ServiceProxy.sendRequestPublic(params);
List<Long> idList = new ArrayList<Long>();
if(result != null) {
String[] idArray = result.split("##");
for(String idString : idArray) {
try {
idList.add(new Long(idString));
} catch (Exception e) {}
}
}
return idList;
}
/**
* 得到短信需要更新的数据
* @param id
* @return
*/
public static Element getMessageDataOfDirty(long id) {
Properties params = new Properties();
params.setProperty("type", "get_dirty_sendMessage");
params.setProperty("messID", "" + id);
String result = ServiceProxy.sendRequestPublic(params);
try {
Document doc = new SAXReader().read(new ByteArrayInputStream(result.getBytes("GBK")));
return doc.getRootElement();
} catch (Exception e) {
log.error("get dirty message info,return message error", e);
}
return null;
}
/**
* 把服务器上的订单设置位干净状态
* @param oid
*/
public static void resetMessageDirty(long mid) {
Properties params = new Properties();
params.setProperty("type", "reset_dirty_sendMessage");
params.setProperty("messID", "" + mid);
ServiceProxy.sendRequestPublic(params);
}
前台:
/**
* 提供 webservice 服务的统一入口,根据传送的type来调用不同的处理 程序
*
* @author
*/
public class ServiceAction {
... else if ("get_dirty_sendMessages".equals(type)) {
// 获得需要同步的短信列表
result = new OrderProcesser()
.getDirtyMessageList(request, response);
} else if ("get_dirty_sendMessage".equals(type)) {
// 获得需要同步的短信的详细数据
result = new OrderProcesser().getDirtyMessage(request, response);
} else if ("reset_dirty_sendMessage".equals(type)) {
// 重新设置短信的状态
new OrderProcesser().resetDirtyMessage(request, response);
}
request.setAttribute("result", result);
return new ModelAndView("/webservice/output");
OrderProcesser.java
/**
* 得到需要同步的短信的列表
* @return 返回数据格式 id##id##id
*/
public String getDirtyMessageList(HttpServletRequest request, HttpServletResponse response) {
OrderManager om = new OrderManager();
List<Long> ids = om.getDirtyMessages();
String idString = "";
for(Long id : ids) {
if(idString.equals("")) {
idString = idString + id;
} else {
idString = idString + "##" + id;
}
}
return idString;
}
/**
* 得到需要同步的短信的详细信息
*
* @return 返回数据格式位xml文件
*/
public String getDirtyMessage(HttpServletRequest request,
HttpServletResponse response) {
long id = -1;
try {
id = new Long(request.getParameter("messID"));
} catch (Exception e) {
}
AgentSendMessage mess = om.getMessageById(id);
if (mess == null) {
return "error:短信不存在";
}
String content = "";
try {
content = Base64.code(mess.getContent()
.getBytes("GBK"));
} catch (Exception e) {
}
StringBuffer sb = new StringBuffer("");
sb.append("<?xml version=/"1.0/" encoding=/"GBK/"?>");
sb.append("<message>");
sb.append(" <baseInfo id=/"" + mess.getId() + "/">");
sb.append(" <orderId>" + mess.getOrderId() + "</orderId>");
sb.append(" <userName>" + mess.getUserName() + "</userName>");
sb.append(" <mobile>" + mess.getMobile() + "</mobile>");
sb.append(" <content><![CDATA[" + content
+ "]]></content>");
sb.append(" <status>" + mess.getStatus() + "</status>");
sb.append(" <result>" + mess.getResult() + "</result>");
sb.append(" </baseInfo>");
sb.append(" </message>");
return sb.toString();
}
/**
*将短信设置为干净状态
*
* @param request
* @param response
*/
public void resetDirtyMessage(HttpServletRequest request,
HttpServletResponse response) {
long id = -1;
try {
id = new Long(request.getParameter("messID"));
} catch (Exception e) {
}
om.execNoReturnSql("update shop_agent_send_messages set dirty=0 where id='" + id
+ "'");
}
}