Example #1
0
        public static void DatenAusDatenbankLaden(OptionenArbeitszeit Optionen)
        {
            string msg;

            try
            {
                using (var Db = new JgModelContainer())
                {
                    if (Optionen.VerbindungsString != "")
                    {
                        Db.Database.Connection.ConnectionString = Optionen.VerbindungsString;
                    }

                    msg = $"Datenbank öffnen -> {Db.Database.Connection.ConnectionString}";
                    Logger.Write(msg, "Service", 0, 0, TraceEventType.Information);

                    Optionen.ListeTerminals = Db.tabArbeitszeitTerminalSet.Where(w => !w.DatenAbgleich.Geloescht).Include(i => i.eStandort).ToList();
                    msg = $"{Optionen.ListeTerminals.Count} Terminals aus DB eingelesen";
                    Logger.Write(msg, "Service", 0, 0, TraceEventType.Verbose);

                    if (Optionen.ErsterDurchlauf)
                    {
                        Optionen.ErsterDurchlauf = false;
                        var anzFehlerNichtNull = Optionen.ListeTerminals.Where(w => w.AnzahlFehler > 0).ToList();
                        if (anzFehlerNichtNull.Count > 0)
                        {
                            foreach (var nn in anzFehlerNichtNull)
                            {
                                nn.AnzahlFehler = 0;
                            }
                            Db.SaveChanges();
                        }
                    }

                    Optionen.UpdateBenutzerAusfuehren = (Optionen.ListeTerminals.Any(w => w.UpdateTerminal));
                    if (Optionen.UpdateBenutzerAusfuehren)
                    {
                        Optionen.ListeBediener = Db.tabBedienerSet.Where(w => (w.Status != EnumStatusBediener.Stillgelegt) && (!w.DatenAbgleich.Geloescht)).ToList();
                        msg = $"{Optionen.ListeBediener.Count} Bediener für Update Terminal aus DB eingelesen";
                        Logger.Write(msg, "Service", 0, 0, TraceEventType.Verbose);
                    }
                }
                msg = $"Daten aus Datenbank erfolgreich geladen.";
                Logger.Write(msg, "Service", 0, 0, TraceEventType.Information);
            }
            catch (Exception f)
            {
                msg = $"Fehler beim Laden der Daten aus der Datenbank.";
                throw new MyException(msg, f);
            }
        }
Example #2
0
        static void Main(string[] args)
        {
            Logger.SetLogWriter(new LogWriterFactory().Create());
            ExceptionPolicy.SetExceptionManager(new ExceptionPolicyFactory().CreateManager(), false);

            var prop = JgMaschineServiceAbreitszeit.Properties.Settings.Default;

            var msg = "Programm startet. Initialisierung Datafox Optionen.";

            Logger.Write(msg, "Service", 0, 0, System.Diagnostics.TraceEventType.Start);

            var optArbeitszeit = new OptionenArbeitszeit()
            {
                PfadUpdateBediener       = prop.PfadUpdateBediener,
                AuslesIntervallTerminal  = prop.AusleseIntervallInSekunden,
                VerbindungsString        = prop.DatenbankVerbindungsString,
                AnzahlBisFehlerAusloesen = prop.AnzahlBisFehlerAusloesen,
                Terminal_TimeOut         = prop.Terminal_TimeOut
            };

#if DEBUG
            var _ArbeitszeitErfassung = new ArbeitszeitErfassen(optArbeitszeit);

            msg = $"Arbeitszeit startet!";
            Logger.Write(msg, "Service", 1, 0, System.Diagnostics.TraceEventType.Information);

            var task = new Task((azTask) =>
            {
                (azTask as ArbeitszeitErfassen).Start();
            }, _ArbeitszeitErfassung, TaskCreationOptions.LongRunning);
            task.Start();

            Console.WriteLine("Service läuft. Beendigung mit einer Taste...");
            Console.ReadKey();
#else
            var ServiceToRun = new ServiceBase[] { new JgMaschineServiceArbeitszeit(optArbeitszeit) };
            ServiceBase.Run(ServiceToRun);
#endif
        }
        public static void BedienerInDatafoxDatei(OptionenArbeitszeit Optionen)
        {
            string msg;
            var    sb = new StringBuilder();

            foreach (var bediener in Optionen.ListeBediener)
            {
                var bed = (bediener.Name.Length > 25) ? bediener.Name.Substring(0, 25) : bediener.Name;
                sb.AppendLine($"MITA0{bediener.MatchCode}\tMITA1{bediener.MatchCode}\t{bed}");
            }

            if (!Directory.Exists(Optionen.PfadUpdateBediener))
            {
                var tempPfad = Path.GetTempPath();
                msg = $"Pfad '{Optionen.PfadUpdateBediener}' zum schreiben der Bedienerdatei ist nicht vorhanden. Schreibe Datei in Tempfad {tempPfad}";
                Logger.Write(msg, "Service", 0, 0, System.Diagnostics.TraceEventType.Warning);
                Optionen.PfadUpdateBediener = tempPfad;

                if (!Directory.Exists(tempPfad))
                {
                    throw new MyException("Temporärer Pfad zum schreibe der Bedienerdatei nicht vorhanden.");
                }
            }

            var dat = Optionen.PfadUpdateBediener + @"\PersonalStamm.txt";

            try
            {
                File.WriteAllText(dat, sb.ToString());
                msg = $"{dat} zum Einlesen der Bedienerdatei erfolgreich erstellt !";
                Logger.Write(msg, "Service", 0, 0, System.Diagnostics.TraceEventType.Information);
            }
            catch (Exception f)
            {
                msg = $"Fehler beim schreiben der Bedienerdatei {dat}!\nGrund: {f.Message}";
                throw new MyException(msg);
            }
        }
