package models import ( "fmt" "gorm.io/gorm/schema" "strconv" "time" "wms/conf" "wms/extend/util" "wms/pkg/logx" "wms/pkg/mysqlx" "wms/pkg/snowflake" "wms/proto/code" "gorm.io/gorm" ) type BaseModelInt struct { ID uint `gorm:"comment:主键ID;primaryKey;" json:"id"` CreatedAt util.JSONTime `gorm:"index;comment:创建时间" json:"createdAt,omitempty" swaggerignore:"true"` UpdatedAt util.JSONTime `gorm:"comment:更新时间" json:"updatedAt,omitempty" swaggerignore:"true"` } type BaseModelString struct { ID string `gorm:"comment:主键ID;primaryKey;type:varchar(191);" json:"id"` CreatedAt util.JSONTime `gorm:"index;comment:创建时间" json:"createdAt,omitempty" swaggerignore:"true"` UpdatedAt util.JSONTime `gorm:"comment:更新时间" json:"updatedAt,omitempty" swaggerignore:"true"` } func (b *BaseModelString) BeforeCreate(tx *gorm.DB) (err error) { if b.ID == "" { b.ID = snowflake.GenerateIdStr() } return } func WithTransaction(fns ...func(*gorm.DB) error) error { var err error tx := mysqlx.GetDB().Begin() defer func() { if r := recover(); r != nil { tx.Rollback() return } else if err == nil { tx.Commit() return } }() for _, fn := range fns { err = fn(tx) if err != nil { tx.Rollback() return err } } return nil } func GetAutoCode(id int, codeStandard *code.CodeStandard) string { autoCode := "" var prefixValue string if codeStandard.AutoRule.PrefixMethod == 2 { // 来源单据 prefixValue = "" } else { // 固定值 prefixValue = codeStandard.AutoRule.PrefixValue } strMaxAutoIncr := strconv.Itoa(id + 1) count := int(codeStandard.AutoRule.AutoLength) - len(strMaxAutoIncr) for i := 0; i < count; i++ { strMaxAutoIncr = "0" + strMaxAutoIncr } var suffixValue string if codeStandard.AutoRule.SuffixMethod == 2 { // 年月日+自增长 suffixValue = fmt.Sprintf("%v%v", time.Now().Format("20060102"), strMaxAutoIncr) } else { // 自增长 suffixValue = strMaxAutoIncr } autoCode = prefixValue + suffixValue return autoCode } func Init() error { fmt.Printf("dsn=%v\n", conf.DbConf.Dsn) if err := mysqlx.Init(conf.DbConf, logx.GetLogger()); err != nil { return err } if err := RegisterTables(); err != nil { return err } InsertDefaultData() return nil } func RegisterTables() error { db := mysqlx.GetDB() err := db.AutoMigrate( Company{}, Warehouse{}, OperationType{}, Location{}, OperationType{}, Operation{}, OperationDetails{}, Scrap{}, ProductCategory{}, Material{}, LocationProduct{}, LocationProductAmount{}, ReorderRule{}, Attachment{}, LogisticCompany{}, FileTemplateAttachment{}, MoveHistory{}, Lock{}, MonthStats{}, Attribute{}, AttributeValue{}, SystemConfig{}, WarehouseMonthStats{}, WarehouseStatsItems{}, ) return err } type InitDefaultData interface { InitDefaultData() error } func InsertDefaultData() { models := []interface{}{ NewLocationSearch(), } for _, model := range models { if id, ok := model.(InitDefaultData); ok { if err := id.InitDefaultData(); err != nil { logx.Errorf("InitDefaultData for table: %v, err :%v", model.(schema.Tabler).TableName(), err.Error()) } } } }