wip
This commit is contained in:
parent
a3edf9c87e
commit
2d2b08bb3c
5
go.mod
5
go.mod
|
@ -3,6 +3,7 @@ module git.espin.casa/albert/cml04-mediciones-service
|
|||
go 1.22.2
|
||||
|
||||
require (
|
||||
git.espin.casa/albert/cml04-eventer v0.0.0-20240312060131-787bef88f992
|
||||
git.espin.casa/albert/logger v0.0.0-20240312060442-59b35e5c6996
|
||||
github.com/zc2638/swag v1.5.1
|
||||
gorm.io/driver/mysql v1.5.6
|
||||
|
@ -11,9 +12,13 @@ require (
|
|||
|
||||
require (
|
||||
github.com/go-sql-driver/mysql v1.7.0 // indirect
|
||||
github.com/golang/snappy v0.0.1 // indirect
|
||||
github.com/google/uuid v1.6.0 // indirect
|
||||
github.com/jinzhu/inflection v1.0.0 // indirect
|
||||
github.com/jinzhu/now v1.1.5 // indirect
|
||||
github.com/modern-go/reflect2 v1.0.2 // indirect
|
||||
github.com/nsqio/go-nsq v1.1.0 // indirect
|
||||
github.com/pkg/errors v0.9.1 // indirect
|
||||
github.com/sirupsen/logrus v1.9.3 // indirect
|
||||
golang.org/x/sys v0.0.0-20220715151400-c0bba94af5f8 // indirect
|
||||
)
|
||||
|
|
13
go.sum
13
go.sum
|
@ -1,3 +1,5 @@
|
|||
git.espin.casa/albert/cml04-eventer v0.0.0-20240312060131-787bef88f992 h1:xnil99vA0oWIefouEm0+QS2fLJAF6j5Dgr+JqlulhJQ=
|
||||
git.espin.casa/albert/cml04-eventer v0.0.0-20240312060131-787bef88f992/go.mod h1:/fj0cTIFEdeYmzL2r4WLEAN2q3N3T48ZPOT1hqusuSI=
|
||||
git.espin.casa/albert/logger v0.0.0-20240312060442-59b35e5c6996 h1:gOY7u2z9gMOdp0Q1Rod9XvoM0gL84SBXR7n/VxrgvtE=
|
||||
git.espin.casa/albert/logger v0.0.0-20240312060442-59b35e5c6996/go.mod h1:dacFMi82f5ysDOaJQm0QmQaJZ7mwGFiayJ2iS+JKAfQ=
|
||||
github.com/creack/pty v1.1.9/go.mod h1:oKZEueFk5CKHvIhNR5MUki03XCEU+Q6VDXinZuGJ33E=
|
||||
|
@ -6,6 +8,10 @@ github.com/davecgh/go-spew v1.1.1 h1:vj9j/u1bqnvCEfJOwUhtlOARqs3+rkHYY13jYWTU97c
|
|||
github.com/davecgh/go-spew v1.1.1/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38=
|
||||
github.com/go-sql-driver/mysql v1.7.0 h1:ueSltNNllEqE3qcWBTD0iQd3IpL/6U+mJxLkazJ7YPc=
|
||||
github.com/go-sql-driver/mysql v1.7.0/go.mod h1:OXbVy3sEdcQ2Doequ6Z5BW6fXNQTmx+9S1MCJN5yJMI=
|
||||
github.com/golang/snappy v0.0.1 h1:Qgr9rKW7uDUkrbSmQeiDsGa8SjGyCOGtuasMWwvp2P4=
|
||||
github.com/golang/snappy v0.0.1/go.mod h1:/XxbfmMg8lxefKM7IXC3fBNl/7bRcc72aCRzEWrmP2Q=
|
||||
github.com/google/uuid v1.6.0 h1:NIvaJDMOsjHA8n1jAhLSgzrAzy1Hgr+hNrb57e+94F0=
|
||||
github.com/google/uuid v1.6.0/go.mod h1:TIyPZe4MgqvfeYDBFedMoGGpEw/LqOeaOT+nhxU+yHo=
|
||||
github.com/jinzhu/inflection v1.0.0 h1:K317FqzuhWc8YvSVlFMCCUb36O/S9MCKRDI7QkRKD/E=
|
||||
github.com/jinzhu/inflection v1.0.0/go.mod h1:h+uFLlag+Qp1Va5pdKtLDYj+kHp5pxUVkryuEj+Srlc=
|
||||
github.com/jinzhu/now v1.1.5 h1:/o9tlHleP7gOFmsnYNz3RGnqzefHA47wQpKrrdTIwXQ=
|
||||
|
@ -17,6 +23,10 @@ github.com/kr/text v0.1.0/go.mod h1:4Jbv+DJW3UT/LiOwJeYQe1efqtUx/iVham/4vfdArNI=
|
|||
github.com/kr/text v0.2.0/go.mod h1:eLer722TekiGuMkidMxC/pM04lWEeraHUUmBw8l2grE=
|
||||
github.com/modern-go/reflect2 v1.0.2 h1:xBagoLtFs94CBntxluKeaWgTMpvLxC4ur3nMaC9Gz0M=
|
||||
github.com/modern-go/reflect2 v1.0.2/go.mod h1:yWuevngMOJpCy52FWWMvUC8ws7m/LJsjYzDa0/r8luk=
|
||||
github.com/nsqio/go-nsq v1.1.0 h1:PQg+xxiUjA7V+TLdXw7nVrJ5Jbl3sN86EhGCQj4+FYE=
|
||||
github.com/nsqio/go-nsq v1.1.0/go.mod h1:vKq36oyeVXgsS5Q8YEO7WghqidAVXQlcFxzQbQTuDEY=
|
||||
github.com/pkg/errors v0.9.1 h1:FEBLx1zS214owpjy7qsBeixbURkuhQAwrK5UwLGTwt4=
|
||||
github.com/pkg/errors v0.9.1/go.mod h1:bwawxfHBFNV+L2hUp1rHADufV3IMtnDRdf1r5NINEl0=
|
||||
github.com/pmezard/go-difflib v1.0.0 h1:4DBwDE0NGyQoBHbLQYPwSUPoCMWR5BEzIk/f1lZbAQM=
|
||||
github.com/pmezard/go-difflib v1.0.0/go.mod h1:iKH77koFhYxTK1pcRnkKkqfTogsbg7gZNVY4sRDYZ/4=
|
||||
github.com/rogpeppe/go-internal v1.6.1/go.mod h1:xXDCJY+GAPziupqXw64V24skbSoqbTEfhy4qGm1nDQc=
|
||||
|
@ -24,8 +34,9 @@ github.com/sirupsen/logrus v1.9.3 h1:dueUQJ1C2q9oE3F7wvmSGAaVtTmUizReu6fjN8uqzbQ
|
|||
github.com/sirupsen/logrus v1.9.3/go.mod h1:naHLuLoDiP4jHNo9R0sCBMtWGeIprob74mVsIT4qYEQ=
|
||||
github.com/stretchr/objx v0.1.0/go.mod h1:HFkY916IF+rwdDfMAkV7OtwuqBVzrE8GR6GFx+wExME=
|
||||
github.com/stretchr/testify v1.7.0/go.mod h1:6Fq8oRcR53rry900zMqJjRRixrwX3KX962/h/Wwjteg=
|
||||
github.com/stretchr/testify v1.7.1 h1:5TQK59W5E3v0r2duFAb7P95B6hEeOyEnHRa8MjYSMTY=
|
||||
github.com/stretchr/testify v1.7.1/go.mod h1:6Fq8oRcR53rry900zMqJjRRixrwX3KX962/h/Wwjteg=
|
||||
github.com/stretchr/testify v1.8.4 h1:CcVxjf3Q8PM0mHUKJCdn+eZZtm5yQwehR5yeSVQQcUk=
|
||||
github.com/stretchr/testify v1.8.4/go.mod h1:sz/lmYIOXD/1dqDmKjjqLyZ2RngseejIcXlSw2iwfAo=
|
||||
github.com/zc2638/swag v1.5.1 h1:T/PyvMTXOxCRIakSpD7Ed4uICW4PM16JdPsS+3dJbKU=
|
||||
github.com/zc2638/swag v1.5.1/go.mod h1:AjyTDUHzZZ4mctSNLEZVD5jWQHFGDJlaCR5XjDm46aE=
|
||||
golang.org/x/sys v0.0.0-20220715151400-c0bba94af5f8 h1:0A+M6Uqn+Eje4kHMK80dtF3JCXC4ykBgQG4Fe06QRhQ=
|
||||
|
|
|
@ -1,11 +1,13 @@
|
|||
package app
|
||||
|
||||
import (
|
||||
"context"
|
||||
"flag"
|
||||
"os"
|
||||
"os/signal"
|
||||
"syscall"
|
||||
|
||||
cml04eventer "git.espin.casa/albert/cml04-eventer"
|
||||
"git.espin.casa/albert/cml04-mediciones-service/internal/logging"
|
||||
"git.espin.casa/albert/cml04-mediciones-service/internal/server"
|
||||
"git.espin.casa/albert/cml04-mediciones-service/internal/service"
|
||||
|
@ -13,6 +15,10 @@ import (
|
|||
"git.espin.casa/albert/logger"
|
||||
)
|
||||
|
||||
const (
|
||||
Topic string = "SAP_IN"
|
||||
)
|
||||
|
||||
func Run() error {
|
||||
// flags
|
||||
bindAddr := flag.String("bind-addr", ":3000", "http rest api bind address")
|
||||
|
@ -21,6 +27,8 @@ func Run() error {
|
|||
dbHost := flag.String("db-host", "192.168.1.10", "database host server")
|
||||
dbPort := flag.String("db-port", "3306", "database host port")
|
||||
dbName := flag.String("db-name", "mediciones", "database name")
|
||||
nsqHost := flag.String("nsq-host", "10.1.152.13", "NSQ host")
|
||||
nsqPort := flag.Int("nsq-port", 4150, "NSQ port")
|
||||
logLevel := flag.String("level", "debug", "Log level")
|
||||
// parse flags
|
||||
flag.Parse()
|
||||
|
@ -28,6 +36,11 @@ func Run() error {
|
|||
logFields := logger.LogFields{
|
||||
"bind_address": *bindAddr,
|
||||
"log_level": *logLevel,
|
||||
"db_host": *dbHost,
|
||||
"db_port": *dbPort,
|
||||
"db_name": *dbName,
|
||||
"nsq_host": *nsqHost,
|
||||
"nsq_port": *nsqPort,
|
||||
}
|
||||
// setup logger
|
||||
log := logger.New(os.Stdout, *logLevel)
|
||||
|
@ -43,12 +56,45 @@ func Run() error {
|
|||
log.Error("create storage failed", err, logFields)
|
||||
return err
|
||||
}
|
||||
// create subscriber
|
||||
subscriber, err := cml04eventer.NewSubscriber(&cml04eventer.SubscriberConfig{
|
||||
NSQAddress: *nsqHost,
|
||||
NSQPort: *nsqPort,
|
||||
Unmarshaler: cml04eventer.JSONMarshaler{},
|
||||
Channel: "CML04-MEDICIONES",
|
||||
}, log)
|
||||
// handle error
|
||||
if err != nil {
|
||||
log.Error("create subscriber failed", err, logFields)
|
||||
return err
|
||||
}
|
||||
// close subscriber graceful
|
||||
defer subscriber.Close()
|
||||
// create service
|
||||
svc := service.NewService(storage)
|
||||
// create logging service
|
||||
svc = logging.NewLoggingService(log, svc)
|
||||
// create server
|
||||
server := server.NewServer(*bindAddr, svc)
|
||||
// create context
|
||||
ctx, cancel := context.WithCancel(context.Background())
|
||||
defer cancel()
|
||||
// subscribe event bus
|
||||
eventChann, err := subscriber.SubscribeEvent(ctx, Topic)
|
||||
// handle error
|
||||
if err != nil {
|
||||
log.Error("subscribe event failed", err, logFields)
|
||||
return err
|
||||
}
|
||||
// process incoming events
|
||||
go func() {
|
||||
for event := range eventChann {
|
||||
if err := svc.ProcessEvent(ctx, event); err != nil {
|
||||
log.Error("process event has been failed", err, logFields)
|
||||
continue
|
||||
}
|
||||
}
|
||||
}()
|
||||
// start server
|
||||
server.Start()
|
||||
// info banner
|
||||
|
|
|
@ -4,6 +4,7 @@ import (
|
|||
"context"
|
||||
"time"
|
||||
|
||||
cml04eventer "git.espin.casa/albert/cml04-eventer"
|
||||
"git.espin.casa/albert/cml04-mediciones-service/internal/service"
|
||||
"git.espin.casa/albert/cml04-mediciones-service/internal/types"
|
||||
"git.espin.casa/albert/logger"
|
||||
|
@ -14,6 +15,21 @@ type LoggingService struct {
|
|||
next service.IService
|
||||
}
|
||||
|
||||
// ProcessEvent implements service.IService.
|
||||
func (svc *LoggingService) ProcessEvent(ctx context.Context, event *cml04eventer.Event) (err error) {
|
||||
defer func(start time.Time) {
|
||||
logFields := logger.LogFields{
|
||||
"took": time.Since(start),
|
||||
}
|
||||
if err != nil {
|
||||
svc.log.Error("process event failed", err, logFields)
|
||||
} else {
|
||||
svc.log.Info("process event success", logFields)
|
||||
}
|
||||
}(time.Now())
|
||||
return svc.next.ProcessEvent(ctx, event)
|
||||
}
|
||||
|
||||
// CreateTolerance implements service.IService.
|
||||
func (svc *LoggingService) CreateTolerance(ctx context.Context, req types.CreateToleranceReq) (res types.CreateToleranceRes, err error) {
|
||||
defer func(start time.Time) {
|
||||
|
|
|
@ -2,8 +2,10 @@ package service
|
|||
|
||||
import (
|
||||
"context"
|
||||
"os"
|
||||
"time"
|
||||
|
||||
cml04eventer "git.espin.casa/albert/cml04-eventer"
|
||||
"git.espin.casa/albert/cml04-mediciones-service/internal/storage"
|
||||
"git.espin.casa/albert/cml04-mediciones-service/internal/types"
|
||||
)
|
||||
|
@ -11,10 +13,27 @@ import (
|
|||
type IService interface {
|
||||
CreateTolerance(ctx context.Context, req types.CreateToleranceReq) (res types.CreateToleranceRes, err error)
|
||||
GetTolerance(ctx context.Context, req types.GetToleranciaReq) (res types.GetToleranciaRes, err error)
|
||||
ProcessEvent(ctx context.Context, event *cml04eventer.Event) error
|
||||
}
|
||||
|
||||
type service struct {
|
||||
storage storage.IStorage
|
||||
file *os.File
|
||||
}
|
||||
|
||||
// ProcessEvent implements IService.
|
||||
func (s *service) ProcessEvent(ctx context.Context, event *cml04eventer.Event) error {
|
||||
// get event message subject
|
||||
subject, err := event.EventMeta.Get("subject")
|
||||
// handle error
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
switch subject {
|
||||
case "sap.in.telegramas.z_sms_10001": // Production order telegram
|
||||
|
||||
}
|
||||
return nil
|
||||
}
|
||||
|
||||
// CreateTolerance implements IService.
|
||||
|
@ -44,7 +63,12 @@ func (s *service) GetTolerance(ctx context.Context, req types.GetToleranciaReq)
|
|||
}
|
||||
|
||||
func NewService(storage storage.IStorage) IService {
|
||||
f, err := os.Create("events.dat")
|
||||
if err != nil {
|
||||
panic(err)
|
||||
}
|
||||
return &service{
|
||||
storage: storage,
|
||||
file: f,
|
||||
}
|
||||
}
|
||||
|
|
|
@ -46,7 +46,10 @@ func (s *storage) GetProductTolerance(ctx context.Context, product string) (type
|
|||
}
|
||||
|
||||
func AutoMigrate(db *gorm.DB) error {
|
||||
return db.AutoMigrate(&types.Tolerancia{})
|
||||
return db.AutoMigrate(
|
||||
&types.Tolerancia{},
|
||||
&types.OrdenFabricacion{},
|
||||
)
|
||||
}
|
||||
|
||||
func NewStorage(config *StorageConfig) (IStorage, error) {
|
||||
|
|
|
@ -2,6 +2,6 @@ package types
|
|||
|
||||
import "gorm.io/gorm"
|
||||
|
||||
type Vigas struct {
|
||||
type Mediciones struct {
|
||||
gorm.Model
|
||||
}
|
|
@ -0,0 +1,149 @@
|
|||
package types
|
||||
|
||||
import (
|
||||
"time"
|
||||
|
||||
"gorm.io/gorm"
|
||||
)
|
||||
|
||||
type OrdenFabricacion struct {
|
||||
Inst string
|
||||
DateTime string
|
||||
POrderNo int
|
||||
SchedulNo int
|
||||
SeqNumber int
|
||||
PptimeWfc string
|
||||
PptimeMsc string
|
||||
SteelGrad string
|
||||
ITemp string
|
||||
IHeight string
|
||||
IWidth string
|
||||
ISection string
|
||||
HeatingSt int
|
||||
FTarTemp string
|
||||
FSection string
|
||||
FSectType string
|
||||
TotWeight string
|
||||
TBeamBla int
|
||||
TCustOrd int
|
||||
TestLen int
|
||||
PostFlag string
|
||||
ModuloX string
|
||||
OvWTolU string
|
||||
OvWTolL string
|
||||
OvHTolU string
|
||||
OvHTolL string
|
||||
WeTTolU string
|
||||
WeTTolL string
|
||||
WeHTolU string
|
||||
WeHTolL string
|
||||
FlWDsU string
|
||||
FlWDsL string
|
||||
FlWOsU string
|
||||
FlWOsL string
|
||||
WeMetTU string
|
||||
WeMetTL string
|
||||
WeCenTol string
|
||||
WeSquTol string
|
||||
FlParTol string
|
||||
BdRollID string
|
||||
UrRollID string
|
||||
EdRollID string
|
||||
UfRollID string
|
||||
SmRollID string
|
||||
Grupo6 string
|
||||
StName string
|
||||
StWeighM string
|
||||
StLen1 string
|
||||
StLen2 string
|
||||
StLen3 string
|
||||
StLen4 string
|
||||
StLen5 string
|
||||
StLen6 string
|
||||
StLen7 string
|
||||
StLen8 string
|
||||
StLen9 string
|
||||
StLen10 string
|
||||
StLen11 string
|
||||
StLen12 string
|
||||
Marfab int
|
||||
Sortb string
|
||||
CreatedAt time.Time
|
||||
UpdatedAt time.Time
|
||||
DeletedAt gorm.DeletedAt `gorm:"index"`
|
||||
}
|
||||
|
||||
func (o *OrdenFabricacion) BeforeCreate(tx *gorm.DB) (err error) {
|
||||
o.CreatedAt = time.Now()
|
||||
o.UpdatedAt = time.Now()
|
||||
return
|
||||
}
|
||||
|
||||
func (o *OrdenFabricacion) BeforeUpdate(tx *gorm.DB) (err error) {
|
||||
o.UpdatedAt = time.Now()
|
||||
return
|
||||
}
|
||||
|
||||
type T10001 struct {
|
||||
Inst string `json:"INST"`
|
||||
DateTime string `json:"DATE_TIME"`
|
||||
POrderNo int `json:"P_ORDER_NO"`
|
||||
SchedulNo int `json:"SCHEDUL_NO"`
|
||||
SeqNumber int `json:"SEQ_NUMBER"`
|
||||
PptimeWfc string `json:"PPTIME_WFC"`
|
||||
PptimeMsc string `json:"PPTIME_MSC"`
|
||||
SteelGrad string `json:"STEEL_GRAD"`
|
||||
ITemp string `json:"I_TEMP"`
|
||||
IHeight string `json:"I_HEIGHT"`
|
||||
IWidth string `json:"I_WIDTH"`
|
||||
ISection string `json:"I_SECTION"`
|
||||
HeatingSt int `json:"HEATING_ST"`
|
||||
FTarTemp string `json:"F_TAR_TEMP"`
|
||||
FSection string `json:"F_SECTION"`
|
||||
FSectType string `json:"F_SECT_TYPE"`
|
||||
TotWeight string `json:"TOT_WEIGHT"`
|
||||
TBeamBla int `json:"T_BEAM_BLA"`
|
||||
TCustOrd int `json:"T_CUST_ORD"`
|
||||
TestLen int `json:"TEST_LEN"`
|
||||
PostFlag string `json:"POST_FLAG"`
|
||||
ModuloX string `json:"MODULO_X"`
|
||||
OvWTolU string `json:"OV_W_TOL_U"`
|
||||
OvWTolL string `json:"OV_W_TOL_L"`
|
||||
OvHTolU string `json:"OV_H_TOL_U"`
|
||||
OvHTolL string `json:"OV_H_TOL_L"`
|
||||
WeTTolU string `json:"WE_T_TOL_U"`
|
||||
WeTTolL string `json:"WE_T_TOL_L"`
|
||||
WeHTolU string `json:"WE_H_TOL_U"`
|
||||
WeHTolL string `json:"WE_H_TOL_L"`
|
||||
FlWDsU string `json:"FL_W_DS_U"`
|
||||
FlWDsL string `json:"FL_W_DS_L"`
|
||||
FlWOsU string `json:"FL_W_OS_U"`
|
||||
FlWOsL string `json:"FL_W_OS_L"`
|
||||
WeMetTU string `json:"WE_MET_T_U"`
|
||||
WeMetTL string `json:"WE_MET_T_L"`
|
||||
WeCenTol string `json:"WE_CEN_TOL"`
|
||||
WeSquTol string `json:"WE_SQU_TOL"`
|
||||
FlParTol string `json:"FL_PAR_TOL"`
|
||||
BdRollID string `json:"BD_ROLL_ID"`
|
||||
UrRollID string `json:"UR_ROLL_ID"`
|
||||
EdRollID string `json:"ED_ROLL_ID"`
|
||||
UfRollID string `json:"UF_ROLL_ID"`
|
||||
SmRollID string `json:"SM_ROLL_ID"`
|
||||
Grupo6 string `json:"GRUPO6"`
|
||||
StName string `json:"ST_NAME"`
|
||||
StWeighM string `json:"ST_WEIGH_M"`
|
||||
StLen1 string `json:"ST_LEN_1"`
|
||||
StLen2 string `json:"ST_LEN_2"`
|
||||
StLen3 string `json:"ST_LEN_3"`
|
||||
StLen4 string `json:"ST_LEN_4"`
|
||||
StLen5 string `json:"ST_LEN_5"`
|
||||
StLen6 string `json:"ST_LEN_6"`
|
||||
StLen7 string `json:"ST_LEN_7"`
|
||||
StLen8 string `json:"ST_LEN_8"`
|
||||
StLen9 string `json:"ST_LEN_9"`
|
||||
StLen10 string `json:"ST_LEN_10"`
|
||||
StLen11 string `json:"ST_LEN_11"`
|
||||
StLen12 string `json:"ST_LEN_12"`
|
||||
Marfab int `json:"MARFAB"`
|
||||
Sortb string `json:"SORTB"`
|
||||
}
|
Loading…
Reference in New Issue