package bootstrap import ( cardObservationApp "github.com/break/junhong_cmp_fiber/internal/application/cardobservation" carrierThresholdApp "github.com/break/junhong_cmp_fiber/internal/application/carrierthreshold" walletapp "github.com/break/junhong_cmp_fiber/internal/application/wallet" auditInfra "github.com/break/junhong_cmp_fiber/internal/infrastructure/audit" cardObservationInfra "github.com/break/junhong_cmp_fiber/internal/infrastructure/cardobservation" carrierThresholdInfra "github.com/break/junhong_cmp_fiber/internal/infrastructure/carrierthreshold" "github.com/break/junhong_cmp_fiber/internal/infrastructure/integrationlog" "github.com/break/junhong_cmp_fiber/internal/infrastructure/messaging/outbox" walletinfra "github.com/break/junhong_cmp_fiber/internal/infrastructure/wallet" "github.com/break/junhong_cmp_fiber/internal/service/commission_calculation" "github.com/break/junhong_cmp_fiber/internal/service/commission_stats" deviceSvc "github.com/break/junhong_cmp_fiber/internal/service/device" iotCardSvc "github.com/break/junhong_cmp_fiber/internal/service/iot_card" orderSvc "github.com/break/junhong_cmp_fiber/internal/service/order" packagepkg "github.com/break/junhong_cmp_fiber/internal/service/package" pollingSvc "github.com/break/junhong_cmp_fiber/internal/service/polling" purchaseValidationSvc "github.com/break/junhong_cmp_fiber/internal/service/purchase_validation" "github.com/break/junhong_cmp_fiber/pkg/queue" ) type workerServices struct { CommissionCalculation *commission_calculation.Service CommissionStats *commission_stats.Service UsageService *packagepkg.UsageService ActivationService *packagepkg.ActivationService ResetService *packagepkg.ResetService AlertService *pollingSvc.AlertService CleanupService *pollingSvc.CleanupService } func initWorkerServices(stores *queue.WorkerStores, deps *WorkerDependencies) *queue.WorkerServices { auditWriter := auditInfra.NewWriter(auditInfra.NewRegistry(), nil) commissionStatsService := commission_stats.New(stores.ShopSeriesCommissionStats) commissionCalculationService := commission_calculation.New( deps.DB, stores.CommissionRecord, stores.Shop, stores.ShopPackageAllocation, stores.ShopSeriesAllocation, stores.PackageSeries, stores.IotCard, stores.Device, stores.AgentWallet, stores.AgentWalletTransaction, stores.Order, stores.OrderItem, stores.Package, stores.ShopSeriesCommissionStats, commissionStatsService, deps.Logger, ) commissionCalculationService.SetAuditWriter(auditWriter) usageService := packagepkg.NewUsageService( deps.DB, deps.Redis, stores.PackageUsage, stores.PackageUsageDailyRecord, stores.DeviceSimBinding, deps.Logger, ) activationService := packagepkg.NewActivationService( deps.DB, deps.Redis, stores.PackageUsage, stores.Package, stores.PackageUsageDailyRecord, deps.Logger, ) resetService := packagepkg.NewResetService( deps.DB, deps.Redis, stores.PackageUsage, deps.Logger, ) activationService.SetLifecycleAudit(auditWriter) usageService.SetLifecycleAudit(auditWriter) resetService.SetLifecycleAudit(auditWriter) alertService := pollingSvc.NewAlertService( stores.PollingAlertRule, stores.PollingAlertHistory, deps.Redis, deps.Logger, ) cleanupService := pollingSvc.NewCleanupService( stores.DataCleanupConfig, stores.DataCleanupLog, deps.Logger, ) cardObservationOutbox := outbox.NewRepository() observationSeriesEvents := cardObservationInfra.NewSeriesEventWriter(cardObservationOutbox) // 运营商通道流量阈值用例:达量判定嵌入流量观测事务,持锁判定注入停复机入口。 carrierThresholdService := carrierThresholdApp.NewService(deps.DB, cardObservationOutbox).SetLogger(deps.Logger) cardObservationService := cardObservationApp.NewService( deps.DB, cardObservationInfra.NewEventWriter(cardObservationOutbox), cardObservationInfra.NewCacheInvalidator(deps.Redis, deps.Logger), ) iotCardAuditService := iotCardSvc.New( deps.DB, stores.IotCard, stores.Shop, stores.AssetAllocationRecord, stores.ShopPackageAllocation, stores.ShopSeriesAllocation, stores.PackageSeries, deps.GatewayClient, deps.Logger, ) iotCardAuditService.SetAccessAudit(auditWriter) iotCardAuditService.SetPhoneAssetAssociationStore(stores.PhoneAssetAssociation) cardObservationService.SetStateAuditWriter(iotCardAuditService) // 运营商通道流量阈值达量判定嵌入流量观测事务:与卡流量事实同事务写周期锁与停机事件。 cardObservationService.SetChannelThresholdEvaluator(carrierThresholdService) cardObservationIntegration := integrationlog.NewRepository(deps.DB) cardObservationSeriesCoordinator := cardObservationInfra.NewSeriesCoordinator(deps.Redis) cardObservationSeriesService := cardObservationApp.NewSeriesAttemptService( cardObservationSeriesCoordinator, cardObservationInfra.NewSeriesRunner(deps.DB, deps.GatewayClient, cardObservationService, cardObservationIntegration, auditWriter), cardObservationInfra.NewSeriesAttemptLogger(cardObservationIntegration), ) // 初始化订单服务,供超时取消和批量订购共同复用现有订单规则。 purchaseValidation := purchaseValidationSvc.New(deps.DB, stores.IotCard, stores.Device, stores.Package, stores.ShopPackageAllocation) orderService := orderSvc.New( deps.DB, deps.Redis, stores.Order, stores.OrderItem, stores.AgentWallet, stores.AssetWallet, nil, // paymentStore: 超时取消不需要 purchaseValidation, stores.ShopPackageAllocation, stores.ShopSeriesAllocation, stores.IotCard, stores.Device, stores.PackageSeries, stores.PackageUsage, stores.Package, nil, // wechatConfigService: 超时取消不需要 nil, // wechatPayment: 超时取消不需要 nil, // paymentLoader: 超时取消不需要 deps.QueueClient, deps.Logger, stores.AssetIdentifier, stores.PersonalCustomer, stores.PersonalCustomerPhone, ) orderService.SetLifecycleAudit(auditWriter) orderService.SetPaymentIntegrationLog(integrationlog.NewRepository(deps.DB)) walletOutbox := outbox.NewRepository() walletDebitEvents := walletinfra.NewDebitEventWriter(walletOutbox, auditWriter) orderService.SetAgentWalletReservationService(walletapp.NewReservationService(walletinfra.NewReservationEventWriter(walletOutbox, auditWriter), walletDebitEvents, nil)) orderService.SetAgentWalletDebitService(walletapp.NewDebitService(walletDebitEvents, nil)) orderService.SetObservationSeriesEventWriter(observationSeriesEvents) // 创建停复机服务并注入回调:流量耗尽自动停机、套餐激活/重置/支付后自动复机 stopResumeService := iotCardSvc.NewStopResumeService( deps.Redis, stores.IotCard, stores.PackageUsage, stores.DeviceSimBinding, deps.GatewayClient, deps.Logger, ) stopResumeService.SetObservationSeriesEventWriter(deps.DB, observationSeriesEvents) stopResumeService.SetUnifiedAudit(auditWriter, integrationlog.NewRepository(deps.DB)) // 持通道阈值锁的卡在周期内拒绝一切复机(自动、手动、保护期强制、机卡分离)。 stopResumeService.SetChannelThresholdLockGuard(carrierThresholdService) // 停复机执行端口复用既有停复机服务作为唯一事实源:消费者与两个计划任务共用同一用例实例。 carrierThresholdService.SetCommander(carrierThresholdInfra.NewCardCommander(stopResumeService)) activationService.SetObservationSeriesEventWriter(observationSeriesEvents) usageService.SetStopResumeCallback(stopResumeService) activationService.SetResumeCallback(stopResumeService) orderService.SetResumeCallback(stopResumeService) resetService.SetResumeCallback(stopResumeService) deviceBatchAllocator := deviceSvc.New( deps.DB, deps.Redis, stores.Device, stores.DeviceSimBinding, stores.IotCard, stores.Shop, stores.AssetAllocationRecord, stores.ShopPackageAllocation, stores.ShopSeriesAllocation, stores.PackageSeries, deps.GatewayClient, stores.AssetIdentifier, nil, nil, ) deviceBatchAllocator.SetPhoneAssetAssociationStore(stores.PhoneAssetAssociation) return &queue.WorkerServices{ PaymentAudit: auditWriter, RechargeAudit: auditWriter, CardObservation: cardObservationService, CardObservationSeries: cardObservationSeriesService, ObservationSeriesEvents: observationSeriesEvents, CommissionCalculation: commissionCalculationService, CommissionStats: commissionStatsService, UsageService: usageService, ActivationService: activationService, ResetService: resetService, AlertService: alertService, CleanupService: cleanupService, StopResumeService: stopResumeService, CarrierThreshold: carrierThresholdService, OrderExpirer: orderService, AssetPackageOrderCreator: orderService, DeviceBatchAllocator: deviceBatchAllocator, } }