コード例 #1
0
        private void PrecalculRute()
        {
            int    NrCamioaneSD, newRTnumber;
            double volSD, volRout;
            string tipCamSD;
            bool   start = true;

            if (StadiuCalcul >= stadiu.S2_Precalcul)
            {
                if (MessageBox.Show("Exista rute precalculate. Doriti sa continuati?", "Precalcul rute", MessageBoxButtons.YesNo, MessageBoxIcon.Question) == DialogResult.No)
                {
                    start = false;
                }
            }
            if (start)
            {
                WriteLogLine(" -- START PRECALCUL RUTE --");
                Rute.Reset();
                Savings.Reset();
                pr.Reset();
                for (int i = 0; i <= Clienti.Lista.Count - 1; i++)
                {
                    Clienti.ResetSD(Clienti.Lista[i].ClCode);
                }

                for (int i = 0; i <= Clienti.Lista.Count - 1; i++)
                {
                    NrCamioaneSD = 0;
                    volSD        = pr.VolumPosibilSD(Clienti.Lista[i].VolumTotal);
                    while (volSD > 0)
                    {
                        NrCamioaneSD++;
                        volRout     = Clienti.Lista[i].VolumPentruRute - volSD;
                        newRTnumber = Rute.AdaugaRutaSD(Clienti.Lista[i].ClCode, volSD);
                        tipCamSD    = pr.TipCamion(volSD);
                        Rute.ModificaTipCamion(newRTnumber, tipCamSD);
                        pr.InregistreazaCamion("", tipCamSD);
                        Clienti.ModificaVolumeSD(Clienti.Lista[i].ClCode, volSD, volRout, NrCamioaneSD);
                        volSD = pr.VolumPosibilSD(Clienti.Lista[i].VolumPentruRute);
                        WriteLogLine(" Add ruta SD - " + newRTnumber + " - " + Clienti.Lista[i].ClCode);
                    }
                }
                WriteLogLine(" -- END PRECALCUL RUTE --");
                StadiuCalcul = stadiu.S2_Precalcul;
            }
        }
コード例 #2
0
        private void PostcalculRute()
        {
            //alocare camionete la volume mici cu o singura destinatie

            //redefinire coloana Pozitie in Ruta
            for (int i = 0; i <= Clienti.Lista.Count - 1; i++)
            {
                if ((Clienti.Lista[i].VolumTotal == Clienti.Lista[i].VolumSingleDest))
                {
                    Clienti.Lista[i].PozitiaInRuta = Clienti.Lista[i].NrRuteSD.ToString() + "SD";
                }
                else if ((Clienti.Lista[i].VolumSingleDest > 0) && (Clienti.Lista[i].ExclusDinRute == true))
                {
                    Clienti.Lista[i].PozitiaInRuta = Clienti.Lista[i].NrRuteSD.ToString() + "SD";
                }
                else if (Clienti.Lista[i].VolumSingleDest > 0)
                {
                    Clienti.Lista[i].PozitiaInRuta = Clienti.Lista[i].NrRuteSD.ToString() + "SD + " + Clienti.Lista[i].PozitiaInRuta;
                }
            }
            StadiuCalcul = stadiu.S4_Postcalcul;
        }
