using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using QMAPP.BLL;
using QMAPP.Entity;
using QMFrameWork.Data;
using QMAPP.FJC.Entity.Basic;
using QMAPP.FJC.DAL.Basic;
using QMFrameWork.Log;
using QMAPP.FJC.Entity;
using QMAPP.FJC.BLL.Dict;

namespace QMAPP.FJC.BLL.Basic
{
    public class BomHdrBLL : BaseBLL
    {
        #region 获取列表
        /// <summary>
        /// 获取列表
        /// </summary>
        /// <param name="condition">条件</param>
        /// <param name="page">数据页</param>
        /// <returns>数据页</returns>
        public DataResult<DataPage> GetList(BomHdr condition, DataPage page)
        {
            DataResult<DataPage> result = new DataResult<DataPage>();
            try
            {
                //获取Bom信息列表
                DataPage dataPage = new BomHdrDAL().GetList(condition, page);

                #region 转换有效性、类型显示
                DictManageBLL dictPSBll = new DictManageBLL(DictKind.USINGSTATE);
                List<BomHdr> bomhdrInfoList = dataPage.Result as List<BomHdr>;
                foreach (BomHdr b in bomhdrInfoList)
                {
                    b.DEL_FLG = dictPSBll.GetDictValue(b.DEL_FLG);
                    b.NODE_TYPE = dictPSBll.GetDictValue(b.NODE_TYPE);
                }
                #endregion


                result.Result = dataPage;
            }
            catch (Exception ex)
            {
                LogManager.LogHelper.Error(new LogInfo()
                {
                    ErrorInfo = ex,
                    Tag = ex.StackTrace,
                    Info = "Bom信息维护逻辑层-获取列表!"
                });
                result.IsSuccess = false;
                result.Msg = Resource.SystemException;
                return result;
            }
            result.IsSuccess = true;
            return result;
        }
        #endregion

        #region 信息是否重复
        /// <summary>
        /// 判断编号是否存在
        /// </summary>
        /// <param name="info"></param>
        /// <returns>true:已存在;fasel:不存在。</returns>
        public bool ExistsBomHdr(BomHdr model)
        {
            try
            {
                return new BomHdrDAL().ExistsBomHdr(model);
            }
            catch (Exception ex)
            {
                throw ex;
            }
        }
        #endregion

        #region 插入信息
        /// <summary>
        /// 插入信息(单表)
        /// </summary>
        /// <param name="">信息</param>
        /// <returns>插入行数</returns>
        public DataResult<int> Insert(BomHdr model)
        {
            DataResult<int> result = new DataResult<int>();
            //基本信息
            model.PID = Guid.NewGuid().ToString();
            model.FLAGDEL = "0";
            model.CREATEUSR = this.LoginUser.UserID;
            model.CREATEDATE = DateTime.Now;
            model.UPDATEUSR = model.CREATEUSR;
            model.UPDATEDATE = model.CREATEDATE;
            MaterielDAL cmdDAL = new MaterielDAL();
            try
            {
                if (ExistsBomHdr(model) == true)
                {
                    result.IsSuccess = false;
                    result.Msg = Resource.BomHdrCodeIsHave;
                    return result;
                }
                result.Result = new BomHdrDAL().Insert(model);
            }
            catch (Exception ex)
            {
                LogManager.LogHelper.Error(new LogInfo()
                {
                    ErrorInfo = ex,
                    Tag = ex.StackTrace,
                    Info = "Bom信息维护逻辑层-插入信息!"
                });
                result.IsSuccess = false;
                result.Msg = Resource.SystemException;
                return result;
            }
            result.IsSuccess = true;
            return result;
        }
        #endregion

        #region 删除
        /// <summary>
        /// 删除信息
        /// </summary>
        /// <param name=""></param>
        /// <returns>删除个数</returns>
        public DataResult<int> Delete(string strs)
        {
            DataResult<int> result = new DataResult<int>();
            BomHdrDAL BomHdrDal = new BomHdrDAL();
            string[] list = strs.Split(":".ToCharArray());
            try
            {
                using (IDataSession session = AppDataFactory.CreateMainSession())
                {
                    try
                    {
                        session.OpenTs();
                        BomHdrDal.BaseSession = session;
                        foreach (string str in list)
                        {
                            //删除Bom
                            result.Result += BomHdrDal.DeleteBomHdr(new BomHdr { PID = str });
                            //删除Bom明细
                            //result.Result += BomHdrDal.DeleteBomDetail(new BomDetail() { BOM_HDR_PID = str });
                        }
                        session.CommitTs();
                    }
                    catch (Exception e)
                    {
                        session.RollbackTs();
                        throw e;
                    }
                }
            }
            catch (Exception ex)
            {
                LogManager.LogHelper.Error(new LogInfo()
                {
                    ErrorInfo = ex,
                    Tag = ex.StackTrace,
                    Info = "Bom信息维护逻辑层-删除!"
                });
                result.IsSuccess = false;
                result.Msg = Resource.SystemException;
                return result;
            }
            result.IsSuccess = true;
            return result;
        }

