/// <summary>
        /// 执行后台换卡操作
        /// </summary>
        /// <param name="_cardInfo">卡信息对象</param>
        /// <param name="key">密码</param>
        /// <param name="isAdd"></param>
        /// <returns></returns>
        public string ChangeCardInitAndBack(Hashtable _cardInfo, Hashtable htCardInfo, DataAccessor theDataAccessor, ref SystemMessageInfo _info)
        {
            //string InitParameter, string HistoryParameter, string ResetCardParameter
            //调用WebService,把theCardTypeInfo转成Hashtable再转成Xml以便调用
            //Hashtable objHashtable = _objICardInfoDAL.InfoToHashtable(_cardInfo);

            //封装初始化需要用到的参数
            XmlDocument objXmlDocument = Helper.FormatConvert.HashtableToXml(_cardInfo);
            string      InitParameter  = HelperClass.EncryptDESByKey8(objXmlDocument.OuterXml);

            //封装需要记录的卡历史数据
            Dictionary <string, object> arr = new Dictionary <string, object>();

            //执行数据库存放
            arr["ICode"]          = "ITSP2_RFID_CS_CarHistoryInsert";
            arr["IVer"]           = "1.0.0.1";
            arr["saas_id"]        = htCardInfo["saas_id"];
            arr["operation_type"] = htCardInfo["operation_type_init"].ToString();  //初始化
            arr["card_id"]        = htCardInfo["card_id"];
            arr["no"]             = htCardInfo["no"];
            arr["address_type"]   = htCardInfo["address_type"];
            arr["network_id"]     = htCardInfo["network_id"];
            arr["operation_memo"] = htCardInfo["operation_memo_init"].ToString(); //操作事项
            arr["operation_user"] = htCardInfo["operation_user"];
            arr["card_cost_type"] = htCardInfo["cost_type"];                      //当前充值卡的扣费类型
            arr["volume"]         = htCardInfo["volume"];

            DataTable table = ConvertMethod.getDateTable("msgTable", arr);
            DataRow   dr    = table.NewRow();

            dr["ICode"]          = "ITSP2_RFID_CS_CarHistoryInsert";
            dr["IVer"]           = "1.0.0.1";
            dr["saas_id"]        = htCardInfo["saas_id"];
            dr["operation_type"] = htCardInfo["operation_type_payment"].ToString(); //初始化
            dr["card_id"]        = htCardInfo["card_id"];
            dr["no"]             = htCardInfo["no"];
            dr["address_type"]   = htCardInfo["address_type"];
            dr["network_id"]     = htCardInfo["network_id"];
            dr["operation_memo"] = htCardInfo["operation_memo_payment"].ToString(); //操作事项
            dr["operation_user"] = htCardInfo["operation_user"];
            dr["card_cost_type"] = htCardInfo["cost_type"];                         //当前充值卡的扣费类型
            dr["volume"]         = htCardInfo["volume"];

            table.Rows.Add(dr);
            string HistoryParameter = ConvertMethod.CDataToXml(table);

            //加密xml进行返回
            HistoryParameter = HelperClass.EncryptDESByKey8(HistoryParameter);

            string resoue = _objICardInfoDAL.UpdateCarInfoAndChangeCardHistoryRecord(InitParameter, HistoryParameter);

            //先解密成xml格式
            string str = HelperClass.DecryptDESByKey8(resoue);
            //把字符串转换成表对象
            DataSet parameterTable = ConvertMethod.CXmlToDataSet(str);

            //直接返回操作结果
            return(parameterTable.Tables[0].Rows[0]["msgCode"].ToString());
        }
        /// <summary>
        /// 执行后台初始化
        /// </summary>
        /// <param name="_cardInfo">卡信息对象</param>
        /// <param name="key">密码</param>
        /// <param name="isAdd"></param>
        /// <returns></returns>
        public string InsertCardInfo(Hashtable _cardInfo, Hashtable htCardInfo, DataAccessor theDataAccessor, ref SystemMessageInfo _info)
        {
            //调用WebService,把theCardTypeInfo转成Hashtable再转成Xml以便调用
            //Hashtable objHashtable = _objICardInfoDAL.InfoToHashtable(_cardInfo);
            XmlDocument objXmlDocument = Helper.FormatConvert.HashtableToXml(_cardInfo);
            string      message        = _objICardInfoDAL.InsertCardInfo(HelperClass.EncryptDESByKey8(objXmlDocument.OuterXml));

            Dictionary <string, object> arr = new Dictionary <string, object>();
            string resoue = SystemConstant.StringEmpty;

            if (_cardInfo["status"] != null)
            {
                int length = _cardInfo["status"].Equals(CardTypeInfo.CardTypeInfoDefaultCardStatus.已初始化.ToString("D")) ? 1 : 2;
                for (int i = 0; i < length; i++)
                {
                    //执行数据库存放
                    arr["ICode"]          = "ITSP2_RFID_CS_CarHistoryInsert";
                    arr["IVer"]           = "1.0.0.1";
                    arr["saas_id"]        = htCardInfo["saas_id"];
                    arr["operation_type"] = (i == 0 ? htCardInfo["operation_type_init"].ToString() : htCardInfo["operation_type_payment"].ToString()); //初始化
                    arr["card_id"]        = htCardInfo["card_id"];
                    arr["no"]             = htCardInfo["no"];
                    arr["address_type"]   = htCardInfo["address_type"];
                    arr["network_id"]     = htCardInfo["network_id"];
                    arr["operation_memo"] = (i == 0 ? htCardInfo["operation_memo_init"].ToString() : htCardInfo["operation_memo_payment"].ToString()); //操作事项
                    arr["operation_user"] = htCardInfo["operation_user"];
                    arr["card_cost_type"] = htCardInfo["cost_type"];                                                                                   //当前充值卡的扣费类型
                    arr["volume"]         = htCardInfo["volume"];

                    DataTable table     = ConvertMethod.getDateTable("msgTable", arr);
                    string    Parameter = ConvertMethod.CDataToXml(table);

                    //加密xml进行返回
                    Parameter = HelperClass.EncryptDESByKey8(Parameter);
                    resoue    = _objICardInfoDAL.InsertCarInformationHistoryRecord(Parameter);
                }
            }
            //先解密成xml格式
            string str = HelperClass.DecryptDESByKey8(resoue);
            //把字符串转换成表对象
            DataSet parameterTable = ConvertMethod.CXmlToDataSet(str);

            if (parameterTable.Tables[0].Rows[0]["msgCode"].ToString() == "充值数据成功!")
            {
                return(message); //未实现,默认全部成功
            }
            else
            {
                return("99");
            }
        }
        /// <summary>
        /// 执行申请换卡操作并写入卡历史表
        /// </summary>
        /// <param name="theCardTypeInfo">实体层对象</param>
        /// <param name="key">密码</param>
        /// <param name="isAdd">判断是否需要写入数据库</param>
        /// <returns>0所有操作成功,1网络连接不成功,99是远程服务器方法存储失败,其他状态</returns>
        public int UpdateCarInfoAndApplyChangeCardHistoryRecord(CardInfo _cardInfo, string key, bool isAdd)
        {
            try
            {
                int p = 0; //默认写入是全部成功
                Dictionary <string, object> arr = new Dictionary <string, object>();
                //获得对应写入后台的文字描述
                if (_cardInfo.cost_type == CardInfo.CardTypeInfoCostType.金额卡)
                {
                    arr["volume"] = "-" + Convert.ToDecimal(_cardInfo.money).ToString("0.000").Substring(0, Convert.ToDecimal(_cardInfo.money).ToString("0.000").Length - 2); //量
                }
                else if (_cardInfo.cost_type == CardInfo.CardTypeInfoCostType.限次卡)
                {
                    arr["volume"] = "-" + _cardInfo.times; //量
                }
                else if (_cardInfo.cost_type == CardInfo.CardTypeInfoCostType.限期卡)
                {
                    arr["volume"] = _cardInfo.end_date.ToString("yyyyMMdd"); //量
                }
                else if (_cardInfo.cost_type == CardInfo.CardTypeInfoCostType.限时卡)
                {
                    int g = _cardInfo.charges_date / 60 * 10 + _cardInfo.charges_date % 60 / 10;
                    arr["volume"] = "-" + g; //量
                }
                if (isAdd)
                {
                    //判断写卡是否成功
                    if (p != 0)
                    {
                        return(p);
                    }
                    else
                    {
                        //执行数据库存放
                        arr["ICode"]          = "ITSP2_RFID_CS_UpdateCarInfoAndApplyChangeCardHistoryRecord";
                        arr["IVer"]           = "1.0.0.1";
                        arr["saas_id"]        = _cardInfo.saas_id;
                        arr["operation_type"] = "3"; //挂失
                        arr["card_id"]        = _cardInfo.id;
                        arr["no"]             = _cardInfo.no;
                        arr["address_type"]   = "1";
                        arr["network_id"]     = _cardInfo.Network_id;
                        arr["operation_memo"] = "申请换卡操作成功"; //操作事项
                        arr["operation_user"] = _cardInfo.modify_user;



                        DataTable table     = ConvertMethod.getDateTable("msgTable", arr);
                        string    Parameter = ConvertMethod.CDataToXml(table);

                        //加密xml进行返回
                        Parameter = HelperClass.EncryptDESByKey8(Parameter);
                        string resoue = _objICardInfoDAL.UpdateCarInfoAndApplyChangeCardHistoryRecord(Parameter);


                        //先解密成xml格式
                        string str = HelperClass.DecryptDESByKey8(resoue);
                        //把字符串转换成表对象
                        DataSet parameterTable = ConvertMethod.CXmlToDataSet(str);
                        if (parameterTable.Tables[0].Rows[0]["msgCode"].ToString() == "申请换卡操作成功!")
                        {
                            return(0); //未实现,默认全部成功
                        }
                        else
                        {
                            return(99);
                        }
                    }
                }
                else
                { //否则就是更改值,不进行数据库的存储
                    return(0);
                }
            }
            catch (Exception ex)
            {
                Bouwa.Helper.Class.Log.WriterLine(Bouwa.Helper.Class.ELevel.error, "方法名:UpdateCarInfoAndApplyChangeCardHistoryRecord(CardInfo _cardInfo, string key),卡信息BLL层对数据操作时出现异常!", ex.Message);
                return(1);
            }
        }
        /// <summary>
        /// 执行退卡操作并写入卡历史表
        /// </summary>
        /// <param name="theCardTypeInfo">实体层对象</param>
        /// <param name="key">密码</param>
        /// <param name="isAdd">判断是否需要写入数据库</param>
        /// <returns>0所有操作成功,1网络连接不成功,99是远程服务器方法存储失败,其他状态</returns>
        public int UpdateCarInfoAndBackCardHistoryRecord(CardInfo _cardInfo, string key, bool isAdd)
        {
            try
            {
                Dictionary <string, object> arr = new Dictionary <string, object>();
                //先读卡
                string[] mary1 = ConvertToBytes(RFIDClass.ReadCardAndReturnStatus(key, 1));
                //先进行写卡
                int p = -1;
                //先修改卡内状态,退卡状态为 3
                p = RFIDClass.WriterCardAndReturnStatus(_cardInfo.card_id, key, 1, 1, HelperClass.EncryptByString(mary1[2].Substring(0, 13) + ((int)_cardInfo.status) + mary1[2].Substring(14)));
                //修改最后操作时间为当前时间
                p = RFIDClass.WriterCardAndReturnStatus(_cardInfo.card_id, key, 1, 2, HelperClass.EncryptByString(DateTime.Now.ToString("yyyyMMddHHmmss") + mary1[3].Substring(12)));
                //获得对应写入后台的文字描述
                if (_cardInfo.cost_type == CardInfo.CardTypeInfoCostType.金额卡)
                {
                    arr["volume"] = "-" + Convert.ToDecimal(_cardInfo.money).ToString("0.000").Substring(0, Convert.ToDecimal(_cardInfo.money).ToString("0.000").Length - 2); //量
                }
                else if (_cardInfo.cost_type == CardInfo.CardTypeInfoCostType.限次卡)
                {
                    arr["volume"] = "-" + _cardInfo.times; //量
                }
                else if (_cardInfo.cost_type == CardInfo.CardTypeInfoCostType.限期卡)
                {
                    arr["volume"] = _cardInfo.end_date.ToString("yyyyMMdd"); //量
                }
                else if (_cardInfo.cost_type == CardInfo.CardTypeInfoCostType.限时卡)
                {
                    int g = _cardInfo.charges_date / 60 * 10 + _cardInfo.charges_date % 60 / 10;
                    arr["volume"] = "-" + g; //量
                }
                if (isAdd)
                {
                    //判断写卡是否成功
                    if (p != 0)
                    {
                        return(p);
                    }
                    else
                    {
                        //执行数据库存放
                        arr["ICode"]          = "ITSP2_RFID_CS_UpdateCarInfoAndBackCardHistory";
                        arr["IVer"]           = "1.0.0.1";
                        arr["saas_id"]        = _cardInfo.saas_id;
                        arr["operation_type"] = "2"; //退卡
                        arr["card_id"]        = _cardInfo.id;
                        arr["no"]             = _cardInfo.no;
                        arr["address_type"]   = "1";
                        arr["network_id"]     = _cardInfo.Network_id;
                        arr["operation_memo"] = "退卡操作成功"; //操作事项
                        arr["operation_user"] = _cardInfo.modify_user;



                        DataTable table     = ConvertMethod.getDateTable("msgTable", arr);
                        string    Parameter = ConvertMethod.CDataToXml(table);

                        //加密xml进行返回
                        Parameter = HelperClass.EncryptDESByKey8(Parameter);
                        string resoue = _objICardInfoDAL.UpdateCarInfoAndBackCardHistoryRecord(Parameter);


                        //先解密成xml格式
                        string str = HelperClass.DecryptDESByKey8(resoue);
                        //把字符串转换成表对象
                        DataSet parameterTable = ConvertMethod.CXmlToDataSet(str);
                        if (parameterTable.Tables[0].Rows[0]["msgCode"].ToString() == "退卡操作成功!")
                        {
                            return(0); //未实现,默认全部成功
                        }
                        else
                        {
                            return(99);
                        }
                    }
                }
                else
                { //否则就是更改值,不进行数据库的存储
                    return(0);
                }
            }
            catch (Exception ex)
            {
                Bouwa.Helper.Class.Log.WriterLine(Bouwa.Helper.Class.ELevel.error, "方法名:UpdateCarInfoAndBackCardHistoryRecord(CardInfo _cardInfo, string key),卡信息BLL层对数据操作时出现异常!", ex.Message);
                return(1);
            }
        }
        /// <summary>
        /// 执行卡重置
        /// </summary>
        /// <param name="theCardTypeInfo">实体层对象</param>
        /// <param name="key">密码</param>
        /// <returns>0所有操作成功,1网络连接不成功,99是远程服务器方法存储失败,其他状态</returns>
        public int ResetCarInforAndCarHistoryByID(CardInfo _cardInfo, string key)
        {
            try
            {
                int cSector = 1; //保存要操作的扇区下标
                //先执行密码修改
                string[] mary = RFIDClass.UpdateCardPassWordAndReturnStatus(_cardInfo.card_id, cSector, key);
                if (mary[0] != "0") //修改密码错误就直接返回错误状态
                {
                    return(Convert.ToInt32(mary[0]));
                }
                else //成功继续往下走
                {
                    //先读卡
                    string[] mary1 = ConvertToBytes(RFIDClass.ReadCardAndReturnStatus(key, cSector));
                    //保存一份副本
                    string[] maryback = new string[3];
                    for (int i = 1; i < mary1.Length - 1; i++)
                    {
                        maryback[i - 1] = mary1[i];
                    }

                    //传入默认密码,执行初始化写入第一扇区
                    RFIDClass.WriterCardAndReturnStatus(_cardInfo.card_id, "", cSector, 0, "");
                    RFIDClass.WriterCardAndReturnStatus(_cardInfo.card_id, "", cSector, 1, "");
                    int p = RFIDClass.WriterCardAndReturnStatus(_cardInfo.card_id, "", cSector, 2, "");
                    if (p != 0) //如果出现异常就执行返回
                    {
                        return(p);
                    }
                    else //如果初始化卡成功,则执行下一步数据库录入
                    {
                        Dictionary <string, object> arr = new Dictionary <string, object>();
                        arr["ICode"]       = "ITSP2_RFID_CS_ResetCarInforAndCarHistory";
                        arr["IVer"]        = "1.0.0.1";
                        arr["card_id"]     = _cardInfo.card_id;
                        arr["no"]          = _cardInfo.no;
                        arr["modify_user"] = _cardInfo.modify_user;


                        DataTable table     = ConvertMethod.getDateTable("msgTable", arr);
                        string    Parameter = ConvertMethod.CDataToXml(table);

                        //加密xml进行返回
                        Parameter = HelperClass.EncryptDESByKey8(Parameter);
                        string resoue = _objICardInfoDAL.ResetCarInforAndCarHistoryByID(Parameter);


                        //先解密成xml格式
                        string str = HelperClass.DecryptDESByKey8(resoue);
                        //把字符串转换成表对象
                        DataSet parameterTable = ConvertMethod.CXmlToDataSet(str);
                        if (parameterTable.Tables[0].Rows[0]["msgCode"].ToString() == "卡重置成功!")
                        {
                            return(0); //未实现,默认全部成功
                        }
                        else
                        {
                            //否则就是失败,需要执行还原
                            RFIDClass.WriterCardAndReturnStatus(_cardInfo.card_id, "", cSector, 0, HelperClass.EncryptByString(maryback[0]));
                            RFIDClass.WriterCardAndReturnStatus(_cardInfo.card_id, "", cSector, 1, HelperClass.EncryptByString(maryback[1]));
                            RFIDClass.WriterCardAndReturnStatus(_cardInfo.card_id, "", cSector, 2, HelperClass.EncryptByString(maryback[2]));
                            RFIDClass.UpdateCardPassWordAndReturnStatus(_cardInfo.card_id, cSector, "", key); //修改密码
                            return(99);
                        }
                    }
                    //结束
                }
            }
            catch (Exception ex)
            {
                Bouwa.Helper.Class.Log.WriterLine(Bouwa.Helper.Class.ELevel.error, "方法名:ResetCarInforAndCarHistoryByID(CardInfo _cardInfo, string key),卡信息BLL层对数据操作时出现异常!", ex.Message);
                return(1);
            }
        }
        /// <summary>
        /// 执行充值
        /// </summary>
        /// <param name="theCardTypeInfo">实体层对象</param>
        /// <param name="key">密码</param>
        /// <param name="value">充值的数目</param>
        /// <param name="isAdd">判断是否需要写入数据库</param>
        /// <returns>0所有操作成功,1网络连接不成功,99是远程服务器方法存储失败,其他状态</returns>
        public int Update(CardInfo _cardInfo, string key, string value, bool isAdd)
        {
            try
            {
                Dictionary <string, object> arr = new Dictionary <string, object>();
                //先读卡
                string[] mary1      = ConvertToBytes(RFIDClass.ReadCardAndReturnStatus(key, 1));
                string   inputValue = string.Empty;
                //先进行写卡
                int p = -1;
                if (_cardInfo.cost_type == CardInfo.CardTypeInfoCostType.金额卡)
                {
                    //获得要写入的值
                    inputValue = mary1[1].Substring(0, 4) + ConvertToStringByInt32(_cardInfo.money.ToString("0.000").Substring(0, _cardInfo.money.ToString("0.000").Length - 2).Replace(".", "")) + mary1[1].Substring(9);
                    p          = RFIDClass.WriterCardAndReturnStatus(_cardInfo.card_id, key, 1, 0, HelperClass.EncryptByString(inputValue));
                    //修改状态
                    p             = RFIDClass.WriterCardAndReturnStatus(_cardInfo.card_id, key, 1, 1, HelperClass.EncryptByString(mary1[2].Substring(0, 13) + "2" + mary1[2].Substring(14)));
                    arr["volume"] = Convert.ToDecimal(value).ToString("0.000").Substring(0, Convert.ToDecimal(value).ToString("0.000").Length - 2); //量
                    inputValue    = "充值" + Convert.ToDecimal(value).ToString("0.000").Substring(0, Convert.ToDecimal(value).ToString("0.000").Length - 2) + "0元";
                }
                else if (_cardInfo.cost_type == CardInfo.CardTypeInfoCostType.限次卡)
                {
                    //获得要写入的值
                    inputValue = mary1[1].Substring(0, 4) + ConvertToStringByInt32(_cardInfo.times.ToString()) + mary1[1].Substring(9);
                    p          = RFIDClass.WriterCardAndReturnStatus(_cardInfo.card_id, key, 1, 0, HelperClass.EncryptByString(inputValue));
                    //修改状态
                    p             = RFIDClass.WriterCardAndReturnStatus(_cardInfo.card_id, key, 1, 1, HelperClass.EncryptByString(mary1[2].Substring(0, 13) + "2" + mary1[2].Substring(14)));
                    arr["volume"] = value; //量
                    inputValue    = "增加" + value.ToString() + "次";
                }
                else if (_cardInfo.cost_type == CardInfo.CardTypeInfoCostType.限期卡)
                {
                    //获得要写入的值
                    inputValue    = mary1[2].Substring(0, 6) + _cardInfo.end_date.ToString("yyyyMMdd").Substring(2) + mary1[2].Substring(12, 1) + "2" + mary1[2].Substring(14);
                    p             = RFIDClass.WriterCardAndReturnStatus(_cardInfo.card_id, key, 1, 1, HelperClass.EncryptByString(inputValue)); //修改对应的最晚到期时间
                    arr["volume"] = _cardInfo.end_date.ToString("yyyyMMdd");                                                                    //量
                    inputValue    = "更新到期时间为" + _cardInfo.end_date.ToString("yyyy-MM-dd");
                }
                else if (_cardInfo.cost_type == CardInfo.CardTypeInfoCostType.限时卡)
                {
                    int g = _cardInfo.charges_date / 60 * 10 + _cardInfo.charges_date % 60 / 10;
                    //获得要写入的值
                    inputValue = mary1[1].Substring(0, 4) + ConvertToStringByInt32(g.ToString()) + mary1[1].Substring(9);
                    p          = RFIDClass.WriterCardAndReturnStatus(_cardInfo.card_id, key, 1, 0, HelperClass.EncryptByString(inputValue));

                    //修改状态
                    p             = RFIDClass.WriterCardAndReturnStatus(_cardInfo.card_id, key, 1, 1, HelperClass.EncryptByString(mary1[2].Substring(0, 13) + "2" + mary1[2].Substring(14)));
                    arr["volume"] = value; //量
                    inputValue    = "充值" + value.ToString() + "分钟";
                }
                if (isAdd)
                {
                    //判断写卡是否成功
                    if (p != 0)
                    {
                        return(p);
                    }
                    else
                    {
                        //执行数据库存放
                        arr["ICode"]          = "ITSP2_RFID_CS_CarHistoryInsert";
                        arr["IVer"]           = "1.0.0.1";
                        arr["saas_id"]        = _cardInfo.saas_id;
                        arr["operation_type"] = "5"; //充值
                        arr["card_id"]        = _cardInfo.id;
                        arr["no"]             = _cardInfo.no;
                        arr["address_type"]   = "1";
                        arr["network_id"]     = _cardInfo.Network_id;
                        arr["operation_memo"] = inputValue;               //操作事项
                        arr["operation_user"] = _cardInfo.modify_user;
                        arr["card_cost_type"] = (int)_cardInfo.cost_type; //当前充值卡的扣费类型


                        DataTable table     = ConvertMethod.getDateTable("msgTable", arr);
                        string    Parameter = ConvertMethod.CDataToXml(table);

                        //加密xml进行返回
                        Parameter = HelperClass.EncryptDESByKey8(Parameter);
                        string resoue = _objICardInfoDAL.InsertCarInformationHistoryRecord(Parameter);


                        //先解密成xml格式
                        string str = HelperClass.DecryptDESByKey8(resoue);
                        //把字符串转换成表对象
                        DataSet parameterTable = ConvertMethod.CXmlToDataSet(str);
                        if (parameterTable.Tables[0].Rows[0]["msgCode"].ToString() == "充值数据成功!")
                        {
                            return(0); //未实现,默认全部成功
                        }
                        else
                        {
                            return(99);
                        }
                    }
                }
                else
                { //否则就是更改值,不进行数据库的存储
                    return(0);
                }
            }
            catch (Exception ex)
            {
                Bouwa.Helper.Class.Log.WriterLine(Bouwa.Helper.Class.ELevel.error, "方法名:Update(CardInfo _cardInfo, string key),卡信息BLL层对数据操作时出现异常!", ex.Message);
                return(1);
            }
        }