前后台同步短信数据表

后台:

定时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
    + "'");
 }

}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值