diff --git a/.gitignore b/.gitignore index e35126b..d3b0e50 100644 --- a/.gitignore +++ b/.gitignore @@ -21,6 +21,8 @@ manifest/output/ tmp/ resource/data/gen_sql resource/data/storage +resource/data/distCacheDb +resource/data/distTokenDb resource/log/ resource/public/big_file resource/public/upload_file diff --git a/api/v1/system/sys_user.go b/api/v1/system/sys_user.go index e99cf13..e7fc1fe 100644 --- a/api/v1/system/sys_user.go +++ b/api/v1/system/sys_user.go @@ -122,3 +122,32 @@ type UserDeleteReq struct { type UserDeleteRes struct { } + +type UserSelectorReq struct { + g.Meta `path:"/user/selector" tags:"用户管理" method:"get" summary:"获取用户选择器"` + DeptId string `p:"deptId"` //部门id + RoleId uint `p:"roleId"` + Mobile string `p:"mobile"` + Status string `p:"status"` + KeyWords string `p:"keyWords"` + commonApi.PageReq + commonApi.Author +} + +type UserSelectorRes struct { + g.Meta `mime:"application/json"` + commonApi.ListRes + UserList []*model.SysUserSimpleRes `json:"userList"` +} + +type UserByIdsReq struct { + g.Meta `path:"/user/getUserByIds" tags:"用户管理" method:"get" summary:"根据ids获取用户"` + Ids []int `p:"ids" v:"required#ids不能为空"` + commonApi.PageReq + commonApi.Author +} + +type UserByIdsRes struct { + g.Meta `mime:"application/json"` + UserList []*model.SysUserSimpleRes `json:"userList"` +} diff --git a/go.mod b/go.mod index 8905708..66b4a96 100644 --- a/go.mod +++ b/go.mod @@ -19,8 +19,8 @@ require ( github.com/shirou/gopsutil/v3 v3.23.2 github.com/sony/sonyflake v1.2.0 github.com/tencentyun/cos-go-sdk-v5 v0.7.34 - github.com/tiger1103/gfast-cache v1.0.2 - github.com/tiger1103/gfast-token v1.0.4 + github.com/tiger1103/gfast-cache v1.0.4 + github.com/tiger1103/gfast-token v1.0.6 github.com/wenlng/go-captcha v1.2.5 github.com/xuri/excelize/v2 v2.7.1 golang.org/x/tools v0.6.0 @@ -33,7 +33,10 @@ require ( github.com/cespare/xxhash/v2 v2.2.0 // indirect github.com/clbanning/mxj v1.8.4 // indirect github.com/clbanning/mxj/v2 v2.7.0 // indirect + github.com/dgraph-io/badger/v4 v4.2.0 // indirect + github.com/dgraph-io/ristretto v0.1.1 // indirect github.com/dgryski/go-rendezvous v0.0.0-20200823014737-9f7001d12a5f // indirect + github.com/dustin/go-humanize v1.0.0 // indirect github.com/emirpasic/gods v1.12.0 // indirect github.com/fatih/color v1.16.0 // indirect github.com/fsnotify/fsnotify v1.7.0 // indirect @@ -41,13 +44,19 @@ require ( github.com/go-logr/stdr v1.2.2 // indirect github.com/go-ole/go-ole v1.2.6 // indirect github.com/go-sql-driver/mysql v1.7.1 // indirect + github.com/gogo/protobuf v1.3.2 // indirect github.com/golang-jwt/jwt/v5 v5.0.0 // indirect github.com/golang/freetype v0.0.0-20170609003504-e2365dfdc4a0 // indirect + github.com/golang/glog v1.0.0 // indirect + github.com/golang/groupcache v0.0.0-20190702054246-869f871628b6 // indirect github.com/golang/mock v1.4.4 // indirect - github.com/golang/snappy v0.0.1 // indirect + github.com/golang/protobuf v1.5.2 // indirect + github.com/golang/snappy v0.0.3 // indirect + github.com/google/flatbuffers v1.12.1 // indirect github.com/google/go-querystring v1.0.0 // indirect github.com/grokify/html-strip-tags-go v0.1.0 // indirect github.com/json-iterator/go v1.1.12 // indirect + github.com/klauspost/compress v1.12.3 // indirect github.com/konsorten/go-windows-terminal-sequences v1.0.1 // indirect github.com/lib/pq v1.10.9 // indirect github.com/lufia/plan9stats v0.0.0-20211012122336-39d0f177ccd0 // indirect @@ -64,7 +73,7 @@ require ( github.com/patrickmn/go-cache v2.1.0+incompatible // indirect github.com/pkg/errors v0.9.1 // indirect github.com/power-devops/perfstat v0.0.0-20210106213030-5aafc221ea8c // indirect - github.com/redis/go-redis/v9 v9.3.1 // indirect + github.com/redis/go-redis/v9 v9.4.0 // indirect github.com/richardlehane/mscfb v1.0.4 // indirect github.com/richardlehane/msoleps v1.0.3 // indirect github.com/rivo/uniseg v0.4.4 // indirect @@ -79,6 +88,7 @@ require ( github.com/xuri/efp v0.0.0-20230802181842-ad255f2331ca // indirect github.com/xuri/nfp v0.0.0-20230802015359-2d5eeba905e9 // indirect github.com/yusufpapurcu/wmi v1.2.2 // indirect + go.opencensus.io v0.22.5 // indirect go.opentelemetry.io/otel v1.21.0 // indirect go.opentelemetry.io/otel/metric v1.21.0 // indirect go.opentelemetry.io/otel/sdk v1.21.0 // indirect @@ -91,10 +101,11 @@ require ( golang.org/x/mod v0.8.0 // indirect golang.org/x/net v0.19.0 // indirect golang.org/x/sync v0.1.0 // indirect - golang.org/x/sys v0.15.0 // indirect + golang.org/x/sys v0.16.0 // indirect golang.org/x/term v0.15.0 // indirect golang.org/x/text v0.14.0 // indirect golang.org/x/time v0.3.0 // indirect + google.golang.org/protobuf v1.28.1 // indirect gopkg.in/natefinch/lumberjack.v2 v2.0.0 // indirect gopkg.in/yaml.v3 v3.0.1 // indirect ) diff --git a/go.sum b/go.sum index 3d091ed..2d3b867 100644 --- a/go.sum +++ b/go.sum @@ -1,7 +1,9 @@ +cloud.google.com/go v0.26.0/go.mod h1:aQUYkXzVsufM+DwF1aE+0xfcU+56JwCaLick0ClmMTw= github.com/ArtisanCloud/PowerLibs/v3 v3.0.15 h1:EKWDvgu3y6S7OjT3ku7LEF6l5KpIKygBVVnbn2d+lns= github.com/ArtisanCloud/PowerLibs/v3 v3.0.15/go.mod h1:KBO7ZQGTBjvYTveKY5M4QQpwxuoGBI0V2fZ4xP+TIuM= github.com/ArtisanCloud/PowerWeChat/v3 v3.1.8 h1:azjjwozzUNm1xnGXJIjfU7tjQeqDsTdnFJxAi+jtOpU= github.com/ArtisanCloud/PowerWeChat/v3 v3.1.8/go.mod h1:N6ATGWtdjvnts0dzbe9AYxQ1aRuA1yuTTabcUTQPFZo= +github.com/BurntSushi/toml v0.3.1/go.mod h1:xHWCNGjB5oqiDr8zfno3MHue2Ht5sIBksp03qcyfWMU= github.com/BurntSushi/toml v1.1.0/go.mod h1:CxXYINrC8qIiEnFrOxCa7Jy5BFHlXnUU2pbicEuybxQ= github.com/BurntSushi/toml v1.3.2 h1:o7IhLm0Msx3BaB+n3Ag7L8EVlByGnpq14C4YWiu/gL8= github.com/BurntSushi/toml v1.3.2/go.mod h1:CxXYINrC8qIiEnFrOxCa7Jy5BFHlXnUU2pbicEuybxQ= @@ -18,18 +20,28 @@ github.com/bsm/ginkgo/v2 v2.12.0 h1:Ny8MWAHyOepLGlLKYmXG4IEkioBysk6GpaRTLC8zwWs= github.com/bsm/gomega v1.27.10 h1:yeMWxP2pV2fG3FgAODIY8EiRE3dy0aeFYt4l7wh6yKA= github.com/casbin/casbin/v2 v2.42.0 h1:EA0aE5PZnFSYY6WulzTScOo4YO6xrGAAZkXRLs8p2ME= github.com/casbin/casbin/v2 v2.42.0/go.mod h1:sEL80qBYTbd+BPeL4iyvwYzFT3qwLaESq5aFKVLbLfA= +github.com/cespare/xxhash/v2 v2.1.1/go.mod h1:VGX0DQ3Q6kWi7AoAeZDth3/j3BFtOZR5XLFGgcrjCOs= github.com/cespare/xxhash/v2 v2.2.0 h1:DC2CZ1Ep5Y4k3ZQ899DldepgrayRUGE6BBZ/cd9Cj44= github.com/cespare/xxhash/v2 v2.2.0/go.mod h1:VGX0DQ3Q6kWi7AoAeZDth3/j3BFtOZR5XLFGgcrjCOs= github.com/clbanning/mxj v1.8.4 h1:HuhwZtbyvyOw+3Z1AowPkU87JkJUSv751ELWaiTpj8I= github.com/clbanning/mxj v1.8.4/go.mod h1:BVjHeAH+rl9rs6f+QIpeRl0tfu10SXn1pUSa5PVGJng= github.com/clbanning/mxj/v2 v2.7.0 h1:WA/La7UGCanFe5NpHF0Q3DNtnCsVoxbPKuyBNHWRyME= github.com/clbanning/mxj/v2 v2.7.0/go.mod h1:hNiWqW14h+kc+MdF9C6/YoRfjEJoR3ou6tn/Qo+ve2s= +github.com/client9/misspell v0.3.4/go.mod h1:qj6jICC3Q7zFZvVWo7KLAzC3yx5G7kyvSDkc90ppPyw= github.com/creack/pty v1.1.9/go.mod h1:oKZEueFk5CKHvIhNR5MUki03XCEU+Q6VDXinZuGJ33E= 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/dgraph-io/badger/v4 v4.2.0 h1:kJrlajbXXL9DFTNuhhu9yCx7JJa4qpYWxtE8BzuWsEs= +github.com/dgraph-io/badger/v4 v4.2.0/go.mod h1:qfCqhPoWDFJRx1gp5QwwyGo8xk1lbHUxvK9nK0OGAak= +github.com/dgraph-io/ristretto v0.1.1 h1:6CWw5tJNgpegArSHpNHJKldNeq03FQCwYvfMVWajOK8= +github.com/dgraph-io/ristretto v0.1.1/go.mod h1:S1GPSBCYCIhmVNfcth17y2zZtQT6wzkzgwUve0VDWWA= +github.com/dgryski/go-farm v0.0.0-20190423205320-6a90982ecee2 h1:tdlZCpZ/P9DhczCTSixgIKmwPv6+wP5DGjqLYw5SUiA= +github.com/dgryski/go-farm v0.0.0-20190423205320-6a90982ecee2/go.mod h1:SqUrOPUnsFjfmXRMNPybcSiG0BgUW2AuFH8PAnS2iTw= github.com/dgryski/go-rendezvous v0.0.0-20200823014737-9f7001d12a5f h1:lO4WD4F/rVNCu3HqELle0jiPLLBs70cWOduZpkS1E78= github.com/dgryski/go-rendezvous v0.0.0-20200823014737-9f7001d12a5f/go.mod h1:cuUVRXasLTGF7a8hSLbxyZXjz+1KgoB3wDUb6vlszIc= +github.com/dustin/go-humanize v1.0.0 h1:VSnTsYCnlFHaM2/igO1h6X3HA71jcobQuxemgkq4zYo= +github.com/dustin/go-humanize v1.0.0/go.mod h1:HtrtbFcZ19U5GC7JDqmcUSB87Iq5E25KnS6fMYU6eOk= github.com/emirpasic/gods v1.12.0 h1:QAUIPSaCu4G+POclxeqb3F+WPpdKqFGlw36+yOzGlrg= github.com/emirpasic/gods v1.12.0/go.mod h1:YfzfFFoVP/catgzJb4IKIqXjX78Ha8FMSDh3ymbK86o= github.com/fatih/color v1.16.0 h1:zmkK9Ngbjj+K0yRhTVONQh1p/HknKYSlNT+vZCzyokM= @@ -60,15 +72,33 @@ github.com/gogf/gf/contrib/nosql/redis/v2 v2.6.1 h1:5NWx7rZa8CbPNw1vbLzIXQFEMbKv github.com/gogf/gf/contrib/nosql/redis/v2 v2.6.1/go.mod h1:iy1Dwp5xWfGfuWixCgGQ06ZX6lp+d9onbmSWWzi111A= github.com/gogf/gf/v2 v2.6.1 h1:n/cfXM506WjhPa6Z1CEDuHNM1XZ7C8JzSDPn2AfuxgQ= github.com/gogf/gf/v2 v2.6.1/go.mod h1:x2XONYcI4hRQ/4gMNbWHmZrNzSEIg20s2NULbzom5k0= +github.com/gogo/protobuf v1.3.2 h1:Ov1cvc58UF3b5XjBnZv7+opcTcQFZebYjWzi34vdm4Q= +github.com/gogo/protobuf v1.3.2/go.mod h1:P1XiOD3dCwIKUDQYPy72D8LYyHL2YPYrpS2s69NZV8Q= github.com/golang-jwt/jwt/v5 v5.0.0 h1:1n1XNM9hk7O9mnQoNBGolZvzebBQ7p93ULHRc28XJUE= github.com/golang-jwt/jwt/v5 v5.0.0/go.mod h1:pqrtFR0X4osieyHYxtmOUWsAWrfe1Q5UVIyoH402zdk= github.com/golang/freetype v0.0.0-20170609003504-e2365dfdc4a0 h1:DACJavvAHhabrF08vX0COfcOBJRhZ8lUbR+ZWIs0Y5g= github.com/golang/freetype v0.0.0-20170609003504-e2365dfdc4a0/go.mod h1:E/TSTwGwJL78qG/PmXZO1EjYhfJinVAhrmmHX6Z8B9k= +github.com/golang/glog v0.0.0-20160126235308-23def4e6c14b/go.mod h1:SBH7ygxi8pfUlaOkMMuAQtPIUF8ecWP5IEl/CR7VP2Q= +github.com/golang/glog v1.0.0 h1:nfP3RFugxnNRyKgeWd4oI1nYvXpxrx8ck8ZrcizshdQ= +github.com/golang/glog v1.0.0/go.mod h1:EWib/APOK0SL3dFbYqvxE3UYd8E6s1ouQ7iEp/0LWV4= +github.com/golang/groupcache v0.0.0-20190702054246-869f871628b6 h1:ZgQEtGgCBiWRM39fZuwSd1LwSqqSW0hOdXCYYDX0R3I= +github.com/golang/groupcache v0.0.0-20190702054246-869f871628b6/go.mod h1:cIg4eruTrX1D+g88fzRXU5OdNfaM+9IcxsU14FzY7Hc= +github.com/golang/mock v1.1.1/go.mod h1:oTYuIxOrZwtPieC+H1uAHpcLFnEyAGVDL/k47Jfbm0A= github.com/golang/mock v1.3.1/go.mod h1:sBzyDLLjw3U8JLTeZvSv8jJB+tU5PVekmnlKIyFUx0Y= github.com/golang/mock v1.4.4 h1:l75CXGRSwbaYNpl/Z2X1XIIAMSCquvXgpVZDhwEIJsc= github.com/golang/mock v1.4.4/go.mod h1:l3mdAwkq5BuhzHwde/uurv3sEJeZMXNpwsxVWU71h+4= -github.com/golang/snappy v0.0.1 h1:Qgr9rKW7uDUkrbSmQeiDsGa8SjGyCOGtuasMWwvp2P4= +github.com/golang/protobuf v1.2.0/go.mod h1:6lQm79b+lXiMfvg/cZm0SGofjICqVBUtrP5yJMmIC1U= +github.com/golang/protobuf v1.3.1/go.mod h1:6lQm79b+lXiMfvg/cZm0SGofjICqVBUtrP5yJMmIC1U= +github.com/golang/protobuf v1.5.0/go.mod h1:FsONVRAS9T7sI+LIUmWTfcYkHO4aIWwzhcaSAoJOfIk= +github.com/golang/protobuf v1.5.2 h1:ROPKBNFfQgOUMifHyP+KYbvpjbdoFNs+aK7DXlji0Tw= +github.com/golang/protobuf v1.5.2/go.mod h1:XVQd3VNwM+JqD3oG2Ue2ip4fOMUkwXdXDdiuN0vRsmY= github.com/golang/snappy v0.0.1/go.mod h1:/XxbfmMg8lxefKM7IXC3fBNl/7bRcc72aCRzEWrmP2Q= +github.com/golang/snappy v0.0.3 h1:fHPg5GQYlCeLIPB9BZqMVR5nR9A+IM5zcgeTdjMYmLA= +github.com/golang/snappy v0.0.3/go.mod h1:/XxbfmMg8lxefKM7IXC3fBNl/7bRcc72aCRzEWrmP2Q= +github.com/google/flatbuffers v1.12.1 h1:MVlul7pQNoDzWRLTw5imwYsl+usrS1TXG2H4jg6ImGw= +github.com/google/flatbuffers v1.12.1/go.mod h1:1AeVuKshWv4vARoZatz6mlQ0JxURH0Kv5+zNeJKJCa8= +github.com/google/go-cmp v0.3.0/go.mod h1:8QqcDgzrUqlUb/G2PQTWiueGozuR1884gddMywk6iLU= +github.com/google/go-cmp v0.5.5/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE= github.com/google/go-cmp v0.5.6/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE= github.com/google/go-cmp v0.5.9/go.mod h1:17dUlkBOakJ0+DkrSSNjCkIjxS6bF9zb3elmeNGIjoY= github.com/google/go-cmp v0.6.0 h1:ofyhxvXcZhMsU5ulbFiLKl/XBFqE1GSq7atu8tAmTRI= @@ -87,6 +117,10 @@ github.com/json-iterator/go v1.1.12 h1:PV8peI4a0ysnczrg+LtxykD8LfKY9ML6u2jnxaEnr github.com/json-iterator/go v1.1.12/go.mod h1:e30LSqwooZae/UwlEbR2852Gd8hjQvJoHmT4TnhNGBo= github.com/jtolds/gls v4.20.0+incompatible h1:xdiiI2gbIgH/gLH7ADydsJ1uDOEzR8yvV7C0MuV77Wo= github.com/jtolds/gls v4.20.0+incompatible/go.mod h1:QJZ7F/aHp+rZTRtaJ1ow/lLfFfVYBRgL+9YlvaHOwJU= +github.com/kisielk/errcheck v1.5.0/go.mod h1:pFxgyoBC7bSaBwPgfKdkLd5X25qrDl4LWUI2bnpBCr8= +github.com/kisielk/gotool v1.0.0/go.mod h1:XhKaO+MFFWcvkIS/tQcRk01m1F5IRFswLeQ+oQHNcck= +github.com/klauspost/compress v1.12.3 h1:G5AfA94pHPysR56qqrkO2pxEexdDzrpFJ6yt/VqWxVU= +github.com/klauspost/compress v1.12.3/go.mod h1:8dP1Hq4DHOhN9w426knH3Rhby4rFm6D8eO+e+Dq5Gzg= github.com/konsorten/go-windows-terminal-sequences v1.0.1 h1:mweAR1A6xJ3oS2pRaGiHgQ4OO8tzTaLawm8vnODuwDk= github.com/konsorten/go-windows-terminal-sequences v1.0.1/go.mod h1:T0+1ngSBFLxvqU3pZ+m/2kptfBszLMUkC4ZK/EgS/cQ= github.com/kr/pretty v0.1.0/go.mod h1:dAy3ld7l9f0ibDNOQOHHMYYIIbhfbHSm3C4ZsoJORNo= @@ -144,8 +178,8 @@ github.com/qiniu/dyn v1.3.0/go.mod h1:E8oERcm8TtwJiZvkQPbcAh0RL8jO1G0VXJMW3FAWdk github.com/qiniu/go-sdk/v7 v7.13.0 h1:0bWRh/oAC2cArUILZLuWN+s9hPep1JYch5sA2Mfxq7A= github.com/qiniu/go-sdk/v7 v7.13.0/go.mod h1:btsaOc8CA3hdVloULfFdDgDc+g4f3TDZEFsDY0BLE+w= github.com/qiniu/x v1.10.5/go.mod h1:03Ni9tj+N2h2aKnAz+6N0Xfl8FwMEDRC2PAlxekASDs= -github.com/redis/go-redis/v9 v9.3.1 h1:KqdY8U+3X6z+iACvumCNxnoluToB+9Me+TvyFa21Mds= -github.com/redis/go-redis/v9 v9.3.1/go.mod h1:hdY0cQFCN4fnSYT6TkisLufl/4W5UIXyv0b/CLO2V2M= +github.com/redis/go-redis/v9 v9.4.0 h1:Yzoz33UZw9I/mFhx4MNrB6Fk+XHO1VukNcCa1+lwyKk= +github.com/redis/go-redis/v9 v9.4.0/go.mod h1:hdY0cQFCN4fnSYT6TkisLufl/4W5UIXyv0b/CLO2V2M= github.com/richardlehane/mscfb v1.0.4 h1:WULscsljNPConisD5hR0+OyZjwK46Pfyr6mPu5ZawpM= github.com/richardlehane/mscfb v1.0.4/go.mod h1:YzVpcZg9czvAuhk9T+a3avCpcFPMUWm7gK3DypaEsUk= github.com/richardlehane/msoleps v1.0.1/go.mod h1:BWev5JBpU9Ko2WAgmZEuiz4/u3ZYTKbjLycmwiWUfWg= @@ -177,6 +211,7 @@ github.com/stretchr/objx v0.4.0/go.mod h1:YvHI0jy2hoMjB+UWwv71VJQ9isScKT/TqJzVSS github.com/stretchr/objx v0.5.0/go.mod h1:Yh+to48EsGEfYuaHDzXPcE3xhTkx73EhmCGUpEOglKo= github.com/stretchr/testify v1.2.2/go.mod h1:a8OnRcib4nhh0OaRAV+Yts87kKdq0PP7pXfy6kDkUVs= github.com/stretchr/testify v1.3.0/go.mod h1:M5WIy9Dh21IEIfnGCwXGc5bZfKNJtfHm1UVUgZn+9EI= +github.com/stretchr/testify v1.4.0/go.mod h1:j7eGeouHqKxXV5pUuKE4zz7dFj8WfuZ+81PSLYec5m4= github.com/stretchr/testify v1.6.1/go.mod h1:6Fq8oRcR53rry900zMqJjRRixrwX3KX962/h/Wwjteg= 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= @@ -193,10 +228,10 @@ github.com/tidwall/match v1.1.1 h1:+Ho715JplO36QYgwN9PGYNhgZvoUSc9X2c80KVTi+GA= github.com/tidwall/match v1.1.1/go.mod h1:eRSPERbgtNPcGhD8UCthc6PmLEQXEWd3PRB5JTxsfmM= github.com/tidwall/pretty v1.2.0 h1:RWIZEg2iJ8/g6fDDYzMpobmaoGh5OLl4AXtGUGPcqCs= github.com/tidwall/pretty v1.2.0/go.mod h1:ITEVvHYasfjBbM0u2Pg8T2nJnzm8xPwvNhhsoaGGjNU= -github.com/tiger1103/gfast-cache v1.0.2 h1:p+siY2qISzqowGQZvJjnXnrye7D50uVYyJvdBQbrbqk= -github.com/tiger1103/gfast-cache v1.0.2/go.mod h1:LYOlyTyvlY5Pf1u6tqFrDgG+8zZFmAg5xuKFeehNcnI= -github.com/tiger1103/gfast-token v1.0.4 h1:/tYnh2DjPzXVTfm0wHLR3V21JsTkm1HhiKKIfM6NobE= -github.com/tiger1103/gfast-token v1.0.4/go.mod h1:OurEktIaHPJes7lJsIjMo1yz1vSiBRGyV3T8muWytfo= +github.com/tiger1103/gfast-cache v1.0.4 h1:4SGmyDBMJeUUJ6dLiCGhRW76xT+uMvvQrBE6FLDW/3s= +github.com/tiger1103/gfast-cache v1.0.4/go.mod h1:vnTD3ilVtcDgMdmNnd0EWYc+QZ4FinHchb1ke4jqPA8= +github.com/tiger1103/gfast-token v1.0.6 h1:iRoj83KRPN3ZJbPrNpWjkSOjyBPDhndmTWoJvH7QxlI= +github.com/tiger1103/gfast-token v1.0.6/go.mod h1:oJZqtEwe8yXCk0GrlbYH87jIpwRdePjWBtr1AwMjr9o= github.com/tklauser/go-sysconf v0.3.11 h1:89WgdJhk5SNwJfu+GKyYveZ4IaJ7xAkecBo+KdJV0CM= github.com/tklauser/go-sysconf v0.3.11/go.mod h1:GqXfhXY3kiPa0nAXPDIQIWzJbMCB7AmcWpGR8lSZfqI= github.com/tklauser/numcpus v0.6.0 h1:kebhY2Qt+3U6RNK7UqpYNA+tJ23IBEGKkB7JQBfDYms= @@ -211,10 +246,14 @@ github.com/xuri/excelize/v2 v2.7.1/go.mod h1:qc0+2j4TvAUrBw36ATtcTeC1VCM0fFdAXZO github.com/xuri/nfp v0.0.0-20220409054826-5e722a1d9e22/go.mod h1:WwHg+CVyzlv/TX9xqBFXEZAuxOPxn2k1GNHwG41IIUQ= github.com/xuri/nfp v0.0.0-20230802015359-2d5eeba905e9 h1:jmhvNv5by7bXDzzjzBXaIWmEI4lMYfv5iJtI5Pw5/aM= github.com/xuri/nfp v0.0.0-20230802015359-2d5eeba905e9/go.mod h1:WwHg+CVyzlv/TX9xqBFXEZAuxOPxn2k1GNHwG41IIUQ= +github.com/yuin/goldmark v1.1.27/go.mod h1:3hX8gzYuyVAZsxl0MRgGTJEmQBFcNTphYh9decYSb74= +github.com/yuin/goldmark v1.2.1/go.mod h1:3hX8gzYuyVAZsxl0MRgGTJEmQBFcNTphYh9decYSb74= github.com/yuin/goldmark v1.3.5/go.mod h1:mwnBkeHKe2W/ZEtQ+71ViKU8L12m81fl3OWwC1Zlc8k= github.com/yuin/goldmark v1.4.13/go.mod h1:6yULJ656Px+3vBD8DxQVa3kxgyrAnzto9xy5taEt/CY= github.com/yusufpapurcu/wmi v1.2.2 h1:KBNDSne4vP5mbSWnJbO+51IMOXJB67QiYCSBrubbPRg= github.com/yusufpapurcu/wmi v1.2.2/go.mod h1:SBZ9tNy3G9/m5Oi98Zks0QjeHVDvuK0qfxQmPyzfmi0= +go.opencensus.io v0.22.5 h1:dntmOdLpSpHlVqbW5Eay97DelsZHe+55D+xC6i0dDS0= +go.opencensus.io v0.22.5/go.mod h1:5pWMHQbX5EPX2/62yrJeAkowc+lfs/XD7Uxpq3pI6kk= go.opentelemetry.io/otel v1.21.0 h1:hzLeKBZEL7Okw2mGzZ0cc4k/A7Fta0uoPgaJCr8fsFc= go.opentelemetry.io/otel v1.21.0/go.mod h1:QZzNPQPm1zLX4gZK4cMi+71eaorMSGT3A4znnUvNNEo= go.opentelemetry.io/otel/metric v1.21.0 h1:tlYWfeo+Bocx5kLEloTjbcDwBuELRrIFxwdQ36PlJu4= @@ -235,23 +274,35 @@ go.uber.org/zap v1.21.0/go.mod h1:wjWOCqI0f2ZZrJF/UufIOkiC8ii6tm1iqIsLo76RfJw= golang.org/x/crypto v0.0.0-20180904163835-0709b304e793/go.mod h1:6SG95UA2DQfeDnfUPMdvaQW0Q7yPrPDi9nlGo2tz2b4= golang.org/x/crypto v0.0.0-20190308221718-c2843e01d9a2/go.mod h1:djNgcEr1/C05ACkg1iLfiJU5Ep61QUkGW8qpdssI0+w= golang.org/x/crypto v0.0.0-20191011191535-87dc89f01550/go.mod h1:yigFU9vqHzYiE8UmvKecakEJjdnWj3jj499lnFckfCI= +golang.org/x/crypto v0.0.0-20200622213623-75b288015ac9/go.mod h1:LzIPMQfyMNhhGPhUkYOs5KpL4U8rLKemX1yGLhDgUto= golang.org/x/crypto v0.0.0-20210711020723-a769d52b0f97/go.mod h1:GvvjBRRGRdwPK5ydBHafDWAxML/pGHZbMvKqRZ5+Abc= golang.org/x/crypto v0.0.0-20210921155107-089bfa567519/go.mod h1:GvvjBRRGRdwPK5ydBHafDWAxML/pGHZbMvKqRZ5+Abc= golang.org/x/crypto v0.8.0/go.mod h1:mRqEX+O9/h5TFCrQhkgjo2yKi0yYA+9ecGkdQoHrywE= golang.org/x/crypto v0.16.0 h1:mMMrFzRSCF0GvB7Ne27XVtVAaXLrPmgPC7/v0tkwHaY= golang.org/x/crypto v0.16.0/go.mod h1:gCAAfMLgwOJRpTjQ2zCCt2OcSfYMTeZVSRtQlPC7Nq4= +golang.org/x/exp v0.0.0-20190121172915-509febef88a4/go.mod h1:CJ0aWSM057203Lf6IL+f9T1iT9GByDxfZKAQTCR3kQA= golang.org/x/image v0.0.0-20190501045829-6d32002ffd75/go.mod h1:kZ7UVZpmo3dzQBMxlp+ypCbDeSB+sBbTgSJuh5dn5js= golang.org/x/image v0.0.0-20210628002857-a66eb6448b8d/go.mod h1:023OzeP/+EPmXeapQh35lcL3II3LrY8Ic+EFFKVhULM= golang.org/x/image v0.5.0 h1:5JMiNunQeQw++mMOz48/ISeNu3Iweh/JaZU8ZLqHRrI= golang.org/x/image v0.5.0/go.mod h1:FVC7BI/5Ym8R25iw5OLsgshdUBbT1h5jZTpA+mvAdZ4= +golang.org/x/lint v0.0.0-20181026193005-c67002cb31c3/go.mod h1:UVdnD1Gm6xHRNCYTkRU2/jEulfH38KcIWyp/GAMgvoE= +golang.org/x/lint v0.0.0-20190227174305-5b3e6a55c961/go.mod h1:wehouNa3lNwaWXcvxsM5YxQ5yQlVC4a0KAMCusXpPoU= +golang.org/x/lint v0.0.0-20190313153728-d0100b6bd8b3/go.mod h1:6SW0HCj/g11FgYtHlgUYUwCkIfeOF89ocIRzGO/8vkc= golang.org/x/lint v0.0.0-20190930215403-16217165b5de/go.mod h1:6SW0HCj/g11FgYtHlgUYUwCkIfeOF89ocIRzGO/8vkc= +golang.org/x/mod v0.2.0/go.mod h1:s0Qsj1ACt9ePp/hMypM3fl4fZqREWJwdYDEqhRiZZUA= +golang.org/x/mod v0.3.0/go.mod h1:s0Qsj1ACt9ePp/hMypM3fl4fZqREWJwdYDEqhRiZZUA= golang.org/x/mod v0.4.2/go.mod h1:s0Qsj1ACt9ePp/hMypM3fl4fZqREWJwdYDEqhRiZZUA= golang.org/x/mod v0.6.0-dev.0.20220419223038-86c51ed26bb4/go.mod h1:jJ57K6gSWd91VN4djpZkiMVwK6gcyfeH4XE8wZrZaV4= golang.org/x/mod v0.8.0 h1:LUYupSeNrTNCGzR/hVBk2NHZO4hXcVaW1k4Qx7rjPx8= golang.org/x/mod v0.8.0/go.mod h1:iBbtSCu2XBx23ZKBPSOrRkjjQPZFPuis4dIYUhu/chs= +golang.org/x/net v0.0.0-20180724234803-3673e40ba225/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= +golang.org/x/net v0.0.0-20180826012351-8a410e7b638d/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= +golang.org/x/net v0.0.0-20190213061140-3a22650c66bd/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= golang.org/x/net v0.0.0-20190311183353-d8887717615a/go.mod h1:t9HGtf8HONx5eT2rtn7q6eTqICYqUVnKs3thJo3Qplg= golang.org/x/net v0.0.0-20190404232315-eb5bcb51f2a3/go.mod h1:t9HGtf8HONx5eT2rtn7q6eTqICYqUVnKs3thJo3Qplg= golang.org/x/net v0.0.0-20190620200207-3b0461eec859/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s= +golang.org/x/net v0.0.0-20200226121028-0de0cce0169b/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s= +golang.org/x/net v0.0.0-20201021035429-f5854403a974/go.mod h1:sp8m0HH+o8qH0wwXwYZr8TS3Oi6o0r6Gce1SSxlDquU= golang.org/x/net v0.0.0-20210226172049-e18ecbb05110/go.mod h1:m0MpNAwzfU5UDzcl9v0D8zg8gWTRqZa9RBIspLL5mdg= golang.org/x/net v0.0.0-20210405180319-a5a99cb37ef4/go.mod h1:p54w0d4576C0XHj96bSt6lcn1PtDYWL6XObtHCRCNQM= golang.org/x/net v0.0.0-20220722155237-a158d28d115b/go.mod h1:XRhObCWvk6IyKnWLug+ECip1KBveYUHfp+8e9klMJ9c= @@ -259,16 +310,25 @@ golang.org/x/net v0.6.0/go.mod h1:2Tu9+aMcznHK/AK1HMvgo6xiTLG5rD5rZLDS+rp2Bjs= golang.org/x/net v0.9.0/go.mod h1:d48xBJpPfHeWQsugry2m+kC02ZBRGRgulfHnEXEuWns= golang.org/x/net v0.19.0 h1:zTwKpTd2XuCqf8huc7Fo2iSy+4RHPd10s4KzeTnVr1c= golang.org/x/net v0.19.0/go.mod h1:CfAk/cbD4CthTvqiEl8NpboMuiuOYsAr/7NOjZJtv1U= +golang.org/x/oauth2 v0.0.0-20180821212333-d2e6202438be/go.mod h1:N/0e6XlmueqKjAGxoOufVs8QHGRruUQn6yWY3a++T0U= +golang.org/x/sync v0.0.0-20180314180146-1d60e4601c6f/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= +golang.org/x/sync v0.0.0-20181108010431-42b317875d0f/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= +golang.org/x/sync v0.0.0-20190227155943-e225da77a7e6/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= golang.org/x/sync v0.0.0-20190423024810-112230192c58/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= +golang.org/x/sync v0.0.0-20190911185100-cd5d95a43a6e/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= +golang.org/x/sync v0.0.0-20201020160332-67f06af15bc9/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= golang.org/x/sync v0.0.0-20201207232520-09787c993a3a/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= golang.org/x/sync v0.0.0-20210220032951-036812b2e83c/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 h1:wsuoTGHzEhffawBOhz5CYhcrV4IdKZbEyZjBMuTp12o= golang.org/x/sync v0.1.0/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= +golang.org/x/sys v0.0.0-20180830151530-49385e6e1522/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= golang.org/x/sys v0.0.0-20180905080454-ebe1bf3edb33/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= golang.org/x/sys v0.0.0-20190215142949-d0b11bdaac8a/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= golang.org/x/sys v0.0.0-20190412213103-97732733099d/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20190502145724-3ef323f4f1fd/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20190916202348-b4ddaad3f8a3/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20200930185726-fdedc70b468f/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20201119102817-f84b799fce68/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20201204225414-ed752295db88/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20210330210617-4fbd30eecc44/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= @@ -279,12 +339,13 @@ golang.org/x/sys v0.0.0-20211020174200-9d6173849985/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.0.0-20220811171246-fbc7d0a398ab/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= +golang.org/x/sys v0.0.0-20221010170243-090e33056c14/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.2.0/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.7.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= -golang.org/x/sys v0.15.0 h1:h48lPFYpsTvQJZF4EKyI4aLHaev3CxivZmv7yZig9pc= -golang.org/x/sys v0.15.0/go.mod h1:/VUhepiaJMQUp4+oa/7Zr1D23ma6VTLIYjOOTFZPUcA= +golang.org/x/sys v0.16.0 h1:xWw16ngr6ZMtmxDyKyIgsE93KNKz5HKmMa3b8ALHidU= +golang.org/x/sys v0.16.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= @@ -303,11 +364,15 @@ golang.org/x/text v0.14.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= +golang.org/x/tools v0.0.0-20190114222345-bf090417da8b/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ= +golang.org/x/tools v0.0.0-20190226205152-f727befe758c/go.mod h1:9Yl7xja0Znq3iFh3HoIrodX9oNMXvdceNzlUR8zjMvY= golang.org/x/tools v0.0.0-20190311212946-11955173bddd/go.mod h1:LCzVGOaR6xXOjkQ3onu1FJEFr0SW1gC7cKk1uF8kGRs= golang.org/x/tools v0.0.0-20190328211700-ab21143f2384/go.mod h1:LCzVGOaR6xXOjkQ3onu1FJEFr0SW1gC7cKk1uF8kGRs= golang.org/x/tools v0.0.0-20190425150028-36563e24a262/go.mod h1:RgjU9mgBXZiqYHBnxXauZ1Gv1EHHAz9KjViQ78xBX0Q= golang.org/x/tools v0.0.0-20191029041327-9cc4af7d6b2c/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo= golang.org/x/tools v0.0.0-20191119224855-298f0cb1881e/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo= +golang.org/x/tools v0.0.0-20200619180055-7c47624df98f/go.mod h1:EkVYQZoAsY45+roYkvgYkIh4xh/qjgUK9TdY2XT94GE= +golang.org/x/tools v0.0.0-20210106214847-113979e3529a/go.mod h1:emZCQorbCU4vsT4fOWvOPXz4eW1wZW4PmDk9uLelYpA= golang.org/x/tools v0.1.5/go.mod h1:o0xws9oXOQQZyjljx8fwUC0k7L1pTE6eaCbjGeHmOkk= golang.org/x/tools v0.1.12/go.mod h1:hNGJHUnrk76NpqgfD5Aqm5Crs+Hm0VOH/i9J2+nxYbc= golang.org/x/tools v0.6.0 h1:BOw41kyTf3PuCW1pVQf8+Cyg8pMlkYB1oo9iJ6D/lKM= @@ -316,6 +381,16 @@ golang.org/x/xerrors v0.0.0-20190717185122-a985d3407aa7/go.mod h1:I/5z698sn9Ka8T golang.org/x/xerrors v0.0.0-20191011141410-1b5146add898/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0= golang.org/x/xerrors v0.0.0-20191204190536-9bdfabe68543/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0= golang.org/x/xerrors v0.0.0-20200804184101-5ec99f83aff1/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0= +google.golang.org/appengine v1.1.0/go.mod h1:EbEs0AVv82hx2wNQdGPgUI5lhzA/G0D9YwlJXL52JkM= +google.golang.org/appengine v1.4.0/go.mod h1:xpcJRLb0r/rnEns0DIKYYv+WjYCduHsrkT7/EB5XEv4= +google.golang.org/genproto v0.0.0-20180817151627-c66870c02cf8/go.mod h1:JiN7NxoALGmiZfu7CAH4rXhgtRTLTxftemlI0sWmxmc= +google.golang.org/genproto v0.0.0-20190425155659-357c62f0e4bb/go.mod h1:VzzqZJRnGkLBvHegQrXjBqPurQTc5/KpmUdxsrq26oE= +google.golang.org/grpc v1.19.0/go.mod h1:mqu4LbDTu4XGKhr4mRzUsmM4RtVoemTSY81AxZiDr8c= +google.golang.org/grpc v1.20.1/go.mod h1:10oTOabMzJvdu6/UiuZezV6QK5dSlG84ov/aaiqXj38= +google.golang.org/protobuf v1.26.0-rc.1/go.mod h1:jlhhOSvTdKEhbULTjvd4ARK9grFBp09yW+WbY/TyQbw= +google.golang.org/protobuf v1.26.0/go.mod h1:9q0QmTI4eRPtz6boOQmLYwt+qCgq0jsYwAQnmE0givc= +google.golang.org/protobuf v1.28.1 h1:d0NfwRgPtno5B1Wa6L2DAG+KivqkdutMf1UhdNx175w= +google.golang.org/protobuf v1.28.1/go.mod h1:HV8QOd/L58Z+nl8r43ehVNZIU/HEI6OcFqwMG9pJV4I= gopkg.in/check.v1 v0.0.0-20161208181325-20d25e280405/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0= gopkg.in/check.v1 v1.0.0-20180628173108-788fd7840127/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0= gopkg.in/check.v1 v1.0.0-20201130134442-10cb98267c6c h1:Hei/4ADfdWqJk1ZMxUNpqntNwaWcugrBjAiHlqqRiVk= @@ -323,6 +398,7 @@ gopkg.in/check.v1 v1.0.0-20201130134442-10cb98267c6c/go.mod h1:JHkPIbrfpd72SG/EV gopkg.in/errgo.v2 v2.1.0/go.mod h1:hNsd1EY+bozCKY1Ytp96fpM3vjJbqLJn88ws8XvfDNI= gopkg.in/natefinch/lumberjack.v2 v2.0.0 h1:1Lc07Kr7qY4U2YPouBjpCLxpiyxIVoxqXgkXLknAOE8= gopkg.in/natefinch/lumberjack.v2 v2.0.0/go.mod h1:l0ndWWf7gzL7RNwBG7wST/UCcT4T24xpD6X8LsfU/+k= +gopkg.in/yaml.v2 v2.2.2/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI= gopkg.in/yaml.v2 v2.2.8/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI= gopkg.in/yaml.v2 v2.4.0 h1:D8xgwECY7CYvx+Y2n4sBz93Jn9JRvxdiyyo8CTfuKaY= gopkg.in/yaml.v2 v2.4.0/go.mod h1:RDklbk79AGWmwhnvt/jBztapEOGDOx6ZbXqjP6csGnQ= @@ -330,5 +406,6 @@ gopkg.in/yaml.v3 v3.0.0-20200313102051-9f266ea9e77c/go.mod h1:K4uyk7z7BCEPqu6E+C gopkg.in/yaml.v3 v3.0.0-20210107192922-496545a6307b/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= +honnef.co/go/tools v0.0.0-20190102054323-c2f93a96b099/go.mod h1:rf3lG4BRIbNafJWhAfAdb/ePZxsR/4RtNHQocxwk9r4= stathat.com/c/consistent v1.0.0 h1:ezyc51EGcRPJUxfHGSgJjWzJdj3NiMU9pNfLNGiXV0c= stathat.com/c/consistent v1.0.0/go.mod h1:QkzMWzcbB+yQBL2AttO6sgsQS/JSTapcDISJalmCDS0= diff --git a/internal/app/common/consts/cache.go b/internal/app/common/consts/cache.go index cb1b3b8..5ebc62d 100644 --- a/internal/app/common/consts/cache.go +++ b/internal/app/common/consts/cache.go @@ -10,6 +10,7 @@ package consts const ( CacheModelMem = "memory" CacheModelRedis = "redis" + CacheModelDist = "dist" // CacheSysDict 字典缓存菜单KEY CacheSysDict = "sysDict" diff --git a/internal/app/common/logic/cache/cache.go b/internal/app/common/logic/cache/cache.go index 4ab2c18..239959d 100644 --- a/internal/app/common/logic/cache/cache.go +++ b/internal/app/common/logic/cache/cache.go @@ -10,6 +10,7 @@ package cache import ( "github.com/gogf/gf/v2/frame/g" "github.com/gogf/gf/v2/os/gctx" + "github.com/tiger1103/gfast-cache/adapter" "github.com/tiger1103/gfast-cache/cache" "github.com/tiger1103/gfast/v3/internal/app/common/consts" "github.com/tiger1103/gfast/v3/internal/app/common/service" @@ -26,9 +27,14 @@ func New() service.ICache { ) prefix := g.Cfg().MustGet(ctx, "system.cache.prefix").String() model := g.Cfg().MustGet(ctx, "system.cache.model").String() + distPath := g.Cfg().MustGet(ctx, "system.cache.distPath").String() if model == consts.CacheModelRedis { // redis cacheContainer = cache.NewRedis(prefix) + } else if model == consts.CacheModelDist { + // dist + adapter.SetConfig(&adapter.Config{Dir: distPath}) + cacheContainer = cache.NewDist(prefix) } else { // memory cacheContainer = cache.New(prefix) diff --git a/internal/app/common/model/token.go b/internal/app/common/model/token.go index 288e72d..ceaeedb 100644 --- a/internal/app/common/model/token.go +++ b/internal/app/common/model/token.go @@ -29,4 +29,6 @@ type TokenOptions struct { // 拦截排除地址 ExcludePaths g.SliceStr `json:"excludePaths"` CacheModel string `json:"cacheModel"` + //磁盘缓存路径 + DistPath string `json:"distPath"` } diff --git a/internal/app/system/controller/sys_user.go b/internal/app/system/controller/sys_user.go index 8edcb10..8d4d67d 100644 --- a/internal/app/system/controller/sys_user.go +++ b/internal/app/system/controller/sys_user.go @@ -115,3 +115,17 @@ func (c *userController) Delete(ctx context.Context, req *system.UserDeleteReq) err = service.SysUser().Delete(ctx, req.Ids) return } + +// GetUserSelector 获取用户选择器数据 +func (c *userController) GetUserSelector(ctx context.Context, req *system.UserSelectorReq) (res *system.UserSelectorRes, err error) { + res = new(system.UserSelectorRes) + res.Total, res.UserList, err = service.SysUser().GetUserSelector(ctx, req) + return +} + +// GetByIds 根据id 获取用户信息 +func (c *userController) GetByIds(ctx context.Context, req *system.UserByIdsReq) (res *system.UserByIdsRes, err error) { + res = new(system.UserByIdsRes) + res.UserList, err = service.SysUser().GetUsers(ctx, req.Ids) + return +} diff --git a/internal/app/system/logic/middleware/middleware.go b/internal/app/system/logic/middleware/middleware.go index 00672e8..cc2dfbe 100644 --- a/internal/app/system/logic/middleware/middleware.go +++ b/internal/app/system/logic/middleware/middleware.go @@ -37,6 +37,7 @@ func (s *sMiddleware) Ctx(r *ghttp.Request) { if err != nil { // 执行下一步请求逻辑 r.Middleware.Next() + return } if data != nil { context := new(model.Context) @@ -45,6 +46,7 @@ func (s *sMiddleware) Ctx(r *ghttp.Request) { g.Log().Error(ctx, err) // 执行下一步请求逻辑 r.Middleware.Next() + return } service.Context().Init(r, context) } diff --git a/internal/app/system/logic/sysUser/sys_user.go b/internal/app/system/logic/sysUser/sys_user.go index b4b2aeb..a68952d 100644 --- a/internal/app/system/logic/sysUser/sys_user.go +++ b/internal/app/system/logic/sysUser/sys_user.go @@ -406,6 +406,32 @@ func inSlice(field string, excludes []string) bool { return false } +// 根据用户ID 获取用户 +func (s *sSysUser) GetByIdsUser(ctx context.Context, req *system.UserByIdsReq) (total interface{}, userList []*entity.SysUser, err error) { + err = g.Try(ctx, func(ctx context.Context) { + m := dao.SysUser.Ctx(ctx) + if req.Ids != nil { + m = m.Where("id in (?)", req.Ids) + } + //dao.SysUserPost.Columns().UserId+" in (?)", ids + if req.PageSize == 0 { + req.PageSize = consts.PageSize + } + if req.PageNum == 0 { + req.PageNum = 1 + } + total, err = m.Count() + liberr.ErrIsNil(ctx, err, "获取用户数据失败") + + // 排除password字段 + m = m.Fields(fieldsEx()) + + err = m.Page(req.PageNum, req.PageSize).Order("id asc").Scan(&userList) + liberr.ErrIsNil(ctx, err, "获取用户列表失败") + }) + return +} + // List 用户列表 func (s *sSysUser) List(ctx context.Context, req *system.UserSearchReq) (total interface{}, userList []*entity.SysUser, err error) { err = g.Try(ctx, func(ctx context.Context) { @@ -455,6 +481,51 @@ func (s *sSysUser) List(ctx context.Context, req *system.UserSearchReq) (total i return } +// GetUserSelector 获取用户选择器数据 +func (s *sSysUser) GetUserSelector(ctx context.Context, req *system.UserSelectorReq) (total interface{}, userList []*model.SysUserSimpleRes, err error) { + err = g.Try(ctx, func(ctx context.Context) { + m := dao.SysUser.Ctx(ctx) + if req.KeyWords != "" { + keyWords := "%" + req.KeyWords + "%" + m = m.Where("user_name like ? or user_nickname like ?", keyWords, keyWords) + } + if req.DeptId != "" { + deptIds, e := s.getSearchDeptIds(ctx, gconv.Uint64(req.DeptId)) + liberr.ErrIsNil(ctx, e) + m = m.Where("dept_id in (?)", deptIds) + } + if req.Status != "" { + m = m.Where("user_status", gconv.Int(req.Status)) + } + if req.Mobile != "" { + m = m.Where("mobile like ?", "%"+req.Mobile+"%") + } + if len(req.DateRange) > 0 { + m = m.Where("created_at >=? AND created_at <=?", req.DateRange[0], req.DateRange[1]) + } + + if req.PageSize == 0 { + req.PageSize = consts.PageSize + } + if req.PageNum == 0 { + req.PageNum = 1 + } + total, err = m.Count() + liberr.ErrIsNil(ctx, err, "获取用户数据失败") + + // 排除password字段 + if req.RoleId > 0 { + m = m.Fields(fieldsEx()) + } else { + m = m.FieldsEx(dao.SysUser.Columns().UserPassword, dao.SysUser.Columns().UserSalt) + } + + err = m.Page(req.PageNum, req.PageSize).Order("id asc").Scan(&userList) + liberr.ErrIsNil(ctx, err, "获取用户列表失败") + }) + return +} + // GetUsersRoleDept 获取多个用户角色 部门信息 func (s *sSysUser) GetUsersRoleDept(ctx context.Context, userList []*entity.SysUser) (users []*model.SysUserRoleDeptRes, err error) { err = g.Try(ctx, func(ctx context.Context) { diff --git a/internal/app/system/logic/token/token.go b/internal/app/system/logic/token/token.go index 2b51b53..9ef6007 100644 --- a/internal/app/system/logic/token/token.go +++ b/internal/app/system/logic/token/token.go @@ -10,6 +10,7 @@ package token import ( "github.com/gogf/gf/v2/frame/g" "github.com/gogf/gf/v2/os/gctx" + "github.com/tiger1103/gfast-token/adapter" "github.com/tiger1103/gfast-token/gftoken" "github.com/tiger1103/gfast/v3/internal/app/common/consts" commonModel "github.com/tiger1103/gfast/v3/internal/app/common/model" @@ -30,9 +31,14 @@ func New() service.IGfToken { ) liberr.ErrIsNil(ctx, err) if opt.CacheModel == consts.CacheModelRedis { - fun = gftoken.WithGRedis() + fun = gftoken.WithGRedis() //redis缓存 + } else if opt.CacheModel == consts.CacheModelDist { + //磁盘缓存 + fun = gftoken.WithDistConfig(&adapter.Config{ + Dir: opt.DistPath, + }) } else { - fun = gftoken.WithGCache() + fun = gftoken.WithGCache() // 内存缓存 } return &sToken{ GfToken: gftoken.NewGfToken( diff --git a/internal/app/system/model/entity/sys_dept.go b/internal/app/system/model/entity/sys_dept.go index 568589f..39d8159 100644 --- a/internal/app/system/model/entity/sys_dept.go +++ b/internal/app/system/model/entity/sys_dept.go @@ -15,7 +15,7 @@ type SysDept struct { Ancestors string `json:"ancestors" description:"祖级列表"` DeptName string `json:"deptName" description:"部门名称"` OrderNum int `json:"orderNum" description:"显示顺序"` - Leader string `json:"leader" description:"负责人"` + Leader []int `json:"leader" description:"负责人"` Phone string `json:"phone" description:"联系电话"` Email string `json:"email" description:"邮箱"` Status uint `json:"status" description:"部门状态(0正常 1停用)"` diff --git a/internal/app/system/model/sys_user.go b/internal/app/system/model/sys_user.go index d6a6a46..1186cd7 100644 --- a/internal/app/system/model/sys_user.go +++ b/internal/app/system/model/sys_user.go @@ -49,7 +49,6 @@ type SysUserSimpleRes struct { Id uint64 `orm:"id" json:"id"` // Avatar string `orm:"avatar" json:"avatar"` // 头像 Sex int `orm:"sex" json:"sex"` // 性别 - UserName string `orm:"user_name" json:"userName"` // 用户名 UserNickname string `orm:"user_nickname" json:"userNickname"` // 用户昵称 } diff --git a/internal/app/system/router/router.go b/internal/app/system/router/router.go index 5fb539e..fc35a5c 100644 --- a/internal/app/system/router/router.go +++ b/internal/app/system/router/router.go @@ -25,10 +25,15 @@ func (router *Router) BindController(ctx context.Context, group *ghttp.RouterGro //登录 controller.Login, ) + //context拦截器 + group.Middleware(service.Middleware().Ctx) + //自动绑定定义的控制器 + if err := libRouter.RouterAutoBindBefore(ctx, router, group); err != nil { + panic(err) + } //登录验证拦截 service.GfToken().Middleware(group) - //context拦截器 - group.Middleware(service.Middleware().Ctx, service.Middleware().Auth) + group.Middleware(service.Middleware().Auth) //后台操作日志记录 group.Hook("/*", ghttp.HookAfterOutput, service.OperateLog().OperationLog) group.Bind( diff --git a/internal/app/system/service/sys_user.go b/internal/app/system/service/sys_user.go index 7f9cd4c..cfb88e9 100644 --- a/internal/app/system/service/sys_user.go +++ b/internal/app/system/service/sys_user.go @@ -37,6 +37,7 @@ type ( GetMenusTree(menus []*model.UserMenus, pid uint) []*model.UserMenus GetPermissions(ctx context.Context, roleIds []uint) (userButtons []string, err error) List(ctx context.Context, req *system.UserSearchReq) (total interface{}, userList []*entity.SysUser, err error) + GetByIdsUser(ctx context.Context, req *system.UserByIdsReq) (total interface{}, userList []*entity.SysUser, err error) GetUsersRoleDept(ctx context.Context, userList []*entity.SysUser) (users []*model.SysUserRoleDeptRes, err error) Add(ctx context.Context, req *system.UserAddReq) (err error) Edit(ctx context.Context, req *system.UserEditReq) (err error) @@ -53,6 +54,7 @@ type ( GetDataWhere(ctx context.Context, userInfo *model.ContextUser, entityData interface{}) (where g.Map, err error) HasAccessByDataWhere(ctx context.Context, where g.Map, uid interface{}) bool AccessRule(ctx context.Context, userId uint64, rule string) bool + GetUserSelector(ctx context.Context, req *system.UserSelectorReq) (total interface{}, userList []*model.SysUserSimpleRes, err error) } ) diff --git a/internal/app/wechat/logic/middleware/middleware.go b/internal/app/wechat/logic/middleware/middleware.go index 7af3bdf..403ea96 100644 --- a/internal/app/wechat/logic/middleware/middleware.go +++ b/internal/app/wechat/logic/middleware/middleware.go @@ -33,6 +33,7 @@ func (s *sMiddleware) Ctx(r *ghttp.Request) { if err != nil { // 执行下一步请求逻辑 r.Middleware.Next() + return } if data != nil { context := new(model.Context) @@ -41,6 +42,7 @@ func (s *sMiddleware) Ctx(r *ghttp.Request) { g.Log().Error(ctx, err) // 执行下一步请求逻辑 r.Middleware.Next() + return } service.Context().Init(r, context) } diff --git a/internal/app/wechat/router/router.go b/internal/app/wechat/router/router.go index 7469048..d05e2ce 100644 --- a/internal/app/wechat/router/router.go +++ b/internal/app/wechat/router/router.go @@ -25,10 +25,15 @@ func (router *Router) BindController(ctx context.Context, group *ghttp.RouterGro //登录 controller.Login, ) - //登录验证拦截 - service.GfToken().Middleware(group) //context拦截器 group.Middleware(service.Middleware().Ctx) + //自动绑定定义的控制器 + if err := libRouter.RouterAutoBindBefore(ctx, router, group); err != nil { + panic(err) + } + //登录验证拦截 + service.GfToken().Middleware(group) + //自动绑定定义的控制器 if err := libRouter.RouterAutoBind(ctx, router, group); err != nil { panic(err) diff --git a/internal/cmd/cmd.go b/internal/cmd/cmd.go index 86ff6ba..e04ed44 100644 --- a/internal/cmd/cmd.go +++ b/internal/cmd/cmd.go @@ -30,14 +30,17 @@ var ( router.R.BindController(ctx, group) }) //重新配置swaggerUI静态页面--start--,若要使用原版gf字段swaggerUI请删除或注释此段 - s.BindHookHandler(g.Cfg().MustGet(ctx, "server.swaggerPath").String()+"/*", ghttp.HookBeforeServe, func(r *ghttp.Request) { - content := gstr.ReplaceByMap(consts.SwaggerUITemplate, map[string]string{ - `{SwaggerUIDocUrl}`: g.Cfg().MustGet(ctx, "server.openapiPath").String(), - `{SwaggerUIDocNamePlaceHolder}`: gstr.TrimRight(fmt.Sprintf(`//%s`, r.Host)), + swaggerPath := g.Cfg().MustGet(ctx, "server.swaggerPath").String() + if swaggerPath != "" { + s.BindHookHandler(swaggerPath+"/*", ghttp.HookBeforeServe, func(r *ghttp.Request) { + content := gstr.ReplaceByMap(consts.SwaggerUITemplate, map[string]string{ + `{SwaggerUIDocUrl}`: g.Cfg().MustGet(ctx, "server.openapiPath").String(), + `{SwaggerUIDocNamePlaceHolder}`: gstr.TrimRight(fmt.Sprintf(`//%s`, r.Host)), + }) + r.Response.Write(content) + r.ExitAll() }) - r.Response.Write(content) - r.ExitAll() - }) + } //重新配置swaggerUI静态页面--end-- enhanceOpenAPIDoc(s) //注册相关组件 diff --git a/library/libRouter/router.go b/library/libRouter/router.go index 77963ab..2bce042 100644 --- a/library/libRouter/router.go +++ b/library/libRouter/router.go @@ -15,9 +15,25 @@ import ( "reflect" ) +// RouterAutoBindBefore 收集需要被绑定的不验证用户登录状态的控制器,自动绑定 +// 路由的方法命名规则必须为:BeforeBindXXXController +func RouterAutoBindBefore(ctx context.Context, R interface{}, group *ghttp.RouterGroup) (err error) { + return bind(ctx, R, group, "before") +} + // RouterAutoBind 收集需要被绑定的控制器,自动绑定 // 路由的方法命名规则必须为:BindXXXController func RouterAutoBind(ctx context.Context, R interface{}, group *ghttp.RouterGroup) (err error) { + return bind(ctx, R, group) +} + +func bind(ctx context.Context, R interface{}, group *ghttp.RouterGroup, option ...string) (err error) { + var rule string + if len(option) > 0 && option[0] == "before" { + rule = `^BeforeBind(.+)Controller$` + } else { + rule = `^Bind(.+)Controller$` + } //TypeOf会返回目标数据的类型,比如int/float/struct/指针等 typ := reflect.TypeOf(R) //ValueOf返回目标数据的的值 @@ -27,7 +43,7 @@ func RouterAutoBind(ctx context.Context, R interface{}, group *ghttp.RouterGroup return } for i := 0; i < typ.NumMethod(); i++ { - if match := gregex.IsMatchString(`^Bind(.+)Controller$`, typ.Method(i).Name); match { + if match := gregex.IsMatchString(rule, typ.Method(i).Name); match { //调用绑定方法 val.Method(i).Call([]reflect.Value{reflect.ValueOf(ctx), reflect.ValueOf(group)}) } diff --git a/library/upload/local.go b/library/upload/local.go index 9cb81cf..b681e41 100644 --- a/library/upload/local.go +++ b/library/upload/local.go @@ -6,6 +6,7 @@ import ( "fmt" "github.com/gogf/gf/v2/frame/g" "github.com/gogf/gf/v2/net/ghttp" + "github.com/gogf/gf/v2/text/gstr" "github.com/tiger1103/gfast/v3/api/v1/system" "github.com/tiger1103/gfast/v3/internal/app/common/consts" "strings" @@ -21,7 +22,19 @@ func (s *Local) Upload(ctx context.Context, file *ghttp.UploadFile) (result syst return } r := g.RequestFromCtx(ctx) - urlPerfix := fmt.Sprintf("//%s/", r.Host) + host := r.Host + forwardedHost := r.Header.Get("X-Forwarded-Host") + if forwardedHost != "" { + host = forwardedHost + } + uri := r.Header.Get("X-Original-URI") + if uri != "" { + pos := gstr.PosI(uri, "/api/v1") + if pos >= 0 { + uri = gstr.SubStr(uri, 1, pos) + } + } + urlPerfix := fmt.Sprintf("//%s/%s", host, uri) p := strings.Trim(consts.UploadPath, "/") sp := s.getStaticPath(ctx) if sp != "" { diff --git a/manifest/config/config.yaml.bak b/manifest/config/config.yaml.bak index f05324b..83a6464 100644 --- a/manifest/config/config.yaml.bak +++ b/manifest/config/config.yaml.bak @@ -45,7 +45,8 @@ gfToken: maxRefresh: 5400 multiLogin: true encryptKey: "49c54195e750b04e74a8429b17896586" - cacheModel: "redis" + cacheModel: "dist" #缓存模式 memory OR redis OR dist + distPath: "./resource/data/distTokenDb" #使用磁盘缓存时配置数据缓存的目录 excludePaths: - "/api/v1/system/login" @@ -68,7 +69,8 @@ system: notCheckAuthAdminIds: [1,2,31] #无需验证后台权限的用户id dataDir: "./resource/data" cache: - model: "redis" #缓存模式 memory OR redis + model: "dist" #缓存模式 memory OR redis OR dist + distPath: "./resource/data/distCacheDb" #使用磁盘缓存时配置数据缓存的目录 prefix: "gFastV3Cache:" #缓存前缀 #casbin配置 @@ -123,7 +125,7 @@ gen: # 消息队列 mqueue: - enable: true + enable: false closeWaitTime: 5 # 关闭服务器时等待刷盘时间(秒),最好不要小于5 driver: "diskQueue" # 驱动类型 nsq|diskQueue|rocketmq channel: "channel" # 默认频道名称 diff --git a/resource/template/vm/go/controller.template b/resource/template/vm/go/controller.template index 8e94adf..1da24c1 100644 --- a/resource/template/vm/go/controller.template +++ b/resource/template/vm/go/controller.template @@ -49,7 +49,7 @@ import ( {{if gt (len .table.LinkedTables) 0}} "errors" {{if ne $.table.ModuleName "system"}} - systemService "github.com/tiger1103/gfast/v3/internal/app/system/service" + systemService "{{.goModName}}/internal/app/system/service" {{else}} "{{.goModName}}/internal/app/system/service" {{end}} @@ -70,7 +70,7 @@ import ( systemApi "{{$.goModName}}/api/v1/system" {{end}} {{if $hasCommonService}} - commonService "github.com/tiger1103/gfast/v3/internal/app/common/service" + commonService "{{.goModName}}/internal/app/common/service" {{end}} "{{$.goModName}}/{{$.table.PackageName}}/model" {{end}} diff --git a/resource/template/vm/go/logic.template b/resource/template/vm/go/logic.template index fa63da7..69f9192 100644 --- a/resource/template/vm/go/logic.template +++ b/resource/template/vm/go/logic.template @@ -54,7 +54,7 @@ import ( "github.com/gogf/gf/v2/util/gconv" {{end}} {{if $useCommonService}} - commonService "github.com/tiger1103/gfast/v3/internal/app/common/service" + commonService "{{.goModName}}/internal/app/common/service" {{end}} "{{.goModName}}/{{.table.PackageName}}/dao" "{{.goModName}}/{{.table.PackageName}}/model" diff --git a/resource/template/vm/go/model.template b/resource/template/vm/go/model.template index 28dadbb..e11c30c 100644 --- a/resource/template/vm/go/model.template +++ b/resource/template/vm/go/model.template @@ -43,9 +43,9 @@ import ( "github.com/gogf/gf/v2/os/gtime" {{end}} "github.com/gogf/gf/v2/util/gmeta" - comModel "github.com/tiger1103/gfast/v3/internal/app/common/model" + comModel "{{.goModName}}/internal/app/common/model" {{if $hasUser}} - systemModel "github.com/tiger1103/gfast/v3/internal/app/system/model" + systemModel "{{.goModName}}/internal/app/system/model" {{end}} ) diff --git a/resource/template/vm/go/router.template b/resource/template/vm/go/router.template index bef6ed4..78c5a65 100644 --- a/resource/template/vm/go/router.template +++ b/resource/template/vm/go/router.template @@ -23,10 +23,15 @@ type Router struct{} //// func (router *Router) BindController(ctx context.Context, group *ghttp.RouterGroup) { group.Group("/{{.modulePath}}", func(group *ghttp.RouterGroup) { + //context拦截器 + group.Middleware(service.Middleware().Ctx) + //自动绑定定义的控制器 + if err := libRouter.RouterAutoBindBefore(ctx, router, group); err != nil { + panic(err) + } //登录验证拦截 service.GfToken().Middleware(group) - //context拦截器 - group.Middleware(service.Middleware().Ctx, service.Middleware().Auth) + group.Middleware(service.Middleware().Auth) //后台操作日志记录 group.Hook("/*", ghttp.HookAfterOutput, service.OperateLog().OperationLog) //自动绑定定义的控制器