コード例 #1
0
        /// <summary>
        /// 上传控制结果
        /// </summary>
        /// <param name="controlQueries"></param>
        public static XResponseMessage ProcessControlResults(IEnumerable <ControlResult> controlResults)
        {
            if (!controlResults.Any())
            {
                throw new ArgumentNullException("controlResults");
            }
            try
            {
                controlResults.ForEach(async controlResult =>
                {
                    var devCommand = await _deviceControlCommandService.GetDeviceControlCmdByIdAsny(controlResult.Serialnum);
                    var device     = await _deviceService.GetDeviceByIdAsny(devCommand.DeviceSerialnum);

                    if (devCommand != null)
                    {
                        var devControlLog = new DeviceControlLogDto
                        {
                            Serialnum        = DateTime.Now.ToString("yyyyMMddHHmmssfff") + "-" + devCommand.DeviceSerialnum,
                            DeviceSerialnum  = devCommand.DeviceSerialnum,
                            CommandSerialnum = controlResult.Serialnum,
                            ControlResult    = controlResult.Result,
                            CreateTime       = DateTime.Now,
                            DeviceShowValue  = device.ShowValue,
                            DeviceValue      = device.ProcessedValue,
                            FailReason       = controlResult.FailReason,
                            Remark           = ""
                        };

                        await _deviceControlLogService.AddControlLog(devControlLog);

                        var devControlConmand = await _deviceControlCommandService.GetDeviceControlCmdByIdAsny(devCommand.Serialnum);
                        if (devControlConmand.Status == (int)DeviceCommandTypeEnum.Getted)
                        {
                            if (controlResult.Result)
                            {
                                devControlConmand.Status = (int)DeviceCommandTypeEnum.ActionSuccess;
                                //接收到来自客户端的上传控制指令的时候,控制成功状态变为2
                            }
                            else
                            {
                                devControlConmand.Status = (int)DeviceCommandTypeEnum.ActionError;
                                //接收到来自客户端的上传控制指令的时候,控制失败状态变为3
                            }
                            devControlConmand.UpdateTime = DateTime.Now;
                            await _deviceControlCommandService.UpdateControlCommandAsny(devControlConmand);
                        }
                    }
                });

                return(ResultHelper.CreateMessage("", ErrorType.NoError));
            }
            catch (Exception ex)
            {
                return(ResultHelper.CreateMessage("", ErrorType.InternalError, null, ex));
            }
        }
コード例 #2
0
        public async Task <IEnumerable <ControlCmd> > ProcessAsync(IEnumerable <ControlQuery> controlQueries)
        {
            try
            {
                //var sw = new Stopwatch();
                //sw.Start();
                if (controlQueries == null)
                {
                    throw new ArgumentNullException(nameof(controlQueries));
                }
                var queries    = controlQueries as ControlQuery[] ?? controlQueries.ToArray();
                var enumerable = controlQueries as ControlQuery[] ?? queries.ToArray();
                if (!enumerable.Any())
                {
                    return(null);
                }
                var facCodes       = queries.Select(que => que.FacilityCode);
                var devControlCmds = new List <DeviceControlCommandDto>();
                var codes          = facCodes as string[] ?? facCodes.ToArray();
                if (codes.Any())
                {
                    codes.ToList().ForEach(facCode =>
                    {
                        var devCmd = _controlCommandService.GetDeviceControlCmdsByFacilityId(facCode);
                        if (devCmd != null && devCmd.Count > 0)
                        {
                            devControlCmds.AddRange(devCmd);
                        }
                    });
                }
                //var devControlCmds =
                //    facCodes.SelectMany(facCode => _controlCommandService.GetDeviceControlCmdsByFacilityId(facCode).ToList());
                var cmds = new List <ControlCmd>();
                if (!devControlCmds.Any() || devControlCmds.Count <= 0)
                {
                    return(null);
                }
                devControlCmds.ForEach(async cmdDb =>
                {
                    if (cmdDb.Status != (int)DeviceCommandTypeEnum.Created)
                    {
                        return;
                    }
                    var devControlConmand =
                        await _controlCommandService.GetDeviceControlCmdByIdAsny(cmdDb.Serialnum);
                    devControlConmand.Status = (int)DeviceCommandTypeEnum.Getted;
                    //接收到来自客户端的控制指令请求的时候,状态变为1
                    devControlConmand.UpdateTime = DateTime.Now;
                    var result = _controlCommandService.UpdateControlCommandAsny(devControlConmand);
                    var device = await _deviceService.GetDeviceByIdAsny(cmdDb.DeviceSerialnum);
                    //根据设备编码获取控制设备
                    var cmd = new ControlCmd
                    {
                        Serialnum    = cmdDb.Serialnum,
                        FacilityCode = device.FacilitySerialnum,
                        DeviceCode   = cmdDb.DeviceSerialnum,
                        Command      = Convert.ToInt32(cmdDb.Command),
                        Time         = cmdDb.CreateTime,
                        ContinueTime = cmdDb.ControlContinueTime,
                    };
                    cmds.Add(cmd);
                    LogHelper.Info("[查询控制指令]设备{0}指令:{1}", cmd.DeviceCode, cmd.Command);
                });
                //sw.Stop();
                //ServiceLogger.Current.WriteDebugLog("处理控制指令花费的时间为:{0}", sw.ElapsedMilliseconds);
                return(cmds);
            }
            catch (Exception ex)
            {
                LogHelper.Error("查询控制指令出错,错误内容:{0}", ex.ToString());

                return(null);
            }
        }
