using MESClassLibrary.BLL.Log;
using MESClassLibrary.EFModel;
using MESClassLibrary.Model;
using System;
using System.Collections.Generic;
using System.Data;
using System.Linq;
using System.Reflection;
using System.Text;
using System.Threading.Tasks;
using MESClassLibrary.DAL.BasicInfo;

namespace MESClassLibrary.BLL.BasicInfo
{
    public class ModelInfoBLL
    {
        BasicBLL<tb_ModelInfo> db = new BasicBLL<tb_ModelInfo>();

        /// <summary>
        /// 新增信息
        /// </summary>
        /// <param name="md"></param>
        /// <returns></returns>
        public bool AddInfo(tb_ModelInfo md)
        {
            try
            {
                var list = db.SearchInfoByKey("ModelNo", md.ModelNo);//判断是否有重复数据
                if (list != null)
                {
                    if (list.Where(p => p.ID != md.ID).Count() > 0)
                    {
                        return false;
                    }

                }

                return db.AddInfo(md);
            }
            catch (Exception ex)
            {
                LogErrBLL.AddInfo(ex.ToString(), MethodBase.GetCurrentMethod());
                return false;
            }

        }
        /// <summary>
        /// 修改信息
        /// </summary>
        /// <param name="md"></param>
        /// <returns></returns>
        public bool UpdateInfo(tb_ModelInfo md)
        {
            try
            {
                var list = db.SearchAllInfo().Where(p => p.ModelNo == md.ModelNo && p.ID != md.ID).ToList();//判断是否有重复数据
                if (list.Count > 0)
                {
                    return false;
                }

                //初始化要更新的字段
                string[] proNames = new string[14];
                proNames[0] = "ModelName";
                proNames[1] = "ModelNo";
                proNames[2] = "PermanentAssetsNo";
                proNames[3] = "Tonnage";
                proNames[4] = "ServiceLife";
                proNames[5] = "Supplier";
                proNames[6] = "PartWeight";
                proNames[7] = "InjectionPeriod";
                proNames[8] = "LocatingRingSize";
                proNames[9] = "OutForm";
                proNames[10] = "ModelWeight";
                proNames[11] = "RunnerForm";
                proNames[12] = "ModelCavityNo";
                proNames[13] = "ModelSize";
 

                //必填字段初始化,如果不需要更新必填字段则设置为空即可,时间类型无需初始化
                //如果没有初始化必填字段,更新会报错
                //md.Des = "";

                return db.UpdateInfo(md, proNames);
            }
            catch (Exception ex)
            {
                LogErrBLL.AddInfo(ex.ToString(), MethodBase.GetCurrentMethod());
                return false;
            }

        }

        /// <summary>
        /// 删除信息
        /// </summary>
        /// <param name="md"></param>
        /// <param name="flag"></param>
        /// <returns></returns>
        public bool DeleteInfo(tb_ModelInfo md)
        {
            try
            {
                return db.DelInfo(md);
            }
            catch (Exception ex)
            {
                LogErrBLL.AddInfo(ex.ToString(), MethodBase.GetCurrentMethod());
                return false;
            }

        }

        /// <summary>
        /// 查询全部信息分页
        /// </summary>
        /// <returns></returns>
        public string SearchInfoAll(string page, string pagesize, string ModelNo)
        {
            try
            {
                string jsonStr = "[]";
                int total = 0;//总行数

                List<tb_ModelInfo> list = db.SearchAllInfo();

                if (!String.IsNullOrEmpty(ModelNo))
                {
                    list = list.Where(p => p.ModelNo.Contains(ModelNo)).ToList();
                }

                total = list.Count;
                int Skipcount = (Convert.ToInt32(page) - 1) * Convert.ToInt32(pagesize);
                list = list.Skip(Skipcount).Take(Convert.ToInt32(pagesize)).ToList();

                JsonDataModel<tb_ModelInfo> md = new JsonDataModel<tb_ModelInfo>();
                md.total = total.ToString();
                md.rows = list;
                return JSONTools.ScriptSerialize(md);
            }
            catch (Exception ex)
            {
                LogErrBLL.AddInfo(ex.ToString(), MethodBase.GetCurrentMethod());
                return null;
            }

        }

        /// <summary>
        /// 根据ID查询信息
        /// </summary>
        /// <param name="id"></param>
        /// <returns></returns>
        public tb_ModelInfo SearchInfoByID(string id)
        {
            try
            {
                return db.SearchInfoByID(id);
            }
            catch (Exception ex)
            {
                LogErrBLL.AddInfo(ex.ToString(), MethodBase.GetCurrentMethod());
                return null;
            }

        }

        public string GetComboboxData()
        {
            try
            {
                string jsonStr = "[]";
                var list = db.SearchAllInfo().OrderBy(p => p.ModelNo).ToList();//判断是否有重复数据

                List<SelectModel> sl = new List<SelectModel>();

                foreach (var item in list)
                {
                    SelectModel md = new SelectModel();
                    md.textField = item.ModelName;
                    md.valueField = item.ID;
                    sl.Add(md);
                }

                jsonStr = JSONTools.ScriptSerialize(sl);
                return jsonStr;
            }
            catch (Exception)
            {
                return "";
            }


        }

        public DataTable SearchInfo(string ModelNo)
        {
            try
            {
                ModelInfoDAL da=new ModelInfoDAL();
                return da.SearchInfo(ModelNo);
            }
            catch (Exception ex)
            {
                LogErrBLL.AddInfo(ex.ToString(), MethodBase.GetCurrentMethod());
                return null;
            }
        }

        //public DataTable SearchAll()
        //{
        //    ColorDAL da = new ColorDAL();
        //    try
        //    {
        //        return da.SearchInfoAll();
        //    }
        //    catch (Exception ex)
        //    {
        //        LogErrBLL.AddInfo(ex.ToString(), MethodBase.GetCurrentMethod());
        //        return null;
        //    }
        //}
    }
}