using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using QMAPP.Entity.Sys;
using QMFrameWork.Data;
using System.Data;

namespace QMAPP.DAL.Sys
{
    public class FileTypeDAL : BaseDAL
    {
        #region 获取信息
        /// <summary>
        /// 获取信息
        /// </summary>
        /// <param name="">条件</param>
        /// <returns>*信息</returns>
        public FileType Get(FileType model)
        {
            try
            {
                using (IDataSession session = AppDataFactory.CreateMainSession())
                {
                    //获取信息
                    model = session.Get<FileType>(model);
                }
                return model;
            }
            catch (Exception ex)
            {
                throw ex;
            }
        }
        #endregion
         
        #region 获取列表
        /// <summary>
        /// 获取列表
        /// </summary>
        /// <param name="condition">条件</param>
        /// <param name="page">数据页</param>
        /// <returns>数据页</returns>
        public DataPage GetList(FileType condition, DataPage page)
        {
            string sql = null;
            List<DataParameter> parameters = new List<DataParameter>();
            try
            {
                sql = this.GetQuerySql(condition, ref parameters);
                //分页关键字段及排序
                page.KeyName = "TYPENO";
                if (string.IsNullOrEmpty(page.SortExpression))
                {
                    page.SortExpression = "UPDATETIME DESC";
                }
                using (IDataSession session = AppDataFactory.CreateMainSession())
                {
                    sql = this.ChangeSqlByDB(sql, session);
                    page = session.GetDataPage<FileType>(sql, parameters.ToArray(), page);
                }
                return page;
            }
            catch (Exception ex)
            {
                throw ex;
            }
        }
        #endregion
         
        #region 获取查询语句
        /// <summary>
        /// 获取查询语句
        /// </summary>
        /// <param name="user">查询条件</param>
        /// <param name="parameters">参数</param>
        /// <returns>查询语句</returns>
        private string GetQuerySql(FileType condition, ref List<DataParameter> parameters)
        {
            StringBuilder sqlBuilder = new StringBuilder();
            StringBuilder whereBuilder = new StringBuilder();
            try
            {
                //构成查询语句
                sqlBuilder.Append("SELECT TYPENO,TYPENAME,PARENTTYPENO,CREATEUSER,CREATEDATE,UPDATEUSER,UPDATEDATE ");
                sqlBuilder.Append("FROM T_QM_FILETYPE ");
                whereBuilder.Append(" AND FLGDEL<>1");
               
                if (whereBuilder.Length > 0)
                {
                    sqlBuilder.Append(" WHERE " + whereBuilder.ToString().Substring(4));
                }
                return sqlBuilder.ToString();
            }
            catch (Exception ex)
            {
                throw ex;
            }
        }
        #endregion
         
        #region 获取导出的数据
        /// <summary>
        /// 获取导出的数据
        /// </summary>
        /// <param name="user">查询条件</param>
        /// <returns>数据</returns>
        public DataTable GetExportData(FileType model)
        {
            DataTable dt = null;
            string sql = null;
            List<DataParameter> parameters = new List<DataParameter>();
            try
            {
                //构成查询语句
                sql = this.GetQuerySql(model, ref parameters);
                using (IDataSession session = AppDataFactory.CreateMainSession())
                {
                    sql = this.ChangeSqlByDB(sql, session);
                    dt = session.GetTable(sql, parameters.ToArray());
                    dt.TableName = "FileType";
                }
                return dt;
            }
            catch (Exception ex)
            {
                throw ex;
            }
        }
        #endregion
           
        #region 插入信息
        /// <summary>
        /// 插入信息(单表)
        /// </summary>
        /// <param name="">信息</param>
        /// <returns>插入行数</returns>
        public int Insert(FileType model)
        {
            int count = 0;
            try
            {
                using (IDataSession session = AppDataFactory.CreateMainSession())
                {
                    //插入基本信息
                    count = session.Insert<FileType>(model);
                }
                return count;
            }
            catch (Exception ex)
            {
                throw ex;
            }
        }
        #endregion

        #region 判断文件分类是否存在

