Commit a28a0a76 authored by hujiebin's avatar hujiebin

feat:事务操作

parent d5596af0
...@@ -131,58 +131,61 @@ func GetGroupPowerOnMic(model *domain.Model, groupPowerId, userId mysql.ID) (*Gr ...@@ -131,58 +131,61 @@ func GetGroupPowerOnMic(model *domain.Model, groupPowerId, userId mysql.ID) (*Gr
const MaxMinuteTimes = 18 const MaxMinuteTimes = 18
// 增加势力上麦经验 // 增加势力上麦经验
// 事务操作
func IncrGroupPowerExpOnMic(model *domain.Model, groupPowerId, userId mysql.ID, joinMicTimestamp int64) error { func IncrGroupPowerExpOnMic(model *domain.Model, groupPowerId, userId mysql.ID, joinMicTimestamp int64) error {
// 获取用户上麦奖励历史 return model.Transaction(func(model *domain.Model) error {
onMicDetails, err := GetGroupPowerUserOnMicDetails(model, groupPowerId, userId) // 获取用户上麦奖励历史
if err != nil { onMicDetails, err := GetGroupPowerUserOnMicDetails(model, groupPowerId, userId)
return err if err != nil {
} return err
numDetails := len(onMicDetails)
if numDetails >= MaxMinuteTimes {
// 上麦经验贡献值最多1800,1分钟100
return nil
}
onMic, err := GetGroupPowerOnMic(model, groupPowerId, userId)
if err != nil {
return err
}
onMicSeconds := time.Now().Unix() - joinMicTimestamp
if onMic.LastCalTs == joinMicTimestamp {
onMicSeconds = onMicSeconds - int64(numDetails*600) // 扣除之前加过的时间
}
var moreDetails []*GroupPowerOnMicDetail
totalMinuteTimes := int((onMic.Seconds + onMicSeconds) % 600) // 今天实际能加经验次数
if totalMinuteTimes >= MaxMinuteTimes {
totalMinuteTimes = MaxMinuteTimes
}
if totalMinuteTimes > numDetails {
for minute := numDetails + 1; minute <= totalMinuteTimes; minute++ {
moreDetails = append(moreDetails, &GroupPowerOnMicDetail{
Date: time.Now().Format("2006-01-02"),
GroupPowerId: groupPowerId,
UserId: userId,
MinuteTimes: minute,
})
} }
} numDetails := len(onMicDetails)
// 有更多麦上10分钟,可以加经验 if numDetails >= MaxMinuteTimes {
if len(moreDetails) > 0 { // 上麦经验贡献值最多1800,1分钟100
for _, detail := range moreDetails { return nil
// 添加明细,避免重复计算 }
if err := model.DB().Model(GroupPowerOnMicDetail{}).Create(detail).Error; err != nil { onMic, err := GetGroupPowerOnMic(model, groupPowerId, userId)
return err if err != nil {
return err
}
onMicSeconds := time.Now().Unix() - joinMicTimestamp
if onMic.LastCalTs == joinMicTimestamp {
onMicSeconds = onMicSeconds - int64(numDetails*600) // 扣除之前加过的时间
}
var moreDetails []*GroupPowerOnMicDetail
totalMinuteTimes := int((onMic.Seconds + onMicSeconds) % 600) // 今天实际能加经验次数
if totalMinuteTimes >= MaxMinuteTimes {
totalMinuteTimes = MaxMinuteTimes
}
if totalMinuteTimes > numDetails {
for minute := numDetails + 1; minute <= totalMinuteTimes; minute++ {
moreDetails = append(moreDetails, &GroupPowerOnMicDetail{
Date: time.Now().Format("2006-01-02"),
GroupPowerId: groupPowerId,
UserId: userId,
MinuteTimes: minute,
})
}
}
// 有更多麦上10分钟,可以加经验
if len(moreDetails) > 0 {
for _, detail := range moreDetails {
// 添加明细,避免重复计算
if err := model.DB().Model(GroupPowerOnMicDetail{}).Create(detail).Error; err != nil {
return err
}
// 每10分钟增加100点经验
if err := IncrGroupPowerExp(model, groupPowerId, 100); err != nil {
return err
}
} }
// 每10分钟增加100点经验 // 更新micExp信息
if err := IncrGroupPowerExp(model, groupPowerId, 100); err != nil { onMic.Seconds = onMic.Seconds + onMicSeconds
onMic.LastCalTs = joinMicTimestamp
if err := model.DB().Save(onMic).Error; err != nil {
return err return err
} }
} }
// 更新micExp信息 return nil
onMic.Seconds = onMic.Seconds + onMicSeconds })
onMic.LastCalTs = joinMicTimestamp
if err := model.DB().Save(onMic).Error; err != nil {
return err
}
}
return nil
} }
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment