diff --git a/domain/model/groupPower_m/group_grade.go b/domain/model/groupPower_m/group_grade.go index 3721a77493c6edb8d3490eddaef8f1fa81fa987a..b1d02417ae903f35a5764f5f2504a02b65b17212 100644 --- a/domain/model/groupPower_m/group_grade.go +++ b/domain/model/groupPower_m/group_grade.go @@ -178,10 +178,17 @@ func IncrGroupPowerExpOnMic(model *domain.Model, groupPowerId, userId mysql.ID, if err != nil { return err } - onMicSeconds := time.Now().Unix() - joinMicTimestamp - if onMic.LastCalTs == joinMicTimestamp { - onMicSeconds = onMicSeconds - int64(numDetails*600) // 扣除之前加过的时间 + nowTs := time.Now().Unix() + curTs := joinMicTimestamp + day0Ts := utils.GetZeroTime(time.Now()).Unix() + if joinMicTimestamp < onMic.LastCalTs { + curTs = onMic.LastCalTs } + // 跨天 + if curTs < day0Ts { + curTs = day0Ts + } + onMicSeconds := nowTs - curTs var moreDetails []*GroupPowerOnMicDetail totalMinuteTimes := int((onMic.Seconds + onMicSeconds) / 600) // 今天实际能加经验次数 if totalMinuteTimes >= MaxMinuteTimes { @@ -212,12 +219,12 @@ func IncrGroupPowerExpOnMic(model *domain.Model, groupPowerId, userId mysql.ID, } // 更新micExp信息 onMic.Seconds = onMic.Seconds + onMicSeconds - onMic.LastCalTs = joinMicTimestamp + onMic.LastCalTs = nowTs if err := model.DB().Model(GroupPowerOnMic{}).Clauses(clause.OnConflict{Columns: []clause.Column{{Name: "date"}, {Name: "group_power_id"}}, DoUpdates: clause.Assignments( map[string]interface{}{ "seconds": onMic.Seconds, - "last_cal_ts": joinMicTimestamp, + "last_cal_ts": nowTs, }, )}). Create(onMic).Error; err != nil { @@ -232,15 +239,21 @@ func IncrGroupPowerExpOnMic(model *domain.Model, groupPowerId, userId mysql.ID, // 事务操作 func IncrGroupPowerStarOnMic(model *domain.Model, groupPowerId, userId mysql.ID, joinMicTimestamp int64) error { return model.Transaction(func(model *domain.Model) error { + // 月统计 star, err := GetGroupPowerMonthStar(model, groupPowerId, userId, groupPower_e.GroupPowerStarTypeActive) curTs := joinMicTimestamp nowTs := time.Now().Unix() + month0Ts := now.BeginningOfMonth().Unix() if err != nil && err != gorm.ErrRecordNotFound { return err } if star != nil && joinMicTimestamp < star.LastCalTs { // 加入的时间比上次计算时间小 curTs = star.LastCalTs } + // 跨月 + if curTs < month0Ts { + curTs = month0Ts + } score := nowTs - curTs return IncrGroupPowerMonthStarScore(model, groupPowerId, userId, groupPower_e.GroupPowerStarTypeActive, mysql.Num(score), nowTs) })