📄 feelistener.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 + -