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);
        }
Example #2
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;
            }
        }
        public void HandleClientCmd(byte[] bytes_cmd, Func <byte[], Task> cbsend)
        {
            isaCommand cmd = new Command().FromArray(bytes_cmd);

            switch (cmd.command)
            {
            case eCommand.Ping:
                Logger.Debug("HandleClientCmd -  Received Ping / Replying Pong..");
                cbsend(new Command()
                {
                    command = eCommand.Pong
                }.ToArray());
                break;

            case eCommand.Pong:
                Logger.Debug("HandleClientCmd -  Received Pong");
                break;

            case eCommand.GenerateManifest:
                Logger.Info($"HandleClientCmd - Generate Manifest:{cmd.ToString()}");

                manifestMaster mM = (manifestMaster) new manifestMaster().FromArray(bytes_cmd);
                Logger.Info($"HandleClientCmd Generate Manifest from Winsys and SqlServer:{mM.ToString()}");
                if (mM.LINK != 0)
                {
                    ManifestMasterData mmd1 = (ManifestMasterData)UMDServer.QueryData(cbsend, mM);
                    Logger.Info($"API Manager GenerateManifest QueryData Complete. {mmd1.ToString()}");
                }
                else
                {
                    WinSysSM.SendMessage(cmd);
                }

                break;

            case eCommand.CheckManifest:
                Logger.Info($"HandleClientCmd - CheckManifest: {cmd.ToString()}");
                manifestMaster mMst = (manifestMaster) new manifestMaster().FromArray(bytes_cmd);
                Logger.Info($"HandleClientCmd Check Manifest in ManagerAPI/SqlServer: {mMst.ToString()}");
                ManifestMasterData mamd = (ManifestMasterData)UMDServer.QueryData(cbsend, mMst);
                Logger.Info($"API Manager Check Manifest. {mamd.ToString()}");

                break;


            case eCommand.Manifest:
                Logger.Info($"HandleClientCmd - Manifest: {cmd.ToString()}");
                cbsend(cmd.ToArray());

                break;

            case eCommand.OrdersUpload:
                Logger.Info($"HandleClientCmd - Orders: {cmd.ToString()}");
                orderMaster            om      = (orderMaster) new orderMaster().FromArray(bytes_cmd);
                List <OrderMasterData> ordList = new List <OrderMasterData>();
                Logger.Info($"Persist INSERTORDER {om.ToString()}");
//                    om.Status = OrderStatus.Shipped;
                foreach (OrderMasterData omd in UMDServer.Persist(SPCmds.INSERTORDER, new OrderMasterData(om)))
                {
                    ordList.Add(omd);
                    Logger.Info($"Orders - drillDown.GetOrderDetailsData: {omd.ToString()}");
                    omd.Command = eCommand.OrdersLoadComplete;
                }

                //foreach (var ord in ordList)
                //{
                //    drillDown.GetOrderDetailsData(ord);
                //    drillDown.GetOrderOptionsData(ord);
                //}
                drillDown.GetOrderDetailsData(ordList);
                drillDown.GetOrderOptionsData(ordList);

                Logger.Info($"INSERTORDER Complete. OrdersLoadComplete: {om.ToString()}");
                om.command = eCommand.ManifestDetailsComplete;
                cbsend(om.ToArray());

                break;

            case eCommand.CompleteOrder:
                Logger.Info($"HandleClientCmd - Close Order: {cmd.ToString()}");

                manifestRequest mreq = (manifestRequest) new manifestRequest().FromArray(bytes_cmd);

                Logger.Info($"HandleClientCmd - CompleteOrder:  {mreq.ToString()}");

                orderMaster cs = (orderMaster) new orderMaster().FromArray(mreq.bData);

                Logger.Info($"Persist COMPLETEORDER {cs.ToString()}");

                var no = new OrderMasterData(cs);
                foreach (OrderMasterData omd in UMDServer.Persist(SPCmds.COMPLETEORDER, no))
                {
                    Logger.Info($"Persisted COMPLETEORDER {omd.ToString()}");
                    cbsend(new orderMaster(omd).ToArray());
                }

                break;

            case eCommand.CompleteStop:

                Logger.Info($"HandleClientCmd - Close Stop for Orders: {cmd.ToString()}");

                manifestRequest mreqs = (manifestRequest) new manifestRequest().FromArray(bytes_cmd);

                Logger.Info($"HandleClientCmd - CompleteStop:  {mreqs.ToString()}");

                StopData sd = new StopData();
                sd.POD        = mreqs.bData;
                sd.ManifestId = mreqs.id;
                sd.DisplaySeq = (int)mreqs.DATA;
                sd.Orders     = new List <OrderMasterData>();
                //temp - uncomment!
                // mreqs.valist.ForEach(v => sd.Orders.Add(new OrderMasterData() { DSP_SEQ=sd.DisplaySeq, ManifestId=sd.ManifestId, ORD_NO = v }));

                Logger.Info($"Persist COMPLETESTOP {sd.ToString()}");

                foreach (StopData omd in UMDServer.Persist(SPCmds.COMPLETESTOP, sd))
                {
                    Logger.Info($"Persisted COMPLETESTOP {sd.ToString()}");
                    cbsend(new stops(sd).ToArray());
                }

                break;

            case eCommand.OrderOptions:

                //throw new Exception("This should be handled by the Receive Message handler.");
                Logger.Info($"HandleClientCmd - OrderOptions:{cmd.ToString()}");
                manifestRequest mreqoo = (manifestRequest) new manifestRequest().FromArray(bytes_cmd);

                OrderOptionsData ood = (OrderOptionsData)UMDServer.QueryData(cbsend, mreqoo);
                Logger.Info($"API Manager QueryData OrderOptionsData. {ood.ToString()}");

                break;

            case eCommand.OrderDetails:

                Logger.Info($"HandleClientCmd - OrderDetails:{cmd.ToString()}");
                manifestRequest mreqod = (manifestRequest) new manifestRequest().FromArray(bytes_cmd);

                OrderDetailsData odd = (OrderDetailsData)UMDServer.QueryData(cbsend, mreqod);
                Logger.Info($"API Manager OrderDetailsData QueryData. {odd.ToString()}");
                break;

            case eCommand.UploadManifest:

                Logger.Info($"HandleClientCmd - UploadManifest:{cmd.ToString()}");

                mreq = (manifestRequest) new manifestRequest().FromArray(bytes_cmd);

                Logger.Info($"HandleClientCmd - UploadManifest:  {mreq.ToString()}");

                manifestMaster mm = (manifestMaster) new manifestMaster().FromArray(mreq.bData);

                if (!dRetCall.ContainsKey(NewGuid(mm.requestId)))
                {
                    dRetCall.Add(NewGuid(mm.requestId), cbsend);
                }

                Logger.Info($"UploadManifest cb dRetCall:  {mm.ToString()}");

                try
                {
                    foreach (ManifestMasterData mmdit in UMDServer.Persist(SPCmds.INSERTMANIFEST, new ManifestMasterData(mm, mm.id)))
                    {
                        Logger.Info($"HandleClientCmd - UploadManifest Persisted:{mmdit.ToString()}");
                        Logger.Info($"UploadManifest - Get ManifestDetails: {mmdit.ToString()}");

                        if (!dManDetails.ContainsKey(mmdit.RequestId.ToString() + mmdit.ManifestId.ToString()))
                        {
                            dManDetails.Add(mmdit.RequestId.ToString() + mmdit.ManifestId.ToString(), new List <ManifestDetailsData>());
                        }

                        drillDown.GetManifestDetails(mmdit);
                    }
                    mm.command = eCommand.UploadManifestComplete;
                    Logger.Info($"UploadManifest - ManifestLoadComplete: {mm.ToString()}");
                    cbsend(mm.ToArray());
                }
                catch (Exception e)
                {
                    Logger.Debug("HandleClientCmd - Error exception = " + e.Message);
                    dRetCall.Remove(NewGuid(mm.requestId));
                }
                break;

            case eCommand.Trucks:
                isaCommand req = new manifestRequest().FromArray(bytes_cmd);
                Logger.Info($"HandleClientCmd - Trucks: {req.ToString()}");
                TruckData td = (TruckData)UMDServer.QueryData(cbsend, req);
                Logger.Info($"HandleClientCmd - Trucks:  {td.ToString()}");
                break;

            case eCommand.Drivers:
                req = new manifestRequest().FromArray(bytes_cmd);
                Logger.Info($"HandleClientCmd - Drivers: {req.ToString()}");
                DriverData dd = (DriverData)UMDServer.QueryData(cbsend, req);
                Logger.Info($"HandleClientCmd - Drivers:  {dd.ToString()}");
                break;

            case eCommand.Stops:
                req = new manifestRequest().FromArray(bytes_cmd);
                Logger.Info($"HandleClientCmd Stops:  {req.ToString()}");
                StopData sdt = (StopData)UMDServer.QueryData(cbsend, req);
                Logger.Info($"Stops QueryData:  {sdt.ToString()}");
                break;

            case eCommand.OrdersLoad:
                req = new manifestRequest().FromArray(bytes_cmd);
                Logger.Info($"HandleClientCmd - OrdersLoad (Start QueryData): {req.ToString()}");
                OrderData od = (OrderData)UMDServer.QueryData(cbsend, req);
                Logger.Info($"OrdersLoad QueryData: {od.ToString()}");
                break;

            case eCommand.AccountReceivable:
                req = new manifestRequest().FromArray(bytes_cmd);
                manifestRequest        mr    = (manifestRequest)req;
                accountReceivable      arecv = (accountReceivable) new accountReceivable().FromArray(mr.bData);                    Logger.Info($"HandleClientCmd - AccountRecievable");
                AccountsReceivableData ard   = (AccountsReceivableData)
                                               UMDServer.QueryData(cbsend, arecv);
                Logger.Info($"AccountsReceivables Complete.");
                break;

            default:
                Logger.Error("HandleClientCmd - ERROR Unknown command.  Parse Error MDM-API");
                break;
            }
        }
