void bgWorker_ProgressChanged(object sender, ProgressChangedEventArgs e) { object[] parameters = e.UserState as object[]; isaCommand cmd = (isaCommand )parameters[0]; Func <byte[], Task> cbsend = null; if (parameters.Length == 3) { cbsend = (Func <byte[], Task>)parameters[2]; } IMDMMessage mcmd = null; switch (cmd.command) { case eCommand.Manifest: mcmd = new ManifestMasterData((manifestMaster)cmd, ((manifestMaster)cmd).id); Sendback((O)mcmd, cbsend); break; case eCommand.ManifestLoadComplete: manifestRequest mreq = (manifestRequest)cmd; if (mreq.valist != null) { foreach (var it in mreq.valist) { mcmd = new ManifestMasterData() { RequestId = new Guid(cmd.requestId), LINK = it, SHIP_DTE = DateTime.Today, Command = eCommand.ManifestLoadComplete }; Sendback((O)mcmd, cbsend); } } else { mcmd = new ManifestMasterData() { RequestId = new Guid(cmd.requestId), LINK = -1, SHIP_DTE = DateTime.Today, Command = eCommand.ManifestLoadComplete }; Sendback((O)mcmd, cbsend); } break; case eCommand.CheckManifestComplete: mcmd = new ManifestMasterData((manifestMaster)cmd, ((manifestMaster)cmd).id, false); Sendback((O)mcmd, cbsend); break; case eCommand.CheckManifest: mcmd = new ManifestMasterData((manifestMaster)cmd, ((manifestMaster)cmd).id, false); Sendback((O)mcmd, cbsend); break; case eCommand.Drivers: mcmd = new DriverData() { Command = cmd.command }; Sendback((O)mcmd, cbsend); break; case eCommand.DriversLoadComplete: mcmd = (DriverData)cmd; Sendback((O)mcmd, cbsend); CompleteBackgroundWorker(new Guid(cmd.requestId)); break; case eCommand.ManifestDetails: mcmd = new ManifestDetailsData() { Command = cmd.command }; Sendback((O)mcmd, cbsend); break; case eCommand.AccountReceivable: mcmd = new AccountsReceivableData((accountReceivable)cmd); Sendback((O)mcmd, cbsend); break; case eCommand.ManifestDetailsComplete: mreq = (manifestRequest)cmd; if (mreq.valist != null) { foreach (var it in mreq.valist) { mcmd = new ManifestDetailsData() { RequestId = new Guid(cmd.requestId), DLR_NO = it, Command = eCommand.ManifestDetailsComplete }; Sendback((O)mcmd, cbsend); } } else { mcmd = new ManifestMasterData() { RequestId = new Guid(cmd.requestId), LINK = -1, SHIP_DTE = DateTime.Today, Command = eCommand.ManifestLoadComplete }; Sendback((O)mcmd, cbsend); } //mcmd = new ManifestDetailsData((manifestDetails)cmd); //Sendback((O)mcmd, cbsend); //CompleteBackgroundWorker(new Guid(cmd.requestId)); break; //case eCommand.OrdersLoad: // mcmd = new OrderMasterData() { // Command = cmd.command, // ORD_NO=((orderMaster)cmd).ORD_NO, // Status = ((orderMaster)cmd).Status // }; // Sendback((O)mcmd, cbsend); // break; case eCommand.OrdersUpload: mcmd = new OrderMasterData() { Command = cmd.command, ORD_NO = ((orderMaster)cmd).ORD_NO, Status = ((orderMaster)cmd).Status }; Sendback((O)mcmd, cbsend); break; case eCommand.OrderUpdatesComplete: mreq = (manifestRequest)cmd; if (mreq.valist != null) { foreach (var it in mreq.valist) { mcmd = new OrderMasterData() { RequestId = new Guid(cmd.requestId), ORD_NO = (int)it, Command = eCommand.ManifestDetailsComplete }; Sendback((O)mcmd, cbsend); } } break; case eCommand.OrderDetails: mcmd = new OrderDetailsData((orderDetails)cmd); Sendback((O)mcmd, cbsend); break; case eCommand.OrderDetailsComplete: mreq = (manifestRequest)cmd; if (mreq.valist != null) { foreach (var it in mreq.valist) { mcmd = new OrderDetailsData() { RequestId = new Guid(cmd.requestId), ORD_NO = it, LineNumber = mreq.Stop, // using as the count (number of OrderDetail Records Expected) Command = eCommand.OrderDetailsComplete }; Sendback((O)mcmd, cbsend); } } break; case eCommand.OrderOptions: mcmd = new OrderOptionsData((orderOptions)cmd); Sendback((O)mcmd, cbsend); break; case eCommand.OrderOptionsComplete: mreq = (manifestRequest)cmd; if (mreq.valist != null) { foreach (var it in mreq.valist) { mcmd = new OrderOptionsData() { RequestId = new Guid(cmd.requestId), ORD_NO = (int)it, Count = mreq.Stop, // using as the count (number of OrderDetail Records Expected) Command = eCommand.OrderOptionsComplete }; Sendback((O)mcmd, cbsend); } } break; case eCommand.ScanFile: mcmd = new ScanFileData((scanFile)cmd); Sendback((O)mcmd, cbsend); break; case eCommand.Trucks: mcmd = new TruckData((trucks)cmd); Sendback((O)mcmd, cbsend); break; case eCommand.TrucksLoadComplete: mreq = (manifestRequest)cmd; mcmd = new TruckData() { RequestId = new Guid(cmd.requestId), ManifestId = mreq.id, Command = eCommand.TrucksLoadComplete }; Sendback((O)mcmd, cbsend); break; case eCommand.Stops: mcmd = new StopData((stops)cmd); Sendback((O)mcmd, cbsend); break; case eCommand.StopsLoadComplete: mcmd = new StopData() { Command = cmd.command, RequestId = new Guid(cmd.requestId) }; mreq = (manifestRequest)cmd; if (mreq.valist != null) { foreach (var id in mreq.valist) { mcmd = new StopData() { Command = cmd.command, //TruckCode = TRK_CDE, RequestId = new Guid(cmd.requestId) }; Sendback((O)mcmd, cbsend); } } else { mcmd = new StopData() { Command = cmd.command, //TruckCode = TRK_CDE, RequestId = new Guid(cmd.requestId) }; Sendback((O)mcmd, cbsend); } break; case eCommand.OrdersLoad: mcmd = new OrderData((orders)cmd); Sendback((O)mcmd, cbsend); break; case eCommand.OrdersLoadComplete: mreq = (manifestRequest)cmd; if (mreq.valist != null) { foreach (var id in mreq.valist) { mcmd = new OrderData() { Command = cmd.command, DLR_NO = (int)id, RequestId = new Guid(cmd.requestId) }; Sendback((O)mcmd, cbsend); } } else { Logger.Info($"OrdersLoadComplete: {cmd.ToString()}"); mcmd = new OrderData() { Command = cmd.command, // DLR_NO = id, RequestId = new Guid(cmd.requestId) }; Sendback((O)mcmd, cbsend); } break; case eCommand.UploadManifestComplete: mcmd = new ManifestMasterData() { Command = cmd.command, RequestId = NewGuid(cmd.requestId) }; Sendback((O)mcmd, cbsend); break; default: Logger.Error($"Unhandled command Backgrtound worker handler {Enum.GetName(typeof(eCommand), cmd.command)}."); break; } }
public isaCommand ReceiveMessage(isaCommand cmd) { switch (cmd.command) { case eCommand.Ping: Logger.Debug($"ReceiveMessage - Received Ping / Replying Pong.."); WinSysSM.SendMessage(new Command() { command = eCommand.Pong }); break; case eCommand.Pong: Logger.Debug($"ReceiveMessage - Received Pong"); break; case eCommand.LoadFiles: Logger.Info($"ReceiveMessage - Copy Files from Winsys Server Paths top App Server Paths:{cmd.ToString()}"); //CopyFilesToServer(DateTime.Today); Logger.Info($"ReceiveMessage - Replying LoadFilesComplete..."); WinSysSM.SendMessage(new Command() { command = eCommand.LoadFilesComplete }); //cbsend(new Command() { command = eCommand.LoadFilesComplete }.ToArray()); break; case eCommand.GenerateManifest: Logger.Info($"ReceiveMessage - Generate Manifest from Winsys and SqlServer:{cmd.ToString()}"); manifestRequest req = (manifestRequest)cmd; WinSysSM.SendMessage(req); break; case eCommand.ManifestDetails: Logger.Info($"ReceiveMessage - Generate Manifest Details from Winsys - API Drill Down:{cmd.ToString()}"); manifestDetails manDet = (manifestDetails)cmd; ManifestDetailsData manDetData = new ManifestDetailsData(manDet); Logger.Info($"INSERTMANIFESTDETAILS (Persist): {manDetData.ToString()}"); if (!dManDetails.ContainsKey(manDetData.RequestId.ToString() + manDetData.ManId.ToString())) { dManDetails.Add(manDetData.RequestId.ToString() + manDetData.ManId.ToString(), new List <ManifestDetailsData>()); } foreach (var omdit in UMDServer.Persist(SPCmds.INSERTMANIFESTDETAILS, manDetData)) { dManDetails[manDetData.RequestId.ToString() + manDetData.ManId.ToString()].Add(manDetData); } Logger.Info($"ManifestDetails Complete: {manDet.ToString()}"); break; case eCommand.ManifestDetailsComplete: Logger.Info($"ReceiveMessage - ManifestDetailsComplete:{cmd.ToString()}"); req = (manifestRequest)cmd; List <ManifestDetailsData> mdd = null; if (dManDetails.ContainsKey(NewGuid(req.requestId).ToString() + req.id.ToString())) { mdd = dManDetails[NewGuid(req.requestId).ToString() + req.id.ToString()]; dManDetails.Remove(NewGuid(req.requestId).ToString() + req.id.ToString()); } if (!dManDetails.ContainsKey(NewGuid(req.requestId).ToString()) && mdd != null && mdd.Count > 0) { drillDown.GetOrderMasterData(new manifestRequest() { valist = req.valist, requestId = req.requestId, date = req.date, id = req.id }); } dRetCall[NewGuid(cmd.requestId)](req.ToArray()); //drillDown.reportMDProgressChanged(100, cmd); break; case eCommand.OrdersUpload: Logger.Info($"ReceiveMessage - Orders reqId: {cmd.requestId}"); List <IMDMMessage> lstOrd = new List <IMDMMessage>(); OrderMasterData omd = new OrderMasterData(((orderMaster)cmd)); orderMaster om = new orderMaster(omd); //omd.Status = OrderStatus.Shipped; lock (dOrdLock) { if (!dOrdersMaster.ContainsKey(omd.RequestId.ToString() + omd.ManId.ToString())) { dOrdersMaster.Add(omd.RequestId.ToString() + omd.ManId.ToString(), new List <OrderMasterData>()); } } if (!dOrdersMaster[omd.RequestId.ToString() + omd.ManId.ToString()].Contains(omd)) { foreach (var omdit in UMDServer.Persist(SPCmds.INSERTORDER, omd)) { lock (dOrdLock) dOrdersMaster[omd.RequestId.ToString() + omd.ManId.ToString()].Add((OrderMasterData)omdit); } } break; case eCommand.OrdersLoad: Logger.Info($"ReceiveMessage - OrdersLoad reqId: {cmd.requestId}"); orderMaster ord = (orderMaster)cmd; OrderMasterData omdata = new OrderMasterData(ord); lock (dOrdLock) { if (!dOrdersMaster.ContainsKey(NewGuid(ord.requestId).ToString() + ord.ManId.ToString())) { dOrdersMaster.Add(NewGuid(ord.requestId).ToString() + ord.ManId.ToString(), new List <OrderMasterData>()); } } if (!dOrdersMaster[omdata.RequestId.ToString() + omdata.ManId.ToString()].Contains(omdata)) { foreach (var omdit in UMDServer.Persist(SPCmds.INSERTORDER, omdata)) { lock (dOrdLock) dOrdersMaster[omdata.RequestId.ToString() + omdata.ManId.ToString()].Add((OrderMasterData)omdit); } } break; case eCommand.OrdersLoadComplete: Logger.Info($"ReceiveMessage - OrdersLoadComplete:{cmd.ToString()}"); req = (manifestRequest)cmd; if (dOrdersMaster.ContainsKey(NewGuid(cmd.requestId).ToString() + req.id)) { List <OrderMasterData> lMOrd = dOrdersMaster[NewGuid(cmd.requestId).ToString() + req.id.ToString()].Distinct().ToList(); lMOrd.ForEach(x => Logger.Info($"ordldcmp{x.ORD_NO}")); drillDown.GetDrillDownData(req.valist, eCommand.OrderDetails, req.requestId, 1); drillDown.GetDrillDownData(req.valist, eCommand.OrderOptions, req.requestId); lock (dOrdLock) dOrdersMaster.Remove(NewGuid(cmd.requestId).ToString() + req.id); } else { Logger.Info($"No Orders for {cmd.ToString()}"); } // throw new Exception("OrdersLoadComplete - response not mapped in dOrderMaster. " + // "Request Id: {NewGuid(cmd.requestId).ToString()} , id: {req.id}. "); dRetCall[NewGuid(cmd.requestId)](req.ToArray()); break; case eCommand.OrderDetails: Logger.Info($"ReceiveMessage - OrderDetails:{cmd.ToString()}"); try { orderDetails od = (orderDetails)cmd; OrderDetailsData odd = new OrderDetailsData(od); lock (dOrdLock) { if (!dOrdersDetails.ContainsKey(odd.RequestId)) { dOrdersDetails.Add(odd.RequestId, new List <OrderDetailsData>()); } } foreach (var odit in UMDServer.Persist(SPCmds.INSERTORDERDETAILS, odd)) { Logger.Info($"INSERTORDERDETAILS Complete: {odit.ToString()}"); } //dRetCall[NewGuid(od.requestId)](cmd.ToArray()); } catch (Exception ex) { Logger.Error($"eCommand.OrderDetails {ex.Message}"); } break; case eCommand.OrderDetailsComplete: Logger.Info($"ReceiveMessage - OrderDetailsComplete:{cmd.ToString()}"); // Can we detrmine the completed transaction at this point from the cmd in order to clean the completed tx for dRetCall req = (manifestRequest)cmd; lock (dOrdLock) { if (dOrdersDetails.ContainsKey(NewGuid(cmd.requestId))) { // drillDown.GetOrderOptionsData(dOrdersDetails[NewGuid(cmd.requestId)].Distinct().ToList()); //drillDown.GetOrderOptionsData(ordersToRequestDetails[NewGuid(cmd.requestId)]); dOrdersDetails.Remove(NewGuid(cmd.requestId)); } } //dRetCall[NewGuid(cmd.requestId)](req.ToArray()); break; case eCommand.OrderOptions: Logger.Info($"ReceiveMessage - OrderOptions reqId:{cmd.ToString()}"); try { orderOptions oo = (orderOptions)cmd; OrderOptionsData ood = new OrderOptionsData(oo); foreach (var oodit in UMDServer.Persist(SPCmds.INSERTORDEROPTIONS, ood)) { Logger.Info($"INSERTORDEROPTIONS Complete: {oodit.ToString()}"); } //oo.command = eCommand.OrderOptionsComplete; //dRetCall[NewGuid(oo.requestId)](cmd.ToArray()); } catch (Exception ex) { Logger.Error($"eCommand.OrderOptions {ex.Message}"); } break; case eCommand.OrderOptionsComplete: Logger.Info($"ReceiveMessage - OrderOptionsComplete:{cmd.ToString()}"); // Can we detrmine the completed transaction at this point from the cmd in order to clean the completed tx for dRetCall req = (manifestRequest)cmd; dRetCall[NewGuid(cmd.requestId)](req.ToArray()); break; case eCommand.OrderUpdatesComplete: Logger.Info($"ReceiveMessage - OrderUpdatesComplete:{cmd.ToString()}"); req = (manifestRequest)cmd; dRetCall[NewGuid(cmd.requestId)](req.ToArray()); break; case eCommand.ManifestLoadComplete: Logger.Info($"ReceiveMessage - OrdersLoadComplete:{cmd.ToString()}"); Logger.Info($"ReceiveMessage - OrderDetailsComplete:{cmd.ToString()}"); req = (manifestRequest)cmd; dRetCall[NewGuid(cmd.requestId)](req.ToArray()); break; case eCommand.ScanFile: Logger.Info($"ReceiveMessage Cached Success - ScanFile:{cmd.ToString()}"); scanFile sf = (scanFile)cmd; ScanFileData sfd = new ScanFileData(sf); foreach (var scnfle in UMDServer.Persist(SPCmds.INSERTSCANFILE, sfd)) { Logger.Info($"INSERTSCNFLE Complete: {scnfle.ToString()}"); } //if(cmd.requestId==null) // dRetCall.FirstOrDefault().Value(sf.ToArray()); //else // dRetCall[NewGuid(cmd.requestId)](sf.ToArray()); break; default: Logger.Error("ReceiveMessage - ERROR Unknown command. Parse Error MDM-API"); break; } return(cmd); }
static Dictionary <short, Dictionary <byte, List <long> > > dTruckCodeToDealerNumbers = new Dictionary <short, Dictionary <byte, List <long> > >(); //TruckCode -> <Seq, List<Orders>> public static isaCommand CommandFactory(byte[] cmdBytes) { isaCommand cmd = new Command().FromArray(cmdBytes); switch (cmd.command) { case eCommand.Broadcast: //Broadcast cmdType = Broadcast.FromArray(cmdBytes); break; case eCommand.DeliveryComplete: //Broadcast cmdType = Broadcast.FromArray(cmdBytes); break; case eCommand.CheckManifest: case eCommand.CheckManifestComplete: manifestMaster mamr = new manifestMaster(); cmd = mamr.FromArray(cmdBytes); break; case eCommand.GenerateManifest: manifestRequest mr = new manifestRequest(); cmd = mr.FromArray(cmdBytes); if (cmd == null) { manifestMaster mmr = new manifestMaster(); cmd = mmr.FromArray(cmdBytes); } //Call ApplicationServer to return the data requested. //UMDManifest. break; case eCommand.OrdersLoad: //orders ords = new orders(); //cmd = ords.FromArray(cmdBytes); orderMaster orm = new orderMaster(); cmd = orm.FromArray(cmdBytes); break; case eCommand.Trucks: trucks trks = new trucks(); cmd = trks.FromArray(cmdBytes); break; case eCommand.Stops: stops stps = new stops(); cmd = stps.FromArray(cmdBytes); break; case eCommand.OrderDetails: orderDetails cmdType = new orderDetails(); cmd = cmdType.FromArray(cmdBytes); break; case eCommand.Manifest: manifestMaster mm = new manifestMaster(); cmd = mm.FromArray(cmdBytes); break; case eCommand.ManifestDetails: manifestDetails md = new manifestDetails(); cmd = md.FromArray(cmdBytes); break; case eCommand.OrdersUpload: orderMaster om = new orderMaster(); cmd = om.FromArray(cmdBytes); OrderMasterData omd = new OrderMasterData(om); if (!dStopOrders.ContainsKey(omd.DLR_NO)) { dStopOrders.Add(omd.DLR_NO, new List <long>() { omd.ORD_NO }); } break; case eCommand.ScanFile: scanFile sc = new scanFile(); cmd = sc.FromArray(cmdBytes); ScanFileData scd = new ScanFileData(sc); break; case eCommand.OrderOptions: orderOptions oo = new orderOptions(); cmd = oo.FromArray(cmdBytes); //OrderOptionsData ood = new OrderOptionsData(oo); break; case eCommand.AccountReceivable: accountReceivable ar = new accountReceivable(); cmd = ar.FromArray(cmdBytes); // AccountsReceivableData acr = new AccountsReceivableData((accountReceivable)cmd); break; case eCommand.ManifestLoadComplete: case eCommand.TrucksLoadComplete: case eCommand.StopsLoadComplete: case eCommand.OrdersLoadComplete: case eCommand.OrderUpdatesComplete: case eCommand.OrderDetailsComplete: case eCommand.OrderOptionsComplete: case eCommand.ManifestDetailsComplete: case eCommand.UploadManifestComplete: case eCommand.LoadFilesComplete: Logger.Info($"CommandFactory: {Enum.GetName(typeof(eCommand), cmd.command) + Environment.NewLine}"); manifestRequest req = new manifestRequest(); Logger.Info($"CommandFactory: {req.ToString()}"); cmd = req.FromArray(cmdBytes); break; case eCommand.Ping: //Broadcast cmdType = Broadcast.FromArray(cmdBytes); //cmd = SendPong(); break; case eCommand.Pong: //Broadcast cmdType = Broadcast.FromArray(cmdBytes); //Broadcast cmdType = Broadcast.FromArray(cmdBytes); break; case eCommand.RunQuery: //Broadcast cmdType = Broadcast.FromArray(cmdBytes); break; default: break; } return(cmd); }
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; } }