        /// <summary>
        /// 删除信息
        /// </summary>
        /// <param name="">信息</param>
        /// <returns>删除个数</returns>
        public int DeleteBomHdr(BomHdr model)
        {
            int count = 0;
            try
            {
                count = new BomHdrDAL().DeleteBomHdr(model);
                return count;
            }
            catch (Exception ex)
            {
                throw ex;
            }
        }
        #endregion

        #region 获取BOM下拉列表
        /// <summary>
        /// 获取BOM下拉列表
        /// </summary>
        /// <param name="condition">条件</param>
        /// <returns>数据页</returns>
        public DataResult<List<BomHdr>> GetBomHdrList(BomHdr condition)
        {
            DataResult<List<BomHdr>> result = new DataResult<List<BomHdr>>();
            try
            {
                result.Result = new BomHdrDAL().GetBomHdrList(condition);
                result.IsSuccess = true;
                return result;
            }
            catch (Exception ex)
            {
                LogManager.LogHelper.Error(new LogInfo()
                {
                    ErrorInfo = ex,
                    Tag = ex.StackTrace,
                    Info = "BOM信息逻辑层-获取BOM下拉列表"
                });
                result.IsSuccess = false;
                result.Msg = Resource.SystemException;
                return result;
            }
        }
        #endregion

        #region 获取BOM明细(分页)
        /// <summary>
        /// 获取BOM明细(分页)
        /// </summary>
        /// <param name="condition">条件</param>
        /// <param name="page">数据页</param>
        /// <returns>数据页</returns>
        public DataResult<DataPage> BomHdrConfigList(BomDetail condition, DataPage page)
        {
            DataResult<DataPage> result = new DataResult<DataPage>();
            try
            {
                //获取Bom信息列表
                DataPage dataPage = new BomHdrDAL().BomHdrConfigList(condition, page);

                #region 转换有效性、类型、计量单位显示
                List<BomDetail> bomdetailInfoList = dataPage.Result as List<BomDetail>;
                foreach (BomDetail bd in bomdetailInfoList)
                {
                    if (bd.IS_ASSY == "0")
                    { bd.IS_ASSY = "是"; }
                    if (bd.IS_ASSY == "1")
                    { bd.IS_ASSY = "否"; }
                }
                #endregion
                result.Result = dataPage;
            }
            catch (Exception ex)
            {
                LogManager.LogHelper.Error(new LogInfo()
                {
                    ErrorInfo = ex,
                    Tag = ex.StackTrace,
                    Info = "Bom信息维护逻辑层-获取BOM明细列表!"
                });
                result.IsSuccess = false;
                result.Msg = Resource.SystemException;
                return result;
            }
            result.IsSuccess = true;
            return result;
        }

        #endregion

        #region 获取BOM明细列表
        /// <summary>
        /// 获取BOM明细列表
        /// </summary>
        /// <param name="condition">条件</param>
        /// <param name="page">数据页</param>
        /// <returns>数据页</returns>
        public DataResult<List<BomDetail>> BomDetailList(BomDetail condition)
        {
            DataResult<List<BomDetail>> result = new DataResult<List<BomDetail>>();
            List<BomDetail> list = new List<BomDetail>();
            try
            {
                //获取Bom明细列表
                list = new BomHdrDAL().BomDetailList(condition);

                result.Result = list;
            }
            catch (Exception ex)
            {
                LogManager.LogHelper.Error(new LogInfo()
                {
                    ErrorInfo = ex,
                    Tag = ex.StackTrace,
                    Info = "Bom信息维护逻辑层-获取BOM明细列表!"
                });
                result.IsSuccess = false;
                result.Msg = Resource.SystemException;
                return result;
            }
            result.IsSuccess = true;
            return result;
        }

        #endregion

