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{},
|
)
|
return err
|
}
|
|
type InitDefaultData interface {
|
InitDefaultData() error
|
}
|
|
func InsertDefaultData() {
|
models := []interface{}{
|
NewDepartmentSearch(),
|
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())
|
}
|
}
|
}
|
}
|