コード例 #3
0
        public async Task <bool> ProcessAsync(IEnumerable <ControlResult> controlResults)
        {
            var enumerable = controlResults as ControlResult[] ?? controlResults.ToArray();

            if (!enumerable.Any())
            {
                throw new ArgumentNullException(nameof(controlResults));
            }
            try
            {
                enumerable.ToList().ForEach(async controlResult =>
                {
                    var devCommand = await _controlCommandService.GetDeviceControlCmdByIdAsny(controlResult.Serialnum);


                    if (devCommand == null)
                    {
                        return;
                    }
                    var device        = await _deviceService.GetDeviceByIdAsny(devCommand.DeviceSerialnum);
                    var devControlLog = new DeviceControlLogDto
                    {
                        Serialnum        = DateTime.Now.ToString("yyyyMMddHHmmssfff") + "-" + devCommand.DeviceSerialnum,
                        DeviceSerialnum  = devCommand.DeviceSerialnum,
                        CommandSerialnum = controlResult.Serialnum,
                        ControlResult    = controlResult.Result,
                        CreateTime       = DateTime.Now,
                        DeviceShowValue  = device.ShowValue,
                        DeviceValue      = device.ProcessedValue,
                        FailReason       = controlResult.FailReason,
                        Remark           = ""
                    };
                    var result = await _deviceControlLogService.AddControlLog(devControlLog);

                    var devControlConmand =
                        await _controlCommandService.GetDeviceControlCmdByIdAsny(devCommand.Serialnum);
                    if (devControlConmand.Status != (int)DeviceCommandTypeEnum.Getted)
                    {
                        return;
                    }
                    if (controlResult.Result)
                    {
                        devControlConmand.Status = (int)DeviceCommandTypeEnum.ActionSuccess;
                        //接收到来自客户端的上传控制指令的时候,控制成功状态变为2
                    }
                    else
                    {
                        devControlConmand.Status = (int)DeviceCommandTypeEnum.ActionError;
                        //接收到来自客户端的上传控制指令的时候,控制失败状态变为3
                    }
                    devControlConmand.UpdateTime = DateTime.Now;
                    var rlt = await _controlCommandService.UpdateControlCommandAsny(devCommand);
                    LogHelper.Info("[上传控制结果]设备{0}指令:{1}上传{2}", devControlConmand.DeviceSerialnum,
                                   devControlConmand.Command, rlt);
                });

                return(true);
            }
            catch (Exception ex)
            {
                LogHelper.Error("上传控制指令出错,错误内容:{0}", ex.ToString());
                return(false);
            }
        }