02_person_achievement.go 1.6 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162
  1. package quota
  2. import (
  3. "app/commons/core"
  4. "app/commons/model/entity"
  5. "github.com/shopspring/decimal"
  6. )
  7. // 个人业绩矫正
  8. // 活期以产品 UsdAmount 为基准
  9. // todo:定期待开发
  10. func (s *Service) personAchievementHandler() error {
  11. // 活期产品 -- 已聚合
  12. userAllCurrentOrders, err := s.BatchStakeUserCurrentOrder(s.DB().Where("1=1"))
  13. if err != nil {
  14. return err
  15. }
  16. userAcMap := make(map[int64]decimal.Decimal)
  17. for _, item := range userAllCurrentOrders {
  18. userAcMap[item.UserId] = item.UsdAmount
  19. }
  20. // 对个人业绩进行重置
  21. userQuotaMap := make(map[int64]*entity.UserQuota)
  22. quotas, err := s.BatchUserQuota(s.DB().Where("1=1"))
  23. if err != nil {
  24. return err
  25. }
  26. for _, item := range quotas {
  27. userQuotaMap[item.UserId] = item
  28. }
  29. for _, item := range quotas {
  30. ac, ok := userAcMap[item.UserId]
  31. if !ok {
  32. if item.PersonAchievement.GreaterThan(decimal.Zero) {
  33. err = s.DB().Model(&entity.UserQuota{}).
  34. Where("user_id", item.UserId).
  35. Updates(map[string]interface{}{
  36. "person_achievement": decimal.Zero,
  37. }).Error
  38. if err != nil {
  39. core.JobLog.Errorf(err.Error())
  40. }
  41. }
  42. continue
  43. }
  44. if !ac.Equal(item.PersonAchievement) {
  45. core.JobLog.Infof("用户:%s 个人业绩矫正:%s to %s", item.Uid, item.PersonAchievement, ac)
  46. err = s.DB().
  47. Model(&entity.UserQuota{}).
  48. Where("user_id", item.UserId).
  49. Updates(map[string]interface{}{
  50. "person_achievement": ac,
  51. }).Error
  52. if err != nil {
  53. return err
  54. }
  55. }
  56. }
  57. core.JobLog.Infof("更新个人业绩完成 用户总数:%d 信息完成", len(userAllCurrentOrders))
  58. return nil
  59. }