package main import ( "fmt" "strings" "github.com/xuri/excelize/v2" util "jygit.jydev.jianyu360.cn/data_processing/common_utils" "os" "time" "github.com/spf13/viper" "go.uber.org/zap" "gorm.io/driver/mysql" "gorm.io/gorm" "gorm.io/gorm/logger" "jygit.jydev.jianyu360.cn/data_processing/common_utils/log" "jygit.jydev.jianyu360.cn/data_processing/common_utils/mongodb" ) func init() { InitConfig() InitLog() InitClickhouse() InitMgo() InitMgoQY() InitMysql() InitAreaCode() InitNameNorm() //读取叶子节点标准数据到内存 //InitNorm() //第一次;读取表格文件导入到tidb ; } func InitConfig() (err error) { viper.SetConfigFile("config.toml") // 指定配置文件路径 viper.SetConfigName("config") // 配置文件名称(无扩展名) viper.SetConfigType("toml") // 如果配置文件的名称中没有扩展名,则需要配置此项 viper.AddConfigPath("./") viper.AddConfigPath("./conf/") // 还可以在工作目录中查找配置 viper.AddConfigPath("../conf/") // 还可以在工作目录中查找配置 err = viper.ReadInConfig() // 查找并读取配置文件 if err != nil { // 处理读取配置文件的错误 return } err = viper.Unmarshal(&GF) return err } func InitLog() { now := time.Now() err := log.InitLog( log.Path(GF.Log.LogPath), log.Level(GF.Log.LogLevel), log.Compress(GF.Log.Compress), log.MaxSize(GF.Log.MaxSize), log.MaxBackups(GF.Log.MaxBackups), log.MaxAge(GF.Log.MaxAge), log.Format(GF.Log.Format), ) if err != nil { fmt.Printf("InitLog failed: %v\n", err) os.Exit(1) } log.Info("InitLog", zap.Any("duration", time.Since(now).Seconds())) } // InitClickhouse 初始化Clickhouse func InitClickhouse() { username := GF.Clickhouse.Username password := GF.Clickhouse.Password host := GF.Clickhouse.Host dbname := GF.Clickhouse.DB // 测试环境 //host := "192.168.3.207:19000" //username := "jytop" //password := "pwdTopJy123" //dbname := "information" var err error ClickHouseConn, err = connectClickhouse(host, username, password, dbname) if err != nil { log.Info("InitClickhouse", zap.Error(err)) } } // InitMgo 初始化标讯,mixdata.qyxy_std func InitMgo() { // qyxy_std 数据 Mgo = &mongodb.MongodbSim{ MongodbAddr: GF.Mongo.Host, //MongodbAddr: "127.0.0.1:27083", Size: 10, DbName: GF.Mongo.DB, UserName: GF.Mongo.Username, Password: GF.Mongo.Password, Direct: GF.Mongo.Direct, } Mgo.InitPool() } func InitMgoQY() { //181 凭安库 MgoQY = &mongodb.MongodbSim{ //MongodbAddr: "172.17.4.181:27001", MongodbAddr: GF.MongoQy.Host, DbName: GF.MongoQy.DB, Size: 10, UserName: GF.MongoQy.Username, Password: GF.MongoQy.Password, Direct: GF.MongoQy.Direct, } MgoQY.InitPool() log.Info("InitMgoQY", zap.String("初始化成功", GF.MongoQy.Host)) } func InitMysql() { username := GF.Mysql.Username password := GF.Mysql.Password host := GF.Mysql.Host // 本地 //host := "172.17.162.27:14000" //线上 database := GF.Mysql.DB dsn := fmt.Sprintf("%s:%s@tcp(%s)/%s?charset=utf8mb4&parseTime=True&loc=Local", username, password, host, database) // 连接到数据库 var err error MysqlDB, err = gorm.Open(mysql.Open(dsn), &gorm.Config{ Logger: logger.Default.LogMode(logger.Error), //不打印日志 }) if err != nil { log.Info("InitMysql", zap.String("初始化MySQL失败", database), zap.Error(err)) os.Exit(1) return } else { log.Info("InitMysql", zap.String("初始化MySQL成功", database)) } } // CodeArea 表示 code_area 数据表的结构体 type CodeArea struct { ID uint16 `gorm:"primaryKey;autoIncrement;not null"` // id 为主键,自增 Code string `gorm:"size:10;not null;unique"` // code 列,长度 10,唯一 Area string `gorm:"size:45;not null"` // area 列,长度 45,不允许为空 City string `gorm:"size:45"` // city 列,长度 45,可以为空 District string `gorm:"size:45"` // district 列,长度 45,可以为空 Alias string `gorm:"size:10"` // alias 列,长度 10,可以为空 } // TableName 指定数据库表名 func (CodeArea) TableName() string { return "code_area" } // InitAreaCode 初始化地区code; func InitAreaCode() { // 查询所有数据 var codeAreas []CodeArea MysqlDB.Find(&codeAreas) // 查询所有记录 for _, ca := range codeAreas { key := ca.Area + "~" + ca.City + "~" + ca.District + "~" code := ca.Code RegionCodeData[key] = code } } // InitNorm 初始化叶子节点标准 func InitNorm() { f, err := excelize.OpenFile("./法人类型代码表.xlsx") if err != nil { fmt.Println(err) return } defer func() { f.Save() if err := f.Close(); err != nil { fmt.Println(err) } }() rows, err := f.GetRows("叶子节点") if err != nil { fmt.Println(err) return } for i := 1; i < len(rows); i++ { var code_norm EntInfoNorm code_norm.Level = util.IntAll(rows[i][0]) code_norm.Code = strings.TrimSpace(rows[i][2]) code_norm.Name = strings.TrimSpace(rows[i][3]) code_norm.AllName = strings.TrimSpace(rows[i][7]) code_norm.Tag = strings.TrimSpace(rows[i][4]) code_norm.Tag2 = strings.TrimSpace(rows[i][6]) err = MysqlDB.Create(&code_norm).Error if err != nil { log.Error("InitNorm", zap.Error(err)) } } log.Info("InitNorm", zap.Int("叶子节点读取完毕", len(rows))) } func InitNameNorm() { var list []EntInfoNorm if err := MysqlDB.Find(&list).Error; err != nil { // 处理错误 log.Info("InitNameNorm", zap.Error(err)) os.Exit(1) } for _, info := range list { nameNorm[info.Name] = info } log.Info("InitNameNorm", zap.Int("nameNorm 初始化完毕", len(list))) }