📄 mtdispatcher.java
字号:
package com.gctech.sms.platform;
import com.gctech.sms.msg.MTInfo;
import org.apache.log4j.Logger;
import java.util.Collection;
import com.gctech.sms.dao.SpBusinessDao;
import java.util.Map;
import com.gctech.sms.vo.SpBusinessObject;
import com.gctech.sms.vo.SmsServiceObject;
import com.gctech.sms.msg.MsgColoner;
import java.sql.*;
import com.gctech.sms.msg.MTAck;
import org.apache.commons.lang.RandomStringUtils;
import java.text.DateFormat;
import java.text.SimpleDateFormat;
import java.util.Date;
import EDU.oswego.cs.dl.util.concurrent.SynchronizedInt;
import EDU.oswego.cs.dl.util.concurrent.WaitableInt;
import com.gctech.sms.core.Gateway;
import com.gctech.sms.card.CardApi;
import com.gctech.util.LimitedSynchronizedInt;
import com.gctech.sms.core.*;
/**
* <p>Title: 下行分拣者</p>
* <p>Description: 它的职责是根据SP业务代码找到服务代码,生成网关信息。</p>
* <p>Copyright: Copyright (c) 2004</p>
* <p>Company: gctech</p>
* @author 王红宝
* @version $Id: MTDispatcher.java,v 1.10 2004/11/15 06:13:45 lijz Exp $
*/
public class MTDispatcher
{
static final DateFormat format = new SimpleDateFormat("yyyyMMddHHmmss");
Map services;
LimitedSynchronizedInt generator;
void reloadService()
{
services.clear();
loadService();
}
private void loadService()
{
services = SpBusinessDao.findAll();
}
private MTDispatcher()
{
generator = new LimitedSynchronizedInt(0, 0, 1000000);
//载入服务
loadService();
}
private static MTDispatcher singleton;
public static MTDispatcher getInstance()
{
if (singleton == null)
singleton = new MTDispatcher();
return singleton;
}
public MTAck dispatch(MTInfo info)
{
//根据ProductId填充其它信息
MTAck ack = new MTAck();
boolean isPrepay =false;
System.out.println("info.FeeType="+info.FeeType);
if (!FeeType.FEE_MONTH_MONEY.getValue().equals(info.FeeType))
{
System.out.println("FeeType.FEE_MONTH_MONEY.getValue()="+FeeType.FEE_MONTH_MONEY.getValue());
Object objSvc = services.get(info.productID);
if (objSvc == null)
{
logger.warn("can't find the product id:" + info.productID);
ack.setStatus(Constants.WRONG_BUSINESS_ID);
return ack;
}
SpBusinessObject svc = (SpBusinessObject) objSvc;
System.out.println("svc.isprepay="+svc.getIsprepay());
SmsServiceObject smsSvc = svc.getService();
info.FeeType = smsSvc.getFeeType();
info.FeeCode = smsSvc.getFeeCode();
info.ServiceID = smsSvc.getID();
info.bSubType = (byte) smsSvc.getSubType();
info.bMsgFmt = smsSvc.getMsgFormat();
if (info.srcPhone == null)
info.srcPhone = "";
isPrepay = (svc.getIsprepay() == IsPrepay.IS_NOT_PREPAY.getValue());
System.out.println("设置isprepay="+isPrepay);
}
//根据接收短信路由网关
int gateway = info.gateway;
System.out.println("info.gateway="+info.gateway);
System.out.println("info.bDestNo="+info.bDestNo);
info.bDestNo = 1;
for (int i = 0; i < info.bDestNo; i++)
{
System.out.println("enter=");
MTInfo aMt = MsgColoner.cloneSingle(info, i);
if (info.gateway < 0)
{
//路由网关
String dest = aMt.sDestPhone;
//System.out.println("spId is:" + aMt.spId + ".");
//gateway = Gateway.getGatewayBySpId(dest, aMt.spId);
gateway = 8;
aMt.gateway = gateway;
}
//用卡支付
System.out.println("isPrepay="+isPrepay);
if (isPrepay)
{
int money = Integer.parseInt(aMt.FeeCode);
if (money != 0)
{
aMt.FeeCode = "00";
aMt.ServiceID = "MFXX";
//认证,计费。
// int status = CardApi.getInstance().devicePay(aMt.FeeterminalId,( (double) money) / 100);
//此处修改 2004/06/24
int status = CardApi.getInstance().directPay(aMt.FeeterminalId,
( (double) money) / 100);
if (status != CardApi.SUCCESS)
{
ack.setStatus(Constants.BILL_ERROR);
return ack;
}
}
}
//生成消息ID
aMt.MsgID = nextId().toString();
System.out.println("生成的msgid:"+aMt.MsgID);
System.out.println("发送的squenceid:"+aMt.squeceid);
ack.msgId = aMt.MsgID;
//记录日志
logger.info(aMt);
//放到特定网关队列中去
//ack.setStatus(Server.getInstance().sentMt(info)); //wjl 2004-04-26 change
ack.setStatus(Server.getInstance().sentMt(aMt, gateway));
//save jifeishuju
}
//ack.setStatus(0);
return ack;
}
static final Logger logger = Logger.getLogger(MTDispatcher.class);
public static void main(String[] args)
{
System.out.println(Integer.parseInt("00"));
}
StringBuffer nextId()
{
StringBuffer sb = new StringBuffer(format.format(new Date()));
int current = generator.increment();
String curSeq = "" + current;
int length = curSeq.length();
if (length < 6)
{
for (int i = 0; i < 6 - length; i++)
{
sb.append('0');
}
}
sb.append(curSeq);
return sb;
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -