增加定时任务 处理异常
This commit is contained in:
@@ -2,104 +2,136 @@ package request
|
||||
|
||||
import (
|
||||
"encoding/json"
|
||||
req_validator "energy-management-system/request/validator"
|
||||
"energy-management-system/utils/code"
|
||||
"energy-management-system/utils/exception"
|
||||
"errors"
|
||||
"fmt"
|
||||
"github.com/gin-gonic/gin"
|
||||
"github.com/gin-gonic/gin/binding"
|
||||
"github.com/go-playground/locales/en"
|
||||
"github.com/go-playground/locales/zh"
|
||||
ut "github.com/go-playground/universal-translator"
|
||||
"github.com/go-playground/validator/v10"
|
||||
zhTranslations "github.com/go-playground/validator/v10/translations/zh"
|
||||
"os"
|
||||
"reflect"
|
||||
"regexp"
|
||||
"strconv"
|
||||
"strings"
|
||||
)
|
||||
|
||||
// Trans 定义一个全局翻译器T
|
||||
var trans ut.Translator
|
||||
var validate *validator.Validate
|
||||
var ok bool
|
||||
//var trans ut.Translator
|
||||
//var validate *validator.Validate
|
||||
//var ok bool
|
||||
|
||||
// InitTrans 初始化翻译器
|
||||
func InitTrans(locale ...string) {
|
||||
if len(locale) == 0 {
|
||||
locale = []string{"zh"}
|
||||
}
|
||||
// 修改gin框架中的Validator引擎属性,实现自定制
|
||||
if validate, ok = binding.Validator.Engine().(*validator.Validate); ok {
|
||||
//func InitTrans(locale ...string) {
|
||||
// if len(locale) == 0 {
|
||||
// locale = []string{"zh"}
|
||||
// }
|
||||
// // 修改gin框架中的Validator引擎属性,实现自定制
|
||||
// if validate, ok = binding.Validator.Engine().(*validator.Validate); ok {
|
||||
//
|
||||
// // zi
|
||||
// //validate.SetTagName("ss")
|
||||
//
|
||||
// validate.RegisterTagNameFunc(func(fld reflect.StructField) string {
|
||||
// name := strings.SplitN(fld.Tag.Get("json"), ",", 2)[0]
|
||||
// if name == "-" || name == "_" {
|
||||
// return ""
|
||||
// }
|
||||
// return name
|
||||
// })
|
||||
//
|
||||
// // 第一个参数是备用(fallback)的语言环境
|
||||
// uni := ut.New(en.New(), zh.New())
|
||||
// trans, _ = uni.FindTranslator(locale[0])
|
||||
// // 注册翻译器
|
||||
// err := zhTranslations.RegisterDefaultTranslations(validate, trans)
|
||||
//
|
||||
// // 注册自定义验证
|
||||
// validate.RegisterValidation("mobile", func(fl validator.FieldLevel) bool {
|
||||
// regRuler := "^1[3456789]{1}\\d{9}$"
|
||||
// reg := regexp.MustCompile(regRuler)
|
||||
// return reg.MatchString(fl.Field().String())
|
||||
// })
|
||||
//
|
||||
// // 注册自定义验证的翻译
|
||||
// validate.RegisterTranslation("mobile", trans, func(ut ut.Translator) error {
|
||||
// return ut.Add("mobile", "手机号错误!", true)
|
||||
// }, func(ut ut.Translator, fe validator.FieldError) string {
|
||||
// t, _ := ut.T("mobile", fe.Field())
|
||||
// return t
|
||||
// })
|
||||
//
|
||||
// if err != nil {
|
||||
// fmt.Printf("[-]自定义gin验证器失败: %s \n", err)
|
||||
// os.Exit(0)
|
||||
// }
|
||||
// }
|
||||
//}
|
||||
|
||||
// zi
|
||||
//validate.SetTagName("ss")
|
||||
//func BindJson(c *gin.Context, f interface{}) {
|
||||
// dealWithError(c.ShouldBindJSON(f), "JSON")
|
||||
//}
|
||||
//func BindJsonWith(c *gin.Context, f interface{}) {
|
||||
// dealWithError(c.ShouldBindBodyWith(f, binding.JSON), "JSON")
|
||||
//}
|
||||
//func BindParam(c *gin.Context, f interface{}) {
|
||||
// dealWithError(c.ShouldBindQuery(f), "FORM")
|
||||
//}
|
||||
//
|
||||
//func dealWithError(err error, t string) {
|
||||
// if err != nil {
|
||||
// var validationErrors validator.ValidationErrors
|
||||
// var unmarshalTypeError *json.UnmarshalTypeError
|
||||
// var numError *strconv.NumError
|
||||
// switch {
|
||||
// case errors.As(err, &validationErrors):
|
||||
// exception.PanicMsg(removeTopStruct(err.(validator.ValidationErrors).Translate(trans)))
|
||||
// case errors.As(err, &unmarshalTypeError):
|
||||
// exception.PanicCodeMsg(code.PARAMETER_ERROR, err.(*json.UnmarshalTypeError).Field+": 类型错误")
|
||||
// case errors.As(err, &numError):
|
||||
// exception.PanicCodeMsg(code.PARAMETER_ERROR, err.(*strconv.NumError).Num+": 类型错误")
|
||||
// default:
|
||||
// exception.PanicCodeMsg(code.PARAMETER_ERROR, fmt.Sprintf("请将参数放于%s中传递: ", t)+err.Error())
|
||||
// }
|
||||
// }
|
||||
//}
|
||||
//
|
||||
//func removeTopStruct(fields map[string]string) (re []string) {
|
||||
// for _, err := range fields {
|
||||
// re = append(re, err)
|
||||
// }
|
||||
// return
|
||||
//}
|
||||
|
||||
validate.RegisterTagNameFunc(func(fld reflect.StructField) string {
|
||||
name := strings.SplitN(fld.Tag.Get("json"), ",", 2)[0]
|
||||
if name == "-" || name == "_" {
|
||||
return ""
|
||||
}
|
||||
return name
|
||||
})
|
||||
|
||||
// 第一个参数是备用(fallback)的语言环境
|
||||
uni := ut.New(en.New(), zh.New())
|
||||
trans, _ = uni.FindTranslator(locale[0])
|
||||
// 注册翻译器
|
||||
err := zhTranslations.RegisterDefaultTranslations(validate, trans)
|
||||
|
||||
// 注册自定义验证
|
||||
validate.RegisterValidation("mobile", func(fl validator.FieldLevel) bool {
|
||||
regRuler := "^1[3456789]{1}\\d{9}$"
|
||||
reg := regexp.MustCompile(regRuler)
|
||||
return reg.MatchString(fl.Field().String())
|
||||
})
|
||||
|
||||
// 注册自定义验证的翻译
|
||||
validate.RegisterTranslation("mobile", trans, func(ut ut.Translator) error {
|
||||
return ut.Add("mobile", "手机号错误!", true)
|
||||
}, func(ut ut.Translator, fe validator.FieldError) string {
|
||||
t, _ := ut.T("mobile", fe.Field())
|
||||
return t
|
||||
})
|
||||
|
||||
if err != nil {
|
||||
fmt.Printf("[-]自定义gin验证器失败: %s \n", err)
|
||||
os.Exit(0)
|
||||
}
|
||||
}
|
||||
func BindJson(c *gin.Context, f any) {
|
||||
err := c.ShouldBindJSON(f)
|
||||
//if gin.IsDebugging() {
|
||||
// c.Set("_req", f)
|
||||
//doc.SetReq(c, f)
|
||||
//}
|
||||
DealValidError(err, "JSON")
|
||||
}
|
||||
func BindJsonWith(c *gin.Context, f any) {
|
||||
DealValidError(c.ShouldBindBodyWith(f, binding.JSON), "JSON")
|
||||
}
|
||||
func BindParam(c *gin.Context, f any) {
|
||||
err := c.ShouldBindQuery(f)
|
||||
//doc.SetReq(c, f)
|
||||
DealValidError(err, "FORM")
|
||||
}
|
||||
|
||||
func BindJson(c *gin.Context, f interface{}) {
|
||||
dealWithError(c.ShouldBindJSON(f), "JSON")
|
||||
}
|
||||
func BindJsonWith(c *gin.Context, f interface{}) {
|
||||
dealWithError(c.ShouldBindBodyWith(f, binding.JSON), "JSON")
|
||||
}
|
||||
func BindParam(c *gin.Context, f interface{}) {
|
||||
dealWithError(c.ShouldBindQuery(f), "FORM")
|
||||
}
|
||||
|
||||
func dealWithError(err error, t string) {
|
||||
func DealValidError(err error, t string) {
|
||||
if err != nil {
|
||||
var validationErrors validator.ValidationErrors
|
||||
var unmarshalTypeError *json.UnmarshalTypeError
|
||||
var numError *strconv.NumError
|
||||
switch {
|
||||
case errors.As(err, &validationErrors):
|
||||
exception.PanicMsg(removeTopStruct(err.(validator.ValidationErrors).Translate(trans)))
|
||||
case errors.As(err, &unmarshalTypeError):
|
||||
exception.PanicCodeMsg(exception.PARAMETER_ERROR, err.(*json.UnmarshalTypeError).Field+": 类型错误")
|
||||
case errors.As(err, &numError):
|
||||
exception.PanicCodeMsg(exception.PARAMETER_ERROR, err.(*strconv.NumError).Num+": 类型错误")
|
||||
switch err.(type) {
|
||||
case validator.ValidationErrors:
|
||||
exception.PM(RemoveTopStruct(err.(validator.ValidationErrors).Translate(req_validator.Trans)))
|
||||
case *json.UnmarshalTypeError:
|
||||
exception.PMC(err.(*json.UnmarshalTypeError).Field+": 类型错误", code.PARAMETER_ERROR)
|
||||
case *strconv.NumError:
|
||||
exception.PMC(err.(*strconv.NumError).Num+": 类型错误", code.PARAMETER_ERROR)
|
||||
default:
|
||||
exception.PanicCodeMsg(exception.PARAMETER_ERROR, fmt.Sprintf("请将参数放于%s中传递: ", t)+err.Error())
|
||||
exception.PMC(fmt.Sprintf("请将参数放于%s中传递: ", t)+err.Error(), code.PARAMETER_ERROR)
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
func removeTopStruct(fields map[string]string) (re []string) {
|
||||
func RemoveTopStruct(fields map[string]string) (re []string) {
|
||||
for _, err := range fields {
|
||||
re = append(re, err)
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user