using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using QMAPP.MD.Entity;
using QMFrameWork.Data;
using QMFrameWork.Log;
using System.Data;
using QMAPP.DAL;

namespace QMAPP.MD.DAL
{
    /// <summary>
    /// 作    用:班组成员
    /// 作    者:周晓东
    /// 编写日期:2017年11月21日
    /// </summary>
    public class ScheduleDAL : BaseDAL
    {
        #region 获取信息
        /// <summary>
        /// 获取信息
        /// </summary>
        /// <param name="">条件</param>
        /// <returns>*信息</returns>
        public ScheduleEntity Get(ScheduleEntity model)
        {
            try
            {
                using (IDataSession session = AppDataFactory.CreateMainSession())
                {
                    //获取信息
                    model = session.Get<ScheduleEntity>(model);
                }
                return model;
            }
            catch (Exception ex)
            {
                RecordExceptionLog(ex, "数据层 - 获取信息");
                throw ex;
            }
        }
        public ScheduleEntity GetEntity(ScheduleEntity model)
        {
            try
            {
                using (IDataSession session = AppDataFactory.CreateMainSession())
                {
                    var sql = "SELECT S.*,T.TEAM_NAME,SH.PRODUCESHIFTNAME AS SHIFT_NAME FROM T_QT_SCHEDULE S ";
                    sql += "LEFT JOIN T_QT_TEAM T ON T.TEAM_CODE=S.TEAM_CODE AND T.FACTORY_CODE=S.FACTORY_CODE ";
                    sql += "LEFT JOIN T_BD_PRODUCESHIFT SH ON SH.PRODUCESHIFTTCODE=S.SHIFT_CODE ";
                    sql += "WHERE S.PID='" + model .PID+ "'";
                    //获取信息
                    model = session.Get<ScheduleEntity>(sql, new List<DataParameter>().ToArray());
                }
                return model;
            }
            catch (Exception ex)
            {
                RecordExceptionLog(ex, "数据层 - 获取信息");
                throw ex;
            }
        }
        
        #endregion

        #region 获取列表
        /// <summary>
        /// 获取列表
        /// </summary>
        /// <param name="condition">条件</param>
        /// <param name="page">数据页</param>
        /// <returns>数据页</returns>
        public DataPage GetList(ScheduleEntity condition, DataPage page)
        {
            string sql = null;
            List<DataParameter> parameters = new List<DataParameter>();
            try
            {
                sql = this.GetQuerySql(condition, ref parameters);

                #region 排序
                //分页关键字段及排序
                page.KeyName = "PID";
                if (string.IsNullOrEmpty(page.SortExpression))
                {
                    page.SortExpression = "FACTORY_CODE DESC";
                }
                #endregion

                using (IDataSession session = AppDataFactory.CreateMainSession())
                {
                    // 对应多种数据库
                    //string sqlChange = this.ChangeSqlByDB(sql, session);
                    page = session.GetDataPage<ScheduleEntity>(sql, parameters.ToArray(), page);
                }
                return page;
            }
            catch (Exception ex)
            {
                RecordExceptionLog(ex, "班组信息数据层 - 获取列表");
                throw ex;
            }
        }
        #endregion

