This commit is contained in:
lzh 2025-09-28 14:27:02 +08:00
parent bbd69e32b3
commit 84e78bc808
3 changed files with 142 additions and 14 deletions

View File

@ -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
}

View File

@ -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() {
}

View File

@ -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"
}