176 lines
4.6 KiB
Go
176 lines
4.6 KiB
Go
package racs
|
|
|
|
import (
|
|
"APIServer/cnf"
|
|
"database/sql"
|
|
"fmt"
|
|
"log"
|
|
"strings"
|
|
|
|
_ "github.com/go-sql-driver/mysql"
|
|
)
|
|
|
|
type RACS struct{}
|
|
|
|
func (r *RACS) Inbound(cfg cnf.Cfg, logger *log.Logger, addr string, uri string, params map[string]string) map[string]string {
|
|
rst := map[string]string{"Result": "OK", "ErrMsg": ""}
|
|
dsn := fmt.Sprintf("%s:%s@tcp(%s:%s)/%s",
|
|
cfg.MySQL.User,
|
|
cfg.MySQL.Password,
|
|
cfg.MySQL.Server,
|
|
cfg.MySQL.Port,
|
|
cfg.MySQL.Database,
|
|
)
|
|
dbo, err := sql.Open("mysql", dsn)
|
|
if err != nil {
|
|
rst["Result"] = "NG"
|
|
rst["ErrMsg"] = "racs.Inbound: " + err.Error()
|
|
logger.Printf("[ERR] %s; %s; %#v; %s\r\n", addr, uri, params, rst["ErrMsg"])
|
|
return rst
|
|
}
|
|
defer dbo.Close()
|
|
dml := fmt.Sprintf(`INSERT INTO %s
|
|
(usn,storage,update_time,mark1,mark2,mark3) VALUES ('%s','%s',%s,'%s','%s','%s')
|
|
ON DUPLICATE KEY UPDATE
|
|
storage = VALUES(storage),
|
|
update_time = NOW(),
|
|
mark1 = VALUES(mark1),
|
|
mark2 = VALUES(mark2),
|
|
mark3 = VALUES(mark3);`,
|
|
cfg.MySQL.StorageTable,
|
|
params["USN"],
|
|
"Inbound",
|
|
"NOW()",
|
|
params["MARK1"],
|
|
params["MARK2"],
|
|
params["MARK3"],
|
|
)
|
|
_, err = dbo.Exec(dml)
|
|
if err != nil {
|
|
rst["Result"] = "NG"
|
|
rst["ErrMsg"] = "racs.Inbound: " + err.Error()
|
|
logger.Printf("[ERR] %s; %s; %#v; %s\r\n", addr, uri, params, rst["ErrMsg"])
|
|
return rst
|
|
}
|
|
return rst
|
|
}
|
|
|
|
func (r *RACS) Outbound(cfg cnf.Cfg, logger *log.Logger, addr string, uri string, params map[string]string) map[string]string {
|
|
rst := map[string]string{"Result": "OK", "ErrMsg": ""}
|
|
dsn := fmt.Sprintf("%s:%s@tcp(%s:%s)/%s",
|
|
cfg.MySQL.User,
|
|
cfg.MySQL.Password,
|
|
cfg.MySQL.Server,
|
|
cfg.MySQL.Port,
|
|
cfg.MySQL.Database,
|
|
)
|
|
dbo, err := sql.Open("mysql", dsn)
|
|
if err != nil {
|
|
rst["Result"] = "NG"
|
|
rst["ErrMsg"] = "racs.Outbound: " + err.Error()
|
|
logger.Printf("[ERR] %s; %s; %#v; %s\r\n", addr, uri, params, rst["ErrMsg"])
|
|
return rst
|
|
}
|
|
defer dbo.Close()
|
|
dml := fmt.Sprintf(`INSERT INTO %s
|
|
(usn,storage,update_time,mark1,mark2,mark3) VALUES ('%s','%s',%s,'%s','%s','%s')
|
|
ON DUPLICATE KEY UPDATE
|
|
storage = VALUES(storage),
|
|
update_time = NOW(),
|
|
mark1 = VALUES(mark1),
|
|
mark2 = VALUES(mark2),
|
|
mark3 = VALUES(mark3);`,
|
|
cfg.MySQL.StorageTable,
|
|
params["USN"],
|
|
"Outbound",
|
|
"NOW()",
|
|
params["MARK1"],
|
|
params["MARK2"],
|
|
params["MARK3"],
|
|
)
|
|
_, err = dbo.Exec(dml)
|
|
if err != nil {
|
|
rst["Result"] = "NG"
|
|
rst["ErrMsg"] = "racs.Outbound: " + err.Error()
|
|
logger.Printf("[ERR] %s; %s; %#v; %s\r\n", addr, uri, params, rst["ErrMsg"])
|
|
return rst
|
|
}
|
|
return rst
|
|
}
|
|
|
|
func (r *RACS) GetFailList(cfg cnf.Cfg, logger *log.Logger, addr string, uri string, params map[string]string) map[string]interface{} {
|
|
rst := map[string]interface{}{"Result": "OK", "ErrMsg": ""}
|
|
dsn := fmt.Sprintf("%s:%s@tcp(%s:%s)/%s",
|
|
cfg.MySQL.User,
|
|
cfg.MySQL.Password,
|
|
cfg.MySQL.Server,
|
|
cfg.MySQL.Port,
|
|
cfg.MySQL.Database,
|
|
)
|
|
dbo, err := sql.Open("mysql", dsn)
|
|
if err != nil {
|
|
rst["Result"] = "NG"
|
|
rst["ErrMsg"] = "racs.GetFailList: " + err.Error()
|
|
logger.Printf("[ERR] %s; %s; %s\r\n", addr, uri, rst["ErrMsg"])
|
|
return rst
|
|
}
|
|
defer dbo.Close()
|
|
|
|
dml := cfg.MySQL.GetFailListSQL
|
|
if len(params) > 0 {
|
|
dml = dml + " WHERE "
|
|
for k, v := range params {
|
|
trans := false
|
|
for _, p := range cfg.MySQL.GetFailListParams {
|
|
if k == p.Param {
|
|
dml = dml + fmt.Sprintf("%s='%s' AND ", p.Column, v)
|
|
trans = true
|
|
break
|
|
}
|
|
}
|
|
if !trans {
|
|
dml = dml + fmt.Sprintf("%s='%s' AND ", k, v)
|
|
}
|
|
}
|
|
}
|
|
dml = strings.TrimSuffix(dml, " AND ")
|
|
|
|
qry, err := dbo.Query(dml)
|
|
if err != nil {
|
|
rst["Result"] = "NG"
|
|
rst["ErrMsg"] = "racs.GetFailList: " + err.Error()
|
|
logger.Printf("[ERR] %s; %s; %s\r\n", addr, uri, rst["ErrMsg"])
|
|
return rst
|
|
}
|
|
cols, err := qry.Columns()
|
|
if err != nil {
|
|
rst["Result"] = "NG"
|
|
rst["ErrMsg"] = "racs.GetFailList: " + err.Error()
|
|
logger.Printf("[ERR] %s; %s; %s\r\n", addr, uri, rst["ErrMsg"])
|
|
return rst
|
|
}
|
|
vals := make([][]byte, len(cols))
|
|
scans := make([]interface{}, len(cols))
|
|
for v := range vals {
|
|
scans[v] = &vals[v]
|
|
}
|
|
|
|
list := make([]map[string]string, 0)
|
|
for qry.Next() {
|
|
if err := qry.Scan(scans...); err != nil {
|
|
rst["Result"] = "NG"
|
|
rst["ErrMsg"] = "racs.GetFailList: " + err.Error()
|
|
logger.Printf("[ERR] %s; %s; %s\r\n", addr, uri, rst["ErrMsg"])
|
|
return rst
|
|
}
|
|
row := make(map[string]string)
|
|
for k, v := range vals {
|
|
key := cols[k]
|
|
row[key] = string(v)
|
|
}
|
|
list = append(list, row)
|
|
}
|
|
rst["List"] = list
|
|
return rst
|
|
}
|