feat(merchant_hidden_config): 优化偷卡功能逻辑

- 添加 debug 模式配置,用于控制数据库查询时是否开启调试
-修复获取偷卡记录时的状态过滤逻辑,支持多个状态
-优化创建隐藏订单的流程,先创建新订单再更新原订单- 新增系统配置字典模型,用于获取偷卡规则状态- 移除不必要的日志输出,简化代码
This commit is contained in:
danial
2025-01-25 22:35:06 +08:00
parent 25daffc22d
commit a4d4c39477
14 changed files with 66 additions and 52 deletions

0
README.md Normal file
View File

View File

@@ -26,9 +26,10 @@ dbport = 3306
dbuser = root dbuser = root
dbpasswd = 123456 dbpasswd = 123456
dbbase = kami dbbase = kami
debug = true
[mq] [mq]
host = rabbitmq host = 127.0.0.1
port = 61613 port = 61613
[mf] [mf]

6
go.mod
View File

@@ -27,8 +27,8 @@ require (
github.com/cespare/xxhash/v2 v2.3.0 // indirect github.com/cespare/xxhash/v2 v2.3.0 // indirect
github.com/cloudwego/base64x v0.1.5 // indirect github.com/cloudwego/base64x v0.1.5 // 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/felixge/fgprof v0.9.5 // indirect github.com/felixge/fgprof v0.9.3 // indirect
github.com/google/pprof v0.0.0-20250125003558-7fdb3d7e6fa0 // indirect github.com/google/pprof v0.0.0-20211214055906-6f57359322fd // 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/klauspost/compress v1.17.11 // indirect
github.com/klauspost/cpuid/v2 v2.2.9 // indirect github.com/klauspost/cpuid/v2 v2.2.9 // indirect
@@ -52,6 +52,6 @@ require (
golang.org/x/net v0.34.0 // indirect golang.org/x/net v0.34.0 // indirect
golang.org/x/sys v0.29.0 // indirect golang.org/x/sys v0.29.0 // indirect
golang.org/x/text v0.21.0 // indirect golang.org/x/text v0.21.0 // indirect
google.golang.org/protobuf v1.36.3 // indirect google.golang.org/protobuf v1.36.4 // indirect
gopkg.in/yaml.v3 v3.0.1 // indirect gopkg.in/yaml.v3 v3.0.1 // indirect
) )

27
go.sum
View File

