Ejemplo n.º 1
0
 void Clear(Guid key)
 {
     loadManifestRequestComplete = "";
     LoadManifestIdComplete.Clear();
     if (manifestMasterThread != null)
     {
         manifestMasterThread.Reset(key);
     }
     ROUTECOUNT = 0;
     manifestMasterData.Clear();
 }
Ejemplo n.º 2
0
 void Clear()
 {
     loadManifestRequestComplete = "";
     LoadManifestIdComplete.Clear();
     if (manifestMasterThread != null)
     {
         dRequests.Keys.ToList().ForEach(a => manifestMasterThread.Reset(a));
     }
     dRequests.Clear();
     ROUTECOUNT = 0;
     manifestMasterData.Clear();
     oocnt  = odcnt = ocnt = 0;
     binitO = binitOO = binitOD = false;
 }
Ejemplo n.º 3
0
        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;
            }
        }