yinbentan
2024-07-25 a904aa32e66688ba76c9e4b71b6738b0ba5f5d4f
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
package models
 
import (
    "fmt"
    "gorm.io/gorm/schema"
    "silkserver/conf"
    "silkserver/extend/util"
    "silkserver/pkg/logx"
    "silkserver/pkg/mysqlx"
    "silkserver/pkg/snowflake"
 
    "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 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(
        Dict{},
        FinenessRegister{},
        FinenessItem{},
        FinenessCheck{},
        FinenessCheckItem{},
        RawSilkPriceStandard{},
        RawSilkRankStandard{},
        WorkshopManage{},
        YieldRegister{},
        YieldRegisterItem{},
        YieldRegisterCircle{},
        Worker{},
        WorkTypeManage{},
        SalaryPlan{},
        Mentor{},
        AttendanceManage{},
        WorkerPosition{},
        AttendanceRule{},
        SalaryReportForm{},
        SalaryDetails{},
        Lock{},
    )
    return err
}
 
type InitDefaultData interface {
    InitDefaultData() error
}
 
func InsertDefaultData() {
    models := []interface{}{
        NewAttendanceRuleSearch(),
    }
    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())
            }
        }
    }
}