Example #4
0
 public JgMaschineServiceArbeitszeit(OptionenArbeitszeit OptDatafox)
 {
     _ArbErfassung = new ArbeitszeitErfassen(OptDatafox);
 }
Example #5
0
        public static void TerminaldatenEinUndAuslesen(OptionenArbeitszeit Optionen)
        {
            string msg;

            foreach (var datTerminal in Optionen.ListeTerminals)
            {
                try
                {
                    msg = $"Start Terminal: {datTerminal.Bezeichnung} / {datTerminal.eStandort.Bezeichnung}\n  IP: {datTerminal.IpNummer} Port: {datTerminal.PortNummer}\n-------------------------------------------------";
                    Logger.Write(msg, "Service", 0, 0, TraceEventType.Information);

                    var termAktuell = new OptionenTerminal(datTerminal.IpNummer, datTerminal.PortNummer, Optionen.Terminal_TimeOut);

                    if (!Helper.IstPingOk(termAktuell.IpAdresse, out msg))
                    {
                        Logger.Write(msg, "Service", 0, 0, TraceEventType.Warning);
                        datTerminal.FehlerTerminalAusgeloest = true;
                        continue;
                    }

                    List <string> DatensaetzeVomTerminal = null;

                    try
                    {
                        var offen = ProgDatafox.DatafoxOeffnen(termAktuell);
                        if (!offen)
                        {
                            msg = $"Verbindung zum Terminal konnte nicht geöffnet werden.";
                            Logger.Write(msg, "Service", 0, 0, TraceEventType.Warning);
                            datTerminal.FehlerTerminalAusgeloest = true;
                            continue;
                        }

                        // Zeit mit Termimal abgleichem
                        if (Optionen.DatumZeitAktualisieren)
                        {
                            if (ProgDatafox.ZeitEinstellen(termAktuell, DateTime.Now))
                            {
                                Logger.Write("Zeit Terminal gestellt", "Service", 0, 0, TraceEventType.Information);
                            }
                            else
                            {
                                Logger.Write("Zeit konnte nicht gestellt werden", "Service", 0, 0, TraceEventType.Warning);
                            }
                        }

                        // Kontrolle, ob Benutzer im Terminal geändert werden müssen

                        if (Optionen.UpdateBenutzerAusfuehren && datTerminal.UpdateTerminal)
                        {
                            datTerminal.TerminaldatenWurdenAktualisiert = true;
                            ProgDatafox.ListenInTerminalSchreiben(termAktuell, Optionen.PfadUpdateBediener);
                        }

                        // Anmeldungen aus Terminal auslesen
                        DatensaetzeVomTerminal = ProgDatafox.ListeAusTerminalAuslesen(termAktuell);
                        if (DatensaetzeVomTerminal.Count == 0)
                        {
                            msg = "Keine Datensätze vorhanden.";
                            Logger.Write(msg, "Service", 0, 0, TraceEventType.Verbose);
                        }
                        else
                        {
                            msg = $"Es wurden {DatensaetzeVomTerminal.Count} Arbeitszeiten von Terminal übertragen.";
                            Logger.Write(msg, "Service", 0, 0, TraceEventType.Information);
                        }
                    }
                    catch (Exception f)
                    {
                        msg = "Fehler bei Kommunikation mit Terminal";
                        datTerminal.FehlerTerminalAusgeloest = true;
                        throw new MyException(msg, f);
                    }
                    finally
                    {
                        msg = "Verbindung Terminal schliesen.";
                        Logger.Write(msg, "Service", 0, 0, TraceEventType.Information);
                        ProgDatafox.DatafoxSchliessen(termAktuell);
                    }

                    if (DatensaetzeVomTerminal.Count > 0)
                    {
                        try
                        {
                            var anmeldungen = ProgDatafox.KonvertDatafoxImport(DatensaetzeVomTerminal, datTerminal.fStandort, "MITA_");

                            var lsAnmeldung = anmeldungen.Select(s => $"  {s.MatchCode}   {s.GehGrund} - {s.Datum} /  {s.Vorgang}").ToArray();
                            Logger.Write($"Ausgelesene Anmeldungen\n{Helper.ListeInString(lsAnmeldung)}", "Service", 0, 0, TraceEventType.Information);

                            Optionen.ListeAnmeldungen.AddRange(anmeldungen);
                        }
                        catch (Exception f)
                        {
                            msg = "Fehler beim Konvertieren der Daten.";
                            throw new Exception(msg, f);
                        }
                    }
                }
                catch (Exception f)
                {
                    ExceptionPolicy.HandleException(f, "Policy");
                }
            }
        }
