Bladeren bron

feature(系统管理): 删除原有错误处理

ZZH-wl 3 jaren geleden
bovenliggende
commit
360648dcd3
2 gewijzigde bestanden met toevoegingen van 109 en 277 verwijderingen
  1. 109 135
      opms_libary/myerrors/error.go
  2. 0 142
      opms_libary/myerrors/errorPlugin.go

+ 109 - 135
opms_libary/myerrors/error.go

@@ -1,168 +1,142 @@
 package myerrors
 
 import (
+	"context"
+	"github.com/gogf/gf/errors/gcode"
 	"github.com/gogf/gf/errors/gerror"
 	"github.com/gogf/gf/frame/g"
+	"github.com/gogf/gf/util/gconv"
+	"github.com/smallnest/rpcx/protocol"
+	"strings"
 )
 
-const (
-// SysErr  = "系统异常,请重新尝试"
-// ConvErr = "数据转换异常,请重新尝试"
-// DbErr   = "数据库操作异常,请重新尝试"
-// AuthErr = "认证异常,请重新尝试"
+var (
+	CodeTipsErr      = gcode.New(1001, "错误提示", nil)
+	CodeValidErr     = gcode.New(1002, "数据校验失败", nil)
+	CodeQueryErr     = gcode.New(1003, "%s查询失败", nil)
+	CodeCreateErr    = gcode.New(1004, "%s创建失败", nil)
+	CodeUpdateErr    = gcode.New(1005, "%s更新失败", nil)
+	CodeDeleteErr    = gcode.New(1006, "%s删除失败", nil)
+	CodeAuthErr      = gcode.New(1010, "登录失效或认证失败,请重新尝试", nil)
+	CodePermErr      = gcode.New(1011, "权限验证失败,请重新尝试", nil)
+	CodeMicroCallErr = gcode.New(1100, "微服务调用失败,请重新尝试", nil)
+	CodeConvErr      = gcode.New(1200, "数据转换异常,请重新尝试", nil)
+	CodeDbErr        = gcode.New(1201, "数据库操作异常,请重新尝试", nil)
+	CodeSysErr       = gcode.New(500, "系统异常,请重新尝试", nil)
 )
 
-type apiCode interface {
-	Error() string
-	Code() int
-	TopError() error
+//	func New(errCode int, err error, errMsg ...string) error {
+//		if err == nil {
+//			return gerror.NewCode(errCode, handleErrMsg(ConvErr, errMsg...))
+//		}
+//		return gerror.WrapCode(errCode, err, handleErrMsg(ConvErr, errMsg...))
+//	}
+func TipsError(errMsg string) error {
+	return gerror.NewCode(CodeTipsErr, errMsg)
 }
-
-// 自定义异常,方便输出标准异常提示,同时在日志中能记录原始异常信息
-type Error struct {
-	topError error // 原始异常
-	error    error
+func ValidError(errMsg ...string) error {
+	return gerror.NewCode(CodeValidErr, handleErrMsg(CodeValidErr, errMsg...))
 }
-
-func (err *Error) Error() string {
-	if err == nil {
-		return ""
-	}
-	if err.error != nil {
-		return err.error.Error()
-	}
-
-	return ""
+func QueryError(err error, module string) error {
+	return gerror.WrapCodef(CodeQueryErr, err, CodeQueryErr.Message(), module)
 }
-
-// 返回原始异常信息
-func (err *Error) TopError() error {
-	if err == nil {
-		return nil
-	}
-
-	if err.topError != nil {
-		return err.topError
-	} else {
-		return err.error
-	}
+func CreateError(err error, module string) error {
+	return gerror.WrapCodef(CodeCreateErr, err, CodeCreateErr.Message(), module)
 }
-
-func (err *Error) Code() int {
-	if err == nil {
-		return -1
-	}
-	return gerror.Code(err.error).Code()
+func UpdateError(err error, module string) error {
+	return gerror.WrapCodef(CodeUpdateErr, err, CodeUpdateErr.Message(), module)
 }
-
-//func New(text string, topErr error) error {
-//	return &Error{
-//		topError: topErr,
-//		error:    gerror.New(text),
-//	}
-//}
-
-func NewCode(code int, text string, topErr error) error {
-	return &Error{
-		topError: topErr,
-		error:    gerror.NewCode(nil, text),
-	}
+func DeleteError(err error, module string) error {
+	return gerror.WrapCodef(CodeDeleteErr, err, CodeDeleteErr.Message(), module)
+}
+func AuthError(errMsg ...string) error {
+	return gerror.NewCode(CodeAuthErr, handleErrMsg(CodeAuthErr, errMsg...))
+}
+func PermError(errMsg ...string) error {
+	return gerror.NewCode(CodePermErr, handleErrMsg(CodePermErr, errMsg...))
+}
+func MicroCallError(errMsg ...string) error {
+	return gerror.NewCode(CodeMicroCallErr, handleErrMsg(CodeMicroCallErr, errMsg...))
+}
+func ConvError(errMsg ...string) error {
+	return gerror.NewCode(CodeConvErr, handleErrMsg(CodeConvErr, errMsg...))
+}
+func DbError(errMsg ...string) error {
+	return gerror.NewCode(CodeDbErr, handleErrMsg(CodeDbErr, errMsg...))
+}
+func SysError() error {
+	return gerror.NewCode(CodeSysErr, CodeSysErr.Message())
 }
 
-func Code(err error) int {
-	if err != nil {
-		if e, ok := err.(apiCode); ok {
-			return e.Code()
-		}
+func handleErrMsg(errCode gcode.Code, errMsg ...string) string {
+	msg := errCode.Message()
+	if len(errMsg) > 0 {
+		msg = errCode.Message() + ": " + strings.Join(errMsg, ", ")
 	}
-	return -1
+	return msg
 }
 
-// 输出原始异常
-func TopErr(err error) error {
-	if err != nil {
-		if e, ok := err.(apiCode); ok {
-			return e.TopError()
+type HandleErrorPlugin struct{}
+
+func (p HandleErrorPlugin) PreWriteResponse(ctx context.Context, req *protocol.Message, res *protocol.Message, err error) error {
+	if err == nil {
+		// todo 正常数据处理
+		resData := gconv.Map(res.Payload)
+		resData["code"] = 200
+		if val, ok := resData["msg"]; !ok || val == "" {
+			resData["msg"] = "操作成功"
 		}
+		res.Payload = gconv.Bytes(gconv.String(resData))
+		return nil
 	}
-	return nil
-}
-
-// 异常检查  返回值:是否异常、error实例、异常码、异常信息
-func CheckError(err error, msg ...string) (bool, error, int32, string) {
-	message := ""
-	if err != nil {
-		theErr := err
-		if len(msg) > 0 {
-			message = msg[0]
+	// error 堆栈信息输出
+	g.Log().Error(gerror.Stack(err))
+	topCode := gerror.Code(err).Code()
+	if topCode > 0 {
+		// 默认返回系统级异常处理
+		var resData = g.Map{
+			"code": CodeSysErr.Code(),
+			"msg":  CodeSysErr.Message(),
 		}
-		if _, ok := err.(*gerror.Error); ok && message == "" {
-			//message = SysErr
+		// 检查是否存在二级错误,如存在取底层错误信息
+		gNextError := gerror.Next(err)
+		nextErrCode := topCode
+		if gNextError != nil {
+			nextErrCode = gerror.Code(gNextError).Code()
 		}
-		if Code(err) == 210 { // 提示性异常,不返回Error
-			return false, nil, 210, err.Error()
-		} else if Code(err) == 900 { // 系统级异常
-			if TopErr(err) != nil {
-				theErr = TopErr(err)
-			}
-			g.Log().Error(theErr) // 记录原始异常
-			if message != "" {
-				return true, gerror.New(message), 900, message
+		switch true {
+		case nextErrCode > 1000:
+			// 业务级异常处理
+			resData = g.Map{
+				"code": topCode,
+				"msg":  err,
 			}
-			return true, err, 900, err.Error()
-		} else { // 常规异常
-			if TopErr(err) != nil {
-				theErr = TopErr(err)
+		case nextErrCode > 0 && topCode > 1000:
+			// 检查是否存在业务信息,添加显示
+			resData = g.Map{
+				"code": topCode,
+				"msg":  splitErrorStr(err.Error()),
 			}
-			g.Log().Error(theErr) // 记录原始异常
-			if message != "" {
-				return true, gerror.New(message), 500, message
+		case nextErrCode == 51:
+			// 检查是否存在业务信息,添加显示
+			resData = g.Map{
+				"code": CodeValidErr.Code(),
+				"msg":  CodeValidErr.Message() + ": " + err.Error(),
 			}
-			return true, err, 500, err.Error()
+		default:
+
+		}
+		res.Payload = gconv.Bytes(gconv.String(resData))
+		res.SetMessageStatusType(protocol.Normal)
+		if res.Metadata != nil {
+			delete(res.Metadata, protocol.ServiceError)
 		}
 	}
-	return false, nil, 200, "操作成功"
-}
-
-// 提示性异常,不进行通常错误处理(不输出日志)
-func NewMsgError(topErr error, msg string) error {
-	return NewCode(210, msg, topErr)
-}
 
-// 系统级别异常
-func NewSysError(topErr error, msg ...string) error {
-	//message := SysErr
-	//if len(msg) > 0 {
-	//	message = 1
-	//}
-	//return NewCode(900, message, topErr)
 	return nil
 }
 
-// 数据库操作异常
-func NewDbError(topErr error, msg ...string) error {
-	//message := DbErr
-	//if len(msg) > 0 {
-	//	message = msg[0]
-	//}
-	return nil
-}
-
-// 类型转换异常
-func NewConvError(topErr error, msg ...string) error {
-	//message := ConvErr
-	//if len(msg) > 0 {
-	//	message = msg[0]
-	//}
-	return nil
-}
-
-// 认证异常
-func NewAuthError(topErr error, msg ...string) error {
-	//message := AuthErr
-	//if len(msg) > 0 {
-	//	message = msg[0]
-	//}
-	//return NewCode(401, message, topErr)
-	return nil
+func splitErrorStr(errMsg string) string {
+	errStrIndex := strings.Index(errMsg, ": ")
+	return errMsg[:errStrIndex] + ": " + CodeSysErr.Message()
 }

+ 0 - 142
opms_libary/myerrors/errorPlugin.go

@@ -1,142 +0,0 @@
-package myerrors
-
-import (
-	"context"
-	"github.com/gogf/gf/errors/gcode"
-	"github.com/gogf/gf/errors/gerror"
-	"github.com/gogf/gf/frame/g"
-	"github.com/gogf/gf/util/gconv"
-	"github.com/smallnest/rpcx/protocol"
-	"strings"
-)
-
-var (
-	CodeTipsErr      = gcode.New(1001, "错误提示", nil)
-	CodeValidErr     = gcode.New(1002, "数据校验失败", nil)
-	CodeQueryErr     = gcode.New(1003, "%s查询失败", nil)
-	CodeCreateErr    = gcode.New(1004, "%s创建失败", nil)
-	CodeUpdateErr    = gcode.New(1005, "%s更新失败", nil)
-	CodeDeleteErr    = gcode.New(1006, "%s删除失败", nil)
-	CodeAuthErr      = gcode.New(1010, "登录失效或认证失败,请重新尝试", nil)
-	CodePermErr      = gcode.New(1011, "权限验证失败,请重新尝试", nil)
-	CodeMicroCallErr = gcode.New(1100, "微服务调用失败,请重新尝试", nil)
-	CodeConvErr      = gcode.New(1200, "数据转换异常,请重新尝试", nil)
-	CodeDbErr        = gcode.New(1201, "数据库操作异常,请重新尝试", nil)
-	CodeSysErr       = gcode.New(500, "系统异常,请重新尝试", nil)
-)
-
-//	func New(errCode int, err error, errMsg ...string) error {
-//		if err == nil {
-//			return gerror.NewCode(errCode, handleErrMsg(ConvErr, errMsg...))
-//		}
-//		return gerror.WrapCode(errCode, err, handleErrMsg(ConvErr, errMsg...))
-//	}
-func TipsError(errMsg string) error {
-	return gerror.NewCode(CodeTipsErr, errMsg)
-}
-func ValidError(errMsg ...string) error {
-	return gerror.NewCode(CodeValidErr, handleErrMsg(CodeValidErr, errMsg...))
-}
-func QueryError(err error, module string) error {
-	return gerror.WrapCodef(CodeQueryErr, err, CodeQueryErr.Message(), module)
-}
-func CreateError(err error, module string) error {
-	return gerror.WrapCodef(CodeCreateErr, err, CodeCreateErr.Message(), module)
-}
-func UpdateError(err error, module string) error {
-	return gerror.WrapCodef(CodeUpdateErr, err, CodeUpdateErr.Message(), module)
-}
-func DeleteError(err error, module string) error {
-	return gerror.WrapCodef(CodeDeleteErr, err, CodeDeleteErr.Message(), module)
-}
-func AuthError(errMsg ...string) error {
-	return gerror.NewCode(CodeAuthErr, handleErrMsg(CodeAuthErr, errMsg...))
-}
-func PermError(errMsg ...string) error {
-	return gerror.NewCode(CodePermErr, handleErrMsg(CodePermErr, errMsg...))
-}
-func MicroCallError(errMsg ...string) error {
-	return gerror.NewCode(CodeMicroCallErr, handleErrMsg(CodeMicroCallErr, errMsg...))
-}
-func ConvError(errMsg ...string) error {
-	return gerror.NewCode(CodeConvErr, handleErrMsg(CodeConvErr, errMsg...))
-}
-func DbError(errMsg ...string) error {
-	return gerror.NewCode(CodeDbErr, handleErrMsg(CodeDbErr, errMsg...))
-}
-func SysError() error {
-	return gerror.NewCode(CodeSysErr, CodeSysErr.Message())
-}
-
-func handleErrMsg(errCode gcode.Code, errMsg ...string) string {
-	msg := errCode.Message()
-	if len(errMsg) > 0 {
-		msg = errCode.Message() + ": " + strings.Join(errMsg, ", ")
-	}
-	return msg
-}
-
-type HandleErrorPlugin struct{}
-
-func (p HandleErrorPlugin) PreWriteResponse(ctx context.Context, req *protocol.Message, res *protocol.Message, err error) error {
-	if err == nil {
-		// todo 正常数据处理
-		resData := gconv.Map(res.Payload)
-		resData["code"] = 200
-		if val, ok := resData["msg"]; !ok || val == "" {
-			resData["msg"] = "操作成功"
-		}
-		res.Payload = gconv.Bytes(gconv.String(resData))
-		return nil
-	}
-	// error 堆栈信息输出
-	g.Log().Error(gerror.Stack(err))
-	topCode := gerror.Code(err).Code()
-	if topCode > 0 {
-		// 默认返回系统级异常处理
-		var resData = g.Map{
-			"code": CodeSysErr.Code(),
-			"msg":  CodeSysErr.Message(),
-		}
-		// 检查是否存在二级错误,如存在取底层错误信息
-		gNextError := gerror.Next(err)
-		nextErrCode := topCode
-		if gNextError != nil {
-			nextErrCode = gerror.Code(gNextError).Code()
-		}
-		switch true {
-		case nextErrCode > 1000:
-			// 业务级异常处理
-			resData = g.Map{
-				"code": topCode,
-				"msg":  err,
-			}
-		case nextErrCode > 0 && topCode > 1000:
-			// 检查是否存在业务信息,添加显示
-			resData = g.Map{
-				"code": topCode,
-				"msg":  splitErrorStr(err.Error()),
-			}
-		case nextErrCode == 51:
-			// 检查是否存在业务信息,添加显示
-			resData = g.Map{
-				"code": CodeValidErr.Code(),
-				"msg":  CodeValidErr.Message() + ": " + err.Error(),
-			}
-		default:
-
-		}
-		res.Payload = gconv.Bytes(gconv.String(resData))
-		res.SetMessageStatusType(protocol.Normal)
-		if res.Metadata != nil {
-			delete(res.Metadata, protocol.ServiceError)
-		}
-	}
-
-	return nil
-}
-
-func splitErrorStr(errMsg string) string {
-	errStrIndex := strings.Index(errMsg, ": ")
-	return errMsg[:errStrIndex] + ": " + CodeSysErr.Message()
-}