修改新的余量表

This commit is contained in:
lzh 2025-09-24 15:00:51 +08:00
parent 8b35ba97c8
commit ce243c39b8
3 changed files with 268 additions and 39 deletions

View File

@ -183,34 +183,171 @@ func GetBundleBalanceByUserId(req *bundle.GetBundleBalanceByUserIdReq) (data mod
return
}
func AddBundleBalanceByUserId(data model.BundleBalance) error {
func AddBundleBalanceByUserId(data model.BundleBalanceUsePo) error {
return app.ModuleClients.BundleDB.Transaction(func(tx *gorm.DB) error {
oldData := model.BundleBalance{}
if err := tx.Model(&model.BundleBalance{}).Where("user_id = ?", data.UserId).Order("created_at desc").First(&oldData).Error; err != nil {
return errors.New("用户还没有套餐信息")
}
newData := model.BundleBalance{
Model: oldData.Model,
UserId: oldData.UserId,
OrderUUID: oldData.OrderUUID,
AccountNumber: oldData.AccountNumber + data.AccountNumber,
AccountConsumptionNumber: oldData.AccountConsumptionNumber + data.AccountConsumptionNumber,
VideoNumber: oldData.VideoNumber + data.VideoNumber,
VideoConsumptionNumber: oldData.VideoConsumptionNumber + data.VideoConsumptionNumber,
ImageNumber: oldData.ImageNumber + data.ImageNumber,
ImageConsumptionNumber: oldData.ImageConsumptionNumber + data.ImageConsumptionNumber,
DataAnalysisNumber: oldData.DataAnalysisNumber + data.DataAnalysisNumber,
DataAnalysisConsumptionNumber: oldData.DataAnalysisConsumptionNumber + data.DataAnalysisConsumptionNumber,
ExpansionPacksNumber: oldData.ExpansionPacksNumber + data.ExpansionPacksNumber,
if data.AccountNumber > 0 { // 增加账号消耗数
for range data.AccountNumber {
if oldData.BundleAccountConsumptionNumber < oldData.BundleAccountNumber { // 消耗账号数优先套餐内
oldData.BundleAccountConsumptionNumber++
continue
}
if oldData.IncreaseAccountConsumptionNumber < oldData.IncreaseAccountNumber { // 其次消耗增值的
oldData.IncreaseAccountConsumptionNumber++
continue
}
return errors.New("账号数不足")
}
} else { // 减少账号消耗数,用于解绑账号
for range data.AccountNumber {
if oldData.IncreaseAccountConsumptionNumber > 0 {
oldData.IncreaseAccountConsumptionNumber--
continue
}
if oldData.BundleAccountConsumptionNumber > 0 {
oldData.BundleAccountConsumptionNumber--
continue
}
return errors.New("当前未绑定账号")
}
}
if newData.AccountConsumptionNumber > newData.AccountNumber ||
newData.VideoConsumptionNumber > newData.VideoNumber ||
newData.ImageConsumptionNumber > newData.ImageNumber ||
newData.DataAnalysisConsumptionNumber > newData.DataAnalysisNumber {
return errors.New("套餐余量不足")
for range data.VideoNumber {
if oldData.MonthlyLimitVideoConsumptionNumber < oldData.MonthlyLimitVideoNumber { // 限制类型视频可用额度充足
if oldData.BundleLimitVideoExpiredConsumptionNumber < oldData.BundleLimitVideoExpiredNumber { // 套餐内会过期的限制类型视频充足
oldData.BundleLimitVideoExpiredConsumptionNumber++
oldData.MonthlyLimitVideoConsumptionNumber++
continue
}
return tx.Model(&model.BundleBalance{}).Where("id = ?", oldData.ID).Save(&newData).Error
if oldData.IncreaseLimitVideoExpiredConsumptionNumber < oldData.IncreaseLimitVideoExpiredNumber { // 增值服务会过期的限制类型视频充足
oldData.IncreaseLimitVideoExpiredConsumptionNumber++
oldData.MonthlyLimitVideoConsumptionNumber++
continue
}
if oldData.BundleLimitVideoConsumptionNumber < oldData.BundleLimitVideoNumber { // 套餐内不会过期的限制类型视频充足
oldData.BundleLimitVideoConsumptionNumber++
oldData.MonthlyLimitVideoConsumptionNumber++
continue
}
if oldData.IncreaseLimitVideoConsumptionNumber < oldData.IncreaseLimitVideoNumber { // 增值服务不会过期的限制类型视频充足
oldData.IncreaseLimitVideoConsumptionNumber++
oldData.MonthlyLimitVideoConsumptionNumber++
continue
}
}
if oldData.BundleLimitVideoNumber < oldData.BundleVideoNumber { //套餐内非限制类型的视频充足
oldData.BundleLimitVideoNumber++
continue
}
if oldData.IncreaseVideoConsumptionNumber < oldData.IncreaseVideoNumber { //增值服务非限制类型的视频充足
oldData.IncreaseVideoConsumptionNumber++
continue
}
if oldData.ManualVideoConsumptionNumber < oldData.ManualDataAnalysisNumber { // 手动扩展类型充足
oldData.ManualVideoConsumptionNumber++
oldData.MonthlyManualVideoConsumptionNumber++ // 记录本月使用的手动扩展
continue
}
return errors.New("可用视频数不足")
}
for range data.ImageNumber {
if oldData.MonthlyLimitImageConsumptionNumber < oldData.MonthlyLimitImageNumber { // 限制类型图文可用额度充足
if oldData.BundleLimitImageExpiredConsumptionNumber < oldData.BundleLimitImageExpiredNumber { // 套餐内会过期的限制类型图文充足
oldData.BundleLimitImageExpiredConsumptionNumber++
oldData.MonthlyLimitImageConsumptionNumber++
continue
}
if oldData.IncreaseLimitImageExpiredConsumptionNumber < oldData.IncreaseLimitImageExpiredNumber { // 增值服务会过期的限制类型图文充足
oldData.IncreaseLimitImageExpiredConsumptionNumber++
oldData.MonthlyLimitImageConsumptionNumber++
continue
}
if oldData.BundleLimitImageConsumptionNumber < oldData.BundleLimitImageNumber { // 套餐内不会过期的限制类型图文充足
oldData.BundleLimitImageConsumptionNumber++
oldData.MonthlyLimitImageConsumptionNumber++
continue
}
if oldData.IncreaseLimitImageConsumptionNumber < oldData.IncreaseLimitImageNumber { // 增值服务不会过期的限制类型图文充足
oldData.IncreaseLimitImageConsumptionNumber++
oldData.MonthlyLimitImageConsumptionNumber++
continue
}
}
if oldData.BundleLimitImageNumber < oldData.BundleImageNumber { //套餐内非限制类型的图文充足
oldData.BundleLimitImageNumber++
continue
}
if oldData.IncreaseImageConsumptionNumber < oldData.IncreaseImageNumber { //增值服务非限制类型的图文充足
oldData.IncreaseImageConsumptionNumber++
continue
}
if oldData.ManualImageConsumptionNumber < oldData.ManualDataAnalysisNumber { // 手动扩展类型充足
oldData.ManualImageConsumptionNumber++
oldData.MonthlyManualImageConsumptionNumber++ // 记录本月使用的手动扩展
continue
}
return errors.New("可用图文数不足")
}
for range data.DataAnalysisNumber {
if oldData.MonthlyLimitDataAnalysisConsumptionNumber < oldData.MonthlyLimitDataAnalysisNumber { // 限制类型数据分析可用额度充足
if oldData.BundleLimitDataAnalysisExpiredConsumptionNumber < oldData.BundleLimitDataAnalysisExpiredNumber { // 套餐内会过期的限制类型数据分析充足
oldData.BundleLimitDataAnalysisExpiredConsumptionNumber++
oldData.MonthlyLimitDataAnalysisConsumptionNumber++
continue
}
if oldData.IncreaseLimitDataAnalysisExpiredConsumptionNumber < oldData.IncreaseLimitDataAnalysisExpiredNumber { // 增值服务会过期的限制类型数据分析充足
oldData.IncreaseLimitDataAnalysisExpiredConsumptionNumber++
oldData.MonthlyLimitDataAnalysisConsumptionNumber++
continue
}
if oldData.BundleLimitDataAnalysisConsumptionNumber < oldData.BundleLimitDataAnalysisNumber { // 套餐内不会过期的限制类型数据分析充足
oldData.BundleLimitDataAnalysisConsumptionNumber++
oldData.MonthlyLimitDataAnalysisConsumptionNumber++
continue
}
if oldData.IncreaseLimitDataAnalysisConsumptionNumber < oldData.IncreaseLimitDataAnalysisNumber { // 增值服务不会过期的限制类型数据分析充足
oldData.IncreaseLimitDataAnalysisConsumptionNumber++
oldData.MonthlyLimitDataAnalysisConsumptionNumber++
continue
}
}
if oldData.BundleLimitDataAnalysisNumber < oldData.BundleDataAnalysisNumber { //套餐内非限制类型的数据分析充足
oldData.BundleLimitDataAnalysisNumber++
continue
}
if oldData.IncreaseDataAnalysisConsumptionNumber < oldData.IncreaseDataAnalysisNumber { //增值服务非限制类型的数据分析充足
oldData.IncreaseDataAnalysisConsumptionNumber++
continue
}
if oldData.ManualDataAnalysisConsumptionNumber < oldData.ManualDataAnalysisNumber { // 手动扩展类型充足
oldData.ManualDataAnalysisConsumptionNumber++
oldData.MonthlyManualDataAnalysisConsumptionNumber++ // 记录本月使用的手动扩展
continue
}
return errors.New("可用数据分析数不足")
}
return tx.Model(&model.BundleBalance{}).Where("id = ?", oldData.ID).Save(&oldData).Error
})
}
func ExtendBundleBalanceByUserId(data model.BundleBalanceExtendPo) error {
return app.ModuleClients.BundleDB.Transaction(func(tx *gorm.DB) error {
oldData := model.BundleBalance{}
if err := tx.Model(&model.BundleBalance{}).Where("user_id = ?", data.UserId).Order("created_at desc").First(&oldData).Error; err != nil {
return errors.New("用户还没有套餐信息")
}
oldData.ManualImageNumber += data.ImageNumber
oldData.ManualDataAnalysisNumber += data.DataAnalysisNumber
oldData.ManualVideoNumber += data.VideoNumber
oldData.MonthlyNewDurationNumber += data.DurationNumber // 记录本月新增手动扩展时长
oldData.ExpiredAt.Add(time.Hour * 24 * time.Duration(data.DurationNumber))
return tx.Model(&model.BundleBalance{}).Where("id = ?", oldData.ID).Save(&oldData).Error
})
}

View File

@ -17,13 +17,13 @@ func BundleExtend(req *bundle.BundleExtendRequest) (*bundle.BundleExtendResponse
if err := copier.CopyWithOption(&data, req, copier.Option{DeepCopy: true}); err != nil {
return nil, err
}
if err := dao.AddBundleBalanceByUserId(model.BundleBalance{
if err := dao.ExtendBundleBalanceByUserId(model.BundleBalanceExtendPo{
UserId: int(req.UserId),
VideoNumber: int(req.VideoAdditional),
ImageNumber: int(req.ImagesAdditional),
DataAnalysisNumber: int(req.DataAdditional),
AccountNumber: int(req.AccountAdditional),
ExpansionPacksNumber: 1,
DurationNumber: int(req.DataAdditional),
}); err != nil {
return nil, errors.New("用户没有余量信息")
}
@ -93,7 +93,12 @@ func GetBundleBalanceByUserId(req *bundle.GetBundleBalanceByUserIdReq) (*bundle.
}
func AddBundleBalance(req *bundle.AddBundleBalanceReq) (*bundle.AddBundleBalanceResp, error) {
var data model.BundleBalance
data := model.BundleBalanceUsePo{
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("操作失败")

View File

@ -188,16 +188,87 @@ type UserBundleBalancePo struct {
type BundleBalance struct {
gorm.Model
UserId int `gorm:"column:user_id;not null"`
Month string `gorm:"column:month;type:varchar(32);not null"`
OrderUUID string `gorm:"column:order_uuid;type:varchar(1024);not null"`
AccountNumber int `gorm:"column:account_number;not null"`
AccountConsumptionNumber int `gorm:"column:account_consumption_number;not null"`
VideoNumber int `gorm:"column:video_number;not null"`
VideoConsumptionNumber int `gorm:"column:video_consumption_number;not null"`
ImageNumber int `gorm:"column:image_number;not null"`
ImageConsumptionNumber int `gorm:"column:image_consumption_number;not null"`
DataAnalysisNumber int `gorm:"column:data_analysis_number;not null"`
DataAnalysisConsumptionNumber int `gorm:"column:data_analysis_consumption_number;not null"`
ExpansionPacksNumber int `gorm:"column:expansion_packs_number;not null"`
ExpiredAt time.Time `gorm:"column:expired_at;type:datetime;not null;comment:套餐过期时间"`
StartAt time.Time `gorm:"column:start_at;type:datetime;not null;comment:套餐开始时间"`
BundleAccountNumber int `gorm:"column:bundle_account_number;not null;comment:套餐账号总数"`
IncreaseAccountNumber int `gorm:"column:increase_account_number;not null;comment:增值账号总数"`
BundleAccountConsumptionNumber int `gorm:"column:bundle_account_number;not null;comment:套餐账号使用数"`
IncreaseAccountConsumptionNumber int `gorm:"column:increase_account_number;not null;comment:增值账号使用数"`
BundleVideoNumber int `gorm:"column:bundle_video_number;not null;comment:非限制类型套餐权益视频总数"`
IncreaseVideoNumber int `gorm:"column:increase_video_number;not null;comment:非限制类型增值权益视频总数"`
BundleLimitVideoNumber int `gorm:"column:bundle_limit_video_number;not null;comment:套餐权益限制类型非过期总数"`
IncreaseLimitVideoNumber int `gorm:"column:increase_limit_video_number;not null;comment:增值权益限制类型非过期总数"`
BundleLimitVideoExpiredNumber int `gorm:"column:bundle_limit_video_expired_number;not null;comment:套餐权益限制类型会过期总数"`
IncreaseLimitVideoExpiredNumber int `gorm:"column:increase_limit_video_expired_number;not null;comment:增值权益限制类型会过期总数"`
MonthlyInvalidBundleVideoNumber int `gorm:"column:monthly_invalid_bundle_video_number;not null;comment:当月失效的套餐权益视频总数"`
InvalidBundleVideoNumber int `gorm:"column:invalid_bundle_video_number;not null;comment:历史失效的套餐权益视频总数"`
MonthlyInvalidIncreaseVideoNumber int `gorm:"column:monthly_invalid_increase_video_number;not null;comment:当月失效的增值权益视频总数"`
InvalidIncreaseVideoNumber int `gorm:"column:invalid_increase_video_number;not null;comment:历史失效的增值权益视频总数"`
BundleVideoConsumptionNumber int `gorm:"column:bundle_video_consumption_number;not null;comment:非限制类型套餐权益视频使用数"`
IncreaseVideoConsumptionNumber int `gorm:"column:increase_video_consumption_number;not null;comment:非限制类型增值权益视频使用数"`
BundleLimitVideoConsumptionNumber int `gorm:"column:bundle_limit_video_consumption_number;not null;comment:套餐权益限制类型非过期使用数"`
IncreaseLimitVideoConsumptionNumber int `gorm:"column:increase_limit_video_consumption_number;not null;comment:增值权益限制类型非过期使用数"`
BundleLimitVideoExpiredConsumptionNumber int `gorm:"column:bundle_limit_video_expired_consumption_number;not null;comment:套餐权益限制类型会过期使用数"`
IncreaseLimitVideoExpiredConsumptionNumber int `gorm:"column:increase_limit_video_expired_consumption_number;not null;comment:增值权益限制类型会过期使用数"`
MonthlyLimitVideoNumber int `gorm:"column:monthly_limit_video_number;not null;comment:当月限制类型视频可使用额度"`
MonthlyLimitVideoConsumptionNumber int `gorm:"column:monthly_limit_video_consumption_number;not null;comment:当月限制类型视频已使用额度"`
ManualVideoNumber int `gorm:"column:manual_video_number;comment:手动扩展视频总数"`
ManualVideoConsumptionNumber int `gorm:"column:manual_video_consumption_number;comment:手动扩展视频使用数"`
MonthlyNewManualVideoNumber int `gorm:"column:monthly_new_manual_video_number;comment:当月手动扩展视频新增数"`
MonthlyManualVideoConsumptionNumber int `gorm:"column:monthly_manual_video_consumption_number;comment:当月手动扩展视频使用数"`
BundleImageNumber int `gorm:"column:bundle_image_number;not null;comment:非限制类型套餐权益图片总数"`
IncreaseImageNumber int `gorm:"column:increase_image_number;not null;comment:非限制类型增值权益图片总数"`
BundleLimitImageNumber int `gorm:"column:bundle_limit_image_number;not null;comment:套餐权益限制类型非过期总数"`
IncreaseLimitImageNumber int `gorm:"column:increase_limit_image_number;not null;comment:增值权益限制类型非过期总数"`
BundleLimitImageExpiredNumber int `gorm:"column:bundle_limit_image_expired_number;not null;comment:套餐权益限制类型会过期总数"`
IncreaseLimitImageExpiredNumber int `gorm:"column:increase_limit_image_expired_number;not null;comment:增值权益限制类型会过期总数"`
MonthlyInvalidBundleImageNumber int `gorm:"column:monthly_invalid_bundle_image_number;not null;comment:当月失效的套餐权益图片总数"`
InvalidBundleImageNumber int `gorm:"column:invalid_bundle_image_number;not null;comment:历史失效的套餐权益图片总数"`
MonthlyInvalidIncreaseImageNumber int `gorm:"column:monthly_invalid_increase_image_number;not null;comment:当月失效的增值权益图片总数"`
InvalidIncreaseImageNumber int `gorm:"column:invalid_increase_image_number;not null;comment:历史失效的增值权益图片总数"`
BundleImageConsumptionNumber int `gorm:"column:bundle_image_consumption_number;not null;comment:非限制类型套餐权益图片使用数"`
IncreaseImageConsumptionNumber int `gorm:"column:increase_image_consumption_number;not null;comment:非限制类型增值权益图片使用数"`
BundleLimitImageConsumptionNumber int `gorm:"column:bundle_limit_image_consumption_number;not null;comment:套餐权益限制类型非过期使用数"`
IncreaseLimitImageConsumptionNumber int `gorm:"column:increase_limit_image_consumption_number;not null;comment:增值权益限制类型非过期使用数"`
BundleLimitImageExpiredConsumptionNumber int `gorm:"column:bundle_limit_image_expired_consumption_number;not null;comment:套餐权益限制类型会过期使用数"`
IncreaseLimitImageExpiredConsumptionNumber int `gorm:"column:increase_limit_image_expired_consumption_number;not null;comment:增值权益限制类型会过期使用数"`
MonthlyLimitImageNumber int `gorm:"column:monthly_limit_image_number;not null;comment:当月限制类型图片可使用额度"`
MonthlyLimitImageConsumptionNumber int `gorm:"column:monthly_limit_image_consumption_number;not null;comment:当月限制类型图片已使用额度"`
ManualImageNumber int `gorm:"column:manual_image_number;comment:手动扩展图片总数"`
ManualImageConsumptionNumber int `gorm:"column:manual_image_consumption_number;comment:手动扩展图片使用数"`
MonthlyNewManualImageNumber int `gorm:"column:monthly_new_manual_image_number;comment:当月手动扩展图片新增数"`
MonthlyManualImageConsumptionNumber int `gorm:"column:monthly_manual_image_consumption_number;comment:当月手动扩展图片使用数"`
BundleDataAnalysisNumber int `gorm:"column:bundle_data_analysis_number;not null;comment:非限制类型套餐权益数据分析总数"`
IncreaseDataAnalysisNumber int `gorm:"column:increase_data_analysis_number;not null;comment:非限制类型增值权益数据分析总数"`
BundleLimitDataAnalysisNumber int `gorm:"column:bundle_limit_data_analysis_number;not null;comment:套餐权益限制类型非过期总数"`
IncreaseLimitDataAnalysisNumber int `gorm:"column:increase_limit_data_analysis_number;not null;comment:增值权益限制类型非过期总数"`
BundleLimitDataAnalysisExpiredNumber int `gorm:"column:bundle_limit_data_analysis_expired_number;not null;comment:套餐权益限制类型会过期总数"`
IncreaseLimitDataAnalysisExpiredNumber int `gorm:"column:increase_limit_data_analysis_expired_number;not null;comment:增值权益限制类型会过期总数"`
MonthlyInvalidBundleDataAnalysisNumber int `gorm:"column:monthly_invalid_bundle_data_analysis_number;not null;comment:当月失效的套餐权益数据分析总数"`
InvalidBundleDataAnalysisNumber int `gorm:"column:invalid_bundle_data_analysis_number;not null;comment:历史失效的套餐权益数据分析总数"`
MonthlyInvalidIncreaseDataAnalysisNumber int `gorm:"column:monthly_invalid_increase_data_analysis_number;not null;comment:当月失效的增值权益数据分析总数"`
InvalidIncreaseDataAnalysisNumber int `gorm:"column:invalid_increase_data_analysis_number;not null;comment:历史失效的增值权益数据分析总数"`
BundleDataAnalysisConsumptionNumber int `gorm:"column:bundle_data_analysis_consumption_number;not null;comment:非限制类型套餐权益数据分析使用数"`
IncreaseDataAnalysisConsumptionNumber int `gorm:"column:increase_data_analysis_consumption_number;not null;comment:非限制类型增值权益数据分析使用数"`
BundleLimitDataAnalysisConsumptionNumber int `gorm:"column:bundle_limit_data_analysis_consumption_number;not null;comment:套餐权益限制类型非过期使用数"`
IncreaseLimitDataAnalysisConsumptionNumber int `gorm:"column:increase_limit_data_analysis_consumption_number;not null;comment:增值权益限制类型非过期使用数"`
BundleLimitDataAnalysisExpiredConsumptionNumber int `gorm:"column:bundle_limit_data_analysis_expired_consumption_number;not null;comment:套餐权益限制类型会过期使用数"`
IncreaseLimitDataAnalysisExpiredConsumptionNumber int `gorm:"column:increase_limit_data_analysis_expired_consumption_number;not null;comment:增值权益限制类型会过期使用数"`
MonthlyLimitDataAnalysisNumber int `gorm:"column:monthly_limit_data_analysis_number;not null;comment:当月限制类型数据分析可使用额度"`
MonthlyLimitDataAnalysisConsumptionNumber int `gorm:"column:monthly_limit_data_analysis_consumption_number;not null;comment:当月限制类型数据分析已使用额度"`
ManualDataAnalysisNumber int `gorm:"column:manual_data_analysis_number;comment:手动扩展数据分析总数"`
ManualDataAnalysisConsumptionNumber int `gorm:"column:manual_data_analysis_consumption_number;comment:手动扩展数据分析使用数"`
MonthlyNewManualDataAnalysisNumber int `gorm:"column:monthly_new_manual_data_analysis_number;comment:当月手动扩展数据分析新增数"`
MonthlyManualDataAnalysisConsumptionNumber int `gorm:"column:monthly_manual_data_analysis_consumption_number;comment:当月手动扩展数据分析使用数"`
MonthlyNewDurationNumber int `gorm:"column:monthly_new_duration_number;comment:当月新增手动扩展时长(天)"`
ExpansionPacksNumber int `gorm:"column:expansion_packs_number;not null;comment:扩展包数量"`
}
// TableName 表名称
@ -215,3 +286,19 @@ type BundleActivate struct {
func (*BundleActivate) TableName() string {
return "bundle_activate"
}
type BundleBalanceUsePo struct {
UserId int
AccountNumber int
VideoNumber int
ImageNumber int
DataAnalysisNumber int
}
type BundleBalanceExtendPo struct {
UserId int
AccountNumber int
VideoNumber int
ImageNumber int
DataAnalysisNumber int
DurationNumber int
}