예제 #1
0
        public ActionResult CancelWarning(string code)
        {
            SmokeDetector detector = SmokeDetectorServices.LoadSmokeDetail(code);

            if (detector == null)
            {
                throw new BusinessException(string.Format("编号为【{0}】的设备不存在", code));
            }
            if (detector.Status != SmokeDetectorStatus.Warning && detector.Status != SmokeDetectorStatus.TestWarning)
            {
                throw new BusinessException(string.Format("编号为【{0}】的设备不是报警状态", code));
            }

            if (detector.Status == SmokeDetectorStatus.TestWarning)
            {
                //更新本地设备状态
                SmokeDetectorStatusLog lastLog   = SmokeDetectorServices.LoadSmokeDetectorStatusLogByDeviceCode(detector.Code);
                SmokeDetectorStatusLog statusLog = new SmokeDetectorStatusLog()
                {
                    PreStatus         = detector.Status.Value,
                    Status            = SmokeDetectorStatus.CancelWarning,
                    BeginTime         = DateTimeHelper.GetTimeZoneNow(),
                    ReceivedJsonData  = "",
                    SmokeDetectorCode = detector.Code
                };
                detector.Status = SmokeDetectorStatus.CancelWarning;
                if (lastLog != null && statusLog.BeginTime.HasValue && lastLog.BeginTime.HasValue)
                {
                    statusLog.DurationSeconds = (int)(statusLog.BeginTime.Value - lastLog.BeginTime.Value).TotalSeconds;
                }
                //更新本地设备状态
                SmokeDetectorServices.UpdateSmokeDetector(detector);

                //更新首页数据
                (new MapDataService(detector.CompanySysNo)).DataChangeAsync();

                //写设备状态更改日志
                SmokeDetectorServices.InsertSmokeDetectorStatusLog(statusLog);
                return(Json(new AjaxResult()
                {
                    Success = true
                }, JsonRequestBehavior.AllowGet));
            }
            else
            {
                SendCmdRequest send = new SendCmdRequest()
                {
                    Imei = detector.Code
                };
                SendCmdResponse sendRes = ONENETService.SendCmd(send);
                if (sendRes.IsSuccess)
                {
                    //更新本地设备状态
                    SmokeDetectorStatusLog lastLog   = SmokeDetectorServices.LoadSmokeDetectorStatusLogByDeviceCode(detector.Code);
                    SmokeDetectorStatusLog statusLog = new SmokeDetectorStatusLog()
                    {
                        PreStatus         = detector.Status.Value,
                        Status            = SmokeDetectorStatus.CancelWarning,
                        BeginTime         = DateTimeHelper.GetTimeZoneNow(),
                        ReceivedJsonData  = "",
                        SmokeDetectorCode = detector.Code
                    };
                    detector.Status = SmokeDetectorStatus.CancelWarning;
                    if (lastLog != null && statusLog.BeginTime.HasValue && lastLog.BeginTime.HasValue)
                    {
                        statusLog.DurationSeconds = (int)(statusLog.BeginTime.Value - lastLog.BeginTime.Value).TotalSeconds;
                    }
                    //更新本地设备状态
                    SmokeDetectorServices.UpdateSmokeDetector(detector);

                    //更新首页数据
                    (new MapDataService(detector.CompanySysNo)).DataChangeAsync();

                    //写设备状态更改日志
                    SmokeDetectorServices.InsertSmokeDetectorStatusLog(statusLog);
                    return(Json(new AjaxResult()
                    {
                        Success = true
                    }, JsonRequestBehavior.AllowGet));
                }
                else
                {
                    return(Json(new AjaxResult()
                    {
                        Success = false, Message = "取消失败!"
                    }, JsonRequestBehavior.AllowGet));
                }
            }
        }
        public HttpResponseMessage SyncDeviceStatus()
        {
            Stream reqstream = HttpContext.Current.Request.InputStream;

            reqstream.Seek(0, System.IO.SeekOrigin.Begin);
            string body = new StreamReader(reqstream).ReadToEnd();

            Logger.WriteLog("API接收数据:" + body);
            List <SyncDeviceStatusRequest> list     = JsonConvert.DeserializeObject <List <SyncDeviceStatusRequest> >(body);
            SyncDeviceStatusResponse       response = new SyncDeviceStatusResponse();

            if (list == null || list.Count <= 0)
            {
                response.IsSuccess = false;
                response.Message   = "参数错误。";
            }
            else
            {
                SyncDeviceStatusRequest request = null;
                foreach (var item in list)
                {
                    if (SMOKE_STATUS_CODE.Contains(item.Status))
                    {
                        request = item;
                        break;
                    }
                }
                if (request == null)
                {
                    response.IsSuccess = false;
                    response.Message   = "参数错误。";
                }
                else
                {
                    SmokeDetector detecor = SmokeDetectorServices.LoadSmokeDetailByDeviceID(request.DeviceID);

                    if (detecor == null)
                    {
                        response.Message = "设备不存在。";
                    }
                    else
                    {
                        SmokeDetectorStatus status = MatchDeviceStatus(request.Status);
                        if (detecor.Status != status)//两次设备状态不一致
                        {
                            SmokeDetectorStatusLog lastLog = SmokeDetectorServices.LoadSmokeDetectorStatusLogByDeviceCode(detecor.Code);

                            #region  更新设备状态,写状态变更日志
                            DateTime dt;
                            DateTime.TryParse(request.CDatetime, out dt);
                            SmokeDetectorStatusLog statusLog = new SmokeDetectorStatusLog()
                            {
                                PreStatus         = detecor.Status.Value,
                                Status            = status,
                                BeginTime         = dt == DateTime.MinValue ? DateTimeHelper.GetTimeZoneNow() : dt,
                                ReceivedJsonData  = body,
                                SmokeDetectorCode = detecor.Code
                            };
                            detecor.Status = status;
                            if (lastLog != null && statusLog.BeginTime.HasValue && lastLog.BeginTime.HasValue)
                            {
                                statusLog.DurationSeconds = (int)(statusLog.BeginTime.Value - lastLog.BeginTime.Value).TotalSeconds;
                            }
                            using (var trans = TransactionManager.Create())
                            {
                                SmokeDetectorServices.InsertSmokeDetectorStatusLog(statusLog);
                                SmokeDetectorServices.UpdateSmokeDetector(detecor);
                                trans.Complete();
                            }
                            #endregion

                            #region 更新首页地图数据缓存

                            (new MapDataService(detecor.CompanySysNo)).DataChangeAsync();

                            #endregion

                            #region 发送消息

                            if (detecor.Status == SmokeDetectorStatus.Warning ||
                                detecor.Status == SmokeDetectorStatus.TestWarning)
                            {
                                Task.Factory.StartNew(() =>//火灾报警
                                {
                                    DevicesWarningTemplateTemplate devicesWarningTemplate = new DevicesWarningTemplateTemplate
                                    {
                                        SerID       = detecor.Code,
                                        DeviceName  = "烟感设备报警",
                                        Type        = "火灾报警",
                                        WarningTime = DateTimeHelper.GetTimeZoneNow().ToString("yyyy-MM-dd HH:mm:ss"),
                                        Memo        = $"此设备地址为{detecor.AddressName}",
                                        MasterID    = detecor.Code,
                                        DateStr     = DateTimeHelper.GetTimeZoneNow().ToString("yyyy-MM-dd HH:mm:ss"),//短信通知时间
                                        Address     = detecor.AddressName
                                    };
                                    if (detecor.InstallerSysNo.HasValue && detecor.InstallerSysNo < 0)
                                    {
                                        devicesWarningTemplate.Address = detecor.Position;
                                        devicesWarningTemplate.Memo    = detecor.Position;
                                    }
                                    SendMessageService.SendMessage(devicesWarningTemplate, detecor.Code);
                                });
                            }
                            else if (detecor.Status == SmokeDetectorStatus.Lost ||
                                     detecor.Status == SmokeDetectorStatus.Offline ||
                                     detecor.Status == SmokeDetectorStatus.OutNet)
                            {
                                Task.Factory.StartNew(() =>//离线报警
                                {
                                    DevicesOfflineTemplateTemplate devicesOfflintTemplate = new DevicesOfflineTemplateTemplate
                                    {
                                        SerID          = detecor.Code,
                                        DeviceName     = "烟感设备离线",
                                        DeviceAddress  = $"此设备地址为{detecor.AddressName}",
                                        OffLineTimeStr = DateTimeHelper.GetTimeZoneNow().ToString("yyyy-MM-dd HH:mm:ss"),
                                        Memo           = "请尽快处理!",
                                        MasterID       = detecor.Code,
                                        DateStr        = DateTimeHelper.GetTimeZoneNow().ToString("yyyy-MM-dd HH:mm:ss"),//短信通知时间
                                        Address        = detecor.AddressName
                                    };
                                    if (detecor.InstallerSysNo.HasValue && detecor.InstallerSysNo < 0)
                                    {
                                        devicesOfflintTemplate.Address = detecor.Position;
                                        devicesOfflintTemplate.Memo    = detecor.Position;
                                    }
                                    SendMessageService.SendMessage(devicesOfflintTemplate, detecor.Code);
                                });
                            }
                            else if (detecor.Status == SmokeDetectorStatus.LowPower)
                            {
                                Task.Factory.StartNew(() =>//低电压报警
                                {
                                    DevicesWarningTemplateTemplate devicesWarningTemplate = new DevicesWarningTemplateTemplate
                                    {
                                        SerID       = detecor.Code,
                                        DeviceName  = "烟感设备电量过低",
                                        Type        = "低电量报警",
                                        WarningTime = DateTimeHelper.GetTimeZoneNow().ToString("yyyy-MM-dd HH:mm:ss"),
                                        Memo        = $"此设备地址为{detecor.AddressName}",
                                        MasterID    = detecor.Code,
                                        DateStr     = DateTimeHelper.GetTimeZoneNow().ToString("yyyy-MM-dd HH:mm:ss"),//短信通知时间
                                        Address     = detecor.AddressName
                                    };
                                    if (detecor.InstallerSysNo.HasValue && detecor.InstallerSysNo < 0)
                                    {
                                        devicesWarningTemplate.Address = detecor.Position;
                                        devicesWarningTemplate.Memo    = detecor.Position;
                                    }
                                    SendMessageService.SendMessage(devicesWarningTemplate, detecor.Code);
                                });
                            }
                            #endregion
                        }
                        response.IsSuccess = true;
                    }
                }
            }
            string result = JsonConvert.SerializeObject(response);
            return(new HttpResponseMessage()
            {
                Content = new StringContent(result, Encoding.UTF8, "application/json")
            });
        }