/// <summary>
        /// 添加设备控制指令
        /// </summary>
        /// <param name="deviceSerialnum">设备编码</param>
        /// <param name="command">指令</param>
        /// <returns></returns>
        public bool AddControlCommand(string deviceSerialnum, string command)
        {
            var result = false;

            if (string.IsNullOrWhiteSpace(deviceSerialnum))
            {
                throw new ArgumentNullException("deviceSerialnum");
            }
            if (string.IsNullOrWhiteSpace(command))
            {
                throw new ArgumentNullException("command");
            }
            try
            {
                var cc = new DeviceControlCommand {
                    DeviceSerialnum = deviceSerialnum,
                    CreateTime      = DateTime.Now,
                    Command         = command
                };
                cc.Save();
                result = true;
            }
            catch (Exception ex)
            {
                //result = false;
                // throw;
            }
            return(result);
        }
Пример #2
0
        /// <summary>
        /// 获取控制指令
        /// </summary>
        private List <DeviceControlCommand> GetControlCommand()
        {
            var controlDevices = ControlDeviceUnit.FindAllWithCache().ToList();

            if (!controlDevices.Any() && controlDevices == null)
            {
                return(null);
            }
            //查询出Code1不为空的基地
            var farms       = Farm.FindAll().ToList().Where(f => !f.Code1.IsNullOrWhiteSpace());
            var devCommands = new List <DeviceControlCommand>();
            //校验所有编码
            var enumerable = farms as Farm[] ?? farms.ToArray();

            if (!CheckCode(enumerable))
            {
                return(null);
            }
            enumerable.ToList().ForEach(farm =>
            {
                //本地数据库中的设施
                var facilitysInDb = farm.Facilitys;
                ////从接口获存在的设施
                //var facs_platform = GetPlatformFacilitys(farm);
                if (facilitysInDb.Count > 0)
                {
                    facilitysInDb.ToList().ForEach(fInDb =>
                    {
                        var entity = AwEntityHelper.GetEntity(farm.Code1);
#if DEBUG
                        var sw           = new Stopwatch();
                        var accessResult = false;
                        sw.Start();
#endif
                        var cmds = _facilityApi.GetControlCommand(entity, _transport, fInDb.Code1);

                        var controlCmds = cmds as IList <ControlCmd> ?? cmds.ToList();
                        if (controlCmds.Any())
                        {
                            accessResult = true;
                            controlCmds.ToList().ForEach(cmdDb =>
                            {
                                var devCommand = new DeviceControlCommand
                                {
                                    Code1                     = cmdDb.Serialnum,
                                    Command                   = cmdDb.Command.ToString(),
                                    ControlContinueTime       = cmdDb.ContinueTime,
                                    CreateTime                = DateTime.Now,
                                    ControlDeviceUnitGroupNum =
                                        FacilityControlDeviceUnit.FindAllByCode1(cmdDb.DeviceCode)[0]
                                        .ControlDeviceUnitGroupNum
                                };
                                devCommand.Save(); //保存到本地数据库
                                devCommands.Add(devCommand);
                            });
                        }
                        else
                        {
                            accessResult = false;
                            //Debugger.Break();
                        }
                        LogHelper.Debug("{0}获取控制指令{1}条", fInDb.Name, controlCmds.Count());
#if DEBUG
                        sw.Stop();
                        var apiAccesslog = new ApiAccessLog
                        {
                            ApiName    = "获取控制指令",
                            Result     = accessResult,
                            CreateTime = DateTime.Now,
                            CostTime   = Convert.ToInt32(sw.ElapsedMilliseconds)
                        };
                        apiAccesslog.Save();
                        LogHelper.Debug("获取控制指令花费的时间:{0}", sw.ElapsedMilliseconds.ToString());
#endif
                    });
                }
            });
            if (!devCommands.Any())
            {
                return(devCommands);
            }
            var sw1 = new Stopwatch();
            sw1.Start();
            devCommands.ForEach(cmd =>
            {
                LogHelper.Debug("正在执行控制指令");
                Control(
                    FacilityControlDeviceUnit.FindAllByControlDeviceUnitGroupNum(cmd.ControlDeviceUnitGroupNum)[0]
                    .ControlDeviceUnitGroupNum, Convert.ToInt32(cmd.Command));
                Thread.Sleep(50);
            });
            sw1.Stop();
            LogHelper.Debug("执行所有控制指令花费的时间:{0}", sw1.ElapsedMilliseconds.ToString());
            return(devCommands);
        }