套餐使用情况
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`)
|
) 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().
|
session := app.ModuleClients.BundleDB.Table("`micro-account`.`user` AS u").Unscoped().
|
||||||
Select(`bb.*, bor.bundle_name, bor.status,
|
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`).
|
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 `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 (?) 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 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("rn.name IS NOT NULL").
|
||||||
Where("u.deleted_at = 0").
|
Where("u.deleted_at = 0").
|
||||||
Where("bb.month = ?", req.Month).
|
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+"%")
|
session = session.Where("bor.bundle_name like ?", "%"+req.BundleName+"%")
|
||||||
}
|
}
|
||||||
if req.ExpiredTimeEnd != 0 {
|
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 {
|
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 {
|
if req.Bought == 2 {
|
||||||
session = session.Where("bor.uuid IS NOT NULL")
|
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) {
|
func GetBundleBalanceByUserId(req *bundle.GetBundleBalanceByUserIdReq) (data model.UserBundleBalancePo, err error) {
|
||||||
err = app.ModuleClients.BundleDB.Table("fiee_bundle.bundle_balance AS bb").
|
subQuery := app.ModuleClients.BundleDB.Table("bundle_order_records as bor1").
|
||||||
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").
|
Select("bor1.*").
|
||||||
Joins("LEFT JOIN bundle_order_records bor ON bor.uuid = bb.order_uuid").
|
Joins(`INNER JOIN (
|
||||||
Joins("LEFT JOIN `micro-account`.`user` u ON u.id = bb.user_id").
|
SELECT customer_id, MAX(created_at) AS max_created_time
|
||||||
Where("bor.deleted_at IS NULL").
|
FROM bundle_order_records
|
||||||
Where("bb.user_id = ?", req.UserId).
|
GROUP BY customer_id
|
||||||
// Where("bor.expiration_time > ?", time.Now()).
|
) bor2 ON bor1.customer_id = bor2.customer_id AND bor1.created_at = bor2.max_created_time`)
|
||||||
Order("bb.created_at desc").
|
session := app.ModuleClients.BundleDB.Table("`micro-account`.`user` AS u").Unscoped().
|
||||||
First(&data).Error
|
Select(`bb.*, bor.bundle_name, bor.status,bor.amount AS payment_amount,bor.amount_type AS payment_type,
|
||||||
if err != nil {
|
bor.uuid as order_uuid, rn.name as user_name,bc.activate,
|
||||||
return
|
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").
|
||||||
var additionalInfo model.UserBundleBalancePo
|
Joins("LEFT JOIN (?) as bor ON bor.customer_id = u.id", subQuery).
|
||||||
err = app.ModuleClients.BundleDB.Model(&model.BundleExtensionRecords{}).
|
Joins("LEFT JOIN fiee_bundle.bundle_balance bb ON u.id = bb.user_id AND bb.order_uuid = bor.uuid").
|
||||||
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").
|
Joins("LEFT JOIN bundle_activate bc on bc.user_id = u.id").
|
||||||
Where("type = 1"). // 手动扩展
|
Where("rn.name IS NOT NULL").
|
||||||
Where("user_id = ?", req.UserId).
|
Where("u.deleted_at = 0").
|
||||||
Where("created_at > ?", data.PayTime). // 判断扩展是否生效
|
Where("u.id = ?", req.UserId).
|
||||||
First(&additionalInfo).Error
|
Where("bb.month = ?", time.Now().Format("2006-01")).
|
||||||
if err != nil {
|
Order("bor.expiration_time desc")
|
||||||
return
|
err = session.First(&data).Error
|
||||||
}
|
|
||||||
data.AccountAdditional = additionalInfo.AccountAdditional
|
|
||||||
data.VideoAdditional = additionalInfo.VideoAdditional
|
|
||||||
data.ImageAdditional = additionalInfo.ImageAdditional
|
|
||||||
data.DataAnalysisAdditional = additionalInfo.DataAnalysisAdditional
|
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
|
|
||||||
func AddBundleBalanceByUserId(data model.BundleBalanceUsePo) (usedType int, err error) {
|
func AddBundleBalanceByUserId(data model.BundleBalanceUsePo) (usedType int, err error) {
|
||||||
err = app.ModuleClients.BundleDB.Transaction(func(tx *gorm.DB) (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{}
|
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 {
|
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("用户还没有套餐信息")
|
return errors.New("用户还没有套餐信息")
|
||||||
}
|
}
|
||||||
|
|
||||||
if data.AccountNumber > 0 { // 增加账号消耗数
|
if data.AccountNumber > 0 { // 增加账号消耗数
|
||||||
if oldData.BundleAccountConsumptionNumber < oldData.BundleAccountNumber { // 消耗账号数优先套餐内
|
if oldData.BundleAccountConsumptionNumber < oldData.BundleAccountNumber { // 消耗账号数优先套餐内
|
||||||
oldData.BundleAccountConsumptionNumber++
|
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 {
|
if err := tx.Model(&model.BundleActivate{}).Where("user_id = ?", v).First(&activate).Error; err != nil {
|
||||||
return err
|
return err
|
||||||
}
|
}
|
||||||
if !activate.Activate { // 第一次激活重新计算余量的开始时间和过期时间
|
if activate.Activate == 2 { // 第一次激活重新计算余量的开始时间和过期时间
|
||||||
balance := model.BundleBalance{}
|
balance := model.BundleBalance{}
|
||||||
if err := tx.Model(&model.BundleBalance{}).Where("user_id = ?", v).First(&balance).Error; err != nil {
|
if err := tx.Model(&model.BundleBalance{}).Where("user_id = ?", v).First(&balance).Error; err != nil {
|
||||||
return err
|
return err
|
||||||
@ -513,7 +512,7 @@ func BundleActivate(ids []uint32) error {
|
|||||||
if err := tx.Model(&model.BundleBalance{}).Save(balance).Error; err != nil {
|
if err := tx.Model(&model.BundleBalance{}).Save(balance).Error; err != nil {
|
||||||
return err
|
return err
|
||||||
}
|
}
|
||||||
activate.Activate = true
|
activate.Activate = 2
|
||||||
return tx.Model(&model.BundleActivate{}).Save(activate).Error
|
return tx.Model(&model.BundleActivate{}).Save(activate).Error
|
||||||
}
|
}
|
||||||
return nil
|
return nil
|
||||||
|
@ -121,6 +121,8 @@ func GetBundleBalanceList(req *bundle.GetBundleBalanceListReq) (*bundle.GetBundl
|
|||||||
MonthlyManualVideoConsumptionNumber: int32(m.MonthlyManualVideoConsumptionNumber),
|
MonthlyManualVideoConsumptionNumber: int32(m.MonthlyManualVideoConsumptionNumber),
|
||||||
MonthlyManualImageConsumptionNumber: int32(m.MonthlyManualImageConsumptionNumber),
|
MonthlyManualImageConsumptionNumber: int32(m.MonthlyManualImageConsumptionNumber),
|
||||||
MonthlyManualDataAnalysisConsumptionNumber: int32(m.MonthlyManualDataAnalysisConsumptionNumber),
|
MonthlyManualDataAnalysisConsumptionNumber: int32(m.MonthlyManualDataAnalysisConsumptionNumber),
|
||||||
|
|
||||||
|
Activate: int32(m.Activate),
|
||||||
}
|
}
|
||||||
|
|
||||||
if m.OrderUUID != "" {
|
if m.OrderUUID != "" {
|
||||||
@ -137,15 +139,31 @@ func GetBundleBalanceByUserId(req *bundle.GetBundleBalanceByUserIdReq) (*bundle.
|
|||||||
data, err := dao.GetBundleBalanceByUserId(req)
|
data, err := dao.GetBundleBalanceByUserId(req)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
logger.Error(err)
|
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
|
return result, nil
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -150,31 +150,21 @@ type BundleBalancePo struct {
|
|||||||
BundleName string `gorm:"column:bundle_name"`
|
BundleName string `gorm:"column:bundle_name"`
|
||||||
Status int `gorm:"column:status"`
|
Status int `gorm:"column:status"`
|
||||||
OrderUUID string `gorm:"column:order_uuid"`
|
OrderUUID string `gorm:"column:order_uuid"`
|
||||||
|
Activate int `gorm:"column:activate"`
|
||||||
BundleBalance
|
BundleBalance
|
||||||
}
|
}
|
||||||
|
|
||||||
type UserBundleBalancePo struct {
|
type UserBundleBalancePo struct {
|
||||||
OrderUUID string `json:"orderUUID" gorm:"column:order_uuid"`
|
OrderUUID string `json:"orderUUID" gorm:"column:order_uuid"`
|
||||||
BundleUuid string `json:"bundleUuid" gorm:"column:bundle_uuid"`
|
BundleUuid string `json:"bundleUuid" gorm:"column:bundle_uuid"`
|
||||||
BundleName string `json:"bundleName" gorm:"column:bundle_name"`
|
BundleName string `json:"bundleName" gorm:"column:bundle_name"`
|
||||||
BundleStatus string `json:"bundleStatus" gorm:"column:bundle_status"`
|
BundleStatus string `json:"bundleStatus" gorm:"column:bundle_status"`
|
||||||
PayTime string `json:"payTime" gorm:"column:pay_time"`
|
PayTime string `json:"payTime" gorm:"column:pay_time"`
|
||||||
ExpiredTime string `json:"expiredTime" gorm:"column:expired_time"`
|
ExpiredTime string `json:"expiredTime" gorm:"column:expired_time"`
|
||||||
PaymentAmount string `json:"paymentAmount" gorm:"column:payment_amount"`
|
PaymentAmount string `json:"paymentAmount" gorm:"column:payment_amount"`
|
||||||
PaymentType int32 `json:"paymentType" gorm:"column:payment_type"`
|
PaymentType int32 `json:"paymentType" gorm:"column:payment_type"`
|
||||||
AccountNumber int32 `json:"accountNumber" gorm:"column:account_number"`
|
Activate int `gorm:"column:activate"`
|
||||||
AccountAdditional int32 `json:"accountAdditional" gorm:"column:account_additional"`
|
BundleBalance
|
||||||
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"`
|
|
||||||
}
|
}
|
||||||
|
|
||||||
type BundleBalance struct {
|
type BundleBalance struct {
|
||||||
@ -296,8 +286,8 @@ func (*BundleBalance) TableName() string {
|
|||||||
|
|
||||||
type BundleActivate struct {
|
type BundleActivate struct {
|
||||||
gorm.Model
|
gorm.Model
|
||||||
UserId int `gorm:"column:user_id;not null;unique"`
|
UserId int `gorm:"column:user_id;not null;unique"`
|
||||||
Activate bool `gorm:"column:activate"`
|
Activate int `gorm:"column:activate"`
|
||||||
}
|
}
|
||||||
|
|
||||||
// TableName 表名称
|
// TableName 表名称
|
||||||
|
@ -752,6 +752,8 @@ message BundleBalanceItem {
|
|||||||
int32 monthlyManualVideoConsumptionNumber = 48; // 当月手动扩展视频使用数
|
int32 monthlyManualVideoConsumptionNumber = 48; // 当月手动扩展视频使用数
|
||||||
int32 monthlyManualImageConsumptionNumber = 49; // 当月手动扩展图文使用数
|
int32 monthlyManualImageConsumptionNumber = 49; // 当月手动扩展图文使用数
|
||||||
int32 monthlyManualDataAnalysisConsumptionNumber = 50; // 当月手动扩展数据分析使用数
|
int32 monthlyManualDataAnalysisConsumptionNumber = 50; // 当月手动扩展数据分析使用数
|
||||||
|
|
||||||
|
int32 activate = 51 ; // 激活状态
|
||||||
}
|
}
|
||||||
|
|
||||||
message GetBundleBalanceListResp{
|
message GetBundleBalanceListResp{
|
||||||
|
File diff suppressed because it is too large
Load Diff
Loading…
Reference in New Issue
Block a user