SharedDatabase.WorkflowSummary.ReadFromDB(), int wm.ProcessId -> string wm.Workflow, etc.

This commit is contained in:
Milan Hanajik
2022-01-17 10:26:55 +01:00
parent 0b400fcbd0
commit 2eaf2b044c
11 changed files with 100 additions and 191 deletions
+2 -2
View File
@@ -29,5 +29,5 @@ using System.Runtime.InteropServices;
// Build Number
// Revision
//
[assembly: AssemblyVersion("3.1.1849.0")]
[assembly: AssemblyFileVersion("3.1.1849.0")]
[assembly: AssemblyVersion("3.1.1852.0")]
[assembly: AssemblyFileVersion("3.1.1852.0")]
+14 -13
View File
@@ -140,27 +140,24 @@ namespace TBF.Rig.DataEntry.S620
string workflow;
if (ProcessData.OrderInfo is SharedDatabase.Entities.OrderInfo && ProcessData.TracingDB != null)
{
ProcessData.Workflow = null;
ProcessData.Workstep = null;
try
{
ISession session = ProcessData.TracingDB.SessionFactory.OpenSession();
ProcessData.Workflow = SharedDatabase.TracingDB
.GetWorkflowAndWorkstep((ProcessData.OrderInfo != null) ? ProcessData.OrderInfo.POName : null, "test",
out ProcessData.Workstep,
out ProcessData.PreviousStepName,
out ProcessData.Part1Name,
out ProcessData.Part2Name,
session);
order = Program.MainWnd.SelectedProcedure.OrderInfo.POName;
var orderInfo = ProcessData.TracingDB.ReReadOneOrder(order, session);
ProcessData.OrderInfo = orderInfo;
workflow = (orderInfo != null) ? orderInfo.Workflow : null;
ProcessData.WorkflowSummary = SharedDatabase.WorkflowSummary.ReadFromDB(workflow, "test", session);
session.Close();
order = ProcessData.OrderInfo.POName;
workflow = ProcessData.Workflow.Name;
}
catch (Exception exc)
{
order = string.Empty;
workflow = string.Empty;
ProcessData.OrderInfo = null;
ProcessData.WorkflowSummary = null;
log.ErrorFormat("Unable to load order, workflow or workstep: {0}", exc.Message);
}
}
@@ -168,6 +165,9 @@ namespace TBF.Rig.DataEntry.S620
{
order = string.Empty;
workflow = string.Empty;
ProcessData.OrderInfo = null;
ProcessData.WorkflowSummary = null;
}
myRef.modelessDlg = new FormForMechanicalMetersWithTracing(waterMeters, entryFormCfg.MaxWMsCount, entryFormCfg.CloseButton, false,
@@ -175,6 +175,7 @@ namespace TBF.Rig.DataEntry.S620
}
else
{
ProcessData.WorkflowSummary = null;
myRef.modelessDlg = new FormForMechanicalMeters(waterMeters, entryFormCfg.MaxWMsCount, entryFormCfg.CloseButton, false, false);
}
modelessDlg.Show();
@@ -185,7 +186,7 @@ namespace TBF.Rig.DataEntry.S620
if (entryFormCfg.ProductionTracing)
{
string order = (ProcessData.OrderInfo != null) ? ProcessData.OrderInfo.POName : string.Empty;
string workflow = (ProcessData.Workflow != null) ? ProcessData.Workflow.Name : string.Empty;
string workflow = (ProcessData.WorkflowSummary != null) ? ProcessData.WorkflowSummary.Workflow.Name : string.Empty;
myRef.modelessDlg = new FormForMechanicalMetersWithTracing(waterMeters, entryFormCfg.MaxWMsCount, entryFormCfg.CloseButton, true,
true, entryFormCfg.OrdersFromProdTracing, order, workflow);
+7 -12
View File
@@ -234,25 +234,20 @@ namespace TBF.Rig.DataEntry.iPerl
}
else if (oInfo is SharedDatabase.Entities.OrderInfo && ProcessData.TracingDB != null)
{
ProcessData.OrderInfo = null;
ProcessData.Workflow = null;
ProcessData.Workstep = null;
try
{
ISession session = ProcessData.TracingDB.SessionFactory.OpenSession();
ProcessData.OrderInfo = ProcessData.TracingDB.ReReadOneOrder(oInfo as SharedDatabase.Entities.OrderInfo, session);
ProcessData.Workflow = SharedDatabase.TracingDB
.GetWorkflowAndWorkstep((ProcessData.OrderInfo != null) ? ProcessData.OrderInfo.POName : null, "test",
out ProcessData.Workstep,
out ProcessData.PreviousStepName,
out ProcessData.Part1Name,
out ProcessData.Part2Name,
session);
string poName = Program.MainWnd.SelectedProcedure.OrderInfo.POName;
var orderInfo = ProcessData.TracingDB.ReReadOneOrder(poName, session);
ProcessData.OrderInfo = orderInfo;
string workflow = (orderInfo != null) ? orderInfo.Workflow : null;
ProcessData.WorkflowSummary = SharedDatabase.WorkflowSummary.ReadFromDB(workflow, "test", session);
session.Close();
}
catch (Exception exc)
{
ProcessData.OrderInfo = null;
ProcessData.WorkflowSummary = null;
log.ErrorFormat("Unable to load order, workflow or workstep: {0}", exc.Message);
}
}
+2
View File
@@ -147,6 +147,8 @@ namespace TBF.Rig.DataEntry.iPerl
}
else
{
/// Only in case of 640 meters and an order information entered during the procedure selection
/// this DataEntry form at the beginning of the cycle is skipped
modelessDlg = null;
}
break;
+50 -73
View File
@@ -78,28 +78,8 @@ namespace TBF.Rig.Output.DB.ProductionTracing
/// </summary>
Results.Entities.Batch batch;
public ISessionFactory SessionFactory; /// Factory to create database sessions that is initialized in the constructor
IList<SharedDatabase.Entities.Process> workflows;
Dictionary<int, SharedDatabase.Entities.Process> workflowDictionary;
Dictionary<int, IList<SharedDatabase.Entities.Workstep>> workstepsDictionary;
ISessionFactory sessionFactory2; /// Factory to create database sessions that is initialized in the constructor
IList<SharedDatabase.Entities.Process> processes2;
Dictionary<int, SharedDatabase.Entities.Process> processDictionary2;
Dictionary<int, IList<SharedDatabase.Entities.Workstep>> workstepsDictionary2;
///
/// Previous workstep verification info
///
OrderInfo currentOrder;
Process currentWorkflow; /// Currently used workflow
Workstep currentWorkstep; /// Currently used workstep of this test bench
Workstep verifiedWorkstep;
Part verifiedPart; /// Applicable when verifyReferencePart == false
bool verifyReferencePart;
public Tracing() {}
@@ -138,18 +118,6 @@ namespace TBF.Rig.Output.DB.ProductionTracing
.ExposeConfiguration(SharedDatabase.TracingDB.BuildSchema)
.BuildSessionFactory();
///
/// Session factory 2 is used to create the 2nd database sessions
///
if (!string.IsNullOrEmpty(tracingCfg.ConnStr2))
{
sessionFactory2 = FluentNHibernate.Cfg.Fluently.Configure()
.Database(FluentNHibernate.Cfg.Db.MySQLConfiguration.Standard.ConnectionString(tracingCfg.ConnStr2))
.Mappings(m => m.FluentMappings.AddFromAssemblyOf<Process>())
.ExposeConfiguration(SharedDatabase.TracingDB.BuildSchema)
.BuildSessionFactory();
}
ISession session = SessionFactory.OpenSession();
///
@@ -177,8 +145,6 @@ namespace TBF.Rig.Output.DB.ProductionTracing
session.Close();
SharedDatabase.TracingDB.SessionFactory = SessionFactory;
if (session != null) session.Dispose();
currentWorkflow = null;
}
///
string GetIPAddress()
@@ -225,7 +191,7 @@ namespace TBF.Rig.Output.DB.ProductionTracing
}
}
public OrderInfo ReReadOneOrder(OrderInfo order, ISession session = null)
public OrderInfo ReReadOneOrder(string poName, ISession session = null)
{
bool openAndCloseSession = (session == null) || !session.IsOpen;
@@ -234,7 +200,7 @@ namespace TBF.Rig.Output.DB.ProductionTracing
if (openAndCloseSession) session = SessionFactory.OpenSession();
var list = session.QueryOver<OrderInfo>()
.Where(x => (x.Id == order.Id))
.Where(x => (x.POName == poName))
.List();
if (openAndCloseSession) session.Close();
@@ -243,14 +209,15 @@ namespace TBF.Rig.Output.DB.ProductionTracing
}
catch (Exception exc)
{
log.ErrorFormat("Cannot read orders from the tracing DB: {0}", exc.Message);
log.ErrorFormat("Cannot re-read order {0} from the tracing DB: {1}", poName, exc.Message);
return null;
}
}
/// <summary>
/// Read reference records belonging to a specified order
/// Read reference records belonging to a specified order.
/// Used when retrieving housing S/N-s belonging to obtained eRegister numbers.
/// </summary>
/// <param name="session">DB sesson</param>
/// <param name="order">Order</param>
@@ -469,7 +436,7 @@ namespace TBF.Rig.Output.DB.ProductionTracing
Retv CheckPreviousRecordOfSingleWM(ISession session, Results.Entities.WaterMeter wm)
{
if (!string.IsNullOrEmpty(wm.SerialNr))
if (!string.IsNullOrEmpty(wm.SerialNr) && ProcessData.WorkflowSummary != null)
{
/// Get all reference records with Code == SerialNr from all worksteps different from 'Test_bench'
var refRecords = session.QueryOver<ReferenceRecord>()
@@ -479,13 +446,15 @@ namespace TBF.Rig.Output.DB.ProductionTracing
if (refRecords.Count == 1)
{
ReferenceRecord refRecord = refRecords[0];
StepRecord previousStep = refRecord.StepRecords.FirstOrDefault(x => x.Workstep == ProcessData.PreviousStepName);
StepRecord previousStep = string.IsNullOrEmpty(ProcessData.WorkflowSummary.PreviousWorkstepName) ? null
: refRecord.StepRecords.FirstOrDefault(x => x.Workstep == ProcessData.WorkflowSummary.PreviousWorkstepName);
if (refRecord.Name1 == ProcessData.Part1Name &&
refRecord.Name2 == ProcessData.Part2Name &&
(ProcessData.PreviousStepName == null || (previousStep != null && previousStep.Workstep == ProcessData.PreviousStepName)))
if (refRecord.Name1 == ProcessData.WorkflowSummary.Part1Name &&
refRecord.Name2 == ProcessData.WorkflowSummary.Part2Name &&
(ProcessData.WorkflowSummary.PreviousWorkstepName == null ||
(previousStep != null && previousStep.Workstep == ProcessData.WorkflowSummary.PreviousWorkstepName)))
{
wm.ProcessId = 0;
wm.Workflow = ProcessData.WorkflowSummary.Workflow.Name;
wm.LastRecordIsNok = false; /// OK
return Retv.OK;
}
@@ -493,7 +462,7 @@ namespace TBF.Rig.Output.DB.ProductionTracing
}
/// S/N is missing OR no records found OR workflows do not match OR previous StepRecord is missing
wm.ProcessId = 0;
wm.Workflow = string.Empty;
wm.LastRecordIsNok = true; /// NOK
return Retv.OK;
}
@@ -510,7 +479,7 @@ namespace TBF.Rig.Output.DB.ProductionTracing
ISession session = null;
var order = ProcessData.OrderInfo as SharedDatabase.Entities.OrderInfo;
if (order != null)
if (order != null && ProcessData.WorkflowSummary != null && !string.IsNullOrEmpty(ProcessData.WorkflowSummary.WorkstepName))
{
///
/// Save to regular tracing DB
@@ -521,7 +490,7 @@ namespace TBF.Rig.Output.DB.ProductionTracing
transaction = session.BeginTransaction();
var reloadedOrder = session.QueryOver<OrderInfo>()
.Where(x => x.Id == order.Id)
.Where(x => x.POName == order.POName)
.List();
if (reloadedOrder.Count == 1)
{
@@ -541,23 +510,20 @@ namespace TBF.Rig.Output.DB.ProductionTracing
log.ErrorFormat("Unexpected reloadedOrder.Count == {0} in SaveTracingRecords()", reloadedOrder.Count);
}
string workplace = (ProcessData.BenchInfo != null) ? ProcessData.BenchInfo.TestBenchName : "TestBench";
int writtenRecordsCount = 0;
if (ProcessData.Workflow != null && ProcessData.Workstep != null)
foreach (var wm in batch.WaterMeters)
{
foreach (var wMtr in batch.WaterMeters)
if (!wm.Disabled && !string.IsNullOrEmpty(wm.SerialNr))
{
if (!string.IsNullOrEmpty(wMtr.SerialNr))
{
SaveSingleWM2DB(session, order, wMtr, ProcessData.Workflow, ProcessData.Workstep);
writtenRecordsCount++;
}
writtenRecordsCount += SaveSingleWM2DB(session, wm, order.POName, ProcessData.WorkflowSummary, workplace);
}
}
transaction.Commit();
session.Flush();
log.ErrorFormat("Batch {0}: {1} of {2} watermeters written to the regular production tracing DB",
log.WarnFormat("Batch {0}: {1} of {2} watermeters written to the regular production tracing DB",
batch.BatchNr, writtenRecordsCount, batch.WaterMeters.Count);
}
catch (Exception exc)
@@ -587,45 +553,55 @@ namespace TBF.Rig.Output.DB.ProductionTracing
/// </summary>
/// <param name="session">DB session</param>
/// <param name="wm">Watermeter entity</param>
void SaveSingleWM2DB(ISession session, OrderInfo order, Results.Entities.WaterMeter wm, Process workflow, Workstep workstep)
int SaveSingleWM2DB(ISession session, Results.Entities.WaterMeter wm, string poName, WorkflowSummary wflowSummary, string worplace)
{
if (string.IsNullOrEmpty(wflowSummary.WorkstepName)) return 0;
IList<ReferenceRecord> existingRecords = session.QueryOver<ReferenceRecord>()
.Where(x => (x.Code1 == wm.SerialNr))
.List();
ReferenceRecord refRecord = null;
if (existingRecords.Count > 1)
{
/// Unexpected error
throw new Exception("Unexpected error when saving production tracing records");
log.ErrorFormat("Multiple reference records exist: Code1 = {0}", wm.SerialNr);
return 0;
}
else if (existingRecords.Count == 1)
///
/// Reference record
///
ReferenceRecord refRecord = null;
if (existingRecords.Count == 1)
{
/// TODO: Check if the selected worflow is the same as in the found record
refRecord = existingRecords[0];
refRecord.POName = (order != null) ? order.POName : null;
refRecord.Workflow = (workflow != null) ? workflow.Name : null;
refRecord.POName = poName;
refRecord.Workflow = wflowSummary.Workflow.Name;
refRecord.Code2 = wm.SerialNrAux;
refRecord.Code3 = wm.CompleteSerialNr;
refRecord.Code4 = wm.RadioAddress;
}
else
{
refRecord = new ReferenceRecord((order != null) ? order.POName : null,
(workflow != null) ? workflow.Name : null,
ProcessData.Part1Name, /// PCB (iPERL) or housing (620/640) SAP number
wm.SerialNr, /// PcbNumber (iPERL) or housing S/N (620/640)
ProcessData.Part2Name, /// Flowtube SAP nummber (iPERL) or "eRegister#" (640) or empty
wm.SerialNrAux, /// Flowtube S/N (iPERL) or eRegister number (640) or empty
wm.CompleteSerialNr, /// Complete assigned S/N
wm.RadioAddress); /// Radio address (iPERL and 640)
refRecord = new ReferenceRecord(poName,
wflowSummary.Workflow.Name,
wflowSummary.Part1Name, /// PCB (iPERL) or housing (620/640) SAP number
wm.SerialNr, /// PcbNumber (iPERL) or housing S/N (620/640)
wflowSummary.Part2Name, /// Flowtube SAP nummber (iPERL) or "eRegister#" (640) or empty
wm.SerialNrAux, /// Flowtube S/N (iPERL) or eRegister number (640) or empty
wm.CompleteSerialNr, /// Complete assigned S/N
wm.RadioAddress); /// Radio address (iPERL and 640)
}
///
/// Step record
///
StepRecord stepRecord = new StepRecord(refRecord,
"Test",
(TBF.Rig.Sequences.ProcessData.BenchInfo != null) ? TBF.Rig.Sequences.ProcessData.BenchInfo.TestBenchName : "TestBench",
Common.GlobalData.GetCurrentUserName());
wflowSummary.WorkstepName,
workplace,
Common.GlobalData.GetCurrentUserName(),
wm.PassedFromTests() ? 0 : 1);
if (refRecord.StepRecords == null)
{
refRecord.StepRecords = new List<StepRecord> { stepRecord };
@@ -637,6 +613,7 @@ namespace TBF.Rig.Output.DB.ProductionTracing
session.SaveOrUpdate(refRecord);
session.SaveOrUpdate(stepRecord);
return 1;
}
}
}
+6 -13
View File
@@ -220,26 +220,19 @@ namespace TBF.Rig.Sequences
}
else if (Program.MainWnd.SelectedProcedure.OrderInfo is SharedDatabase.Entities.OrderInfo && ProcessData.TracingDB != null)
{
ProcessData.OrderInfo = null;
ProcessData.Workflow = null;
ProcessData.Workstep = null;
try
{
ISession session = ProcessData.TracingDB.SessionFactory.OpenSession();
ProcessData.OrderInfo = ProcessData.TracingDB
.ReReadOneOrder(Program.MainWnd.SelectedProcedure.OrderInfo as SharedDatabase.Entities.OrderInfo, session);
ProcessData.Workflow = SharedDatabase.TracingDB
.GetWorkflowAndWorkstep((ProcessData.OrderInfo != null) ? ProcessData.OrderInfo.POName : null, "test",
out ProcessData.Workstep,
out ProcessData.PreviousStepName,
out ProcessData.Part1Name,
out ProcessData.Part2Name,
session);
string poName = Program.MainWnd.SelectedProcedure.OrderInfo.POName;
var orderInfo = ProcessData.TracingDB.ReReadOneOrder(poName, session);
ProcessData.OrderInfo = orderInfo;
string workflow = orderInfo != null ? orderInfo.Workflow : null;
ProcessData.WorkflowSummary = SharedDatabase.WorkflowSummary.ReadFromDB(workflow, "test", session);
session.Close();
}
catch (Exception exc)
{
ProcessData.WorkflowSummary = null;
log.ErrorFormat("Unable to load order, workflow or workstep: {0}", exc.Message);
}
}
+3 -8
View File
@@ -27,9 +27,9 @@ namespace TBF.Rig.Sequences
///
/// Safe wrappers
///
public static int WMsCount { get { return BenchInfo != null ? BenchInfo.WaterMetersCount : 20; } }
public static int WMsCount { get { return BenchInfo != null ? BenchInfo.WaterMetersCount : 20; } }
public static int LinesCount { get { return BenchInfo != null ? BenchInfo.LinesCount : 2; } }
public static int LineSize { get { return BenchInfo != null ? BenchInfo.WaterMetersCount / Math.Max(1, BenchInfo.LinesCount) : 10; } }
public static int LineSize { get { return BenchInfo != null ? BenchInfo.WaterMetersCount / Math.Max(1, BenchInfo.LinesCount) : 10; } }
public static int CompoundWMsCount { get { return BenchInfo != null ? BenchInfo.CompoundMetersCount : 1; } }
///
@@ -37,12 +37,7 @@ namespace TBF.Rig.Sequences
///
public static TBF.UI.ProcedureInfo SelectedProcedure;
public static Common.IOrderInfo OrderInfo;
///
public static SharedDatabase.Entities.Process Workflow; /// Selected production tracing workflow
public static SharedDatabase.Entities.Workstep Workstep; /// Selected production tracing workstep
public static string PreviousStepName; /// Previous workstep name
public static string Part1Name; /// 1st reference part name
public static string Part2Name; /// 2nd reference part name or null
public static SharedDatabase.WorkflowSummary WorkflowSummary; /// Selected production tracing workflow
///
/// Test related (instance) variables.
@@ -471,7 +471,8 @@ namespace TBF.Rig.TestMethods.S640Communication
{
var order = ProcessData.OrderInfo as OrderInfo;
ISession session = ProcessData.TracingDB.SessionFactory.OpenSession();
refRecords = ProcessData.TracingDB.ReadRefRecords(session, order, ProcessData.TracingDB.DefaultOrder, ProcessData.Workflow);
refRecords = ProcessData.TracingDB.ReadRefRecords(session, order, ProcessData.TracingDB.DefaultOrder,
(ProcessData.WorkflowSummary != null) ? ProcessData.WorkflowSummary.Workflow : null);
session.Close();
}