        /// <summary>
        /// 判断文件分类是否存在
        /// </summary>
        /// <param name="model">信息</param>
        /// <returns>true@已存在;fasel@不存在。</returns>
        public bool ExistsFileType(FileType model)
        {
            string typeNo = "";
            int count = 0;
            string sql = null;
            try
            {
                if (string.IsNullOrEmpty(model.TYPENO) == false)
                {
                    typeNo = model.TYPENO;
                }

                sql = "SELECT COUNT(*) FROM T_QM_FILETYPE WHERE TYPENO <> @TYPENO AND TYPENAME=@TYPENAME";

                using (IDataSession session = AppDataFactory.CreateMainSession())
                {
                    sql = this.ChangeSqlByDB(sql, session);
                    count = Convert.ToInt32(session.ExecuteSqlScalar(sql, new DataParameter("TYPENO", typeNo), new DataParameter { ParameterName = "TYPENAME", Value = model.TYPENAME }));
                }

                if (count > 0)
                {
                    return true;
                }
                else
                {
                    return false;
                }

            }
            catch (Exception ex)
            {
                throw;
            }
        }

        #endregion
         
        #region 更新信息
        /// <summary>
        /// 更新信息
        /// </summary>
        /// <param name=""></param>
        /// <returns>更新行数</returns>
        public int Update(FileType model)
        {
            int count = 0;
            try
            {
                using (IDataSession session = AppDataFactory.CreateMainSession())
                {
                    //更新基本信息
                    count = session.Update<FileType>(model);
                }
                return count;
            }
            catch (Exception ex)
            {
                throw ex;
            }
        }
        #endregion
         
        #region 删除文件类型
        /// <summary>
        /// 删除
        /// </summary>
        /// <param name=""></param>
        /// <returns>删除个数</returns>
        public int Delete(FileType model)
        {
            StringBuilder sqlBuilder = new StringBuilder();
            List<DataParameter> parameters = new List<DataParameter>();
            int count = 0; 
            try
            {
                using (IDataSession session = AppDataFactory.CreateMainSession())
                {
                    //删除基本信息
                    sqlBuilder.Append("DELETE FROM T_QM_FILETYPE "); 
                    sqlBuilder.Append("WHERE  TYPENO = @TYPENO ");
                    parameters.Add(new DataParameter { ParameterName = "TYPENO", DataType = DbType.String, Value = model.TYPENO });
                    string sql = this.ChangeSqlByDB(sqlBuilder.ToString(), session);
                    count = session.ExecuteSql(sql, parameters.ToArray());
                }
                return count;
            }
            catch (Exception ex)
            {
                throw ex;
            }
        }
        #endregion

        #region 获取文件类型树菜单列表

        /// <summary>
        /// 获取文件类型树菜单列表
        /// </summary>
        /// <param name="condition">条件</param>
        /// <returns>同级别菜单列表</returns>
        public List<FileType> GetAllList()
        {
            List<DataParameter> parameters = new List<DataParameter>();
            List<FileType> list = null;
            StringBuilder sqlBuilder = new StringBuilder();
            try
            {
                //构成查询语句
                sqlBuilder.Append("SELECT TYPENO,TYPENAME,PARENTTYPENO,CREATEUSER,CREATEDATE,UPDATEUSER,UPDATEDATE ");
                sqlBuilder.Append("FROM T_QM_FILETYPE ");
                using (IDataSession session = AppDataFactory.CreateMainSession())
                {
                    list = session.GetList<FileType>(sqlBuilder.ToString(), parameters.ToArray()).ToList();
                }

                return list;
            }
            catch (Exception ex)
            {
                throw;
            }
        }

        #endregion
          
        #region 获取文件类型下拉列表
        /// <summary>
        /// 获取文件类型下拉列表
        /// </summary>
        /// <param name="model">查询条件</param>
        /// <returns>获取零件拉列表</returns>
        public List<FileType> GetCombox()
        {
            string sql = null; 
            List<DataParameter> parameters = null;
            List<FileType> list = null;
            DataQueryHelper queryHelper = new DataQueryHelper();
            try
            {
                sql = "SELECT " + queryHelper.GetSelectColumns<FileType>() + " FROM T_QM_FILETYPE";
                  
                parameters = new List<DataParameter>();

                using (IDataSession session = AppDataFactory.CreateMainSession())
                {
                    list = session.GetList<FileType>(sql, parameters.ToArray()).ToList();
                }

                return list;
            }
            catch (Exception ex)
            {
                throw ex;
            }
        }
        #endregion

    }  
}