using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Data;
using QMFrameWork.Data;
using QMAPP.Entity;
using QMAPP.FJC.Entity.Operation;
using QMAPP.DAL;
using QMAPP.FJC.Entity;
namespace QMAPP.FJC.DAL.Operation
{
    /// <summary>
    /// 模块编号:M13-2
    /// 作    用:加工记录查询数据层
    /// 作    者:单雨春
    /// 编写日期:2015年06月04日
    ///</summary> 
    public class MainOperationDAL : BaseDAL
    {
        /// <summary>
        /// 数据会话
        /// </summary>
        //public IDataSession BaseSession = null;

        #region 获取信息加工记录
        /// <summary>
        /// 获取信息加工记录
        /// </summary>
        /// <param name="">条件</param>
        /// <returns>加工记录信息</returns>
        public MainOperation Get(MainOperation model)
        {
            try
            {
                using (IDataSession session = AppDataFactory.CreateMainSession())
                {
                    //获取信息
                    model = session.Get<MainOperation>(model);
                }
                return model;
            }
            catch (Exception ex)
            {
                throw ex;
            }
        }

        public MainOperation GetMainOperation(MainOperation condition)
        {
            try
            {
                MainOperation model;

                string sql = @"SELECT PID
                              ,PDID
                              ,PRODUCTCODE
                              ,PROCESSTYPE
                              ,PRODUCTTYPE
                              ,MACHINENAME
                              ,MACHINECODDE
                              ,MOLDNUMBER
                              ,[STATUS]
                              ,OPERATESTATE
                              ,OPERATEDDATE
                              ,CURRENTPROCESS
                              ,PRODUCESHIFTNAME
                              ,PRODUCESHIFTTCODE
                              ,PRODUCELINE
                              ,[FILENAME]
                              ,FILEPATH
                              ,MODELSTATION
                              ,CREATEUSER
                              ,CREATEDATE
                              ,UPDATEUSER
                              ,UPDATEDATE
                              ,PRODUCTCODESTR
                          FROM T_AW_MAINOPERATION  where 1=1 ";

                if (string.IsNullOrEmpty(condition.PDID) == false)
                {
                    sql += string.Format(" and PDID='{0}' ", condition.PDID);
                }

                if (string.IsNullOrEmpty(condition.PROCESSTYPE) == false)
                {
                    sql += string.Format(" and PROCESSTYPE='{0}' ", condition.PROCESSTYPE);
                }

                using (IDataSession session = AppDataFactory.CreateMainSession())
                {
                    //获取信息
                    model = session.Get<MainOperation>(sql,new List<DataParameter>().ToArray());
                }
                return model;
            }
            catch (Exception ex)
            {
                throw ex;
            }
        }

        #endregion

