📄 deliverrouter.java
字号:
package com.sms.platform.switchcenter.entity;
import java.util.ArrayList;
import java.util.Comparator;
import java.util.Iterator;
import java.util.List;
import org.apache.log4j.Logger;
import org.jdom.Element;
import com.pub.util.ReaderXml;
import com.sms.protocol.standard12.*;
/**
* <p>
* Title: 通用短信代理
* </p>
*
* <p>
* Description:
* </p>
*
* <p>
* Copyright: Copyright (c) 2007
* </p>
*
* <p>
* Company:
* </p>
*
* @author not attributable
* @version 1.0
*/
public class DeliverRouter implements Comparator {
private static Logger log = Logger.getLogger(DeliverRouter.class);
private int gatewayID;
private String longCode;
private String keyWord;
private int lcCheckFlag;
private int kwCheckFlag;
private int operatorID;
private int provinceID;
private int coagentID;
private String serviceCode;
private int messageType;
private int feeValue;
private int orderID;
private int serviceCodeID;
private int productID;
private int feeType;
private int productType;
public int getFeeValue() {
return feeValue;
}
public void setFeeValue(int feeValue) {
this.feeValue = feeValue;
}
public DeliverRouter() {
}
/**
* 装载业务路由数据
*
* @return List
*/
public static List<DeliverRouter> loadDeliverRouter() {
List<DeliverRouter> router = null;
Element element = null;
try {
List list = ReaderXml.loadListElement(
"./memory/OperationRouter.xml", "//sub");
Iterator it = list.iterator();
router = new ArrayList<DeliverRouter>();
DeliverRouter opRouter = new DeliverRouter();
while (it.hasNext()) {
element = (Element) it.next();
if(ReaderXml.getAttributeInteger(element,"type", 0) == 2){
continue;
}
opRouter.setGatewayID(ReaderXml.getChildTextInteger(element,
"gatewayID", 0));
opRouter.setLongCode(ReaderXml.getChildTextString(element,
"longCode", ""));
opRouter.setKeyWord(ReaderXml.getChildTextString(element,
"keyWord", ""));
opRouter.setLcCheckFlag(ReaderXml.getChildTextInteger(element,
"lcCheckFlag", 0));
opRouter.setKwCheckFlag(ReaderXml.getChildTextInteger(element,
"kwCheckFlag", 0));
opRouter.setOperatorID(ReaderXml.getChildTextInteger(element,
"operatorID", 0));
opRouter.setProvinceID(ReaderXml.getChildTextInteger(element,
"provinceID", 0));
opRouter.setCoagentID(ReaderXml.getChildTextInteger(element,
"coagentID", 0));
opRouter.setServiceCode(ReaderXml.getChildTextString(element,
"serviceCode", ""));
opRouter.setMessageType(ReaderXml.getChildTextInteger(element,
"messageType", 0));
opRouter.setFeeValue(ReaderXml.getChildTextInteger(element,
"feeValue", 0));
opRouter.setOrderID(ReaderXml.getChildTextInteger(element,
"orderID", 0));
opRouter.setServiceCodeID(ReaderXml.getChildTextInteger(
element, "serviceCodeID", 0));
opRouter.setProductID(ReaderXml.getChildTextInteger(element,
"productID", 0));
opRouter.setFeeType(ReaderXml.getChildTextInteger(
element, "feeType", 0));
opRouter.setProductType(ReaderXml.getChildTextInteger(element,
"productType", 0));
router.add(opRouter);
opRouter = new DeliverRouter();
}
} catch (Exception ex) {
ex.printStackTrace();
}
return router;
}
/**
* 返回 -1 向前移动, 1 向后移动, 0 不移动
*
* @param o1
* Object
* @param o2
* Object
* @return int
*/
public int compare(Object o1, Object o2) {
/**
* 特殊处理开始 如果一个业务只发送下行不需要上行时设置长代码为负数 为了不影响上行匹配将长代码为负数的记录放到最后
* 这样群发下行时即使产品不添加服务代码,也可以根据 CoagentID operatorID 和 provinceID
* 找到一个默认的服务代码 注:需要在OperationRouter.xml中添加feeValue标签,表示资费
*/
long l1 = 0;
long l2 = 0;
try {
l1 = Long.parseLong(((DeliverRouter) o1).getLongCode());
} catch (Exception ex) {
}
try {
l2 = Long.parseLong(((DeliverRouter) o2).getLongCode());
} catch (Exception ex) {
}
if (l1 < 0 || l2 < 0) {
if (l1 < l2) {
return -1;
} else if (l1 == l2) {
;
} else {
return 1;
}
}
/**
* 特殊处理结束
*/
// 长号码长度比较
if (((DeliverRouter) o1).getLongCode().length() > ((DeliverRouter) o2)
.getLongCode().length()) {
return -1;
} else if (((DeliverRouter) o1).getLongCode().length() == ((DeliverRouter) o2)
.getLongCode().length()) {
;
} else {
return 1;
}
// 关键字长度比较
if (((DeliverRouter) o1).getKeyWord().length() > ((DeliverRouter) o2)
.getKeyWord().length()) {
return -1;
} else if (((DeliverRouter) o1).getKeyWord().length() == ((DeliverRouter) o2)
.getKeyWord().length()) {
;
} else {
return 1;
}
// 精确度比较
if (((DeliverRouter) o1).getLcCheckFlag() > ((DeliverRouter) o2)
.getLcCheckFlag()
&& ((DeliverRouter) o1).getKwCheckFlag() > ((DeliverRouter) o2)
.getKwCheckFlag()) {
return -1;
} else if ((((DeliverRouter) o1).getLcCheckFlag() > ((DeliverRouter) o2)
.getLcCheckFlag() && ((DeliverRouter) o1).getKwCheckFlag() < ((DeliverRouter) o2)
.getKwCheckFlag())
|| (((DeliverRouter) o1).getLcCheckFlag() < ((DeliverRouter) o2)
.getLcCheckFlag() && ((DeliverRouter) o1)
.getKwCheckFlag() > ((DeliverRouter) o2)
.getKwCheckFlag())) {
;
} else {
return 1;
}
return 0;
}
public static final int COMPARE_SUCCESS = 0;
public static final int COMPARE_FAIL_GWID = -1;
public static final int COMPARE_FAIL_LONGCODE = -2;
public static final int COMPARE_FAIL_KEYWORD = -3;
public static final int COMPARE_FAIL_OPRORPRO = -4;
/**
* 长号码,关键字比较,返回 0成功 -1网关错误 -2长代码长度错 -3关键字长度错 -4 运营商或省错误
*
* @param lc
* String
* @param kw
* String
* @param operatorID
* int
* @param provinceID
* int
* @return int
*/
public int compare(String lc, String kw, int oprId, int proId, int gwId) {
// if (log.isDebugEnabled()) {
// log.debug(lc + " : " + this.getLongCode() + "/" +
// this.getLcCheckFlag());
// log.debug(kw + " : " + this.getKeyWord() + "/" +
// this.getKwCheckFlag());
// log.debug(oprId + " : " + this.getOperatorID());
// log.debug(proId + " : " + this.getProvinceID());
// log.debug(
// "========================================================");
// }
boolean flag = false;
if( this.getGatewayID() != gwId){
return COMPARE_FAIL_OPRORPRO;
}
if ((this.getOperatorID() == oprId && this.getProvinceID() == proId) // 省和运营商匹配
|| this.getProvinceID() == 0 || this.getProvinceID() == 1) { // 默认省
if (this.getLcCheckFlag() == 1) { // 长代码精确匹配
if (this.getLongCode().equalsIgnoreCase(lc)) { // 长代码精确匹配成功
if (this.getKwCheckFlag() == 1) { // 关键字精确匹配
if (this.getKeyWord().equalsIgnoreCase(kw)) { // 关键字精确匹配成功
return COMPARE_SUCCESS;
} else { // 关键字精确匹配失败
return COMPARE_FAIL_KEYWORD;
}
} else { // 关键字模糊匹配
if (this.getKeyWord().equalsIgnoreCase("")) { // 关键字模糊匹配成功
return COMPARE_SUCCESS;
} else if (kw.toUpperCase().startsWith(
this.getKeyWord().toUpperCase())) { // 关键字半模糊匹配成功
return COMPARE_SUCCESS;
} else { // 关键字模糊匹配失败
return COMPARE_FAIL_KEYWORD;
}
}
} else { // 长代码精确匹配失败
return COMPARE_FAIL_LONGCODE;
}
} else { // 长代码模糊匹配
if (lc.startsWith(this.getLongCode())) { // 长代码半模糊匹配成功
if (this.getKwCheckFlag() == 1) { // 关键字精确匹配
if (this.getKeyWord().equalsIgnoreCase(kw)) { // 关键字精确匹配成功
return COMPARE_SUCCESS;
} else { // 关键字精确匹配失败
return COMPARE_FAIL_KEYWORD;
}
} else { // 关键字模糊匹配
if (this.getKeyWord().equalsIgnoreCase("")) { // 关键字模糊匹配成功
return COMPARE_SUCCESS;
} else if (kw.toUpperCase().startsWith(
this.getKeyWord().toUpperCase())) { // 关键字半模糊匹配成功
return COMPARE_SUCCESS;
} else { // 关键字模糊匹配失败
return COMPARE_FAIL_KEYWORD;
}
}
} else { // 长号码模糊匹配
if (this.getLongCode().equalsIgnoreCase("")) {
if (this.getKwCheckFlag() == 1) { // 关键字精确匹配
if (this.getKeyWord().equalsIgnoreCase(kw)) { // 关键字精确匹配成功
return COMPARE_SUCCESS;
} else { // 关键字精确匹配失败
return COMPARE_FAIL_KEYWORD;
}
} else { // 关键字模糊匹配
if (this.getKeyWord().equalsIgnoreCase("")) { // 关键字模糊匹配成功
return COMPARE_SUCCESS;
} else if (kw.toUpperCase().startsWith(
this.getKeyWord().toUpperCase())) { // 关键字半模糊匹配成功
return COMPARE_SUCCESS;
} else { // 关键字模糊匹配失败
return COMPARE_FAIL_KEYWORD;
}
}
} else {
return COMPARE_FAIL_LONGCODE;
}
}
}
} else {
return COMPARE_FAIL_OPRORPRO;
}
}
public static int searchOrder(List<DeliverRouter> list,
Standard_Inner_Deliver sid) {
int rtn = -1;
for (DeliverRouter or : list) {
if (or.compare(sid.getDestNumber(), sid.getContentString(), sid
.getOperatorID(), sid.getProvinceID(), sid.getSrcClientID()) == 0) {
sid.setDesClientID(or.getCoagentID());
sid.setProductID(or.getProductID());
sid.setServiceCodeID(or.getServiceCodeID());
sid.setMessageType((short) or.getMessageType());
if (or.getOrderID() > 0) {
rtn = or.getOrderID();
} else {
rtn = 0;
}
break;
}
}
return rtn;
}
public String toString() {
StringBuffer sb = new StringBuffer();
sb.append("gatewayID : ").append(gatewayID).append("\t");
sb.append("longCode : ").append(longCode).append("\t");
sb.append("keyWord : ").append(keyWord).append("\t");
sb.append("coagentID : ").append(coagentID).append("\t");
sb.append("lcCheckFlag : ").append(lcCheckFlag).append("\t");
sb.append("kwCheckFlag : ").append(kwCheckFlag).append("\t");
sb.append("operatorID : ").append(operatorID).append("\t");
sb.append("provinceID : ").append(provinceID).append("\t");
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -