This commit is contained in:
2026-07-27 12:37:29 +08:00
parent dc9a98e893
commit 9429e4f6e0
20 changed files with 1066 additions and 61 deletions

View File

@@ -0,0 +1,151 @@
package certification
import (
"context"
"errors"
"strings"
"hyapi-server/internal/domains/certification/entities"
"hyapi-server/internal/domains/certification/ports"
"go.uber.org/zap"
"gorm.io/gorm"
)
// resolveCorpAuthQueryForGet 构造 /corp/get 入参(三选一)。
// 优先级:库中 openCorpId > corpIdentNo(USCC) > 库中 clientCorpId
func (s *CertificationApplicationServiceImpl) resolveCorpAuthQueryForGet(
ctx context.Context,
userID, uscc, fallbackClientCorpID string,
) *ports.CorpAuthStatusQuery {
uscc = strings.TrimSpace(uscc)
fallbackClientCorpID = strings.TrimSpace(fallbackClientCorpID)
rec := s.loadFadadaCorpAuthRecord(ctx, userID, uscc, fallbackClientCorpID)
q := &ports.CorpAuthStatusQuery{}
if rec != nil && strings.TrimSpace(rec.OpenCorpID) != "" {
q.OpenCorpID = strings.TrimSpace(rec.OpenCorpID)
return q
}
if uscc != "" {
q.CorpIdentNo = uscc
return q
}
if rec != nil && strings.TrimSpace(rec.ClientCorpID) != "" {
q.ClientCorpID = strings.TrimSpace(rec.ClientCorpID)
return q
}
if fallbackClientCorpID != "" {
q.ClientCorpID = fallbackClientCorpID
}
return q
}
func (s *CertificationApplicationServiceImpl) loadFadadaCorpAuthRecord(
ctx context.Context,
userID, uscc, clientCorpID string,
) *entities.FadadaCorpAuthRecord {
if s.fadadaCorpAuthRecordRepo == nil {
return nil
}
if userID != "" {
if rec, err := s.fadadaCorpAuthRecordRepo.FindLatestByUserID(ctx, userID); err == nil && rec != nil {
return rec
} else if err != nil && !errors.Is(err, gorm.ErrRecordNotFound) {
s.logger.Warn("按用户查询法大大授权记录失败", zap.String("user_id", userID), zap.Error(err))
}
}
if uscc != "" {
if rec, err := s.fadadaCorpAuthRecordRepo.FindByUnifiedSocialCode(ctx, uscc); err == nil && rec != nil {
return rec
} else if err != nil && !errors.Is(err, gorm.ErrRecordNotFound) {
s.logger.Warn("按信用代码查询法大大授权记录失败", zap.String("uscc", uscc), zap.Error(err))
}
}
if clientCorpID != "" {
if rec, err := s.fadadaCorpAuthRecordRepo.FindByClientCorpID(ctx, clientCorpID); err == nil && rec != nil {
return rec
} else if err != nil && !errors.Is(err, gorm.ErrRecordNotFound) {
s.logger.Warn("按clientCorpId查询法大大授权记录失败", zap.String("client_corp_id", clientCorpID), zap.Error(err))
}
}
return nil
}
func (s *CertificationApplicationServiceImpl) fadadaAppID() string {
if s.config != nil {
return strings.TrimSpace(s.config.Fadada.AppID)
}
return ""
}
func (s *CertificationApplicationServiceImpl) ensureFadadaCorpAuthSeed(
ctx context.Context,
cert *entities.Certification,
record *entities.EnterpriseInfoSubmitRecord,
clientCorpID string,
) {
if s.fadadaCorpAuthRecordRepo == nil || cert == nil || record == nil {
return
}
seed := entities.NewFadadaCorpAuthRecord(
cert.UserID,
cert.ID,
s.fadadaAppID(),
record.CompanyName,
record.UnifiedSocialCode,
clientCorpID,
)
seed.Source = "select_sign_platform"
if err := s.fadadaCorpAuthRecordRepo.UpsertByBizKey(ctx, seed); err != nil {
s.logger.Warn("初始化法大大授权记录失败", zap.Error(err), zap.String("user_id", cert.UserID))
}
}
func (s *CertificationApplicationServiceImpl) persistFadadaCorpAuthStatus(
ctx context.Context,
cert *entities.Certification,
record *entities.EnterpriseInfoSubmitRecord,
status *ports.CorpAuthStatusResult,
source string,
) {
if s.fadadaCorpAuthRecordRepo == nil || status == nil || !status.Found {
return
}
userID, certID, company, uscc := "", "", "", ""
if cert != nil {
userID = cert.UserID
certID = cert.ID
}
if record != nil {
company = record.CompanyName
uscc = record.UnifiedSocialCode
if userID == "" {
userID = record.UserID
}
}
rec := entities.NewFadadaCorpAuthRecord(userID, certID, s.fadadaAppID(), company, uscc, status.ClientCorpID)
rec.ApplyAuthStatus(
status.OpenCorpID,
status.ClientCorpID,
status.BindingStatus,
status.IdentStatus,
"",
nil,
source,
)
if err := s.fadadaCorpAuthRecordRepo.UpsertByBizKey(ctx, rec); err != nil {
s.logger.Warn("保存法大大授权状态失败", zap.Error(err), zap.String("user_id", userID), zap.String("source", source))
}
}
func (s *CertificationApplicationServiceImpl) partyAOpenCorpIDFromStore(
ctx context.Context,
userID, uscc string,
) string {
rec := s.loadFadadaCorpAuthRecord(ctx, userID, uscc, uscc)
if rec == nil {
return ""
}
return strings.TrimSpace(rec.OpenCorpID)
}