227 lines
5.3 KiB
Go
227 lines
5.3 KiB
Go
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
|
|
}
|