/// <summary> /// /// </summary> public static bool Process_Multy_Meas(MeasTask mt, List <int> SensorIds, string ActionType, bool isOnline) { bool isSendSuccess = false; try { ClassesDBGetTasks cl = new ClassesDBGetTasks(); List <MeasSdrTask> Checked_L = new List <MeasSdrTask>(); //Task tdf = new Task(() => //{ if (mt != null) { List <MeasSdrTask> LM_SDR = new List <MeasSdrTask>(); foreach (int SensorId in SensorIds.ToArray()) { Sensor fnd_s = GlobalInit.SensorListSDRNS.Find(t => t.Id.Value == SensorId); if (fnd_s != null) { Task tsk = new Task(() => { Checked_L.Clear(); if (GlobalInit.LIST_MEAS_TASK.Find(j => j.Id.Value == mt.Id.Value) != null) { MeasTask M = GlobalInit.LIST_MEAS_TASK.Find(j => j.Id.Value == mt.Id.Value); int Id_Old = M.Id.Value; MeasSubTask[] msbd_old = M.MeasSubTasks; M = mt; M.Id.Value = Id_Old; if (M.Stations.ToList().FindAll(e => e.StationId.Value == SensorId) != null) { M.UpdateStatusSubTasks(SensorId, ActionType, isOnline); LM_SDR = M.CreateeasTaskSDRs(ActionType); //if (isCreateTasksSdr == false) { LM_SDR = M.CreateeasTaskSDRs(ActionType); } if (LM_SDR != null) { string ids = ""; int MaxVal = cl.GetMaXIdsSdrTasks(M); int idx = MaxVal + 1; foreach (MeasSdrTask mx in LM_SDR.ToArray()) { mx.Id = idx; ids = idx.ToString() + ";"; //Task ts = new Task(() => { //если сенсор активен //if (fnd_s.Status == "A") //{ if (mx.SensorId.Value == SensorId) { /// Перед отправкой включаем валидацию созданных объектов MeasTaskSDR if (mx.ValidationMeas()) { Checked_L.Add(mx); M.UpdateStatus(ActionType); } else { // если вадидация не прошла M.UpdateStatusE_E(mx.MeasSubTaskStationId, "E_E"); M.UpdateStatus(ActionType); //обновление группы статусов для объекта MeasTask cl.SaveStatusTaskToDB(M); } } idx++; } if (ids.Length > 0) { ids = ids.Remove(ids.Count() - 1, 1); } cl.SaveIdsSdrTasks(M, ids); } } M.MeasSubTasks = msbd_old; MeasTask fnd = GlobalInit.LIST_MEAS_TASK.Find(j => j.Id.Value == Id_Old); if (fnd != null) { GlobalInit.LIST_MEAS_TASK.ReplaceAll <MeasTask>(fnd, M); } else { GlobalInit.LIST_MEAS_TASK.Add(M); } if (ActionType == "Del") { GlobalInit.LIST_MEAS_TASK.RemoveAll(t => t.Id.Value == M.Id.Value); } } }); tsk.Start(); tsk.Wait(); if (Checked_L.Count > 0) { CoreICSM.Logs.CLogs.WriteInfo(ELogsWhat.Unknown, "--> Start busManager send new task..."); BusManager <List <MeasSdrTask> > busManager = new BusManager <List <MeasSdrTask> >(); if (busManager.SendDataObject(Checked_L, GlobalInit.Template_MEAS_TASK_Main_List_APPServer + fnd_s.Name + fnd_s.Equipment.TechId, XMLLibrary.BaseXMLConfiguration.xml_conf._TimeExpirationTask.ToString())) { isSendSuccess = true; CoreICSM.Logs.CLogs.WriteInfo(ELogsWhat.Unknown, "--> Success send new task..."); } else { isSendSuccess = false; //Sheduler_Send_MeasSdr shed = new Sheduler_Send_MeasSdr(); //если отправка не получилась - пытаемся отправить сообщение через 1 минуту //shed.ShedulerRepeatStart(60, mt, SensorIds, ActionType, isOnline); } // Отправка сообщения в СТОП-ЛИСТ if ((ActionType == "Stop") && (isOnline) && ((Checked_L[0].status == "F") || (Checked_L[0].status == "P"))) { if (busManager.SendDataObject(Checked_L, GlobalInit.Template_MEAS_TASK_Stop_List + fnd_s.Name + fnd_s.Equipment.TechId + Checked_L[0].MeasTaskId.Value.ToString() + Checked_L[0].SensorId.Value.ToString(), XMLLibrary.BaseXMLConfiguration.xml_conf._TimeExpirationTask.ToString())) { isSendSuccess = true; } } else { //busManager.DeleteQueue(GlobalInit.Template_MEAS_TASK_Stop_List + fnd_s.Name + fnd_s.Equipment.TechId + Checked_L[0].MeasTaskId.Value.ToString() + Checked_L[0].SensorId.Value.ToString()); } } Checked_L.Clear(); } } //}); //tsk.Start(); //tsk.Wait(); } //cl.Dispose(); //}); //tdf.Start(); //tdf.Wait(); } catch (Exception ex) { CoreICSM.Logs.CLogs.WriteError(ELogsWhat.Unknown, "[Process_Multy_Meas]: " + ex.Message); } return(isSendSuccess); }
//ClassConvertTasks ts = new ClassConvertTasks(); void IJob.Execute(IJobExecutionContext context) { //foreach (IDisposable d in GlobalInit.Lds_Activity_MEAS_TASK_SDR_Main_List_SDR) d.SafeDispose(); //Task stx = new Task(() => //{ try { BusManager <List <MeasSdrTask> > busManager = new BusManager <List <MeasSdrTask> >(); foreach (Sensor s in GlobalInit.SensorListSDRNS.ToArray()) { if (ClassStaticBus.bus.Advanced.IsConnected) { uint cnt = busManager.GetMessageCount(GlobalInit.Template_MEAS_TASK_SDR_Main_List_SDR + s.Name + s.Equipment.TechId); for (int i = 0; i < cnt; i++) { var message = busManager.GetDataObject(GlobalInit.Template_MEAS_TASK_SDR_Main_List_SDR + s.Name + s.Equipment.TechId); if (message != null) { List <MeasSdrTask> fnd_s = message as List <MeasSdrTask>; if (fnd_s != null) { foreach (MeasSdrTask h in fnd_s) { if (h.MeasTaskId != null) { MeasTask tsk = GlobalInit.LIST_MEAS_TASK.Find(t => t.Id.Value == h.MeasTaskId.Value); if (tsk != null) { tsk.Status = h.status; cl.SaveStatusTaskToDB(tsk); } } } } } else { break; } } /* * GlobalInit.Lds_Activity_MEAS_TASK_SDR_Main_List_SDR.Add(ClassStaticBus.bus.Receive(GlobalInit.Template_MEAS_TASK_SDR_Main_List_SDR + s.Name + s.Equipment.TechId, x => x * .Add<List<MeasSdrTask>>(message => * { * List<MeasSdrTask> fnd_s = message; * if (fnd_s != null) * { * foreach (MeasSdrTask h in fnd_s) * { * if (h.MeasTaskId != null) * { * MeasTask tsk = GlobalInit.LIST_MEAS_TASK.Find(t => t.Id.Value == h.MeasTaskId.Value); * if (tsk != null) * { * tsk.Status = h.status; * cl.SaveStatusTaskToDB(tsk); * } * } * } * } * }))); */ } else { ClassStaticBus.bus.Dispose(); GC.SuppressFinalize(ClassStaticBus.bus); ClassStaticBus.bus = RabbitHutch.CreateBus(GlobalInit.MainRabbitMQServices); CoreICSM.Logs.CLogs.WriteInfo(CoreICSM.Logs.ELogsWhat.Unknown, "-> Bus dispose... "); } } CoreICSM.Logs.CLogs.WriteInfo(CoreICSM.Logs.ELogsWhat.Unknown, "ShedulerGetMeasTask "); } catch (Exception ex) { CoreICSM.Logs.CLogs.WriteError(CoreICSM.Logs.ELogsWhat.Unknown, "ShedulerGetMeasTask " + ex.Message); } cl.Dispose(); //}); //stx.Start(); //stx.Wait(); System.GC.Collect(); }