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


namespace QMAPP.FJC.DAL.QT
{
    /// <summary>
    /// 模块名称:数据采集接口DAL
    /// 作    者:张鹏
    /// 编写日期:2017年08月31日
    /// </summary>
    public class DAIDAL
    {

        #region 获取信息
        /// <summary>
        /// 获取信息
        /// </summary>
        /// <param name="">条件</param>
        /// <returns>*信息</returns>
        public DAI Get(DAI info)
        {
            try
            {
                using (IDataSession session = AppDataFactory.CreateMainSession())
                {
                    //获取信息
                    info = session.Get<DAI>(info);
                }
                return info;
            }
            catch (Exception ex)
            {
                throw ex;
            }
        }
        /// <summary>
        /// 根据工序编码和采集点编码获取采集点信息
        /// </summary>
        /// <param name="workcellcode"></param>
        /// <param name="dacode"></param>
        /// <returns></returns>
        public DAI GetDAIByCode(string workcellcode, string dacode)
        {
            try
            {
                using (IDataSession session = AppDataFactory.CreateMainSession())
                {
                    string sql = "SELECT * FROM [T_QT_DAI] WHERE [WORKCELL_CODE]=@workcellcode AND [DA_CODE]=@dacode";
                    var dai = session.Get<DAI>(sql,
                        new DataParameter("workcellcode", workcellcode),
                        new DataParameter("dacode", dacode));
                    return dai;
                }
                
            }
            catch (Exception ex)
            {
                throw ex;
            }
        }
        #endregion

        #region 获取列表
        /// <summary>
        /// 获取列表
        /// </summary>
        /// <param name="condition">条件</param>
        /// <param name="page">数据页</param>
        /// <returns>数据页</returns>
        public DataPage GetList(DAI condition, DataPage page)
        {
            string sql = null;
            List<DataParameter> parameters = new List<DataParameter>();
            try
            {
                sql = this.GetQuerySql(condition, ref parameters);
                //分页关键字段及排序
                page.KeyName = "PID";
                if (string.IsNullOrEmpty(page.SortExpression))
                    page.SortExpression = "UPDATEDATE DESC";
                using (IDataSession session = AppDataFactory.CreateMainSession())
                {
                    page = session.GetDataPage<DAI>(sql, parameters.ToArray(), page);
                }
                return page;
            }
            catch (Exception ex)
            {
                throw ex;
            }
        }

        public List<DAI> GetList(DAI condition)
        {
            List<DAI> daiList = new List<DAI>();
            StringBuilder sql = new StringBuilder();
            List<DataParameter> paraList = new List<DataParameter>();
            try
            {

                //sql.Append("select d.*,l.WORKLOC_CODE,l.WORKLOC_NAME from T_QT_DAI d ,T_MD_WORKLOC l  where d.WORKCELL_CODE=l.WORKCELL_CODE  ");

                sql.AppendLine("SELECT D.* ");
                sql.AppendLine("	  ,L.[WORKLOC_CODE]  ");
                sql.AppendLine("	  ,L.[WORKLOC_NAME]  ");
                sql.AppendLine("      ,M.MATERIAL_TYPE_NAME ");
                sql.AppendLine("	  ,S.[STATE_NAME]  ");
                sql.AppendLine("  FROM [T_QT_DAI] AS D ");
                sql.AppendLine("  LEFT JOIN [T_MD_MATERIAL_CLASS] AS M ");
                sql.AppendLine("    ON M.[MATERIAL_TYPE_CODE]=D.[MATERIAL_TYPE] ");
                sql.AppendLine("  LEFT JOIN [T_MD_WORKCELL_STATE] AS S ");
                sql.AppendLine("    ON D.[STATE_CODE]=S.[STATE_CODE] ");
                sql.AppendLine("   AND D.[WORKCELL_CODE]=S.[WORKCELL_CODE] ");
                sql.AppendLine("  LEFT JOIN [T_MD_WORKLOC] AS L ");
                sql.AppendLine("    ON L.[WORKCELL_CODE]=D.[WORKCELL_CODE] ");

                if (string.IsNullOrWhiteSpace(condition.WORKLOC_CODE) == false)
                {
                    sql.AppendLine(" WHERE L.[WORKLOC_CODE]=@WORKLOC_CODE ");
                    paraList.Add(new DataParameter() { ParameterName = "WORKLOC_CODE", DataType = DbType.String, Value = condition.WORKLOC_CODE });
                }
                sql.AppendLine(" ORDER BY D.[WORKCELL_CODE],S.[STATE_SEQ],D.[DA_SEQ],D.[DA_CODE] ");

                using (IDataSession session = AppDataFactory.CreateMainSession())
                {
                    daiList = session.GetList<DAI>(sql.ToString(), paraList.ToArray()).ToList<DAI>();
                }

                return daiList;
            }
            catch (Exception ex)
            {
                throw ex;
            }
        }
        /// <summary>
        /// 获取工序下的采集点
        /// </summary>
        /// <param name="workcellcode"></param>
        /// <returns></returns>
        public List<DAI> GetList(string workcellcode)
        {
            StringBuilder sql = new StringBuilder();
            List<DataParameter> paraList = new List<DataParameter>();
            try
            {
                sql.Append("SELECT * FROM [T_QT_DAI] WHERE [WORKCELL_CODE]=@workcellcode ORDER BY [DA_SEQ]");
                paraList.Add(new DataParameter("workcellcode", workcellcode));
                using (IDataSession session = AppDataFactory.CreateMainSession())
                {
                    return  session.GetList<DAI>(sql.ToString(), paraList.ToArray()).ToList<DAI>();
                }
            }
            catch (Exception ex)
            {
                throw ex;
            }
        }
        #endregion

