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); } }
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); } }
public JgMaschineServiceArbeitszeit(OptionenArbeitszeit OptDatafox) { _ArbErfassung = new ArbeitszeitErfassen(OptDatafox); }
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"); } } }
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); } }
public ArbeitszeitErfassen(OptionenArbeitszeit OptDatafox) { _OptDatafox = OptDatafox; }