diff --git a/internal/dao/bundleDao.go b/internal/dao/bundleDao.go index 26a4b87..592fdb3 100644 --- a/internal/dao/bundleDao.go +++ b/internal/dao/bundleDao.go @@ -135,23 +135,27 @@ func BundleListV2(req *bundle.BundleListRequest) (res *bundle.BundleListResponse res.Bundles = make([]*bundle.BundleProfile, 0) bundles := make([]*model.BundleProfile, 0) - query := app.ModuleClients.BundleDB.Model(&model.BundleProfile{}).Preload("BundleProfileLang") + baseQuery := app.ModuleClients.BundleDB.Model(&model.BundleProfile{}) if req.Name != "" { - query = query.Where("name like ?", "%"+req.Name+"%") + baseQuery = baseQuery.Where("name like ?", "%"+req.Name+"%") } if req.Content != "" { - query = query.Where("content like ?", "%"+req.Content+"%") + baseQuery = baseQuery.Where("content like ?", "%"+req.Content+"%") } if req.Language != "" { - query = query.Where("language like ?", req.Language) + baseQuery = baseQuery.Where("language like ?", req.Language) } - count := *query + var total int64 + if err = baseQuery.Count(&total).Error; err != nil { + return res, commonErr.ReturnError(err, msg.ErrorGetBundleList, "获取套餐总数失败: ") + } // 排序:sort 升序,相同 sort 按 created_at 倒序 + query := baseQuery.Preload("BundleProfileLang") query = query.Order("sort ASC").Order("created_at DESC") if req.PageSize != 0 && req.Page != 0 { query = query.Limit(int(req.PageSize)).Offset(int(req.Page-1) * int(req.PageSize)) @@ -223,10 +227,6 @@ func BundleListV2(req *bundle.BundleListRequest) (res *bundle.BundleListResponse } } - var total int64 - - count.Count(&total) - res.Total = int32(total) return diff --git a/internal/dao/valueAddBundleDao.go b/internal/dao/valueAddBundleDao.go index 2dbe140..87a7a5c 100644 --- a/internal/dao/valueAddBundleDao.go +++ b/internal/dao/valueAddBundleDao.go @@ -103,6 +103,8 @@ func UpdateValueAddService(tx *gorm.DB, columns map[string]interface{}) (err err } return } + +// 更新单个语言表 func UpdateValueAddServiceLang(tx *gorm.DB, columns map[string]interface{}) (err error) { err = tx.Model(&model.ValueAddServiceLang{}).Where("uuid =? and deleted_at = 0", columns["uuid"]). Where("language = ?", columns["language"]).Updates(columns).Error @@ -112,6 +114,16 @@ func UpdateValueAddServiceLang(tx *gorm.DB, columns map[string]interface{}) (err return } +// 更新所有语言版本的服务类型 +func UpdateAllValueAddServiceLangServiceType(tx *gorm.DB, columns map[string]interface{}) (err error) { + err = tx.Model(&model.ValueAddServiceLang{}).Where("uuid = ? and deleted_at = 0", columns["uuid"]). + Updates(columns).Error + if err != nil { + return + } + return +} + // 增值套餐列表 func ValueAddServiceList(req *bundle.ValueAddServiceListRequest) (res []*model.ValueAddService, total int64, err error) { query := app.ModuleClients.BundleDB.Model(&model.ValueAddService{}). diff --git a/internal/logic/bundleLogic.go b/internal/logic/bundleLogic.go index d1036f2..36ede5b 100644 --- a/internal/logic/bundleLogic.go +++ b/internal/logic/bundleLogic.go @@ -190,8 +190,21 @@ func SaveBundle(req *bundle.BundleProfile) (res *bundle.SaveResponse, err error) } if !dao.ValidateQuotaCompatibility(benefitsQuota, optionalQuota) { - return res, fmt.Errorf("服务类型%d的额度不兼容:套餐权益额度为%d,附加权益额度为%d", - detail.ServiceType, benefitsQuota.QuotaValue, optionalQuota.QuotaValue) + var serviceName string + switch detail.ServiceType { + case msg.VideoService: + serviceName = "视频" + case msg.TextService: + serviceName = "图文" + case msg.DataReportService: + serviceName = "数据报表" + case msg.AccountService: + serviceName = "账号数" + case msg.AvailableTimeService: + serviceName = "可用时长" + } + return res, fmt.Errorf("服务类型%s的额度不兼容:套餐权益额度为%d,附加权益额度为%d", + serviceName, benefitsQuota.QuotaValue, optionalQuota.QuotaValue) } } diff --git a/internal/logic/valueAddBundleLogic.go b/internal/logic/valueAddBundleLogic.go index 0d32612..2483f0d 100644 --- a/internal/logic/valueAddBundleLogic.go +++ b/internal/logic/valueAddBundleLogic.go @@ -197,6 +197,9 @@ func SaveValueAddService(in *bundle.ValueAddServiceLang) (res *bundle.SaveRespon hasDefault := false for _, option := range options { if option.IsDefault { + if option.Symbol != "=" { + return res, errors.New("默认套餐数量只能选择数量符合为等于的选项") + } hasDefault = true break } @@ -314,6 +317,14 @@ func SaveValueAddService(in *bundle.ValueAddServiceLang) (res *bundle.SaveRespon if err = dao.UpdateValueAddService(tx, updateService); err != nil { return res, errors.New("更新增值服务失败") } + updataAllLangServiceType := map[string]interface{}{ + "uuid": in.Uuid, + "service_type": in.ServiceType, + "unit": in.Unit, + } + if err = dao.UpdateAllValueAddServiceLangServiceType(tx, updataAllLangServiceType); err != nil { + return res, errors.New("更新增值服务失败") + } } //更新语言表 updateLangService := map[string]interface{}{ @@ -369,8 +380,8 @@ func ValueAddServiceList(req *bundle.ValueAddServiceListRequest) (res *bundle.Va ServiceType: valueAddService.ServiceType, } for _, serviceLang := range valueAddService.ValueAddServiceLang { - if serviceLang.QuotaType == 0 && serviceInfo.ServiceType != 5 && serviceInfo.ServiceType != 4 { - serviceLang.QuotaType = 1 + if serviceLang.QuotaType == 0 && serviceInfo.ServiceType != msg.AccountService && serviceInfo.ServiceType != msg.AvailableTimeService { + serviceLang.QuotaType = msg.UnlimitedQuota } serviceLangInfo := &bundle.ValueAddServiceLang{ Uuid: valueAddService.UUID, @@ -461,6 +472,9 @@ func ValueAddServiceDetail(req *bundle.ValueAddServiceDetailRequest) (res *bundl valueAddService.ServiceName = detail.ServiceName valueAddService.ServiceType = detail.ServiceType for _, serviceLang := range detail.ValueAddServiceLang { + if serviceLang.QuotaType == 0 && valueAddService.ServiceType != msg.AccountService && valueAddService.ServiceType != msg.AvailableTimeService { + serviceLang.QuotaType = msg.UnlimitedQuota + } langOptions := []*bundle.ValueAddPriceOptions{} if len(serviceLang.Options) > 0 { for _, opt := range serviceLang.Options { diff --git a/pkg/msg/msg.go b/pkg/msg/msg.go index 349f86a..4ac5216 100644 --- a/pkg/msg/msg.go +++ b/pkg/msg/msg.go @@ -105,3 +105,18 @@ const ( ErrorValueServicePriceModeEmpty = "增值服务价格模式不能为空" ErrorValueServiceOptionsEmpty = "增值服务选项不能为空" ) + +// 服务额度信息 +const ( + UnlimitedQuota = 1 //不限额度 + LimitedQuota = 2 //限制额度 +) + +// 服务类型 +const ( + VideoService = 1 //视频 + TextService = 2 //图文 + DataReportService = 3 //数据报表 + AccountService = 4 //账号数 + AvailableTimeService = 5 //可用时长 +)