        #region 配置Bom明细
        /// <summary>
        /// Bom明细保存
        /// </summary>
        /// <param name="model">Bom明细信息</param>
        /// <returns></returns>
        public DataResult<int> BomHdrConfigSave(BomDetail model)
        {
            DataResult<int> result = new DataResult<int>();
            BomHdrDAL bomGroupDal = new BomHdrDAL();
            List<BomDetail> listBomDetail = new List<BomDetail>();
            //Bom明细信息

            model.PID = Guid.NewGuid().ToString();
            model.CREATEUSR = this.LoginUser.UserID;
            model.CREATEDATE = DateTime.Now;
            model.UPDATEUSR = model.CREATEUSR;
            model.UPDATEDATE = model.CREATEDATE;
            try
            {
                #region 校验
                ////获取Bom明细列表
                //listBomDetail = bomGroupDal.BomDetailList(model);

                //if (string.IsNullOrEmpty(model.PARENTID))
                //{
                //    List<BomDetail> listParent = listBomDetail.FindAll(o => !string.IsNullOrEmpty(model.PRODUCTINFOID) && string.IsNullOrEmpty(model.PARENTID));
                //    if (listParent.Count >= 1)
                //    {
                //        result.Msg = "只能添加一个一级零件!";
                //        result.IsSuccess = false;
                //        return result;
                //    }
                //}
                //if (!string.IsNullOrEmpty(model.PARENTID))
                //{
                //    List<BomDetail> listParent = listBomDetail.FindAll(o => o.PRODUCTINFOID == model.PARENTID);
                //    if (listParent.Count <= 0)
                //    {
                //        result.Msg = "该父零件号不存在!";
                //        result.IsSuccess = false;
                //        return result;
                //    }
                //}
                //List<BomDetail> listMat = listBomDetail.FindAll(o => o.PRODUCTINFOID == model.PRODUCTINFOID || o.PARENTID == model.PRODUCTINFOID);
                //if (listMat.Count > 0)
                //{
                //    result.Msg = "该零件号已存在!";
                //    result.IsSuccess = false;
                //    return result;
                //}
                #endregion
                result.Result = new BomHdrDAL().InsertBomDetail(model);
            }
            catch (Exception ex)
            {
                LogManager.LogHelper.Error(new LogInfo()
                {
                    ErrorInfo = ex,
                    Tag = ex.StackTrace,
                    Info = "Bom信息维护逻辑层-Bom明细保存!"
                });
                result.IsSuccess = false;
                result.Msg = Resource.SystemException;
                return result;
            }
            result.IsSuccess = true;
            return result;
        }
        #endregion

        #region 删除Bom明细
        /// <summary>
        /// 删除Bom明细
        /// </summary>
        /// <param name="">信息</param>
        /// <returns>删除个数</returns>
        public DataResult<int> DeleteBomConfig(string str)
        {
            BomHdrDAL bomGroupDal = new BomHdrDAL();
            List<BomDetail> listBomDetail = new List<BomDetail>();
            BomDetail entity = new BomDetail();
            DataResult<int> result = new DataResult<int>();
            try
            {
                //#region 校验先删除最低层级明细
                ////获取BOM明细
                //entity = bomGroupDal.GetBomDetail(new BomDetail() { PID = str });
                //int bomlayer = entity.BOMMARK.Length / 2;//bom明细层级
                ////获取Bom明细列表
                //listBomDetail = bomGroupDal.BomDetailList(new BomDetail() { BOM_HDR_PID = entity.BOM_HDR_PID });
                ////如果父零件存在,查询该父零件号下级的零件号的数量
                //List<string> parentMarkList = new List<string>();
                //for (int i = 0; i <= entity.BOMMARK.Length - 1; i += 2)
                //{
                //    parentMarkList.Add(entity.BOMMARK.Substring(i, 2));
                //}
                //int index = parentMarkList.FindIndex(o => o.Equals("00"));
                //if (index != -1)
                //{
                //    string startStr = entity.BOMMARK.Substring(0, index * 2);
                //    var startMarklist = from item in listBomDetail
                //                        where item.BOMMARK.StartsWith(startStr)
                //                        && item.BOMMARK.Length == bomlayer * 2
                //                        select new { bommark = item.BOMMARK };

                //    if (startMarklist.Count() > 1)
                //    {
                //        result.Msg = "请先删除最低层级明细!";
                //        result.IsSuccess = false;
                //        return result;
                //    }
                //}
                //#endregion
                using (IDataSession session = AppDataFactory.CreateMainSession())
                {
                    try
                    {
                        session.OpenTs();
                        bomGroupDal.BaseSession = session;
                        //删除Bom明细
                        result.Result += bomGroupDal.DeleteBomDetail(new BomDetail() { PID = str });
                        //删除Bom解析数据
                        //result.Result += bomGroupDal.DeleteBomAnalyze(new BomAnalyze() { BOMDETAILPID = str });
                        session.CommitTs();
                    }
                    catch (Exception ex)
                    {
                        session.RollbackTs();
                        throw ex;
                    }
                }
            }
            catch (Exception ex)
            {
                LogManager.LogHelper.Error(new LogInfo()
                {
                    ErrorInfo = ex,
                    Tag = ex.StackTrace,
                    Info = "Bom信息维护逻辑层-删除Bom明细!"
                });
                result.IsSuccess = false;
                result.Msg = Resource.SystemException;
                return result;
            }
            result.IsSuccess = true;
            return result;
        }

        /// <summary>
        /// 删除信息
        /// </summary>
        /// <param name="">信息</param>
        /// <returns>删除个数</returns>
        public int DeleteBomDetail(BomDetail model)
        {
            int count = 0;
            try
            {
                count = new BomHdrDAL().DeleteBomDetail(model);
                return count;
            }
            catch (Exception ex)
            {
                throw ex;
            }
        }
        #endregion

    }
}