fix: internal user
CI / changes (push) Successful in 40s
CI / ad (push) Successful in 0s
CI / admin (push) Successful in 0s
CI / bff (push) Successful in 24s
CI / chore (push) Successful in 23s
CI / equipment (push) Successful in 1s
CI / express (push) Successful in 0s
CI / factory (push) Successful in 0s
CI / payment (push) Successful in 1s
CI / product (push) Successful in 0s
CI / record (push) Successful in 0s
CI / sale (push) Successful in 23s
CI / task (push) Successful in 0s
CI / user (push) Successful in 24s
CI / wecom (push) Successful in 0s

This commit is contained in:
zzw
2026-09-16 15:19:54 +08:00
parent e334bf0f66
commit 052425970a
15 changed files with 259 additions and 97 deletions
+13 -8
View File
@@ -51,13 +51,14 @@ func loadEnabledClient(clientCode string) (*dao.Client, error) {
return &client, nil
}
func findCredential(credentialType, identifier string) (*dao.UserCredential, error) {
func findCredential(credentialType, identifier, subjectType string) (*dao.UserCredential, error) {
var cred dao.UserCredential
credModel := model.UserCredentialModel{}.Init()
if err := credModel.GetOne(modelbase.Params{
Eq: map[string]string{
"credential_type": credentialType,
"identifier": identifier,
"subject_type": subjectType,
},
}, &cred); err != nil {
return nil, err
@@ -100,8 +101,8 @@ func loadEnabledUser(userId int64) (*dao.UserRow, error) {
return &row, nil
}
func resolveOrCreateWechatUser(ctx context.Context, db *gorm.DB, openid, unionid, clientCode string) (int64, error) {
openCred, err := findCredential(dao.CredentialTypeOpenid, openid)
func resolveOrCreateWechatUser(ctx context.Context, db *gorm.DB, openid, unionid, clientCode, subjectType string) (int64, error) {
openCred, err := findCredential(dao.CredentialTypeOpenid, openid, subjectType)
if err != nil {
return utils.NumberZero, err
}
@@ -109,7 +110,7 @@ func resolveOrCreateWechatUser(ctx context.Context, db *gorm.DB, openid, unionid
if openCred.Status == dao.StatusDisabled {
return utils.NumberZero, status.Error(codes.FailedPrecondition, "登录凭证已禁用")
}
if err := ensureUserClient(db, openCred.UserId, clientCode); err != nil {
if err := ensureUserClient(db, openCred.UserId, clientCode, utils.NumberZero); err != nil {
return utils.NumberZero, err
}
return openCred.UserId, nil
@@ -117,7 +118,7 @@ func resolveOrCreateWechatUser(ctx context.Context, db *gorm.DB, openid, unionid
var userId int64
if unionid != utils.StringEmpty {
unionCred, uErr := findCredential(dao.CredentialTypeUnionid, unionid)
unionCred, uErr := findCredential(dao.CredentialTypeUnionid, unionid, subjectType)
if uErr != nil {
return utils.NumberZero, uErr
}
@@ -140,10 +141,10 @@ func resolveOrCreateWechatUser(ctx context.Context, db *gorm.DB, openid, unionid
userId = add.Id
}
if err := createWechatCredentials(tx, userId, openid, unionid); err != nil {
if err := createWechatCredentials(tx, userId, openid, unionid, subjectType); err != nil {
return err
}
return ensureUserClient(tx, userId, clientCode)
return ensureUserClient(tx, userId, clientCode, utils.NumberZero)
})
if txErr != nil {
if st, ok := status.FromError(txErr); ok {
@@ -154,7 +155,7 @@ func resolveOrCreateWechatUser(ctx context.Context, db *gorm.DB, openid, unionid
return userId, nil
}
func createWechatCredentials(tx *gorm.DB, userId int64, openid, unionid string) error {
func createWechatCredentials(tx *gorm.DB, userId int64, openid, unionid, subjectType string) error {
credModel := model.UserCredentialModel{}.Init()
credModel.Base = credModel.Base.WithTX(tx)
@@ -163,6 +164,7 @@ func createWechatCredentials(tx *gorm.DB, userId int64, openid, unionid string)
Eq: map[string]string{
"credential_type": dao.CredentialTypeOpenid,
"identifier": openid,
"subject_type": subjectType,
},
}, &existOpen); err != nil {
return err
@@ -172,6 +174,7 @@ func createWechatCredentials(tx *gorm.DB, userId int64, openid, unionid string)
UserId: userId,
CredentialType: dao.CredentialTypeOpenid,
Identifier: openid,
SubjectType: subjectType,
ExtraJson: dao.ExtraJsonEmpty,
Status: dao.StatusEnabled,
}); err != nil {
@@ -190,6 +193,7 @@ func createWechatCredentials(tx *gorm.DB, userId int64, openid, unionid string)
Eq: map[string]string{
"credential_type": dao.CredentialTypeUnionid,
"identifier": unionid,
"subject_type": subjectType,
},
}, &existUnion); err != nil {
return err
@@ -199,6 +203,7 @@ func createWechatCredentials(tx *gorm.DB, userId int64, openid, unionid string)
UserId: userId,
CredentialType: dao.CredentialTypeUnionid,
Identifier: unionid,
SubjectType: subjectType,
ExtraJson: dao.ExtraJsonEmpty,
Status: dao.StatusEnabled,
})