使用余量修改

This commit is contained in:
lzh 2025-10-21 16:39:51 +08:00
parent 60d56109fe
commit ef1a9ab5de
2 changed files with 106 additions and 83 deletions

View File

@ -210,38 +210,38 @@ func AddBundleBalanceByUserId(data model.BundleBalanceUsePo) (usedType int, err
return errors.New("当前未绑定账号")
}
if data.VideoNumber > 0 {
if oldData.MonthlyLimitVideoExpireNumber > oldData.MonthlyLimitVideoExpireConsumptionNumber { // 当月可使用的会过期的限制类型充足
if oldData.BundleLimitVideoExpiredConsumptionNumber < oldData.BundleLimitVideoExpiredNumber { // 套餐内会过期的限制类型视频充足
oldData.MonthlyLimitVideoExpireConsumptionNumber++
oldData.BundleLimitVideoExpiredConsumptionNumber++
oldData.MonthlyBundleVideoConsumptionNumber++
usedType = 1
goto Over
}
if oldData.IncreaseLimitVideoExpiredConsumptionNumber < oldData.IncreaseLimitVideoExpiredNumber { // 增值服务会过期的限制类型视频充足
oldData.MonthlyLimitVideoExpireConsumptionNumber++
oldData.IncreaseLimitVideoExpiredConsumptionNumber++
oldData.MonthlyIncreaseVideoConsumptionNumber++
usedType = 2
goto Over
}
// 当月可使用的会过期的限制类型充足
if oldData.BundleLimitVideoExpiredConsumptionNumber < cal(oldData, oldData.BundleLimitVideoExpiredNumber, oldData.MonthlyLimitVideoQuotaNumber, time.Now()) { // 套餐内会过期的限制类型视频充足
oldData.MonthlyLimitVideoExpireConsumptionNumber++
oldData.BundleLimitVideoExpiredConsumptionNumber++
oldData.MonthlyBundleVideoConsumptionNumber++
usedType = 1
goto Over
}
if oldData.MonthlyLimitVideoNumber > oldData.MonthlyLimitVideoConsumptionNumber { // 当月可使用的不过期的限制类型充足
if oldData.BundleLimitVideoConsumptionNumber < oldData.BundleLimitVideoNumber { // 套餐内不过期的限制类型视频充足
oldData.MonthlyLimitVideoConsumptionNumber++
oldData.BundleLimitVideoConsumptionNumber++
oldData.MonthlyBundleVideoConsumptionNumber++
usedType = 1
goto Over
}
if oldData.IncreaseLimitVideoConsumptionNumber < oldData.IncreaseLimitVideoNumber { // 增值服务不过期的限制类型视频充足
oldData.MonthlyLimitVideoConsumptionNumber++
oldData.IncreaseLimitVideoConsumptionNumber++
oldData.MonthlyIncreaseVideoConsumptionNumber++
usedType = 2
goto Over
}
if oldData.IncreaseLimitVideoExpiredConsumptionNumber < cal(oldData, oldData.IncreaseLimitVideoExpiredNumber, oldData.MonthlyLimitVideoQuotaNumber, time.Now()) { // 增值服务会过期的限制类型视频充足
oldData.MonthlyLimitVideoExpireConsumptionNumber++
oldData.IncreaseLimitVideoExpiredConsumptionNumber++
oldData.MonthlyIncreaseVideoConsumptionNumber++
usedType = 2
goto Over
}
// 当月可使用的不过期的限制类型充足
if oldData.BundleLimitVideoConsumptionNumber < cal(oldData, oldData.BundleLimitVideoNumber, oldData.MonthlyLimitVideoQuotaNumber, time.Now()) { // 套餐内不过期的限制类型视频充足
oldData.MonthlyLimitVideoConsumptionNumber++
oldData.BundleLimitVideoConsumptionNumber++
oldData.MonthlyBundleVideoConsumptionNumber++
usedType = 1
goto Over
}
if oldData.IncreaseLimitVideoConsumptionNumber < cal(oldData, oldData.IncreaseLimitVideoNumber, oldData.MonthlyLimitVideoQuotaNumber, time.Now()) { // 增值服务不过期的限制类型视频充足
oldData.MonthlyLimitVideoConsumptionNumber++
oldData.IncreaseLimitVideoConsumptionNumber++
oldData.MonthlyIncreaseVideoConsumptionNumber++
usedType = 2
goto Over
}
if oldData.BundleVideoConsumptionNumber < oldData.BundleVideoNumber { //套餐内非限制类型的视频充足
oldData.BundleVideoConsumptionNumber++
oldData.MonthlyBundleVideoConsumptionNumber++
@ -264,34 +264,34 @@ func AddBundleBalanceByUserId(data model.BundleBalanceUsePo) (usedType int, err
}
if data.ImageNumber > 0 {
if oldData.MonthlyLimitImageExpireNumber > oldData.MonthlyLimitImageExpireConsumptionNumber { // 当月可使用的会过期的限制类型充足
if oldData.BundleLimitImageExpiredConsumptionNumber < oldData.BundleLimitImageExpiredNumber { // 套餐内会过期的限制类型图文充足
oldData.MonthlyLimitImageExpireConsumptionNumber++
oldData.BundleLimitImageExpiredConsumptionNumber++
oldData.MonthlyBundleImageConsumptionNumber++
goto Over
}
if oldData.IncreaseLimitImageExpiredConsumptionNumber < oldData.IncreaseLimitImageExpiredNumber { // 增值服务会过期的限制类型图文充足
oldData.MonthlyLimitImageExpireConsumptionNumber++
oldData.IncreaseLimitImageExpiredConsumptionNumber++
oldData.MonthlyIncreaseImageConsumptionNumber++
goto Over
}
// 当月可使用的会过期的限制类型充足
if oldData.BundleLimitImageExpiredConsumptionNumber < cal(oldData, oldData.BundleLimitImageExpiredNumber, oldData.MonthlyLimitImageQuotaNumber, time.Now()) { // 套餐内会过期的限制类型图文充足
oldData.MonthlyLimitImageExpireConsumptionNumber++
oldData.BundleLimitImageExpiredConsumptionNumber++
oldData.MonthlyBundleImageConsumptionNumber++
goto Over
}
if oldData.MonthlyLimitImageNumber > oldData.MonthlyLimitImageConsumptionNumber { // 当月可使用的不过期的限制类型充足
if oldData.BundleLimitImageConsumptionNumber < oldData.BundleLimitImageNumber { // 套餐内不过期的限制类型图文充足
oldData.MonthlyLimitImageConsumptionNumber++
oldData.BundleLimitImageConsumptionNumber++
oldData.MonthlyBundleImageConsumptionNumber++
goto Over
}
if oldData.IncreaseLimitImageConsumptionNumber < oldData.IncreaseLimitImageNumber { // 增值服务不过期的限制类型图文充足
oldData.MonthlyLimitImageConsumptionNumber++
oldData.IncreaseLimitImageConsumptionNumber++
oldData.MonthlyIncreaseImageConsumptionNumber++
goto Over
}
if oldData.IncreaseLimitImageExpiredConsumptionNumber < cal(oldData, oldData.IncreaseLimitImageExpiredNumber, oldData.MonthlyLimitImageQuotaNumber, time.Now()) { // 增值服务会过期的限制类型图文充足
oldData.MonthlyLimitImageExpireConsumptionNumber++
oldData.IncreaseLimitImageExpiredConsumptionNumber++
oldData.MonthlyIncreaseImageConsumptionNumber++
goto Over
}
// 当月可使用的不过期的限制类型充足
if oldData.BundleLimitImageConsumptionNumber < cal(oldData, oldData.BundleLimitImageNumber, oldData.MonthlyLimitImageQuotaNumber, time.Now()) { // 套餐内不过期的限制类型图文充足
oldData.MonthlyLimitImageConsumptionNumber++
oldData.BundleLimitImageConsumptionNumber++
oldData.MonthlyBundleImageConsumptionNumber++
goto Over
}
if oldData.IncreaseLimitImageConsumptionNumber < cal(oldData, oldData.IncreaseLimitImageNumber, oldData.MonthlyLimitImageQuotaNumber, time.Now()) { // 增值服务不过期的限制类型图文充足
oldData.MonthlyLimitImageConsumptionNumber++
oldData.IncreaseLimitImageConsumptionNumber++
oldData.MonthlyIncreaseImageConsumptionNumber++
goto Over
}
if oldData.BundleImageConsumptionNumber < oldData.BundleImageNumber { //套餐内非限制类型的图文充足
oldData.BundleImageConsumptionNumber++
oldData.MonthlyBundleImageConsumptionNumber++
@ -311,34 +311,33 @@ func AddBundleBalanceByUserId(data model.BundleBalanceUsePo) (usedType int, err
}
if data.DataAnalysisNumber > 0 {
if oldData.MonthlyLimitDataAnalysisExpireNumber > oldData.MonthlyLimitDataAnalysisExpireConsumptionNumber { // 当月可使用的会过期的限制类型充足
if oldData.BundleLimitDataAnalysisExpiredConsumptionNumber < oldData.BundleLimitDataAnalysisExpiredNumber { // 套餐内会过期的限制类型数据分析充足
oldData.MonthlyLimitDataAnalysisExpireConsumptionNumber++
oldData.BundleLimitDataAnalysisExpiredConsumptionNumber++
oldData.MonthlyBundleDataAnalysisConsumptionNumber++
goto Over
}
if oldData.IncreaseLimitDataAnalysisExpiredConsumptionNumber < oldData.IncreaseLimitDataAnalysisExpiredNumber { // 增值服务会过期的限制类型数据分析充足
oldData.MonthlyLimitDataAnalysisExpireConsumptionNumber++
oldData.IncreaseLimitDataAnalysisExpiredConsumptionNumber++
oldData.MonthlyIncreaseDataAnalysisConsumptionNumber++
goto Over
}
// 当月可使用的会过期的限制类型充足
if oldData.BundleLimitDataAnalysisExpiredConsumptionNumber < cal(oldData, oldData.BundleLimitDataAnalysisExpiredNumber, oldData.MonthlyLimitDataAnalysisQuotaNumber, time.Now()) { // 套餐内会过期的限制类型数据分析充足
oldData.MonthlyLimitDataAnalysisExpireConsumptionNumber++
oldData.BundleLimitDataAnalysisExpiredConsumptionNumber++
oldData.MonthlyBundleDataAnalysisConsumptionNumber++
goto Over
}
if oldData.MonthlyLimitDataAnalysisNumber > oldData.MonthlyLimitDataAnalysisConsumptionNumber { // 当月可使用的不过期的限制类型充足
if oldData.BundleLimitDataAnalysisConsumptionNumber < oldData.BundleLimitDataAnalysisNumber { // 套餐内不过期的限制类型数据分析充足
oldData.MonthlyLimitDataAnalysisConsumptionNumber++
oldData.BundleLimitDataAnalysisConsumptionNumber++
oldData.MonthlyBundleDataAnalysisConsumptionNumber++
goto Over
}
if oldData.IncreaseLimitDataAnalysisConsumptionNumber < oldData.IncreaseLimitDataAnalysisNumber { // 增值服务不过期的限制类型数据分析充足
oldData.MonthlyLimitDataAnalysisConsumptionNumber++
oldData.IncreaseLimitDataAnalysisConsumptionNumber++
oldData.MonthlyIncreaseDataAnalysisConsumptionNumber++
goto Over
}
if oldData.IncreaseLimitDataAnalysisExpiredConsumptionNumber < cal(oldData, oldData.IncreaseLimitDataAnalysisExpiredNumber, oldData.MonthlyLimitDataAnalysisQuotaNumber, time.Now()) { // 增值服务会过期的限制类型数据分析充足
oldData.MonthlyLimitDataAnalysisExpireConsumptionNumber++
oldData.IncreaseLimitDataAnalysisExpiredConsumptionNumber++
oldData.MonthlyIncreaseDataAnalysisConsumptionNumber++
goto Over
}
// 当月可使用的不过期的限制类型充足
if oldData.BundleLimitDataAnalysisConsumptionNumber < cal(oldData, oldData.BundleLimitDataAnalysisNumber, oldData.MonthlyLimitDataAnalysisQuotaNumber, time.Now()) { // 套餐内不过期的限制类型数据分析充足
oldData.MonthlyLimitDataAnalysisConsumptionNumber++
oldData.BundleLimitDataAnalysisConsumptionNumber++
oldData.MonthlyBundleDataAnalysisConsumptionNumber++
goto Over
}
if oldData.IncreaseLimitDataAnalysisConsumptionNumber < cal(oldData, oldData.IncreaseLimitDataAnalysisNumber, oldData.MonthlyLimitDataAnalysisQuotaNumber, time.Now()) { // 增值服务不过期的限制类型数据分析充足
oldData.MonthlyLimitDataAnalysisConsumptionNumber++
oldData.IncreaseLimitDataAnalysisConsumptionNumber++
oldData.MonthlyIncreaseDataAnalysisConsumptionNumber++
goto Over
}
if oldData.BundleLimitDataAnalysisNumber < oldData.BundleDataAnalysisNumber { //套餐内非限制类型的数据分析充足
oldData.BundleLimitDataAnalysisNumber++
oldData.MonthlyBundleDataAnalysisConsumptionNumber++
@ -648,3 +647,25 @@ func SetBundleBalanceLayout(req *bundle.SetBundleBalanceLayoutReq) error {
DoUpdates: clause.AssignmentColumns([]string{"data"}),
}).Create(&model.BundleBalanceLayout{Data: req.Data, UserId: uint64(req.UserId)}).Error
}
// 计算本月发放的限制类型数量
func cal(data model.BundleBalance, total, limit int, date time.Time) int {
var released int // 已释放的次数
if data.StartAt.Month() == date.Month() && data.StartAt.Year() == date.Year() { //第一个月释放的
} else if data.StartAt.Day() >= 16 {
released += (limit + 1) / 2
} else {
released += limit
}
interval := date.Year()*12 + int(date.Month()) - (data.StartAt.Year()*12 + int(data.StartAt.Month())) // 后续月份释放的
released += interval * limit
remaining := max(total-released, 0) // 还剩余多少次没有发放
if data.StartAt.Month() == date.Month() && data.StartAt.Year() == date.Year() && data.StartAt.Day() >= 16 { // 本月为第一个月并且16号后购买只给一半向上取整
return min((limit+1)/2, remaining)
}
if data.ExpiredAt.Month() == date.Month() && data.ExpiredAt.Year() == date.Year() && data.ExpiredAt.Day() < 16 { // 本月为最后一个月并且16号前到期只给一半向下取整
return min(limit/2, remaining)
}
return min(limit, remaining)
}

View File

@ -144,7 +144,9 @@ func GetBundleBalanceList(req *bundle.GetBundleBalanceListReq) (*bundle.GetBundl
ManualDataAnalysisNumber: int32(m.ManualDataAnalysisNumber),
Activate: int32(m.Activate),
}
if result.Activate != 2 { // 除了等于0的情况
result.Activate = 1
}
if m.OrderUUID != "" {
result.Bought = 2
} else {