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 ProductStructureBLL : BaseBLL
    {

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

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

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

        #endregion

        #region 插入信息
        /// <summary>
        /// 插入信息(单表)
        /// </summary>
        /// <param name="">信息</param>
        /// <returns>插入行数</returns>
        public DataResult<int> Insert(ProductStructure info)
        {
            DataResult<int> result = new DataResult<int>();
            try
            {
                //基本信息
                info.PID = Guid.NewGuid().ToString();
                ProductStructureDAL cmdDAL = new ProductStructureDAL();
                result.Result = new ProductStructureDAL().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(ProductStructure info)
        {
            DataResult<int> result = new DataResult<int>();
            try
            {
                result.Result = new ProductStructureDAL().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 ProductStructure { 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(ProductStructure info)
        {
            try
            {
                return new ProductStructureDAL().Delete(info);
            }
            catch (Exception ex)
            {
                throw ex;
            }
        }
        #endregion

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

        #region 导入数据
        /// <summary>
        /// 导入数据
        /// </summary>
        /// <param name="list">数据</param>
        /// <returns>导入结果</returns>
        public DataResult<ImportMessage> ImportData(List<ProductStructure> list)
        {
            DataResult<ImportMessage> result = new DataResult<ImportMessage>();
            ProductStructureDAL cmDal = new ProductStructureDAL();
            List<ProductStructure> List = new List<ProductStructure>();
            int index = 0;
            try
            {
                result.Result = new ImportMessage();
                result.Result.Errors = new List<RowError>();
                using (IDataSession session = AppDataFactory.CreateMainSession())
                {
                    //状态判断
                    foreach (ProductStructure ma in list)
                    {
                        index++;
                        if (!string.IsNullOrEmpty(ma.InfoError))
                        {
                            ma.PID = null;
                            result.Result.failureNum += 1;
                            continue;
                        }
                        //修改改时根据主键等信息获取详细内容信息
                        ProductStructure oldInfo = cmDal.Get(ma);
                        if (oldInfo != null)
                        {
                            //更新
                            ma.PID = oldInfo.PID;
                            ma.IsNewInfo = false;
                            result.Result.updateNum += 1;
                        }
                        else
                        {
                            //新增
                            oldInfo = new ProductStructure();
                            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
    }
}