/// <summary> /// Пометить запись в ITS как отправленную, либо не отправленную (ошибка). /// </summary> /// <param name="aCastSchedule">Запись.</param> /// <param name="aState">Состояние отправки.</param> private void MarkCastScheduleAsSended(CastSchedule aCastSchedule, ScheduleState aState) { try { oracleConnection.LockConnection(); Logger.Debug(string.Format("Изменение состояния записи на '{0}'", aState)); updateCastState.Connection = oracleConnection.GetOracleConnection(); updateCastState.Parameters["State"].Value = (int) aState; updateCastState.Parameters["Id"].Value = aCastSchedule.Id; updateCastState.ExecuteNonQuery(); oracleConnection.UpdateLastOperationTime(); Logger.Debug("Изменение состояния успешно"); } catch (Exception ex) { oracleConnection.ProcessError(ex); } finally { oracleConnection.ReleaseConnection(); } }
/// <summary> /// Сохраняет запись в Wagstaff. /// </summary> /// <param name="aCastSchedule">Запись.</param> /// <returns>True - если запись успешно сохранена, False - иначе.</returns> private bool TrySaveToWagstaff(CastSchedule aCastSchedule) { try { sqlConnection.LockConnection(); Logger.Debug("Попытка передачи данных в Wagstaff"); insertNewCast.Connection = sqlConnection.GetSqlConnection(); insertNewCast.Parameters["CastId"].Value = aCastSchedule.CastNumber; insertNewCast.Parameters["RecipeId"].Value = aCastSchedule.RecipeName; insertNewCast.Parameters["RecipeRev"].Value = aCastSchedule.RecipeRevision; insertNewCast.Parameters["Priority"].Value = aCastSchedule.Priority; insertNewCast.Parameters["Archived"].Value = 0; insertNewCast.Parameters["Node"].Value = "WAGTS1"; insertNewCast.Parameters["DateCreated"].Value = DateTime.Now; insertNewCast.ExecuteNonQuery(); sqlConnection.UpdateLastOperationTime(); Logger.Debug("Данные переданы успешно"); return true; } catch (Exception ex) { sqlConnection.ProcessError(ex); return false; } finally { sqlConnection.ReleaseConnection(); } }
/// <summary> /// Проверить новые записи и, если они есть, переслать в Wagstaff. /// Метод запускается таймером. /// </summary> /// <param name="sender">Sender.</param> /// <param name="e">E.</param> private void CheckNewCastSchedule(object sender = null, ElapsedEventArgs e = null) { var casts = new List<CastSchedule>(); var results = new List<ScheduleState>(); try { oracleConnection.LockConnection(); Logger.Debug("Проверка новых плавок..."); selectCheckNewCast.Connection = oracleConnection.GetOracleConnection(); selectCheckNewCast.Parameters["State"].Value = (int) ScheduleState.NOT_PROCESSED; // делаем выборку записей из ITS using (var reader = selectCheckNewCast.ExecuteReader()) { oracleConnection.UpdateLastOperationTime(); while (reader.Read()) { var castSchedule = new CastSchedule { Id = reader.GetInt32(0), RecipeName = reader.GetString(1), RecipeRevision = reader.GetInt32(2), CastNumber = reader.GetString(3), ScheduleState = reader.GetInt32(4), Priority = reader.GetInt32(5) }; Logger.Debug("Получены новые плавки"); var isSaved = TrySaveToWagstaff(castSchedule); casts.Add(castSchedule); results.Add(isSaved ? ScheduleState.WAS_SAVED : ScheduleState.WAS_ERROR); } } } catch (Exception ex) { oracleConnection.ProcessError(ex); } finally { oracleConnection.ReleaseConnection(); } for (var i = 0; i < casts.Count; ++i) { MarkCastScheduleAsSended(casts[i], results[i]); } }