123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226 |
- package service
- import (
- "context"
- "time"
- "go-common/app/job/main/vip/model"
- "go-common/library/log"
- "github.com/pkg/errors"
- )
- // CheckUserData check vip_user_info data.
- func (s *Service) CheckUserData(c context.Context) (diffs map[int64]string, err error) {
- var (
- maxID int
- size = s.c.Property.BatchSize
- ids = []int64{}
- ousers = make(map[int64]*model.VipUserInfoOld, size)
- nusers = make(map[int64]*model.VipUserInfo, _ps)
- ou *model.VipUserInfoOld
- nu *model.VipUserInfo
- ok bool
- )
- diffs = make(map[int64]string)
- if maxID, err = s.dao.SelOldUserInfoMaxID(context.TODO()); err != nil {
- err = errors.WithStack(err)
- return
- }
- page := maxID / size
- if maxID%size != 0 {
- page++
- }
- log.Info("check vip_user_info total(%d)", page)
- for i := 0; i < page; i++ {
- log.Info("check vip_user_info page index(%d) total(%d)", i, page)
- startID := i * size
- endID := (i + 1) * size
- if endID > maxID {
- endID = maxID
- }
- if ousers, err = s.dao.SelOldUserInfoMaps(context.TODO(), startID, endID); err != nil {
- return
- }
- j := 1
- for _, v := range ousers {
- ids = append(ids, v.Mid)
- if j%_ps == 0 || j == len(ousers) {
- if nusers, err = s.dao.SelVipByIds(context.TODO(), ids); err != nil {
- return
- }
- for _, mid := range ids {
- if ou, ok = ousers[mid]; !ok {
- diffs[mid] = "old not found"
- continue
- }
- if nu, ok = nusers[mid]; !ok {
- diffs[mid] = "new not found"
- continue
- }
- if nu.Type != ou.Type {
- diffs[mid] = "vip_type"
- continue
- }
- if nu.Status != ou.Status {
- diffs[mid] = "vip_status"
- continue
- }
- if !nu.OverdueTime.Time().Equal(ou.OverdueTime.Time()) {
- diffs[mid] = "vip_overdue_time"
- continue
- }
- if !nu.AnnualVipOverdueTime.Time().Equal(ou.AnnualVipOverdueTime.Time()) {
- diffs[mid] = "annual_vip_overdue_time"
- continue
- }
- if nu.PayType != ou.IsAutoRenew {
- diffs[mid] = "vip_pay_type"
- continue
- }
- if nu.PayChannelID != ou.PayChannelID {
- diffs[mid] = "pay_channel_id"
- continue
- }
- if !nu.IosOverdueTime.Time().Equal(ou.IosOverdueTime.Time()) {
- diffs[mid] = "ios_overdue_time"
- continue
- }
- }
- // reset
- ids = []int64{}
- }
- j++
- }
- log.Info("check index (%d) vip_user_info diff len (%d)", i, len(diffs))
- log.Info("check index (%d) vip_user_info diff data mids(%v)", i, diffs)
- time.Sleep(time.Millisecond * _defsleepmsec)
- }
- return
- }
- //CheckBcoinData check bcoin data
- func (s *Service) CheckBcoinData(c context.Context) (mids []int64, err error) {
- var (
- maxID int
- size = s.c.Property.BatchSize
- )
- if maxID, err = s.dao.SelMaxID(context.TODO()); err != nil {
- err = errors.WithStack(err)
- return
- }
- page := maxID / size
- if maxID%size != 0 {
- page++
- }
- for i := 0; i < page; i++ {
- startID := size * i
- endID := (i + 1) * size
- var res []*model.VipUserInfo
- if res, err = s.dao.SelUserInfos(context.TODO(), startID, endID); err != nil {
- err = errors.WithStack(err)
- return
- }
- var (
- tempMids []int64
- bcoinMap map[int64][]*model.VipBcoinSalary
- oldBcoinMap map[int64][]*model.VipBcoinSalary
- )
- for _, v := range res {
- tempMids = append(tempMids, v.Mid)
- }
- if bcoinMap, err = s.dao.SelBcoinSalaryDataMaps(context.TODO(), tempMids); err != nil {
- err = errors.WithStack(err)
- return
- }
- if oldBcoinMap, err = s.dao.SelOldBcoinSalaryDataMaps(context.TODO(), tempMids); err != nil {
- err = errors.WithStack(err)
- return
- }
- if len(bcoinMap) > len(oldBcoinMap) {
- for key, val := range bcoinMap {
- salaries := oldBcoinMap[key]
- if len(salaries) != len(val) {
- mids = append(mids, key)
- }
- }
- } else {
- for key, val := range oldBcoinMap {
- salaries := bcoinMap[key]
- if len(salaries) != len(val) {
- mids = append(mids, key)
- }
- }
- }
- }
- log.Info("cur not sync data mid is(%+v)", mids)
- return
- }
- //CheckChangeHistory check change history data
- func (s *Service) CheckChangeHistory(c context.Context) (mids []int64, err error) {
- var (
- maxID int
- size = 2000
- )
- if maxID, err = s.dao.SelMaxID(context.TODO()); err != nil {
- err = errors.WithStack(err)
- return
- }
- page := maxID / size
- if maxID%size != 0 {
- page++
- }
- for i := 0; i < page; i++ {
- startID := size * i
- endID := (i + 1) * size
- var res []*model.VipUserInfo
- if res, err = s.dao.SelUserInfos(context.TODO(), startID, endID); err != nil {
- err = errors.WithStack(err)
- return
- }
- var (
- tempMids []int64
- historyMap map[int64][]*model.VipChangeHistory
- oldHistoryMap map[int64][]*model.VipChangeHistory
- )
- for _, v := range res {
- tempMids = append(tempMids, v.Mid)
- }
- if historyMap, err = s.dao.SelChangeHistoryMaps(context.TODO(), tempMids); err != nil {
- err = errors.WithStack(err)
- return
- }
- if oldHistoryMap, err = s.dao.SelOldChangeHistoryMaps(context.TODO(), tempMids); err != nil {
- err = errors.WithStack(err)
- return
- }
- if len(historyMap) > len(oldHistoryMap) {
- for key, val := range historyMap {
- histories := oldHistoryMap[key]
- if len(histories) != len(val) {
- mids = append(mids, key)
- }
- }
- } else {
- for key, val := range oldHistoryMap {
- histories := historyMap[key]
- if len(histories) != len(val) {
- mids = append(mids, key)
- }
- }
- }
- }
- log.Info("cur not sync data mid is(%+v)", mids)
- return
- }
|