2015-08-19 12:17:02 +00:00
///
2021-06-24 07:25:02 +00:00
/// Copyright (c) 2015-2021 Sensus Slovensko a.s.
2015-08-19 12:17:02 +00:00
///
using System ;
using System.Collections.Generic ;
2018-09-19 05:50:49 +00:00
using System.Linq ;
2015-08-19 12:17:02 +00:00
using log4net ;
2021-08-19 09:02:46 +00:00
#if MANAGED
using Oracle.ManagedDataAccess.Client ;
#else
using Oracle.DataAccess.Client ;
#endif
2021-09-23 09:46:40 +00:00
using Common ;
2016-08-02 21:08:16 +00:00
using Config ;
2015-12-04 16:17:20 +00:00
using Config.Entities ;
2020-02-06 12:35:56 +00:00
using Results.Output ;
2019-03-21 14:36:42 +00:00
using System.Text ;
2020-05-12 09:03:09 +00:00
using Events.Entities ;
2015-08-19 12:17:02 +00:00
2018-09-11 11:39:33 +00:00
namespace TBF.BenchControl.Output.DB.SensusOracle
2015-08-19 12:17:02 +00:00
{
2016-01-08 09:23:36 +00:00
public enum Retv
2015-12-18 18:05:13 +00:00
{
OK ,
Error ,
}
2020-11-04 12:29:27 +00:00
public enum DBUsed
{
None ,
Production ,
Test ,
Quality ,
Count
}
public enum WMKind
{
2020-12-07 13:36:21 +00:00
iPERL ,
Mechanical ,
Count
}
/// <summary>
/// Test/Q designation mode for IperlLogger and IperlHead opto data files
/// </summary>
public enum DesigMode
{
Auto ,
Based_on_procedure ,
As_specified ,
2020-11-04 12:29:27 +00:00
Count
}
2019-01-09 12:48:51 +00:00
public class Database : ComponentBase , IOperation , GenericDevices . IResultsWriter , GenericDevices . IStartInfoReader , Generic . IDevice
2015-08-19 12:17:02 +00:00
{
private static readonly ILog log = LogManager . GetLogger ( typeof ( Database ) ) ;
2021-04-07 07:57:42 +00:00
public override string ToString ( ) { return string . Format ( "{0}({1})" , ClassName , Cfg . ToString ( - 1 ) ) ; }
2015-08-19 12:17:02 +00:00
2020-11-04 12:29:27 +00:00
DatabaseCfg dbCfg ;
2021-09-20 07:11:05 +00:00
public int Anbid_Producer { get { return dbCfg . ProducerId ; } }
2020-11-04 12:29:27 +00:00
public DBUsed DBUsed { get { return ( dbCfg = = null | | dbCfg . ProcParams = = null ) ? DBUsed . None : dbCfg . ProcParams . DBUsed ; } }
2020-12-07 13:36:21 +00:00
public WMKind WMKind { get { return ( dbCfg = = null | | dbCfg . ProcParams = = null ) ? WMKind . iPERL : dbCfg . ProcParams . WMKind ; } }
2020-11-04 12:29:27 +00:00
public int WMTypeId { get { return ( dbCfg = = null | | dbCfg . ProcParams = = null ) ? 0 : dbCfg . ProcParams . WMTypeId ; } }
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 ; } }
public bool StartInfoIsRequired { get { return ( dbCfg = = null | | dbCfg . ProcParams = = null ) ? false : dbCfg . ProcParams . StartInfoIsRequired ; } }
2020-12-07 13:36:21 +00:00
public DesigMode DesigMode { get { return ( dbCfg = = null | | dbCfg . ProcParams = = null ) ? DesigMode . Auto : dbCfg . ProcParams . DesigMode ; } }
public LogType DesigType { get { return ( dbCfg = = null | | dbCfg . ProcParams = = null ) ? LogType . Just_Q3Q2Q1 : dbCfg . ProcParams . DesigType ; } }
2019-01-09 12:48:51 +00:00
2019-03-22 10:20:28 +00:00
enum OpState
2017-11-10 09:32:43 +00:00
{
None ,
2019-03-22 10:20:28 +00:00
ReadStartInfoScheduled ,
ReadStartInfoRunning ,
WriteResultsScheduled ,
WriteResultsRunning ,
2017-11-10 09:32:43 +00:00
}
2020-11-04 12:29:27 +00:00
2019-03-22 10:20:28 +00:00
OpState currentOpState ;
2017-11-10 09:32:43 +00:00
bool opCompleted ;
bool anyError ;
2019-01-23 07:34:31 +00:00
/// <summary>
/// Start info is read into WaterMeter objects referenced by this array
/// </summary>
2020-01-31 14:45:30 +00:00
IList < Results . Entities . WaterMeter > waterMeters ;
2019-01-23 07:34:31 +00:00
2015-08-19 12:17:02 +00:00
/// <summary>
/// Results to print
/// </summary>
2016-01-06 21:37:19 +00:00
Results . Entities . Batch batch ;
2021-08-05 06:00:15 +00:00
public OracleConnection ProductionDB ; /// Production Oracle DB connection
public OracleConnection QualityDB ; /// Quality Oracle DB connection
public OracleConnection TestDB ; /// Test Oracle DB connection
2020-11-04 12:29:27 +00:00
2020-12-07 13:36:21 +00:00
public OracleConnection SelectedDB
2020-11-04 12:29:27 +00:00
{
get
{
2020-12-07 13:36:21 +00:00
switch ( DBUsed )
2020-11-04 12:29:27 +00:00
{
2021-08-05 06:00:15 +00:00
case DBUsed . Production : return ProductionDB ;
case DBUsed . Quality : return QualityDB ;
case DBUsed . Test : return TestDB ;
2020-11-04 12:29:27 +00:00
default :
case DBUsed . None :
return null ;
}
}
}
2017-11-10 09:32:43 +00:00
2019-01-23 07:34:31 +00:00
///
2019-02-06 09:34:43 +00:00
/// The following 3 variables are always updated together
2019-01-23 07:34:31 +00:00
///
2019-02-06 09:34:43 +00:00
int wmTypeId ;
int wmTypeRevision ;
2019-03-21 14:36:42 +00:00
string procedureSignature ;
2019-03-20 16:39:01 +00:00
IList < SensusTestInfo > oracleTestInfo ; /// Raw incomplete test info from Oracle DB (or null)
SensusTestInfo [ ] completeTestInfo ; /// Complete TBF test info obtained as the best match (never null when oracleTestInfo != null)
2017-03-22 09:25:07 +00:00
2016-01-06 21:37:19 +00:00
public Database ( ) { }
2015-08-19 12:17:02 +00:00
2016-08-05 12:32:36 +00:00
public Database ( Generic . IComponentCfg cfg )
2015-08-19 12:17:02 +00:00
: base ( cfg )
{
2018-09-04 06:38:57 +00:00
dbCfg = cfg as DatabaseCfg ;
2015-08-19 12:17:02 +00:00
}
2021-04-07 07:57:42 +00:00
public override void Initialize ( )
2015-08-19 15:45:29 +00:00
{
2021-04-07 07:57:42 +00:00
currentOpState = OpState . None ;
2015-08-20 16:14:22 +00:00
2021-09-20 07:11:05 +00:00
//productionDB = new OracleConnection("Data Source=STARA01.WORLD;User Id=deltachef;Password=deltachef;");
//qualityDB = new OracleConnection("Data Source=STARA01.WORLD;User Id=deltaqual;Password=test;");
//testDB = new OracleConnection("Data Source=STARA_TEST.WORLD;User Id=deltachef;Password=deltachef;");
ProductionDB = new OracleConnection ( string . Format ( "Data Source={0};User Id={1};Password={2};" , dbCfg . ProductionDataSource , dbCfg . ProductionUserId , dbCfg . ProductionPassword ) ) ;
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 ) ) ;
///
/// Do something with the database to see if the connection works well
///
2021-04-07 07:57:42 +00:00
if ( dbCfg . DebugLevel = = DebugMode . Normal )
2017-03-14 12:30:01 +00:00
{
2021-09-20 07:11:05 +00:00
SelectedDB . Open ( ) ;
2021-04-07 07:57:42 +00:00
2021-09-20 07:11:05 +00:00
string rslt = "none" ;
OracleCommand cmd = new OracleCommand ( "SELECT 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 ) ;
dr . Close ( ) ;
2017-03-14 12:30:01 +00:00
2021-09-20 07:11:05 +00:00
SelectedDB . Close ( ) ;
2017-03-14 12:30:01 +00:00
2021-04-07 07:57:42 +00:00
log . FatalFormat ( "{0} initialized: {1}" , Name , this ) ;
}
else
{
log . FatalFormat ( "{0} simulated: {1}" , Name , this ) ;
2017-03-14 12:30:01 +00:00
}
2015-08-21 12:30:47 +00:00
}
2021-04-07 07:57:42 +00:00
///
/// IDevice interface implementation
///
public void RunDeviceBefore ( ) { }
2015-08-19 15:45:29 +00:00
public void RunDeviceAfter ( ) { }
2019-01-23 07:34:31 +00:00
///
2015-08-19 15:45:29 +00:00
public void StopDevice ( )
{
2021-08-05 06:00:15 +00:00
if ( TestDB ! = null ) TestDB . Dispose ( ) ;
if ( QualityDB ! = null ) QualityDB . Dispose ( ) ;
if ( ProductionDB ! = null ) ProductionDB . Dispose ( ) ;
2015-08-19 15:45:29 +00:00
}
2020-11-04 12:29:27 +00:00
public void StopDevice2 ( ) { }
2017-12-05 18:26:07 +00:00
2019-01-23 07:34:31 +00:00
/// <summary>
/// Get a complete information about tests given water meter type Id and revision
/// </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>
/// <returns>SensusTestInfos array</returns>
2021-08-19 09:02:46 +00:00
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 )
2019-01-23 07:34:31 +00:00
{
///
/// Read 'incomplete' TestInfo from Oracle database containing only flowId-s ad qBezeichnung-s
///
IList < SensusTestInfo > oraDbTinfos = new List < SensusTestInfo > ( ) ;
2019-02-06 09:34:43 +00:00
///
/// For a given 'wmTypeId' find the most recent active 'wmTypeRevision'
///
wmTypeRevision = - 1 ;
2019-10-07 11:28:15 +00:00
wzTyp = string . Empty ;
metrolKlasse = string . Empty ;
zulasszeichen = string . Empty ;
materialNr = string . Empty ;
q3 = 0 ;
timeStamp = DateTime . MinValue ;
remark = string . Empty ;
2021-01-27 11:53:23 +00:00
OracleCommand cmd = new OracleCommand ( "SELECT rev_wztyp, wztyp, metrolklasse, zulasszeichen, materialnr, qmax, aenderungsdatum, bemerkung " +
"FROM vt_wztyp_sd " +
2021-08-19 09:02:46 +00:00
"WHERE anbid=:1 AND id_wztyp=:2 AND aktiv=:3" , conn ) ;
cmd . Parameters . Add ( new OracleParameter { OracleDbType = OracleDbType . Int32 , Value = Anbid_Producer } ) ;
2019-02-06 09:34:43 +00:00
cmd . Parameters . Add ( new OracleParameter { OracleDbType = OracleDbType . Int32 , Value = wmTypeId } ) ; ///:1
cmd . Parameters . Add ( new OracleParameter { OracleDbType = OracleDbType . Int32 , Value = 1 } ) ; ///:2
2019-01-23 07:34:31 +00:00
///
OracleDataReader dr = cmd . ExecuteReader ( ) ;
while ( dr . Read ( ) )
2019-02-06 09:34:43 +00:00
{
wmTypeRevision = dr . GetInt32 ( 0 ) ;
2019-10-07 11:28:15 +00:00
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 ) ;
2019-02-06 09:34:43 +00:00
}
dr . Close ( ) ;
if ( wmTypeRevision = = - 1 ) return null ; /// No 'wmTypeRevision' found
2021-01-27 11:53:23 +00:00
cmd = new OracleCommand ( "SELECT pruefungsnr, q_soll, pruefzeit, posfehlerkalt, negfehlerkalt, pruefbereichmin, pruefbereichmax, qbezeichnung " +
"FROM vt_pruefpunkt_soll_sd " +
"WHERE anbid=4 AND id_wztyp=:1 AND rev_wztyp=:2" , conn ) ;
2019-02-06 09:34:43 +00:00
cmd . Parameters . Add ( new OracleParameter { OracleDbType = OracleDbType . Int32 , Value = wmTypeId } ) ; ///:1
cmd . Parameters . Add ( new OracleParameter { OracleDbType = OracleDbType . Int32 , Value = wmTypeRevision } ) ; ///:2
///
dr = cmd . ExecuteReader ( ) ;
while ( dr . Read ( ) )
2019-01-23 07:34:31 +00:00
{
int pruefungsNr = dr . GetInt32 ( 0 ) ;
2019-10-07 11:28:15 +00:00
double flow = Config . 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 ) ) ;
2019-01-23 07:34:31 +00:00
}
dr . Close ( ) ;
if ( oraDbTinfos . Count = = 0 ) return null ; /// No 'incomplete' TestInfo in Oracle DN for this 'wmTypeId' and 'wmTypeRevision'
2019-03-20 16:39:01 +00:00
oraDbTinfos = oraDbTinfos . OrderBy ( x = > x . PruefungsNrDB ) . ToList < SensusTestInfo > ( ) ;
2019-01-23 07:34:31 +00:00
foreach ( var ti in oraDbTinfos )
{
2019-03-20 16:39:01 +00:00
log . WarnFormat ( "VT_PRUEFPUNKT_SOLL_SD info : ID={0} Rev={1} PruefungsNr={2} QBezeichnung={3}" , wmTypeId , wmTypeRevision , ti . PruefungsNrDB , ti . QBezeichnungDB ) ;
2019-01-23 07:34:31 +00:00
}
2019-03-20 16:39:01 +00:00
return oraDbTinfos ;
2019-01-23 07:34:31 +00:00
}
2019-01-09 12:48:51 +00:00
/// <summary>
/// Reads information on start of a cycle, Events: Event.InfoRead
/// </summary>
2019-01-23 07:34:31 +00:00
/// <param name="waterMeters">Results of water meters</param>
2019-01-09 12:48:51 +00:00
/// <returns>Reference to the operation</returns>
2020-01-31 14:45:30 +00:00
public IOperation ReadStartInfoOp ( IList < Results . Entities . WaterMeter > waterMeters )
2019-01-09 12:48:51 +00:00
{
2020-12-07 13:36:21 +00:00
if ( ( currentOpState = = OpState . ReadStartInfoRunning ) | | ( currentOpState = = OpState . WriteResultsRunning ) )
2019-01-09 12:48:51 +00:00
{
throw new Exception ( "Sequence error" ) ;
}
else
{
2019-01-23 07:34:31 +00:00
this . waterMeters = waterMeters ;
2019-03-22 10:20:28 +00:00
currentOpState = OpState . ReadStartInfoScheduled ;
2019-01-09 12:48:51 +00:00
return this ;
}
}
2015-08-19 12:17:02 +00:00
/// <summary>
/// Writes the test cycle results into a file, Events: Event.ResultsWritten
/// </summary>
2019-01-09 12:48:51 +00:00
/// <param name="batch">Batch results</param>
2015-08-19 12:17:02 +00:00
/// <returns>Reference to the operation</returns>
2020-03-05 12:59:43 +00:00
public IOperation ProcessResultsOp ( Results . Entities . Batch batch )
2015-08-19 12:17:02 +00:00
{
2020-11-04 12:29:27 +00:00
if ( ! SaveResults )
2019-01-09 12:48:51 +00:00
{
return null ;
}
2019-03-22 10:20:28 +00:00
else if ( ( currentOpState = = OpState . ReadStartInfoRunning ) | | ( currentOpState = = OpState . WriteResultsRunning ) )
2018-09-10 14:39:19 +00:00
{
2018-09-11 11:39:33 +00:00
throw new Exception ( "Sequence error" ) ;
2018-09-10 14:39:19 +00:00
}
2019-01-09 12:48:51 +00:00
else
{
this . batch = batch ;
2019-03-22 10:20:28 +00:00
currentOpState = OpState . WriteResultsScheduled ;
2019-01-09 12:48:51 +00:00
return this ;
}
2015-08-19 12:17:02 +00:00
}
2019-01-23 07:34:31 +00:00
2015-08-19 12:17:02 +00:00
/// <summary>Start this operation</summary>
public void Start ( )
{
2019-03-22 10:20:28 +00:00
if ( currentOpState = = OpState . ReadStartInfoScheduled )
{
currentOpState = OpState . ReadStartInfoRunning ;
}
else if ( currentOpState = = OpState . WriteResultsScheduled )
{
currentOpState = OpState . WriteResultsRunning ;
}
2017-11-10 09:32:43 +00:00
opCompleted = false ;
anyError = false ;
}
2015-11-12 23:03:33 +00:00
2015-12-18 18:05:13 +00:00
/// <summary>Run this operation</summary>
/// <returns>Event.ResultsWritten or Event.Error</returns>
public Event Run ( )
{
2019-03-22 10:20:28 +00:00
if ( currentOpState = = OpState . ReadStartInfoRunning )
2017-11-10 09:32:43 +00:00
{
if ( ! opCompleted )
{
2020-12-07 13:36:21 +00:00
log . WarnFormat ( "{0} : Run() : currentOp = {1}" , Name , currentOpState ) ;
2019-03-06 12:05:49 +00:00
2020-12-07 13:36:21 +00:00
if ( dbCfg . DebugLevel = = DebugMode . Normal & & SelectedDB ! = null & & ReadStartInfo & & waterMeters . Count ! = 0 )
2017-11-10 09:32:43 +00:00
{
2019-03-06 12:05:49 +00:00
#if ORACLE_DB
2020-12-07 13:36:21 +00:00
log . WarnFormat ( "{0} : Run() : reading from database" , Name ) ;
if ( ReadStartInfoFromDB ( SelectedDB ) = = Retv . Error ) anyError = true ;
2019-01-09 12:48:51 +00:00
#endif
2019-03-06 12:05:49 +00:00
}
2020-12-07 13:36:21 +00:00
if ( DesigMode = = DesigMode . Based_on_procedure & & StateMachine . Procedure ! = null )
{
Sequences . ProcessData . CompleteTestInfos = Results . Output . SensusTestInfo . CreateFromProcedure ( StateMachine . Procedure ) ;
}
else if ( DesigMode = = DesigMode . As_specified & & DesigType > = 0 & & DesigType < LogType . Count )
{
Sequences . ProcessData . CompleteTestInfos = SensusTestInfo . GetTestInfos ( DesigType ) ;
}
2019-01-09 12:48:51 +00:00
opCompleted = true ;
}
return anyError ? Event . InfoNotRead : Event . InfoRead ;
}
2019-03-22 10:20:28 +00:00
else if ( currentOpState = = OpState . WriteResultsRunning )
2019-01-09 12:48:51 +00:00
{
if ( ! opCompleted )
{
if ( batch . WaterMeters . Count = = 0 ) return Event . ResultsWritten ;
2019-03-06 12:05:49 +00:00
2020-12-07 13:36:21 +00:00
if ( ( dbCfg . DebugLevel = = DebugMode . Normal ) & & ( SelectedDB ! = null ) )
2019-01-09 12:48:51 +00:00
{
2019-03-22 10:20:28 +00:00
log . WarnFormat ( "{0} : Run() : currentOp = {1}" , Name , currentOpState ) ;
2019-03-06 12:05:49 +00:00
#if ORACLE_DB
2020-12-07 13:36:21 +00:00
if ( WriteResultsToDB ( SelectedDB , batch , false ) = = Retv . Error ) anyError = true ;
2017-11-10 09:32:43 +00:00
#endif
}
opCompleted = true ;
}
2016-02-08 15:34:37 +00:00
2020-11-18 09:44:30 +00:00
if ( anyError & & ! string . IsNullOrEmpty ( Events . DB . ConnectionString ) )
2020-05-12 09:03:09 +00:00
{
try
{
NHibernate . ISession session = Events . DB . CreateSession ( ) ;
Events . DB . LoadSubscribers ( session ) ;
TBF . UiBridge . Bridge . TriggerEvent ( session , Name , EventClass . ComputerResources , Severity . Error ,
string . Format ( "Nepodarilo sa uložiť výsledky do Oracle: Číslo dávky={0}" , batch . BatchNr ) ,
string . Format ( "Nepodarilo sa uložiť výsledky do Oracle\r\nČíslo dávky = {0}" , batch . BatchNr ) ,
SubscriberGroup . Metrology | SubscriberGroup . Maintenance | SubscriberGroup . Production ) ;
}
catch ( Exception exc )
{
log . ErrorFormat ( "Triggering event(s) failed: {0}" , exc . Message ) ;
}
}
2020-11-18 09:44:30 +00:00
return anyError ? Event . ErrorProcessingResults : Event . ResultsWritten ;
2017-11-10 09:32:43 +00:00
}
else
{
return Event . None ;
}
2015-12-18 18:05:13 +00:00
}
/// <summary>Stop this operation</summary>
public void Stop ( )
{
2019-03-22 10:20:28 +00:00
currentOpState = OpState . None ;
2015-12-18 18:05:13 +00:00
}
2015-08-19 12:17:02 +00:00
2017-11-10 09:32:43 +00:00
2019-03-06 12:05:49 +00:00
#if ORACLE_DB
2019-01-23 07:34:31 +00:00
public Retv ReadStartInfoFromDB ( OracleConnection conn )
2019-01-09 12:48:51 +00:00
{
2019-01-23 07:34:31 +00:00
bool anyError = false ;
2019-01-09 12:48:51 +00:00
try
{
conn . Open ( ) ; /// Open the Oracle database
2019-01-23 07:34:31 +00:00
foreach ( var wMtr in waterMeters )
2019-01-09 12:48:51 +00:00
{
2019-01-23 07:34:31 +00:00
if ( ( wMtr ! = null ) & & ( ReadSingleWMfromDB ( conn , wMtr ) ! = Retv . OK ) ) anyError = true ;
2019-01-09 12:48:51 +00:00
}
}
catch ( Exception exc )
{
log . ErrorFormat ( "Reading from ORACLE DB failed, batch={0}, error={1}" , batch . BatchNr , exc . Message ) ;
conn . Close ( ) ;
return Retv . Error ;
}
conn . Close ( ) ;
2019-01-23 07:34:31 +00:00
return anyError ? Retv . Error : Retv . OK ;
2019-01-09 12:48:51 +00:00
}
/// <summary>
/// Read start info of one water meter from the database
2019-01-23 07:34:31 +00:00
/// </summary>
2019-02-06 09:34:43 +00:00
/// <param name="conn">Oracke DB connection</param>
/// <param name="wm">Water meter entity</param>
/// <returns>Retv.OK when successful, Retv.Error on error</returns>
2019-01-23 07:34:31 +00:00
Retv ReadSingleWMfromDB ( OracleConnection conn , Results . Entities . WaterMeter wm )
2019-01-09 12:48:51 +00:00
{
2019-01-23 07:34:31 +00:00
if ( string . IsNullOrEmpty ( wm . SerialNr ) ) return Retv . Error ; /// No database activity possible w/o PCB number
try
{
2019-04-19 09:17:30 +00:00
/// Prepare a procedure signature to distinguish between different procedures with the same wmTypeId
2019-03-21 14:36:42 +00:00
IList < string > wmTestNames = new List < string > ( ) ;
StringBuilder procedureSignatureSB = new StringBuilder ( ) ;
2020-04-20 06:50:29 +00:00
foreach ( var mtr in wm . RegularMeterTestRslts ( ) )
2019-03-21 14:36:42 +00:00
{
wmTestNames . Add ( mtr . Name ( ) ) ;
procedureSignatureSB . Append ( mtr . Name ( ) ) ;
procedureSignatureSB . Append ( "~" ) ;
}
if ( oracleTestInfo = = null | | ( wmTypeId = = 0 ) | | ( wmTypeId ! = wm . WaterMeterData . WMTypeId ) | | ( procedureSignature ! = procedureSignatureSB . ToString ( ) ) )
2019-01-23 07:34:31 +00:00
{
2019-04-19 09:17:30 +00:00
///
/// Currnet test info. is not walid => Get a new one from Oracle and SensusTestInfo table
///
2019-02-06 09:34:43 +00:00
int wmTR ;
2019-10-07 11:28:15 +00:00
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 ) ;
2019-01-23 07:34:31 +00:00
2019-03-20 16:39:01 +00:00
if ( rti ! = null )
2019-01-23 07:34:31 +00:00
{
2019-03-21 14:36:42 +00:00
/// All 5 updated together
2019-02-06 09:34:43 +00:00
wmTypeId = wm . WaterMeterData . WMTypeId ;
wmTypeRevision = wmTR ;
2019-03-21 14:36:42 +00:00
procedureSignature = procedureSignatureSB . ToString ( ) ;
2019-03-20 16:39:01 +00:00
oracleTestInfo = rti ;
2019-05-17 06:13:31 +00:00
string tInfoName ;
completeTestInfo = SensusTestInfo . GetBestMatch ( rti , wmTestNames , out tInfoName ) ;
///
log . WarnFormat ( "Selected test info : {0}" , tInfoName ) ;
2019-03-20 16:39:01 +00:00
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 ) ;
}
2019-01-23 07:34:31 +00:00
}
else
{
return Retv . Error ;
}
}
2019-04-19 09:17:30 +00:00
/// Write the test info. to WaterMeter entity
wm . RawTestInfos = oracleTestInfo ;
wm . CompleteTestInfos = completeTestInfo ;
wm . WMTypeRevision = wmTypeRevision ;
/// Write the test info. to ProcessData
Sequences . ProcessData . RawTestInfos = oracleTestInfo ;
Sequences . ProcessData . CompleteTestInfos = completeTestInfo ;
2019-01-23 07:34:31 +00:00
OracleCommand cmd ;
OracleDataReader dr ;
int maxPruefindex = 0 ;
string purchaseOrder = string . Empty ;
int assignedSerialNr = 0 ;
int paletteNr = 0 ;
int umkartonNr = 0 ;
string completeSerialNr = string . Empty ;
string radioAddress = string . Empty ;
int testBenchID = 0 ;
int pruefreiheID = 0 ;
int wmPosition = 0 ;
bool passed = false ;
int resultCode = 0 ;
int userId = 0 ;
int q2CorrectionRL = 0 ;
int q2CorrectionLR = 0 ;
double q2ErrorBeforeCorrection = 0 ;
///
/// Read data from VT_ZAEHLER_PD
///
2021-01-27 11:53:23 +00:00
/// 100*benchId+MPix, purchase_order, assigned_s/n, palette_nr, box_nr., complete_s/n, radio_address
cmd = new OracleCommand ( "SELECT max_pruefindex, auftragsnummer, zaehlernummer, palette_nr, umkarton_nr, z_nr_komplett, vt_modul_snr " +
"FROM vt_zaehler_pd " +
2021-08-19 09:02:46 +00:00
"WHERE vt_fernum = :1 AND anbid = :2" , conn ) ;
2019-01-23 07:34:31 +00:00
cmd . Parameters . Add ( new OracleParameter { ParameterName = "1" , OracleDbType = OracleDbType . Varchar2 , Value = wm . SerialNr } ) ;
2021-08-19 09:02:46 +00:00
cmd . Parameters . Add ( new OracleParameter { OracleDbType = OracleDbType . Int32 , Value = Anbid_Producer } ) ;
2019-01-23 07:34:31 +00:00
dr = cmd . ExecuteReader ( ) ;
if ( dr . Read ( ) )
{
int i = 0 ;
int benchId_x_100_plus_MaxPruefindex = dr . GetInt32 ( i + + ) ;
maxPruefindex = benchId_x_100_plus_MaxPruefindex % 100 ;
testBenchID = benchId_x_100_plus_MaxPruefindex / 100 ;
try { purchaseOrder = dr . GetString ( i + + ) ; } catch { purchaseOrder = string . Empty ; }
try { assignedSerialNr = dr . GetInt32 ( i + + ) ; } catch { assignedSerialNr = 0 ; }
try { paletteNr = dr . GetInt32 ( i + + ) ; } catch { paletteNr = 0 ; }
try { umkartonNr = dr . GetInt32 ( i + + ) ; } catch { umkartonNr = 0 ; }
try { completeSerialNr = dr . GetString ( i + + ) ; } catch { completeSerialNr = string . Empty ; }
try { radioAddress = dr . GetString ( i + + ) ; } catch { radioAddress = string . Empty ; }
}
else
{
///
/// Water meter with given PCB number was not found in ORACLE
///
log . ErrorFormat ( "Water meter {0} was not found in ORACLE database." , wm . SerialNr ) ;
dr . Close ( ) ;
2020-11-04 12:29:27 +00:00
return StartInfoIsRequired ? Retv . Error : Retv . OK ;
2019-01-23 07:34:31 +00:00
}
dr . Close ( ) ;
2019-01-09 12:48:51 +00:00
2019-01-23 07:34:31 +00:00
///
/// Read data from VT_ZAEHLER_PINDEX_PD
///
2021-01-27 11:53:23 +00:00
/// test_bench_ID, line_ID, WM_position, result, user_ID
cmd = new OracleCommand ( "SELECT pruefindex, id_wzpruefreihe, wt_platz_nr, wzgut, id_benutzer " +
"FROM vt_zaehler_pindex_pd " +
2021-08-19 09:02:46 +00:00
"WHERE vt_fernum = :1 AND anbid = :2" , conn ) ;
2019-01-23 07:34:31 +00:00
cmd . Parameters . Add ( new OracleParameter { ParameterName = "1" , OracleDbType = OracleDbType . Varchar2 , Value = wm . SerialNr } ) ;
2021-08-19 09:02:46 +00:00
cmd . Parameters . Add ( new OracleParameter { OracleDbType = OracleDbType . Int32 , Value = Anbid_Producer } ) ;
2019-01-23 07:34:31 +00:00
dr = cmd . ExecuteReader ( ) ;
while ( dr . Read ( ) )
{
int i = 0 ;
int prfix = ( dr . GetInt32 ( i + + ) % 100 ) ;
if ( prfix = = maxPruefindex )
{
pruefreiheID = dr . GetInt32 ( i + + ) ;
wmPosition = dr . GetInt32 ( i + + ) ;
passed = ( dr . GetInt32 ( i + + ) ! = 0 ) ;
userId = dr . GetInt32 ( i + + ) ;
}
}
dr . Close ( ) ;
///
/// Read data from VT_IP_ZAEHLER_PINDEX_PD
///
/// pruefindex, Q2_correction_RL, Q2_correction_LR, Q2_error_before_correction
2021-01-27 11:53:23 +00:00
cmd = new OracleCommand ( "SELECT pruefindex, q2correctionleft, q2correctionright, errq2 " +
"FROM vt_ip_zaehler_pindex_pd " +
2021-08-19 09:02:46 +00:00
"WHERE vt_fernum = :1 AND anbid = :2" , conn ) ;
2019-02-06 09:34:43 +00:00
cmd . Parameters . Add ( new OracleParameter { OracleDbType = OracleDbType . Varchar2 , Value = wm . SerialNr } ) ;
2021-08-19 09:02:46 +00:00
cmd . Parameters . Add ( new OracleParameter { OracleDbType = OracleDbType . Int32 , Value = Anbid_Producer } ) ;
2019-01-23 07:34:31 +00:00
dr = cmd . ExecuteReader ( ) ;
while ( dr . Read ( ) )
{
int i = 0 ;
int prfix = ( dr . GetInt32 ( i + + ) % 100 ) ;
if ( prfix = = maxPruefindex )
{
q2CorrectionRL = dr . GetInt32 ( i + + ) ;
q2CorrectionLR = dr . GetInt32 ( i + + ) ;
q2ErrorBeforeCorrection = dr . GetDouble ( i + + ) ;
}
}
dr . Close ( ) ;
///
/// Read data from VT_PRUEFREIHE_IST_PD
///
/// testID, flow, rel.err., passed
2021-01-27 11:53:23 +00:00
cmd = new OracleCommand ( "SELECT pruefungsnr, q_wz, q_fehler, q_best " +
"FROM vt_pruefreihe_ist_pd " +
2021-08-19 09:02:46 +00:00
"WHERE vt_fernum = :1 AND pruefindex = :2 AND anbid = :3" , conn ) ;
2019-02-06 09:34:43 +00:00
cmd . Parameters . Add ( new OracleParameter { OracleDbType = OracleDbType . Varchar2 , Value = wm . SerialNr } ) ;
cmd . Parameters . Add ( new OracleParameter { OracleDbType = OracleDbType . Int32 , Value = 100 * testBenchID + maxPruefindex } ) ;
2021-08-19 09:02:46 +00:00
cmd . Parameters . Add ( new OracleParameter { OracleDbType = OracleDbType . Int32 , Value = Anbid_Producer } ) ;
2019-01-23 07:34:31 +00:00
dr = cmd . ExecuteReader ( ) ;
while ( dr . Read ( ) )
{
int i = 0 ;
int testId = dr . GetInt32 ( i + + ) ;
double flow = dr . GetDouble ( i + + ) ;
double error = dr . GetDouble ( i + + ) ;
bool testPassed = ( dr . GetInt32 ( i + + ) ! = 0 ) ;
2019-04-04 08:45:10 +00:00
string baseTestName = null ;
2019-03-20 16:39:01 +00:00
foreach ( var ti in completeTestInfo )
2019-01-23 07:34:31 +00:00
{
2019-03-20 16:39:01 +00:00
if ( ti . PruefungsNrDB = = testId )
2019-01-23 07:34:31 +00:00
{
2019-04-04 08:45:10 +00:00
int ix = ti . TestName . LastIndexOf ( " (" ) ;
baseTestName = ( ix < 0 ) ? ti . TestName : ti . TestName . Substring ( 0 , ix ) ;
2019-01-23 07:34:31 +00:00
break ;
}
}
2019-01-09 12:48:51 +00:00
2019-04-04 08:45:10 +00:00
if ( ! string . IsNullOrEmpty ( baseTestName ) )
2019-01-23 07:34:31 +00:00
{
foreach ( var mtr in wm . MeterTestRslts )
{
string mtrTestName = mtr . TestRslt . Name ( ) ;
int ix = mtrTestName . LastIndexOf ( " (" ) ;
string mtrBaseTestName = ( ix < 0 ) ? mtrTestName : mtrTestName . Substring ( 0 , ix ) ;
2019-04-04 08:45:10 +00:00
if ( mtrBaseTestName = = baseTestName )
2019-01-23 07:34:31 +00:00
{
mtr . LastError = error ;
}
}
}
}
dr . Close ( ) ;
///
/// Copy acquired data to WaterMeter object
///
2019-02-06 09:34:43 +00:00
wm . Pruefindex = maxPruefindex + 1 ; /// Increment the proefindex from Oracle so that it is the pruefindex of the current cycle
2019-01-30 08:49:08 +00:00
log . InfoFormat ( "Data of water meter {0} successfully read from ORACLE database." , wm . SerialNr ) ;
log . DebugFormat ( " MaxPruefindex = {0}" , wm . Pruefindex ) ;
#if TURA_SPECIAL
2019-01-23 07:34:31 +00:00
wm . AssignedSerialNr = assignedSerialNr ;
wm . CompleteSerialNr = completeSerialNr ;
wm . RadioAddress = radioAddress ;
wm . PaletteNr = paletteNr ;
wm . UmkartonNr = umkartonNr ;
wm . ProdTestBench = Results . Utils . BenchNameFromOracleBenchID ( testBenchID ) ;
wm . ProdWMPosition = wmPosition ;
wm . ProdUserName = userId . ToString ( ) ;
wm . ProdPurchaseOrder = purchaseOrder ;
wm . ProdPassed = passed ;
wm . ProdResultCode = resultCode ;
wm . ProdQ2CorrRL = q2CorrectionRL ;
wm . ProdQ2CorrLR = q2CorrectionLR ;
log . DebugFormat ( " AssignedSerialNr = {0}" , wm . AssignedSerialNr ) ;
log . DebugFormat ( " CompleteSerialNr = {0}" , wm . CompleteSerialNr ) ;
log . DebugFormat ( " RadioAddress = {0}" , wm . RadioAddress ) ;
log . DebugFormat ( " PaletteNr = {0}" , wm . PaletteNr ) ;
log . DebugFormat ( " UmkartonNr = {0}" , wm . UmkartonNr ) ;
log . DebugFormat ( " ProdTestBench = {0}" , wm . ProdTestBench ) ;
log . DebugFormat ( " ProdWMPosition = {0}" , wm . ProdWMPosition ) ;
log . DebugFormat ( " ProdUserName = {0}" , wm . ProdUserName ) ;
log . DebugFormat ( " ProdPurchaseOrder = {0}" , wm . ProdPurchaseOrder ) ;
log . DebugFormat ( " ProdPassed = {0}" , wm . ProdPassed ) ;
log . DebugFormat ( " ProdResultCode = {0}" , wm . ProdResultCode ) ;
log . DebugFormat ( " ProdQ2CorrRL = {0}" , wm . ProdQ2CorrRL ) ;
log . DebugFormat ( " ProdQ2CorrLR = {0}" , wm . ProdQ2CorrLR ) ;
2019-01-30 08:49:08 +00:00
#endif
2019-01-23 07:34:31 +00:00
return Retv . OK ;
}
catch ( Exception exc )
{
log . ErrorFormat ( "Error reading data of water meter {0} from ORACLE database: {1}" , wm . SerialNr , exc . Message ) ;
return Retv . Error ;
}
2019-01-09 12:48:51 +00:00
}
public Retv WriteResultsToDB ( OracleConnection conn , Results . Entities . Batch batch , bool safeMode )
2015-12-18 18:05:13 +00:00
{
2019-02-18 08:00:18 +00:00
OracleTransaction transaction ;
2016-02-09 07:31:14 +00:00
2016-01-08 09:23:36 +00:00
try
{
2016-02-09 07:31:14 +00:00
conn . Open ( ) ; /// Open the Oracle database
transaction = conn . BeginTransaction ( ) ;
2019-02-18 08:00:18 +00:00
}
catch ( Exception exc )
{
log . ErrorFormat ( "Results of batch {0} not written to ORACLE DB (phase 1): {1}" ,
batch . BatchNr , exc . Message ) ;
conn . Close ( ) ;
return Retv . Error ;
}
2016-02-09 07:31:14 +00:00
2019-02-18 08:00:18 +00:00
try
{
2016-02-09 07:31:14 +00:00
SaveBatchData ( conn , batch ) ;
2019-01-09 12:48:51 +00:00
foreach ( var wMtr in batch . WaterMeters )
{
2020-12-07 13:36:21 +00:00
if ( WMKind = = WMKind . iPERL )
2019-03-15 09:53:22 +00:00
{
2020-11-04 12:29:27 +00:00
if ( ( wMtr . ErrorFlags & ( ( int ) ErrorFlagMask . E26 | ( int ) ErrorFlagMask . E27 | ( int ) ErrorFlagMask . E28 ) ) = = 0 )
{
/// No production error => write the result of testing to Oracle DB
2020-12-07 13:36:21 +00:00
SaveIperlToDB ( conn , wMtr , safeMode ) ;
2020-11-04 12:29:27 +00:00
}
}
2020-12-07 13:36:21 +00:00
else if ( WMKind = = WMKind . Mechanical )
2020-11-04 12:29:27 +00:00
{
2020-12-07 13:36:21 +00:00
SaveMechanicalMeterToDB ( conn , wMtr , safeMode ) ;
2019-03-15 09:53:22 +00:00
}
2019-01-09 12:48:51 +00:00
}
2015-12-18 18:05:13 +00:00
2016-01-08 09:23:36 +00:00
transaction . Commit ( ) ;
2019-02-18 08:00:18 +00:00
conn . Close ( ) ;
log . ErrorFormat ( "Results of batch {0} correctly written to ORACLE DB" , batch . BatchNr ) ;
return Retv . OK ;
2016-01-08 09:23:36 +00:00
}
catch ( Exception exc )
{
2019-02-18 08:00:18 +00:00
transaction . Rollback ( ) ;
2016-01-08 09:23:36 +00:00
conn . Close ( ) ;
2019-02-18 08:00:18 +00:00
log . ErrorFormat ( "Results of batch {0} not written to ORACLE DB: {1}" , batch . BatchNr , exc . Message ) ;
2016-01-08 09:23:36 +00:00
return Retv . Error ;
2015-08-19 12:17:02 +00:00
}
}
2019-01-09 12:48:51 +00:00
/// <summary>
///
/// </summary>
/// <param name="conn"></param>
/// <param name="wm"></param>
/// <returns></returns>
int ReadMaxPruefindex ( OracleConnection conn , Results . Entities . WaterMeter wm )
{
/// Create a list of all prufindexes for a given PCB Number (the list is initially empty)
IList < int > pruefindexes = new List < int > ( ) ;
{
2021-08-19 09:02:46 +00:00
OracleCommand cmd = new OracleCommand ( "SELECT pruefindex FROM vt_zaehler_pindex_pd WHERE vt_fernum = :1 AND anbid = :2" , conn ) ;
cmd . Parameters . Add ( new OracleParameter { OracleDbType = OracleDbType . Varchar2 , Value = wm . SerialNr } ) ;
cmd . Parameters . Add ( new OracleParameter { OracleDbType = OracleDbType . Int32 , Value = Anbid_Producer } ) ;
2019-01-09 12:48:51 +00:00
2019-03-20 09:58:09 +00:00
using ( OracleDataReader dr = cmd . ExecuteReader ( ) )
{
while ( dr . Read ( ) ) pruefindexes . Add ( dr . GetInt32 ( 0 ) ) ;
dr . Close ( ) ;
}
2019-01-09 12:48:51 +00:00
}
{
2021-01-27 11:53:23 +00:00
/// purchase order assigned s/n radio address
OracleCommand cmd = new OracleCommand ( "SELECT max_pruefindex, auftragsnummer, z_nr_komplett, vt_modul_snr " +
"FROM vt_zaehler_pd " +
2021-08-19 09:02:46 +00:00
"WHERE vt_fernum = :1 AND anbid = :2" , conn ) ;
/// PCB number Producer ID
cmd . Parameters . Add ( new OracleParameter { OracleDbType = OracleDbType . Varchar2 , Value = wm . SerialNr } ) ;
cmd . Parameters . Add ( new OracleParameter { OracleDbType = OracleDbType . Int32 , Value = Anbid_Producer } ) ;
2019-01-09 12:48:51 +00:00
2019-03-20 09:58:09 +00:00
using ( OracleDataReader dr = cmd . ExecuteReader ( ) )
2019-01-09 12:48:51 +00:00
{
2019-03-20 09:58:09 +00:00
while ( dr . Read ( ) ) pruefindexes . Add ( dr . GetInt32 ( 0 ) ) ;
dr . Close ( ) ;
2019-01-09 12:48:51 +00:00
}
}
/// Determine MAX_Pruefindex
int maxPrfIndex = 0 ;
foreach ( var pix in pruefindexes )
{
if ( ( pix % 100 ) > maxPrfIndex ) maxPrfIndex = ( pix % 100 ) ;
}
return maxPrfIndex ;
}
2015-10-23 12:00:22 +00:00
2019-01-23 07:34:31 +00:00
2016-01-08 09:23:36 +00:00
/// <summary>
/// Save common batch data
/// </summary>
/// <param name="b">Batch</param>
2018-09-04 06:38:57 +00:00
void SaveBatchData ( OracleConnection conn , Results . Entities . Batch b )
2016-08-02 21:08:16 +00:00
{
2019-03-21 14:36:42 +00:00
IList < string > wmTestNames = new List < string > ( ) ;
StringBuilder procedureSignatureSB = new StringBuilder ( ) ;
2020-04-20 06:50:29 +00:00
foreach ( var tr in b . RegularTestRslts ( ) )
2019-03-21 14:36:42 +00:00
{
wmTestNames . Add ( tr . Name ( ) ) ;
procedureSignatureSB . Append ( tr . Name ( ) ) ;
procedureSignatureSB . Append ( "~" ) ;
}
2021-08-19 09:02:46 +00:00
if ( ( oracleTestInfo = = null ) | | ( wmTypeId ! = b . WaterMeters [ 0 ] . WaterMeterData . WMTypeId ) | | ( wmTypeRevision = = 0 ) | | ( procedureSignature ! = procedureSignatureSB . ToString ( ) ) )
2017-03-22 09:25:07 +00:00
{
2019-02-06 09:34:43 +00:00
int wmTR = 0 ;
2019-10-07 11:28:15 +00:00
string wzTypStr ;
string metroKlasse ;
string zulasszeichen ;
string materialNr ;
double q3 = 0 ;
DateTime timeStamp ;
string remark ;
2021-08-19 09:02:46 +00:00
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 ) ;
2018-09-19 05:50:49 +00:00
2019-01-23 07:34:31 +00:00
if ( ti ! = null )
2018-09-26 07:36:20 +00:00
{
2019-03-21 14:36:42 +00:00
/// All 5 updated together
2021-08-19 09:02:46 +00:00
wmTypeId = b . WaterMeters [ 0 ] . WaterMeterData . WMTypeId ;
2019-02-06 09:34:43 +00:00
wmTypeRevision = wmTR ;
2019-03-21 14:36:42 +00:00
procedureSignature = procedureSignatureSB . ToString ( ) ;
oracleTestInfo = ti ;
completeTestInfo = SensusTestInfo . GetBestMatch ( oracleTestInfo , wmTestNames ) ;
2019-03-20 16:39:01 +00:00
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 ) ;
}
2018-09-19 05:50:49 +00:00
}
else
{
throw new Exception ( "No matching test infos found" ) ;
}
2017-03-22 09:25:07 +00:00
}
2019-03-20 16:39:01 +00:00
if ( oracleTestInfo = = null | | completeTestInfo = = null | | wmTypeId = = 0 | | wmTypeRevision = = 0 )
2019-02-06 09:34:43 +00:00
{
throw new Exception ( "No matching test infos found" ) ;
}
2019-03-20 16:39:01 +00:00
2021-09-20 07:11:05 +00:00
if ( dbCfg . DebugLevel = = DebugMode . Normal )
2019-03-20 09:58:09 +00:00
{
2021-01-27 11:53:23 +00:00
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 ) ;
2019-03-20 09:58:09 +00:00
2021-08-19 09:02:46 +00:00
cmd . Parameters . Add ( new OracleParameter { OracleDbType = OracleDbType . Int32 , Value = Anbid_Producer } ) ;
2019-03-20 09:58:09 +00:00
cmd . Parameters . Add ( new OracleParameter { OracleDbType = OracleDbType . Int32 , Value = 18000 + b . TestBenchId } ) ;
cmd . Parameters . Add ( new OracleParameter { OracleDbType = OracleDbType . Int32 , Value = b . BatchNr } ) ;
2021-08-19 09:02:46 +00:00
cmd . Parameters . Add ( new OracleParameter { OracleDbType = OracleDbType . Int32 , Value = b . WaterMeters [ 0 ] . WaterMeterData . WMTypeId } ) ;
2019-03-20 09:58:09 +00:00
cmd . Parameters . Add ( new OracleParameter { OracleDbType = OracleDbType . Int32 , Value = wmTypeRevision } ) ;
cmd . Parameters . Add ( new OracleParameter { OracleDbType = OracleDbType . Int32 , Value = 1 } ) ;
cmd . Parameters . Add ( new OracleParameter { OracleDbType = OracleDbType . TimeStamp , Value = b . StartTime } ) ;
cmd . Parameters . Add ( new OracleParameter { OracleDbType = OracleDbType . TimeStamp , Value = b . EndTime } ) ;
cmd . Parameters . Add ( new OracleParameter { OracleDbType = OracleDbType . Varchar2 , Value = string . Empty } ) ;
cmd . Parameters . Add ( new OracleParameter { OracleDbType = OracleDbType . Double , Value = 0 } ) ;
cmd . Parameters . Add ( new OracleParameter { OracleDbType = OracleDbType . Double , Value = 0 } ) ;
cmd . Parameters . Add ( new OracleParameter { OracleDbType = OracleDbType . Double , Value = 0 } ) ;
cmd . Parameters . Add ( new OracleParameter { OracleDbType = OracleDbType . Double , Value = 0 } ) ;
cmd . Parameters . Add ( new OracleParameter { OracleDbType = OracleDbType . Double , Value = 0 } ) ; /// TODO: DruckBeiAbpressen
cmd . Parameters . Add ( new OracleParameter { OracleDbType = OracleDbType . Double , Value = 0 } ) ;
cmd . Parameters . Add ( new OracleParameter { OracleDbType = OracleDbType . Double , Value = 0 } ) ; /// TODO: SpuelDurchflussIst
cmd . Parameters . Add ( new OracleParameter { OracleDbType = OracleDbType . Varchar2 , Value = string . Format ( "TBF v.{0}" , b . ProgramVersion ) } ) ;
cmd . ExecuteNonQuery ( ) ; /// Returns nr. of updated rows
2021-08-19 09:02:46 +00:00
log . InfoFormat ( "VT_PRUEFREIHE_PD inserted, BatchNr={0}, TypeId={1}, TypeRev={2}, Start={3}" , b . BatchNr , b . WaterMeters [ 0 ] . WaterMeterData . WMTypeId , wmTypeRevision , b . StartTime ) ;
2019-03-20 09:58:09 +00:00
}
else
{
2021-08-19 09:02:46 +00:00
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 ) ;
2019-03-20 09:58:09 +00:00
}
2018-09-19 05:50:49 +00:00
2019-03-20 16:39:01 +00:00
foreach ( var testInfo in completeTestInfo )
2016-08-02 21:08:16 +00:00
{
2019-03-20 16:39:01 +00:00
if ( ( testInfo . PruefungsNrDB ! = 0 ) & & ( - 20 < = testInfo . PruefungsNrDB ) & & ( testInfo . PruefungsNrDB < = 20 ) ) /// LU PruefungsNr-s are between -20 and 20
2019-02-06 09:34:43 +00:00
{
Results . Entities . TestRslt tr = b . GetTestRslt ( testInfo . TestName , 0 ) ;
if ( tr = = null ) tr = b . GetTestRslt ( testInfo . 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 ;
2019-03-20 09:58:09 +00:00
///
2021-09-20 07:11:05 +00:00
if ( dbCfg . DebugLevel = = DebugMode . Normal )
2019-03-20 09:58:09 +00:00
{
#if false
2021-01-27 11:53:23 +00:00
OracleCommand cmd2 = new OracleCommand ( "INSERT INTO vt_pruefdurchfluss_pd(anbid, id_pruefstand, id_wzpruefreihe, pruefungsnr, pvol, pmasse," +
" mindurchfluss, maxdurchfluss, q_ist, kfaktor, q_vz, f_vz, regeleinstellzeit, drehzahl, beginndruck_vorne," +
" beginndruck_hinten, enddruck_vorne, enddruck_hinten, tvwz, ivwz, verwendeter_vz, beginngewicht, endgewicht) " +
2019-03-20 09:58:09 +00:00
"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 ) ;
2021-08-19 09:02:46 +00:00
cmd . Parameters . Add ( new OracleParameter { OracleDbType = OracleDbType . Int32 , Value = Anbid_Producer } ) ;
2019-03-20 09:58:09 +00:00
cmd . Parameters . Add ( new OracleParameter { OracleDbType = OracleDbType . Int32 , Value = 18000 + 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 . 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 ) } ) ;
cmd . Parameters . Add ( new OracleParameter { OracleDbType = OracleDbType . Double , Value = tr . ErrorMaster } ) ;
cmd . Parameters . Add ( new OracleParameter { OracleDbType = OracleDbType . Double , Value = ( double ) tr . FlowSetTime } ) ;
cmd . Parameters . Add ( new OracleParameter { OracleDbType = OracleDbType . Int32 , Value = 0 } ) ; /// TODO
cmd . Parameters . Add ( new OracleParameter { OracleDbType = OracleDbType . Double , Value = Units . ConvertTo ( Unit . bar , tr . PressUpStart ) } ) ;
cmd . Parameters . Add ( new OracleParameter { OracleDbType = OracleDbType . Double , Value = Units . ConvertTo ( Unit . bar , tr . PressDownStart ) } ) ;
cmd . Parameters . Add ( new OracleParameter { OracleDbType = OracleDbType . Double , Value = Units . ConvertTo ( Unit . bar , tr . PressUpEnd ) } ) ;
cmd . Parameters . Add ( new OracleParameter { OracleDbType = OracleDbType . Double , Value = Units . ConvertTo ( Unit . bar , tr . PressDownEnd ) } ) ;
cmd . Parameters . Add ( new OracleParameter { OracleDbType = OracleDbType . Double , Value = tr . TestTime } ) ;
cmd . Parameters . Add ( new OracleParameter { OracleDbType = OracleDbType . Int32 , Value = tr . PulsesMaster } ) ;
cmd . Parameters . Add ( new OracleParameter { OracleDbType = OracleDbType . Int32 , Value = 0 } ) ; /// TODO
cmd . Parameters . Add ( new OracleParameter { OracleDbType = OracleDbType . Double , Value = Units . ConvertTo ( Unit . kg , tr . MassStart ) } ) ;
cmd . Parameters . Add ( new OracleParameter { OracleDbType = OracleDbType . Double , Value = Units . ConvertTo ( Unit . kg , tr . MassEnd ) } ) ;
cmd2 . ExecuteNonQuery ( ) ; /// Returns nr. of updated rows
2019-02-06 09:34:43 +00:00
#else
2021-01-27 11:53:23 +00:00
var cmd2 = new OracleCommand ( "INSERT INTO vt_pruefdurchfluss_pd(anbid, id_pruefstand, id_wzpruefreihe, pruefungsnr," +
" pvol, pmasse, mindurchfluss, maxdurchfluss, q_ist, kfaktor, q_vz, f_vz, regeleinstellzeit," +
" drehzahl, beginndruck_vorne, beginndruck_hinten, enddruck_vorne, enddruck_hinten," +
" 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 ) ;
2019-03-20 09:58:09 +00:00
OracleParameter parm ;
2021-08-19 09:02:46 +00:00
parm = new OracleParameter ( "ANBID" , OracleDbType . Int32 ) ; parm . Value = Anbid_Producer ; cmd2 . Parameters . Add ( parm ) ; ///:1
2019-03-20 16:39:01 +00:00
parm = new OracleParameter ( "ID_Pruefstand" , OracleDbType . Int32 ) ; parm . Value = 18000 + b . TestBenchId ; cmd2 . Parameters . Add ( parm ) ; ///:2
parm = new OracleParameter ( "ID_WzPruefreihe" , OracleDbType . Int32 ) ; parm . Value = b . BatchNr ; cmd2 . Parameters . Add ( parm ) ; ///:3
parm = new OracleParameter ( "PruefungsNr" , OracleDbType . Int32 ) ; parm . Value = testInfo . PruefungsNrDB ; cmd2 . Parameters . Add ( parm ) ; ///:4
2019-03-20 09:58:09 +00:00
///
2019-03-20 16:39:01 +00:00
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
2019-03-20 09:58:09 +00:00
///
2019-03-20 16:39:01 +00:00
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
2019-03-20 09:58:09 +00:00
///
2019-03-20 16:39:01 +00:00
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
2019-03-20 09:58:09 +00:00
///
cmd2 . ExecuteNonQuery ( ) ; /// Returns nr. of updated rows
2021-08-19 09:02:46 +00:00
log . InfoFormat ( "VT_PRUEFDURCHFLUSS_PD inserted ({0}, {1}, {2}, {3}, {4} ...)" , Anbid_Producer , 18000 + b . TestBenchId , b . BatchNr , testInfo . PruefungsNrDB , Q_ist ) ;
2019-02-06 09:34:43 +00:00
#endif
2019-03-20 09:58:09 +00:00
}
else
{
2021-08-19 09:02:46 +00:00
log . WarnFormat ( "SIM: VT_PRUEFDURCHFLUSS_PD inserted ({0}, {1}, {2}, {3}, {4} ...)" , Anbid_Producer , 18000 + b . TestBenchId , b . BatchNr , testInfo . PruefungsNrDB , Q_ist ) ;
2019-03-20 09:58:09 +00:00
}
2019-02-06 09:34:43 +00:00
}
2016-08-02 21:08:16 +00:00
}
2016-02-09 13:30:21 +00:00
log . InfoFormat ( "Batch data saved, batchNr={0}" , b . BatchNr ) ;
2016-08-02 21:08:16 +00:00
}
2015-11-10 22:29:14 +00:00
2020-11-04 12:29:27 +00:00
/// <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>
2020-12-07 13:36:21 +00:00
void SaveIperlToDB ( OracleConnection conn , Results . Entities . WaterMeter wm , bool safeMode )
2020-11-04 12:29:27 +00:00
{
if ( safeMode & & ! wm . Passed ) return ;
if ( string . IsNullOrEmpty ( wm . SerialNr ) ) return ; /// No database activity possible w/o PCB number
int maxpruefindexLowPart = ReadMaxPruefindex ( conn , wm ) ;
TBF . BenchControl . GenericDevices . IBenchInfo benchInfo = TBF . BenchControl . Sequences . ProcessData . BenchInfo ;
int testBenchID = ( benchInfo ! = null ) ? benchInfo . TestBenchId : 1 ;
int MAX_Pruefindex = 100 * testBenchID + maxpruefindexLowPart + 1 ;
int Hydr_Pruefung ;
if ( wm . Passed )
{
/// Passed
if ( maxpruefindexLowPart = = 0 )
Hydr_Pruefung = 96 ;
else
Hydr_Pruefung = 224 ;
}
else
{
/// Failed
Hydr_Pruefung = 97 ; /// Hydr. test failed, Pressure test passed
}
wm . Pruefindex = MAX_Pruefindex ;
wm . HydrPruefung = Hydr_Pruefung ;
SaveOrUpdateIperl ( conn , wm , MAX_Pruefindex , Hydr_Pruefung ) ;
}
void SaveOrUpdateIperl ( OracleConnection conn , Results . Entities . WaterMeter wm , int max_Pruefindex , int hydr_Pruefung )
2016-01-08 09:23:36 +00:00
{
int sekundaere_Adr = wm . Passed ? 1 : 0 ;
2016-12-22 07:24:31 +00:00
int idBenutzer = 6 ; // = wm.Batch.UserNumber;
2016-01-08 09:23:36 +00:00
2021-09-20 07:11:05 +00:00
if ( dbCfg . DebugLevel = = DebugMode . Normal )
2021-08-05 06:00:15 +00:00
{
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 ) ;
cmd . Parameters . Add ( new OracleParameter { OracleDbType = OracleDbType . Varchar2 , Value = wm . PurchaseOrder } ) ;
cmd . Parameters . Add ( new OracleParameter { OracleDbType = OracleDbType . Varchar2 , Value = "IPBATMXX" } ) ;
cmd . Parameters . Add ( new OracleParameter { OracleDbType = OracleDbType . Int32 , Value = max_Pruefindex } ) ;
cmd . Parameters . Add ( new OracleParameter { OracleDbType = OracleDbType . Int32 , Value = hydr_Pruefung } ) ;
cmd . Parameters . Add ( new OracleParameter { OracleDbType = OracleDbType . Int32 , Value = idBenutzer } ) ;
cmd . Parameters . Add ( new OracleParameter { OracleDbType = OracleDbType . Int32 , Value = YearOfManufacture } ) ;
cmd . Parameters . Add ( new OracleParameter { OracleDbType = OracleDbType . Varchar2 , Value = wm . SerialNr } ) ;
2021-08-19 09:02:46 +00:00
cmd . Parameters . Add ( new OracleParameter { OracleDbType = OracleDbType . Int32 , Value = Anbid_Producer } ) ;
2021-08-05 06:00:15 +00:00
int updatedRows = cmd . ExecuteNonQuery ( ) ;
int insertedRows = 0 ;
if ( updatedRows = = 0 )
{
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 ) ;
2019-03-20 09:58:09 +00:00
cmd . Parameters . Add ( new OracleParameter { OracleDbType = OracleDbType . Varchar2 , Value = wm . PurchaseOrder } ) ;
cmd . Parameters . Add ( new OracleParameter { OracleDbType = OracleDbType . Varchar2 , Value = "IPBATMXX" } ) ;
cmd . Parameters . Add ( new OracleParameter { OracleDbType = OracleDbType . Varchar2 , Value = wm . SerialNr } ) ;
cmd . Parameters . Add ( new OracleParameter { OracleDbType = OracleDbType . Int32 , Value = max_Pruefindex } ) ;
cmd . Parameters . Add ( new OracleParameter { OracleDbType = OracleDbType . Int32 , Value = - 1 } ) ;
cmd . Parameters . Add ( new OracleParameter { OracleDbType = OracleDbType . Int32 , Value = sekundaere_Adr } ) ;
cmd . Parameters . Add ( new OracleParameter { OracleDbType = OracleDbType . Int32 , Value = hydr_Pruefung } ) ;
cmd . Parameters . Add ( new OracleParameter { OracleDbType = OracleDbType . Int32 , Value = idBenutzer } ) ;
2021-08-19 09:02:46 +00:00
cmd . Parameters . Add ( new OracleParameter { OracleDbType = OracleDbType . Int32 , Value = Anbid_Producer } ) ;
2020-11-04 12:29:27 +00:00
cmd . Parameters . Add ( new OracleParameter { OracleDbType = OracleDbType . Int32 , Value = YearOfManufacture } ) ;
2019-03-20 09:58:09 +00:00
2021-08-05 06:00:15 +00:00
insertedRows = cmd . ExecuteNonQuery ( ) ;
2019-03-20 09:58:09 +00:00
2021-08-05 06:00:15 +00:00
if ( insertedRows = = 0 )
{
throw new Exception ( string . Format ( "Failed to insert or update VT_ZAEHLER_PD: PcbNr={0}, pos={1}, maxPruefix={2}" , wm . SerialNr , wm . WMPosition , max_Pruefindex ) ) ;
}
}
2019-03-20 09:58:09 +00:00
2021-08-05 06:00:15 +00:00
if ( insertedRows > 0 )
{
log . InfoFormat ( "VT_ZAEHLER_PD {0} row inserted, PcbNr={1}, pos={2}, maxPruefix={3}" , insertedRows , wm . SerialNr , wm . WMPosition , max_Pruefindex ) ;
2019-03-20 09:58:09 +00:00
}
else
{
2021-08-05 06:00:15 +00:00
log . InfoFormat ( "VT_ZAEHLER_PD: {0} rows updated, PcbNr={1}, pos={2}, maxPruefix={3}" , updatedRows , wm . SerialNr , wm . WMPosition , max_Pruefindex ) ;
2019-03-20 09:58:09 +00:00
}
2016-02-09 13:30:21 +00:00
}
2021-08-05 06:00:15 +00:00
else
{
log . WarnFormat ( "SIM: VT_ZAEHLER_PD inserted or updated, PcbNr={0}, pos={1}, maxPruefix={2}" , wm . SerialNr , wm . WMPosition , max_Pruefindex ) ;
}
2016-01-08 09:23:36 +00:00
2021-09-20 07:11:05 +00:00
if ( dbCfg . DebugLevel = = DebugMode . Normal )
2019-03-20 09:58:09 +00:00
{
2021-01-27 11:53:23 +00:00
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 ) ; /// ReedKontakt = ReedKontaktOK = ReedKontaktZeit = FestWertWZ = Zaehlerstand = 0
2019-02-05 13:13:37 +00:00
cmd . Parameters . Add ( new OracleParameter { OracleDbType = OracleDbType . Varchar2 , Value = wm . SerialNr } ) ;
2021-09-20 12:32:20 +00:00
cmd . Parameters . Add ( new OracleParameter { OracleDbType = OracleDbType . Int32 , Value = max_Pruefindex } ) ;
2021-08-19 09:02:46 +00:00
cmd . Parameters . Add ( new OracleParameter { OracleDbType = OracleDbType . Int32 , Value = Anbid_Producer } ) ;
2019-03-20 09:58:09 +00:00
cmd . Parameters . Add ( new OracleParameter { OracleDbType = OracleDbType . Int32 , Value = 18000 + wm . Batch . TestBenchId } ) ;
cmd . Parameters . Add ( new OracleParameter { OracleDbType = OracleDbType . Int32 , Value = wm . Batch . BatchNr } ) ;
cmd . Parameters . Add ( new OracleParameter { OracleDbType = OracleDbType . Int32 , Value = hydr_Pruefung } ) ;
2019-02-05 13:13:37 +00:00
cmd . Parameters . Add ( new OracleParameter { OracleDbType = OracleDbType . Double , Value = wm . OrigCalibFactor } ) ;
2021-09-14 09:22:35 +00:00
cmd . Parameters . Add ( new OracleParameter { OracleDbType = OracleDbType . Int32 , Value = 0 } ) ; /// TODO: pressure test
2019-03-20 09:58:09 +00:00
cmd . Parameters . Add ( new OracleParameter { OracleDbType = OracleDbType . Int32 , Value = wm . WMPosition } ) ;
cmd . Parameters . Add ( new OracleParameter { OracleDbType = OracleDbType . Int32 , Value = wm . Passed ? 1 : 0 } ) ;
cmd . Parameters . Add ( new OracleParameter { OracleDbType = OracleDbType . Int32 , Value = idBenutzer } ) ;
cmd . Parameters . Add ( new OracleParameter { OracleDbType = OracleDbType . Int32 , Value = 3 } ) ;
2016-01-08 09:23:36 +00:00
2019-03-20 09:58:09 +00:00
cmd . ExecuteNonQuery ( ) ;
2016-02-09 13:30:21 +00:00
log . InfoFormat ( "VT_ZAEHLER_PINDEX_PD inserted, PcbNr={0}, pos={1}, pruefix={2}" , wm . SerialNr , wm . WMPosition , max_Pruefindex % 100 ) ;
}
2019-03-20 09:58:09 +00:00
else
{
log . WarnFormat ( "SIM: VT_ZAEHLER_PINDEX_PD inserted, PcbNr={0}, pos={1}, pruefix={2}" , wm . SerialNr , wm . WMPosition , max_Pruefindex % 100 ) ;
}
2016-01-08 09:23:36 +00:00
2017-03-22 09:25:07 +00:00
2019-03-20 16:39:01 +00:00
foreach ( var testInfo in completeTestInfo )
2017-03-22 09:25:07 +00:00
{
2019-03-20 16:39:01 +00:00
if ( ( testInfo . PruefungsNrDB ! = 0 ) & & ( - 20 < = testInfo . PruefungsNrDB ) & & ( testInfo . PruefungsNrDB < = 20 ) ) /// LU PruefungsNr-s are nonzero and between -20 and 20
2017-07-14 14:31:05 +00:00
{
2019-02-06 09:34:43 +00:00
Results . Entities . TestData tData = wm . GetTestData ( testInfo . TestName ) ;
Results . Entities . MeterTestRslt mtr ;
if ( tData = = null )
2017-07-14 14:31:05 +00:00
{
2019-02-06 09:34:43 +00:00
throw new Exception ( string . Format ( "'{0}' test results missing, watermeter {1}" , testInfo . TestName , wm . WMPosition ) ) ;
}
else if ( tData . Repeats = = 1 )
{
mtr = wm . GetMeterTestRslt ( testInfo . TestName ) ;
if ( mtr = = null ) throw new Exception ( string . Format ( "'{0}' test results missing, watermeter {1}" , testInfo . TestName , wm . WMPosition ) ) ;
}
else
{
Results . Entities . MeterTestRslt firstMtr = wm . GetMeterTestRslt ( Utils . TestTitle ( tData , 1 ) ) ;
if ( firstMtr = = null ) throw new Exception ( string . Format ( "'{0}' test results missing, watermeter {1}" , Utils . TestTitle ( tData , 1 ) , wm . WMPosition ) ) ;
mtr = new Results . Entities . MeterTestRslt ( ) ;
mtr . CopyContentFrom ( firstMtr ) ;
mtr . TestRslt = firstMtr . TestRslt ;
mtr . WaterMeter = firstMtr . WaterMeter ;
for ( int i = 2 ; i < = tData . Repeats ; i + + )
{
Results . Entities . MeterTestRslt nextMtr = wm . GetMeterTestRslt ( Utils . TestTitle ( tData , i ) ) ;
if ( nextMtr = = null ) throw new Exception ( string . Format ( "'{0}' test results missing, watermeter {1}" , Utils . TestTitle ( tData , i ) , wm . WMPosition ) ) ;
mtr . TestTime + = nextMtr . TestTime ;
mtr . VolumeMeter + = nextMtr . VolumeMeter ;
mtr . VolumeRef + = nextMtr . VolumeRef ;
mtr . VolumeEnd = nextMtr . VolumeEnd ;
mtr . Passed = ( mtr . Passed & & nextMtr . Passed ) ;
}
mtr . Error = Formulas . ErrorFromVolumes ( mtr . VolumeMeter , mtr . VolumeRef ) ;
2017-07-14 14:31:05 +00:00
}
2017-03-22 09:25:07 +00:00
2019-03-20 16:39:01 +00:00
SaveMeterTestResult ( conn , mtr , testInfo . PruefungsNrDB , max_Pruefindex , wmTypeRevision ) ;
2019-02-06 09:34:43 +00:00
}
2015-11-10 22:29:14 +00:00
}
2016-01-08 09:23:36 +00:00
2017-07-14 14:31:05 +00:00
2021-09-20 07:11:05 +00:00
if ( dbCfg . DebugLevel = = DebugMode . Normal )
2019-03-20 09:58:09 +00:00
{
2016-02-10 21:20:15 +00:00
double q2ErrWOCorrection = Math . Min ( 100.0 , Math . Max ( - 100.0 , wm . Q2ErrWOCorrection ) ) ;
2021-01-27 11:53:23 +00:00
OracleCommand cmd = new OracleCommand ( "INSERT INTO vt_ip_zaehler_pindex_pd(vt_fernum, pruefindex, anbid," +
" withcorrection2hz, correction2hz, diff2hz8hz, withq2correction," +
" q2correctionright, errq2, q2correctionflowright, q2correctionleft) " +
"VALUES (:1, :2, :3, :4, :5, :6, :7, :8, :9, :10, :11)" , conn ) ;
2019-02-05 13:13:37 +00:00
cmd . Parameters . Add ( new OracleParameter { OracleDbType = OracleDbType . Varchar2 , Value = wm . SerialNr } ) ;
2019-03-20 09:58:09 +00:00
cmd . Parameters . Add ( new OracleParameter { OracleDbType = OracleDbType . Int32 , Value = max_Pruefindex } ) ;
2021-08-19 09:02:46 +00:00
cmd . Parameters . Add ( new OracleParameter { OracleDbType = OracleDbType . Int32 , Value = Anbid_Producer } ) ;
2019-03-20 09:58:09 +00:00
cmd . Parameters . Add ( new OracleParameter { OracleDbType = OracleDbType . Int32 , Value = wm . Hz2CorrectionDone ? 1 : 0 } ) ;
2019-02-05 13:13:37 +00:00
cmd . Parameters . Add ( new OracleParameter { OracleDbType = OracleDbType . Double , Value = wm . Hz2Correction } ) ;
cmd . Parameters . Add ( new OracleParameter { OracleDbType = OracleDbType . Double , Value = Math . Min ( 99.0 , Math . Max ( - 99.0 , wm . Diff2Hz8Hz ) ) } ) ;
2019-04-03 14:34:05 +00:00
cmd . Parameters . Add ( new OracleParameter { OracleDbType = OracleDbType . Int32 , Value = ( ( wm . Q2CorrRL ! = 0 ) | | ( wm . Q2CorrLR ! = 0 ) ) ? 1 : 0 } ) ;
2019-03-20 09:58:09 +00:00
cmd . Parameters . Add ( new OracleParameter { OracleDbType = OracleDbType . Int32 , Value = wm . Q2CorrLR } ) ;
2019-02-05 13:13:37 +00:00
cmd . Parameters . Add ( new OracleParameter { OracleDbType = OracleDbType . Double , Value = q2ErrWOCorrection } ) ;
2019-03-20 09:58:09 +00:00
cmd . Parameters . Add ( new OracleParameter { OracleDbType = OracleDbType . Int32 , Value = wm . Q2CorrFlowRight } ) ; /// 1 = R->L
cmd . Parameters . Add ( new OracleParameter { OracleDbType = OracleDbType . Int32 , Value = wm . Q2CorrRL } ) ;
2016-01-08 09:23:36 +00:00
2019-03-20 09:58:09 +00:00
int rowsUpdated = cmd . ExecuteNonQuery ( ) ;
2016-02-09 13:30:21 +00:00
log . InfoFormat ( "VT_IP_ZAEHLER_PINDEX_PD inserted, PcbNr={0}, pruefix={1}" , wm . SerialNr , max_Pruefindex ) ;
2019-03-20 09:58:09 +00:00
}
else
{
log . WarnFormat ( "SIM: VT_IP_ZAEHLER_PINDEX_PD inserted, PcbNr={0}, pruefix={1}" , wm . SerialNr , max_Pruefindex ) ;
2016-02-09 13:30:21 +00:00
}
2016-01-08 09:23:36 +00:00
}
2020-11-04 12:29:27 +00:00
/// <summary>
2020-12-07 13:36:21 +00:00
/// Write results of one mechanical meter into the database
2020-11-04 12:29:27 +00:00
/// </summary>
/// <param name="wmNr">0-based water meter number</param>
/// <param name="results">Sorted list of results to save</param>
2020-12-07 13:36:21 +00:00
void SaveMechanicalMeterToDB ( OracleConnection conn , Results . Entities . WaterMeter wm , bool safeMode )
2020-11-04 12:29:27 +00:00
{
if ( safeMode & & ! wm . Passed ) return ;
if ( string . IsNullOrEmpty ( wm . SerialNr ) ) return ; /// No database activity possible w/o PCB number
int maxpruefindexLowPart = ReadMaxPruefindex ( conn , wm ) ;
TBF . BenchControl . GenericDevices . IBenchInfo benchInfo = TBF . BenchControl . Sequences . ProcessData . BenchInfo ;
int testBenchID = ( benchInfo ! = null ) ? benchInfo . TestBenchId : 1 ;
int MAX_Pruefindex = 100 * testBenchID + maxpruefindexLowPart + 1 ;
int Hydr_Pruefung ;
if ( wm . Passed )
{
/// Passed
if ( maxpruefindexLowPart = = 0 )
Hydr_Pruefung = 96 ;
else
Hydr_Pruefung = 224 ;
}
else
{
/// Failed
Hydr_Pruefung = 97 ; /// Hydr. test failed, Pressure test passed
}
wm . Pruefindex = MAX_Pruefindex ;
wm . HydrPruefung = Hydr_Pruefung ;
2020-12-07 13:36:21 +00:00
SaveOrUpdateMechanicalMeter ( conn , wm , MAX_Pruefindex , Hydr_Pruefung ) ;
2020-11-04 12:29:27 +00:00
}
2020-12-07 13:36:21 +00:00
void SaveOrUpdateMechanicalMeter ( OracleConnection conn , Results . Entities . WaterMeter wm , int max_Pruefindex , int hydr_Pruefung )
2020-11-04 12:29:27 +00:00
{
int idBenutzer = 6 ; // = wm.Batch.UserNumber;
2021-10-15 12:48:52 +00:00
string vt_identnummer = wm . SerialNr . Length > 8 ? wm . SerialNr . Substring ( 0 , 8 ) : wm . SerialNr ;
2020-11-04 12:29:27 +00:00
2021-09-20 07:11:05 +00:00
if ( dbCfg . DebugLevel = = DebugMode . Normal )
2020-11-04 12:29:27 +00:00
{
2021-08-05 06:00:15 +00:00
OracleCommand cmd = new OracleCommand ( "UPDATE vt_zaehler_pd " +
2021-10-15 12:48:52 +00:00
"SET max_pruefindex=:1, vt_identnummer=:2, auftragsnummer=:3, vt_baugruppen_nr=:4, mbus_adr=:5, liegenschafts_nr=:6," +
" sekundaere_adr=:7, hydr_pruefung=:8, mark_date=:9, baujahr=:10, eich_jahr=:11, umkarton_nr=:12," +
" palette_nr=:13, zaehlernummer=:14, prefix=:15, suffix=:16, z_nr_komplett=:17, id_benutzer=:18 " +
"WHERE vt_fernum = :19 AND anbid = :20" , conn ) ;
cmd . Parameters . Add ( new OracleParameter { OracleDbType = OracleDbType . Int32 , Value = max_Pruefindex } ) ; /// 1 max_pruefindex
cmd . Parameters . Add ( new OracleParameter { OracleDbType = OracleDbType . Varchar2 , Value = vt_identnummer } ) ; /// 2 vt_identnummer
cmd . Parameters . Add ( new OracleParameter { OracleDbType = OracleDbType . Varchar2 , Value = wm . PurchaseOrder } ) ; /// 3 auftragsnummer
cmd . Parameters . Add ( new OracleParameter { OracleDbType = OracleDbType . Varchar2 , Value = wm . SerialNrAux } ) ; /// 4 vt_baugruppen_nr
cmd . Parameters . Add ( new OracleParameter { OracleDbType = OracleDbType . Int32 , Value = 0 } ) ; /// 5 mbus_adr
cmd . Parameters . Add ( new OracleParameter { OracleDbType = OracleDbType . Int32 , Value = 0 } ) ; /// 6 liegenschafts_nr
cmd . Parameters . Add ( new OracleParameter { OracleDbType = OracleDbType . Int32 , Value = Convert . ToInt32 ( wm . RadioAddress ) } ) ; /// 7 sekundaere_adr
cmd . Parameters . Add ( new OracleParameter { OracleDbType = OracleDbType . Int32 , Value = hydr_Pruefung } ) ; /// 8
cmd . Parameters . Add ( new OracleParameter { OracleDbType = OracleDbType . TimeStamp , Value = wm . Batch . EndTime } ) ; /// 9
cmd . Parameters . Add ( new OracleParameter { OracleDbType = OracleDbType . Int32 , Value = YearOfManufacture } ) ; /// 10
cmd . Parameters . Add ( new OracleParameter { OracleDbType = OracleDbType . Int32 , Value = YearOfManufacture } ) ; /// 11
cmd . Parameters . Add ( new OracleParameter { OracleDbType = OracleDbType . Int32 , Value = 0 } ) ; /// 12 umkarton_nr
cmd . Parameters . Add ( new OracleParameter { OracleDbType = OracleDbType . Int32 , Value = 0 } ) ; /// 13 palette_nr
cmd . Parameters . Add ( new OracleParameter { OracleDbType = OracleDbType . Int32 , Value = wm . AssignedSerialNr } ) ; /// 14
cmd . Parameters . Add ( new OracleParameter { OracleDbType = OracleDbType . Varchar2 , Value = wm . Prefix } ) ; /// 15
cmd . Parameters . Add ( new OracleParameter { OracleDbType = OracleDbType . Varchar2 , Value = wm . Suffix } ) ; /// 16
cmd . Parameters . Add ( new OracleParameter { OracleDbType = OracleDbType . Varchar2 , Value = wm . CompleteSerialNr } ) ; /// 17
cmd . Parameters . Add ( new OracleParameter { OracleDbType = OracleDbType . Int32 , Value = idBenutzer } ) ; /// 18
cmd . Parameters . Add ( new OracleParameter { OracleDbType = OracleDbType . Varchar2 , Value = wm . SerialNr } ) ; /// 19
cmd . Parameters . Add ( new OracleParameter { OracleDbType = OracleDbType . Int32 , Value = Anbid_Producer } ) ; /// 20
2021-08-05 06:00:15 +00:00
int updatedRows = cmd . ExecuteNonQuery ( ) ;
int insertedRows = 0 ;
if ( updatedRows = = 0 )
2020-11-04 12:29:27 +00:00
{
2021-10-15 12:48:52 +00:00
cmd = new OracleCommand ( "INSERT INTO vt_zaehler_pd(vt_fernum, max_pruefindex, vt_identnummer, auftragsnummer, vt_baugruppen_nr," +
2021-08-05 06:00:15 +00:00
" mbus_adr, liegenschafts_nr, sekundaere_adr, hydr_pruefung, mark_date, baujahr, eich_jahr," +
" umkarton_nr, palette_nr, zaehlernummer, prefix, suffix, z_nr_komplett, anbid, id_benutzer) " +
2021-10-15 12:48:52 +00:00
"VALUES (:1, :2, :3, :4, :5, :6, :7, :8, :9, :10, :11, :12, :13, :14, :15, :16, :17, :18, :19, :20)" , conn ) ;
cmd . Parameters . Add ( new OracleParameter { OracleDbType = OracleDbType . Varchar2 , Value = wm . SerialNr } ) ; /// 1 vt_fernum
cmd . Parameters . Add ( new OracleParameter { OracleDbType = OracleDbType . Int32 , Value = max_Pruefindex } ) ; /// 2 max_pruefindex
cmd . Parameters . Add ( new OracleParameter { OracleDbType = OracleDbType . Varchar2 , Value = vt_identnummer } ) ; /// 3 vt_identnummer
cmd . Parameters . Add ( new OracleParameter { OracleDbType = OracleDbType . Varchar2 , Value = wm . PurchaseOrder } ) ; /// 4 auftragsnummer
cmd . Parameters . Add ( new OracleParameter { OracleDbType = OracleDbType . Varchar2 , Value = wm . SerialNrAux } ) ; /// 5 vt_baugruppen_nr
cmd . Parameters . Add ( new OracleParameter { OracleDbType = OracleDbType . Int32 , Value = 0 } ) ; /// 6 mbus_adr
cmd . Parameters . Add ( new OracleParameter { OracleDbType = OracleDbType . Int32 , Value = 0 } ) ; /// 7 liegenschafts_nr
cmd . Parameters . Add ( new OracleParameter { OracleDbType = OracleDbType . Int32 , Value = Convert . ToInt32 ( wm . RadioAddress ) } ) ; /// 8 sekundaere_adr
cmd . Parameters . Add ( new OracleParameter { OracleDbType = OracleDbType . Int32 , Value = hydr_Pruefung } ) ; /// 9
cmd . Parameters . Add ( new OracleParameter { OracleDbType = OracleDbType . TimeStamp , Value = wm . Batch . EndTime } ) ; /// 10
cmd . Parameters . Add ( new OracleParameter { OracleDbType = OracleDbType . Int32 , Value = YearOfManufacture } ) ; /// 11
cmd . Parameters . Add ( new OracleParameter { OracleDbType = OracleDbType . Int32 , Value = YearOfManufacture } ) ; /// 12
cmd . Parameters . Add ( new OracleParameter { OracleDbType = OracleDbType . Int32 , Value = 0 } ) ; /// 13 umkarton_nr
cmd . Parameters . Add ( new OracleParameter { OracleDbType = OracleDbType . Int32 , Value = 0 } ) ; /// 14 palette_nr
cmd . Parameters . Add ( new OracleParameter { OracleDbType = OracleDbType . Int32 , Value = wm . AssignedSerialNr } ) ; /// 15
cmd . Parameters . Add ( new OracleParameter { OracleDbType = OracleDbType . Varchar2 , Value = wm . Prefix } ) ; /// 16
cmd . Parameters . Add ( new OracleParameter { OracleDbType = OracleDbType . Varchar2 , Value = wm . Suffix } ) ; /// 17
cmd . Parameters . Add ( new OracleParameter { OracleDbType = OracleDbType . Varchar2 , Value = wm . CompleteSerialNr } ) ; /// 18
cmd . Parameters . Add ( new OracleParameter { OracleDbType = OracleDbType . Int32 , Value = Anbid_Producer } ) ; /// 19
cmd . Parameters . Add ( new OracleParameter { OracleDbType = OracleDbType . Int32 , Value = idBenutzer } ) ; /// 20
2020-11-04 12:29:27 +00:00
2021-08-05 06:00:15 +00:00
insertedRows = cmd . ExecuteNonQuery ( ) ;
if ( insertedRows = = 0 )
{
throw new Exception ( string . Format ( "Failed to insert or update VT_ZAEHLER_PD: PcbNr={0}, pos={1}, maxPruefix={2}" , wm . SerialNr , wm . WMPosition , max_Pruefindex ) ) ;
}
}
if ( insertedRows > 0 )
{
log . InfoFormat ( "VT_ZAEHLER_PD {0} row inserted, PcbNr={1}, pos={2}, maxPruefix={3}" , insertedRows , wm . SerialNr , wm . WMPosition , max_Pruefindex ) ;
2020-11-04 12:29:27 +00:00
}
else
{
2021-08-05 06:00:15 +00:00
log . InfoFormat ( "VT_ZAEHLER_PD: {0} rows updated, PcbNr={1}, pos={2}, maxPruefix={3}" , updatedRows , wm . SerialNr , wm . WMPosition , max_Pruefindex ) ;
2020-11-04 12:29:27 +00:00
}
}
else
{
2021-08-05 06:00:15 +00:00
log . WarnFormat ( "SIM: VT_ZAEHLER_PD inserted or updated, PcbNr={0}, pos={1}, maxPruefix={2}" , wm . SerialNr , wm . WMPosition , max_Pruefindex ) ;
2020-11-04 12:29:27 +00:00
}
2021-09-20 07:11:05 +00:00
if ( dbCfg . DebugLevel = = DebugMode . Normal )
2020-11-04 12:29:27 +00:00
{
2021-01-27 11:53:23 +00:00
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 ) ; /// ReedKontakt = ReedKontaktOK = ReedKontaktZeit = FestWertWZ = Zaehlerstand = 0
2020-11-04 12:29:27 +00:00
cmd . Parameters . Add ( new OracleParameter { OracleDbType = OracleDbType . Varchar2 , Value = wm . SerialNr } ) ;
cmd . Parameters . Add ( new OracleParameter { OracleDbType = OracleDbType . Int32 , Value = max_Pruefindex } ) ;
2021-08-19 09:02:46 +00:00
cmd . Parameters . Add ( new OracleParameter { OracleDbType = OracleDbType . Int32 , Value = Anbid_Producer } ) ;
2020-11-04 12:29:27 +00:00
cmd . Parameters . Add ( new OracleParameter { OracleDbType = OracleDbType . Int32 , Value = 18000 + wm . Batch . TestBenchId } ) ;
cmd . Parameters . Add ( new OracleParameter { OracleDbType = OracleDbType . Int32 , Value = wm . Batch . BatchNr } ) ;
cmd . Parameters . Add ( new OracleParameter { OracleDbType = OracleDbType . Int32 , Value = hydr_Pruefung } ) ;
cmd . Parameters . Add ( new OracleParameter { OracleDbType = OracleDbType . Double , Value = wm . OrigCalibFactor } ) ;
cmd . Parameters . Add ( new OracleParameter { OracleDbType = OracleDbType . Int32 , Value = 0 } ) ; /// TODO
cmd . Parameters . Add ( new OracleParameter { OracleDbType = OracleDbType . Int32 , Value = wm . WMPosition } ) ;
cmd . Parameters . Add ( new OracleParameter { OracleDbType = OracleDbType . Int32 , Value = wm . Passed ? 1 : 0 } ) ;
cmd . Parameters . Add ( new OracleParameter { OracleDbType = OracleDbType . Int32 , Value = idBenutzer } ) ;
cmd . Parameters . Add ( new OracleParameter { OracleDbType = OracleDbType . Int32 , Value = 3 } ) ;
cmd . ExecuteNonQuery ( ) ;
log . InfoFormat ( "VT_ZAEHLER_PINDEX_PD inserted, PcbNr={0}, pos={1}, pruefix={2}" , wm . SerialNr , wm . WMPosition , max_Pruefindex % 100 ) ;
}
else
{
log . WarnFormat ( "SIM: VT_ZAEHLER_PINDEX_PD inserted, PcbNr={0}, pos={1}, pruefix={2}" , wm . SerialNr , wm . WMPosition , max_Pruefindex % 100 ) ;
}
foreach ( var testInfo in completeTestInfo )
{
if ( ( testInfo . PruefungsNrDB ! = 0 ) & & ( - 20 < = testInfo . PruefungsNrDB ) & & ( testInfo . PruefungsNrDB < = 20 ) ) /// LU PruefungsNr-s are nonzero and between -20 and 20
{
Results . Entities . TestData tData = wm . GetTestData ( testInfo . TestName ) ;
Results . Entities . MeterTestRslt mtr ;
if ( tData = = null )
{
throw new Exception ( string . Format ( "'{0}' test results missing, watermeter {1}" , testInfo . TestName , wm . WMPosition ) ) ;
}
else if ( tData . Repeats = = 1 )
{
mtr = wm . GetMeterTestRslt ( testInfo . TestName ) ;
if ( mtr = = null ) throw new Exception ( string . Format ( "'{0}' test results missing, watermeter {1}" , testInfo . TestName , wm . WMPosition ) ) ;
}
else
{
Results . Entities . MeterTestRslt firstMtr = wm . GetMeterTestRslt ( Utils . TestTitle ( tData , 1 ) ) ;
if ( firstMtr = = null ) throw new Exception ( string . Format ( "'{0}' test results missing, watermeter {1}" , Utils . TestTitle ( tData , 1 ) , wm . WMPosition ) ) ;
mtr = new Results . Entities . MeterTestRslt ( ) ;
mtr . CopyContentFrom ( firstMtr ) ;
mtr . TestRslt = firstMtr . TestRslt ;
mtr . WaterMeter = firstMtr . WaterMeter ;
for ( int i = 2 ; i < = tData . Repeats ; i + + )
{
Results . Entities . MeterTestRslt nextMtr = wm . GetMeterTestRslt ( Utils . TestTitle ( tData , i ) ) ;
if ( nextMtr = = null ) throw new Exception ( string . Format ( "'{0}' test results missing, watermeter {1}" , Utils . TestTitle ( tData , i ) , wm . WMPosition ) ) ;
mtr . TestTime + = nextMtr . TestTime ;
mtr . VolumeMeter + = nextMtr . VolumeMeter ;
mtr . VolumeRef + = nextMtr . VolumeRef ;
mtr . VolumeEnd = nextMtr . VolumeEnd ;
mtr . Passed = ( mtr . Passed & & nextMtr . Passed ) ;
}
mtr . Error = Formulas . ErrorFromVolumes ( mtr . VolumeMeter , mtr . VolumeRef ) ;
}
SaveMeterTestResult ( conn , mtr , testInfo . PruefungsNrDB , max_Pruefindex , wmTypeRevision ) ;
}
}
}
2016-01-08 09:23:36 +00:00
/// <summary>
/// Saves a water meter result of a single test
/// </summary>
/// <param name="q">q = 0, 1, 2 or 3 (Adj., Q1, Q2, Q3)</param>
/// <returns>Nr. of rows updated</returns>
2019-02-06 09:34:43 +00:00
int SaveMeterTestResult ( OracleConnection conn , Results . Entities . MeterTestRslt mtr , int pruefungsNr , int max_Pruefindex , int wmTypeRevision )
2016-01-08 09:23:36 +00:00
{
2021-09-20 07:11:05 +00:00
if ( dbCfg . DebugLevel = = DebugMode . Normal )
2019-03-20 09:58:09 +00:00
{
2021-01-27 11:53:23 +00:00
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, :14, 0, :15, 0, 0)" , conn ) ;
cmd . Parameters . Add ( new OracleParameter { OracleDbType = OracleDbType . Varchar2 , Value = mtr . WaterMeter . SerialNr } ) ; /// :1 vt_fernum
cmd . Parameters . Add ( new OracleParameter { OracleDbType = OracleDbType . Int32 , Value = max_Pruefindex } ) ; /// :2 pruefindex
cmd . Parameters . Add ( new OracleParameter { OracleDbType = OracleDbType . Int32 , Value = pruefungsNr } ) ; /// :3 pruefungsnr
2021-08-19 09:02:46 +00:00
cmd . Parameters . Add ( new OracleParameter { OracleDbType = OracleDbType . Int32 , Value = Anbid_Producer } ) ; /// :4 anbid
2021-01-27 11:53:23 +00:00
cmd . Parameters . Add ( new OracleParameter { OracleDbType = OracleDbType . Int32 , Value = mtr . WaterMeter . WaterMeterData . WMTypeId } ) ; /// :5 id_wztyp
cmd . Parameters . Add ( new OracleParameter { OracleDbType = OracleDbType . Int32 , Value = wmTypeRevision } ) ; /// :6 rev_wztyp
cmd . Parameters . Add ( new OracleParameter { OracleDbType = OracleDbType . Int32 , Value = 1 } ) ; /// :7 rev_wzpruefpunkt
2021-06-24 07:25:02 +00:00
cmd . Parameters . Add ( new OracleParameter { OracleDbType = OracleDbType . Double , Value = ( mtr . VolumeRef > float . Epsilon )
? 1000 * mtr . TestRslt . FlowVolume * mtr . VolumeMeter / mtr . VolumeRef
: 0 } ) ; /// :8 q_wz
2021-01-27 11:53:23 +00:00
cmd . Parameters . Add ( new OracleParameter { OracleDbType = OracleDbType . Double , Value = Math . Min ( 100.0 , Math . Max ( - 100.0 , mtr . Error ) ) } ) ; /// :9 q_fehler
cmd . Parameters . Add ( new OracleParameter { OracleDbType = OracleDbType . Int32 , Value = mtr . Passed ? 1 : 0 } ) ; /// :10 q_best
cmd . Parameters . Add ( new OracleParameter { OracleDbType = OracleDbType . Int32 , Value = 0 } ) ; /// :11 niz
cmd . Parameters . Add ( new OracleParameter { OracleDbType = OracleDbType . Double , Value = Math . Max ( - 99999.999 , Math . Min ( mtr . VolumeStart , 99999.999 ) ) } ) ; /// :12 anfangzstand
cmd . Parameters . Add ( new OracleParameter { OracleDbType = OracleDbType . Double , Value = Math . Max ( - 99999.999 , Math . Min ( mtr . VolumeEnd , 99999.999 ) ) } ) ; /// :13 endzstand
2021-07-08 11:37:43 +00:00
cmd . Parameters . Add ( new OracleParameter { OracleDbType = OracleDbType . Double , Value = Math . Min ( 100.0 , Math . Max ( - 100.0 , mtr . ErrorBC ) ) } ) ; /// :14 korrerrq
2021-01-27 11:53:23 +00:00
cmd . Parameters . Add ( new OracleParameter { OracleDbType = OracleDbType . Double , Value = Math . Min ( 100000 , mtr . TestTime ) } ) ; /// :15 tiz
2019-03-20 09:58:09 +00:00
2021-06-24 07:25:02 +00:00
int retv = cmd . ExecuteNonQuery ( ) ;
2019-03-20 09:58:09 +00:00
log . DebugFormat ( "VT_PRUEFREIHE_IST_PD inserted, PcbNr={0}, pruefungsNr={1}, error={2}" , mtr . WaterMeter . SerialNr , pruefungsNr , mtr . Error ) ;
2021-06-24 07:25:02 +00:00
return retv ;
2019-03-20 09:58:09 +00:00
}
else
{
log . WarnFormat ( "SIM: VT_PRUEFREIHE_IST_PD inserted, PcbNr={0}, pruefungsNr={1}, error={2}" , mtr . WaterMeter . SerialNr , pruefungsNr , mtr . Error ) ;
2021-08-19 09:02:46 +00:00
return 0 ;
2019-03-20 09:58:09 +00:00
}
2016-02-09 13:30:21 +00:00
}
2016-01-08 09:23:36 +00:00
#endif
2021-08-19 09:02:46 +00:00
/// <summary>
/// Read a list of valid purchase orders.
/// </summary>
/// <param name="connection">Oracle DB connection</param>
/// <returns>List of active purchase orders</returns>
2021-10-18 14:50:44 +00:00
public IList < Auftrag > ReadOrderNumbers ( )
2021-08-19 09:02:46 +00:00
{
OracleConnection connection = ProductionDB ;
/// Read a list of valid order numbers from Oracle
IList < Auftrag > orders = new List < Auftrag > ( ) ;
if ( dbCfg . DebugLevel = = DebugMode . Normal )
{
try
{
connection . Open ( ) ;
/// STATUS='NEU'
OracleCommand cmd = new OracleCommand ( "SELECT auftragsnummer, sollstueck, variantencode, erste_zaehlernr, " +
"prefix, suffix, zaehlwerk, erfasst_am, sollende, zusatztext " +
"FROM vt_auftrag_pd " +
"WHERE produktion_anbid=:1 AND status='NEU' AND produktion_usestate=0" , connection ) ;
2021-10-15 12:48:52 +00:00
2021-08-19 09:02:46 +00:00
cmd . Parameters . Add ( new OracleParameter { OracleDbType = OracleDbType . Int32 , Value = Anbid_Producer } ) ;
OracleDataReader dr = cmd . ExecuteReader ( ) ;
while ( dr . Read ( ) )
{
string order = dr . GetString ( 0 ) ;
int sollStueck ; try { sollStueck = dr . GetInt32 ( 1 ) ; }
catch { sollStueck = 0 ; }
string variantenCode ; try { variantenCode = dr . GetString ( 2 ) ; }
catch { variantenCode = string . Empty ; }
int esrsteZaehlerNr ; try { esrsteZaehlerNr = dr . GetInt32 ( 3 ) ; }
catch { esrsteZaehlerNr = 1 ; }
//string prefix; try { prefix = dr.GetString (4); } catch { prefix = string.Empty; }
//string suffix; try { suffix = dr.GetString (5); } catch { suffix = string.Empty; }
int zaehlwerk ; try { zaehlwerk = dr . GetInt32 ( 6 ) ; }
catch { zaehlwerk = 0 ; }
DateTime created ; try { created = dr . GetDateTime ( 7 ) ; }
catch { created = DateTime . Now ; }
DateTime dueDate ; try { dueDate = dr . GetDateTime ( 8 ) ; }
catch { dueDate = DateTime . Now ; }
//string remark; try { remark = dr.GetString (9); } catch { remark = string.Empty; }
var ai = new Auftrag
{
AuftragsNummer = order ,
SollStueck = sollStueck ,
VariantenCode = variantenCode ,
EsrsteZaehlerNr = esrsteZaehlerNr ,
//Prefix = prefix,
//Suffix = suffix,
Zaehlwerk = zaehlwerk ,
Created = created ,
DueDate = dueDate ,
//Remark = remark,
} ;
orders . Add ( ai ) ;
}
dr . Close ( ) ;
/// STATUS='AKTIV'
cmd = new OracleCommand ( "SELECT auftragsnummer, sollstueck, variantencode, erste_zaehlernr, " +
"prefix, suffix, zaehlwerk, erfasst_am, sollende, zusatztext " +
"FROM vt_auftrag_pd " +
"WHERE produktion_anbid=:1 AND status='AKTIV' AND produktion_usestate=0" , connection ) ;
2021-10-15 12:48:52 +00:00
2021-08-19 09:02:46 +00:00
cmd . Parameters . Add ( new OracleParameter { OracleDbType = OracleDbType . Int32 , Value = Anbid_Producer } ) ;
dr = cmd . ExecuteReader ( ) ;
while ( dr . Read ( ) )
{
string order = dr . GetString ( 0 ) ;
int sollStueck ; try { sollStueck = dr . GetInt32 ( 1 ) ; }
catch { sollStueck = 0 ; }
string variantenCode ; try { variantenCode = dr . GetString ( 2 ) ; }
catch { variantenCode = string . Empty ; }
int esrsteZaehlerNr ; try { esrsteZaehlerNr = dr . GetInt32 ( 3 ) ; }
catch { esrsteZaehlerNr = 1 ; }
//string prefix; try { prefix = dr.GetString (4); } catch { prefix = string.Empty; }
//string suffix; try { suffix = dr.GetString (5); } catch { suffix = string.Empty; }
int zaehlwerk ; try { zaehlwerk = dr . GetInt32 ( 6 ) ; }
catch { zaehlwerk = 0 ; }
DateTime created ; try { created = dr . GetDateTime ( 7 ) ; }
catch { created = DateTime . Now ; }
DateTime dueDate ; try { dueDate = dr . GetDateTime ( 8 ) ; }
catch { dueDate = DateTime . Now ; }
//string remark; try { remark = dr.GetString (9); } catch { remark = string.Empty; }
var ai = new Auftrag
{
AuftragsNummer = order ,
SollStueck = sollStueck ,
VariantenCode = variantenCode ,
EsrsteZaehlerNr = esrsteZaehlerNr ,
//Prefix = prefix,
//Suffix = suffix,
Zaehlwerk = zaehlwerk ,
Created = created ,
DueDate = dueDate ,
//Remark = remark,
} ;
orders . Add ( ai ) ;
}
dr . Close ( ) ;
log . InfoFormat ( "Oracle DB query SELECT auftragsnummer, sollstueck FROM vt_auftrag_pd WHERE ... successful. {0} order numbers read" , orders . Count ) ;
}
catch ( Exception exc )
{
log . ErrorFormat ( "ERROR: Oracle DB query SELECT auftragsnummer, sollstueck FROM vt_auftrag_pd WHERE ... failed: {1}" , exc . Message ) ;
}
if ( connection ! = null ) connection . Close ( ) ;
}
else
{
orders = new List < Auftrag > ( )
{
new Auftrag { AuftragsNummer = "1234567" , EsrsteZaehlerNr = 1 , SollStueck = 100 , Prefix = "Pre" , Suffix = "Suf" , VariantenCode = "abeceda" } ,
new Auftrag { AuftragsNummer = "2345678" , EsrsteZaehlerNr = 1 , SollStueck = 200 , Prefix = "Pfx" , Suffix = "Sfx" , VariantenCode = "zjedla_deda" } ,
} ;
}
return orders ;
}
2021-10-18 14:50:44 +00:00
/// <summary>
/// Read a list of valid purchase orders.
/// </summary>
/// <param name="connection">Oracle DB connection</param>
/// <returns>List of active purchase orders</returns>
public bool ReadOrderDetails ( ref Auftrag auftrag )
{
if ( dbCfg . DebugLevel = = DebugMode . Normal )
{
OracleConnection connection = ProductionDB ;
try
{
connection . Open ( ) ;
OracleCommand cmd = new OracleCommand ( "SELECT erste_nummer, ltz_nummer, akt_nummer, erste_adresse, ltz_adresse," +
" prefix_adresse, suffix_adresse, akt_adresse " +
"FROM vt_auft_zaehlernr_pd " +
"WHERE auftragsnummer=:1 AND anbid=:2" , connection ) ;
cmd . Parameters . Add ( new OracleParameter { OracleDbType = OracleDbType . Varchar2 , Value = auftrag . AuftragsNummer } ) ;
cmd . Parameters . Add ( new OracleParameter { OracleDbType = OracleDbType . Int32 , Value = Anbid_Producer } ) ;
OracleDataReader dr = cmd . ExecuteReader ( ) ;
if ( dr . Read ( ) )
{
int i = 0 ;
auftrag . FirstSerialNr = dr . GetInt32 ( i + + ) ;
auftrag . LastSerialNr = dr . GetInt32 ( i + + ) ;
auftrag . CurrentSerialNr = dr . GetInt32 ( i + + ) ;
auftrag . FirstRadioAddress = dr . GetInt32 ( i + + ) ;
auftrag . LastRadioAddress = dr . GetInt32 ( i + + ) ;
try { auftrag . RadioAddressPrefix = dr . GetString ( i + + ) ; } catch { auftrag . RadioAddressPrefix = string . Empty ; }
try { auftrag . RadioAddressSuffix = dr . GetString ( i + + ) ; } catch { auftrag . RadioAddressSuffix = string . Empty ; }
auftrag . CurrentRadioAddress = dr . GetInt32 ( i + + ) ;
}
dr . Close ( ) ;
connection . Close ( ) ;
return true ;
}
catch ( Exception exc )
{
log . ErrorFormat ( "ERROR: Oracle DB query SELECT ... FROM vt_auft_zaehlernr_pd WHERE auftragsnummer={0} failed: {1}" ,
auftrag . AuftragsNummer , exc . Message ) ;
if ( connection ! = null ) connection . Close ( ) ;
return false ;
}
}
else
{
return false ;
}
}
2019-02-06 09:34:43 +00:00
}
2015-08-19 12:17:02 +00:00
}