        #region 获取列表
        /// <summary>
        /// 获取列表
        /// </summary>
        /// <param name="condition">条件</param>
        /// <param name="page">数据页</param>
        /// <returns>数据页</returns>
        public DataPage GetList(MainOperation 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<MainOperation>(sql, parameters.ToArray(), page);
                }
                return page;
            }
            catch (Exception ex)
            {
                throw ex;
            }
        }

        /// <summary>
        /// 
        /// </summary>
        /// <param name="condition"></param>
        /// <param name="page"></param>
        /// <returns></returns>
        public DataPage GetOperationList(MainOperation condition, DataPage page)
        {
            List<DataParameter> parameters = new List<DataParameter>();
            try
            {
                string sql = this.GetOperationQuerySql(condition, ref parameters);

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

                List<MainOperation> list = new List<MainOperation>();

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

                List<MainOperation> opingList = 
                    list.Where(o => o.OPERATESTATE == EnumGeter.OPERATESTATE.OPERATING.GetHashCode().ToString())
                    .OrderByDescending(o => o.CREATEDATE)
                    .ToList<MainOperation>();

                List<MainOperation> opedList =
                    list.Where(o => o.OPERATESTATE != EnumGeter.OPERATESTATE.OPERATING.GetHashCode().ToString())
                    .OrderByDescending(o => o.CREATEDATE)
                    .ToList<MainOperation>();

                opingList = opingList.Concat(opedList).ToList<MainOperation>();

                page.Result = opingList;
                return page;

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

        /// <summary>
        /// 
        /// </summary>
        /// <param name="condition"></param>
        /// <param name="page"></param>
        /// <returns></returns>
        public DataPage GetOperationListNew(MainOperation condition, DataPage page)
        {
            List<DataParameter> parameters = new List<DataParameter>();
            try
            {
                StringBuilder sql = new StringBuilder();// this.GetOperationQuerySql(condition, ref parameters);

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

                sql.AppendLine(string.Format("SELECT TOP {0} R.[PID] ",page.PageSize));
                sql.AppendLine("      ,P.[PID] AS [PDID]  ");
                sql.AppendLine("	  ,P.[PRODUCTCODE] ");
                sql.AppendLine("	  ,'' AS [PRODUCTCODESTR] ");
                sql.AppendLine("	  ,R.[WORKCELL_CODE] AS [PROCESSTYPE] ");
                sql.AppendLine("	  ,P.[PRODUCTTYPE] ");
                sql.AppendLine("	  ,P.[MACHINENAME] ");
                sql.AppendLine("      ,P.[MACHINECODDE] ");
                //sql.AppendLine("      ,R.[MODULE_CODE] AS [MOLDNUMBER] ");
                sql.AppendLine("      ,P.[PLAN_NO] AS [MOLDNUMBER] ");
                sql.AppendLine("	  ,P.[STATUS] ");
                sql.AppendLine("      ,R.[PROCESS_STATE] AS [OPERATESTATE] ");
                sql.AppendLine("      ,R.[WORK_END_TIME] AS [OPERATEDDATE] ");
                sql.AppendLine("	  ,R.[WORKLOC_CODE] AS [CURRENTPROCESS] ");
                sql.AppendLine("	  ,P.[PRODUCESHIFTNAME] ");
                sql.AppendLine("      ,P.[PRODUCESHIFTTCODE] ");
                sql.AppendLine("	  ,P.[WORKCENTER_CODE] AS [PRODUCELINE] ");
                sql.AppendLine("	  ,'' AS [FILENAME] ");
                sql.AppendLine("      ,'' AS [FILEPATH] ");
                sql.AppendLine("	  ,'' AS [MODELSTATION] ");
                sql.AppendLine("	  ,P.[CREATEUSER] ");
                sql.AppendLine("	  ,R.[IN_WORKCELL_TIME] AS [CREATEDATE] ");
                sql.AppendLine("	  ,P.[UPDATEUSER] ");
                sql.AppendLine("	  ,P.[UPDATEDATE] ");
                sql.AppendLine("	  ,M.[MATERIAL_NAME] AS [PRODUCTTYPETEXT] ");
                sql.AppendLine("	  ,W.[WORKCELL_NAME] AS PROCESSTYPETEXT ");
                sql.AppendLine("  FROM [T_QT_PROCESSRECORD] AS R WITH(NOLOCK)  ");
                sql.AppendLine("  LEFT JOIN [T_AW_PRODUCT] AS P WITH(NOLOCK)  ");
                sql.AppendLine("    ON R.[PRODUCT_PID]=P.[PID] ");
                sql.AppendLine("  LEFT JOIN [T_MD_MATERIAL] AS M ");
                sql.AppendLine("    ON P.[MATERIAL_CODE]= M.[MATERIAL_CODE] ");
                sql.AppendLine("  LEFT JOIN [T_MD_WORKCELL] AS W ");
                sql.AppendLine("    ON W.[WORKCELL_CODE] = R.[WORKCELL_CODE] ");

                if (!string.IsNullOrWhiteSpace(condition.CURRENTPROCESS))
                {
                    sql.AppendLine(" WHERE R.[WORKLOC_CODE]=@workloccode ");
                    parameters.Add(new DataParameter("workloccode", condition.CURRENTPROCESS));
                }

                sql.AppendLine(" ORDER BY R.[IN_WORKCELL_TIME] DESC ");

                List<MainOperation> list = new List<MainOperation>();

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


                page.Result = list;
                return page;

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

        /// <summary>
        /// 获取列表
        /// </summary>
        /// <param name="condition">条件</param>
        /// <returns>全部</returns>
        public List<MainOperation> GetList(MainOperation condition)
        {
            string sql = null;
            List<MainOperation> list = new List<MainOperation>();
            List<DataParameter> parameters = new List<DataParameter>();
            try
            {
                sql = this.GetQuerySql(condition, ref parameters);
                //分页关键字段及排序
                using (IDataSession session = AppDataFactory.CreateMainSession())
                {
                    list = session.GetList<MainOperation>(sql, parameters.ToArray()).ToList();
                }
                return list;
            }
            catch (Exception ex)
            {
                throw ex;
            }
        }

        /// <summary>
        /// 获取列表
        /// </summary>
        /// <param name="condition">条件</param>
        /// <returns>全部</returns>
        public List<MainOperation> GetMainOperationWorkCell(string ProductCode, bool isINJECTION)
        {
            string sql = null;
            List<MainOperation> list = new List<MainOperation>();
            List<DataParameter> parameters = new List<DataParameter>();
            try
            {
                if (isINJECTION)
                {
                    sql =
                        "select MACHINECODDE,OPERATEDDATE,PRODUCESHIFTTCODE,PRODUCTCODE,WORKCELL_CODE,(SELECT WORKCELL_NAME FROM T_MD_WORKCELL where WORKCELL_CODE = t.WORKCELL_CODE) as WORKCELL_NAME  from T_AW_MAINOPERATION t where PDID in(select PRODUCT_PID from T_QT_PRODUCT_STRUCTURE   where PROCESS_CODE='" +
                        ProductCode + "') ";
                }
                else
                {
                    sql =
                        "SELECT MACHINECODDE,CREATEDATE as OPERATEDDATE,PRODUCESHIFTTCODE,PRODUCTCODE FROM T_AW_PRODUCT where PRODUCTCODE='" + ProductCode + "' and  CREATEDATE=(select max(CREATEDATE) from T_AW_PRODUCT where PRODUCTCODE='" +
                        ProductCode + "')";

                }
                //分页关键字段及排序
                using (IDataSession session = AppDataFactory.CreateMainSession())
                {
                    list = session.GetList<MainOperation>(sql, parameters.ToArray()).ToList();
                }
                return list;
            }
            catch (Exception ex)
            {
                throw ex;
            }
        }
        /// <summary>
        /// 获取列表
        /// </summary>
        /// <param name="condition">条件</param>
        /// <returns>全部</returns>
        public List<MainOperation> GetOperationRecords(string ProductCode)
        {
            StringBuilder sql = new StringBuilder();
            List<MainOperation> list = new List<MainOperation>();
            List<DataParameter> parameters = new List<DataParameter>();
            try
            {
                sql.AppendLine("SELECT O.* ,M.MATERIAL_NAME AS MATERIAL_CODE_NAME,w.WORKCELL_NAME,U.USERNAME AS CREATEUSERNAME  ");
                sql.AppendLine("  FROM (SELECT * FROM T_AW_MAINOPERATION ");
                sql.AppendLine("         WHERE PDID IN(SELECT PRODUCT_PID FROM T_QT_PRODUCT_STRUCTURE  ");
                sql.AppendFormat("                        WHERE PROCESS_CODE='{0}' \r", ProductCode);
                sql.AppendLine("				        UNION ");
                sql.AppendLine("                       SELECT PART_PID FROM T_QT_PRODUCT_STRUCTURE  ");
                sql.AppendFormat("			              WHERE PROCESS_CODE='{0}')) AS O \r", ProductCode);
                sql.AppendLine("  LEFT JOIN T_MD_MATERIAL M ON M.MATERIAL_CODE=O.MATERIAL_CODE ");
                sql.AppendLine("  LEFT JOIN T_MD_WORKCELL W ON W.WORKCELL_CODE=O.WORKCELL_CODE ");
                sql.AppendLine("  LEFT JOIN T_QM_USER U ON U.USERID=O.CREATEUSER ");
                sql.AppendLine(" ORDER BY OPERATEDDATE DESC ");
                using (IDataSession session = AppDataFactory.CreateMainSession())
                {
                    list = session.GetList<MainOperation>(sql.ToString(), parameters.ToArray()).ToList();
                }
                return list;
            }
            catch (Exception ex)
            {
                throw ex;
            }
        }
        /// <summary>
        /// 获取列表
        /// </summary>
        /// <param name="condition">条件</param>
        /// <returns>全部</returns>
        public DataTable GetListForstatistic(MainOperation condition)
        {
            DataTable dt = null;
            StringBuilder whereBuilder = new StringBuilder();
            List<DataParameter> parameters = new List<DataParameter>();
            string sql = null;
            sql = @"select MODELSTATION as 模具,PRODUCTTYPE as 产品类别,count(1) as 加工数量, 
case  SUBSTRING(productcode, 13, 1) when 'H' then 'H' when 'B' then   'B' else '' end as  高低配  
from T_AW_MAINOPERATION  where 1=1 ";


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

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

            if (condition.DATEOPESTART != null && condition.DATEOPESTART != DateTime.MinValue)
            {
                whereBuilder.Append(" AND CREATEDATE >= @DATEOPESTART");
                parameters.Add(new DataParameter { ParameterName = "DATEOPESTART", DataType = DbType.DateTime, Value = condition.DATEOPESTART });
            }
            if (condition.DATEOPEEND != null && condition.DATEOPEEND != DateTime.MinValue)
            {
                whereBuilder.Append(" AND CREATEDATE <= @DATEOPEEND");
                parameters.Add(new DataParameter { ParameterName = "DATEOPEEND", DataType = DbType.DateTime, Value = condition.DATEOPEEND });
            }
            sql += whereBuilder.ToString();
            sql += " group by MODELSTATION ,PRODUCTTYPE, case  SUBSTRING(productcode, 13, 1) when 'H' then 'H' when 'B' then   'B' else '' end ";

            //分页关键字段及排序
            using (IDataSession session = AppDataFactory.CreateMainSession())
            {
                dt = session.GetTable(sql, parameters.ToArray());
            }
            return dt;

        }


        /// <summary>
        /// 
        /// </summary>
        /// <param name="condition"></param>
        /// <returns></returns>
        public DataTable GetListForStatisticWithColor(MainOperation condition)
        {
            DataTable dt = null;
            StringBuilder whereBuilder = new StringBuilder();
            List<DataParameter> parameters = new List<DataParameter>();
            string sql = null;
            sql = @"select MODELSTATION as 模具,temp.MATERIAL_NAME as 零件名称,temp.MATERIAL_CODE as 零件号,
                    count(1) as 加工数量
                    ,COLORVALUE AS 颜色 
                    from (
                    select  MODELSTATION,m.MATERIAL_NAME,c.material_code,
                    case  RIGHT(c.MATERIAL_CODE,3) when '6T6' then '黑色' when '7AQ' then  '灰色' when '8AS' then  '棕色' else '未确认颜色' end as COLORVALUE
                    from T_AW_MAINOPERATION c
                    left join T_MD_MATERIAL m on m.MATERIAL_CODE=c.MATERIAL_CODE
                    where 1=1";

//            select MODELSTATION as 模具,PRODUCTTYPE as 产品类别,count(1) as 加工数量, 
//HB as  高低配  ,COLORVALUE AS 颜色 from (
//select  MODELSTATION,PRODUCTTYPE,case  SUBSTRING(productcode, 13, 1) when 'H' then '高' when 'B' then   '低' else '' end as HB,
//case  SUBSTRING(productcode, 14, 1) when '1' then '黑色' when '2' then   '灰/浅灰' else '棕/米' end as COLORVALUE
//from T_AW_MAINOPERATION  where 1=1 ";

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

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

            if (condition.DATEOPESTART != null && condition.DATEOPESTART != DateTime.MinValue)
            {
                whereBuilder.Append(" AND c.CREATEDATE >= @DATEOPESTART");
                parameters.Add(new DataParameter { ParameterName = "DATEOPESTART", DataType = DbType.DateTime, Value = condition.DATEOPESTART });
            }
            if (condition.DATEOPEEND != null && condition.DATEOPEEND != DateTime.MinValue)
            {
                whereBuilder.Append(" AND c.CREATEDATE <= @DATEOPEEND");
                parameters.Add(new DataParameter { ParameterName = "DATEOPEEND", DataType = DbType.DateTime, Value = condition.DATEOPEEND });
            }
            sql += whereBuilder.ToString();

            sql += " )temp ";
            //sql += " group by MODELSTATION ,PRODUCTTYPE, HB,COLORVALUE ORDER BY HB,COLORVALUE ASC";
            sql += " group by MODELSTATION ,temp.MATERIAL_NAME ,temp.MATERIAL_CODE,COLORVALUE ORDER BY COLORVALUE ASC";


            //分页关键字段及排序
            using (IDataSession session = AppDataFactory.CreateMainSession())
            {
                dt = session.GetTable(sql, parameters.ToArray());
            }
            return dt;

        }

        #region

        /// <summary>
        /// 获取列表
        /// </summary>
        /// <param name="condition">条件</param>
        /// <param name="page">数据页</param>
        /// <returns>数据页</returns>
        public DataPage GetListWithParameter(MainOperation condition, DataPage page)
        {
            string sql = null;
            string countSql = null;
            DataTable dt = new DataTable();
            List<DataParameter> parameters = new List<DataParameter>();
            try
            {
                //分页关键字段及排序
                page.KeyName = "PID";

                if (string.IsNullOrEmpty(page.SortExpression))
                {
                    page.SortExpression = "OPERATEDDATE DESC";
                }
                sql = this.GetPageQuerySqlWithParameter(condition, ref parameters, page);
                // sql = this.GetPageQuerySql(condition, ref parameters, page);
                countSql = this.GetCountQuerySql(condition);
                int sum = 0;
                using (IDataSession session = AppDataFactory.CreateMainSession())
                {
                    List<DataParameter> parameters1 = new List<DataParameter>();
                    dt = session.GetTable(sql, parameters1.ToArray());
                    sum = Convert.ToInt32(session.ExecuteSqlScalar(countSql, parameters.ToArray()));
                }


                page.RecordCount = sum;
                page.Result = dt;

                #region 设置分页属性

                if (page.RecordCount == 0)
                {
                    page.PageIndex = 1;
                    return page;
                }

                if (page.RecordCount % page.PageSize != 0)
                {
                    page.PageCount = page.RecordCount / page.PageSize + 1;
                    if (page.PageCount < page.PageIndex)
                    {
                        page.PageIndex = page.PageCount;
                    }

                }
                else
                {
                    page.PageCount = page.RecordCount / page.PageSize;
                }

                if (page.PageCount < page.PageIndex)
                {
                    page.PageIndex = page.PageCount;
                }

                #endregion



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

        public DataTable GetListWithParameterDt(MainOperation condition)
        {
            string sql = null;
            string countSql = null;
            DataTable dt = new DataTable();
            List<DataParameter> parameters = new List<DataParameter>();
            try
            {
               
                sql = this.GetPageQuerySqlWithParameterDt(condition, ref parameters);
                int sum = 0;
                using (IDataSession session = AppDataFactory.CreateMainSession())
                {
                    List<DataParameter> parameters1 = new List<DataParameter>();
                    dt = session.GetTable(sql, parameters1.ToArray());
                  
                }


     



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

        /// <summary>
        /// 获取列表Title
        /// </summary>
        /// <param name="condition">条件</param>
        /// <param name="page">数据页</param>
        /// <returns>数据页</returns>
        public DataTable GetListWithParameterTitle(MainOperation condition)
        {
            string sql = null;
            List<DataParameter> parameters = new List<DataParameter>();
            DataTable dt = new DataTable();
            try
            {
                sql = this.GetQuerySqlWithParameter(condition, ref parameters);
                using (IDataSession session = AppDataFactory.CreateMainSession())
                {
                    dt = session.GetTable(sql, parameters.ToArray());
                }
                return dt;
            }
            catch (Exception ex)
            {
                throw ex;
            }
        }


        public string GetJsonSource(System.Data.DataTable dt)
        {
            string pa = ",";
            try
            {
                StringBuilder returnValue = new StringBuilder("{ \"total\":\" " + dt.Rows.Count.ToString() + "\", \"rows\":[");

                if (dt.Rows.Count > 0)
                {
                    for (int i = 0; i < dt.Rows.Count; i++)
                    {
                        if (i != 0)
                        {
                            returnValue.AppendLine(pa);
                        }

                        string josnItem = "";

                        List<string> itemValue = new List<string>();

                        foreach (DataColumn item in dt.Columns)
                        {
                            object value = dt.Rows[i][item.ColumnName];
                            itemValue.Add(string.Format("\"{0}\":\"{1}\"", item.ColumnName, value != null && value != System.DBNull.Value ? value : string.Empty));

                        }
                        if (itemValue.Count > 0)
                        {
                            josnItem = "{" + string.Join(",", itemValue.ToArray()) + "}";
                        }
                        else
                        {
                            josnItem = string.Empty;
                        }

                        returnValue.AppendLine(josnItem);

                    }

                }
                returnValue.Append("]");


                returnValue.Append("}");

                return returnValue.ToString();
            }
            catch (Exception)
            {

                throw;
            }
        }

        #endregion

        #region

        /// <summary>
        /// 获取列表(不带加工参数)
        /// </summary>
        /// <param name="condition">条件</param>
        /// <param name="page">数据页</param>
        /// <returns>数据页</returns>
        public DataPage GetListWithOutParameter(MainOperation condition, DataPage page)
        {
            string sql = null;
            string countSql = null;
            DataTable dt = new DataTable();
            List<DataParameter> parameters = new List<DataParameter>();
            try
            {
                //分页关键字段及排序
                page.KeyName = "PID";

                if (string.IsNullOrEmpty(page.SortExpression))
                {
                    page.SortExpression = "OPERATEDDATE DESC";
                }
                sql = this.GetPageQuerySqlWithOutParameter(condition, ref parameters, page);
                // sql = this.GetPageQuerySql(condition, ref parameters, page);
                countSql = this.GetCountQuerySql(condition);
                int sum = 0;
                using (IDataSession session = AppDataFactory.CreateMainSession())
                {
                    dt = session.GetTable(sql, parameters.ToArray());
                    sum = Convert.ToInt32(session.ExecuteSqlScalar(countSql, parameters.ToArray()));
                }


                page.RecordCount = sum;
                page.Result = dt;

                #region 设置分页属性

                if (page.RecordCount == 0)
                {
                    page.PageIndex = 1;
                    return page;
                }

                if (page.RecordCount % page.PageSize != 0)
                {
                    page.PageCount = page.RecordCount / page.PageSize + 1;
                    if (page.PageCount < page.PageIndex)
                    {
                        page.PageIndex = page.PageCount;
                    }

                }
                else
                {
                    page.PageCount = page.RecordCount / page.PageSize;
                }

                if (page.PageCount < page.PageIndex)
                {
                    page.PageIndex = page.PageCount;
                }

                #endregion



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

        public DataTable GetListWithOutParameterDt(MainOperation condition)
        {
            DataResult<DataTable> result = new DataResult<DataTable>();
            string sql = null;
            DataTable dt = new DataTable();
            List<DataParameter> parameters = new List<DataParameter>();
            try
            {

                sql = this.GetPageQuerySqlWithOutParameterDt(condition, ref parameters);
                using (IDataSession session = AppDataFactory.CreateMainSession())
                {
                    dt = session.GetTable(sql, parameters.ToArray());
                }
                //result.Result = dt;
                return dt;
            }
            catch (Exception ex)
            {
                throw ex;
            }
        }

        /// <summary>
        /// 获取列表Title(不带加工参数)
        /// </summary>
        /// <param name="condition">条件</param>
        /// <param name="page">数据页</param>
        /// <returns>数据页</returns>
        public DataTable GetListWithOutParameterTitle(MainOperation condition)
        {
            string sql = null;
            List<DataParameter> parameters = new List<DataParameter>();
            DataTable dt = new DataTable();
            try
            {
                sql = this.GetQuerySqlWithOutParameter(condition, ref parameters);
                using (IDataSession session = AppDataFactory.CreateMainSession())
                {
                    dt = session.GetTable(sql, parameters.ToArray());
                }
                return dt;
            }
            catch (Exception ex)
            {
                throw ex;
            }
        }

        #endregion

        #endregion

        #region 获取查询语句
        /// <summary>
        /// 获取查询语句
        /// </summary>
        /// <param name="user">查询条件</param>
        /// <param name="parameters">参数</param>
        /// <returns>查询语句</returns>
        private string GetQuerySql(MainOperation condition, ref List<DataParameter> parameters)
        {
            StringBuilder sqlBuilder = new StringBuilder();
            StringBuilder whereBuilder = new StringBuilder();
            try
            {
                //构成查询语句
                sqlBuilder.Append(@"SELECT A.[PID]
                                         , A.[PDID]
                                         , A.[PRODUCTCODE]
                                         , A.[PRODUCTCODESTR]
                                         , A.[PROCESSTYPE]
                                         , A.[PRODUCTTYPE]
                                         , A.[MACHINENAME]
                                         , A.[MACHINECODDE]
                                         , A.[MOLDNUMBER]
                                         , A.[STATUS]
                                         , A.[OPERATESTATE]
                                         , A.[OPERATEDDATE]
                                         , A.[CURRENTPROCESS]
                                         , A.[PRODUCESHIFTNAME]
                                         , A.[PRODUCESHIFTTCODE]
                                         , A.[PRODUCELINE]
                                         , A.[FILENAME]
                                         , A.[FILEPATH]
                                         , A.[MATERIAL_CODE]
                                         , A.[MATERIAL_NAME]
                                         , A.[MATERIAL_TYPE_CODE]
                                         , A.[WORKCENTER_CODE]
                                         , A.[MODELSTATION]
                                         , A.[CREATEUSER]
                                         , A.[CREATEDATE]
                                         , A.[UPDATEUSER]
                                         , A.[UPDATEDATE]
                                         ,B.PRODUCTNAME AS PRODUCTTYPETEXT
                                         ,C.PROCESSNAME AS PROCESSTYPETEXT
                                      FROM [T_AW_MAINOPERATION] A 
                                       LEFT JOIN T_BD_PRODUCTBASIC B ON A.PRODUCTTYPE = B.PRODUCTTYPE 
                                       LEFT JOIN T_BD_PROCESSINFO C ON A.PROCESSTYPE = C.PROCESSTYPE ");

                if (string.IsNullOrEmpty(condition.PDID) == false)
                {
                    whereBuilder.Append(" AND A.PDID in ( select  PDID from T_AW_MAINPRODUCT where mid=@PDID union select @PDID)");
                    parameters.Add(new DataParameter { ParameterName = "PDID", DataType = DbType.String, Value = condition.PDID });
                }

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

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

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

                //查询条件
                if (string.IsNullOrEmpty(condition.PRODUCTCODE) == false)
                {
                    whereBuilder.Append(" AND A.PRODUCTCODE = @PRODUCTCODE");
                    parameters.Add(new DataParameter { ParameterName = "PRODUCTCODE", DataType = DbType.String, Value = condition.PRODUCTCODE });
                }

                //查询条件
                if (string.IsNullOrEmpty(condition.PRODUCTTYPE) == false)
                {
                    whereBuilder.Append(" AND A.PRODUCTTYPE = @PRODUCTTYPE");
                    parameters.Add(new DataParameter { ParameterName = "PRODUCTTYPE", DataType = DbType.String, Value = condition.PRODUCTTYPE });
                }

                //查询条件零件号
                if (string.IsNullOrEmpty(condition.MATERIAL_CODE) == false)
                {
                    whereBuilder.Append(" AND A.MATERIAL_CODE = @MATERIAL_CODE");
                    parameters.Add(new DataParameter { ParameterName = "MATERIAL_CODE", DataType = DbType.String, Value = condition.MATERIAL_CODE });
                }
                //查询条件零件类别
                if (string.IsNullOrEmpty(condition.MATERIAL_TYPE_CODE) == false)
                {
                    whereBuilder.Append(" AND A.MATERIAL_TYPE_CODE = @MATERIAL_TYPE_CODE");
                    parameters.Add(new DataParameter { ParameterName = "MATERIAL_TYPE_CODE", DataType = DbType.String, Value = condition.MATERIAL_TYPE_CODE });
                }
                //查询条件工作中心
                if (string.IsNullOrEmpty(condition.WORKCENTER_CODE) == false)
                {
                    whereBuilder.Append(" AND A.WORKCENTER_CODE = @WORKCENTER_CODE");
                    parameters.Add(new DataParameter { ParameterName = "WORKCENTER_CODE", DataType = DbType.String, Value = condition.WORKCENTER_CODE });
                }
                
                //查询条件
                if (string.IsNullOrEmpty(condition.PRODUCELINE) == false)
                {
                    whereBuilder.Append(" AND A.PRODUCELINE = @PRODUCELINE");
                    parameters.Add(new DataParameter { ParameterName = "PRODUCELINE", DataType = DbType.String, Value = condition.PRODUCELINE });
                }

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

                //加入时间条件
                if (condition.OPERATEDDATE != DateTime.MinValue)
                {
                    String startDateTime = condition.OPERATEDDATE.ToString("yyyy-MM-dd") + " 00:00:00";
                    whereBuilder.Append(" AND A.OPERATEDDATE >= '" + Convert.ToDateTime(startDateTime) + "'");
                }

                if (condition.OPERATEDDATE != DateTime.MinValue)
                {
                    String endDateTime = condition.OPERATEDDATE.ToString("yyyy-MM-dd") + " 23:59:59";
                    whereBuilder.Append(" AND A.OPERATEDDATE <= '" + Convert.ToDateTime(endDateTime) + "'");
                }

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

                sqlBuilder.Append(" ORDER BY OPERATEDDATE ASC ");

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


        /// <summary>
        /// 
        /// </summary>
        /// <param name="condition"></param>
        /// <param name="parameters"></param>
        /// <returns></returns>
        private string GetOperationQuerySql(MainOperation condition, ref List<DataParameter> parameters)
        {
            condition.CreateDateStart = System.DateTime.Now.AddDays(-1).ToString("yyyy-MM-dd HH:mm:ss");
            StringBuilder sqlBuilder = new StringBuilder();
            StringBuilder whereBuilder = new StringBuilder();
            try
            {
                //构成查询语句
                sqlBuilder.Append(@"SELECT A.[PID]
                                         , A.[PDID]
                                         , A.[PRODUCTCODE]
                                         , A.[PRODUCTCODESTR]
                                         , A.[PROCESSTYPE]
                                         , A.[PRODUCTTYPE]
                                         , A.[MACHINENAME]
                                         , A.[MACHINECODDE]
                                         , A.[MOLDNUMBER]
                                         , A.[STATUS]
                                         , A.[OPERATESTATE]
                                         , A.[OPERATEDDATE]
                                         , A.[CURRENTPROCESS]
                                         , A.[PRODUCESHIFTNAME]
                                         , A.[PRODUCESHIFTTCODE]
                                         , A.[PRODUCELINE]
                                         , A.[FILENAME]
                                         , A.[FILEPATH]
                                         , A.[MATERIAL_CODE]
                                         , A.[MATERIAL_NAME]
                                         , A.[MATERIAL_TYPE_CODE]
                                         , A.[WORKCENTER_CODE]
                                         , A.[MODELSTATION]
                                         ,A.[WORKCELL_CODE]
                                         , A.[CREATEUSER]
                                         , A.[CREATEDATE]
                                         , A.[UPDATEUSER]
                                         , A.[UPDATEDATE]
                                         ,B.PRODUCTNAME AS PRODUCTTYPETEXT
                                         ,C.PROCESSNAME AS PROCESSTYPETEXT
                                      FROM [T_AW_MAINOPERATION] A 
                                       LEFT JOIN T_BD_PRODUCTBASIC B ON A.PRODUCTTYPE = B.PRODUCTTYPE 
                                       LEFT JOIN T_BD_PROCESSINFO C ON A.PROCESSTYPE = C.PROCESSTYPE 
                                        where  A.OPERATESTATE = '0'
                                        ");

                if (string.IsNullOrEmpty(condition.PROCESSTYPE) == false)
                {
                    sqlBuilder.Append(" AND A.PROCESSTYPE = @PROCESSTYPE");
                    //parameters.Add(new DataParameter { ParameterName = "PROCESSTYPE", DataType = DbType.String, Value = condition.PROCESSTYPE });
                }


                if (string.IsNullOrEmpty(condition.MACHINECODDE) == false)
                {
                    sqlBuilder.Append(" AND A.MACHINECODDE = @MACHINECODDE");
                    //parameters.Add(new DataParameter { ParameterName = "MACHINECODDE", DataType = DbType.String, Value = condition.MACHINECODDE });
                }

                sqlBuilder.Append(" union ");
                sqlBuilder.Append(@"SELECT A.[PID]
                                         , A.[PDID]
                                         , A.[PRODUCTCODE]
                                         , A.[PRODUCTCODESTR]
                                         , A.[PROCESSTYPE]
                                         , A.[PRODUCTTYPE]
                                         , A.[MACHINENAME]
                                         , A.[MACHINECODDE]
                                         , A.[MOLDNUMBER]
                                         , A.[STATUS]
                                         , A.[OPERATESTATE]
                                         , A.[OPERATEDDATE]
                                         , A.[CURRENTPROCESS]
                                         , A.[PRODUCESHIFTNAME]
                                         , A.[PRODUCESHIFTTCODE]
                                         , A.[PRODUCELINE]
                                         , A.[FILENAME]
                                         , A.[FILEPATH]
                                         , A.[MODELSTATION]
                                         , A.[MATERIAL_CODE]
                                         , A.[MATERIAL_NAME]
                                         , A.[MATERIAL_TYPE_CODE]
                                         ,A.[WORKCELL_CODE]
                                         , A.[WORKCENTER_CODE]
                                         , A.[CREATEUSER]
                                         , A.[CREATEDATE]
                                         , A.[UPDATEUSER]
                                         , A.[UPDATEDATE]
                                         ,B.PRODUCTNAME AS PRODUCTTYPETEXT
                                         ,C.PROCESSNAME AS PROCESSTYPETEXT
                                      FROM [T_AW_MAINOPERATION] A 
                                       LEFT JOIN T_BD_PRODUCTBASIC B ON A.PRODUCTTYPE = B.PRODUCTTYPE 
                                       LEFT JOIN T_BD_PROCESSINFO C ON A.PROCESSTYPE = C.PROCESSTYPE ");

                if (string.IsNullOrEmpty(condition.CreateDateStart) == false)
                {
                    whereBuilder.Append("  A.CREATEDATE >@CREATEDATE");
                    parameters.Add(new DataParameter { ParameterName = "CREATEDATE", DataType = DbType.String, Value = condition.CreateDateStart });
                }

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

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

                if (string.IsNullOrEmpty(condition.MACHINECODDE) == false)
                {
                    whereBuilder.Append(" AND A.MACHINECODDE = @MACHINECODDE");
                    parameters.Add(new DataParameter { ParameterName = "MACHINECODDE", DataType = DbType.String, Value = condition.MACHINECODDE });
                }
                //查询条件零件号
                if (string.IsNullOrEmpty(condition.MATERIAL_CODE) == false)
                {
                    whereBuilder.Append(" AND A.MATERIAL_CODE = @MATERIAL_CODE");
                    parameters.Add(new DataParameter { ParameterName = "MATERIAL_CODE", DataType = DbType.String, Value = condition.MATERIAL_CODE });
                }

                //查询条件零件类别
                if (string.IsNullOrEmpty(condition.MATERIAL_TYPE_CODE) == false)
                {
                    whereBuilder.Append(" AND A.MATERIAL_TYPE_CODE = @MATERIAL_TYPE_CODE");
                    parameters.Add(new DataParameter { ParameterName = "MATERIAL_TYPE_CODE", DataType = DbType.String, Value = condition.MATERIAL_TYPE_CODE });
                }
                //查询条件工作中心
                if (string.IsNullOrEmpty(condition.WORKCENTER_CODE) == false)
                {
                    whereBuilder.Append(" AND A.WORKCENTER_CODE = @WORKCENTER_CODE");
                    parameters.Add(new DataParameter { ParameterName = "WORKCENTER_CODE", DataType = DbType.String, Value = condition.WORKCENTER_CODE });
                }
                //查询条件
                if (string.IsNullOrEmpty(condition.PRODUCTCODE) == false)
                {
                    whereBuilder.Append(" AND A.PRODUCTCODE = @PRODUCTCODE");
                    parameters.Add(new DataParameter { ParameterName = "PRODUCTCODE", DataType = DbType.String, Value = condition.PRODUCTCODE });
                }
                //查询条件
                if (string.IsNullOrEmpty(condition.PRODUCTTYPE) == false)
                {
                    whereBuilder.Append(" AND A.PRODUCTTYPE = @PRODUCTTYPE");
                    parameters.Add(new DataParameter { ParameterName = "PRODUCTTYPE", DataType = DbType.String, Value = condition.PRODUCTTYPE });
                }
                if (string.IsNullOrEmpty(condition.PDID) == false)
                {
                    whereBuilder.Append(" AND A.PDID = @PDID");
                    parameters.Add(new DataParameter { ParameterName = "PDID", DataType = DbType.String, Value = condition.PDID });
                }
                //查询条件
                if (string.IsNullOrEmpty(condition.PRODUCELINE) == false)
                {
                    whereBuilder.Append(" AND A.PRODUCELINE = @PRODUCELINE");
                    parameters.Add(new DataParameter { ParameterName = "PRODUCELINE", DataType = DbType.String, Value = condition.PRODUCELINE });
                }
                if (string.IsNullOrEmpty(condition.MOLDNUMBER) == false)
                {
                    whereBuilder.Append(" AND A.MOLDNUMBER = @MOLDNUMBER");
                    parameters.Add(new DataParameter { ParameterName = "MOLDNUMBER", DataType = DbType.String, Value = condition.MOLDNUMBER });
                }
                if (whereBuilder.Length > 0)
                {
                    sqlBuilder.Append(" WHERE " + whereBuilder.ToString());
                }
                return sqlBuilder.ToString();
            }
            catch (Exception ex)
            {
                throw ex;
            }
        }

        /// <summary>
        /// 获取查询语句(带加工参数)
        /// </summary>
        /// <param name="user">查询条件</param>
        /// <param name="parameters">参数</param>
        /// <returns>查询语句</returns>
        private string GetQuerySqlWithParameter(MainOperation condition, ref List<DataParameter> parameters)
        {
            StringBuilder sqlBuilder = new StringBuilder();
            StringBuilder whereBuilder = new StringBuilder();
            try
            {
                //构成查询语句
                sqlBuilder.Append(@"SELECT M.[PID]
                                          ,M.[PRODUCTCODE]
                                          ,M.[PROCESSTYPE]
                                          ,M.[PRODUCTTYPE]
                                          ,M.[MACHINENAME]
                                          ,M.[MACHINECODDE]
                                          ,M.[WORKCELL_CODE]
                                          ,M.[STATUS]
                                          ,M.[OPERATESTATE]
                                          ,M.[OPERATEDDATE]
                                          ,M.[PRODUCESHIFTNAME]
                                          ,M.[PRODUCESHIFTTCODE]
                                          ,M.[MATERIAL_CODE]
                                          ,MA.[MATERIAL_NAME]
                                          ,M.[MATERIAL_TYPE_CODE]
                                          ,M.[WORKCENTER_CODE]
                                          ,M.[MODELSTATION]
                                          ,M.[CREATEDATE]  
                                          ,'' AS OPERATEDDATESTR
                                          ,'' AS CREATEDATESTR
                                          ,O.[USERNAME] AS CREATEUSERNAME");
                sqlBuilder.AppendFormat(" ,P.[{0}] ", condition.SelectCollumns.Replace(",", "],P.["));
                sqlBuilder.Append(" FROM [T_AW_MAINOPERATION] M ");
                sqlBuilder.AppendFormat(" LEFT JOIN {0} P ON M.[PID]=P.[MOID] ", condition.PARATABLENAME);
                sqlBuilder.Append(" LEFT JOIN T_QM_USER O ON O.[USERID] = M.[CREATEUSER]");
                sqlBuilder.Append("	LEFT JOIN T_MD_MATERIAL MA ON MA.MATERIAL_CODE=M.MATERIAL_CODE	");

                #region 查询条件
                //查询条件
                if (string.IsNullOrEmpty(condition.PRODUCELINE) == false)
                {
                    whereBuilder.Append(" AND M.PRODUCELINE = @PRODUCELINE");
                    parameters.Add(new DataParameter { ParameterName = "PRODUCELINE", DataType = DbType.String, Value = condition.PRODUCELINE });
                }
                //产品条码
                if (string.IsNullOrEmpty(condition.PRODUCTCODE) == false)
                {
                    whereBuilder.Append(" AND M.PRODUCTCODE LIKE '%" + condition.PRODUCTCODE + "%' ");
                    //parameters.Add(new DataParameter { ParameterName = "PRODUCTCODE", DataType = DbType.String, Value = String.Format("%{0}%", condition.PRODUCTCODE) });
                }
                //班次编号
                if (string.IsNullOrEmpty(condition.PRODUCESHIFTTCODE) == false)
                {
                    whereBuilder.Append(" AND M.PRODUCESHIFTTCODE = '" + condition.PRODUCESHIFTTCODE + "'");
                    //parameters.Add(new DataParameter { ParameterName = "PRODUCESHIFTTCODE", DataType = DbType.String, Value = condition.PRODUCESHIFTTCODE });
                }
                //设备编码
                if (string.IsNullOrEmpty(condition.MACHINECODDE) == false)
                {
                    whereBuilder.Append(" AND M.MACHINECODDE = '" + condition.MACHINECODDE + "'");
                    //parameters.Add(new DataParameter { ParameterName = "MACHINECODDE", DataType = DbType.String, Value = condition.MACHINECODDE });
                }
                //产品状态
                if (string.IsNullOrEmpty(condition.STATUS) == false)
                {
                    whereBuilder.Append(" AND M.STATUS = '" + condition.STATUS + "'");
                    //parameters.Add(new DataParameter { ParameterName = "STATUS", DataType = DbType.String, Value = condition.STATUS });
                }
                //查询条件零件类别
                if (string.IsNullOrEmpty(condition.MATERIAL_TYPE_CODE) == false)
                {
                    whereBuilder.Append(" AND M.MATERIAL_TYPE_CODE =  '" + condition.MATERIAL_TYPE_CODE + "'");
                    //parameters.Add(new DataParameter { ParameterName = "MATERIAL_TYPE_CODE", DataType = DbType.String, Value = condition.MATERIAL_TYPE_CODE });
                }
                //查询条件零件号
                if (string.IsNullOrEmpty(condition.MATERIAL_CODE) == false)
                {
                    whereBuilder.Append(" AND M.MATERIAL_CODE = '" + condition.MATERIAL_CODE + "'");
                    //parameters.Add(new DataParameter { ParameterName = "MATERIAL_CODE", DataType = DbType.String, Value = condition.MATERIAL_CODE });
                }
                //查询条件工作中心
                if (string.IsNullOrEmpty(condition.WORKCENTER_CODE) == false)
                {
                    whereBuilder.Append(" AND M.WORKCENTER_CODE = '" + condition.WORKCENTER_CODE + "'");
                    //parameters.Add(new DataParameter { ParameterName = "WORKCENTER_CODE", DataType = DbType.String, Value = condition.WORKCENTER_CODE });
                }
                //工序
                if (string.IsNullOrEmpty(condition.WORKCELL_CODE) == false)
                {
                    whereBuilder.Append(" AND M.WORKCELL_CODE = '" + condition.WORKCELL_CODE + "'");
                }
                if (condition.DATEOPESTART != null && condition.DATEOPESTART != DateTime.MinValue)
                {
                    whereBuilder.Append(" AND M.CREATEDATE >= @DATEOPESTART");
                    parameters.Add(new DataParameter { ParameterName = "DATEOPESTART", DataType = DbType.DateTime, Value = condition.DATEOPESTART });
                }
                if (condition.DATEOPEEND != null && condition.DATEOPEEND != DateTime.MinValue)
                {
                    whereBuilder.Append(" AND M.CREATEDATE <= @DATEOPEEND");
                    parameters.Add(new DataParameter { ParameterName = "DATEOPEEND", DataType = DbType.DateTime, Value = condition.DATEOPEEND });
                }
                #endregion 

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


        /// <summary>
        /// 获取查询语句(不带带加工参数)
        /// </summary>
        /// <param name="user">查询条件</param>
        /// <param name="parameters">参数</param>
        /// <returns>查询语句</returns>
        private string GetQuerySqlWithOutParameter(MainOperation condition, ref List<DataParameter> parameters)
        {
            StringBuilder sqlBuilder = new StringBuilder();
            StringBuilder whereBuilder = new StringBuilder();
            try
            {
                //构成查询语句
                sqlBuilder.Append(@"SELECT M.[PID]
                                          ,M.[PRODUCTCODE]
                                          ,M.[PROCESSTYPE]
                                          ,M.[PRODUCTTYPE]
                                          ,M.[MACHINENAME]
                                          ,M.[MACHINECODDE]
                                          ,M.[WORKCELL_CODE]
                                          ,M.[STATUS]
                                          ,M.[OPERATESTATE]
                                          ,M.[OPERATEDDATE]
                                          ,M.[PRODUCESHIFTNAME]
                                          ,M.[PRODUCESHIFTTCODE]
                                          ,M.[MATERIAL_CODE]
                                          ,MA.[MATERIAL_NAME]
                                          ,M.[MATERIAL_TYPE_CODE]
                                          ,M.[WORKCENTER_CODE]
                                          ,M.[WORKCELL_CODE]
                                          ,M.[MODELSTATION]
                                          ,M.[CREATEDATE]  
                                          ,'' AS OPERATEDDATESTR
                                          ,'' AS CREATEDATESTR
                                          ,O.[USERNAME] AS CREATEUSERNAME");
                sqlBuilder.Append(" FROM [T_AW_MAINOPERATION] M ");
                sqlBuilder.Append(" LEFT JOIN T_QM_USER O ON O.[USERID] = M.[CREATEUSER]");
                sqlBuilder.Append("	LEFT JOIN T_MD_MATERIAL MA ON MA.MATERIAL_CODE=M.MATERIAL_CODE	");

                #region 查询条件
                //查询条件
                if (string.IsNullOrEmpty(condition.PRODUCELINE) == false)
                {
                    whereBuilder.Append(" AND M.PRODUCELINE = @PRODUCELINE");
                    parameters.Add(new DataParameter { ParameterName = "PRODUCELINE", DataType = DbType.String, Value = condition.PRODUCELINE });
                }
                //产品条码
                if (string.IsNullOrEmpty(condition.PRODUCTCODE) == false)
                {
                    whereBuilder.Append(" AND M.PRODUCTCODE LIKE '%" + condition.PRODUCTCODE + "%' ");
                    //parameters.Add(new DataParameter { ParameterName = "PRODUCTCODE", DataType = DbType.String, Value = String.Format("%{0}%", condition.PRODUCTCODE) });
                }
                //班次编号
                if (string.IsNullOrEmpty(condition.PRODUCESHIFTTCODE) == false)
                {
                    whereBuilder.Append(" AND M.PRODUCESHIFTTCODE = '" + condition.PRODUCESHIFTTCODE + "'");
                    //parameters.Add(new DataParameter { ParameterName = "PRODUCESHIFTTCODE", DataType = DbType.String, Value = condition.PRODUCESHIFTTCODE });
                }
                //设备编码
                if (string.IsNullOrEmpty(condition.MACHINECODDE) == false)
                {
                    whereBuilder.Append(" AND M.MACHINECODDE = '" + condition.MACHINECODDE + "'");
                    //parameters.Add(new DataParameter { ParameterName = "MACHINECODDE", DataType = DbType.String, Value = condition.MACHINECODDE });
                }
                //产品状态
                if (string.IsNullOrEmpty(condition.STATUS) == false)
                {
                    whereBuilder.Append(" AND M.STATUS = '" + condition.STATUS + "'");
                    //parameters.Add(new DataParameter { ParameterName = "STATUS", DataType = DbType.String, Value = condition.STATUS });
                }
                //查询条件零件类别
                if (string.IsNullOrEmpty(condition.MATERIAL_TYPE_CODE) == false)
                {
                    whereBuilder.Append(" AND M.MATERIAL_TYPE_CODE =  '" + condition.MATERIAL_TYPE_CODE + "'");
                    //parameters.Add(new DataParameter { ParameterName = "MATERIAL_TYPE_CODE", DataType = DbType.String, Value = condition.MATERIAL_TYPE_CODE });
                }
                //查询条件零件号
                if (string.IsNullOrEmpty(condition.MATERIAL_CODE) == false)
                {
                    whereBuilder.Append(" AND M.MATERIAL_CODE = '" + condition.MATERIAL_CODE + "'");
                    //parameters.Add(new DataParameter { ParameterName = "MATERIAL_CODE", DataType = DbType.String, Value = condition.MATERIAL_CODE });
                }
                //查询条件工作中心
                if (string.IsNullOrEmpty(condition.WORKCENTER_CODE) == false)
                {
                    whereBuilder.Append(" AND M.WORKCENTER_CODE = '" + condition.WORKCENTER_CODE + "'");
                    //parameters.Add(new DataParameter { ParameterName = "WORKCENTER_CODE", DataType = DbType.String, Value = condition.WORKCENTER_CODE });
                }
                //工序
                if (string.IsNullOrEmpty(condition.WORKCELL_CODE) == false)
                {
                    whereBuilder.Append(" AND M.WORKCELL_CODE = '" + condition.WORKCELL_CODE + "'");
                }

                if (condition.DATEOPESTART != null && condition.DATEOPESTART != DateTime.MinValue)
                {
                    whereBuilder.Append(" AND M.CREATEDATE >= @DATEOPESTART");
                    parameters.Add(new DataParameter { ParameterName = "DATEOPESTART", DataType = DbType.DateTime, Value = condition.DATEOPESTART });
                }
                if (condition.DATEOPEEND != null && condition.DATEOPEEND != DateTime.MinValue)
                {
                    whereBuilder.Append(" AND M.CREATEDATE <= @DATEOPEEND");
                    parameters.Add(new DataParameter { ParameterName = "DATEOPEEND", DataType = DbType.DateTime, Value = condition.DATEOPEEND });
                }
                #endregion 

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


        /// <summary>
        /// 框架外的分页语句获取查询语句(不带带加工参数)
        /// </summary>
        /// <param name="condition"></param>
        /// <param name="parameters"></param>
        /// <param name="page"></param>
        /// <returns></returns>
        private string GetPageQuerySqlWithOutParameter(MainOperation condition, ref List<DataParameter> parameters, DataPage page)
        {

            StringBuilder sqlBuilder = new StringBuilder();
            StringBuilder whereBuilder = new StringBuilder();
            try
            {
                //构成查询语句
                if (page.SortExpression.Contains("CREATEUSER") == false && page.SortExpression.Contains("UPDATEUSER") == false)
                {
                    page.SortExpression = "M." + page.SortExpression;
                }

                if (page.SortExpression.Contains("CREATEUSER"))
                {
                    page.SortExpression = page.SortExpression.Substring(page.SortExpression.TrimStart().IndexOf(" "));
                    page.SortExpression = "O.USERNAME " + page.SortExpression;
                }
                sqlBuilder.Append("SELECT * FROM (");
                sqlBuilder.AppendFormat(@"SELECT top {0} ROW_NUMBER() OVER (ORDER BY {1} ) AS ROWINDEX,", (page.PageIndex * page.PageSize).ToString(), page.SortExpression);
                sqlBuilder.Append(@"
                                           M.PID
                                          ,M.[PRODUCTCODE]
                                          ,M.[MATERIAL_CODE]
                                          ,MA.[MATERIAL_NAME]
                                          ,M.[MATERIAL_TYPE_CODE]
                                          ,M.[WORKCELL_CODE]
                                          ,M.[MACHINENAME]
                                          ,M.[MACHINECODDE]
                                          ,M.[STATUS]
                                          , M.[OPERATESTATE]
                                          
                                          ,'' as OPERATEDDATE
                                          ,M.[PRODUCESHIFTNAME]
                                          ,M.[PRODUCESHIFTTCODE] 
                                          ,M.[WORKCENTER_CODE]
                                          ,M.[MODELSTATION]
                                          ,'' as CREATEDATE
                                          ,CONVERT(VARCHAR(19),M.[OPERATEDDATE],120) AS OPERATEDDATESTR
                                          ,CONVERT(VARCHAR(19),M.[CREATEDATE],120) AS CREATEDATESTR
                                          ,O.[USERNAME] AS CREATEUSERNAME");
                sqlBuilder.Append(" FROM [T_AW_MAINOPERATION] M ");
                sqlBuilder.Append(" LEFT JOIN T_QM_USER O ON O.[USERID] = M.[CREATEUSER]");
                sqlBuilder.Append("	LEFT JOIN T_MD_MATERIAL MA ON MA.MATERIAL_CODE=M.MATERIAL_CODE	");

                #region 查询条件
                //查询条件
                if (string.IsNullOrEmpty(condition.PRODUCELINE) == false)
                {
                    whereBuilder.Append(" AND M.PRODUCELINE = '" + condition.PRODUCELINE + "'");
                    //parameters.Add(new DataParameter { ParameterName = "PRODUCELINE", DataType = DbType.String, Value = condition.PRODUCELINE });
                }
                //产品条码
                if (string.IsNullOrEmpty(condition.PRODUCTCODE) == false)
                {
                    whereBuilder.Append(" AND M.PRODUCTCODE LIKE '%" + condition.PRODUCTCODE + "%' ");
                    //parameters.Add(new DataParameter { ParameterName = "PRODUCTCODE", DataType = DbType.String, Value = String.Format("%{0}%", condition.PRODUCTCODE) });
                }
                //班次编号
                if (string.IsNullOrEmpty(condition.PRODUCESHIFTTCODE) == false)
                {
                    whereBuilder.Append(" AND M.PRODUCESHIFTTCODE = '" + condition.PRODUCESHIFTTCODE + "'");
                    //parameters.Add(new DataParameter { ParameterName = "PRODUCESHIFTTCODE", DataType = DbType.String, Value = condition.PRODUCESHIFTTCODE });
                }
                //设备编码
                if (string.IsNullOrEmpty(condition.MACHINECODDE) == false)
                {
                    whereBuilder.Append(" AND M.MACHINECODDE = '" + condition.MACHINECODDE + "'");
                    //parameters.Add(new DataParameter { ParameterName = "MACHINECODDE", DataType = DbType.String, Value = condition.MACHINECODDE });
                }
                //产品状态
                if (string.IsNullOrEmpty(condition.STATUS) == false)
                {
                    whereBuilder.Append(" AND M.STATUS = '" + condition.STATUS + "'");
                    //parameters.Add(new DataParameter { ParameterName = "STATUS", DataType = DbType.String, Value = condition.STATUS });
                }
                //查询条件零件类别
                if (string.IsNullOrEmpty(condition.MATERIAL_TYPE_CODE) == false)
                {
                    whereBuilder.Append(" AND M.MATERIAL_TYPE_CODE =  '" + condition.MATERIAL_TYPE_CODE + "'");
                    //parameters.Add(new DataParameter { ParameterName = "MATERIAL_TYPE_CODE", DataType = DbType.String, Value = condition.MATERIAL_TYPE_CODE });
                }
                //查询条件零件号
                if (string.IsNullOrEmpty(condition.MATERIAL_CODE) == false)
                {
                    whereBuilder.Append(" AND M.MATERIAL_CODE = '" + condition.MATERIAL_CODE + "'");
                    //parameters.Add(new DataParameter { ParameterName = "MATERIAL_CODE", DataType = DbType.String, Value = condition.MATERIAL_CODE });
                }
                //查询条件工作中心
                if (string.IsNullOrEmpty(condition.WORKCENTER_CODE) == false)
                {
                    whereBuilder.Append(" AND M.WORKCENTER_CODE = '" + condition.WORKCENTER_CODE + "'");
                    //parameters.Add(new DataParameter { ParameterName = "WORKCENTER_CODE", DataType = DbType.String, Value = condition.WORKCENTER_CODE });
                }
                //工序
                if (string.IsNullOrEmpty(condition.WORKCELL_CODE) == false)
                {
                    whereBuilder.Append(" AND M.WORKCELL_CODE = '" + condition.WORKCELL_CODE + "'");
                }
                if (condition.DATEOPESTART != null && condition.DATEOPESTART != DateTime.MinValue)
                {
                    whereBuilder.Append(" AND M.CREATEDATE >= '" + condition.DATEOPESTART + "'");
                    //parameters.Add(new DataParameter { ParameterName = "DATEOPESTART", DataType = DbType.DateTime, Value = condition.DATEOPESTART });
                }
                if (condition.DATEOPEEND != null && condition.DATEOPEEND != DateTime.MinValue)
                {
                    whereBuilder.Append(" AND M.CREATEDATE <= '" + condition.DATEOPEEND + "'");
                    //parameters.Add(new DataParameter { ParameterName = "DATEOPEEND", DataType = DbType.DateTime, Value = condition.DATEOPEEND });
                }
                if (whereBuilder.Length > 0)
                {
                    sqlBuilder.Append(" WHERE " + whereBuilder.ToString().Substring(4));
                }
                sqlBuilder.AppendFormat(") QMDATAPAGE1   WHERE ROWINDEX BETWEEN {0} AND {1}", Convert.ToString(page.PageSize * (page.PageIndex - 1) + 1), Convert.ToString(page.PageSize * page.PageIndex));


                #endregion

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


        /// <summary>
        /// 
        /// </summary>
        /// <param name="condition"></param>
        /// <param name="parameters"></param>
        /// <returns></returns>
        private string GetPageQuerySqlWithOutParameterDt(MainOperation condition, ref List<DataParameter> parameters)
        {

            StringBuilder sqlBuilder = new StringBuilder();
            StringBuilder whereBuilder = new StringBuilder();
            try
            {
                //构成查询语句

              sqlBuilder.Append(@"SELECT
                                            M.PID,
                                          M.[PRODUCTCODE]
                                          ,M.[PROCESSTYPE]
                                          ,M.[PRODUCTTYPE]
                                          ,M.[MACHINENAME]
                                          ,M.[MACHINECODDE]
                                          ,M.[WORKCELL_CODE]
                                          ,CASE M.[STATUS] WHEN '0' THEN '正常' else '异常' end as STATUS
                                          ,CASE M.[OPERATESTATE] WHEN '0' THEN '加工中' WHEN '1' THEN '加工完成' else '放行' end as OPERATESTATE
                                          ,'' as OPERATEDDATE
                                          ,M.[PRODUCESHIFTNAME]
                                          ,M.[PRODUCESHIFTTCODE]
                                          ,M.[MATERIAL_CODE]
                                          ,MA.[MATERIAL_NAME]
                                          ,M.[MATERIAL_TYPE_CODE]
                                          ,M.[WORKCENTER_CODE]
                                          ,M.[MODELSTATION]
                                          ,'' as CREATEDATE
                                          ,CONVERT(VARCHAR(19),M.[OPERATEDDATE],120) AS OPERATEDDATESTR
                                          ,CONVERT(VARCHAR(19),M.[CREATEDATE],120) AS CREATEDATESTR
                                          ,O.[USERNAME] AS CREATEUSERNAME");
                sqlBuilder.Append(" FROM [T_AW_MAINOPERATION] M ");
                sqlBuilder.Append(" LEFT JOIN T_QM_USER O ON O.[USERID] = M.[CREATEUSER]");
                sqlBuilder.Append("	LEFT JOIN T_MD_MATERIAL MA ON MA.MATERIAL_CODE=M.MATERIAL_CODE	");

                #region 查询条件

                //查询条件
                if (string.IsNullOrEmpty(condition.PRODUCELINE) == false)
                {
                    whereBuilder.Append(" AND M.PRODUCELINE = '" + condition.PRODUCELINE + "'");
                    //parameters.Add(new DataParameter { ParameterName = "PRODUCELINE", DataType = DbType.String, Value = condition.PRODUCELINE });
                }
                //产品条码
                if (string.IsNullOrEmpty(condition.PRODUCTCODE) == false)
                {
                    whereBuilder.Append(" AND M.PRODUCTCODE LIKE '%" + condition.PRODUCTCODE + "%' ");
                    //parameters.Add(new DataParameter { ParameterName = "PRODUCTCODE", DataType = DbType.String, Value = String.Format("%{0}%", condition.PRODUCTCODE) });
                }

                //班次编号
                if (string.IsNullOrEmpty(condition.PRODUCESHIFTTCODE) == false)
                {
                    whereBuilder.Append(" AND M.PRODUCESHIFTTCODE = '" + condition.PRODUCESHIFTTCODE + "'");
                    //parameters.Add(new DataParameter { ParameterName = "PRODUCESHIFTTCODE", DataType = DbType.String, Value = condition.PRODUCESHIFTTCODE });
                }

                //设备编码
                if (string.IsNullOrEmpty(condition.MACHINECODDE) == false)
                {
                    whereBuilder.Append(" AND M.MACHINECODDE = '" + condition.MACHINECODDE + "'");
                    //parameters.Add(new DataParameter { ParameterName = "MACHINECODDE", DataType = DbType.String, Value = condition.MACHINECODDE });
                }

                //产品状态
                if (string.IsNullOrEmpty(condition.STATUS) == false)
                {
                    whereBuilder.Append(" AND M.STATUS = '" + condition.STATUS + "'");
                    //parameters.Add(new DataParameter { ParameterName = "STATUS", DataType = DbType.String, Value = condition.STATUS });
                }

                //查询条件零件类别
                if (string.IsNullOrEmpty(condition.MATERIAL_TYPE_CODE) == false)
                {
                    whereBuilder.Append(" AND M.MATERIAL_TYPE_CODE =  '" + condition.MATERIAL_TYPE_CODE + "'");
                    //parameters.Add(new DataParameter { ParameterName = "MATERIAL_TYPE_CODE", DataType = DbType.String, Value = condition.MATERIAL_TYPE_CODE });
                }
                //查询条件零件号
                if (string.IsNullOrEmpty(condition.MATERIAL_CODE) == false)
                {
                    whereBuilder.Append(" AND M.MATERIAL_CODE = '" + condition.MATERIAL_CODE + "'");
                    //parameters.Add(new DataParameter { ParameterName = "MATERIAL_CODE", DataType = DbType.String, Value = condition.MATERIAL_CODE });
                }
                //查询条件工作中心
                if (string.IsNullOrEmpty(condition.WORKCENTER_CODE) == false)
                {
                    whereBuilder.Append(" AND M.WORKCENTER_CODE = '" + condition.WORKCENTER_CODE + "'");
                    //parameters.Add(new DataParameter { ParameterName = "WORKCENTER_CODE", DataType = DbType.String, Value = condition.WORKCENTER_CODE });
                }
                //工序
                if (string.IsNullOrEmpty(condition.WORKCELL_CODE) == false)
                {
                    whereBuilder.Append(" AND M.WORKCELL_CODE = '" + condition.WORKCELL_CODE + "'");
                }

                if (condition.DATEOPESTART != null && condition.DATEOPESTART != DateTime.MinValue)
                {
                    whereBuilder.Append(" AND M.CREATEDATE >= '" + condition.DATEOPESTART + "'");
                    //parameters.Add(new DataParameter { ParameterName = "DATEOPESTART", DataType = DbType.DateTime, Value = condition.DATEOPESTART });
                }
                if (condition.DATEOPEEND != null && condition.DATEOPEEND != DateTime.MinValue)
                {
                    whereBuilder.Append(" AND M.CREATEDATE <= '" + condition.DATEOPEEND + "'");
                    //parameters.Add(new DataParameter { ParameterName = "DATEOPEEND", DataType = DbType.DateTime, Value = condition.DATEOPEEND });
                }


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

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

        /// <summary>
        /// 框架外的分页语句获取查询语句(带加工参数)
        /// </summary>
        /// <param name="condition"></param>
        /// <param name="parameters"></param>
        /// <param name="page"></param>
        /// <returns></returns>
        private string GetPageQuerySqlWithParameter(MainOperation condition, ref List<DataParameter> parameters, DataPage page)
        {

            StringBuilder sqlBuilder = new StringBuilder();
            StringBuilder whereBuilder = new StringBuilder();
            try
            {
                //构成查询语句
                if (page.SortExpression.Contains("CREATEUSER") == false && page.SortExpression.Contains("UPDATEUSER") == false)
                {
                    if (condition.SelectCollumns.ToUpper().IndexOf(page.SortExpression.ToUpper().Replace("DESC", "").Replace("ASC", "").Trim()) >= 0)
                    {
                        page.SortExpression = "M.CREATEDATE DESC ";
                    }
                    else
                    {
                        page.SortExpression = "M." + page.SortExpression;
                    }
                }
                if (page.SortExpression.Contains("CREATEUSERNAME"))
                {

                    page.SortExpression = page.SortExpression.Replace("CREATEUSERNAME", "CREATEUSER");
                }

                sqlBuilder.Append("SELECT tt.*,O.[USERNAME] AS CREATEUSERNAME ");
                sqlBuilder.AppendFormat(" ,P.[{0}] ", condition.SelectCollumns.Replace(",", "],P.["));
                sqlBuilder.Append("  FROM (");

                sqlBuilder.AppendFormat(@"SELECT top {0} ROW_NUMBER() OVER (ORDER BY {1} ) AS ROWINDEX,", (page.PageIndex * page.PageSize).ToString(), page.SortExpression);
                sqlBuilder.Append(@"
                                           M.PID
                                          ,M.[PRODUCTCODE]
                                          ,M.[PROCESSTYPE]
                                          ,M.[PRODUCTTYPE]
                                          ,M.[MACHINENAME]
                                          ,M.[MACHINECODDE]
                                          ,M.[WORKCELL_CODE]
                                          ,M.[STATUS]
                                          ,M.[OPERATESTATE]
                                          , '' as OPERATEDDATE
                                          ,M.[PRODUCESHIFTNAME]
                                          ,M.[PRODUCESHIFTTCODE]
                                          ,M.[MATERIAL_CODE]
                                          ,MA.[MATERIAL_NAME]
                                          ,M.[MATERIAL_TYPE_CODE]
                                          ,M.[WORKCENTER_CODE]
                                          ,M.[MODELSTATION]
                                          ,'' as CREATEDATE 
                                            ,M.[CREATEUSER] 
                                          ,M.[OPERATEDDATE] AS OPERATEDDATESTR
                                          ,M.[CREATEDATE]  AS CREATEDATESTR");
                sqlBuilder.Append(@" FROM [T_AW_MAINOPERATION] M ");
                sqlBuilder.Append("	LEFT JOIN T_MD_MATERIAL MA ON MA.MATERIAL_CODE=M.MATERIAL_CODE	");

                #region //查询条件
                if (string.IsNullOrEmpty(condition.PRODUCELINE) == false)
                {
                    whereBuilder.Append(" AND M.PRODUCELINE = '" + condition.PRODUCELINE + "'");
                    //parameters.Add(new DataParameter { ParameterName = "PRODUCELINE", DataType = DbType.String, Value = condition.PRODUCELINE });
                }
                //产品条码
                if (string.IsNullOrEmpty(condition.PRODUCTCODE) == false)
                {
                    whereBuilder.Append(" AND M.PRODUCTCODE LIKE '%" + condition.PRODUCTCODE + "%' ");
                    //parameters.Add(new DataParameter { ParameterName = "PRODUCTCODE", DataType = DbType.String, Value = String.Format("%{0}%", condition.PRODUCTCODE) });
                }
                //班次编号
                if (string.IsNullOrEmpty(condition.PRODUCESHIFTTCODE) == false)
                {
                    whereBuilder.Append(" AND M.PRODUCESHIFTTCODE = '" + condition.PRODUCESHIFTTCODE + "'");
                    //parameters.Add(new DataParameter { ParameterName = "PRODUCESHIFTTCODE", DataType = DbType.String, Value = condition.PRODUCESHIFTTCODE });
                }
                //设备编码
                if (string.IsNullOrEmpty(condition.MACHINECODDE) == false)
                {
                    whereBuilder.Append(" AND M.MACHINECODDE = '" + condition.MACHINECODDE + "'");
                    //parameters.Add(new DataParameter { ParameterName = "MACHINECODDE", DataType = DbType.String, Value = condition.MACHINECODDE });
                }
                //产品状态
                if (string.IsNullOrEmpty(condition.STATUS) == false)
                {
                    whereBuilder.Append(" AND M.STATUS = '" + condition.STATUS + "'");
                    //parameters.Add(new DataParameter { ParameterName = "STATUS", DataType = DbType.String, Value = condition.STATUS });
                }
                //查询条件零件类别
                if (string.IsNullOrEmpty(condition.MATERIAL_TYPE_CODE) == false)
                {
                    whereBuilder.Append(" AND M.MATERIAL_TYPE_CODE =  '" + condition.MATERIAL_TYPE_CODE + "'");
                    //parameters.Add(new DataParameter { ParameterName = "MATERIAL_TYPE_CODE", DataType = DbType.String, Value = condition.MATERIAL_TYPE_CODE });
                }
                //查询条件零件号
                if (string.IsNullOrEmpty(condition.MATERIAL_CODE) == false)
                {
                    whereBuilder.Append(" AND M.MATERIAL_CODE = '" + condition.MATERIAL_CODE + "'");
                    //parameters.Add(new DataParameter { ParameterName = "MATERIAL_CODE", DataType = DbType.String, Value = condition.MATERIAL_CODE });
                }
                //查询条件工作中心
                if (string.IsNullOrEmpty(condition.WORKCENTER_CODE) == false)
                {
                    whereBuilder.Append(" AND M.WORKCENTER_CODE = '" + condition.WORKCENTER_CODE + "'");
                    //parameters.Add(new DataParameter { ParameterName = "WORKCENTER_CODE", DataType = DbType.String, Value = condition.WORKCENTER_CODE });
                }
                //工序
                if (string.IsNullOrEmpty(condition.WORKCELL_CODE) == false)
                {
                    whereBuilder.Append(" AND M.WORKCELL_CODE = '" + condition.WORKCELL_CODE + "'");
                }

                if (condition.DATEOPESTART != null && condition.DATEOPESTART != DateTime.MinValue)
                {
                    whereBuilder.Append(" AND M.CREATEDATE >= '" + condition.DATEOPESTART + "'");
                    //parameters.Add(new DataParameter { ParameterName = "DATEOPESTART", DataType = DbType.DateTime, Value = condition.DATEOPESTART });
                }
                if (condition.DATEOPEEND != null && condition.DATEOPEEND != DateTime.MinValue)
                {
                    whereBuilder.Append(" AND M.CREATEDATE <= '" + condition.DATEOPEEND + "'");
                    //parameters.Add(new DataParameter { ParameterName = "DATEOPEEND", DataType = DbType.DateTime, Value = condition.DATEOPEEND });
                }

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

                sqlBuilder.Append(") tt ");
                sqlBuilder.Append(" LEFT JOIN T_QM_USER O ON O.[USERID] = tt.[CREATEUSER]");
                sqlBuilder.AppendFormat(" LEFT JOIN {0} P ON tt.[PID]=P.[MOID]", condition.PARATABLENAME);
                sqlBuilder.AppendFormat(" WHERE ROWINDEX BETWEEN {0} AND {1}", Convert.ToString(page.PageSize * (page.PageIndex - 1) + 1), Convert.ToString(page.PageSize * page.PageIndex));
                //#endregion
                //sqlBuilder.Clear().Append( " select abc.*,p.RESTTHICKNESS,o.USERNAME from ( select top 20 ROW_NUMBER() OVER (ORDER BY M.OPERATEDDATE DESC ) AS ROWINDEX,* from [T_AW_MAINOPERATION] M WHERE  M.CREATEDATE >= '2012-01-01' AND M.CREATEDATE <= '2016-01-01' AND M.PROCESSTYPE = 6) abc left join "
                //   + " T_AW_BURNPARAMETER P ON abc.[PID]=P.[MOID] AND P.CREATEDATE >= '2012-01-01' AND P.CREATEDATE <= '2016-01-01' LEFT JOIN T_QM_USER O ON O.[USERID] = abc.[CREATEUSER]");
                return sqlBuilder.ToString();
            }
            catch (Exception ex)
            {
                throw ex;
            }
        }
        
        /// <summary>
        /// Sql语句
        /// </summary>
        /// <param name="condition"></param>
        /// <param name="parameters"></param>
        /// <returns></returns>
        private string GetPageQuerySqlWithParameterDt(MainOperation condition, ref List<DataParameter> parameters)
        {

            StringBuilder sqlBuilder = new StringBuilder();
            StringBuilder whereBuilder = new StringBuilder();
            try
            {
                

                sqlBuilder.Append("SELECT tt.*,O.[USERNAME] AS CREATEUSERNAME ");
                sqlBuilder.AppendFormat(" ,P.[{0}] ", condition.SelectCollumns.Replace(",", "],P.["));
                sqlBuilder.Append("  FROM (");

               sqlBuilder.Append(@"SELECT
                                            M.PID,
                                          M.[PRODUCTCODE]
                                          ,M.[PROCESSTYPE]
                                          ,M.[PRODUCTTYPE]
                                          ,M.[MACHINENAME]
                                          ,M.[MACHINECODDE]
                                          ,M.[WORKCELL_CODE]
                                          ,M.[STATUS]
                                          ,M.[OPERATESTATE]
                                          , '' as OPERATEDDATE
                                          ,M.[PRODUCESHIFTNAME]
                                          ,M.[PRODUCESHIFTTCODE]
                                          ,M.[MODELSTATION]
                                          ,'' as CREATEDATE 
                                          ,M.[MATERIAL_CODE]
                                          ,MA.[MATERIAL_NAME]
                                          ,M.[MATERIAL_TYPE_CODE]
                                          ,M.[WORKCENTER_CODE]
                                          ,M.[CREATEUSER] 
                                          ,M.[OPERATEDDATE] AS OPERATEDDATESTR
                                          ,M.[CREATEDATE]  AS CREATEDATESTR");
                sqlBuilder.Append(@" FROM [T_AW_MAINOPERATION] M ");
                sqlBuilder.Append("	LEFT JOIN T_MD_MATERIAL MA ON MA.MATERIAL_CODE=M.MATERIAL_CODE	");


                //查询条件
                if (string.IsNullOrEmpty(condition.PRODUCELINE) == false)
                {
                    whereBuilder.Append(" AND M.PRODUCELINE = '" + condition.PRODUCELINE + "'");
                    //parameters.Add(new DataParameter { ParameterName = "PRODUCELINE", DataType = DbType.String, Value = condition.PRODUCELINE });
                }
                //产品条码
                if (string.IsNullOrEmpty(condition.PRODUCTCODE) == false)
                {
                    whereBuilder.Append(" AND M.PRODUCTCODE LIKE '%" + condition.PRODUCTCODE + "%' ");
                    //parameters.Add(new DataParameter { ParameterName = "PRODUCTCODE", DataType = DbType.String, Value = String.Format("%{0}%", condition.PRODUCTCODE) });
                }

                //班次编号
                if (string.IsNullOrEmpty(condition.PRODUCESHIFTTCODE) == false)
                {
                    whereBuilder.Append(" AND M.PRODUCESHIFTTCODE = '" + condition.PRODUCESHIFTTCODE + "'");
                    //parameters.Add(new DataParameter { ParameterName = "PRODUCESHIFTTCODE", DataType = DbType.String, Value = condition.PRODUCESHIFTTCODE });
                }

                //设备编码
                if (string.IsNullOrEmpty(condition.MACHINECODDE) == false)
                {
                    whereBuilder.Append(" AND M.MACHINECODDE = '" + condition.MACHINECODDE + "'");
                    //parameters.Add(new DataParameter { ParameterName = "MACHINECODDE", DataType = DbType.String, Value = condition.MACHINECODDE });
                }

                //产品状态
                if (string.IsNullOrEmpty(condition.STATUS) == false)
                {
                    whereBuilder.Append(" AND M.STATUS = '" + condition.STATUS + "'");
                    //parameters.Add(new DataParameter { ParameterName = "STATUS", DataType = DbType.String, Value = condition.STATUS });
                }

                //查询条件零件类别
                if (string.IsNullOrEmpty(condition.MATERIAL_TYPE_CODE) == false)
                {
                    whereBuilder.Append(" AND M.MATERIAL_TYPE_CODE =  '" + condition.MATERIAL_TYPE_CODE + "'");
                    //parameters.Add(new DataParameter { ParameterName = "MATERIAL_TYPE_CODE", DataType = DbType.String, Value = condition.MATERIAL_TYPE_CODE });
                }
                //查询条件零件号
                if (string.IsNullOrEmpty(condition.MATERIAL_CODE) == false)
                {
                    whereBuilder.Append(" AND M.MATERIAL_CODE = '" + condition.MATERIAL_CODE + "'");
                    //parameters.Add(new DataParameter { ParameterName = "MATERIAL_CODE", DataType = DbType.String, Value = condition.MATERIAL_CODE });
                }
                //查询条件工作中心
                if (string.IsNullOrEmpty(condition.WORKCENTER_CODE) == false)
                {
                    whereBuilder.Append(" AND M.WORKCENTER_CODE = '" + condition.WORKCENTER_CODE + "'");
                    //parameters.Add(new DataParameter { ParameterName = "WORKCENTER_CODE", DataType = DbType.String, Value = condition.WORKCENTER_CODE });
                }
                //工序
                if (string.IsNullOrEmpty(condition.WORKCELL_CODE) == false)
                {
                    whereBuilder.Append(" AND M.WORKCELL_CODE = '" + condition.WORKCELL_CODE + "'");
                }
                if (condition.DATEOPESTART != null && condition.DATEOPESTART != DateTime.MinValue)
                {
                    whereBuilder.Append(" AND M.CREATEDATE >= '" + condition.DATEOPESTART + "'");
                    //parameters.Add(new DataParameter { ParameterName = "DATEOPESTART", DataType = DbType.DateTime, Value = condition.DATEOPESTART });
                }

                if (condition.DATEOPEEND != null && condition.DATEOPEEND != DateTime.MinValue)
                {
                    whereBuilder.Append(" AND M.CREATEDATE <= '" + condition.DATEOPEEND + "'");
                    //parameters.Add(new DataParameter { ParameterName = "DATEOPEEND", DataType = DbType.DateTime, Value = condition.DATEOPEEND });
                }


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


                sqlBuilder.Append(") tt ");
                sqlBuilder.Append(" LEFT JOIN T_QM_USER O ON O.[USERID] = tt.[CREATEUSER]");
                sqlBuilder.AppendFormat(" LEFT JOIN {0} P ON tt.[PID]=P.[MOID]", condition.PARATABLENAME);
                //#endregion
                //sqlBuilder.Clear().Append( " select abc.*,p.RESTTHICKNESS,o.USERNAME from ( select top 20 ROW_NUMBER() OVER (ORDER BY M.OPERATEDDATE DESC ) AS ROWINDEX,* from [T_AW_MAINOPERATION] M WHERE  M.CREATEDATE >= '2012-01-01' AND M.CREATEDATE <= '2016-01-01' AND M.PROCESSTYPE = 6) abc left join "
                //   + " T_AW_BURNPARAMETER P ON abc.[PID]=P.[MOID] AND P.CREATEDATE >= '2012-01-01' AND P.CREATEDATE <= '2016-01-01' LEFT JOIN T_QM_USER O ON O.[USERID] = abc.[CREATEUSER]");
                return sqlBuilder.ToString();
            }
            catch (Exception ex)
            {
                throw ex;
            }
        }
        #endregion

        #region 获取求和语句
        /// <summary>
        /// 获取求和语句
        /// </summary>
        /// <param name="condition"></param>
        /// <param name="parameters"></param>
        /// <returns></returns>
        private string GetCountQuerySql(MainOperation condition)
        {

            StringBuilder sqlBuilder = new StringBuilder();
            StringBuilder whereBuilder = new StringBuilder();
            try
            {
                //构成查询语句
                sqlBuilder.Append(@"SELECT count(1) ");
                sqlBuilder.Append("FROM T_AW_MAINOPERATION M");

                #region 查询条件
                //查询条件
                if (string.IsNullOrEmpty(condition.PRODUCELINE) == false)
                {
                    whereBuilder.Append(" AND M.PRODUCELINE = '" + condition.PRODUCELINE + "'");
                    //parameters.Add(new DataParameter { ParameterName = "PRODUCELINE", DataType = DbType.String, Value = condition.PRODUCELINE });
                }
                //产品条码
                if (string.IsNullOrEmpty(condition.PRODUCTCODE) == false)
                {
                    whereBuilder.Append(" AND M.PRODUCTCODE LIKE '%" + condition.PRODUCTCODE + "%' ");
                    //parameters.Add(new DataParameter { ParameterName = "PRODUCTCODE", DataType = DbType.String, Value = String.Format("%{0}%", condition.PRODUCTCODE) });
                }
                //班次编号
                if (string.IsNullOrEmpty(condition.PRODUCESHIFTTCODE) == false)
                {
                    whereBuilder.Append(" AND M.PRODUCESHIFTTCODE = '" + condition.PRODUCESHIFTTCODE + "'");
                    //parameters.Add(new DataParameter { ParameterName = "PRODUCESHIFTTCODE", DataType = DbType.String, Value = condition.PRODUCESHIFTTCODE });
                }
                //设备编码
                if (string.IsNullOrEmpty(condition.MACHINECODDE) == false)
                {
                    whereBuilder.Append(" AND M.MACHINECODDE = '" + condition.MACHINECODDE + "'");
                    //parameters.Add(new DataParameter { ParameterName = "MACHINECODDE", DataType = DbType.String, Value = condition.MACHINECODDE });
                }
                //产品状态
                if (string.IsNullOrEmpty(condition.STATUS) == false)
                {
                    whereBuilder.Append(" AND M.STATUS = '" + condition.STATUS + "'");
                    //parameters.Add(new DataParameter { ParameterName = "STATUS", DataType = DbType.String, Value = condition.STATUS });
                }

                //查询条件零件类别
                if (string.IsNullOrEmpty(condition.MATERIAL_TYPE_CODE) == false)
                {
                    whereBuilder.Append(" AND M.MATERIAL_TYPE_CODE =  '" + condition.MATERIAL_TYPE_CODE + "'");
                    //parameters.Add(new DataParameter { ParameterName = "MATERIAL_TYPE_CODE", DataType = DbType.String, Value = condition.MATERIAL_TYPE_CODE });
                }
                //查询条件零件号
                if (string.IsNullOrEmpty(condition.MATERIAL_CODE) == false)
                {
                    whereBuilder.Append(" AND M.MATERIAL_CODE = '" + condition.MATERIAL_CODE + "'");
                    //parameters.Add(new DataParameter { ParameterName = "MATERIAL_CODE", DataType = DbType.String, Value = condition.MATERIAL_CODE });
                }
                //查询条件工作中心
                if (string.IsNullOrEmpty(condition.WORKCENTER_CODE) == false)
                {
                    whereBuilder.Append(" AND M.WORKCENTER_CODE = '" + condition.WORKCENTER_CODE + "'");
                    //parameters.Add(new DataParameter { ParameterName = "WORKCENTER_CODE", DataType = DbType.String, Value = condition.WORKCENTER_CODE });
                }

                //工序
                if (string.IsNullOrEmpty(condition.WORKCELL_CODE) == false)
                {
                    whereBuilder.Append(" AND M.WORKCELL_CODE = '" + condition.WORKCELL_CODE + "'");
                }

                //开始时间
                if (condition.DATEOPESTART != null && condition.DATEOPESTART != DateTime.MinValue)
                {
                    whereBuilder.Append(" AND M.CREATEDATE >= '" + condition.DATEOPESTART + "'");
                    //parameters.Add(new DataParameter { ParameterName = "DATEOPESTART", DataType = DbType.DateTime, Value = condition.DATEOPESTART });
                }
                //结束时间
                if (condition.DATEOPEEND != null && condition.DATEOPEEND != DateTime.MinValue)
                {
                    whereBuilder.Append(" AND M.CREATEDATE <= '" + condition.DATEOPEEND + "'");
                    //parameters.Add(new DataParameter { ParameterName = "DATEOPEEND", DataType = DbType.DateTime, Value = condition.DATEOPEEND });
                }

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

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

        #endregion

        #region 获取导出的数据
        /// <summary>
        /// 获取导出的数据
        /// </summary>
        /// <param name="user">查询条件</param>
        /// <returns>数据</returns>
        public DataTable GetExportData(MainOperation 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())
                {
                    dt = session.GetTable(sql, parameters.ToArray());
                    dt.TableName = "T_AW_MAIN";
                }
                return dt;
            }
            catch (Exception ex)
            {
                throw ex;
            }
        }
        #endregion

        #region 信息是否重复
        /// <summary>
        /// 判断名称是否存在
        /// </summary>
        /// <param name="info"></param>
        /// <returns>true:已存在;fasel:不存在。</returns>
        public bool ExistsMainOperation(MainOperation model)
        {
            StringBuilder sqlBuilder = new StringBuilder();
            StringBuilder whereBuilder = new StringBuilder();
            List<DataParameter> parameters = new List<DataParameter>();
            int count = 0;
            try
            {
                sqlBuilder.Append("SELECT COUNT(PID) FROM T_AW_MAINOPERATION");
                if (string.IsNullOrEmpty(model.PID) == false)
                {
                    whereBuilder.Append(" AND PID =@PID ");
                    parameters.Add(new DataParameter { ParameterName = "PID", DataType = DbType.String, Value = model.PID });
                }
                //if (string.IsNullOrEmpty(model.) == false)
                //{
                //whereBuilder.Append(" AND AREACODE=@AREACODE");
                //parameters.Add(new DataParameter { ParameterName = "AREACODE", DataType = DbType.String, Value = ""model.AREACODE + "" });
                //}
                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()));
                }
                if (count > 0)
                {
                    return true;
                }
                else
                {
                    return false;
                }
            }
            catch (Exception ex)
            {
                throw ex;
            }
        }


        #endregion

        #region 插入信息
        /// <summary>
        /// 插入信息(单表)
        /// </summary>
        /// <param name="">信息</param>
        /// <returns>插入行数</returns>
        public int Insert(MainOperation model)
        {
            int count = 0;
            try
            {

                if (this.BaseSession != null)
                {
                    count = this.BaseSession.Insert<MainOperation>(model);
                }
                else
                {
                    using (IDataSession session = AppDataFactory.CreateMainSession())
                    {
                        //插入基本信息
                        count = session.Insert<MainOperation>(model);
                    }
                }

                return count;
            }
            catch (Exception ex)
            {
                throw ex;
            }
        }
        /// <summary>
        /// 插入信息(单表)
        /// </summary>
        /// <param name="">信息</param>
        /// <returns>插入多行数</returns>
        public int Insert(List<MainOperation> model)
        {
            int count = 0;
            try
            {

                if (this.BaseSession != null)
                {
                    count = this.BaseSession.Insert<List<MainOperation>>(model);
                }
                else
                {
                    using (IDataSession session = AppDataFactory.CreateMainSession())
                    {
                        //插入基本信息
                        count = session.Insert<List<MainOperation>>(model);
                    }
                }

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

        #region 更新信息
        /// <summary>
        /// 更新信息
        /// </summary>
        /// <param name=""></param>
        /// <returns>更新行数</returns>
        public int Update(MainOperation model)
        {
            int count = 0;
            try
            {
                if (this.BaseSession != null)
                {

                    //更新基本信息
                    count = BaseSession.Update<MainOperation>(model);



                }


                else
                {
                    using (IDataSession session = AppDataFactory.CreateMainSession())
                    {
                        //更新基本信息
                        count = session.Update<MainOperation>(model);
                    }
                }


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

        #region 逻辑删除
        /// <summary>
        /// 逻辑删除信息
        /// </summary>
        /// <param name=""></param>
        /// <returns>删除个数</returns>
        public int Delete(MainOperation model)
        {
            StringBuilder sqlBuilder = new StringBuilder();
            List<DataParameter> parameters = new List<DataParameter>();
            int count = 0;
            try
            {
                if (this.BaseSession != null)
                {
                    sqlBuilder.Append("DELETE T_AW_MAINOPERATION ");
                    sqlBuilder.Append("WHERE  PID = @PID ");
                    parameters.Add(new DataParameter { ParameterName = "PID", DataType = DbType.String, Value = model.PID });
                    count = BaseSession.ExecuteSql(sqlBuilder.ToString(), parameters.ToArray());
                }
                else
                {
                    using (IDataSession session = AppDataFactory.CreateMainSession())
                    {
                        //删除基本信息
                        sqlBuilder.Append("DELETE T_AW_MAINOPERATION ");
                        sqlBuilder.Append("WHERE  PID = @PID ");
                        parameters.Add(new DataParameter { ParameterName = "PID", DataType = DbType.String, Value = model.PID });
                        count = session.ExecuteSql(sqlBuilder.ToString(), parameters.ToArray());
                    }
                }

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

        #region 获取列表(产品加工追溯)

        #region 获取列表
        /// <summary>
        /// 获取列表
        /// </summary>
        /// <param name="condition">条件</param>
        /// <param name="page">数据页</param>
        /// <returns>数据页</returns>
        public DataPage GetMainOperationReviewList(MainOperation condition, DataPage page)
        {
            string sql = null;
            List<DataParameter> parameters = new List<DataParameter>();
            try
            {
                sql = this.GetMainOperationReviewSql(condition, ref parameters);
                //分页关键字段及排序
                page.KeyName = "PID";
                page.SortExpression = "UPDATEDATE DESC";
                using (IDataSession session = AppDataFactory.CreateMainSession())
                {
                    page = session.GetDataPage<MainOperation>(sql, parameters.ToArray(), page);
                }
                return page;
            }
            catch (Exception ex)
            {
                throw ex;
            }
        }
        public List<Product> GetMainOperations(Product condition)
        {
            string sql = null;
            List<DataParameter> parameters = new List<DataParameter>();
            try
            {
                sql = "select p.[PID],p.[PRODUCTTYPE],p.[PRODUCTCODE],p.[PRODUCTSOURCE],p.[MACHINENAME]";
                sql+=",p.[MACHINECODDE],p.[MATERIAL_CODE],p.[STATUS],p.[ISPARENT],p.[CURRENTPROCESS],p.[PRODUCELINE],p.[PRODUCESHIFTNAME],p.[PRODUCESHIFTTCODE]";
                sql+=",p.[OUTFLAG],p.[USINGSTATE],p.[CAPACITY],p.[USINGCOUNT],p.[CREATEUSER],p.[CREATEDATE],p.[UPDATEUSER],p.[UPDATEDATE],p.[WORKCELL_CODE]";
                sql+=",p.[WORKLOC_CODE],p.[WORKCENTER_CODE],p.[TEAM_CODE],p.[ENDOFLINE],p.[PLAN_NO]";
                sql+=",p.[MATERIAL_TYPE],m.MAINCODE  ";
                sql+="from T_AW_PRODUCT p left join T_AW_MAIN  m on m.EPIDERMISCODE=p.PRODUCTCODE"; 
                sql+=" where p.pid in ( select PART_PID from T_QT_PRODUCT_STRUCTURE  where PROCESS_CODE='" + condition.PRODUCTCODE + "' ) ";
                //分页关键字段及排序

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

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

        #region 获取查询语句
        /// <summary>
        /// 获取查询语句
        /// </summary>
        /// <param name="user">查询条件</param>
        /// <param name="parameters">参数</param>
        /// <returns>查询语句</returns>
        private string GetMainOperationReviewSql(MainOperation condition, ref List<DataParameter> parameters)
        {
            StringBuilder sqlBuilder = new StringBuilder();
            StringBuilder whereBuilder = new StringBuilder();
            try
            {
                //构成查询语句
                sqlBuilder.Append(" 	SELECT MP.*,C.USERNAME AS CREATEUSERNAME	 ");
                sqlBuilder.Append(" 	FROM T_AW_MAINOPERATION MP	 ");
                sqlBuilder.Append(" 	LEFT JOIN T_QM_USER C ON C.USERID=MP.CREATEUSER	 ");
                sqlBuilder.Append(" 	WHERE MP.PDID IN(	 ");
                sqlBuilder.Append(" 	SELECT M.PID	 ");
                sqlBuilder.Append(" 	FROM T_AW_MAIN M  where 1=1	 ");
                if (!string.IsNullOrEmpty(condition.PRODUCTCODE))
                {
                    //产品条码
                    sqlBuilder.Append(" 	and M.EPIDERMISCODE=@PRODUCTCODEA	 ");//'本体条码(产品条码)'
                    parameters.Add(new DataParameter { ParameterName = "PRODUCTCODEA", DataType = DbType.String, Value = condition.PRODUCTCODE });
                }
                if (!string.IsNullOrEmpty(condition.MAINCODE))
                {
                    sqlBuilder.Append(" 	and M.MAINCODE=@MAINCODE	 ");//'本体条码(产品条码)'
                    parameters.Add(new DataParameter { ParameterName = "MAINCODE", DataType = DbType.String, Value = condition.MAINCODE });
                
                }

                sqlBuilder.Append(" 	UNION	 ");
                sqlBuilder.Append(" 	SELECT P.PID	 ");
                sqlBuilder.Append(" 	FROM T_AW_PRODUCT P	 ");
                sqlBuilder.Append(" 	LEFT JOIN T_AW_MAINPRODUCT MNP ON MNP.PDID = P.PID	 ");
                sqlBuilder.Append(" 	LEFT JOIN T_AW_MAIN M ON M.PID = MNP.MID	WHERE 1=1  ");
                if (!string.IsNullOrEmpty(condition.PRODUCTCODE))
                {
                    //产品条码
                    sqlBuilder.Append("  and	 M.EPIDERMISCODE=@PRODUCTCODEB 	 ");
                    parameters.Add(new DataParameter { ParameterName = "PRODUCTCODEB", DataType = DbType.String, Value = condition.PRODUCTCODE });
                }
                if (!string.IsNullOrEmpty(condition.MAINCODE))
                {
                    //产品条码
                    sqlBuilder.Append("  and	 M.MAINCODE=@MAINCODE 	 ");
                    //parameters.Add(new DataParameter { ParameterName = "MAINCODE", DataType = DbType.String, Value = condition.MAINCODE });
                }
                sqlBuilder.Append(" 	) ");

                return sqlBuilder.ToString();
            }
            catch (Exception ex)
            {
                throw ex;
            }
        }
        /// <summary>
        /// 获取查询语句
        /// </summary>
        /// <param name="user">查询条件</param>
        /// <param name="parameters">参数</param>
        /// <returns>查询语句</returns>
        private string GetMainOperationReviewSqlw(MainOperation condition, ref List<DataParameter> parameters)
        {
            StringBuilder sqlBuilder = new StringBuilder();
            StringBuilder whereBuilder = new StringBuilder();
            try
            {
                //构成查询语句
                sqlBuilder.Append(" 	SELECT MP.*,C.USERNAME AS CREATEUSERNAME	 ");
                sqlBuilder.Append(" 	FROM T_AW_MAINOPERATION MP	 ");
                sqlBuilder.Append(" 	LEFT JOIN T_QM_USER C ON C.USERID=MP.CREATEUSER	 ");
                sqlBuilder.Append(" 	WHERE MP.PDID IN(	 ");
                sqlBuilder.Append(" 	SELECT M.PID	 ");
                sqlBuilder.Append(" 	FROM T_AW_MAIN M  where 1=1	 ");
                if (!string.IsNullOrEmpty(condition.PRODUCTCODE))
                {
                    //产品条码
                    sqlBuilder.Append(" 	and  M.EPIDERMISCODE=@PRODUCTCODEA	 ");//'本体条码(产品条码)'
                    parameters.Add(new DataParameter { ParameterName = "PRODUCTCODEA", DataType = DbType.String, Value = condition.PRODUCTCODE });
                }
                if (!string.IsNullOrEmpty(condition.MAINCODE))
                {
                    sqlBuilder.Append(" 	and  M.MAINCODE=@MAINCODE	 ");//'本体条码(产品条码)'
                    parameters.Add(new DataParameter { ParameterName = "MAINCODE", DataType = DbType.String, Value = condition.MAINCODE });
                
                }

                sqlBuilder.Append(" 	UNION	 ");
                sqlBuilder.Append(" 	SELECT P.PID	 ");
                sqlBuilder.Append(" 	FROM T_AW_PRODUCT P	 ");
                sqlBuilder.Append(" 	LEFT JOIN T_AW_MAINPRODUCT MNP ON MNP.PDID = P.PID	 ");
                sqlBuilder.Append(" 	LEFT JOIN T_AW_MAIN M ON M.PID = MNP.MID where 1=1  ");

                if (!string.IsNullOrEmpty(condition.PRODUCTCODE))
                {
                    //产品条码
                    sqlBuilder.Append(" 	and M.EPIDERMISCODE=@PRODUCTCODEB 	 ");
                    parameters.Add(new DataParameter { ParameterName = "PRODUCTCODEB", DataType = DbType.String, Value = condition.PRODUCTCODE });
                }
                if (!string.IsNullOrEmpty(condition.MAINCODE))
                {
                    sqlBuilder.Append(" 	and M.MAINCODE=@MAINCODE 	 ");
                    
                }
                
                sqlBuilder.Append(" 	) ");

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

        #region 获取导出的数据
        /// <summary>
        /// 获取导出的数据
        /// </summary>
        /// <param name="user">查询条件</param>
        /// <returns>数据</returns>
        public DataTable GetExportDataForMOR(MainOperation model)
        {
            DataTable dt = null;
            string sql = null;
            List<DataParameter> parameters = new List<DataParameter>();
            try
            {
                //构成查询语句
                sql = this.GetMainOperationReviewSqlw(model, ref parameters);
                using (IDataSession session = AppDataFactory.CreateMainSession())
                {
                    dt = session.GetTable(sql, parameters.ToArray());
                    dt.TableName = "T_AW_MAINOPERATION";
                }
                return dt;
            }
            catch (Exception ex)
            {
                throw ex;
            }
        }
        public DataTable GetExportDataForMORNew(MainOperation model)
        {
            DataTable dt = null;
            string sql = null;
            List<DataParameter> parameters = new List<DataParameter>();
            try
            {
                //构成查询语句
                sql = "select * from T_AW_MAINOPERATION   p  where pdid in ( select PRODUCT_PID from T_QT_PRODUCT_STRUCTURE   where PROCESS_CODE='" + model.PRODUCTCODE + "' )";
                using (IDataSession session = AppDataFactory.CreateMainSession())
                {
                    dt = session.GetTable(sql, parameters.ToArray());
                    dt.TableName = "T_AW_MAINOPERATION";
                }
                return dt;
            }
            catch (Exception ex)
            {
                throw ex;
            }
        }
        #endregion

        #endregion

        #region 插入设备加工信息
        /// <summary>
        /// 设备加工信息
        /// </summary>
        /// <param name="">信息</param>
        /// <returns>插入行数</returns>
        public int MachineOperation(OperationServiceParam model)
        {
            int count = 0;
            try
            {
                using (IDataSession session = AppDataFactory.CreateMainSession())
                {
                    try
                    {

                        session.OpenTs();
                        //1. 判断主体表是否存在
                        if (model.main != null)
                            count = session.Insert<Main>(model.main);
                        //2. 主体零件关系表
                        if (model.mainProductList != null && model.mainProductList.Count > 0)
                            count = session.Insert<MainProduct>(model.mainProductList);
                        //3. 更新零件表
                        if (model.productList != null && model.productList.Count > 0)
                            count = session.Update<Product>(model.productList);
                        //4. 插入记录表
                        count = session.Insert<MainOperation>(model.mainOperation);

                        session.CommitTs();
                    }
                    catch (Exception)
                    {
                        session.RollbackTs();
                        throw;
                    }
                }
                return count;
            }
            catch (Exception ex)
            {
                throw ex;
            }
        }
        #endregion

        #region 产量趋势统计
        /// <summary>
        /// 产量趋势统计
        /// </summary>
        /// <param name="condition"></param>
        /// <returns></returns>
        public List<MainOperation> GetListGroupBy(MainOperation condition)
        {
            string sql = null;
            List<DataParameter> parameters = new List<DataParameter>();
            List<MainOperation> list = new List<MainOperation>();
            try
            {
                sql = this.GetQuerySqlForStatistics(condition, ref parameters);
                //分页关键字段及排序
                using (IDataSession session = AppDataFactory.CreateMainSession())
                {
                    list = session.GetList<MainOperation>(sql, parameters.ToArray()).ToList();
                }
                return list;
            }
            catch (Exception ex)
            {
                throw ex;
            }
        }
        #endregion

        /// <summary>
        /// 获取查询语句(带加工参数)
        /// </summary>
        /// <param name="user">查询条件</param>
        /// <param name="parameters">参数</param>
        /// <returns>查询语句</returns>
        private string GetQuerySqlForStatistics(MainOperation condition, ref List<DataParameter> parameters)
        {
            StringBuilder sqlBuilder = new StringBuilder();
            StringBuilder whereBuilder = new StringBuilder();
            try
            {
                //构成查询语句
                sqlBuilder.Append(@"SELECT COUNT(PRODUCTCODE) AS COUNTS,MACHINECODDE,MACHINENAME,PRODUCESHIFTTCODE,PRODUCESHIFTNAME FROM  DBO.T_AW_MAINOPERATION  ");

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

                if (string.IsNullOrEmpty(condition.PRODUCESHIFTTCODE) == false)
                {
                    whereBuilder.Append(" AND PRODUCESHIFTTCODE = @PRODUCESHIFTTCODE");
                    parameters.Add(new DataParameter { ParameterName = "PRODUCESHIFTTCODE", DataType = DbType.String, Value = condition.PRODUCESHIFTTCODE });
                }
                //查询条件物料号
                if (string.IsNullOrEmpty(condition.MATERIAL_CODE) == false)
                {
                    whereBuilder.Append(" AND MATERIAL_CODE = @MATERIAL_CODE");
                    parameters.Add(new DataParameter { ParameterName = "MATERIAL_CODE", DataType = DbType.String, Value = condition.MATERIAL_CODE });
                }
                //查询条件物料类别
                if (string.IsNullOrEmpty(condition.MATERIAL_TYPE_CODE) == false)
                {
                    whereBuilder.Append(" AND MATERIAL_TYPE_CODE = @MATERIAL_TYPE_CODE");
                    parameters.Add(new DataParameter { ParameterName = "MATERIAL_TYPE_CODE", DataType = DbType.String, Value = condition.MATERIAL_TYPE_CODE });
                }
                //查询条件工作中心
                if (string.IsNullOrEmpty(condition.WORKCENTER_CODE) == false)
                {
                    whereBuilder.Append(" AND WORKCENTER_CODE = @WORKCENTER_CODE");
                    parameters.Add(new DataParameter { ParameterName = "WORKCENTER_CODE", DataType = DbType.String, Value = condition.WORKCENTER_CODE });
                }
                if (string.IsNullOrEmpty(condition.CreateDateStart) == false)
                {
                    whereBuilder.Append(" AND CREATEDATE >= @CreateDateStart");
                    parameters.Add(new DataParameter { ParameterName = "CreateDateStart", DataType = DbType.String, Value = condition.CreateDateStart });
                }
                if (string.IsNullOrEmpty(condition.CreateDateEnd) == false)
                {
                    whereBuilder.Append(" AND CREATEDATE <= @CreateDateEnd");
                    parameters.Add(new DataParameter { ParameterName = "CreateDateEnd", DataType = DbType.String, Value = condition.CreateDateEnd });
                }
                if (whereBuilder.Length > 0)
                {
                    sqlBuilder.Append(" WHERE " + whereBuilder.ToString().Substring(4));
                }
                return sqlBuilder.Append(" GROUP BY MACHINECODDE,MACHINENAME,PRODUCESHIFTTCODE,PRODUCESHIFTNAME  ORDER BY PRODUCESHIFTTCODE,MACHINECODDE").ToString();
            }
            catch (Exception ex)
            {
                throw ex;
            }
        }


        #region 合格率
        /// <summary>
        /// 合格率
        /// </summary>
        /// <param name="condition"></param>
        /// <returns></returns>
        public List<MainOperation> GetListGroupByStauts(MainOperation condition)
        {
            string sql = null;
            List<DataParameter> parameters = new List<DataParameter>();
            List<MainOperation> list = new List<MainOperation>();
            try
            {
                sql = this.GetQuerySqlForStatusStatistics(condition, ref parameters);
                //分页关键字段及排序
                using (IDataSession session = AppDataFactory.CreateMainSession())
                {
                    list = session.GetList<MainOperation>(sql, parameters.ToArray()).ToList();
                }
                return list;
            }
            catch (Exception ex)
            {
                throw ex;
            }
        }
        #endregion

        /// <summary>
        /// 获取查询语句(带加工参数)
        /// </summary>
        /// <param name="user">查询条件</param>
        /// <param name="parameters">参数</param>
        /// <returns>查询语句</returns>
        private string GetQuerySqlForStatusStatistics(MainOperation condition, ref List<DataParameter> parameters)
        {
            StringBuilder sqlBuilder = new StringBuilder();
            StringBuilder whereBuilder = new StringBuilder();
            try
            {
                //构成查询语句
                sqlBuilder.Append(@"SELECT  A.PROCESSTYPE,
                                    QUALIFIED = CASE  WHEN A.[STATUS] = 0 THEN SUM(1) ELSE  0 END ,
                                    REPAIR = CASE  WHEN A.[STATUS] = 1 THEN SUM(1) ELSE  0 END ,
                                    CANCEL = CASE  WHEN A.[STATUS] = 2 THEN SUM(1) ELSE  0 END ,
                                    B.PROCESSNAME PROCESSTYPETEXT FROM DBO.T_AW_MAINOPERATION A,DBO.T_BD_PROCESSINFO B WHERE  A.PROCESSTYPE = B.PROCESSTYPE  ");

                if (string.IsNullOrEmpty(condition.PROCESSTYPE) == false)
                {
                    sqlBuilder.Append(" AND A.PROCESSTYPE = @PROCESSTYPE");
                    parameters.Add(new DataParameter { ParameterName = "PROCESSTYPE", DataType = DbType.String, Value = condition.PROCESSTYPE });
                }

                if (string.IsNullOrEmpty(condition.CreateDateStart) == false)
                {
                    sqlBuilder.Append(" AND A.CREATEDATE >= @CreateDateStart");
                    parameters.Add(new DataParameter { ParameterName = "CreateDateStart", DataType = DbType.String, Value = condition.CreateDateStart });
                }
                if (string.IsNullOrEmpty(condition.CreateDateEnd) == false)
                {
                    sqlBuilder.Append(" AND A.CREATEDATE <= @CreateDateEnd");
                    parameters.Add(new DataParameter { ParameterName = "CreateDateEnd", DataType = DbType.String, Value = condition.CreateDateEnd });
                }


                sqlBuilder.Append(" GROUP BY A.PROCESSTYPE,[STATUS],B.PROCESSNAME  ");

                string reString = "SELECT SUM(QUALIFIED) QUALIFIED,SUM(REPAIR) REPAIR,SUM(CANCEL) CANCEL,(SUM(REPAIR) + SUM(CANCEL)) UNQUALIFIED ,PROCESSTYPE,PROCESSTYPETEXT FROM ("
                    + sqlBuilder.ToString()
                    + ") T1 GROUP BY PROCESSTYPE,PROCESSTYPETEXT  ORDER BY PROCESSTYPE";

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

        public int ReplaceBarcode(string oldcode, string newcode)
        {
            try
            {
                int count = 0;
                List<DataParameter> parameters = new List<DataParameter>();
                string sql = "UPDATE T_AW_MAINOPERATION SET PRODUCTCODE=@newcode WHERE PRODUCTCODE=@oldcode";
                parameters.Add(new DataParameter("newcode", newcode));
                parameters.Add(new DataParameter("oldcode", oldcode));
                if (this.BaseSession != null)
                {
                    count = this.BaseSession.ExecuteSql(sql, parameters.ToArray());
                }
                else
                {
                    using (IDataSession session = AppDataFactory.CreateMainSession())
                    {
                        //更新基本信息
                        count = session.ExecuteSql(sql, parameters.ToArray());
                    }
                }
                return count;
            }
            catch (Exception ex)
            {
                throw ex;
            }
        }

        public int DPParamReplace(string oldcode, string newcode)
        {
            try
            {
                int count = 0;
                List<DataParameter> parameters = new List<DataParameter>();
                StringBuilder sql = new StringBuilder();

                sql.AppendLine("UPDATE [T_PA_4CA-WB0002] SET PRODUCTCODE=@newcode WHERE PRODUCTCODE=@oldcode");
                sql.AppendLine("UPDATE [T_PA_4CA-WB0003] SET PRODUCTCODE=@newcode WHERE PRODUCTCODE=@oldcode");
                sql.AppendLine("UPDATE [T_PA_4CA-WB0004] SET PRODUCTCODE=@newcode WHERE PRODUCTCODE=@oldcode");
                sql.AppendLine("UPDATE [T_PA_4CA-WB0005] SET PRODUCTCODE=@newcode WHERE PRODUCTCODE=@oldcode");
                parameters.Add(new DataParameter("newcode", newcode));
                parameters.Add(new DataParameter("oldcode", oldcode));
                if (this.BaseSession != null)
                {
                    count = this.BaseSession.ExecuteSql(sql.ToString(), parameters.ToArray());
                }
                else
                {
                    using (IDataSession session = AppDataFactory.CreateMainSession())
                    {
                        //更新基本信息
                        count = session.ExecuteSql(sql.ToString(), parameters.ToArray());
                    }
                }
                return count;
            }
            catch (Exception ex)
            {
                throw ex;
            }
        }
    }

}