ProductionTracing for Nanjing, OrderInfo updated after assignment of serial numbers, ver. 3.1.1831
This commit is contained in:
parent
dfddc8a980
commit
0d0355c65a
@ -29,5 +29,5 @@ using System.Runtime.InteropServices;
|
||||
// Build Number
|
||||
// Revision
|
||||
//
|
||||
[assembly: AssemblyVersion("3.1.1827.0")]
|
||||
[assembly: AssemblyFileVersion("3.1.1827.0")]
|
||||
[assembly: AssemblyVersion("3.1.1831.0")]
|
||||
[assembly: AssemblyFileVersion("3.1.1831.0")]
|
||||
|
||||
@ -227,6 +227,10 @@ namespace TBF.Rig.DataEntry.iPerl
|
||||
}
|
||||
|
||||
ProcessData.OrderInfo = (listOfOrders == null) ? null : listOfOrders.FirstOrDefault<IOrderInfo>(x => x.POName == orderComboBox.Text);
|
||||
if (ProcessData.TracingDB != null)
|
||||
{
|
||||
ProcessData.Workflow = ProcessData.TracingDB.GetWorkflowAndWorkstep(ProcessData.OrderInfo, out ProcessData.Workstep);
|
||||
}
|
||||
|
||||
PurchaseOrder = orderComboBox.Text;
|
||||
Program.LocalSettings.UpdateHistory(orderComboBox.Text, ref Program.LocalSettings.PurchaseOrderHistory);
|
||||
|
||||
@ -11,6 +11,7 @@ using NHibernate.Criterion;
|
||||
using Common;
|
||||
using Config.Entities;
|
||||
using SharedDatabase.Entities;
|
||||
using TBF.Rig.Sequences;
|
||||
|
||||
namespace TBF.Rig.Output.DB.ProductionTracing
|
||||
{
|
||||
@ -35,6 +36,8 @@ namespace TBF.Rig.Output.DB.ProductionTracing
|
||||
|
||||
public const string WorkstepName = "Test_bench";
|
||||
|
||||
public OrderInfo DefaultOrder;
|
||||
|
||||
MonitoringCfg tracingCfg;
|
||||
string workplace
|
||||
{
|
||||
@ -112,6 +115,8 @@ namespace TBF.Rig.Output.DB.ProductionTracing
|
||||
netMask = netadapter.NetMask;
|
||||
currentOpState = OpState.None;
|
||||
log.Warn(this.ToString());
|
||||
|
||||
DefaultOrder = null;
|
||||
}
|
||||
|
||||
///
|
||||
@ -144,13 +149,21 @@ namespace TBF.Rig.Output.DB.ProductionTracing
|
||||
.BuildSessionFactory();
|
||||
}
|
||||
|
||||
///
|
||||
/// Register this test bench in the tracing DB for approx. 2 weeks
|
||||
///
|
||||
ISession session = SessionFactory.OpenSession();
|
||||
|
||||
///
|
||||
/// Initialize DefaultOrder
|
||||
///
|
||||
var dfltOrders = session.QueryOver<OrderInfo>()
|
||||
.Where(x => x.POName == "0000001")
|
||||
.And(x => (x.POState == (sbyte)OrderState.New || x.POState == (sbyte)OrderState.Active))
|
||||
.List();
|
||||
if (dfltOrders.Count > 0) DefaultOrder = dfltOrders[0];
|
||||
|
||||
#if !DEBUG
|
||||
/// Only a release version registers a workplace
|
||||
///
|
||||
/// Register this test bench in the tracing DB for approx. 2 weeks (RELEASE version only)
|
||||
///
|
||||
SharedDatabase.TracingDB.RegisterWorkplaceObsolete(session,
|
||||
workplace,
|
||||
GlobalData.GetCurrentUserName(),
|
||||
@ -188,6 +201,43 @@ namespace TBF.Rig.Output.DB.ProductionTracing
|
||||
public void StopDevice2() {}
|
||||
|
||||
|
||||
public Process GetWorkflowAndWorkstep(IOrderInfo order, out Workstep workstep)
|
||||
{
|
||||
workstep = null;
|
||||
|
||||
if (order is OrderInfo)
|
||||
{
|
||||
try
|
||||
{
|
||||
var session = SessionFactory.OpenSession();
|
||||
var wflows = session.QueryOver<Process>()
|
||||
.Where(x => x.Name == (order as OrderInfo).Workflow)
|
||||
.List();
|
||||
if (wflows.Count == 1)
|
||||
{
|
||||
var wsteps = session.QueryOver<Workstep>()
|
||||
.Where(x => x.Workflow == wflows[0])
|
||||
.And(x => x.Name.ToLower().Contains("test"))
|
||||
.List();
|
||||
if (wsteps.Count == 1) workstep = wsteps[0];
|
||||
}
|
||||
|
||||
session.Close();
|
||||
|
||||
if (wflows.Count == 1)
|
||||
{
|
||||
return wflows[0]; /// Successful
|
||||
}
|
||||
}
|
||||
catch (Exception exc)
|
||||
{
|
||||
log.ErrorFormat("GetWorkflow({0}) failed: {1}", order, exc.Message);
|
||||
}
|
||||
}
|
||||
|
||||
return null;
|
||||
}
|
||||
|
||||
public IList<OrderInfo> ReadOrders(ISession session)
|
||||
{
|
||||
try
|
||||
@ -207,45 +257,70 @@ namespace TBF.Rig.Output.DB.ProductionTracing
|
||||
|
||||
|
||||
/// <summary>
|
||||
/// Read reference records belonging to specified order
|
||||
/// Read reference records belonging to a specified order
|
||||
/// </summary>
|
||||
/// <param name="session">DB sesson</param>
|
||||
/// <param name="order">Order</param>
|
||||
/// <returns>List of reference records-s</returns>
|
||||
public IList<ReferenceRecord> ReadRefRecords(ISession session, OrderInfo order)
|
||||
public IList<ReferenceRecord> ReadRefRecords(ISession session, OrderInfo order, OrderInfo dfltOrder = null, Process dfltWFlow = null)
|
||||
{
|
||||
try
|
||||
{
|
||||
return session.QueryOver<ReferenceRecord>()
|
||||
.Where(x => (x.POrder == order))
|
||||
.List();
|
||||
var refRecords = session.QueryOver<ReferenceRecord>()
|
||||
.Where(x => (x.POrder == order))
|
||||
.List();
|
||||
refRecords.Reverse();
|
||||
|
||||
if (dfltOrder != null && dfltWFlow != null)
|
||||
{
|
||||
var moreRecords = session.QueryOver<ReferenceRecord>()
|
||||
.Where(x => (x.POrder == dfltOrder))
|
||||
.And(x => (x.Workflow == dfltWFlow))
|
||||
.List();
|
||||
for (int i = moreRecords.Count - 1; i >= 0; i--) refRecords.Add(moreRecords[i]);
|
||||
}
|
||||
|
||||
return refRecords;
|
||||
}
|
||||
catch (Exception exc)
|
||||
{
|
||||
log.ErrorFormat("Cannot read orders from the tracing DB: {0}", exc.Message);
|
||||
log.ErrorFormat("Cannot read ref.records from the tracing DB: {0}", exc.Message);
|
||||
return new List<ReferenceRecord>();
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
/// <summary>
|
||||
/// Read records belonging to specified order
|
||||
/// Read records belonging to a specified order
|
||||
/// </summary>
|
||||
/// <param name="session">DB sesson</param>
|
||||
/// <param name="order">Order</param>
|
||||
/// <returns>List of records</returns>
|
||||
public IList<Record> ReadRecords(ISession session, OrderInfo order)
|
||||
public IList<Record> ReadRecords(ISession session, OrderInfo order, OrderInfo dfltOrder = null, Process dfltWFlow = null)
|
||||
{
|
||||
try
|
||||
{
|
||||
return session.QueryOver<Record>()
|
||||
.JoinQueryOver<ReferenceRecord>(rec => rec.ReferenceRecord)
|
||||
.Where(rr => rr.POrder.Id == order.Id)
|
||||
.List<Record>();
|
||||
var records = session.QueryOver<Record>()
|
||||
.JoinQueryOver<ReferenceRecord>(rec => rec.ReferenceRecord)
|
||||
.Where(rr => rr.POrder.Id == order.Id)
|
||||
.List();
|
||||
records.Reverse();
|
||||
|
||||
if (dfltOrder != null && dfltWFlow != null)
|
||||
{
|
||||
var moreRecords = session.QueryOver<Record>()
|
||||
.JoinQueryOver<ReferenceRecord>(rec => rec.ReferenceRecord)
|
||||
.Where(rr => (rr.POrder.Id == dfltOrder.Id))
|
||||
.And(rr => (rr.Workflow.Id == dfltWFlow.Id))
|
||||
.List();
|
||||
for (int i = moreRecords.Count - 1; i >= 0; i--) records.Add(moreRecords[i]);
|
||||
}
|
||||
|
||||
return records;
|
||||
}
|
||||
catch (Exception exc)
|
||||
{
|
||||
log.ErrorFormat("Cannot read orders from the tracing DB: {0}", exc.Message);
|
||||
log.ErrorFormat("Cannot read records from the tracing DB: {0}", exc.Message);
|
||||
return new List<Record>();
|
||||
}
|
||||
}
|
||||
@ -574,8 +649,8 @@ namespace TBF.Rig.Output.DB.ProductionTracing
|
||||
ITransaction transaction = null;
|
||||
ISession session = null;
|
||||
|
||||
var sampleWM = batch.WaterMeters.FirstOrDefault<Results.Entities.WaterMeter>(x => x != null && x.Disabled == false);
|
||||
if (sampleWM != null)
|
||||
var order = ProcessData.OrderInfo as SharedDatabase.Entities.OrderInfo;
|
||||
if (order != null && ProcessData.Workflow != null && ProcessData.Workstep != null)
|
||||
{
|
||||
///
|
||||
/// Save to regular tracing DB
|
||||
@ -585,40 +660,31 @@ namespace TBF.Rig.Output.DB.ProductionTracing
|
||||
session = SessionFactory.OpenSession();
|
||||
transaction = session.BeginTransaction();
|
||||
|
||||
var cOrders = session.QueryOver<OrderInfo>()
|
||||
.Where(x => x.POName == sampleWM.PurchaseOrder)
|
||||
.And(x => (x.POState == (sbyte)OrderState.New || x.POState == (sbyte)OrderState.Active))
|
||||
.List();
|
||||
|
||||
if (cOrders.Count < 1)
|
||||
var reloadedOrder = session.QueryOver<OrderInfo>()
|
||||
.Where(x => x.Id == order.Id)
|
||||
.List();
|
||||
if (reloadedOrder.Count == 1)
|
||||
{
|
||||
cOrders = session.QueryOver<OrderInfo>()
|
||||
.Where(x => x.POName == "0000001")
|
||||
.List();
|
||||
reloadedOrder[0].POState = (sbyte)OrderState.Active;
|
||||
reloadedOrder[0].CurrentPcsCount = order.CurrentPcsCount;
|
||||
reloadedOrder[0].CurrentSN = order.CurrentSN;
|
||||
reloadedOrder[0].CurrentRA = order.CurrentRA;
|
||||
session.SaveOrUpdate(reloadedOrder[0]);
|
||||
}
|
||||
|
||||
if (cOrders.Count == 1)
|
||||
int writtenRecordsCount = 0;
|
||||
foreach (var wMtr in batch.WaterMeters)
|
||||
{
|
||||
currentOrder = cOrders[0];
|
||||
|
||||
int writtenRecordsCount = 0;
|
||||
foreach (var wMtr in batch.WaterMeters)
|
||||
if (wMtr.SessionId == 1)
|
||||
{
|
||||
if (wMtr.SessionId == 1)
|
||||
{
|
||||
writtenRecordsCount += SaveSingleWM2DB(session, currentOrder, wMtr);
|
||||
}
|
||||
writtenRecordsCount += SaveSingleWM2DB(session, order, wMtr);
|
||||
}
|
||||
transaction.Commit();
|
||||
session.Flush();
|
||||
}
|
||||
transaction.Commit();
|
||||
session.Flush();
|
||||
|
||||
log.ErrorFormat("Batch {0}: {1} of {2} watermeters written to the regular production tracing DB",
|
||||
batch.BatchNr, writtenRecordsCount, batch.WaterMeters.Count);
|
||||
}
|
||||
else
|
||||
{
|
||||
log.ErrorFormat("POrder not found: {0}", sampleWM);
|
||||
}
|
||||
log.ErrorFormat("Batch {0}: {1} of {2} watermeters written to the regular production tracing DB",
|
||||
batch.BatchNr, writtenRecordsCount, batch.WaterMeters.Count);
|
||||
}
|
||||
catch (Exception exc)
|
||||
{
|
||||
@ -649,70 +715,18 @@ namespace TBF.Rig.Output.DB.ProductionTracing
|
||||
/// <param name="session">DB session</param>
|
||||
/// <param name="wm">Watermeter entity</param>
|
||||
/// <returns>Number of written reference record</returns>
|
||||
int SaveSingleWM2DB(ISession session, OrderInfo pOrder, Results.Entities.WaterMeter wm)
|
||||
int SaveSingleWM2DB(ISession session, OrderInfo order, Results.Entities.WaterMeter wm)
|
||||
{
|
||||
if (string.IsNullOrEmpty(wm.SerialNr) || (wm.ProcessId == 0))
|
||||
{
|
||||
/// Without PCB number there is no DB activity
|
||||
return 0;
|
||||
}
|
||||
else if ((currentWorkflow != null) && (wm.ProcessId == currentWorkflow.Id))
|
||||
if (!string.IsNullOrEmpty(wm.SerialNr) && ProcessData.Workflow != null && ProcessData.Workstep != null)
|
||||
{
|
||||
/// Process is already loaded => save a reference record for this WM
|
||||
session.SaveOrUpdate(new ReferenceRecord(pOrder, currentWorkflow, currentWorkstep, wm.SerialNr, GlobalData.CurrentUser.UserName, workplace, wm.Passed ? 0 : 1));
|
||||
session.SaveOrUpdate(new ReferenceRecord(order, ProcessData.Workflow, ProcessData.Workstep,
|
||||
wm.SerialNr, GlobalData.CurrentUser.UserName, workplace, wm.Passed ? 0 : 1));
|
||||
return 1;
|
||||
}
|
||||
else if (wm.ProcessId != 0)
|
||||
{
|
||||
/// Process ID is already known, however process and workstep have to be loaded
|
||||
IList<Process> processes = session.QueryOver<Process>()
|
||||
.Where(x => (x.Id == wm.ProcessId))
|
||||
.List();
|
||||
if (processes.Count != 1) return 0;
|
||||
|
||||
foreach (var ws in processes[0].Worksteps)
|
||||
{
|
||||
if (ws.Name == WorkstepName)
|
||||
{
|
||||
session.SaveOrUpdate(new ReferenceRecord(pOrder, processes[0], ws, wm.SerialNr, GlobalData.CurrentUser.UserName, workplace, wm.Passed ? 0 : 1));
|
||||
return 1;
|
||||
}
|
||||
}
|
||||
|
||||
return 0; /// No workste with 'WorkstepName' found
|
||||
}
|
||||
else
|
||||
{
|
||||
///
|
||||
/// Process ID is unknown => do everything from scratch
|
||||
///
|
||||
|
||||
/// Get all already existing reference records with Code == wm.SerialNr, refRecords[0] will be the most recent one
|
||||
IList<ReferenceRecord> refRecords;
|
||||
int trialsCount = 0;
|
||||
do
|
||||
{
|
||||
if (trialsCount > 0) ReadProcessesFromDB(session);
|
||||
|
||||
refRecords = session.QueryOver<ReferenceRecord>()
|
||||
.Where(rr => (rr.Code == wm.SerialNr))
|
||||
.OrderBy(rr => rr.TimeStamp).Desc
|
||||
.List();
|
||||
trialsCount++;
|
||||
}
|
||||
while (refRecords.Count == 0 && trialsCount <= 2);
|
||||
|
||||
/// Save a new reference record from this test bench if workstep "Test_bench" is defined in the obtained WM process
|
||||
IList<Workstep> worksteps;
|
||||
if ((refRecords.Count > 0) && workstepsDictionary.TryGetValue(refRecords[0].Workflow.Id, out worksteps) && (worksteps.Count == 1))
|
||||
{
|
||||
session.SaveOrUpdate(new ReferenceRecord(pOrder, refRecords[0].Workflow, worksteps[0], wm.SerialNr, GlobalData.GetCurrentUserName(), workplace, wm.Passed ? 0 : 1));
|
||||
return 1;
|
||||
}
|
||||
|
||||
return 0;
|
||||
}
|
||||
}
|
||||
return 0;
|
||||
}
|
||||
|
||||
|
||||
/// <summary>
|
||||
|
||||
@ -215,6 +215,10 @@ namespace TBF.Rig.Sequences
|
||||
|
||||
ProcessData.SelectedProcedure = Program.MainWnd.SelectedProcedure;
|
||||
ProcessData.OrderInfo = Program.MainWnd.SelectedProcedure.OrderInfo;
|
||||
if (ProcessData.TracingDB != null)
|
||||
{
|
||||
ProcessData.Workflow = ProcessData.TracingDB.GetWorkflowAndWorkstep(ProcessData.OrderInfo, out ProcessData.Workstep);
|
||||
}
|
||||
|
||||
selectedTestName = (selection == Selection.Q1) ? "Q1"
|
||||
: ((selection == Selection.Q2) ? "Q2"
|
||||
|
||||
@ -37,6 +37,8 @@ namespace TBF.Rig.Sequences
|
||||
///
|
||||
public static ProcedureInfo SelectedProcedure;
|
||||
public static Common.IOrderInfo OrderInfo;
|
||||
public static SharedDatabase.Entities.Process Workflow;
|
||||
public static SharedDatabase.Entities.Workstep Workstep;
|
||||
|
||||
///
|
||||
/// Test related (instance) variables.
|
||||
|
||||
@ -466,9 +466,10 @@ namespace TBF.Rig.TestMethods.S640Communication
|
||||
{
|
||||
if (ProcessData.TracingDB != null && ProcessData.OrderInfo is OrderInfo)
|
||||
{
|
||||
var order = ProcessData.OrderInfo as OrderInfo;
|
||||
ISession session = ProcessData.TracingDB.SessionFactory.OpenSession();
|
||||
refRecords = ProcessData.TracingDB.ReadRefRecords(session, ProcessData.OrderInfo as OrderInfo);
|
||||
records = ProcessData.TracingDB.ReadRecords(session, ProcessData.OrderInfo as OrderInfo);
|
||||
refRecords = ProcessData.TracingDB.ReadRefRecords(session, order, ProcessData.TracingDB.DefaultOrder, ProcessData.Workflow);
|
||||
records = ProcessData.TracingDB.ReadRecords(session, order, ProcessData.TracingDB.DefaultOrder, ProcessData.Workflow);
|
||||
session.Close();
|
||||
}
|
||||
|
||||
@ -513,6 +514,7 @@ namespace TBF.Rig.TestMethods.S640Communication
|
||||
eRegisterNumbers[i].Text = pcbNumber;
|
||||
radioAddresses[i].Text = optoHeads[i].RadioAddress.ToString();
|
||||
|
||||
/// Find the housing number in the tracing DDB
|
||||
Record rec;
|
||||
ReferenceRecord refRec;
|
||||
if ((rec = records.FirstOrDefault(x => x.Code == pcbNumber)) != null &&
|
||||
|
||||
@ -404,7 +404,10 @@ namespace TBF.UI
|
||||
string[] edgesLcfg = null;
|
||||
string[] edgesXLcfg = null;
|
||||
///
|
||||
var schDrawingCmpnts = TBF.DB.CurrentBench.IsRealBench ? Rig.StateMachine.Components : TBF.Rig.TbfComponents.LoadComponentsFromDB(cmpntEntities);
|
||||
var schDrawingCmpnts = (TBF.DB.CurrentBench.IsRealBench && Rig.StateMachine.Components != null)
|
||||
? Rig.StateMachine.Components
|
||||
: TBF.Rig.TbfComponents.LoadComponentsFromDB(cmpntEntities);
|
||||
|
||||
foreach (var component in schDrawingCmpnts)
|
||||
{
|
||||
TBF.Rig.Generic.IComponentCfg cmpCfg = component.Cfg;
|
||||
|
||||
Loading…
Reference in New Issue
Block a user