Example #4
0
        public IEnumerable <IMDMMessage> InsertData(SPCmds SP, IMDMMessage dat)
        {
            if (dat != null)
            {
                switch (SP)
                {
                case SPCmds.INSERTMANIFEST:
                    ManifestMasterData mst = (ManifestMasterData)dat;
                    using (cnn = NewConnection())
                    {
                        using (var adapter = new SqlDataAdapter())
                        {
                            long manid;
                            using (var command = new SqlCommand(SP.ToString(), cnn))
                            {
                                command.CommandType = CommandType.StoredProcedure;
                                command.Parameters.AddWithValue("@DriverId", SqlDbType.Int).Value    = 9;   //use mst.UserId query the Driver table
                                command.Parameters.AddWithValue("@TRK_CDE", SqlDbType.VarChar).Value = mst.TRK_CDE;
                                command.Parameters.AddWithValue("@SHP_DTE", SqlDbType.Date).Value    = mst.SHIP_DTE.Date;
                                command.Parameters.AddWithValue("@DESC$", SqlDbType.VarChar).Value   = mst.Desc;
                                command.Parameters.AddWithValue("@LINK", SqlDbType.BigInt).Value     = mst.LINK;
                                command.Parameters.AddWithValue("@NOTES", SqlDbType.VarChar).Value   = mst.NOTES;
                                var retVal = command.Parameters.Add("@ManifestId", SqlDbType.BigInt);
                                retVal.Direction = ParameterDirection.Output;

                                adapter.InsertCommand = command;
                                adapter.InsertCommand.ExecuteNonQuery();
                                manid          = (long)retVal.Value;
                                mst.ManifestId = manid;
                                yield return(mst);
                            }
                        }
                    }
                    break;

                case SPCmds.INSERTMANIFESTDETAILS:
                    ManifestDetailsData mdd = (ManifestDetailsData)dat;
                    //SQL = @"";
                    using (cnn = NewConnection())
                    {
                        using (var adapter = new SqlDataAdapter())
                        {
                            using (var command = new SqlCommand(SP.ToString(), cnn))
                            {
                                command.CommandType = System.Data.CommandType.StoredProcedure;
                                command.Parameters.AddWithValue("@ManifestId", SqlDbType.Int).Value = mdd.ManId;
                                command.Parameters.AddWithValue("@DSP_SEQ", SqlDbType.Int).Value    = mdd.DSP_SEQ;
                                command.Parameters.AddWithValue("@DLR_NO", SqlDbType.BigInt).Value  = mdd.DLR_NO;

                                adapter.InsertCommand = command;
                                adapter.InsertCommand.ExecuteNonQuery();

                                yield return(mdd);
                            }
                        }
                    }
                    break;

                case SPCmds.INSERTORDER:
                    OrderMasterData omd = (OrderMasterData)dat;
                    //SQL = @"";
                    using (cnn = NewConnection())
                    {
                        using (var adapter = new SqlDataAdapter())
                        {
                            using (var command = new SqlCommand(SP.ToString(), cnn))
                            {
                                command.CommandType = System.Data.CommandType.StoredProcedure;

                                command.Parameters.AddWithValue("@ORD_NO", SqlDbType.BigInt).Value     = omd.ORD_NO;
                                command.Parameters.AddWithValue("@DLR_NO", SqlDbType.BigInt).Value     = omd.DLR_NO;
                                command.Parameters.AddWithValue("@SHP_DTE", SqlDbType.Date).Value      = omd.SHP_DTE.Date;
                                command.Parameters.AddWithValue("@DLR_NME", SqlDbType.VarChar).Value   = omd.DLR_NME;
                                command.Parameters.AddWithValue("@SHP_NME", SqlDbType.VarChar).Value   = omd.SHP_NME;
                                command.Parameters.AddWithValue("@SHP_ADDR", SqlDbType.VarChar).Value  = omd.SHP_ADDR;
                                command.Parameters.AddWithValue("@SHP_ADDR2", SqlDbType.VarChar).Value = omd.SHP_ADDR2;
                                command.Parameters.AddWithValue("@SHP_TEL", SqlDbType.VarChar).Value   = omd.SHP_TEL;
                                command.Parameters.AddWithValue("@SHP_ZIP", SqlDbType.VarChar).Value   = omd.SHP_ZIP;
                                command.Parameters.AddWithValue("@CUS_NME", SqlDbType.VarChar).Value   = omd.CUS_NME;
                                command.Parameters.AddWithValue("@RTE_CDE", SqlDbType.VarChar).Value   = omd.RTE_CDE;
                                command.Parameters.AddWithValue("@SHP_QTY", SqlDbType.Int).Value       = omd.SHP_QTY;
                                command.Parameters.AddWithValue("@MAN_ID", SqlDbType.Int).Value        = omd.ManId;
                                var retVal = command.Parameters.Add("@CustomerIdOut", SqlDbType.Int);
                                retVal.Direction = ParameterDirection.Output;

                                adapter.InsertCommand = command;
                                adapter.InsertCommand.ExecuteNonQuery();

                                yield return(omd);
                            }
                        }
                    }
                    break;

                case SPCmds.INSERTORDERDETAILS:
                    OrderDetailsData odd = (OrderDetailsData)dat;
                    //SQL = @"";
                    using (cnn = NewConnection())
                    {
                        using (var adapter = new SqlDataAdapter())
                        {
                            using (var command = new SqlCommand(SP.ToString(), cnn))
                            {
                                command.CommandType = System.Data.CommandType.StoredProcedure;
                                command.Parameters.AddWithValue("@ORD_NO", SqlDbType.BigInt).Value = odd.ORD_NO;
                                command.Parameters.AddWithValue("@MDL_NO", SqlDbType.Int).Value    = odd.MDL_NO;
                                command.Parameters.AddWithValue("@DESC", SqlDbType.VarChar).Value  = odd.DESC;

                                command.Parameters.AddWithValue("@CLR", SqlDbType.Int).Value        = odd.CLR;
                                command.Parameters.AddWithValue("@WIDTH", SqlDbType.BigInt).Value   = odd.WIDTH;
                                command.Parameters.AddWithValue("@HEIGHT", SqlDbType.BigInt).Value  = odd.HEIGHT;
                                command.Parameters.AddWithValue("@MDL_CNT", SqlDbType.Int).Value    = odd.MDL_CNT;
                                command.Parameters.AddWithValue("@WIN_CNT", SqlDbType.Int).Value    = odd.WIN_CNT;
                                command.Parameters.AddWithValue("@Status", SqlDbType.VarChar).Value = "LOADED";
                                adapter.InsertCommand = command;
                                adapter.InsertCommand.ExecuteNonQuery();
                                yield return(odd);
                            }
                        }
                    }
                    break;

                case SPCmds.INSERTORDEROPTIONS:
                    OrderOptionsData oop = (OrderOptionsData)dat;
                    //SQL = @"";
                    using (cnn = NewConnection())
                    {
                        using (var adapter = new SqlDataAdapter())
                        {
                            using (var command = new SqlCommand(SP.ToString(), cnn))
                            {
                                command.CommandType = System.Data.CommandType.StoredProcedure;
                                command.Parameters.AddWithValue("@ORD_NO", SqlDbType.BigInt).Value = oop.ORD_NO;
                                command.Parameters.AddWithValue("@MDL_NO", SqlDbType.Int).Value    = oop.MDL_NO;
                                command.Parameters.AddWithValue("@DESC", SqlDbType.VarChar).Value  = oop.DESC;

                                command.Parameters.AddWithValue("@CLR", SqlDbType.Int).Value     = oop.CLR;
                                command.Parameters.AddWithValue("@MDL_CNT", SqlDbType.Int).Value = oop.MDL_CNT;
                                // command.Parameters.AddWithValue("@WIN_CNT", SqlDbType.Int).Value = oop.WIN_CNT;
                                command.Parameters.AddWithValue("@Status", SqlDbType.VarChar).Value = "LOADED";
                                adapter.InsertCommand = command;
                                adapter.InsertCommand.ExecuteNonQuery();

                                yield return(oop);
                            }
                        }
                    }
                    break;

                default:
                    throw new Exception("UM SQL Server Stored Procedure Not Found.");
                }
            }
            yield break;
        }