From 45b76cf1b2eeb30ef6ad6eea8011c93f51fc59d1 Mon Sep 17 00:00:00 2001 From: rxf Date: Wed, 1 Oct 2025 15:25:14 +0200 Subject: [PATCH] =?UTF-8?q?GO=20mit=20F=C3=BChrungsterminen=20angepasst?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- GO/fuehrungstermine/.vscode/launch.json | 22 ++++ GO/fuehrungstermine/go.mod | 8 ++ GO/fuehrungstermine/go.sum | 4 + GO/fuehrungstermine/main.go | 167 ++++++++++++++++++++++++ GO/sternwarte_fdates/fdates/fdates.go | 1 + GO/sternwarte_fdates/go.mod | 5 + GO/sternwarte_fdates/go.sum | 2 + GO/sternwarte_fdates/main/main.go | 77 +++++++++++ 8 files changed, 286 insertions(+) create mode 100644 GO/fuehrungstermine/.vscode/launch.json create mode 100644 GO/fuehrungstermine/go.mod create mode 100644 GO/fuehrungstermine/go.sum create mode 100644 GO/fuehrungstermine/main.go create mode 100644 GO/sternwarte_fdates/fdates/fdates.go create mode 100644 GO/sternwarte_fdates/go.mod create mode 100644 GO/sternwarte_fdates/go.sum create mode 100644 GO/sternwarte_fdates/main/main.go diff --git a/GO/fuehrungstermine/.vscode/launch.json b/GO/fuehrungstermine/.vscode/launch.json new file mode 100644 index 0000000..7007b9e --- /dev/null +++ b/GO/fuehrungstermine/.vscode/launch.json @@ -0,0 +1,22 @@ +{ + // Use IntelliSense to learn about possible attributes. + // Hover to view descriptions of existing attributes. + // For more information, visit: https://go.microsoft.com/fwlink/?linkid=830387 + "version": "0.2.0", + "configurations": [ + { + "name": "Launch file", + "type": "go", + "request": "launch", + "mode": "debug", + "program": "${file}" + }, + { + "name": "Launch Package", + "type": "go", + "request": "launch", + "mode": "auto", + "program": "${fileDirname}" + } + ] +} \ No newline at end of file diff --git a/GO/fuehrungstermine/go.mod b/GO/fuehrungstermine/go.mod new file mode 100644 index 0000000..2982bec --- /dev/null +++ b/GO/fuehrungstermine/go.mod @@ -0,0 +1,8 @@ +module rexfue.de/fuehrungstermine + +go 1.16 + +require ( + github.com/go-sql-driver/mysql v1.6.0 // indirect + github.com/wlbr/feiertage v1.10.0 // indirect +) diff --git a/GO/fuehrungstermine/go.sum b/GO/fuehrungstermine/go.sum new file mode 100644 index 0000000..f87a0e9 --- /dev/null +++ b/GO/fuehrungstermine/go.sum @@ -0,0 +1,4 @@ +github.com/go-sql-driver/mysql v1.6.0 h1:BCTh4TKNUYmOmMUcQ3IipzF5prigylS7XXjEkfCHuOE= +github.com/go-sql-driver/mysql v1.6.0/go.mod h1:DCzpHaOWr8IXmIStZouvnhqoel9Qv2LBy8hT2VhHyBg= +github.com/wlbr/feiertage v1.10.0 h1:Nx+KPuj8bNNJOzgRKb0GD4K8tkdxxej4BhkzRiXrbEA= +github.com/wlbr/feiertage v1.10.0/go.mod h1:wJOHvMa6sI5L1FkrTOX/GSoO0hpK3S2YqGLPi8Q84I0= diff --git a/GO/fuehrungstermine/main.go b/GO/fuehrungstermine/main.go new file mode 100644 index 0000000..cc52993 --- /dev/null +++ b/GO/fuehrungstermine/main.go @@ -0,0 +1,167 @@ +package main + +import ( + "database/sql" + "flag" + "fmt" + "time" + + _ "github.com/go-sql-driver/mysql" + "github.com/wlbr/feiertage" +) + + +var samstag = []string{"Sa A", "Sa B", "Sa C"} +var montag = []string{"Mo I", "Mo II"} +var mittwoch = []string{"Mi I", "Mi II"} + +var sams int +var mont int +var mitt int + +func bumpgroup(wd int) string { + grp := "" + switch wd { + case 6: + grp = samstag[sams] + sams = sams + 1 + if sams == 3 { + sams = 0; + } + case 1: + grp = montag[mont] + mont = mont + 1 + if mont == 2 { + mont = 0; + } + case 3: + grp = mittwoch[mitt] + mitt = mitt + 1 + if mitt == 2 { + mitt = 0 + } + } + return grp +} + + +func printDate (d time.Time, db *sql.DB, ft []feiertage.Feiertag, grp string, store bool) { + zeiten := [13]int{0,20,20,20,21,22,22,22,22,21,20,20,20} + wdays := [7]string{"Sonntag", "Montag", "Dienstag", "Mittwoch", "Donnerstag", "Freitag", "Samstag"} + + year, month, day := d.Date() + wd := int(d.Weekday()) + zt := zeiten[month] +// fmt.Printf("%v-%02d-%02d %9v %v Uhr\n", year, int(month), day, wdays[int(wd)], zt) + + if Contains(ft, d) || d.Equal(time.Date(year, 12, 31, 0, 0, 0, 0, time.Local)) || d.Equal(time.Date(year, 12, 24, 0, 0, 0, 0, time.Local)) { + fmt.Println("********* Feiertag") + return + } + + query := fmt.Sprintf("INSERT INTO fdatum1 (wtag, datum, uhrzeit, grp, count) VALUES ('%v', %v%02d%02d, '%v Uhr', '%v', 0)", + wdays[int(wd)], year, int(month), day, zt, grp) + fmt.Println(query) + + if store { + insert, err := db.Query(query) + if err != nil { + panic(err.Error()) + } + insert.Close() + } +} + +func createDates(year int, db *sql.DB, ft []feiertage.Feiertag, doStore bool) { + d := time.Date(year, 1, 1, 0, 0, 0, 0, time.Local) + for i := 1; i< 366; i++ { + wd := int(d.Weekday()) + grp := bumpgroup(wd) + if d.Month() <= 4 || d.Month() >=9 { + if wd == 1 || wd == 3 { + printDate(d, db, ft, grp, doStore); + } + } + if wd == 6 { + printDate(d, db, ft, grp, doStore) + } + d = d.AddDate(0,0,1) + if d.Year() > year { + break; + } + } +} + +// Contains tells whether a contains x. +func Contains(a []feiertage.Feiertag, x time.Time) bool { + for _, n := range a { + if x.Equal(n.Time) { + return true + } + } + return false +} + + +func sendAllOff() { + + var storeit bool + + yearPtr := flag.Int("year", 2026, "Für das Jahr 'year' berechnen") + samPtr := flag.String("sams", "Sa A", "Start für Samstag (möglich: Sa A, Sa B, Sa C)") + monPtr := flag.String("mont", "Mo I", "Start für Montag (möglich: Mo I, Mo II)") + mitPtr := flag.String("mitt", "Mi I", "Start für Mittwoch (möglich: Mi I, Mi II)") + flag.BoolVar(&storeit, "store", false, "in der DB speichern?") + + + flag.Parse() + + fmt.Println("year:", *yearPtr) + fmt.Println("samstag:", *samPtr) + fmt.Println("montag:", *monPtr) + fmt.Println("mittwoch:", *mitPtr) + fmt.Println("store:", storeit) + + switch *samPtr { + case "Sa A": + sams = 0 + case "Sa B": + sams = 1 + default: + sams = 2 + } + + if *monPtr == "Mo I" { + mont = 0 + } else { + mont = 1 + } + if *mitPtr == "Mi I" { + mitt = 0 + } else { + mitt = 1 + } + + feiertage.SetDefaultTimeZone(time.Local) + ft := feiertage.BadenWürttemberg(*yearPtr) + fmt.Println(ft) + + db, err := sql.Open("mysql", "root:SFluorit@tcp(127.0.0.1:3306)/sternwarte") + if err != nil { + panic(err.Error()) + } + + db.SetConnMaxLifetime(time.Minute * 3) + db.SetMaxOpenConns(10) + db.SetMaxIdleConns(10) + + + defer db.Close() + + createDates(*yearPtr, db, ft.Feiertage, storeit) +} + +func main() { + sendAllOff() +} + diff --git a/GO/sternwarte_fdates/fdates/fdates.go b/GO/sternwarte_fdates/fdates/fdates.go new file mode 100644 index 0000000..d9b3e84 --- /dev/null +++ b/GO/sternwarte_fdates/fdates/fdates.go @@ -0,0 +1 @@ +package fdates diff --git a/GO/sternwarte_fdates/go.mod b/GO/sternwarte_fdates/go.mod new file mode 100644 index 0000000..712db58 --- /dev/null +++ b/GO/sternwarte_fdates/go.mod @@ -0,0 +1,5 @@ +module rexfue.de/fdates + +go 1.16 + +require github.com/go-sql-driver/mysql v1.6.0 diff --git a/GO/sternwarte_fdates/go.sum b/GO/sternwarte_fdates/go.sum new file mode 100644 index 0000000..20c16d6 --- /dev/null +++ b/GO/sternwarte_fdates/go.sum @@ -0,0 +1,2 @@ +github.com/go-sql-driver/mysql v1.6.0 h1:BCTh4TKNUYmOmMUcQ3IipzF5prigylS7XXjEkfCHuOE= +github.com/go-sql-driver/mysql v1.6.0/go.mod h1:DCzpHaOWr8IXmIStZouvnhqoel9Qv2LBy8hT2VhHyBg= diff --git a/GO/sternwarte_fdates/main/main.go b/GO/sternwarte_fdates/main/main.go new file mode 100644 index 0000000..3100f47 --- /dev/null +++ b/GO/sternwarte_fdates/main/main.go @@ -0,0 +1,77 @@ +package sendAllOff + +import ( + "database/sql" + "fmt" + "strconv" + "strings" + "time" + + _ "github.com/go-sql-driver/mysql" +) + +/* + * Tag... - a very simple struct + */ +type Tag struct { + datetime string `json:"datetime"` +} + +func sendAllOff() { + fmt.Println("Go MySQL Tutorial") + + // Open up our database connection. + // I've set up a database on my local machine using phpmyadmin. + // The database is called testDb + db, err := sql.Open("mysql", "root:SFluorit@tcp(127.0.0.1:3306)/sternwarte") + + // if there is an error opening the connection, handle it + if err != nil { + panic(err.Error()) + } + + db.SetConnMaxLifetime(time.Minute * 3) + db.SetMaxOpenConns(10) + db.SetMaxIdleConns(10) + + // defer the close till after the sendAllOff function has finished + // executing + defer db.Close() + + // Execute the query + results, err := db.Query("SELECT datetime FROM fdates") + if err != nil { + panic(err.Error()) // proper error handling instead of panic in your app + } + + for results.Next() { + var tag Tag + // for each row, scan the result into our tag composite object + err = results.Scan(&tag.datetime) + if err != nil { + panic(err.Error()) // proper error handling instead of panic in your app + } + // datetime in das datum von fdatum umwandeln + str := strings.Replace(tag.datetime[0:10], "-", "", -1) + fmt.Println(str) + // einen int draus machen + i, err := strconv.Atoi(str) + if err != nil { + // handle error + fmt.Println(err) + } + // Update-query erzeugen + query := fmt.Sprintf("UPDATE fdates SET datum='%d' WHERE datetime='%s'", i, tag.datetime) + // update ausführen + update, err := db.Query(query) + + // if there is an error inserting, handle it + if err != nil { + panic(err.Error()) + } + // be careful deferring Queries if you are using transactions + update.Close() + + } + +}