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

📄 deliverrouter.java

📁 短信开发用于文件交换处理转发的类模块
💻 JAVA
📖 第 1 页 / 共 2 页
字号:
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 + -