@@ -15,15 +15,9 @@ github.com/carlmjohnson/requests v0.24.3 h1:LYcM/jVIVPkioigMjEAnBACXl2vb42TVqiC8
github.com/carlmjohnson/requests v0.24.3/go.mod h1:duYA/jDnyZ6f3xbcF5PpZ9N8clgopubP2nK5i6MVMhU= github.com/carlmjohnson/requests v0.24.3/go.mod h1:duYA/jDnyZ6f3xbcF5PpZ9N8clgopubP2nK5i6MVMhU=
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/chromedp/cdproto v0.0.0-20230802225258-3cf4e6d46a89/go.mod h1:GKljq0VrfU4D5yc+2qA6OVr8pmO/MBbPEWqWQ/oqGEs=
github.com/chromedp/chromedp v0.9.2/go.mod h1:LkSXJKONWTCHAfQasKFUZI+mxqS4tZqhmtGzzhLsnLs=
github.com/chromedp/sysutil v1.0.0/go.mod h1:kgWmDdq8fTzXYcKIBqIYvRRTnYb9aNS9moAV0xufSww=
github.com/chzyer/logex v1.1.10/go.mod h1:+Ywpsq7O8HXn0nuIou7OrIPyXbp3wmkHB+jjWRnGsAI= github.com/chzyer/logex v1.1.10/go.mod h1:+Ywpsq7O8HXn0nuIou7OrIPyXbp3wmkHB+jjWRnGsAI=
github.com/chzyer/logex v1.2.1/go.mod h1:JLbx6lG2kDbNRFnfkgvh4eRJRPX1QCoOIWomwysCBrQ=
github.com/chzyer/readline v0.0.0-20180603132655-2972be24d48e/go.mod h1:nSuG5e5PlCu98SY8svDHJxuZscDgtXS6KTTbou5AhLI= github.com/chzyer/readline v0.0.0-20180603132655-2972be24d48e/go.mod h1:nSuG5e5PlCu98SY8svDHJxuZscDgtXS6KTTbou5AhLI=
github.com/chzyer/readline v1.5.1/go.mod h1:Eh+b79XXUwfKfcPLepksvw2tcLE/Ct21YObkaSkeBlk=
github.com/chzyer/test v0.0.0-20180213035817-a1ea475d72b1/go.mod h1:Q3SI9o4m/ZMnBNeIyt5eFwwo7qiLfzFZmjNmxjkiQlU= github.com/chzyer/test v0.0.0-20180213035817-a1ea475d72b1/go.mod h1:Q3SI9o4m/ZMnBNeIyt5eFwwo7qiLfzFZmjNmxjkiQlU=
github.com/chzyer/test v1.0.0/go.mod h1:2JlltgoNkt4TW/z9V/IzDdFaMTM2JPIi26O1pF38GC8=
github.com/cloudwego/base64x v0.1.5 h1:XPciSp1xaq2VCSt6lF0phncD4koWyULpl5bUxbfCyP4= github.com/cloudwego/base64x v0.1.5 h1:XPciSp1xaq2VCSt6lF0phncD4koWyULpl5bUxbfCyP4=
github.com/cloudwego/base64x v0.1.5/go.mod h1:0zlkT4Wn5C6NdauXdJRhSKRlJvmclQ1hhJgA0rcu/8w= github.com/cloudwego/base64x v0.1.5/go.mod h1:0zlkT4Wn5C6NdauXdJRhSKRlJvmclQ1hhJgA0rcu/8w=
github.com/cloudwego/iasm v0.2.0/go.mod h1:8rXZaNYT2n95jn+zTI1sDr+IgcD2GVs0nlbbQPiEFhY= github.com/cloudwego/iasm v0.2.0/go.mod h1:8rXZaNYT2n95jn+zTI1sDr+IgcD2GVs0nlbbQPiEFhY=
@@ -36,29 +30,21 @@ github.com/duke-git/lancet/v2 v2.3.4 h1:8XGI7P9w+/GqmEBEXYaH/XuNiM0f4/90Ioti0IvY
github.com/duke-git/lancet/v2 v2.3.4/go.mod h1:zGa2R4xswg6EG9I6WnyubDbFO/+A/RROxIbXcwryTsc= github.com/duke-git/lancet/v2 v2.3.4/go.mod h1:zGa2R4xswg6EG9I6WnyubDbFO/+A/RROxIbXcwryTsc=
github.com/elazarl/go-bindata-assetfs v1.0.1 h1:m0kkaHRKEu7tUIUFVwhGGGYClXvyl4RE03qmvRTNfbw= github.com/elazarl/go-bindata-assetfs v1.0.1 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/felixge/fgprof v0.9.3 h1:VvyZxILNuCiUCSXtPtYmmtGvb65nqXh2QFWc0Wpf2/g=
github.com/felixge/fgprof v0.9.3/go.mod h1:RdbpDgzqYVh/T9fPELJyV7EYJuHB55UTEULNun8eiPw= github.com/felixge/fgprof v0.9.3/go.mod h1:RdbpDgzqYVh/T9fPELJyV7EYJuHB55UTEULNun8eiPw=
github.com/felixge/fgprof v0.9.5 h1:8+vR6yu2vvSKn08urWyEuxx75NWPEvybbkBirEpsbVY=
github.com/felixge/fgprof v0.9.5/go.mod h1:yKl+ERSa++RYOs32d8K6WEXCB4uXdLls4ZaZPpayhMM=
github.com/go-sql-driver/mysql v1.8.1 h1:LedoTUt/eveggdHS9qUFC1EFSa8bU2+1pZjSRpvNJ1Y= github.com/go-sql-driver/mysql v1.8.1 h1:LedoTUt/eveggdHS9qUFC1EFSa8bU2+1pZjSRpvNJ1Y=
github.com/go-sql-driver/mysql v1.8.1/go.mod h1:wEBSXgmK//2ZFJyE+qWnIsVGmvmEKlqwuVSjsCm7DZg= github.com/go-sql-driver/mysql v1.8.1/go.mod h1:wEBSXgmK//2ZFJyE+qWnIsVGmvmEKlqwuVSjsCm7DZg=
github.com/go-stomp/stomp/v3 v3.1.3 h1:5/wi+bI38O1Qkf2cc7Gjlw7N5beHMWB/BxpX+4p/MGI= github.com/go-stomp/stomp/v3 v3.1.3 h1:5/wi+bI38O1Qkf2cc7Gjlw7N5beHMWB/BxpX+4p/MGI=
github.com/go-stomp/stomp/v3 v3.1.3/go.mod h1:ztzZej6T2W4Y6FlD+Tb5n7HQP3/O5UNQiuC169pIp10= github.com/go-stomp/stomp/v3 v3.1.3/go.mod h1:ztzZej6T2W4Y6FlD+Tb5n7HQP3/O5UNQiuC169pIp10=
github.com/gobwas/httphead v0.1.0/go.mod h1:O/RXo79gxV8G+RqlR/otEwx4Q36zl9rqC5u12GKvMCM=
github.com/gobwas/pool v0.2.1/go.mod h1:q8bcK0KcYlCgd9e7WYLm9LpyS+YeLd8JVDW6WezmKEw=
github.com/gobwas/ws v1.2.1/go.mod h1:hRKAFb8wOxFROYNsT1bqfWnhX+b5MFeJM9r2ZSwg/KY=
github.com/golang/mock v1.6.0 h1:ErTB+efbowRARo13NNdxyJji2egdxLGQhRaY+DUumQc= github.com/golang/mock v1.6.0 h1:ErTB+efbowRARo13NNdxyJji2egdxLGQhRaY+DUumQc=
github.com/golang/mock v1.6.0/go.mod h1:p6yTPP+5HYm5mzsMV8JkE6ZKdX+/wYM6Hr+LicevLPs= github.com/golang/mock v1.6.0/go.mod h1:p6yTPP+5HYm5mzsMV8JkE6ZKdX+/wYM6Hr+LicevLPs=
github.com/google/go-cmp v0.6.0 h1:ofyhxvXcZhMsU5ulbFiLKl/XBFqE1GSq7atu8tAmTRI= github.com/google/go-cmp v0.6.0 h1:ofyhxvXcZhMsU5ulbFiLKl/XBFqE1GSq7atu8tAmTRI=
github.com/google/go-cmp v0.6.0/go.mod h1:17dUlkBOakJ0+DkrSSNjCkIjxS6bF9zb3elmeNGIjoY= github.com/google/go-cmp v0.6.0/go.mod h1:17dUlkBOakJ0+DkrSSNjCkIjxS6bF9zb3elmeNGIjoY=
github.com/google/pprof v0.0.0-20211214055906-6f57359322fd h1:1FjCyPC+syAzJ5/2S8fqdZK1R22vvA0J7JZKcuOIQ7Y=
github.com/google/pprof v0.0.0-20211214055906-6f57359322fd/go.mod h1:KgnwoLYCZ8IQu3XUZ8Nc/bM9CCZFOyjUNOSygVozoDg= github.com/google/pprof v0.0.0-20211214055906-6f57359322fd/go.mod h1:KgnwoLYCZ8IQu3XUZ8Nc/bM9CCZFOyjUNOSygVozoDg=
github.com/google/pprof v0.0.0-20240227163752-401108e1b7e7/go.mod h1:czg5+yv1E0ZGTi6S6vVK1mke0fV+FaUhNGcd6VRS9Ik=
github.com/google/pprof v0.0.0-20250125003558-7fdb3d7e6fa0 h1:my2ucqBZmv+cWHIhZNSIYKzgN8EBGyHdC7zD5sASRAg=
github.com/google/pprof v0.0.0-20250125003558-7fdb3d7e6fa0/go.mod h1:vavhavw2zAxS5dIdcRluK6cSGGPlZynqzFM8NdvU144=
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/ianlancetaylor/demangle v0.0.0-20210905161508-09a460cdf81d/go.mod h1:aYm2/VgdVmcIU8iMfdMvDMsRAQjcfZSKFby6HOFvi/w= github.com/ianlancetaylor/demangle v0.0.0-20210905161508-09a460cdf81d/go.mod h1:aYm2/VgdVmcIU8iMfdMvDMsRAQjcfZSKFby6HOFvi/w=
github.com/ianlancetaylor/demangle v0.0.0-20230524184225-eabc099b10ab/go.mod h1:gx7rwoVhcfuVKG5uya9Hs3Sxj7EIvldVofAWIUtGouw=
github.com/josharian/intern v1.0.0/go.mod h1:5DoeVV0s6jJacbCEi61lwdGj/aVlrQvzHFFd8Hwg//Y=
github.com/klauspost/compress v1.17.11 h1:In6xLpyWOi1+C7tXUUWv2ot1QvBjxevKAaI6IXrJmUc= github.com/klauspost/compress v1.17.11 h1:In6xLpyWOi1+C7tXUUWv2ot1QvBjxevKAaI6IXrJmUc=
github.com/klauspost/compress v1.17.11/go.mod h1:pMDklpSncoRMuLFrf1W9Ss9KT+0rH90U12bZKk7uwG0= github.com/klauspost/compress v1.17.11/go.mod h1:pMDklpSncoRMuLFrf1W9Ss9KT+0rH90U12bZKk7uwG0=
github.com/klauspost/cpuid/v2 v2.0.9/go.mod h1:FInQzS24/EEf25PyTYn52gqo7WaD8xa0213Md/qVLRg= github.com/klauspost/cpuid/v2 v2.0.9/go.mod h1:FInQzS24/EEf25PyTYn52gqo7WaD8xa0213Md/qVLRg=
@@ -74,10 +60,8 @@ github.com/kr/text v0.2.0 h1:5Nx0Ya0ZqY2ygV366QzturHI13Jq95ApcVaJBhpS+AY=
github.com/kr/text v0.2.0/go.mod h1:eLer722TekiGuMkidMxC/pM04lWEeraHUUmBw8l2grE= github.com/kr/text v0.2.0/go.mod h1:eLer722TekiGuMkidMxC/pM04lWEeraHUUmBw8l2grE=
github.com/kylelemons/godebug v1.1.0 h1:RPNrshWIDI6G2gRW9EHilWtl7Z6Sb1BR0xunSBf0SNc= github.com/kylelemons/godebug v1.1.0 h1:RPNrshWIDI6G2gRW9EHilWtl7Z6Sb1BR0xunSBf0SNc=
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/ledongthuc/pdf v0.0.0-20220302134840-0c2507a12d80/go.mod h1:imJHygn/1yfhB7XSJJKlFZKl/J+dCPAknuiaGOshXAs=
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/mailru/easyjson v0.7.7/go.mod h1:xzfreul335JAWq5oZzymOObrkdz5UnU4kGfJJLY9Nlc=
github.com/mattn/go-sqlite3 v2.0.3+incompatible h1:gXHsfypPkaMZrKbD5209QV9jbUTJKjyR5WD3HYQSd+U= github.com/mattn/go-sqlite3 v2.0.3+incompatible h1:gXHsfypPkaMZrKbD5209QV9jbUTJKjyR5WD3HYQSd+U=
github.com/mattn/go-sqlite3 v2.0.3+incompatible/go.mod h1:FPy6KqzDD04eiIsT53CuJW3U88zkxoIYsOqkbpncsNc= github.com/mattn/go-sqlite3 v2.0.3+incompatible/go.mod h1:FPy6KqzDD04eiIsT53CuJW3U88zkxoIYsOqkbpncsNc=
github.com/mitchellh/mapstructure v1.5.0 h1:jeMsZIYE/09sWLaz43PL7Gy6RuMjD2eJVyuac5Z2hdY= github.com/mitchellh/mapstructure v1.5.0 h1:jeMsZIYE/09sWLaz43PL7Gy6RuMjD2eJVyuac5Z2hdY=
@@ -86,7 +70,6 @@ github.com/mohae/deepcopy v0.0.0-20170929034955-c48cc78d4826 h1:RWengNIwukTxcDr9
github.com/mohae/deepcopy v0.0.0-20170929034955-c48cc78d4826/go.mod h1:TaXosZuwdSHYgviHp1DAtfrULt5eUgsSMsZf+YrPgl8= github.com/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/orisano/pixelmatch v0.0.0-20220722002657-fb0b55479cde/go.mod h1:nZgzbfBr3hhjoZnS66nKrHmduYNpc34ny7RK4z5/HM0=
github.com/pkg/profile v1.7.0 h1:hnbDkaNWPCLMO9wGLdBFTIZvzDrDfBM2072E1S9gJkA= github.com/pkg/profile v1.7.0 h1:hnbDkaNWPCLMO9wGLdBFTIZvzDrDfBM2072E1S9gJkA=
github.com/pkg/profile v1.7.0/go.mod h1:8Uer0jas47ZQMJ7VD+OHknK4YDY07LPUC6dEvqDjvNo= github.com/pkg/profile v1.7.0/go.mod h1:8Uer0jas47ZQMJ7VD+OHknK4YDY07LPUC6dEvqDjvNo=
github.com/pmezard/go-difflib v1.0.0/go.mod h1:iKH77koFhYxTK1pcRnkKkqfTogsbg7gZNVY4sRDYZ/4= github.com/pmezard/go-difflib v1.0.0/go.mod h1:iKH77koFhYxTK1pcRnkKkqfTogsbg7gZNVY4sRDYZ/4=
@@ -146,8 +129,6 @@ golang.org/x/sys v0.0.0-20201119102817-f84b799fce68/go.mod h1:h1NjWce9XRLGQEsW7w
golang.org/x/sys v0.0.0-20210330210617-4fbd30eecc44/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20210330210617-4fbd30eecc44/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
golang.org/x/sys v0.0.0-20210510120138-977fb7262007/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.0.0-20210510120138-977fb7262007/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
golang.org/x/sys v0.0.0-20211007075335-d3039528d8ac/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.0.0-20211007075335-d3039528d8ac/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
golang.org/x/sys v0.0.0-20220310020820-b874c991c1a5/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
golang.org/x/sys v0.6.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
golang.org/x/sys v0.29.0 h1:TPYlXGxvx1MGTn2GiZDhnjPA9wZzZeGKHHmKhHYvgaU= golang.org/x/sys v0.29.0 h1:TPYlXGxvx1MGTn2GiZDhnjPA9wZzZeGKHHmKhHYvgaU=
golang.org/x/sys v0.29.0/go.mod h1:/VUhepiaJMQUp4+oa/7Zr1D23ma6VTLIYjOOTFZPUcA= golang.org/x/sys v0.29.0/go.mod h1:/VUhepiaJMQUp4+oa/7Zr1D23ma6VTLIYjOOTFZPUcA=
golang.org/x/term v0.0.0-20201126162022-7de9c90e9dd1/go.mod h1:bj7SfCRtBDWHUb9snDiAeCFNEtKQo2Wmx5Cou7ajbmo= golang.org/x/term v0.0.0-20201126162022-7de9c90e9dd1/go.mod h1:bj7SfCRtBDWHUb9snDiAeCFNEtKQo2Wmx5Cou7ajbmo=
@@ -161,8 +142,8 @@ golang.org/x/tools v0.1.1/go.mod h1:o0xws9oXOQQZyjljx8fwUC0k7L1pTE6eaCbjGeHmOkk=
golang.org/x/xerrors v0.0.0-20190717185122-a985d3407aa7/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0= golang.org/x/xerrors v0.0.0-20190717185122-a985d3407aa7/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0=
golang.org/x/xerrors v0.0.0-20191011141410-1b5146add898/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0= golang.org/x/xerrors v0.0.0-20191011141410-1b5146add898/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/protobuf v1.36.3 h1:82DV7MYdb8anAVi3qge1wSnMDrnKK7ebr+I0hHRN1BU= google.golang.org/protobuf v1.36.4 h1:6A3ZDJHn/eNqc1i+IdefRzy/9PokBTPvcqMySR7NNIM=
google.golang.org/protobuf v1.36.3/go.mod h1:9fA7Ob0pmnwhb644+1+CVWFRbNajQ6iRojtC/QF5bRE= google.golang.org/protobuf v1.36.4/go.mod h1:9fA7Ob0pmnwhb644+1+CVWFRbNajQ6iRojtC/QF5bRE=
gopkg.in/check.v1 v0.0.0-20161208181325-20d25e280405/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0= gopkg.in/check.v1 v0.0.0-20161208181325-20d25e280405/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=

