123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222 |
- package main
- import (
- "context"
- "fmt"
- "github.com/spf13/viper"
- "go.uber.org/zap"
- "gorm.io/driver/mysql"
- "gorm.io/gorm"
- "gorm.io/gorm/logger"
- es "jygit.jydev.jianyu360.cn/data_processing/common_utils/elastic"
- "jygit.jydev.jianyu360.cn/data_processing/common_utils/log"
- "jygit.jydev.jianyu360.cn/data_processing/common_utils/mongodb"
- "os"
- "time"
- )
- func init() {
- InitConfig()
- InitLog()
- InitClickhouse()
- InitEs()
- //
- InitMgo()
- InitMgoQY()
- InitMysql()
- InitAreaCode()
- InitLabels() //初始化获取标签和对应bitmap站位
- }
- 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 InitEs() {
- if GF.Esa.URL != "" {
- Esa = &es.Elastic{
- S_esurl: GF.Esa.URL,
- I_size: 5,
- Username: GF.Esa.Username,
- Password: GF.Esa.Password,
- }
- Esa.InitElasticSize()
- }
- if GF.Esb.URL != "" {
- Esb = &es.Elastic{
- S_esurl: GF.Esb.URL,
- I_size: 5,
- Username: GF.Esb.Username,
- Password: GF.Esb.Password,
- }
- Esb.InitElasticSize()
- }
- }
- 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"
- ClickHouseConn, _ = connectClickhouse(host, username, password, dbname)
- }
- // 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 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))
- 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
- }
- }
- 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))
- }
- // InitLabels 获取现有设计好的标签以及对应bitmap 占位
- func InitLabels() {
- log.Info("getLabels", zap.String("开始处理标签", "-------"))
- type entLabel struct {
- LabelName string
- BitmapNum uint64
- }
- ctx := context.Background()
- sql := `
- SELECT label_name,bitmap_num FROM ent_label
- `
- rows, err := ClickHouseConn.Query(ctx, sql)
- if err != nil {
- log.Info("getLabels", zap.Error(err))
- }
- // 遍历结果集
- for rows.Next() {
- var label entLabel
- // 将当前行的值扫描到结构体中
- err = rows.Scan(&label.LabelName, &label.BitmapNum)
- if err != nil {
- log.Info("getLabels", zap.Error(err))
- continue
- }
- entLabelMap[label.BitmapNum] = label.LabelName
- nameBitMap[label.LabelName] = label.BitmapNum
- }
- // 检查是否有任何错误
- if err = rows.Err(); err != nil {
- log.Info("getLabels", zap.Error(err))
- }
- log.Info("getLabels", zap.String("标签处理完毕", "-------"))
- }
|