        #region 获取查询语句
        /// <summary>
        /// 获取查询语句
        /// </summary>
        /// <param name="user">查询条件</param>
        /// <param name="parameters">参数</param>
        /// <returns>查询语句</returns>
        private string GetQuerySql(ScheduleEntity condition, ref List<DataParameter> parameters)
        {
            StringBuilder sqlBuilder = new StringBuilder();
            StringBuilder whereBuilder = new StringBuilder();
            try
            {
//                sqlBuilder.AppendLine(@" SELECT T.PID
//                                                ,T.FACTORY_CODE
//                                                ,F.FACTORY_NAME
//                                                ,T.DEPT_CODE
//                                                ,T.TEAM_CODE
//                                                ,T.TEAM_NAME
//                                                ,T.TEAM_LEADER
//                                                ,T.REMARK
//                                                ,T.CREATEUSER
//                                                ,T.CREATEDATE
//                                                ,T.UPDATEUSER
//                                                ,T.UPDATEDATE
//                                                ,T.FLGDEL
//                                            FROM T_QT_TEAM T 
//                                            LEFT JOIN T_MD_FACTORY F
//                                                   ON T.FACTORY_CODE = F.FACTORY_CODE
//                                        ");
                sqlBuilder.AppendLine(@" SELECT S.* FROM T_QT_SCHEDULE S ");
                sqlBuilder.AppendLine(@"   LEFT JOIN T_QT_TEAM T ");
                sqlBuilder.AppendLine(@"     ON T.TEAM_CODE = S.TEAM_CODE ");
                //查询条件
                //whereBuilder.Append(" AND T.FLGDEL = '0'");

                //工厂
                if (string.IsNullOrEmpty(condition.FACTORY_CODE) == false)
                {
                    whereBuilder.Append(" AND S.FACTORY_CODE =  @FACTORY_CODE");
                    parameters.Add(new DataParameter { ParameterName = "FACTORY_CODE", DataType = DbType.String, Value = condition.FACTORY_CODE });
                }

                //班组
                if (string.IsNullOrEmpty(condition.TEAM_CODE) == false)
                {
                    whereBuilder.Append(" AND S.TEAM_CODE =  @TEAM_CODE");
                    parameters.Add(new DataParameter { ParameterName = "TEAM_CODE", DataType = DbType.String, Value = condition.TEAM_CODE });
                }

                //班组类型
                if (string.IsNullOrEmpty(condition.TEAM_TYPE) == false)
                {
                    whereBuilder.Append(" AND T.DEPT_CODE =  @TEAM_TYPE");
                    parameters.Add(new DataParameter { ParameterName = "TEAM_TYPE", DataType = DbType.String, Value = condition.TEAM_TYPE });
                }

                //班次
                if (string.IsNullOrEmpty(condition.SHIFT_CODE) == false)
                {
                    whereBuilder.Append(" AND S.SHIFT_CODE =  @SHIFT_CODE");
                    parameters.Add(new DataParameter { ParameterName = "SHIFT_CODE", DataType = DbType.String, Value = condition.SHIFT_CODE });
                }
                //当前日期
                if (condition.NOW_DATE!=DateTime.MinValue)
                {
                    whereBuilder.Append(" AND (S.START_DATE <@NOW_DATE AND S.END_DATE >@NOW_DATE)");
                    parameters.Add(new DataParameter { ParameterName = "NOW_DATE", DataType = DbType.DateTime, Value = condition.NOW_DATE });
                }
                //结束
                //if (condition.END_DATE != DateTime.MinValue)
                //{
                //    whereBuilder.Append(" AND END_DATE <@END_DATE");
                //    parameters.Add(new DataParameter { ParameterName = "END_DATE", DataType = DbType.DateTime, Value = condition.END_DATE });
                //}

                if (whereBuilder.Length > 0)
                {
                    sqlBuilder.Append(" WHERE " + whereBuilder.ToString().Substring(4));
                }
                return sqlBuilder.ToString();
            }
            catch (Exception ex)
            {
                throw ex;
            }
        }
        #endregion

