void ProcessMessage(OrderOptionsData ord, Func <byte[], Task> cbsend = null) { if (ord.Command == eCommand.OrderDetailsComplete) { LoadOrderRequestComplete = ord.RequestId.ToString(); orderDetailThread.CompleteBackgroundWorker(ord.RequestId); LoadOrderDetailsComplete = true; return; } //OrderDetailDatabase.SaveItem(new OrderDetail(ord)); AddOrderDetails(ord); }
void ProcessMessage(IMDMMessage trk, Func <byte[], Task> cbsend = null) { if (trk.Command == eCommand.TrucksLoadComplete) { LoadTruckRequestComplete = trk.RequestId.ToString(); truckThread.CompleteBackgroundWorker(trk.RequestId); return; } Truck newtruck = new Truck((TruckData)trk); Truck truck = TruckDatabase.GetItem(newtruck); if (truck == null) { TruckDatabase.SaveItem(newtruck); } AddTruck((TruckData)trk); }
public void ProcessMessage(IMDMMessage icmd, Func <byte[], Task> cbsend = null) { ManifestMasterData mmcmd; ManifestDetailsData mdcmd; bool bTerminateThread = false; Request valReq; int cnt = 0; IMDMMessage mcmd; if (icmd.Command == eCommand.Manifest) { mmcmd = (ManifestMasterData)icmd; mmcmd.status = status.Init; Add(mmcmd); //Winsys loading of the Manifest Master update to the original requestId for a ship date Logger.Info($"ManifestVM::Process Message from Winsys: ManifestMaster Query: {mmcmd.ToString()}"); if (dRequests.TryGetValue(mmcmd.RequestId, out valReq)) { if (!valReq.LIds.ContainsKey(mmcmd.LINK)) { Logger.Info($"ManifestVM::Add Init Query link {mmcmd.LINK}"); lock (olock) { valReq.LIds.Add(mmcmd.LINK, status.Init); LoadManifestIdComplete.Add(mmcmd.LINK.ToString()); } } else { Logger.Info($"ManifestVM::Update Init to Releasing for link: {mmcmd.LINK}"); valReq.LIds[mmcmd.LINK] = status.Releasing; } } else { Logger.Error($"Request not found, why are we processing an unkniown message? {mmcmd.RequestId}"); } //Search the Manifest from the SQL Server to see if it was already released. CheckManifestStatus(mmcmd); } else if (icmd.Command == eCommand.CheckManifest) { mmcmd = (ManifestMasterData)icmd; mmcmd.status = status.Init; Add(mmcmd); Logger.Info($"ManifestVM::Process Message: Check Manifest Result: {mmcmd.ToString()}"); if (dRequests.TryGetValue(mmcmd.RequestId, out valReq)) { if (mmcmd.ManifestId != 0) { mmcmd.Command = eCommand.ManifestLoadComplete; mmcmd.status = status.Released; valReq.LIds[mmcmd.LINK] = status.Completed; if (valReq.LinkMid.ContainsKey(mmcmd.LINK)) { lock (olock) valReq.LinkMid[mmcmd.LINK].Add(mmcmd.ManifestId); } else { lock (olock) valReq.LinkMid.Add(mmcmd.LINK, new List <long>() { mmcmd.ManifestId }); } } else { mmcmd.Command = eCommand.Manifest; mmcmd.status = status.Uploaded; if (valReq.LIds.ContainsKey(mmcmd.LINK)) { valReq.LIds[mmcmd.LINK] = status.Completed; } else { valReq.LIds.Add(mmcmd.LINK, status.Completed); } } } Add(mmcmd); } else if (icmd.Command == eCommand.CheckManifestComplete) { mmcmd = (ManifestMasterData)icmd; // if the man id exists update otherwise we are done here mmcmd.Command = eCommand.ManifestLoadComplete; if (LoadManifestIdComplete.Contains(mmcmd.LINK.ToString())) { lock (olock) LoadManifestIdComplete.Remove(mmcmd.LINK.ToString()); } int mcnt = 0; if (dRequests.TryGetValue(mmcmd.RequestId, out valReq)) { if (valReq.LinkMid.ContainsKey(mmcmd.LINK)) { mmcmd.status = status.Released; } else { mmcmd.status = status.Completed; } Add(mmcmd); valReq.ChkIds.Remove(mmcmd.LINK); if ((valReq.LIds.Select(a => a).Where(b => b.Value.CompareTo(status.Init) == 0).Count() == 0 || valReq.LIds.Count == 0) && valReq.ChkIds.Count == 0) { bTerminateThread = true; } cnt = valReq.LIds.Select(a => a).Where(b => b.Value.CompareTo(status.Init) == 0).Count(); Logger.Info($"ManifestVM::Process Manifest {cnt} PENDING remaining."); } if (cnt == 0 && (valReq != null && valReq.ChkIds.Count == 0) && mcnt == 0) { Logger.Info($"ManifestVM::Process Manifest Load Complete May now Terminate Thread."); bTerminateThread = true; } } else if (icmd.Command == eCommand.ManifestLoadComplete) { mmcmd = (ManifestMasterData)icmd; Logger.Info($"ManifestVM::Process Manifest Load Complete Message: {mmcmd.ToString()}"); if (dRequests.TryGetValue(mmcmd.RequestId, out valReq)) { cnt = valReq.LIds.Select(a => a).Where(b => b.Value.CompareTo(status.Init) == 0).Count() + valReq.ChkIds.Count(); if (mmcmd.ManifestId == 0 && mmcmd.LINK != 0) { var it = valReq.LIds.Select(b => b).Where(a => a.Key.CompareTo((Int32)mmcmd.LINK) == 0).FirstOrDefault(); status est = ((KeyValuePair <long, status>)it).Value; if (est == status.Init) { Logger.Info($"ManifestVM::Process Manifest decrementing from {cnt} Inits. Flipping {mmcmd.LINK} Request to PENDING."); valReq.LIds[mmcmd.LINK] = status.Pending; } else { valReq.LIds[mmcmd.LINK] = status.Completed; } cnt = valReq.LIds.Select(a => a).Where(b => b.Value.CompareTo(status.Init) == 0).Count() + valReq.ChkIds.Count(); Logger.Info($"ManifestVM::Process Manifest decrementing New Count {cnt} Inits. Flipping {mmcmd.LINK} Request to PENDING."); } else if (mmcmd.LINK == 0) { // No trucks found in winsys Logger.Info($"No truck manifest found for this date {mmcmd.SHIP_DTE}!"); } else { Logger.Info($"ManifestVM::Process Manifest Load cnt: {cnt} Complete Terminate Thread."); if (valReq.LIds.ContainsKey(mmcmd.LINK)) { lock (olock) valReq.LIds.Remove(mmcmd.LINK); } mmcmd.Command = eCommand.ManifestLoadComplete; lock (olock) LoadManifestIdComplete.Add(mmcmd.ManifestId.ToString()); } cnt = valReq.LIds.Select(a => a).Where(b => b.Value.CompareTo(status.Init) == 0).Count(); Logger.Info($"ManifestVM::Process Manifest {cnt} PENDING remaining."); if (cnt == 0 && valReq.ChkIds.Count == 0) { Logger.Info($"ManifestVM::Process Manifest Load Complete May now Terminate Thread."); bTerminateThread = true; } } } else if (icmd.Command == eCommand.UploadManifestComplete) { mmcmd = (ManifestMasterData)icmd; lock (olock) uploadManifestIdComplete.Add(mmcmd.ManifestId.ToString()); } else if (icmd.Command == eCommand.ManifestDetails) { //dlrnos //Set the status of tyhe manifestDetail id to received. } else if (icmd.Command == eCommand.ManifestDetailsComplete) { //Set the status of tyhe manifestDetail id to completed. mdcmd = (ManifestDetailsData)icmd; //check if there are zero remaining with status Pending // Orders + OrderDetails + ManifestDetails } else if (icmd.Command == eCommand.OrdersLoad) { } else if (icmd.Command == eCommand.OrderUpdatesComplete) { OrderMasterData omd = (OrderMasterData)icmd; } else if (icmd.Command == eCommand.OrderDetails) { OrderDetailsData odd = (OrderDetailsData)icmd; //int wncnt = odd.WIN_CNT; //if (wncnt < 0) wncnt = 0; long id = Int64.Parse(odd.MDL_NO.ToString() + odd.MDL_CNT.ToString() + odd.OPT_NUM.ToString() + odd.ORD_NO.ToString()); if (!LoadManifestIdComplete.Contains(id.ToString())) { Logger.Info($"Add ODC LoadManifestIdComplete: {odd.ORD_NO.ToString()}"); lock (olock) { if (!lstMissingIds.Contains(id)) { LoadManifestIdComplete.Add(id.ToString()); } else { lstMissingIds.Remove(id); Logger.Info($"Ignore already in the missing container, Remove it ODC LoadManifestIdComplete: {odd.ORD_NO.ToString()}"); } } } if ((lstMissingIds.Count + LoadManifestIdComplete.Count - odcnt == 0) && binitOD && (oocnt == 0 && binitOO)) { bTerminateThread = true; } } else if (icmd.Command == eCommand.OrderDetailsComplete) { OrderDetailsData oddc = (OrderDetailsData)icmd; if (!binitOD) { odcnt = oddc.LineNumber; binitOD = true; } if (LoadManifestIdComplete.Contains(oddc.ORD_NO.ToString())) { Logger.Info($"Remove ODC LoadManifestIdComplete: {oddc.ORD_NO.ToString()}"); lock (olock) { LoadManifestIdComplete.Remove(oddc.ORD_NO.ToString()); if (lstMissingIds.Contains(oddc.ORD_NO)) { Logger.Info($"Also Remove ODC lstMissingIds {oddc.ORD_NO.ToString()}"); lstMissingIds.Remove(oddc.ORD_NO); } } } else { Logger.Info($"Add ODC Add lstMissingIds:{oddc.ORD_NO.ToString()}"); lock (olock) lstMissingIds.Add(oddc.ORD_NO); } Logger.Info($"ODO check missing:{lstMissingIds.Count} + complete{LoadManifestIdComplete.Count} - odcnt:{odcnt} oocnt:{oocnt} "); if (lstMissingIds.Count + LoadManifestIdComplete.Count - odcnt == 0 && (oocnt == 0 && binitOO)) { bTerminateThread = true; } } else if (icmd.Command == eCommand.OrderOptions) { OrderOptionsData ood = (OrderOptionsData)icmd; if (LoadManifestIdComplete.Contains(ood.ORD_NO.ToString())) { Logger.Info($"Remove OO LoadManifestIdComplete:{ood.ORD_NO.ToString()} LoadManifestIdComplete.cnt:{LoadManifestIdComplete.Count}"); lock (olock) { LoadManifestIdComplete.Remove(ood.ORD_NO.ToString()); if (lstMissingIds.Contains(ood.ORD_NO)) { Logger.Info($"Also Remove OO lstMissingIds {ood.ORD_NO.ToString()} lstMissingIds cnt:{lstMissingIds.Count}"); lstMissingIds.Remove(ood.ORD_NO); } } } else { Logger.Info($"Add OO Add lstMissingIds: {ood.ORD_NO.ToString()} lstMissingIds cnt:{lstMissingIds.Count}"); lock (olock) lstMissingIds.Add(ood.ORD_NO); } Logger.Info($"OO check missing:{lstMissingIds.Count} + complete{LoadManifestIdComplete.Count} - oocnt:{oocnt} odcnt:{odcnt} "); if ((lstMissingIds.Count + LoadManifestIdComplete.Count - oocnt == 0) && binitOO && (odcnt == 0 && binitOD)) { bTerminateThread = true; } } else if (icmd.Command == eCommand.OrderOptionsComplete) { OrderOptionsData oodc = (OrderOptionsData)icmd; if (!binitOO) { oocnt = oodc.Count; binitOO = true; } if (LoadManifestIdComplete.Contains(oodc.ORD_NO.ToString())) { lock (olock) { Logger.Info($"Remove OOComplete LoadManifestIdComplete: {oodc.ORD_NO.ToString()}"); LoadManifestIdComplete.Remove(oodc.ORD_NO.ToString()); } } else { Logger.Info($"Add OOComplete lstMissingIds:{oodc.ORD_NO.ToString()}"); lock (olock) lstMissingIds.Add(oodc.ORD_NO); } Logger.Info($"OOComplete check: Missing:{lstMissingIds.Count} + Complete:{LoadManifestIdComplete.Count} - oocnt:{oocnt}"); if (lstMissingIds.Count + LoadManifestIdComplete.Count - oocnt == 0 && (odcnt == 0 && binitOD)) { bTerminateThread = true; } } else if (icmd.Command == eCommand.Trucks) { // TruckData td = (TruckData)icmd; } else if (icmd.Command == eCommand.ScanFile) { ScanFileData sf = (ScanFileData)icmd; } else if (icmd.Command == eCommand.TrucksLoadComplete) { // TruckData tdc = (TruckData)icmd; bTerminateThread = true; } else if (icmd.Command == eCommand.Stops) { // StopData sd = (StopData)icmd; } else if (icmd.Command == eCommand.StopsLoadComplete) { // StopData sdc = (StopData)icmd; } else if (icmd.Command == eCommand.OrdersLoad) { // OrderData od = (OrderData)icmd; } else if (icmd.Command == eCommand.OrdersLoadComplete) { // OrderData odc = (OrderData)icmd; // long id = odc.ORD_NO; //lock (olock) //{ // if (LoadManifestIdComplete.Contains(id.ToString())) // { // Logger.Info($"Remove (Error Should skip) OComplete check {LoadManifestIdComplete.Count}"); // LoadManifestIdComplete.Remove(id.ToString()); // } //} //if (dRequests.TryGetValue(icmd.RequestId, out valReq)) //{ // if (valReq.LinkMid.ContainsKey(id)) // odc.status = status.Released; // else // odc.status = status.Completed; // Logger.Info($"ManifestVM::Process Manifest {cnt} PENDING remaining."); //} } else { Logger.Error($"Unhandled command Backgrtound worker handler {Enum.GetName(typeof(eCommand), icmd.Command)}."); } //The request id has completed if (bTerminateThread) { Logger.Info($"ManifestVM::Process Terminate Thread for {icmd.RequestId}."); manifestMasterThread.CompleteBackgroundWorker(icmd.RequestId); LoadManifestRequestComplete = icmd.RequestId.ToString(); LoadManifestCompleted = true; } }