/// <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); }
/// <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); }