You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
618 lines
20 KiB
618 lines
20 KiB
package service |
|
|
|
import ( |
|
"context" |
|
"encoding/hex" |
|
"strings" |
|
"time" |
|
|
|
"go-common/app/job/main/passport-user-compare/model" |
|
"go-common/library/log" |
|
|
|
"github.com/go-sql-driver/mysql" |
|
"github.com/pkg/errors" |
|
) |
|
|
|
func (s *Service) fullFixed(msg chan *model.ErrorFix) { |
|
for { |
|
fix, ok := <-msg |
|
if !ok { |
|
log.Error("consumer full info closed") |
|
return |
|
} |
|
log.Info("full data fixed consumer msg,(%+v)", fix) |
|
if s.c.DataFixSwitch { |
|
errType := fix.ErrorType |
|
if notExistUserBase == errType || pwdErrorType == errType || statusErrorType == errType || statusErrorType == userIDErrorType { |
|
s.fixUserBase(fix.Mid, fix.Action, "full") |
|
} |
|
if notExistUserTel == errType || telErrorType == errType { |
|
s.fixUserTel(fix.Mid, fix.Action, "full") |
|
} |
|
if notExistUserMail == errType || mailErrorType == errType { |
|
s.fixUserMail(fix.Mid, fix.Action, "full") |
|
} |
|
if notExistUserSafeQuestion == errType || safeErrorType == errType { |
|
s.fixSafeQuestion(fix.Mid, fix.Action, "full") |
|
} |
|
if notExistUserThirdBind == errType || sinaErrorType == errType || qqErrorType == errType { |
|
s.fixUserSns(fix.Mid, errType, fix.Action, "full") |
|
} |
|
} |
|
} |
|
} |
|
|
|
func (s *Service) incFixed(msg chan *model.ErrorFix) { |
|
for { |
|
fix, ok := <-msg |
|
if !ok { |
|
log.Error("consumer inc info closed") |
|
return |
|
} |
|
log.Info("dynamic data fixed consumer msg,(%+v)", fix) |
|
if s.incrDataFixSwitch { |
|
errType := fix.ErrorType |
|
if notExistUserBase == errType || pwdErrorType == errType || statusErrorType == errType || statusErrorType == userIDErrorType { |
|
s.fixUserBase(fix.Mid, fix.Action, "incr") |
|
} |
|
if notExistUserTel == errType || telErrorType == errType { |
|
s.fixUserTel(fix.Mid, fix.Action, "incr") |
|
} |
|
if notExistUserMail == errType || mailErrorType == errType { |
|
s.fixUserMail(fix.Mid, fix.Action, "incr") |
|
} |
|
if notExistUserSafeQuestion == errType || safeErrorType == errType { |
|
s.fixSafeQuestion(fix.Mid, fix.Action, "incr") |
|
} |
|
if notExistUserThirdBind == errType || sinaErrorType == errType || qqErrorType == errType { |
|
s.fixUserSns(fix.Mid, errType, fix.Action, "incr") |
|
} |
|
if notExistUserRegOriginType == errType || userRegOriginErrorType == errType { |
|
s.fixUserRegOrigin(fix.Mid, errType, fix.Action, "incr") |
|
} |
|
} |
|
} |
|
} |
|
|
|
func (s *Service) fixUserBase(mid int64, action, tpe string) { |
|
var ( |
|
origin *model.OriginAccount |
|
err error |
|
) |
|
log.Info("data fix user base,mid is %d,action %s,type %s", mid, action, tpe) |
|
if origin, err = s.d.QueryAccountByMid(context.Background(), mid); err != nil { |
|
log.Error("data fix query account by mid error,mid is %d,err is (%+v)", mid, err) |
|
return |
|
} |
|
var pwdByte []byte |
|
if pwdByte, err = hex.DecodeString(origin.Pwd); err != nil { |
|
log.Error("data fix hex.DecodeString(origin.Pwd) error,mid is %d,err is (%+v),origin is(%+v)", mid, err, origin) |
|
return |
|
} |
|
if insertAction == action { |
|
a := &model.UserBase{ |
|
Mid: origin.Mid, |
|
UserID: origin.UserID, |
|
Pwd: pwdByte, |
|
Salt: origin.Salt, |
|
Status: origin.Isleak, |
|
Deleted: 0, |
|
MTime: origin.MTime, |
|
} |
|
if _, err = s.d.InsertUserBase(context.Background(), a); err != nil { |
|
log.Error("data fix s.d.InsertUserBase by mid error,mid is %d,err is (%+v)", mid, err) |
|
return |
|
} |
|
} |
|
if updateAction == action { |
|
a := &model.UserBase{ |
|
Mid: origin.Mid, |
|
UserID: origin.UserID, |
|
Pwd: pwdByte, |
|
Salt: origin.Salt, |
|
Status: origin.Isleak, |
|
} |
|
if _, err = s.d.UpdateUserBase(context.Background(), a); err != nil { |
|
log.Error("data fix s.d.UpdateUserBase by mid error,mid is %d,err is (%+v)", mid, err) |
|
return |
|
} |
|
} |
|
} |
|
|
|
func (s *Service) fixUserTel(mid int64, action, tpe string) { |
|
var ( |
|
origin *model.OriginAccount |
|
err error |
|
) |
|
log.Info("data fix user tel,mid is %d,action %s,type %s", mid, action, tpe) |
|
if origin, err = s.d.QueryAccountByMid(context.Background(), mid); err != nil { |
|
log.Error("data fix query account by mid error,mid is %d,err is (%+v)", mid, err) |
|
return |
|
} |
|
ot := strings.Trim(strings.ToLower(origin.Tel), "") |
|
var telByte []byte |
|
if telByte, err = s.doEncrypt(ot); err != nil { |
|
log.Error("data fix doEncrypt tel by mid error,mid is %d,err is (%+v)", mid, err) |
|
return |
|
} |
|
var telBindTime int64 |
|
if insertAction == action && len(ot) != 0 { |
|
ut := &model.UserTel{ |
|
Mid: origin.Mid, |
|
Tel: telByte, |
|
Cid: s.countryMap[origin.CountryID], |
|
MTime: origin.MTime, |
|
} |
|
if telBindTime, err = s.d.QueryTelBindLog(context.Background(), mid); err != nil { |
|
log.Error("user not exist tel.mid %d", mid) |
|
} |
|
if telBindTime > int64(filterStart) && telBindTime < int64(filterEnd) { |
|
telBindTime = 0 |
|
} |
|
ut.TelBindTime = telBindTime |
|
if _, err = s.d.InsertUserTel(context.Background(), ut); err != nil { |
|
switch nErr := errors.Cause(err).(type) { |
|
case *mysql.MySQLError: |
|
if nErr.Number == mySQLErrCodeDuplicateEntry { |
|
if err = s.handlerInsertTelDuplicate(ut); err != nil { |
|
log.Error("fail to handlerInsertTelDuplicate userTel(%+v) error(%+v)", ut, err) |
|
return |
|
} |
|
err = nil |
|
return |
|
} |
|
} |
|
log.Error("fail to add user tel userTel(%+v) error(%+v)", ut, err) |
|
return |
|
} |
|
} |
|
if updateAction == action { |
|
ut := &model.UserTel{ |
|
Mid: origin.Mid, |
|
Tel: telByte, |
|
Cid: s.countryMap[origin.CountryID], |
|
} |
|
if _, err = s.d.UpdateUserTel(context.Background(), ut); err != nil { |
|
switch nErr := errors.Cause(err).(type) { |
|
case *mysql.MySQLError: |
|
if nErr.Number == mySQLErrCodeDuplicateEntry { |
|
if err = s.handlerUpdateTelDuplicate(ut); err != nil { |
|
log.Error("fail to handlerInsertTelDuplicate userTel(%+v) error(%+v)", ut, err) |
|
return |
|
} |
|
err = nil |
|
return |
|
} |
|
} |
|
log.Error("fail to update user tel userTel(%+v) error(%+v)", ut, err) |
|
return |
|
} |
|
} |
|
} |
|
|
|
func (s *Service) fixUserMail(mid int64, action, tpe string) { |
|
var ( |
|
origin *model.OriginAccount |
|
originInfo *model.OriginAccountInfo |
|
err error |
|
) |
|
if origin, err = s.d.QueryAccountByMid(context.Background(), mid); err != nil { |
|
log.Error("data fix query account by mid error,mid is %d,err is (%+v)", mid, err) |
|
return |
|
} |
|
log.Info("data fix user mail,mid is %d,action %s,type %s, origin(%+v)", mid, action, tpe, origin) |
|
om := strings.Trim(strings.ToLower(origin.Email), "") |
|
var emailByte []byte |
|
if emailByte, err = s.doEncrypt(om); err != nil { |
|
log.Error("data fix doEncrypt mail by mid error,mid is %d,err is (%+v)", mid, err) |
|
return |
|
} |
|
if insertAction == action && len(om) != 0 { |
|
userMail := &model.UserEmail{ |
|
Mid: origin.Mid, |
|
Email: emailByte, |
|
MTime: origin.MTime, |
|
} |
|
if originInfo, err = s.d.QueryAccountInfoByMid(context.Background(), mid); err != nil { |
|
log.Error("fail to QueryAccountInfoByMid mid is (%+v) error(%+v)", mid, err) |
|
return |
|
} |
|
timestamp := originInfo.ActiveTime |
|
if originInfo.Spacesta >= 0 { |
|
userMail.Verified = 1 |
|
userMail.EmailBindTime = timestamp |
|
} |
|
if _, err = s.d.InsertUserEmail(context.Background(), userMail); err != nil { |
|
switch nErr := errors.Cause(err).(type) { |
|
case *mysql.MySQLError: |
|
if nErr.Number == mySQLErrCodeDuplicateEntry { |
|
if err = s.handlerEmailInsertDuplicate(userMail); err != nil { |
|
log.Error("fail to handlerEmailInsertDuplicate userEmail(%+v) error(%+v)", userMail, err) |
|
return |
|
} |
|
err = nil |
|
return |
|
} |
|
} |
|
log.Error("fail to add user email userEmail(%+v) error(%+v)", userMail, err) |
|
return |
|
} |
|
} |
|
if updateAction == action { |
|
userMail := &model.UserEmail{ |
|
Mid: origin.Mid, |
|
Email: emailByte, |
|
} |
|
if _, err = s.d.UpdateUserMail(context.Background(), userMail); err != nil { |
|
switch nErr := errors.Cause(err).(type) { |
|
case *mysql.MySQLError: |
|
if nErr.Number == mySQLErrCodeDuplicateEntry { |
|
if err = s.handlerEmailUpdateDuplicate(userMail); err != nil { |
|
log.Error("fail to handlerEmailDuplicate userEmail(%+v) error(%+v)", userMail, err) |
|
return |
|
} |
|
err = nil |
|
return |
|
} |
|
} |
|
log.Error("fail to update user email userEmail(%+v) error(%+v)", userMail, err) |
|
return |
|
} |
|
} |
|
} |
|
|
|
func (s *Service) fixSafeQuestion(mid int64, action, tpe string) { |
|
var ( |
|
accountInfo *model.OriginAccountInfo |
|
err error |
|
) |
|
log.Info("data fix safe question,mid is %d,action %s,type %s", mid, action, tpe) |
|
if accountInfo, err = s.d.QueryAccountInfoByMid(context.Background(), mid); err != nil { |
|
log.Error("data fix query account info by mid error,mid is %d,err is (%+v)", mid, err) |
|
return |
|
} |
|
if insertAction == action && len(accountInfo.SafeAnswer) != 0 { |
|
usq := &model.UserSafeQuestion{ |
|
Mid: accountInfo.Mid, |
|
SafeQuestion: accountInfo.SafeQuestion, |
|
SafeAnswer: s.doHash(accountInfo.SafeAnswer), |
|
SafeBindTime: time.Now().Unix(), |
|
} |
|
if _, err = s.d.InsertUserSafeQuestion(context.Background(), usq); err != nil { |
|
log.Error("data fix s.d.InsertUserSafeQuestion error,mid is %d,err is (%+v)", mid, err) |
|
return |
|
} |
|
} |
|
if updateAction == action { |
|
usq := &model.UserSafeQuestion{ |
|
Mid: accountInfo.Mid, |
|
SafeQuestion: accountInfo.SafeQuestion, |
|
SafeAnswer: s.doHash(accountInfo.SafeAnswer), |
|
} |
|
if _, err = s.d.UpdateUserSafeQuestion(context.Background(), usq); err != nil { |
|
log.Error("data fix s.d.UpdateUserSafeQuestion error,mid is %d,err is (%+v)", mid, err) |
|
return |
|
} |
|
} |
|
} |
|
|
|
func (s *Service) fixUserSns(mid, errType int64, action, tpe string) { |
|
var ( |
|
accountSns *model.OriginAccountSns |
|
err error |
|
) |
|
log.Info("data fix third bind ,mid is %d,action %s,type %s", mid, action, tpe) |
|
if accountSns, err = s.d.QueryAccountSnsByMid(context.Background(), mid); err != nil { |
|
log.Error("data fix query account sns by mid error,mid is %d,err is (%+v)", mid, err) |
|
return |
|
} |
|
|
|
if insertAction == action { |
|
if len(accountSns.SinaAccessToken) != 0 { |
|
sina := &model.UserThirdBind{ |
|
Mid: accountSns.Mid, |
|
PlatForm: platformSina, |
|
OpenID: string(accountSns.SinaUID), |
|
Token: accountSns.SinaAccessToken, |
|
Expires: accountSns.SinaAccessExpires, |
|
} |
|
if _, err = s.d.InsertUserThirdBind(context.Background(), sina); err != nil { |
|
log.Error("data fix s.d.InsertUserThirdBind by mid error,mid is %d,err is (%+v)", mid, err) |
|
return |
|
} |
|
} |
|
if len(accountSns.QQAccessToken) != 0 { |
|
qq := &model.UserThirdBind{ |
|
Mid: accountSns.Mid, |
|
PlatForm: platformQQ, |
|
OpenID: accountSns.QQOpenid, |
|
Token: accountSns.QQAccessToken, |
|
Expires: accountSns.QQAccessExpires, |
|
} |
|
if _, err = s.d.InsertUserThirdBind(context.Background(), qq); err != nil { |
|
log.Error("data fix s.d.UpdateUserThirdBind by mid error,mid is %d,err is (%+v)", mid, err) |
|
return |
|
} |
|
} |
|
} |
|
|
|
if updateAction == action { |
|
if sinaErrorType == errType { |
|
sns := &model.UserThirdBind{ |
|
Mid: accountSns.Mid, |
|
PlatForm: platformSina, |
|
OpenID: string(accountSns.SinaUID), |
|
Token: accountSns.SinaAccessToken, |
|
} |
|
if _, err = s.d.UpdateUserThirdBind(context.Background(), sns); err != nil { |
|
log.Error("data fix s.d.UpdateUserThirdBind by mid error,mid is %d,err is (%+v)", mid, err) |
|
return |
|
} |
|
} |
|
if qqErrorType == errType { |
|
sns := &model.UserThirdBind{ |
|
Mid: accountSns.Mid, |
|
PlatForm: platformQQ, |
|
OpenID: accountSns.QQOpenid, |
|
Token: accountSns.QQAccessToken, |
|
} |
|
if _, err = s.d.UpdateUserThirdBind(context.Background(), sns); err != nil { |
|
log.Error("data fix s.d.UpdateUserThirdBind by mid error,mid is %d,err is (%+v)", mid, err) |
|
return |
|
} |
|
} |
|
} |
|
} |
|
|
|
func (s *Service) fixUserRegOrigin(mid, errType int64, action, tpe string) { |
|
var ( |
|
accountInfo *model.OriginAccountInfo |
|
accountReg *model.OriginAccountReg |
|
affected int64 |
|
err error |
|
) |
|
log.Info("data fix user reg ,mid is %d,action %s,type %s", mid, action, tpe) |
|
if accountInfo, err = s.d.QueryAccountInfoByMid(context.Background(), mid); err != nil { |
|
log.Error("data fix query account info by mid error,mid is %d,err is (%+v)", mid, err) |
|
return |
|
} |
|
uro := &model.UserRegOrigin{ |
|
Mid: accountInfo.Mid, |
|
JoinTime: accountInfo.JoinTime, |
|
JoinIP: InetAtoN(accountInfo.JoinIP), |
|
MTime: accountInfo.MTime, |
|
CTime: accountInfo.MTime, |
|
} |
|
if mid >= 250531100 { |
|
if accountReg, err = s.d.QueryAccountRegByMid(context.Background(), mid); err != nil { |
|
log.Error("data fix query account reg by mid error,mid is %d,err is (%+v)", mid, err) |
|
return |
|
} |
|
if accountReg != nil { |
|
uro.RegType = accountReg.RegType |
|
uro.Origin = accountReg.OriginType |
|
uro.MTime = accountReg.MTime |
|
uro.CTime = accountReg.CTime |
|
uro.AppID = accountReg.AppID |
|
} |
|
} |
|
if insertAction == action || updateAction == action { |
|
if affected, err = s.d.InsertUpdateUserRegOriginType(context.Background(), uro); err != nil { |
|
log.Error("data fix InsertUpdateUserRegOrigin by mid error,mid is %d,err is (%+v)", mid, err) |
|
return |
|
} |
|
if affected == 0 { |
|
log.Error("data fix InsertUpdateUserRegOrigin opt error,not affected ", mid, err) |
|
return |
|
} |
|
} |
|
} |
|
|
|
func (s *Service) handlerEmailInsertDuplicate(userEmail *model.UserEmail) (err error) { |
|
var ( |
|
duplicateMid int64 |
|
asoAccount *model.OriginAccount |
|
affected int64 |
|
) |
|
if duplicateMid, err = s.d.GetMidByEmail(context.Background(), userEmail); err != nil { |
|
log.Error("handlerEmailInsertDuplicate fail to get mid by email userEmail(%+v) error(%+v)", userEmail, err) |
|
return |
|
} |
|
if asoAccount, err = s.d.QueryAccountByMid(context.Background(), duplicateMid); err != nil { |
|
log.Error("handlerEmailInsertDuplicate fail to get asoAccount by mid(%d) error(%+v)", duplicateMid, err) |
|
return |
|
} |
|
// 3. 将冲突的Email设置为NULL |
|
dunplicateUserMailToNil := &model.UserEmail{ |
|
Mid: duplicateMid, |
|
} |
|
if affected, err = s.d.UpdateUserMail(context.Background(), dunplicateUserMailToNil); err != nil || affected == 0 { |
|
log.Error("handlerEmailInsertDuplicate s.d.UpdateUserMail to nil error.") |
|
} |
|
// 4. 插入新的email |
|
if affected, err = s.d.InsertUserEmail(context.Background(), userEmail); err != nil { |
|
log.Error("handlerEmailInsertDuplicate s.d.InsertUserEmail. userMail is (%+v),affect is %d", userEmail, affected) |
|
} |
|
// 5. 更新的tel |
|
om := strings.Trim(strings.ToLower(asoAccount.Email), "") |
|
var emailByte []byte |
|
if emailByte, err = s.doEncrypt(om); err != nil { |
|
log.Error("handlerEmailInsertDuplicate data fix doEncrypt mail by mid error,mid is %d,err is (%+v)", asoAccount.Mid, err) |
|
return |
|
} |
|
dunplicateUserEmail := &model.UserEmail{ |
|
Mid: asoAccount.Mid, |
|
Email: emailByte, |
|
} |
|
if affected, err = s.d.UpdateUserMail(context.Background(), dunplicateUserEmail); err != nil { |
|
log.Error("handlerEmailInsertDuplicate s.d.UpdateUserMail to right. userMail is (%+v),affected is %d", dunplicateUserEmail, affected) |
|
} |
|
return |
|
} |
|
|
|
func (s *Service) handlerEmailUpdateDuplicate(userEmail *model.UserEmail) (err error) { |
|
var ( |
|
duplicateMid int64 |
|
asoAccount *model.OriginAccount |
|
affected int64 |
|
) |
|
if duplicateMid, err = s.d.GetMidByEmail(context.Background(), userEmail); err != nil { |
|
log.Error("handlerEmailInsertDuplicate fail to get mid by email userEmail(%+v) error(%+v)", userEmail, err) |
|
return |
|
} |
|
if asoAccount, err = s.d.QueryAccountByMid(context.Background(), duplicateMid); err != nil { |
|
log.Error("handlerEmailInsertDuplicate fail to get asoAccount by mid(%d) error(%+v)", duplicateMid, err) |
|
return |
|
} |
|
// 3. 将冲突的Email设置为NULL |
|
duplicateUserMailToNil := &model.UserEmail{ |
|
Mid: duplicateMid, |
|
} |
|
if affected, err = s.d.UpdateUserMail(context.Background(), duplicateUserMailToNil); err != nil || affected == 0 { |
|
log.Error("handlerEmailInsertDuplicate s.d.UpdateUserMail to nil error.") |
|
} |
|
// 4. 插入新的email |
|
if affected, err = s.d.UpdateUserMail(context.Background(), userEmail); err != nil { |
|
log.Error("handlerEmailInsertDuplicate s.d.InsertUserEmail. userMail is (%+v),affected %d", userEmail, affected) |
|
} |
|
// 5. 更新的tel |
|
om := strings.Trim(strings.ToLower(asoAccount.Email), "") |
|
var emailByte []byte |
|
if emailByte, err = s.doEncrypt(om); err != nil { |
|
log.Error("handlerEmailInsertDuplicate data fix doEncrypt mail by mid error,mid is %d,err is (%+v)", asoAccount.Mid, err) |
|
return |
|
} |
|
duplicateUserEmail := &model.UserEmail{ |
|
Mid: asoAccount.Mid, |
|
Email: emailByte, |
|
} |
|
if affected, err = s.d.UpdateUserMail(context.Background(), duplicateUserEmail); err != nil { |
|
log.Error("handlerEmailInsertDuplicate s.d.UpdateUserMail to right. userMail is (%+v),affected %d", duplicateUserEmail, affected) |
|
} |
|
return |
|
} |
|
|
|
func (s *Service) handlerInsertTelDuplicate(userTel *model.UserTel) (err error) { |
|
var ( |
|
duplicateMid int64 |
|
duplicateAsoAccount *model.OriginAccount |
|
affected int64 |
|
) |
|
// 1. 查询duplicateMid |
|
if duplicateMid, err = s.d.GetMidByTel(context.Background(), userTel); err != nil { |
|
log.Error("handlerInsertTelDuplicate to get mid by tel userTel(%+v) error(%+v)", userTel, err) |
|
return |
|
} |
|
// 2. 查询冲突的mid |
|
if duplicateAsoAccount, err = s.d.QueryAccountByMid(context.Background(), duplicateMid); err != nil { |
|
log.Error("handlerInsertTelDuplicate to get asoAccount by mid(%d) error(%+v)", duplicateMid, err) |
|
return |
|
} |
|
// 3. 将冲突的tel设置为NULL |
|
duplicateUserTelToNil := &model.UserTel{ |
|
Mid: duplicateMid, |
|
} |
|
if affected, err = s.d.UpdateUserTel(context.Background(), duplicateUserTelToNil); err != nil || affected == 0 { |
|
log.Error("handlerInsertTelDuplicate s.d.UpdateUserTel to nil error.") |
|
} |
|
// 4. 插入新的tel |
|
if affected, err = s.d.InsertUserTel(context.Background(), userTel); err != nil { |
|
log.Error("handlerInsertTelDuplicate s.d.InsertUserTel.userTel is (%+v),affected %d", userTel, affected) |
|
} |
|
// 5. 更新的tel |
|
ot := strings.Trim(strings.ToLower(duplicateAsoAccount.Tel), "") |
|
var telByte []byte |
|
if telByte, err = s.doEncrypt(ot); err != nil { |
|
log.Error("data fix doEncrypt tel by mid error,mid is %d,err is (%+v)", duplicateAsoAccount.Mid, err) |
|
return |
|
} |
|
duplicateUserTel := &model.UserTel{ |
|
Mid: duplicateAsoAccount.Mid, |
|
Cid: s.countryMap[duplicateAsoAccount.CountryID], |
|
Tel: telByte, |
|
} |
|
if affected, err = s.d.UpdateUserTel(context.Background(), duplicateUserTel); err != nil { |
|
log.Error("handlerInsertTelDuplicate s.d.UpdateUserTel to right. userTel is (%+v),affected %d", userTel, affected) |
|
} |
|
return |
|
} |
|
|
|
func (s *Service) handlerUpdateTelDuplicate(userTel *model.UserTel) (err error) { |
|
var ( |
|
duplicateMid int64 |
|
duplicateAsoAccount *model.OriginAccount |
|
affected int64 |
|
) |
|
// 1. 查询duplicateMid |
|
if duplicateMid, err = s.d.GetMidByTel(context.Background(), userTel); err != nil { |
|
log.Error("handlerUpdateTelDuplicate to get mid by tel userTel(%+v) error(%+v)", userTel, err) |
|
return |
|
} |
|
// 2. 查询冲突的mid |
|
if duplicateAsoAccount, err = s.d.QueryAccountByMid(context.Background(), duplicateMid); err != nil { |
|
log.Error("handlerUpdateTelDuplicate to get asoAccount by mid(%d) error(%+v)", duplicateMid, err) |
|
return |
|
} |
|
duplicateUserTelToNil := &model.UserTel{ |
|
Mid: duplicateMid, |
|
} |
|
// 3. 冲突的Tel设置为NULL |
|
if affected, err = s.d.UpdateUserTel(context.Background(), duplicateUserTelToNil); err != nil || affected == 0 { |
|
log.Error("handlerUpdateTelDuplicate s.d.UpdateUserTel to nil error.") |
|
} |
|
// 4. update tel |
|
if affected, err = s.d.UpdateUserTel(context.Background(), userTel); err != nil { |
|
log.Error("handlerUpdateTelDuplicate s.d.UpdateUserTel.userTel is (%+v),affected %d", userTel, affected) |
|
} |
|
// 5. 设置冲突的tel |
|
ot := strings.Trim(strings.ToLower(duplicateAsoAccount.Tel), "") |
|
var telByte []byte |
|
if telByte, err = s.doEncrypt(ot); err != nil { |
|
log.Error("handlerUpdateTelDuplicate data fix doEncrypt tel by mid error,mid is %d,err is (%+v)", duplicateAsoAccount.Mid, err) |
|
return |
|
} |
|
duplicateUserTel := &model.UserTel{ |
|
Mid: duplicateAsoAccount.Mid, |
|
Cid: s.countryMap[duplicateAsoAccount.CountryID], |
|
Tel: telByte, |
|
} |
|
if affected, err = s.d.UpdateUserTel(context.Background(), duplicateUserTel); err != nil { |
|
log.Error("handlerUpdateTelDuplicate s.d.UpdateUserTel to right. userTel is (%+v),affected %d", userTel, affected) |
|
} |
|
return |
|
} |
|
|
|
func (s *Service) fixEmailVerified() (err error) { |
|
var ( |
|
res []*model.UserEmail |
|
originInfo *model.OriginAccountInfo |
|
start = int64(0) |
|
) |
|
for { |
|
log.Info("GetUnverifiedEmail, start %d", start) |
|
if res, err = s.d.GetUnverifiedEmail(context.Background(), start); err != nil { |
|
log.Error("fail to get UserTel error(%+v)", err) |
|
time.Sleep(100 * time.Millisecond) |
|
continue |
|
} |
|
if len(res) == 0 { |
|
log.Info("fix email verified finished!") |
|
break |
|
} |
|
for _, a := range res { |
|
for { |
|
if originInfo, err = s.d.QueryAccountInfoByMid(context.Background(), a.Mid); err != nil { |
|
log.Error("fail to QueryAccountInfoByMid mid is (%+v) error(%+v)", a.Mid, err) |
|
continue |
|
} |
|
break |
|
} |
|
if originInfo.Spacesta >= 0 { |
|
a.Verified = 1 |
|
_, err = s.d.UpdateUserMailVerified(context.Background(), a) |
|
} |
|
} |
|
start = res[len(res)-1].Mid |
|
} |
|
return |
|
}
|
|
|