/// <summary> /// Получение актуального(действующего) планового графика на текущие сутки /// </summary> static void GetPlanValuesActual(IApiExternal api_, Modes.BusinessLogic.IGenObject IGO) { //api_.GetPlanFactors() - это список: генерация; минимум генерации; максимум генерации //Величины в тестовом примере читаются так: Values (это коллекция) = api_.GetPlanValuesActual(...) //А потом цикл по ним, и у них берётся .DT и .Value IList <PlanValueItem> LPVI = api_.GetPlanValuesActual(DateTime.Now.Date.LocalHqToSystemEx(), DateTime.Now.Date.AddDays(1).LocalHqToSystemEx(), IGO); if (LPVI.Count == 0) { Console.WriteLine(" Нет параметров генерации!"); } foreach (PlanValueItem pvi in LPVI.OrderBy(RRR => RRR.DT)) { Console.WriteLine(" " + pvi.DT.SystemToLocalHqEx().ToString() + " " + pvi.Type.ToString() + " [" + LPFI[pvi.ObjFactor].Description + "] " + /*it.ObjName это id генерирующего объекта*/ LPFI[pvi.ObjFactor].Name + " =" + pvi.Value.ToString()); techsite.WritePlanValue(IGO.IdInner, pvi.DT.SystemToLocalHqEx(), pvi.Type.ToString(), (MySQLtechsite.Params)LPFI[pvi.ObjFactor].Id, pvi.Value); //Запись в БД techsite //02.09.2013 меняю IGO.Id на IGO.IdInner //pvi.DT.SystemToLocalHqEx() даёт Московское время, как и нужно //Аналогичный результат даст явное преобразование TimeZoneInfo.ConvertTimeFromUtc(pvi.DT, TimeZoneInfo.FindSystemTimeZoneById("Russian Standard Time")) //"Russian Standard Time" - это Москва. "N. Central Asia Standard Time" - это Новосибирск. //Про конвертацию времени: http://msdn.microsoft.com/ru-ru/library/bb397769.aspx } }
protected override bool GetData(DataTable table, object query) { bool result = false; int i = -1; Modes.BusinessLogic.IGenObject igo; ////Вариант №1 //PPBR_Record ppbr = null; //SortedList<DateTime, PPBR_Record> srtListPPBR = new SortedList<DateTime,PPBR_Record> (); //Вариант №2 DataRow [] ppbr_rows = null; string pbr_number = string.Empty; DateTime date = DateTime.MinValue; string[] args = null , idsInner = null; bool valid = false; int idInner = -1; IList <PlanValueItem> listPVI = null; DateTime dateCurrent; table.Reset(); table.Locale = System.Globalization.CultureInfo.CurrentCulture; args = ((string)query).Split(';'); //Logging.Logg().Debug("DbMCInterface::GetData () - " + query + "...", Logging.INDEX_MESSAGE.NOT_SET); switch (args[0]) { case "InitIGO": //InitIGO (arg); break; case "PPBR": table.Columns.Add("DATE_PBR", typeof(DateTime)); table.Columns.Add("WR_DATE_TIME", typeof(DateTime)); table.Columns.Add("PBR", typeof(double)); table.Columns.Add("Pmin", typeof(double)); table.Columns.Add("Pmax", typeof(double)); table.Columns.Add("PBR_NUMBER", typeof(string)); //table.Columns.Add("ID_COMPONENT", typeof(Int32)); date = DateTime.FromOADate(Double.Parse(args[2])); idsInner = args[1].Split(','); for (i = 0; i < idsInner.Length; i++) { valid = Int32.TryParse(idsInner[i], out idInner); if (valid == false) { continue; } else { ; } igo = findIGO(idInner); if (igo == null) { igo = addIGO(idInner); } else { ; } if (!(igo == null)) { result = true; try { listPVI = m_MCApi.GetPlanValuesActual(date.LocalHqToSystemEx(), date.AddDays(1).LocalHqToSystemEx(), igo); } catch (Exception e) { Logging.Logg().Exception(e, @"DbMCInterface::GetData () - GetPlanValuesActual () ...", Logging.INDEX_MESSAGE.NOT_SET); Console.WriteLine(string.Format("{0}ОШИБКА получения значений!", "\t")); needReconnect = true; result = false; } if (result == true) { if (listPVI.Count == 0) { Console.WriteLine(string.Format("{0}Нет параметров генерации!", "\t")); } else { ; } } else { //ОШИБКА получения значений! break; } foreach (PlanValueItem pvi in listPVI.OrderBy(RRR => RRR.DT)) { //Console.WriteLine(" " + pvi.DT.SystemToLocalHqEx().ToString() + " " + // pvi.Type.ToString() + " [" + m_listPFI[pvi.ObjFactor].Description + "] " + // /*it.ObjName это id генерирующего объекта*/ // m_listPFI[pvi.ObjFactor].Name + " =" + pvi.Value.ToString()); dateCurrent = pvi.DT.SystemToLocalHqEx(); pbr_number = pvi.Type.ToString().IndexOf(@"ПБР") < 0 ? @"ПБР" + pvi.Type.ToString() : pvi.Type.ToString(); //Получение записи с другими параметрами за это время ////Вариант №1 //if (srtListPPBR.ContainsKey(dateCurrent)) // ppbr = srtListPPBR.First(item => item.Key == dateCurrent).Value; //else // ; //Вариант №2 if (table.Rows.Count > 0) { ppbr_rows = table.Select("DATE_PBR='" + dateCurrent.ToString() + "'"); } else { ; } //Обработка получения записи ////Вариант №1 //if (ppbr == null) //{ // ppbr = new PPBR_Record(); // ppbr.date_time = dateCurrent; // ppbr.wr_date_time = DateTime.Now; // ppbr.PBR_number = pvi.Type.ToString(); // //ppbr.idInner = igo.IdInner; //??? Для TEC5_TG36 2 объекта (TG34 + TG56), т.е. 2 IGO // //После добавления можно продолжать модифицировать экземпляр класса - в коллекции та же самая ссылка хранится. // srtListPPBR.Add(dateCurrent, ppbr); //} //else // ; //Вариант №2 if ((ppbr_rows == null) || (ppbr_rows.Length == 0)) { table.Rows.Add(new object[] { dateCurrent, DateTime.Now, 0.0, 0.0, 0.0, pbr_number /*, igo.IdInner*/ }); ppbr_rows = table.Select("DATE_PBR='" + dateCurrent.ToString() + "'"); } else { ; } ppbr_rows[0]["PBR_NUMBER"] = pbr_number; switch (m_listPFI[pvi.ObjFactor].Id) { case 0: //else.ppbr.pbr = pvi.Value; //Вариант №1 ppbr_rows [0]["PBR"] = (double)ppbr_rows [0]["PBR"] + pvi.Value; //Вариант №2 break; case 1: //ppbr.pmin = pvi.Value; //Вариант №1 ppbr_rows [0]["PMIN"] = (double)ppbr_rows [0]["PMIN"] + pvi.Value; //Вариант №2 break; case 2: //ppbr.pmax = pvi.Value; //Вариант №1 ppbr_rows [0]["PMAX"] = (double)ppbr_rows [0]["PMAX"] + pvi.Value; //Вариант №2 break; default: break; } } } else { result = false; //igo == null } } break; default: break; } return(result); }
public bool getPlan(IGenObject obj) { DateTime dt1 = Date.Date.LocalHqToSystemEx(); DateTime dt0 = Date.Date.AddDays(1).LocalHqToSystemEx(); modesConnect(); IList <PlanValueItem> data = api.GetPlanValuesActual(dt1, dt0, obj); bool ok = true; if (data.Count > 0) { Logger.Info(String.Format("Обработка ПБР для {0}({1}) [{2}]", obj.Description, obj.Id, obj.Name)); List <MCPBRData> pbrs = MCPBRData.getPBRS(obj.Id, obj.Name); foreach (MCPBRData pbr in pbrs) { if (ProcessedPBRS.ContainsKey(pbr.Item)) { Logger.Info(string.Format("Данные по коду {0} уже были считаны ", pbr.Item)); continue; } if (pbr.DataSettings != null) { foreach (PlanValueItem item in data) { if (item.ObjFactor == 0) { pbr.AddValue(item.DT.SystemToLocalHqEx(), item.Value); string pt = item.Type.ToString().Replace("ПБР", ""); int num = 0; try { num = Int32.Parse(pt); } catch { } NPBR = num; } } Logger.Info(String.Format("Получено {0} записей с {1} по {2} по объекту {3}", pbr.Data.Count, dt1.SystemToLocalHqEx(), dt0.SystemToLocalHqEx(), obj.Description)); if (pbr.Data.Count > 10) { if (!ProcessedPBRS.ContainsKey(pbr.Item)) { ProcessedPBRS.Add(pbr.Item, pbr); } } else { Logger.Info("Недостаточно данных"); ok = false; } Logger.Info("===Данные считаны: " + (ok ? "Успешно" : "Ошибка")); } else { Logger.Info("===Ошибка при разборе полученного макета. Возможно изменение кодировки MC"); } } } foreach (IGenObject ch in obj.Children) { bool ok2 = getPlan(ch); ok = ok && ok2; } return(ok); }
private bool fPPBR(DataTable table, string [] idsInner, DateTime date) { bool bRes = false; Modes.BusinessLogic.IGenObject igo; int i = -1 , idInner = -1; bool valid = false; IList <PlanValueItem> listPVI = null; DataRow [] ppbr_rows = null; string pbr_number = string.Empty , pbr_indx; DateTime dateCurrent; INDEX_PLAN_FACTOR indx_plan_factor = INDEX_PLAN_FACTOR.Unknown; table.Columns.Add("DATE_PBR", typeof(DateTime)); table.Columns.Add("WR_DATE_TIME", typeof(DateTime)); table.Columns.Add(INDEX_PLAN_FACTOR.PBR.ToString(), typeof(double)); table.Columns.Add(INDEX_PLAN_FACTOR.Pmin.ToString(), typeof(double)); table.Columns.Add(INDEX_PLAN_FACTOR.Pmax.ToString(), typeof(double)); table.Columns.Add("PBR_NUMBER", typeof(string)); //table.Columns.Add("ID_COMPONENT", typeof(Int32)); for (i = 0; i < idsInner.Length; i++) { valid = Int32.TryParse(idsInner [i], out idInner); if (valid == false) { continue; } else { ; } igo = delegateFunctionFindIGO(idInner); if (igo == null) { igo = delegateFunctionAddIGO(idInner); } else { ; } if (!(igo == null)) { try { listPVI = _mcApi.GetPlanValuesActual(date.LocalHqToSystemEx(), date.AddDays(1).LocalHqToSystemEx(), igo); bRes = true; } catch (Exception e) { Logging.Logg().Exception(e, string.Format(@"DbMCInterface::GetData () - GetPlanValuesActual () - получение значений для '{0}', [IdInner={1}]..." , igo.Description, igo.IdInner) , Logging.INDEX_MESSAGE.NOT_SET); delegateGetData_OnFillError(new FillErrorEventArgs(table, new object [] { })); bRes = false; } if (bRes == true) { if (listPVI.Count == 0) { Logging.Logg().Warning(string.Format("DbMCInterface::GetData () - GetPlanValuesActual () - нет параметров генерации для '{0}', [ID={1}]..." , igo.Description, igo.IdInner) , Logging.INDEX_MESSAGE.NOT_SET); } else { ; } } else { //ОШИБКА получения значений! break; } foreach (PlanValueItem pvi in listPVI.OrderBy(RRR => RRR.DT)) { //Console.WriteLine (" " + pvi.DT.SystemToLocalHqEx ().ToString () + " " + // pvi.Type.ToString () + " [" + _mcListPFI [pvi.ObjFactor].Description + "] " + // /*it.ObjName это id генерирующего объекта*/ // _mcListPFI [pvi.ObjFactor].Name + " =" + pvi.Value.ToString ()); dateCurrent = pvi.DT.SystemToLocalHqEx(); pbr_number = pvi.Type.ToString().IndexOf(StatisticCommon.HAdmin.PBR_PREFIX) < 0 ? StatisticCommon.HAdmin.PBR_PREFIX + pvi.Type.ToString() : pvi.Type.ToString(); //Получение записи с другими параметрами за это время ////Вариант №1 //if (srtListPPBR.ContainsKey(dateCurrent)) // ppbr = srtListPPBR.First(item => item.Key == dateCurrent).Value; //else // ; //Вариант №2 if (table.Rows.Count > 0) { ppbr_rows = table.Select("DATE_PBR='" + dateCurrent.ToString() + "'"); } else { ; } //Обработка получения записи ////Вариант №1 //if (ppbr == null) //{ // ppbr = new PPBR_Record(); // ppbr.date_time = dateCurrent; // ppbr.wr_date_time = DateTime.Now; // ppbr.PBR_number = pvi.Type.ToString(); // //ppbr.idInner = igo.IdInner; //??? Для TEC5_TG36 2 объекта (TG34 + TG56), т.е. 2 IGO // //После добавления можно продолжать модифицировать экземпляр класса - в коллекции та же самая ссылка хранится. // srtListPPBR.Add(dateCurrent, ppbr); //} //else // ; //Вариант №2, 3 if ((ppbr_rows == null) || (ppbr_rows.Length == 0)) { table.Rows.Add(new object [] { dateCurrent, DateTime.Now, 0F, 0F, 0F, pbr_number /*, igo.IdInner*/ }); ppbr_rows = table.Select($"DATE_PBR='{dateCurrent.ToString ()}'"); } else { ; } ppbr_rows [0] ["PBR_NUMBER"] = pbr_number; indx_plan_factor = (INDEX_PLAN_FACTOR)_mcListPFI [pvi.ObjFactor].Id; switch (indx_plan_factor) { case INDEX_PLAN_FACTOR.PBR: case INDEX_PLAN_FACTOR.Pmin: case INDEX_PLAN_FACTOR.Pmax: pbr_indx = ((INDEX_PLAN_FACTOR)_mcListPFI [pvi.ObjFactor].Id).ToString(); break; default: pbr_indx = string.Empty; break; } if (string.IsNullOrWhiteSpace(pbr_indx) == false) { try { ppbr_rows [0] [pbr_indx] = (double)ppbr_rows [0] [pbr_indx] + pvi.Value; //Вариант №3 } catch (Exception e) { Logging.Logg().Exception(e, $"DbMCInterface::GetData() - тип{ppbr_rows [0] [pbr_indx].GetType ().Name} значения по индексу={indx_plan_factor.ToString()}..." , Logging.INDEX_MESSAGE.NOT_SET); } } else { Logging.Logg().Error(string.Format("DbMCInterface::GetData() - не найден индекс={0} значения ПБР...", _mcListPFI [pvi.ObjFactor].Id) , Logging.INDEX_MESSAGE.NOT_SET); } } // foreach } else { bRes = false; //igo == null } } // for, i return(bRes); }
public bool getPlan(IGenObject obj) { DateTime dt1 = Date.Date.LocalHqToSystemEx(); DateTime dt0 = Date.Date.AddDays(1).LocalHqToSystemEx(); modesConnect(); MCPBRData pbr = MCPBRData.getPBR(obj.Id, obj.Name); bool ok = true; foreach (IGenObject ch in obj.Children) { bool ok2 = getPlan(ch); ok = ok && ok2; } if (pbr == null) { return(ok); } if (pbr.ReadNPRCH) { IList <IGenObject> objs = new List <IGenObject>(); objs.Add(obj); api.RefreshGenObjects(objs, dt1, SyncZone.First); IVarParam vp = obj.GetVarParam("НПРЧ_уч"); for (int i = 0; i < 24; i++) { object val = vp.GetValue(i); pbr.AddNPRCHValue(dt1.SystemToLocalHqEx().AddHours(i), (bool)val?1:0); } ProcessedPBRS.Add(pbr.Item, pbr); } if (pbr.ReadPBR) { IList <PlanValueItem> data = api.GetPlanValuesActual(dt1, dt0, obj); Logger.Info(String.Format("Обработка ПБР для {0}({1}) [{2}]", obj.Description, obj.Id, obj.Name)); if (pbr.DataSettings != null) { foreach (PlanValueItem item in data) { if (item.ObjFactor == 0) { pbr.AddValue(item.DT.SystemToLocalHqEx(), item.Value); string pt = item.Type.ToString().Replace("ПБР", ""); int num = 0; try { num = Int32.Parse(pt); } catch { } NPBR = num; } else if (item.ObjFactor == 1 && pbr.DataSettings.WriteToEDSMinMax) { pbr.AddMinValue(item.DT.SystemToLocalHqEx().AddHours(-1), item.Value); } else if (item.ObjFactor == 2 && pbr.DataSettings.WriteToEDSMinMax) { pbr.AddMaxValue(item.DT.SystemToLocalHqEx().AddHours(-1), item.Value); } } Logger.Info(String.Format("Получено {0} записей с {1} по {2} по объекту {3}", pbr.Data.Count, dt1.SystemToLocalHqEx(), dt0.SystemToLocalHqEx(), obj.Description)); if (pbr.Data.Count > 10) { if (!ProcessedPBRS.ContainsKey(pbr.Item)) { ProcessedPBRS.Add(pbr.Item, pbr); } } else { Logger.Info("Недостаточно данных"); ok = false; } Logger.Info("===Данные считаны: " + (ok ? "Успешно" : "Ошибка")); } else { Logger.Info("===Ошибка при разборе полученного макета. Возможно изменение кодировки MC"); } } return(ok); }