package common import ( "ArmedPolice/app/common/model" "ArmedPolice/config" "ArmedPolice/lib" "ArmedPolice/serve/orm" "ArmedPolice/utils" "fmt" ) type synchronized struct { iModel model.IModel iValues func() interface{} Catch func() interface{} } type caches struct { iModel model.IModel iValues func() interface{} toCache func(values interface{}) } func initModel() { db := orm.GetDB() function := func(synchronized ...*synchronized) { for _, v := range synchronized { if !db.Migrator().HasTable(v.iModel) { _ = db.Migrator().CreateTable(v.iModel) if v.iValues != nil && v.iValues() != nil { db.Table(v.iModel.TableName()).Create(v.iValues()) } } else if v.Catch != nil && v.Catch() != nil { v.Catch() } } } function( &synchronized{iModel: model.NewSysTenant()}, &synchronized{iModel: model.NewSysConfig(), iValues: func() interface{} { values := make([]*model.SysConfig, 0) lib.LoadConfig("./json/sys_config.json", &values) fmt.Println(utils.AnyToJSON(values)) return values }}, &synchronized{iModel: model.NewSysMenu()}, &synchronized{iModel: model.NewSysAuth()}, &synchronized{iModel: model.NewSysUser(), iValues: func() interface{} { return &model.SysUser{Account: "admin", Name: "超级管理员", Mobile: "13888888888", Password: "123456", IsAdmin: model.SysUserAdministratorForAdmin, Remark: "超级管理员"} }}, &synchronized{iModel: model.NewSysRole(), iValues: func() interface{} { values := make([]*model.SysRole, 0) lib.LoadConfig("./json/sys_role.json", &values) return values }}, &synchronized{iModel: model.NewSysRoleMenu()}, &synchronized{iModel: model.NewSysRoleAuth()}, &synchronized{iModel: model.NewSysUserRole()}, // 日志管理 &synchronized{iModel: model.NewSysLog()}, &synchronized{iModel: model.NewSysUserLoginLog()}, &synchronized{iModel: model.NewSysBreakdown()}, // 公告管理 &synchronized{iModel: model.NewManageNotice()}, // 功能信息 &synchronized{iModel: model.NewManageSupplier()}, &synchronized{iModel: model.NewManageSupplierEvaluate()}, &synchronized{iModel: model.NewManageEquipment()}, &synchronized{iModel: model.NewManageEquipmentMaterial()}, &synchronized{iModel: model.NewManageMaterial()}, &synchronized{iModel: model.NewManageMaterialSupplier()}, &synchronized{iModel: model.NewManageMaterialPurchase()}, &synchronized{iModel: model.NewManageMaterialWarehouse()}, &synchronized{iModel: model.NewWorkInstance()}, &synchronized{iModel: model.NewWorkMaterial()}, &synchronized{iModel: model.NewWorkProgress()}, &synchronized{iModel: model.NewWorkSchedule(), iValues: func() interface{} { values := make([]*model.WorkSchedule, 0) lib.LoadConfig("./json/work_schedule.json", &values) return values }}, &synchronized{iModel: model.NewWorkPurchase()}, &synchronized{iModel: model.NewWorkRepair()}, &synchronized{iModel: model.NewWorkRepairDetail()}, ) } func initCacheMode() { db := orm.GetDB() function := func(cache ...*caches) { for _, v := range cache { if db.Migrator().HasTable(v.iModel) { if v.iValues != nil { if values := v.iValues(); values != nil { v.toCache(values) } } } } } function( &caches{iModel: model.NewSysConfig(), iValues: func() interface{} { out := make([]*model.SysConfig, 0) _ = model.Find(model.NewSysConfig(), &out) return out }, toCache: func(values interface{}) { out := values.([]*model.SysConfig) for _, v := range out { config.SystemConfig[v.Key] = v.Value } }}, ) } func Init() { if *config.Init { initModel() } initCacheMode() }