Example #6
0
        public static void ArbeitszeitenInDatenbank(OptionenArbeitszeit Optionen)
        {
            var msg = "";

            try
            {
                using (var Db = new JgModelContainer())
                {
                    if (Optionen.VerbindungsString != "")
                    {
                        Db.Database.Connection.ConnectionString = Optionen.VerbindungsString;
                    }

                    msg = "Beginne Eintragungen in Datenbank.";
                    Logger.Write(msg, "Service", 0, 0, TraceEventType.Verbose);

                    if (Optionen.ListeAnmeldungen.Count > 0)
                    {
                        var azImport = new ArbeitszeitImport();
                        azImport.ImportStarten(Db, Optionen.ListeAnmeldungen);

                        Db.SaveChanges();
                        msg = $"{azImport.AnzahlAnmeldungen} Anmeldungen erfolgreich in Datenbank gespeichert.\n\n{azImport.ProtokollOk}";
                        Logger.Write(msg, "Service", 0, 0, TraceEventType.Verbose);

                        if (azImport.ProtokollFehler != null)
                        {
                            msg = $"Anmeldungen ohne Benutzerzuordnung!\n\n{azImport.ProtokollFehler}";
                            Logger.Write(msg, "Service", 0, 0, TraceEventType.Warning);
                        }
                    }

                    foreach (var term in Optionen.ListeTerminals)
                    {
                        if ((term.TerminaldatenWurdenAktualisiert) ||
                            (term.FehlerTerminalAusgeloest) ||
                            ((!term.FehlerTerminalAusgeloest) && (term.AnzahlFehler != 0)))
                        {
                            Db.tabArbeitszeitTerminalSet.Attach(term);
                            Db.Entry(term).State = EntityState.Modified;

                            // Terminals die erfolgreich geUpdatet wurden eintragen
                            if (term.TerminaldatenWurdenAktualisiert)
                            {
                                term.UpdateTerminal = false;
                            }

                            // Wenn Fehleranzahl erreicht wurde, Fehler anzeigen und FehlerAnzahl auf 0 setzen
                            if (term.FehlerTerminalAusgeloest)
                            {
                                term.AnzahlFehler = (short)(term.AnzahlFehler + 1);

                                if (term.AnzahlFehler >= Optionen.AnzahlBisFehlerAusloesen)
                                {
                                    term.AnzahlFehler = 0;
                                    msg = $"Fehleranzahl Verbindungsaufbau Terminal {term.Bezeichnung} / {term.eStandort.Bezeichnung} größer {Optionen.AnzahlBisFehlerAusloesen}.";
                                    Logger.Write(msg, "Service", 0, 0, TraceEventType.Error);
                                }
                            }
                            else
                            {
                                if (term.AnzahlFehler != 0)
                                {
                                    term.AnzahlFehler = 0;
                                }
                            }

                            msg = $"Terminal {term.Bezeichnung} / {term.eStandort.Bezeichnung} aktualisiert.";
                            Logger.Write(msg, "Service", 0, 0, TraceEventType.Verbose);
                        }
                    }

                    Db.SaveChanges();
                }
            }
            catch (Exception f)
            {
                msg = "Fehler beim eintragen der Anmeldedaten in die Datenbank.";
                throw new MyException(msg, f);
            }
        }
Example #7
0
 public ArbeitszeitErfassen(OptionenArbeitszeit OptDatafox)
 {
     _OptDatafox = OptDatafox;
 }