2025-11-25 11:51:16 +08:00
|
|
|
package http
|
|
|
|
|
|
|
|
|
|
import (
|
|
|
|
|
"context"
|
|
|
|
|
"errors"
|
2025-11-25 13:52:20 +08:00
|
|
|
"fmt"
|
2025-11-26 10:38:15 +08:00
|
|
|
_ "gitee.com/red-future---jilin-g/common/consul"
|
2025-11-25 13:52:20 +08:00
|
|
|
"gitee.com/red-future---jilin-g/common/jaeger"
|
2025-11-27 09:46:47 +08:00
|
|
|
"gitee.com/red-future---jilin-g/common/middleware"
|
2025-11-25 11:51:16 +08:00
|
|
|
"gitee.com/red-future---jilin-g/common/utils"
|
|
|
|
|
"github.com/gogf/gf/v2/frame/g"
|
|
|
|
|
"github.com/gogf/gf/v2/net/ghttp"
|
|
|
|
|
"github.com/gogf/gf/v2/net/gsvc"
|
|
|
|
|
"github.com/gogf/gf/v2/os/glog"
|
|
|
|
|
"github.com/gogf/gf/v2/util/gconv"
|
|
|
|
|
"net/http"
|
2025-11-25 13:52:20 +08:00
|
|
|
"reflect"
|
|
|
|
|
"regexp"
|
|
|
|
|
"strings"
|
2025-11-25 11:51:16 +08:00
|
|
|
)
|
|
|
|
|
|
|
|
|
|
type ResponseEmpty struct {
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
const PageSize = 20
|
|
|
|
|
|
|
|
|
|
type Page struct {
|
|
|
|
|
PageNum int `p:"pageNum"` //当前页码
|
|
|
|
|
PageSize int `p:"pageSize"` //每页数
|
|
|
|
|
Total int //总页数
|
|
|
|
|
}
|
|
|
|
|
|
2025-11-26 10:38:15 +08:00
|
|
|
var Httpserver = g.Server()
|
2025-11-26 11:56:05 +08:00
|
|
|
var Httpclient = g.Client()
|
2025-11-25 13:52:20 +08:00
|
|
|
|
|
|
|
|
func init() {
|
|
|
|
|
//s.Use(common.Cors) //中间件验证
|
|
|
|
|
//s.EnablePProf() //启用性能分析
|
2025-11-26 10:38:15 +08:00
|
|
|
Httpserver.SetOpenApiPath("/api.json")
|
2025-11-27 09:46:47 +08:00
|
|
|
Httpserver.SetSwaggerPath("/docs") //api文档访问路径
|
|
|
|
|
Httpserver.SetDumpRouterMap(true) //关闭打印路由注册信息
|
|
|
|
|
Httpserver.SetSwaggerUITemplate(`
|
|
|
|
|
<!DOCTYPE html>
|
|
|
|
|
<html lang="en">
|
|
|
|
|
<head>
|
|
|
|
|
<meta charset="utf-8" />
|
|
|
|
|
<meta name="viewport" content="width=device-width, initial-scale=1" />
|
|
|
|
|
<meta name="description" content="SwaggerUI"/>
|
|
|
|
|
<title>SwaggerUI</title>
|
|
|
|
|
<link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/swagger-ui/5.10.5/swagger-ui.min.css" />
|
|
|
|
|
</head>
|
|
|
|
|
<body>
|
|
|
|
|
<div id="swagger-ui"></div>
|
|
|
|
|
<script src="https://cdnjs.cloudflare.com/ajax/libs/swagger-ui/5.10.5/swagger-ui-bundle.js" crossorigin></script>
|
|
|
|
|
<script>
|
|
|
|
|
window.onload = () => {
|
|
|
|
|
window.ui = SwaggerUIBundle({
|
|
|
|
|
url: '{SwaggerUIDocUrl}',
|
|
|
|
|
dom_id: '#swagger-ui',
|
|
|
|
|
});
|
|
|
|
|
};
|
|
|
|
|
</script>
|
|
|
|
|
</body>
|
|
|
|
|
</html>
|
|
|
|
|
`)
|
2025-11-27 14:42:51 +08:00
|
|
|
Httpserver.BindMiddlewareDefault(ghttp.MiddlewareHandlerResponse)
|
2025-11-26 10:38:15 +08:00
|
|
|
go Httpserver.Run()
|
2025-11-26 11:56:05 +08:00
|
|
|
Httpclient.SetDiscovery(gsvc.GetRegistry())
|
2025-11-25 13:52:20 +08:00
|
|
|
}
|
|
|
|
|
func RouteRegister(controllers []interface{}) {
|
|
|
|
|
re := regexp.MustCompile("[A-Z]")
|
|
|
|
|
for _, t := range controllers {
|
|
|
|
|
sName := reflect.ValueOf(t).Elem().Type().Name()
|
|
|
|
|
convertedStr := re.ReplaceAllStringFunc(sName, func(s string) string {
|
|
|
|
|
return fmt.Sprintf("/%s", strings.ToLower(s))
|
|
|
|
|
})
|
2025-11-26 10:38:15 +08:00
|
|
|
Httpserver.Group(convertedStr, func(group *ghttp.RouterGroup) {
|
2025-11-27 14:42:51 +08:00
|
|
|
group.Middleware(middleware.Limiter, jaeger.NewTracer)
|
2025-11-25 13:52:20 +08:00
|
|
|
group.Bind(t)
|
|
|
|
|
})
|
|
|
|
|
}
|
|
|
|
|
}
|
2025-11-25 11:51:16 +08:00
|
|
|
func doRequest(ctx context.Context, method string, url string, target any, data ...any) (err error) {
|
|
|
|
|
err = utils.ValidStructPtr(target)
|
|
|
|
|
if err != nil {
|
|
|
|
|
return
|
|
|
|
|
}
|
2025-11-27 09:46:47 +08:00
|
|
|
Httpclient.SetHeader("Authorization", g.RequestFromCtx(ctx).GetHeader("Authorization"))
|
2025-11-26 11:56:05 +08:00
|
|
|
response, err := Httpclient.DoRequest(ctx, method, url, data)
|
2025-11-25 11:51:16 +08:00
|
|
|
if err != nil {
|
|
|
|
|
return
|
|
|
|
|
}
|
|
|
|
|
defer func() {
|
|
|
|
|
if err = response.Close(); err != nil {
|
|
|
|
|
glog.Errorf(ctx, `%+v`, err)
|
|
|
|
|
}
|
|
|
|
|
}()
|
|
|
|
|
result := response.ReadAll()
|
|
|
|
|
resultStrut := &ghttp.DefaultHandlerResponse{}
|
|
|
|
|
if gconv.Struct(result, resultStrut); resultStrut.Code != 200 {
|
|
|
|
|
err = errors.New(resultStrut.Message)
|
|
|
|
|
} else {
|
|
|
|
|
gconv.Struct(resultStrut.Data, target)
|
|
|
|
|
}
|
|
|
|
|
return
|
|
|
|
|
}
|
|
|
|
|
func Get(ctx context.Context, url string, target any, data ...any) (err error) {
|
|
|
|
|
err = doRequest(ctx, http.MethodGet, url, target, data)
|
|
|
|
|
return
|
|
|
|
|
}
|
|
|
|
|
func Post(ctx context.Context, url string, target any, data ...any) (err error) {
|
|
|
|
|
err = doRequest(ctx, http.MethodPost, url, target, data)
|
|
|
|
|
return
|
|
|
|
|
}
|