C#字典查询

238 阅读4分钟

为了减少类的实例,这里定义了一个静态类,并在类里面嵌了字典,于是有了下面几种方法的查询,三种查询方法 代码如下:

  public static  class PddCodeAndStatusHelper
    {
        //返回错误码与错误信息对照表
        public readonly static Dictionary<int, string> codeDic = new Dictionary<int, string>();

        //物流状态与状态描述对照表
        public readonly static Dictionary<string, string> statusDic = new Dictionary<string, string>();

        static PddCodeAndStatusHelper()
        {

            //返回错误码与错误信息对照表
            codeDic.Add(0, "成功");//接口调用成功,无业务、系统异常
            codeDic.Add(9999, "失败");//业务失败,重复调用接口也不会成功的异常码
            codeDic.Add(9990, "系统异常--ISV 系统内部发生异常");
            codeDic.Add(1001, "非法的渠道编号--ship_id 有误");
            codeDic.Add(1100, "签名为空");

            codeDic.Add(1101, "验签信息错误");
            codeDic.Add(1202, "缺少必填字段");
            codeDic.Add(1204, "推送消息解析失败");
            codeDic.Add(1205, "时间戳格式有误");
            codeDic.Add(1206, "物流轨迹数超过阈值");

            codeDic.Add(1208, "超过调用频率限制");
            codeDic.Add(1209, "用户没有授权此接口");
            codeDic.Add(1210, "当前接口系统维护,暂时下线,请稍后再试");
            codeDic.Add(1211, "重复订阅");
            codeDic.Add(1230, "不存在的运单");

            codeDic.Add(1250, "不支持推送");
            codeDic.Add(1251, "消息体过大");


            //物流状态与状态描述对照表
            statusDic.Add("GOT", "揽件");
            statusDic.Add("SEND", "派件");
            statusDic.Add("SIGN", "签收");
            statusDic.Add("STAY_IN_WAREHOUSE", "留仓");
            statusDic.Add("OTHER", "其他");

            statusDic.Add("RETURN", "退件");
            statusDic.Add("CLEARANCE_START", "清关开始");
            statusDic.Add("TRUCK_IN", "到车");
            statusDic.Add("TRUCK_OUT", "发车");

            //问题件
            statusDic.Add("FAIL_100", "异常天气");
            statusDic.Add("FAIL_101", "客户电话无人接听");
            statusDic.Add("FAIL_102", "客户要求改派地址");
            statusDic.Add("FAIL_103", "与客户协商另约时间派送");
            statusDic.Add("FAIL_104", "客户电话错误");

            statusDic.Add("FAIL_105", "客户地址错误");
            statusDic.Add("FAIL_106", "超区件");
            statusDic.Add("FAIL_107", "包装破损或污损");
            statusDic.Add("FAIL_108", "系统问题");
            statusDic.Add("FAIL_109", "延迟-不可抗力");

            statusDic.Add("FAIL_110", "其他原因失败");
            statusDic.Add("FAIL_111", "客户地址不详且联系不到客户");
            statusDic.Add("FAIL_112", "商家拦截");
            statusDic.Add("FAIL_113", "客户要求暂放/自提");
            statusDic.Add("FAIL_114", "错发件");

            statusDic.Add("FAIL_115", "违禁品");
            statusDic.Add("FAIL_116", "疫情相关原因");
            statusDic.Add("FAIL_601", "检疫审核未过");
            statusDic.Add("FAIL_602", "单证审核未过");
            statusDic.Add("FAIL_603", "海关抽检未过");

            statusDic.Add("FAIL_604", "订购人购买超过年度限额");
            statusDic.Add("FAIL_651", "海关系统维护");
            statusDic.Add("FAIL_652", "查验");
            statusDic.Add("FAIL_653", "订购人姓名或身份信息不一致");
            statusDic.Add("FAIL_699", "清关异常 其他原因");

            //REJECTION  拒签
            statusDic.Add("REJECTION_200", "其他原因拒收");
            statusDic.Add("REJECTION _201", "外包装完好,现场未开箱,客户无理由拒收");
            statusDic.Add("REJECTION_202", "外包装完好,现场已开箱,内物完好,客户无理由拒收");
            statusDic.Add("REJECTION_203", "因用户地址错误,导致客户拒收");
            statusDic.Add("REJECTION_204", "物流商品丢失,导致客户拒收");


            statusDic.Add("REJECTION_205", "外包装完好,开箱后发现内商品少附件/短少,导致客户拒收");
            statusDic.Add("REJECTION_206", "(非开箱服务)客户强制要求开箱");
            statusDic.Add("REJECTION_207", "外包装破损,导致客户拒收");
            statusDic.Add("REJECTION_208", "外包装完好,开箱后内外商品不相符,导致客户拒收");
            statusDic.Add("REJECTION_209", "外包装破损,开箱后内外商品不相符,导致客户拒收");


            statusDic.Add("REJECTION_210", "外包装破损,开箱后发现内商品少附件/短少,导致客户拒收");
            statusDic.Add("REJECTION_211", "客户拒收,现场要求退回");



            //SIGN_ON_BEHALF代收点代签
            statusDic.Add("SIGN_ON_BEHALF_300", "包裹到代收点,客户正常签收");
            statusDic.Add("SIGN_ON_BEHALF_301", "包裹到代收点后,客户要求送货上门");
            statusDic.Add("SIGN_ON_BEHALF_302", "包裹到代收点后,因客户原因超过 24 小时未取件");
            statusDic.Add("SIGN_ON_BEHALF_303", "包裹到代收点后,客户拒签");

            //ARRIVAL  到件
            statusDic.Add("ARRIVAL_100", "陆运到达");
            statusDic.Add("ARRIVAL_101", "航空到达");
            statusDic.Add("ARRIVAL_102", "河或海运到达");
            statusDic.Add("ARRIVAL_103", "铁路到达");


            //DEPARTURE 发件
            statusDic.Add("DEPARTURE_100", "陆运发出");
            statusDic.Add("DEPARTURE_101", "航空发出");
            statusDic.Add("DEPARTURE_102", "河或海运发出");
            statusDic.Add("DEPARTURE_103", "铁路发出");

            //IN_CABINET 入柜/入代收点
            statusDic.Add("IN_CABINET_401", "正常入柜/入代收点");
            statusDic.Add("IN_CABINET_402", "超时未取件");

            //OUT_CABINET  出柜/出代收点
            statusDic.Add("OUT_CABINET_501", "收件人取件通知,正常出柜/出代收点");
            statusDic.Add("OUT_CABINET_502", "快递员取消派件通知,快递员已经将快件从快递柜取走");
            statusDic.Add("OUT_CABINET_503", "管理员取件");

            //CLEARANCE_FINISH 清关结束
            statusDic.Add("CLEARANCE_FINISH_101", "BC(海外直邮报关");
            statusDic.Add("CLEARANCE_FINISH_102", "CC(个人物品报关");
            statusDic.Add("CLEARANCE_FINISH_103", "BBC(保税");
            statusDic.Add("CLEARANCE_FINISH_104", "邮关");
            statusDic.Add("CLEARANCE_FINISH_105", "一般贸易");


        
        }
        /// <summary>
        /// 获取字典的内容
        /// </summary>
        /// <param name="code"></param>
        /// <returns></returns>
        public static string  GetCodeMsg(int code)
        {
            string msg = "";

            if (codeDic.ContainsKey(code))
            {
                msg = codeDic[code];
            }
            return msg;
             //string value = (from entry in codeDic//这个方法也是可以的
             //             where entry.Key == code
             //             select entry.Value).FirstOrDefault();
            
        }
        /// <summary>
        /// 获取状态的值
        /// </summary>
        /// <param name="statuCode"></param>
        /// <returns></returns>
        public static string GetStatusMsg(string statuCode)
        {
            string msg = "";
          //  msg = statusDic[statuCode];
            //msg = statusDic.FirstOrDefault(x => x.Key == statuCode).Value;这个方法也是可以的
            if (statusDic.ContainsKey(statuCode))
            {
                msg = statusDic[statuCode];
            }
            return msg;
        }
         
    }

调用代码

                 string reuslt="";
                reuslt = PddCodeAndStatusHelper.GetCodeMsg(code);
                reuslt+= "-----"+ PddCodeAndStatusHelper.GetStatusMsg(statuCode);