using System;
using System.Collections.Generic;
using System.Data;
using QMFrameWork.Data;
using QMAPP.Entity;
using QMAPP.FJC.Entity.QT;
using QMAPP.FJC.BLL.QT;
using QMAPP.FJC.DAL.QT;
using QMAPP.BLL;

namespace QMAPP.FJC.BLL.QT
{
    /// <summary>
    /// 模块名称:加工记录
    /// 作    者:张鹏
    /// 编写日期:2017年09月01日
    /// </summary>
    public class ProcessRecordBLL : BaseBLL
    {

        #region 获取信息
        /// <summary>
        /// 获取信息
        /// </summary>
        /// <param name="">条件</param>
        /// <returns>信息</returns>
        public ProcessRecord Get(ProcessRecord info)
        {
            try
            {
                return new ProcessRecordDAL().Get(info);
            }
            catch (Exception ex)
            {
                throw ex;
            }
        }
        #endregion

        #region 获取列表
        /// <summary>
        /// 获取列表
        /// </summary>
        /// <param name="condition">条件</param>
        /// <param name="page">数据页</param>
        /// <returns>数据页</returns>
        public DataPage GetList(ProcessRecord condition, DataPage page)
        {
            try
            {
                return new ProcessRecordDAL().GetList(condition, page);
            }
            catch (Exception ex)
            {
                throw ex;
            }
        }
        #endregion

        #region 信息是否重复
        /// <summary>
        /// 判断名称是否存在
        /// </summary>
        /// <param name="">信息</param>
        /// <returns>true:已存在;fasel:不存在。</returns>
        public bool Exists(ProcessRecord info)
        {
            try
            {
                return new ProcessRecordDAL().Exists(info);
            }
            catch (Exception ex)
            {
                throw ex;
            }
        }

        #endregion

        #region 插入信息
        /// <summary>
        /// 插入信息(单表)
        /// </summary>
        /// <param name="">信息</param>
        /// <returns>插入行数</returns>
        public DataResult<int> Insert(ProcessRecord info)
        {
            DataResult<int> result = new DataResult<int>();
            try
            {
                //基本信息
                info.PID = Guid.NewGuid().ToString();
                ProcessRecordDAL cmdDAL = new ProcessRecordDAL();
                result.Result = new ProcessRecordDAL().Insert(info);
                result.IsSuccess = true;
                return result;
            }
            catch (Exception ex)
            {
                throw ex;
            }
        }
        #endregion

        #region 更新信息
        /// <summary>
        /// 更新信息
        /// </summary>
        /// <param name="">信息</param>
        /// <returns>更新行数</returns>
        public DataResult<int> Update(ProcessRecord info)
        {
            DataResult<int> result = new DataResult<int>();
            try
            {
                result.Result = new ProcessRecordDAL().Update(info);
                result.IsSuccess = true;
                return result;
            }
            catch (Exception ex)
            {
                throw ex;
            }
        }
        #endregion

        #region 删除
        /// <summary>
        /// 删除信息
        /// </summary>
        /// <param name="">主键串</param>
        /// <returns>删除个数</returns>
        public DataResult<int> DeleteArray(string strs)
        {
            int count = 0;
            DataResult<int> result = new DataResult<int>();
            string[] list = strs.Split(":".ToCharArray());
            try
            {
                foreach (string str in list)
                {
                    count += this.Delete(new ProcessRecord { PID = str });
                }
                result.Result = count;
                result.IsSuccess = true;
                return result;
            }
            catch (Exception ex)
            {
                throw ex;
            }
        }

        /// <summary>
        /// 删除信息
        /// </summary>
        /// <param name="">信息</param>
        /// <returns>删除个数</returns>
        public int Delete(ProcessRecord info)
        {
            try
            {
                return new ProcessRecordDAL().Delete(info);
            }
            catch (Exception ex)
            {
                throw ex;
            }
        }
        #endregion

        #region 导出数据
        /// <summary>
        /// 获取导出的数据
        /// </summary>
        /// <param name="">查询条件</param>
        /// <returns>数据</returns>
        public DataTable GetExportData(ProcessRecord info)
        {
            try
            {
                return new ProcessRecordDAL().GetExportData(info);
            }
            catch (Exception ex)
            {
                throw ex;
            }
        }
        #endregion

        #region 导入数据
        /// <summary>
        /// 导入数据
        /// </summary>
        /// <param name="list">数据</param>
        /// <returns>导入结果</returns>
        public DataResult<ImportMessage> ImportData(List<ProcessRecord> list)
        {
            DataResult<ImportMessage> result = new DataResult<ImportMessage>();
            ProcessRecordDAL cmDal = new ProcessRecordDAL();
            List<ProcessRecord> List = new List<ProcessRecord>();
            int index = 0;
            try
            {
                result.Result = new ImportMessage();
                result.Result.Errors = new List<RowError>();
                using (IDataSession session = AppDataFactory.CreateMainSession())
                {
                    //状态判断
                    foreach (ProcessRecord ma in list)
                    {
                        index++;
                        if (!string.IsNullOrEmpty(ma.InfoError))
                        {
                            ma.PID = null;
                            result.Result.failureNum += 1;
                            continue;
                        }
                        //修改改时根据主键等信息获取详细内容信息
                        ProcessRecord oldInfo = cmDal.Get(ma);
                        if (oldInfo != null)
                        {
                            //更新
                            ma.PID = oldInfo.PID;
                            ma.IsNewInfo = false;
                            result.Result.updateNum += 1;
                        }
                        else
                        {
                            //新增
                            oldInfo = new ProcessRecord();
                            ma.PID = Guid.NewGuid().ToString();
                            ma.IsNewInfo = true;
                            result.Result.insertNum += 1;
                        }
                        List.Add(ma);
                    }
                }
                //导入
                cmDal.GetImportData(List);
                result.Msg = "导入成功";
                result.IsSuccess = true;
                return result;
            }
            catch (Exception ex)
            {
                result.IsSuccess = false;
                result.Ex = ex;
                return result;
            }
        }
        #endregion

        /// <summary>
        /// 获取加工记录数量
        /// </summary>
        /// <param name="condition"></param>
        /// <returns></returns>
        public int GetCount(ProcessRecord condition)
        {
            return new ProcessRecordDAL().GetCount(condition);
        }

    }

}