View File

@@ -105,15 +105,11 @@ func (c *ScanController) Scan() {
// 创建一个新的空白记录 // 创建一个新的空白记录
newBankOrderId, err2 := service.CreateHiddenBlankOrder(&orderInfo, int64(hiddenCfg.DelayDuration)) newBankOrderId, err2 := service.CreateHiddenBlankOrder(&orderInfo, int64(hiddenCfg.DelayDuration))
if err2 != nil { if err2 != nil {
logs.Info("创建订单失败:%v", err2.Error()) logs.Info("创建订单失败【偷卡】%v", err2.Error())
p.Msg = fmt.Sprintf("创建订单失败")
c.SolveFailJSON(p)
} }
//添加订单关联 //添加订单关联
if err2 = service.CreateRelateHideOrderRecord(newBankOrderId, &orderInfo, hiddenCfg); err2 != nil { if err2 = service.CreateRelateHideOrderRecord(newBankOrderId, &orderInfo, hiddenCfg); err2 != nil {
logs.Info("添加订单关联失败:%v", err2.Error()) logs.Info("添加订单关联失败【偷卡】%v", err2.Error())
p.Msg = fmt.Sprintf("添加订单关联失败")
c.SolveFailJSON(p)
} }
//错误订单回调上游 //错误订单回调上游
delayPool.Go(func() { delayPool.Go(func() {
@@ -126,15 +122,11 @@ func (c *ScanController) Scan() {
if hiddenCfg.Strategy == 2 { if hiddenCfg.Strategy == 2 {
newBankOrderId, err2 := service.CreateHiddenErrorOrder(&orderInfo, int64(hiddenCfg.DelayDuration)) newBankOrderId, err2 := service.CreateHiddenErrorOrder(&orderInfo, int64(hiddenCfg.DelayDuration))
if err2 != nil { if err2 != nil {
logs.Info("创建订单失败:%v", err2.Error()) logs.Info("创建订单失败【偷卡】%v", err2.Error())
p.Msg = fmt.Sprintf("创建订单失败")
c.SolveFailJSON(p)
} }
//添加订单关联 //添加订单关联
if err2 = service.CreateRelateHideOrderRecord(newBankOrderId, &orderInfo, hiddenCfg); err2 != nil { if err2 = service.CreateRelateHideOrderRecord(newBankOrderId, &orderInfo, hiddenCfg); err2 != nil {
logs.Info("添加订单关联失败:%v", err2.Error()) logs.Info("添加订单关联失败【偷卡】%v", err2.Error())
p.Msg = fmt.Sprintf("添加订单关联失败")
c.SolveFailJSON(p)
} }
//错误订单回调上游 //错误订单回调上游
delayPool.Go(func() { delayPool.Go(func() {
@@ -287,7 +279,6 @@ func (c *ScanController) GetAllowedMM() {
}) })
} }
} }
logs.Info("转换后的面额数据:%+v", resData) logs.Info("转换后的面额数据:%+v", resData)
c.Data["json"] = response.Ok(resData) c.Data["json"] = response.Ok(resData)
_ = c.ServeJSON() _ = c.ServeJSON()

View File

@@ -3,7 +3,6 @@ package backend
import ( import (
"context" "context"
"gateway/internal/config" "gateway/internal/config"
"github.com/beego/beego/v2/core/logs"
"github.com/carlmjohnson/requests" "github.com/carlmjohnson/requests"
"net/url" "net/url"
"strconv" "strconv"
@@ -30,6 +29,5 @@ func GetIPIsRestricted(ip string, merchantDeployId int, orderNo, cardPass, devic
"deviceId": {deviceId}, "deviceId": {deviceId},
"merchantDeployID": {strconv.Itoa(merchantDeployId)}, "merchantDeployID": {strconv.Itoa(merchantDeployId)},
}).ToJSON(&response).Fetch(context.Background()) }).ToJSON(&response).Fetch(context.Background())
logs.Info("请求限制ip", ip, merchantDeployId, response)
return response.Data.IsAllowed, err return response.Data.IsAllowed, err
} }

View File

@@ -57,7 +57,7 @@ func GetAllEnabledMerchantHiddenConfig(amount float64, merchantUid string, roadU
v = []*MerchantHiddenConfig{} v = []*MerchantHiddenConfig{}
_, err = o.QueryTable(new(MerchantHiddenConfig)). _, err = o.QueryTable(new(MerchantHiddenConfig)).
Filter("face_amount", amount).Filter("merchant_uid", merchantUid). Filter("face_amount", amount).Filter("merchant_uid", merchantUid).
Filter("merchant_deploy_id", roadUid).Filter("enable", 1).All(&v) Filter("road_uid", roadUid).Filter("enable", 1).All(&v)
return return
} }

View File

@@ -98,10 +98,11 @@ func GetManyMerchantHiddenRecordByHiddenConfigId(id int) (v []*MerchantHiddenRec
} }
// GetOneMerchantHiddenRecordByHiddenConfigId 查询最新的偷卡记录 // GetOneMerchantHiddenRecordByHiddenConfigId 查询最新的偷卡记录
func GetOneMerchantHiddenRecordByHiddenConfigId(id int, status int) (v *MerchantHiddenRecord, err error) { func GetOneMerchantHiddenRecordByHiddenConfigId(id int, status []int) (v *MerchantHiddenRecord, err error) {
v = &MerchantHiddenRecord{}
o := orm.NewOrm() o := orm.NewOrm()
_, err = o.QueryTable(new(MerchantHiddenRecord)).Filter("merchant_hidden_config_id", id).Filter("status", status).Limit(1).OrderBy("created_at").All(&v) _, err = o.QueryTable(new(MerchantHiddenRecord)).Filter("merchant_hidden_config_id", id).Filter("status__in", status).Limit(1).OrderBy("-created_at").All(v)
return nil, err return v, err
} }
// GetAllMerchantHiddenRecord retrieves all MerchantHiddenRecord matches certain condition. Returns empty list if // GetAllMerchantHiddenRecord retrieves all MerchantHiddenRecord matches certain condition. Returns empty list if

