新增配置文件和工具版本,更新 Go 依赖项,修复部分控制器逻辑,优化 Excel 导出功能,调整前端 JS 代码,删除不必要的文件,提升代码可读性和维护性。
This commit is contained in:
8
.hintrc
Normal file
8
.hintrc
Normal file
@@ -0,0 +1,8 @@
|
|||||||
|
{
|
||||||
|
"extends": [
|
||||||
|
"development"
|
||||||
|
],
|
||||||
|
"hints": {
|
||||||
|
"meta-viewport": "off"
|
||||||
|
}
|
||||||
|
}
|
||||||
1
.tool-versions
Normal file
1
.tool-versions
Normal file
@@ -0,0 +1 @@
|
|||||||
|
python 3.13.3
|
||||||
@@ -1,7 +1,7 @@
|
|||||||
appname = jhmerchant
|
appname = jhmerchant
|
||||||
httpport = 12307
|
httpport = 12307
|
||||||
#runmode = pro
|
#runmode = pro
|
||||||
runmode = prod
|
runmode = pro
|
||||||
HTTPAddr =0.0.0.0
|
HTTPAddr =0.0.0.0
|
||||||
|
|
||||||
shopAddr = 127.0.0.1:12305
|
shopAddr = 127.0.0.1:12305
|
||||||
@@ -12,11 +12,10 @@ portalAddr = 127.0.0.1:12400
|
|||||||
[logs]
|
[logs]
|
||||||
# 0 ~ 7, 日志级别
|
# 0 ~ 7, 日志级别
|
||||||
#level =7
|
#level =7
|
||||||
level =7
|
level = 0
|
||||||
#日志保存路径
|
#日志保存路径
|
||||||
filepath= ./logs/jhmerchant.log
|
filepath= ./logs/jhmerchant.log
|
||||||
#需要显示的日志信息
|
#需要显示的日志信息
|
||||||
#separate="["emergency", "alert", "critical", "error", "warning", "notice", "info", "debug"]"
|
|
||||||
separate="["emergency","alert","critical","error","warning","notice","info","debug"]"
|
separate="["emergency","alert","critical","error","warning","notice","info","debug"]"
|
||||||
#日志保存最大天数
|
#日志保存最大天数
|
||||||
maxdays=10
|
maxdays=10
|
||||||
|
|||||||
72
go.mod
72
go.mod
@@ -1,58 +1,82 @@
|
|||||||
module merchant
|
module merchant
|
||||||
|
|
||||||
go 1.23.0
|
go 1.24.0
|
||||||
|
|
||||||
toolchain go1.24.2
|
toolchain go1.24.2
|
||||||
|
|
||||||
require github.com/beego/beego/v2 v2.3.2-0.20241006064559-d5830a0fc2ee
|
require github.com/beego/beego/v2 v2.3.8
|
||||||
|
|
||||||
require (
|
require (
|
||||||
github.com/dchest/captcha v1.0.0
|
github.com/dchest/captcha v1.1.0
|
||||||
github.com/duke-git/lancet/v2 v2.3.5
|
github.com/duke-git/lancet/v2 v2.3.5
|
||||||
github.com/go-redis/redis v6.14.2+incompatible
|
github.com/go-redis/redis v6.15.9+incompatible
|
||||||
github.com/go-sql-driver/mysql v1.8.1
|
github.com/go-sql-driver/mysql v1.9.2
|
||||||
|
github.com/natefinch/lumberjack v2.0.0+incompatible
|
||||||
github.com/panjf2000/ants/v2 v2.11.3
|
github.com/panjf2000/ants/v2 v2.11.3
|
||||||
github.com/pkg/errors v0.9.1
|
github.com/pkg/errors v0.9.1
|
||||||
github.com/rs/xid v1.6.0
|
github.com/rs/xid v1.6.0
|
||||||
github.com/skip2/go-qrcode v0.0.0-20200617195104-da1b6568686e
|
github.com/skip2/go-qrcode v0.0.0-20200617195104-da1b6568686e
|
||||||
github.com/tealeg/xlsx v1.0.5
|
github.com/tealeg/xlsx v1.0.5
|
||||||
github.com/xlzd/gotp v0.1.0
|
github.com/xlzd/gotp v0.1.0
|
||||||
github.com/xuri/excelize/v2 v2.9.0
|
github.com/xuri/excelize/v2 v2.9.1
|
||||||
|
go.opentelemetry.io/contrib/bridges/otelzap v0.11.0
|
||||||
|
go.opentelemetry.io/otel v1.36.0
|
||||||
|
go.opentelemetry.io/otel/exporters/otlp/otlplog/otlploghttp v0.12.2
|
||||||
|
go.opentelemetry.io/otel/exporters/otlp/otlpmetric/otlpmetrichttp v1.36.0
|
||||||
|
go.opentelemetry.io/otel/exporters/otlp/otlptrace v1.36.0
|
||||||
|
go.opentelemetry.io/otel/exporters/otlp/otlptrace/otlptracehttp v1.36.0
|
||||||
|
go.opentelemetry.io/otel/log v0.12.2
|
||||||
|
go.opentelemetry.io/otel/sdk v1.36.0
|
||||||
|
go.opentelemetry.io/otel/sdk/log v0.12.2
|
||||||
|
go.opentelemetry.io/otel/sdk/metric v1.36.0
|
||||||
|
go.opentelemetry.io/otel/trace v1.36.0
|
||||||
|
go.uber.org/zap v1.27.0
|
||||||
)
|
)
|
||||||
|
|
||||||
require (
|
require (
|
||||||
filippo.io/edwards25519 v1.1.0 // indirect
|
filippo.io/edwards25519 v1.1.0 // indirect
|
||||||
|
github.com/BurntSushi/toml v1.5.0 // indirect
|
||||||
github.com/beorn7/perks v1.0.1 // indirect
|
github.com/beorn7/perks v1.0.1 // indirect
|
||||||
|
github.com/cenkalti/backoff/v5 v5.0.2 // indirect
|
||||||
github.com/cespare/xxhash/v2 v2.3.0 // indirect
|
github.com/cespare/xxhash/v2 v2.3.0 // indirect
|
||||||
github.com/davecgh/go-spew v1.1.2-0.20180830191138-d8f796af33cc // indirect
|
github.com/davecgh/go-spew v1.1.2-0.20180830191138-d8f796af33cc // indirect
|
||||||
github.com/fsnotify/fsnotify v1.8.0 // indirect
|
github.com/fsnotify/fsnotify v1.9.0 // indirect
|
||||||
|
github.com/go-logr/logr v1.4.2 // indirect
|
||||||
|
github.com/go-logr/stdr v1.2.2 // indirect
|
||||||
|
github.com/google/uuid v1.6.0 // indirect
|
||||||
|
github.com/grpc-ecosystem/grpc-gateway/v2 v2.26.3 // indirect
|
||||||
github.com/hashicorp/golang-lru v1.0.2 // indirect
|
github.com/hashicorp/golang-lru v1.0.2 // indirect
|
||||||
github.com/klauspost/compress v1.17.11 // indirect
|
|
||||||
github.com/kr/text v0.2.0 // indirect
|
|
||||||
github.com/lib/pq v1.10.9 // indirect
|
github.com/lib/pq v1.10.9 // indirect
|
||||||
github.com/mitchellh/mapstructure v1.5.0 // indirect
|
github.com/mitchellh/mapstructure v1.5.0 // indirect
|
||||||
github.com/mohae/deepcopy v0.0.0-20170929034955-c48cc78d4826 // indirect
|
|
||||||
github.com/munnerz/goautoneg v0.0.0-20191010083416-a7dc8b61c822 // indirect
|
github.com/munnerz/goautoneg v0.0.0-20191010083416-a7dc8b61c822 // indirect
|
||||||
github.com/onsi/ginkgo v1.16.5 // indirect
|
github.com/onsi/ginkgo v1.16.5 // indirect
|
||||||
github.com/onsi/gomega v1.35.1 // indirect
|
github.com/onsi/gomega v1.37.0 // indirect
|
||||||
github.com/pmezard/go-difflib v1.0.1-0.20181226105442-5d4384ee4fb2 // indirect
|
github.com/pmezard/go-difflib v1.0.1-0.20181226105442-5d4384ee4fb2 // indirect
|
||||||
github.com/prometheus/client_golang v1.20.5 // indirect
|
github.com/prometheus/client_golang v1.22.0 // indirect
|
||||||
github.com/prometheus/client_model v0.6.1 // indirect
|
github.com/prometheus/client_model v0.6.2 // indirect
|
||||||
github.com/prometheus/common v0.60.1 // indirect
|
github.com/prometheus/common v0.64.0 // indirect
|
||||||
github.com/prometheus/procfs v0.15.1 // indirect
|
github.com/prometheus/procfs v0.16.1 // indirect
|
||||||
github.com/richardlehane/mscfb v1.0.4 // indirect
|
github.com/richardlehane/mscfb v1.0.4 // indirect
|
||||||
github.com/richardlehane/msoleps v1.0.4 // indirect
|
github.com/richardlehane/msoleps v1.0.4 // indirect
|
||||||
github.com/rogpeppe/go-internal v1.11.0 // indirect
|
|
||||||
github.com/shiena/ansicolor v0.0.0-20230509054315-a9deabde6e02 // indirect
|
github.com/shiena/ansicolor v0.0.0-20230509054315-a9deabde6e02 // indirect
|
||||||
|
github.com/tiendc/go-deepcopy v1.6.0 // indirect
|
||||||
github.com/valyala/bytebufferpool v1.0.0 // indirect
|
github.com/valyala/bytebufferpool v1.0.0 // indirect
|
||||||
github.com/xuri/efp v0.0.0-20240408161823-9ad904a10d6d // indirect
|
github.com/xuri/efp v0.0.1 // indirect
|
||||||
github.com/xuri/nfp v0.0.0-20240318013403-ab9948c2c4a7 // indirect
|
github.com/xuri/nfp v0.0.1 // indirect
|
||||||
golang.org/x/crypto v0.28.0 // indirect
|
go.opentelemetry.io/auto/sdk v1.1.0 // indirect
|
||||||
golang.org/x/exp v0.0.0-20221208152030-732eee02a75a // indirect
|
go.opentelemetry.io/otel/metric v1.36.0 // indirect
|
||||||
golang.org/x/net v0.30.0 // indirect
|
go.opentelemetry.io/proto/otlp v1.6.0 // indirect
|
||||||
|
go.uber.org/multierr v1.11.0 // indirect
|
||||||
|
golang.org/x/crypto v0.38.0 // indirect
|
||||||
|
golang.org/x/exp v0.0.0-20250506013437-ce4c2cf36ca6 // indirect
|
||||||
|
golang.org/x/net v0.40.0 // indirect
|
||||||
golang.org/x/sync v0.14.0 // indirect
|
golang.org/x/sync v0.14.0 // indirect
|
||||||
golang.org/x/sys v0.26.0 // indirect
|
golang.org/x/sys v0.33.0 // indirect
|
||||||
golang.org/x/text v0.19.0 // indirect
|
golang.org/x/text v0.25.0 // indirect
|
||||||
google.golang.org/protobuf v1.35.1 // indirect
|
google.golang.org/genproto/googleapis/api v0.0.0-20250519155744-55703ea1f237 // indirect
|
||||||
|
google.golang.org/genproto/googleapis/rpc v0.0.0-20250519155744-55703ea1f237 // indirect
|
||||||
|
google.golang.org/grpc v1.72.2 // indirect
|
||||||
|
google.golang.org/protobuf v1.36.6 // indirect
|
||||||
|
gopkg.in/natefinch/lumberjack.v2 v2.2.1 // indirect
|
||||||
gopkg.in/yaml.v3 v3.0.1 // indirect
|
gopkg.in/yaml.v3 v3.0.1 // indirect
|
||||||
)
|
)
|
||||||
|
|||||||
166
go.sum
166
go.sum
@@ -1,30 +1,38 @@
|
|||||||
filippo.io/edwards25519 v1.1.0 h1:FNf4tywRC1HmFuKW5xopWpigGjJKiJSV0Cqo0cJWDaA=
|
filippo.io/edwards25519 v1.1.0 h1:FNf4tywRC1HmFuKW5xopWpigGjJKiJSV0Cqo0cJWDaA=
|
||||||
filippo.io/edwards25519 v1.1.0/go.mod h1:BxyFTGdWcka3PhytdK4V28tE5sGfRvvvRV7EaN4VDT4=
|
filippo.io/edwards25519 v1.1.0/go.mod h1:BxyFTGdWcka3PhytdK4V28tE5sGfRvvvRV7EaN4VDT4=
|
||||||
github.com/beego/beego/v2 v2.3.2-0.20241006064559-d5830a0fc2ee h1:j+mbzD7idTH1ktHDtFIqh//640NcsQ1k5ltwpKuWLTU=
|
github.com/BurntSushi/toml v1.5.0 h1:W5quZX/G/csjUnuI8SUYlsHs9M38FC7znL0lIO+DvMg=
|
||||||
github.com/beego/beego/v2 v2.3.2-0.20241006064559-d5830a0fc2ee/go.mod h1:5cqHsOHJIxkq44tBpRvtDe59GuVRVv/9/tyVDxd5ce4=
|
github.com/BurntSushi/toml v1.5.0/go.mod h1:ukJfTF/6rtPPRCnwkur4qwRxa8vTRFBF0uk2lLoLwho=
|
||||||
|
github.com/beego/beego/v2 v2.3.8 h1:wplhB1pF4TxR+2SS4PUej8eDoH4xGfxuHfS7wAk9VBc=
|
||||||
|
github.com/beego/beego/v2 v2.3.8/go.mod h1:8vl9+RrXqvodrl9C8yivX1e6le6deCK6RWeq8R7gTTg=
|
||||||
github.com/beorn7/perks v1.0.1 h1:VlbKKnNfV8bJzeqoa4cOKqO6bYr3WgKZxO8Z16+hsOM=
|
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/beorn7/perks v1.0.1/go.mod h1:G2ZrVWU2WbWT9wwq4/hrbKbnv/1ERSJQ0ibhJ6rlkpw=
|
||||||
|
github.com/cenkalti/backoff/v5 v5.0.2 h1:rIfFVxEf1QsI7E1ZHfp/B4DF/6QBAUhmgkxc0H7Zss8=
|
||||||
|
github.com/cenkalti/backoff/v5 v5.0.2/go.mod h1:rkhZdG3JZukswDf7f0cwqPNk4K0sa+F97BxZthm/crw=
|
||||||
github.com/cespare/xxhash/v2 v2.3.0 h1:UL815xU9SqsFlibzuggzjXhog7bL6oX9BbNZnL2UFvs=
|
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/cespare/xxhash/v2 v2.3.0/go.mod h1:VGX0DQ3Q6kWi7AoAeZDth3/j3BFtOZR5XLFGgcrjCOs=
|
||||||
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.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.1/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38=
|
||||||
github.com/davecgh/go-spew v1.1.2-0.20180830191138-d8f796af33cc h1:U9qPSI2PIWSS1VwoXQT9A3Wy9MM3WgvqSxFWenqJduM=
|
github.com/davecgh/go-spew v1.1.2-0.20180830191138-d8f796af33cc h1:U9qPSI2PIWSS1VwoXQT9A3Wy9MM3WgvqSxFWenqJduM=
|
||||||
github.com/davecgh/go-spew v1.1.2-0.20180830191138-d8f796af33cc/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38=
|
github.com/davecgh/go-spew v1.1.2-0.20180830191138-d8f796af33cc/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38=
|
||||||
github.com/dchest/captcha v1.0.0 h1:vw+bm/qMFvTgcjQlYVTuQBJkarm5R0YSsDKhm1HZI2o=
|
github.com/dchest/captcha v1.1.0 h1:2kt47EoYUUkaISobUdTbqwx55xvKOJxyScVfw25xzhQ=
|
||||||
github.com/dchest/captcha v1.0.0/go.mod h1:7zoElIawLp7GUMLcj54K9kbw+jEyvz2K0FDdRRYhvWo=
|
github.com/dchest/captcha v1.1.0/go.mod h1:7zoElIawLp7GUMLcj54K9kbw+jEyvz2K0FDdRRYhvWo=
|
||||||
github.com/duke-git/lancet/v2 v2.3.5 h1:vb49UWkkdyu2eewilZbl0L3X3T133znSQG0FaeJIBMg=
|
github.com/duke-git/lancet/v2 v2.3.5 h1:vb49UWkkdyu2eewilZbl0L3X3T133znSQG0FaeJIBMg=
|
||||||
github.com/duke-git/lancet/v2 v2.3.5/go.mod h1:zGa2R4xswg6EG9I6WnyubDbFO/+A/RROxIbXcwryTsc=
|
github.com/duke-git/lancet/v2 v2.3.5/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 h1:m0kkaHRKEu7tUIUFVwhGGGYClXvyl4RE03qmvRTNfbw=
|
||||||
github.com/elazarl/go-bindata-assetfs v1.0.1/go.mod h1:v+YaWX3bdea5J/mo8dSETolEo7R71Vk1u8bnjau5yw4=
|
github.com/elazarl/go-bindata-assetfs v1.0.1/go.mod h1:v+YaWX3bdea5J/mo8dSETolEo7R71Vk1u8bnjau5yw4=
|
||||||
github.com/fsnotify/fsnotify v1.4.7/go.mod h1:jwhsz4b93w/PPRr/qN1Yymfu8t87LnFCMoQvtojpjFo=
|
github.com/fsnotify/fsnotify v1.4.7/go.mod h1:jwhsz4b93w/PPRr/qN1Yymfu8t87LnFCMoQvtojpjFo=
|
||||||
github.com/fsnotify/fsnotify v1.4.9/go.mod h1:znqG4EE+3YCdAaPaxE2ZRY/06pZUdp0tY4IgpuI1SZQ=
|
github.com/fsnotify/fsnotify v1.4.9/go.mod h1:znqG4EE+3YCdAaPaxE2ZRY/06pZUdp0tY4IgpuI1SZQ=
|
||||||
github.com/fsnotify/fsnotify v1.8.0 h1:dAwr6QBTBZIkG8roQaJjGof0pp0EeF+tNV7YBP3F/8M=
|
github.com/fsnotify/fsnotify v1.9.0 h1:2Ml+OJNzbYCTzsxtv8vKSFD9PbJjmhYF14k/jKC7S9k=
|
||||||
github.com/fsnotify/fsnotify v1.8.0/go.mod h1:8jBTzvmWwFyi3Pb8djgCCO5IBqzKJ/Jwo8TRcHyHii0=
|
github.com/fsnotify/fsnotify v1.9.0/go.mod h1:8jBTzvmWwFyi3Pb8djgCCO5IBqzKJ/Jwo8TRcHyHii0=
|
||||||
github.com/go-redis/redis v6.14.2+incompatible h1:UE9pLhzmWf+xHNmZsoccjXosPicuiNaInPgym8nzfg0=
|
github.com/go-logr/logr v1.2.2/go.mod h1:jdQByPbusPIv2/zmleS9BjJVeZ6kBagPoEUsqbVz/1A=
|
||||||
github.com/go-redis/redis v6.14.2+incompatible/go.mod h1:NAIEuMOZ/fxfXJIrKDQDz8wamY7mA7PouImQ2Jvg6kA=
|
github.com/go-logr/logr v1.4.2 h1:6pFjapn8bFcIbiKo3XT4j/BhANplGihG6tvd+8rYgrY=
|
||||||
github.com/go-sql-driver/mysql v1.8.1 h1:LedoTUt/eveggdHS9qUFC1EFSa8bU2+1pZjSRpvNJ1Y=
|
github.com/go-logr/logr v1.4.2/go.mod h1:9T104GzyrTigFIr8wt5mBrctHMim0Nb2HLGrmQ40KvY=
|
||||||
github.com/go-sql-driver/mysql v1.8.1/go.mod h1:wEBSXgmK//2ZFJyE+qWnIsVGmvmEKlqwuVSjsCm7DZg=
|
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-redis/redis v6.15.9+incompatible h1:K0pv1D7EQUjfyoMql+r/jZqCLizCGKFlFgcHWWmHQjg=
|
||||||
|
github.com/go-redis/redis v6.15.9+incompatible/go.mod h1:NAIEuMOZ/fxfXJIrKDQDz8wamY7mA7PouImQ2Jvg6kA=
|
||||||
|
github.com/go-sql-driver/mysql v1.9.2 h1:4cNKDYQ1I84SXslGddlsrMhc8k4LeDVj6Ad6WRjiHuU=
|
||||||
|
github.com/go-sql-driver/mysql v1.9.2/go.mod h1:qn46aNg1333BRMNU69Lq93t8du/dwxI64Gl8i5p1WMU=
|
||||||
github.com/go-task/slim-sprig v0.0.0-20210107165309-348f09dbbbc0/go.mod h1:fyg7847qk6SyHyPtNmDHnmrv/HOrqktSC+C9fM+CJOE=
|
github.com/go-task/slim-sprig v0.0.0-20210107165309-348f09dbbbc0/go.mod h1:fyg7847qk6SyHyPtNmDHnmrv/HOrqktSC+C9fM+CJOE=
|
||||||
github.com/golang/protobuf v1.2.0/go.mod h1:6lQm79b+lXiMfvg/cZm0SGofjICqVBUtrP5yJMmIC1U=
|
github.com/golang/protobuf v1.2.0/go.mod h1:6lQm79b+lXiMfvg/cZm0SGofjICqVBUtrP5yJMmIC1U=
|
||||||
github.com/golang/protobuf v1.4.0-rc.1/go.mod h1:ceaxUfeHdC40wWswd/P6IGgMaK3YpKi5j83Wpe3EHw8=
|
github.com/golang/protobuf v1.4.0-rc.1/go.mod h1:ceaxUfeHdC40wWswd/P6IGgMaK3YpKi5j83Wpe3EHw8=
|
||||||
@@ -33,16 +41,22 @@ github.com/golang/protobuf v1.4.0-rc.2/go.mod h1:LlEzMj4AhA7rCAGe4KMBDvJI+AwstrU
|
|||||||
github.com/golang/protobuf v1.4.0-rc.4.0.20200313231945-b860323f09d0/go.mod h1:WU3c8KckQ9AFe+yFwt9sWVRKCVIyN9cPHBJSNnbL67w=
|
github.com/golang/protobuf v1.4.0-rc.4.0.20200313231945-b860323f09d0/go.mod h1:WU3c8KckQ9AFe+yFwt9sWVRKCVIyN9cPHBJSNnbL67w=
|
||||||
github.com/golang/protobuf v1.4.0/go.mod h1:jodUvKwWbYaEsadDk5Fwe5c77LiNKVO9IDvqG2KuDX0=
|
github.com/golang/protobuf v1.4.0/go.mod h1:jodUvKwWbYaEsadDk5Fwe5c77LiNKVO9IDvqG2KuDX0=
|
||||||
github.com/golang/protobuf v1.4.2/go.mod h1:oDoupMAO8OvCJWAcko0GGGIgR6R6ocIYbsSw735rRwI=
|
github.com/golang/protobuf v1.4.2/go.mod h1:oDoupMAO8OvCJWAcko0GGGIgR6R6ocIYbsSw735rRwI=
|
||||||
|
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.3.0/go.mod h1:8QqcDgzrUqlUb/G2PQTWiueGozuR1884gddMywk6iLU=
|
github.com/google/go-cmp v0.3.0/go.mod h1:8QqcDgzrUqlUb/G2PQTWiueGozuR1884gddMywk6iLU=
|
||||||
github.com/google/go-cmp v0.3.1/go.mod h1:8QqcDgzrUqlUb/G2PQTWiueGozuR1884gddMywk6iLU=
|
github.com/google/go-cmp v0.3.1/go.mod h1:8QqcDgzrUqlUb/G2PQTWiueGozuR1884gddMywk6iLU=
|
||||||
github.com/google/go-cmp v0.4.0/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE=
|
github.com/google/go-cmp v0.4.0/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE=
|
||||||
github.com/google/go-cmp v0.6.0 h1:ofyhxvXcZhMsU5ulbFiLKl/XBFqE1GSq7atu8tAmTRI=
|
github.com/google/go-cmp v0.7.0 h1:wk8382ETsv4JYUZwIsn6YpYiWiBsYLSJiTsyBybVuN8=
|
||||||
github.com/google/go-cmp v0.6.0/go.mod h1:17dUlkBOakJ0+DkrSSNjCkIjxS6bF9zb3elmeNGIjoY=
|
github.com/google/go-cmp v0.7.0/go.mod h1:pXiqmnSA92OHEEa9HXL2W4E7lf9JzCmGVUdgjX3N/iU=
|
||||||
|
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.26.3 h1:5ZPtiqj0JL5oKWmcsq4VMaAW5ukBEgSGXEN89zeH1Jo=
|
||||||
|
github.com/grpc-ecosystem/grpc-gateway/v2 v2.26.3/go.mod h1:ndYquD05frm2vACXE1nsccT4oJzjhw2arTS2cpUD1PI=
|
||||||
github.com/hashicorp/golang-lru v1.0.2 h1:dV3g9Z/unq5DpblPpw+Oqcv4dU/1omnb4Ok8iPY6p1c=
|
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/hashicorp/golang-lru v1.0.2/go.mod h1:iADmTwqILo4mZ8BN3D2Q6+9jd8WM5uGBxy+E8yxSoD4=
|
||||||
github.com/hpcloud/tail v1.0.0/go.mod h1:ab1qPbhIpdTxEkNHXyeSf5vhxWSCs/tWer42PpOxQnU=
|
github.com/hpcloud/tail v1.0.0/go.mod h1:ab1qPbhIpdTxEkNHXyeSf5vhxWSCs/tWer42PpOxQnU=
|
||||||
github.com/klauspost/compress v1.17.11 h1:In6xLpyWOi1+C7tXUUWv2ot1QvBjxevKAaI6IXrJmUc=
|
github.com/klauspost/compress v1.18.0 h1:c/Cqfb0r+Yi+JtIEq73FWXVkRonBlf0CRNYc8Zttxdo=
|
||||||
github.com/klauspost/compress v1.17.11/go.mod h1:pMDklpSncoRMuLFrf1W9Ss9KT+0rH90U12bZKk7uwG0=
|
github.com/klauspost/compress v1.18.0/go.mod h1:2Pp+KzxcywXVXMr50+X0Q/Lsb43OQHYWRCY2AiWywWQ=
|
||||||
github.com/kr/pretty v0.1.0/go.mod h1:dAy3ld7l9f0ibDNOQOHHMYYIIbhfbHSm3C4ZsoJORNo=
|
github.com/kr/pretty v0.1.0/go.mod h1:dAy3ld7l9f0ibDNOQOHHMYYIIbhfbHSm3C4ZsoJORNo=
|
||||||
github.com/kr/pretty v0.3.1 h1:flRD4NNwYAUpkphVc1HcthR4KEIFJ65n8Mw5qdRn3LE=
|
github.com/kr/pretty v0.3.1 h1:flRD4NNwYAUpkphVc1HcthR4KEIFJ65n8Mw5qdRn3LE=
|
||||||
github.com/kr/pretty v0.3.1/go.mod h1:hoEshYVHaxMs3cyo3Yncou5ZscifuDolrwPKZanG3xk=
|
github.com/kr/pretty v0.3.1/go.mod h1:hoEshYVHaxMs3cyo3Yncou5ZscifuDolrwPKZanG3xk=
|
||||||
@@ -54,14 +68,14 @@ github.com/kylelemons/godebug v1.1.0 h1:RPNrshWIDI6G2gRW9EHilWtl7Z6Sb1BR0xunSBf0
|
|||||||
github.com/kylelemons/godebug v1.1.0/go.mod h1:9/0rRGxNHcop5bhtWyNeEfOS8JIWk580+fNqagV/RAw=
|
github.com/kylelemons/godebug v1.1.0/go.mod h1:9/0rRGxNHcop5bhtWyNeEfOS8JIWk580+fNqagV/RAw=
|
||||||
github.com/lib/pq v1.10.9 h1:YXG7RB+JIjhP29X+OtkiDnYaXQwpS4JEWq7dtCCRUEw=
|
github.com/lib/pq v1.10.9 h1:YXG7RB+JIjhP29X+OtkiDnYaXQwpS4JEWq7dtCCRUEw=
|
||||||
github.com/lib/pq v1.10.9/go.mod h1:AlVN5x4E4T544tWzH6hKfbfQvm3HdbOxrmggDNAPY9o=
|
github.com/lib/pq v1.10.9/go.mod h1:AlVN5x4E4T544tWzH6hKfbfQvm3HdbOxrmggDNAPY9o=
|
||||||
github.com/mattn/go-sqlite3 v1.14.22 h1:2gZY6PC6kBnID23Tichd1K+Z0oS6nE/XwU+Vz/5o4kU=
|
github.com/mattn/go-sqlite3 v1.14.27 h1:drZCnuvf37yPfs95E5jd9s3XhdVWLal+6BOK6qrv6IU=
|
||||||
github.com/mattn/go-sqlite3 v1.14.22/go.mod h1:Uh1q+B4BYcTPb+yiD3kU8Ct7aC0hY9fxUwlHK0RXw+Y=
|
github.com/mattn/go-sqlite3 v1.14.27/go.mod h1:Uh1q+B4BYcTPb+yiD3kU8Ct7aC0hY9fxUwlHK0RXw+Y=
|
||||||
github.com/mitchellh/mapstructure v1.5.0 h1:jeMsZIYE/09sWLaz43PL7Gy6RuMjD2eJVyuac5Z2hdY=
|
github.com/mitchellh/mapstructure v1.5.0 h1:jeMsZIYE/09sWLaz43PL7Gy6RuMjD2eJVyuac5Z2hdY=
|
||||||
github.com/mitchellh/mapstructure v1.5.0/go.mod h1:bFUtVrKA4DC2yAKiSyO/QUcy7e+RRV2QTWOzhPopBRo=
|
github.com/mitchellh/mapstructure v1.5.0/go.mod h1:bFUtVrKA4DC2yAKiSyO/QUcy7e+RRV2QTWOzhPopBRo=
|
||||||
github.com/mohae/deepcopy v0.0.0-20170929034955-c48cc78d4826 h1:RWengNIwukTxcDr9M+97sNutRR1RKhG96O6jWumTTnw=
|
|
||||||
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 h1:C3w9PqII01/Oq1c1nUAm88MOHcQC9l5mIlSMApZMrHA=
|
||||||
github.com/munnerz/goautoneg v0.0.0-20191010083416-a7dc8b61c822/go.mod h1:+n7T8mK8HuQTcFwEeznm/DIxMOiR9yIdICNftLE1DvQ=
|
github.com/munnerz/goautoneg v0.0.0-20191010083416-a7dc8b61c822/go.mod h1:+n7T8mK8HuQTcFwEeznm/DIxMOiR9yIdICNftLE1DvQ=
|
||||||
|
github.com/natefinch/lumberjack v2.0.0+incompatible h1:4QJd3OLAMgj7ph+yZTuX13Ld4UpgHp07nNdFX7mqFfM=
|
||||||
|
github.com/natefinch/lumberjack v2.0.0+incompatible/go.mod h1:Wi9p2TTF5DG5oU+6YfsmYQpsTIOm0B1VNzQg9Mw6nPk=
|
||||||
github.com/nxadm/tail v1.4.4/go.mod h1:kenIhsEOeOJmVchQTgglprH7qJGnHDVpk1VPCcaMI8A=
|
github.com/nxadm/tail v1.4.4/go.mod h1:kenIhsEOeOJmVchQTgglprH7qJGnHDVpk1VPCcaMI8A=
|
||||||
github.com/nxadm/tail v1.4.8 h1:nPr65rt6Y5JFSKQO7qToXr7pePgD6Gwiw05lkbyAQTE=
|
github.com/nxadm/tail v1.4.8 h1:nPr65rt6Y5JFSKQO7qToXr7pePgD6Gwiw05lkbyAQTE=
|
||||||
github.com/nxadm/tail v1.4.8/go.mod h1:+ncqLTQzXmGhMZNUePPaPqPvBxHAIsmXswZKocGu+AU=
|
github.com/nxadm/tail v1.4.8/go.mod h1:+ncqLTQzXmGhMZNUePPaPqPvBxHAIsmXswZKocGu+AU=
|
||||||
@@ -71,8 +85,8 @@ github.com/onsi/ginkgo v1.16.5 h1:8xi0RTUf59SOSfEtZMvwTvXYMzG4gV23XVHOZiXNtnE=
|
|||||||
github.com/onsi/ginkgo v1.16.5/go.mod h1:+E8gABHa3K6zRBolWtd+ROzc/U5bkGt0FwiG042wbpU=
|
github.com/onsi/ginkgo v1.16.5/go.mod h1:+E8gABHa3K6zRBolWtd+ROzc/U5bkGt0FwiG042wbpU=
|
||||||
github.com/onsi/gomega v1.7.1/go.mod h1:XdKZgCCFLUoM/7CFJVPcG8C1xQ1AJ0vpAezJrB7JYyY=
|
github.com/onsi/gomega v1.7.1/go.mod h1:XdKZgCCFLUoM/7CFJVPcG8C1xQ1AJ0vpAezJrB7JYyY=
|
||||||
github.com/onsi/gomega v1.10.1/go.mod h1:iN09h71vgCQne3DLsj+A5owkum+a2tYe+TOCB1ybHNo=
|
github.com/onsi/gomega v1.10.1/go.mod h1:iN09h71vgCQne3DLsj+A5owkum+a2tYe+TOCB1ybHNo=
|
||||||
github.com/onsi/gomega v1.35.1 h1:Cwbd75ZBPxFSuZ6T+rN/WCb/gOc6YgFBXLlZLhC7Ds4=
|
github.com/onsi/gomega v1.37.0 h1:CdEG8g0S133B4OswTDC/5XPSzE1OeP29QOioj2PID2Y=
|
||||||
github.com/onsi/gomega v1.35.1/go.mod h1:PvZbdDc8J6XJEpDK4HCuRBm8a6Fzp9/DmhC9C7yFlog=
|
github.com/onsi/gomega v1.37.0/go.mod h1:8D9+Txp43QWKhM24yyOBEdpkzN8FvJyAwecBgsU4KU0=
|
||||||
github.com/panjf2000/ants/v2 v2.11.3 h1:AfI0ngBoXJmYOpDh9m516vjqoUu2sLrIVgppI9TZVpg=
|
github.com/panjf2000/ants/v2 v2.11.3 h1:AfI0ngBoXJmYOpDh9m516vjqoUu2sLrIVgppI9TZVpg=
|
||||||
github.com/panjf2000/ants/v2 v2.11.3/go.mod h1:8u92CYMUc6gyvTIw8Ru7Mt7+/ESnJahz5EVtqfrilek=
|
github.com/panjf2000/ants/v2 v2.11.3/go.mod h1:8u92CYMUc6gyvTIw8Ru7Mt7+/ESnJahz5EVtqfrilek=
|
||||||
github.com/pkg/errors v0.9.1 h1:FEBLx1zS214owpjy7qsBeixbURkuhQAwrK5UwLGTwt4=
|
github.com/pkg/errors v0.9.1 h1:FEBLx1zS214owpjy7qsBeixbURkuhQAwrK5UwLGTwt4=
|
||||||
@@ -80,21 +94,21 @@ github.com/pkg/errors v0.9.1/go.mod h1:bwawxfHBFNV+L2hUp1rHADufV3IMtnDRdf1r5NINE
|
|||||||
github.com/pmezard/go-difflib v1.0.0/go.mod h1:iKH77koFhYxTK1pcRnkKkqfTogsbg7gZNVY4sRDYZ/4=
|
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 h1:Jamvg5psRIccs7FGNTlIRMkT8wgtp5eCXdBlqhYGL6U=
|
||||||
github.com/pmezard/go-difflib v1.0.1-0.20181226105442-5d4384ee4fb2/go.mod h1:iKH77koFhYxTK1pcRnkKkqfTogsbg7gZNVY4sRDYZ/4=
|
github.com/pmezard/go-difflib v1.0.1-0.20181226105442-5d4384ee4fb2/go.mod h1:iKH77koFhYxTK1pcRnkKkqfTogsbg7gZNVY4sRDYZ/4=
|
||||||
github.com/prometheus/client_golang v1.20.5 h1:cxppBPuYhUnsO6yo/aoRol4L7q7UFfdm+bR9r+8l63Y=
|
github.com/prometheus/client_golang v1.22.0 h1:rb93p9lokFEsctTys46VnV1kLCDpVZ0a/Y92Vm0Zc6Q=
|
||||||
github.com/prometheus/client_golang v1.20.5/go.mod h1:PIEt8X02hGcP8JWbeHyeZ53Y/jReSnHgO035n//V5WE=
|
github.com/prometheus/client_golang v1.22.0/go.mod h1:R7ljNsLXhuQXYZYtw6GAE9AZg8Y7vEW5scdCXrWRXC0=
|
||||||
github.com/prometheus/client_model v0.6.1 h1:ZKSh/rekM+n3CeS952MLRAdFwIKqeY8b62p8ais2e9E=
|
github.com/prometheus/client_model v0.6.2 h1:oBsgwpGs7iVziMvrGhE53c/GrLUsZdHnqNwqPLxwZyk=
|
||||||
github.com/prometheus/client_model v0.6.1/go.mod h1:OrxVMOVHjw3lKMa8+x6HeMGkHMQyHDk9E3jmP2AmGiY=
|
github.com/prometheus/client_model v0.6.2/go.mod h1:y3m2F6Gdpfy6Ut/GBsUqTWZqCUvMVzSfMLjcu6wAwpE=
|
||||||
github.com/prometheus/common v0.60.1 h1:FUas6GcOw66yB/73KC+BOZoFJmbo/1pojoILArPAaSc=
|
github.com/prometheus/common v0.64.0 h1:pdZeA+g617P7oGv1CzdTzyeShxAGrTBsolKNOLQPGO4=
|
||||||
github.com/prometheus/common v0.60.1/go.mod h1:h0LYf1R1deLSKtD4Vdg8gy4RuOvENW2J/h19V5NADQw=
|
github.com/prometheus/common v0.64.0/go.mod h1:0gZns+BLRQ3V6NdaerOhMbwwRbNh9hkGINtQAsP5GS8=
|
||||||
github.com/prometheus/procfs v0.15.1 h1:YagwOFzUgYfKKHX6Dr+sHT7km/hxC76UB0learggepc=
|
github.com/prometheus/procfs v0.16.1 h1:hZ15bTNuirocR6u0JZ6BAHHmwS1p8B4P6MRqxtzMyRg=
|
||||||
github.com/prometheus/procfs v0.15.1/go.mod h1:fB45yRUv8NstnjriLhBQLuOUt+WW4BsoGhij/e3PBqk=
|
github.com/prometheus/procfs v0.16.1/go.mod h1:teAbpZRB1iIAJYREa1LsoWUXykVXA1KlTmWl8x/U+Is=
|
||||||
github.com/richardlehane/mscfb v1.0.4 h1:WULscsljNPConisD5hR0+OyZjwK46Pfyr6mPu5ZawpM=
|
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/mscfb v1.0.4/go.mod h1:YzVpcZg9czvAuhk9T+a3avCpcFPMUWm7gK3DypaEsUk=
|
||||||
github.com/richardlehane/msoleps v1.0.1/go.mod h1:BWev5JBpU9Ko2WAgmZEuiz4/u3ZYTKbjLycmwiWUfWg=
|
github.com/richardlehane/msoleps v1.0.1/go.mod h1:BWev5JBpU9Ko2WAgmZEuiz4/u3ZYTKbjLycmwiWUfWg=
|
||||||
github.com/richardlehane/msoleps v1.0.4 h1:WuESlvhX3gH2IHcd8UqyCuFY5yiq/GR/yqaSM/9/g00=
|
github.com/richardlehane/msoleps v1.0.4 h1:WuESlvhX3gH2IHcd8UqyCuFY5yiq/GR/yqaSM/9/g00=
|
||||||
github.com/richardlehane/msoleps v1.0.4/go.mod h1:BWev5JBpU9Ko2WAgmZEuiz4/u3ZYTKbjLycmwiWUfWg=
|
github.com/richardlehane/msoleps v1.0.4/go.mod h1:BWev5JBpU9Ko2WAgmZEuiz4/u3ZYTKbjLycmwiWUfWg=
|
||||||
github.com/rogpeppe/go-internal v1.11.0 h1:cWPaGQEPrBb5/AsnsZesgZZ9yb1OQ+GOISoDNXVBh4M=
|
github.com/rogpeppe/go-internal v1.13.1 h1:KvO1DLK/DRN07sQ1LQKScxyZJuNnedQ5/wKSR38lUII=
|
||||||
github.com/rogpeppe/go-internal v1.11.0/go.mod h1:ddIwULY96R17DhadqLgMfk9H9tvdUzkipdSkR5nkCZA=
|
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 h1:fV591PaemRlL6JfRxGDEPl69wICngIQ3shQtzfy2gxU=
|
||||||
github.com/rs/xid v1.6.0/go.mod h1:7XoLgs4eV+QndskICGsho+ADou8ySMSjJKDIan90Nz0=
|
github.com/rs/xid v1.6.0/go.mod h1:7XoLgs4eV+QndskICGsho+ADou8ySMSjJKDIan90Nz0=
|
||||||
github.com/shiena/ansicolor v0.0.0-20230509054315-a9deabde6e02 h1:v9ezJDHA1XGxViAUSIoO/Id7Fl63u6d0YmsAm+/p2hs=
|
github.com/shiena/ansicolor v0.0.0-20230509054315-a9deabde6e02 h1:v9ezJDHA1XGxViAUSIoO/Id7Fl63u6d0YmsAm+/p2hs=
|
||||||
@@ -107,34 +121,74 @@ github.com/stretchr/testify v1.10.0 h1:Xv5erBjTwe/5IxqUQTdXv5kgmIvbHo3QQyRwhJsOf
|
|||||||
github.com/stretchr/testify v1.10.0/go.mod h1:r2ic/lqez/lEtzL7wO/rwa5dbSLXVDPFyf8C91i36aY=
|
github.com/stretchr/testify v1.10.0/go.mod h1:r2ic/lqez/lEtzL7wO/rwa5dbSLXVDPFyf8C91i36aY=
|
||||||
github.com/tealeg/xlsx v1.0.5 h1:+f8oFmvY8Gw1iUXzPk+kz+4GpbDZPK1FhPiQRd+ypgE=
|
github.com/tealeg/xlsx v1.0.5 h1:+f8oFmvY8Gw1iUXzPk+kz+4GpbDZPK1FhPiQRd+ypgE=
|
||||||
github.com/tealeg/xlsx v1.0.5/go.mod h1:btRS8dz54TDnvKNosuAqxrM1QgN1udgk9O34bDCnORM=
|
github.com/tealeg/xlsx v1.0.5/go.mod h1:btRS8dz54TDnvKNosuAqxrM1QgN1udgk9O34bDCnORM=
|
||||||
|
github.com/tiendc/go-deepcopy v1.6.0 h1:0UtfV/imoCwlLxVsyfUd4hNHnB3drXsfle+wzSCA5Wo=
|
||||||
|
github.com/tiendc/go-deepcopy v1.6.0/go.mod h1:toXoeQoUqXOOS/X4sKuiAoSk6elIdqc0pN7MTgOOo2I=
|
||||||
github.com/valyala/bytebufferpool v1.0.0 h1:GqA5TC/0021Y/b9FG4Oi9Mr3q7XYx6KllzawFIhcdPw=
|
github.com/valyala/bytebufferpool v1.0.0 h1:GqA5TC/0021Y/b9FG4Oi9Mr3q7XYx6KllzawFIhcdPw=
|
||||||
github.com/valyala/bytebufferpool v1.0.0/go.mod h1:6bBcMArwyJ5K/AmCkWv1jt77kVWyCJ6HpOuEn7z0Csc=
|
github.com/valyala/bytebufferpool v1.0.0/go.mod h1:6bBcMArwyJ5K/AmCkWv1jt77kVWyCJ6HpOuEn7z0Csc=
|
||||||
github.com/xlzd/gotp v0.1.0 h1:37blvlKCh38s+fkem+fFh7sMnceltoIEBYTVXyoa5Po=
|
github.com/xlzd/gotp v0.1.0 h1:37blvlKCh38s+fkem+fFh7sMnceltoIEBYTVXyoa5Po=
|
||||||
github.com/xlzd/gotp v0.1.0/go.mod h1:ndLJ3JKzi3xLmUProq4LLxCuECL93dG9WASNLpHz8qg=
|
github.com/xlzd/gotp v0.1.0/go.mod h1:ndLJ3JKzi3xLmUProq4LLxCuECL93dG9WASNLpHz8qg=
|
||||||
github.com/xuri/efp v0.0.0-20240408161823-9ad904a10d6d h1:llb0neMWDQe87IzJLS4Ci7psK/lVsjIS2otl+1WyRyY=
|
github.com/xuri/efp v0.0.1 h1:fws5Rv3myXyYni8uwj2qKjVaRP30PdjeYe2Y6FDsCL8=
|
||||||
github.com/xuri/efp v0.0.0-20240408161823-9ad904a10d6d/go.mod h1:ybY/Jr0T0GTCnYjKqmdwxyxn2BQf2RcQIIvex5QldPI=
|
github.com/xuri/efp v0.0.1/go.mod h1:ybY/Jr0T0GTCnYjKqmdwxyxn2BQf2RcQIIvex5QldPI=
|
||||||
github.com/xuri/excelize/v2 v2.9.0 h1:1tgOaEq92IOEumR1/JfYS/eR0KHOCsRv/rYXXh6YJQE=
|
github.com/xuri/excelize/v2 v2.9.1 h1:VdSGk+rraGmgLHGFaGG9/9IWu1nj4ufjJ7uwMDtj8Qw=
|
||||||
github.com/xuri/excelize/v2 v2.9.0/go.mod h1:uqey4QBZ9gdMeWApPLdhm9x+9o2lq4iVmjiLfBS5hdE=
|
github.com/xuri/excelize/v2 v2.9.1/go.mod h1:x7L6pKz2dvo9ejrRuD8Lnl98z4JLt0TGAwjhW+EiP8s=
|
||||||
github.com/xuri/nfp v0.0.0-20240318013403-ab9948c2c4a7 h1:hPVCafDV85blFTabnqKgNhDCkJX25eik94Si9cTER4A=
|
github.com/xuri/nfp v0.0.1 h1:MDamSGatIvp8uOmDP8FnmjuQpu90NzdJxo7242ANR9Q=
|
||||||
github.com/xuri/nfp v0.0.0-20240318013403-ab9948c2c4a7/go.mod h1:WwHg+CVyzlv/TX9xqBFXEZAuxOPxn2k1GNHwG41IIUQ=
|
github.com/xuri/nfp v0.0.1/go.mod h1:WwHg+CVyzlv/TX9xqBFXEZAuxOPxn2k1GNHwG41IIUQ=
|
||||||
github.com/yuin/goldmark v1.2.1/go.mod h1:3hX8gzYuyVAZsxl0MRgGTJEmQBFcNTphYh9decYSb74=
|
github.com/yuin/goldmark v1.2.1/go.mod h1:3hX8gzYuyVAZsxl0MRgGTJEmQBFcNTphYh9decYSb74=
|
||||||
|
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/otelzap v0.11.0 h1:u2E32P7j1a/gRgZDWhIXC+Shd4rLg70mnE7QLI/Ssnw=
|
||||||
|
go.opentelemetry.io/contrib/bridges/otelzap v0.11.0/go.mod h1:pJPCLM8gzX4ASqLlyAXjHBEYxgbOQJ/9bidWxD6PEPQ=
|
||||||
|
go.opentelemetry.io/otel v1.36.0 h1:UumtzIklRBY6cI/lllNZlALOF5nNIzJVb16APdvgTXg=
|
||||||
|
go.opentelemetry.io/otel v1.36.0/go.mod h1:/TcFMXYjyRNh8khOAO9ybYkqaDBb/70aVwkNML4pP8E=
|
||||||
|
go.opentelemetry.io/otel/exporters/otlp/otlplog/otlploghttp v0.12.2 h1:tPLwQlXbJ8NSOfZc4OkgU5h2A38M4c9kfHSVc4PFQGs=
|
||||||
|
go.opentelemetry.io/otel/exporters/otlp/otlplog/otlploghttp v0.12.2/go.mod h1:QTnxBwT/1rBIgAG1goq6xMydfYOBKU6KTiYF4fp5zL8=
|
||||||
|
go.opentelemetry.io/otel/exporters/otlp/otlpmetric/otlpmetrichttp v1.36.0 h1:gAU726w9J8fwr4qRDqu1GYMNNs4gXrU+Pv20/N1UpB4=
|
||||||
|
go.opentelemetry.io/otel/exporters/otlp/otlpmetric/otlpmetrichttp v1.36.0/go.mod h1:RboSDkp7N292rgu+T0MgVt2qgFGu6qa1RpZDOtpL76w=
|
||||||
|
go.opentelemetry.io/otel/exporters/otlp/otlptrace v1.36.0 h1:dNzwXjZKpMpE2JhmO+9HsPl42NIXFIFSUSSs0fiqra0=
|
||||||
|
go.opentelemetry.io/otel/exporters/otlp/otlptrace v1.36.0/go.mod h1:90PoxvaEB5n6AOdZvi+yWJQoE95U8Dhhw2bSyRqnTD0=
|
||||||
|
go.opentelemetry.io/otel/exporters/otlp/otlptrace/otlptracehttp v1.36.0 h1:nRVXXvf78e00EwY6Wp0YII8ww2JVWshZ20HfTlE11AM=
|
||||||
|
go.opentelemetry.io/otel/exporters/otlp/otlptrace/otlptracehttp v1.36.0/go.mod h1:r49hO7CgrxY9Voaj3Xe8pANWtr0Oq916d0XAmOoCZAQ=
|
||||||
|
go.opentelemetry.io/otel/log v0.12.2 h1:yob9JVHn2ZY24byZeaXpTVoPS6l+UrrxmxmPKohXTwc=
|
||||||
|
go.opentelemetry.io/otel/log v0.12.2/go.mod h1:ShIItIxSYxufUMt+1H5a2wbckGli3/iCfuEbVZi/98E=
|
||||||
|
go.opentelemetry.io/otel/log/logtest v0.0.0-20250521073539-a85ae98dcedc h1:TU7eU/nib68C+4ZMQ5t4em5Jhf50kRorSCV4w+v65vo=
|
||||||
|
go.opentelemetry.io/otel/log/logtest v0.0.0-20250521073539-a85ae98dcedc/go.mod h1:4AsFc5k1BDLWm5jt0yagrodTEA9xS9McwcnYm+Jf73A=
|
||||||
|
go.opentelemetry.io/otel/metric v1.36.0 h1:MoWPKVhQvJ+eeXWHFBOPoBOi20jh6Iq2CcCREuTYufE=
|
||||||
|
go.opentelemetry.io/otel/metric v1.36.0/go.mod h1:zC7Ks+yeyJt4xig9DEw9kuUFe5C3zLbVjV2PzT6qzbs=
|
||||||
|
go.opentelemetry.io/otel/sdk v1.36.0 h1:b6SYIuLRs88ztox4EyrvRti80uXIFy+Sqzoh9kFULbs=
|
||||||
|
go.opentelemetry.io/otel/sdk v1.36.0/go.mod h1:+lC+mTgD+MUWfjJubi2vvXWcVxyr9rmlshZni72pXeY=
|
||||||
|
go.opentelemetry.io/otel/sdk/log v0.12.2 h1:yNoETvTByVKi7wHvYS6HMcZrN5hFLD7I++1xIZ/k6W0=
|
||||||
|
go.opentelemetry.io/otel/sdk/log v0.12.2/go.mod h1:DcpdmUXHJgSqN/dh+XMWa7Vf89u9ap0/AAk/XGLnEzY=
|
||||||
|
go.opentelemetry.io/otel/sdk/log/logtest v0.0.0-20250521073539-a85ae98dcedc h1:uqxdywfHqqCl6LmZzI3pUnXT1RGFYyUgxj0AkWPFxi0=
|
||||||
|
go.opentelemetry.io/otel/sdk/log/logtest v0.0.0-20250521073539-a85ae98dcedc/go.mod h1:TY/N/FT7dmFrP/r5ym3g0yysP1DefqGpAZr4f82P0dE=
|
||||||
|
go.opentelemetry.io/otel/sdk/metric v1.36.0 h1:r0ntwwGosWGaa0CrSt8cuNuTcccMXERFwHX4dThiPis=
|
||||||
|
go.opentelemetry.io/otel/sdk/metric v1.36.0/go.mod h1:qTNOhFDfKRwX0yXOqJYegL5WRaW376QbB7P4Pb0qva4=
|
||||||
|
go.opentelemetry.io/otel/trace v1.36.0 h1:ahxWNuqZjpdiFAyrIoQ4GIiAIhxAunQR6MUoKrsNd4w=
|
||||||
|
go.opentelemetry.io/otel/trace v1.36.0/go.mod h1:gQ+OnDZzrybY4k4seLzPAWNwVBBVlF2szhehOBB/tGA=
|
||||||
|
go.opentelemetry.io/proto/otlp v1.6.0 h1:jQjP+AQyTf+Fe7OKj/MfkDrmK4MNVtw2NpXsf9fefDI=
|
||||||
|
go.opentelemetry.io/proto/otlp v1.6.0/go.mod h1:cicgGehlFuNdgZkcALOCh3VE6K/u2tAjzlRhDwmVpZc=
|
||||||
|
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/crypto v0.0.0-20190308221718-c2843e01d9a2/go.mod h1:djNgcEr1/C05ACkg1iLfiJU5Ep61QUkGW8qpdssI0+w=
|
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-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-20200622213623-75b288015ac9/go.mod h1:LzIPMQfyMNhhGPhUkYOs5KpL4U8rLKemX1yGLhDgUto=
|
||||||
golang.org/x/crypto v0.28.0 h1:GBDwsMXVQi34v5CCYUm2jkJvu4cbtru2U4TN2PSyQnw=
|
golang.org/x/crypto v0.38.0 h1:jt+WWG8IZlBnVbomuhg2Mdq0+BBQaHbtqHEFEigjUV8=
|
||||||
golang.org/x/crypto v0.28.0/go.mod h1:rmgy+3RHxRZMyY0jjAJShp2zgEdOqj2AO7U0pYmeQ7U=
|
golang.org/x/crypto v0.38.0/go.mod h1:MvrbAqul58NNYPKnOra203SB9vpuZW0e+RRZV+Ggqjw=
|
||||||
golang.org/x/exp v0.0.0-20221208152030-732eee02a75a h1:4iLhBPcpqFmylhnkbY3W0ONLUYYkDAW9xMFLfxgsvCw=
|
golang.org/x/exp v0.0.0-20250506013437-ce4c2cf36ca6 h1:y5zboxd6LQAqYIhHnB48p0ByQ/GnQx2BE33L8BOHQkI=
|
||||||
golang.org/x/exp v0.0.0-20221208152030-732eee02a75a/go.mod h1:CxIveKay+FTh1D0yPZemJVgC/95VzuuOLq5Qi4xnoYc=
|
golang.org/x/exp v0.0.0-20250506013437-ce4c2cf36ca6/go.mod h1:U6Lno4MTRCDY+Ba7aCcauB9T60gsv5s4ralQzP72ZoQ=
|
||||||
golang.org/x/image v0.18.0 h1:jGzIakQa/ZXI1I0Fxvaa9W7yP25TqT6cHIHn+6CqvSQ=
|
golang.org/x/image v0.25.0 h1:Y6uW6rH1y5y/LK1J8BPWZtr6yZ7hrsy6hFrXjgsc2fQ=
|
||||||
golang.org/x/image v0.18.0/go.mod h1:4yyo5vMFQjVjUcVk4jEQcU9MGy/rulF5WvUILseCM2E=
|
golang.org/x/image v0.25.0/go.mod h1:tCAmOEGthTtkalusGp1g3xa2gke8J6c2N565dTyl9Rs=
|
||||||
golang.org/x/mod v0.3.0/go.mod h1:s0Qsj1ACt9ePp/hMypM3fl4fZqREWJwdYDEqhRiZZUA=
|
golang.org/x/mod v0.3.0/go.mod h1:s0Qsj1ACt9ePp/hMypM3fl4fZqREWJwdYDEqhRiZZUA=
|
||||||
golang.org/x/net v0.0.0-20180906233101-161cd47e91fd/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4=
|
golang.org/x/net v0.0.0-20180906233101-161cd47e91fd/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4=
|
||||||
golang.org/x/net v0.0.0-20190404232315-eb5bcb51f2a3/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-20190620200207-3b0461eec859/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s=
|
||||||
golang.org/x/net v0.0.0-20200520004742-59133d7f0dd7/go.mod h1:qpuaurCH72eLCgpAm/N6yyVIVM9cpaDIP3A8BGJEC5A=
|
golang.org/x/net v0.0.0-20200520004742-59133d7f0dd7/go.mod h1:qpuaurCH72eLCgpAm/N6yyVIVM9cpaDIP3A8BGJEC5A=
|
||||||
golang.org/x/net v0.0.0-20201021035429-f5854403a974/go.mod h1:sp8m0HH+o8qH0wwXwYZr8TS3Oi6o0r6Gce1SSxlDquU=
|
golang.org/x/net v0.0.0-20201021035429-f5854403a974/go.mod h1:sp8m0HH+o8qH0wwXwYZr8TS3Oi6o0r6Gce1SSxlDquU=
|
||||||
golang.org/x/net v0.30.0 h1:AcW1SDZMkb8IpzCdQUaIq2sP4sZ4zw+55h6ynffypl4=
|
golang.org/x/net v0.40.0 h1:79Xs7wF06Gbdcg4kdCCIQArK11Z1hr5POQ6+fIYHNuY=
|
||||||
golang.org/x/net v0.30.0/go.mod h1:2wGyMJ5iFasEhkwi13ChkO/t1ECNC4X4eBKkVFyYFlU=
|
golang.org/x/net v0.40.0/go.mod h1:y0hY0exeL2Pku80/zKK7tpntoX23cqL3Oa6njdgRtds=
|
||||||
golang.org/x/sync v0.0.0-20180314180146-1d60e4601c6f/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM=
|
golang.org/x/sync v0.0.0-20180314180146-1d60e4601c6f/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-20190423024810-112230192c58/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-20201020160332-67f06af15bc9/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM=
|
||||||
@@ -149,12 +203,12 @@ golang.org/x/sys v0.0.0-20191120155948-bd437916bb0e/go.mod h1:h1NjWce9XRLGQEsW7w
|
|||||||
golang.org/x/sys v0.0.0-20200323222414-85ca7c5b95cd/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
|
golang.org/x/sys v0.0.0-20200323222414-85ca7c5b95cd/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
|
||||||
golang.org/x/sys v0.0.0-20200930185726-fdedc70b468f/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
|
golang.org/x/sys v0.0.0-20200930185726-fdedc70b468f/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
|
||||||
golang.org/x/sys v0.0.0-20210112080510-489259a85091/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
|
golang.org/x/sys v0.0.0-20210112080510-489259a85091/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
|
||||||
golang.org/x/sys v0.26.0 h1:KHjCJyddX0LoSTb3J+vWpupP9p0oznkqVk/IfjymZbo=
|
golang.org/x/sys v0.33.0 h1:q3i8TbbEz+JRD9ywIRlyRAQbM0qF7hu24q3teo2hbuw=
|
||||||
golang.org/x/sys v0.26.0/go.mod h1:/VUhepiaJMQUp4+oa/7Zr1D23ma6VTLIYjOOTFZPUcA=
|
golang.org/x/sys v0.33.0/go.mod h1:BJP2sWEmIv4KK5OTEluFJCKSidICx8ciO85XgH3Ak8k=
|
||||||
golang.org/x/text v0.3.0/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ=
|
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.3.3/go.mod h1:5Zoc/QRtKVWzQhOtBMvqHzDpF6irO9z98xDceosuGiQ=
|
||||||
golang.org/x/text v0.19.0 h1:kTxAhCbGbxhK0IwgSKiMO5awPoDQ0RpfiVYBfK860YM=
|
golang.org/x/text v0.25.0 h1:qVyWApTSYLk/drJRO5mDlNYskwQznZmkpV2c8q9zls4=
|
||||||
golang.org/x/text v0.19.0/go.mod h1:BuEKDfySbSR4drPmRPG/7iBdf8hvFMuRexcpahXilzY=
|
golang.org/x/text v0.25.0/go.mod h1:WEdwpYrmk1qmdHvhkSTNPm3app7v4rsT8F2UD6+VHIA=
|
||||||
golang.org/x/tools v0.0.0-20180917221912-90fa682c2a6e/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ=
|
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.0.0-20191119224855-298f0cb1881e/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo=
|
||||||
golang.org/x/tools v0.0.0-20201224043029-2b0845dc783e/go.mod h1:emZCQorbCU4vsT4fOWvOPXz4eW1wZW4PmDk9uLelYpA=
|
golang.org/x/tools v0.0.0-20201224043029-2b0845dc783e/go.mod h1:emZCQorbCU4vsT4fOWvOPXz4eW1wZW4PmDk9uLelYpA=
|
||||||
@@ -162,23 +216,33 @@ 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-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-20191204190536-9bdfabe68543/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0=
|
||||||
golang.org/x/xerrors v0.0.0-20200804184101-5ec99f83aff1/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-20250519155744-55703ea1f237 h1:Kog3KlB4xevJlAcbbbzPfRG0+X9fdoGM+UBRKVz6Wr0=
|
||||||
|
google.golang.org/genproto/googleapis/api v0.0.0-20250519155744-55703ea1f237/go.mod h1:ezi0AVyMKDWy5xAncvjLWH7UcLBB5n7y2fQ8MzjJcto=
|
||||||
|
google.golang.org/genproto/googleapis/rpc v0.0.0-20250519155744-55703ea1f237 h1:cJfm9zPbe1e873mHJzmQ1nwVEeRDU/T1wXDK2kUSU34=
|
||||||
|
google.golang.org/genproto/googleapis/rpc v0.0.0-20250519155744-55703ea1f237/go.mod h1:qQ0YXyHHx3XkvlzUtpXDkS29lDSafHMZBAZDc03LQ3A=
|
||||||
|
google.golang.org/grpc v1.72.2 h1:TdbGzwb82ty4OusHWepvFWGLgIbNo1/SUynEN0ssqv8=
|
||||||
|
google.golang.org/grpc v1.72.2/go.mod h1:wH5Aktxcg25y1I3w7H69nHfXdOG3UiadoBtjh3izSDM=
|
||||||
google.golang.org/protobuf v0.0.0-20200109180630-ec00e32a8dfd/go.mod h1:DFci5gLYBciE7Vtevhsrf46CRTquxDuWsQurQQe4oz8=
|
google.golang.org/protobuf v0.0.0-20200109180630-ec00e32a8dfd/go.mod h1:DFci5gLYBciE7Vtevhsrf46CRTquxDuWsQurQQe4oz8=
|
||||||
google.golang.org/protobuf v0.0.0-20200221191635-4d8936d0db64/go.mod h1:kwYJMbMJ01Woi6D6+Kah6886xMZcty6N08ah7+eCXa0=
|
google.golang.org/protobuf v0.0.0-20200221191635-4d8936d0db64/go.mod h1:kwYJMbMJ01Woi6D6+Kah6886xMZcty6N08ah7+eCXa0=
|
||||||
google.golang.org/protobuf v0.0.0-20200228230310-ab0ca4ff8a60/go.mod h1:cfTl7dwQJ+fmap5saPgwCLgHXTUD7jkjRqWcaiX5VyM=
|
google.golang.org/protobuf v0.0.0-20200228230310-ab0ca4ff8a60/go.mod h1:cfTl7dwQJ+fmap5saPgwCLgHXTUD7jkjRqWcaiX5VyM=
|
||||||
google.golang.org/protobuf v1.20.1-0.20200309200217-e05f789c0967/go.mod h1:A+miEFZTKqfCUM6K7xSMQL9OKL/b6hQv+e19PK+JZNE=
|
google.golang.org/protobuf v1.20.1-0.20200309200217-e05f789c0967/go.mod h1:A+miEFZTKqfCUM6K7xSMQL9OKL/b6hQv+e19PK+JZNE=
|
||||||
google.golang.org/protobuf v1.21.0/go.mod h1:47Nbq4nVaFHyn7ilMalzfO3qCViNmqZ2kzikPIcrTAo=
|
google.golang.org/protobuf v1.21.0/go.mod h1:47Nbq4nVaFHyn7ilMalzfO3qCViNmqZ2kzikPIcrTAo=
|
||||||
google.golang.org/protobuf v1.23.0/go.mod h1:EGpADcykh3NcUnDUJcl1+ZksZNG86OlYog2l/sGQquU=
|
google.golang.org/protobuf v1.23.0/go.mod h1:EGpADcykh3NcUnDUJcl1+ZksZNG86OlYog2l/sGQquU=
|
||||||
google.golang.org/protobuf v1.35.1 h1:m3LfL6/Ca+fqnjnlqQXNpFPABW1UD7mjh8KO2mKFytA=
|
google.golang.org/protobuf v1.36.6 h1:z1NpPI8ku2WgiWnf+t9wTPsn6eP1L7ksHUlkfLvd9xY=
|
||||||
google.golang.org/protobuf v1.35.1/go.mod h1:9fA7Ob0pmnwhb644+1+CVWFRbNajQ6iRojtC/QF5bRE=
|
google.golang.org/protobuf v1.36.6/go.mod h1:jduwjTPXsFjZGTmRluh+L6NjiWu7pchiJ2/5YcXBHnY=
|
||||||
gopkg.in/check.v1 v0.0.0-20161208181325-20d25e280405/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0=
|
gopkg.in/check.v1 v0.0.0-20161208181325-20d25e280405/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0=
|
||||||
gopkg.in/check.v1 v1.0.0-20190902080502-41f04d3bba15/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0=
|
gopkg.in/check.v1 v1.0.0-20190902080502-41f04d3bba15/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0=
|
||||||
gopkg.in/check.v1 v1.0.0-20201130134442-10cb98267c6c h1:Hei/4ADfdWqJk1ZMxUNpqntNwaWcugrBjAiHlqqRiVk=
|
gopkg.in/check.v1 v1.0.0-20201130134442-10cb98267c6c h1:Hei/4ADfdWqJk1ZMxUNpqntNwaWcugrBjAiHlqqRiVk=
|
||||||
gopkg.in/check.v1 v1.0.0-20201130134442-10cb98267c6c/go.mod h1:JHkPIbrfpd72SG/EVd6muEfDQjcINNoR0C8j2r3qZ4Q=
|
gopkg.in/check.v1 v1.0.0-20201130134442-10cb98267c6c/go.mod h1:JHkPIbrfpd72SG/EVd6muEfDQjcINNoR0C8j2r3qZ4Q=
|
||||||
gopkg.in/fsnotify.v1 v1.4.7/go.mod h1:Tz8NjZHkW78fSQdbUxIjBTcgA1z1m8ZHf0WmKUhAMys=
|
gopkg.in/fsnotify.v1 v1.4.7/go.mod h1:Tz8NjZHkW78fSQdbUxIjBTcgA1z1m8ZHf0WmKUhAMys=
|
||||||
|
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/tomb.v1 v1.0.0-20141024135613-dd632973f1e7 h1:uRGJdciOHaEIrze2W8Q3AKkepLTh2hOroT7a+7czfdQ=
|
gopkg.in/tomb.v1 v1.0.0-20141024135613-dd632973f1e7 h1:uRGJdciOHaEIrze2W8Q3AKkepLTh2hOroT7a+7czfdQ=
|
||||||
gopkg.in/tomb.v1 v1.0.0-20141024135613-dd632973f1e7/go.mod h1:dt/ZhP58zS4L8KSrWDmTeBkI65Dw0HsyUHuEVlX15mw=
|
gopkg.in/tomb.v1 v1.0.0-20141024135613-dd632973f1e7/go.mod h1:dt/ZhP58zS4L8KSrWDmTeBkI65Dw0HsyUHuEVlX15mw=
|
||||||
gopkg.in/yaml.v2 v2.2.2/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI=
|
gopkg.in/yaml.v2 v2.2.2/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI=
|
||||||
gopkg.in/yaml.v2 v2.2.4/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI=
|
gopkg.in/yaml.v2 v2.2.4/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI=
|
||||||
gopkg.in/yaml.v2 v2.3.0/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI=
|
gopkg.in/yaml.v2 v2.3.0/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=
|
||||||
gopkg.in/yaml.v3 v3.0.1 h1:fxVm/GzAzEWqLHuvctI91KS9hhNmmWOoWu0XTYJS7CA=
|
gopkg.in/yaml.v3 v3.0.1 h1:fxVm/GzAzEWqLHuvctI91KS9hhNmmWOoWu0XTYJS7CA=
|
||||||
gopkg.in/yaml.v3 v3.0.1/go.mod h1:K4uyk7z7BCEPqu6E+C64Yfv1cQ7kz7rIZviUmN+EgEM=
|
gopkg.in/yaml.v3 v3.0.1/go.mod h1:K4uyk7z7BCEPqu6E+C64Yfv1cQ7kz7rIZviUmN+EgEM=
|
||||||
|
|||||||
@@ -62,8 +62,8 @@ func (c *History) HistoryQueryAndListPage() {
|
|||||||
|
|
||||||
// 计算分页数
|
// 计算分页数
|
||||||
count := account.GetAccountHistoryLenByMap(in)
|
count := account.GetAccountHistoryLenByMap(in)
|
||||||
totalPage := count / limit // 计算总页数
|
totalPage := count / limit
|
||||||
if count%limit != 0 { // 不满一页的数据按一页计算
|
if count%limit != 0 {
|
||||||
totalPage++
|
totalPage++
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -83,7 +83,7 @@ func (c *History) HistoryQueryAndListPage() {
|
|||||||
}
|
}
|
||||||
|
|
||||||
// 数据回显
|
// 数据回显
|
||||||
out := make(map[string]interface{})
|
out := make(map[string]any)
|
||||||
out["limit"] = limit // 分页数据
|
out["limit"] = limit // 分页数据
|
||||||
out["page"] = page
|
out["page"] = page
|
||||||
out["totalPage"] = totalPage
|
out["totalPage"] = totalPage
|
||||||
|
|||||||
@@ -1,27 +1,20 @@
|
|||||||
package controllers
|
package controllers
|
||||||
|
|
||||||
/***************************************************
|
|
||||||
** @Desc : This file for 处理Excel文件
|
|
||||||
** @Time : 19.12.6 16:25
|
|
||||||
** @Author : Joker
|
|
||||||
** @File : deal_excel
|
|
||||||
** @Last Modified by : Joker
|
|
||||||
** @Last Modified time: 19.12.6 16:25
|
|
||||||
** @Software: GoLand
|
|
||||||
****************************************************/
|
|
||||||
|
|
||||||
import (
|
import (
|
||||||
|
"bytes"
|
||||||
"fmt"
|
"fmt"
|
||||||
"github.com/beego/beego/v2/core/logs"
|
|
||||||
"github.com/tealeg/xlsx"
|
|
||||||
"merchant/internal/models/merchant"
|
"merchant/internal/models/merchant"
|
||||||
order2 "merchant/internal/models/order"
|
order2 "merchant/internal/models/order"
|
||||||
"merchant/internal/models/payfor"
|
"merchant/internal/models/payfor"
|
||||||
|
"merchant/internal/otelTrace"
|
||||||
"merchant/internal/sys/enum"
|
"merchant/internal/sys/enum"
|
||||||
"merchant/internal/utils"
|
"merchant/internal/utils"
|
||||||
"os"
|
"os"
|
||||||
"strings"
|
"strings"
|
||||||
"time"
|
"time"
|
||||||
|
|
||||||
|
"github.com/beego/beego/v2/core/logs"
|
||||||
|
"github.com/tealeg/xlsx"
|
||||||
)
|
)
|
||||||
|
|
||||||
type DealExcel struct {
|
type DealExcel struct {
|
||||||
@@ -40,6 +33,7 @@ func (c *DealExcel) DownloadExcelModel() {
|
|||||||
|
|
||||||
// 导出订单记录
|
// 导出订单记录
|
||||||
func (c *DealExcel) MakeOrderExcel() {
|
func (c *DealExcel) MakeOrderExcel() {
|
||||||
|
ctx := c.Ctx.Request.Context()
|
||||||
us := c.GetSession(enum.UserSession)
|
us := c.GetSession(enum.UserSession)
|
||||||
u := us.(merchant.MerchantInfo)
|
u := us.(merchant.MerchantInfo)
|
||||||
|
|
||||||
@@ -62,37 +56,33 @@ func (c *DealExcel) MakeOrderExcel() {
|
|||||||
}
|
}
|
||||||
|
|
||||||
var (
|
var (
|
||||||
msg = enum.FailedString
|
msg = enum.FailedString
|
||||||
flag = enum.FailedFlag
|
flag = enum.FailedFlag
|
||||||
fileName = "trade_order-" + pubMethod.GetNowTimeV2() + pubMethod.RandomString(6) + ".xlsx"
|
|
||||||
|
|
||||||
file *xlsx.File
|
|
||||||
sheet *xlsx.Sheet
|
|
||||||
row *xlsx.Row
|
|
||||||
cell *xlsx.Cell
|
|
||||||
err error
|
|
||||||
)
|
)
|
||||||
|
|
||||||
// 数据获取
|
// 数据获取
|
||||||
list := order2.GetOrderProfitByMap(in, -1, 0)
|
list := order2.GetOrderProfitByMap(ctx, in, -1, 0)
|
||||||
if len(list) <= 0 {
|
if len(list) <= 0 {
|
||||||
msg = "没有检索到数据!"
|
msg = "没有检索到数据!"
|
||||||
goto stopRun
|
c.Data["json"] = pubMethod.JsonFormat(flag, "", msg, "")
|
||||||
|
_ = c.ServeJSON()
|
||||||
|
c.StopRun()
|
||||||
}
|
}
|
||||||
|
|
||||||
// 写入记录
|
// 写入记录
|
||||||
file = xlsx.NewFile()
|
file := xlsx.NewFile()
|
||||||
sheet, err = file.AddSheet("订单记录")
|
sheet, err := file.AddSheet("订单记录")
|
||||||
if err != nil {
|
if err != nil {
|
||||||
utils.LogError(fmt.Sprintf("商户:%s 导出订单记录,发生错误:%v", u.MerchantName, err))
|
otelTrace.Logger.WithContext(ctx).Error(fmt.Sprintf("商户:%s 导出订单记录,发生错误:%v", u.MerchantName, err))
|
||||||
msg = enum.FailedToAdmin
|
msg = enum.FailedToAdmin
|
||||||
goto stopRun
|
c.Data["json"] = pubMethod.JsonFormat(flag, "", msg, "")
|
||||||
|
_ = c.ServeJSON()
|
||||||
|
c.StopRun()
|
||||||
}
|
}
|
||||||
|
|
||||||
// 第一行
|
// 第一行
|
||||||
row = sheet.AddRow()
|
row := sheet.AddRow()
|
||||||
row.SetHeightCM(1)
|
row.SetHeightCM(1)
|
||||||
cell = row.AddCell()
|
cell := row.AddCell()
|
||||||
cell.Value = "平台订单号"
|
cell.Value = "平台订单号"
|
||||||
cell = row.AddCell()
|
cell = row.AddCell()
|
||||||
cell.Value = "商户订单号"
|
cell.Value = "商户订单号"
|
||||||
@@ -119,10 +109,8 @@ func (c *DealExcel) MakeOrderExcel() {
|
|||||||
addCell = addRow.AddCell()
|
addCell = addRow.AddCell()
|
||||||
addCell.Value = fmt.Sprintf("%f", v.OrderAmount)
|
addCell.Value = fmt.Sprintf("%f", v.OrderAmount)
|
||||||
|
|
||||||
var (
|
var st, t string
|
||||||
st = ""
|
|
||||||
t string
|
|
||||||
)
|
|
||||||
switch v.Status {
|
switch v.Status {
|
||||||
case "failed":
|
case "failed":
|
||||||
st = "交易失败"
|
st = "交易失败"
|
||||||
@@ -143,20 +131,25 @@ func (c *DealExcel) MakeOrderExcel() {
|
|||||||
addCell.Value = t
|
addCell.Value = t
|
||||||
}
|
}
|
||||||
|
|
||||||
err = file.Save(enum.ExcelDownloadPath + fileName)
|
// 缓冲数据流到 response
|
||||||
|
buffer := bytes.NewBuffer(nil)
|
||||||
|
err = file.Write(buffer)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
utils.LogError(fmt.Sprintf("商户:%s 导出订单记录,保存文件发生错误:%v", u.MerchantName, err))
|
otelTrace.Logger.WithContext(ctx).Error(fmt.Sprintf("商户:%s 导出订单记录,保存文件发生错误:%v", u.MerchantName, err))
|
||||||
msg = enum.FailedToAdmin
|
msg = enum.FailedToAdmin
|
||||||
goto stopRun
|
c.Data["json"] = pubMethod.JsonFormat(flag, "", msg, "")
|
||||||
|
_ = c.ServeJSON()
|
||||||
}
|
}
|
||||||
|
|
||||||
flag = enum.SuccessFlag
|
// force download
|
||||||
msg = fileName
|
c.Ctx.Output.Header("Content-Disposition", "attachment; filename=订单记录.xlsx")
|
||||||
|
c.Ctx.Output.Header("Content-Type", "application/octet-stream")
|
||||||
|
c.Ctx.Output.Header("Content-Transfer-Encoding", "binary")
|
||||||
|
c.Ctx.Output.Header("Expires", "0")
|
||||||
|
c.Ctx.Output.Header("Cache-Control", "must-revalidate")
|
||||||
|
c.Ctx.Output.Header("Pragma", "public")
|
||||||
|
|
||||||
stopRun:
|
c.Ctx.Output.Body(buffer.Bytes())
|
||||||
c.Data["json"] = pubMethod.JsonFormat(flag, "", msg, "")
|
|
||||||
_ = c.ServeJSON()
|
|
||||||
c.StopRun()
|
|
||||||
}
|
}
|
||||||
|
|
||||||
// 下载excel
|
// 下载excel
|
||||||
@@ -170,6 +163,7 @@ func (c *DealExcel) DownloadRecordExcel() {
|
|||||||
time.Sleep(3 * time.Second)
|
time.Sleep(3 * time.Second)
|
||||||
}
|
}
|
||||||
}()
|
}()
|
||||||
|
|
||||||
// 删除临时文件
|
// 删除临时文件
|
||||||
go func() {
|
go func() {
|
||||||
tk := time.NewTicker(5 * time.Minute)
|
tk := time.NewTicker(5 * time.Minute)
|
||||||
@@ -226,7 +220,10 @@ func (c *DealExcel) MakeComplaintExcel() {
|
|||||||
list := order2.GetOrderByMap(in, -1, 0)
|
list := order2.GetOrderByMap(in, -1, 0)
|
||||||
if len(list) <= 0 {
|
if len(list) <= 0 {
|
||||||
msg = "没有检索到数据!"
|
msg = "没有检索到数据!"
|
||||||
goto stopRun
|
c.Data["json"] = pubMethod.JsonFormat(flag, "", msg, "")
|
||||||
|
_ = c.ServeJSON()
|
||||||
|
c.StopRun()
|
||||||
|
return
|
||||||
}
|
}
|
||||||
|
|
||||||
// 写入记录
|
// 写入记录
|
||||||
@@ -235,7 +232,9 @@ func (c *DealExcel) MakeComplaintExcel() {
|
|||||||
if err != nil {
|
if err != nil {
|
||||||
utils.LogError(fmt.Sprintf("商户:%s 导出投诉记录,发生错误:%v", u.MerchantName, err))
|
utils.LogError(fmt.Sprintf("商户:%s 导出投诉记录,发生错误:%v", u.MerchantName, err))
|
||||||
msg = enum.FailedToAdmin
|
msg = enum.FailedToAdmin
|
||||||
goto stopRun
|
c.Data["json"] = pubMethod.JsonFormat(flag, "", msg, "")
|
||||||
|
c.ServeJSON()
|
||||||
|
c.StopRun()
|
||||||
}
|
}
|
||||||
|
|
||||||
// 第一行
|
// 第一行
|
||||||
@@ -282,16 +281,14 @@ func (c *DealExcel) MakeComplaintExcel() {
|
|||||||
if err != nil {
|
if err != nil {
|
||||||
utils.LogError(fmt.Sprintf("商户:%s 导出投诉记录,保存文件发生错误:%v", u.MerchantName, err))
|
utils.LogError(fmt.Sprintf("商户:%s 导出投诉记录,保存文件发生错误:%v", u.MerchantName, err))
|
||||||
msg = enum.FailedToAdmin
|
msg = enum.FailedToAdmin
|
||||||
goto stopRun
|
c.Data["json"] = pubMethod.JsonFormat(flag, "", msg, "")
|
||||||
|
c.ServeJSON()
|
||||||
|
c.StopRun()
|
||||||
}
|
}
|
||||||
|
|
||||||
flag = enum.SuccessFlag
|
flag = enum.SuccessFlag
|
||||||
msg = fileName
|
msg = fileName
|
||||||
|
|
||||||
stopRun:
|
|
||||||
c.Data["json"] = pubMethod.JsonFormat(flag, "", msg, "")
|
|
||||||
c.ServeJSON()
|
|
||||||
c.StopRun()
|
|
||||||
}
|
}
|
||||||
|
|
||||||
// 导出提现记录
|
// 导出提现记录
|
||||||
|
|||||||
@@ -2,12 +2,16 @@ package controllers
|
|||||||
|
|
||||||
import (
|
import (
|
||||||
"fmt"
|
"fmt"
|
||||||
|
"math"
|
||||||
"merchant/internal/models/account"
|
"merchant/internal/models/account"
|
||||||
merchant2 "merchant/internal/models/merchant"
|
merchant2 "merchant/internal/models/merchant"
|
||||||
order2 "merchant/internal/models/order"
|
order2 "merchant/internal/models/order"
|
||||||
"merchant/internal/models/road"
|
"merchant/internal/models/road"
|
||||||
"merchant/internal/sys/enum"
|
"merchant/internal/sys/enum"
|
||||||
"strconv"
|
"strconv"
|
||||||
|
|
||||||
|
"github.com/duke-git/lancet/v2/mathutil"
|
||||||
|
"github.com/duke-git/lancet/v2/slice"
|
||||||
)
|
)
|
||||||
|
|
||||||
type Index struct {
|
type Index struct {
|
||||||
@@ -19,7 +23,6 @@ func (c *Index) ShowUI() {
|
|||||||
us := c.GetSession(enum.UserSession)
|
us := c.GetSession(enum.UserSession)
|
||||||
u := us.(merchant2.MerchantInfo)
|
u := us.(merchant2.MerchantInfo)
|
||||||
c.Data["userName"] = u.MerchantName
|
c.Data["userName"] = u.MerchantName
|
||||||
|
|
||||||
c.TplName = "index.html"
|
c.TplName = "index.html"
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -30,30 +33,26 @@ func (c *Index) LoadUserAccountInfo() {
|
|||||||
|
|
||||||
ac := account.GetAccountByUid(u.MerchantUid)
|
ac := account.GetAccountByUid(u.MerchantUid)
|
||||||
|
|
||||||
info := make(map[string]interface{})
|
info := make(map[string]any)
|
||||||
// 账户余额
|
// 账户余额
|
||||||
info["balanceAmt"] = pubMethod.FormatFloat64ToString(ac.Balance)
|
info["balanceAmt"] = pubMethod.FormatFloat64ToString(ac.Balance)
|
||||||
|
// // 可用余额
|
||||||
// 可用余额
|
// info["settAmount"] = pubMethod.FormatFloat64ToString(ac.WaitAmount)
|
||||||
info["settAmount"] = pubMethod.FormatFloat64ToString(ac.WaitAmount)
|
// // 冻结金额
|
||||||
|
// info["freezeAmt"] = pubMethod.FormatFloat64ToString(ac.FreezeAmount)
|
||||||
// 冻结金额
|
// // 押款金额
|
||||||
info["freezeAmt"] = pubMethod.FormatFloat64ToString(ac.FreezeAmount)
|
// info["amountFrozen"] = pubMethod.FormatFloat64ToString(ac.LoanAmount)
|
||||||
|
|
||||||
// 押款金额
|
|
||||||
info["amountFrozen"] = pubMethod.FormatFloat64ToString(ac.LoanAmount)
|
|
||||||
|
|
||||||
c.Data["json"] = info
|
c.Data["json"] = info
|
||||||
c.ServeJSON()
|
c.ServeJSON(true)
|
||||||
c.StopRun()
|
|
||||||
}
|
}
|
||||||
|
|
||||||
// LoadCountOrder 加载总订单信息
|
// LoadCountOrder 加载总订单信息
|
||||||
func (c *Index) LoadCountOrder() {
|
func (c *Index) LoadCountOrder() {
|
||||||
|
ctx := c.Ctx.Request.Context()
|
||||||
us := c.GetSession(enum.UserSession)
|
us := c.GetSession(enum.UserSession)
|
||||||
u := us.(merchant2.MerchantInfo)
|
u := us.(merchant2.MerchantInfo)
|
||||||
|
|
||||||
md := merchant2.GetMerchantDeployByUid(u.MerchantUid)
|
md := merchant2.GetMerchantDeployByUid(ctx, u.MerchantUid)
|
||||||
|
|
||||||
type orderInPayWay struct {
|
type orderInPayWay struct {
|
||||||
PayWayName string // 支付方式名
|
PayWayName string // 支付方式名
|
||||||
@@ -68,7 +67,7 @@ func (c *Index) LoadCountOrder() {
|
|||||||
in := make(map[string]string)
|
in := make(map[string]string)
|
||||||
in["merchant_uid"] = u.MerchantUid
|
in["merchant_uid"] = u.MerchantUid
|
||||||
|
|
||||||
ways[k].PayWayName = road.GetRoadInfoByRoadUid(v.SingleRoadUid).ProductName
|
ways[k].PayWayName = road.GetRoadInfoByRoadUid(ctx, v.SingleRoadUid).ProductName
|
||||||
|
|
||||||
in["road_uid"] = v.SingleRoadUid
|
in["road_uid"] = v.SingleRoadUid
|
||||||
ways[k].OrderCount = order2.GetOrderLenByMap(in)
|
ways[k].OrderCount = order2.GetOrderLenByMap(in)
|
||||||
@@ -90,12 +89,13 @@ func (c *Index) LoadCountOrder() {
|
|||||||
|
|
||||||
// LoadOrderCount 加载总订单数
|
// LoadOrderCount 加载总订单数
|
||||||
func (c *Index) LoadOrderCount() {
|
func (c *Index) LoadOrderCount() {
|
||||||
|
ctx := c.Ctx.Request.Context()
|
||||||
|
|
||||||
us := c.GetSession(enum.UserSession)
|
us := c.GetSession(enum.UserSession)
|
||||||
u := us.(merchant2.MerchantInfo)
|
u := us.(merchant2.MerchantInfo)
|
||||||
|
|
||||||
out := make(map[string]interface{})
|
|
||||||
|
|
||||||
in := make(map[string]string)
|
in := make(map[string]string)
|
||||||
|
out := make(map[string]any)
|
||||||
|
|
||||||
in["merchant_uid"] = u.MerchantUid
|
in["merchant_uid"] = u.MerchantUid
|
||||||
out["orders"] = order2.GetOrderLenByMap(in)
|
out["orders"] = order2.GetOrderLenByMap(in)
|
||||||
|
|
||||||
@@ -108,7 +108,7 @@ func (c *Index) LoadOrderCount() {
|
|||||||
agentAll := 0.0
|
agentAll := 0.0
|
||||||
allAmount := 0.0
|
allAmount := 0.0
|
||||||
TadaySuccessNum := 0
|
TadaySuccessNum := 0
|
||||||
datainfo := order2.GetOrderProfitByMap(in, -1, 0)
|
datainfo := order2.GetOrderProfitByMap(ctx, in, -1, 0)
|
||||||
|
|
||||||
for _, v := range datainfo {
|
for _, v := range datainfo {
|
||||||
if v.Status != "success" {
|
if v.Status != "success" {
|
||||||
@@ -121,25 +121,23 @@ func (c *Index) LoadOrderCount() {
|
|||||||
TadaySuccessNum += 1
|
TadaySuccessNum += 1
|
||||||
}
|
}
|
||||||
|
|
||||||
out["TadaySupplierProfit"], _ = strconv.ParseFloat(fmt.Sprintf("%.3f", supplierAll), 3)
|
out["TadaySupplierProfit"], _ = strconv.ParseFloat(fmt.Sprintf("%.3f", supplierAll), 64)
|
||||||
out["TadayPlatformProfit"], _ = strconv.ParseFloat(fmt.Sprintf("%.3f", platformAll), 3)
|
out["TadayPlatformProfit"], _ = strconv.ParseFloat(fmt.Sprintf("%.3f", platformAll), 64)
|
||||||
out["TadayAgentProfit"], _ = strconv.ParseFloat(fmt.Sprintf("%.3f", agentAll), 3)
|
out["TadayAgentProfit"], _ = strconv.ParseFloat(fmt.Sprintf("%.3f", agentAll), 64)
|
||||||
out["TadayAllAmount"], _ = strconv.ParseFloat(fmt.Sprintf("%.3f", allAmount), 3)
|
out["TadayAllAmount"], _ = strconv.ParseFloat(fmt.Sprintf("%.3f", allAmount), 64)
|
||||||
|
|
||||||
out["TadaySuccessNum"] = TadaySuccessNum
|
out["TadaySuccessNum"] = TadaySuccessNum
|
||||||
out["TadayAllNum"] = len(datainfo)
|
out["TadayAllNum"] = len(datainfo)
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
if out["orders"].(int) == 0 {
|
if out["orders"].(int) == 0 {
|
||||||
out["suc_rate"] = 0
|
out["suc_rate"] = 0
|
||||||
} else {
|
} else {
|
||||||
out["suc_rate"] = fmt.Sprintf("%0.4f", float64(out["suc_orders"].(int))/float64(out["orders"].(int)))
|
out["suc_rate"] = fmt.Sprintf("%0.4f", math.Round(float64(out["suc_orders"].(int))/float64(out["orders"].(int))*10000)/10000)
|
||||||
}
|
}
|
||||||
|
|
||||||
c.Data["json"] = out
|
c.Data["json"] = out
|
||||||
c.ServeJSON()
|
c.ServeJSON()
|
||||||
c.StopRun()
|
|
||||||
}
|
}
|
||||||
|
|
||||||
// LoadUserPayWayUI 加载用户支付配置
|
// LoadUserPayWayUI 加载用户支付配置
|
||||||
@@ -152,26 +150,138 @@ func (c *Index) LoadUserPayWayUI() {
|
|||||||
}
|
}
|
||||||
|
|
||||||
func (c *Index) LoadUserPayWay() {
|
func (c *Index) LoadUserPayWay() {
|
||||||
|
ctx := c.Ctx.Request.Context()
|
||||||
us := c.GetSession(enum.UserSession)
|
us := c.GetSession(enum.UserSession)
|
||||||
u := us.(merchant2.MerchantInfo)
|
|
||||||
|
|
||||||
md := merchant2.GetMerchantDeployByUid(u.MerchantUid)
|
u := us.(merchant2.MerchantInfo)
|
||||||
|
md := merchant2.GetMerchantDeployByUid(ctx, u.MerchantUid)
|
||||||
|
|
||||||
type payConfig struct {
|
type payConfig struct {
|
||||||
No string // 通道编号
|
No string `json:"no"` // 通道编号
|
||||||
Name string // 产品名
|
Name string `json:"name"` // 产品名
|
||||||
Rate float64 // 通道费率
|
Rate float64 `json:"rate"` // 通道费率
|
||||||
|
Status string `json:"status"` // 通道状态
|
||||||
|
TodayAmount float64 `json:"todayAmount"` // 今日订单金额
|
||||||
|
TodayNum int `json:"todayNum"` // 今日订单数
|
||||||
|
TodaySucNum int `json:"todaySucNum"` // 今日成功订单数
|
||||||
|
TodaySucAmount float64 `json:"todaySucAmount"` // 今日成功订单金额
|
||||||
|
YesterdayAmount float64 `json:"yesterdayAmount"` // 昨日订单金额
|
||||||
|
YesterdayNum int `json:"yesterdayNum"` // 昨日订单数
|
||||||
|
YesterdaySucNum int `json:"yesterdaySucNum"` // 昨日成功订单数
|
||||||
|
YesterdaySucAmount float64 `json:"yesterdaySucAmount"` // 昨日成功订单金额
|
||||||
|
TodaySucRate float64 `json:"todaySucRate"` // 今日成功率
|
||||||
|
YesterdaySucRate float64 `json:"yesterdaySucRate"` // 昨日成功率
|
||||||
|
TotalAmount float64 `json:"totalAmount"` // 总订单金额
|
||||||
|
TotalNum int `json:"totalNum"` // 总订单数
|
||||||
|
TotalSucNum int `json:"totalSucNum"` // 总成功订单数
|
||||||
|
TotalSucRate float64 `json:"totalSucRate"` // 总成功率
|
||||||
|
TotalSucAmount float64 `json:"totalSucAmount"` // 总成功订单金额
|
||||||
}
|
}
|
||||||
|
|
||||||
ways := make([]payConfig, len(md))
|
type TotalSummary struct {
|
||||||
|
TodayAmount float64 `json:"todayAmount"` // 今日订单金额
|
||||||
for k, v := range md {
|
TodayNum int `json:"todayNum"` // 今日订单数
|
||||||
road_ := road.GetRoadInfoByRoadUid(v.SingleRoadUid)
|
TodaySucNum int `json:"todaySucNum"` // 今日成功订单数
|
||||||
ways[k].No = road_.RoadUid
|
TodaySucAmount float64 `json:"todaySucAmount"` // 今日成功订单金额
|
||||||
ways[k].Name = road_.RoadName
|
YesterdayAmount float64 `json:"yesterdayAmount"` // 昨日订单金额
|
||||||
|
YesterdayNum int `json:"yesterdayNum"` // 昨日订单数
|
||||||
|
YesterdaySucNum int `json:"yesterdaySucNum"` // 昨日成功订单数
|
||||||
|
YesterdaySucAmount float64 `json:"yesterdaySucAmount"` // 昨日成功订单金额
|
||||||
|
TodaySucRate float64 `json:"todaySucRate"` // 今日成功率
|
||||||
|
YesterdaySucRate float64 `json:"yesterdaySucRate"` // 昨日成功率
|
||||||
|
TotalAmount float64 `json:"totalAmount"` // 总订单金额
|
||||||
|
TotalNum int `json:"totalNum"` // 总订单数
|
||||||
|
TotalSucNum int `json:"totalSucNum"` // 总成功订单数
|
||||||
|
TotalSucRate float64 `json:"totalSucRate"` // 总成功率
|
||||||
|
TotalSucAmount float64 `json:"totalSucAmount"` // 总成功订单金额
|
||||||
}
|
}
|
||||||
|
|
||||||
c.Data["json"] = ways
|
totalSummary := TotalSummary{}
|
||||||
|
|
||||||
|
ways := slice.Map(md, func(index int, item merchant2.MerchantDeployInfo) payConfig {
|
||||||
|
|
||||||
|
road_ := road.GetRoadInfoByRoadUid(ctx, item.SingleRoadUid)
|
||||||
|
config := payConfig{
|
||||||
|
No: item.SingleRoadUid,
|
||||||
|
Name: road_.RoadName,
|
||||||
|
Rate: item.RollRoadPlatformRate,
|
||||||
|
}
|
||||||
|
|
||||||
|
rates := slice.Map(item.PlatformRate(ctx), func(index int, item merchant2.ProfitMargin) float64 {
|
||||||
|
return item.Value
|
||||||
|
})
|
||||||
|
if len(rates) > 0 {
|
||||||
|
config.Rate = mathutil.Average(rates...)
|
||||||
|
}
|
||||||
|
|
||||||
|
summary := order2.GetSummaryByRoadAndMerchant(ctx, item.SingleRoadUid, u.MerchantUid)
|
||||||
|
if len(summary) == 0 {
|
||||||
|
return config
|
||||||
|
}
|
||||||
|
slice.ForEach(summary, func(index int, item order2.Summary) {
|
||||||
|
totalSummary.TotalAmount += item.TotalAmount
|
||||||
|
totalSummary.TotalNum += item.TotalNum
|
||||||
|
totalSummary.TotalSucNum += item.SuccessNum
|
||||||
|
totalSummary.TotalSucAmount += item.SuccessAmount
|
||||||
|
})
|
||||||
|
totalSummary.TodayAmount += summary[0].TotalAmount
|
||||||
|
totalSummary.TodayNum += summary[0].TotalNum
|
||||||
|
totalSummary.TodaySucNum += summary[0].SuccessNum
|
||||||
|
totalSummary.TodaySucAmount += summary[0].SuccessAmount
|
||||||
|
|
||||||
|
config.TodayAmount = summary[0].TotalAmount
|
||||||
|
config.TodayNum = summary[0].TotalNum
|
||||||
|
config.TodaySucNum = summary[0].SuccessNum
|
||||||
|
config.TodaySucAmount = summary[0].SuccessAmount
|
||||||
|
config.TodaySucRate = summary[0].Rate
|
||||||
|
|
||||||
|
if len(summary) > 1 {
|
||||||
|
totalSummary.YesterdayAmount += summary[1].TotalAmount
|
||||||
|
totalSummary.YesterdayNum += summary[1].TotalNum
|
||||||
|
totalSummary.YesterdaySucNum += summary[1].SuccessNum
|
||||||
|
totalSummary.YesterdaySucAmount += summary[1].SuccessAmount
|
||||||
|
|
||||||
|
config.YesterdayAmount = summary[1].TotalAmount
|
||||||
|
config.YesterdayNum = summary[1].TotalNum
|
||||||
|
config.YesterdaySucNum = summary[1].SuccessNum
|
||||||
|
config.YesterdaySucAmount = summary[1].SuccessAmount
|
||||||
|
config.YesterdaySucRate = summary[1].Rate
|
||||||
|
}
|
||||||
|
|
||||||
|
config.TotalAmount = mathutil.Sum(slice.Map(summary, func(index int, item order2.Summary) float64 {
|
||||||
|
return item.TotalAmount
|
||||||
|
})...)
|
||||||
|
config.TotalNum = mathutil.Sum(slice.Map(summary, func(index int, item order2.Summary) int {
|
||||||
|
return item.TotalNum
|
||||||
|
})...)
|
||||||
|
config.TotalSucNum = mathutil.Sum(slice.Map(summary, func(index int, item order2.Summary) int {
|
||||||
|
return item.SuccessNum
|
||||||
|
})...)
|
||||||
|
config.TotalSucAmount = mathutil.Sum(slice.Map(summary, func(index int, item order2.Summary) float64 {
|
||||||
|
return item.SuccessAmount
|
||||||
|
})...)
|
||||||
|
if config.TotalNum != 0 {
|
||||||
|
config.TotalSucRate = mathutil.RoundToFloat(float64(config.TotalSucNum)/float64(config.TotalNum), 4)
|
||||||
|
}
|
||||||
|
return config
|
||||||
|
})
|
||||||
|
|
||||||
|
if totalSummary.TodayNum != 0 {
|
||||||
|
totalSummary.TodaySucRate = mathutil.RoundToFloat(float64(totalSummary.TodaySucNum)/float64(totalSummary.TodayNum), 4)
|
||||||
|
}
|
||||||
|
if totalSummary.YesterdayNum != 0 {
|
||||||
|
totalSummary.YesterdaySucRate = mathutil.RoundToFloat(float64(totalSummary.YesterdaySucNum)/float64(totalSummary.YesterdayNum), 4)
|
||||||
|
}
|
||||||
|
if totalSummary.TotalNum != 0 {
|
||||||
|
totalSummary.TotalSucRate = mathutil.RoundToFloat(float64(totalSummary.TotalSucNum)/float64(totalSummary.TotalNum), 4)
|
||||||
|
}
|
||||||
|
response := struct {
|
||||||
|
Ways []payConfig `json:"ways"`
|
||||||
|
TotalSummary TotalSummary `json:"totalSummary"`
|
||||||
|
}{
|
||||||
|
Ways: ways,
|
||||||
|
TotalSummary: totalSummary,
|
||||||
|
}
|
||||||
|
c.Data["json"] = response
|
||||||
c.ServeJSON()
|
c.ServeJSON()
|
||||||
c.StopRun()
|
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -34,7 +34,6 @@ func (c *KeepSession) Prepare() {
|
|||||||
}
|
}
|
||||||
|
|
||||||
_, b := c.Ctx.GetSecureCookie(uc.(string), enum.UserCookie)
|
_, b := c.Ctx.GetSecureCookie(uc.(string), enum.UserCookie)
|
||||||
//utils.LogNotice(fmt.Sprintf("客户端cookie:%s,服务端cookie:%s", cookie, uc.(string)))
|
|
||||||
if !b {
|
if !b {
|
||||||
c.DelSession(enum.UserSession)
|
c.DelSession(enum.UserSession)
|
||||||
c.Ctx.Redirect(302, "/")
|
c.Ctx.Redirect(302, "/")
|
||||||
|
|||||||
@@ -1,10 +1,8 @@
|
|||||||
package controllers
|
package controllers
|
||||||
|
|
||||||
import (
|
import (
|
||||||
"merchant/internal/models/account"
|
|
||||||
"merchant/internal/models/merchant"
|
"merchant/internal/models/merchant"
|
||||||
order2 "merchant/internal/models/order"
|
order2 "merchant/internal/models/order"
|
||||||
"merchant/internal/service"
|
|
||||||
"merchant/internal/sys/enum"
|
"merchant/internal/sys/enum"
|
||||||
"strconv"
|
"strconv"
|
||||||
"strings"
|
"strings"
|
||||||
@@ -105,16 +103,16 @@ func (c *TradeRecord) TradeQueryAndListPage() {
|
|||||||
}
|
}
|
||||||
|
|
||||||
// 数据回显
|
// 数据回显
|
||||||
out := make(map[string]interface{})
|
out := make(map[string]any)
|
||||||
out["limit"] = limit // 分页数据
|
out["limit"] = limit // 分页数据
|
||||||
out["page"] = page
|
out["page"] = page
|
||||||
out["totalPage"] = totalPage
|
out["totalPage"] = totalPage
|
||||||
out["root"] = res // 显示数据
|
out["root"] = res // 显示数据
|
||||||
|
|
||||||
out["profitSummary"] = account.ProfitSummary{
|
// out["profitSummary"] = account.ProfitSummary{
|
||||||
TotalProfit: service.QueryTotalSummary(in),
|
// TotalProfit: service.QueryTotalSummary(in),
|
||||||
TodayProfit: service.QueryTodaySummary(in),
|
// TodayProfit: service.QueryTodaySummary(in),
|
||||||
}
|
// }
|
||||||
|
|
||||||
c.Data["json"] = out
|
c.Data["json"] = out
|
||||||
|
|
||||||
|
|||||||
@@ -225,6 +225,7 @@ func (c *UserInfo) ResetTotp() {
|
|||||||
}
|
}
|
||||||
|
|
||||||
func (c *UserInfo) QueryAllowedRoad() {
|
func (c *UserInfo) QueryAllowedRoad() {
|
||||||
|
ctx := c.Ctx.Request.Context()
|
||||||
us := c.GetSession(enum.UserSession)
|
us := c.GetSession(enum.UserSession)
|
||||||
u := us.(merchant.MerchantInfo)
|
u := us.(merchant.MerchantInfo)
|
||||||
if u.Id == 0 {
|
if u.Id == 0 {
|
||||||
@@ -235,7 +236,7 @@ func (c *UserInfo) QueryAllowedRoad() {
|
|||||||
_ = c.ServeJSON()
|
_ = c.ServeJSON()
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
result := service.QueryAllowedRoad(u.MerchantUid)
|
result := service.QueryAllowedRoad(ctx, u.MerchantUid)
|
||||||
c.Data["json"] = response.CommonResWithData{
|
c.Data["json"] = response.CommonResWithData{
|
||||||
CommonRes: response.CommonRes{
|
CommonRes: response.CommonRes{
|
||||||
Msg: "成功",
|
Msg: "成功",
|
||||||
@@ -248,6 +249,7 @@ func (c *UserInfo) QueryAllowedRoad() {
|
|||||||
|
|
||||||
// QueryAllowedMM 获取允许的面值
|
// QueryAllowedMM 获取允许的面值
|
||||||
func (c *UserInfo) QueryAllowedMM() {
|
func (c *UserInfo) QueryAllowedMM() {
|
||||||
|
ctx := c.Ctx.Request.Context()
|
||||||
roadCode := c.GetString("roadCode")
|
roadCode := c.GetString("roadCode")
|
||||||
if roadCode == "" {
|
if roadCode == "" {
|
||||||
c.Data["json"] = response.CommonRes{
|
c.Data["json"] = response.CommonRes{
|
||||||
@@ -276,7 +278,7 @@ func (c *UserInfo) QueryAllowedMM() {
|
|||||||
_ = c.ServeJSON()
|
_ = c.ServeJSON()
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
result := service.QueryAllowedDeployInfoMM(u.MerchantUid, roadPool.RoadUid)
|
result := service.QueryAllowedDeployInfoMM(ctx, u.MerchantUid, roadPool.RoadUid)
|
||||||
returnList := make([]struct {
|
returnList := make([]struct {
|
||||||
ShowLabel float64 `json:"showLabel"`
|
ShowLabel float64 `json:"showLabel"`
|
||||||
}, 0)
|
}, 0)
|
||||||
|
|||||||
@@ -40,7 +40,6 @@ func GetAccountByUid(accountUid string) AccountInfo {
|
|||||||
if err != nil {
|
if err != nil {
|
||||||
logs.Error("get account by uid fail: ", err)
|
logs.Error("get account by uid fail: ", err)
|
||||||
}
|
}
|
||||||
|
|
||||||
return account
|
return account
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -1,19 +1,13 @@
|
|||||||
package merchant
|
package merchant
|
||||||
|
|
||||||
/***************************************************
|
|
||||||
** @Desc : This file for ...
|
|
||||||
** @Time : 2019/10/7 11:52
|
|
||||||
** @Author : yuebin
|
|
||||||
** @File : merchant_deploy_info
|
|
||||||
** @Last Modified by : yuebin
|
|
||||||
** @Last Modified time: 2019/10/7 11:52
|
|
||||||
** @Software: GoLand
|
|
||||||
****************************************************/
|
|
||||||
|
|
||||||
import (
|
import (
|
||||||
|
"context"
|
||||||
"encoding/json"
|
"encoding/json"
|
||||||
"fmt"
|
"fmt"
|
||||||
|
"merchant/internal/otelTrace"
|
||||||
|
|
||||||
"github.com/beego/beego/v2/client/orm"
|
"github.com/beego/beego/v2/client/orm"
|
||||||
|
"go.uber.org/zap"
|
||||||
|
|
||||||
"github.com/beego/beego/v2/core/logs"
|
"github.com/beego/beego/v2/core/logs"
|
||||||
)
|
)
|
||||||
@@ -41,6 +35,14 @@ type MerchantDeployInfo struct {
|
|||||||
CreateTime string
|
CreateTime string
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func (m *MerchantDeployInfo) PlatformRate(ctx context.Context) []ProfitMargin {
|
||||||
|
list := []ProfitMargin{}
|
||||||
|
if err := json.Unmarshal([]byte(m.SingleRoadPlatformRate), &list); err != nil {
|
||||||
|
otelTrace.Logger.WithContext(ctx).Error("unmarshal single road platform rate fail: ", zap.Error(err))
|
||||||
|
}
|
||||||
|
return list
|
||||||
|
}
|
||||||
|
|
||||||
func (m *MerchantDeployInfo) GetSingleRoadPlatformRateMapping() (map[int]float64, error) {
|
func (m *MerchantDeployInfo) GetSingleRoadPlatformRateMapping() (map[int]float64, error) {
|
||||||
myMap := make(map[int]float64)
|
myMap := make(map[int]float64)
|
||||||
|
|
||||||
@@ -96,9 +98,9 @@ func GetMerchantDeployByUidAndPayType(uid, payType string) MerchantDeployInfo {
|
|||||||
return merchantDeployInfo
|
return merchantDeployInfo
|
||||||
}
|
}
|
||||||
|
|
||||||
func GetMerchantDeployByUid(uid string) (ms []MerchantDeployInfo) {
|
func GetMerchantDeployByUid(ctx context.Context, uid string) (ms []MerchantDeployInfo) {
|
||||||
o := orm.NewOrm()
|
o := orm.NewOrm()
|
||||||
_, err := o.QueryTable(MERCHANT_DEPLOY_INFO).Filter("merchant_uid", uid).All(&ms)
|
_, err := o.QueryTable(MERCHANT_DEPLOY_INFO).Filter("merchant_uid", uid).AllWithCtx(ctx, &ms)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
logs.Error("get merchant deploy by uid fail:", err)
|
logs.Error("get merchant deploy by uid fail:", err)
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -1,16 +1,8 @@
|
|||||||
package merchant
|
package merchant
|
||||||
|
|
||||||
/***************************************************
|
|
||||||
** @Desc : This file for ...
|
|
||||||
** @Time : 2019/9/28 16:47
|
|
||||||
** @Author : yuebin
|
|
||||||
** @File : merchant_info
|
|
||||||
** @Last Modified by : yuebin
|
|
||||||
** @Last Modified time: 2019/9/28 16:47
|
|
||||||
** @Software: GoLand
|
|
||||||
****************************************************/
|
|
||||||
|
|
||||||
import (
|
import (
|
||||||
|
"context"
|
||||||
|
|
||||||
"github.com/beego/beego/v2/client/orm"
|
"github.com/beego/beego/v2/client/orm"
|
||||||
"github.com/beego/beego/v2/core/logs"
|
"github.com/beego/beego/v2/core/logs"
|
||||||
)
|
)
|
||||||
@@ -41,30 +33,33 @@ type MerchantInfo struct {
|
|||||||
}
|
}
|
||||||
|
|
||||||
type ProfitMargin struct {
|
type ProfitMargin struct {
|
||||||
FactLabel float64 `json:"factLabel"`
|
Sort int `json:"sort" orm:"sort,omitempty"`
|
||||||
ShowLabel float64 `json:"showLabel"`
|
ShowLabel float64 `json:"showLabel" orm:"show_label,omitempty"`
|
||||||
LinkID string `json:"linkID"`
|
FactLabel float64 `json:"factLabel" orm:"fact_label,omitempty"`
|
||||||
|
Value float64 `json:"value" orm:"value,omitempty"`
|
||||||
|
PlatformLabel string `json:"platformLabel" description:"平台" orm:"platform_label,omitempty"`
|
||||||
|
IsLinkSingle bool `json:"isLinkSingle" description:"链接是否单独放置" orm:"is_link_single,omitempty"`
|
||||||
|
LinkID string `json:"linkID" orm:"link_id,omitempty"`
|
||||||
}
|
}
|
||||||
|
|
||||||
const MERCHANT_INFO = "merchant_info"
|
const MERCHANT_INFO = "merchant_info"
|
||||||
|
|
||||||
func IsExistByMerchantName(merchantName string) bool {
|
func IsExistByMerchantName(ctx context.Context, merchantName string) bool {
|
||||||
o := orm.NewOrm()
|
o := orm.NewOrm()
|
||||||
exist := o.QueryTable(MERCHANT_INFO).Filter("merchant_name", merchantName).Exist()
|
exist := o.QueryTable(MERCHANT_INFO).Filter("merchant_name", merchantName).ExistWithCtx(ctx)
|
||||||
|
return exist
|
||||||
|
}
|
||||||
|
|
||||||
|
func IsExistByMerchantUid(ctx context.Context, uid string) bool {
|
||||||
|
o := orm.NewOrm()
|
||||||
|
exist := o.QueryTable(MERCHANT_INFO).Filter("merchant_uid", uid).ExistWithCtx(ctx)
|
||||||
|
|
||||||
return exist
|
return exist
|
||||||
}
|
}
|
||||||
|
|
||||||
func IsExistByMerchantUid(uid string) bool {
|
func IsExistMerchantByAgentUid(ctx context.Context, uid string) bool {
|
||||||
o := orm.NewOrm()
|
o := orm.NewOrm()
|
||||||
exist := o.QueryTable(MERCHANT_INFO).Filter("merchant_uid", uid).Exist()
|
exist := o.QueryTable(MERCHANT_INFO).Filter("belong_agent_uid", uid).ExistWithCtx(ctx)
|
||||||
|
|
||||||
return exist
|
|
||||||
}
|
|
||||||
|
|
||||||
func IsExistMerchantByAgentUid(uid string) bool {
|
|
||||||
o := orm.NewOrm()
|
|
||||||
exist := o.QueryTable(MERCHANT_INFO).Filter("belong_agent_uid", uid).Exist()
|
|
||||||
|
|
||||||
return exist
|
return exist
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -1,15 +1,5 @@
|
|||||||
package merchant
|
package merchant
|
||||||
|
|
||||||
/***************************************************
|
|
||||||
** @Desc : This file for ...
|
|
||||||
** @Time : 2019/11/22 13:07
|
|
||||||
** @Author : yuebin
|
|
||||||
** @File : merchant_load_info
|
|
||||||
** @Last Modified by : yuebin
|
|
||||||
** @Last Modified time: 2019/11/22 13:07
|
|
||||||
** @Software: GoLand
|
|
||||||
****************************************************/
|
|
||||||
|
|
||||||
import (
|
import (
|
||||||
"github.com/beego/beego/v2/client/orm"
|
"github.com/beego/beego/v2/client/orm"
|
||||||
"github.com/beego/beego/v2/core/logs"
|
"github.com/beego/beego/v2/core/logs"
|
||||||
|
|||||||
@@ -1,10 +1,13 @@
|
|||||||
package order
|
package order
|
||||||
|
|
||||||
import (
|
import (
|
||||||
|
"context"
|
||||||
|
"merchant/internal/models/account"
|
||||||
|
"merchant/internal/otelTrace"
|
||||||
|
"strings"
|
||||||
|
|
||||||
"github.com/beego/beego/v2/client/orm"
|
"github.com/beego/beego/v2/client/orm"
|
||||||
"github.com/beego/beego/v2/core/logs"
|
"github.com/beego/beego/v2/core/logs"
|
||||||
"merchant/internal/models/account"
|
|
||||||
"strings"
|
|
||||||
)
|
)
|
||||||
|
|
||||||
type OrderProfitInfo struct {
|
type OrderProfitInfo struct {
|
||||||
@@ -93,7 +96,7 @@ func GetOrderProfitLenByMap(params map[string]string) int {
|
|||||||
return int(cnt)
|
return int(cnt)
|
||||||
}
|
}
|
||||||
|
|
||||||
func GetOrderProfitByMap(params map[string]string, display, offset int) []OrderProfitInfo {
|
func GetOrderProfitByMap(ctx context.Context, params map[string]string, display, offset int) []OrderProfitInfo {
|
||||||
o := orm.NewOrm()
|
o := orm.NewOrm()
|
||||||
var orderProfitInfoList []OrderProfitInfo
|
var orderProfitInfoList []OrderProfitInfo
|
||||||
qs := o.QueryTable(ORDER_PROFIT_INFO)
|
qs := o.QueryTable(ORDER_PROFIT_INFO)
|
||||||
@@ -102,9 +105,9 @@ func GetOrderProfitByMap(params map[string]string, display, offset int) []OrderP
|
|||||||
qs = qs.Filter(k, v)
|
qs = qs.Filter(k, v)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
_, err := qs.Limit(display, offset).OrderBy("-create_time").All(&orderProfitInfoList)
|
_, err := qs.Limit(display, offset).OrderBy("-create_time").AllWithCtx(ctx, &orderProfitInfoList)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
logs.Error("get order by map fail: ", err)
|
otelTrace.Logger.WithContext(ctx).Error("查询失败")
|
||||||
}
|
}
|
||||||
return orderProfitInfoList
|
return orderProfitInfoList
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -1,13 +1,66 @@
|
|||||||
package order
|
package order
|
||||||
|
|
||||||
|
import (
|
||||||
|
"context"
|
||||||
|
"time"
|
||||||
|
|
||||||
|
"github.com/beego/beego/v2/client/orm"
|
||||||
|
"github.com/duke-git/lancet/v2/slice"
|
||||||
|
)
|
||||||
|
|
||||||
// Summary 订单总结
|
// Summary 订单总结
|
||||||
type Summary struct {
|
type Summary struct {
|
||||||
TotalNum int `json:"totalNum"` // 提交订单数
|
TotalNum int `json:"totalNum"` // 提交订单数
|
||||||
TotalAmount float64 `json:"totalAmount"` // 订单总金额
|
TotalAmount float64 `json:"totalAmount"` // 订单总金额
|
||||||
PaidNum int `json:"paidNum"` // 已付订单数
|
Rate float64 `json:"rate"` // 成功率
|
||||||
PaidAmount float64 `json:"paidAmount"` // 已付总金额
|
SuccessNum int `json:"successNum"` // 成功订单数
|
||||||
PlatformIncome float64 `json:"platformIncome"` // 平台收入
|
SuccessAmount float64 `json:"successAmount"` // 成功订单总金额
|
||||||
MerchantIncome float64 `json:"merchantIncome"` // 商户收入
|
Date time.Time `json:"date"` // 日期
|
||||||
AgencyIncome float64 `json:"agencyIncome"` // 代理收入
|
}
|
||||||
ChannelCost float64 `json:"channelCost"` // 通道成本
|
|
||||||
|
func GetSummaryByRoadAndMerchant(ctx context.Context, roadUid, merchantUid string) (summariesList []Summary) {
|
||||||
|
o := orm.NewOrm()
|
||||||
|
summariesList = make([]Summary, 0)
|
||||||
|
sql := `
|
||||||
|
SELECT
|
||||||
|
COUNT(id) AS totalNum,
|
||||||
|
SUM(order_info.order_amount) AS totalAmount,
|
||||||
|
COUNT(CASE WHEN order_info.status = 'success' THEN 1 END) AS successNum,
|
||||||
|
SUM(CASE WHEN order_info.status = 'success' THEN order_info.order_amount ELSE 0 END) AS successAmount,
|
||||||
|
DATE(create_time) AS date
|
||||||
|
FROM
|
||||||
|
order_info
|
||||||
|
WHERE
|
||||||
|
order_info.road_uid = ? AND
|
||||||
|
order_info.merchant_uid = ?
|
||||||
|
GROUP BY
|
||||||
|
DATE(create_time)
|
||||||
|
`
|
||||||
|
|
||||||
|
o.RawWithCtx(ctx, sql, roadUid, merchantUid).QueryRows(&summariesList)
|
||||||
|
|
||||||
|
if len(summariesList) == 0 {
|
||||||
|
return
|
||||||
|
}
|
||||||
|
|
||||||
|
// 补齐从今天到第一天中空缺天的数据
|
||||||
|
firstDate := summariesList[0].Date
|
||||||
|
for date := time.Now(); date.After(firstDate); date = date.AddDate(0, 0, -1) {
|
||||||
|
if slice.ContainBy(summariesList, func(item Summary) bool {
|
||||||
|
return item.Date.Format("2006-01-02") == date.Format("2006-01-02")
|
||||||
|
}) {
|
||||||
|
continue
|
||||||
|
}
|
||||||
|
summariesList = append(summariesList, Summary{Date: date})
|
||||||
|
}
|
||||||
|
|
||||||
|
// 计算成功率
|
||||||
|
for _, summary := range summariesList {
|
||||||
|
if summary.TotalNum == 0 {
|
||||||
|
summary.Rate = 0
|
||||||
|
continue
|
||||||
|
}
|
||||||
|
summary.Rate = float64(summary.SuccessNum) / float64(summary.TotalNum)
|
||||||
|
}
|
||||||
|
return
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -1,38 +1,50 @@
|
|||||||
package road
|
package road
|
||||||
|
|
||||||
import (
|
import (
|
||||||
|
"context"
|
||||||
|
"merchant/internal/otelTrace"
|
||||||
|
"time"
|
||||||
|
|
||||||
"github.com/beego/beego/v2/client/orm"
|
"github.com/beego/beego/v2/client/orm"
|
||||||
"github.com/beego/beego/v2/core/logs"
|
"github.com/beego/beego/v2/core/logs"
|
||||||
|
"go.uber.org/zap"
|
||||||
)
|
)
|
||||||
|
|
||||||
type RoadInfo struct {
|
type RoadInfo struct {
|
||||||
Id int
|
Id int
|
||||||
Status string
|
Status string
|
||||||
RoadName string
|
RoadName string
|
||||||
RoadUid string
|
RoadUid string
|
||||||
Remark string
|
Remark string
|
||||||
ProductName string
|
ProductName string
|
||||||
ProductUid string
|
ProductUid string
|
||||||
PayType string
|
PayType string
|
||||||
BasicFee float64
|
BasicFee float64
|
||||||
SettleFee float64
|
SettleFee float64
|
||||||
TotalLimit float64
|
TotalLimit float64
|
||||||
TodayLimit float64
|
TodayLimit float64
|
||||||
SingleMinLimit float64
|
SingleMinLimit float64
|
||||||
SingleMaxLimit float64
|
SingleMaxLimit float64
|
||||||
StarHour int
|
StarHour int
|
||||||
EndHour int
|
EndHour int
|
||||||
Params string
|
Params string
|
||||||
TodayIncome float64
|
TodayIncome float64
|
||||||
TotalIncome float64
|
TotalIncome float64
|
||||||
TodayProfit float64
|
TodayProfit float64
|
||||||
TotalProfit float64
|
TotalProfit float64
|
||||||
Balance float64
|
Balance float64
|
||||||
RequestAll int
|
RequestAll int
|
||||||
RequestSuccess int
|
RequestSuccess int
|
||||||
UpdateTime string
|
TodayRequestAll int `json:"TodayRequestAll"`
|
||||||
CreateTime string
|
TodayRequestSuccess int
|
||||||
ProductCode string
|
IsAllowDifferentResend int
|
||||||
|
TransactionType string
|
||||||
|
PaymentHtml string
|
||||||
|
|
||||||
|
ProductCode string
|
||||||
|
|
||||||
|
CreateTime time.Time
|
||||||
|
UpdateTime time.Time
|
||||||
}
|
}
|
||||||
|
|
||||||
type SimpleRoadInfo struct {
|
type SimpleRoadInfo struct {
|
||||||
@@ -42,12 +54,12 @@ type SimpleRoadInfo struct {
|
|||||||
|
|
||||||
const ROAD_INFO = "road_info"
|
const ROAD_INFO = "road_info"
|
||||||
|
|
||||||
func GetRoadInfoByRoadUid(roadUid string) RoadInfo {
|
func GetRoadInfoByRoadUid(ctx context.Context, roadUid string) RoadInfo {
|
||||||
o := orm.NewOrm()
|
o := orm.NewOrm()
|
||||||
var roadInfo RoadInfo
|
var roadInfo RoadInfo
|
||||||
_, err := o.QueryTable(ROAD_INFO).Exclude("status", "delete").Filter("road_uid", roadUid).Limit(1).All(&roadInfo)
|
_, err := o.QueryTable(ROAD_INFO).Exclude("status", "delete").Filter("road_uid", roadUid).Limit(1).All(&roadInfo)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
logs.Error("get road info by road uid fail: ", err)
|
otelTrace.Logger.WithContext(ctx).Error("get road info by road uid fail: ", zap.Error(err))
|
||||||
}
|
}
|
||||||
return roadInfo
|
return roadInfo
|
||||||
}
|
}
|
||||||
|
|||||||
317
internal/otelTrace/init.go
Normal file
317
internal/otelTrace/init.go
Normal file
@@ -0,0 +1,317 @@
|
|||||||
|
package otelTrace
|
||||||
|
|
||||||
|
import (
|
||||||
|
"context"
|
||||||
|
"log/slog"
|
||||||
|
"net/http"
|
||||||
|
"os"
|
||||||
|
|
||||||
|
"github.com/beego/beego/v2/core/config/env"
|
||||||
|
"github.com/natefinch/lumberjack"
|
||||||
|
|
||||||
|
"github.com/beego/beego/v2/server/web"
|
||||||
|
beecontext "github.com/beego/beego/v2/server/web/context"
|
||||||
|
"go.opentelemetry.io/contrib/bridges/otelzap"
|
||||||
|
"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"
|
||||||
|
"go.uber.org/zap"
|
||||||
|
"go.uber.org/zap/zapcore"
|
||||||
|
|
||||||
|
"time"
|
||||||
|
|
||||||
|
"go.opentelemetry.io/otel/trace"
|
||||||
|
)
|
||||||
|
|
||||||
|
// InitCtx 初始化ctx
|
||||||
|
var (
|
||||||
|
InitCtx = context.Background()
|
||||||
|
)
|
||||||
|
|
||||||
|
type LoggerStruct struct {
|
||||||
|
logger *zap.Logger
|
||||||
|
}
|
||||||
|
|
||||||
|
// WithContext 为日志记录器添加上下文信息。
|
||||||
|
// 如果上下文中包含跟踪 id,则将其添加到日志中以增强可追踪性。
|
||||||
|
func (l *LoggerStruct) WithContext(ctx context.Context) *zap.Logger {
|
||||||
|
// 如果上下文为空,直接返回日志记录器,不进行任何修改。
|
||||||
|
if ctx == nil {
|
||||||
|
return l.logger
|
||||||
|
}
|
||||||
|
// 从 context 中获取 span
|
||||||
|
// 从 context 中获取 span
|
||||||
|
span := trace.SpanFromContext(ctx)
|
||||||
|
if !span.SpanContext().IsValid() {
|
||||||
|
if l.logger == nil {
|
||||||
|
return zap.NewNop()
|
||||||
|
}
|
||||||
|
return l.logger
|
||||||
|
}
|
||||||
|
return l.logger.With(zap.Reflect("ctx", ctx)).With(zap.String("span", span.SpanContext().TraceID().String()))
|
||||||
|
}
|
||||||
|
|
||||||
|
var (
|
||||||
|
serviceName = "网关服务——" + env.Get("serverName", "")
|
||||||
|
collectorURL = "otel-collector.kkknametrans.buzz"
|
||||||
|
Logger *LoggerStruct // 添加全局 logger
|
||||||
|
)
|
||||||
|
|
||||||
|
func InitTracer() (func(context.Context) error, func(context.Context) error, func(context.Context) error) {
|
||||||
|
traceExporter, err := otlptrace.New(
|
||||||
|
InitCtx,
|
||||||
|
otlptracehttp.NewClient(
|
||||||
|
otlptracehttp.WithInsecure(),
|
||||||
|
otlptracehttp.WithCompression(otlptracehttp.GzipCompression),
|
||||||
|
otlptracehttp.WithEndpoint(collectorURL),
|
||||||
|
),
|
||||||
|
)
|
||||||
|
|
||||||
|
if err != nil {
|
||||||
|
slog.ErrorContext(InitCtx, "failed to create trace exporter", slog.String("error", err.Error()))
|
||||||
|
return nil, nil, nil
|
||||||
|
}
|
||||||
|
resources, err := resource.New(
|
||||||
|
InitCtx,
|
||||||
|
resource.WithAttributes(
|
||||||
|
attribute.String("service.name", serviceName),
|
||||||
|
attribute.String("library.language", "go"),
|
||||||
|
),
|
||||||
|
)
|
||||||
|
if err != nil {
|
||||||
|
slog.ErrorContext(InitCtx, "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(
|
||||||
|
InitCtx,
|
||||||
|
otlpmetrichttp.WithInsecure(),
|
||||||
|
otlpmetrichttp.WithCompression(otlpmetrichttp.GzipCompression),
|
||||||
|
otlpmetrichttp.WithEndpoint(collectorURL))
|
||||||
|
if err != nil {
|
||||||
|
slog.ErrorContext(InitCtx, "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(
|
||||||
|
InitCtx,
|
||||||
|
otlploghttp.WithCompression(otlploghttp.GzipCompression),
|
||||||
|
otlploghttp.WithInsecure(),
|
||||||
|
otlploghttp.WithEndpoint(collectorURL),
|
||||||
|
)
|
||||||
|
if err != nil {
|
||||||
|
slog.ErrorContext(InitCtx, "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)
|
||||||
|
|
||||||
|
// 自定义日志格式配置
|
||||||
|
encoderConfig := zapcore.EncoderConfig{
|
||||||
|
TimeKey: "time",
|
||||||
|
LevelKey: "level",
|
||||||
|
NameKey: "logger",
|
||||||
|
CallerKey: "caller",
|
||||||
|
FunctionKey: zapcore.OmitKey,
|
||||||
|
MessageKey: "msg",
|
||||||
|
StacktraceKey: "stacktrace",
|
||||||
|
LineEnding: zapcore.DefaultLineEnding,
|
||||||
|
EncodeLevel: zapcore.CapitalLevelEncoder, // 使用大写字母记录日志级别
|
||||||
|
EncodeTime: zapcore.TimeEncoderOfLayout(time.DateTime), // ISO8601 时间格式
|
||||||
|
EncodeDuration: zapcore.SecondsDurationEncoder,
|
||||||
|
EncodeCaller: zapcore.ShortCallerEncoder, // 短路径编码器
|
||||||
|
}
|
||||||
|
|
||||||
|
lumberjacklogger := &lumberjack.Logger{
|
||||||
|
Filename: "./logs/log-rotate-test.log",
|
||||||
|
MaxSize: 10, //MB
|
||||||
|
MaxBackups: 20,
|
||||||
|
MaxAge: 15, //days
|
||||||
|
Compress: true, // disabled by default
|
||||||
|
}
|
||||||
|
defer lumberjacklogger.Close()
|
||||||
|
|
||||||
|
// 日志需要保存在本地,并且每日更新
|
||||||
|
core := zapcore.NewTee(
|
||||||
|
otelzap.NewCore(serviceName, otelzap.WithLoggerProvider(loggerProvider)),
|
||||||
|
zapcore.NewCore(
|
||||||
|
zapcore.NewConsoleEncoder(encoderConfig),
|
||||||
|
zapcore.NewMultiWriteSyncer(
|
||||||
|
zapcore.AddSync(os.Stdout),
|
||||||
|
zapcore.AddSync(lumberjacklogger),
|
||||||
|
),
|
||||||
|
zap.InfoLevel,
|
||||||
|
),
|
||||||
|
)
|
||||||
|
logger := zap.New(core,
|
||||||
|
zap.AddCaller(),
|
||||||
|
zap.AddStacktrace(zap.ErrorLevel),
|
||||||
|
)
|
||||||
|
// zap设置标准输出流
|
||||||
|
// 设置全局 logger
|
||||||
|
Logger = &LoggerStruct{
|
||||||
|
logger: logger,
|
||||||
|
}
|
||||||
|
// 确保设置 TextMapPropagator
|
||||||
|
otel.SetTextMapPropagator(
|
||||||
|
propagation.NewCompositeTextMapPropagator(propagation.TraceContext{}, propagation.Baggage{}),
|
||||||
|
)
|
||||||
|
return traceExporter.Shutdown, metricExporter.Shutdown, logExporter.Shutdown
|
||||||
|
}
|
||||||
|
|
||||||
|
// Middleware 从请求头中提取上游的 trace context
|
||||||
|
// 并将其注入到当前的 context 中
|
||||||
|
// 这样下游的服务就可以从 context 中获取到上游的 trace context
|
||||||
|
// 这样就可以在日志中看到上游的 trace Context
|
||||||
|
func Middleware(ctx *beecontext.Context, next web.FilterFunc) {
|
||||||
|
req := ctx.Request
|
||||||
|
// 从请求头中提取上游的 trace context
|
||||||
|
propagator := otel.GetTextMapPropagator()
|
||||||
|
parentCtx := propagator.Extract(req.Context(), propagation.HeaderCarrier(req.Header))
|
||||||
|
routeTrace := otel.Tracer("router")
|
||||||
|
spanCtx, span := routeTrace.Start(parentCtx, req.URL.Path,
|
||||||
|
trace.WithAttributes(
|
||||||
|
attribute.String("http.method", req.Method),
|
||||||
|
attribute.String("http.url", req.URL.String()),
|
||||||
|
attribute.String("peer.hostname", req.Host),
|
||||||
|
attribute.String("http.scheme", getScheme(req)),
|
||||||
|
attribute.String("component", "beego"),
|
||||||
|
attribute.String("peer.address", req.RemoteAddr),
|
||||||
|
attribute.String("span.kind", "server"),
|
||||||
|
attribute.String("peer.service", serviceName),
|
||||||
|
attribute.String("http.flavor", req.Proto),
|
||||||
|
attribute.String("http.user_agent", req.UserAgent()),
|
||||||
|
attribute.String("http.target", req.URL.Path),
|
||||||
|
),
|
||||||
|
)
|
||||||
|
// 合并所有 defer 处理到一个函数中
|
||||||
|
defer func() {
|
||||||
|
// 先处理状态码
|
||||||
|
if ctx.Request.Response != nil {
|
||||||
|
span.SetAttributes(attribute.Int("http.status_code", ctx.Request.Response.StatusCode))
|
||||||
|
}
|
||||||
|
|
||||||
|
// 处理 panic
|
||||||
|
if err := recover(); err != nil {
|
||||||
|
span.RecordError(err.(error))
|
||||||
|
span.SetAttributes(attribute.String("error", "true"))
|
||||||
|
Logger.WithContext(ctx.Request.Context()).Error("全局错误", zap.Any("error", err))
|
||||||
|
// 结束 span
|
||||||
|
span.End()
|
||||||
|
// 重新抛出异常
|
||||||
|
panic(err)
|
||||||
|
}
|
||||||
|
// 正常情况下结束 span
|
||||||
|
span.End()
|
||||||
|
}()
|
||||||
|
ctx.Request = ctx.Request.WithContext(spanCtx)
|
||||||
|
next(ctx)
|
||||||
|
}
|
||||||
|
|
||||||
|
// Span 抽象span
|
||||||
|
func Span(ctx context.Context, traceName, spanName string, attr ...trace.SpanStartOption) (context.Context, func()) {
|
||||||
|
ctx, span := otel.Tracer(traceName).Start(ctx, spanName, attr...)
|
||||||
|
return ctx, 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
|
||||||
|
}
|
||||||
|
|
||||||
|
func NewSchedulerTrace(opts ...trace.TracerOption) trace.Tracer {
|
||||||
|
return otel.Tracer("scheduler", opts...)
|
||||||
|
}
|
||||||
|
|
||||||
|
func init() {
|
||||||
|
// 初始化日志
|
||||||
|
// 自定义日志格式配置
|
||||||
|
encoderConfig := zapcore.EncoderConfig{
|
||||||
|
TimeKey: "time",
|
||||||
|
LevelKey: "level",
|
||||||
|
NameKey: "logger",
|
||||||
|
CallerKey: "caller",
|
||||||
|
FunctionKey: zapcore.OmitKey,
|
||||||
|
MessageKey: "msg",
|
||||||
|
StacktraceKey: "stacktrace",
|
||||||
|
LineEnding: zapcore.DefaultLineEnding,
|
||||||
|
EncodeLevel: zapcore.CapitalLevelEncoder, // 使用大写字母记录日志级别
|
||||||
|
EncodeTime: zapcore.TimeEncoderOfLayout(time.DateTime), // ISO8601 时间格式
|
||||||
|
EncodeDuration: zapcore.SecondsDurationEncoder,
|
||||||
|
EncodeCaller: zapcore.ShortCallerEncoder, // 短路径编码器
|
||||||
|
}
|
||||||
|
|
||||||
|
lumberjacklogger := &lumberjack.Logger{
|
||||||
|
Filename: "./logs/log-rotate-test.log",
|
||||||
|
MaxSize: 10, //MB
|
||||||
|
MaxBackups: 20,
|
||||||
|
MaxAge: 15, //days
|
||||||
|
Compress: true, // disabled by default
|
||||||
|
}
|
||||||
|
defer lumberjacklogger.Close()
|
||||||
|
// 创建核心
|
||||||
|
core := zapcore.NewTee(
|
||||||
|
zapcore.NewCore(
|
||||||
|
zapcore.NewConsoleEncoder(encoderConfig),
|
||||||
|
zapcore.NewMultiWriteSyncer(
|
||||||
|
zapcore.AddSync(os.Stdout),
|
||||||
|
zapcore.AddSync(lumberjacklogger),
|
||||||
|
),
|
||||||
|
zap.InfoLevel,
|
||||||
|
),
|
||||||
|
)
|
||||||
|
logger := zap.New(core,
|
||||||
|
zap.AddCaller(),
|
||||||
|
// zap.AddCallerSkip(1),
|
||||||
|
zap.AddStacktrace(zap.ErrorLevel),
|
||||||
|
)
|
||||||
|
// zap设置标准输出流
|
||||||
|
// 设置全局 logger
|
||||||
|
Logger = &LoggerStruct{
|
||||||
|
logger: logger,
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -1,15 +1,16 @@
|
|||||||
package service
|
package service
|
||||||
|
|
||||||
import (
|
import (
|
||||||
|
"context"
|
||||||
"encoding/json"
|
"encoding/json"
|
||||||
"merchant/internal/models/merchant"
|
"merchant/internal/models/merchant"
|
||||||
"merchant/internal/models/road"
|
"merchant/internal/models/road"
|
||||||
)
|
)
|
||||||
|
|
||||||
// QueryAllowedDeployInfoMM 获取指定商户的允许面额信息
|
// QueryAllowedDeployInfoMM 获取指定商户的允许面额信息
|
||||||
func QueryAllowedDeployInfoMM(merchantUid, roadUid string) []merchant.ProfitMargin {
|
func QueryAllowedDeployInfoMM(ctx context.Context, merchantUid, roadUid string) []merchant.ProfitMargin {
|
||||||
resInfo := make([]merchant.ProfitMargin, 0)
|
resInfo := make([]merchant.ProfitMargin, 0)
|
||||||
merchantInfoList := merchant.GetMerchantDeployByUid(merchantUid)
|
merchantInfoList := merchant.GetMerchantDeployByUid(ctx, merchantUid)
|
||||||
if len(merchantInfoList) == 0 {
|
if len(merchantInfoList) == 0 {
|
||||||
return resInfo
|
return resInfo
|
||||||
}
|
}
|
||||||
@@ -25,9 +26,9 @@ func QueryAllowedDeployInfoMM(merchantUid, roadUid string) []merchant.ProfitMarg
|
|||||||
}
|
}
|
||||||
|
|
||||||
// QueryAllowedRoad 获取商户允许通道信息
|
// QueryAllowedRoad 获取商户允许通道信息
|
||||||
func QueryAllowedRoad(merchantUid string) []road.SimpleRoadInfo {
|
func QueryAllowedRoad(ctx context.Context, merchantUid string) []road.SimpleRoadInfo {
|
||||||
var resInfo []road.SimpleRoadInfo
|
var resInfo []road.SimpleRoadInfo
|
||||||
merchantInfoList := merchant.GetMerchantDeployByUid(merchantUid)
|
merchantInfoList := merchant.GetMerchantDeployByUid(ctx, merchantUid)
|
||||||
if len(merchantInfoList) == 0 {
|
if len(merchantInfoList) == 0 {
|
||||||
return resInfo
|
return resInfo
|
||||||
}
|
}
|
||||||
|
|||||||
Binary file not shown.
@@ -1,11 +1,123 @@
|
|||||||
/***************************************************
|
let excel = {
|
||||||
** @Desc : This file for 导出Excel文件
|
download_trade_order_excel: function () {
|
||||||
** @Time : 19.12.7 16:48
|
let startTime = $("#startTime").val();
|
||||||
** @Author : Joker
|
let endTime = $("#endTime").val();
|
||||||
** @File : deal_excel
|
let payType = $("#payType").val();
|
||||||
** @Last Modified by : Joker
|
let uStatus = $("#uStatus").val();
|
||||||
** @Last Modified time: 19.12.7 16:48
|
$.ajax({
|
||||||
** @Software: GoLand
|
type: "GET",
|
||||||
****************************************************/
|
url: "/excel/make_order_excel/",
|
||||||
|
data: {
|
||||||
let excel={download_trade_order_excel:function(){let startTime=$("#startTime").val();let endTime=$("#endTime").val();let payType=$("#payType").val();let uStatus=$("#uStatus").val();$.ajax({type:"GET",url:"/excel/make_order_excel/",data:{start:startTime,end:endTime,pay_type:payType,status:uStatus,},cache:true,success:function(res){if(res.code===9){let $form=$("<form method='get'></form>");$form.attr("action","/excel/download_excel/"+res.msg);$(document.body).append($form);$form.submit()}else{toastr.error(res.msg)}},error:function(XMLHttpRequest){toastr.info('something is wrong, code: '+XMLHttpRequest.status)}})},download_complaint_record_excel:function(){let startTime=$("#startTime").val();let endTime=$("#endTime").val();let payType=$("#payType").val();let uStatus=$("#uStatus").val();$.ajax({type:"GET",url:"/excel/make_complaint_record_excel/",data:{start:startTime,end:endTime,pay_type:payType,status:uStatus,},cache:true,success:function(res){if(res.code===9){let $form=$("<form method='get'></form>");$form.attr("action","/excel/download_excel/"+res.msg);$(document.body).append($form);$form.submit()}else{toastr.error(res.msg)}},error:function(XMLHttpRequest){toastr.info('something is wrong, code: '+XMLHttpRequest.status)}})},download_withdraw_record_excel:function(){let startTime=$("#startTime").val();let endTime=$("#endTime").val();let uStatus=$("#uStatus").val();$.ajax({type:"GET",url:"/excel/make_withdraw_record_excel/",data:{start:startTime,end:endTime,status:uStatus,},cache:true,success:function(res){if(res.code===9){let $form=$("<form method='get'></form>");$form.attr("action","/excel/download_excel/"+res.msg);$(document.body).append($form);$form.submit()}else{toastr.error(res.msg)}},error:function(XMLHttpRequest){toastr.info('something is wrong, code: '+XMLHttpRequest.status)}})},download_recharge_record_excel:function(){let startTime=$("#startTime").val();let endTime=$("#endTime").val();let uStatus=$("#uStatus").val();$.ajax({type:"GET",url:"/excel/make_recharge_record_excel/",data:{start:startTime,end:endTime,status:uStatus,},cache:true,success:function(res){if(res.code===9){let $form=$("<form method='get'></form>");$form.attr("action","/excel/download_excel/"+res.msg);$(document.body).append($form);$form.submit()}else{toastr.error(res.msg)}},error:function(XMLHttpRequest){toastr.info('something is wrong, code: '+XMLHttpRequest.status)}})}};
|
start: startTime,
|
||||||
|
end: endTime,
|
||||||
|
pay_type: payType,
|
||||||
|
status: uStatus,
|
||||||
|
},
|
||||||
|
xhrFields: {
|
||||||
|
responseType: "blob"
|
||||||
|
},
|
||||||
|
success: function (res) {
|
||||||
|
// 下载二进制流
|
||||||
|
const blob = new Blob([res], {
|
||||||
|
type: "application/vnd.openxmlformats-officedocument.spreadsheetml.sheet"
|
||||||
|
})
|
||||||
|
const url = window.URL.createObjectURL(blob)
|
||||||
|
let a = document.createElement("a");
|
||||||
|
a.href = url;
|
||||||
|
a.download = "订单记录.xlsx";
|
||||||
|
a.target = "_blank";
|
||||||
|
a.click();
|
||||||
|
a.remove();
|
||||||
|
},
|
||||||
|
error: function (res) {
|
||||||
|
toastr.info('something is wrong, code: ' + res.status)
|
||||||
|
},
|
||||||
|
})
|
||||||
|
},
|
||||||
|
download_complaint_record_excel: function () {
|
||||||
|
let startTime = $("#startTime").val();
|
||||||
|
let endTime = $("#endTime").val();
|
||||||
|
let payType = $("#payType").val();
|
||||||
|
let uStatus = $("#uStatus").val();
|
||||||
|
$.ajax({
|
||||||
|
type: "GET",
|
||||||
|
url: "/excel/make_complaint_record_excel/",
|
||||||
|
data: {
|
||||||
|
start: startTime,
|
||||||
|
end: endTime,
|
||||||
|
pay_type: payType,
|
||||||
|
status: uStatus,
|
||||||
|
},
|
||||||
|
cache: true,
|
||||||
|
success: function (res) {
|
||||||
|
if (res.code === 9) {
|
||||||
|
let $form = $("<form method='get'></form>");
|
||||||
|
$form.attr("action", "/excel/download_excel/" + res.msg);
|
||||||
|
$(document.body).append($form);
|
||||||
|
$form.submit()
|
||||||
|
} else {
|
||||||
|
toastr.error(res.msg)
|
||||||
|
}
|
||||||
|
},
|
||||||
|
error: function (XMLHttpRequest) {
|
||||||
|
toastr.info('something is wrong, code: ' + XMLHttpRequest.status)
|
||||||
|
}
|
||||||
|
})
|
||||||
|
},
|
||||||
|
download_withdraw_record_excel: function () {
|
||||||
|
let startTime = $("#startTime").val();
|
||||||
|
let endTime = $("#endTime").val();
|
||||||
|
let uStatus = $("#uStatus").val();
|
||||||
|
$.ajax({
|
||||||
|
type: "GET",
|
||||||
|
url: "/excel/make_withdraw_record_excel/",
|
||||||
|
data: {
|
||||||
|
start: startTime,
|
||||||
|
end: endTime,
|
||||||
|
status: uStatus,
|
||||||
|
},
|
||||||
|
cache: true,
|
||||||
|
success: function (res) {
|
||||||
|
if (res.code === 9) {
|
||||||
|
let $form = $("<form method='get'></form>");
|
||||||
|
$form.attr("action", "/excel/download_excel/" + res.msg);
|
||||||
|
$(document.body).append($form);
|
||||||
|
$form.submit()
|
||||||
|
} else {
|
||||||
|
toastr.error(res.msg)
|
||||||
|
}
|
||||||
|
},
|
||||||
|
error: function (XMLHttpRequest) {
|
||||||
|
toastr.info('something is wrong, code: ' + XMLHttpRequest.status)
|
||||||
|
}
|
||||||
|
})
|
||||||
|
},
|
||||||
|
download_recharge_record_excel: function () {
|
||||||
|
let startTime = $("#startTime").val();
|
||||||
|
let endTime = $("#endTime").val();
|
||||||
|
let uStatus = $("#uStatus").val();
|
||||||
|
$.ajax({
|
||||||
|
type: "GET",
|
||||||
|
url: "/excel/make_recharge_record_excel/",
|
||||||
|
data: {
|
||||||
|
start: startTime,
|
||||||
|
end: endTime,
|
||||||
|
status: uStatus,
|
||||||
|
},
|
||||||
|
cache: true,
|
||||||
|
success: function (res) {
|
||||||
|
if (res.code === 9) {
|
||||||
|
let $form = $("<form method='get'></form>");
|
||||||
|
$form.attr("action", "/excel/download_excel/" + res.msg);
|
||||||
|
$(document.body).append($form);
|
||||||
|
$form.submit()
|
||||||
|
} else {
|
||||||
|
toastr.error(res.msg)
|
||||||
|
}
|
||||||
|
},
|
||||||
|
error: function (XMLHttpRequest) {
|
||||||
|
toastr.info('something is wrong, code: ' + XMLHttpRequest.status)
|
||||||
|
}
|
||||||
|
})
|
||||||
|
}
|
||||||
|
};
|
||||||
@@ -1,13 +1,3 @@
|
|||||||
/***************************************************
|
|
||||||
** @Desc : This file for 表单验证js
|
|
||||||
** @Time : 19.12.3 11:17
|
|
||||||
** @Author : Joker
|
|
||||||
** @File : form_validate
|
|
||||||
** @Last Modified by : Joker
|
|
||||||
** @Last Modified time: 19.12.3 11:17
|
|
||||||
** @Software: GoLand
|
|
||||||
****************************************************/
|
|
||||||
|
|
||||||
let form_v = {
|
let form_v = {
|
||||||
modify_userInfo: function () {
|
modify_userInfo: function () {
|
||||||
let or_pwd = $("#or_pwd").val();
|
let or_pwd = $("#or_pwd").val();
|
||||||
|
|||||||
@@ -1,90 +1,106 @@
|
|||||||
/***************************************************
|
|
||||||
** @Desc : This file for 首页js
|
|
||||||
** @Time : 19.12.2 14:46
|
|
||||||
** @Author : Joker
|
|
||||||
** @File : index
|
|
||||||
** @Last Modified by : Joker
|
|
||||||
** @Last Modified time: 19.12.2 14:46
|
|
||||||
** @Software: GoLand
|
|
||||||
****************************************************/
|
|
||||||
|
|
||||||
let index = {
|
let index = {
|
||||||
getAccountInfo: function() {
|
getAccountInfo: function () {
|
||||||
$.ajax({
|
$.ajax({
|
||||||
type: "GET",
|
type: "GET",
|
||||||
url: "/index/loadInfo/",
|
url: "/index/loadInfo/",
|
||||||
success: function(result) {
|
success: function (result) {
|
||||||
$("#balanceAmt").text(result["balanceAmt"]);
|
$("#balanceAmt").text(result["balanceAmt"]);
|
||||||
$("#settAmount").text(result["settAmount"]);
|
$("#settAmount").text(result["settAmount"]);
|
||||||
$("#freezeAmt").text(result["freezeAmt"]);
|
$("#freezeAmt").text(result["freezeAmt"]);
|
||||||
$("#amountFrozen").text(result["amountFrozen"])
|
$("#amountFrozen").text(result["amountFrozen"])
|
||||||
},
|
},
|
||||||
error: function(XMLHttpRequest) {
|
error: function (XMLHttpRequest) {
|
||||||
toastr.info('something is wrong, code: ' + XMLHttpRequest.status)
|
toastr.info('something is wrong, code: ' + XMLHttpRequest.status)
|
||||||
}
|
}
|
||||||
})
|
})
|
||||||
},
|
},
|
||||||
getOrdersInfo: function() {
|
getOrdersInfo: function () {
|
||||||
$.ajax({
|
$.ajax({
|
||||||
type: "GET",
|
type: "GET",
|
||||||
url: "/index/loadOrders",
|
url: "/index/loadOrders",
|
||||||
success: function(result) {
|
success: function (result) {
|
||||||
$("#orders").text(result["orders"]);
|
$("#orders").text(result["orders"]);
|
||||||
$("#suc_orders").text(result["suc_orders"]);
|
$("#suc_orders").text(result["suc_orders"]);
|
||||||
$("#suc_rate").text((result["suc_rate"] * 100).toFixed(2) + "%")
|
$("#suc_rate").text((result["suc_rate"] * 100).toFixed(2) + "%")
|
||||||
},
|
},
|
||||||
error: function(XMLHttpRequest) {
|
error: function (XMLHttpRequest) {
|
||||||
toastr.info('something is wrong, code: ' + XMLHttpRequest.status)
|
toastr.info('something is wrong, code: ' + XMLHttpRequest.status)
|
||||||
}
|
}
|
||||||
})
|
})
|
||||||
},
|
},
|
||||||
get_account_balance: function() {
|
get_account_balance: function () {
|
||||||
$.ajax({
|
$.ajax({
|
||||||
type: "GET",
|
type: "GET",
|
||||||
url: "/withdraw/balance",
|
url: "/withdraw/balance",
|
||||||
success: function(resp) {
|
success: function (resp) {
|
||||||
$("#balance").val(resp.balance);
|
$("#balance").val(resp.balance);
|
||||||
$("#sett_fee").html(resp.fee)
|
$("#sett_fee").html(resp.fee)
|
||||||
},
|
},
|
||||||
error: function(XMLHttpRequest) {
|
error: function (XMLHttpRequest) {
|
||||||
toastr.info('something is wrong, code: ' + XMLHttpRequest.status)
|
toastr.info('something is wrong, code: ' + XMLHttpRequest.status)
|
||||||
}
|
}
|
||||||
})
|
})
|
||||||
},
|
},
|
||||||
loadTradeRecord: function() {
|
loadTradeRecord: function () {
|
||||||
$.ajax({
|
$.ajax({
|
||||||
type: "GET",
|
type: "GET",
|
||||||
url: "/index/load_count_order",
|
url: "/index/load_count_order",
|
||||||
success: function(res) {
|
success: function (res) {
|
||||||
let con = "";
|
let con = "";
|
||||||
$.each(res, function(index, item) {
|
$.each(res, function (index, item) {
|
||||||
if (item.PayWayName === "") {
|
if (item.PayWayName === "") {
|
||||||
return true
|
return true
|
||||||
}
|
}
|
||||||
con += `<div class="project"><div class="row bg-white has-shadow"><div class="left-col col-lg-1 d-flex align-items-center justify-content-between"><small>` + (index + 1) + `</small></div><div class="left-col col-lg-3 d-flex align-items-center justify-content-between"><small>` + item.PayWayName + `</small></div><div class="left-col col-lg-2 d-flex align-items-center justify-content-between"><small>` + item.OrderCount + `</small></div><div class="left-col col-lg-2 d-flex align-items-center justify-content-between"><small>` + item.SucOrderCount + `</small></div><div class="left-col col-lg-2 d-flex align-items-center justify-content-between"><small>` + (item.SucRate * 100).toFixed(2) + `%</small></div></div></div>`
|
con += `<div class="project"><div class="row bg-white has-shadow"><div class="left-col d-flex align-items-center justify-content-between"><small>` + (index + 1) + `</small></div><div class="left-col d-flex align-items-center justify-content-between"><small>` + item.PayWayName + `</small></div><div class="left-col d-flex align-items-center justify-content-between"><small>` + item.OrderCount + `</small></div><div class="left-col d-flex align-items-center justify-content-between"><small>` + item.SucOrderCount + `</small></div><div class="left-col d-flex align-items-center justify-content-between"><small>` + (item.SucRate * 100).toFixed(2) + `%</small></div></div></div>`
|
||||||
});
|
});
|
||||||
$("#your_showtime").html(con)
|
$("#your_showtime").html(con)
|
||||||
},
|
},
|
||||||
error: function(XMLHttpRequest) {
|
error: function (XMLHttpRequest) {
|
||||||
toastr.info('something is wrong, code: ' + XMLHttpRequest.status)
|
toastr.info('something is wrong, code: ' + XMLHttpRequest.status)
|
||||||
}
|
}
|
||||||
})
|
})
|
||||||
},
|
},
|
||||||
loadPayWay: function() {
|
loadPayWay: function () {
|
||||||
$.ajax({
|
$.ajax({
|
||||||
type: "GET",
|
type: "GET",
|
||||||
url: "/index/pay_way",
|
url: "/index/pay_way",
|
||||||
success: function(res) {
|
success: function (res) {
|
||||||
let con = "";
|
let con = "";
|
||||||
$.each(res, function(index, item) {
|
$.each(res.ways, function (index, item) {
|
||||||
if (item.Name === "") {
|
if (item.name === "") {
|
||||||
return true
|
return true
|
||||||
}
|
}
|
||||||
con += `<div class="project"><div class="row bg-white has-shadow"><div class="left-col col-lg-1 d-flex align-items-center justify-content-between"><small>` + (index + 1) + `</small></div><div class="left-col col-lg-3 d-flex align-items-center justify-content-between"><small>` + item.Name + `</small></div><div class="left-col col-lg-2 d-flex align-items-center justify-content-between"><small>` + item.Rate + `%</small></div></div></div>`
|
con += `<div class="project">
|
||||||
|
<div class="row bg-white has-shadow">
|
||||||
|
<div class="left-col col-lg-1 d-flex align-items-center justify-content-between">
|
||||||
|
<small>` +
|
||||||
|
(index + 1) +
|
||||||
|
`</small></div><div class="left-col col-1 d-flex align-items-center justify-content-between"><small>` +
|
||||||
|
item.name +
|
||||||
|
`</small></div><div class="left-col col-1 d-flex align-items-center justify-content-between"><small>` +
|
||||||
|
item.rate +
|
||||||
|
`</small></div><div class="left-col col-1 d-flex align-items-center justify-content-between"><small>` +
|
||||||
|
item.todayAmount +
|
||||||
|
`</small></div><div class="left-col col-1 d-flex align-items-center justify-content-between"><small>` +
|
||||||
|
item.todaySucRate +
|
||||||
|
`</small></div><div class="left-col col-1 d-flex align-items-center justify-content-between"><small>` +
|
||||||
|
item.yesterdayAmount +
|
||||||
|
`</small></div><div class="left-col col-1 d-flex align-items-center justify-content-between"><small>` +
|
||||||
|
item.yesterdaySucRate +
|
||||||
|
`</small></div><div class="left-col col-1 d-flex align-items-center justify-content-between"><small>` +
|
||||||
|
item.totalAmount +
|
||||||
|
`</small></div><div class="left-col col-1 d-flex align-items-center justify-content-between"><small>` +
|
||||||
|
item.totalSucRate +
|
||||||
|
`%</small>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>`
|
||||||
});
|
});
|
||||||
$("#your_showtime").html(con)
|
$("#your_showtime").html(con)
|
||||||
|
const totalRow = `今日跑量:${res.totalSummary.todayAmount} 昨日跑量:${res.totalSummary.yesterdayAmount} 总跑量:${res.totalSummary.totalAmount},总成率:${res.totalSummary.totalSucRate}%`
|
||||||
|
$("#total_showtime_row").html(totalRow)
|
||||||
},
|
},
|
||||||
error: function(XMLHttpRequest) {
|
error: function (XMLHttpRequest) {
|
||||||
toastr.info('something is wrong, code: ' + XMLHttpRequest.status)
|
toastr.info('something is wrong, code: ' + XMLHttpRequest.status)
|
||||||
}
|
}
|
||||||
})
|
})
|
||||||
|
|||||||
@@ -1,13 +1,3 @@
|
|||||||
/***************************************************
|
|
||||||
** @Desc : This file for 交易记录js
|
|
||||||
** @Time : 19.12.3 15:01
|
|
||||||
** @Author : Joker
|
|
||||||
** @File : trade_record
|
|
||||||
** @Last Modified by : Joker
|
|
||||||
** @Last Modified time: 19.12.3 15:01
|
|
||||||
** @Software: GoLand
|
|
||||||
****************************************************/
|
|
||||||
|
|
||||||
let trade = {
|
let trade = {
|
||||||
get_last_month_date: function () {
|
get_last_month_date: function () {
|
||||||
let date = new Date();
|
let date = new Date();
|
||||||
@@ -68,7 +58,8 @@ let trade = {
|
|||||||
ss = "0" + ss
|
ss = "0" + ss
|
||||||
}
|
}
|
||||||
return strYear + "-" + strMonth + "-" + strDay + " " + hh + ":" + mm + ":" + ss
|
return strYear + "-" + strMonth + "-" + strDay + " " + hh + ":" + mm + ":" + ss
|
||||||
}, trade_do_paging: function () {
|
},
|
||||||
|
trade_do_paging: function () {
|
||||||
let merchantNo = $("#merchant_No").val();
|
let merchantNo = $("#merchant_No").val();
|
||||||
let startTime = $("#startTime").val();
|
let startTime = $("#startTime").val();
|
||||||
let endTime = $("#endTime").val();
|
let endTime = $("#endTime").val();
|
||||||
@@ -98,15 +89,15 @@ let trade = {
|
|||||||
numberOfPages: data.limit,
|
numberOfPages: data.limit,
|
||||||
itemTexts: function (type, page) {
|
itemTexts: function (type, page) {
|
||||||
switch (type) {
|
switch (type) {
|
||||||
case"first":
|
case "first":
|
||||||
return "首页";
|
return "首页";
|
||||||
case"prev":
|
case "prev":
|
||||||
return "上一页";
|
return "上一页";
|
||||||
case"next":
|
case "next":
|
||||||
return "下一页";
|
return "下一页";
|
||||||
case"last":
|
case "last":
|
||||||
return "末页";
|
return "末页";
|
||||||
case"page":
|
case "page":
|
||||||
return page
|
return page
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
@@ -139,15 +130,18 @@ let trade = {
|
|||||||
$.each(list, function (index, item) {
|
$.each(list, function (index, item) {
|
||||||
let bg_red = "", st = "", t = "";
|
let bg_red = "", st = "", t = "";
|
||||||
switch (item.Status) {
|
switch (item.Status) {
|
||||||
case"failed":
|
case "failed":
|
||||||
case "fail":
|
case "fail":
|
||||||
st = "交易失败";
|
st = "交易失败";
|
||||||
bg_red = ` style="color: red"`;
|
bg_red = ` style="color: red"`;
|
||||||
break;
|
break;
|
||||||
case"wait":
|
case "created":
|
||||||
|
st = "创建订单";
|
||||||
|
break;
|
||||||
|
case "wait":
|
||||||
st = "等待支付";
|
st = "等待支付";
|
||||||
break;
|
break;
|
||||||
case"success":
|
case "success":
|
||||||
bg_red = ` style="color: green"`;
|
bg_red = ` style="color: green"`;
|
||||||
st = "交易成功";
|
st = "交易成功";
|
||||||
t = item.UpdateTime;
|
t = item.UpdateTime;
|
||||||
@@ -215,15 +209,15 @@ let trade = {
|
|||||||
numberOfPages: data.limit,
|
numberOfPages: data.limit,
|
||||||
itemTexts: function (type, page) {
|
itemTexts: function (type, page) {
|
||||||
switch (type) {
|
switch (type) {
|
||||||
case"first":
|
case "first":
|
||||||
return "首页";
|
return "首页";
|
||||||
case"prev":
|
case "prev":
|
||||||
return "上一页";
|
return "上一页";
|
||||||
case"next":
|
case "next":
|
||||||
return "下一页";
|
return "下一页";
|
||||||
case"last":
|
case "last":
|
||||||
return "末页";
|
return "末页";
|
||||||
case"page":
|
case "page":
|
||||||
return page
|
return page
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
@@ -256,10 +250,10 @@ let trade = {
|
|||||||
$.each(list, function (index, item) {
|
$.each(list, function (index, item) {
|
||||||
let st = "";
|
let st = "";
|
||||||
switch (item.FreezeOrder) {
|
switch (item.FreezeOrder) {
|
||||||
case"yes":
|
case "yes":
|
||||||
st = "已冻结";
|
st = "已冻结";
|
||||||
break;
|
break;
|
||||||
case"no":
|
case "no":
|
||||||
st = "已退款";
|
st = "已退款";
|
||||||
break
|
break
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -1,13 +1,3 @@
|
|||||||
/***************************************************
|
|
||||||
** @Desc : This file for ...
|
|
||||||
** @Time : 19.12.6 13:43
|
|
||||||
** @Author : Joker
|
|
||||||
** @File : withdraw_record
|
|
||||||
** @Last Modified by : Joker
|
|
||||||
** @Last Modified time: 19.12.6 13:43
|
|
||||||
** @Software: GoLand
|
|
||||||
****************************************************/
|
|
||||||
|
|
||||||
let pay = {
|
let pay = {
|
||||||
withdraw_do_paging: function () {
|
withdraw_do_paging: function () {
|
||||||
let bankNo = $("#bankNo").val();
|
let bankNo = $("#bankNo").val();
|
||||||
|
|||||||
@@ -44,7 +44,7 @@
|
|||||||
class="icon icon-presentation"></i>订单管理 </a>
|
class="icon icon-presentation"></i>订单管理 </a>
|
||||||
<ul id="exampledropdownDropdown1" class=" list-unstyled ">
|
<ul id="exampledropdownDropdown1" class=" list-unstyled ">
|
||||||
<li><a href="/trade/show_ui">订单记录</a></li>
|
<li><a href="/trade/show_ui">订单记录</a></li>
|
||||||
<li class="active"><a href="/trade/show_complaint_ui">投诉列表</a></li>
|
<!-- <li class="active"><a href="/trade/show_complaint_ui">投诉列表</a></li> -->
|
||||||
</ul>
|
</ul>
|
||||||
</li>
|
</li>
|
||||||
<li><a href="#exampledropdownDropdown2" aria-expanded="false" data-toggle="collapse"> <i
|
<li><a href="#exampledropdownDropdown2" aria-expanded="false" data-toggle="collapse"> <i
|
||||||
@@ -73,7 +73,7 @@
|
|||||||
<div class="breadcrumb-holder container-fluid">
|
<div class="breadcrumb-holder container-fluid">
|
||||||
<ul class="breadcrumb">
|
<ul class="breadcrumb">
|
||||||
<li class="breadcrumb-item"><a href="/index/ui/">首页</a></li>
|
<li class="breadcrumb-item"><a href="/index/ui/">首页</a></li>
|
||||||
<li class="breadcrumb-item active">投诉列表</li>
|
<!-- <li class="breadcrumb-item active">投诉列表</li> -->
|
||||||
</ul>
|
</ul>
|
||||||
</div>
|
</div>
|
||||||
<!-- Forms Section-->
|
<!-- Forms Section-->
|
||||||
|
|||||||
@@ -44,7 +44,7 @@
|
|||||||
class="icon icon-presentation" style="color: black;"></i>订单管理 </a>
|
class="icon icon-presentation" style="color: black;"></i>订单管理 </a>
|
||||||
<ul id="exampledropdownDropdown1" class="collapse list-unstyled ">
|
<ul id="exampledropdownDropdown1" class="collapse list-unstyled ">
|
||||||
<li><a href="/trade/show_ui">订单记录</a></li>
|
<li><a href="/trade/show_ui">订单记录</a></li>
|
||||||
<li><a href="/trade/show_complaint_ui">投诉列表</a></li>
|
<!-- <li><a href="/trade/show_complaint_ui">投诉列表</a></li> -->
|
||||||
</ul>
|
</ul>
|
||||||
</li>
|
</li>
|
||||||
<li><a href="#exampledropdownDropdown2" aria-expanded="false" data-toggle="collapse"> <i
|
<li><a href="#exampledropdownDropdown2" aria-expanded="false" data-toggle="collapse"> <i
|
||||||
|
|||||||
@@ -44,7 +44,7 @@
|
|||||||
class="icon icon-presentation"></i>订单管理 </a>
|
class="icon icon-presentation"></i>订单管理 </a>
|
||||||
<ul id="exampledropdownDropdown1" class="collapse list-unstyled ">
|
<ul id="exampledropdownDropdown1" class="collapse list-unstyled ">
|
||||||
<li><a href="/trade/show_ui">订单记录</a></li>
|
<li><a href="/trade/show_ui">订单记录</a></li>
|
||||||
<li><a href="/trade/show_complaint_ui">投诉列表</a></li>
|
<!-- <li><a href="/trade/show_complaint_ui">投诉列表</a></li> -->
|
||||||
|
|
||||||
</ul>
|
</ul>
|
||||||
</li>
|
</li>
|
||||||
|
|||||||
@@ -2,8 +2,9 @@
|
|||||||
<html>
|
<html>
|
||||||
|
|
||||||
<head>
|
<head>
|
||||||
{{template "template/css.html"}}
|
<meta charset="utf-8">
|
||||||
|
</head>
|
||||||
|
{{template "template/css.html"}}
|
||||||
</head>
|
</head>
|
||||||
|
|
||||||
<body>
|
<body>
|
||||||
@@ -44,7 +45,7 @@
|
|||||||
class="icon icon-presentation" style="color: black;"></i>订单管理 </a>
|
class="icon icon-presentation" style="color: black;"></i>订单管理 </a>
|
||||||
<ul id="exampledropdownDropdown1" class="collapse list-unstyled ">
|
<ul id="exampledropdownDropdown1" class="collapse list-unstyled ">
|
||||||
<li><a href="/trade/show_ui">订单记录</a></li>
|
<li><a href="/trade/show_ui">订单记录</a></li>
|
||||||
<li><a href="/trade/show_complaint_ui">投诉列表</a></li>
|
<!-- <li><a href="/trade/show_complaint_ui">投诉列表</a></li> -->
|
||||||
</ul>
|
</ul>
|
||||||
</li>
|
</li>
|
||||||
<li><a href="#exampledropdownDropdown2" aria-expanded="false" data-toggle="collapse"> <i
|
<li><a href="#exampledropdownDropdown2" aria-expanded="false" data-toggle="collapse"> <i
|
||||||
@@ -83,47 +84,6 @@
|
|||||||
<div class="number"><strong id="balanceAmt">0.00</strong></div>
|
<div class="number"><strong id="balanceAmt">0.00</strong></div>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
<!-- Item -->
|
|
||||||
<div class="col-xl-3 col-sm-4">
|
|
||||||
<div class="item d-flex align-items-center">
|
|
||||||
<div class="icon bg-red"><i class="icon icon-check"></i></div>
|
|
||||||
<div class="title"><span>可提现金额<br><small> </small></span>
|
|
||||||
<div class="progress">
|
|
||||||
<div role="progressbar" style="width: 80%; height: 4px;" aria-valuenow="70"
|
|
||||||
aria-valuemin="0" aria-valuemax="100" class="progress-bar bg-red"></div>
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
<div class="number"><strong id="settAmount">0.00</strong></div>
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
<!-- Item -->
|
|
||||||
<div class="col-xl-3 col-sm-4">
|
|
||||||
<div class="item d-flex align-items-center">
|
|
||||||
<div class="icon bg-blue"><i class="icon icon-flask"></i></div>
|
|
||||||
<div class="title"><span>冻结金额<br><small>(出款在途金额)</small></span>
|
|
||||||
<div class="progress">
|
|
||||||
<div role="progressbar" style="width: 80%; height: 4px;" aria-valuenow="50"
|
|
||||||
aria-valuemin="0" aria-valuemax="100" class="progress-bar bg-blue">
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
<div class="number"><strong id="freezeAmt">0.00</strong></div>
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
<!-- Item -->
|
|
||||||
<div class="col-xl-3 col-sm-4">
|
|
||||||
<div class="item d-flex align-items-center">
|
|
||||||
<div class="icon bg-secondary"><i class="icon icon-interface-windows"></i></div>
|
|
||||||
<div class="title"><span>押款金额<br><small>(D+1 结算金额)</small></span>
|
|
||||||
<div class="progress">
|
|
||||||
<div role="progressbar" style="width: 80%; height: 4px;" aria-valuenow="50"
|
|
||||||
aria-valuemin="0" aria-valuemax="100" class="progress-bar bg-secondary">
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
<div class="number"><strong id="amountFrozen">0.00</strong></div>
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
</section>
|
</section>
|
||||||
@@ -142,32 +102,6 @@
|
|||||||
</h2>
|
</h2>
|
||||||
</div>
|
</div>
|
||||||
</header>
|
</header>
|
||||||
<!-- Projects Section-->
|
|
||||||
<!-- <section class="projects no-padding-bottom">
|
|
||||||
<div class="container-fluid">
|
|
||||||
<div class="project">
|
|
||||||
<div class="row bg-white has-shadow">
|
|
||||||
<div class="left-col col-lg-1 d-flex align-items-center justify-content-between">
|
|
||||||
<h3 class="h4"># </h3>
|
|
||||||
</div>
|
|
||||||
<div class="left-col col-lg-3 d-flex align-items-center justify-content-between">
|
|
||||||
<h3 class="h4">通道名称<small> 通道名相同但产品不同</small></h3>
|
|
||||||
</div>
|
|
||||||
<div class="left-col col-lg-2 d-flex align-items-center justify-content-between">
|
|
||||||
<h3 class="h4">订单数</h3>
|
|
||||||
</div>
|
|
||||||
<div class="left-col col-lg-2 d-flex align-items-center justify-content-between">
|
|
||||||
<h3 class="h4">成功订单数</h3>
|
|
||||||
</div>
|
|
||||||
<div class="left-col col-lg-2 d-flex align-items-center justify-content-between">
|
|
||||||
<h3 class="h4">成功率</h3>
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
<div id="your_showtime">
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
</section> -->
|
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
|
|||||||
@@ -44,7 +44,7 @@
|
|||||||
class="icon icon-presentation"></i>订单管理 </a>
|
class="icon icon-presentation"></i>订单管理 </a>
|
||||||
<ul id="exampledropdownDropdown1" class="collapse list-unstyled ">
|
<ul id="exampledropdownDropdown1" class="collapse list-unstyled ">
|
||||||
<li><a href="/trade/show_ui">订单记录</a></li>
|
<li><a href="/trade/show_ui">订单记录</a></li>
|
||||||
<li><a href="/trade/show_complaint_ui">投诉列表</a></li>
|
<!-- <li><a href="/trade/show_complaint_ui">投诉列表</a></li> -->
|
||||||
|
|
||||||
</ul>
|
</ul>
|
||||||
</li>
|
</li>
|
||||||
|
|||||||
@@ -44,7 +44,7 @@
|
|||||||
class="icon icon-presentation"></i>订单管理 </a>
|
class="icon icon-presentation"></i>订单管理 </a>
|
||||||
<ul id="exampledropdownDropdown1" class="collapse list-unstyled ">
|
<ul id="exampledropdownDropdown1" class="collapse list-unstyled ">
|
||||||
<li><a href="/trade/show_ui">订单记录</a></li>
|
<li><a href="/trade/show_ui">订单记录</a></li>
|
||||||
<li><a href="/trade/show_complaint_ui">投诉列表</a></li>
|
<!-- <li><a href="/trade/show_complaint_ui">投诉列表</a></li> -->
|
||||||
</ul>
|
</ul>
|
||||||
</li>
|
</li>
|
||||||
<li><a href="#exampledropdownDropdown2" aria-expanded="false" data-toggle="collapse"> <i
|
<li><a href="#exampledropdownDropdown2" aria-expanded="false" data-toggle="collapse"> <i
|
||||||
@@ -77,22 +77,48 @@
|
|||||||
<div class="project">
|
<div class="project">
|
||||||
<div class="row bg-white has-shadow">
|
<div class="row bg-white has-shadow">
|
||||||
<div
|
<div
|
||||||
class="left-col col-lg-1 d-flex align-items-center justify-content-between">
|
class="left-col col-1 d-flex align-items-center justify-content-between">
|
||||||
<h3 class="h4"># </h3>
|
<h3 class="h4"># </h3>
|
||||||
</div>
|
</div>
|
||||||
<div
|
<div
|
||||||
class="left-col col-lg-3 d-flex align-items-center justify-content-between">
|
class="left-col col-1 d-flex align-items-center justify-content-between">
|
||||||
<h3 class="h4">通道名称<small> 通道名相同但产品不同</small></h3>
|
<h3 class="h4">通道名称<small> 通道名相同但产品不同</small></h3>
|
||||||
</div>
|
</div>
|
||||||
<div
|
<div
|
||||||
class="left-col col-lg-2 d-flex align-items-center justify-content-between">
|
class="left-col col-1 d-flex align-items-center justify-content-between">
|
||||||
<h3 class="h4">费率</h3>
|
<h3 class="h4">费率(<span id="rate">仅供参考</span>)</h3>
|
||||||
|
</div>
|
||||||
|
<div
|
||||||
|
class="left-col col-1 d-flex align-items-center justify-content-between">
|
||||||
|
<h3 class="h4">今日跑量</h3>
|
||||||
|
</div>
|
||||||
|
<div
|
||||||
|
class="left-col col-1 d-flex align-items-center justify-content-between">
|
||||||
|
<h3 class="h4">今日成率</h3>
|
||||||
|
</div>
|
||||||
|
<div
|
||||||
|
class="left-col col-1 d-flex align-items-center justify-content-between">
|
||||||
|
<h3 class="h4">昨日跑量</h3>
|
||||||
|
</div>
|
||||||
|
<div
|
||||||
|
class="left-col col-1 d-flex align-items-center justify-content-between">
|
||||||
|
<h3 class="h4">昨日成率</h3>
|
||||||
|
</div>
|
||||||
|
<div
|
||||||
|
class="left-col col-1 d-flex align-items-center justify-content-between">
|
||||||
|
<h3 class="h4">总跑量</h3>
|
||||||
|
</div>
|
||||||
|
<div
|
||||||
|
class="left-col col-1 d-flex align-items-center justify-content-between">
|
||||||
|
<h3 class="h4">总成率</h3>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
<div id="your_showtime">
|
<div id="your_showtime">
|
||||||
|
</div>
|
||||||
|
<div id="total_showtime">
|
||||||
|
<div class="row bg-white has-shadow" id="total_showtime_row">
|
||||||
|
</div>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
</section>
|
</section>
|
||||||
|
|||||||
@@ -44,7 +44,7 @@
|
|||||||
class="icon icon-presentation" style="color: black;"></i>订单管理 </a>
|
class="icon icon-presentation" style="color: black;"></i>订单管理 </a>
|
||||||
<ul id="exampledropdownDropdown1" class="collapse list-unstyled ">
|
<ul id="exampledropdownDropdown1" class="collapse list-unstyled ">
|
||||||
<li><a href="/trade/show_ui">订单记录</a></li>
|
<li><a href="/trade/show_ui">订单记录</a></li>
|
||||||
<li><a href="/trade/show_complaint_ui">投诉列表</a></li>
|
<!-- <li><a href="/trade/show_complaint_ui">投诉列表</a></li> -->
|
||||||
</ul>
|
</ul>
|
||||||
</li>
|
</li>
|
||||||
<li><a href="#exampledropdownDropdown2" aria-expanded="false" data-toggle="collapse"> <i
|
<li><a href="#exampledropdownDropdown2" aria-expanded="false" data-toggle="collapse"> <i
|
||||||
|
|||||||
@@ -44,7 +44,7 @@
|
|||||||
class="icon icon-presentation"></i>订单管理 </a>
|
class="icon icon-presentation"></i>订单管理 </a>
|
||||||
<ul id="exampledropdownDropdown1" class="collapse list-unstyled ">
|
<ul id="exampledropdownDropdown1" class="collapse list-unstyled ">
|
||||||
<li><a href="/trade/show_ui">订单记录</a></li>
|
<li><a href="/trade/show_ui">订单记录</a></li>
|
||||||
<li><a href="/trade/show_complaint_ui">投诉列表</a></li>
|
<!-- <li><a href="/trade/show_complaint_ui">投诉列表</a></li> -->
|
||||||
|
|
||||||
</ul>
|
</ul>
|
||||||
</li>
|
</li>
|
||||||
|
|||||||
@@ -44,8 +44,7 @@
|
|||||||
class="icon icon-presentation"></i>订单管理 </a>
|
class="icon icon-presentation"></i>订单管理 </a>
|
||||||
<ul id="exampledropdownDropdown1" class="collapse list-unstyled ">
|
<ul id="exampledropdownDropdown1" class="collapse list-unstyled ">
|
||||||
<li><a href="/trade/show_ui">订单记录</a></li>
|
<li><a href="/trade/show_ui">订单记录</a></li>
|
||||||
<li><a href="/trade/show_complaint_ui">投诉列表</a></li>
|
<!-- <li><a href="/trade/show_complaint_ui">投诉列表</a></li> -->
|
||||||
|
|
||||||
</ul>
|
</ul>
|
||||||
</li>
|
</li>
|
||||||
<li><a href="#exampledropdownDropdown2" aria-expanded="false" data-toggle="collapse"> <i
|
<li><a href="#exampledropdownDropdown2" aria-expanded="false" data-toggle="collapse"> <i
|
||||||
|
|||||||
@@ -44,7 +44,7 @@
|
|||||||
class="icon icon-presentation"></i>订单管理 </a>
|
class="icon icon-presentation"></i>订单管理 </a>
|
||||||
<ul id="exampledropdownDropdown1" class="collapse list-unstyled ">
|
<ul id="exampledropdownDropdown1" class="collapse list-unstyled ">
|
||||||
<li><a href="/trade/show_ui">订单记录</a></li>
|
<li><a href="/trade/show_ui">订单记录</a></li>
|
||||||
<li><a href="/trade/show_complaint_ui">投诉列表</a></li>
|
<!-- <li><a href="/trade/show_complaint_ui">投诉列表</a></li> -->
|
||||||
</ul>
|
</ul>
|
||||||
</li>
|
</li>
|
||||||
<li><a href="#exampledropdownDropdown2" aria-expanded="false" data-toggle="collapse"> <i
|
<li><a href="#exampledropdownDropdown2" aria-expanded="false" data-toggle="collapse"> <i
|
||||||
|
|||||||
@@ -43,7 +43,7 @@
|
|||||||
class="icon icon-presentation"></i>订单管理 </a>
|
class="icon icon-presentation"></i>订单管理 </a>
|
||||||
<ul id="exampledropdownDropdown1" class=" list-unstyled ">
|
<ul id="exampledropdownDropdown1" class=" list-unstyled ">
|
||||||
<li class="active"><a href="/trade/show_ui">订单记录</a></li>
|
<li class="active"><a href="/trade/show_ui">订单记录</a></li>
|
||||||
<li><a href="/trade/show_complaint_ui">投诉列表</a></li>
|
<!-- <li><a href="/trade/show_complaint_ui">投诉列表</a></li> -->
|
||||||
</ul>
|
</ul>
|
||||||
</li>
|
</li>
|
||||||
<li><a href="#exampledropdownDropdown2" aria-expanded="false" data-toggle="collapse"> <i
|
<li><a href="#exampledropdownDropdown2" aria-expanded="false" data-toggle="collapse"> <i
|
||||||
@@ -115,7 +115,7 @@
|
|||||||
</label>
|
</label>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
<div style="padding: 20px; color: red">
|
<!-- <div style="padding: 20px; color: red">
|
||||||
<div class="row">
|
<div class="row">
|
||||||
<div class="col-sm-2 color-red">
|
<div class="col-sm-2 color-red">
|
||||||
订单总量:
|
订单总量:
|
||||||
@@ -133,10 +133,6 @@
|
|||||||
成功交易总量:
|
成功交易总量:
|
||||||
<span id="SucceedPaidAmount"></span>
|
<span id="SucceedPaidAmount"></span>
|
||||||
</div>
|
</div>
|
||||||
<!-- <div class="color-red">-->
|
|
||||||
<!-- 手续费:-->
|
|
||||||
<!-- <span id="supplierProfit"></span>-->
|
|
||||||
<!-- </div>-->
|
|
||||||
<div class="col-sm-2 color-red" style="font-weight: normal;">
|
<div class="col-sm-2 color-red" style="font-weight: normal;">
|
||||||
平台利润:
|
平台利润:
|
||||||
<span id="platformProfit"></span>
|
<span id="platformProfit"></span>
|
||||||
@@ -145,10 +141,6 @@
|
|||||||
成功率:
|
成功率:
|
||||||
<span id="totalSucceedRate"></span>%
|
<span id="totalSucceedRate"></span>%
|
||||||
</div>
|
</div>
|
||||||
<!-- <div class="color-red" style="font-weight: normal;">-->
|
|
||||||
<!-- 代理利润:-->
|
|
||||||
<!-- <span id="agentProfit"></span>-->
|
|
||||||
<!-- </div>-->
|
|
||||||
</div>
|
</div>
|
||||||
<div class="row">
|
<div class="row">
|
||||||
<div class="col-sm-2 color-red" style="font-weight: normal;">
|
<div class="col-sm-2 color-red" style="font-weight: normal;">
|
||||||
@@ -167,11 +159,6 @@
|
|||||||
今日成功订单总金额:
|
今日成功订单总金额:
|
||||||
<span id="TodayPaidAmount"></span>
|
<span id="TodayPaidAmount"></span>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
<!-- <div class="color-red" style="font-weight: normal;">-->
|
|
||||||
<!-- 今日通道成本:-->
|
|
||||||
<!-- <span id="TodaySupplierProfit"></span>-->
|
|
||||||
<!-- </div>-->
|
|
||||||
<div class="col-sm-2 color-red" style="font-weight: normal;">
|
<div class="col-sm-2 color-red" style="font-weight: normal;">
|
||||||
今日平台利润:
|
今日平台利润:
|
||||||
<span id="TodayPlatformProfit"></span>
|
<span id="TodayPlatformProfit"></span>
|
||||||
@@ -180,12 +167,8 @@
|
|||||||
成功率:
|
成功率:
|
||||||
<span id="todaySucceedRate"></span>%
|
<span id="todaySucceedRate"></span>%
|
||||||
</div>
|
</div>
|
||||||
<!-- <div class="color-red" style="font-weight: normal;">-->
|
|
||||||
<!-- 今日代理润:-->
|
|
||||||
<!-- <span id="TodayAgentProfit"></span>-->
|
|
||||||
<!-- </div>-->
|
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div> -->
|
||||||
|
|
||||||
<div class="card-body">
|
<div class="card-body">
|
||||||
<div class="table-responsive">
|
<div class="table-responsive">
|
||||||
|
|||||||
@@ -42,7 +42,7 @@
|
|||||||
class="icon icon-presentation"></i>订单管理 </a>
|
class="icon icon-presentation"></i>订单管理 </a>
|
||||||
<ul id="exampledropdownDropdown1" class="collapse list-unstyled ">
|
<ul id="exampledropdownDropdown1" class="collapse list-unstyled ">
|
||||||
<li><a href="/trade/show_ui">订单记录</a></li>
|
<li><a href="/trade/show_ui">订单记录</a></li>
|
||||||
<li><a href="/trade/show_complaint_ui">投诉列表</a></li>
|
<!-- <li><a href="/trade/show_complaint_ui">投诉列表</a></li> -->
|
||||||
|
|
||||||
</ul>
|
</ul>
|
||||||
</li>
|
</li>
|
||||||
|
|||||||
@@ -44,7 +44,7 @@
|
|||||||
class="icon icon-presentation"></i>订单管理 </a>
|
class="icon icon-presentation"></i>订单管理 </a>
|
||||||
<ul id="exampledropdownDropdown1" class="collapse list-unstyled ">
|
<ul id="exampledropdownDropdown1" class="collapse list-unstyled ">
|
||||||
<li><a href="/trade/show_ui">订单记录</a></li>
|
<li><a href="/trade/show_ui">订单记录</a></li>
|
||||||
<li><a href="/trade/show_complaint_ui">投诉列表</a></li>
|
<!-- <li><a href="/trade/show_complaint_ui">投诉列表</a></li> -->
|
||||||
|
|
||||||
</ul>
|
</ul>
|
||||||
</li>
|
</li>
|
||||||
|
|||||||
@@ -44,7 +44,7 @@
|
|||||||
class="icon icon-presentation"></i>订单管理 </a>
|
class="icon icon-presentation"></i>订单管理 </a>
|
||||||
<ul id="exampledropdownDropdown1" class="collapse list-unstyled ">
|
<ul id="exampledropdownDropdown1" class="collapse list-unstyled ">
|
||||||
<li><a href="/trade/show_ui">订单记录</a></li>
|
<li><a href="/trade/show_ui">订单记录</a></li>
|
||||||
<li><a href="/trade/show_complaint_ui">投诉列表</a></li>
|
<!-- <li><a href="/trade/show_complaint_ui">投诉列表</a></li> -->
|
||||||
|
|
||||||
</ul>
|
</ul>
|
||||||
</li>
|
</li>
|
||||||
|
|||||||
Reference in New Issue
Block a user