        #region 获取查询语句
        /// <summary>
        /// 获取查询语句
        /// </summary>
        /// <param name="user">查询条件</param>
        /// <param name="parameters">参数</param>
        /// <returns>查询语句</returns>
        private string GetQuerySql(DAI condition, ref List<DataParameter> parameters)
        {
            StringBuilder sqlBuilder = new StringBuilder();
            StringBuilder whereBuilder = new StringBuilder();
            try
            {
                //构成查询语句
                sqlBuilder.Append("SELECT PID,WORKCELL_CODE,EQUIPMENT_CODE,DA_CODE,DA_NAME,DA_STATUS,ANALYZE_CODE,MATERIAL_CODE,MATERIAL_TYPE,DATA_TYPE,STATE_CODE,DA_SEQ,PIVOTAL,DA_MODE,REMARK,CREATEUSER,CREATEDATE,UPDATEUSER,UPDATEDATE ");
                sqlBuilder.Append("FROM T_QT_DAI ");
                //查询条件
                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(DAI info)
        {
            DataTable dt = null;
            string sql = null;
            List<DataParameter> parameters = new List<DataParameter>();
            try
            {
                //构成查询语句
                sql = this.GetQuerySql(info, ref parameters);
                using (IDataSession session = AppDataFactory.CreateMainSession())
                {
                    dt = session.GetTable(sql, parameters.ToArray());
                    dt.TableName = "DAI";
                }
                return dt;
            }
            catch (Exception ex)
            {
                throw ex;
            }
        }
        #endregion

        #region 信息是否重复
        /// <summary>
        /// 判断名称是否存在
        /// </summary>
        /// <param name="info"></param>
        /// <returns>true:已存在;fasel:不存在。</returns>
        public bool Exists(DAI info)
        {
            StringBuilder sqlBuilder = new StringBuilder();
            StringBuilder whereBuilder = new StringBuilder();
            List<DataParameter> parameters = new List<DataParameter>();
            int count = 0;
            try
            {
                sqlBuilder.Append("SELECT COUNT(0) FROM T_QT_DAI");
                if (info.PID == null)
                {
                    info.PID = "";
                }
                whereBuilder.Append(" AND PID <> @PID ");
                parameters.Add(new DataParameter { ParameterName = "PID", DataType = DbType.String, Value = info.PID });

                //添加进行无重复字段判断代码

                if (whereBuilder.Length > 0)
                {
                    sqlBuilder.Append(" WHERE " + whereBuilder.ToString().Substring(4));
                }
                using (IDataSession session = AppDataFactory.CreateMainSession())
                {
                    count = Convert.ToInt32(session.ExecuteSqlScalar(sqlBuilder.ToString(), parameters.ToArray()));
                }
                return count > 0;
            }
            catch (Exception ex)
            {
                throw ex;
            }
        }
        #endregion

        #region 插入信息
        /// <summary>
        /// 插入信息(单表)
        /// </summary>
        /// <param name="">信息</param>
        /// <returns>插入行数</returns>
        public int Insert(DAI info)
        {
            int count = 0;
            try
            {
                using (IDataSession session = AppDataFactory.CreateMainSession())
                {
                    //插入基本信息
                    count = session.Insert<DAI>(info);
                }
                return count;
            }
            catch (Exception ex)
            {
                throw ex;
            }
        }
        #endregion

        #region 更新信息
        /// <summary>
        /// 更新信息
        /// </summary>
        /// <param name=""></param>
        /// <returns>更新行数</returns>
        public int Update(DAI info)
        {
            int count = 0;
            try
            {
                using (IDataSession session = AppDataFactory.CreateMainSession())
                {
                    //更新基本信息
                    count = session.Update<DAI>(info);
                }
                return count;
            }
            catch (Exception ex)
            {
                throw ex;
            }
        }
        #endregion

        #region 删除
        /// <summary>
        /// 删除信息
        /// </summary>
        /// <param name=""></param>
        /// <returns>删除个数</returns>
        public int Delete(DAI info)
        {
            int count = 0;
            try
            {
                using (IDataSession session = AppDataFactory.CreateMainSession())
                {
                    //删除基本信息
                    count = session.Delete<DAI>(info);
                }
                return count;
            }
            catch (Exception ex)
            {
                throw ex;
            }
        }
        #endregion

        #region 导入
        public ImportMessage GetImportData(List<DAI> list)
        {
            ImportMessage em = new ImportMessage();
            List<DataParameter> parameters = new List<DataParameter>();
            try
            {
                using (IDataSession session = AppDataFactory.CreateMainSession())
                {
                    //设置祖先对象数据会话
                    session.OpenTs();
                    foreach (DAI info in list)
                    {
                        if (info.IsNewInfo)
                        {
                            //插入信息
                            int count = session.Insert<DAI>(info);
                            em.insertNum++;
                        }
                        else
                        {
                            //更新信息
                            int count = session.Update<DAI>(info);
                            em.updateNum++;
                        }
                    }
                    session.CommitTs();
                }
            }
            catch (Exception ex)
            {
                throw ex;
            }
            return em;
        }
        #endregion


        /// <summary>
        /// 获取绑定启动信号的采集点编码
        /// </summary>
        /// <param name="workcellcode"></param>
        /// <param name="mouldcode"></param>
        /// <returns></returns>
        public string GetSignalDAI(string workcellcode, string mouldcode)
        {
            StringBuilder sql = new StringBuilder();
            List<DataParameter> paraList = new List<DataParameter>();
            try
            {
                sql.AppendLine("SELECT MAX(DA_CODE) ");
                sql.AppendLine("  FROM T_QT_SENDORDERCONFIG ");
                sql.AppendLine(" WHERE WORKCELL_CODE=@workcellcode ");
                if (!string.IsNullOrWhiteSpace(mouldcode))
                {
                    sql.AppendLine("   AND MOULDCODE=@mouldcode ");
                    paraList.Add(new DataParameter("mouldcode", mouldcode));
                }
                sql.AppendLine("   AND SIGNALTYPE='0'");
                paraList.Add(new DataParameter("workcellcode", workcellcode));
                using (IDataSession session = AppDataFactory.CreateMainSession())
                {
                    var ret = session.ExecuteSqlScalar(sql.ToString(), paraList.ToArray());
                    if (ret != null)
                    {
                        return ret.ToString();
                    }
                    return "";
                }
            }
            catch (Exception ex)
            {
                throw ex;
            }
        }
    }
}