Production tracing : Saving records OK, Verification should be OK (TODO: Test)
This commit is contained in:
parent
32047ef76a
commit
2f1a8cc9d6
@ -7,6 +7,11 @@ using Common;
|
||||
|
||||
namespace SharedDatabase
|
||||
{
|
||||
public class Const
|
||||
{
|
||||
public const int MaxPartNameLen = 10;
|
||||
}
|
||||
|
||||
public enum CodeType
|
||||
{
|
||||
[Description("")] UniqueNr = 0,
|
||||
|
||||
@ -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;
|
||||
|
||||
@ -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)
|
||||
|
||||
@ -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)
|
||||
|
||||
@ -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)
|
||||
|
||||
Loading…
Reference in New Issue
Block a user