GO mit Führungsterminen angepasst
This commit is contained in:
22
GO/fuehrungstermine/.vscode/launch.json
vendored
Normal file
22
GO/fuehrungstermine/.vscode/launch.json
vendored
Normal file
@@ -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}"
|
||||||
|
}
|
||||||
|
]
|
||||||
|
}
|
||||||
8
GO/fuehrungstermine/go.mod
Normal file
8
GO/fuehrungstermine/go.mod
Normal file
@@ -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
|
||||||
|
)
|
||||||
4
GO/fuehrungstermine/go.sum
Normal file
4
GO/fuehrungstermine/go.sum
Normal file
@@ -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=
|
||||||
167
GO/fuehrungstermine/main.go
Normal file
167
GO/fuehrungstermine/main.go
Normal file
@@ -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()
|
||||||
|
}
|
||||||
|
|
||||||
1
GO/sternwarte_fdates/fdates/fdates.go
Normal file
1
GO/sternwarte_fdates/fdates/fdates.go
Normal file
@@ -0,0 +1 @@
|
|||||||
|
package fdates
|
||||||
5
GO/sternwarte_fdates/go.mod
Normal file
5
GO/sternwarte_fdates/go.mod
Normal file
@@ -0,0 +1,5 @@
|
|||||||
|
module rexfue.de/fdates
|
||||||
|
|
||||||
|
go 1.16
|
||||||
|
|
||||||
|
require github.com/go-sql-driver/mysql v1.6.0
|
||||||
2
GO/sternwarte_fdates/go.sum
Normal file
2
GO/sternwarte_fdates/go.sum
Normal file
@@ -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=
|
||||||
77
GO/sternwarte_fdates/main/main.go
Normal file
77
GO/sternwarte_fdates/main/main.go
Normal file
@@ -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()
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
Reference in New Issue
Block a user