kra/internal/source/system/dictionary_detail.go

135 lines
5.7 KiB
Go

package system
import (
"context"
"fmt"
"kra/internal/biz/system"
"kra/internal/data/model"
"github.com/pkg/errors"
"gorm.io/gorm"
)
const initOrderDictDetail = initOrderDict + 1
type initDictDetail struct{}
func NewInitDictDetail() system.SubInitializer {
return &initDictDetail{}
}
func (i *initDictDetail) MigrateTable(ctx context.Context) (context.Context, error) {
db, ok := ctx.Value("db").(*gorm.DB)
if !ok {
return ctx, system.ErrMissingDBContext
}
return ctx, db.AutoMigrate(&model.SysDictionaryDetail{})
}
func (i *initDictDetail) TableCreated(ctx context.Context) bool {
db, ok := ctx.Value("db").(*gorm.DB)
if !ok {
return false
}
return db.Migrator().HasTable(&model.SysDictionaryDetail{})
}
func (i *initDictDetail) InitializerName() string {
return model.TableNameSysDictionaryDetail
}
func (i *initDictDetail) InitializeData(ctx context.Context) (context.Context, error) {
db, ok := ctx.Value("db").(*gorm.DB)
if !ok {
return ctx, system.ErrMissingDBContext
}
dicts, ok := ctx.Value(model.TableNameSysDictionary).([]model.SysDictionary)
if !ok {
return ctx, errors.Wrap(system.ErrMissingDependentContext,
fmt.Sprintf("未找到 %s 表初始化数据", model.TableNameSysDictionary))
}
// 性别字典详情
genderDetails := []model.SysDictionaryDetail{
{Label: "男", Value: "1", Status: true, Sort: 1, SysDictionaryID: dicts[0].ID},
{Label: "女", Value: "2", Status: true, Sort: 2, SysDictionaryID: dicts[0].ID},
}
// int类型字典详情
intDetails := []model.SysDictionaryDetail{
{Label: "smallint", Value: "1", Status: true, Extend: "mysql", Sort: 1, SysDictionaryID: dicts[1].ID},
{Label: "mediumint", Value: "2", Status: true, Extend: "mysql", Sort: 2, SysDictionaryID: dicts[1].ID},
{Label: "int", Value: "3", Status: true, Extend: "mysql", Sort: 3, SysDictionaryID: dicts[1].ID},
{Label: "bigint", Value: "4", Status: true, Extend: "mysql", Sort: 4, SysDictionaryID: dicts[1].ID},
{Label: "int2", Value: "5", Status: true, Extend: "pgsql", Sort: 5, SysDictionaryID: dicts[1].ID},
{Label: "int4", Value: "6", Status: true, Extend: "pgsql", Sort: 6, SysDictionaryID: dicts[1].ID},
{Label: "int6", Value: "7", Status: true, Extend: "pgsql", Sort: 7, SysDictionaryID: dicts[1].ID},
{Label: "int8", Value: "8", Status: true, Extend: "pgsql", Sort: 8, SysDictionaryID: dicts[1].ID},
}
// 时间类型字典详情
timeDetails := []model.SysDictionaryDetail{
{Label: "date", Value: "0", Status: true, Extend: "mysql", Sort: 0, SysDictionaryID: dicts[2].ID},
{Label: "time", Value: "1", Status: true, Extend: "mysql", Sort: 1, SysDictionaryID: dicts[2].ID},
{Label: "year", Value: "2", Status: true, Extend: "mysql", Sort: 2, SysDictionaryID: dicts[2].ID},
{Label: "datetime", Value: "3", Status: true, Extend: "mysql", Sort: 3, SysDictionaryID: dicts[2].ID},
{Label: "timestamp", Value: "5", Status: true, Extend: "mysql", Sort: 5, SysDictionaryID: dicts[2].ID},
{Label: "timestamptz", Value: "6", Status: true, Extend: "pgsql", Sort: 5, SysDictionaryID: dicts[2].ID},
}
// 浮点类型字典详情
floatDetails := []model.SysDictionaryDetail{
{Label: "float", Value: "0", Status: true, Extend: "mysql", Sort: 0, SysDictionaryID: dicts[3].ID},
{Label: "double", Value: "1", Status: true, Extend: "mysql", Sort: 1, SysDictionaryID: dicts[3].ID},
{Label: "decimal", Value: "2", Status: true, Extend: "mysql", Sort: 2, SysDictionaryID: dicts[3].ID},
{Label: "numeric", Value: "3", Status: true, Extend: "pgsql", Sort: 3, SysDictionaryID: dicts[3].ID},
{Label: "smallserial", Value: "4", Status: true, Extend: "pgsql", Sort: 4, SysDictionaryID: dicts[3].ID},
}
// 字符串类型字典详情
stringDetails := []model.SysDictionaryDetail{
{Label: "char", Value: "0", Status: true, Extend: "mysql", Sort: 0, SysDictionaryID: dicts[4].ID},
{Label: "varchar", Value: "1", Status: true, Extend: "mysql", Sort: 1, SysDictionaryID: dicts[4].ID},
{Label: "tinyblob", Value: "2", Status: true, Extend: "mysql", Sort: 2, SysDictionaryID: dicts[4].ID},
{Label: "tinytext", Value: "3", Status: true, Extend: "mysql", Sort: 3, SysDictionaryID: dicts[4].ID},
{Label: "text", Value: "4", Status: true, Extend: "mysql", Sort: 4, SysDictionaryID: dicts[4].ID},
{Label: "blob", Value: "5", Status: true, Extend: "mysql", Sort: 5, SysDictionaryID: dicts[4].ID},
{Label: "mediumblob", Value: "6", Status: true, Extend: "mysql", Sort: 6, SysDictionaryID: dicts[4].ID},
{Label: "mediumtext", Value: "7", Status: true, Extend: "mysql", Sort: 7, SysDictionaryID: dicts[4].ID},
{Label: "longblob", Value: "8", Status: true, Extend: "mysql", Sort: 8, SysDictionaryID: dicts[4].ID},
{Label: "longtext", Value: "9", Status: true, Extend: "mysql", Sort: 9, SysDictionaryID: dicts[4].ID},
}
// bool类型字典详情
boolDetails := []model.SysDictionaryDetail{
{Label: "tinyint", Value: "1", Extend: "mysql", Status: true, SysDictionaryID: dicts[5].ID},
{Label: "bool", Value: "2", Extend: "pgsql", Status: true, SysDictionaryID: dicts[5].ID},
}
// 批量创建所有字典详情
allDetails := append(genderDetails, intDetails...)
allDetails = append(allDetails, timeDetails...)
allDetails = append(allDetails, floatDetails...)
allDetails = append(allDetails, stringDetails...)
allDetails = append(allDetails, boolDetails...)
if err := db.Create(&allDetails).Error; err != nil {
return ctx, errors.Wrap(err, model.TableNameSysDictionaryDetail+"表数据初始化失败!")
}
return ctx, nil
}
func (i *initDictDetail) DataInserted(ctx context.Context) bool {
db, ok := ctx.Value("db").(*gorm.DB)
if !ok {
return false
}
var count int64
if err := db.Model(&model.SysDictionaryDetail{}).Where("label = ?", "tinyint").Count(&count).Error; err != nil {
return false
}
return count > 0
}