From 47aa5f8d25012c2f58ae7bb19701b2d6f2785fde Mon Sep 17 00:00:00 2001 From: huang Date: Sat, 28 Mar 2026 10:42:58 +0800 Subject: [PATCH] =?UTF-8?q?fix(poll):=20Series=20=E5=88=A0=E9=99=A4?= =?UTF-8?q?=E5=89=8D=E6=A3=80=E6=9F=A5=E5=85=B3=E8=81=94=E5=A5=97=E9=A4=90?= =?UTF-8?q?=20POLL-04?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - package_store.go 新增 CountBySeriesID 方法,统计指定系列下的活跃套餐数量 - package_series/service.go Service 注入 packageStore 字段,Delete 前调用 CountBySeriesID 检查 - bootstrap/services.go 更新 PackageSeries 服务初始化,传入 PackageStore --- internal/bootstrap/services.go | 2 +- internal/service/package_series/service.go | 15 ++++++++++++++- internal/store/postgres/package_store.go | 13 +++++++++++++ 3 files changed, 28 insertions(+), 2 deletions(-) diff --git a/internal/bootstrap/services.go b/internal/bootstrap/services.go index 968a6db..4b78614 100644 --- a/internal/bootstrap/services.go +++ b/internal/bootstrap/services.go @@ -159,7 +159,7 @@ func initServices(s *stores, deps *Dependencies) *services { 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), + PackageSeries: packageSeriesSvc.New(s.PackageSeries, s.ShopSeriesAllocation, s.Package), 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), diff --git a/internal/service/package_series/service.go b/internal/service/package_series/service.go index 90bc7fd..2436000 100644 --- a/internal/service/package_series/service.go +++ b/internal/service/package_series/service.go @@ -2,6 +2,7 @@ package package_series import ( "context" + "fmt" "time" "gorm.io/gorm" @@ -15,15 +16,19 @@ import ( "github.com/break/junhong_cmp_fiber/pkg/middleware" ) +// Service 套餐系列业务服务 type Service struct { packageSeriesStore *postgres.PackageSeriesStore shopSeriesAllocationStore *postgres.ShopSeriesAllocationStore + packageStore *postgres.PackageStore } -func New(packageSeriesStore *postgres.PackageSeriesStore, shopSeriesAllocationStore *postgres.ShopSeriesAllocationStore) *Service { +// New 创建套餐系列服务实例 +func New(packageSeriesStore *postgres.PackageSeriesStore, shopSeriesAllocationStore *postgres.ShopSeriesAllocationStore, packageStore *postgres.PackageStore) *Service { return &Service{ packageSeriesStore: packageSeriesStore, shopSeriesAllocationStore: shopSeriesAllocationStore, + packageStore: packageStore, } } @@ -139,6 +144,14 @@ func (s *Service) Delete(ctx context.Context, id uint) error { return errors.Wrap(errors.CodeInternalError, err, "获取套餐系列失败") } + count, err := s.packageStore.CountBySeriesID(ctx, id) + if err != nil { + return err + } + if count > 0 { + return errors.New(errors.CodeInvalidParam, fmt.Sprintf("该系列下有 %d 个关联套餐,请先处理后再删除", count)) + } + if err := s.packageSeriesStore.Delete(ctx, id); err != nil { return errors.Wrap(errors.CodeInternalError, err, "删除套餐系列失败") } diff --git a/internal/store/postgres/package_store.go b/internal/store/postgres/package_store.go index 15291ba..c8396b9 100644 --- a/internal/store/postgres/package_store.go +++ b/internal/store/postgres/package_store.go @@ -8,6 +8,7 @@ import ( "github.com/break/junhong_cmp_fiber/internal/model" "github.com/break/junhong_cmp_fiber/internal/store" "github.com/break/junhong_cmp_fiber/pkg/constants" + "github.com/break/junhong_cmp_fiber/pkg/errors" "github.com/break/junhong_cmp_fiber/pkg/middleware" ) @@ -135,3 +136,15 @@ func (s *PackageStore) GetByIDsUnscoped(ctx context.Context, ids []uint) ([]*mod } return packages, nil } + +// CountBySeriesID 统计指定系列下的活跃套餐数量(未软删除) +func (s *PackageStore) CountBySeriesID(ctx context.Context, seriesID uint) (int64, error) { + var count int64 + err := s.db.WithContext(ctx).Model(&model.Package{}). + Where("series_id = ? AND deleted_at IS NULL", seriesID). + Count(&count).Error + if err != nil { + return 0, errors.Wrap(errors.CodeDatabaseError, err, "统计关联套餐失败") + } + return count, nil +}