Production tracing : Saving records OK, Verification should be OK (TODO: Test)

This commit is contained in:
Milan Hanajik 2022-01-11 20:28:28 +01:00
parent 32047ef76a
commit 2f1a8cc9d6
5 changed files with 54 additions and 34 deletions

View File

@ -7,6 +7,11 @@ using Common;
namespace SharedDatabase
{
public class Const
{
public const int MaxPartNameLen = 10;
}
public enum CodeType
{
[Description("")] UniqueNr = 0,

View File

@ -146,7 +146,8 @@ namespace TBF.Rig.DataEntry.S620
try
{
ISession session = ProcessData.TracingDB.SessionFactory.OpenSession();
ProcessData.Workflow = ProcessData.TracingDB.GetWorkflowAndWorkstep(ProcessData.OrderInfo, out ProcessData.Workstep, session);
ProcessData.Workflow = ProcessData.TracingDB.GetWorkflowAndWorkstep(ProcessData.OrderInfo, out ProcessData.Workstep,
out ProcessData.PreviousStepName, out ProcessData.Part1Name, out ProcessData.Part2Name, session);
session.Close();
order = ProcessData.OrderInfo.POName;
workflow = ProcessData.Workflow.Name;

View File

@ -242,7 +242,8 @@ namespace TBF.Rig.DataEntry.iPerl
{
ISession session = ProcessData.TracingDB.SessionFactory.OpenSession();
ProcessData.OrderInfo = ProcessData.TracingDB.ReReadOneOrder(oInfo as SharedDatabase.Entities.OrderInfo, session);
ProcessData.Workflow = ProcessData.TracingDB.GetWorkflowAndWorkstep(ProcessData.OrderInfo, out ProcessData.Workstep, session);
ProcessData.Workflow = ProcessData.TracingDB.GetWorkflowAndWorkstep(ProcessData.OrderInfo, out ProcessData.Workstep,
out ProcessData.PreviousStepName, out ProcessData.Part1Name, out ProcessData.Part2Name, session);
session.Close();
}
catch (Exception exc)

View File

@ -202,10 +202,14 @@ namespace TBF.Rig.Output.DB.ProductionTracing
public void StopDevice2() {}
public Process GetWorkflowAndWorkstep(IOrderInfo order, out Workstep workstep, ISession session = null)
public Process GetWorkflowAndWorkstep(IOrderInfo order, out Workstep workstep, out string previousStepName,
out string part1name, out string part2name, ISession session = null)
{
bool openAndCloseSession = (session == null) || !session.IsOpen;
workstep = null;
previousStepName = null;
part1name = null;
part2name = null;
if (order is OrderInfo)
{
@ -222,6 +226,13 @@ namespace TBF.Rig.Output.DB.ProductionTracing
if (wflows.Count == 1)
{
workstep = wflows[0].Worksteps.FirstOrDefault(x => x.Name.ToLower().Contains("test"));
int previousStepNr = workstep.WorkstepNr - 1;
var previousStep = (previousStepNr < 1) ? null : wflows[0].Worksteps.FirstOrDefault(x => x.WorkstepNr == previousStepNr);
var part1 = wflows[0].Parts.FirstOrDefault(x => x.StepNumber == 1);
var part2 = wflows[0].Parts.FirstOrDefault(x => x.StepNumber == 2);
if (previousStep != null) previousStepName = previousStep.Name;
if (part1 != null) part1name = part1.Name;
if (part2 != null) part2name = part2.Name;
}
if (openAndCloseSession) session.Close();
@ -485,7 +496,6 @@ namespace TBF.Rig.Output.DB.ProductionTracing
var sampleWM = waterMeters.FirstOrDefault<Results.Entities.WaterMeter>(x => x != null && x.Disabled == false);
if (sampleWM != null)
{
bool isAtLeastOneNOK = false;
using (ISession session = SessionFactory.OpenSession())
{
for (int i = 0; i < waterMeters.Count; i++)
@ -495,47 +505,45 @@ namespace TBF.Rig.Output.DB.ProductionTracing
if ((wm != null) && !wm.Disabled)
{
CheckPreviousRecordOfSingleWM(session, wm);
if (wm.LastRecordIsNok)
{
isAtLeastOneNOK = true;
}
}
}
retVal = Retv.OK;
retVal = Retv.OK; /// Successfully completed (regardless of wm.LastRecordIsNok)
}
}
return retVal;
return retVal; /// Returns Retv.Error if checking not completed successfully
}
Retv CheckPreviousRecordOfSingleWM(ISession session, Results.Entities.WaterMeter wm)
{
if (string.IsNullOrEmpty(wm.SerialNr))
if (!string.IsNullOrEmpty(wm.SerialNr))
{
/// S/N is missing
wm.ProcessId = 0;
wm.LastRecordIsNok = false; /// OK, this is an RFID comm. error, not a production tracing error
return Retv.OK;
}
///
/// Get all reference records with Code == SerialNr from all worksteps different from 'Test_bench'
///
var refRecords = session.QueryOver<ReferenceRecord>()
.Where(rr => (rr.Code1 == wm.SerialNr))
.List();
if (refRecords.Count == 0)
{
/// No records found
wm.ProcessId = 0;
wm.LastRecordIsNok = true; /// NOK
return Retv.OK;
/// Get all reference records with Code == SerialNr from all worksteps different from 'Test_bench'
var refRecords = session.QueryOver<ReferenceRecord>()
.Where(rr => (rr.Code1 == wm.SerialNr))
.List();
if (refRecords.Count == 1)
{
ReferenceRecord refRecord = refRecords[0];
StepRecord previousStep = refRecord.StepRecords.FirstOrDefault(x => x.Workstep == ProcessData.PreviousStepName);
if (refRecord.Name1 == ProcessData.Part1Name &&
refRecord.Name2 == ProcessData.Part2Name &&
(ProcessData.PreviousStepName == null || (previousStep != null && previousStep.Workstep == ProcessData.PreviousStepName)))
{
wm.ProcessId = 0;
wm.LastRecordIsNok = false; /// OK
return Retv.OK;
}
}
}
/// S/N is missing OR no records found OR workflows do not match OR previous StepRecord is missing
wm.ProcessId = 0;
wm.LastRecordIsNok = false; /// NOK (=default if no matching record found)
wm.LastRecordIsNok = true; /// NOK
return Retv.OK;
}
@ -654,7 +662,9 @@ namespace TBF.Rig.Output.DB.ProductionTracing
{
refRecord = new ReferenceRecord((order != null) ? order.POName : null,
(workflow != null) ? workflow.Name : null,
wm.SerialNr, /// PcbNumber (iPERL) or ghousing S/N (620/640)
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)

View File

@ -227,8 +227,11 @@ namespace TBF.Rig.Sequences
try
{
ISession session = ProcessData.TracingDB.SessionFactory.OpenSession();
ProcessData.OrderInfo = ProcessData.TracingDB.ReReadOneOrder(Program.MainWnd.SelectedProcedure.OrderInfo as SharedDatabase.Entities.OrderInfo, session);
ProcessData.Workflow = ProcessData.TracingDB.GetWorkflowAndWorkstep(ProcessData.OrderInfo, out ProcessData.Workstep, session);
ProcessData.OrderInfo = ProcessData.TracingDB
.ReReadOneOrder(Program.MainWnd.SelectedProcedure.OrderInfo as SharedDatabase.Entities.OrderInfo, session);
ProcessData.Workflow = ProcessData.TracingDB
.GetWorkflowAndWorkstep(ProcessData.OrderInfo, out ProcessData.Workstep, out ProcessData.PreviousStepName,
out ProcessData.Part1Name, out ProcessData.Part2Name, session);
session.Close();
}
catch (Exception exc)