This commit is contained in:
albert 2024-04-22 09:16:21 +02:00
parent a3edf9c87e
commit 2d2b08bb3c
9 changed files with 257 additions and 3 deletions

0
events.dat Normal file
View File

5
go.mod
View File

@ -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
View File

@ -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=

View File

@ -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

View File

@ -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) {

View File

@ -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,
}
}

View File

@ -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) {

View File

@ -2,6 +2,6 @@ package types
import "gorm.io/gorm"
type Vigas struct {
type Mediciones struct {
gorm.Model
}

149
internal/types/ordenes.go Normal file
View File

@ -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"`
}