103 lines
3.0 KiB
Go
103 lines
3.0 KiB
Go
package utils
|
|
|
|
import (
|
|
"context"
|
|
|
|
_ "github.com/gogf/gf/contrib/drivers/mysql/v2"
|
|
"github.com/gogf/gf/v2/crypto/gmd5"
|
|
"github.com/gogf/gf/v2/database/gdb"
|
|
"github.com/gogf/gf/v2/frame/g"
|
|
"github.com/gogf/gf/v2/net/gclient"
|
|
"github.com/gogf/gf/v2/text/gstr"
|
|
"github.com/gogf/gf/v2/util/gconv"
|
|
)
|
|
|
|
// GetCapitalPass MD5化并转换为大写
|
|
func GetCapitalPass(val string) string {
|
|
md5, err := gmd5.Encrypt(val)
|
|
if err != nil {
|
|
panic(err.Error())
|
|
}
|
|
return gstr.CaseCamel(md5)
|
|
}
|
|
|
|
// Transaction 简单封装事务操作
|
|
func Transaction(function func() error) {
|
|
err := g.DB().Transaction(context.TODO(), func(ctx context.Context, tx gdb.TX) error {
|
|
return function()
|
|
})
|
|
if err != nil {
|
|
panic(err.Error())
|
|
}
|
|
}
|
|
|
|
type SClient[R any] struct {
|
|
client *gclient.Client
|
|
request any
|
|
header map[string]string
|
|
url string
|
|
}
|
|
|
|
func NewClient[R any](request any, url string, header map[string]string) *SClient[R] {
|
|
s := &SClient[R]{}
|
|
if header != nil {
|
|
s.client = g.Client().ContentJson().SetHeaderMap(header)
|
|
} else {
|
|
s.client = g.Client().ContentJson()
|
|
}
|
|
s.header = header
|
|
s.url = url
|
|
s.request = request
|
|
return s
|
|
}
|
|
func (w *SClient[R]) Post(ctx context.Context) (res *R, err error) {
|
|
g.Log().Infof(ctx, "请求Url:%s,请求头:%v,请求方法:%s,请求内容:%s", w.url, w.header, "post", w.request)
|
|
resp := w.client.PostVar(ctx, w.url, w.request)
|
|
err = gconv.Struct(resp, &res)
|
|
if err != nil {
|
|
g.Log().Errorf(ctx, "解析响应体异常:%s", err)
|
|
return nil, err
|
|
}
|
|
return
|
|
}
|
|
func (w *SClient[R]) Get(ctx context.Context) (res *R, err error) {
|
|
g.Log().Infof(ctx, "请求Url:%s,请求头:%v,请求方法:%s,请求内容:%s", w.url, w.header, "get", w.request)
|
|
resp := w.client.GetVar(ctx, w.url, w.request)
|
|
err = gconv.Struct(resp, &res)
|
|
if err != nil {
|
|
g.Log().Errorf(ctx, "解析响应体异常:%s", err)
|
|
return nil, err
|
|
}
|
|
return
|
|
}
|
|
func (w *SClient[R]) Put(ctx context.Context) (res *R, err error) {
|
|
g.Log().Infof(ctx, "请求Url:%s,请求头:%v,请求方法:%s,请求内容:%s", w.url, w.header, "put", w.request)
|
|
resp := w.client.PutVar(ctx, w.url, w.request)
|
|
err = gconv.Struct(resp, &res)
|
|
if err != nil {
|
|
g.Log().Errorf(ctx, "解析响应体异常:%s", err)
|
|
return nil, err
|
|
}
|
|
return
|
|
}
|
|
func (w *SClient[R]) Delete(ctx context.Context) (res *R, err error) {
|
|
g.Log().Infof(ctx, "请求Url:%s,请求头:%v,请求方法:%s,请求内容:%s", w.url, w.header, "delete", w.request)
|
|
resp := w.client.DeleteVar(ctx, w.url, w.request)
|
|
err = gconv.Struct(resp, &res)
|
|
if err != nil {
|
|
g.Log().Errorf(ctx, "解析响应体异常:%s", err)
|
|
return nil, err
|
|
}
|
|
return
|
|
}
|
|
func (w *SClient[R]) Patch(ctx context.Context) (res *R, err error) {
|
|
g.Log().Infof(ctx, "请求Url:%s,请求头:%v,请求方法:%s,请求内容:%s", w.url, w.header, "patch", w.request)
|
|
resp := w.client.PatchVar(ctx, w.url, w.request)
|
|
err = gconv.Struct(resp, &res)
|
|
if err != nil {
|
|
g.Log().Errorf(ctx, "解析响应体异常:%s", err)
|
|
return nil, err
|
|
}
|
|
return
|
|
}
|