Files
sternwarte/GO/fuehrungstermine/main.go

168 lines
3.3 KiB
Go

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()
}