using System;
using System.Data;
using System.Collections.Generic;

using CallCenterApi.Model;
using CallCenter.Utility;

namespace CallCenterApi.BLL
{
	/// <summary>
	/// 1
	/// </summary>
	public partial class T_Sys_Area
	{
		private readonly CallCenterApi.DAL.T_Sys_Area dal=new CallCenterApi.DAL.T_Sys_Area();
		public T_Sys_Area()
		{}
		#region  Method

		/// <summary>
		/// 是否存在该记录
		/// </summary>
		public bool Exists(int F_AreaId)
		{
			return dal.Exists(F_AreaId);
		}

		/// <summary>
		/// 增加一条数据
		/// </summary>
		public int Add(CallCenterApi.Model.T_Sys_Area model)
		{
            OutRedis();
            return dal.Add(model);
		}

		/// <summary>
		/// 更新一条数据
		/// </summary>
		public bool Update(CallCenterApi.Model.T_Sys_Area model)
		{
            OutRedis();
            return dal.Update(model);
		}

		/// <summary>
		/// 删除一条数据
		/// </summary>
		public bool Delete(int F_AreaId)
		{
            OutRedis();
            return dal.Delete(F_AreaId);
		}
		/// <summary>
		/// 删除一条数据
		/// </summary>
		public bool DeleteList(string F_AreaIdlist )
		{
            OutRedis();
            return dal.DeleteList(F_AreaIdlist );
		}

		/// <summary>
		/// 得到一个对象实体
		/// </summary>
		public CallCenterApi.Model.T_Sys_Area GetModel(int F_AreaId)
		{
            var dt = GetRedis();
            if (dt != null)
            {
                var dr = dt.Select("F_AreaId=" + F_AreaId);
                if (dr != null && dr.Length > 0)
                {
                    return dal.DataRowToModel(dr[0]);
                }
                else
                {
                    return null;
                }
            }
            else
            {
                return dal.GetModel(F_AreaId);
            }
		}

		/// <summary>
		/// 得到一个对象实体，从缓存中
		/// </summary>
        //public CallCenterApi.Model.T_Sys_Area GetModelByCache(int F_AreaId)
        //{
			
        //    string CacheKey = "T_Sys_AreaModel-" + F_AreaId;
        //    object objModel = SZRX.Common.DataCache.GetCache(CacheKey);
        //    if (objModel == null)
        //    {
        //        try
        //        {
        //            objModel = dal.GetModel(F_AreaId);
        //            if (objModel != null)
        //            {
        //                int ModelCache = SZRX.Common.ConfigHelper.GetConfigInt("ModelCache");
        //                SZRX.Common.DataCache.SetCache(CacheKey, objModel, DateTime.Now.AddMinutes(ModelCache), TimeSpan.Zero);
        //            }
        //        }
        //        catch{}
        //    }
        //    return (CallCenterApi.Model.T_Sys_Area)objModel;
        //}

		/// <summary>
		/// 获得数据列表
		/// </summary>
		public DataSet GetList(string strWhere, string filedOrder="")
		{
           var dt = GetRedis();
            if (dt != null)
            {
                var ds = new DataSet();

                var drs = dt.Select(strWhere, filedOrder);
                if (drs.Length > 0)
                {
                    ds.Tables.Add(drs.CopyToDataTable());
                }
                else
                {
                    ds.Tables.Add(new DataTable());
                }

                return ds;
            }
            else
            {
                return dal.GetList(strWhere);
            }

		}

        /// <summary>
        /// 获得数据列表
        /// </summary>
        public DataSet GetListNoCache(string strWhere)
        {
            return dal.GetList(strWhere);
        }

        /// <summary>
        /// 获得前几行数据
        /// </summary>
        public DataSet GetList(int Top,string strWhere,string filedOrder)
		{
			return dal.GetList(Top,strWhere,filedOrder);
		}
		/// <summary>
		/// 获得数据列表
		/// </summary>
		public List<CallCenterApi.Model.T_Sys_Area> GetModelList(string strWhere, string filedOrder = "")
		{
            var dt = GetRedis();
            if (dt != null)
            {
                var dtnew = new DataTable();
                var drs = dt.Select(strWhere, filedOrder);
                if (drs.Length > 0)
                {
                    dtnew = drs.CopyToDataTable();
                }
                return DataTableToList(dtnew);
            }
            else
            {
                DataSet ds = dal.GetList(strWhere, filedOrder);
                return DataTableToList(ds.Tables[0]);
            }
        }
        /// <summary>
		/// 获得数据列表
		/// </summary>
		public List<CallCenterApi.Model.T_Sys_Area> GetModelListNoCache(string strWhere, string filedOrder = "")
        {
            DataSet ds = dal.GetList(strWhere, filedOrder);
            return DataTableToList(ds.Tables[0]);
        }
        /// <summary>
        /// 获得数据列表
        /// </summary>
        public List<CallCenterApi.Model.T_Sys_Area> DataTableToList(DataTable dt)
		{
			List<CallCenterApi.Model.T_Sys_Area> modelList = new List<CallCenterApi.Model.T_Sys_Area>();
			int rowsCount = dt.Rows.Count;
			if (rowsCount > 0)
			{
				CallCenterApi.Model.T_Sys_Area model;
				for (int n = 0; n < rowsCount; n++)
				{
					model = new CallCenterApi.Model.T_Sys_Area();
					if(dt.Rows[n]["F_AreaId"]!=null && dt.Rows[n]["F_AreaId"].ToString()!="")
					{
						model.F_AreaId=int.Parse(dt.Rows[n]["F_AreaId"].ToString());
					}
					if(dt.Rows[n]["F_AreaName"]!=null && dt.Rows[n]["F_AreaName"].ToString()!="")
					{
					model.F_AreaName=dt.Rows[n]["F_AreaName"].ToString();
					}
					if(dt.Rows[n]["F_Sort"]!=null && dt.Rows[n]["F_Sort"].ToString()!="")
					{
						model.F_Sort=int.Parse(dt.Rows[n]["F_Sort"].ToString());
					}
					modelList.Add(model);
				}
			}
			return modelList;
		}

		/// <summary>
		/// 获得数据列表
		/// </summary>
		public DataSet GetAllList()
		{
			return GetList("");
		}

        /// <summary>
        /// 分页获取数据列表
        /// </summary>
        //public DataSet GetList(int PageSize,int PageIndex,string strWhere)
        //{
        //return dal.GetList(PageSize,PageIndex,strWhere);
        //}

        #endregion  Method

        private DataTable GetRedis()
        {
            var strList = RedisHelper.StringGet("T_Sys_Area");
            if (strList != null)
            {
                return strList.ToString().ToObject<DataTable>();
            }
            else
            {
                return InRedis();
            }
        }

        private DataTable InRedis()
        {
            var dt = dal.GetList("").Tables[0];

            RedisHelper.StringSet("T_Sys_Area", dt.ToJson(), new TimeSpan(24, 0, 0));

            return dt;
        }

        private void OutRedis()
        {
            RedisHelper.KeyDelete("T_Sys_Area");
        }
    }
}

