114 lines
1.9 KiB
Go
114 lines
1.9 KiB
Go
package main
|
|
|
|
import (
|
|
"context"
|
|
"database/sql"
|
|
"encoding/csv"
|
|
"io"
|
|
"log"
|
|
"os"
|
|
"path/filepath"
|
|
"strconv"
|
|
|
|
"bj_power_mes/ent"
|
|
|
|
"entgo.io/ent/dialect"
|
|
entsql "entgo.io/ent/dialect/sql"
|
|
_ "github.com/jackc/pgx/v5/stdlib"
|
|
)
|
|
|
|
var (
|
|
client *ent.Client
|
|
|
|
ctx = context.Background()
|
|
)
|
|
|
|
func setUp() {
|
|
db, err := sql.Open("pgx", "postgresql://postgres:postgres@127.0.0.1:5432/back_cover")
|
|
if err != nil {
|
|
log.Fatal(err)
|
|
}
|
|
|
|
_, err = db.Query("select 1")
|
|
if err != nil {
|
|
log.Fatal(err)
|
|
}
|
|
|
|
drv := entsql.OpenDB(dialect.Postgres, db)
|
|
client = ent.NewClient(ent.Driver(drv)).Debug()
|
|
}
|
|
|
|
func tearDown() {
|
|
err := client.Close()
|
|
if err != nil {
|
|
return
|
|
}
|
|
}
|
|
|
|
var commands = map[string]func(){
|
|
"signals": initSignals,
|
|
}
|
|
|
|
func main() {
|
|
if len(os.Args) < 2 {
|
|
log.Fatal("please specify the command")
|
|
}
|
|
if len(os.Args) > 1 {
|
|
setUp()
|
|
defer tearDown()
|
|
args := os.Args[1:]
|
|
for _, cmd := range args {
|
|
if v, ok := commands[cmd]; ok {
|
|
log.Println("initialize", cmd)
|
|
v()
|
|
}
|
|
}
|
|
}
|
|
}
|
|
|
|
func initSignals() {
|
|
signalFilePath, _ := filepath.Abs("../doc/signal.csv")
|
|
file, err := os.Open(signalFilePath)
|
|
if err != nil {
|
|
if os.IsNotExist(err) {
|
|
log.Fatalf("%s is not found", signalFilePath)
|
|
}
|
|
log.Fatal("signals initialized failed!", err)
|
|
}
|
|
r := csv.NewReader(file)
|
|
|
|
client.Signal.Delete().ExecX(ctx)
|
|
|
|
line := 0
|
|
for {
|
|
records, err := r.Read()
|
|
if err == io.EOF {
|
|
break
|
|
} else if err != nil {
|
|
log.Fatal(err)
|
|
}
|
|
if line == 0 {
|
|
line++
|
|
continue
|
|
}
|
|
name := records[1]
|
|
desc := records[2]
|
|
isStatus, _ := strconv.Atoi(records[3])
|
|
sender, _ := strconv.Atoi(records[4])
|
|
address := records[5]
|
|
offset, _ := strconv.Atoi(records[6])
|
|
client.Signal.Create().
|
|
SetID(line).
|
|
SetIsStatus(isStatus).
|
|
SetName(name).
|
|
SetDescription(desc).
|
|
SetSender(sender).
|
|
SetAddress(address).
|
|
SetReplyOffset(offset).
|
|
SaveX(ctx)
|
|
line++
|
|
}
|
|
|
|
log.Println("signals initialized successfully!")
|
|
}
|