package model import ( "fmt" "git.hpds.cc/Component/logging" "github.com/go-redis/redis" _ "github.com/go-sql-driver/mysql" "go.uber.org/zap" "hpds-iot-web/config" "os" "time" "xorm.io/xorm" "xorm.io/xorm/dialects" ) type Statistics struct { Total int64 } var ( DB *xorm.Engine Redis *redis.Client ) func New(driveName, dsn string, showSql bool, logger *logging.Logger) { DB, _ = NewDbConnection(driveName, dsn) DB.ShowSQL(showSql) DB.Dialect().SetQuotePolicy(dialects.QuotePolicyReserved) err := DB.Sync2( &Brand{}, &Dataset{}, &DatasetDetail{}, &DatasetOperationLog{}, &DetectionTask{}, &Device{}, &DeviceType{}, &Disease{}, &DiseaseType{}, &FileManager{}, &Gnss{}, &LabelFile{}, &MatterAttribute{}, &MatterCategory{}, &MatterEvent{}, &MatterEventParams{}, &MatterModel{}, &MatterService{}, &MatterServiceParams{}, &MatterVersion{}, &Model{}, &ModelVersion{}, &MultiLevelPlatform{}, &Node{}, &NodeState{}, &IssueModel{}, &OriginalData{}, &Owner{}, &Project{}, &ProjectResult{}, &SystemMenu{}, &OperationLog{}, &SystemRoleMenu{}, &SystemRoleRoute{}, &SystemRole{}, &SystemUser{}, &SystemUserRole{}, &Task{}, &TaskLog{}, &TaskResult{}, &TrainingDataset{}, &TrainingDatasetDetail{}, &TrainTask{}, &TrainTaskLog{}, &TrainTaskResult{}, ) if err != nil { logger.Error("同步数据库表结构", zap.Error(err)) os.Exit(1) } } func NewDbConnection(driveName, dsn string) (db *xorm.Engine, err error) { db, err = xorm.NewEngine(driveName, dsn) if err != nil { zap.L().Error("创建数据库连接", zap.Error(err)) os.Exit(-1) } db.SetMaxOpenConns(300) return } func NewCache(c config.CacheConfig) { Redis = redis.NewClient(&redis.Options{ Addr: fmt.Sprintf("%s:%d", c.Host, c.Port), Password: c.Pass, // no password set DB: c.DB, // use default DB PoolSize: c.PoolSize, // Redis连接池大小 MaxRetries: 3, // 最大重试次数 IdleTimeout: 10 * time.Second, // 空闲链接超时时间 }) pong, err := Redis.Ping().Result() if err == redis.Nil { zap.L().Error("访问Redis异常", zap.Error(fmt.Errorf("redis.Nil"))) } else if err != nil { zap.L().Error("访问Redis异常", zap.Error(err)) } else { zap.L().Info("Redis连接成功", zap.String("pong", pong)) } } func GetTrainCategory(categoryId int) string { switch categoryId { case 1: return "train" case 2: return "val" case 3: return "test" } return "other" } func GetBizType(categoryId int) string { switch categoryId { case 1: return "道路" case 2: return "桥梁" case 3: return "隧道" case 4: return "边坡" } return "其他" } func GetFileType(categoryId int) string { switch categoryId { case 1: return "图片" case 2: return "视频" case 3: return "雷达图谱" } return "其他" } func GetLabelType(typeId int) string { switch typeId { case 1: return "有病害" case 2: return "无病害" } return "其他分类" }