DB.SensusOracle : Automatic WMTypeId assignment in progress.
This commit is contained in:
@@ -4,6 +4,7 @@
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
using System.Linq;
|
||||
using System.Text;
|
||||
using log4net;
|
||||
#if MANAGED
|
||||
using Oracle.ManagedDataAccess.Client;
|
||||
@@ -13,7 +14,6 @@ using Oracle.DataAccess.Client;
|
||||
using Common;
|
||||
using Config.Entities;
|
||||
using Results.Output;
|
||||
using System.Text;
|
||||
using SharedDatabase.Entities;
|
||||
|
||||
namespace TBF.Rig.Output.DB.SensusOracle
|
||||
@@ -41,7 +41,7 @@ namespace TBF.Rig.Output.DB.SensusOracle
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Test/Q designation mode for IperlLogger and IperlHead opto data files
|
||||
/// Test/Q designation mode for IperlLogger and IperlHead opto data files
|
||||
/// </summary>
|
||||
public enum DesigMode
|
||||
{
|
||||
@@ -62,7 +62,9 @@ namespace TBF.Rig.Output.DB.SensusOracle
|
||||
|
||||
public DBUsed DBUsed { get { return (dbCfg == null || dbCfg.ProcParams == null) ? DBUsed.None : dbCfg.ProcParams.DBUsed; } }
|
||||
public WMKind WMKind { get { return (dbCfg == null || dbCfg.ProcParams == null) ? WMKind.iPERL : dbCfg.ProcParams.WMKind; } }
|
||||
public int WMTypeId { get { return (dbCfg == null || dbCfg.ProcParams == null) ? 0 : dbCfg.ProcParams.WMTypeId; } }
|
||||
public int WMTypeId { get { return (dbCfg == null || dbCfg.ProcParams == null) ? 0 : Math.Max(0, dbCfg.ProcParams.WMTypeId); } } /// >= 0
|
||||
public bool IsAutoWMType { get { return (dbCfg == null || dbCfg.ProcParams == null) ? false : (dbCfg.ProcParams.WMTypeId == -1); } }
|
||||
public bool CreateWztypEntryIfMissing { get { return (dbCfg == null || dbCfg.ProcParams == null) ? false : dbCfg.ProcParams.CreateWztypEntryIfMissing; } }
|
||||
public int YearOfManufacture { get { return (dbCfg == null || dbCfg.ProcParams == null) ? DateTime.Now.Year : dbCfg.ProcParams.YearOfManufacture; } }
|
||||
public bool SaveResults { get { return (dbCfg == null || dbCfg.ProcParams == null) ? false : dbCfg.ProcParams.SaveResults; } }
|
||||
public bool ReadStartInfo { get { return (dbCfg == null || dbCfg.ProcParams == null) ? true : dbCfg.ProcParams.ReadStartInfo; } }
|
||||
@@ -115,6 +117,7 @@ namespace TBF.Rig.Output.DB.SensusOracle
|
||||
}
|
||||
}
|
||||
|
||||
IList<VtWztypSd> vtWztypSdList;
|
||||
|
||||
///
|
||||
/// The following 3 variables are always updated together
|
||||
@@ -145,23 +148,38 @@ namespace TBF.Rig.Output.DB.SensusOracle
|
||||
QualityDB = new OracleConnection(string.Format("Data Source={0};User Id={1};Password={2};", dbCfg.QualityDataSource, dbCfg.QualityUserId, dbCfg.QualityPassword));
|
||||
TestDB = new OracleConnection(string.Format("Data Source={0};User Id={1};Password={2};", dbCfg.TestDataSource, dbCfg.TestUserId, dbCfg.TestPassword));
|
||||
|
||||
vtWztypSdList = new List<VtWztypSd>();
|
||||
|
||||
///
|
||||
/// Do something with the database to see if the connection works well
|
||||
///
|
||||
if (dbCfg.DebugLevel == DebugMode.Normal)
|
||||
{
|
||||
var start = DateTime.Now;
|
||||
|
||||
SelectedDB.Open();
|
||||
|
||||
string rslt = "none";
|
||||
OracleCommand cmd = new OracleCommand("SELECT standort FROM anbieter_sd WHERE anbid = :1", ProductionDB);
|
||||
/// Get plant name
|
||||
string producer = "none";
|
||||
string plant = "nowhere";
|
||||
OracleCommand cmd = new OracleCommand("SELECT hersteller, standort FROM anbieter_sd WHERE anbid = :1", ProductionDB);
|
||||
cmd.Parameters.Add(new OracleParameter { OracleDbType = OracleDbType.Int32, Value = Anbid_Producer });
|
||||
OracleDataReader dr = cmd.ExecuteReader();
|
||||
if (dr.Read()) rslt = dr.GetString(0);
|
||||
if (dr.Read())
|
||||
{
|
||||
producer = dr.GetString(0);
|
||||
plant = dr.GetString(1);
|
||||
}
|
||||
dr.Close();
|
||||
|
||||
/// Get VT_WZTYP_SD content
|
||||
vtWztypSdList = ReadVtWztypSd(SelectedDB);
|
||||
|
||||
SelectedDB.Close();
|
||||
|
||||
log.FatalFormat("{0} initialized: {1}", Name, this);
|
||||
int seconds = Convert.ToInt32(Math.Round((DateTime.Now - start).TotalSeconds));
|
||||
|
||||
log.FatalFormat("{0} initialized in {1}s: {2} {3} {4}", Name, seconds, producer, plant, this);
|
||||
}
|
||||
else
|
||||
{
|
||||
@@ -172,7 +190,7 @@ namespace TBF.Rig.Output.DB.SensusOracle
|
||||
///
|
||||
/// IDevice interface implementation
|
||||
///
|
||||
public void RunDeviceBefore() { }
|
||||
public void RunDeviceBefore() {}
|
||||
public void RunDeviceAfter() {}
|
||||
///
|
||||
public void StopDevice()
|
||||
@@ -189,84 +207,33 @@ namespace TBF.Rig.Output.DB.SensusOracle
|
||||
/// </summary>
|
||||
/// <param name="conn">An open Oracle DB connection</param>
|
||||
/// <param name="wmTypeId">Water meter type Id</param>
|
||||
/// <param name="wmTypeRevision">Water meter type revision</param>
|
||||
/// <param name="found">Fond VT_VZTYP_SD record with wmTypeRevision</param>
|
||||
/// <returns>SensusTestInfos array</returns>
|
||||
public IList<SensusTestInfo> GetOracleTestInfo(OracleConnection conn, int wmTypeId, out int wmTypeRevision, out string wzTyp, out string metrolKlasse, out string zulasszeichen, out string materialNr, out double q3, out DateTime timeStamp, out string remark)
|
||||
public IList<SensusTestInfo> GetOracleTestInfo(OracleConnection conn, int wmTypeId, out VtWztypSd found)
|
||||
{
|
||||
///
|
||||
found = vtWztypSdList.FirstOrDefault<VtWztypSd>(x => x.IdWztyp == wmTypeId);
|
||||
if (found == null) return null;
|
||||
|
||||
if (found.ListOfTests == null)
|
||||
{
|
||||
found.ListOfTests = ReadVtPruefpunktSollSd(conn, wmTypeId, found.RevWztyp);
|
||||
}
|
||||
if (found.ListOfTests == null || found.ListOfTests.Count == 0) return null;
|
||||
|
||||
/// Read 'incomplete' TestInfo from Oracle database containing only flowId-s ad qBezeichnung-s
|
||||
///
|
||||
IList<SensusTestInfo> oraDbTinfos = new List<SensusTestInfo>();
|
||||
|
||||
///
|
||||
/// For a given 'wmTypeId' find the most recent active 'wmTypeRevision'
|
||||
///
|
||||
wmTypeRevision = -1;
|
||||
wzTyp = string.Empty;
|
||||
metrolKlasse = string.Empty;
|
||||
zulasszeichen = string.Empty;
|
||||
materialNr = string.Empty;
|
||||
q3 = 0;
|
||||
timeStamp = DateTime.MinValue;
|
||||
remark = string.Empty;
|
||||
|
||||
OracleCommand cmd = new OracleCommand("SELECT rev_wztyp, wztyp, metrolklasse, zulasszeichen, materialnr, qmax, aenderungsdatum, bemerkung " +
|
||||
"FROM vt_wztyp_sd " +
|
||||
"WHERE anbid=:1 AND id_wztyp=:2 AND aktiv=:3", conn);
|
||||
cmd.Parameters.Add(new OracleParameter { OracleDbType = OracleDbType.Int32, Value = Anbid_Producer });
|
||||
cmd.Parameters.Add(new OracleParameter { OracleDbType = OracleDbType.Int32, Value = wmTypeId }); ///:1
|
||||
cmd.Parameters.Add(new OracleParameter { OracleDbType = OracleDbType.Int32, Value = 1 }); ///:2
|
||||
///
|
||||
OracleDataReader dr = cmd.ExecuteReader();
|
||||
while (dr.Read())
|
||||
foreach (var test in found.ListOfTests)
|
||||
{
|
||||
wmTypeRevision = dr.GetInt32(0);
|
||||
wzTyp = dr.GetString(1);
|
||||
metrolKlasse = dr.GetString(2);
|
||||
zulasszeichen = dr.GetString(3);
|
||||
materialNr = dr.GetString(4);
|
||||
q3 = dr.GetDouble(5);
|
||||
timeStamp = dr.GetDateTime(6);
|
||||
remark = dr.GetString(7);
|
||||
}
|
||||
dr.Close();
|
||||
Range rng = (test.Pruefbereichmin == 90 && test.Pruefbereichmax == 100) ? Range.R90_100 :
|
||||
((test.Pruefbereichmin == 95 && test.Pruefbereichmax == 105) ? Range.R95_105 :
|
||||
((test.Pruefbereichmin == 100 && test.Pruefbereichmax == 110) ? Range.R100_110 : Range.Undefined));
|
||||
|
||||
if (wmTypeRevision == -1) return null; /// No 'wmTypeRevision' found
|
||||
var ti = new SensusTestInfo(test.Pruefungsnr, test.Qbezeichnung, Units.ConvertFrom(Unit.lph, test.Q_soll),
|
||||
Convert.ToInt32(test.Pruefzeit), test.Negfehlerkalt, test.Posfehlerkalt, rng);
|
||||
oraDbTinfos.Add(ti);
|
||||
|
||||
cmd = new OracleCommand("SELECT pruefungsnr, q_soll, pruefzeit, posfehlerkalt, negfehlerkalt, pruefbereichmin, pruefbereichmax, qbezeichnung " +
|
||||
"FROM vt_pruefpunkt_soll_sd " +
|
||||
"WHERE anbid=:1 AND id_wztyp=:2 AND rev_wztyp=:3", conn);
|
||||
cmd.Parameters.Add(new OracleParameter { OracleDbType = OracleDbType.Int32, Value = Anbid_Producer }); ///:1
|
||||
cmd.Parameters.Add(new OracleParameter { OracleDbType = OracleDbType.Int32, Value = wmTypeId }); ///:2
|
||||
cmd.Parameters.Add(new OracleParameter { OracleDbType = OracleDbType.Int32, Value = wmTypeRevision }); ///:3
|
||||
///
|
||||
dr = cmd.ExecuteReader();
|
||||
while (dr.Read())
|
||||
{
|
||||
int pruefungsNr = dr.GetInt32(0);
|
||||
double flow = Common.Units.ConvertFrom(Unit.lph, dr.GetDouble(1));
|
||||
int testTime = dr.GetInt32(2);
|
||||
double errLimHi = dr.GetDouble(3);
|
||||
double errLimLo = dr.GetDouble(4);
|
||||
int flowRangeMin = dr.GetInt32(5);
|
||||
int flowRangeMax = dr.GetInt32(6);
|
||||
string qBezeichnung = dr.GetString(7);
|
||||
|
||||
Range rng = (flowRangeMin == 90 && flowRangeMax == 100) ? Range.R90_100 :
|
||||
((flowRangeMin == 95 && flowRangeMax == 105) ? Range.R95_105 :
|
||||
((flowRangeMin == 100 && flowRangeMax == 110) ? Range.R100_110 : Range.Undefined));
|
||||
|
||||
oraDbTinfos.Add(new SensusTestInfo(pruefungsNr, qBezeichnung, flow, testTime, errLimLo, errLimHi, rng));
|
||||
}
|
||||
dr.Close();
|
||||
|
||||
if (oraDbTinfos.Count == 0) return null; /// No 'incomplete' TestInfo in Oracle DN for this 'wmTypeId' and 'wmTypeRevision'
|
||||
|
||||
oraDbTinfos = oraDbTinfos.OrderBy(x => x.PruefungsNrDB).ToList<SensusTestInfo>();
|
||||
|
||||
foreach (var ti in oraDbTinfos)
|
||||
{
|
||||
log.WarnFormat("VT_PRUEFPUNKT_SOLL_SD info : ID={0} Rev={1} PruefungsNr={2} QBezeichnung={3}", wmTypeId, wmTypeRevision, ti.PruefungsNrDB, ti.QBezeichnungDB);
|
||||
log.WarnFormat("VT_PRUEFPUNKT_SOLL_SD info : ID={0} Rev={1} PruefungsNr={2} QBezeichnung={3}",
|
||||
wmTypeId, found.RevWztyp, ti.PruefungsNrDB, ti.QBezeichnungDB);
|
||||
}
|
||||
|
||||
return oraDbTinfos;
|
||||
@@ -465,21 +432,14 @@ namespace TBF.Rig.Output.DB.SensusOracle
|
||||
///
|
||||
/// Currnet test info. is not walid => Get a new one from Oracle and SensusTestInfo table
|
||||
///
|
||||
int wmTR;
|
||||
string wzTypStr;
|
||||
string metroKlasse;
|
||||
string zulasszeichen;
|
||||
string materialNr;
|
||||
double q3 = 0;
|
||||
DateTime timeStamp;
|
||||
string remark;
|
||||
IList<SensusTestInfo> rti = GetOracleTestInfo(conn, wm.WaterMeterData.WMTypeId, out wmTR, out wzTypStr, out metroKlasse, out zulasszeichen, out materialNr, out q3, out timeStamp, out remark);
|
||||
VtWztypSd foundRecord;
|
||||
IList<SensusTestInfo> rti = GetOracleTestInfo(conn, wm.WaterMeterData.WMTypeId, out foundRecord);
|
||||
|
||||
if (rti != null)
|
||||
{
|
||||
/// All 5 updated together
|
||||
wmTypeId = wm.WaterMeterData.WMTypeId;
|
||||
wmTypeRevision = wmTR;
|
||||
wmTypeRevision = foundRecord.RevWztyp;
|
||||
procedureSignature = procedureSignatureSB.ToString();
|
||||
oracleTestInfo = rti;
|
||||
string tInfoName;
|
||||
@@ -720,7 +680,14 @@ namespace TBF.Rig.Output.DB.SensusOracle
|
||||
|
||||
try
|
||||
{
|
||||
SaveBatchData(conn, batch);
|
||||
VtWztypSd record = GetCompleteTestInfo(conn, batch);
|
||||
|
||||
if (oracleTestInfo == null || completeTestInfo == null || wmTypeId == 0 || wmTypeRevision == 0)
|
||||
{
|
||||
throw new Exception("No matching test infos found");
|
||||
}
|
||||
|
||||
SaveBatchData(conn, batch, record);
|
||||
foreach (var wMtr in batch.WaterMeters)
|
||||
{
|
||||
if (wmKind == WMKind.iPERL)
|
||||
@@ -800,60 +767,113 @@ namespace TBF.Rig.Output.DB.SensusOracle
|
||||
}
|
||||
|
||||
|
||||
|
||||
VtWztypSd GetCompleteTestInfo(OracleConnection conn, Results.Entities.Batch b)
|
||||
{
|
||||
if (IsAutoWMType && CreateWztypEntryIfMissing)
|
||||
{
|
||||
int idBenutzer = (Anbid_Producer == 4) ? 6 : 365;
|
||||
VtWztypSd recordFromBatch = VtWztypSd.FromBatch(b, idBenutzer);
|
||||
VtWztypSd existingRecord = vtWztypSdList.FirstOrDefault(x => VtWztypSd.AreEqual(x, recordFromBatch, this, conn));
|
||||
|
||||
if (existingRecord == null)
|
||||
{
|
||||
/// Appropriate record does not exist - create a new record from the batch and write it to the database
|
||||
|
||||
VtWztypSd sameNameRecord = vtWztypSdList.FirstOrDefault(x => x.Wztyp == recordFromBatch.Wztyp);
|
||||
|
||||
if (sameNameRecord != null)
|
||||
{
|
||||
/// Make record with the same name inactive
|
||||
OracleCommand cmd = new OracleCommand("UPDATE vt_wztyp_pd SET aktiv=:4 " +
|
||||
"WHERE anbid=:1 AND id_wztyp=:2 AND rev_wztyp=:3", conn);
|
||||
cmd.Parameters.Add(new OracleParameter { OracleDbType = OracleDbType.Int32, Value = Anbid_Producer }); /// :1
|
||||
cmd.Parameters.Add(new OracleParameter { OracleDbType = OracleDbType.Int32, Value = sameNameRecord.IdWztyp }); /// :2
|
||||
cmd.Parameters.Add(new OracleParameter { OracleDbType = OracleDbType.Int32, Value = sameNameRecord.RevWztyp }); /// :3
|
||||
cmd.Parameters.Add(new OracleParameter { OracleDbType = OracleDbType.Int32, Value = 0 }); /// :4
|
||||
|
||||
if (cmd.ExecuteNonQuery() != 1) throw (new Exception(string.Format("Failed to update vt_wztyp_pd record {0}/{1}",
|
||||
sameNameRecord.IdWztyp, sameNameRecord.RevWztyp)));
|
||||
/// IdWztyp and RevWztyp of the new record: new revision of the record with the same name
|
||||
recordFromBatch.IdWztyp = sameNameRecord.IdWztyp;
|
||||
recordFromBatch.RevWztyp = sameNameRecord.RevWztyp + 1;
|
||||
}
|
||||
else
|
||||
{
|
||||
/// There is no record with the same name
|
||||
/// Find max. value of IdWztyp in vtWztypSdList
|
||||
int maxIdWztyp = 0;
|
||||
foreach (var rec in vtWztypSdList) if (rec.IdWztyp > maxIdWztyp) maxIdWztyp = rec.IdWztyp;
|
||||
|
||||
/// IdWztyp and RevWztyp of the new record: A new IdWztyp
|
||||
recordFromBatch.IdWztyp = maxIdWztyp + 1;
|
||||
recordFromBatch.RevWztyp = 1;
|
||||
}
|
||||
|
||||
/// Save the new record
|
||||
WriteVtWztypSd(conn, recordFromBatch);
|
||||
vtWztypSdList.Insert(0, recordFromBatch);
|
||||
}
|
||||
else
|
||||
{
|
||||
/// Appropriate record exists
|
||||
recordFromBatch.IdWztyp = existingRecord.IdWztyp;
|
||||
recordFromBatch.RevWztyp = existingRecord.RevWztyp;
|
||||
}
|
||||
|
||||
return recordFromBatch;
|
||||
}
|
||||
else
|
||||
{
|
||||
IList<string> wmTestNames = new List<string>();
|
||||
StringBuilder procedureSignatureSB = new StringBuilder();
|
||||
foreach (var tr in b.RegularTestRslts())
|
||||
{
|
||||
wmTestNames.Add(tr.Name());
|
||||
procedureSignatureSB.Append(tr.Name());
|
||||
procedureSignatureSB.Append("~");
|
||||
}
|
||||
|
||||
if (oracleTestInfo == null ||
|
||||
wmTypeId != b.WaterMeters[0].WaterMeterData.WMTypeId ||
|
||||
wmTypeRevision == 0 ||
|
||||
procedureSignature != procedureSignatureSB.ToString())
|
||||
{
|
||||
VtWztypSd foundRecord;
|
||||
IList<SensusTestInfo> ti = GetOracleTestInfo(conn, b.WaterMeters[0].WaterMeterData.WMTypeId, out foundRecord);
|
||||
|
||||
if (ti != null)
|
||||
{
|
||||
/// All 5 updated together
|
||||
wmTypeId = b.WaterMeters[0].WaterMeterData.WMTypeId;
|
||||
wmTypeRevision = foundRecord.RevWztyp;
|
||||
procedureSignature = procedureSignatureSB.ToString();
|
||||
oracleTestInfo = ti;
|
||||
completeTestInfo = SensusTestInfo.GetBestMatch(oracleTestInfo, wmTestNames);
|
||||
|
||||
foreach (var cti in completeTestInfo)
|
||||
{
|
||||
log.WarnFormat("Selected test info : ID={0} Rev={1} Test={2} PrfNrDB={3} QBzDB={4} PrfNrOpto={5} QBzOpto={6} PrfNrLog={7} QBzLog={8} Range={9}", wmTypeId, wmTypeRevision,
|
||||
cti.TestName, cti.PruefungsNrDB, cti.QBezeichnungDB, cti.PruefungsNrOpto, cti.QBezeichnungOpto, cti.PruefungsNrLog, cti.QBezeichnungLog, cti.Range);
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
throw new Exception("No matching test infos found");
|
||||
}
|
||||
}
|
||||
|
||||
return null;
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
/// <summary>
|
||||
/// Save common batch data
|
||||
/// </summary>
|
||||
/// <param name="b">Batch</param>
|
||||
void SaveBatchData(OracleConnection conn, Results.Entities.Batch b)
|
||||
void SaveBatchData(OracleConnection conn, Results.Entities.Batch b, VtWztypSd record = null)
|
||||
{
|
||||
IList<string> wmTestNames = new List<string>();
|
||||
StringBuilder procedureSignatureSB = new StringBuilder();
|
||||
foreach (var tr in b.RegularTestRslts())
|
||||
{
|
||||
wmTestNames.Add(tr.Name());
|
||||
procedureSignatureSB.Append(tr.Name());
|
||||
procedureSignatureSB.Append("~");
|
||||
}
|
||||
|
||||
if ((oracleTestInfo == null) || (wmTypeId != b.WaterMeters[0].WaterMeterData.WMTypeId) || (wmTypeRevision == 0) || (procedureSignature != procedureSignatureSB.ToString()))
|
||||
{
|
||||
int wmTR = 0;
|
||||
string wzTypStr;
|
||||
string metroKlasse;
|
||||
string zulasszeichen;
|
||||
string materialNr;
|
||||
double q3 = 0;
|
||||
DateTime timeStamp;
|
||||
string remark;
|
||||
IList<SensusTestInfo> ti = GetOracleTestInfo(conn, b.WaterMeters[0].WaterMeterData.WMTypeId, out wmTR, out wzTypStr, out metroKlasse, out zulasszeichen, out materialNr, out q3, out timeStamp, out remark);
|
||||
|
||||
if (ti != null)
|
||||
{
|
||||
/// All 5 updated together
|
||||
wmTypeId = b.WaterMeters[0].WaterMeterData.WMTypeId;
|
||||
wmTypeRevision = wmTR;
|
||||
procedureSignature = procedureSignatureSB.ToString();
|
||||
oracleTestInfo = ti;
|
||||
completeTestInfo = SensusTestInfo.GetBestMatch(oracleTestInfo, wmTestNames);
|
||||
|
||||
foreach (var cti in completeTestInfo)
|
||||
{
|
||||
log.WarnFormat("Selected test info : ID={0} Rev={1} Test={2} PrfNrDB={3} QBzDB={4} PrfNrOpto={5} QBzOpto={6} PrfNrLog={7} QBzLog={8} Range={9}", wmTypeId, wmTypeRevision,
|
||||
cti.TestName, cti.PruefungsNrDB, cti.QBezeichnungDB, cti.PruefungsNrOpto, cti.QBezeichnungOpto, cti.PruefungsNrLog, cti.QBezeichnungLog, cti.Range);
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
throw new Exception("No matching test infos found");
|
||||
}
|
||||
}
|
||||
|
||||
if (oracleTestInfo == null || completeTestInfo == null || wmTypeId == 0 || wmTypeRevision == 0)
|
||||
{
|
||||
throw new Exception("No matching test infos found");
|
||||
}
|
||||
|
||||
|
||||
if (dbCfg.DebugLevel == DebugMode.Normal)
|
||||
{
|
||||
OracleCommand cmd = new OracleCommand("INSERT INTO vt_pruefreihe_pd(anbid, id_pruefstand, id_wzpruefreihe, id_wztyp," +
|
||||
@@ -888,13 +908,17 @@ namespace TBF.Rig.Output.DB.SensusOracle
|
||||
log.WarnFormat("SIM: VT_PRUEFREIHE_PD inserted, BatchNr={0}, TypeId={1}, TypeRev={2}, Start={3}", b.BatchNr, b.WaterMeters[0].WaterMeterData.WMTypeId, wmTypeRevision, b.StartTime);
|
||||
}
|
||||
|
||||
foreach (var testInfo in completeTestInfo)
|
||||
int testsCount = (record != null) ? record.ListOfTests.Count : completeTestInfo.Length;
|
||||
for (int i = 0; i < testsCount; i++)
|
||||
{
|
||||
if ((testInfo.PruefungsNrDB != 0) && (-20 <= testInfo.PruefungsNrDB) && (testInfo.PruefungsNrDB <= 20)) /// LU PruefungsNr-s are between -20 and 20
|
||||
{
|
||||
Results.Entities.TestRslt tr = b.GetTestRslt(testInfo.TestName, 0);
|
||||
int pruefungsnr = (record != null) ? record.ListOfTests[i].Pruefungsnr : completeTestInfo[i].PruefungsNrDB;
|
||||
string testName = (record != null) ? record.ListOfTests[i].Qbezeichnung : completeTestInfo[i].TestName;
|
||||
|
||||
if (tr == null) tr = b.GetTestRslt(testInfo.TestName, 1); /// TODO: Remove this workaround for large watermeters with multiple parts at Q3
|
||||
if (pruefungsnr >= -20 && pruefungsnr <= 20 && pruefungsnr != 0) /// LU PruefungsNr-s are between -20 and 20
|
||||
{
|
||||
Results.Entities.TestRslt tr = b.GetTestRslt(testName, 0);
|
||||
|
||||
if (tr == null) tr = b.GetTestRslt(testName, 1); /// TODO: Remove this workaround for large watermeters with multiple parts at Q3
|
||||
if (tr == null) continue;
|
||||
|
||||
double Q_ist = (tr.VolumeMaster != 0) ? (tr.FlowVolume * tr.VolumeCTV / tr.VolumeMaster) : (double)tr.FlowVolume;
|
||||
@@ -910,12 +934,11 @@ namespace TBF.Rig.Output.DB.SensusOracle
|
||||
cmd.Parameters.Add(new OracleParameter { OracleDbType = OracleDbType.Int32, Value = Anbid_Producer });
|
||||
cmd.Parameters.Add(new OracleParameter { OracleDbType = OracleDbType.Int32, Value = dbCfg.TestBenchGroupId + b.TestBenchId });
|
||||
cmd.Parameters.Add(new OracleParameter { OracleDbType = OracleDbType.Int32, Value = b.BatchNr });
|
||||
cmd.Parameters.Add(new OracleParameter { OracleDbType = OracleDbType.Int32, Value = testInfo.PruefungsNr });
|
||||
cmd.Parameters.Add(new OracleParameter { OracleDbType = OracleDbType.Int32, Value = pruefungsnr });
|
||||
cmd.Parameters.Add(new OracleParameter { OracleDbType = OracleDbType.Double, Value = Units.ConvertTo(Unit.l, tr.VolumeCTV) });
|
||||
cmd.Parameters.Add(new OracleParameter { OracleDbType = OracleDbType.Double, Value = Units.ConvertTo(Unit.kg, tr.MassEnd - tr.MassStart) });
|
||||
cmd.Parameters.Add(new OracleParameter { OracleDbType = OracleDbType.Double, Value = Units.ConvertTo(Unit.lph, tr.FlowMin) });
|
||||
cmd.Parameters.Add(new OracleParameter { OracleDbType = OracleDbType.Double, Value = Units.ConvertTo(Unit.lph, tr.FlowMax) });
|
||||
double Q_ist = (tr.VolumeMaster != 0) ? (tr.FlowVolume * tr.VolumeCTV / tr.VolumeMaster) : (double)tr.FlowVolume;
|
||||
cmd.Parameters.Add(new OracleParameter { OracleDbType = OracleDbType.Double, Value = Units.ConvertTo(Unit.lph, Q_ist) });
|
||||
cmd.Parameters.Add(new OracleParameter { OracleDbType = OracleDbType.Double, Value = tr.ConstMaster });
|
||||
cmd.Parameters.Add(new OracleParameter { OracleDbType = OracleDbType.Double, Value = Units.ConvertTo(Unit.lph, tr.FlowVolume) });
|
||||
@@ -939,41 +962,37 @@ namespace TBF.Rig.Output.DB.SensusOracle
|
||||
" tvwz, ivwz, verwendeter_vz, beginngewicht, endgewicht) " +
|
||||
"VALUES (:1, :2, :3, :4, :5, :6, :7, :8, :9, :10, :11, :12, :13, :14, :15, :16, :17, :18, :19, :20, :21, :22, :23)", conn);
|
||||
OracleParameter parm;
|
||||
parm = new OracleParameter("ANBID", OracleDbType.Int32); parm.Value = Anbid_Producer; cmd2.Parameters.Add(parm); ///:1
|
||||
parm = new OracleParameter("ID_Pruefstand", OracleDbType.Int32); parm.Value = dbCfg.TestBenchGroupId + 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 = testInfo.PruefungsNrDB; 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
|
||||
parm = new OracleParameter("MinDurchfluss", OracleDbType.Double); parm.Value = Units.ConvertTo(Unit.lph, tr.FlowMin); cmd2.Parameters.Add(parm); ///:7
|
||||
parm = new OracleParameter("MaxDurchfluss", OracleDbType.Double); parm.Value = Units.ConvertTo(Unit.lph, tr.FlowMax); cmd2.Parameters.Add(parm); ///:8
|
||||
|
||||
parm = new OracleParameter("Q_ist", OracleDbType.Double); parm.Value = Units.ConvertTo(Unit.lph, Q_ist); cmd2.Parameters.Add(parm); ///:9
|
||||
parm = new OracleParameter("KFaktor", OracleDbType.Double); parm.Value = tr.ConstMaster; cmd2.Parameters.Add(parm); ///:10
|
||||
parm = new OracleParameter("Q_VZ", OracleDbType.Double); parm.Value = Units.ConvertTo(Unit.lph, tr.FlowVolume); cmd2.Parameters.Add(parm); ///:11
|
||||
parm = new OracleParameter("F_VZ", OracleDbType.Double); parm.Value = tr.ErrorMaster; cmd2.Parameters.Add(parm); ///:12
|
||||
parm = new OracleParameter("RegelEinstellZeit", OracleDbType.Double); parm.Value = (double)tr.FlowSetTime; cmd2.Parameters.Add(parm); ///:13
|
||||
parm = new OracleParameter("Drehzahl", OracleDbType.Int32); parm.Value = 0; /* TODO */ cmd2.Parameters.Add(parm); ///:14
|
||||
///
|
||||
parm = new OracleParameter("BeginnDruck_Vorne", OracleDbType.Double); parm.Value = Units.ConvertTo(Unit.bar, tr.PressUpStart); cmd2.Parameters.Add(parm); ///:15
|
||||
parm = new OracleParameter("BeginnDruck_Hinten", OracleDbType.Double); parm.Value = Units.ConvertTo(Unit.bar, tr.PressDownStart); cmd2.Parameters.Add(parm); ///:16
|
||||
parm = new OracleParameter("EndDruck_Vorne", OracleDbType.Double); parm.Value = Units.ConvertTo(Unit.bar, tr.PressUpEnd); cmd2.Parameters.Add(parm); ///:17
|
||||
parm = new OracleParameter("EndDruck_Hinten", OracleDbType.Double); parm.Value = Units.ConvertTo(Unit.bar, tr.PressDownEnd); cmd2.Parameters.Add(parm); ///:18
|
||||
///
|
||||
parm = new OracleParameter("TVWZ", OracleDbType.Double); parm.Value = tr.TestTime; cmd2.Parameters.Add(parm); ///:19
|
||||
parm = new OracleParameter("IVWZ", OracleDbType.Int32); parm.Value = tr.PulsesMaster; cmd2.Parameters.Add(parm); ///:20
|
||||
parm = new OracleParameter("Verwendeter_VZ", OracleDbType.Int32); parm.Value = 0; /* TODO */ cmd2.Parameters.Add(parm); ///:21
|
||||
parm = new OracleParameter("BeginnGewicht", OracleDbType.Double); parm.Value = Units.ConvertTo(Unit.kg, tr.MassStart); cmd2.Parameters.Add(parm); ///:22
|
||||
parm = new OracleParameter("EndGewicht", OracleDbType.Double); parm.Value = Units.ConvertTo(Unit.kg, tr.MassEnd); cmd2.Parameters.Add(parm); ///:23
|
||||
parm = cmd2.Parameters.Add(new OracleParameter { OracleDbType = OracleDbType.Int32, Value = Anbid_Producer }); ///:1
|
||||
parm = cmd2.Parameters.Add(new OracleParameter { OracleDbType = OracleDbType.Int32, Value = dbCfg.TestBenchGroupId + b.TestBenchId }); ///:2
|
||||
parm = cmd2.Parameters.Add(new OracleParameter { OracleDbType = OracleDbType.Int32, Value = b.BatchNr }); ///:3
|
||||
parm = cmd2.Parameters.Add(new OracleParameter { OracleDbType = OracleDbType.Int32, Value = pruefungsnr }); ///:4
|
||||
parm = cmd2.Parameters.Add(new OracleParameter { OracleDbType = OracleDbType.Double, Value = Units.ConvertTo(Unit.l, tr.VolumeCTV) }); ///:5
|
||||
parm = cmd2.Parameters.Add(new OracleParameter { OracleDbType = OracleDbType.Double, Value = Units.ConvertTo(Unit.kg, tr.MassEnd - tr.MassStart) }); ///:6
|
||||
parm = cmd2.Parameters.Add(new OracleParameter { OracleDbType = OracleDbType.Double, Value = Units.ConvertTo(Unit.lph, tr.FlowMin) }); ///:7
|
||||
parm = cmd2.Parameters.Add(new OracleParameter { OracleDbType = OracleDbType.Double, Value = Units.ConvertTo(Unit.lph, tr.FlowMax) }); ///:8
|
||||
parm = cmd2.Parameters.Add(new OracleParameter { OracleDbType = OracleDbType.Double, Value = Units.ConvertTo(Unit.lph, Q_ist) }); ///:9
|
||||
parm = cmd2.Parameters.Add(new OracleParameter { OracleDbType = OracleDbType.Double, Value = tr.ConstMaster }); ///:10
|
||||
parm = cmd2.Parameters.Add(new OracleParameter { OracleDbType = OracleDbType.Double, Value = Units.ConvertTo(Unit.lph, tr.FlowVolume) }); ///:11
|
||||
parm = cmd2.Parameters.Add(new OracleParameter { OracleDbType = OracleDbType.Double, Value = tr.ErrorMaster }); ///:12
|
||||
parm = cmd2.Parameters.Add(new OracleParameter { OracleDbType = OracleDbType.Double, Value = (double)tr.FlowSetTime }); ///:13
|
||||
parm = cmd2.Parameters.Add(new OracleParameter { OracleDbType = OracleDbType.Int32, Value = 0 /* TODO */ }); ///:14
|
||||
parm = cmd2.Parameters.Add(new OracleParameter { OracleDbType = OracleDbType.Double, Value = Units.ConvertTo(Unit.bar, tr.PressUpStart) }); ///:15
|
||||
parm = cmd2.Parameters.Add(new OracleParameter { OracleDbType = OracleDbType.Double, Value = Units.ConvertTo(Unit.bar, tr.PressDownStart) }); ///:16
|
||||
parm = cmd2.Parameters.Add(new OracleParameter { OracleDbType = OracleDbType.Double, Value = Units.ConvertTo(Unit.bar, tr.PressUpEnd) }); ///:17
|
||||
parm = cmd2.Parameters.Add(new OracleParameter { OracleDbType = OracleDbType.Double, Value = Units.ConvertTo(Unit.bar, tr.PressDownEnd) }); ///:18
|
||||
parm = cmd2.Parameters.Add(new OracleParameter { OracleDbType = OracleDbType.Double, Value = tr.TestTime }); ///:19
|
||||
parm = cmd2.Parameters.Add(new OracleParameter { OracleDbType = OracleDbType.Int32, Value = tr.PulsesMaster }); ///:20
|
||||
parm = cmd2.Parameters.Add(new OracleParameter { OracleDbType = OracleDbType.Int32, Value = 0 /* TODO */ }); ///:21
|
||||
parm = cmd2.Parameters.Add(new OracleParameter { OracleDbType = OracleDbType.Double, Value = Units.ConvertTo(Unit.kg, tr.MassStart) }); ///:22
|
||||
parm = cmd2.Parameters.Add(new OracleParameter { OracleDbType = OracleDbType.Double, Value = Units.ConvertTo(Unit.kg, tr.MassEnd) }); ///:23
|
||||
///
|
||||
cmd2.ExecuteNonQuery(); /// Returns nr. of updated rows
|
||||
log.InfoFormat("VT_PRUEFDURCHFLUSS_PD inserted ({0}, {1}, {2}, {3}, {4} ...)", Anbid_Producer, dbCfg.TestBenchGroupId + b.TestBenchId, b.BatchNr, testInfo.PruefungsNrDB, Q_ist);
|
||||
log.InfoFormat("VT_PRUEFDURCHFLUSS_PD inserted ({0}, {1}, {2}, {3}, {4} ...)", Anbid_Producer, dbCfg.TestBenchGroupId + b.TestBenchId, b.BatchNr, pruefungsnr, Q_ist);
|
||||
#endif
|
||||
}
|
||||
else
|
||||
{
|
||||
log.WarnFormat("SIM: VT_PRUEFDURCHFLUSS_PD inserted ({0}, {1}, {2}, {3}, {4} ...)", Anbid_Producer, dbCfg.TestBenchGroupId + b.TestBenchId, b.BatchNr, testInfo.PruefungsNrDB, Q_ist);
|
||||
log.WarnFormat("SIM: VT_PRUEFDURCHFLUSS_PD inserted ({0}, {1}, {2}, {3}, {4} ...)", Anbid_Producer, dbCfg.TestBenchGroupId + b.TestBenchId, b.BatchNr, pruefungsnr, Q_ist);
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -1648,5 +1667,198 @@ namespace TBF.Rig.Output.DB.SensusOracle
|
||||
return 0;
|
||||
}
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Get VT_WZTYP_SD content
|
||||
/// </summary>
|
||||
/// <param name="conn">Oracle connection</param>
|
||||
/// <param name="aktiv">Active flag</param>
|
||||
/// <returns>List of VtWztypSd records</returns>
|
||||
public IList<VtWztypSd> ReadVtWztypSd(OracleConnection conn, bool aktiv = true)
|
||||
{
|
||||
var cmd = new OracleCommand("SELECT id_wztyp, rev_wztyp, wztyp, art, metrolklasse, zulasszeichen, impulsrate," +
|
||||
" kontaktwert, warmpruefen, optikaufsetzen, formatausdruck, formatetikett, formatnetzwerk," +
|
||||
" formatzaehlernr, id_wzgruppe, anzahlpruefungen, materialnr, qmax, pruefart, zaehlerflag," +
|
||||
" korrekturwert, id_benutzer, aenderungsdatum, bemerkung, verwendet " +
|
||||
"FROM vt_wztyp_sd " +
|
||||
"WHERE anbid=:1 AND aktiv=:2 ORDER BY rev_wztyp DESC", conn);
|
||||
cmd.Parameters.Add(new OracleParameter { OracleDbType = OracleDbType.Int32, Value = Anbid_Producer }); /// :1
|
||||
cmd.Parameters.Add(new OracleParameter { OracleDbType = OracleDbType.Int32, Value = aktiv ? 1 : 0 }); /// :2
|
||||
///
|
||||
var dr = cmd.ExecuteReader();
|
||||
var list = new List<VtWztypSd>();
|
||||
while (dr.Read())
|
||||
{
|
||||
var proc = new VtWztypSd();
|
||||
|
||||
int i = 0;
|
||||
try { proc.IdWztyp = dr.GetInt32(i++); } catch { proc.IdWztyp = 0; }
|
||||
try { proc.RevWztyp = dr.GetInt32(i++); } catch { proc.RevWztyp = 0; }
|
||||
try { proc.Wztyp = dr.GetString(i++); } catch { proc.Wztyp = string.Empty; }
|
||||
try { proc.Art = dr.GetString(i++); } catch { proc.Art = string.Empty; }
|
||||
try { proc.Metrolklasse = dr.GetString(i++); } catch { proc.Metrolklasse = string.Empty; }
|
||||
try { proc.Zulasszeichen = dr.GetString(i++); } catch { proc.Zulasszeichen = string.Empty; }
|
||||
try { proc.Impulsrate = dr.GetDouble(i++); } catch { proc.Impulsrate = 0; }
|
||||
try { proc.Kontaktwert = dr.GetDouble(i++); } catch { proc.Kontaktwert = 0; }
|
||||
try { proc.Warmpruefen = dr.GetBoolean(i++); } catch { proc.Warmpruefen = false; }
|
||||
try { proc.Optikaufsetzen = dr.GetBoolean(i++); } catch { proc.Optikaufsetzen = false; }
|
||||
try { proc.Formatausdruck = dr.GetString(i++); } catch { proc.Formatausdruck = string.Empty; }
|
||||
try { proc.Formatetikett = dr.GetString(i++); } catch { proc.Formatetikett = string.Empty; }
|
||||
try { proc.Formatnetzwerk = dr.GetString(i++); } catch { proc.Formatnetzwerk = string.Empty; }
|
||||
try { proc.Formatzaehlernr = dr.GetString(i++); } catch { proc.Formatzaehlernr = string.Empty; }
|
||||
try { proc.IdWzgruppe = dr.GetInt32(i++); } catch { proc.IdWzgruppe = 0; }
|
||||
try { proc.Anzahlpruefungen = dr.GetInt32(i++); } catch { proc.Anzahlpruefungen = 0; }
|
||||
try { proc.Materialnr = dr.GetString(i++); } catch { proc.Materialnr = string.Empty; }
|
||||
try { proc.Qmax = dr.GetFloat(i++); } catch { proc.Qmax = 0; }
|
||||
try { proc.Pruefart = dr.GetByte(i++); } catch { proc.Pruefart = 0; }
|
||||
try { proc.Zaehlerflag = dr.GetByte(i++); } catch { proc.Zaehlerflag = 0; }
|
||||
try { proc.Korrekturwert = dr.GetDouble(i++); } catch { proc.Korrekturwert = 0; }
|
||||
try { proc.IdBenutzer = dr.GetInt32(i++); } catch { proc.IdBenutzer = 0; }
|
||||
try { proc.Aenderungsdatum = dr.GetDateTime(i++); } catch { proc.Aenderungsdatum = DateTime.Now; }
|
||||
try { proc.Bemerkung = dr.GetString(i++); } catch { proc.Bemerkung = string.Empty; }
|
||||
try { proc.Verwendet = dr.GetBoolean(i++); } catch { proc.Verwendet = false; }
|
||||
|
||||
list.Add(proc);
|
||||
}
|
||||
dr.Close();
|
||||
|
||||
return list;
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Insert a record to VT_WZTYP_SD
|
||||
/// </summary>
|
||||
/// <param name="conn">Oracle connection</param>
|
||||
/// <param name="aktiv">Active flag</param>
|
||||
/// <returns>List of VtWztypSd records</returns>
|
||||
public void WriteVtWztypSd(OracleConnection conn, VtWztypSd record, bool aktiv = true)
|
||||
{
|
||||
var cmd = new OracleCommand("INSERT INTO vt_wztyp_sd(anbid, id_wztyp, rev_wztyp, wztyp, art, metrolklasse, zulasszeichen," +
|
||||
" impulsrate, kontaktwert, warmpruefen, optikaufsetzen, formatausdruck, formatetikett," +
|
||||
" formatnetzwerk, formatzaehlernr, id_wzgruppe, anzahlpruefungen, materialnr, qmax, pruefart," +
|
||||
" zaehlerflag, korrekturwert, id_benutzer, aenderungsdatum, bemerkung, verwendet, aktiv) " +
|
||||
"FROM vt_wztyp_sd " +
|
||||
"VALUES (:1, :2, :3, :4, :5, :6, :7, :8, :9, :10, :11, :12, :13, :14, :15, :16, :17, :18, :19, :20," +
|
||||
" :21, :22, :23, :24, :25, :26, :27)", conn);
|
||||
cmd.Parameters.Add(new OracleParameter { OracleDbType = OracleDbType.Int32, Value = Anbid_Producer }); /// :1
|
||||
cmd.Parameters.Add(new OracleParameter { OracleDbType = OracleDbType.Int32, Value = record.IdWztyp }); /// :2
|
||||
cmd.Parameters.Add(new OracleParameter { OracleDbType = OracleDbType.Int32, Value = record.RevWztyp }); /// :3
|
||||
cmd.Parameters.Add(new OracleParameter { OracleDbType = OracleDbType.Varchar2, Value = record.Wztyp }); /// :4
|
||||
cmd.Parameters.Add(new OracleParameter { OracleDbType = OracleDbType.Varchar2, Value = record.Art }); /// :5
|
||||
cmd.Parameters.Add(new OracleParameter { OracleDbType = OracleDbType.Varchar2, Value = record.Metrolklasse }); /// :6
|
||||
cmd.Parameters.Add(new OracleParameter { OracleDbType = OracleDbType.Varchar2, Value = record.Zulasszeichen }); /// :7
|
||||
cmd.Parameters.Add(new OracleParameter { OracleDbType = OracleDbType.Double, Value = record.Impulsrate }); /// :8
|
||||
cmd.Parameters.Add(new OracleParameter { OracleDbType = OracleDbType.Double, Value = record.Kontaktwert }); /// :9
|
||||
cmd.Parameters.Add(new OracleParameter { OracleDbType = OracleDbType.Int32, Value = record.Warmpruefen ? 1 : 0 }); /// :10
|
||||
cmd.Parameters.Add(new OracleParameter { OracleDbType = OracleDbType.Int32, Value = record.Optikaufsetzen ? 1 : 0 }); /// :11
|
||||
cmd.Parameters.Add(new OracleParameter { OracleDbType = OracleDbType.Varchar2, Value = record.Formatausdruck }); /// :12
|
||||
cmd.Parameters.Add(new OracleParameter { OracleDbType = OracleDbType.Varchar2, Value = record.Formatetikett }); /// :13
|
||||
cmd.Parameters.Add(new OracleParameter { OracleDbType = OracleDbType.Varchar2, Value = record.Formatnetzwerk }); /// :14
|
||||
cmd.Parameters.Add(new OracleParameter { OracleDbType = OracleDbType.Varchar2, Value = record.Formatzaehlernr }); /// :15
|
||||
cmd.Parameters.Add(new OracleParameter { OracleDbType = OracleDbType.Int32, Value = record.IdWzgruppe }); /// :16
|
||||
cmd.Parameters.Add(new OracleParameter { OracleDbType = OracleDbType.Int32, Value = record.Anzahlpruefungen }); /// :17
|
||||
cmd.Parameters.Add(new OracleParameter { OracleDbType = OracleDbType.Varchar2, Value = record.Materialnr }); /// :18
|
||||
cmd.Parameters.Add(new OracleParameter { OracleDbType = OracleDbType.Single, Value = record.Qmax }); /// :19
|
||||
cmd.Parameters.Add(new OracleParameter { OracleDbType = OracleDbType.Int32, Value = record.Pruefart }); /// :20
|
||||
cmd.Parameters.Add(new OracleParameter { OracleDbType = OracleDbType.Int32, Value = record.Zaehlerflag }); /// :21
|
||||
cmd.Parameters.Add(new OracleParameter { OracleDbType = OracleDbType.Double, Value = record.Korrekturwert }); /// :22
|
||||
cmd.Parameters.Add(new OracleParameter { OracleDbType = OracleDbType.Int32, Value = record.IdBenutzer }); /// :23
|
||||
cmd.Parameters.Add(new OracleParameter { OracleDbType = OracleDbType.TimeStamp, Value = record.Aenderungsdatum }); /// :24
|
||||
cmd.Parameters.Add(new OracleParameter { OracleDbType = OracleDbType.Varchar2, Value = record.Bemerkung }); /// :25
|
||||
cmd.Parameters.Add(new OracleParameter { OracleDbType = OracleDbType.Int32, Value = record.Verwendet ? 1 : 0 }); /// :26
|
||||
cmd.Parameters.Add(new OracleParameter { OracleDbType = OracleDbType.Int32, Value = aktiv ? 1 : 0 }); /// :27
|
||||
///
|
||||
var rowsUpdated = cmd.ExecuteNonQuery();
|
||||
|
||||
if (rowsUpdated == 1)
|
||||
{
|
||||
foreach (var test in record.ListOfTests)
|
||||
{
|
||||
WriteVtPruefpunktSollSd(conn, test, record.IdWztyp, record.RevWztyp);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Get VT_PRUEFPUNKT_SOLL_SD content
|
||||
/// </summary>
|
||||
/// <param name="conn">Oracle connection</param>
|
||||
/// <param name="aktiv">WM type Id</param>
|
||||
/// <param name="aktiv">WM type revision</param>
|
||||
/// <returns>List of VtWztypSd records</returns>
|
||||
public IList<VtPruefpunktSollSd> ReadVtPruefpunktSollSd(OracleConnection conn, int id_wztyp, int rev_wztyp)
|
||||
{
|
||||
var cmd = new OracleCommand("SELECT pruefungsnr, q_soll, pruefzeit, posfehlerkalt, negfehlerkalt," +
|
||||
" posfehlerwarm, negfehlerwarm, pruefbereichmin, pruefbereichmax," +
|
||||
" qbezeichnung, mindruck, fkorrektur, maxdruck " +
|
||||
"FROM vt_pruefpunkt_soll_sd " +
|
||||
"WHERE anbid=:1 AND id_wztyp=:2 AND rev_wztyp=:3 ORDER BY pruefungsnr DESC", conn);
|
||||
cmd.Parameters.Add(new OracleParameter { OracleDbType = OracleDbType.Int32, Value = Anbid_Producer }); /// :1
|
||||
cmd.Parameters.Add(new OracleParameter { OracleDbType = OracleDbType.Int32, Value = id_wztyp }); /// :2
|
||||
cmd.Parameters.Add(new OracleParameter { OracleDbType = OracleDbType.Int32, Value = rev_wztyp }); /// :3
|
||||
///
|
||||
var dr = cmd.ExecuteReader();
|
||||
var list = new List<VtPruefpunktSollSd>();
|
||||
while (dr.Read())
|
||||
{
|
||||
var tst = new VtPruefpunktSollSd();
|
||||
|
||||
int i = 0;
|
||||
try { tst.Pruefungsnr = dr.GetInt32(i++); } catch { tst.Pruefungsnr = 0; }
|
||||
try { tst.Q_soll = dr.GetFloat(i++); } catch { tst.Q_soll = 0; }
|
||||
try { tst.Pruefzeit = dr.GetFloat(i++); } catch { tst.Pruefzeit = 0; }
|
||||
try { tst.Posfehlerkalt = dr.GetFloat(i++); } catch { tst.Posfehlerkalt = 0; }
|
||||
try { tst.Negfehlerkalt = dr.GetFloat(i++); } catch { tst.Negfehlerkalt = 0; }
|
||||
try { tst.Posfehlerwarm = dr.GetFloat(i++); } catch { tst.Posfehlerwarm = 0; }
|
||||
try { tst.Negfehlerwarm = dr.GetFloat(i++); } catch { tst.Negfehlerwarm = 0; }
|
||||
try { tst.Pruefbereichmin = dr.GetInt32(i++); } catch { tst.Pruefbereichmin = 0; }
|
||||
try { tst.Pruefbereichmax = dr.GetInt32(i++); } catch { tst.Pruefbereichmax = 0; }
|
||||
try { tst.Qbezeichnung = dr.GetString(i++); } catch { tst.Qbezeichnung = string.Empty; }
|
||||
try { tst.Mindruck = dr.GetFloat(i++); } catch { tst.Mindruck = 0; }
|
||||
try { tst.Fkorrektur = dr.GetFloat(i++); } catch { tst.Fkorrektur = 0; }
|
||||
try { tst.Maxdruck = dr.GetFloat(i++); } catch { tst.Maxdruck = 0; }
|
||||
|
||||
if (tst.Pruefungsnr >= 0)
|
||||
list.Add(tst);
|
||||
else
|
||||
list.Insert(0, tst);
|
||||
}
|
||||
|
||||
return list;
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Insert a record to VT_PRUEFPUNKT_SOLL_SD
|
||||
/// </summary>
|
||||
/// <param name="conn">Oracle connection</param>
|
||||
/// <param name="record">Record to be written</param>
|
||||
/// <param name="aktiv">WM type Id</param>
|
||||
/// <param name="aktiv">WM type revision</param>
|
||||
/// <returns>List of VtWztypSd records</returns>
|
||||
public void WriteVtPruefpunktSollSd(OracleConnection conn, VtPruefpunktSollSd record, int id_wztyp, int rev_wztyp)
|
||||
{
|
||||
var cmd = new OracleCommand("INSERT INTO vt_pruefpunkt_soll_sd(anbid, id_wztyp, rev_wztyp, pruefungsnr, q_soll, pruefzeit," +
|
||||
" posfehlerkalt, negfehlerkalt, posfehlerwarm, negfehlerwarm, pruefbereichmin, pruefbereichmax," +
|
||||
" qbezeichnung, mindruck, fkorrektur, maxdruck) " +
|
||||
"VALUES (:1, :2, :3, :4, :5, :6, :7, :8, :9, :10, :11, :12, :13, :14, :15, :16)", conn);
|
||||
cmd.Parameters.Add(new OracleParameter { OracleDbType = OracleDbType.Int32, Value = Anbid_Producer }); /// :1
|
||||
cmd.Parameters.Add(new OracleParameter { OracleDbType = OracleDbType.Int32, Value = id_wztyp }); /// :2
|
||||
cmd.Parameters.Add(new OracleParameter { OracleDbType = OracleDbType.Int32, Value = rev_wztyp }); /// :3
|
||||
cmd.Parameters.Add(new OracleParameter { OracleDbType = OracleDbType.Int32, Value = record.Pruefungsnr }); /// :4
|
||||
cmd.Parameters.Add(new OracleParameter { OracleDbType = OracleDbType.Single, Value = record.Q_soll }); /// :5
|
||||
cmd.Parameters.Add(new OracleParameter { OracleDbType = OracleDbType.Single, Value = record.Pruefzeit }); /// :6
|
||||
cmd.Parameters.Add(new OracleParameter { OracleDbType = OracleDbType.Single, Value = record.Posfehlerkalt }); /// :7
|
||||
cmd.Parameters.Add(new OracleParameter { OracleDbType = OracleDbType.Single, Value = record.Negfehlerkalt }); /// :8
|
||||
cmd.Parameters.Add(new OracleParameter { OracleDbType = OracleDbType.Single, Value = record.Posfehlerwarm }); /// :9
|
||||
cmd.Parameters.Add(new OracleParameter { OracleDbType = OracleDbType.Single, Value = record.Negfehlerwarm }); /// :10
|
||||
cmd.Parameters.Add(new OracleParameter { OracleDbType = OracleDbType.Int32, Value = record.Pruefbereichmin }); /// :11
|
||||
cmd.Parameters.Add(new OracleParameter { OracleDbType = OracleDbType.Int32, Value = record.Pruefbereichmax }); /// :12
|
||||
cmd.Parameters.Add(new OracleParameter { OracleDbType = OracleDbType.Varchar2, Value = record.Qbezeichnung }); /// :13
|
||||
cmd.Parameters.Add(new OracleParameter { OracleDbType = OracleDbType.Single, Value = record.Mindruck }); /// :14
|
||||
cmd.Parameters.Add(new OracleParameter { OracleDbType = OracleDbType.Single, Value = record.Fkorrektur }); /// :15
|
||||
cmd.Parameters.Add(new OracleParameter { OracleDbType = OracleDbType.Single, Value = record.Maxdruck }); /// :16
|
||||
///
|
||||
var rowsUpdated = cmd.ExecuteNonQuery();
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -1,5 +1,5 @@
|
||||
///
|
||||
/// Copyright (c) 2020 Sensus Slovensko a.s.
|
||||
/// Copyright (c) 2020-2021 Sensus Slovensko a.s.
|
||||
///
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
@@ -24,42 +24,45 @@ namespace TBF.Rig.Output.DB.SensusOracle
|
||||
|
||||
public DBUsed DBUsed; /// 0
|
||||
public WMKind WMKind; /// 1
|
||||
public int WMTypeId; /// 2
|
||||
public int YearOfManufacture; /// 3
|
||||
public bool SaveResults; /// 4
|
||||
public bool ReadStartInfo; /// 5
|
||||
public bool StartInfoIsRequired; /// 6
|
||||
public DesigMode DesigMode; /// 7
|
||||
public Results.Output.LogType DesigType; /// 8
|
||||
public int WMTypeId; /// 2 (0 = none, -1 = automatic)
|
||||
public bool CreateWztypEntryIfMissing; /// 3
|
||||
public int YearOfManufacture; /// 4
|
||||
public bool SaveResults; /// 5
|
||||
public bool ReadStartInfo; /// 6
|
||||
public bool StartInfoIsRequired; /// 7
|
||||
public DesigMode DesigMode; /// 8
|
||||
public Results.Output.LogType DesigType; /// 9
|
||||
|
||||
public override void InitializeAll()
|
||||
{
|
||||
DBUsed = DBUsed.Production; /// 0
|
||||
WMKind = WMKind.iPERL; /// 1
|
||||
WMTypeId = 2; /// 2
|
||||
YearOfManufacture = DateTime.Now.Year; /// 3
|
||||
CreateWztypEntryIfMissing = false; /// 3
|
||||
YearOfManufacture = DateTime.Now.Year; /// 4
|
||||
#if TURA_SPECIAL
|
||||
SaveResults = false; /// 4
|
||||
SaveResults = false; /// 5
|
||||
#else
|
||||
SaveResults = true; /// 4
|
||||
SaveResults = true; /// 5
|
||||
#endif
|
||||
ReadStartInfo = true; /// 5
|
||||
StartInfoIsRequired = false; /// 6
|
||||
DesigMode = DesigMode.Auto; /// 7
|
||||
DesigType = Results.Output.LogType.Just_Q3Q2Q1; /// 8
|
||||
ReadStartInfo = true; /// 6
|
||||
StartInfoIsRequired = false; /// 7
|
||||
DesigMode = DesigMode.Auto; /// 8
|
||||
DesigType = Results.Output.LogType.Just_Q3Q2Q1; /// 9
|
||||
}
|
||||
|
||||
string[] paramNames = new string[]
|
||||
{
|
||||
"Database", /// 0
|
||||
"Kind of WMs", /// 1
|
||||
"WM type ID", /// 2
|
||||
"Year of manufacture", /// 3
|
||||
"Save results", /// 4
|
||||
"Read start info", /// 5
|
||||
"Start info is required", /// 6
|
||||
"Designation Mode", /// 7
|
||||
"Designation when mode is 'As_specified'", /// 8
|
||||
"WM type ID (>= 0 or 'auto')", /// 2
|
||||
"Create VT_WZTYP_SD entry if missing", /// 3
|
||||
"Year of manufacture", /// 4
|
||||
"Save results", /// 5
|
||||
"Read start info", /// 6
|
||||
"Start info is required", /// 7
|
||||
"Designation Mode", /// 8
|
||||
"Designation when mode is 'As_specified'", /// 9
|
||||
};
|
||||
public override string ParamName(int i) { return paramNames[i]; }
|
||||
public override int ParamsCount() { return paramNames.Length; }
|
||||
@@ -83,17 +86,20 @@ namespace TBF.Rig.Output.DB.SensusOracle
|
||||
return null;
|
||||
|
||||
case 3:
|
||||
int year = DateTime.Now.Year;
|
||||
return new string[] { year.ToString(), (year + 1).ToString() };
|
||||
case 4:
|
||||
case 5:
|
||||
case 6:
|
||||
return new string[] { Strings.yes, Strings.no };
|
||||
case 7:
|
||||
return new string[] { Strings.yes, Strings.no };
|
||||
|
||||
case 4:
|
||||
int year = DateTime.Now.Year;
|
||||
return new string[] { year.ToString(), (year + 1).ToString() };
|
||||
|
||||
case 8:
|
||||
for (DesigMode md = 0; md < DesigMode.Count; md++) retVal.Add(md.ToString());
|
||||
return retVal;
|
||||
|
||||
case 8:
|
||||
case 9:
|
||||
for (Results.Output.LogType wm = 0; wm < Results.Output.LogType.Count; wm++) retVal.Add(wm.ToString());
|
||||
return retVal;
|
||||
}
|
||||
@@ -105,26 +111,27 @@ namespace TBF.Rig.Output.DB.SensusOracle
|
||||
{
|
||||
case 0: return DBUsed.ToString();
|
||||
case 1: return WMKind.ToString();
|
||||
case 2: return WMTypeId.ToString();
|
||||
case 3: return YearOfManufacture.ToString();
|
||||
case 4: return SaveResults ? Strings.yes : Strings.no;
|
||||
case 5: return ReadStartInfo ? Strings.yes : Strings.no;
|
||||
case 6: return StartInfoIsRequired ? Strings.yes : Strings.no;
|
||||
case 7: return DesigMode.ToString();
|
||||
case 8: return DesigType.ToString();
|
||||
case 2: return (WMTypeId == -1) ? "auto" : WMTypeId.ToString();
|
||||
case 3: return CreateWztypEntryIfMissing ? Strings.yes : Strings.no;
|
||||
case 4: return YearOfManufacture.ToString();
|
||||
case 5: return SaveResults ? Strings.yes : Strings.no;
|
||||
case 6: return ReadStartInfo ? Strings.yes : Strings.no;
|
||||
case 7: return StartInfoIsRequired ? Strings.yes : Strings.no;
|
||||
case 8: return DesigMode.ToString();
|
||||
case 9: return DesigType.ToString();
|
||||
default: return string.Empty;
|
||||
}
|
||||
}
|
||||
|
||||
/// Retrieves parameters from UI controls
|
||||
public CfgUpdateFlags UpdateParam(int i, string strValue)
|
||||
public CfgUpdateFlags UpdateParam(int i, string str)
|
||||
{
|
||||
switch (i)
|
||||
{
|
||||
case 0:
|
||||
for (DBUsed db = 0; db < DBUsed.Count; db++)
|
||||
{
|
||||
if (db.ToString() == strValue)
|
||||
if (db.ToString() == str)
|
||||
{
|
||||
DBUsed = db;
|
||||
return CfgUpdateFlags.None;
|
||||
@@ -135,7 +142,7 @@ namespace TBF.Rig.Output.DB.SensusOracle
|
||||
case 1:
|
||||
for (WMKind wm = 0; wm < WMKind.Count; wm++)
|
||||
{
|
||||
if (wm.ToString() == strValue)
|
||||
if (wm.ToString() == str)
|
||||
{
|
||||
WMKind = wm;
|
||||
return CfgUpdateFlags.None;
|
||||
@@ -143,16 +150,17 @@ namespace TBF.Rig.Output.DB.SensusOracle
|
||||
}
|
||||
break;
|
||||
|
||||
case 2: WMTypeId = int.Parse(strValue); return CfgUpdateFlags.None;
|
||||
case 3: YearOfManufacture = int.Parse(strValue); return CfgUpdateFlags.None;
|
||||
case 4: SaveResults = (strValue == Strings.yes); return CfgUpdateFlags.None;
|
||||
case 5: ReadStartInfo = (strValue == Strings.yes); return CfgUpdateFlags.None;
|
||||
case 6: StartInfoIsRequired = (strValue == Strings.yes); return CfgUpdateFlags.None;
|
||||
case 2: WMTypeId = str.ToLower().Contains("auto") ? -1 : int.Parse(str); break;
|
||||
case 3: CreateWztypEntryIfMissing = (str == Strings.yes); break;
|
||||
case 4: YearOfManufacture = int.Parse(str); break;
|
||||
case 5: SaveResults = (str == Strings.yes); break;
|
||||
case 6: ReadStartInfo = (str == Strings.yes); break;
|
||||
case 7: StartInfoIsRequired = (str == Strings.yes); break;
|
||||
|
||||
case 7:
|
||||
case 8:
|
||||
for (DesigMode db = 0; db < DesigMode.Count; db++)
|
||||
{
|
||||
if (db.ToString() == strValue)
|
||||
if (db.ToString() == str)
|
||||
{
|
||||
DesigMode = db;
|
||||
return CfgUpdateFlags.None;
|
||||
@@ -160,10 +168,10 @@ namespace TBF.Rig.Output.DB.SensusOracle
|
||||
}
|
||||
break;
|
||||
|
||||
case 8:
|
||||
case 9:
|
||||
for (Results.Output.LogType wm = 0; wm < Results.Output.LogType.Count; wm++)
|
||||
{
|
||||
if (wm.ToString() == strValue)
|
||||
if (wm.ToString() == str)
|
||||
{
|
||||
DesigType = wm;
|
||||
return CfgUpdateFlags.None;
|
||||
@@ -176,7 +184,7 @@ namespace TBF.Rig.Output.DB.SensusOracle
|
||||
}
|
||||
|
||||
/// Verifies whether strings in UI controls represent valid parameters
|
||||
public bool ValidateParam(int i, string strValue, out string message)
|
||||
public bool ValidateParam(int i, string str, out string message)
|
||||
{
|
||||
message = string.Empty;
|
||||
|
||||
@@ -186,45 +194,46 @@ namespace TBF.Rig.Output.DB.SensusOracle
|
||||
case 0:
|
||||
for (DBUsed db = 0; db < DBUsed.Count; db++)
|
||||
{
|
||||
if (db.ToString() == strValue) return true;
|
||||
if (db.ToString() == str) return true;
|
||||
}
|
||||
break;
|
||||
|
||||
case 1:
|
||||
for (WMKind wm = 0; wm < WMKind.Count; wm++)
|
||||
{
|
||||
if (wm.ToString() == strValue) return true;
|
||||
if (wm.ToString() == str) return true;
|
||||
}
|
||||
break;
|
||||
|
||||
case 2:
|
||||
if (int.TryParse(strValue, out idummy) && idummy >= 0)
|
||||
if (str.ToLower().Contains("auto") || (int.TryParse(str, out idummy) && idummy >= 0))
|
||||
return true;
|
||||
break;
|
||||
|
||||
case 3:
|
||||
if (int.TryParse(strValue, out idummy) && idummy >= DateTime.Now.Year && idummy <= DateTime.Now.Year + 1)
|
||||
case 5:
|
||||
case 6:
|
||||
case 7:
|
||||
if (str == Strings.yes || str == Strings.no)
|
||||
return true;
|
||||
break;
|
||||
|
||||
case 4:
|
||||
case 5:
|
||||
case 6:
|
||||
if (strValue == Strings.yes || strValue == Strings.no)
|
||||
if (int.TryParse(str, out idummy) && idummy >= DateTime.Now.Year && idummy <= DateTime.Now.Year + 1)
|
||||
return true;
|
||||
break;
|
||||
|
||||
case 7:
|
||||
for (DesigMode db = 0; db < DesigMode.Count; db++)
|
||||
case 8:
|
||||
for (DesigMode dm = 0; dm < DesigMode.Count; dm++)
|
||||
{
|
||||
if (db.ToString() == strValue) return true;
|
||||
if (dm.ToString() == str) return true;
|
||||
}
|
||||
break;
|
||||
|
||||
case 8:
|
||||
case 9:
|
||||
for (Results.Output.LogType wm = 0; wm < Results.Output.LogType.Count; wm++)
|
||||
{
|
||||
if (wm.ToString() == strValue) return true;
|
||||
if (wm.ToString() == str) return true;
|
||||
}
|
||||
break;
|
||||
|
||||
@@ -239,15 +248,16 @@ namespace TBF.Rig.Output.DB.SensusOracle
|
||||
|
||||
void CopyContentTo(ProcedureParams prms)
|
||||
{
|
||||
prms.DBUsed = this.DBUsed;
|
||||
prms.WMKind = this.WMKind;
|
||||
prms.WMTypeId = this.WMTypeId;
|
||||
prms.YearOfManufacture = this.YearOfManufacture;
|
||||
prms.SaveResults = this.SaveResults;
|
||||
prms.ReadStartInfo = this.ReadStartInfo;
|
||||
prms.StartInfoIsRequired = this.StartInfoIsRequired;
|
||||
prms.DesigMode = this.DesigMode;
|
||||
prms.DesigType = this.DesigType;
|
||||
prms.DBUsed = DBUsed;
|
||||
prms.WMKind = WMKind;
|
||||
prms.WMTypeId = WMTypeId;
|
||||
prms.CreateWztypEntryIfMissing = CreateWztypEntryIfMissing;
|
||||
prms.YearOfManufacture = YearOfManufacture;
|
||||
prms.SaveResults = SaveResults;
|
||||
prms.ReadStartInfo = ReadStartInfo;
|
||||
prms.StartInfoIsRequired = StartInfoIsRequired;
|
||||
prms.DesigMode = DesigMode;
|
||||
prms.DesigType = DesigType;
|
||||
}
|
||||
|
||||
public IParamsProvider Clone()
|
||||
|
||||
@@ -0,0 +1,137 @@
|
||||
///
|
||||
/// Copyright (c) 2021 Sensus Slovensko a.s.
|
||||
///
|
||||
using System;
|
||||
using log4net;
|
||||
using Common;
|
||||
|
||||
namespace TBF.Rig.Output.DB.SensusOracle
|
||||
{
|
||||
public class VtPruefpunktSollSd
|
||||
{
|
||||
private static readonly ILog log = LogManager.GetLogger(typeof(VtPruefpunktSollSd));
|
||||
|
||||
public int Pruefungsnr;
|
||||
public float Q_soll;
|
||||
public float Pruefzeit;
|
||||
public float Posfehlerkalt;
|
||||
public float Negfehlerkalt;
|
||||
public float Posfehlerwarm;
|
||||
public float Negfehlerwarm;
|
||||
public int Pruefbereichmin;
|
||||
public int Pruefbereichmax;
|
||||
public string Qbezeichnung;
|
||||
public float Mindruck;
|
||||
public float Maxdruck;
|
||||
public float Fkorrektur;
|
||||
|
||||
/// <summary>
|
||||
/// Default constructor
|
||||
/// </summary>
|
||||
public VtPruefpunktSollSd()
|
||||
{
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Create VtPruefpunktSollSd object from a test result.
|
||||
/// </summary>
|
||||
/// <param name="tr">Test result</param>
|
||||
/// <param name="pruefungsnr">Test ix</param>
|
||||
/// <returns>Created object</returns>
|
||||
public static VtPruefpunktSollSd FromTestRslt(Results.Entities.TestRslt tr, int pruefungsnr = 0, float Qn = 0)
|
||||
{
|
||||
bool isQ3orQ4 = (Qn > 0 && (tr.Qfrom() + tr.Qto()) / 2 >= 0.9 * Qn) ||
|
||||
tr.Name().ToLower().Contains("q3") ||
|
||||
tr.Name().ToLower().Contains("q4");
|
||||
|
||||
var rslt = new VtPruefpunktSollSd
|
||||
{
|
||||
Pruefungsnr = pruefungsnr,
|
||||
Q_soll = (float)Units.ConvertTo(Unit.lph, isQ3orQ4 ? tr.Qto() : tr.Qfrom()),
|
||||
Pruefzeit = (float)tr.TargetTime(),
|
||||
Posfehlerkalt = (float)tr.ErrLimHi(),
|
||||
Negfehlerkalt = (float)tr.ErrLimLo(),
|
||||
Posfehlerwarm = 0,
|
||||
Negfehlerwarm = 0,
|
||||
Pruefbereichmin = isQ3orQ4 ? 90 : 100,
|
||||
Pruefbereichmax = isQ3orQ4 ? 100 : 110,
|
||||
Qbezeichnung = tr.Name(),
|
||||
Mindruck = 0,
|
||||
Maxdruck = 0,
|
||||
Fkorrektur = 0,
|
||||
};
|
||||
|
||||
log.DebugFormat("FromTest: [{0}] created from test {1}", rslt, tr.Name());
|
||||
|
||||
return rslt;
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Create VtPruefpunktSollSd object from a test.
|
||||
/// </summary>
|
||||
/// <param name="test">Test</param>
|
||||
/// <param name="pruefungsnr">Test ix</param>
|
||||
/// <returns>Created object</returns>
|
||||
public static VtPruefpunktSollSd FromTest(Config.Entities.Test test, int pruefungsnr = 0)
|
||||
{
|
||||
bool isQ3orQ4 = (test.Procedure.Qn > 0 && (test.Qfrom + test.Qto) / 2 >= 0.9 * test.Procedure.Qn) ||
|
||||
test.Name.ToLower().Contains("q3") ||
|
||||
test.Name.ToLower().Contains("q4");
|
||||
|
||||
var rslt = new VtPruefpunktSollSd
|
||||
{
|
||||
Pruefungsnr = pruefungsnr,
|
||||
Q_soll = Units.ConvertTo(Unit.lph, isQ3orQ4 ? test.Qto : test.Qfrom),
|
||||
Pruefzeit = test.TestTime,
|
||||
Posfehlerkalt = test.ErrLimHi,
|
||||
Negfehlerkalt = test.ErrLimLo,
|
||||
Posfehlerwarm = 0,
|
||||
Negfehlerwarm = 0,
|
||||
Pruefbereichmin = isQ3orQ4 ? 90 : 100,
|
||||
Pruefbereichmax = isQ3orQ4 ? 100 : 110,
|
||||
Qbezeichnung = test.Name,
|
||||
Mindruck = 0,
|
||||
Maxdruck = 0,
|
||||
Fkorrektur = 0,
|
||||
};
|
||||
|
||||
log.DebugFormat("FromTest: [{0}] created from test {1}", rslt, test.Name);
|
||||
|
||||
return rslt;
|
||||
}
|
||||
|
||||
public override string ToString()
|
||||
{
|
||||
return string.Format("{0} {1} {2}l/h time={3}s Elo={4}% Ehi={5}% Rlo={6} Rhi={7}",
|
||||
Pruefungsnr, Qbezeichnung, Q_soll, Pruefzeit,
|
||||
Negfehlerkalt, Posfehlerkalt, Pruefbereichmin, Pruefbereichmax);
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Compares two VtPruefpunktSollSd objects.
|
||||
/// Tollerance for float values is 1/1000 (0.1%).
|
||||
/// </summary>
|
||||
/// <param name="t1">VtPruefpunktSollSd object 1</param>
|
||||
/// <param name="t2">VtPruefpunktSollSd object 2</param>
|
||||
/// <returns>true when equal</returns>
|
||||
public static bool AreEqual(VtPruefpunktSollSd t1, VtPruefpunktSollSd t2)
|
||||
{
|
||||
if (t1 == null && t2 == null) return true; /// Both are null --> are equal
|
||||
if (t1 == null || t2 == null) return false; /// One is null --> not equal
|
||||
|
||||
return t1.Pruefungsnr == t2.Pruefungsnr &&
|
||||
((t1.Q_soll == 0 && t2.Q_soll == 0) || 2 * Math.Abs(t1.Q_soll - t2.Q_soll) / (t1.Q_soll + t2.Q_soll) < 0.001) &&
|
||||
((t1.Pruefzeit == 0 && t2.Pruefzeit == 0) || 2 * Math.Abs(t1.Pruefzeit - t2.Pruefzeit) / (t1.Pruefzeit + t2.Pruefzeit) < 0.001) &&
|
||||
((t1.Posfehlerkalt == 0 && t2.Posfehlerkalt == 0) || 2 * Math.Abs(t1.Posfehlerkalt - t2.Posfehlerkalt) / (t1.Posfehlerkalt + t2.Posfehlerkalt) < 0.001) &&
|
||||
((t1.Negfehlerkalt == 0 && t2.Negfehlerkalt == 0) || 2 * Math.Abs(t1.Negfehlerkalt - t2.Negfehlerkalt) / (t1.Negfehlerkalt + t2.Negfehlerkalt) < 0.001) &&
|
||||
((t1.Posfehlerwarm == 0 && t2.Posfehlerwarm == 0) || 2 * Math.Abs(t1.Posfehlerwarm - t2.Posfehlerwarm) / (t1.Posfehlerwarm + t2.Posfehlerwarm) < 0.001) &&
|
||||
((t1.Negfehlerwarm == 0 && t2.Negfehlerwarm == 0) || 2 * Math.Abs(t1.Negfehlerwarm - t2.Negfehlerwarm) / (t1.Negfehlerwarm + t2.Negfehlerwarm) < 0.001) &&
|
||||
t1.Pruefbereichmin == t2.Pruefbereichmin &&
|
||||
t1.Pruefbereichmax == t2.Pruefbereichmax &&
|
||||
t1.Qbezeichnung == t2.Qbezeichnung &&
|
||||
((t1.Mindruck == 0 && t2.Mindruck == 0) || 2 * Math.Abs(t1.Mindruck - t2.Mindruck) / (t1.Mindruck + t2.Mindruck) < 0.001) &&
|
||||
((t1.Maxdruck == 0 && t2.Maxdruck == 0) || 2 * Math.Abs(t1.Maxdruck - t2.Maxdruck) / (t1.Maxdruck + t2.Maxdruck) < 0.001) &&
|
||||
t1.Fkorrektur == t2.Fkorrektur;
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,222 @@
|
||||
///
|
||||
/// Copyright (c) 2021 Sensus Slovensko a.s.
|
||||
///
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
using System.Linq;
|
||||
using log4net;
|
||||
#if MANAGED
|
||||
using Oracle.ManagedDataAccess.Client;
|
||||
#else
|
||||
using Oracle.DataAccess.Client;
|
||||
#endif
|
||||
using Common;
|
||||
|
||||
namespace TBF.Rig.Output.DB.SensusOracle
|
||||
{
|
||||
public class VtWztypSd
|
||||
{
|
||||
private static readonly ILog log = LogManager.GetLogger(typeof(VtWztypSd));
|
||||
|
||||
public int IdWztyp;
|
||||
public int RevWztyp;
|
||||
public string Wztyp;
|
||||
public string Art;
|
||||
public string Metrolklasse;
|
||||
public string Zulasszeichen;
|
||||
public double Impulsrate;
|
||||
public double Kontaktwert;
|
||||
public bool Warmpruefen;
|
||||
public bool Optikaufsetzen;
|
||||
public string Formatausdruck;
|
||||
public string Formatetikett;
|
||||
public string Formatnetzwerk;
|
||||
public string Formatzaehlernr;
|
||||
public int IdWzgruppe;
|
||||
public int Anzahlpruefungen;
|
||||
public string Materialnr;
|
||||
public float Qmax;
|
||||
public byte Pruefart;
|
||||
public byte Zaehlerflag;
|
||||
public double Korrekturwert;
|
||||
public int IdBenutzer;
|
||||
public DateTime Aenderungsdatum;
|
||||
public string Bemerkung;
|
||||
public bool Verwendet;
|
||||
public IList<VtPruefpunktSollSd> ListOfTests; /// null = To be loaded
|
||||
|
||||
/// <summary>
|
||||
/// Default constructor
|
||||
/// </summary>
|
||||
public VtWztypSd()
|
||||
{
|
||||
ListOfTests = null;
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Create VtWztypSd object from a batch.
|
||||
/// </summary>
|
||||
/// <param name="batch"></param>
|
||||
/// <returns></returns>
|
||||
public static VtWztypSd FromBatch(Results.Entities.Batch batch, int idBenutzer)
|
||||
{
|
||||
var sampleWM = batch.WaterMeters.FirstOrDefault(x => (x != null && !x.Disabled && x.WaterMeterData != null));
|
||||
if (sampleWM == null) return null;
|
||||
var wmData = sampleWM.WaterMeterData;
|
||||
if (wmData == null) return null;
|
||||
|
||||
int adjTestsCount = 0; /// Negative number
|
||||
int finalTestsCount = 0; /// Positive number
|
||||
foreach (var tr in batch.TestRslts)
|
||||
{
|
||||
if (tr.TestData.Publish == (sbyte)Publish.OnScreen)
|
||||
adjTestsCount--;
|
||||
if (tr.TestData.Publish == (sbyte)Publish.Always && tr.TestData.Evaluate)
|
||||
finalTestsCount++;
|
||||
}
|
||||
|
||||
var listOfTests = new List<VtPruefpunktSollSd>();
|
||||
foreach (var tr in batch.TestRslts)
|
||||
{
|
||||
if (tr.TestData.Publish == (sbyte)Publish.OnScreen)
|
||||
listOfTests.Add(VtPruefpunktSollSd.FromTestRslt(tr, adjTestsCount++, (float)wmData.Q3_Qn));
|
||||
if (tr.TestData.Publish == (sbyte)Publish.Always && tr.TestData.Evaluate)
|
||||
listOfTests.Add(VtPruefpunktSollSd.FromTestRslt(tr, finalTestsCount--, (float)wmData.Q3_Qn));
|
||||
}
|
||||
|
||||
var rslt = new VtWztypSd()
|
||||
{
|
||||
IdWztyp = 0,
|
||||
RevWztyp = 0,
|
||||
Wztyp = batch.ProcedureName,
|
||||
Art = "VT",
|
||||
Metrolklasse = wmData.MetrologicalClass,
|
||||
Zulasszeichen = wmData.ApprovalInfo,
|
||||
Impulsrate = 0, // TODO
|
||||
Kontaktwert = 0, // TODO
|
||||
Warmpruefen = false,
|
||||
Optikaufsetzen = true,
|
||||
Formatausdruck = string.Empty, // TODO
|
||||
Formatetikett = string.Empty, // TODO
|
||||
Formatnetzwerk = string.Empty, // TODO
|
||||
Formatzaehlernr = string.Empty, // TODO
|
||||
IdWzgruppe = 0,
|
||||
Anzahlpruefungen = listOfTests.Count,
|
||||
Materialnr = string.Empty, // TODO
|
||||
Qmax = (float)wmData.Q3_Qn,
|
||||
Pruefart = 0,
|
||||
Zaehlerflag = 0,
|
||||
Korrekturwert = 0,
|
||||
IdBenutzer = idBenutzer,
|
||||
Aenderungsdatum = DateTime.Now,
|
||||
Bemerkung = string.Empty, // TODO
|
||||
Verwendet = true,
|
||||
ListOfTests = listOfTests,
|
||||
};
|
||||
|
||||
log.DebugFormat("FromProcedure: [{0}] created from proc. {1}", rslt, batch.ProcedureName);
|
||||
|
||||
return rslt;
|
||||
}
|
||||
|
||||
public override string ToString()
|
||||
{
|
||||
return string.Format("Id={0} Rev={1} Q3={2} metro={3}", IdWztyp, RevWztyp, Qmax, Metrolklasse);
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Compares two VtWztypSd objects except of IdWztyp, RevWztyp,
|
||||
/// IdBenutzer, Aenderungsdatum, Bemerkung and Verwendet members.
|
||||
/// Tollerance for Impulsrate and Kontaktwert is 1/100000.
|
||||
/// Tolleranve for Qmax and Korrekturwert is 1/1000 (0.1%).
|
||||
/// </summary>
|
||||
/// <param name="p1">VtWztypSd object 1/param>
|
||||
/// <param name="p2">VtWztypSd object 2</param>
|
||||
/// <returns>true when equal</returns>
|
||||
public static bool AreEqual(VtWztypSd p1, VtWztypSd p2, Database db = null, OracleConnection conn = null)
|
||||
{
|
||||
if (p1 == null && p2 == null) return true; /// Both are null --> are equal
|
||||
if (p1 == null || p2 == null) return false; /// One is null --> not equal
|
||||
|
||||
bool equal = p1.Wztyp == p2.Wztyp &&
|
||||
p1.Art == p2.Art &&
|
||||
p1.Metrolklasse == p2.Metrolklasse &&
|
||||
p1.Zulasszeichen == p2.Zulasszeichen &&
|
||||
((p1.Impulsrate == 0 && p2.Impulsrate == 0)
|
||||
|| 2 * Math.Abs(p1.Impulsrate - p2.Impulsrate) / (p1.Impulsrate + p2.Impulsrate) < 0.00001) &&
|
||||
((p1.Kontaktwert == 0 && p2.Kontaktwert == 0)
|
||||
|| 2 * Math.Abs(p1.Kontaktwert - p2.Kontaktwert) / (p1.Kontaktwert + p2.Kontaktwert) < 0.00001) &&
|
||||
p1.Warmpruefen == p2.Warmpruefen &&
|
||||
p1.Optikaufsetzen == p2.Optikaufsetzen &&
|
||||
p1.Formatausdruck == p2.Formatausdruck &&
|
||||
p1.Formatetikett == p2.Formatetikett &&
|
||||
p1.Formatnetzwerk == p2.Formatnetzwerk &&
|
||||
p1.Formatzaehlernr == p2.Formatzaehlernr &&
|
||||
p1.IdWzgruppe == p2.IdWzgruppe &&
|
||||
p1.Anzahlpruefungen == p2.Anzahlpruefungen &&
|
||||
p1.Materialnr == p2.Materialnr &&
|
||||
((p1.Qmax == 0 && p2.Qmax == 0)
|
||||
|| 2 * Math.Abs(p1.Qmax - p2.Qmax) / (p1.Qmax + p2.Qmax) < 0.001) &&
|
||||
p1.Pruefart == p2.Pruefart &&
|
||||
p1.Zaehlerflag == p2.Zaehlerflag &&
|
||||
((p1.Korrekturwert == 0 && p2.Korrekturwert == 0)
|
||||
|| 2 * Math.Abs(p1.Korrekturwert - p2.Korrekturwert) / (p1.Korrekturwert + p2.Korrekturwert) < 0.001);
|
||||
|
||||
if (!equal)
|
||||
{
|
||||
return false; /// Two procedures are different regardless of their tests
|
||||
}
|
||||
|
||||
/// Load information about test form Oracle if it is missing
|
||||
if (((p1.ListOfTests == null && p1.IdWztyp > 0 && p1.RevWztyp > 0) ||
|
||||
(p2.ListOfTests == null && p2.IdWztyp > 0 && p2.RevWztyp > 0)) && db != null && conn != null)
|
||||
{
|
||||
try
|
||||
{
|
||||
conn.Open();
|
||||
|
||||
if (p1.ListOfTests == null && p1.IdWztyp > 0 && p1.RevWztyp > 0)
|
||||
{
|
||||
p1.ListOfTests = db.ReadVtPruefpunktSollSd(conn, p1.IdWztyp, p1.RevWztyp);
|
||||
}
|
||||
|
||||
if (p2.ListOfTests == null && p2.IdWztyp > 0 && p2.RevWztyp > 0)
|
||||
{
|
||||
p2.ListOfTests = db.ReadVtPruefpunktSollSd(conn, p2.IdWztyp, p2.RevWztyp);
|
||||
}
|
||||
|
||||
conn.Close();
|
||||
}
|
||||
catch (Exception exc)
|
||||
{
|
||||
log.ErrorFormat("Failed to read from VT_PRUEFPUNKT_SOLL_SD: {0}", exc.Message);
|
||||
return false;
|
||||
}
|
||||
}
|
||||
|
||||
if (p1.ListOfTests == null || p2.ListOfTests == null)
|
||||
{
|
||||
log.ErrorFormat("Information about tests is missing");
|
||||
return false;
|
||||
}
|
||||
|
||||
if (p1.ListOfTests.Count != p2.ListOfTests.Count)
|
||||
{
|
||||
return false; /// Tests counts of two procedures are different
|
||||
}
|
||||
|
||||
for (int i = 0; i < p1.ListOfTests.Count; i++)
|
||||
{
|
||||
if (!VtPruefpunktSollSd.AreEqual(p1.ListOfTests[i], p2.ListOfTests[i]))
|
||||
{
|
||||
return false; /// One pair of tests is different, tests are not equal
|
||||
}
|
||||
}
|
||||
|
||||
log.InfoFormat("Procedures are equal: {0}/{1}({2}) and {3}/{4}({5})",
|
||||
p1.IdWztyp, p1.RevWztyp, p1.Wztyp, p2.IdWztyp, p2.RevWztyp, p2.Wztyp);
|
||||
|
||||
return true; /// Two procedures are equal
|
||||
}
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user