using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using DeiNiu.wms.Data.Model;
using System.Data;
using System.Transactions;
using DeiNiu.Utils;
namespace DeiNiu.wms.Logical
{
    public class lNode : lbase
    {
        Node _obj;
       
        public lNode()
        {
           
            initialize();
        }
        public lNode(int operId):base(operId)
        {
            initialize();
        }
        public Node getNode
        {
            get
            {
                return _obj;
            }
        }
		
		/// 
		/// get all data
		/// 
        public DataSet getAllData()
        {
           return _obj.Query();
        }
        /// 
        /// get all data
        /// 
        public DataSet getAllActiveData()
        {
            return _obj.QueryActived();
        }
		/// 
		/// get a record by id
		/// 
        public void initialize(int id)
		{
            _obj = id != 0 ? new Node(id) : new Node();
		}
        /// 
		/// get a record by id 0
		/// 
        public void initialize()
        {
            initialize(0);
        }
        /// 
        /// get a record by id
        /// 
        public void initialize(DataRow dr)
        {
            _obj =   new Node(dr);
        }
       
        //begin cust db operation, query, excute sql etc.
        public DataSet Query(string goodsName, int rownumStart, int rownumEnd)
        {
            if (rownumEnd > rownumStart && rownumStart > 0)
            {
                _obj.rownumStart = rownumStart;
                _obj.rownumEnd = rownumEnd;
            }
            DataSet ds = string.IsNullOrEmpty(goodsName) ? _obj.Query()  : _obj.QueryByName(goodsName) ;
            return ds;
        //    return string.IsNullOrEmpty(goodsName) ? _obj.Query().Tables[0] : _obj.QueryByName(goodsName).Tables[0];
        }
        public int getCntByName(string name)
        {
            return _obj.getCntByName(name);
        }
       
        private bool valid()
        { 
            return true;
        }
        /// 
        /// query dic that has flag
        /// used for building combox
        /// 
        /// 
        public DataTable QueryByFlags()
        {
            return _obj.QueryByFlags(); 
        }
        public DataTable getDesks()
        { 
            return _obj.QueryByFlags( new int[]{4001,4002}); 
        }
        public bool initialDesk()
        {
            WmsOutDesk desk = new WmsOutDesk();
            DataTable dt = desk.Query().Tables[0];
            foreach (DataRow dr in dt.Rows)
            {
                WmsOutDesk d = new WmsOutDesk(dr);
                d.Delete();
            }
            Node nd = new Node(); 
            dt = nd.QueryByFlag(4001);
            foreach (DataRow dr in dt.Rows)
            {
                try
                {
                    nd = new Node(dr);
                    desk = new WmsOutDesk();
                    desk.color =  Convert.ToInt32(nd.name.Trim());
                    desk.deskName = nd.description;
                    desk.ip = "127.0.0.1";
                    desk.deskType = (int)enumDeskType.复核;
                    desk.Add();
                }
                catch
                {
                    continue;
                }
            }
             
            Dictionary SEEDS_DESK_PORTS = new Dictionary();
            Dictionary SEEDS_DESK_LABEL_START_ID = new Dictionary();
            Dictionary SEEDS_DESK_PICKS_COUNT_MAX = new Dictionary();
            Dictionary SEEDS_DESK_PICKS_COUNT_MIN = new Dictionary();
            dt = nd.QueryByFlag(4004);//标签起始编号
            foreach (DataRow dr in dt.Rows)
            {
                Node n = new Node(dr);
                try
                {
                    SEEDS_DESK_LABEL_START_ID[ Convert.ToInt32(n.name)] =  Convert.ToInt32(n.value);
                }
                catch { }
            }
            dt = nd.QueryByFlag(4005);//播种台分播客户最大数量
            foreach (DataRow dr in dt.Rows)
            {
                Node n = new Node(dr);
                try
                {
                    SEEDS_DESK_PICKS_COUNT_MAX[ Convert.ToInt32(n.name)] =  Convert.ToInt32(n.value);
                }
                catch { }
            }
            dt = nd.QueryByFlag(4007);//播种台分播客户最少数量
            foreach (DataRow dr in dt.Rows)
            {
                Node n = new Node(dr);
                try
                {
                    SEEDS_DESK_PICKS_COUNT_MIN[ Convert.ToInt32(n.name)] =  Convert.ToInt32(n.value);
                }
                catch { }
            }
            dt = nd.QueryByFlag(4003);//播种台端口号
            foreach (DataRow dr in dt.Rows)
            {
                Node n = new Node(dr);
                try
                {
                    SEEDS_DESK_PORTS[ Convert.ToInt32(n.name)] =  Convert.ToInt32(n.value);
                }
                catch { }
            }
             
            dt = nd.QueryByFlag(4002); //播种
            foreach (DataRow dr in dt.Rows)
            {
                try
                {
                    nd = new Node(dr);
                    desk = new WmsOutDesk();
                    desk.color =  Convert.ToInt32(nd.name.Trim());
                    desk.deskName = nd.value;
                    desk.ip = "127.0.0.1";
                    if(SEEDS_DESK_PORTS.ContainsKey( desk.color)){
                       desk.port = SEEDS_DESK_PORTS[desk.color];
                    }
                    if (SEEDS_DESK_PICKS_COUNT_MAX.ContainsKey(desk.color))
                    {
                        desk.seedsCount = SEEDS_DESK_PICKS_COUNT_MAX[desk.color];
                    }
                    if (SEEDS_DESK_LABEL_START_ID.ContainsKey(desk.color))
                    {
                        desk.startLabelId = SEEDS_DESK_LABEL_START_ID[desk.color];
                    }
                    if (SEEDS_DESK_PICKS_COUNT_MIN.ContainsKey(desk.color))
                    {
                        desk.seedsMinCount = SEEDS_DESK_PICKS_COUNT_MIN[desk.color];
                    }
                    desk.deskType = (int)enumDeskType.播种;
                    desk.Add();
                }
                catch
                {
                    continue;
                }
            }
            return true;
        }
    }
}