using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using QMFrameWork.Data;
using QMAPP.MESReport.Entity.LineQTY;
using QMAPP.DAL;
using System.Data;
using QMAPP.MESReport.Entity.Tables;

namespace QMAPP.MESReport.DAL.LineQTY
{
    /// <summary>
    /// 设备利用率分析
    /// 于子清
    /// 2017-10-26
    /// </summary>
    public class EqueUseCountDAL : BaseDAL
    {
        public List<EqueUseCountDModel> GetAllList(EqueUseCountDModel condition)
        {
            List<EqueUseCountDModel> list = new List<EqueUseCountDModel>();
            string sql = null;
            List<DataParameter> parameters = new List<DataParameter>();
            try
            {
                sql = this.GetQuerySql(condition, ref parameters);

                using (IDataSession session = AppDataFactory.CreateMainSession())
                {
                    list = session.GetList<EqueUseCountDModel>(sql, parameters.ToArray()).ToList();
                }
                return list;
            }
            catch (Exception ex)
            {
                throw ex;
            }
        }


        #region 获取查询语句
        /// <summary>
        /// 获取查询语句
        /// </summary>
        /// <param name="user">查询条件</param>
        /// <param name="parameters">参数</param>
        /// <returns>查询语句</returns>
        private string GetQuerySql(EqueUseCountDModel condition, ref List<DataParameter> parameters)
        {
            StringBuilder sqlBuilder = new StringBuilder();
            StringBuilder sqlBuilder2 = new StringBuilder();
            StringBuilder whereBuilder = new StringBuilder();
            try
            {
                string group = "";
                //构成查询语句

                if (condition.TYPE_COUNT=="WEEK")
                {
                    //周统计
                    sqlBuilder.AppendLine("select year(tsa.STATIS_DATE) tyear,DateName(week,DATEADD(DAY,-1,STATIS_DATE)) tday,sum(tsa.WORKTIMES) WORKTIMES,sum(tsa.BOOTTIMES) BOOTTIMES,tsay.val from T_SA_EQPTUSECOUNT tsa inner join T_SA_YZQCOUNT tsay on tsay.pid =6 inner join T_BD_MACHINEINFO tbd on tsa.EQPT_CODE =tbd.MACHINECODDE ");
                    group = " group by year(tsa.STATIS_DATE),DateName(week,DATEADD(DAY,-1,STATIS_DATE)),tsay.val ";
                }
                else if (condition.TYPE_COUNT == "MONTH")
                {
                    //月统计
                    sqlBuilder.AppendLine("select year(tsa.STATIS_DATE) tyear,month(tsa.STATIS_DATE) tday,sum(tsa.WORKTIMES) WORKTIMES,sum(tsa.BOOTTIMES) BOOTTIMES,tsay.val from T_SA_EQPTUSECOUNT tsa inner join T_SA_YZQCOUNT tsay on tsay.pid =6 inner join T_BD_MACHINEINFO tbd on tsa.EQPT_CODE =tbd.MACHINECODDE ");
                    group = " group by year(tsa.STATIS_DATE),month(tsa.STATIS_DATE),tsay.val ";
                }else
                {
                    //日统计
                    sqlBuilder.AppendLine("select year(tsa.STATIS_DATE) tyear,month(tsa.STATIS_DATE) tmonth,day(tsa.STATIS_DATE) tday,sum(tsa.WORKTIMES) WORKTIMES,sum(tsa.BOOTTIMES) BOOTTIMES,tsay.val from T_SA_EQPTUSECOUNT tsa inner join T_SA_YZQCOUNT tsay on tsay.pid =6 inner join T_BD_MACHINEINFO tbd on tsa.EQPT_CODE =tbd.MACHINECODDE ");
                    group = " group by year(tsa.STATIS_DATE),month(tsa.STATIS_DATE),day(tsa.STATIS_DATE),tsay.val ";
                }

                if (string.IsNullOrEmpty(condition.START_DATE) == false)
                {
                    whereBuilder.Append(" AND tsa.STATIS_DATE >= @START_DATE ");
                    parameters.Add(new DataParameter { ParameterName = "START_DATE", DataType = DbType.DateTime, Value = condition.START_DATE });
                }

                if (string.IsNullOrEmpty(condition.END_DATE) == false)
                {
                    whereBuilder.Append(" AND tsa.STATIS_DATE <= @END_DATE ");
                    parameters.Add(new DataParameter { ParameterName = "END_DATE", DataType = DbType.DateTime, Value = condition.END_DATE });
                }

                if (string.IsNullOrEmpty(condition.EQPT_CODE) == false)
                {
                    whereBuilder.Append(" AND tsa.EQPT_CODE <= @EQPT_CODE ");
                    parameters.Add(new DataParameter { ParameterName = "EQPT_CODE", DataType = DbType.String, Value = condition.EQPT_CODE });
                }

                if (whereBuilder.Length > 0)
                {
                    sqlBuilder.Append(" WHERE " + whereBuilder.ToString().Substring(4));
                }
                sqlBuilder.Append(group);

                return sqlBuilder.ToString();
            }
            catch (Exception ex)
            {
                throw ex;
            }
        }
        #endregion

        public List<T_BD_MACHINEINFO> GetSList()
        {
            List<T_BD_MACHINEINFO> list = new List<T_BD_MACHINEINFO>();
            string sql = null;
            List<DataParameter> parameters = new List<DataParameter>();
            try
            {
                sql = "select MACHINENAME,MACHINECODDE from T_BD_MACHINEINFO where STATUS = 0 ";

                using (IDataSession session = AppDataFactory.CreateMainSession())
                {
                    list = session.GetList<T_BD_MACHINEINFO>(sql, parameters.ToArray()).ToList();
                }
                return list;
            }
            catch (Exception ex)
            {
                throw ex;
            }
        }

        public List<T_BD_MACHINEINFO> GetMachine(string workcentercode)
        {
            var parms = new List<DataParameter>();
            StringBuilder sql = new StringBuilder();
            sql.AppendLine("SELECT M.* FROM T_BD_MACHINEINFO M,T_MD_WORKLOC L,T_MD_WORKCELL C ");
            sql.AppendLine("WHERE M.WORKLOC_CODE=L.WORKLOC_CODE ");
            sql.AppendLine("AND L.WORKCELL_CODE=C.WORKCELL_CODE ");
            if (!string.IsNullOrWhiteSpace(workcentercode))
            {
                sql.AppendLine(" AND C.WORKCENTER_CODE =@workcentercode");
                parms.Add(new DataParameter("workcentercode", workcentercode));
            }
            List<T_BD_MACHINEINFO> list = new List<T_BD_MACHINEINFO>();
            using (IDataSession session = AppDataFactory.CreateMainSession())
            {
                list = session.GetList<T_BD_MACHINEINFO>(sql.ToString(), parms.ToArray()).ToList<T_BD_MACHINEINFO>();
            }

            return list;
        }

    }
}