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

📄 feelistener.java

📁 采用JAVA开发
💻 JAVA
字号:
package com.gctech.sms.voice.api;
import java.util.*;
import org.apache.log4j.Logger;
import com.gctech.sms.sp.cms.msg2.*;
import com.gctech.sms.sp.cms.core2.*;
import com.gctech.sms.sp.cms.util.*;

import com.gctech.sms.voice.*;

/**
 * 处理计费问题
 * <p>Copyright: Copyright (c) 2004</p>
 * <p>Company: </p>
 * @author lijz@gctech.com.cn
 * @version 1.0
 */
public class FeeListener extends RecevierListener
{

  static Logger logger = Logger.getLogger(FeeListener.class);
  public FeeListener()
  {
  }

  public void onMessage(Message msg)
  {
//    logger.info("on message "+msg.commandId);
    if(msg.commandId == Message.DELIVER)
    {

      DeliverMessage dm = (DeliverMessage)msg;


      if(dm.isReport == 0) return;
      /*
       是状态报告,那么开始解析:
       如果状态报告里说明该用户已经欠费,则删除待发列表
       如果一切正常,则调用116接口准备外互
      */
//     logger.info("receive a report form platform:"+dm.content);


     String messageId = this.getMessageId(dm);
//     logger.info("report messageId:"+messageId);
     logger.info("messageMap2 size "+SMSMain.instance().messageMap.size());
     APIFacade.voicelogger.info("收到SMS状态报告 msg2="+messageId+"["+TypesTools.byteArrayToHexString(messageId.getBytes())+"] messageMap size ="+SMSMain.instance().messageMap.size());

     SubmitMessage preSub = (SubmitMessage)SMSMain.instance().messageMap.get(messageId);
     if(preSub==null)
     {
       logger.info("没有找到submessage:"+messageId);
        APIFacade.voicelogger.info("没有找到submessage");
       return ;//需要考虑这个该如何处理
     }
     else
     {
         logger.info("找到submessage");
         APIFacade.voicelogger.info("找到submessage");
     }

     Integer seqId = new Integer(preSub.sequenceId);
     if(this.isFeeOk(dm))
     {
       try
       {
         VoiceMain.instance().send(seqId);
       }
       catch(VoiceException ve)
       {
         //错误日志,这儿应该记录到数据库里,但目前暂时不支持
         logger.info(ve.getMessage());
       }

     }
     else
     {
       //扣费失败.不做任何处理
     }
     synchronized(APIFacade.SMSLock)
     {
        VoiceMain.instance().reqMap.remove(seqId);
        SMSMain.instance().messageMap.remove(messageId);
        SMSMain.instance().seqMap.remove(seqId);
        logger.info("处理成功,删除资源:seqId="+seqId+";"+"messageId="+messageId);

     }



    }
    //得到messageId
    else if(msg.commandId == Message.SUBMIT_RES )
    {


      try
      {
        SubmitResMessage rm = (SubmitResMessage)msg;

        SubmitMessage sm = (SubmitMessage)SMSMain.instance().seqMap.get(new
            Integer(rm.sequenceId));
        if(sm == null)
        {
          logger.warn("get response,but not find submitmsg:" + rm.sequenceId);
          APIFacade.voicelogger.warn("get response,but not find submitmsg:" +
                                     rm.sequenceId);
          return;
        }
        APIFacade.voicelogger.info("收到SMS响应:seq=" + rm.sequenceId +
                           " 返回msg1=" + rm.messageId + "[" +
                           TypesTools.byteArrayToHexString(rm.
    messageId.getBytes()) + "]");


        synchronized(APIFacade.SMSLock)
        {
          logger.info("get response:" + rm.sequenceId + "..." + rm.messageId);

          SMSMain.instance().messageMap.put(rm.messageId,sm);
        }
        logger.info("message Res " + rm.sequenceId + ":" + rm.messageId);

      }
      catch(Exception ex)
      {
        APIFacade.voicelogger.info("出错:",ex);
      }


    }
    else
    {
      return ;
    }





  }

  /**
   * 得到状态报告的messageId
   * @param dm
   * @return
   */
  private String getMessageId(DeliverMessage dm)
  {
    byte[] bs = dm.content.getBytes();
    String messageId1 = new String(bs,3,10);
    //note ,需要询问相关人员
    String messageId2 = dm.content.substring(3,13);
    logger.info("message report "+dm.messageId+":"+messageId1+":"+messageId2+".");
    return messageId1;
//    return content.substring(0,8);

  }

  /**
   * 判断用户是否成功扣费
   * 需要询问相关人员
   * @param dm
   * @return
   */
  private boolean isFeeOk(DeliverMessage dm)
  {
    String content = dm.content;
    int index = content.indexOf("err:");
    String error = content.substring(index+4,index+7);
    logger.info("report error is :"+error);
    if(error.equals("000"))return true;
    else return false;

  }

public static void main(String[] args) {
  String content = "id:hello err:000";
  System.out.println(content.substring(3,8)+".");

}
}

⌨️ 快捷键说明

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