        /// <summary>
        /// 获取全部用户
        /// </summary>
        /// <param name="condition">获取条件</param>
        /// <returns>用户信息列表</returns>
        public List<ScheduleEntity> GetAllSchedule(ScheduleEntity condition)
        {
            string sql = null;
            List<ScheduleEntity> list = null;
            List<DataParameter> parameters = new List<DataParameter>();
            try
            {
                using (IDataSession session = AppDataFactory.CreateMainSession())
                {
                    sql = GetQuerySql(condition, ref parameters);
                    list = session.GetList<ScheduleEntity>(sql, parameters.ToArray()).ToList();
                }

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

        #region 判断班组是否存在
        /// <summary>
        /// 判断名称是否存在
        /// </summary>
        /// <param name="info"></param>
        /// <returns>true:已存在;false:不存在。</returns>
        //public bool ExistsTeam(ScheduleEntity model)
        //{
        //    string PID = "";
        //    int count = 0;
        //    string sql = null;
        //    try
        //    {
        //        if (string.IsNullOrEmpty(model.PID) == false)
        //        {
        //            PID = model.PID;
        //        }

        //        sql = "SELECT COUNT(*) FROM T_QT_TEAM WHERE PID <> @PID AND TEAM_CODE=@TEAM_CODE ";

        //        using (IDataSession session = AppDataFactory.CreateMainSession())
        //        {
        //            // 对应多种数据库
        //            string sqlChange = this.ChangeSqlByDB(sql, session);
        //            count = Convert.ToInt32(session.ExecuteSqlScalar(sqlChange, new DataParameter("PID", PID),
        //                new DataParameter { ParameterName = "TEAM_CODE", Value = model.TEAM_CODE }));
        //        }

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

        //    }
        //    catch (Exception ex)
        //    {
        //        RecordExceptionLog(ex, "班组信息数据层-判断班组是否存在");
        //        throw ex;
        //    }
        //}
        #endregion

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

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

        #region 删除信息
        /// <summary>
        /// 删除信息
        /// </summary>
        /// <param name="model">班信息(ID)</param>
        /// <returns>删除个数</returns>
        public int Delete(ScheduleEntity model)
        {
            StringBuilder sqlBuilder = new StringBuilder();
            List<DataParameter> parameters = new List<DataParameter>();
            int count = 0;
            try
            {
                using (IDataSession session = AppDataFactory.CreateMainSession())
                {
                    //删除基本信息
                    count = session.Delete<ScheduleEntity>(model);
                }
                return count;
            }
            catch (Exception ex)
            {
                RecordExceptionLog(ex, "班组信息数据层 - 删除信息");
                throw ex;
            }
        }
        #endregion

        //        #region 班组是否使用
        //        /// <summary>
        //        /// 班组是否使用
        //        /// </summary>
        //        /// <param name="info"></param>
        //        /// <returns>true:已使用;fasel:未使用。</returns>
        //        public bool IsUsing(ScheduleEntity model)
        //        {
        //            int count = 0;
        //            StringBuilder sqlBuilder = new StringBuilder();
        //            try
        //            {
        //                sqlBuilder.AppendLine("	SELECT COUNT(*) FROM T_QT_TEAM_MEMBER T WHERE T.TEAM_PID=@TEAMID 	");

        //                using (IDataSession session = AppDataFactory.CreateMainSession())
        //                {
        //                    count = Convert.ToInt32(session.ExecuteSqlScalar(sqlBuilder.ToString(),
        //                        new DataParameter { ParameterName = "TEAMID", Value = model.PID }));
        //                }

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

        //            }
        //            catch (Exception ex)
        //            {
        //                throw ex;
        //            }
        //        }


        //        #endregion

        //        #region 获取班组人员列表
        //        /// <summary>
        //        /// 获取班组人员列表
        //        /// </summary>
        //        /// <param name="condition">条件</param>
        //        /// <param name="page">数据页</param>
        //        /// <returns>数据页</returns>
        //        public DataPage GetTeamWorkerList(TeamMember condition, DataPage page)
        //        {
        //            string sql = null;
        //            List<DataParameter> parameters = new List<DataParameter>();
        //            try
        //            {
        //                sql = this.GetTeamWorkerQuerySql(condition, ref parameters);

        //                #region 排序
        //                //分页关键字段及排序
        //                page.KeyName = "PID";
        //                if (string.IsNullOrEmpty(page.SortExpression))
        //                {
        //                    page.SortExpression = "UPDATEDATE DESC";
        //                }
        //                #endregion

        //                using (IDataSession session = AppDataFactory.CreateMainSession())
        //                {
        //                    page = session.GetDataPage<TeamMember>(sql, parameters.ToArray(), page);
        //                }
        //                return page;
        //            }
        //            catch (Exception ex)
        //            {
        //                throw ex;
        //            }
        //        }


        //        /// <summary>
        //        /// 获取列表
        //        /// </summary>
        //        /// <param name="condition">条件</param>
        //        /// <returns>全部集合</returns>
        //        public List<TeamMember> GetTeamWorker(TeamMember condition)
        //        {
        //            List<TeamMember> list = new List<TeamMember>();
        //            string sql = null;
        //            List<DataParameter> parameters = new List<DataParameter>();
        //            try
        //            {
        //                sql = this.GetTeamWorkerQuerySql(condition, ref parameters);

        //                using (IDataSession session = AppDataFactory.CreateMainSession())
        //                {
        //                    list = session.GetList<TeamMember>(sql, parameters.ToArray()).ToList();
        //                }
        //                return list;
        //            }
        //            catch (Exception ex)
        //            {
        //                LogManager.LogHelper.Error(new LogInfo()
        //                {
        //                    ErrorInfo = ex,
        //                    Tag = ex.StackTrace,
        //                    Info = "班组信息数据层-获取班组人员列表"
        //                });
        //                throw;
        //            }
        //        }
        //        #endregion

        //        #region 获取班组成员查询语句
        //        /// <summary>
        //        /// 获取班组成员查询语句
        //        /// </summary>
        //        /// <param name="user">查询条件</param>
        //        /// <param name="parameters">参数</param>
        //        /// <returns>查询语句</returns>
        //        private string GetTeamWorkerQuerySql(TeamMember condition, ref List<DataParameter> parameters)
        //        {
        //            StringBuilder sqlBuilder = new StringBuilder();
        //            StringBuilder whereBuilder = new StringBuilder();
        //            try
        //            {
        //                sqlBuilder.AppendLine(@" SELECT T.PID
        //                                                  ,T.MEMBER_CODE
        //                                                  ,T.MEMBER_NAME
        //                                                  ,T.WORK_STATION
        //                                                  ,T.TEAM_PID
        //                                                  ,T.CREATEUSR
        //                                                  ,T.CREATEDATE
        //                                                  ,T.UPDATEDATE
        //                                                  ,T.FLAGDEL
        //                                              FROM T_QT_TEAM_MEMBER T	");


        //                //查询条件
        //                //班组主键
        //                if (string.IsNullOrEmpty(condition.TEAM_PID) == false)
        //                {
        //                    whereBuilder.Append(" AND T.TEAM_PID = @TEAMID ");
        //                    parameters.Add(new DataParameter { ParameterName = "TEAMID", DataType = DbType.String, Value = condition.TEAM_PID });
        //                }

        //                if (whereBuilder.Length > 0)
        //                {
        //                    sqlBuilder.Append(" WHERE " + whereBuilder.ToString().Substring(4));
        //                }
        //                return sqlBuilder.ToString();
        //            }
        //            catch (Exception ex)
        //            {
        //                throw ex;
        //            }
        //        }
        //        #endregion
    }
}