暂存
All checks were successful
构建并部署到测试环境(无 SSH) / build-and-deploy (push) Successful in 8m32s

This commit is contained in:
2026-08-06 09:35:00 +08:00
parent 8659dfc658
commit 88cc5e96ec
75 changed files with 6520 additions and 513 deletions

View File

@@ -173,6 +173,9 @@ const (
CodeWeComApplicationNotFound = 1210 // 企业微信应用配置不存在
CodeWeComCredentialInvalid = 1211 // 企业微信加密凭据不可用
// 审计留存相关错误 (1220-1229)
CodeAuditDataArchived = 1220 // 查询范围已归档,当前不支持在线查询
// 服务端错误 (2000-2999) -> 5xx HTTP 状态码
CodeInternalError = 2001 // 内部服务器错误
CodeDatabaseError = 2002 // 数据库错误
@@ -316,6 +319,7 @@ var allErrorCodes = []int{
CodePaymentMethodUnavailable,
CodeWeComApplicationNotFound,
CodeWeComCredentialInvalid,
CodeAuditDataArchived,
CodeInternalError,
CodeDatabaseError,
CodeRedisError,
@@ -453,6 +457,7 @@ var errorMessages = map[int]string{
CodePaymentMethodUnavailable: "当前资产不支持所选支付方式",
CodeWeComApplicationNotFound: "企业微信应用配置不存在或已禁用",
CodeWeComCredentialInvalid: "企业微信凭据配置无效",
CodeAuditDataArchived: "数据已归档,第一阶段不支持在线查询",
CodeInvalidCredentials: "用户名或密码错误",
CodeAccountLocked: "账号已锁定",
CodePasswordExpired: "密码已过期",
@@ -499,6 +504,8 @@ func GetHTTPStatus(code int) int {
return 403 // Forbidden
case CodeNotFound:
return 404 // Not Found
case CodeAuditDataArchived:
return 410 // Gone
case CodeConflict,
CodeUsernameExists,
CodePhoneExists,

View File

@@ -28,6 +28,7 @@ type AppError struct {
Code int // 应用错误码
Message string // 错误消息
Err error // 底层错误(可选)
Data any // 可安全返回的结构化错误上下文(可选)
}
func (e *AppError) Error() string {
@@ -59,6 +60,13 @@ func New(code int, customMsg ...string) *AppError {
}
}
// NewWithData 创建携带安全结构化上下文的 AppError。
func NewWithData(code int, data any, customMsg ...string) *AppError {
err := New(code, customMsg...)
err.Data = data
return err
}
// Wrap 用错误码和消息包装现有错误
// 优先使用 errorMessages 映射表中的消息,允许通过可选参数覆盖
// 用法:

View File

@@ -51,6 +51,7 @@ func handleError(c *fiber.Ctx, err error, logger *zap.Logger) error {
var code int
var message string
var httpStatus int
var data any
var appErr *AppError
var fiberErr *fiber.Error
@@ -60,6 +61,7 @@ func handleError(c *fiber.Ctx, err error, logger *zap.Logger) error {
code = appErr.Code
message = appErr.Message
httpStatus = GetHTTPStatus(appErr.Code)
data = appErr.Data
// 记录错误日志(包含完整上下文)
logFields := append(errCtx.ToLogFields(),
@@ -116,7 +118,7 @@ func handleError(c *fiber.Ctx, err error, logger *zap.Logger) error {
// 6. 返回统一 JSON 响应
errResp := c.Status(httpStatus).JSON(fiber.Map{
"code": code,
"data": nil,
"data": data,
"msg": message,
"timestamp": time.Now().Format(time.RFC3339),
})