Explorar o código

refactor(manage): 重构客户端HTTP请求实现

- 替换 resty 客户端为 http_client 工具包
- 添加全局 HTTP 客户端初始化和销毁机制
- 统一 API 请求路径处理逻辑
- 更新版本获取接口实现方式
- 修改服务类型管理方式,改为全局设置
- 调整错误处理机制,使用标准错误包装
- 更新依赖包版本并添加新的工具库依赖
haolongfei hai 2 semanas
pai
achega
01c9611dd8
Modificáronse 6 ficheiros con 350 adicións e 213 borrados
  1. 49 57
      client.go
  2. 47 3
      go.mod
  3. 114 1
      go.sum
  4. 113 68
      manage.go
  5. 0 62
      model.go
  6. 27 22
      operate_log.go

+ 49 - 57
client.go

@@ -1,81 +1,73 @@
 package managesdk
 
 import (
-	"fmt"
+	"errors"
+	"git.sxidc.com/go-tools/api_binding/http_binding/response"
+	"git.sxidc.com/go-tools/utils/http_client"
 	"time"
+)
+
+var timeoutDuration = TimeoutSec * time.Second
+var baseUrl string
+var httpClient *http_client.Client
 
-	"github.com/go-resty/resty/v2"
+const (
+	TimeoutSec    = 30
+	servicePrefix = "/api/v1"
 )
 
