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

namespace MESClassLibrary.BLL.BasicInfo
{
    public class CheckItemBLL
    {
        BasicBLL<tb_CheckItem> db = new BasicBLL<tb_CheckItem>();
        /// <summary>
        /// 查询信息
        /// </summary>
        /// <returns></returns>
        public string SearchInfo(string page, string pagesize, string CheckContent, string DeviceID)
        {
            try
            {
                string jsonStr = "[]";
                int total = 0;//总行数
                List<tb_CheckItem> list = db.SearchAllInfo();

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

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

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

                    #region 联查
                    List<CheckItemModel> ModelList = new List<CheckItemModel>();
                    BasicBLL<tb_Device> p_db = new BasicBLL<tb_Device>();
                    var p_list = p_db.SearchAllInfo().ToList();
                    foreach (var item in list)
                    {
                        CheckItemModel dm = Tool.Mapper<CheckItemModel, tb_CheckItem>(item);
                        var info = p_list.FirstOrDefault(p => p.DeviceID == item.DeviceID);
                        if (info != null)
                        {
                            dm.DeviceName = info.DeviceName;
                        }
                        ModelList.Add(dm);
                    }
                    #endregion

                    JsonDataModel<CheckItemModel> md = new JsonDataModel<CheckItemModel>();
                    md.total = total.ToString();
                    md.rows = ModelList;
                    jsonStr = JSONTools.ScriptSerialize<JsonDataModel<CheckItemModel>>(md);
                }
                return jsonStr;
            }
            catch (Exception ex)
            {
                LogErrBLL.AddInfo(ex.ToString(), MethodBase.GetCurrentMethod());
                return "";
            }


        }
        /// <summary>
        /// 添加信息
        /// </summary>
        /// <param name="md">生产线模型对象</param>
        /// <returns></returns>
        public bool AddInfo(tb_CheckItem md)
        {
            try
            {
                var list = db.SearchInfoByKey("CheckContent", md.CheckContent);//判断是否有重复数据
                if (list != null)
                {
                    if (list.Where(p => p.DeviceID.Equals(md.DeviceID)).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_CheckItem md)
        {
            try
            {
                var list = db.SearchAllInfo().Where(p => p.CheckContent == md.CheckContent && p.DeviceID == md.DeviceID && p.ID != md.ID).ToList();//判断是否有重复数据
                if (list.Count > 0)
                {
                    return false;
                }

                //初始化要更新的字段
                string[] proNames = new string[6];
                proNames[0] = "DeviceID";
                proNames[1] = "CheckContent";
                proNames[2] = "Standard";
                proNames[3] = "Way";
                proNames[4] = "Cycle";
                proNames[5] = "CheckVersion";

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

                return db.UpdateInfo(md, proNames);
            }
            catch (Exception ex)
            {
                LogErrBLL.AddInfo(ex.ToString(), MethodBase.GetCurrentMethod());
                return false;
            }
        }
        /// 删除生产线信息
        public bool DelInfo(tb_CheckItem md)
        {
            try
            {
                return db.DelInfo(md);
            }
            catch (Exception ex)
            {
                LogErrBLL.AddInfo(ex.ToString(), MethodBase.GetCurrentMethod());
                return false;
            }
        }

        public string GetComboboxData()
        {
            try
            {
                string jsonStr = "[]";
                var list = db.SearchAllInfo().ToList();//判断是否有重复数据
                jsonStr = JSONTools.ScriptSerialize<List<tb_CheckItem>>(list);
                return jsonStr;
            }
            catch (Exception)
            {
                return "";
            }
        }

        public string GetTreeData(string deviceID)
        {
            try
            {
                string jsonStr = "[]";
                BasicBLL<tb_CheckItem> li_db = new BasicBLL<tb_CheckItem>();
                List<TreeModel> trlist = new List<TreeModel>();
                TreeModel tr = new TreeModel();
                tr.id = "-1";
                tr.text = "点检项";
                tr.state = "open";
                var li_list = li_db.SearchAllInfo().Where(p => p.DeviceID.Equals(deviceID)).ToList();
                var queryData = from a in li_list
                                select new ChildTreeModel
                                {
                                    id = a.ID,
                                    text = a.CheckContent
                                };
                List<ChildTreeModel> clist = queryData.ToList();
                if (clist.Count > 0)
                {
                    tr.children = clist;
                    trlist.Add(tr);
                }
                jsonStr = JSONTools.ScriptSerialize<List<TreeModel>>(trlist);
                return jsonStr;
            }
            catch (Exception)
            {
                return "";
            }
        }
    }
}