tbf/TestBenchFramework/BenchControl/DB/SensusOracle/Database.cs

804 lines
33 KiB
C#

///
/// Copyright (c) 2015 Sensus Metering Systems
///
using System;
using System.Collections.Generic;
using System.IO;
using log4net;
using Oracle.DataAccess.Client; // ODP.NET Oracle managed provider
using Oracle.DataAccess.Types;
using TBF.BenchControl;
using TBF.Resources;
namespace TBF.BenchControl.DB.SensusOracle
{
public class Database : ComponentBase, IOperation, GenericDevices.IResultsWriter, Generic.IDevice
{
private static readonly ILog log = LogManager.GetLogger(typeof(Database));
public override string ToString() { return string.Format("ResultsWriters.Basic({0})", Cfg.ToString(1)); }
const int Anbid_StaraTura = 4;
readonly DatabaseCfg dbCfg;
OracleConnection conn; /// Oracle database connection
/// <summary>
/// Result items to print
/// </summary>
IList<TBF.Forms.ResultItemSpec> resultItems;
bool combined;
/// <summary>
/// Results to print
/// </summary>
Entities.Procedure procedure;
IList<GenericDevices.IWaterMeter> waterMeters;
IList<Entities.TestResult> unsortedResults;
DateTime dateTime;
StreamWriter writer;
bool batchDataSaved; /// This is to save batch data (VT_PRUEFREIHE_PD) only once
string separatorStr;
public Database()
{
}
public Database(DatabaseCfg cfg)
: base(cfg)
{
dbCfg = cfg;
switch (cfg.Separator)
{
default:
case Separator.None:
separatorStr = string.Empty;
break;
case Separator.Space:
separatorStr = " ";
break;
case Separator.Tabulator:
separatorStr = "\t";
break;
case Separator.Comma:
separatorStr = ",";
break;
case Separator.Semicolon:
separatorStr = ";";
break;
}
log.Debug(this.ToString());
}
public void Initialize()
{
if (dbCfg.DBUsed == DBUsed.Test)
{
conn = new OracleConnection("Data Source=STARA_TEST.WORLD;User Id=deltachef;Password=deltachef;");
}
else if (dbCfg.DBUsed == DBUsed.Production)
{
conn = new OracleConnection("Data Source=STARA01.WORLD;User Id=deltachef;Password=deltachef;");
}
else if (dbCfg.DBUsed == DBUsed.Quality)
{
/// Temporarily use test database
conn = new OracleConnection("Data Source=STARA_TEST.WORLD;User Id=deltachef;Password=deltachef;");
}
///
/// Do something with the database to see if the connection works well
///
conn.Open();
string rslt = "none";
OracleCommand cmd = new OracleCommand("select Standort from ANBIETER_SD where ANBID = 4", conn);
OracleDataReader dr = cmd.ExecuteReader();
if (dr.Read()) rslt = dr.GetString(0);
conn.Close();
}
public void RunDeviceBefore() {}
public void RunDeviceAfter() {}
public void StopDevice()
{
if (conn != null) conn.Dispose();
}
/// <summary>
/// Eliminate spaces conditionally, depesing on bool WriterCfg.EliminateSpaces
/// </summary>
/// <param name="item">Input string</param>
/// <returns>Output string</returns>
string ElSpaces(string item)
{
if (dbCfg.EliminateSpaces)
return item.Replace(" ", string.Empty);
else
return item;
}
/// <summary>
/// Returns a file name derived from a DateTime structure.
/// Creates directories on this path as a side effect.
/// </summary>
/// <param name="time">Date and time</param>
/// <returns>File name</returns>
string GetFilename(DateTime time)
{
string directory = dbCfg.DestinationPath; /// Ends with "\\";
Directory.CreateDirectory(directory);
if (dbCfg.YearFolders)
{
directory = string.Format("{0}{1}\\", directory, time.Year.ToString());
Directory.CreateDirectory(directory);
}
if (dbCfg.MonthFolders)
{
string monthStr /* = now.Month.ToString("D2")*/;
switch (time.Month)
{
default:
case 1: monthStr = "January"; break;
case 2: monthStr = "February"; break;
case 3: monthStr = "March"; break;
case 4: monthStr = "April"; break;
case 5: monthStr = "May"; break;
case 6: monthStr = "June"; break;
case 7: monthStr = "July"; break;
case 8: monthStr = "August"; break;
case 9: monthStr = "September"; break;
case 10: monthStr = "October"; break;
case 11: monthStr = "November"; break;
case 12: monthStr = "December"; break;
}
directory = string.Format("{0}{1}\\", directory, monthStr);
Directory.CreateDirectory(directory);
}
if (dbCfg.DayFolders)
{
directory = string.Format("{0}{1}\\", directory, time.Day.ToString("D2"));
Directory.CreateDirectory(directory);
}
return string.Format("{0}{1}{2}{3}-{4}{5}.txt", directory, (time.Year % 100).ToString("D2"),
time.Month.ToString("D2"), time.Day.ToString("D2"), time.Hour.ToString("D2"), time.Minute.ToString("D2"));
}
/// <summary>
/// Writes the test cycle results into a file, Events: Event.ResultsWritten
/// </summary>
/// <param name="procedure">Procedure to print the results of</param>
/// <param name="unsortedResults">Results to write into the file</param>
/// <returns>Reference to the operation</returns>
public IOperation WriteResultsOp(Entities.Procedure procedure, IList<GenericDevices.IWaterMeter> waterMeters, IList<Entities.TestResult> unsortedResults)
{
if ((procedure == null) || (unsortedResults == null) || (unsortedResults.Count < 1))
{
return null;
}
this.procedure = procedure;
this.waterMeters = waterMeters;
this.unsortedResults = unsortedResults;
combined = (procedure.MetersKind == Entities.MetersKind.Combined);
if (combined)
{
resultItems = Forms.ResultItemSpec.FromStrArray(Program.LocalSettings.RsltItems_Disk_CombinedWM);
}
else
{
resultItems = Forms.ResultItemSpec.FromStrArray(Program.LocalSettings.RsltItems_Disk_SingleWM);
}
try
{
dateTime = DateTime.Now;
writer = new StreamWriter(System.IO.File.Create(GetFilename(dateTime)));
}
catch
{
writer = null;
}
return this;
}
/// <summary>Start this operation</summary>
public void Start()
{
batchDataSaved = false;
if (writer == null) return;
///----------
/// Header
///----------
writer.WriteLine(unsortedResults[0].ProtocolTitle);
writer.WriteLine(string.Empty);
string[] leftColumn = new string[]
{
"Batch number: ",
"Date and time: ",
"Procedure:",
Strings.User_,
"Ambient temperature: ",
"Ambient pressure: ",
"Ambient humidity: ",
};
string[] rightColumn = new string[]
{
unsortedResults[0].BatchNr.ToString(),
//dateTime.ToShortDateString() + " " + dateTime.ToShortTimeString(),
string.Format("{0}.{1}.{2} {3}:{4}", dateTime.Year.ToString("D4"),
dateTime.Month.ToString("D2"),
dateTime.Day.ToString("D2"),
dateTime.Hour.ToString("D2"),
dateTime.Minute.ToString("D2")),
procedure.Name,
Entities.User.CurrentUser.Name,
unsortedResults[0].AmbientTempAve.ToString("F1") + " °C",
unsortedResults[0].AmbientPressAve.ToString("F0") + " mbar",
unsortedResults[0].AmbientHumiAve.ToString("F0") + " %",
};
/// Determine max. left column width in characters
int maxLen = 0;
foreach (var s in leftColumn) if (s.Length > maxLen) maxLen = s.Length;
/// Write aligned columns
for (int i = 0; i < Math.Min(leftColumn.Length, rightColumn.Length); i++)
{
writer.Write(leftColumn[i]);
writer.Write(new string(' ', maxLen - leftColumn[i].Length + 3));
writer.WriteLine(rightColumn[i]);
}
writer.WriteLine(string.Empty);
/// Write text body to a disk file
if (combined)
{
for (int wmNr = 0; wmNr < Program.CompoundWMsCount; wmNr++) WriteCombinedWM(wmNr + 1); /// wmNr is 0-based
}
else
{
for (int wmNr = 0; wmNr < Program.WMsCount; wmNr++) /// wmNr is 0-based
{
if (!unsortedResults[0].Meters[wmNr].Disabled)
{
IList<Entities.TestResult> results = Utils.GetSortedTestResults(procedure, unsortedResults, Utils.PartNr(wmNr + 1, combined));
WriteSingleWM(wmNr, wmNr + 1, results);
}
}
}
/// Close the file
writer.Close();
writer = null;
///---------------------------------
/// Write results to the database
///--------------------------------
if (!combined)
{
/// Open the Oracle database
conn.Open();
for (int wmNr = 0; wmNr < Program.WMsCount; wmNr++) /// wmNr is 0-based
{
WaterMeters.iPerl.WaterMeter wMtr = (waterMeters != null && waterMeters.Count > wmNr) ? waterMeters[wmNr] as WaterMeters.iPerl.WaterMeter : null;
if (!unsortedResults[0].Meters[wmNr].Disabled && wMtr != null)
{
IList<Entities.TestResult> results = Utils.GetSortedTestResults(procedure, unsortedResults, Utils.PartNr(wmNr + 1, combined));
SaveSingleWM2DB(wmNr, wMtr, results);
}
}
/// Close the Oracle database
conn.Close();
}
}
/// <summary>
/// Write one meter results into the database
/// </summary>
/// <param name="wmNr">0-based water meter number</param>
/// <param name="results">Sorted list of results to save</param>
void SaveSingleWM2DB(int wmNr, WaterMeters.iPerl.WaterMeter wMtr, IList<Entities.TestResult> results)
{
if (string.IsNullOrEmpty(unsortedResults[0].Meters[wmNr].SerialNr)) return; /// No database activity possible w/o PCB number
string pcbNr = unsortedResults[0].Meters[wmNr].SerialNr;
///
/// Read a list of all prufindexes for a given PCB Number
///
IList<int> pruefindexes = new List<int>();
{
OracleParameter parm = new OracleParameter();
parm.OracleDbType = OracleDbType.Varchar2;
parm.Value = pcbNr;
OracleCommand cmd1 = new OracleCommand("SELECT MAX_Pruefindex FROM VT_ZAEHLER_PD WHERE VT_Fernum = :1 AND ANBID = 4", conn);
cmd1.Parameters.Add(parm);
OracleDataReader dr = cmd1.ExecuteReader();
while (dr.Read())
{
pruefindexes.Add(dr.GetInt32(0));
}
}
///
/// Determine MAX_Pruefindex
///
int maxpruefindexLowPart = 0;
foreach (var v in pruefindexes)
{
if ((v % 100) > maxpruefindexLowPart) maxpruefindexLowPart = (v % 100);
}
int MAX_Pruefindex = 100 * dbCfg.TestBenchId + maxpruefindexLowPart + 1;
bool passed = true;
int Sekundaere_Adr;
int Hydr_Pruefung;
foreach (var r in results)
{
if (!r.DoNotEvaluate && !r.Meters[wmNr].Passed) passed = false;
}
if (!passed)
{
/// Failed
Sekundaere_Adr = 0;
Hydr_Pruefung = 97; /// Hydr. test failed, Pressure test passed
}
else
{
/// Passed
Sekundaere_Adr = 1;
if (maxpruefindexLowPart == 0)
Hydr_Pruefung = 96;
else
Hydr_Pruefung = 224;
}
string pOrder = string.IsNullOrEmpty(unsortedResults[0].PurchaseOrder) ? string.Empty : unsortedResults[0].PurchaseOrder;
if (MAX_Pruefindex % 100 == 1)
{
OracleCommand cmd = new OracleCommand("INSERT INTO VT_ZAEHLER_PD(Auftragsnummer, VT_Identnummer, VT_Fernum, Max_Pruefindex, Zaehlernummer, Sekundaere_Adr, Hydr_Pruefung, ID_Benutzer, ANBID, Baujahr) VALUES (:1, :2, :3, :4, :5, :6, :7, :8, :9, :10)", conn);
OracleParameter parm;
parm = new OracleParameter("Auftragsnummer", OracleDbType.Varchar2); parm.Value = pOrder; cmd.Parameters.Add(parm);
parm = new OracleParameter("VT_Identnummer", OracleDbType.Varchar2); parm.Value = "IPBATMXX"; cmd.Parameters.Add(parm);
parm = new OracleParameter("VT_Fernum", OracleDbType.Varchar2); parm.Value = pcbNr; cmd.Parameters.Add(parm);
parm = new OracleParameter("Max_Pruefindex", OracleDbType.Int32); parm.Value = MAX_Pruefindex; cmd.Parameters.Add(parm);
parm = new OracleParameter("Zaehlernummer", OracleDbType.Int32); parm.Value = -1; cmd.Parameters.Add(parm);
parm = new OracleParameter("Sekundaere_Adr", OracleDbType.Int32); parm.Value = Sekundaere_Adr; cmd.Parameters.Add(parm);
parm = new OracleParameter("Hydr_Pruefung", OracleDbType.Int32); parm.Value = Hydr_Pruefung; cmd.Parameters.Add(parm);
parm = new OracleParameter("ID_Benutzer", OracleDbType.Int32); parm.Value = 6; cmd.Parameters.Add(parm);
parm = new OracleParameter("ANBID", OracleDbType.Int32); parm.Value = Anbid_StaraTura; cmd.Parameters.Add(parm);
parm = new OracleParameter("Baujahr", OracleDbType.Int32); parm.Value = dbCfg.Baujahr; cmd.Parameters.Add(parm);
int rowsUpdated = cmd.ExecuteNonQuery();
}
else
{
OracleCommand cmd = new OracleCommand("UPDATE VT_ZAEHLER_PD SET Auftragsnummer = :1, VT_Identnummer = :2, Max_Pruefindex = :3, Hydr_Pruefung= :4, ID_Benutzer= :5, Baujahr= :6 WHERE VT_Fernum = :7 and ANBID = :8", conn);
OracleParameter parm;
parm = new OracleParameter("Auftragsnummer", OracleDbType.Varchar2); parm.Value = pOrder; cmd.Parameters.Add(parm);
parm = new OracleParameter("VT_Identnummer", OracleDbType.Varchar2); parm.Value = "IPBATMXX"; cmd.Parameters.Add(parm);
parm = new OracleParameter("Max_Pruefindex", OracleDbType.Int32); parm.Value = MAX_Pruefindex; cmd.Parameters.Add(parm);
parm = new OracleParameter("Hydr_Pruefung", OracleDbType.Int32); parm.Value = Hydr_Pruefung; cmd.Parameters.Add(parm);
parm = new OracleParameter("ID_Benutzer", OracleDbType.Int32); parm.Value = 6; cmd.Parameters.Add(parm);
parm = new OracleParameter("Baujahr", OracleDbType.Int32); parm.Value = dbCfg.Baujahr; cmd.Parameters.Add(parm);
parm = new OracleParameter("VT_Fernum", OracleDbType.Varchar2); parm.Value = pcbNr; cmd.Parameters.Add(parm);
parm = new OracleParameter("ANBID", OracleDbType.Int32); parm.Value = Anbid_StaraTura; cmd.Parameters.Add(parm);
int rowsUpdated = cmd.ExecuteNonQuery();
}
OracleTransaction transaction = conn.BeginTransaction();
try
{
if (!batchDataSaved)
{
///
/// Batch data
///
DateTime start = results[0].TimeStart;
DateTime end = results[0].TimeEnd;
foreach (var rslt in results)
{
if (rslt.TimeStart < start) start = rslt.TimeStart;
if (rslt.TimeEnd > end) end = rslt.TimeEnd;
}
OracleCommand cmd = new OracleCommand("INSERT INTO VT_PRUEFREIHE_PD(" +
"ANBID, ID_Pruefstand, ID_WzPruefreihe, ID_WZTyp, Rev_WZTyp, Rev_Pruefstand_WZTyp, " +
"StartDatumZeit, EndDatumZeit, Betriebsart, QVzKontakt, " +
"FuellenBegDruck, DruckEvakVorne, DruckEvakHinten, DruckBeiAbpressen, " +
"Druckentwaessern, SpuelDurchflussIst, ProgrammVersion)" +
" VALUES (:1, :2, :3, :4, :5, :6, :7, :8, :9, :10, :11, :12, :13, :14, :15, :16, :17)", conn);
OracleParameter parm;
parm = new OracleParameter("ANBID", OracleDbType.Int32); parm.Value = Anbid_StaraTura; cmd.Parameters.Add(parm); ///:1
parm = new OracleParameter("ID_Pruefstand", OracleDbType.Int32); parm.Value = 18000 + dbCfg.TestBenchId; cmd.Parameters.Add(parm); ///:2
parm = new OracleParameter("ID_WzPruefreihe", OracleDbType.Int32); parm.Value = results[0].BatchNr; cmd.Parameters.Add(parm); ///:3
parm = new OracleParameter("ID_WZTyp", OracleDbType.Int32); parm.Value = wMtr.WMType_ID; cmd.Parameters.Add(parm); ///:4
parm = new OracleParameter("Rev_WZTyp", OracleDbType.Int32); parm.Value = wMtr.WMType_Rev; cmd.Parameters.Add(parm); ///:5
parm = new OracleParameter("Rev_Pruefstand_WZTyp", OracleDbType.Int32); parm.Value = 1; cmd.Parameters.Add(parm); ///:6
parm = new OracleParameter("StartDatumZeit", OracleDbType.TimeStamp); parm.Value = start; cmd.Parameters.Add(parm); ///:7
parm = new OracleParameter("EndDatumZeit", OracleDbType.TimeStamp); parm.Value = end; cmd.Parameters.Add(parm); ///:8
parm = new OracleParameter("Betriebsart", OracleDbType.Varchar2); parm.Value = ""; cmd.Parameters.Add(parm); ///:9
parm = new OracleParameter("QVzKontakt", OracleDbType.Double); parm.Value = 0; cmd.Parameters.Add(parm); ///:10
parm = new OracleParameter("FuellenBegDruck", OracleDbType.Double); parm.Value = 0; cmd.Parameters.Add(parm); ///:11
parm = new OracleParameter("DruckEvakVorne", OracleDbType.Double); parm.Value = 0; cmd.Parameters.Add(parm); ///:12
parm = new OracleParameter("DruckEvakHinten", OracleDbType.Double); parm.Value = 0; cmd.Parameters.Add(parm); ///:13
parm = new OracleParameter("DruckBeiAbpressen", OracleDbType.Double); parm.Value = 0;/*TODO*/ cmd.Parameters.Add(parm); ///:14
parm = new OracleParameter("Druckentwaessern", OracleDbType.Double); parm.Value = 0; cmd.Parameters.Add(parm); ///:15
parm = new OracleParameter("SpuelDurchflussIst", OracleDbType.Double); parm.Value = 0;/*TODO*/ cmd.Parameters.Add(parm); ///:16
parm = new OracleParameter("ProgrammVersion", OracleDbType.Varchar2); parm.Value = Program.Version; cmd.Parameters.Add(parm); ///:17
int rowsUpdated = cmd.ExecuteNonQuery();
batchDataSaved = true;
}
{
OracleCommand cmd = new OracleCommand("INSERT INTO VT_ZAEHLER_PINDEX_PD(" +
"VT_Fernum, Pruefindex, ANBID, ID_Pruefstand, ID_WzPruefreihe, Hydr_Pruefung, " +
"ReedKontakt, ReedKontaktOK, ReedKontaktZeit, KorrImprate, FestWertWZ, PtestOK, " +
"Zaehlerstand, WT_Platz_NR, WZgut, ID_Benutzer, AnzahlPruefungen)" +
" VALUES (:1, :2, :3, :4, :5, :6, 0, 0, 0, :7, 0, :8, 0, :9, :10, :11, :12)", conn);
OracleParameter parm;
parm = new OracleParameter("VT_Fernum", OracleDbType.Varchar2); parm.Value = pcbNr; cmd.Parameters.Add(parm);
parm = new OracleParameter("Pruefindex", OracleDbType.Int32); parm.Value = MAX_Pruefindex % 100; cmd.Parameters.Add(parm);
parm = new OracleParameter("ANBID", OracleDbType.Int32); parm.Value = Anbid_StaraTura; cmd.Parameters.Add(parm);
parm = new OracleParameter("ID_Pruefstand", OracleDbType.Int32); parm.Value = 18000 + dbCfg.TestBenchId; cmd.Parameters.Add(parm);
parm = new OracleParameter("ID_WzPruefreihe", OracleDbType.Int32); parm.Value = results[0].BatchNr; cmd.Parameters.Add(parm);
parm = new OracleParameter("Hydr_Pruefung", OracleDbType.Int32); parm.Value = Hydr_Pruefung; cmd.Parameters.Add(parm);
// ReedKontakt
// ReedKontaktOK
// ReedKontaktZeit
parm = new OracleParameter("KorrImprate", OracleDbType.Double); parm.Value = wMtr.OriginalCalibFactor; cmd.Parameters.Add(parm);
// FestWertWZ
parm = new OracleParameter("PtestOK", OracleDbType.Int32); parm.Value = 0;/*TODO*/ cmd.Parameters.Add(parm);
// Zaehlerstand
parm = new OracleParameter("WT_Platz_NR", OracleDbType.Int32); parm.Value = wmNr + 1; cmd.Parameters.Add(parm);
parm = new OracleParameter("WZgut", OracleDbType.Int32); parm.Value = passed ? 1 : 0; cmd.Parameters.Add(parm);
parm = new OracleParameter("ID_Benutzer", OracleDbType.Int32); parm.Value = 6; cmd.Parameters.Add(parm);
parm = new OracleParameter("AnzahlPruefungen", OracleDbType.Int32); parm.Value = 3; cmd.Parameters.Add(parm);
int rowsUpdated = cmd.ExecuteNonQuery();
}
for (int q = 1; q <= 3; q++)
{
string testName = string.Format("Q{0}", q);
double Q_wm = 0;
double Err_wm = 0;
double testTime = 0;
bool wm_Passed = true;
///
foreach (var rslt in results)
{
if (rslt.TestName.Equals(testName))
{
testTime = rslt.Meters[wmNr].Time;
if (testTime > 1E-10) Q_wm = 3600.0 * rslt.Meters[wmNr].VolumeMeter / testTime;
Err_wm = rslt.Meters[wmNr].VolumeErrorPct;
wm_Passed = rslt.Meters[wmNr].Passed;
}
}
int qq = (q == 0) ? -1 : ((q == 3 && dbCfg.DBUsed == DBUsed.Test) ? 5 : q);
OracleCommand cmd = new OracleCommand("INSERT INTO VT_PRUEFREIHE_IST_PD(" +
"VT_Fernum, Pruefindex, PruefungsNr, ANBID, ID_WZTyp, Rev_WZTyp, Rev_WZPruefpunkt, " +
"Q_WZ, Q_Fehler, Q_Best, NIZ, AnfangZStand, EndZStand, " +
"KorrErrQok, KorrErrQ, KorrQWz, TIZ, Vol_WZ_US, TempMittel_US)" +
" VALUES (:1, :2, :3, :4, :5, :6, :7, :8, :9, :10, :11, :12, :13, 0, 0, 0, :14, 0, 0)", conn);
OracleParameter parm;
parm = new OracleParameter("VT_Fernum", OracleDbType.Varchar2); parm.Value = pcbNr; cmd.Parameters.Add(parm); ///:1
parm = new OracleParameter("Pruefindex", OracleDbType.Int32); parm.Value = MAX_Pruefindex % 100; cmd.Parameters.Add(parm); ///:2
parm = new OracleParameter("PruefungsNr", OracleDbType.Int32); parm.Value = qq; cmd.Parameters.Add(parm); ///:3
parm = new OracleParameter("ANBID", OracleDbType.Int32); parm.Value = Anbid_StaraTura; cmd.Parameters.Add(parm); ///:4
parm = new OracleParameter("ID_WZTyp", OracleDbType.Int32); parm.Value = wMtr.WMType_ID; cmd.Parameters.Add(parm); ///:5
parm = new OracleParameter("Rev_WZTyp", OracleDbType.Int32); parm.Value = wMtr.WMType_Rev; cmd.Parameters.Add(parm); ///:6
parm = new OracleParameter("Rev_WZPruefpunkt", OracleDbType.Int32); parm.Value = 1; cmd.Parameters.Add(parm); ///:7
parm = new OracleParameter("Q_WZ", OracleDbType.Double); parm.Value = Q_wm; cmd.Parameters.Add(parm); ///:8
parm = new OracleParameter("Q_Fehler", OracleDbType.Double); parm.Value = Err_wm; cmd.Parameters.Add(parm); ///:9
parm = new OracleParameter("Q_Best", OracleDbType.Int32); parm.Value = wm_Passed ? 1 : 0; cmd.Parameters.Add(parm); ///:10
parm = new OracleParameter("NIZ", OracleDbType.Int32); parm.Value = 0; cmd.Parameters.Add(parm); ///:11
parm = new OracleParameter("AnfangZStand", OracleDbType.Double); parm.Value = 0;/*TODO*/ cmd.Parameters.Add(parm); ///:12
parm = new OracleParameter("EndZStand", OracleDbType.Double); parm.Value = 0;/*TODO*/ cmd.Parameters.Add(parm); ///:13
/// KorrErrQok
/// KorrErrQ
/// KorrQWz
parm = new OracleParameter("TIZ", OracleDbType.Double); parm.Value = testTime; cmd.Parameters.Add(parm);
/// Vol_WZ_US
/// TempMittel_US
int rowsUpdated = cmd.ExecuteNonQuery();
}
{
int Q2CorrFlowRight;
if (wMtr.CalibrationStruct.FlowArrow == WaterMeters.iPerl.FlowArrow.Left)
{
Q2CorrFlowRight = wMtr.PositiveCounting ? 1 : 2;
}
else
{
Q2CorrFlowRight = wMtr.PositiveCounting ? 2 : 1;
}
OracleCommand cmd = new OracleCommand("INSERT INTO VT_IP_ZAEHLER_PINDEX_PD(" +
"VT_Fernum, Pruefindex, ANBID, WITHCORRECTION2HZ, CORRECTION2HZ, DIFF2HZ8HZ, " +
"WITHQ2CORRECTION, ERRQ2, Q2CORRECTIONFLOWRIGHT, Q2CORRECTIONLEFT, Q2CORRECTIONRIGHT)" +
" VALUES (:1, :2, :3, :4, :5, :6, :7, :8, :9, :10, :11)", conn);
OracleParameter parm;
parm = new OracleParameter("VT_Fernum", OracleDbType.Varchar2); parm.Value = pcbNr; cmd.Parameters.Add(parm); ///:1
parm = new OracleParameter("Pruefindex", OracleDbType.Int32); parm.Value = MAX_Pruefindex % 100; cmd.Parameters.Add(parm); ///:2
parm = new OracleParameter("ANBID", OracleDbType.Int32); parm.Value = Anbid_StaraTura; cmd.Parameters.Add(parm); ///:3
parm = new OracleParameter("WITHCORRECTION2HZ", OracleDbType.Int32); parm.Value = 0; cmd.Parameters.Add(parm); ///:4
parm = new OracleParameter("CORRECTION2HZ", OracleDbType.Double); parm.Value = 0; cmd.Parameters.Add(parm); ///:5
parm = new OracleParameter("DIFF2HZ8HZ", OracleDbType.Double); parm.Value = 0; cmd.Parameters.Add(parm); ///:6
parm = new OracleParameter("WITHQ2CORRECTION", OracleDbType.Int32); parm.Value = wMtr.Q2CorrectionDone ? 1 : 0; cmd.Parameters.Add(parm); ///:7
parm = new OracleParameter("ERRQ2", OracleDbType.Double); parm.Value = wMtr.Q2ErrorWOCorrection; cmd.Parameters.Add(parm); ///:8
parm = new OracleParameter("Q2CORRECTIONFLOWRIGHT", OracleDbType.Int32); parm.Value = Q2CorrFlowRight;/*1=right to left*/ cmd.Parameters.Add(parm); ///:9
parm = new OracleParameter("Q2CORRECTIONLEFT", OracleDbType.Int32); parm.Value = (int)Math.Round(wMtr.CurrentQ2Correction); cmd.Parameters.Add(parm); ///:10
parm = new OracleParameter("Q2CORRECTIONRIGHT", OracleDbType.Int32); parm.Value = (int)Math.Round(wMtr.CurrentQ2Correction / 2); cmd.Parameters.Add(parm); ///:11
int rowsUpdated = cmd.ExecuteNonQuery();
}
transaction.Commit();
}
catch (Exception exc)
{
log.ErrorFormat("Exception in SaveSingleWM2DB(), data not saved!, pcbNr={0}, msg={1}", pcbNr, exc.Message);
transaction.Rollback();
}
}
/// <summary>
/// Write one water meter results into a file
/// </summary>
/// <param name="wmNr">Water meter number (0-based)</param>
void WriteSingleWM(int wmNr, int printedWMNr, IList<Entities.TestResult> results)
{
/// Determine column widths
int[] columnWidths = new int[resultItems.Count];
int totalWidth = 0;
for (int i = 0; i < resultItems.Count; i++)
{
columnWidths[i] = ElSpaces(resultItems[i].ClmnHeaderText).Length;
foreach (var tr in results)
{
if (tr != null)
{
string text = resultItems[i].Print(tr.Meters[wmNr]);
/// Get rid of the color information
string[] texts = text.Split(new char[] { '|' });
if (texts.Length == 2) { text = texts[0]; }
int len = ElSpaces(text).Length;
if (len > columnWidths[i]) columnWidths[i] = len;
}
}
totalWidth += columnWidths[i];
}
totalWidth += 3 * (resultItems.Count - 1);
/// Write water meter number and s/n
writer.Write(string.Format("Water meter {0}", printedWMNr));
if (!string.IsNullOrEmpty(unsortedResults[0].Meters[wmNr].SerialNr))
{
writer.Write(string.Format(" s/n: {0}", unsortedResults[0].Meters[wmNr].SerialNr));
}
writer.WriteLine(string.Empty);
writer.WriteLine(new String('-', totalWidth)); /// Horizontal line above the header
/// Write column headers
for (int i = 0; i < resultItems.Count; i++)
{
writer.Write(ElSpaces(resultItems[i].ClmnHeaderText));
if (i < resultItems.Count - 1)
{
if (!dbCfg.EliminateSpaces)
{
writer.Write(new string(' ', columnWidths[i] - resultItems[i].ClmnHeaderText.Length + 3));
}
writer.Write(separatorStr);
}
else
{
writer.WriteLine(string.Empty);
}
}
writer.WriteLine(new String('-', totalWidth)); /// Horizontal line between the header and the body
/// Write table data
foreach (var tr in results)
{
if (tr != null)
{
for (int i = 0; i < resultItems.Count; i++)
{
string text = resultItems[i].Print(tr.Meters[wmNr]);
/// Get rid of the color information
string[] texts = text.Split(new char[] { '|' });
if (texts.Length == 2) { text = texts[0]; }
writer.Write(ElSpaces(text));
if (i < resultItems.Count - 1)
{
if (!dbCfg.EliminateSpaces)
{
writer.Write(new string(' ', columnWidths[i] - text.Length + 3));
}
writer.Write(separatorStr);
}
else
{
writer.WriteLine(string.Empty);
}
}
}
}
writer.WriteLine(new String('-', totalWidth)); /// Horizontal line below the body
writer.WriteLine(string.Empty);
}
/// <summary>
/// Write one combined water meter results
/// </summary>
/// <param name="wmNr1">Combined water meter number (1-based)</param>
void WriteCombinedWM(int wmNr1)
{
IList<Entities.TestResult> results = Utils.GetSortedTestResults(procedure, unsortedResults, Utils.PartNr(wmNr1, combined));
/// Determin column widths
int[] columnWidths = new int[resultItems.Count];
int totalWidth = 0;
for (int i = 0; i < resultItems.Count; i++)
{
columnWidths[i] = ElSpaces(resultItems[i].ClmnHeaderText).Length;
foreach (var tr in results)
{
if (tr != null)
{
string text = resultItems[i].PrintCombined(tr.Meters[2 * wmNr1 - 2], tr.Meters[2 * wmNr1 - 1], tr.CombinedMeters[wmNr1 - 1]);
int len = ElSpaces(text).Length;
if (len > columnWidths[i]) columnWidths[i] = len;
}
}
totalWidth += columnWidths[i];
}
totalWidth += 3 * (resultItems.Count - 1);
/// Write water meter number and two s/n-s
writer.Write(string.Format("Water meter {0}", wmNr1));
if (!string.IsNullOrEmpty(unsortedResults[0].Meters[2 * wmNr1 - 2].SerialNr))
{
writer.Write(string.Format(", Main s/n: {0}", unsortedResults[0].Meters[2 * wmNr1 - 2].SerialNr));
}
if (!string.IsNullOrEmpty(unsortedResults[0].Meters[2 * wmNr1 - 1].SerialNr))
{
writer.Write(string.Format(", Aux. s/n:{0}", unsortedResults[0].Meters[2 * wmNr1 - 1].SerialNr));
}
writer.WriteLine(string.Empty);
writer.WriteLine(new String('-', totalWidth)); /// Horizontal line above the header
for (int i = 0; i < resultItems.Count; i++)
{
writer.Write(ElSpaces(resultItems[i].ClmnHeaderText));
if (i < resultItems.Count - 1)
{
if (!dbCfg.EliminateSpaces)
{
writer.Write(new string(' ', columnWidths[i] - resultItems[i].ClmnHeaderText.Length + 3));
}
writer.Write(separatorStr);
}
else
{
writer.WriteLine(string.Empty);
}
}
writer.WriteLine(new String('-', totalWidth)); /// Horizontal line between the header and the body
foreach (var tr in results)
{
if (tr != null)
{
for (int i = 0; i < resultItems.Count; i++)
{
string text = resultItems[i].PrintCombined(tr.Meters[2 * wmNr1 - 2], tr.Meters[2 * wmNr1 - 1], tr.CombinedMeters[wmNr1 - 1]);
/// Get rid of the color information
string[] texts = text.Split(new char[] { '|' });
if (texts.Length == 2) { text = texts[0]; }
writer.Write(ElSpaces(text));
if (i < resultItems.Count - 1)
{
if (!dbCfg.EliminateSpaces)
{
writer.Write(new string(' ', columnWidths[i] - text.Length + 3));
}
writer.Write(separatorStr);
}
else
{
writer.WriteLine(string.Empty);
}
}
}
}
writer.WriteLine(new String('-', totalWidth)); /// Horizontal line below the body
writer.WriteLine(string.Empty);
}
/// <summary>Run this operation</summary>
/// <returns>Event.ResultsWritten</returns>
public Event Run()
{
return Event.ResultsWritten;
}
/// <summary>Stop this operation</summary>
public void Stop()
{
}
}
}