package bootstrap import ( "github.com/break/junhong_cmp_fiber/internal/polling" accountSvc "github.com/break/junhong_cmp_fiber/internal/service/account" accountAuditSvc "github.com/break/junhong_cmp_fiber/internal/service/account_audit" assetAllocationRecordSvc "github.com/break/junhong_cmp_fiber/internal/service/asset_allocation_record" authSvc "github.com/break/junhong_cmp_fiber/internal/service/auth" carrierSvc "github.com/break/junhong_cmp_fiber/internal/service/carrier" commissionCalculationSvc "github.com/break/junhong_cmp_fiber/internal/service/commission_calculation" commissionStatsSvc "github.com/break/junhong_cmp_fiber/internal/service/commission_stats" commissionWithdrawalSvc "github.com/break/junhong_cmp_fiber/internal/service/commission_withdrawal" commissionWithdrawalSettingSvc "github.com/break/junhong_cmp_fiber/internal/service/commission_withdrawal_setting" assetSvc "github.com/break/junhong_cmp_fiber/internal/service/asset" assetWalletSvc "github.com/break/junhong_cmp_fiber/internal/service/asset_wallet" deviceSvc "github.com/break/junhong_cmp_fiber/internal/service/device" deviceImportSvc "github.com/break/junhong_cmp_fiber/internal/service/device_import" enterpriseSvc "github.com/break/junhong_cmp_fiber/internal/service/enterprise" enterpriseCardSvc "github.com/break/junhong_cmp_fiber/internal/service/enterprise_card" enterpriseDeviceSvc "github.com/break/junhong_cmp_fiber/internal/service/enterprise_device" iotCardSvc "github.com/break/junhong_cmp_fiber/internal/service/iot_card" iotCardImportSvc "github.com/break/junhong_cmp_fiber/internal/service/iot_card_import" myCommissionSvc "github.com/break/junhong_cmp_fiber/internal/service/my_commission" orderSvc "github.com/break/junhong_cmp_fiber/internal/service/order" packageSvc "github.com/break/junhong_cmp_fiber/internal/service/package" packageSeriesSvc "github.com/break/junhong_cmp_fiber/internal/service/package_series" permissionSvc "github.com/break/junhong_cmp_fiber/internal/service/permission" personalCustomerSvc "github.com/break/junhong_cmp_fiber/internal/service/personal_customer" purchaseValidationSvc "github.com/break/junhong_cmp_fiber/internal/service/purchase_validation" rechargeSvc "github.com/break/junhong_cmp_fiber/internal/service/recharge" roleSvc "github.com/break/junhong_cmp_fiber/internal/service/role" shopSvc "github.com/break/junhong_cmp_fiber/internal/service/shop" pollingSvc "github.com/break/junhong_cmp_fiber/internal/service/polling" shopCommissionSvc "github.com/break/junhong_cmp_fiber/internal/service/shop_commission" shopPackageBatchAllocationSvc "github.com/break/junhong_cmp_fiber/internal/service/shop_package_batch_allocation" shopPackageBatchPricingSvc "github.com/break/junhong_cmp_fiber/internal/service/shop_package_batch_pricing" shopSeriesGrantSvc "github.com/break/junhong_cmp_fiber/internal/service/shop_series_grant" ) type services struct { Account *accountSvc.Service AccountAudit *accountAuditSvc.Service Role *roleSvc.Service Permission *permissionSvc.Service PersonalCustomer *personalCustomerSvc.Service Shop *shopSvc.Service Auth *authSvc.Service ShopCommission *shopCommissionSvc.Service CommissionWithdrawal *commissionWithdrawalSvc.Service CommissionWithdrawalSetting *commissionWithdrawalSettingSvc.Service CommissionCalculation *commissionCalculationSvc.Service Enterprise *enterpriseSvc.Service EnterpriseCard *enterpriseCardSvc.Service EnterpriseDevice *enterpriseDeviceSvc.Service Authorization *enterpriseCardSvc.AuthorizationService MyCommission *myCommissionSvc.Service IotCard *iotCardSvc.Service IotCardImport *iotCardImportSvc.Service Device *deviceSvc.Service DeviceImport *deviceImportSvc.Service AssetAllocationRecord *assetAllocationRecordSvc.Service Carrier *carrierSvc.Service PackageSeries *packageSeriesSvc.Service Package *packageSvc.Service PackageDailyRecord *packageSvc.DailyRecordService PackageCustomerView *packageSvc.CustomerViewService ShopPackageBatchAllocation *shopPackageBatchAllocationSvc.Service ShopPackageBatchPricing *shopPackageBatchPricingSvc.Service ShopSeriesGrant *shopSeriesGrantSvc.Service CommissionStats *commissionStatsSvc.Service PurchaseValidation *purchaseValidationSvc.Service Order *orderSvc.Service Recharge *rechargeSvc.Service PollingConfig *pollingSvc.ConfigService PollingConcurrency *pollingSvc.ConcurrencyService PollingMonitoring *pollingSvc.MonitoringService PollingAlert *pollingSvc.AlertService PollingCleanup *pollingSvc.CleanupService PollingManualTrigger *pollingSvc.ManualTriggerService Asset *assetSvc.Service AssetWallet *assetWalletSvc.Service StopResumeService *iotCardSvc.StopResumeService } func initServices(s *stores, deps *Dependencies) *services { purchaseValidation := purchaseValidationSvc.New(deps.DB, s.IotCard, s.Device, s.Package, s.ShopPackageAllocation) accountAudit := accountAuditSvc.NewService(s.AccountOperationLog) account := accountSvc.New(s.Account, s.Role, s.AccountRole, s.ShopRole, s.Shop, s.Enterprise, accountAudit) // 创建 IotCard service 并设置 polling callback iotCard := iotCardSvc.New(deps.DB, s.IotCard, s.Shop, s.AssetAllocationRecord, s.ShopPackageAllocation, s.ShopSeriesAllocation, s.PackageSeries, deps.GatewayClient, deps.Logger) iotCard.SetPollingCallback(polling.NewAPICallback(deps.Redis, deps.Logger)) return &services{ Account: account, AccountAudit: accountAudit, Role: roleSvc.New(s.Role, s.Permission, s.RolePermission), Permission: permissionSvc.New(s.Permission, s.AccountRole, s.RolePermission, account, deps.Redis), PersonalCustomer: personalCustomerSvc.NewService(s.PersonalCustomer, s.PersonalCustomerPhone, deps.VerificationService, deps.JWTManager, deps.WechatOfficialAccount, deps.Logger), Shop: shopSvc.New(s.Shop, s.Account, s.ShopRole, s.Role, s.AccountRole), Auth: authSvc.New(s.Account, s.AccountRole, s.RolePermission, s.Permission, s.Shop, deps.TokenManager, deps.Logger), ShopCommission: shopCommissionSvc.New(s.Shop, s.Account, s.AgentWallet, s.CommissionWithdrawalRequest, s.CommissionRecord), CommissionWithdrawal: commissionWithdrawalSvc.New(deps.DB, s.Shop, s.Account, s.AgentWallet, s.AgentWalletTransaction, s.CommissionWithdrawalRequest), CommissionWithdrawalSetting: commissionWithdrawalSettingSvc.New(deps.DB, s.Account, s.CommissionWithdrawalSetting), CommissionCalculation: commissionCalculationSvc.New( deps.DB, s.CommissionRecord, s.Shop, s.ShopPackageAllocation, s.ShopSeriesAllocation, s.PackageSeries, s.IotCard, s.Device, s.AgentWallet, s.AgentWalletTransaction, s.Order, s.OrderItem, s.Package, s.ShopSeriesCommissionStats, commissionStatsSvc.New(s.ShopSeriesCommissionStats), deps.Logger, ), Enterprise: enterpriseSvc.New(deps.DB, s.Enterprise, s.Shop, s.Account), EnterpriseCard: enterpriseCardSvc.New(deps.DB, s.Enterprise, s.EnterpriseCardAuthorization), EnterpriseDevice: enterpriseDeviceSvc.New(deps.DB, s.Enterprise, s.Device, s.DeviceSimBinding, s.EnterpriseDeviceAuthorization, s.EnterpriseCardAuthorization, deps.Logger), Authorization: enterpriseCardSvc.NewAuthorizationService(s.Enterprise, s.IotCard, s.EnterpriseCardAuthorization, deps.Logger), MyCommission: myCommissionSvc.New(deps.DB, s.Shop, s.AgentWallet, s.CommissionWithdrawalRequest, s.CommissionWithdrawalSetting, s.CommissionRecord, s.AgentWalletTransaction), IotCard: iotCard, IotCardImport: iotCardImportSvc.New(deps.DB, s.IotCardImportTask, deps.QueueClient), Device: deviceSvc.New(deps.DB, deps.Redis, s.Device, s.DeviceSimBinding, s.IotCard, s.Shop, s.AssetAllocationRecord, s.ShopPackageAllocation, s.ShopSeriesAllocation, s.PackageSeries, deps.GatewayClient), DeviceImport: deviceImportSvc.New(deps.DB, s.DeviceImportTask, deps.QueueClient), AssetAllocationRecord: assetAllocationRecordSvc.New(deps.DB, s.AssetAllocationRecord, s.Shop, s.Account), Carrier: carrierSvc.New(s.Carrier), PackageSeries: packageSeriesSvc.New(s.PackageSeries, s.ShopSeriesAllocation), Package: packageSvc.New(s.Package, s.PackageSeries, s.ShopPackageAllocation, s.ShopSeriesAllocation), PackageDailyRecord: packageSvc.NewDailyRecordService(deps.DB, deps.Redis, s.PackageUsageDailyRecord, deps.Logger), PackageCustomerView: packageSvc.NewCustomerViewService(deps.DB, deps.Redis, s.PackageUsage, deps.Logger), ShopPackageBatchAllocation: shopPackageBatchAllocationSvc.New(deps.DB, s.Package, s.ShopPackageAllocation, s.ShopSeriesAllocation, s.Shop), ShopPackageBatchPricing: shopPackageBatchPricingSvc.New(deps.DB, s.ShopPackageAllocation, s.ShopPackageAllocationPriceHistory, s.Shop), ShopSeriesGrant: shopSeriesGrantSvc.New(deps.DB, s.ShopSeriesAllocation, s.ShopPackageAllocation, s.ShopPackageAllocationPriceHistory, s.Shop, s.Package, s.PackageSeries, deps.Logger), CommissionStats: commissionStatsSvc.New(s.ShopSeriesCommissionStats), PurchaseValidation: purchaseValidation, Order: orderSvc.New(deps.DB, deps.Redis, s.Order, s.OrderItem, s.AgentWallet, s.AssetWallet, purchaseValidation, s.ShopPackageAllocation, s.ShopSeriesAllocation, s.IotCard, s.Device, s.PackageSeries, s.PackageUsage, s.Package, deps.WechatPayment, deps.QueueClient, deps.Logger), Recharge: rechargeSvc.New(deps.DB, s.AssetRecharge, s.AssetWallet, s.AssetWalletTransaction, s.IotCard, s.Device, s.ShopSeriesAllocation, s.PackageSeries, s.CommissionRecord, deps.Logger), PollingConfig: pollingSvc.NewConfigService(s.PollingConfig), PollingConcurrency: pollingSvc.NewConcurrencyService(s.PollingConcurrencyConfig, deps.Redis), PollingMonitoring: pollingSvc.NewMonitoringService(deps.Redis), PollingAlert: pollingSvc.NewAlertService(s.PollingAlertRule, s.PollingAlertHistory, deps.Redis, deps.Logger), PollingCleanup: pollingSvc.NewCleanupService(s.DataCleanupConfig, s.DataCleanupLog, deps.Logger), PollingManualTrigger: pollingSvc.NewManualTriggerService(s.PollingManualTriggerLog, s.IotCard, deps.Redis, deps.Logger), Asset: assetSvc.New(deps.DB, s.Device, s.IotCard, s.PackageUsage, s.Package, s.PackageSeries, s.DeviceSimBinding, s.Shop, deps.Redis, iotCard), AssetWallet: assetWalletSvc.New(s.AssetWallet, s.AssetWalletTransaction), StopResumeService: iotCardSvc.NewStopResumeService(deps.DB, deps.Redis, s.IotCard, s.DeviceSimBinding, deps.GatewayClient, deps.Logger), } }