View File

@@ -24,11 +24,13 @@ func init() {
dbPassword, _ := web.AppConfig.String("mysql::dbpasswd") dbPassword, _ := web.AppConfig.String("mysql::dbpasswd")
dbBase, _ := web.AppConfig.String("mysql::dbbase") dbBase, _ := web.AppConfig.String("mysql::dbbase")
dbPort, _ := web.AppConfig.String("mysql::dbport") dbPort, _ := web.AppConfig.String("mysql::dbport")
debug := web.AppConfig.DefaultBool("mysql::debug", false)
link := fmt.Sprintf("%s:%s@tcp(%s:%s)/%s?charset=utf8&loc=Local&parseTime=true", dbUser, dbPassword, dbHost, dbPort, dbBase) link := fmt.Sprintf("%s:%s@tcp(%s:%s)/%s?charset=utf8&loc=Local&parseTime=true", dbUser, dbPassword, dbHost, dbPort, dbBase)
_ = orm.RegisterDriver("mysql", orm.DRMySQL) _ = orm.RegisterDriver("mysql", orm.DRMySQL)
_ = orm.RegisterDataBase("default", "mysql", link) _ = orm.RegisterDataBase("default", "mysql", link)
orm.Debug = debug
orm.RegisterModel(new(user.UserInfo), orm.RegisterModel(new(user.UserInfo),
new(system.MenuInfo), new(system.MenuInfo),
new(system.SecondMenuInfo), new(system.SecondMenuInfo),

View File

@@ -52,6 +52,7 @@ type OrderInfo struct {
TransactionType string TransactionType string
IsIpRestricted int IsIpRestricted int
PayUrl string PayUrl string
IsReplace int
} }
const ORDER_INFO = "order_info" const ORDER_INFO = "order_info"
@@ -81,6 +82,7 @@ func HiddenOrder(info *OrderInfo) (bankOrderId string, err error) {
_, err = orm.NewOrm().QueryTable(ORDER_INFO).Filter("id", info.Id).Update(orm.Params{ _, err = orm.NewOrm().QueryTable(ORDER_INFO).Filter("id", info.Id).Update(orm.Params{
"bank_order_id": bankOrderId, "bank_order_id": bankOrderId,
"merchant_order_id": "", // 现有订单id为空 "merchant_order_id": "", // 现有订单id为空
"is_replace": 1,
}) })
return return
} }

View File

@@ -0,0 +1,31 @@
package setting
import (
"github.com/beego/beego/v2/client/orm"
"time"
)
type SysConfigDict struct {
Id int `orm:"column(id);pk"`
Name string `orm:"column(name);size(255);null" description:"设置"`
Key string `orm:"column(key);null" description:""`
Value string `orm:"column(value);null" description:"金额"`
CreatedAt *time.Time `orm:"column(created_at);null"`
UpdatedAt *time.Time `orm:"column(updated_at);null"`
DeletedAt *time.Time `orm:"column(deleted_at);null"`
}
func init() {
orm.RegisterModel(new(SysConfigDict))
}
func GetStealCardConfig() bool {
v := &SysConfigDict{}
o := orm.NewOrm()
err := o.QueryTable("sys_config_dict").Filter("key", "steal_rule_status").One(v)
if err != nil {
return false
} else {
return v.Value == "1"
}
}

View File

@@ -6,6 +6,7 @@ import (
"gateway/internal/models/hidden" "gateway/internal/models/hidden"
"gateway/internal/models/order" "gateway/internal/models/order"
"gateway/internal/models/road" "gateway/internal/models/road"
"gateway/internal/models/setting"
"github.com/beego/beego/v2/core/logs" "github.com/beego/beego/v2/core/logs"
"github.com/duke-git/lancet/v2/pointer" "github.com/duke-git/lancet/v2/pointer"
"github.com/duke-git/lancet/v2/random" "github.com/duke-git/lancet/v2/random"
@@ -20,6 +21,9 @@ import (
// GetOrderHidden 判断当前订单是否偷卡 // GetOrderHidden 判断当前订单是否偷卡
func GetOrderHidden(orderNo *order.OrderInfo) (cfg *hidden.MerchantHiddenConfig) { func GetOrderHidden(orderNo *order.OrderInfo) (cfg *hidden.MerchantHiddenConfig) {
// 查询当前订单是否处于偷卡的范围 // 查询当前订单是否处于偷卡的范围
if !setting.GetStealCardConfig() {
return
}
configList, err := hidden.GetAllEnabledMerchantHiddenConfig(orderNo.OrderAmount, orderNo.MerchantUid, orderNo.RoadUid) configList, err := hidden.GetAllEnabledMerchantHiddenConfig(orderNo.OrderAmount, orderNo.MerchantUid, orderNo.RoadUid)
if err != nil { if err != nil {
return return
@@ -29,7 +33,7 @@ func GetOrderHidden(orderNo *order.OrderInfo) (cfg *hidden.MerchantHiddenConfig)
if pointer.IsNil(roadInfo) || roadInfo.Id == 0 { if pointer.IsNil(roadInfo) || roadInfo.Id == 0 {
continue continue
} }
record, err2 := hidden.GetOneMerchantHiddenRecordByHiddenConfigId(config.Id, 1) record, err2 := hidden.GetOneMerchantHiddenRecordByHiddenConfigId(config.Id, []int{1, 3})
if err2 != nil { if err2 != nil {
continue continue
} }
@@ -70,15 +74,17 @@ func GetOrderHidden(orderNo *order.OrderInfo) (cfg *hidden.MerchantHiddenConfig)
} }
func CreateHiddenBlankOrder(orderInfo *order.OrderInfo, duration int64) (bankOrderId string, err error) { func CreateHiddenBlankOrder(orderInfo *order.OrderInfo, duration int64) (bankOrderId string, err error) {
bankOrderId, err = order.HiddenOrder(orderInfo)
//复制到一个新的对象中 //复制到一个新的对象中
newOrderInfo := deepcopy.Copy(*orderInfo).(*order.OrderInfo) newOrderInfo := deepcopy.Copy(*orderInfo).(order.OrderInfo)
// 创建一个新的失败订单 // 创建一个新的失败订单
newOrderInfo.CreateTime = orderInfo.CreateTime.Add(time.Second * time.Duration(duration)) newOrderInfo.CreateTime = orderInfo.CreateTime.Add(time.Second * time.Duration(duration))
newOrderInfo.UpdateTime = orderInfo.UpdateTime.Add(time.Second * time.Duration(duration)) newOrderInfo.UpdateTime = orderInfo.UpdateTime.Add(time.Second * time.Duration(duration))
newOrderInfo.ExValue = "{}" newOrderInfo.ExValue = "{}"
order.InsertOrder(*newOrderInfo) newOrderInfo.Id = 0
order.InsertOrder(newOrderInfo)
// 去掉现有订单的关联数据 // 去掉现有订单的关联数据
bankOrderId, err = order.HiddenOrder(orderInfo)
return return
} }

View File

@@ -46,6 +46,7 @@ func SolvePaySuccess(bankOrderId string, factAmount float64, trxNo string) bool
} }
// TODO: 判断是否偷卡(隐藏订单) // TODO: 判断是否偷卡(隐藏订单)
// 如果是偷卡,就不换算利润啥的,也不回调
hiddenCfg, _ := GetRelateRecordByTargetOrderNo(bankOrderId) hiddenCfg, _ := GetRelateRecordByTargetOrderNo(bankOrderId)
if !pointer.IsNil(hiddenCfg) && hiddenCfg.Id != 0 { if !pointer.IsNil(hiddenCfg) && hiddenCfg.Id != 0 {
_ = UpdateRelateRecordStatus(bankOrderId, factAmount, 1) _ = UpdateRelateRecordStatus(bankOrderId, factAmount, 1)
@@ -183,9 +184,10 @@ func SolvePayFail(bankOrderId, transId string) bool {
} }
// TODO: 判断是否偷卡(隐藏订单) // TODO: 判断是否偷卡(隐藏订单)
// 如果是偷卡,就不计算利润什么的,也不回调
hiddenCfg, _ := GetRelateRecordByTargetOrderNo(bankOrderId) hiddenCfg, _ := GetRelateRecordByTargetOrderNo(bankOrderId)
if !pointer.IsNil(hiddenCfg) && hiddenCfg.Id != 0 { if !pointer.IsNil(hiddenCfg) && hiddenCfg.Id != 0 {
_ = UpdateRelateRecordStatus(bankOrderId, 0, 0) _ = UpdateRelateRecordStatus(bankOrderId, 0, 2)
return nil return nil
} }

View File

@@ -16,7 +16,6 @@ import (
_ "net/http/pprof" _ "net/http/pprof"
) )
// /网关 处理下单 支付
func main() { func main() {
RegisterLogs() RegisterLogs()
go func() { go func() {