套餐使用情况
This commit is contained in:
parent
12301aef82
commit
f4d6345707
@ -109,11 +109,12 @@ func GetBundleBalanceList(req *bundle.GetBundleBalanceListReq) (data []model.Bun
|
||||
) bor2 ON bor1.customer_id = bor2.customer_id AND bor1.created_at = bor2.max_created_time`)
|
||||
session := app.ModuleClients.BundleDB.Table("`micro-account`.`user` AS u").Unscoped().
|
||||
Select(`bb.*, bor.bundle_name, bor.status,
|
||||
bor.uuid as order_uuid, rn.name as user_name,
|
||||
bor.uuid as order_uuid, rn.name as user_name,bc.activate,
|
||||
u.tel_num as user_phone_number, u.id as user_id`).
|
||||
Joins("LEFT JOIN `micro-account`.real_name rn ON u.real_name_id = rn.id").
|
||||
Joins("LEFT JOIN (?) as bor ON bor.customer_id = u.id", subQuery).
|
||||
Joins("LEFT JOIN fiee_bundle.bundle_balance bb ON u.id = bb.user_id AND bb.order_uuid = bor.uuid").
|
||||
Joins("LEFT JOIN bundle_activate bc on bc.user_id = u.id").
|
||||
Where("rn.name IS NOT NULL").
|
||||
Where("u.deleted_at = 0").
|
||||
Where("bb.month = ?", req.Month).
|
||||
@ -132,10 +133,10 @@ func GetBundleBalanceList(req *bundle.GetBundleBalanceListReq) (data []model.Bun
|
||||
session = session.Where("bor.bundle_name like ?", "%"+req.BundleName+"%")
|
||||
}
|
||||
if req.ExpiredTimeEnd != 0 {
|
||||
session = session.Where("bor.expiration_time <= ?", time.UnixMilli(req.ExpiredTimeEnd))
|
||||
session = session.Where("bb.expired_at <= ?", time.UnixMilli(req.ExpiredTimeEnd))
|
||||
}
|
||||
if req.ExpiredTimeStart != 0 {
|
||||
session = session.Where("bor.expiration_time >= ?", time.UnixMilli(req.ExpiredTimeStart))
|
||||
session = session.Where("bb.expired_at >= ?", time.UnixMilli(req.ExpiredTimeStart))
|
||||
}
|
||||
if req.Bought == 2 {
|
||||
session = session.Where("bor.uuid IS NOT NULL")
|
||||
@ -155,42 +156,40 @@ func GetBundleBalanceList(req *bundle.GetBundleBalanceListReq) (data []model.Bun
|
||||
}
|
||||
|
||||
func GetBundleBalanceByUserId(req *bundle.GetBundleBalanceByUserIdReq) (data model.UserBundleBalancePo, err error) {
|
||||
err = app.ModuleClients.BundleDB.Table("fiee_bundle.bundle_balance AS bb").
|
||||
Select("bb.*,bor.uuid AS order_uuid, bor.bundle_name AS bundle_name, bor.status AS bundle_status, bor.pay_time AS pay_time, bor.expiration_time AS expired_time,bor.amount AS payment_amount,bor.amount_type AS payment_type").
|
||||
Joins("LEFT JOIN bundle_order_records bor ON bor.uuid = bb.order_uuid").
|
||||
Joins("LEFT JOIN `micro-account`.`user` u ON u.id = bb.user_id").
|
||||
Where("bor.deleted_at IS NULL").
|
||||
Where("bb.user_id = ?", req.UserId).
|
||||
// Where("bor.expiration_time > ?", time.Now()).
|
||||
Order("bb.created_at desc").
|
||||
First(&data).Error
|
||||
if err != nil {
|
||||
return
|
||||
}
|
||||
var additionalInfo model.UserBundleBalancePo
|
||||
err = app.ModuleClients.BundleDB.Model(&model.BundleExtensionRecords{}).
|
||||
Select("SUM(account_additional) as account_additional, SUM(images_additional) as image_additional, SUM(video_additional) as video_additional, SUM(data_additional) as data_additional").
|
||||
Where("type = 1"). // 手动扩展
|
||||
Where("user_id = ?", req.UserId).
|
||||
Where("created_at > ?", data.PayTime). // 判断扩展是否生效
|
||||
First(&additionalInfo).Error
|
||||
if err != nil {
|
||||
return
|
||||
}
|
||||
data.AccountAdditional = additionalInfo.AccountAdditional
|
||||
data.VideoAdditional = additionalInfo.VideoAdditional
|
||||
data.ImageAdditional = additionalInfo.ImageAdditional
|
||||
data.DataAnalysisAdditional = additionalInfo.DataAnalysisAdditional
|
||||
subQuery := app.ModuleClients.BundleDB.Table("bundle_order_records as bor1").
|
||||
Select("bor1.*").
|
||||
Joins(`INNER JOIN (
|
||||
SELECT customer_id, MAX(created_at) AS max_created_time
|
||||
FROM bundle_order_records
|
||||
GROUP BY customer_id
|
||||
) bor2 ON bor1.customer_id = bor2.customer_id AND bor1.created_at = bor2.max_created_time`)
|
||||
session := app.ModuleClients.BundleDB.Table("`micro-account`.`user` AS u").Unscoped().
|
||||
Select(`bb.*, bor.bundle_name, bor.status,bor.amount AS payment_amount,bor.amount_type AS payment_type,
|
||||
bor.uuid as order_uuid, rn.name as user_name,bc.activate,
|
||||
u.tel_num as user_phone_number, u.id as user_id`).
|
||||
Joins("LEFT JOIN `micro-account`.real_name rn ON u.real_name_id = rn.id").
|
||||
Joins("LEFT JOIN (?) as bor ON bor.customer_id = u.id", subQuery).
|
||||
Joins("LEFT JOIN fiee_bundle.bundle_balance bb ON u.id = bb.user_id AND bb.order_uuid = bor.uuid").
|
||||
Joins("LEFT JOIN bundle_activate bc on bc.user_id = u.id").
|
||||
Where("rn.name IS NOT NULL").
|
||||
Where("u.deleted_at = 0").
|
||||
Where("u.id = ?", req.UserId).
|
||||
Where("bb.month = ?", time.Now().Format("2006-01")).
|
||||
Order("bor.expiration_time desc")
|
||||
err = session.First(&data).Error
|
||||
return
|
||||
}
|
||||
|
||||
func AddBundleBalanceByUserId(data model.BundleBalanceUsePo) (usedType int, err error) {
|
||||
err = app.ModuleClients.BundleDB.Transaction(func(tx *gorm.DB) (err error) {
|
||||
ba := model.BundleActivate{}
|
||||
if err := tx.Model(&model.BundleActivate{}).Where("user_id = ?", data.UserId).First(&ba).Error; err != nil || ba.Activate != 2 {
|
||||
return errors.New("套餐未激活")
|
||||
}
|
||||
oldData := model.BundleBalance{}
|
||||
if err := tx.Model(&model.BundleBalance{}).Where("user_id = ?", data.UserId).Where("month = ?", time.Now().Format("2006-01")).Order("created_at desc").First(&oldData).Error; err != nil {
|
||||
return errors.New("用户还没有套餐信息")
|
||||
}
|
||||
|
||||
if data.AccountNumber > 0 { // 增加账号消耗数
|
||||
if oldData.BundleAccountConsumptionNumber < oldData.BundleAccountNumber { // 消耗账号数优先套餐内
|
||||
oldData.BundleAccountConsumptionNumber++
|
||||
@ -503,7 +502,7 @@ func BundleActivate(ids []uint32) error {
|
||||
if err := tx.Model(&model.BundleActivate{}).Where("user_id = ?", v).First(&activate).Error; err != nil {
|
||||
return err
|
||||
}
|
||||
if !activate.Activate { // 第一次激活重新计算余量的开始时间和过期时间
|
||||
if activate.Activate == 2 { // 第一次激活重新计算余量的开始时间和过期时间
|
||||
balance := model.BundleBalance{}
|
||||
if err := tx.Model(&model.BundleBalance{}).Where("user_id = ?", v).First(&balance).Error; err != nil {
|
||||
return err
|
||||
@ -513,7 +512,7 @@ func BundleActivate(ids []uint32) error {
|
||||
if err := tx.Model(&model.BundleBalance{}).Save(balance).Error; err != nil {
|
||||
return err
|
||||
}
|
||||
activate.Activate = true
|
||||
activate.Activate = 2
|
||||
return tx.Model(&model.BundleActivate{}).Save(activate).Error
|
||||
}
|
||||
return nil
|
||||
|
@ -121,6 +121,8 @@ func GetBundleBalanceList(req *bundle.GetBundleBalanceListReq) (*bundle.GetBundl
|
||||
MonthlyManualVideoConsumptionNumber: int32(m.MonthlyManualVideoConsumptionNumber),
|
||||
MonthlyManualImageConsumptionNumber: int32(m.MonthlyManualImageConsumptionNumber),
|
||||
MonthlyManualDataAnalysisConsumptionNumber: int32(m.MonthlyManualDataAnalysisConsumptionNumber),
|
||||
|
||||
Activate: int32(m.Activate),
|
||||
}
|
||||
|
||||
if m.OrderUUID != "" {
|
||||
@ -137,15 +139,31 @@ func GetBundleBalanceByUserId(req *bundle.GetBundleBalanceByUserIdReq) (*bundle.
|
||||
data, err := dao.GetBundleBalanceByUserId(req)
|
||||
if err != nil {
|
||||
logger.Error(err)
|
||||
return nil, errors.New("查询失败")
|
||||
return nil, errors.New("无套餐数据")
|
||||
}
|
||||
if data.Activate != 2 {
|
||||
return nil, errors.New("套餐未激活")
|
||||
}
|
||||
result := &bundle.GetBundleBalanceByUserIdResp{
|
||||
OrderUUID: data.OrderUUID,
|
||||
BundleName: data.BundleName,
|
||||
PayTime: data.StartAt.UnixMilli(),
|
||||
ExpiredTime: data.ExpiredAt.UnixMilli(),
|
||||
PaymentAmount: data.PaymentAmount,
|
||||
PaymentType: data.PaymentType,
|
||||
AccountNumber: int32(data.BundleAccountNumber) + int32(data.IncreaseAccountNumber) + int32(data.ManualAccountNumber),
|
||||
AccountAdditional: int32(data.ManualAccountNumber),
|
||||
AccountConsumptionNumber: int32(data.BundleAccountConsumptionNumber) + int32(data.IncreaseAccountConsumptionNumber),
|
||||
VideoNumber: int32(data.BundleVideoNumber) + int32(data.BundleLimitVideoNumber) + int32(data.BundleLimitVideoExpiredNumber) + int32(data.IncreaseVideoNumber) + int32(data.IncreaseLimitVideoNumber) + int32(data.IncreaseLimitVideoExpiredNumber),
|
||||
VideoAdditional: int32(data.ManualVideoNumber),
|
||||
VideoConsumptionNumber: int32(data.BundleVideoConsumptionNumber) + int32(data.BundleLimitVideoConsumptionNumber) + int32(data.BundleLimitVideoExpiredConsumptionNumber) + int32(data.IncreaseVideoConsumptionNumber) + int32(data.IncreaseLimitVideoConsumptionNumber) + int32(data.IncreaseLimitVideoExpiredConsumptionNumber),
|
||||
ImageNumber: int32(data.BundleVideoNumber) + int32(data.BundleLimitVideoNumber) + int32(data.BundleLimitVideoExpiredNumber) + int32(data.IncreaseVideoNumber) + int32(data.IncreaseLimitVideoNumber) + int32(data.IncreaseLimitVideoExpiredNumber),
|
||||
ImageAdditional: int32(data.ManualVideoNumber),
|
||||
ImageConsumptionNumber: int32(data.BundleVideoConsumptionNumber) + int32(data.BundleLimitVideoConsumptionNumber) + int32(data.BundleLimitVideoExpiredConsumptionNumber) + int32(data.IncreaseVideoConsumptionNumber) + int32(data.IncreaseLimitVideoConsumptionNumber) + int32(data.IncreaseLimitVideoExpiredConsumptionNumber),
|
||||
DataAnalysisNumber: int32(data.BundleVideoNumber) + int32(data.BundleLimitVideoNumber) + int32(data.BundleLimitVideoExpiredNumber) + int32(data.IncreaseVideoNumber) + int32(data.IncreaseLimitVideoNumber) + int32(data.IncreaseLimitVideoExpiredNumber),
|
||||
DataAnalysisAdditional: int32(data.ManualVideoNumber),
|
||||
DataAnalysisConsumptionNumber: int32(data.BundleVideoConsumptionNumber) + int32(data.BundleLimitVideoConsumptionNumber) + int32(data.BundleLimitVideoExpiredConsumptionNumber) + int32(data.IncreaseVideoConsumptionNumber) + int32(data.IncreaseLimitVideoConsumptionNumber) + int32(data.IncreaseLimitVideoExpiredConsumptionNumber),
|
||||
}
|
||||
result := &bundle.GetBundleBalanceByUserIdResp{}
|
||||
copier.Copy(result, &data)
|
||||
loc, _ := time.LoadLocation("Asia/Shanghai")
|
||||
t, _ := time.ParseInLocation(time.DateTime, data.ExpiredTime, loc)
|
||||
result.ExpiredTime = t.UnixMilli()
|
||||
t, _ = time.ParseInLocation(time.DateTime, data.PayTime, loc)
|
||||
result.PayTime = t.UnixMilli()
|
||||
return result, nil
|
||||
}
|
||||
|
||||
|
@ -150,6 +150,7 @@ type BundleBalancePo struct {
|
||||
BundleName string `gorm:"column:bundle_name"`
|
||||
Status int `gorm:"column:status"`
|
||||
OrderUUID string `gorm:"column:order_uuid"`
|
||||
Activate int `gorm:"column:activate"`
|
||||
BundleBalance
|
||||
}
|
||||
|
||||
@ -162,19 +163,8 @@ type UserBundleBalancePo struct {
|
||||
ExpiredTime string `json:"expiredTime" gorm:"column:expired_time"`
|
||||
PaymentAmount string `json:"paymentAmount" gorm:"column:payment_amount"`
|
||||
PaymentType int32 `json:"paymentType" gorm:"column:payment_type"`
|
||||
AccountNumber int32 `json:"accountNumber" gorm:"column:account_number"`
|
||||
AccountAdditional int32 `json:"accountAdditional" gorm:"column:account_additional"`
|
||||
AccountConsumptionNumber int32 `json:"accountConsumptionNumber" gorm:"column:account_consumption_number"`
|
||||
VideoNumber int32 `json:"videoNumber" gorm:"column:video_number"`
|
||||
VideoAdditional int32 `json:"videoAdditional" gorm:"column:video_additional"`
|
||||
VideoConsumptionNumber int32 `json:"videoConsumptionNumber" gorm:"column:video_consumption_number"`
|
||||
ImageNumber int32 `json:"imageNumber" gorm:"column:image_number"`
|
||||
ImageAdditional int32 `json:"imageAdditional" gorm:"column:image_additional"`
|
||||
ImageConsumptionNumber int32 `json:"imageConsumptionNumber" gorm:"column:image_consumption_number"`
|
||||
DataAnalysisNumber int32 `json:"dataAnalysisNumber" gorm:"column:data_analysis_number"`
|
||||
DataAnalysisAdditional int32 `json:"dataAnalysisAdditional" gorm:"column:data_analysis_additional"`
|
||||
DataAnalysisConsumptionNumber int32 `json:"dataAnalysisConsumptionNumber" gorm:"column:data_analysis_consumption_number"`
|
||||
ExpansionPacksNumber int32 `json:"expansionPacksNumber" gorm:"column:expansion_packs_number"`
|
||||
Activate int `gorm:"column:activate"`
|
||||
BundleBalance
|
||||
}
|
||||
|
||||
type BundleBalance struct {
|
||||
@ -297,7 +287,7 @@ func (*BundleBalance) TableName() string {
|
||||
type BundleActivate struct {
|
||||
gorm.Model
|
||||
UserId int `gorm:"column:user_id;not null;unique"`
|
||||
Activate bool `gorm:"column:activate"`
|
||||
Activate int `gorm:"column:activate"`
|
||||
}
|
||||
|
||||
// TableName 表名称
|
||||
|
@ -752,6 +752,8 @@ message BundleBalanceItem {
|
||||
int32 monthlyManualVideoConsumptionNumber = 48; // 当月手动扩展视频使用数
|
||||
int32 monthlyManualImageConsumptionNumber = 49; // 当月手动扩展图文使用数
|
||||
int32 monthlyManualDataAnalysisConsumptionNumber = 50; // 当月手动扩展数据分析使用数
|
||||
|
||||
int32 activate = 51 ; // 激活状态
|
||||
}
|
||||
|
||||
message GetBundleBalanceListResp{
|
||||
|
File diff suppressed because it is too large
Load Diff
Loading…
Reference in New Issue
Block a user