init.go 5.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221
  1. package main
  2. import (
  3. "fmt"
  4. "github.com/xuri/excelize/v2"
  5. util "jygit.jydev.jianyu360.cn/data_processing/common_utils"
  6. "strings"
  7. "github.com/spf13/viper"
  8. "go.uber.org/zap"
  9. "gorm.io/driver/mysql"
  10. "gorm.io/gorm"
  11. "gorm.io/gorm/logger"
  12. "jygit.jydev.jianyu360.cn/data_processing/common_utils/log"
  13. "jygit.jydev.jianyu360.cn/data_processing/common_utils/mongodb"
  14. "os"
  15. "time"
  16. )
  17. func init() {
  18. InitConfig()
  19. InitLog()
  20. InitClickhouse()
  21. InitMgo()
  22. InitMgoQY()
  23. InitMysql()
  24. InitAreaCode()
  25. InitNameNorm() //读取叶子节点标准数据到内存
  26. //InitNorm() //第一次;读取表格文件导入到tidb ;
  27. }
  28. func InitConfig() (err error) {
  29. viper.SetConfigFile("config.toml") // 指定配置文件路径
  30. viper.SetConfigName("config") // 配置文件名称(无扩展名)
  31. viper.SetConfigType("toml") // 如果配置文件的名称中没有扩展名,则需要配置此项
  32. viper.AddConfigPath("./")
  33. viper.AddConfigPath("./conf/") // 还可以在工作目录中查找配置
  34. viper.AddConfigPath("../conf/") // 还可以在工作目录中查找配置
  35. err = viper.ReadInConfig() // 查找并读取配置文件
  36. if err != nil { // 处理读取配置文件的错误
  37. return
  38. }
  39. err = viper.Unmarshal(&GF)
  40. return err
  41. }
  42. func InitLog() {
  43. now := time.Now()
  44. err := log.InitLog(
  45. log.Path(GF.Log.LogPath),
  46. log.Level(GF.Log.LogLevel),
  47. log.Compress(GF.Log.Compress),
  48. log.MaxSize(GF.Log.MaxSize),
  49. log.MaxBackups(GF.Log.MaxBackups),
  50. log.MaxAge(GF.Log.MaxAge),
  51. log.Format(GF.Log.Format),
  52. )
  53. if err != nil {
  54. fmt.Printf("InitLog failed: %v\n", err)
  55. os.Exit(1)
  56. }
  57. log.Info("InitLog", zap.Any("duration", time.Since(now).Seconds()))
  58. }
  59. // InitClickhouse 初始化Clickhouse
  60. func InitClickhouse() {
  61. username := GF.Clickhouse.Username
  62. password := GF.Clickhouse.Password
  63. host := GF.Clickhouse.Host
  64. dbname := GF.Clickhouse.DB
  65. // 测试环境
  66. //host := "192.168.3.207:19000"
  67. //username := "jytop"
  68. //password := "pwdTopJy123"
  69. //dbname := "information"
  70. var err error
  71. ClickHouseConn, err = connectClickhouse(host, username, password, dbname)
  72. if err != nil {
  73. log.Info("InitClickhouse", zap.Error(err))
  74. }
  75. }
  76. // InitMgo 初始化标讯,mixdata.qyxy_std
  77. func InitMgo() {
  78. // qyxy_std 数据
  79. Mgo = &mongodb.MongodbSim{
  80. MongodbAddr: GF.Mongo.Host,
  81. //MongodbAddr: "127.0.0.1:27083",
  82. Size: 10,
  83. DbName: GF.Mongo.DB,
  84. UserName: GF.Mongo.Username,
  85. Password: GF.Mongo.Password,
  86. Direct: GF.Mongo.Direct,
  87. }
  88. Mgo.InitPool()
  89. }
  90. func InitMgoQY() {
  91. //181 凭安库
  92. MgoQY = &mongodb.MongodbSim{
  93. //MongodbAddr: "172.17.4.181:27001",
  94. MongodbAddr: GF.MongoQy.Host,
  95. DbName: GF.MongoQy.DB,
  96. Size: 10,
  97. UserName: GF.MongoQy.Username,
  98. Password: GF.MongoQy.Password,
  99. Direct: GF.MongoQy.Direct,
  100. }
  101. MgoQY.InitPool()
  102. log.Info("InitMgoQY", zap.String("初始化成功", GF.MongoQy.Host))
  103. }
  104. func InitMysql() {
  105. username := GF.Mysql.Username
  106. password := GF.Mysql.Password
  107. host := GF.Mysql.Host // 本地
  108. //host := "172.17.162.27:14000" //线上
  109. database := GF.Mysql.DB
  110. dsn := fmt.Sprintf("%s:%s@tcp(%s)/%s?charset=utf8mb4&parseTime=True&loc=Local", username, password, host, database)
  111. // 连接到数据库
  112. var err error
  113. MysqlDB, err = gorm.Open(mysql.Open(dsn), &gorm.Config{
  114. Logger: logger.Default.LogMode(logger.Error), //不打印日志
  115. })
  116. if err != nil {
  117. log.Info("InitMysql", zap.String("初始化MySQL失败", database), zap.Error(err))
  118. os.Exit(1)
  119. return
  120. } else {
  121. log.Info("InitMysql", zap.String("初始化MySQL成功", database))
  122. }
  123. }
  124. // CodeArea 表示 code_area 数据表的结构体
  125. type CodeArea struct {
  126. ID uint16 `gorm:"primaryKey;autoIncrement;not null"` // id 为主键,自增
  127. Code string `gorm:"size:10;not null;unique"` // code 列,长度 10,唯一
  128. Area string `gorm:"size:45;not null"` // area 列,长度 45,不允许为空
  129. City string `gorm:"size:45"` // city 列,长度 45,可以为空
  130. District string `gorm:"size:45"` // district 列,长度 45,可以为空
  131. Alias string `gorm:"size:10"` // alias 列,长度 10,可以为空
  132. }
  133. // TableName 指定数据库表名
  134. func (CodeArea) TableName() string {
  135. return "code_area"
  136. }
  137. // InitAreaCode 初始化地区code;
  138. func InitAreaCode() {
  139. // 查询所有数据
  140. var codeAreas []CodeArea
  141. MysqlDB.Find(&codeAreas) // 查询所有记录
  142. for _, ca := range codeAreas {
  143. key := ca.Area + "~" + ca.City + "~" + ca.District + "~"
  144. code := ca.Code
  145. RegionCodeData[key] = code
  146. }
  147. }
  148. // InitNorm 初始化叶子节点标准
  149. func InitNorm() {
  150. f, err := excelize.OpenFile("./法人类型代码表.xlsx")
  151. if err != nil {
  152. fmt.Println(err)
  153. return
  154. }
  155. defer func() {
  156. f.Save()
  157. if err := f.Close(); err != nil {
  158. fmt.Println(err)
  159. }
  160. }()
  161. rows, err := f.GetRows("叶子节点")
  162. if err != nil {
  163. fmt.Println(err)
  164. return
  165. }
  166. for i := 1; i < len(rows); i++ {
  167. var code_norm EntInfoNorm
  168. code_norm.Level = util.IntAll(rows[i][0])
  169. code_norm.Code = strings.TrimSpace(rows[i][2])
  170. code_norm.Name = strings.TrimSpace(rows[i][3])
  171. code_norm.AllName = strings.TrimSpace(rows[i][7])
  172. code_norm.Tag = strings.TrimSpace(rows[i][4])
  173. err = MysqlDB.Create(&code_norm).Error
  174. if err != nil {
  175. log.Error("InitNorm", zap.Error(err))
  176. }
  177. }
  178. log.Info("InitNorm", zap.Int("叶子节点读取完毕", len(rows)))
  179. }
  180. func InitNameNorm() {
  181. var list []EntInfoNorm
  182. if err := MysqlDB.Find(&list).Error; err != nil {
  183. // 处理错误
  184. log.Info("InitNameNorm", zap.Error(err))
  185. os.Exit(1)
  186. }
  187. for _, info := range list {
  188. nameNorm[info.Name] = info
  189. }
  190. log.Info("InitNameNorm", zap.Int("nameNorm 初始化完毕", len(list)))
  191. }