Saving to Oracle DB uses a list of tests extracted from VT_PRUEFPUNKT_SOLL_SD, required for DEWA water meters, ver. 2.12.505

This commit is contained in:
Milan Hanajik
2017-03-22 13:59:21 +01:00
parent 724869948f
commit 8d287351b7
2 changed files with 59 additions and 14 deletions
@@ -47,6 +47,23 @@ namespace TBF.BenchControl.DB.SensusOracle
StreamWriter logger; /// Logs specified by LU
///
/// Information extracted from VT_PRUEFPUNKT_SOLL_SD for a given watermeter by query:
/// SELECT * FROM VT_PRUEFPUNKT_SOLL_SD WHERE ANBID=4 AND ID_WZTyp=x AND Rev_WZTyp=y
///
class TestInfo
{
public int PruefungsNr;
public string QBezeichnung;
public TestInfo(int p, string q) { PruefungsNr = p; QBezeichnung = q; }
public override string ToString() { return string.Format("({0},{1})", PruefungsNr, QBezeichnung); }
}
///
static int id_WZTyp;
static int rev_WZTyp;
static IList<TestInfo> testInfos = new List<TestInfo>();
public Database() {}
public Database(Generic.IComponentCfg cfg)
@@ -902,12 +919,34 @@ namespace TBF.BenchControl.DB.SensusOracle
cmd.ExecuteNonQuery(); /// Returns nr. of updated rows
for (int q = 1; q <= 3; q++)
if ((id_WZTyp != b.WaterMeters[0].WaterMeterData.WMTypeId) || (rev_WZTyp != b.WaterMeters[0].WaterMeterData.WMTypeRev) || testInfos.Count == 0)
{
Results.Entities.TestRslt tr = b.GetTestRslt(string.Format("Q{0}", q), 0);
testInfos.Clear();
id_WZTyp = b.WaterMeters[0].WaterMeterData.WMTypeId;
rev_WZTyp = b.WaterMeters[0].WaterMeterData.WMTypeRev;
if (tr == null) tr = b.GetTestRslt(string.Format("Q{0}", q), 1); /// TODO: Remove this workaround for large large watermeters with multiple parts at Q3
OracleCommand cmd1 = new OracleCommand("SELECT PruefungsNr, PosFehlerKalt, QBezeichnung FROM VT_PRUEFPUNKT_SOLL_SD WHERE ANBID=4 AND ID_WZTyp=:1 AND Rev_WZTyp=:2", conn);
parm = new OracleParameter("ID_WZTyp", OracleDbType.Int32); parm.Value = id_WZTyp; cmd1.Parameters.Add(parm); ///:1
parm = new OracleParameter("Rev_WZTyp", OracleDbType.Int32); parm.Value = rev_WZTyp; cmd1.Parameters.Add(parm); ///:2
OracleDataReader dr = cmd1.ExecuteReader();
while (dr.Read())
{
int pruefungsNr = dr.GetInt32(0);
double errLimHi = dr.GetDouble(1);
string qBezeichnung = dr.GetString(2);
if (qBezeichnung == "Q2" && errLimHi > 2.0) qBezeichnung = "Q2adj";
if (qBezeichnung == "Just") qBezeichnung = "Adjustment";
testInfos.Add(new TestInfo(pruefungsNr, qBezeichnung));
}
dr.Close();
}
foreach (var testInfo in testInfos)
{
Results.Entities.TestRslt tr = b.GetTestRslt(testInfo.QBezeichnung, 0);
if (tr == null) tr = b.GetTestRslt(testInfo.QBezeichnung, 1); /// TODO: Remove this workaround for large watermeters with multiple parts at Q3
if (tr == null) continue;
@@ -923,7 +962,7 @@ namespace TBF.BenchControl.DB.SensusOracle
parm = new OracleParameter("ANBID", OracleDbType.Int32); parm.Value = Anbid_StaraTura; cmd2.Parameters.Add(parm); ///:1
parm = new OracleParameter("ID_Pruefstand", OracleDbType.Int32); parm.Value = 18000 + b.TestBenchId; cmd2.Parameters.Add(parm); ///:2
parm = new OracleParameter("ID_WzPruefreihe", OracleDbType.Int32); parm.Value = b.BatchNr; cmd2.Parameters.Add(parm); ///:3
parm = new OracleParameter("PruefungsNr", OracleDbType.Int32); parm.Value = ((q==0) ? -1 : q); cmd2.Parameters.Add(parm); ///:4
parm = new OracleParameter("PruefungsNr", OracleDbType.Int32); parm.Value = testInfo.PruefungsNr; cmd2.Parameters.Add(parm); ///:4
///
parm = new OracleParameter("PVOL", OracleDbType.Double); parm.Value = Units.ConvertTo(Unit.l, tr.VolumeCTV); cmd2.Parameters.Add(parm); ///:5
parm = new OracleParameter("PMasse", OracleDbType.Double); parm.Value = Units.ConvertTo(Unit.kg, tr.MassEnd-tr.MassStart); cmd2.Parameters.Add(parm); ///:6
@@ -1027,10 +1066,17 @@ namespace TBF.BenchControl.DB.SensusOracle
log.InfoFormat("VT_ZAEHLER_PINDEX_PD inserted, PcbNr={0}, pos={1}, pruefix={2}", wm.SerialNr, wm.WMPosition, max_Pruefindex % 100);
}
for (int q = 1; q <= 3; q++)
{
Results.Entities.MeterTestRslt mtr = wm.GetMeterTestRslt(string.Format("Q{0}", q));
SaveMeterTestResult(conn, mtr, q, max_Pruefindex);
foreach (var testInfo in testInfos)
{
Results.Entities.MeterTestRslt mtr = wm.GetMeterTestRslt(testInfo.QBezeichnung);
if (mtr == null)
{
throw new Exception(string.Format("'{0}' test results missing, watermeter {1}", testInfo.QBezeichnung, wm.WMPosition));
}
SaveMeterTestResult(conn, mtr, testInfo.PruefungsNr, max_Pruefindex);
}
{
@@ -1064,11 +1110,10 @@ namespace TBF.BenchControl.DB.SensusOracle
/// </summary>
/// <param name="q">q = 0, 1, 2 or 3 (Adj., Q1, Q2, Q3)</param>
/// <returns>Nr. of rows updated</returns>
static int SaveMeterTestResult(OracleConnection conn, Results.Entities.MeterTestRslt mtr, int q, int max_Pruefindex) ///
static int SaveMeterTestResult(OracleConnection conn, Results.Entities.MeterTestRslt mtr, int qq, int max_Pruefindex) ///
{
double Q_wm = 3600.0 * mtr.VolumeMeter / mtr.TestTime; /// in [l/hour]
double Q_wm_with_upper_bound = Math.Min(2 * 1000 * mtr.TestRslt.FlowVolume, Math.Max(0.0, Q_wm));
int qq = (q == 0) ? -1 : q;
OracleCommand cmd = new OracleCommand("INSERT INTO VT_PRUEFREIHE_IST_PD(" +
"VT_Fernum, Pruefindex, PruefungsNr, ANBID, ID_WZTyp, Rev_WZTyp, Rev_WZPruefpunkt, " +
@@ -29,5 +29,5 @@ using System.Runtime.InteropServices;
// Build Number
// Revision
//
[assembly: AssemblyVersion("2.12.503.1")]
[assembly: AssemblyFileVersion("2.12.503.1")]
[assembly: AssemblyVersion("2.12.505.1")]
[assembly: AssemblyFileVersion("2.12.505.1")]