package svc import ( "github.com/hibiken/asynq" "github.com/zeromicro/go-zero/core/logx" "github.com/zeromicro/go-zero/core/stores/redis" "github.com/zeromicro/go-zero/core/stores/sqlx" "qnc-server/app/user/cmd/api/internal/config" "qnc-server/app/user/cmd/api/internal/service" "qnc-server/app/user/model" ) type ServiceContext struct { Config config.Config Redis *redis.Redis UserModel model.UserModel UserAuthModel model.UserAuthModel ProductModel model.ProductModel FeatureModel model.FeatureModel ProductFeatureModel model.ProductFeatureModel OrderModel model.OrderModel QueryModel model.QueryModel AlipayService *service.AliPayService WechatPayService *service.WechatPayService ApplePayService *service.ApplePayService WestDexService *service.WestDexService AsynqServer *asynq.Server // 服务端 AsynqService *service.AsynqService // 客户端 VerificationService *service.VerificationService } func NewServiceContext(c config.Config) *ServiceContext { db := sqlx.NewMysql(c.DataSource) redisConf := redis.RedisConf{ Host: c.CacheRedis[0].Host, Pass: c.CacheRedis[0].Pass, Type: c.CacheRedis[0].Type, } asynqServer := asynq.NewServer( asynq.RedisClientOpt{Addr: c.CacheRedis[0].Host, Password: c.CacheRedis[0].Pass}, asynq.Config{ IsFailure: func(err error) bool { logx.Errorf("异步任务失败: %+v \n", err) return true }, Concurrency: 10, }, ) westDexService := service.NewWestDexService(c) return &ServiceContext{ Config: c, Redis: redis.MustNewRedis(redisConf), AlipayService: service.NewAliPayService(c), WechatPayService: service.NewWechatPayService(c), ApplePayService: service.NewApplePayService(c), WestDexService: westDexService, VerificationService: service.NewVerificationService(c, westDexService), AsynqServer: asynqServer, AsynqService: service.NewAsynqService(c), UserModel: model.NewUserModel(db, c.CacheRedis), UserAuthModel: model.NewUserAuthModel(db, c.CacheRedis), ProductModel: model.NewProductModel(db, c.CacheRedis), OrderModel: model.NewOrderModel(db, c.CacheRedis), QueryModel: model.NewQueryModel(db, c.CacheRedis), FeatureModel: model.NewFeatureModel(db, c.CacheRedis), ProductFeatureModel: model.NewProductFeatureModel(db, c.CacheRedis), } } func (s *ServiceContext) Close() { if s.AsynqService != nil { s.AsynqService.Close() } }