package model import ( "aps_crm/pkg/mysqlx" "aps_crm/proto/code" "fmt" "gorm.io/gorm" "strconv" "time" ) // WithTransaction : var funcs []func(db *gorm.DB) error,把相关函数添加进去 func WithTransaction(fns ...func(*gorm.DB) error) (err error) { tx := mysqlx.GetDB().Begin() defer func() { if r := recover(); r != nil { tx.Rollback() err = fmt.Errorf("%v", err) } }() for _, fn := range fns { err = fn(tx) if err != nil { tx.Rollback() return } } err = tx.Commit().Error return } 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 }