コード例 #3
0
        public frmMain()
        {
            InitializeComponent();
            StadiuCalcul = stadiu.S0_Null;
            txVolCR.DataBindings.Add("Text", pr, "CR.Volum");
            txVolMega.DataBindings.Add("Text", pr, "Mega.Volum");
            txVolNormal.DataBindings.Add("Text", pr, "Normal.Volum");
            txVolCamionetaMare.DataBindings.Add("Text", pr, "CamiMare.Volum");
            txVolCamionetaMica.DataBindings.Add("Text", pr, "CamiMica.Volum");

            txOprCR.DataBindings.Add("Text", pr, "CR.Opriri");
            txOprMega.DataBindings.Add("Text", pr, "Mega.Opriri");
            txOprNormal.DataBindings.Add("Text", pr, "Normal.Opriri");
            txOprCamionetaMare.DataBindings.Add("Text", pr, "CamiMare.Opriri");
            txOprCamionetaMica.DataBindings.Add("Text", pr, "CamiMica.Opriri");

            txMjCR.DataBindings.Add("Text", pr, "CR.Marja");
            txMjMega.DataBindings.Add("Text", pr, "Mega.Marja");
            txMjNormal.DataBindings.Add("Text", pr, "Normal.Marja");
            txMjCamionetaMare.DataBindings.Add("Text", pr, "CamiMare.Marja");
            txMjCamionetaMica.DataBindings.Add("Text", pr, "CamiMica.Marja");

            txMaxCamCR.DataBindings.Add("Text", pr, "CR.LimitaCamioane");
            txMaxCamMega.DataBindings.Add("Text", pr, "Mega.LimitaCamioane");
            txMaxCamNormal.DataBindings.Add("Text", pr, "Normal.LimitaCamioane");
            txMaxCamCamionetaMare.DataBindings.Add("Text", pr, "CamiMare.LimitaCamioane");
            txMaxCamCamionetaMica.DataBindings.Add("Text", pr, "CamiMica.LimitaCamioane");

            txCostPerKm.DataBindings.Add("Text", pr, "CostPerKm");
            txCostPerMc.DataBindings.Add("Text", pr, "CostPerMc");
            txCostPerDescarcare.DataBindings.Add("Text", pr, "CostPerDescarcare");
            txEroareDist.DataBindings.Add("Text", pr, "MarjaEroareDistanta");
            ckVolMaxUltimStop.DataBindings.Add("Checked", pr, "VolMaximLaUltimStop");
            txCentruResponsabilitate.DataBindings.Add("Text", pr, "CentruResponsabilitate");

            WriteLogLine("START ROUTE BUILDER");
        }
コード例 #4
0
        private void LoadClientiFile()
        {
            bool toLoad = true;

            if (StadiuCalcul >= stadiu.S1_Clienti)
            {
                if (MessageBox.Show("Exista clienti incarcati. Doriti sa continuati?", "incarcare clienti", MessageBoxButtons.YesNo, MessageBoxIcon.Question) == DialogResult.No)
                {
                    toLoad = false;
                }
            }
            if (toLoad)
            {
                //DistanteOR.LoadFile();
                OpenFileDialog dlg = new OpenFileDialog();
                dlg.FileName   = "Document";
                dlg.DefaultExt = ".txt";
                dlg.Filter     = "Fisiere CSV |*.csv|Fisiere text |*.txt|Toate fisierele |*.*";
                DialogResult drs = dlg.ShowDialog();
                if (drs == DialogResult.OK)
                {
                    fileName = dlg.FileName;
                    if (File.Exists(fileName))
                    {
                        try
                        {
                            Rute.Reset();
                            Savings.Reset();
                            Clienti.Reset();
                            pr.Reset();
                            using (StreamReader sr = new StreamReader(fileName))
                            {
                                sr.ReadLine(); sr.ReadLine();
                                while (!sr.EndOfStream)
                                {
                                    var    line = sr.ReadLine();
                                    var    lineWords = line.Split(';');
                                    double dLon, dLat, dVolPGS, dVolGRC, dVolART, dVolTOT, dDist;
                                    double.TryParse(lineWords[4], out dLat);
                                    double.TryParse(lineWords[5], out dLon);
                                    double.TryParse(lineWords[6], out dVolPGS);
                                    double.TryParse(lineWords[7], out dVolGRC);
                                    double.TryParse(lineWords[8], out dVolART);
                                    double.TryParse(lineWords[9], out dVolTOT);
                                    double.TryParse(lineWords[10], out dDist);
                                    Clienti.Add(new client(lineWords[0], lineWords[1], lineWords[2], lineWords[3], dLat, dLon,
                                                           dVolPGS, dVolGRC, dVolART, dVolTOT, dDist, pr.MarjaEroareDistanta));
                                }
                            }
                            StadiuCalcul = stadiu.S1_Clienti;
                        }
                        catch (Exception ex)
                        {
                            MessageBox.Show("Eroare in fisierul de date. Verificati formatul delimitatorului precum si continutul fisierului." +
                                            Environment.NewLine +
                                            Environment.NewLine + "<" + ex.Message + ">", "Fisier", MessageBoxButtons.OK, MessageBoxIcon.Exclamation);
                        }
                    }
                    else
                    {
                        MessageBox.Show("Fisierul nu exista.");
                    }
                }
            }
        }