-type Client struct {
-	config *Config
-	http   *resty.Client
-	manage *ManageService
-	opLog  *OperateLogService
+func Destroy() {
+	if httpClient == nil {
+		return
+	}
+	http_client.Destroy(httpClient)
+	httpClient = nil
 }
 
-func NewClient(config Config) *Client {
-	timeout := 10
-	if config.Timeout > 0 {
-		timeout = config.Timeout
+func Init(configBaseUrl string, serviceType ServiceType) error {
+	var defaultBaseURL string
+	switch serviceType {
+	case ServiceTypePerson:
+		defaultBaseURL = DefaultPersonBaseURL
+	case ServiceTypeResource:
+		defaultBaseURL = DefaultResourceBaseURL
+	case ServiceTypeActivity:
+		defaultBaseURL = DefaultActivityBaseURL
+	case ServiceTypePlan:
+		defaultBaseURL = DefaultPlanBaseURL
+	default:
+		defaultBaseURL = DefaultPersonBaseURL
 	}
 
-	baseURL := config.BaseURL
-	if baseURL == "" {
-		switch config.Type {
-		case ServiceTypePerson:
-			baseURL = DefaultPersonBaseURL
-		case ServiceTypeResource:
-			baseURL = DefaultResourceBaseURL
-		case ServiceTypeActivity:
-			baseURL = DefaultActivityBaseURL
-		case ServiceTypePlan:
-			baseURL = DefaultPlanBaseURL
-		default:
-			baseURL = DefaultPersonBaseURL
-		}
+	if configBaseUrl != "" {
+		baseUrl = configBaseUrl + servicePrefix
+	} else {
+		baseUrl = defaultBaseURL + servicePrefix
 	}
 
-	httpClient := resty.New().
-		SetBaseURL(baseURL).
-		SetTimeout(time.Duration(timeout)*time.Second).
-		SetHeader("Content-Type", "application/json")
-
-	c := &Client{
-		config: &config,
-		http:   httpClient,
+	if httpClient == nil {
+		httpClient = http_client.New()
 	}
 
-	c.manage = &ManageService{client: c}
-	c.opLog = &OperateLogService{client: c}
-
-	return c
-}
-
-func (c *Client) Type() ServiceType {
-	return c.config.Type
+	return nil
 }
 
-func (c *Client) Manage() *ManageService {
-	return c.manage
-}
-
-func (c *Client) OperateLog() *OperateLogService {
-	return c.opLog
-}
+func getVersion() (map[string]any, error) {
+	getResponse, err := httpClient.NewRequest(http_client.WithNewRequestTimeout(timeoutDuration)).
+		Get(baseUrl + "/version")
+	if err != nil {
+		return nil, err
+	}
 
-func (c *Client) Version() (map[string]any, error) {
-	var resp VersionResponse
-	_, err := c.http.R().SetResult(&resp).Get("/version")
+	resp := new(response.InfoResponse[map[string]any])
+	err = getResponse.Json(resp)
 	if err != nil {
-		return nil, fmt.Errorf("请求版本接口失败: %w", err)
+		return nil, err
 	}
+
 	if !resp.Success {
-		return nil, fmt.Errorf("获取版本失败: %s", resp.Msg)
+		return nil, errors.New(resp.Msg)
 	}
-	return resp.Data, nil
-}
 
-func (c *Client) apiV1Path(path string) string {
-	return fmt.Sprintf("/v1%s", path)
+	return resp.Info, nil
 }

+ 47 - 3
go.mod

@@ -1,7 +1,51 @@
 module managesdk
 
-go 1.23.8
+go 1.22.3
 
-require github.com/go-resty/resty/v2 v2.11.0
+toolchain go1.23.7
 
-require golang.org/x/net v0.17.0 // indirect
+require (
+	git.sxidc.com/go-tools/api_binding v1.4.2
+	git.sxidc.com/go-tools/utils v1.5.31
+)
+
+require (
+	git.sxidc.com/service-supports/fserr v0.3.2 // indirect
+	git.sxidc.com/service-supports/fslog v0.5.9 // indirect
+	git.sxidc.com/service-supports/websocket v1.3.1 // indirect
+	github.com/bytedance/sonic v1.11.6 // indirect
+	github.com/bytedance/sonic/loader v0.1.1 // indirect
+	github.com/cloudwego/base64x v0.1.4 // indirect
+	github.com/cloudwego/iasm v0.2.0 // indirect
+	github.com/gabriel-vasile/mimetype v1.4.3 // indirect
+	github.com/gin-contrib/sse v0.1.0 // indirect
+	github.com/gin-gonic/gin v1.10.0 // indirect
+	github.com/go-playground/locales v0.14.1 // indirect
+	github.com/go-playground/universal-translator v0.18.1 // indirect
+	github.com/go-playground/validator/v10 v10.20.0 // indirect
+	github.com/go-resty/resty/v2 v2.11.0 // indirect
+	github.com/goccy/go-json v0.10.2 // indirect
+	github.com/gorilla/websocket v1.5.0 // indirect
+	github.com/json-iterator/go v1.1.12 // indirect
+	github.com/klauspost/cpuid/v2 v2.2.7 // indirect
+	github.com/leodido/go-urn v1.4.0 // indirect
+	github.com/mattn/go-isatty v0.0.20 // indirect
+	github.com/modern-go/concurrent v0.0.0-20180306012644-bacd9c7ef1dd // indirect
+	github.com/modern-go/reflect2 v1.0.2 // indirect
+	github.com/olahol/melody v1.2.1 // indirect
+	github.com/pelletier/go-toml/v2 v2.2.2 // indirect
+	github.com/pkg/errors v0.9.1 // indirect
+	github.com/satori/go.uuid v1.2.0 // indirect
+	github.com/twitchyliquid64/golang-asm v0.15.1 // indirect
+	github.com/ugorji/go/codec v1.2.12 // indirect
+	go.uber.org/multierr v1.11.0 // indirect
+	go.uber.org/zap v1.27.0 // indirect
+	golang.org/x/arch v0.8.0 // indirect
+	golang.org/x/crypto v0.23.0 // indirect
+	golang.org/x/net v0.25.0 // indirect
+	golang.org/x/sys v0.20.0 // indirect
+	golang.org/x/text v0.15.0 // indirect
+	google.golang.org/protobuf v1.34.1 // indirect
+	gopkg.in/natefinch/lumberjack.v2 v2.2.1 // indirect
+	gopkg.in/yaml.v3 v3.0.1 // indirect
+)

+ 114 - 1
go.sum

@@ -1,9 +1,103 @@
+git.sxidc.com/go-tools/api_binding v1.4.2 h1:Sj78gftdH/uBjWAsdRPFb1U4qykv3uUYEGdv8o7M2F8=
+git.sxidc.com/go-tools/api_binding v1.4.2/go.mod h1:SmUnRrMtODonLzWmWCGQN9uAB2TjH8g5yEKFnp4rEgU=
+git.sxidc.com/go-tools/utils v1.5.31 h1:7HIJlYS5OV4mZlRWEB6nZ67R0U43KXqEv00e+qPRzd8=
+git.sxidc.com/go-tools/utils v1.5.31/go.mod h1:uTDb6QK5JZzK5+Fzsfeng7TwmnRDZiTY6JLYxIX94Qw=
+git.sxidc.com/service-supports/fserr v0.3.2 h1:5/FCr8o2jd1kNsp5tH/ADjB9fr091JZXMMZ15ZvNZzs=
+git.sxidc.com/service-supports/fserr v0.3.2/go.mod h1:W54RoA71mfex+zARuH/iMnQPMnBXQ23qXXOkwUh2sVQ=
+git.sxidc.com/service-supports/fslog v0.5.9 h1:q2XIK2o/fk/qmByy4x5kKLC+k7kolT5LrXHcWRSffXQ=
+git.sxidc.com/service-supports/fslog v0.5.9/go.mod h1:/m03ATmmOle75qtEgvEw8a1+Dcg6iHp08M1bGFXJTBU=
+git.sxidc.com/service-supports/websocket v1.3.1 h1:1mRfUwvpg0QA2JVKVMK8YJ/B33HFpDhY9srqroIuNGc=
+git.sxidc.com/service-supports/websocket v1.3.1/go.mod h1:YqEZXkN8ZFzUp01tDlekgIJJ0Yz+67d6eTXyA0ZIkgM=
+github.com/bytedance/sonic v1.11.6 h1:oUp34TzMlL+OY1OUWxHqsdkgC/Zfc85zGqw9siXjrc0=
+github.com/bytedance/sonic v1.11.6/go.mod h1:LysEHSvpvDySVdC2f87zGWf6CIKJcAvqab1ZaiQtds4=
+github.com/bytedance/sonic/loader v0.1.1 h1:c+e5Pt1k/cy5wMveRDyk2X4B9hF4g7an8N3zCYjJFNM=
+github.com/bytedance/sonic/loader v0.1.1/go.mod h1:ncP89zfokxS5LZrJxl5z0UJcsk4M4yY2JpfqGeCtNLU=
+github.com/cloudwego/base64x v0.1.4 h1:jwCgWpFanWmN8xoIUHa2rtzmkd5J2plF/dnLS6Xd/0Y=
+github.com/cloudwego/base64x v0.1.4/go.mod h1:0zlkT4Wn5C6NdauXdJRhSKRlJvmclQ1hhJgA0rcu/8w=
+github.com/cloudwego/iasm v0.2.0 h1:1KNIy1I1H9hNNFEEH3DVnI4UujN+1zjpuk6gwHLTssg=
+github.com/cloudwego/iasm v0.2.0/go.mod h1:8rXZaNYT2n95jn+zTI1sDr+IgcD2GVs0nlbbQPiEFhY=
+github.com/davecgh/go-spew v1.1.0/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38=
+github.com/davecgh/go-spew v1.1.1 h1:vj9j/u1bqnvCEfJOwUhtlOARqs3+rkHYY13jYWTU97c=
+github.com/davecgh/go-spew v1.1.1/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38=
+github.com/gabriel-vasile/mimetype v1.4.3 h1:in2uUcidCuFcDKtdcBxlR0rJ1+fsokWf+uqxgUFjbI0=
+github.com/gabriel-vasile/mimetype v1.4.3/go.mod h1:d8uq/6HKRL6CGdk+aubisF/M5GcPfT7nKyLpA0lbSSk=
+github.com/gin-contrib/sse v0.1.0 h1:Y/yl/+YNO8GZSjAhjMsSuLt29uWRFHdHYUb5lYOV9qE=
+github.com/gin-contrib/sse v0.1.0/go.mod h1:RHrZQHXnP2xjPF+u1gW/2HnVO7nvIa9PG3Gm+fLHvGI=
+github.com/gin-gonic/gin v1.10.0 h1:nTuyha1TYqgedzytsKYqna+DfLos46nTv2ygFy86HFU=
+github.com/gin-gonic/gin v1.10.0/go.mod h1:4PMNQiOhvDRa013RKVbsiNwoyezlm2rm0uX/T7kzp5Y=
+github.com/go-playground/assert/v2 v2.2.0 h1:JvknZsQTYeFEAhQwI4qEt9cyV5ONwRHC+lYKSsYSR8s=
+github.com/go-playground/assert/v2 v2.2.0/go.mod h1:VDjEfimB/XKnb+ZQfWdccd7VUvScMdVu0Titje2rxJ4=
+github.com/go-playground/locales v0.14.1 h1:EWaQ/wswjilfKLTECiXz7Rh+3BjFhfDFKv/oXslEjJA=
+github.com/go-playground/locales v0.14.1/go.mod h1:hxrqLVvrK65+Rwrd5Fc6F2O76J/NuW9t0sjnWqG1slY=
+github.com/go-playground/universal-translator v0.18.1 h1:Bcnm0ZwsGyWbCzImXv+pAJnYK9S473LQFuzCbDbfSFY=
+github.com/go-playground/universal-translator v0.18.1/go.mod h1:xekY+UJKNuX9WP91TpwSH2VMlDf28Uj24BCp08ZFTUY=
+github.com/go-playground/validator/v10 v10.20.0 h1:K9ISHbSaI0lyB2eWMPJo+kOS/FBExVwjEviJTixqxL8=
+github.com/go-playground/validator/v10 v10.20.0/go.mod h1:dbuPbCMFw/DrkbEynArYaCwl3amGuJotoKCe95atGMM=
 github.com/go-resty/resty/v2 v2.11.0 h1:i7jMfNOJYMp69lq7qozJP+bjgzfAzeOhuGlyDrqxT/8=
 github.com/go-resty/resty/v2 v2.11.0/go.mod h1:iiP/OpA0CkcL3IGt1O0+/SIItFUbkkyw5BGXiVdTu+A=
+github.com/goccy/go-json v0.10.2 h1:CrxCmQqYDkv1z7lO7Wbh2HN93uovUHgrECaO5ZrCXAU=
+github.com/goccy/go-json v0.10.2/go.mod h1:6MelG93GURQebXPDq3khkgXZkazVtN9CRI+MGFi0w8I=
+github.com/google/go-cmp v0.5.5 h1:Khx7svrCpmxxtHBq5j2mp/xVjsi8hQMfNLvJFAlrGgU=
+github.com/google/go-cmp v0.5.5/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE=
+github.com/google/gofuzz v1.0.0/go.mod h1:dBl0BpW6vV/+mYPU4Po3pmUjxk6FQPldtuIdl/M65Eg=
+github.com/gorilla/websocket v1.5.0 h1:PPwGk2jz7EePpoHN/+ClbZu8SPxiqlu12wZP/3sWmnc=
+github.com/gorilla/websocket v1.5.0/go.mod h1:YR8l580nyteQvAITg2hZ9XVh4b55+EU/adAjf1fMHhE=
+github.com/json-iterator/go v1.1.12 h1:PV8peI4a0ysnczrg+LtxykD8LfKY9ML6u2jnxaEnrnM=
+github.com/json-iterator/go v1.1.12/go.mod h1:e30LSqwooZae/UwlEbR2852Gd8hjQvJoHmT4TnhNGBo=
+github.com/klauspost/cpuid/v2 v2.0.9/go.mod h1:FInQzS24/EEf25PyTYn52gqo7WaD8xa0213Md/qVLRg=
+github.com/klauspost/cpuid/v2 v2.2.7 h1:ZWSB3igEs+d0qvnxR/ZBzXVmxkgt8DdzP6m9pfuVLDM=
+github.com/klauspost/cpuid/v2 v2.2.7/go.mod h1:Lcz8mBdAVJIBVzewtcLocK12l3Y+JytZYpaMropDUws=
+github.com/knz/go-libedit v1.10.1/go.mod h1:MZTVkCWyz0oBc7JOWP3wNAzd002ZbM/5hgShxwh4x8M=
+github.com/leodido/go-urn v1.4.0 h1:WT9HwE9SGECu3lg4d/dIA+jxlljEa1/ffXKmRjqdmIQ=
+github.com/leodido/go-urn v1.4.0/go.mod h1:bvxc+MVxLKB4z00jd1z+Dvzr47oO32F/QSNjSBOlFxI=
+github.com/mattn/go-isatty v0.0.20 h1:xfD0iDuEKnDkl03q4limB+vH+GxLEtL/jb4xVJSWWEY=
+github.com/mattn/go-isatty v0.0.20/go.mod h1:W+V8PltTTMOvKvAeJH7IuucS94S2C6jfK/D7dTCTo3Y=
+github.com/modern-go/concurrent v0.0.0-20180228061459-e0a39a4cb421/go.mod h1:6dJC0mAP4ikYIbvyc7fijjWJddQyLn8Ig3JB5CqoB9Q=
+github.com/modern-go/concurrent v0.0.0-20180306012644-bacd9c7ef1dd h1:TRLaZ9cD/w8PVh93nsPXa1VrQ6jlwL5oN8l14QlcNfg=
+github.com/modern-go/concurrent v0.0.0-20180306012644-bacd9c7ef1dd/go.mod h1:6dJC0mAP4ikYIbvyc7fijjWJddQyLn8Ig3JB5CqoB9Q=
+github.com/modern-go/reflect2 v1.0.2 h1:xBagoLtFs94CBntxluKeaWgTMpvLxC4ur3nMaC9Gz0M=
+github.com/modern-go/reflect2 v1.0.2/go.mod h1:yWuevngMOJpCy52FWWMvUC8ws7m/LJsjYzDa0/r8luk=
+github.com/olahol/melody v1.2.1 h1:xdwRkzHxf+B0w4TKbGpUSSkV516ZucQZJIWLztOWICQ=
+github.com/olahol/melody v1.2.1/go.mod h1:GgkTl6Y7yWj/HtfD48Q5vLKPVoZOH+Qqgfa7CvJgJM4=
+github.com/pelletier/go-toml/v2 v2.2.2 h1:aYUidT7k73Pcl9nb2gScu7NSrKCSHIDE89b3+6Wq+LM=
+github.com/pelletier/go-toml/v2 v2.2.2/go.mod h1:1t835xjRzz80PqgE6HHgN2JOsmgYu/h4qDAS4n929Rs=
+github.com/pkg/errors v0.9.1 h1:FEBLx1zS214owpjy7qsBeixbURkuhQAwrK5UwLGTwt4=
+github.com/pkg/errors v0.9.1/go.mod h1:bwawxfHBFNV+L2hUp1rHADufV3IMtnDRdf1r5NINEl0=
+github.com/pmezard/go-difflib v1.0.0 h1:4DBwDE0NGyQoBHbLQYPwSUPoCMWR5BEzIk/f1lZbAQM=
+github.com/pmezard/go-difflib v1.0.0/go.mod h1:iKH77koFhYxTK1pcRnkKkqfTogsbg7gZNVY4sRDYZ/4=
+github.com/satori/go.uuid v1.2.0 h1:0uYX9dsZ2yD7q2RtLRtPSdGDWzjeM3TbMJP9utgA0ww=
+github.com/satori/go.uuid v1.2.0/go.mod h1:dA0hQrYB0VpLJoorglMZABFdXlWrHn1NEOzdhQKdks0=
+github.com/stretchr/objx v0.1.0/go.mod h1:HFkY916IF+rwdDfMAkV7OtwuqBVzrE8GR6GFx+wExME=
+github.com/stretchr/objx v0.4.0/go.mod h1:YvHI0jy2hoMjB+UWwv71VJQ9isScKT/TqJzVSSt89Yw=
+github.com/stretchr/objx v0.5.0/go.mod h1:Yh+to48EsGEfYuaHDzXPcE3xhTkx73EhmCGUpEOglKo=
+github.com/stretchr/objx v0.5.2/go.mod h1:FRsXN1f5AsAjCGJKqEizvkpNtU+EGNCLh3NxZ/8L+MA=
+github.com/stretchr/testify v1.3.0/go.mod h1:M5WIy9Dh21IEIfnGCwXGc5bZfKNJtfHm1UVUgZn+9EI=
+github.com/stretchr/testify v1.7.0/go.mod h1:6Fq8oRcR53rry900zMqJjRRixrwX3KX962/h/Wwjteg=
+github.com/stretchr/testify v1.7.1/go.mod h1:6Fq8oRcR53rry900zMqJjRRixrwX3KX962/h/Wwjteg=
+github.com/stretchr/testify v1.8.0/go.mod h1:yNjHg4UonilssWZ8iaSj1OCr/vHnekPRkoO+kdMU+MU=
+github.com/stretchr/testify v1.8.1/go.mod h1:w2LPCIKwWwSfY2zedu0+kehJoqGctiVI29o6fzry7u4=
+github.com/stretchr/testify v1.8.4/go.mod h1:sz/lmYIOXD/1dqDmKjjqLyZ2RngseejIcXlSw2iwfAo=
+github.com/stretchr/testify v1.9.0 h1:HtqpIVDClZ4nwg75+f6Lvsy/wHu+3BoSGCbBAcpTsTg=
+github.com/stretchr/testify v1.9.0/go.mod h1:r2ic/lqez/lEtzL7wO/rwa5dbSLXVDPFyf8C91i36aY=
+github.com/twitchyliquid64/golang-asm v0.15.1 h1:SU5vSMR7hnwNxj24w34ZyCi/FmDZTkS4MhqMhdFk5YI=
+github.com/twitchyliquid64/golang-asm v0.15.1/go.mod h1:a1lVb/DtPvCB8fslRZhAngC2+aY1QWCk3Cedj/Gdt08=
+github.com/ugorji/go/codec v1.2.12 h1:9LC83zGrHhuUA9l16C9AHXAqEV/2wBQ4nkvumAE65EE=
+github.com/ugorji/go/codec v1.2.12/go.mod h1:UNopzCgEMSXjBc6AOMqYvWC1ktqTAfzJZUZgYf6w6lg=
 github.com/yuin/goldmark v1.4.13/go.mod h1:6yULJ656Px+3vBD8DxQVa3kxgyrAnzto9xy5taEt/CY=
+go.uber.org/goleak v1.3.0 h1:2K3zAYmnTNqV73imy9J1T3WC+gmCePx2hEGkimedGto=
+go.uber.org/goleak v1.3.0/go.mod h1:CoHD4mav9JJNrW/WLlf7HGZPjdw8EucARQHekz1X6bE=
+go.uber.org/multierr v1.11.0 h1:blXXJkSxSSfBVBlC76pxqeO+LN3aDfLQo+309xJstO0=
+go.uber.org/multierr v1.11.0/go.mod h1:20+QtiLqy0Nd6FdQB9TLXag12DsQkrbs3htMFfDN80Y=
+go.uber.org/zap v1.27.0 h1:aJMhYGrd5QSmlpLMr2MftRKl7t8J8PTZPA732ud/XR8=
+go.uber.org/zap v1.27.0/go.mod h1:GB2qFLM7cTU87MWRP2mPIjqfIDnGu+VIO4V/SdhGo2E=
+golang.org/x/arch v0.0.0-20210923205945-b76863e36670/go.mod h1:5om86z9Hs0C8fWVUuoMHwpExlXzs5Tkyp9hOrfG7pp8=
+golang.org/x/arch v0.8.0 h1:3wRIsP3pM4yUptoR96otTUOXI367OS0+c9eeRi9doIc=
+golang.org/x/arch v0.8.0/go.mod h1:FEVrYAQjsQXMVJ1nsMoVVXPZg6p2JE2mx8psSWTDQys=
 golang.org/x/crypto v0.0.0-20190308221718-c2843e01d9a2/go.mod h1:djNgcEr1/C05ACkg1iLfiJU5Ep61QUkGW8qpdssI0+w=
 golang.org/x/crypto v0.0.0-20210921155107-089bfa567519/go.mod h1:GvvjBRRGRdwPK5ydBHafDWAxML/pGHZbMvKqRZ5+Abc=
 golang.org/x/crypto v0.14.0/go.mod h1:MVFd36DqK4CsrnJYDkBA3VC4m2GkXAM0PvzMCn4JQf4=
+golang.org/x/crypto v0.23.0 h1:dIJU/v2J8Mdglj/8rJ6UUOM3Zc9zLZxVZwwxMooUSAI=
+golang.org/x/crypto v0.23.0/go.mod h1:CKFgDieR+mRhux2Lsu27y0fO304Db0wZe70UKqHu0v8=
 golang.org/x/mod v0.6.0-dev.0.20220419223038-86c51ed26bb4/go.mod h1:jJ57K6gSWd91VN4djpZkiMVwK6gcyfeH4XE8wZrZaV4=
 golang.org/x/mod v0.8.0/go.mod h1:iBbtSCu2XBx23ZKBPSOrRkjjQPZFPuis4dIYUhu/chs=
 golang.org/x/net v0.0.0-20190620200207-3b0461eec859/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s=
@@ -11,8 +105,9 @@ golang.org/x/net v0.0.0-20210226172049-e18ecbb05110/go.mod h1:m0MpNAwzfU5UDzcl9v
 golang.org/x/net v0.0.0-20220722155237-a158d28d115b/go.mod h1:XRhObCWvk6IyKnWLug+ECip1KBveYUHfp+8e9klMJ9c=
 golang.org/x/net v0.6.0/go.mod h1:2Tu9+aMcznHK/AK1HMvgo6xiTLG5rD5rZLDS+rp2Bjs=
 golang.org/x/net v0.10.0/go.mod h1:0qNGK6F8kojg2nk9dLZ2mShWaEBan6FAoqfSigmmuDg=
-golang.org/x/net v0.17.0 h1:pVaXccu2ozPjCXewfr1S7xza/zcXTity9cCdXQYSjIM=
 golang.org/x/net v0.17.0/go.mod h1:NxSsAGuq816PNPmqtQdLE42eU2Fs7NoRIZrHJAlaCOE=
+golang.org/x/net v0.25.0 h1:d/OCCoBEUq33pjydKrGQhw7IlUPI2Oylr+8qLx49kac=
+golang.org/x/net v0.25.0/go.mod h1:JkAGAh7GEvH74S6FOH42FLoXpXbE/aqXSrIQjXgsiwM=
 golang.org/x/sync v0.0.0-20190423024810-112230192c58/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM=
 golang.org/x/sync v0.0.0-20220722155255-886fb9371eb4/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM=
 golang.org/x/sync v0.1.0/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM=
@@ -22,8 +117,11 @@ golang.org/x/sys v0.0.0-20210615035016-665e8c7367d1/go.mod h1:oPkhp1MJrh7nUepCBc
 golang.org/x/sys v0.0.0-20220520151302-bc2c85ada10a/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
 golang.org/x/sys v0.0.0-20220722155257-8c9f86f7a55f/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
 golang.org/x/sys v0.5.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
+golang.org/x/sys v0.6.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
 golang.org/x/sys v0.8.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
 golang.org/x/sys v0.13.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
+golang.org/x/sys v0.20.0 h1:Od9JTbYCk261bKm4M/mw7AklTlFYIa0bIp9BgSm1S8Y=
+golang.org/x/sys v0.20.0/go.mod h1:/VUhepiaJMQUp4+oa/7Zr1D23ma6VTLIYjOOTFZPUcA=
 golang.org/x/term v0.0.0-20201126162022-7de9c90e9dd1/go.mod h1:bj7SfCRtBDWHUb9snDiAeCFNEtKQo2Wmx5Cou7ajbmo=
 golang.org/x/term v0.0.0-20210927222741-03fcf44c2211/go.mod h1:jbD1KX2456YbFQfuXm/mYQcufACuNUgVhRMnK/tPxf8=
 golang.org/x/term v0.5.0/go.mod h1:jMB1sMXY+tzblOD4FWmEbocvup2/aLOaQEp7JmGp78k=
@@ -35,6 +133,8 @@ golang.org/x/text v0.3.7/go.mod h1:u+2+/6zg+i71rQMx5EYifcz6MCKuco9NR6JIITiCfzQ=
 golang.org/x/text v0.7.0/go.mod h1:mrYo+phRRbMaCq/xk9113O4dZlRixOauAjOtrjsXDZ8=
 golang.org/x/text v0.9.0/go.mod h1:e1OnstbJyHTd6l/uOt8jFFHp6TRDWZR/bV3emEE/zU8=
 golang.org/x/text v0.13.0/go.mod h1:TvPlkZtksWOMsz7fbANvkp4WM8x/WCo/om8BMLbz+aE=
+golang.org/x/text v0.15.0 h1:h1V/4gjBv8v9cjcR6+AR5+/cIYK5N/WAgiv4xlsEtAk=
+golang.org/x/text v0.15.0/go.mod h1:18ZOQIKpY8NJVqYksKHtTdi31H5itFRjB5/qKTNYzSU=
 golang.org/x/time v0.3.0 h1:rg5rLMjNzMS1RkNLzCG38eapWhnYLFYXDXj2gOlr8j4=
 golang.org/x/time v0.3.0/go.mod h1:tRJNPiyCQ0inRvYxbN9jk5I+vvW/OXSQhTDSoE431IQ=
 golang.org/x/tools v0.0.0-20180917221912-90fa682c2a6e/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ=
@@ -42,3 +142,16 @@ golang.org/x/tools v0.0.0-20191119224855-298f0cb1881e/go.mod h1:b+2E5dAYhXwXZwtn
 golang.org/x/tools v0.1.12/go.mod h1:hNGJHUnrk76NpqgfD5Aqm5Crs+Hm0VOH/i9J2+nxYbc=
 golang.org/x/tools v0.6.0/go.mod h1:Xwgl3UAJ/d3gWutnCtw505GrjyAbvKui8lOU390QaIU=
 golang.org/x/xerrors v0.0.0-20190717185122-a985d3407aa7/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0=
+golang.org/x/xerrors v0.0.0-20191204190536-9bdfabe68543 h1:E7g+9GITq07hpfrRu66IVDexMakfv52eLZ2CXBWiKr4=
+golang.org/x/xerrors v0.0.0-20191204190536-9bdfabe68543/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0=
+google.golang.org/protobuf v1.34.1 h1:9ddQBjfCyZPOHPUiPxpYESBLc+T8P3E+Vo4IbKZgFWg=
+google.golang.org/protobuf v1.34.1/go.mod h1:c6P6GXX6sHbq/GpV6MGZEdwhWPcYBgnhAHhKbcUYpos=
+gopkg.in/check.v1 v0.0.0-20161208181325-20d25e280405 h1:yhCVgyC4o1eVCa2tZl7eS0r+SDo693bJlVdllGtEeKM=
+gopkg.in/check.v1 v0.0.0-20161208181325-20d25e280405/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0=
+gopkg.in/natefinch/lumberjack.v2 v2.2.1 h1:bBRl1b0OH9s/DuPhuXpNl+VtCaJXFZ5/uEFST95x9zc=
+gopkg.in/natefinch/lumberjack.v2 v2.2.1/go.mod h1:YD8tP3GAjkrDg1eZH7EGmyESg/lsYskCTPBJVb9jqSc=
+gopkg.in/yaml.v3 v3.0.0-20200313102051-9f266ea9e77c/go.mod h1:K4uyk7z7BCEPqu6E+C64Yfv1cQ7kz7rIZviUmN+EgEM=
+gopkg.in/yaml.v3 v3.0.1 h1:fxVm/GzAzEWqLHuvctI91KS9hhNmmWOoWu0XTYJS7CA=
+gopkg.in/yaml.v3 v3.0.1/go.mod h1:K4uyk7z7BCEPqu6E+C64Yfv1cQ7kz7rIZviUmN+EgEM=
+nullprogram.com/x/optparse v1.0.0/go.mod h1:KdyPE+Igbe0jQUrVfMqDMeJQIJZEuyV7pjYmp6pbG50=
+rsc.io/pdf v0.1.1/go.mod h1:n8OzWcQ6Sp37PL01nO98y4iUCRdTGarVfzxY20ICaU4=

+ 113 - 68
manage.go

@@ -1,15 +1,20 @@
 package managesdk
 
 import (
-	"fmt"
+	"errors"
+
+	"git.sxidc.com/go-tools/api_binding/http_binding/response"
+	"git.sxidc.com/go-tools/utils/http_client"
 )
 
-type ManageService struct {
-	client *Client
+var currentServiceType ServiceType
+
+func SetServiceType(serviceType ServiceType) {
+	currentServiceType = serviceType
 }
 
-func (s *ManageService) getServicePath() string {
-	switch s.client.config.Type {
+func getServicePath() string {
+	switch currentServiceType {
 	case ServiceTypePerson:
 		return "/person"
 	case ServiceTypeResource:
@@ -23,119 +28,159 @@ func (s *ManageService) getServicePath() string {
 	}
 }
 
-func (s *ManageService) Save(params any) (string, error) {
-	var resp IDResponse
-	_, err := s.client.http.R().
-		SetBody(params).
-		SetResult(&resp).
-		Post(s.client.apiV1Path(s.getServicePath() + "/save"))
+func Save(params any) (string, error) {
+	postResponse, err := httpClient.NewRequest(http_client.WithNewRequestTimeout(timeoutDuration)).
+		Post(baseUrl+getServicePath()+"/save", params)
+	if err != nil {
+		return "", err
+	}
+
+	resp := new(response.IDResponse[string])
+	err = postResponse.Json(resp)
 	if err != nil {
-		return "", fmt.Errorf("保存失败: %w", err)
+		return "", err
 	}
+
 	if !resp.Success {
-		return "", fmt.Errorf("保存失败: %s", resp.Msg)
+		return "", errors.New(resp.Msg)
 	}
-	return resp.Data, nil
+
+	return resp.ID, nil
 }
 
-func (s *ManageService) Query(params any) (*InfosData[map[string]any], error) {
-	var resp InfosResponse[map[string]any]
-	_, err := s.client.http.R().
-		SetBody(params).
-		SetResult(&resp).
-		Post(s.client.apiV1Path(s.getServicePath() + "/query"))
+func Query(params any) (*response.InfosData[map[string]any], error) {
+	postResponse, err := httpClient.NewRequest(http_client.WithNewRequestTimeout(timeoutDuration)).
+		Post(baseUrl+getServicePath()+"/query", params)
+	if err != nil {
+		return nil, err
+	}
+
+	resp := new(response.InfosResponse[map[string]any])
+	err = postResponse.Json(resp)
 	if err != nil {
-		return nil, fmt.Errorf("查询列表失败: %w", err)
+		return nil, err
 	}
+
 	if !resp.Success {
-		return nil, fmt.Errorf("查询列表失败: %s", resp.Msg)
+		return nil, errors.New(resp.Msg)
 	}
-	return &resp.Data, nil
+
+	return &resp.InfosData, nil
 }
 
-func (s *ManageService) Get(params GetPersonParams) (*map[string]any, error) {
-	var resp InfoResponse[map[string]any]
-	_, err := s.client.http.R().
-		SetQueryParam("id", params.ID).
-		SetResult(&resp).
-		Get(s.client.apiV1Path(s.getServicePath() + "/get"))
+func Get(id string) (*map[string]any, error) {
+	getResponse, err := httpClient.NewRequest(http_client.WithNewRequestTimeout(timeoutDuration)).
+		Get(baseUrl+getServicePath()+"/get",
+			http_client.WithRequestQueryParams(map[string]string{
+				"id": id,
+			}))
+	if err != nil {
+		return nil, err
+	}
+
+	resp := new(response.InfoResponse[map[string]any])
+	err = getResponse.Json(resp)
 	if err != nil {
-		return nil, fmt.Errorf("查询详情失败: %w", err)
+		return nil, err
 	}
+
 	if !resp.Success {
-		return nil, fmt.Errorf("查询详情失败: %s", resp.Msg)
+		return nil, errors.New(resp.Msg)
 	}
-	return &resp.Data, nil
+
+	return &resp.Info, nil
 }
 
-func (s *ManageService) Delete(params any) error {
-	var resp MsgResponse
-	_, err := s.client.http.R().
-		SetBody(params).
-		SetResult(&resp).
-		Delete(s.client.apiV1Path(s.getServicePath() + "/delete"))
+func Delete(params any) error {
+	postResponse, err := httpClient.NewRequest(http_client.WithNewRequestTimeout(timeoutDuration)).
+		Post(baseUrl+getServicePath()+"/delete", params)
+	if err != nil {
+		return err
+	}
+
+	resp := new(response.MsgResponse)
+	err = postResponse.Json(resp)
 	if err != nil {
-		return fmt.Errorf("删除失败: %w", err)
+		return err
 	}
+
 	if !resp.Success {
-		return fmt.Errorf("删除失败: %s", resp.Msg)
+		return errors.New(resp.Msg)
 	}
+
 	return nil
 }
 
-func (s *ManageService) Options() ([]map[string]any, error) {
-	var resp InfosResponse[map[string]any]
+func Options() ([]map[string]any, error) {
 	var path string
-	switch s.client.config.Type {
+	switch currentServiceType {
 	case ServiceTypePerson:
 		path = "/person/genders"
 	case ServiceTypeResource:
 		path = "/resource/categories"
 	case ServiceTypeActivity:
-		// Activity 没有 options 接口,返回空
 		return []map[string]any{}, nil
 	case ServiceTypePlan:
-		// Plan 没有 options 接口,返回空
 		return []map[string]any{}, nil
 	default:
-		return nil, fmt.Errorf("不支持的服务类型")
+		return nil, errors.New("不支持的服务类型")
+	}
+
+	getResponse, err := httpClient.NewRequest(http_client.WithNewRequestTimeout(timeoutDuration)).
+		Get(baseUrl + path)
+	if err != nil {
+		return nil, err
 	}
-	_, err := s.client.http.R().
-		SetResult(&resp).
-		Get(s.client.apiV1Path(path))
+
+	resp := new(response.InfosResponse[map[string]any])
+	err = getResponse.Json(resp)
 	if err != nil {
-		return nil, fmt.Errorf("查询选项列表失败: %w", err)
+		return nil, err
 	}
+
 	if !resp.Success {
-		return nil, fmt.Errorf("查询选项列表失败: %s", resp.Msg)
+		return nil, errors.New(resp.Msg)
 	}
-	return resp.Data.Infos, nil
+
+	return resp.Infos, nil
 }
 
-func (s *ManageService) States() ([]map[string]any, error) {
-	var resp InfosResponse[map[string]any]
-	_, err := s.client.http.R().
-		SetResult(&resp).
-		Get(s.client.apiV1Path(s.getServicePath() + "/states"))
+func States() ([]map[string]any, error) {
+	getResponse, err := httpClient.NewRequest(http_client.WithNewRequestTimeout(timeoutDuration)).
+		Get(baseUrl + getServicePath() + "/states")
 	if err != nil {
-		return nil, fmt.Errorf("查询状态列表失败: %w", err)
+		return nil, err
 	}
+
+	resp := new(response.InfosResponse[map[string]any])
+	err = getResponse.Json(resp)
+	if err != nil {
+		return nil, err
+	}
+
 	if !resp.Success {
-		return nil, fmt.Errorf("查询状态列表失败: %s", resp.Msg)
+		return nil, errors.New(resp.Msg)
 	}
-	return resp.Data.Infos, nil
+
+	return resp.Infos, nil
 }
 
-func (s *ManageService) PredefinedFields() ([]map[string]any, error) {
-	var resp InfosResponse[map[string]any]
-	_, err := s.client.http.R().
-		SetResult(&resp).
-		Get(s.client.apiV1Path(s.getServicePath() + "/predefined-fields"))
+func PredefinedFields() ([]map[string]any, error) {
+	getResponse, err := httpClient.NewRequest(http_client.WithNewRequestTimeout(timeoutDuration)).
+		Get(baseUrl + getServicePath() + "/predefined-fields")
 	if err != nil {
-		return nil, fmt.Errorf("查询预定义字段失败: %w", err)
+		return nil, err
 	}
+
+	resp := new(response.InfosResponse[map[string]any])
+	err = getResponse.Json(resp)
+	if err != nil {
+		return nil, err
+	}
+
 	if !resp.Success {
-		return nil, fmt.Errorf("查询预定义字段失败: %s", resp.Msg)
+		return nil, errors.New(resp.Msg)
 	}
-	return resp.Data.Infos, nil
+
+	return resp.Infos, nil
 }

+ 0 - 62
model.go

@@ -16,64 +16,6 @@ const (
 	DefaultPlanBaseURL     = "http://10.0.0.210:30604/mbact/api"
 )
 
-type Config struct {
-	Type    ServiceType
-	BaseURL string
-	Timeout int
-}
-
-type Response struct {
-	Success bool   `json:"success"`
-	ErrCode int    `json:"errCode"`
-	Msg     string `json:"msg"`
-}
-
-type IDResponse struct {
-	Success bool   `json:"success"`
-	ErrCode int    `json:"errCode"`
-	Msg     string `json:"msg"`
-	Data    string `json:"data"`
-}
-
-type MsgResponse struct {
-	Success bool   `json:"success"`
-	ErrCode int    `json:"errCode"`
-	Msg     string `json:"msg"`
-}
-
-type InfosData[T any] struct {
-	Infos      []T   `json:"infos"`
-	TotalCount int64 `json:"totalCount"`
-}
-
-type InfosResponse[T any] struct {
-	Success bool         `json:"success"`
-	ErrCode int          `json:"errCode"`
-	Msg     string       `json:"msg"`
-	Data    InfosData[T] `json:"data"`
-}
-
-type InfoResponse[T any] struct {
-	Success bool   `json:"success"`
-	ErrCode int    `json:"errCode"`
-	Msg     string `json:"msg"`
-	Data    T      `json:"data"`
-}
-
-type MapResponse struct {
-	Success bool           `json:"success"`
-	ErrCode int            `json:"errCode"`
-	Msg     string         `json:"msg"`
-	Data    map[string]any `json:"data"`
-}
-
-type VersionResponse struct {
-	Success bool           `json:"success"`
-	ErrCode int            `json:"errCode"`
-	Msg     string         `json:"msg"`
-	Data    map[string]any `json:"data"`
-}
-
 type BaseQueryParams struct {
 	PageNo   int `form:"pageNo"`
 	PageSize int `form:"pageSize"`
@@ -202,8 +144,6 @@ type OperateLogInfo struct {
 	CreatedTime  string `json:"createdTime"`
 }
 
-// Activity 相关模型
-
 type ActivityInfo struct {
 	ID                   string         `json:"id"`
 	Name                 string         `json:"name"`
@@ -254,8 +194,6 @@ type GetActivityParams struct {
 	ID string `json:"id"`
 }
 
-// Plan 相关模型
-
 type PlanInfo struct {
 	ID                   string         `json:"id"`
 	PlanType             string         `json:"planType"`

+ 27 - 22
operate_log.go

@@ -1,33 +1,38 @@
 package managesdk
 
 import (
-	"fmt"
+	"errors"
+	"git.sxidc.com/go-tools/api_binding/http_binding/response"
+	"git.sxidc.com/go-tools/utils/http_client"
+	"strconv"
 )
 
-type OperateLogService struct {
-	client *Client
-}
+func QueryOperateLog(params OperateLogQueryParams) (*response.InfosData[OperateLogInfo], error) {
+	getResponse, err := httpClient.NewRequest(http_client.WithNewRequestTimeout(timeoutDuration)).
+		Get(baseUrl+"/operate-log/query",
+			http_client.WithRequestQueryParams(map[string]string{
+				"resource":     params.Resource,
+				"action":       params.Action,
+				"operatorName": params.OperatorName,
+				"startTime":    params.StartTime,
+				"endTime":      params.EndTime,
+				"tenantId":     params.TenantID,
+				"pageNo":       strconv.Itoa(params.PageNo),
+				"pageSize":     strconv.Itoa(params.PageSize),
+			}))
+	if err != nil {
+		return nil, err
+	}
 
-func (s *OperateLogService) Query(params OperateLogQueryParams) (*InfosData[OperateLogInfo], error) {
-	var resp InfosResponse[OperateLogInfo]
-	_, err := s.client.http.R().
-		SetQueryParams(map[string]string{
-			"resource":     params.Resource,
-			"action":       params.Action,
-			"operatorName": params.OperatorName,
-			"startTime":    params.StartTime,
-			"endTime":      params.EndTime,
-			"tenantId":     params.TenantID,
-			"pageNo":       fmt.Sprintf("%d", params.PageNo),
-			"pageSize":     fmt.Sprintf("%d", params.PageSize),
-		}).
-		SetResult(&resp).
-		Get(s.client.apiV1Path("/operate-log/query"))
+	resp := new(response.InfosResponse[OperateLogInfo])
+	err = getResponse.Json(resp)
 	if err != nil {
-		return nil, fmt.Errorf("查询操作日志失败: %w", err)
+		return nil, err
 	}
+
 	if !resp.Success {
-		return nil, fmt.Errorf("查询操作日志失败: %s", resp.Msg)
+		return nil, errors.New(resp.Msg)
 	}
-	return &resp.Data, nil
+
+	return &resp.InfosData, nil
 }