This commit is contained in:
2026-07-26 22:24:57 +08:00
parent e51056e0eb
commit 6631f8d382
6 changed files with 144 additions and 0 deletions

View File

@@ -45,6 +45,9 @@ type CertificationApplicationService interface {
// AdminCompleteCertificationWithoutContract 管理员代用户完成认证(暂不关联合同)
AdminCompleteCertificationWithoutContract(ctx context.Context, cmd *commands.AdminCompleteCertificationCommand) (*responses.CertificationResponse, error)
// AdminResetForResignContract 管理员触发重新认证(回退到提交企业信息,保留钱包/API Key/历史合同,不改 is_certified
AdminResetForResignContract(ctx context.Context, cmd *commands.AdminResetForResignContractCommand) (*responses.CertificationResponse, error)
// AdminListSubmitRecords 管理端分页查询企业信息提交记录
AdminListSubmitRecords(ctx context.Context, query *queries.AdminListSubmitRecordsQuery) (*responses.AdminSubmitRecordsListResponse, error)
// AdminGetSubmitRecordByID 管理端获取单条提交记录详情

View File

@@ -1003,6 +1003,48 @@ func (s *CertificationApplicationServiceImpl) AdminCompleteCertificationWithoutC
return response, nil
}
// AdminResetForResignContract 管理员触发重新认证(回退到提交企业信息)
// 回退到 pending用户可重新填写企业信息并走完整流程不改 is_certified不动钱包/API Key/历史合同
func (s *CertificationApplicationServiceImpl) AdminResetForResignContract(
ctx context.Context,
cmd *commands.AdminResetForResignContractCommand,
) (*responses.CertificationResponse, error) {
s.logger.Info("管理员触发重新认证",
zap.String("admin_id", cmd.AdminID),
zap.String("user_id", cmd.UserID),
zap.String("reason", cmd.Reason),
)
if strings.TrimSpace(cmd.UserID) == "" {
return nil, fmt.Errorf("用户ID不能为空")
}
if strings.TrimSpace(cmd.Reason) == "" {
return nil, fmt.Errorf("请填写操作原因")
}
cert, err := s.aggregateService.LoadCertificationByUserID(ctx, cmd.UserID)
if err != nil {
return nil, fmt.Errorf("加载认证信息失败: %s", err.Error())
}
if err := cert.ResetForResignContract(cmd.AdminID, fmt.Sprintf("管理员触发重新认证:%s", cmd.Reason)); err != nil {
return nil, err
}
if err := s.aggregateService.SaveCertification(ctx, cert); err != nil {
return nil, fmt.Errorf("保存认证信息失败: %s", err.Error())
}
response := s.convertToResponse(cert)
s.logger.Info("管理员触发重新认证成功",
zap.String("admin_id", cmd.AdminID),
zap.String("user_id", cmd.UserID),
zap.String("certification_id", cert.ID),
zap.String("status", string(cert.Status)),
)
return response, nil
}
// AdminListSubmitRecords 管理端分页查询企业信息提交记录
func (s *CertificationApplicationServiceImpl) AdminListSubmitRecords(
ctx context.Context,

View File

@@ -85,6 +85,13 @@ type AdminCompleteCertificationCommand struct {
// 备注信息,用于记录后台操作原因
Reason string `json:"reason" validate:"required"`
}
// AdminResetForResignContractCommand 管理员触发用户重新认证(回退到提交企业信息,保留钱包/API Key/历史记录)
type AdminResetForResignContractCommand struct {
AdminID string `json:"-"`
UserID string `json:"user_id" validate:"required"`
Reason string `json:"reason" validate:"required,min=2,max=500"`
}
// ForceTransitionStatusCommand 强制状态转换命令(管理员)
type ForceTransitionStatusCommand struct {
CertificationID string `json:"certification_id" validate:"required"`