Browse Source

还原 service_context.go 文件

boweniac 1 week ago
parent
commit
d7c04f4f0e
3 changed files with 64 additions and 4 deletions
  1. 1 0
      go.mod
  2. 2 4
      go.sum
  3. 61 0
      internal/svc/service_context.go

+ 1 - 0
go.mod

@@ -11,6 +11,7 @@ require (
 	github.com/alibabacloud-go/sts-20150401/v2 v2.0.2
 	github.com/alibabacloud-go/tea v1.2.2
 	github.com/alibabacloud-go/tea-utils/v2 v2.0.7
+	github.com/bwmarrin/snowflake v0.3.0
 	github.com/casbin/casbin/v2 v2.85.0
 	github.com/deckarep/golang-set/v2 v2.8.0
 	github.com/go-resty/resty/v2 v2.14.0

+ 2 - 4
go.sum

@@ -118,6 +118,8 @@ github.com/bsm/ginkgo/v2 v2.12.0 h1:Ny8MWAHyOepLGlLKYmXG4IEkioBysk6GpaRTLC8zwWs=
 github.com/bsm/ginkgo/v2 v2.12.0/go.mod h1:SwYbGRRDovPVboqFv0tPTcG1sN61LM1Z4ARdbAV9g4c=
 github.com/bsm/gomega v1.27.10 h1:yeMWxP2pV2fG3FgAODIY8EiRE3dy0aeFYt4l7wh6yKA=
 github.com/bsm/gomega v1.27.10/go.mod h1:JyEr/xRbxbtgWNi8tIEVPUYZ5Dzef52k01W3YH0H+O0=
+github.com/bwmarrin/snowflake v0.3.0 h1:xm67bEhkKh6ij1790JB83OujPR5CzNe8QuQqAgISZN0=
+github.com/bwmarrin/snowflake v0.3.0/go.mod h1:NdZxfVWX+oR6y2K0o6qAYv6gIOP9rjG0/E9WsDpxqwE=
 github.com/casbin/casbin/v2 v2.29.2/go.mod h1:vByNa/Fchek0KZUgG5wEsl7iFsiviAYKRtgrQfcJqHg=
 github.com/casbin/casbin/v2 v2.85.0 h1:VajW9GR/T0fp3SND183gneZGIAdYtl9C7bDYBrqQiGg=
 github.com/casbin/casbin/v2 v2.85.0/go.mod h1:jX8uoN4veP85O/n2674r2qtfSXI6myvxW85f6TH50fw=
@@ -470,7 +472,6 @@ github.com/mattn/go-isatty v0.0.12/go.mod h1:cbi8OIDigv2wuxKPP5vlRcQ1OAZbq2CE4Ky
 github.com/mattn/go-isatty v0.0.16/go.mod h1:kYGgaQfpe5nmfYZH+SKPsOc2e4SrIfOl2e/yFXSvRLM=
 github.com/mattn/go-isatty v0.0.20 h1:xfD0iDuEKnDkl03q4limB+vH+GxLEtL/jb4xVJSWWEY=
 github.com/mattn/go-isatty v0.0.20/go.mod h1:W+V8PltTTMOvKvAeJH7IuucS94S2C6jfK/D7dTCTo3Y=
-github.com/mattn/go-runewidth v0.0.9 h1:Lm995f3rfxdpd6TSmuVCHVb/QhupuXlYr8sCI/QdE+0=
 github.com/mattn/go-runewidth v0.0.9/go.mod h1:H031xJmbD/WCDINGzjvQ9THkh0rPKHF+m2gUSrubnMI=
 github.com/mattn/go-sqlite3 v1.14.6/go.mod h1:NyWgC/yNuGj7Q9rpYnZvas74GogHl5/Z4A/KQRfk6bU=
 github.com/mattn/go-sqlite3 v1.14.8/go.mod h1:NyWgC/yNuGj7Q9rpYnZvas74GogHl5/Z4A/KQRfk6bU=
@@ -509,7 +510,6 @@ github.com/niemeyer/pretty v0.0.0-20200227124842-a10e7caefd8e/go.mod h1:zD1mROLA
 github.com/nxadm/tail v1.4.4 h1:DQuhQpB1tVlglWS2hLQ5OV6B5r8aGxSrPc5Qo6uTN78=
 github.com/nxadm/tail v1.4.4/go.mod h1:kenIhsEOeOJmVchQTgglprH7qJGnHDVpk1VPCcaMI8A=
 github.com/oklog/ulid v1.3.1/go.mod h1:CirwcVhetQ6Lv90oh/F+FBtV6XMibvdAFo93nm5qn4U=
-github.com/olekukonko/tablewriter v0.0.5 h1:P2Ga83D34wi1o9J6Wh1mRuqd4mF/x/lgBS7N7AbDhec=
 github.com/olekukonko/tablewriter v0.0.5/go.mod h1:hPp6KlRPjbx+hW8ykQs1w3UBbZlj6HuIJcUGPhkA7kY=
 github.com/onsi/ginkgo v1.6.0/go.mod h1:lLunBs/Ym6LB5Z9jYTR76FiuTmxDTDusOGeTQH+WWjE=
 github.com/onsi/ginkgo v1.12.1/go.mod h1:zj2OWP4+oCPe1qIXoGWkgMRwljMUYCdkwsT2108oapk=
@@ -611,8 +611,6 @@ github.com/spf13/cast v1.3.0/go.mod h1:Qx5cxh0v+4UWYiBimWS+eyWzqEqokIECu5etghLkU
 github.com/spf13/cast v1.6.0 h1:GEiTHELF+vaR5dhz3VqZfFSzZjYbgeKDpBxQVS4GYJ0=
 github.com/spf13/cast v1.6.0/go.mod h1:ancEpBxwJDODSW/UG4rDrAqiKolqNNh2DX3mk86cAdo=
 github.com/spf13/cobra v1.1.3/go.mod h1:pGADOWyqRD/YMrPZigI/zbliZ2wVD/23d+is3pSWzOo=
-github.com/spf13/cobra v1.7.0 h1:hyqWnYt1ZQShIddO5kBpj3vu05/++x6tJ6dg8EC572I=
-github.com/spf13/cobra v1.7.0/go.mod h1:uLxZILRyS/50WlhOIKD7W6V5bgeIt+4sICxh6uRMrb0=
 github.com/spf13/jwalterweatherman v1.0.0/go.mod h1:cQK4TGJAtQXfYWX+Ddv3mKDzgVb68N+wFjFa4jdeBTo=
 github.com/spf13/pflag v1.0.3/go.mod h1:DYY7MBk1bdzusC3SYhjObp+wFpr4gzcvqqNjLnInEg4=
 github.com/spf13/pflag v1.0.5 h1:iy+VFUOCP1a+8yFto/drg2CJ5u0yRoB7fZw3DKv/JXA=

+ 61 - 0
internal/svc/service_context.go

@@ -1,8 +1,16 @@
 package svc
 
 import (
+	"github.com/bwmarrin/snowflake"
+	"github.com/zeromicro/go-zero/core/collection"
+	"gorm.io/gorm"
+	"time"
+	"wechat-api/database"
+	"wechat-api/database/dao/wechat/query"
 	"wechat-api/internal/config"
 	"wechat-api/internal/middleware"
+	"wechat-api/internal/pkg/wechat_ws"
+	"wechat-api/mongo_model"
 
 	"github.com/redis/go-redis/v9"
 
@@ -24,8 +32,14 @@ type ServiceContext struct {
 	OpenAuthority rest.Middleware
 	Miniprogram   rest.Middleware
 	DB            *ent.Client
+	WechatDB      *gorm.DB
+	WechatQ       *query.Query
 	CoreRpc       coreclient.Core
 	Rds           redis.UniversalClient
+	WechatWs      map[string]*wechat_ws.WechatWsClient
+	Cache         *collection.Cache
+	NodeID        *snowflake.Node
+	MongoModel    *mongo_model.AllMongoModel
 }
 
 func NewServiceContext(c config.Config) *ServiceContext {
@@ -40,15 +54,62 @@ func NewServiceContext(c config.Config) *ServiceContext {
 		ent.Debug(), // debug mode
 	)
 
+	// 初始化 MongoDB 客户端
+	all_mongo_model := mongo_model.SetupMongoModel(c.FastgptMongoConf.Url, c.FastgptMongoConf.DBName)
+
+	// gorm 数据库连接
+	wechatDb, err := database.InitWechatDB(c.DatabaseConf, c.Mode)
+	if err != nil {
+		logx.Error(err)
+		panic("gorm 数据库连接失败")
+	}
+	wechatQ := query.Use(wechatDb)
+
 	coreRpc := coreclient.NewCore(zrpc.NewClientIfEnable(c.CoreRpc))
 
+	// 初始化微信ws客户端
+	// todo 现在配置是从 config.yaml中读取的,后续需要改成从数据库中读取,以便匹配不同的微信号
+	wechatWs := make(map[string]*wechat_ws.WechatWsClient)
+
+	for _, ws := range c.WebSocket {
+		if ws.Type == "wechat" {
+			client, err := wechat_ws.NewWechatWsClient(ws.Url, ws.Name, ws.Type)
+			if err != nil {
+				logx.Error(err)
+			} else {
+				logx.Info("建立ws client成功~", ws.Name)
+				go client.ReadPump()
+				go client.WritePump()
+				wechatWs[ws.Name] = client
+			}
+		}
+	}
+
+	cache, err := collection.NewCache(time.Hour * 24 * 365)
+	if err != nil {
+		logx.Error(err)
+		panic("本地缓存实例失败")
+	}
+
+	node, err := snowflake.NewNode(1)
+	if err != nil {
+		logx.Error(err)
+		panic("雪花算法实例失败")
+	}
+
 	return &ServiceContext{
 		Config:        c,
 		Authority:     middleware.NewAuthorityMiddleware(cbn, rds, coreRpc).Handle,
 		OpenAuthority: middleware.NewOpenAuthorityMiddleware(db, rds, c).Handle,
 		Miniprogram:   middleware.NewMiniprogramMiddleware(cbn, rds, coreRpc, c).Handle,
 		DB:            db,
+		WechatDB:      wechatDb,
+		WechatQ:       wechatQ,
 		CoreRpc:       coreRpc,
 		Rds:           rds,
+		WechatWs:      wechatWs,
+		Cache:         cache,
+		NodeID:        node,
+		MongoModel:    all_mongo_model,
 	}
 }