public JsonResult FindAlarmsLst(int warehouse, int devicecode)
        {
            List <Alarm>     stateList = new CWDevice().FindAlarmList(d => d.Warehouse == warehouse && d.DeviceCode == devicecode);
            List <BackAlarm> dispLst   = new List <BackAlarm>();

            for (int i = 0; i < stateList.Count; i++)
            {
                Alarm alarm = stateList[i];
                if (alarm.Value == 1)
                {
                    if (!alarm.Description.Contains("备用"))
                    {
                        if (alarm.Color == EnmAlarmColor.Green)
                        {
                            BackAlarm back = new BackAlarm {
                                Type        = 1,
                                Description = alarm.Description
                            };
                            dispLst.Add(back);
                        }
                        else if (alarm.Color == EnmAlarmColor.Red)
                        {
                            BackAlarm back = new BackAlarm
                            {
                                Type        = 2,
                                Description = alarm.Description
                            };
                            dispLst.Add(back);
                        }
                    }
                }
            }

            return(Json(dispLst, JsonRequestBehavior.AllowGet));
        }
Exemple #2
0
        /// <summary>
        /// 批量更新
        /// </summary>
        /// <param name="alarmLst"></param>
        /// <returns></returns>
        public async Task <Response> UpdateAlarmListAsync(List <Alarm> alarmLst)
        {
            Response resp = new Response();
            Log      log  = LogFactory.GetLogger("UpdateAlarmList");

            try
            {
                resp = await manager_alarm.UpdateAlarmListAsync(alarmLst);

                #region 报警记录写入数据库
                List <Alarm> faultLst = alarmLst.FindAll(f => f.Color == EnmAlarmColor.Red && f.Description.Contains("备用") == false);
                if (faultLst.Count > 0)
                {
                    new CWFaultLog().AddFaultRecord(faultLst);
                }
                #endregion

                #region 写状态位记录入数据库
                List <Alarm> statusLst = alarmLst.FindAll(f => f.Color == EnmAlarmColor.Green && f.Description.Contains("备用") == false);
                if (faultLst.Count > 0)
                {
                    new CWStatusLog().AddStateRecord(statusLst);
                }
                #endregion

                #region 推送至显示
                int warehouse            = alarmLst.First().Warehouse;
                int devicecode           = alarmLst.First().DeviceCode;
                List <BackAlarm> backlst = new List <BackAlarm>();

                List <Alarm> hasValueLst = await manager_alarm.FindListAsync(al => al.Warehouse == warehouse && al.DeviceCode == devicecode && al.Value == 1);

                foreach (Alarm ar in hasValueLst)
                {
                    if (ar.Description.Contains("备用"))
                    {
                        continue;
                    }
                    int type = 0;
                    if (ar.Color == EnmAlarmColor.Green)
                    {
                        type = 1;
                    }
                    else if (ar.Color == EnmAlarmColor.Red)
                    {
                        type = 2;
                    }

                    BackAlarm back = new BackAlarm
                    {
                        Type        = type,
                        Description = ar.Description
                    };

                    backlst.Add(back);
                }
                SingleCallback.Instance().WatchFaults(warehouse, devicecode, backlst);
                #endregion

                #region 向云服务请求短信发送
                if (faultLst.Count > 0)
                {
                    Alarm  myalarm = faultLst[0];
                    Device smg     = await FindAsync(d => d.Warehouse == myalarm.Warehouse && d.DeviceCode == myalarm.DeviceCode);

                    if (smg == null || smg.TaskID == 0)
                    {
                        return(resp);
                    }
                    //一定是作业时报警才上报
                    ImplementTask itask = await new CWTask().FindAsync(smg.TaskID);
                    if (itask == null)
                    {
                        return(resp);
                    }

                    SMSInfo sms = null;
                    if (dicSmsRequest.ContainsKey(smg.DeviceCode))
                    {
                        SMSInfo info = dicSmsRequest[smg.DeviceCode];
                        //同一个任务,只发送一次
                        if (info.Plate == itask.PlateNum)
                        {
                            return(resp);
                        }
                        //15分钟内只允许发送一条
                        DateTime rcdtime = DateTime.Parse(info.RcdTime);
                        if (DateTime.Compare(rcdtime, DateTime.Now.AddMinutes(15)) < 0)
                        {
                            return(resp);
                        }
                        ////内容重复的,一个小时内只发一次
                        //if (info.Message == myalarm.Description&& DateTime.Compare(rcdtime, DateTime.Now.AddHours(1)) < 0)
                        //{
                        //    return resp;
                        //}

                        sms = new SMSInfo {
                            warehouse  = smg.Warehouse,
                            DeviceCode = smg.DeviceCode,
                            Plate      = itask.PlateNum,
                            AutoStep   = smg.RunStep,
                            Message    = myalarm.Description,
                            RcdTime    = DateTime.Now.ToString()
                        };
                        dicSmsRequest[smg.DeviceCode] = sms;
                    }
                    else
                    {
                        sms = new SMSInfo
                        {
                            warehouse  = smg.Warehouse,
                            DeviceCode = smg.DeviceCode,
                            Plate      = itask.PlateNum,
                            AutoStep   = smg.RunStep,
                            Message    = myalarm.Description,
                            RcdTime    = DateTime.Now.ToString()
                        };

                        dicSmsRequest.Add(smg.DeviceCode, sms);
                    }

                    if (sms != null)
                    {
                        log.Info("发送短信 - " + sms.Message);

                        CloudCallback.Instance().SendSMSToCloud(sms);
                    }
                }
                #endregion
            }
            catch (Exception ex)
            {
                log.Error(ex.ToString());
            }
            return(resp);
        }