refactor(service): 添加上下文参数并更新依赖

- 在多个函数中添加 context.Context 参数,以支持上下文传递
- 更新 go.mod 文件中的依赖版本:
  - go 1.23
  - github.com/go-sql-driver/mysql v1.9.0
  - 添加多个 opentelemetry 相关依赖
  - 更新部分间接依赖版本
This commit is contained in:
danial
2025-02-21 23:32:58 +08:00
parent 98761d038b
commit 015b5b6553
20 changed files with 347 additions and 126 deletions

48
go.mod
View File

@@ -1,40 +1,52 @@
module gateway
go 1.22.0
go 1.23
toolchain go1.22.11
toolchain go1.23.6
require github.com/beego/beego/v2 v2.3.4
require (
github.com/allegro/bigcache/v3 v3.1.0
github.com/bytedance/gopkg v0.1.2-0.20240828084325-780ca9ee70fb
github.com/bytedance/sonic v1.12.8
github.com/bytedance/sonic v1.12.9
github.com/carlmjohnson/requests v0.24.3
github.com/duke-git/lancet/v2 v2.3.4
github.com/go-sql-driver/mysql v1.8.1
github.com/go-sql-driver/mysql v1.9.0
github.com/go-stomp/stomp/v3 v3.1.3
github.com/google/uuid v1.6.0
github.com/mohae/deepcopy v0.0.0-20170929034955-c48cc78d4826
github.com/pkg/profile v1.7.0
github.com/rs/xid v1.6.0
github.com/samber/slog-multi v1.4.0
github.com/shopspring/decimal v1.4.0
github.com/widuu/gojson v0.0.0-20170212122013-7da9d2cd949b
go.opentelemetry.io/contrib/bridges/otelslog v0.9.0
go.opentelemetry.io/otel v1.34.0
go.opentelemetry.io/otel/exporters/otlp/otlplog/otlploghttp v0.10.0
go.opentelemetry.io/otel/exporters/otlp/otlpmetric/otlpmetrichttp v1.34.0
go.opentelemetry.io/otel/exporters/otlp/otlptrace v1.34.0
go.opentelemetry.io/otel/exporters/otlp/otlptrace/otlptracehttp v1.34.0
go.opentelemetry.io/otel/log v0.10.0
go.opentelemetry.io/otel/sdk v1.34.0
go.opentelemetry.io/otel/sdk/log v0.10.0
go.opentelemetry.io/otel/sdk/metric v1.34.0
go.opentelemetry.io/otel/trace v1.34.0
)
require (
filippo.io/edwards25519 v1.1.0 // indirect
github.com/allegro/bigcache/v3 v3.1.0 // indirect
github.com/beorn7/perks v1.0.1 // indirect
github.com/bytedance/sonic/loader v0.2.3 // indirect
github.com/cenkalti/backoff/v4 v4.3.0 // indirect
github.com/cespare/xxhash/v2 v2.3.0 // indirect
github.com/cloudwego/base64x v0.1.5 // indirect
github.com/davecgh/go-spew v1.1.2-0.20180830191138-d8f796af33cc // indirect
github.com/felixge/fgprof v0.9.3 // indirect
github.com/google/pprof v0.0.0-20211214055906-6f57359322fd // indirect
github.com/go-logr/logr v1.4.2 // indirect
github.com/go-logr/stdr v1.2.2 // indirect
github.com/grpc-ecosystem/grpc-gateway/v2 v2.25.1 // indirect
github.com/hashicorp/golang-lru v1.0.2 // indirect
github.com/klauspost/compress v1.17.11 // indirect
github.com/klauspost/cpuid/v2 v2.2.9 // indirect
github.com/kr/text v0.2.0 // indirect
github.com/lib/pq v1.10.9 // indirect
github.com/mattn/go-sqlite3 v2.0.3+incompatible // indirect
github.com/mitchellh/mapstructure v1.5.0 // indirect
@@ -44,16 +56,22 @@ require (
github.com/prometheus/client_model v0.6.1 // indirect
github.com/prometheus/common v0.62.0 // indirect
github.com/prometheus/procfs v0.15.1 // indirect
github.com/rogpeppe/go-internal v1.13.1 // indirect
github.com/samber/lo v1.49.1 // indirect
github.com/shiena/ansicolor v0.0.0-20230509054315-a9deabde6e02 // indirect
github.com/twitchyliquid64/golang-asm v0.15.1 // indirect
github.com/valyala/bytebufferpool v1.0.0 // indirect
golang.org/x/arch v0.13.0 // indirect
golang.org/x/crypto v0.32.0 // indirect
go.opentelemetry.io/auto/sdk v1.1.0 // indirect
go.opentelemetry.io/otel/metric v1.34.0 // indirect
go.opentelemetry.io/proto/otlp v1.5.0 // indirect
golang.org/x/arch v0.14.0 // indirect
golang.org/x/crypto v0.33.0 // indirect
golang.org/x/exp v0.0.0-20250128182459-e0ece0dbea4c // indirect
golang.org/x/net v0.34.0 // indirect
golang.org/x/sys v0.29.0 // indirect
golang.org/x/text v0.21.0 // indirect
golang.org/x/net v0.35.0 // indirect
golang.org/x/sys v0.30.0 // indirect
golang.org/x/text v0.22.0 // indirect
google.golang.org/genproto/googleapis/api v0.0.0-20250115164207-1a7da9e5054f // indirect
google.golang.org/genproto/googleapis/rpc v0.0.0-20250115164207-1a7da9e5054f // indirect
google.golang.org/grpc v1.69.4 // indirect
google.golang.org/protobuf v1.36.4 // indirect
gopkg.in/yaml.v3 v3.0.1 // indirect
)

89
go.sum
View File

@@ -8,22 +8,20 @@ github.com/beorn7/perks v1.0.1 h1:VlbKKnNfV8bJzeqoa4cOKqO6bYr3WgKZxO8Z16+hsOM=
github.com/beorn7/perks v1.0.1/go.mod h1:G2ZrVWU2WbWT9wwq4/hrbKbnv/1ERSJQ0ibhJ6rlkpw=
github.com/bytedance/gopkg v0.1.2-0.20240828084325-780ca9ee70fb h1:glte+Ka6C5efXn/QlEAE/wwNrvE+3mYo/ce69fpvtrE=
github.com/bytedance/gopkg v0.1.2-0.20240828084325-780ca9ee70fb/go.mod h1:576VvJ+eJgyCzdjS+c4+77QF3p7ubbtiKARP3TxducM=
github.com/bytedance/sonic v1.12.8 h1:4xYRVRlXIgvSZ4e8iVTlMF5szgpXd4AfvuWgA8I8lgs=
github.com/bytedance/sonic v1.12.8/go.mod h1:uVvFidNmlt9+wa31S1urfwwthTWteBgG0hWuoKAXTx8=
github.com/bytedance/sonic v1.12.9 h1:Od1BvK55NnewtGaJsTDeAOSnLVO2BTSLOe0+ooKokmQ=
github.com/bytedance/sonic v1.12.9/go.mod h1:uVvFidNmlt9+wa31S1urfwwthTWteBgG0hWuoKAXTx8=
github.com/bytedance/sonic/loader v0.1.1/go.mod h1:ncP89zfokxS5LZrJxl5z0UJcsk4M4yY2JpfqGeCtNLU=
github.com/bytedance/sonic/loader v0.2.3 h1:yctD0Q3v2NOGfSWPLPvG2ggA2kV6TS6s4wioyEqssH0=
github.com/bytedance/sonic/loader v0.2.3/go.mod h1:N8A3vUdtUebEY2/VQC0MyhYeKUFosQU6FxH2JmUe6VI=
github.com/carlmjohnson/requests v0.24.3 h1:LYcM/jVIVPkioigMjEAnBACXl2vb42TVqiC8EYNoaXQ=
github.com/carlmjohnson/requests v0.24.3/go.mod h1:duYA/jDnyZ6f3xbcF5PpZ9N8clgopubP2nK5i6MVMhU=
github.com/cenkalti/backoff/v4 v4.3.0 h1:MyRJ/UdXutAwSAT+s3wNd7MfTIcy71VQueUuFK343L8=
github.com/cenkalti/backoff/v4 v4.3.0/go.mod h1:Y3VNntkOUPxTVeUxJ/G5vcM//AlwfmyYozVcomhLiZE=
github.com/cespare/xxhash/v2 v2.3.0 h1:UL815xU9SqsFlibzuggzjXhog7bL6oX9BbNZnL2UFvs=
github.com/cespare/xxhash/v2 v2.3.0/go.mod h1:VGX0DQ3Q6kWi7AoAeZDth3/j3BFtOZR5XLFGgcrjCOs=
github.com/chzyer/logex v1.1.10/go.mod h1:+Ywpsq7O8HXn0nuIou7OrIPyXbp3wmkHB+jjWRnGsAI=
github.com/chzyer/readline v0.0.0-20180603132655-2972be24d48e/go.mod h1:nSuG5e5PlCu98SY8svDHJxuZscDgtXS6KTTbou5AhLI=
github.com/chzyer/test v0.0.0-20180213035817-a1ea475d72b1/go.mod h1:Q3SI9o4m/ZMnBNeIyt5eFwwo7qiLfzFZmjNmxjkiQlU=
github.com/cloudwego/base64x v0.1.5 h1:XPciSp1xaq2VCSt6lF0phncD4koWyULpl5bUxbfCyP4=
github.com/cloudwego/base64x v0.1.5/go.mod h1:0zlkT4Wn5C6NdauXdJRhSKRlJvmclQ1hhJgA0rcu/8w=
github.com/cloudwego/iasm v0.2.0/go.mod h1:8rXZaNYT2n95jn+zTI1sDr+IgcD2GVs0nlbbQPiEFhY=
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/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38=
github.com/davecgh/go-spew v1.1.2-0.20180830191138-d8f796af33cc h1:U9qPSI2PIWSS1VwoXQT9A3Wy9MM3WgvqSxFWenqJduM=
@@ -32,23 +30,27 @@ github.com/duke-git/lancet/v2 v2.3.4 h1:8XGI7P9w+/GqmEBEXYaH/XuNiM0f4/90Ioti0IvY
github.com/duke-git/lancet/v2 v2.3.4/go.mod h1:zGa2R4xswg6EG9I6WnyubDbFO/+A/RROxIbXcwryTsc=
github.com/elazarl/go-bindata-assetfs v1.0.1 h1:m0kkaHRKEu7tUIUFVwhGGGYClXvyl4RE03qmvRTNfbw=
github.com/elazarl/go-bindata-assetfs v1.0.1/go.mod h1:v+YaWX3bdea5J/mo8dSETolEo7R71Vk1u8bnjau5yw4=
github.com/felixge/fgprof v0.9.3 h1:VvyZxILNuCiUCSXtPtYmmtGvb65nqXh2QFWc0Wpf2/g=
github.com/felixge/fgprof v0.9.3/go.mod h1:RdbpDgzqYVh/T9fPELJyV7EYJuHB55UTEULNun8eiPw=
github.com/go-sql-driver/mysql v1.8.1 h1:LedoTUt/eveggdHS9qUFC1EFSa8bU2+1pZjSRpvNJ1Y=
github.com/go-sql-driver/mysql v1.8.1/go.mod h1:wEBSXgmK//2ZFJyE+qWnIsVGmvmEKlqwuVSjsCm7DZg=
github.com/go-logr/logr v1.2.2/go.mod h1:jdQByPbusPIv2/zmleS9BjJVeZ6kBagPoEUsqbVz/1A=
github.com/go-logr/logr v1.4.2 h1:6pFjapn8bFcIbiKo3XT4j/BhANplGihG6tvd+8rYgrY=
github.com/go-logr/logr v1.4.2/go.mod h1:9T104GzyrTigFIr8wt5mBrctHMim0Nb2HLGrmQ40KvY=
github.com/go-logr/stdr v1.2.2 h1:hSWxHoqTgW2S2qGc0LTAI563KZ5YKYRhT3MFKZMbjag=
github.com/go-logr/stdr v1.2.2/go.mod h1:mMo/vtBO5dYbehREoey6XUKy/eSumjCCveDpRre4VKE=
github.com/go-sql-driver/mysql v1.9.0 h1:Y0zIbQXhQKmQgTp44Y1dp3wTXcn804QoTptLZT1vtvo=
github.com/go-sql-driver/mysql v1.9.0/go.mod h1:pDetrLJeA3oMujJuvXc8RJoasr589B6A9fwzD3QMrqw=
github.com/go-stomp/stomp/v3 v3.1.3 h1:5/wi+bI38O1Qkf2cc7Gjlw7N5beHMWB/BxpX+4p/MGI=
github.com/go-stomp/stomp/v3 v3.1.3/go.mod h1:ztzZej6T2W4Y6FlD+Tb5n7HQP3/O5UNQiuC169pIp10=
github.com/golang/mock v1.6.0 h1:ErTB+efbowRARo13NNdxyJji2egdxLGQhRaY+DUumQc=
github.com/golang/mock v1.6.0/go.mod h1:p6yTPP+5HYm5mzsMV8JkE6ZKdX+/wYM6Hr+LicevLPs=
github.com/golang/protobuf v1.5.4 h1:i7eJL8qZTpSEXOPTxNKhASYpMn+8e5Q6AdndVa1dWek=
github.com/golang/protobuf v1.5.4/go.mod h1:lnTiLA8Wa4RWRcIUkrtSVa5nRhsEGBg48fD6rSs7xps=
github.com/google/go-cmp v0.6.0 h1:ofyhxvXcZhMsU5ulbFiLKl/XBFqE1GSq7atu8tAmTRI=
github.com/google/go-cmp v0.6.0/go.mod h1:17dUlkBOakJ0+DkrSSNjCkIjxS6bF9zb3elmeNGIjoY=
github.com/google/pprof v0.0.0-20211214055906-6f57359322fd h1:1FjCyPC+syAzJ5/2S8fqdZK1R22vvA0J7JZKcuOIQ7Y=
github.com/google/pprof v0.0.0-20211214055906-6f57359322fd/go.mod h1:KgnwoLYCZ8IQu3XUZ8Nc/bM9CCZFOyjUNOSygVozoDg=
github.com/google/uuid v1.6.0 h1:NIvaJDMOsjHA8n1jAhLSgzrAzy1Hgr+hNrb57e+94F0=
github.com/google/uuid v1.6.0/go.mod h1:TIyPZe4MgqvfeYDBFedMoGGpEw/LqOeaOT+nhxU+yHo=
github.com/grpc-ecosystem/grpc-gateway/v2 v2.25.1 h1:VNqngBF40hVlDloBruUehVYC3ArSgIyScOAyMRqBxRg=
github.com/grpc-ecosystem/grpc-gateway/v2 v2.25.1/go.mod h1:RBRO7fro65R6tjKzYgLAFo0t1QEXY1Dp+i/bvpRiqiQ=
github.com/hashicorp/golang-lru v1.0.2 h1:dV3g9Z/unq5DpblPpw+Oqcv4dU/1omnb4Ok8iPY6p1c=
github.com/hashicorp/golang-lru v1.0.2/go.mod h1:iADmTwqILo4mZ8BN3D2Q6+9jd8WM5uGBxy+E8yxSoD4=
github.com/ianlancetaylor/demangle v0.0.0-20210905161508-09a460cdf81d/go.mod h1:aYm2/VgdVmcIU8iMfdMvDMsRAQjcfZSKFby6HOFvi/w=
github.com/klauspost/compress v1.17.11 h1:In6xLpyWOi1+C7tXUUWv2ot1QvBjxevKAaI6IXrJmUc=
github.com/klauspost/compress v1.17.11/go.mod h1:pMDklpSncoRMuLFrf1W9Ss9KT+0rH90U12bZKk7uwG0=
github.com/klauspost/cpuid/v2 v2.0.9/go.mod h1:FInQzS24/EEf25PyTYn52gqo7WaD8xa0213Md/qVLRg=
@@ -74,8 +76,6 @@ github.com/mohae/deepcopy v0.0.0-20170929034955-c48cc78d4826 h1:RWengNIwukTxcDr9
github.com/mohae/deepcopy v0.0.0-20170929034955-c48cc78d4826/go.mod h1:TaXosZuwdSHYgviHp1DAtfrULt5eUgsSMsZf+YrPgl8=
github.com/munnerz/goautoneg v0.0.0-20191010083416-a7dc8b61c822 h1:C3w9PqII01/Oq1c1nUAm88MOHcQC9l5mIlSMApZMrHA=
github.com/munnerz/goautoneg v0.0.0-20191010083416-a7dc8b61c822/go.mod h1:+n7T8mK8HuQTcFwEeznm/DIxMOiR9yIdICNftLE1DvQ=
github.com/pkg/profile v1.7.0 h1:hnbDkaNWPCLMO9wGLdBFTIZvzDrDfBM2072E1S9gJkA=
github.com/pkg/profile v1.7.0/go.mod h1:8Uer0jas47ZQMJ7VD+OHknK4YDY07LPUC6dEvqDjvNo=
github.com/pmezard/go-difflib v1.0.0/go.mod h1:iKH77koFhYxTK1pcRnkKkqfTogsbg7gZNVY4sRDYZ/4=
github.com/pmezard/go-difflib v1.0.1-0.20181226105442-5d4384ee4fb2 h1:Jamvg5psRIccs7FGNTlIRMkT8wgtp5eCXdBlqhYGL6U=
github.com/pmezard/go-difflib v1.0.1-0.20181226105442-5d4384ee4fb2/go.mod h1:iKH77koFhYxTK1pcRnkKkqfTogsbg7gZNVY4sRDYZ/4=
@@ -91,6 +91,10 @@ github.com/rogpeppe/go-internal v1.13.1 h1:KvO1DLK/DRN07sQ1LQKScxyZJuNnedQ5/wKSR
github.com/rogpeppe/go-internal v1.13.1/go.mod h1:uMEvuHeurkdAXX61udpOXGD/AzZDWNMNyH2VO9fmH0o=
github.com/rs/xid v1.6.0 h1:fV591PaemRlL6JfRxGDEPl69wICngIQ3shQtzfy2gxU=
github.com/rs/xid v1.6.0/go.mod h1:7XoLgs4eV+QndskICGsho+ADou8ySMSjJKDIan90Nz0=
github.com/samber/lo v1.49.1 h1:4BIFyVfuQSEpluc7Fua+j1NolZHiEHEpaSEKdsH0tew=
github.com/samber/lo v1.49.1/go.mod h1:dO6KHFzUKXgP8LDhU0oI8d2hekjXnGOu0DB8Jecxd6o=
github.com/samber/slog-multi v1.4.0 h1:pwlPMIE7PrbTHQyKWDU+RIoxP1+HKTNOujk3/kdkbdg=
github.com/samber/slog-multi v1.4.0/go.mod h1:FsQ4Uv2L+E/8TZt+/BVgYZ1LoDWCbfCU21wVIoMMrO8=
github.com/shiena/ansicolor v0.0.0-20230509054315-a9deabde6e02 h1:v9ezJDHA1XGxViAUSIoO/Id7Fl63u6d0YmsAm+/p2hs=
github.com/shiena/ansicolor v0.0.0-20230509054315-a9deabde6e02/go.mod h1:RF16/A3L0xSa0oSERcnhd8Pu3IXSDZSK2gmGIMsttFE=
github.com/shopspring/decimal v1.4.0 h1:bxl37RwXBklmTi0C79JfXCEBD1cqqHt0bbgBAGFp81k=
@@ -111,20 +115,48 @@ github.com/valyala/bytebufferpool v1.0.0/go.mod h1:6bBcMArwyJ5K/AmCkWv1jt77kVWyC
github.com/widuu/gojson v0.0.0-20170212122013-7da9d2cd949b h1:ieRJ8K7QAPWWltEOv7rzMruuPd7gbeAqTaBFhUECIy0=
github.com/widuu/gojson v0.0.0-20170212122013-7da9d2cd949b/go.mod h1:9W1pyetRkwXqjR9tjOSrSuhGHBK0EqXoQSwWbhBHHwA=
github.com/yuin/goldmark v1.3.5/go.mod h1:mwnBkeHKe2W/ZEtQ+71ViKU8L12m81fl3OWwC1Zlc8k=
golang.org/x/arch v0.13.0 h1:KCkqVVV1kGg0X87TFysjCJ8MxtZEIU4Ja/yXGeoECdA=
golang.org/x/arch v0.13.0/go.mod h1:FEVrYAQjsQXMVJ1nsMoVVXPZg6p2JE2mx8psSWTDQys=
go.opentelemetry.io/auto/sdk v1.1.0 h1:cH53jehLUN6UFLY71z+NDOiNJqDdPRaXzTel0sJySYA=
go.opentelemetry.io/auto/sdk v1.1.0/go.mod h1:3wSPjt5PWp2RhlCcmmOial7AvC4DQqZb7a7wCow3W8A=
go.opentelemetry.io/contrib/bridges/otelslog v0.9.0 h1:N+78eXSlu09kii5nkiM+01YbtWe01oZLPPLhNlEKhus=
go.opentelemetry.io/contrib/bridges/otelslog v0.9.0/go.mod h1:/2KhfLAhtQpgnhIk1f+dftA3fuuMcZjiz//Dc9yfaEs=
go.opentelemetry.io/otel v1.34.0 h1:zRLXxLCgL1WyKsPVrgbSdMN4c0FMkDAskSTQP+0hdUY=
go.opentelemetry.io/otel v1.34.0/go.mod h1:OWFPOQ+h4G8xpyjgqo4SxJYdDQ/qmRH+wivy7zzx9oI=
go.opentelemetry.io/otel/exporters/otlp/otlplog/otlploghttp v0.10.0 h1:q/heq5Zh8xV1+7GoMGJpTxM2Lhq5+bFxB29tshuRuw0=
go.opentelemetry.io/otel/exporters/otlp/otlplog/otlploghttp v0.10.0/go.mod h1:leO2CSTg0Y+LyvmR7Wm4pUxE8KAmaM2GCVx7O+RATLA=
go.opentelemetry.io/otel/exporters/otlp/otlpmetric/otlpmetrichttp v1.34.0 h1:opwv08VbCZ8iecIWs+McMdHRcAXzjAeda3uG2kI/hcA=
go.opentelemetry.io/otel/exporters/otlp/otlpmetric/otlpmetrichttp v1.34.0/go.mod h1:oOP3ABpW7vFHulLpE8aYtNBodrHhMTrvfxUXGvqm7Ac=
go.opentelemetry.io/otel/exporters/otlp/otlptrace v1.34.0 h1:OeNbIYk/2C15ckl7glBlOBp5+WlYsOElzTNmiPW/x60=
go.opentelemetry.io/otel/exporters/otlp/otlptrace v1.34.0/go.mod h1:7Bept48yIeqxP2OZ9/AqIpYS94h2or0aB4FypJTc8ZM=
go.opentelemetry.io/otel/exporters/otlp/otlptrace/otlptracehttp v1.34.0 h1:BEj3SPM81McUZHYjRS5pEgNgnmzGJ5tRpU5krWnV8Bs=
go.opentelemetry.io/otel/exporters/otlp/otlptrace/otlptracehttp v1.34.0/go.mod h1:9cKLGBDzI/F3NoHLQGm4ZrYdIHsvGt6ej6hUowxY0J4=
go.opentelemetry.io/otel/log v0.10.0 h1:1CXmspaRITvFcjA4kyVszuG4HjA61fPDxMb7q3BuyF0=
go.opentelemetry.io/otel/log v0.10.0/go.mod h1:PbVdm9bXKku/gL0oFfUF4wwsQsOPlpo4VEqjvxih+FM=
go.opentelemetry.io/otel/metric v1.34.0 h1:+eTR3U0MyfWjRDhmFMxe2SsW64QrZ84AOhvqS7Y+PoQ=
go.opentelemetry.io/otel/metric v1.34.0/go.mod h1:CEDrp0fy2D0MvkXE+dPV7cMi8tWZwX3dmaIhwPOaqHE=
go.opentelemetry.io/otel/sdk v1.34.0 h1:95zS4k/2GOy069d321O8jWgYsW3MzVV+KuSPKp7Wr1A=
go.opentelemetry.io/otel/sdk v1.34.0/go.mod h1:0e/pNiaMAqaykJGKbi+tSjWfNNHMTxoC9qANsCzbyxU=
go.opentelemetry.io/otel/sdk/log v0.10.0 h1:lR4teQGWfeDVGoute6l0Ou+RpFqQ9vaPdrNJlST0bvw=
go.opentelemetry.io/otel/sdk/log v0.10.0/go.mod h1:A+V1UTWREhWAittaQEG4bYm4gAZa6xnvVu+xKrIRkzo=
go.opentelemetry.io/otel/sdk/metric v1.34.0 h1:5CeK9ujjbFVL5c1PhLuStg1wxA7vQv7ce1EK0Gyvahk=
go.opentelemetry.io/otel/sdk/metric v1.34.0/go.mod h1:jQ/r8Ze28zRKoNRdkjCZxfs6YvBTG1+YIqyFVFYec5w=
go.opentelemetry.io/otel/trace v1.34.0 h1:+ouXS2V8Rd4hp4580a8q23bg0azF2nI8cqLYnC8mh/k=
go.opentelemetry.io/otel/trace v1.34.0/go.mod h1:Svm7lSjQD7kG7KJ/MUHPVXSDGz2OX4h0M2jHBhmSfRE=
go.opentelemetry.io/proto/otlp v1.5.0 h1:xJvq7gMzB31/d406fB8U5CBdyQGw4P399D1aQWU/3i4=
go.opentelemetry.io/proto/otlp v1.5.0/go.mod h1:keN8WnHxOy8PG0rQZjJJ5A2ebUoafqWp0eVQ4yIXvJ4=
golang.org/x/arch v0.14.0 h1:z9JUEZWr8x4rR0OU6c4/4t6E6jOZ8/QBS2bBYBm4tx4=
golang.org/x/arch v0.14.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-20191011191535-87dc89f01550/go.mod h1:yigFU9vqHzYiE8UmvKecakEJjdnWj3jj499lnFckfCI=
golang.org/x/crypto v0.32.0 h1:euUpcYgM8WcP71gNpTqQCn6rC2t6ULUPiOzfWaXVVfc=
golang.org/x/crypto v0.32.0/go.mod h1:ZnnJkOaASj8g0AjIduWNlq2NRxL0PlBrbKVyZ6V/Ugc=
golang.org/x/crypto v0.33.0 h1:IOBPskki6Lysi0lo9qQvbxiQ+FvsCC/YWOecCHAixus=
golang.org/x/crypto v0.33.0/go.mod h1:bVdXmD7IV/4GdElGPozy6U7lWdRXA4qyRVGJV57uQ5M=
golang.org/x/exp v0.0.0-20250128182459-e0ece0dbea4c h1:KL/ZBHXgKGVmuZBZ01Lt57yE5ws8ZPSkkihmEyq7FXc=
golang.org/x/exp v0.0.0-20250128182459-e0ece0dbea4c/go.mod h1:tujkw807nyEEAamNbDrEGzRav+ilXA7PCRAd6xsmwiU=
golang.org/x/mod v0.4.2/go.mod h1:s0Qsj1ACt9ePp/hMypM3fl4fZqREWJwdYDEqhRiZZUA=
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-20210405180319-a5a99cb37ef4/go.mod h1:p54w0d4576C0XHj96bSt6lcn1PtDYWL6XObtHCRCNQM=
golang.org/x/net v0.34.0 h1:Mb7Mrk043xzHgnRM88suvJFwzVrRfHEHJEl5/71CKw0=
golang.org/x/net v0.34.0/go.mod h1:di0qlW3YNM5oh6GqDGQr92MyTozJPmybPK4Ev/Gm31k=
golang.org/x/net v0.35.0 h1:T5GQRQb2y08kTAByq9L4/bz8cipCdA8FbRTXewonqY8=
golang.org/x/net v0.35.0/go.mod h1:EglIi67kWsHKlRzzVMUD93VMSWGFOMSZgxFjparz1Qk=
golang.org/x/sync v0.0.0-20190423024810-112230192c58/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM=
golang.org/x/sync v0.0.0-20210220032951-036812b2e83c/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM=
golang.org/x/sys v0.0.0-20190215142949-d0b11bdaac8a/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY=
@@ -132,20 +164,25 @@ golang.org/x/sys v0.0.0-20190412213103-97732733099d/go.mod h1:h1NjWce9XRLGQEsW7w
golang.org/x/sys v0.0.0-20201119102817-f84b799fce68/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
golang.org/x/sys v0.0.0-20210330210617-4fbd30eecc44/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
golang.org/x/sys v0.0.0-20210510120138-977fb7262007/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
golang.org/x/sys v0.0.0-20211007075335-d3039528d8ac/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
golang.org/x/sys v0.29.0 h1:TPYlXGxvx1MGTn2GiZDhnjPA9wZzZeGKHHmKhHYvgaU=
golang.org/x/sys v0.29.0/go.mod h1:/VUhepiaJMQUp4+oa/7Zr1D23ma6VTLIYjOOTFZPUcA=
golang.org/x/sys v0.30.0 h1:QjkSwP/36a20jFYWkSue1YwXzLmsV5Gfq7Eiy72C1uc=
golang.org/x/sys v0.30.0/go.mod h1:/VUhepiaJMQUp4+oa/7Zr1D23ma6VTLIYjOOTFZPUcA=
golang.org/x/term v0.0.0-20201126162022-7de9c90e9dd1/go.mod h1:bj7SfCRtBDWHUb9snDiAeCFNEtKQo2Wmx5Cou7ajbmo=
golang.org/x/text v0.3.0/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ=
golang.org/x/text v0.3.3/go.mod h1:5Zoc/QRtKVWzQhOtBMvqHzDpF6irO9z98xDceosuGiQ=
golang.org/x/text v0.21.0 h1:zyQAAkrwaneQ066sspRyJaG9VNi/YJ1NfzcGB3hZ/qo=
golang.org/x/text v0.21.0/go.mod h1:4IBbMaMmOPCJ8SecivzSH54+73PCFmPWxNTLm+vZkEQ=
golang.org/x/text v0.22.0 h1:bofq7m3/HAFvbF51jz3Q9wLg3jkvSPuiZu/pD1XwgtM=
golang.org/x/text v0.22.0/go.mod h1:YRoo4H8PVmsu+E3Ou7cqLVH8oXWIHVoX0jqUWALQhfY=
golang.org/x/tools v0.0.0-20180917221912-90fa682c2a6e/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ=
golang.org/x/tools v0.0.0-20191119224855-298f0cb1881e/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo=
golang.org/x/tools v0.1.1/go.mod h1:o0xws9oXOQQZyjljx8fwUC0k7L1pTE6eaCbjGeHmOkk=
golang.org/x/xerrors v0.0.0-20190717185122-a985d3407aa7/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0=
golang.org/x/xerrors v0.0.0-20191011141410-1b5146add898/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0=
golang.org/x/xerrors v0.0.0-20200804184101-5ec99f83aff1/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0=
google.golang.org/genproto/googleapis/api v0.0.0-20250115164207-1a7da9e5054f h1:gap6+3Gk41EItBuyi4XX/bp4oqJ3UwuIMl25yGinuAA=
google.golang.org/genproto/googleapis/api v0.0.0-20250115164207-1a7da9e5054f/go.mod h1:Ic02D47M+zbarjYYUlK57y316f2MoN0gjAwI3f2S95o=
google.golang.org/genproto/googleapis/rpc v0.0.0-20250115164207-1a7da9e5054f h1:OxYkA3wjPsZyBylwymxSHa7ViiW1Sml4ToBrncvFehI=
google.golang.org/genproto/googleapis/rpc v0.0.0-20250115164207-1a7da9e5054f/go.mod h1:+2Yz8+CLJbIfL9z73EW45avw8Lmge3xVElCP9zEKi50=
google.golang.org/grpc v1.69.4 h1:MF5TftSMkd8GLw/m0KM6V8CMOCY6NZ1NQDPGFgbTt4A=
google.golang.org/grpc v1.69.4/go.mod h1:vyjdE6jLBI76dgpDojsFGNaHlxdjXN9ghpnd2o7JGZ4=
google.golang.org/protobuf v1.36.4 h1:6A3ZDJHn/eNqc1i+IdefRzy/9PokBTPvcqMySR7NNIM=
google.golang.org/protobuf v1.36.4/go.mod h1:9fA7Ob0pmnwhb644+1+CVWFRbNajQ6iRojtC/QF5bRE=
gopkg.in/check.v1 v0.0.0-20161208181325-20d25e280405/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0=

View File

@@ -44,7 +44,7 @@ func (c *OrderController) OrderUpdate() {
case config.SUCCESS:
flag = service.SolvePaySuccess(bankOrderId, orderInfo.FactAmount, orderInfo.BankTransId, "手动修正至成功")
case config.FAIL:
flag = service.SolvePayFail(bankOrderId, orderInfo.BankTransId, "手动修正至失败")
flag = service.SolvePayFail(c.Ctx.Request.Context(), bankOrderId, orderInfo.BankTransId, "手动修正至失败")
case config.FREEZE_AMOUNT:
// 将这笔订单进行冻结
flag = service.SolveOrderFreeze(bankOrderId)

View File

@@ -27,6 +27,7 @@ import (
"github.com/duke-git/lancet/v2/convertor"
"github.com/duke-git/lancet/v2/random"
"github.com/duke-git/lancet/v2/structs"
"log/slog"
"strconv"
"strings"
"time"
@@ -67,17 +68,17 @@ func (c *ScanController) Scan() {
c.SolveFailJSON(p)
return
}
p = service.JudgeParams(p)
p = service.OrderIsValid(p)
p = service.NotifyUrlIsValid(p)
p = service.OrderPeriodIsValid(p)
p = service.OrderPriceIsValid(p)
p = service.ExValueIsValid(p)
p = service.JudgeParams(c.Ctx.Request.Context(), p)
p = service.OrderIsValid(c.Ctx.Request.Context(), p)
p = service.NotifyUrlIsValid(c.Ctx.Request.Context(), p)
p = service.OrderPeriodIsValid(c.Ctx.Request.Context(), p)
p = service.OrderPriceIsValid(c.Ctx.Request.Context(), p)
p = service.ExValueIsValid(c.Ctx.Request.Context(), p)
if p.Code == -1 {
c.SolveFailJSON(p)
return
}
logs.Info("【BaseGateway】获取商户请求过来的参数", p.Params)
slog.InfoContext(c.Ctx.Request.Context(), "【BaseGateway】获取商户请求过来的参数", p.Params)
// 签名验证
if !utils.Md5MFVerify(p.Params, p.MerchantInfo.MerchantSecret) &&
!utils.Md5TMPMFVerify(p.Params, p.MerchantInfo.MerchantSecret) &&
@@ -143,11 +144,11 @@ func (c *ScanController) Scan() {
if hiddenCfg.Strategy == int(consts.StealRuleTypeStealBlank) {
newBankOrderId, err2 := service.CreateHiddenBlankOrder(&orderInfo, int64(delayDuration))
if err2 != nil {
logs.Info("创建订单失败【偷卡】:%v", err2.Error())
slog.ErrorContext(c.Ctx.Request.Context(), "添加订单关联失败【偷卡】:%v", err2.Error())
}
//添加订单关联
if err2 = service.CreateRelateHideOrderRecord(newBankOrderId, &orderInfo, hiddenCfg, delayDuration); err2 != nil {
logs.Info("添加订单关联失败【偷卡】:%v", err2.Error())
slog.ErrorContext(c.Ctx.Request.Context(), "添加订单关联失败【偷卡】:%v", err2.Error())
}
//错误订单回调上游
//oldBankOrderId := orderInfo.BankOrderId
@@ -161,24 +162,23 @@ func (c *ScanController) Scan() {
if hiddenCfg.Strategy == int(consts.StealRuleTypeStealDelay) {
newBankOrderId, err2 := service.CreateHiddenErrorOrder(&orderInfo, int64(delayDuration))
if err2 != nil {
logs.Info("创建订单失败【偷卡】:%v", err2.Error())
slog.ErrorContext(c.Ctx.Request.Context(), "添加订单关联失败【偷卡】:%v", err2.Error())
}
//添加订单关联
if err2 = service.CreateRelateHideOrderRecord(newBankOrderId, &orderInfo, hiddenCfg, delayDuration); err2 != nil {
logs.Info("添加订单关联失败【偷卡】:%v", err2.Error())
slog.ErrorContext(c.Ctx.Request.Context(), "添加订单关联失败【偷卡】:%v", err2.Error())
}
oldBankOrderId := orderInfo.BankOrderId
//错误订单回调上游
delayPool.Go(func() {
time.Sleep(time.Duration(delayDuration) * time.Second)
//已有的订单回调为失败
service.SolvePayFail(oldBankOrderId, orderInfo.BankTransId, hiddenCfg.ExtraReturnInfo)
service.SolvePayFail(c.Ctx.Request.Context(), oldBankOrderId, orderInfo.BankTransId, hiddenCfg.ExtraReturnInfo)
})
orderInfo.BankOrderId = newBankOrderId
}
}
logs.Info("请求订单信息,订单信息:%+v", orderInfo)
slog.Info("请求订单信息,订单信息:%+v", orderInfo)
cdata := supplier.RedeemCardInfo{}
err = json.Unmarshal([]byte(orderInfo.ExValue), &cdata)
if err != nil {
@@ -194,12 +194,11 @@ func (c *ScanController) Scan() {
if !isAllowed {
logs.Info("IP被限制无法兑换", p.ClientIP)
c.Data["json"] = response.CommonErr(-1, errors.New("提交失败").Error())
service.SolvePayFail(orderInfo.BankOrderId, "", "IP限制无法兑换")
service.SolvePayFail(c.Ctx.Request.Context(), orderInfo.BankOrderId, "", "IP限制无法兑换")
_ = c.ServeJSON()
return
}
logs.Info("获取商户部署信息:%+v", mt)
slog.Info("获取商户部署信息:%+v", mt)
if mt.AutoSettle == config.NO {
params := map[string]any{
"orderNo": orderInfo.BankOrderId,
@@ -224,15 +223,14 @@ func (c *ScanController) Scan() {
supplierByCode := third_party.GetPaySupplierByCode(supplierCode)
if supplierByCode == nil {
// 插入处理失败的动账通知
service.SolvePayFail(orderInfo.BankOrderId, "", "")
logs.Error("获取上游渠道失败,请联系客服", supplierCode)
err = errors.New("获取上游渠道失败,请联系客服")
c.Data["json"] = response.CommonErr(-1, err.Error())
service.SolvePayFail(c.Ctx.Request.Context(), orderInfo.BankOrderId, "", "")
slog.ErrorContext(c.Ctx.Request.Context(), "获取上游渠道失败,请联系客服%v", supplierCode)
c.Data["json"] = response.CommonErr(-1, errors.New("获取上游渠道失败,请联系客服").Error())
_ = c.ServeJSON()
c.StopRun()
return
}
logs.Info("获取供应商信息:%+v", supplierCode)
slog.ErrorContext(c.Ctx.Request.Context(), "获取供应商信息:%+v", supplierByCode)
scanData := supplierByCode.Scan(orderInfo, p.RoadInfo, p.MerchantInfo)
order.InsertCardReturnData(scanData.BankNo, scanData.ReturnData)
if scanData.Status == "00" {
@@ -242,12 +240,11 @@ func (c *ScanController) Scan() {
return
}
// 插入处理失败的动账通知
service.SolvePayFail(orderInfo.BankOrderId, "", scanData.Msg)
service.SolvePayFail(c.Ctx.Request.Context(), orderInfo.BankOrderId, "", scanData.Msg)
p.Msg = scanData.Msg
p.Code = -1
c.SolveFailJSON(p)
return
}
// SolveFailJSON 处理错误的返回

178
internal/otel/init.go Normal file
View File

@@ -0,0 +1,178 @@
package otel
import (
"context"
"github.com/beego/beego/v2/server/web"
beecontext "github.com/beego/beego/v2/server/web/context"
slogmulti "github.com/samber/slog-multi"
"go.opentelemetry.io/contrib/bridges/otelslog"
"go.opentelemetry.io/otel"
"go.opentelemetry.io/otel/attribute"
"go.opentelemetry.io/otel/exporters/otlp/otlplog/otlploghttp"
"go.opentelemetry.io/otel/exporters/otlp/otlpmetric/otlpmetrichttp"
"go.opentelemetry.io/otel/exporters/otlp/otlptrace"
"go.opentelemetry.io/otel/exporters/otlp/otlptrace/otlptracehttp"
"go.opentelemetry.io/otel/log/global"
"go.opentelemetry.io/otel/propagation"
sdklog "go.opentelemetry.io/otel/sdk/log"
sdkMetric "go.opentelemetry.io/otel/sdk/metric"
"go.opentelemetry.io/otel/sdk/resource"
sdktrace "go.opentelemetry.io/otel/sdk/trace"
"log/slog"
"net/http"
"os"
"go.opentelemetry.io/otel/trace"
"time"
)
var (
serviceName = "拉单服务"
collectorURL = "otel-collector.kkknametrans.buzz"
)
func InitTracer() (func(context.Context) error, func(context.Context) error, func(context.Context) error) {
ctx := context.Background()
traceExporter, err := otlptrace.New(
ctx,
otlptracehttp.NewClient(
otlptracehttp.WithInsecure(),
otlptracehttp.WithCompression(otlptracehttp.GzipCompression),
otlptracehttp.WithEndpoint(collectorURL),
),
)
if err != nil {
slog.ErrorContext(ctx, "failed to create trace exporter", slog.String("error", err.Error()))
return nil, nil, nil
}
resources, err := resource.New(
ctx,
resource.WithAttributes(
attribute.String("service.name", serviceName),
attribute.String("library.language", "go"),
),
)
if err != nil {
slog.ErrorContext(ctx, "failed to create resources", slog.String("error", err.Error()))
return nil, nil, nil
}
otel.SetTracerProvider(
sdktrace.NewTracerProvider(
sdktrace.WithSampler(sdktrace.AlwaysSample()),
sdktrace.WithSpanProcessor(sdktrace.NewBatchSpanProcessor(traceExporter,
sdktrace.WithBatchTimeout(30*time.Second),
sdktrace.WithMaxExportBatchSize(100),
)),
sdktrace.WithBatcher(traceExporter),
sdktrace.WithResource(resources),
),
)
// Set up meter provider.
metricExporter, err := otlpmetrichttp.New(
ctx,
otlpmetrichttp.WithInsecure(),
otlpmetrichttp.WithCompression(otlpmetrichttp.GzipCompression),
otlpmetrichttp.WithEndpoint(collectorURL))
if err != nil {
slog.ErrorContext(ctx, "failed to create trace exporter", slog.String("error", err.Error()))
return nil, nil, nil
}
otel.SetMeterProvider(
sdkMetric.NewMeterProvider(
sdkMetric.WithReader(
sdkMetric.NewPeriodicReader(
metricExporter,
sdkMetric.WithInterval(30*time.Second),
),
),
sdkMetric.WithResource(resources),
),
)
logExporter, err := otlploghttp.New(
ctx,
otlploghttp.WithCompression(otlploghttp.GzipCompression),
otlploghttp.WithInsecure(),
otlploghttp.WithEndpoint(collectorURL),
)
if err != nil {
slog.ErrorContext(ctx, "failed to create log exporter", slog.String("error", err.Error()))
return nil, nil, nil
}
loggerProvider := sdklog.NewLoggerProvider(
sdklog.WithProcessor(
sdklog.NewBatchProcessor(logExporter, sdklog.WithExportMaxBatchSize(100)),
),
sdklog.WithResource(resources),
)
global.SetLoggerProvider(loggerProvider)
slog.SetDefault(slog.New(
slogmulti.Fanout(
otelslog.NewHandler(serviceName, otelslog.WithLoggerProvider(loggerProvider)),
slog.NewTextHandler(os.Stdout, &slog.HandlerOptions{
AddSource: true,
Level: slog.LevelDebug,
}),
),
))
return traceExporter.Shutdown, metricExporter.Shutdown, logExporter.Shutdown
}
func Middleware(ctx *beecontext.Context, next web.FilterFunc) {
req := ctx.Request
routeTrace := otel.Tracer("router")
// 提取跟踪上下文
spanCtx := otel.GetTextMapPropagator().Extract(req.Context(), propagation.HeaderCarrier(req.Header))
spanCtx, span := routeTrace.Start(spanCtx, req.URL.Path,
trace.WithAttributes(
attribute.String("http.method", req.Method),
attribute.String("http.url", req.URL.String()),
),
)
//添加slog
defer span.End()
//设置response status_code
defer func() {
if ctx.Request.Response != nil {
span.SetAttributes(attribute.Int("http.status_code", ctx.Request.Response.StatusCode))
}
}()
span.SetAttributes(attribute.String("http.method", ctx.Request.Method))
span.SetAttributes(attribute.String("peer.hostname", ctx.Request.Host))
span.SetAttributes(attribute.String("http.scheme", getScheme(ctx.Request)))
span.SetAttributes(attribute.String("component", "beego"))
ctx.Request = ctx.Request.WithContext(spanCtx)
next(ctx)
}
// Span 抽象span
func Span(ctx context.Context, spanName string) func() {
//tracer :=
_, span := otel.Tracer("service").Start(ctx, spanName)
return func() {
defer span.End()
}
}
func getScheme(req *http.Request) string {
scheme := req.Header.Get("X-Forwarded-Proto")
if scheme == "" && req.TLS != nil {
scheme = "https"
} else if scheme == "" {
scheme = "http"
}
return scheme
}
// CustomHandler 自定义的 slog.Handler
type CustomHandler struct {
slog.Handler
}
// NewCustomHandler 创建一个新的 CustomHandler
func NewCustomHandler(handler slog.Handler) *CustomHandler {
return &CustomHandler{Handler: handler}
}

View File

@@ -2,11 +2,18 @@ package routers
import (
"gateway/internal/controllers/gateway"
"gateway/internal/otel"
"gateway/internal/service/supplier/third_party"
"github.com/beego/beego/v2/server/web"
beecontext "github.com/beego/beego/v2/server/web/context"
)
func init() {
web.InsertFilterChain("*", func(next web.FilterFunc) web.FilterFunc {
return func(ctx *beecontext.Context) {
otel.Middleware(ctx, next)
}
})
// 网关处理
web.Router("/gateway/queryAccountInfo/:channel", &gateway.ScanController{}, "*:QueryAccountInfo")
//提交订单接口

View File

@@ -1,6 +1,7 @@
package service
import (
"context"
"encoding/json"
"errors"
"gateway/internal/config"
@@ -62,16 +63,16 @@ func GetMerchantInfo(params map[string]any) *response.PayBaseResp {
return c
}
func JudgeParams(c *response.PayBaseResp) *response.PayBaseResp {
c = OrderIsValid(c)
c = NotifyUrlIsValid(c)
c = OrderPeriodIsValid(c)
c = OrderPriceIsValid(c)
c = ExValueIsValid(c)
func JudgeParams(ctx context.Context, c *response.PayBaseResp) *response.PayBaseResp {
c = OrderIsValid(ctx, c)
c = NotifyUrlIsValid(ctx, c)
c = OrderPeriodIsValid(ctx, c)
c = OrderPriceIsValid(ctx, c)
c = ExValueIsValid(ctx, c)
return c
}
func ExValueIsValid(c *response.PayBaseResp) *response.PayBaseResp {
func ExValueIsValid(ctx context.Context, c *response.PayBaseResp) *response.PayBaseResp {
if c.Params["exValue"] == "" || len(convertor.ToString(c.Params["exValue"])) == 0 {
c.Code = -1
c.Msg = "扩展参数不能为空"
@@ -122,7 +123,7 @@ func CompleteRechargeExValue(exValueStr string, faceValue string) (string, error
}
// NotifyUrlIsValid 判断回调地址是否符合规则
func NotifyUrlIsValid(c *response.PayBaseResp) *response.PayBaseResp {
func NotifyUrlIsValid(ctx context.Context, c *response.PayBaseResp) *response.PayBaseResp {
if c.Params["notifyUrl"] == "" || len(convertor.ToString(c.Params["notifyUrl"])) == 0 {
c.Code = -1
c.Msg = "订单回调不能为空"
@@ -139,7 +140,7 @@ func OsTypeIsValid(c *response.PayBaseResp) *response.PayBaseResp {
return c
}
func OrderPeriodIsValid(c *response.PayBaseResp) *response.PayBaseResp {
func OrderPeriodIsValid(ctx context.Context, c *response.PayBaseResp) *response.PayBaseResp {
if c.Params["orderPeriod"] == "" || len(convertor.ToString(c.Params["orderPeriod"])) == 0 {
c.Code = -1
c.Msg = "订单过期时间不能为空,默认填写\"1\"即可"
@@ -149,7 +150,7 @@ func OrderPeriodIsValid(c *response.PayBaseResp) *response.PayBaseResp {
}
// OrderPriceIsValid 判断订单金额
func OrderPriceIsValid(c *response.PayBaseResp) *response.PayBaseResp {
func OrderPriceIsValid(ctx context.Context, c *response.PayBaseResp) *response.PayBaseResp {
if c.Params["orderPrice"] == "" || len(convertor.ToString(c.Params["orderPrice"])) == 0 {
c.Code = -1
c.Msg = "订单金额不能为空"
@@ -168,7 +169,7 @@ func OrderPriceIsValid(c *response.PayBaseResp) *response.PayBaseResp {
}
// OrderIsValid 判断金额订单号是否为空或者有重复
func OrderIsValid(c *response.PayBaseResp) *response.PayBaseResp {
func OrderIsValid(ctx context.Context, c *response.PayBaseResp) *response.PayBaseResp {
if c.Params["orderNo"] == "" || len(convertor.ToString(c.Params["orderNo"])) == 0 {
c.Code = -1
c.Msg = "商户订单号不能为空"

View File

@@ -168,9 +168,9 @@ func SolvePaySuccess(bankOrderId string, factAmount float64, trxNo string, cardR
}
// SolvePayFail 处理支付失败
func SolvePayFail(bankOrderId, transId string, cardReturnData string) bool {
func SolvePayFail(ctx context.Context, bankOrderId, transId string, cardReturnData string) bool {
o := orm.NewOrm()
err := o.DoTx(func(ctx context.Context, txOrm orm.TxOrmer) error {
err := o.DoTxWithCtx(ctx, func(ctx context.Context, txOrm orm.TxOrmer) error {
var orderTmp order.OrderInfo
if err := txOrm.Raw("select * from order_info where bank_order_id = ?", bankOrderId).QueryRow(&orderTmp); err != nil || orderTmp.BankOrderId == "" {
return err

View File

@@ -212,7 +212,7 @@ func (c *AppleCardImpl) PayNotify() {
}
return
}
isOk := service.SolvePayFail(orderInfo.BankOrderId, "", params["remark"])
isOk := service.SolvePayFail(c.Ctx.Request.Context(), orderInfo.BankOrderId, "", params["remark"])
if isOk {
c.Ctx.WriteString("SUCCESS")
} else {

View File

@@ -188,7 +188,7 @@ func (c *AppleCardSharkImpl) PayNotify() {
c.Ctx.WriteString("FAIL")
}
} else {
isOk := service.SolvePayFail(orderInfo.BankOrderId, "", "")
isOk := service.SolvePayFail(c.Ctx.Request.Context(), orderInfo.BankOrderId, "", "")
if isOk {
c.Ctx.WriteString("SUCCESS")
} else {

View File

@@ -131,11 +131,11 @@ func (c *DaiLiImpl) PayNotify() {
// paySolveController := new(service.PaySolveController)
if tradeStatus == "FAILED" {
if !service.SolvePayFail(orderInfo.BankOrderId, "", "") {
if !service.SolvePayFail(c.Ctx.Request.Context(), orderInfo.BankOrderId, "", "") {
logs.Error("solve order fail fail")
}
} else if tradeStatus == "CANCELED" {
if !service.SolvePayFail(orderInfo.BankOrderId, "", "") {
if !service.SolvePayFail(c.Ctx.Request.Context(), orderInfo.BankOrderId, "", "") {
logs.Error("solve order cancel fail")
}
} else if tradeStatus == "WAITING_PAYMENT" {
@@ -157,7 +157,7 @@ func (c *DaiLiImpl) PayQuery(orderInfo order.OrderInfo, roadInfo road.RoadInfo)
return false
}
} else if tradeStatus == "FAILED" {
if !service.SolvePayFail(orderInfo.BankOrderId, "", "") {
if !service.SolvePayFail(c.Ctx.Request.Context(), orderInfo.BankOrderId, "", "") {
return false
}
} else {

View File

@@ -194,7 +194,7 @@ func (f *FatSixImpl) PayNotify() {
f.Ctx.WriteString("FAIL")
}
} else {
isOk := service.SolvePayFail(orderInfo.BankOrderId, resp.Tid, "")
isOk := service.SolvePayFail(f.Ctx.Request.Context(), orderInfo.BankOrderId, resp.Tid, "")
if isOk {
f.Ctx.WriteString("SUCCESS")
} else {

View File

@@ -183,7 +183,7 @@ func (c *JDCardImpl) PayNotify() {
c.Ctx.WriteString("FAIL")
}
} else {
isOk := service.SolvePayFail(orderInfo.BankOrderId, "", "")
isOk := service.SolvePayFail(c.Ctx.Request.Context(), orderInfo.BankOrderId, "", "")
if isOk {
c.Ctx.WriteString("SUCCESS")
} else {

View File

@@ -154,11 +154,11 @@ func (c *KuaiFuImpl) PayNotify() {
orderInfo.BankTransId = convertor.ToString(params["trxNo"])
tradeStatus := params["tradeStatus"]
if tradeStatus == "FAILED" {
if !service.SolvePayFail(orderInfo.BankOrderId, "", "") {
if !service.SolvePayFail(c.Ctx.Request.Context(), orderInfo.BankOrderId, "", "") {
logs.Error("solve order fail fail")
}
} else if tradeStatus == "CANCELED" {
if !service.SolvePayFail(orderInfo.BankOrderId, "", "") {
if !service.SolvePayFail(c.Ctx.Request.Context(), orderInfo.BankOrderId, "", "") {
logs.Error("solve order cancel fail")
}
} else if tradeStatus == "WAITING_PAYMENT" {
@@ -213,7 +213,7 @@ func (c *KuaiFuImpl) PayQuery(orderInfo order.OrderInfo, roadInfo road.RoadInfo)
return false
}
} else if tradeStatus == "FAILED" {
if !service.SolvePayFail(orderInfo.BankOrderId, "", "") {
if !service.SolvePayFail(c.Ctx.Request.Context(), orderInfo.BankOrderId, "", "") {
return false
}
} else {

View File

@@ -227,7 +227,7 @@ func (c *MFCardV2Impl) PayNotify() {
}
if params["status"] == "8" { // 失败
logs.Info("【MF178】回调失败订单信息", params)
if !service.SolvePayFail(convertor.ToString(params["order_id"]), "", "") {
if !service.SolvePayFail(c.Ctx.Request.Context(), convertor.ToString(params["order_id"]), "", "") {
logs.Error("solve order fail fail")
}
} else if params["status"] == "9" && factAmount == orderInfo.FactAmount {

View File

@@ -171,7 +171,7 @@ func (c *SelfThirdImpl) PayNotify() {
c.Ctx.WriteString("FAIL")
}
} else {
isOk := service.SolvePayFail(orderInfo.BankOrderId, "", "")
isOk := service.SolvePayFail(c.Ctx.Request.Context(), orderInfo.BankOrderId, "", "")
if isOk {
c.Ctx.WriteString("SUCCESS")
} else {

View File

@@ -146,9 +146,9 @@ func (c *StarSilenceImpl) PayNotify() {
if params["code"] == "1" && factAmount == orderInfo.OrderAmount {
service.SolvePaySuccess(convertor.ToString(params["supplierOrderId"]), factAmount, "", "支付成功")
} else if params["code"] == "1" && factAmount != orderInfo.OrderAmount {
service.SolvePayFail(convertor.ToString(params["supplierOrderId"]), "", fmt.Sprintf("实付金额与订单金额不一致,实际金额%.2f,卡面金额:%.2f", factAmount, orderInfo.OrderAmount))
service.SolvePayFail(c.Ctx.Request.Context(), convertor.ToString(params["supplierOrderId"]), "", fmt.Sprintf("实付金额与订单金额不一致,实际金额%.2f,卡面金额:%.2f", factAmount, orderInfo.OrderAmount))
} else {
if !service.SolvePayFail(convertor.ToString(params["supplierOrderId"]), "", params["msg"]) {
if !service.SolvePayFail(c.Ctx.Request.Context(), convertor.ToString(params["supplierOrderId"]), "", params["msg"]) {
logs.Error("【星寂】处理失败")
}
}

View File

@@ -195,7 +195,7 @@ func (c *TMAllGameImpl) PayNotify() {
c.Ctx.WriteString("FAIL")
}
} else {
isOk := service.SolvePayFail(orderInfo.BankOrderId, "", "")
isOk := service.SolvePayFail(c.Ctx.Request.Context(), orderInfo.BankOrderId, "", "")
if isOk {
c.Ctx.WriteString("SUCCESS")
} else {

View File

@@ -187,7 +187,7 @@ func (c *WalmartSelfImpl) PayNotify() {
c.Ctx.WriteString("FAIL")
}
} else {
isOk := service.SolvePayFail(orderInfo.BankOrderId, "", params["remark"])
isOk := service.SolvePayFail(c.Ctx.Request.Context(), orderInfo.BankOrderId, "", params["remark"])
if isOk {
c.Ctx.WriteString("SUCCESS")
} else {

45
main.go
View File

@@ -1,7 +1,9 @@
package main
import (
"context"
_ "gateway/internal/models"
"gateway/internal/otel"
_ "gateway/internal/routers"
"gateway/internal/schema/query"
"gateway/internal/service"
@@ -10,45 +12,26 @@ import (
_ "gateway/internal/service/supplier/third_party"
"github.com/beego/beego/v2/server/web"
_ "github.com/go-sql-driver/mysql"
"github.com/pkg/profile"
"net/http"
_ "net/http/pprof"
)
func main() {
go func() {
_ = http.ListenAndServe("0.0.0.0:12390", nil)
cleanup1, cleanup2, cleanup3 := otel.InitTracer()
defer func() {
ctx := context.Background()
if cleanup1 != nil {
_ = cleanup1(ctx)
}
if cleanup2 != nil {
_ = cleanup2(ctx)
}
if cleanup3 != nil {
_ = cleanup3(ctx)
}
}()
defer profile.Start(profile.MemProfile,
profile.CPUProfile,
profile.GoroutineProfile,
profile.MutexProfile,
profile.MemProfileAllocs,
profile.MemProfileHeap,
profile.MemProfileRate(1),
).Stop()
web.BConfig.WebConfig.Session.SessionOn = true
go notify.CreateOrderNotifyConsumer()
go query.CreatePayForQueryConsumer()
go service.OrderSettleInit()
go query.CreateSupplierOrderQueryCuConsumer()
web.Run()
}
// RegisterLogs /
//func RegisterLogs() {
// _ = logs.SetLogger(logs.AdapterFile, `{
// "filename":"./logs/app.log",
// "level":4,
// "maxlines":0,
// "maxsize":0,
// "daily":true,
// "maxdays":10,
// "color":true
// }`)
// logs.RegisterFormatter("pattern", &logs.PatternLogFormatter{
// Pattern: "%F:%n|%w%t>> %m",
// WhenFormat: "2006-01-02",
// })
// _ = logs.SetGlobalFormatter("pattern")
//}