コード例 #5
0
        private void CalculRute()
        {
            double volDePrins = 0, volto, volfr;
            string tipPosibilCamion = "";
            int    numarStopuri;

            if (StadiuCalcul >= stadiu.S3_Calcul)
            {
                MessageBox.Show("Exista rute calculate. Nu puteti continua!", "Calcul rute", MessageBoxButtons.OK, MessageBoxIcon.Stop);
            }
            else
            {
                WriteLogLine(" -- START CALCUL RUTE --");
                CalculSavings();
                for (int i = 0; i <= Savings.Lista.Count - 1; i++)
                {
                    if (Savings.Lista[i].SavingValue > 0)
                    {
                        client from = Clienti.Client(Savings.Lista[i].FromClient);
                        client to   = Clienti.Client(Savings.Lista[i].ToClient);
                        if ((from.PozitiaInRuta == "nealocat") && (to.PozitiaInRuta == "nealocat"))
                        #region FROM si TO nu sunt in Rute -> Ruta noua
                        {
                            numarStopuri     = 2;
                            volDePrins       = from.VolumPentruRute - from.VolumInRute + to.VolumPentruRute - to.VolumInRute;
                            tipPosibilCamion = pr.CamionPosibilRuta(volDePrins, numarStopuri);
                            if (tipPosibilCamion != "")
                            {
                                volto = to.VolumPentruRute - to.VolumInRute;
                                volfr = from.VolumPentruRute - from.VolumInRute;
                                Rute.AdaugaRutaRT(from.ClCode, to.ClCode, volfr, volto, Savings.Lista[i].Distanta);
                                Rute.ModificaTipCamion(Rute.RutaCuStartCode(from.ClCode, "RT").NumarRuta, tipPosibilCamion);
                                pr.InregistreazaCamion("", tipPosibilCamion);
                                Clienti.ModificaDupaAdaugareRT(from.ClCode, Rute.RutaCuStartCode(from.ClCode, "RT").NumarRuta, "First", volfr);
                                Clienti.ModificaDupaAdaugareRT(to.ClCode, Rute.RutaCuStartCode(from.ClCode, "RT").NumarRuta, "Last", volto);
                                Savings.Lista[i].Utilizare = "RT noua";
                                WriteLogLine("Add ruta RT - " + Rute.Lista.Count.ToString() + ": " + from.ClCode + " - " + to.ClCode);
                            }
                        }
                        #endregion
                        else if ((from.PozitiaInRuta == "Last") && (to.PozitiaInRuta == "nealocat"))
                        #region FROM este ultimul in Ruta, TO nu este inRute -> adauga To la sfarsit
                        {
                            rutaObject rtPosibila = Rute.RutaCuEndCode(from.ClCode, "RT");
                            numarStopuri     = rtPosibila.NumarStopuri + 1;
                            volDePrins       = rtPosibila.Volum + to.VolumPentruRute - to.VolumInRute;
                            tipPosibilCamion = pr.CamionPosibilRuta(volDePrins, numarStopuri);
                            if (tipPosibilCamion != "")
                            {
                                volto = to.VolumPentruRute - to.VolumInRute;
                                Rute.AddNewEnd(rtPosibila.NumarRuta, to.ClCode, volto, Savings.Lista[i].Distanta);
                                if (rtPosibila.TipCamion != tipPosibilCamion)
                                {
                                    pr.InregistreazaCamion(rtPosibila.TipCamion, tipPosibilCamion);
                                    Rute.ModificaTipCamion(rtPosibila.NumarRuta, tipPosibilCamion);
                                }
                                Clienti.ModificaDupaAdaugareRT(from.ClCode, from.NumarRuta, "Mid", 0);
                                Clienti.ModificaDupaAdaugareRT(to.ClCode, from.NumarRuta, "Last", volto);
                                WriteLogLine("Add new END la ruta - " + from.NumarRuta + ": " + from.ClCode + " - " + to.ClCode);
                                Savings.Lista[i].Utilizare = "RT new END";
                            }
                        }
                        #endregion
                        else if ((from.PozitiaInRuta == "nealocat") && (to.PozitiaInRuta == "First"))
                        #region TO este primul in Ruta, FROM nu este inRute -> adauga FROM la inceput
                        {
                            rutaObject rtPosibila = Rute.RutaCuStartCode(to.ClCode, "RT");
                            numarStopuri     = rtPosibila.NumarStopuri + 1;
                            volDePrins       = rtPosibila.Volum + from.VolumPentruRute - from.VolumInRute;
                            tipPosibilCamion = pr.CamionPosibilRuta(volDePrins, numarStopuri);
                            if (tipPosibilCamion != "")
                            {
                                volfr = from.VolumPentruRute - from.VolumInRute;
                                Rute.AddNewStart(rtPosibila.NumarRuta, from.ClCode, volfr, Savings.Lista[i].Distanta);
                                if (rtPosibila.TipCamion != tipPosibilCamion)
                                {
                                    pr.InregistreazaCamion(rtPosibila.TipCamion, tipPosibilCamion);
                                    Rute.ModificaTipCamion(rtPosibila.NumarRuta, tipPosibilCamion);
                                }
                                Clienti.ModificaDupaAdaugareRT(from.ClCode, to.NumarRuta, "First", volfr);
                                Clienti.ModificaDupaAdaugareRT(to.ClCode, to.NumarRuta, "Mid", 0);
                                WriteLogLine("Add new START la ruta - " + to.NumarRuta + ": " + from.ClCode + " - " + to.ClCode);
                                Savings.Lista[i].Utilizare = "RT new START";
                            }
                        }
                        #endregion
                        else if ((from.PozitiaInRuta == "Last") && (to.PozitiaInRuta == "First"))
                        #region FROM este ultimul intr-o ruta, TO este primul in alta ruta -> link rute
                        {
                            rutaObject rtPosibila1 = Rute.RutaCuEndCode(from.ClCode, "RT");
                            rutaObject rtPosibila2 = Rute.RutaCuStartCode(to.ClCode, "RT");
                            if ((rtPosibila1.TipRuta != "SD") && (rtPosibila2.TipRuta != "SD"))
                            {
                                numarStopuri     = rtPosibila1.NumarStopuri + rtPosibila2.NumarStopuri;
                                volDePrins       = rtPosibila1.Volum + rtPosibila2.Volum;
                                tipPosibilCamion = pr.CamionPosibilRuta(volDePrins, numarStopuri);
                                if ((tipPosibilCamion != "") && (from.NumarRuta != to.NumarRuta))
                                {
                                    Rute.LinkRute(from.NumarRuta, to.NumarRuta, Savings.Lista[i].Distanta);
                                    Clienti.ModificaDupaAdaugareRT(from.ClCode, from.NumarRuta, "Mid", 0);
                                    Clienti.ModificaDupaAdaugareRT(to.ClCode, from.NumarRuta, "Mid", 0);
                                    foreach (stopRuta sr in rtPosibila2.ListaStopuri)
                                    {
                                        Clienti.ModificaDupaAdaugareRT(sr.Stop, from.NumarRuta, "", 0);
                                    }
                                    if (rtPosibila1.TipCamion != tipPosibilCamion)
                                    {
                                        pr.InregistreazaCamion(rtPosibila1.TipCamion, tipPosibilCamion);
                                        Rute.ModificaTipCamion(rtPosibila1.NumarRuta, tipPosibilCamion);
                                    }
                                    pr.InregistreazaCamion(rtPosibila2.TipCamion, "");
                                    WriteLogLine("LINK Rute - " + rtPosibila1.NumarRuta + " <- " + rtPosibila2.NumarRuta + ": " + from.ClCode + " - " + to.ClCode);
                                    Savings.Lista[i].Utilizare = "RT LINK";
                                }
                            }
                        }
                        #endregion
                    }
                }
                WriteLogLine(" -- Adauga distante depozit --");
                foreach (rutaObject ro in Rute.Lista)
                {
                    Rute.AddSecventaDepozit(ro.NumarRuta, Clienti.Client(ro.FirstStop).DistantaOR);
                }
                PostcalculRute();
                WriteLogLine(" -- END CALCUL RUTE --");
                StadiuCalcul = stadiu.S4_Postcalcul;
            }
        }