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