333 lines
14 KiB
Go
333 lines
14 KiB
Go
package svc
|
||
|
||
import (
|
||
"time"
|
||
"ycc-server/app/main/api/internal/config"
|
||
"ycc-server/app/main/api/internal/middleware"
|
||
"ycc-server/app/main/api/internal/service"
|
||
tianyuanapi "ycc-server/app/main/api/internal/service/tianyuanapi_sdk"
|
||
"ycc-server/app/main/model"
|
||
|
||
"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"
|
||
"github.com/zeromicro/go-zero/rest"
|
||
)
|
||
|
||
// ServiceContext 服务上下文
|
||
type ServiceContext struct {
|
||
Config config.Config
|
||
Redis *redis.Redis
|
||
|
||
// 中间件
|
||
AuthInterceptor rest.Middleware
|
||
UserAuthInterceptor rest.Middleware
|
||
AdminAuthInterceptor rest.Middleware
|
||
|
||
// 用户相关模型
|
||
UserModel model.UserModel
|
||
UserAuthModel model.UserAuthModel
|
||
|
||
// 产品相关模型
|
||
ProductModel model.ProductModel
|
||
FeatureModel model.FeatureModel
|
||
ProductFeatureModel model.ProductFeatureModel
|
||
|
||
// 天元API调用记录模型
|
||
TianyuanapiCallLogModel model.TianyuanapiCallLogModel
|
||
TianyuanapiCallLogService *service.TianyuanapiCallLogService
|
||
|
||
// 白名单相关模型
|
||
UserFeatureWhitelistModel model.UserFeatureWhitelistModel
|
||
WhitelistOrderModel model.WhitelistOrderModel
|
||
WhitelistOrderItemModel model.WhitelistOrderItemModel
|
||
|
||
// 订单相关模型
|
||
OrderModel model.OrderModel
|
||
OrderRefundModel model.OrderRefundModel
|
||
QueryModel model.QueryModel
|
||
QueryCleanupLogModel model.QueryCleanupLogModel
|
||
QueryCleanupDetailModel model.QueryCleanupDetailModel
|
||
QueryCleanupConfigModel model.QueryCleanupConfigModel
|
||
|
||
// 代理相关模型(新系统)
|
||
AgentModel model.AgentModel
|
||
AgentWalletModel model.AgentWalletModel
|
||
AgentRelationModel model.AgentRelationModel
|
||
AgentLinkModel model.AgentLinkModel
|
||
AgentOrderModel model.AgentOrderModel
|
||
AgentCommissionModel model.AgentCommissionModel
|
||
AgentRebateModel model.AgentRebateModel
|
||
AgentUpgradeModel model.AgentUpgradeModel
|
||
AgentWithdrawalModel model.AgentWithdrawalModel
|
||
AgentConfigModel model.AgentConfigModel
|
||
AgentProductConfigModel model.AgentProductConfigModel
|
||
AgentRealNameModel model.AgentRealNameModel
|
||
AgentWithdrawalTaxModel model.AgentWithdrawalTaxModel
|
||
AgentInviteCodeModel model.AgentInviteCodeModel
|
||
AgentInviteCodeUsageModel model.AgentInviteCodeUsageModel
|
||
AgentFreezeTaskModel model.AgentFreezeTaskModel
|
||
AgentShortLinkModel model.AgentShortLinkModel
|
||
|
||
// 管理后台相关模型
|
||
AdminApiModel model.AdminApiModel
|
||
AdminMenuModel model.AdminMenuModel
|
||
AdminRoleModel model.AdminRoleModel
|
||
AdminRoleApiModel model.AdminRoleApiModel
|
||
AdminRoleMenuModel model.AdminRoleMenuModel
|
||
AdminUserModel model.AdminUserModel
|
||
AdminUserRoleModel model.AdminUserRoleModel
|
||
AdminDictDataModel model.AdminDictDataModel
|
||
AdminDictTypeModel model.AdminDictTypeModel
|
||
|
||
// 其他模型
|
||
ExampleModel model.ExampleModel
|
||
GlobalNotificationsModel model.GlobalNotificationsModel
|
||
AuthorizationDocumentModel model.AuthorizationDocumentModel
|
||
AlipayFromCallbackModel model.AlipayFromCallbackModel
|
||
// 投诉系统模型
|
||
ComplaintMainModel model.ComplaintMainModel
|
||
ComplaintAlipayModel model.ComplaintAlipayModel
|
||
ComplaintAlipayTradeModel model.ComplaintAlipayTradeModel
|
||
ComplaintManualModel model.ComplaintManualModel
|
||
|
||
// 服务
|
||
AlipayService *service.AliPayService
|
||
WechatPayService *service.WechatPayService
|
||
ApplePayService *service.ApplePayService
|
||
ApiRequestService *service.ApiRequestService
|
||
WhitelistService *service.WhitelistService
|
||
AsynqServer *asynq.Server
|
||
AsynqService *service.AsynqService
|
||
VerificationService *service.VerificationService
|
||
AgentService *service.AgentService
|
||
UserService *service.UserService
|
||
DictService *service.DictService
|
||
ImageService *service.ImageService
|
||
AuthorizationService *service.AuthorizationService
|
||
AlipayComplaintService *service.AlipayComplaintService
|
||
}
|
||
|
||
// NewServiceContext 创建服务上下文
|
||
func NewServiceContext(c config.Config) *ServiceContext {
|
||
// ============================== 基础设施初始化 ==============================
|
||
db := sqlx.NewMysql(c.DataSource)
|
||
cacheConf := c.CacheRedis
|
||
|
||
// 初始化Redis客户端
|
||
redisConf := redis.RedisConf{
|
||
Host: cacheConf[0].Host,
|
||
Pass: cacheConf[0].Pass,
|
||
Type: cacheConf[0].Type,
|
||
}
|
||
redisClient := redis.MustNewRedis(redisConf)
|
||
|
||
// ============================== 用户相关模型 ==============================
|
||
userModel := model.NewUserModel(db, cacheConf)
|
||
userAuthModel := model.NewUserAuthModel(db, cacheConf)
|
||
|
||
// ============================== 产品相关模型 ==============================
|
||
productModel := model.NewProductModel(db, cacheConf)
|
||
featureModel := model.NewFeatureModel(db, cacheConf)
|
||
productFeatureModel := model.NewProductFeatureModel(db, cacheConf)
|
||
|
||
// ============================== 天元API调用记录模型 ==============================
|
||
tianyuanapiCallLogModel := model.NewTianyuanapiCallLogModel(db, cacheConf)
|
||
|
||
// ============================== 白名单相关模型 ==============================
|
||
userFeatureWhitelistModel := model.NewUserFeatureWhitelistModel(db, cacheConf)
|
||
whitelistOrderModel := model.NewWhitelistOrderModel(db, cacheConf)
|
||
whitelistOrderItemModel := model.NewWhitelistOrderItemModel(db, cacheConf)
|
||
|
||
// ============================== 订单相关模型 ==============================
|
||
orderModel := model.NewOrderModel(db, cacheConf)
|
||
queryModel := model.NewQueryModel(db, cacheConf)
|
||
orderRefundModel := model.NewOrderRefundModel(db, cacheConf)
|
||
queryCleanupLogModel := model.NewQueryCleanupLogModel(db, cacheConf)
|
||
queryCleanupDetailModel := model.NewQueryCleanupDetailModel(db, cacheConf)
|
||
queryCleanupConfigModel := model.NewQueryCleanupConfigModel(db, cacheConf)
|
||
|
||
// ============================== 代理相关模型(新系统) ==============================
|
||
agentModel := model.NewAgentModel(db, cacheConf)
|
||
agentWalletModel := model.NewAgentWalletModel(db, cacheConf)
|
||
agentRelationModel := model.NewAgentRelationModel(db, cacheConf)
|
||
agentLinkModel := model.NewAgentLinkModel(db, cacheConf)
|
||
agentOrderModel := model.NewAgentOrderModel(db, cacheConf)
|
||
agentCommissionModel := model.NewAgentCommissionModel(db, cacheConf)
|
||
agentRebateModel := model.NewAgentRebateModel(db, cacheConf)
|
||
agentUpgradeModel := model.NewAgentUpgradeModel(db, cacheConf)
|
||
agentWithdrawalModel := model.NewAgentWithdrawalModel(db, cacheConf)
|
||
agentConfigModel := model.NewAgentConfigModel(db, cacheConf)
|
||
agentProductConfigModel := model.NewAgentProductConfigModel(db, cacheConf)
|
||
agentRealNameModel := model.NewAgentRealNameModel(db, cacheConf)
|
||
agentWithdrawalTaxModel := model.NewAgentWithdrawalTaxModel(db, cacheConf)
|
||
agentInviteCodeModel := model.NewAgentInviteCodeModel(db, cacheConf)
|
||
agentInviteCodeUsageModel := model.NewAgentInviteCodeUsageModel(db, cacheConf)
|
||
agentFreezeTaskModel := model.NewAgentFreezeTaskModel(db, cacheConf)
|
||
agentShortLinkModel := model.NewAgentShortLinkModel(db, cacheConf)
|
||
// ============================== 管理后台相关模型 ==============================
|
||
adminApiModel := model.NewAdminApiModel(db, cacheConf)
|
||
adminMenuModel := model.NewAdminMenuModel(db, cacheConf)
|
||
adminRoleModel := model.NewAdminRoleModel(db, cacheConf)
|
||
adminRoleApiModel := model.NewAdminRoleApiModel(db, cacheConf)
|
||
adminRoleMenuModel := model.NewAdminRoleMenuModel(db, cacheConf)
|
||
adminUserModel := model.NewAdminUserModel(db, cacheConf)
|
||
adminUserRoleModel := model.NewAdminUserRoleModel(db, cacheConf)
|
||
adminDictDataModel := model.NewAdminDictDataModel(db, cacheConf)
|
||
adminDictTypeModel := model.NewAdminDictTypeModel(db, cacheConf)
|
||
|
||
// ============================== 其他模型 ==============================
|
||
exampleModel := model.NewExampleModel(db, cacheConf)
|
||
globalNotificationsModel := model.NewGlobalNotificationsModel(db, cacheConf)
|
||
authorizationDocumentModel := model.NewAuthorizationDocumentModel(db, cacheConf)
|
||
alipayFromCallbackModel := model.NewAlipayFromCallbackModel(db, cacheConf)
|
||
// 投诉系统模型
|
||
complaintMainModel := model.NewComplaintMainModel(db, cacheConf)
|
||
complaintAlipayModel := model.NewComplaintAlipayModel(db, cacheConf)
|
||
complaintAlipayTradeModel := model.NewComplaintAlipayTradeModel(db, cacheConf)
|
||
complaintManualModel := model.NewComplaintManualModel(db, cacheConf)
|
||
|
||
// ============================== 第三方服务初始化 ==============================
|
||
tianyuanapi, err := tianyuanapi.NewClient(tianyuanapi.Config{
|
||
AccessID: c.Tianyuanapi.AccessID,
|
||
Key: c.Tianyuanapi.Key,
|
||
BaseURL: c.Tianyuanapi.BaseURL,
|
||
Timeout: time.Duration(c.Tianyuanapi.Timeout) * time.Second,
|
||
})
|
||
if err != nil {
|
||
logx.Errorf("初始化天远API失败: %+v", err)
|
||
}
|
||
|
||
// ============================== 业务服务初始化 ==============================
|
||
alipayService := service.NewAliPayService(c)
|
||
wechatPayService := service.NewWechatPayService(c, userAuthModel, service.InitTypeWxPayPubKey)
|
||
applePayService := service.NewApplePayService(c)
|
||
tianyuanapiCallLogService := service.NewTianyuanapiCallLogService(tianyuanapiCallLogModel, featureModel)
|
||
// 注意:whitelistService 需要在 apiRequestService 之前创建,因为 apiRequestService 依赖它
|
||
whitelistService := service.NewWhitelistService(c, userFeatureWhitelistModel, whitelistOrderModel, whitelistOrderItemModel, queryModel, featureModel)
|
||
apiRequestService := service.NewApiRequestService(c, featureModel, productFeatureModel, userFeatureWhitelistModel, tianyuanapi, tianyuanapiCallLogService, whitelistService)
|
||
verificationService := service.NewVerificationService(c, tianyuanapi, apiRequestService)
|
||
asynqService := service.NewAsynqService(c)
|
||
agentService := service.NewAgentService(c, orderModel, agentModel, agentWalletModel,
|
||
agentRelationModel, agentLinkModel, agentOrderModel, agentCommissionModel, agentRebateModel,
|
||
agentUpgradeModel, agentWithdrawalModel, agentConfigModel, agentProductConfigModel,
|
||
agentRealNameModel, agentWithdrawalTaxModel, agentFreezeTaskModel)
|
||
userService := service.NewUserService(&c, userModel, userAuthModel, agentModel)
|
||
dictService := service.NewDictService(adminDictTypeModel, adminDictDataModel)
|
||
imageService := service.NewImageService()
|
||
authorizationService := service.NewAuthorizationService(c, authorizationDocumentModel)
|
||
alipayComplaintService := service.NewAlipayComplaintService(c, alipayService.AlipayClient, complaintMainModel, complaintAlipayModel, complaintAlipayTradeModel, orderModel)
|
||
|
||
// ============================== 异步任务服务 ==============================
|
||
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,
|
||
},
|
||
)
|
||
|
||
// ============================== 返回服务上下文 ==============================
|
||
return &ServiceContext{
|
||
Config: c,
|
||
Redis: redisClient,
|
||
AuthInterceptor: middleware.NewAuthInterceptorMiddleware(c).Handle,
|
||
UserAuthInterceptor: middleware.NewUserAuthInterceptorMiddleware().Handle,
|
||
AdminAuthInterceptor: middleware.NewAdminAuthInterceptorMiddleware(c,
|
||
adminUserModel, adminUserRoleModel, adminRoleModel, adminApiModel, adminRoleApiModel).Handle,
|
||
|
||
// 用户相关模型
|
||
UserModel: userModel,
|
||
UserAuthModel: userAuthModel,
|
||
|
||
// 产品相关模型
|
||
ProductModel: productModel,
|
||
FeatureModel: featureModel,
|
||
ProductFeatureModel: productFeatureModel,
|
||
|
||
// 天元API调用记录模型
|
||
TianyuanapiCallLogModel: tianyuanapiCallLogModel,
|
||
TianyuanapiCallLogService: tianyuanapiCallLogService,
|
||
|
||
// 白名单相关模型
|
||
UserFeatureWhitelistModel: userFeatureWhitelistModel,
|
||
WhitelistOrderModel: whitelistOrderModel,
|
||
WhitelistOrderItemModel: whitelistOrderItemModel,
|
||
|
||
// 订单相关模型
|
||
OrderModel: orderModel,
|
||
QueryModel: queryModel,
|
||
OrderRefundModel: orderRefundModel,
|
||
QueryCleanupLogModel: queryCleanupLogModel,
|
||
QueryCleanupDetailModel: queryCleanupDetailModel,
|
||
QueryCleanupConfigModel: queryCleanupConfigModel,
|
||
|
||
// 代理相关模型(新系统)
|
||
AgentModel: agentModel,
|
||
AgentWalletModel: agentWalletModel,
|
||
AgentRelationModel: agentRelationModel,
|
||
AgentLinkModel: agentLinkModel,
|
||
AgentOrderModel: agentOrderModel,
|
||
AgentCommissionModel: agentCommissionModel,
|
||
AgentRebateModel: agentRebateModel,
|
||
AgentUpgradeModel: agentUpgradeModel,
|
||
AgentWithdrawalModel: agentWithdrawalModel,
|
||
AgentConfigModel: agentConfigModel,
|
||
AgentProductConfigModel: agentProductConfigModel,
|
||
AgentRealNameModel: agentRealNameModel,
|
||
AgentWithdrawalTaxModel: agentWithdrawalTaxModel,
|
||
AgentInviteCodeModel: agentInviteCodeModel,
|
||
AgentInviteCodeUsageModel: agentInviteCodeUsageModel,
|
||
AgentFreezeTaskModel: agentFreezeTaskModel,
|
||
AgentShortLinkModel: agentShortLinkModel,
|
||
|
||
// 管理后台相关模型
|
||
AdminApiModel: adminApiModel,
|
||
AdminMenuModel: adminMenuModel,
|
||
AdminRoleModel: adminRoleModel,
|
||
AdminRoleApiModel: adminRoleApiModel,
|
||
AdminRoleMenuModel: adminRoleMenuModel,
|
||
AdminUserModel: adminUserModel,
|
||
AdminUserRoleModel: adminUserRoleModel,
|
||
AdminDictDataModel: adminDictDataModel,
|
||
AdminDictTypeModel: adminDictTypeModel,
|
||
|
||
// 其他模型
|
||
ExampleModel: exampleModel,
|
||
GlobalNotificationsModel: globalNotificationsModel,
|
||
AuthorizationDocumentModel: authorizationDocumentModel,
|
||
AlipayFromCallbackModel: alipayFromCallbackModel,
|
||
// 投诉系统模型
|
||
ComplaintMainModel: complaintMainModel,
|
||
ComplaintAlipayModel: complaintAlipayModel,
|
||
ComplaintAlipayTradeModel: complaintAlipayTradeModel,
|
||
ComplaintManualModel: complaintManualModel,
|
||
|
||
// 服务
|
||
AlipayService: alipayService,
|
||
WechatPayService: wechatPayService,
|
||
ApplePayService: applePayService,
|
||
ApiRequestService: apiRequestService,
|
||
WhitelistService: whitelistService,
|
||
AsynqServer: asynqServer,
|
||
AsynqService: asynqService,
|
||
VerificationService: verificationService,
|
||
AgentService: agentService,
|
||
UserService: userService,
|
||
DictService: dictService,
|
||
ImageService: imageService,
|
||
AuthorizationService: authorizationService,
|
||
AlipayComplaintService: alipayComplaintService,
|
||
}
|
||
}
|
||
|
||
func (s *ServiceContext) Close() {
|
||
if s.AsynqService != nil {
|
||
s.AsynqService.Close()
|
||
}
|
||
}
|