/// <summary>
        /// 下发所有网络模块时间同步命令接口
        /// </summary>
        /// <returns></returns>
        public BasicResponse SetNetworkModuleSyncTime()
        {
            BasicResponse result = new BasicResponse();
            NetworkModuleCacheGetAllRequest networkModuleCacheRequest = new NetworkModuleCacheGetAllRequest();
            var resultGet = _NetworkModuleCacheService.GetAllNetworkModuleCache(networkModuleCacheRequest);
            List <Jc_MacInfo> macItems = resultGet.Data;

            if (macItems != null && macItems.Any())
            {
                foreach (Jc_MacInfo item in macItems)
                {
                    item.TimeSynchronization      = true;
                    item.TimeSynchronizationcount = 3;//默认发3次网络模块时间同步命令
                    //更新指定字段到缓存中
                    Dictionary <string, object> paramater = new Dictionary <string, object>();
                    paramater.Add("TimeSynchronization", item.TimeSynchronization);
                    paramater.Add("TimeSynchronizationcount", item.TimeSynchronizationcount);
                    NetworkModuleCacheUpdatePropertiesRequest networkModuleCacheUpdatePropertiesRequest = new NetworkModuleCacheUpdatePropertiesRequest();
                    networkModuleCacheUpdatePropertiesRequest.Mac         = item.MAC;
                    networkModuleCacheUpdatePropertiesRequest.UpdateItems = paramater;
                    _NetworkModuleCacheService.UpdateNetworkInfo(networkModuleCacheUpdatePropertiesRequest);
                }
            }
            return(result);
        }
        public BasicResponse <List <Jc_MacInfo> > GetAllNetworkModuleCache(NetworkModuleCacheGetAllRequest networkModuleCacheRequest)
        {
            var networkModuleCache         = NetworkModuleCache.NetworModuleCahceInstance.Query();
            var networkModuleCacheResponse = new BasicResponse <List <Jc_MacInfo> >();

            networkModuleCacheResponse.Data = networkModuleCache;
            return(networkModuleCacheResponse);
        }
        /// <summary>
        /// 获取所有网格模块缓存
        /// </summary>
        /// <returns></returns>
        public BasicResponse <List <Jc_MacInfo> > GetAllNetworkModuleCache()
        {
            BasicResponse <List <Jc_MacInfo> > Result = new BasicResponse <List <Jc_MacInfo> >();
            NetworkModuleCacheGetAllRequest    networkModuleCacheRequest = new NetworkModuleCacheGetAllRequest();
            var result = _NetworkModuleCacheService.GetAllNetworkModuleCache(networkModuleCacheRequest);

            Result.Data = result.Data;
            return(Result);
        }
        /// <summary>
        /// 批量添加
        /// </summary>
        /// <param name="NetworkModuleRequest"></param>
        /// <returns></returns>
        public BasicResponse AddNetworkModules(NetworkModulesRequest NetworkModuleRequest)
        {
            BasicResponse     Result = new BasicResponse();
            List <Jc_MacInfo> items  = NetworkModuleRequest.NetworkModulesInfo;
            List <Jc_MacInfo> NetworkModuleCaches = new List <Jc_MacInfo>();
            Jc_MacInfo        olditem             = null;

            NetworkModuleCacheGetAllRequest NetworkModuleCacheRequest = new NetworkModuleCacheGetAllRequest();
            var result = _NetworkModuleCacheService.GetAllNetworkModuleCache(NetworkModuleCacheRequest);

            NetworkModuleCaches = result.Data;

            foreach (Jc_MacInfo item in items)
            {
                olditem = NetworkModuleCaches.Find(a => a.MAC == item.MAC);
                //增加重复判断
                if (olditem != null)
                { //缓存中存在此测点
                    Result.Code    = 1;
                    Result.Message = "当前添加列表中的数据在数据库中已经存在!";
                    return(Result);
                }
            }

            //向网关同步数据
            List <Jc_MacInfo> SendItemList = items;
            var resultSync = SynchronousDataToGateway(SendItemList);

            if (!resultSync)
            {
                Result.Code    = 1;
                Result.Message = "向网关同步数据失败!";
                return(Result);
            }

            TransactionsManager.BeginTransaction(() =>
            {
                foreach (Jc_MacInfo item in items)
                {
                    item.IsMemoryData = false;
                    //保存数据库
                    var _jc_Mac = ObjectConverter.Copy <Jc_MacInfo, Jc_MacModel>(item);
                    //保存数据库不存连接号  20170713
                    _jc_Mac.NetID    = 0;
                    var resultjc_Def = _Repository.AddNetworkModule(_jc_Mac);
                }


                //添加到缓存
                NetworkModuleCacheBatchAddRequest BatchAddNetworkModuleCacheRequest = new NetworkModuleCacheBatchAddRequest();
                BatchAddNetworkModuleCacheRequest.NetworkModuleInfos = items;
                _NetworkModuleCacheService.BacthAddNetworkModuleCache(BatchAddNetworkModuleCacheRequest);
            });

            return(Result);
        }
        /// <summary>
        /// 获取所有交换机的安装位置
        /// </summary>
        /// <returns></returns>
        public BasicResponse <List <string> > GetSwitchsPosition()
        {
            BasicResponse <List <string> > Result = new BasicResponse <List <string> >();
            List <string> SwitchsPosition         = new List <string>();

            NetworkModuleCacheGetAllRequest networkModuleCacheRequest = new NetworkModuleCacheGetAllRequest();
            var jc_MacModelLists = _NetworkModuleCacheService.GetAllNetworkModuleCache(networkModuleCacheRequest);

            foreach (Jc_MacInfo item in jc_MacModelLists.Data)
            {
                if (!SwitchsPosition.Contains(item.Wz) && long.Parse(item.Wzid) >= 0)
                {
                    SwitchsPosition.Add(item.Wz);
                }
            }
            Result.Data = SwitchsPosition;
            return(Result);
        }
        /// <summary>
        /// 在缓存中获取所有交换机
        /// </summary>
        /// <returns></returns>
        public BasicResponse <List <Jc_MacInfo> > GetSwitchInformationInCache()
        {
            var response = new BasicResponse <List <Jc_MacInfo> >();

            try
            {
                var networkModuleCacheGetAllRequest  = new NetworkModuleCacheGetAllRequest();
                var networkModuleCacheGetAllResponse = networkModuleCacheService.GetAllNetworkModuleCache(networkModuleCacheGetAllRequest);
                if (networkModuleCacheGetAllResponse.Data != null)
                {
                    response.Data = networkModuleCacheGetAllResponse.Data;
                }
            }
            catch (Exception ex)
            {
                response.Code    = -100;
                response.Message = ex.Message;
                this.ThrowException("GetSwitchInformationInCache-在缓存中获取所有交换机", ex);;
            }

            return(response);
        }
        /// <summary>
        /// 网络模块保存巡检
        /// </summary>
        /// <returns></returns>
        public BasicResponse NetworkModuleSaveData()
        {
            BasicResponse Result = new BasicResponse();

            NetworkModuleCacheGetAllRequest networkModuleCacheRequest = new NetworkModuleCacheGetAllRequest();
            var resultAllNetwork = _NetworkModuleCacheService.GetAllNetworkModuleCache(networkModuleCacheRequest);
            List <Jc_MacInfo> ALLNetworkModule = resultAllNetwork.Data;

            foreach (Jc_MacInfo NetworkModule in ALLNetworkModule)
            {
                if (NetworkModule.IsMemoryData)
                {
                    if (NetworkModule.Type == 0 && NetworkModule.Wzid == "-1" && !NetworkModuleIsDefinePoint(NetworkModule.Bz1))//处理未定义网络模块,只有绑定了分站的网络模块才保留,否则从缓存中清除 20170331
                    {
                        NetworkModuleCacheDeleteRequest DeleteNetworkModuleCacheRequest = new NetworkModuleCacheDeleteRequest();
                        DeleteNetworkModuleCacheRequest.NetworkModuleInfo = NetworkModule;
                        _NetworkModuleCacheService.DeleteNetworkModuleCache(DeleteNetworkModuleCacheRequest);
                    }
                }
            }

            return(Result);
        }
        /// <summary>
        /// 搜索网络模块,并更新缓存信息
        /// </summary>
        /// <returns></returns>
        public BasicResponse <List <Jc_MacInfo> > SearchALLNetworkModuleAndAddCache(SearchNetworkModuleRequest request)
        {
            BasicResponse <List <Jc_MacInfo> > Result = new BasicResponse <List <Jc_MacInfo> >();

            //查找现有网络模块
            NetworkModuleCacheGetAllRequest networkModuleCacheRequest = new NetworkModuleCacheGetAllRequest();
            var resultAllNetwork = _NetworkModuleCacheService.GetAllNetworkModuleCache(networkModuleCacheRequest);
            List <Jc_MacInfo> ALLNetworkModule = resultAllNetwork.Data;

            if (request.StationFind != 2)//=2表示全部搜索
            {
                #region 搜索交换机/分站
                Sys.DataCollection.Common.Protocols.SearchNetworkDeviceRequest searchNetworkDeviceRequest = new SearchNetworkDeviceRequest();
                MasProtocol masProtocol = new MasProtocol(SystemType.Security, DirectionType.Down, ProtocolType.SearchNetworkDeviceRequest);
                masProtocol.Protocol    = searchNetworkDeviceRequest;
                masProtocol.StationFind = request.StationFind;

                //调用RPC发送搜索网络模块命令,并接收回传的参数
                var result = RpcService.Send <SearchNetworkDeviceResponse>(masProtocol, RequestType.DeviceUdpRequest);//todo RequestType类型增加3

                List <Sys.DataCollection.Common.Protocols.NetworkDeviceItem> NetworkDeviceItems = null;
                if (result != null)
                {
                    NetworkDeviceItems = result.NetworkDeviceItems;
                }
                if (NetworkDeviceItems == null)
                {
                    Result.Code    = 1;
                    Result.Message = "未搜索到设备!";
                    return(Result);
                }
                //NetworkDeviceItems = result.NetworkDeviceItems;
                foreach (Sys.DataCollection.Common.Protocols.NetworkDeviceItem Network in NetworkDeviceItems)
                {
                    if (ALLNetworkModule.FindAll(a => a.MAC == Network.Mac).Count == 0)//缓存不存在此对象,则添加到缓存中
                    {
                        Jc_MacInfo NetworkModule = new Jc_MacInfo();
                        NetworkModule.ID     = IdHelper.CreateLongId().ToString();
                        NetworkModule.MAC    = Network.Mac; //网络模块MAC
                        NetworkModule.IP     = Network.Ip;  //网络模块IP
                        NetworkModule.Type   = 0;
                        NetworkModule.Istmcs = 0;
                        NetworkModule.Wzid   = "-1";                             // 20170331
                        NetworkModule.Wz     = null;
                        NetworkModule.Bz2    = Network.SwitchMac;                //网络模块所属交换机MAC
                        NetworkModule.Bz3    = Network.AddressNumber.ToString(); //网络模块在交换机中的地址编码

                        NetworkModule.SubMask   = Network.SubMask;
                        NetworkModule.GatewayIp = Network.GatewayIp;

                        if (Network.DeviceType == 3)//表示分站带网络模块
                        {
                            NetworkModule.Bz5              = "1";
                            NetworkModule.Upflag           = "0";
                            NetworkModule.BindStatinNumber = Network.StationAddress;
                        }
                        else
                        {
                            NetworkModule.Bz5    = "6";//默认支持6个分站
                            NetworkModule.Upflag = "1";
                        }
                        NetworkModule.IsMemoryData = true;//搜索的时候把内存数据标记置为true   20170415
                        NetworkModule.InfoState    = InfoState.AddNew;
                        //调用更新到缓存中
                        NetworkModuleCacheAddRequest AddNetworkModuleCacheRequest = new NetworkModuleCacheAddRequest();
                        AddNetworkModuleCacheRequest.NetworkModuleInfo = NetworkModule;
                        _NetworkModuleCacheService.AddNetworkModuleCache(AddNetworkModuleCacheRequest);
                    }
                    else//第一次搜索的时候,可能会获取不到IP,增加处理  20170627
                    {
                        Jc_MacInfo NetworkModule = ALLNetworkModule.Find(a => a.MAC == Network.Mac);
                        NetworkModule.MAC = Network.Mac;                      //网络模块MAC
                        NetworkModule.IP  = Network.Ip;                       //网络模块IP
                        NetworkModule.Bz2 = Network.SwitchMac;                //网络模块所属交换机MAC
                        NetworkModule.Bz3 = Network.AddressNumber.ToString(); //网络模块在交换机中的地址编码

                        NetworkModule.SubMask   = Network.SubMask;
                        NetworkModule.GatewayIp = Network.GatewayIp;

                        if (Network.DeviceType == 3)//表示分站带网络模块
                        {
                            NetworkModule.Bz5              = "1";
                            NetworkModule.Upflag           = "0";
                            NetworkModule.BindStatinNumber = Network.StationAddress;
                        }
                        else
                        {
                            NetworkModule.Bz5    = "6";//默认支持6个分站
                            NetworkModule.Upflag = "1";
                        }

                        //调用更新到缓存中
                        NetworkModuleCacheUpdateRequest updateNetworkModuleCacheRequest = new NetworkModuleCacheUpdateRequest();
                        updateNetworkModuleCacheRequest.NetworkModuleInfo = NetworkModule;
                        _NetworkModuleCacheService.UpdateNetworkModuleCahce(updateNetworkModuleCacheRequest);
                    }
                }
                #endregion
            }
            else
            {
                #region 搜索交换机+分站
                Sys.DataCollection.Common.Protocols.SearchNetworkDeviceRequest searchNetworkDeviceRequest = new SearchNetworkDeviceRequest();
                MasProtocol masProtocol = new MasProtocol(SystemType.Security, DirectionType.Down, ProtocolType.SearchNetworkDeviceRequest);
                masProtocol.Protocol    = searchNetworkDeviceRequest;
                masProtocol.StationFind = 0;
                //调用RPC发送搜索网络模块命令,并接收回传的参数
                var result = RpcService.Send <SearchNetworkDeviceResponse>(masProtocol, RequestType.DeviceUdpRequest);//todo RequestType类型增加3
                List <NetworkDeviceItem> NetworkDeviceItems = new List <NetworkDeviceItem>();
                if (result != null)
                {
                    NetworkDeviceItems = result.NetworkDeviceItems;
                }

                Sys.DataCollection.Common.Protocols.SearchNetworkDeviceRequest searchNetworkDeviceRequest1 = new SearchNetworkDeviceRequest();
                MasProtocol masProtocol1 = new MasProtocol(SystemType.Security, DirectionType.Down, ProtocolType.SearchNetworkDeviceRequest);
                masProtocol1.Protocol    = searchNetworkDeviceRequest1;
                masProtocol1.StationFind = 1;
                //调用RPC发送搜索网络模块命令,并接收回传的参数
                var result1 = RpcService.Send <SearchNetworkDeviceResponse>(masProtocol, RequestType.DeviceUdpRequest);//todo RequestType类型增加3
                if (result1 != null)
                {
                    NetworkDeviceItems.AddRange(result1.NetworkDeviceItems);
                }

                if (NetworkDeviceItems.Count < 1)
                {
                    Result.Code    = 1;
                    Result.Message = "未搜索到设备!";
                    return(Result);
                }
                //NetworkDeviceItems = result.NetworkDeviceItems;
                foreach (Sys.DataCollection.Common.Protocols.NetworkDeviceItem Network in NetworkDeviceItems)
                {
                    if (ALLNetworkModule.FindAll(a => a.MAC == Network.Mac).Count == 0)//缓存不存在此对象,则添加到缓存中
                    {
                        Jc_MacInfo NetworkModule = new Jc_MacInfo();
                        NetworkModule.ID     = IdHelper.CreateLongId().ToString();
                        NetworkModule.MAC    = Network.Mac; //网络模块MAC
                        NetworkModule.IP     = Network.Ip;  //网络模块IP
                        NetworkModule.Type   = 0;
                        NetworkModule.Istmcs = 0;
                        NetworkModule.Wzid   = "-1";                             // 20170331
                        NetworkModule.Wz     = null;
                        NetworkModule.Bz2    = Network.SwitchMac;                //网络模块所属交换机MAC
                        NetworkModule.Bz3    = Network.AddressNumber.ToString(); //网络模块在交换机中的地址编码

                        NetworkModule.SubMask   = Network.SubMask;
                        NetworkModule.GatewayIp = Network.GatewayIp;

                        if (Network.DeviceType == 3)//表示分站带网络模块
                        {
                            NetworkModule.Bz5              = "1";
                            NetworkModule.Upflag           = "0";
                            NetworkModule.BindStatinNumber = Network.StationAddress;
                        }
                        else
                        {
                            NetworkModule.Bz5    = "6";//默认支持6个分站
                            NetworkModule.Upflag = "1";
                        }
                        NetworkModule.IsMemoryData = true;//搜索的时候把内存数据标记置为true   20170415
                        NetworkModule.InfoState    = InfoState.AddNew;
                        //调用更新到缓存中
                        NetworkModuleCacheAddRequest AddNetworkModuleCacheRequest = new NetworkModuleCacheAddRequest();
                        AddNetworkModuleCacheRequest.NetworkModuleInfo = NetworkModule;
                        _NetworkModuleCacheService.AddNetworkModuleCache(AddNetworkModuleCacheRequest);
                    }
                    else//第一次搜索的时候,可能会获取不到IP,增加处理  20170627
                    {
                        Jc_MacInfo NetworkModule = ALLNetworkModule.Find(a => a.MAC == Network.Mac);
                        NetworkModule.MAC = Network.Mac;                      //网络模块MAC
                        NetworkModule.IP  = Network.Ip;                       //网络模块IP
                        NetworkModule.Bz2 = Network.SwitchMac;                //网络模块所属交换机MAC
                        NetworkModule.Bz3 = Network.AddressNumber.ToString(); //网络模块在交换机中的地址编码

                        NetworkModule.SubMask   = Network.SubMask;
                        NetworkModule.GatewayIp = Network.GatewayIp;

                        if (Network.DeviceType == 3)//表示分站带网络模块
                        {
                            NetworkModule.Bz5              = "1";
                            NetworkModule.Upflag           = "0";
                            NetworkModule.BindStatinNumber = Network.StationAddress;
                        }
                        else
                        {
                            NetworkModule.Bz5    = "6";//默认支持6个分站
                            NetworkModule.Upflag = "1";
                        }

                        //调用更新到缓存中
                        NetworkModuleCacheUpdateRequest updateNetworkModuleCacheRequest = new NetworkModuleCacheUpdateRequest();
                        updateNetworkModuleCacheRequest.NetworkModuleInfo = NetworkModule;
                        _NetworkModuleCacheService.UpdateNetworkModuleCahce(updateNetworkModuleCacheRequest);
                    }
                }
                #endregion
            }

            //查找所有缓存包括后面增加的内容
            NetworkModuleCacheGetAllRequest networkModuleNewCacheRequest = new NetworkModuleCacheGetAllRequest();
            var resultAllNetworkNew = _NetworkModuleCacheService.GetAllNetworkModuleCache(networkModuleNewCacheRequest);
            Result.Data = resultAllNetworkNew.Data;

            return(Result);
        }
        /// <summary>
        /// 批量更新
        /// </summary>
        /// <param name="NetworkModuleRequest"></param>
        /// <returns></returns>
        public BasicResponse UpdateNetworkModules(NetworkModulesRequest NetworkModuleRequest)
        {
            BasicResponse     Result = new BasicResponse();
            List <Jc_MacInfo> items  = NetworkModuleRequest.NetworkModulesInfo;
            List <Jc_MacInfo> NetworkModuleCaches = new List <Jc_MacInfo>();
            Jc_MacInfo        olditem             = null;

            NetworkModuleCacheGetAllRequest NetworkModuleCacheRequest = new NetworkModuleCacheGetAllRequest();
            var result = _NetworkModuleCacheService.GetAllNetworkModuleCache(NetworkModuleCacheRequest);

            NetworkModuleCaches = result.Data;

            foreach (Jc_MacInfo item in items)
            {
                olditem = NetworkModuleCaches.Find(a => a.MAC == item.MAC);
                //增加重复判断
                if (olditem == null)
                { //缓存中存在此测点
                    Result.Code    = 1;
                    Result.Message = "当前更新列表中的数据在数据库中不存在!";
                    return(Result);
                }
                else
                {
                    if (olditem.IsMemoryData)//如果内存中存在数据,则重置添加、修改标记  20170415
                    {
                        if (olditem.InfoState == InfoState.AddNew)
                        {
                            if (item.InfoState == InfoState.Modified)
                            {
                                item.InfoState = InfoState.AddNew;
                            }
                        }
                        if (olditem.InfoState == InfoState.Delete)
                        {
                            if (item.InfoState == InfoState.AddNew)
                            {
                                item.InfoState = InfoState.Modified;
                            }
                        }
                        item.IsMemoryData = false;//置完标记后,将内存数据变成非内存数据标记  20170415
                    }
                }
            }
            //向网关同步数据
            List <Jc_MacInfo> SendItemList = items;
            var resultSync = SynchronousDataToGateway(SendItemList);

            if (!resultSync)
            {
                Result.Code    = 1;
                Result.Message = "向网关同步数据失败!";
                return(Result);
            }
            TransactionsManager.BeginTransaction(() =>
            {
                foreach (Jc_MacInfo item in items)
                {
                    if (item.InfoState == InfoState.AddNew)
                    {
                        //保存数据库
                        var _jc_Mac = ObjectConverter.Copy <Jc_MacInfo, Jc_MacModel>(item);
                        _Repository.AddNetworkModule(_jc_Mac);
                    }
                    else
                    {
                        //保存数据库
                        var _jc_Mac = ObjectConverter.Copy <Jc_MacInfo, Jc_MacModel>(item);
                        _Repository.UpdateNetworkModule(_jc_Mac);
                    }
                    //更新到缓存
                    UpdateNetworkModuleCacheByProperty(item);
                }
            });

            return(Result);
        }