diff --git a/internal/dao/bundleExtend.go b/internal/dao/bundleExtend.go index 9bcf4c3..eed3cba 100644 --- a/internal/dao/bundleExtend.go +++ b/internal/dao/bundleExtend.go @@ -203,7 +203,7 @@ func AddBundleBalanceByUserId(data model.BundleBalanceUsePo) error { return errors.New("账号数不足") } } else { // 减少账号消耗数,用于解绑账号 - for range data.AccountNumber { + for range -data.AccountNumber { if oldData.IncreaseAccountConsumptionNumber > 0 { oldData.IncreaseAccountConsumptionNumber-- continue @@ -215,7 +215,6 @@ func AddBundleBalanceByUserId(data model.BundleBalanceUsePo) error { return errors.New("当前未绑定账号") } } - for range data.VideoNumber { if oldData.MonthlyLimitVideoConsumptionNumber < oldData.MonthlyLimitVideoNumber { // 限制类型视频可用额度充足 if oldData.BundleLimitVideoExpiredConsumptionNumber < oldData.BundleLimitVideoExpiredNumber { // 套餐内会过期的限制类型视频充足 @@ -239,8 +238,8 @@ func AddBundleBalanceByUserId(data model.BundleBalanceUsePo) error { continue } } - if oldData.BundleLimitVideoNumber < oldData.BundleVideoNumber { //套餐内非限制类型的视频充足 - oldData.BundleLimitVideoNumber++ + if oldData.BundleVideoConsumptionNumber < oldData.BundleVideoNumber { //套餐内非限制类型的视频充足 + oldData.BundleVideoConsumptionNumber++ continue } if oldData.IncreaseVideoConsumptionNumber < oldData.IncreaseVideoNumber { //增值服务非限制类型的视频充足 @@ -278,8 +277,8 @@ func AddBundleBalanceByUserId(data model.BundleBalanceUsePo) error { continue } } - if oldData.BundleLimitImageNumber < oldData.BundleImageNumber { //套餐内非限制类型的图文充足 - oldData.BundleLimitImageNumber++ + if oldData.BundleImageConsumptionNumber < oldData.BundleImageNumber { //套餐内非限制类型的图文充足 + oldData.BundleImageConsumptionNumber++ continue } if oldData.IncreaseImageConsumptionNumber < oldData.IncreaseImageNumber { //增值服务非限制类型的图文充足 @@ -336,6 +335,10 @@ func AddBundleBalanceByUserId(data model.BundleBalanceUsePo) error { }) } +func CreateUsedRecord(tx *gorm.DB, data model.BundleUsedRecord) error { + return tx.Create(&data).Error +} + func ExtendBundleBalanceByUserId(data model.BundleBalanceExtendPo) error { return app.ModuleClients.BundleDB.Transaction(func(tx *gorm.DB) error { oldData := model.BundleBalance{} @@ -454,3 +457,8 @@ func BundleActivate(ids []uint32) error { } return app.ModuleClients.BundleDB.Model(&model.BundleActivate{}).Where("user_id = ?").Save(batch).Error } + +func GetValueAddByOrderUUID(orderUUID string) (data []model.BundleOrderValueAdd, err error) { + err = app.ModuleClients.BundleDB.Model(&model.BundleOrderValueAdd{}).Where("order_uuid = ?", orderUUID).Find(&data).Error + return +} diff --git a/internal/logic/bundleExtendLogic.go b/internal/logic/bundleExtendLogic.go index a58e4d6..3bcdfa7 100644 --- a/internal/logic/bundleExtendLogic.go +++ b/internal/logic/bundleExtendLogic.go @@ -5,6 +5,7 @@ import ( "micro-bundle/internal/dao" "micro-bundle/internal/model" "micro-bundle/pb/bundle" + "strconv" "time" "dubbo.apache.org/dubbo-go/v3/common/logger" @@ -94,25 +95,126 @@ func GetBundleBalanceByUserId(req *bundle.GetBundleBalanceByUserIdReq) (*bundle. func AddBundleBalance(req *bundle.AddBundleBalanceReq) (*bundle.AddBundleBalanceResp, error) { data := model.BundleBalanceUsePo{ + UserId: int(req.UserId), AccountNumber: int(req.AccountConsumptionNumber), ImageNumber: int(req.ImageConsumptionNumber), VideoNumber: int(req.VideoConsumptionNumber), DataAnalysisNumber: int(req.DataAnalysisConsumptionNumber), } - if err := copier.Copy(&data, req); err != nil { - logger.Error(err) - return nil, errors.New("操作失败") - } return nil, dao.AddBundleBalanceByUserId(data) } func CreateBundleBalance(req *bundle.CreateBundleBalanceReq) (*bundle.CreateBundleBalanceResp, error) { var data model.BundleBalance - if err := copier.Copy(&data, req); err != nil { - logger.Error(err) - return nil, errors.New("操作失败") + + addValues, err := dao.GetValueAddByOrderUUID(req.OrderUUID) + if err != nil || len(addValues) == 0 { + return nil, errors.New("获取增值服务失败") } - err := dao.CreateBundleBalance(data) + data.StartAt = time.Now() + data.ExpiredAt = time.Now() + userId, err := strconv.Atoi(addValues[0].CustomerID) + if err != nil { + return nil, err + } + data.Month = time.Now().Format("2006-01") + data.UserId = userId + data.OrderUUID = req.OrderUUID + for _, v := range addValues { + switch v.ServiceType { + case 1: // 视频类型 + if v.EquityType == 1 { // 套餐权益 + if v.QuotaType == 2 { // 限制额度 + data.MonthlyLimitVideoNumber = int(v.QuotaValue) + if v.IsExpired { // 会过期的限制类型 + data.BundleLimitVideoExpiredNumber += int(v.Num) + } else { + data.BundleLimitVideoNumber += int(v.Num) + } + } else { + data.BundleVideoNumber += int(v.Num) + } + } else { + if v.QuotaType == 2 { // 限制额度 + data.MonthlyLimitVideoNumber = int(v.QuotaValue) + if v.IsExpired { // 会过期的限制类型 + data.IncreaseLimitVideoExpiredNumber += int(v.Num) + } else { + data.IncreaseLimitVideoNumber += int(v.Num) + } + } else { + data.IncreaseVideoNumber += int(v.Num) + } + } + case 2: // 图文类型 + if v.EquityType == 1 { // 套餐权益 + if v.QuotaType == 2 { // 限制额度 + data.MonthlyLimitImageNumber = int(v.QuotaValue) + if v.IsExpired { // 会过期的限制类型 + data.BundleLimitImageExpiredNumber += int(v.Num) + } else { + data.BundleLimitImageNumber += int(v.Num) + } + } else { + data.BundleImageNumber += int(v.Num) + } + } else { + if v.QuotaType == 2 { // 限制额度 + data.MonthlyLimitImageNumber = int(v.QuotaValue) + if v.IsExpired { // 会过期的限制类型 + data.IncreaseLimitImageExpiredNumber += int(v.Num) + } else { + data.IncreaseLimitImageNumber += int(v.Num) + } + } else { + + data.IncreaseImageNumber += int(v.Num) + } + } + case 3: // 数据分析 + if v.EquityType == 1 { // 套餐权益 + if v.QuotaType == 2 { // 限制额度 + data.MonthlyLimitDataAnalysisNumber = int(v.QuotaValue) + if v.IsExpired { // 会过期的限制类型 + data.BundleLimitDataAnalysisExpiredNumber += int(v.Num) + } else { + data.BundleLimitDataAnalysisNumber += int(v.Num) + } + } else { + data.BundleDataAnalysisNumber += int(v.Num) + } + } else { + if v.QuotaType == 2 { // 限制额度 + data.MonthlyLimitDataAnalysisNumber = int(v.QuotaValue) + if v.IsExpired { // 会过期的限制类型 + data.IncreaseLimitDataAnalysisExpiredNumber += int(v.Num) + } else { + data.IncreaseLimitDataAnalysisNumber += int(v.Num) + } + } else { + + data.IncreaseDataAnalysisNumber += int(v.Num) + } + } + case 4: // 账号数 + if v.EquityType == 1 { // 套餐权益 + data.BundleAccountNumber += int(v.Num) + } else { + data.IncreaseAccountNumber += int(v.Num) + } + case 5: // 可用时长 + switch v.Unit { + case "天": + data.ExpiredAt = data.ExpiredAt.Add(time.Hour * 24 * time.Duration(v.Num)) + case "月": + data.ExpiredAt = data.ExpiredAt.Add(time.Hour * 24 * 30 * time.Duration(v.Num)) + case "年": + data.ExpiredAt = data.ExpiredAt.Add(time.Hour * 24 * 365 * time.Duration(v.Num)) + } + } + } + + err = dao.CreateBundleBalance(data) if err != nil { logger.Error(err) return nil, errors.New("创建余量信息失败") @@ -186,3 +288,7 @@ func ConfirmWork(req *bundle.ConfirmWorkReq) (*bundle.ConfirmWorkResp, error) { func BundleActivate(req *bundle.BundleActivateReq) error { return dao.BundleActivate(req.Ids) } + +func UpdateBundleBalance() { + +} diff --git a/internal/model/bundle.go b/internal/model/bundle.go index 08db9c1..4f370a7 100644 --- a/internal/model/bundle.go +++ b/internal/model/bundle.go @@ -303,3 +303,17 @@ type BundleBalanceExtendPo struct { DataAnalysisNumber int DurationNumber int } + +type BundleUsedRecord struct { + gorm.Model + UserID uint64 `gorm:"column:user_id;not null"` + Type string `gorm:"column:type;size:100"` + OrderUUID string `gorm:"column:order_uuid;size:100"` + IsIncrement int `gorm:"column:is_increment"` + ConsumptionType int `gorm:"column:consumption_type"` +} + +// TableName 设置表名 +func (BundleUsedRecord) TableName() string { + return "bundle_used_record" +}