Commit 922e46eb authored by shajiaiming's avatar shajiaiming

Merge branch 'feature/bonus' into 'develop'

Feature/bonus See merge request !1
parents 5d98ed5a 785f59c6
......@@ -10,3 +10,7 @@ conf/app.ini
# output
*.out
*.yaml
# module
/vendor
......@@ -4,55 +4,33 @@ go 1.16
require (
github.com/BurntSushi/toml v0.3.1 // indirect
github.com/Knetic/govaluate v3.0.0+incompatible // indirect
github.com/alicebob/gopher-json v0.0.0-20180125190556-5a6b3ba71ee6 // indirect
github.com/alicebob/miniredis v2.5.0+incompatible // indirect
github.com/astaxie/beego v1.10.1
github.com/beego/goyaml2 v0.0.0-20130207012346-5545475820dd // indirect
github.com/beego/x2j v0.0.0-20131220205130-a0352aadc542 // indirect
github.com/bradfitz/gomemcache v0.0.0-20180710155616-bc664df96737 // indirect
github.com/casbin/casbin v1.7.0 // indirect
github.com/cloudflare/golz4 v0.0.0-20150217214814-ef862a3cdc58 // indirect
github.com/couchbase/go-couchbase v0.0.0-20200519150804-63f3cdb75e0d // indirect
github.com/couchbase/gomemcached v0.0.0-20200526233749-ec430f949808 // indirect
github.com/couchbase/goutils v0.0.0-20180530154633-e865a1461c8a // indirect
github.com/cupcake/rdb v0.0.0-20161107195141-43ba34106c76 // indirect
github.com/dgrijalva/jwt-go v3.2.0+incompatible
github.com/edsrzf/mmap-go v0.0.0-20170320065105-0bce6a688712 // indirect
github.com/elastic/go-elasticsearch/v6 v6.8.5 // indirect
github.com/elazarl/go-bindata-assetfs v1.0.0 // indirect
github.com/gin-gonic/gin v1.7.7
github.com/glendc/gopher-json v0.0.0-20170414221815-dc4743023d0c // indirect
github.com/go-ini/ini v1.66.4
github.com/go-redis/redis v6.14.2+incompatible // indirect
github.com/go-playground/validator/v10 v10.10.1 // indirect
github.com/go-sql-driver/mysql v1.6.0
github.com/golang/snappy v0.0.0-20180518054509-2e65f85255db // indirect
github.com/golang/protobuf v1.5.2 // indirect
github.com/gomodule/redigo v1.8.8
github.com/hashicorp/golang-lru v0.5.4 // indirect
github.com/jinzhu/gorm v1.9.16
github.com/koding/logging v0.0.0-20160720134017-8b5a689ed69b // indirect
github.com/json-iterator/go v1.1.12 // indirect
github.com/koding/logging v0.0.0-20160720134017-8b5a689ed69b
github.com/mattn/go-isatty v0.0.14 // indirect
github.com/mattn/go-sqlite3 v2.0.3+incompatible // indirect
github.com/modern-go/concurrent v0.0.0-20180306012644-bacd9c7ef1dd // indirect
github.com/niemeyer/pretty v0.0.0-20200227124842-a10e7caefd8e // indirect
github.com/onsi/ginkgo v1.12.0 // indirect
github.com/pelletier/go-toml v1.2.0 // indirect
github.com/peterh/liner v1.0.1-0.20171122030339-3681c2a91233 // indirect
github.com/pkg/errors v0.9.1 // indirect
github.com/prometheus/client_golang v1.7.0 // indirect
github.com/robfig/cron v1.2.0
github.com/shiena/ansicolor v0.0.0-20151119151921-a422bbe96644 // indirect
github.com/siddontang/go v0.0.0-20170517070808-cb568a3e5cc0 // indirect
github.com/siddontang/goredis v0.0.0-20150324035039-760763f78400 // indirect
github.com/siddontang/rdb v0.0.0-20150307021120-fc89ed2e418d // indirect
github.com/ssdb/gossdb v0.0.0-20180723034631-88f6b59b84ec // indirect
github.com/streadway/amqp v1.0.0 // indirect
github.com/shopspring/decimal v1.3.1
github.com/streadway/amqp v1.0.0
github.com/stretchr/testify v1.7.0 // indirect
github.com/syndtr/goleveldb v0.0.0-20181127023241-353a9fca669c // indirect
github.com/wendal/errors v0.0.0-20130201093226-f66c77a7882b // indirect
github.com/ugorji/go v1.2.7 // indirect
github.com/xinliangnote/go-util v0.0.0-20210703052933-7f9f6d961276
github.com/yuin/gopher-lua v0.0.0-20171031051903-609c9cd26973 // indirect
golang.org/x/crypto v0.0.0-20220411220226-7b82a4e95df4
gopkg.in/check.v1 v1.0.0-20200227125254-8fa46927fb4f // indirect
golang.org/x/sys v0.0.0-20220422013727-9388b58f7150 // indirect
google.golang.org/protobuf v1.28.0 // indirect
gopkg.in/go-playground/assert.v1 v1.2.1 // indirect
gopkg.in/go-playground/validator.v9 v9.31.0
gopkg.in/mgo.v2 v2.0.0-20190816093944-a6b53ec6cb22 // indirect
gopkg.in/yaml.v2 v2.4.0
)
......@@ -23,6 +23,7 @@ github.com/cloudflare/golz4 v0.0.0-20150217214814-ef862a3cdc58/go.mod h1:EOBUe0h
github.com/couchbase/go-couchbase v0.0.0-20200519150804-63f3cdb75e0d/go.mod h1:TWI8EKQMs5u5jLKW/tsb9VwauIrMIxQG1r5fMsswK5U=
github.com/couchbase/gomemcached v0.0.0-20200526233749-ec430f949808/go.mod h1:srVSlQLB8iXBVXHgnqemxUXqN6FCvClgCMPCsjBDR7c=
github.com/couchbase/goutils v0.0.0-20180530154633-e865a1461c8a/go.mod h1:BQwMFlJzDjFDG3DJUdU0KORxn88UlsOULuxLExMh3Hs=
github.com/creack/pty v1.1.9/go.mod h1:oKZEueFk5CKHvIhNR5MUki03XCEU+Q6VDXinZuGJ33E=
github.com/cupcake/rdb v0.0.0-20161107195141-43ba34106c76/go.mod h1:vYwsqCOLxGiisLwp9rITslkFNpZD5rz43tf41QFkTWY=
github.com/davecgh/go-spew v1.1.0/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38=
github.com/davecgh/go-spew v1.1.1 h1:vj9j/u1bqnvCEfJOwUhtlOARqs3+rkHYY13jYWTU97c=
......@@ -52,10 +53,16 @@ github.com/go-playground/assert/v2 v2.0.1 h1:MsBgLAaY856+nPRTKrp3/OZK38U/wa0CcBY
github.com/go-playground/assert/v2 v2.0.1/go.mod h1:VDjEfimB/XKnb+ZQfWdccd7VUvScMdVu0Titje2rxJ4=
github.com/go-playground/locales v0.13.0 h1:HyWk6mgj5qFqCT5fjGBuRArbVDfE4hi8+e8ceBS/t7Q=
github.com/go-playground/locales v0.13.0/go.mod h1:taPMhCMXrRLJO55olJkUXHZBHCxTMfnGwq/HNwmWNS8=
github.com/go-playground/locales v0.14.0 h1:u50s323jtVGugKlcYeyzC0etD1HifMjqmJqb8WugfUU=
github.com/go-playground/locales v0.14.0/go.mod h1:sawfccIbzZTqEDETgFXqTho0QybSa7l++s0DH+LDiLs=
github.com/go-playground/universal-translator v0.17.0 h1:icxd5fm+REJzpZx7ZfpaD876Lmtgy7VtROAbHHXk8no=
github.com/go-playground/universal-translator v0.17.0/go.mod h1:UkSxE5sNxxRwHyU+Scu5vgOQjsIJAF8j9muTVoKLVtA=
github.com/go-playground/universal-translator v0.18.0 h1:82dyy6p4OuJq4/CByFNOn/jYrnRPArHwAcmLoJZxyho=
github.com/go-playground/universal-translator v0.18.0/go.mod h1:UvRDBj+xPUEGrFYl+lu/H90nyDXpg0fqeB/AQUGNTVA=
github.com/go-playground/validator/v10 v10.4.1 h1:pH2c5ADXtd66mxoE0Zm9SUhxE20r7aM3F26W0hOn+GE=
github.com/go-playground/validator/v10 v10.4.1/go.mod h1:nlOn6nFhuKACm19sB/8EGNn9GlaMV7XkbRSipzJ0Ii4=
github.com/go-playground/validator/v10 v10.10.1 h1:uA0+amWMiglNZKZ9FJRKUAe9U3RX91eVn1JYXMWt7ig=
github.com/go-playground/validator/v10 v10.10.1/go.mod h1:i+3WkQ1FvaUjjxh1kSvIA4dMGDBiPU55YFDl0WbKdWU=
github.com/go-redis/redis v6.14.2+incompatible/go.mod h1:NAIEuMOZ/fxfXJIrKDQDz8wamY7mA7PouImQ2Jvg6kA=
github.com/go-sql-driver/mysql v1.5.0/go.mod h1:DCzpHaOWr8IXmIStZouvnhqoel9Qv2LBy8hT2VhHyBg=
github.com/go-sql-driver/mysql v1.6.0 h1:BCTh4TKNUYmOmMUcQ3IipzF5prigylS7XXjEkfCHuOE=
......@@ -67,6 +74,7 @@ github.com/golang-sql/civil v0.0.0-20190719163853-cb61b32ac6fe/go.mod h1:8vg3r2V
github.com/golang/protobuf v1.2.0/go.mod h1:6lQm79b+lXiMfvg/cZm0SGofjICqVBUtrP5yJMmIC1U=
github.com/golang/protobuf v1.3.1/go.mod h1:6lQm79b+lXiMfvg/cZm0SGofjICqVBUtrP5yJMmIC1U=
github.com/golang/protobuf v1.3.2/go.mod h1:6lQm79b+lXiMfvg/cZm0SGofjICqVBUtrP5yJMmIC1U=
github.com/golang/protobuf v1.3.3 h1:gyjaxf+svBWX08ZjK86iN9geUJF0H6gp2IRKX6Nf6/I=
github.com/golang/protobuf v1.3.3/go.mod h1:vzj43D7+SQXF/4pzW/hwtAqwc6iTitCiVSaWz5lYuqw=
github.com/golang/protobuf v1.4.0-rc.1/go.mod h1:ceaxUfeHdC40wWswd/P6IGgMaK3YpKi5j83Wpe3EHw8=
github.com/golang/protobuf v1.4.0-rc.1.0.20200221234624-67d41d38c208/go.mod h1:xKAWHe0F5eneWXFV3EuXVDTCmh+JuBKY0li0aMyXATA=
......@@ -75,6 +83,9 @@ github.com/golang/protobuf v1.4.0-rc.4.0.20200313231945-b860323f09d0/go.mod h1:W
github.com/golang/protobuf v1.4.0/go.mod h1:jodUvKwWbYaEsadDk5Fwe5c77LiNKVO9IDvqG2KuDX0=
github.com/golang/protobuf v1.4.2 h1:+Z5KGCizgyZCbGh1KZqA0fcLLkwbsjIzS4aV2v7wJX0=
github.com/golang/protobuf v1.4.2/go.mod h1:oDoupMAO8OvCJWAcko0GGGIgR6R6ocIYbsSw735rRwI=
github.com/golang/protobuf v1.5.0/go.mod h1:FsONVRAS9T7sI+LIUmWTfcYkHO4aIWwzhcaSAoJOfIk=
github.com/golang/protobuf v1.5.2 h1:ROPKBNFfQgOUMifHyP+KYbvpjbdoFNs+aK7DXlji0Tw=
github.com/golang/protobuf v1.5.2/go.mod h1:XVQd3VNwM+JqD3oG2Ue2ip4fOMUkwXdXDdiuN0vRsmY=
github.com/golang/snappy v0.0.0-20170215233205-553a64147049/go.mod h1:/XxbfmMg8lxefKM7IXC3fBNl/7bRcc72aCRzEWrmP2Q=
github.com/golang/snappy v0.0.0-20180518054509-2e65f85255db/go.mod h1:/XxbfmMg8lxefKM7IXC3fBNl/7bRcc72aCRzEWrmP2Q=
github.com/gomodule/redigo v1.8.8 h1:f6cXq6RRfiyrOJEV7p3JhLDlmawGBVBBP1MggY8Mo4E=
......@@ -85,6 +96,7 @@ github.com/google/go-cmp v0.3.0/go.mod h1:8QqcDgzrUqlUb/G2PQTWiueGozuR1884gddMyw
github.com/google/go-cmp v0.3.1/go.mod h1:8QqcDgzrUqlUb/G2PQTWiueGozuR1884gddMywk6iLU=
github.com/google/go-cmp v0.4.0 h1:xsAVV57WRhGj6kEIi8ReJzQlHHqcBYCElAvkovg3B/4=
github.com/google/go-cmp v0.4.0/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE=
github.com/google/go-cmp v0.5.5/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE=
github.com/google/gofuzz v1.0.0/go.mod h1:dBl0BpW6vV/+mYPU4Po3pmUjxk6FQPldtuIdl/M65Eg=
github.com/hashicorp/golang-lru v0.5.4/go.mod h1:iADmTwqILo4mZ8BN3D2Q6+9jd8WM5uGBxy+E8yxSoD4=
github.com/hpcloud/tail v1.0.0/go.mod h1:ab1qPbhIpdTxEkNHXyeSf5vhxWSCs/tWer42PpOxQnU=
......@@ -95,36 +107,50 @@ github.com/jinzhu/inflection v1.0.0/go.mod h1:h+uFLlag+Qp1Va5pdKtLDYj+kHp5pxUVkr
github.com/jinzhu/now v1.0.1 h1:HjfetcXq097iXP0uoPCdnM4Efp5/9MsM0/M+XOTeR3M=
github.com/jinzhu/now v1.0.1/go.mod h1:d3SSVoowX0Lcu0IBviAWJpolVfI5UJVZZ7cO71lE/z8=
github.com/json-iterator/go v1.1.6/go.mod h1:+SdeFBvtyEkXs7REEP0seUULqWtbJapLOCVDaaPEHmU=
github.com/json-iterator/go v1.1.9 h1:9yzud/Ht36ygwatGx56VwCZtlI/2AD15T1X2sjSuGns=
github.com/json-iterator/go v1.1.9/go.mod h1:KdQUCv79m/52Kvf8AW2vK1V8akMuk1QjK/uOdHXbAo4=
github.com/json-iterator/go v1.1.10 h1:Kz6Cvnvv2wGdaG/V8yMvfkmNiXq9Ya2KUv4rouJJr68=
github.com/json-iterator/go v1.1.10/go.mod h1:KdQUCv79m/52Kvf8AW2vK1V8akMuk1QjK/uOdHXbAo4=
github.com/json-iterator/go v1.1.12 h1:PV8peI4a0ysnczrg+LtxykD8LfKY9ML6u2jnxaEnrnM=
github.com/json-iterator/go v1.1.12/go.mod h1:e30LSqwooZae/UwlEbR2852Gd8hjQvJoHmT4TnhNGBo=
github.com/julienschmidt/httprouter v1.2.0/go.mod h1:SYymIcj16QtmaHHD7aYtjjsJG7VTCxuUUipMqKk8s4w=
github.com/koding/logging v0.0.0-20160720134017-8b5a689ed69b h1:Ix1hwcOtW6e0KG1+Fn1blMih1O4td/fa9Q2Br0/zPBo=
github.com/koding/logging v0.0.0-20160720134017-8b5a689ed69b/go.mod h1:km9Clt+22fAbEvoPJSRufXDN110ZA6xLNU7oe4dwRHk=
github.com/konsorten/go-windows-terminal-sequences v1.0.1/go.mod h1:T0+1ngSBFLxvqU3pZ+m/2kptfBszLMUkC4ZK/EgS/cQ=
github.com/kr/logfmt v0.0.0-20140226030751-b84e30acd515/go.mod h1:+0opPa2QZZtGFBFZlji/RkVcI2GknAs/DXo4wKdlNEc=
github.com/kr/pretty v0.1.0/go.mod h1:dAy3ld7l9f0ibDNOQOHHMYYIIbhfbHSm3C4ZsoJORNo=
github.com/kr/pretty v0.2.1/go.mod h1:ipq/a2n7PKx3OHsz4KJII5eveXtPO4qwEXGdVfWzfnI=
github.com/kr/pretty v0.3.0/go.mod h1:640gp4NfQd8pI5XOwp5fnNeVWj67G7CFk/SaSQn7NBk=
github.com/kr/pty v1.1.1/go.mod h1:pFQYn66WHrOpPYNljwOMqo10TkYh1fy3cYio2l3bCsQ=
github.com/kr/text v0.1.0 h1:45sCR5RtlFHMR4UwH9sdQ5TC8v0qDQCHnXt+kaKSTVE=
github.com/kr/text v0.1.0/go.mod h1:4Jbv+DJW3UT/LiOwJeYQe1efqtUx/iVham/4vfdArNI=
github.com/kr/text v0.2.0/go.mod h1:eLer722TekiGuMkidMxC/pM04lWEeraHUUmBw8l2grE=
github.com/ledisdb/ledisdb v0.0.0-20200510135210-d35789ec47e6/go.mod h1:n931TsDuKuq+uX4v1fulaMbA/7ZLLhjc85h7chZGBCQ=
github.com/leodido/go-urn v1.2.0 h1:hpXL4XnriNwQ/ABnpepYM/1vCLWNDfUNts8dX3xTG6Y=
github.com/leodido/go-urn v1.2.0/go.mod h1:+8+nEpDfqqsY+g338gtMEUOtuK+4dEMhiQEgxpxOKII=
github.com/leodido/go-urn v1.2.1 h1:BqpAaACuzVSgi/VLzGZIobT2z4v53pjosyNd9Yv6n/w=
github.com/leodido/go-urn v1.2.1/go.mod h1:zt4jvISO2HfUBqxjfIshjdMTYS56ZS/qv49ictyFfxY=
github.com/lib/pq v1.0.0/go.mod h1:5WUZQaWbwv1U+lTReE5YruASi9Al49XbQIvNi/34Woo=
github.com/lib/pq v1.1.1 h1:sJZmqHoEaY7f+NPP8pgLB/WxulyR3fewgCM2qaSlBb4=
github.com/lib/pq v1.1.1/go.mod h1:5WUZQaWbwv1U+lTReE5YruASi9Al49XbQIvNi/34Woo=
github.com/mattn/go-isatty v0.0.12 h1:wuysRhFDzyxgEmMf5xjvJ2M9dZoWAXNNr5LSBS7uHXY=
github.com/mattn/go-isatty v0.0.12/go.mod h1:cbi8OIDigv2wuxKPP5vlRcQ1OAZbq2CE4Kysco4FUpU=
github.com/mattn/go-isatty v0.0.14 h1:yVuAays6BHfxijgZPzw+3Zlu5yQgKGP2/hcQbHb7S9Y=
github.com/mattn/go-isatty v0.0.14/go.mod h1:7GGIvUiUoEMVVmxf/4nioHXj79iQHKdU27kJ6hsGG94=
github.com/mattn/go-sqlite3 v1.14.0/go.mod h1:JIl7NbARA7phWnGvh0LKTyg7S9BA+6gx71ShQilpsus=
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/matttproud/golang_protobuf_extensions v1.0.1/go.mod h1:D8He9yQNgCq6Z5Ld7szi9bcBfOoFv/3dc6xSMkL2PC0=
github.com/modern-go/concurrent v0.0.0-20180228061459-e0a39a4cb421 h1:ZqeYNhU3OHLH3mGKHDcjJRFFRrJa6eAM5H+CtDdOsPc=
github.com/modern-go/concurrent v0.0.0-20180228061459-e0a39a4cb421/go.mod h1:6dJC0mAP4ikYIbvyc7fijjWJddQyLn8Ig3JB5CqoB9Q=
github.com/modern-go/concurrent v0.0.0-20180306012644-bacd9c7ef1dd h1:TRLaZ9cD/w8PVh93nsPXa1VrQ6jlwL5oN8l14QlcNfg=
github.com/modern-go/concurrent v0.0.0-20180306012644-bacd9c7ef1dd/go.mod h1:6dJC0mAP4ikYIbvyc7fijjWJddQyLn8Ig3JB5CqoB9Q=
github.com/modern-go/reflect2 v0.0.0-20180701023420-4b7aa43c6742 h1:Esafd1046DLDQ0W1YjYsBW+p8U2u7vzgW2SQVmlNazg=
github.com/modern-go/reflect2 v0.0.0-20180701023420-4b7aa43c6742/go.mod h1:bx2lNnkwVCuqBIxFjflWJWanXIb3RllmbCylyMrvgv0=
github.com/modern-go/reflect2 v1.0.1 h1:9f412s+6RmYXLWZSEzVVgPGK7C2PphHj5RJrvfx9AWI=
github.com/modern-go/reflect2 v1.0.1/go.mod h1:bx2lNnkwVCuqBIxFjflWJWanXIb3RllmbCylyMrvgv0=
github.com/modern-go/reflect2 v1.0.2 h1:xBagoLtFs94CBntxluKeaWgTMpvLxC4ur3nMaC9Gz0M=
github.com/modern-go/reflect2 v1.0.2/go.mod h1:yWuevngMOJpCy52FWWMvUC8ws7m/LJsjYzDa0/r8luk=
github.com/mwitkow/go-conntrack v0.0.0-20161129095857-cc309e4a2223/go.mod h1:qRWi+5nqEBWmkhHvq77mSJWrCKwh8bxhgT7d/eI7P4U=
github.com/niemeyer/pretty v0.0.0-20200227124842-a10e7caefd8e h1:fD57ERR4JtEqsWbfPhv4DMiApHyliiK5xCTNVSPiaAs=
github.com/niemeyer/pretty v0.0.0-20200227124842-a10e7caefd8e/go.mod h1:zD1mROLANZcx1PVRCS0qkT7pwLkGfwJo4zjcN/Tysno=
......@@ -134,6 +160,7 @@ github.com/onsi/gomega v1.7.1/go.mod h1:XdKZgCCFLUoM/7CFJVPcG8C1xQ1AJ0vpAezJrB7J
github.com/pelletier/go-toml v1.0.1/go.mod h1:5z9KED0ma1S8pY6P1sdut58dfprrGBbd/94hg7ilaic=
github.com/pelletier/go-toml v1.2.0/go.mod h1:5z9KED0ma1S8pY6P1sdut58dfprrGBbd/94hg7ilaic=
github.com/peterh/liner v1.0.1-0.20171122030339-3681c2a91233/go.mod h1:xIteQHvHuaLYG9IFj6mSxM0fCKrs34IrEQUhOYuGPHc=
github.com/pkg/diff v0.0.0-20210226163009-20ebb0f2a09e/go.mod h1:pJLUxLENpZxwdsKMEsNbx1VGcRFpLqf3715MtcvvzbA=
github.com/pkg/errors v0.8.0/go.mod h1:bwawxfHBFNV+L2hUp1rHADufV3IMtnDRdf1r5NINEl0=
github.com/pkg/errors v0.8.1/go.mod h1:bwawxfHBFNV+L2hUp1rHADufV3IMtnDRdf1r5NINEl0=
github.com/pkg/errors v0.9.1/go.mod h1:bwawxfHBFNV+L2hUp1rHADufV3IMtnDRdf1r5NINEl0=
......@@ -152,8 +179,12 @@ github.com/prometheus/procfs v0.0.2/go.mod h1:TjEm7ze935MbeOT/UhFTIMYKhuLP4wbCsT
github.com/prometheus/procfs v0.1.3/go.mod h1:lV6e/gmhEcM9IjHGsFOCxxuZ+z1YqCvr4OA4YeYWdaU=
github.com/robfig/cron v1.2.0 h1:ZjScXvvxeQ63Dbyxy76Fj3AT3Ut0aKsyd2/tl3DTMuQ=
github.com/robfig/cron v1.2.0/go.mod h1:JGuDeoQd7Z6yL4zQhZ3OPEVHB7fL6Ka6skscFHfmt2k=
github.com/rogpeppe/go-internal v1.6.1/go.mod h1:xXDCJY+GAPziupqXw64V24skbSoqbTEfhy4qGm1nDQc=
github.com/rogpeppe/go-internal v1.8.0/go.mod h1:WmiCO8CzOY8rg0OYDC4/i/2WRWAB6poM+XZ2dLUbcbE=
github.com/shiena/ansicolor v0.0.0-20151119151921-a422bbe96644 h1:X+yvsM2yrEktyI+b2qND5gpH8YhURn0k8OCaeRnkINo=
github.com/shiena/ansicolor v0.0.0-20151119151921-a422bbe96644/go.mod h1:nkxAfR/5quYxwPZhyDxgasBMnRtBZd0FCEpawpjMUFg=
github.com/shopspring/decimal v1.3.1 h1:2Usl1nmF/WZucqkFZhnfFYxxxu8LG21F6nPQBE5gKV8=
github.com/shopspring/decimal v1.3.1/go.mod h1:DKyhrW/HYNuLGql+MJL6WCR6knT2jwCFRcu2hWCYk4o=
github.com/siddontang/go v0.0.0-20170517070808-cb568a3e5cc0/go.mod h1:3yhqj7WBBfRhbBlzyOC3gUxftwsU0u8gqevxwIHQpMw=
github.com/siddontang/goredis v0.0.0-20150324035039-760763f78400/go.mod h1:DDcKzU3qCuvj/tPnimWSsZZzvk9qvkvrIL5naVBPh5s=
github.com/siddontang/rdb v0.0.0-20150307021120-fc89ed2e418d/go.mod h1:AMEsy7v5z92TR1JKMkLLoaOQk++LVnOKL3ScbJ8GNGA=
......@@ -167,6 +198,7 @@ github.com/stretchr/objx v0.1.1/go.mod h1:HFkY916IF+rwdDfMAkV7OtwuqBVzrE8GR6GFx+
github.com/stretchr/testify v1.2.2/go.mod h1:a8OnRcib4nhh0OaRAV+Yts87kKdq0PP7pXfy6kDkUVs=
github.com/stretchr/testify v1.3.0/go.mod h1:M5WIy9Dh21IEIfnGCwXGc5bZfKNJtfHm1UVUgZn+9EI=
github.com/stretchr/testify v1.4.0/go.mod h1:j7eGeouHqKxXV5pUuKE4zz7dFj8WfuZ+81PSLYec5m4=
github.com/stretchr/testify v1.6.1/go.mod h1:6Fq8oRcR53rry900zMqJjRRixrwX3KX962/h/Wwjteg=
github.com/stretchr/testify v1.7.0 h1:nwc3DEeHmmLAfoZucVR881uASk0Mfjw8xYJ99tb5CcY=
github.com/stretchr/testify v1.7.0/go.mod h1:6Fq8oRcR53rry900zMqJjRRixrwX3KX962/h/Wwjteg=
github.com/syndtr/goleveldb v0.0.0-20160425020131-cfa635847112/go.mod h1:Z4AUp2Km+PwemOoO/VB5AOx9XSsIItzFjoJlOSiYmn0=
......@@ -174,8 +206,12 @@ github.com/syndtr/goleveldb v0.0.0-20181127023241-353a9fca669c/go.mod h1:Z4AUp2K
github.com/ugorji/go v0.0.0-20171122102828-84cb69a8af83/go.mod h1:hnLbHMwcvSihnDhEfx2/BzKp2xb0Y+ErdfYcrs9tkJQ=
github.com/ugorji/go v1.1.7 h1:/68gy2h+1mWMrwZFeD1kQialdSzAb432dtpeJ42ovdo=
github.com/ugorji/go v1.1.7/go.mod h1:kZn38zHttfInRq0xu/PH0az30d+z6vm202qpg1oXVMw=
github.com/ugorji/go v1.2.7 h1:qYhyWUUd6WbiM+C6JZAUkIJt/1WrjzNHY9+KCIjVqTo=
github.com/ugorji/go v1.2.7/go.mod h1:nF9osbDWLy6bDVv/Rtoh6QgnvNDpmCalQV5urGCCS6M=
github.com/ugorji/go/codec v1.1.7 h1:2SvQaVZ1ouYrrKKwoSk2pzd4A9evlKJb9oTL+OaLUSs=
github.com/ugorji/go/codec v1.1.7/go.mod h1:Ax+UKWsSmolVDwsd+7N3ZtXu+yMGCf907BLYF3GoBXY=
github.com/ugorji/go/codec v1.2.7 h1:YPXUKf7fYbp/y8xloBqZOw2qaVggbfwMlI8WM3wZUJ0=
github.com/ugorji/go/codec v1.2.7/go.mod h1:WGN1fab3R1fzQlVQTkfxVtIBhWDRqOviHU95kRgeqEY=
github.com/wendal/errors v0.0.0-20130201093226-f66c77a7882b/go.mod h1:Q12BUT7DqIlHRmgv3RskH+UCM/4eqVMgI0EMmlSpAXc=
github.com/xinliangnote/go-util v0.0.0-20210703052933-7f9f6d961276 h1:nF89kuTQE2eFcKcQorzi3JQUY44LrQ6R58bS1m2owjo=
github.com/xinliangnote/go-util v0.0.0-20210703052933-7f9f6d961276/go.mod h1:3ZornrplU9tYj9ar9jchik1XPQ10ZbSXkbgxXR5PVaU=
......@@ -186,6 +222,7 @@ golang.org/x/crypto v0.0.0-20190325154230-a5d413f7728c/go.mod h1:djNgcEr1/C05ACk
golang.org/x/crypto v0.0.0-20191011191535-87dc89f01550/go.mod h1:yigFU9vqHzYiE8UmvKecakEJjdnWj3jj499lnFckfCI=
golang.org/x/crypto v0.0.0-20191205180655-e7c4368fe9dd/go.mod h1:LzIPMQfyMNhhGPhUkYOs5KpL4U8rLKemX1yGLhDgUto=
golang.org/x/crypto v0.0.0-20200622213623-75b288015ac9/go.mod h1:LzIPMQfyMNhhGPhUkYOs5KpL4U8rLKemX1yGLhDgUto=
golang.org/x/crypto v0.0.0-20211215153901-e495a2d5b3d3/go.mod h1:IxCIyHEi3zRg3s0A5j5BB6A9Jmi73HwBIUl50j+osU4=
golang.org/x/crypto v0.0.0-20220411220226-7b82a4e95df4 h1:kUhD7nTDoI3fVd9G4ORWrbV5NY0liEs/Jg2pv5f+bBA=
golang.org/x/crypto v0.0.0-20220411220226-7b82a4e95df4/go.mod h1:IxCIyHEi3zRg3s0A5j5BB6A9Jmi73HwBIUl50j+osU4=
golang.org/x/net v0.0.0-20180218175443-cbe0f9307d01/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4=
......@@ -216,10 +253,16 @@ golang.org/x/sys v0.0.0-20201119102817-f84b799fce68/go.mod h1:h1NjWce9XRLGQEsW7w
golang.org/x/sys v0.0.0-20210423082822-04245dca01da/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
golang.org/x/sys v0.0.0-20210615035016-665e8c7367d1 h1:SrN+KX8Art/Sf4HNj6Zcz06G7VEz+7w9tdXTPOZ7+l4=
golang.org/x/sys v0.0.0-20210615035016-665e8c7367d1/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
golang.org/x/sys v0.0.0-20210630005230-0f9fa26af87c/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
golang.org/x/sys v0.0.0-20210806184541-e5e7981a1069/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
golang.org/x/sys v0.0.0-20220422013727-9388b58f7150 h1:xHms4gcpe1YE7A3yIllJXP16CMAGuqwO2lX1mTyyRRc=
golang.org/x/sys v0.0.0-20220422013727-9388b58f7150/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
golang.org/x/term v0.0.0-20201126162022-7de9c90e9dd1/go.mod h1:bj7SfCRtBDWHUb9snDiAeCFNEtKQo2Wmx5Cou7ajbmo=
golang.org/x/text v0.3.0/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ=
golang.org/x/text v0.3.2/go.mod h1:bEr9sfX3Q8Zfm5fL9x+3itogRgK3+ptLWKqgva+5dAk=
golang.org/x/text v0.3.6/go.mod h1:5Zoc/QRtKVWzQhOtBMvqHzDpF6irO9z98xDceosuGiQ=
golang.org/x/text v0.3.7 h1:olpwvP2KacW1ZWvsR7uQhoyTYvKAupfQrRGBFM352Gk=
golang.org/x/text v0.3.7/go.mod h1:u+2+/6zg+i71rQMx5EYifcz6MCKuco9NR6JIITiCfzQ=
golang.org/x/tools v0.0.0-20180917221912-90fa682c2a6e/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ=
golang.org/x/xerrors v0.0.0-20191204190536-9bdfabe68543 h1:E7g+9GITq07hpfrRu66IVDexMakfv52eLZ2CXBWiKr4=
golang.org/x/xerrors v0.0.0-20191204190536-9bdfabe68543/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0=
......@@ -230,11 +273,18 @@ google.golang.org/protobuf v1.20.1-0.20200309200217-e05f789c0967/go.mod h1:A+miE
google.golang.org/protobuf v1.21.0/go.mod h1:47Nbq4nVaFHyn7ilMalzfO3qCViNmqZ2kzikPIcrTAo=
google.golang.org/protobuf v1.23.0 h1:4MY060fB1DLGMB/7MBTLnwQUY6+F09GEiz6SsrNqyzM=
google.golang.org/protobuf v1.23.0/go.mod h1:EGpADcykh3NcUnDUJcl1+ZksZNG86OlYog2l/sGQquU=
google.golang.org/protobuf v1.26.0-rc.1/go.mod h1:jlhhOSvTdKEhbULTjvd4ARK9grFBp09yW+WbY/TyQbw=
google.golang.org/protobuf v1.26.0/go.mod h1:9q0QmTI4eRPtz6boOQmLYwt+qCgq0jsYwAQnmE0givc=
google.golang.org/protobuf v1.28.0 h1:w43yiav+6bVFTBQFZX0r7ipe9JQ1QsbMgHwbBziscLw=
google.golang.org/protobuf v1.28.0/go.mod h1:HV8QOd/L58Z+nl8r43ehVNZIU/HEI6OcFqwMG9pJV4I=
gopkg.in/alecthomas/kingpin.v2 v2.2.6/go.mod h1:FMv+mEhP44yOT+4EoQTLFTRgOQ1FBLkstjWtayDeSgw=
gopkg.in/check.v1 v0.0.0-20161208181325-20d25e280405/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0=
gopkg.in/check.v1 v1.0.0-20180628173108-788fd7840127/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0=
gopkg.in/check.v1 v1.0.0-20190902080502-41f04d3bba15/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0=
gopkg.in/check.v1 v1.0.0-20200227125254-8fa46927fb4f h1:BLraFXnmrev5lT+xlilqcH8XK9/i0At2xKjWk4p6zsU=
gopkg.in/check.v1 v1.0.0-20200227125254-8fa46927fb4f/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0=
gopkg.in/check.v1 v1.0.0-20201130134442-10cb98267c6c/go.mod h1:JHkPIbrfpd72SG/EVd6muEfDQjcINNoR0C8j2r3qZ4Q=
gopkg.in/errgo.v2 v2.1.0/go.mod h1:hNsd1EY+bozCKY1Ytp96fpM3vjJbqLJn88ws8XvfDNI=
gopkg.in/fsnotify.v1 v1.4.7/go.mod h1:Tz8NjZHkW78fSQdbUxIjBTcgA1z1m8ZHf0WmKUhAMys=
gopkg.in/go-playground/assert.v1 v1.2.1 h1:xoYuJVE7KT85PYWrN730RguIQO0ePzVRfFMXadIrXTM=
gopkg.in/go-playground/assert.v1 v1.2.1/go.mod h1:9RXL0bg/zibRAgZUYszZSwO/z8Y/a8bDuhia5mkpMnE=
......@@ -248,5 +298,8 @@ gopkg.in/yaml.v2 v2.2.4/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI=
gopkg.in/yaml.v2 v2.2.5/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI=
gopkg.in/yaml.v2 v2.2.8 h1:obN1ZagJSUGI0Ek/LBmuj4SNLPfIny3KsKFopxRdj10=
gopkg.in/yaml.v2 v2.2.8/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI=
gopkg.in/yaml.v2 v2.4.0 h1:D8xgwECY7CYvx+Y2n4sBz93Jn9JRvxdiyyo8CTfuKaY=
gopkg.in/yaml.v2 v2.4.0/go.mod h1:RDklbk79AGWmwhnvt/jBztapEOGDOx6ZbXqjP6csGnQ=
gopkg.in/yaml.v3 v3.0.0-20200313102051-9f266ea9e77c h1:dUUwHk2QECo/6vqA44rthZ8ie2QXMNeKRTHCNY2nXvo=
gopkg.in/yaml.v3 v3.0.0-20200313102051-9f266ea9e77c/go.mod h1:K4uyk7z7BCEPqu6E+C64Yfv1cQ7kz7rIZviUmN+EgEM=
gopkg.in/yaml.v3 v3.0.0-20210107192922-496545a6307b/go.mod h1:K4uyk7z7BCEPqu6E+C64Yfv1cQ7kz7rIZviUmN+EgEM=
......@@ -8,7 +8,6 @@ import (
"github.com/gin-gonic/gin"
"slg/models"
"slg/pkg/cron"
"slg/pkg/gredis"
"slg/pkg/setting"
"slg/pkg/util"
......@@ -20,7 +19,7 @@ func init() {
models.Setup()
gredis.Setup()
util.Setup()
cron.Setup()
//cron.Setup()
rabbitmq.Setup()
}
......
package auth
import (
"slg/pkg/errno"
"slg/pkg/handler"
"slg/pkg/util"
"github.com/gin-gonic/gin"
"strings"
)
func AUTH() gin.HandlerFunc {
return func(ctx *gin.Context) {
token := ctx.Request.Header.Get("Token")
user, _ := util.ParseToken(token)
if !strings.Contains(strings.ToLower(user.UserInfo.Username), "kefu") {
return
}
handlerName := strings.Split(ctx.HandlerName(), ".")[1]
handleAlowed := []string{"GetCoinChains", "GetUserChains", "AddOperationLog"}
_, handle := util.Contains(handleAlowed, handlerName)
if !handle {
handler.SendResponse(ctx, errno.PermissionDenied, nil)
ctx.Abort()
return
}
ctx.Next()
}
}
package jwt
import (
"slg/pkg/e"
"slg/pkg/util"
"github.com/dgrijalva/jwt-go"
"github.com/gin-gonic/gin"
"net/http"
"slg/pkg/e"
"slg/pkg/util"
)
func JWT() gin.HandlerFunc {
......
package log
import (
"slg/pkg/util"
"slg/service/operation_log_service"
"fmt"
"github.com/gin-gonic/gin"
"strconv"
"strings"
)
func LogMiddleware(handlerTableName map[string]string) gin.HandlerFunc {
return func(ctx *gin.Context) {
var operation string
// 获取当前用户信息
token := ctx.Request.Header.Get("Token")
user, err := util.ParseToken(token)
if err != nil {
ctx.Abort()
return
}
user_id := user.UserInfo.Uid
user_name := user.UserInfo.Username
platform_id := user.UserInfo.PlatformId
// 获取表名 这里会把前面 "加载的包名.HandlerName"
handlerName := strings.Split(ctx.HandlerName(), ".")[1]
if _, ok := handlerTableName[handlerName]; !ok {
ctx.Next()
}
tableDesc := strings.Split(handlerTableName[handlerName], ",")
if len(tableDesc) != 2 {
return // 存在映射,但是不完全则返回
}
tableName := tableDesc[0] // 0表名
desc := tableDesc[1] // 1业务描述
switch ctx.Request.Method {
case "POST":
operation = "增加"
case "GET":
operation = "查询"
case "PUT":
operation = "更新"
case "DELETE":
operation = "删除"
default:
operation = "未知"
}
operationLogService := operation_log_service.OperationLog{
UserId: user_id,
UserName: user_name,
PlatformId: platform_id,
Ip: ctx.ClientIP(),
Operation: operation,
Business: desc,
Table: tableName,
}
if err := operationLogService.Add(); err != nil {
ctx.Abort()
return
}
return
}
}
func FirstMiddleware() gin.HandlerFunc {
return func(c *gin.Context) {
fmt.Println(c.Request.Method, c.ClientIP(), c.Request.Header.Get("Token"))
fmt.Println("first middleware before next()")
isAbort := c.Query("isAbort")
bAbort, err := strconv.ParseBool(isAbort)
if err != nil {
fmt.Printf("is abort value err, value %s\n", isAbort)
c.Next() // (2)
}
if bAbort {
fmt.Println("first middleware abort") //(3)
c.Abort()
//c.AbortWithStatusJSON(http.StatusOK, "abort is true")
return
} else {
fmt.Println("first middleware doesnot abort") //(4)
return
}
fmt.Println("first middleware after next()")
}
}
func SecondMiddleware() gin.HandlerFunc {
return func(c *gin.Context) {
fmt.Println("current inside of second middleware")
}
}
package aes
import (
config "slg/conf"
"slg/pkg/errno"
"slg/pkg/handler"
"slg/pkg/util"
"errors"
"fmt"
"github.com/gin-gonic/gin"
"github.com/gin-gonic/gin/binding"
"github.com/xinliangnote/go-util/aes"
"net/url"
config "slg/conf"
"slg/pkg/errno"
"slg/pkg/handler"
"slg/pkg/util"
"sort"
"strconv"
"strings"
......
package md5
import (
config "slg/conf"
"slg/pkg/handler"
"slg/pkg/util"
"errors"
"fmt"
"github.com/gin-gonic/gin"
"github.com/gin-gonic/gin/binding"
"net/url"
config "slg/conf"
"slg/pkg/handler"
"slg/pkg/util"
"sort"
"strconv"
"strings"
......
package rsa
import (
config "slg/conf"
"slg/pkg/errno"
"slg/pkg/handler"
"slg/pkg/util"
"errors"
"fmt"
"github.com/gin-gonic/gin"
"github.com/gin-gonic/gin/binding"
"github.com/xinliangnote/go-util/rsa"
"net/url"
config "slg/conf"
"slg/pkg/errno"
"slg/pkg/handler"
"slg/pkg/util"
"sort"
"strconv"
"strings"
......
package models
import (
"github.com/jinzhu/gorm"
"time"
)
type Bonus struct {
Model
Oid string `json:"oid"`
MerchantId string `json:"merchant_id"`
MerchantBonusAmount string `json:"merchant_bonus_amount"`
AuthorUid string `json:"author_uid"`
AuthorBonusAmount string `json:"author_bonus_amount"`
InviteUid string `json:"invite_uid"`
InviteBonusAmount string `json:"invite_bonus_amount"`
ShareUid string `json:"share_uid"`
ShareBonusAmount string `json:"share_bonus_amount"`
PlatformUid string `json:"platform_uid"`
PlatformBonusAmount string `json:"platform_bonus_amount"`
CreateTime int64 `json:"create_time"`
UpdateTime int64 `json:"update_time"`
}
/**
* 通过oid获取订单信息
* @oid id
* @return
*/
func Exist(oid string) (*Bonus, error) {
var bonus Bonus
err := db.Where("oid = ?", oid).First(&bonus).Error
if err != nil && err != gorm.ErrRecordNotFound {
return nil, err
}
return &bonus, nil
}
/**
* 添加收益记录
* @return
*/
func AddBonus(data map[string]interface{}) error {
bonus := Bonus{
Oid: data["oid"].(string),
MerchantId: data["merchant_id"].(string),
MerchantBonusAmount: data["merchant_bonus_amount"].(string),
AuthorUid: data["author_uid"].(string),
AuthorBonusAmount: data["author_bonus_amount"].(string),
InviteUid: data["invite_uid"].(string),
InviteBonusAmount: data["invite_bonus_amount"].(string),
ShareUid: data["share_uid"].(string),
ShareBonusAmount: data["share_bonus_amount"].(string),
PlatformUid: data["platform_uid"].(string),
PlatformBonusAmount: data["platform_bonus_amount"].(string),
CreateTime: time.Now().UTC().Unix(),
UpdateTime: time.Now().UTC().Unix(),
}
tx := db.Begin()
defer func() {
if r := recover(); r != nil {
tx.Rollback()
}
}()
if err := tx.Error; err != nil {
return err
}
if err := tx.Debug().Create(&bonus).Error; err != nil {
tx.Rollback()
return err
}
if data["invite_uid"] != "" {
bonusDetail := BonusDetail{
Uid: data["invite_uid"].(string),
BonusAmount: data["invite_bonus_amount"].(string),
BonusType: Invite,
CreateTime: time.Now().UTC().Unix(),
UpdateTime: time.Now().UTC().Unix(),
}
if err := tx.Debug().Table("bonus_detail").Create(&bonusDetail).Error; err != nil {
tx.Rollback()
return err
}
bonusStatistics, err := GetBonusStatistics(data["invite_uid"].(string))
if err != nil {
tx.Rollback()
return err
}
if len(bonusStatistics.Uid) < 1 {
bonusStatistics := BonusStatistics{
Uid: data["invite_uid"].(string),
InviteBonusAmount: data["invite_bonus_amount"].(string),
ShareBonusAmount: data["share_bonus_amount"].(string),
CreateTime: time.Now().UTC().Unix(),
UpdateTime: time.Now().UTC().Unix(),
}
if err := tx.Debug().Table("bonus_statistics").Create(&bonusStatistics).Error; err != nil {
tx.Rollback()
return err
}
} else {
statistics := map[string]interface{}{
"invite_bonus_amount": gorm.Expr("invite_bonus_amount + ?", data["invite_bonus_amount"]),
}
if err := tx.Table("bonus_statistics").Where("uid = ?", data["invite_uid"].(string)).UpdateColumns(statistics).Error; err != nil {
tx.Rollback()
return err
}
}
}
if data["share_uid"] != "" {
bonusDetail := BonusDetail{
Uid: data["share_uid"].(string),
BonusAmount: data["share_bonus_amount"].(string),
BonusType: Share,
CreateTime: time.Now().UTC().Unix(),
UpdateTime: time.Now().UTC().Unix(),
}
if err := tx.Debug().Table("bonus_detail").Create(&bonusDetail).Error; err != nil {
tx.Rollback()
return err
}
bonusStatistics, err := GetBonusStatistics(data["share_uid"].(string))
if err != nil {
tx.Rollback()
return err
}
if len(bonusStatistics.Uid) < 1 {
bonusStatistics := BonusStatistics{
Uid: data["share_uid"].(string),
InviteBonusAmount: data["invite_bonus_amount"].(string),
ShareBonusAmount: data["share_bonus_amount"].(string),
CreateTime: time.Now().UTC().Unix(),
UpdateTime: time.Now().UTC().Unix(),
}
if err := tx.Debug().Table("bonus_statistics").Create(&bonusStatistics).Error; err != nil {
tx.Rollback()
return err
}
} else {
statistics := map[string]interface{}{
"share_bonus_amount": gorm.Expr("share_bonus_amount + ?", data["share_bonus_amount"]),
}
if err := tx.Table("bonus_statistics").Where("uid = ?", data["share_uid"].(string)).UpdateColumns(statistics).Error; err != nil {
tx.Rollback()
return err
}
}
}
if err := tx.Commit().Error; err != nil {
return err
}
return nil
}
func GetCount(conditions interface{}) (int, error) {
var count int
if err := db.Model(&Bonus{}).Where(conditions).Count(&count).Error; err != nil {
return 0, err
}
return count, nil
}
func GetBonus(pageNum, pageSize int, conditions interface{}) ([]*Bonus, error) {
var bonus []*Bonus
err := db.Debug().Where(conditions).Offset(pageNum).Limit(pageSize).Find(&bonus).Error
if err != nil && err != gorm.ErrRecordNotFound {
return nil, err
}
return bonus, nil
}
package models
import "github.com/jinzhu/gorm"
const Invite = 1 //邀请
const Share = 2 //分享
const Redraw = 3 //提取
type BonusDetail struct {
Model
Uid string `json:"uid"`
BonusAmount string `json:"bonus_amount"`
BonusType uint8 `json:"bonus_type"`
CreateTime int64 `json:"create_time"`
UpdateTime int64 `json:"update_time"`
}
type BonusDetailResp struct {
BonusAmount string `json:"bonus_amount"`
BonusType uint8 `json:"bonus_type"`
CreateTime string `json:"create_time"`
}
func GetBonusDetailCount(conditions interface{}) (int, error) {
var count int
if err := db.Model(&BonusDetail{}).Where(conditions).Count(&count).Error; err != nil {
return 0, err
}
return count, nil
}
func GetBonusDetailList(pageNum, pageSize int, conditions interface{}) ([]*BonusDetail, error) {
var bonusDetail []*BonusDetail
err := db.Debug().Where(conditions).Offset(pageNum).Limit(pageSize).Find(&bonusDetail).Error
if err != nil && err != gorm.ErrRecordNotFound {
return nil, err
}
return bonusDetail, nil
}
package models
import "github.com/jinzhu/gorm"
type BonusStatistics struct {
Model
Uid string `json:"uid"`
InviteBonusAmount string `json:"invite_bonus_amount"`
ShareBonusAmount string `json:"share_bonus_amount"`
CreateTime int64 `json:"create_time"`
UpdateTime int64 `json:"update_time"`
}
type BonusStatisticsResp struct {
BonusAmount string `json:"bonus_amount"`
InviteBonusAmount string `json:"invite_bonus_amount"`
ShareBonusAmount string `json:"share_bonus_amount"`
}
func GetBonusStatistics(uid string) (*BonusStatistics, error) {
var bonusStatistics BonusStatistics
err := db.Debug().Where("uid = ?", uid).First(&bonusStatistics).Error
if err != nil && err != gorm.ErrRecordNotFound{
return nil, err
}
return &bonusStatistics, nil
}
package models
type OrderInfo struct {
Model
Id uint64 `json:"primary_key,omitempty"`
Oid string `json:"oid"`
Uid string `json:"uid"`
PayId string `json:"pay_id"`
MerchantId string `json:"merchant_id"`
PostFee string `json:"post_fee"`
Total string `json:"total"`
AcceptDigital uint8 `json:"accept_digital"`
PayType uint8 `json:"pay_type"`
OrderType uint8 `json:"order_type"`
OrderState uint8 `json:"order_state"`
Delivery uint8 `json:"delivery"`
Uname string `json:"uname"`
Phone string `json:"phone"`
Address string `json:"address"`
IsDelete uint8 `json:"is_delete"`
VNote string `json:"v_note"`
ConsultDiscounAmount string `json:"consult_discoun"`
ConsultDiscountType uint8 `json:"consult_discount_type"`
DiscountAmount string `json:"discount_amount"`
Amount string `json:"amount"`
CreateTime uint64 `json:"create_time"`
UpdateTime uint64 `json:"update_time"`
CommentTotal uint64 `json:"comment_total"`
CommentAlready uint64 `json:"comment_already"`
Coin string `json:"coin"`
IntegralDeduction string `json:"integral_deduction"`
IntegralPrice string `json:"integral_price"`
OrderIdent uint8 `json:"order_ident"`
}
/**
* 通过oid获取订单信息
* @oid id
* @return
*/
func GetOrderInfo(oid string) (*OrderInfo, error) {
var orderInfo OrderInfo
err := db.Debug().Where("oid = ?", oid).First(&orderInfo).Error
if err != nil {
return nil, err
}
return &orderInfo, nil
}
package models
import (
"encoding/json"
"github.com/jinzhu/gorm"
"strconv"
)
type OrderShareRelation struct {
Model
Id int `json:"primary_key, id,omitempty"`
ShareUid string `json:"share_uid"`
InvitedUid string `json:"invited_uid"`
Oids json.RawMessage `json:"oids"`
}
/**
* 通过oid获取推广分销信息
* @oid id
* @return
*/
func GetOrderShareRelation(oid string) (*OrderShareRelation, error) {
var orderShareRelation OrderShareRelation
err := db.Where("JSON_CONTAINS(oids, ?)", strconv.Quote(oid)).First(&orderShareRelation).Error
if err != nil && err != gorm.ErrRecordNotFound {
return nil, err
}
return &orderShareRelation, nil
}
package models
import "github.com/jinzhu/gorm"
type User struct {
Model
Id uint64 `json:"primary_key,omitempty"`
Uid string `json:"uid"`
InviteCode string `json:"invite_code"`
RegisterCode string `json:"register_code"`
}
/**
* 通过单条件获取用户信息
* @condition interface{}
* @return
*/
func GetUserInfo(condition interface{}) (*User, error) {
var user User
err := db.Where(condition).First(&user).Error
if err != nil && err != gorm.ErrRecordNotFound {
return nil, err
}
return &user, nil
}
/**
* 通过多条件获取用户信息
* @conditions interface{}
* @return
*/
func GetUserInfos(conditions interface{}) ([]*User, error) {
var users []*User
err := db.Where(conditions).Find(&users).Error
if err != nil && err != gorm.ErrRecordNotFound {
return nil, err
}
return users, nil
}
package module
type Level struct {
Merchant float64 `yaml:merchant`
Author float64 `yaml:author`
Invite float64 `yaml:invite`
Share float64 `yaml:share`
Platform float64 `yaml:platform`
}
type Bonus struct {
PlatformUid string `yaml:"platform_uid"`
AuthorUid string `yaml:"author_uid"`
Levels map[string]*Level `yaml:"levels"`
}
type BonusConfig struct {
Bonus *Bonus `json:"bonus"`
}
......@@ -2,6 +2,7 @@ package cron
import (
"github.com/robfig/cron"
"slg/service/rabbitmq_service"
)
var c *cron.Cron
......@@ -9,7 +10,12 @@ var c *cron.Cron
func Setup() {
c = cron.New()
c.AddFunc("* * * * * *", func() {
c.AddFunc("*/5 * * * * *", func() {
amqpService := rabbitmq_service.AmqpConsumer{
ExchangeName: "mall-order-finish-fanout-exchange",
QueueName: "mall-cr-order-finish-queue",
}
amqpService.Consumer()
})
......
package encrypt
import (
config "slg/conf"
"bytes"
"crypto/aes"
"crypto/cipher"
"encoding/base64"
"golang.org/x/crypto/bcrypt"
config "slg/conf"
)
// 加密 aes_128_cbc
......
......@@ -66,9 +66,10 @@ var (
PermissionDenied = &Errno{Code: 403, Message: "Permission Denied"}
// bank errors
ErrBankNotFound = &Errno{Code: 20101, Message: "银行账号绑定未找到."}
ErrAddBank = &Errno{Code: 20102, Message: "银行账号绑定失败."}
ErrUpdateBank = &Errno{Code: 20103, Message: "银行账号更新失败."}
ErrDeleteBank = &Errno{Code: 20104, Message: "银行账号删除失败."}
//Bonus errors
ErrBonusNotFound = &Errno{Code: 20101, Message: "佣金记录未找到."}
ErrAddBonus = &Errno{Code: 20102, Message: "佣金添加失败."}
ErrUpdateBonus = &Errno{Code: 20103, Message: "佣金更新失败."}
ErrDeleteBonus = &Errno{Code: 20104, Message: "佣金删除失败."}
ErrCountBonus = &Errno{Code: 20105, Message: "佣金统计失败."}
)
package gredis
import (
"slg/pkg/util"
"github.com/gomodule/redigo/redis"
"slg/pkg/util"
"time"
)
......
package gredis
import (
"slg/pkg/setting"
"encoding/json"
"github.com/gomodule/redigo/redis"
"slg/pkg/setting"
"time"
)
......
......@@ -23,7 +23,7 @@ var AMQP *RabbitMQ
func Setup() error {
AMQP = &RabbitMQ{
config:&Config{
config: &Config{
Host: "139.9.150.174",
Port: 5672,
Username: "guest",
......
......@@ -86,7 +86,7 @@ func Setup() {
log.Fatalf("setting.Setup, fail to parse 'conf/h5.ini': %v", err)
}
mapTo("h5", AppSetting)
mapTo("app", AppSetting)
mapTo("server", ServerSetting)
mapTo("database", DatabaseSetting)
mapTo("redis", RedisSetting)
......
package util
import (
"slg/pkg/setting"
"github.com/dgrijalva/jwt-go"
"slg/pkg/setting"
"time"
)
......
......@@ -5,8 +5,8 @@ import (
"encoding/hex"
)
func EncodeMD5(value string) string{
m:= md5.New()
func EncodeMD5(value string) string {
m := md5.New()
m.Write([]byte(value))
return hex.EncodeToString(m.Sum(nil))
......
package backend
import (
"fmt"
"github.com/gin-gonic/gin"
"slg/pkg/errno"
"slg/pkg/handler"
"slg/pkg/util"
"slg/service/bonus_service"
)
func GetBonus(c *gin.Context) {
var oid string
if arg := c.Query("oid"); arg != "" {
oid = c.Query("oid")
}
var merchant_id string
if arg := c.Query("merchant_id"); arg != "" {
merchant_id = c.Query("merchant_id")
}
var status uint8
if arg := c.Query("status"); arg != "" {
status = uint8(util.ToUint32(c.Query("status")))
}
fmt.Println(merchant_id)
bonusService := bonus_service.BonusService{
Oid: oid,
MerchantId: merchant_id,
Status: status,
PageNum: util.GetPage(c),
PageSize: util.GetLimit(c),
}
count, err := bonusService.Count()
if err != nil {
handler.SendResponse(c, errno.ErrCountBonus, nil)
return
}
bonus, err := bonusService.GetAll()
if err != nil {
handler.SendResponse(c, errno.InternalServerError, nil)
return
}
data := make(map[string]interface{})
data["items"] = bonus
data["total"] = count
handler.SendResponse(c, nil, data)
return
}
package h5
import (
"github.com/gin-gonic/gin"
"slg/pkg/errno"
"slg/pkg/handler"
"slg/pkg/util"
"slg/service/bonus_detail_service"
"slg/service/bonus_statistics_service"
)
func GetBonusStatistics(c *gin.Context) {
bonusStatisticsService := bonus_statistics_service.BonusStatisticsService{
Uid: "c420fb06d76b4fd09050579ab175cff0",
}
bonusStatistics, err := bonusStatisticsService.GetBonusStatistics()
if err != nil {
handler.SendResponse(c, errno.InternalServerError, nil)
return
}
handler.SendResponse(c, nil, bonusStatistics)
return
}
func GetBonusDetailList(c *gin.Context) {
var uid = "c420fb06d76b4fd09050579ab175cff0"
var bonus_type = 1
bonusDetailService := bonus_detail_service.BonusDetailService{
Uid: uid,
BonusType: uint8(bonus_type),
PageNum: util.GetPage(c),
PageSize: util.GetLimit(c),
}
count, err := bonusDetailService.Count()
if err != nil {
handler.SendResponse(c, errno.ErrCountBonus, nil)
return
}
bonusDetailList, err := bonusDetailService.GetBonusDetailList()
if err != nil {
handler.SendResponse(c, errno.InternalServerError, nil)
return
}
data := make(map[string]interface{})
data["items"] = bonusDetailList
data["total"] = count
handler.SendResponse(c, nil, data)
return
}
......@@ -2,8 +2,8 @@ package routers
import (
"github.com/gin-gonic/gin"
"slg/middleware/jwt"
"slg/routers/api/h5"
"slg/routers/api/backend"
"slg/routers/h5"
)
func InitRouter() *gin.Engine {
......@@ -12,16 +12,10 @@ func InitRouter() *gin.Engine {
r.Use(gin.Recovery())
client := r.Group("/h5")
client.GET("/banks", h5.GetBank)
client.POST("/add-bank", h5.AddBank)
client.PUT("/update-bank", h5.UpdateBank)
client.DELETE("/delete-bank", h5.DeleteBank)
client.GET("/bonus-statistics", h5.GetBonusStatistics)
client.GET("/bonus-detail-list", h5.GetBonusDetailList)
api := r.Group("/api")
api.Use(jwt.JWT())
{
}
api.GET("/bonus-list", backend.GetBonus)
return r
}
package bonus_detail_service
import (
"slg/models"
"slg/pkg/util"
)
type BonusDetailService struct {
Uid string `json:"uid"`
BonusAmount string `json:"bonus_amount"`
BonusType uint8 `json:"bonus_type"`
CreateTime int64 `json:"create_time"`
UpdateTime int64 `json:"update_time"`
PageNum int
PageSize int
}
/**
* 获取符合条件的信息总数
* @params
* @return
*/
func (b *BonusDetailService) Count() (int, error) {
return models.GetBonusDetailCount(b.getBonusDetailCondition())
}
/**
* 获取符合条件的信息
* @param
* @return
*/
func (b *BonusDetailService) GetBonusDetailList() ([]*models.BonusDetailResp, error) {
var bonusDetailList []*models.BonusDetail
bonusDetailList, err := models.GetBonusDetailList(b.PageNum, b.PageSize, b.getBonusDetailCondition())
if err != nil {
return nil, err
}
var records = []*models.BonusDetailResp{}
for _, value := range bonusDetailList {
record := &models.BonusDetailResp{}
record.BonusAmount = value.BonusAmount
record.BonusType = value.BonusType
record.CreateTime = util.FormatUnix(value.CreateTime)
records = append(records, record)
}
return records, nil
}
func (b *BonusDetailService) getBonusDetailCondition() map[string]interface{} {
conditions := make(map[string]interface{})
if b.Uid != "" {
conditions["uid"] = b.Uid
}
return conditions
}
package bonus_service
import (
"encoding/json"
"fmt"
"github.com/shopspring/decimal"
"gopkg.in/yaml.v2"
"io/ioutil"
"log"
"slg/models"
"slg/module"
"slg/pkg/util"
"slg/service/order_info_service"
"slg/service/order_share_relation_service"
"slg/service/user_service"
"time"
)
type BonusService struct {
Oid string `json:"oid"`
MerchantId string `json:"merchant_id"`
MerchantBonusAmount string `json:"merchant_bonus_amount"`
AuthorUid string `json:"author_uid"`
AuthorBonusAmount string `json:"author_bonus_amount"`
InviteUid string `json:"invite_uid"`
InviteBonusAmount string `json:"invite_bonus_amount"`
ShareUid string `json:"share_uid"`
ShareBonusAmount string `json:"share_bonus_amount"`
PlatformUid string `json:"platform_uid"`
PlatformBonusAmount string `json:"platform_bonus_amount"`
Status uint8 `json:"status"`
CreateTime int64 `json:"create_time"`
UpdateTime int64 `json:"update_time"`
PageNum int
PageSize int
}
/**
* 获取符合条件的信息总数
* @params
* @return
*/
func (b *BonusService) Count() (int, error) {
return models.GetCount(b.getCondition())
}
/**
* 获取符合条件的信息
* @param
* @return
*/
func (b *BonusService) GetAll() ([]*models.Bonus, error) {
var bonus []*models.Bonus
bonus, err := models.GetBonus(b.PageNum, b.PageSize, b.getCondition())
if err != nil {
return nil, err
}
return bonus, nil
}
func (b *BonusService) getCondition() map[string]interface{} {
conditions := make(map[string]interface{})
if b.Status != 0 {
conditions["status"] = b.Status
}
if b.Oid != "" {
conditions["oid"] = b.Oid
}
if b.MerchantId != "" {
conditions["merchant_id"] = b.MerchantId
}
return conditions
}
/**
* 消费订单
* @return
*/
func (b *BonusService) SettlementBonus() error {
yamlFile, err := ioutil.ReadFile("conf/bonus.yaml")
if err != nil {
log.Printf("yamlFile.Get err #%v ", err)
}
conf := new(module.BonusConfig)
err = yaml.Unmarshal(yamlFile, conf)
if err != nil {
log.Fatalf("Unmarshal: %v", err)
}
_, err = json.Marshal(conf)
merchant := conf.Bonus.Levels["one"].Merchant
author := conf.Bonus.Levels["one"].Author
invite := conf.Bonus.Levels["one"].Invite
share := conf.Bonus.Levels["one"].Share
platform := conf.Bonus.Levels["one"].Platform
bonus_info, err := models.Exist(b.Oid)
if err != nil {
//消费失败 ack false
return nil
}
if len(bonus_info.Oid) > 0 {
//ack true
fmt.Println("订单已存在,ack true")
return err
}
orderInfoService := order_info_service.OrderInfoService{
Oid: b.Oid,
}
//获取订单总价、承兑商uid、用户uid
order_info, err := orderInfoService.GetOrderInfo()
if err != nil {
//消费失败 ack false
return err
}
//如果支付总金额小于1毛钱则不进行分成计划
if util.ToFloat64(order_info.Total) < 1 {
//ack true
return nil
}
total, _ := decimal.NewFromString(order_info.Total)
merchant_bonus_amount := total.Mul(decimal.NewFromFloat(merchant)).Round(2).String()
author_bonus_amount := total.Mul(decimal.NewFromFloat(author)).Round(2).String()
invite_bonus_amount := total.Mul(decimal.NewFromFloat(invite)).Round(2).String()
share_bonus_amount := total.Mul(decimal.NewFromFloat(share)).Round(2).String()
platform_bonus_amount := total.Mul(decimal.NewFromFloat(platform)).Round(2).String()
var merchant_uid, author_uid, invite_uid, share_uid, platform_uid string
merchant_uid = order_info.MerchantId
author_uid = conf.Bonus.AuthorUid
platform_uid = conf.Bonus.PlatformUid
//如果不存在作者,累加到商家收益
if author_uid == "" {
merchant_bonus_amount_tmp, _ := decimal.NewFromString(merchant_bonus_amount)
author_bonus_amount_tmp, _ := decimal.NewFromString(author_bonus_amount)
merchant_bonus_amount = merchant_bonus_amount_tmp.Add(author_bonus_amount_tmp).Round(2).String()
author_bonus_amount = "0.00"
}
//通过用户uid获取用户注册码 => 通过用户注册码获取邀请人
userInfoService := user_service.UserService{}
userInfoService = user_service.UserService{
Uid: order_info.Uid,
}
user_info, err := userInfoService.GetUserInfo()
if err != nil {
//消费失败 ack false
return nil
}
if len(user_info.RegisterCode) > 1 {
userInfoService = user_service.UserService{
InviteCode: user_info.RegisterCode,
}
invite_user_info, err := userInfoService.GetUserInfo()
if err != nil {
return nil
}
invite_uid = invite_user_info.Uid
}
//如果不存在邀请注册,累加到平台佣金
if invite_uid == "" {
platform_bonus_amount_tmp, _ := decimal.NewFromString(platform_bonus_amount)
invite_bonus_amount_tmp, _ := decimal.NewFromString(invite_bonus_amount)
platform_bonus_amount = platform_bonus_amount_tmp.Add(invite_bonus_amount_tmp).Round(2).String()
invite_bonus_amount = "0.00"
}
//通过订单id获取推广分销信息 => 或者推广分销用户
orderShareRelationService := order_share_relation_service.OrderShareRelationService{
Oid: b.Oid,
}
order_share_realtion, err := orderShareRelationService.GetOrderShareRelation()
if err != nil {
return nil
}
if len(order_share_realtion.ShareUid) > 1 {
userInfoService = user_service.UserService{
Uid: order_share_realtion.ShareUid,
}
share_user_info, err := userInfoService.GetUserInfo()
if err != nil {
return nil
}
share_uid = share_user_info.Uid
}
//如果不存在推广分销,累加到平台佣金
if share_uid == "" {
platform_bonus_amount_tmp, _ := decimal.NewFromString(platform_bonus_amount)
share_bonus_amount_tmp, _ := decimal.NewFromString(share_bonus_amount)
platform_bonus_amount = platform_bonus_amount_tmp.Add(share_bonus_amount_tmp).Round(2).String()
share_bonus_amount = "0.00"
}
//构建分成记录
bonus := map[string]interface{}{
"oid": b.Oid,
"create_time": time.Now().UTC().Unix(),
"update_time": time.Now().UTC().Unix(),
"merchant_id": merchant_uid,
"merchant_bonus_amount": merchant_bonus_amount,
"author_uid": author_uid,
"author_bonus_amount": author_bonus_amount,
"invite_uid": invite_uid,
"invite_bonus_amount": invite_bonus_amount,
"share_uid": share_uid,
"share_bonus_amount": share_bonus_amount,
"platform_uid": platform_uid,
"platform_bonus_amount": platform_bonus_amount,
}
tmp, _ := json.Marshal(bonus)
fmt.Println(string(tmp))
if err := models.AddBonus(bonus); err != nil {
return err
}
return nil
}
package bonus_statistics_service
import (
"github.com/jinzhu/gorm"
"github.com/shopspring/decimal"
"slg/models"
)
type BonusStatisticsService struct {
Uid string `json:"uid"`
InviteBonusAmount string `json:"invite_bonus_amount"`
ShareBonusAmount string `json:"share_bonus_amount"`
CreateTime int64 `json:"create_time"`
UpdateTime int64 `json:"update_time"`
}
func (b *BonusStatisticsService) GetBonusStatistics() (*models.BonusStatisticsResp, error) {
bonusStatistics, err := models.GetBonusStatistics(b.Uid)
if err != nil && err != gorm.ErrRecordNotFound {
return nil, err
}
var record = models.BonusStatisticsResp{}
record.InviteBonusAmount = bonusStatistics.InviteBonusAmount
record.ShareBonusAmount = bonusStatistics.ShareBonusAmount
invite_bonus_amount_tmp, _ := decimal.NewFromString(bonusStatistics.InviteBonusAmount)
share_bonus_amount_tmp, _ := decimal.NewFromString(bonusStatistics.ShareBonusAmount)
record.BonusAmount = invite_bonus_amount_tmp.Add(share_bonus_amount_tmp).Round(2).String()
return &record, nil
}
package order_info_service
import (
"github.com/jinzhu/gorm"
"slg/models"
)
type OrderInfoService struct {
Id uint64
Oid string
Uid string
PayId uint8
MerchantId string
PostFee string
Total string
AcceptDigital uint8
PayType uint8
OrderType uint8
OrderState uint8
Delivery uint8
Uname string
Phone string
Address string
IsDelete uint8
VNote string
ConsultDiscounAmount string
ConsultDiscountType uint8
DiscountAmount string
Amount string
CreateTime uint64
UpdateTime uint64
CommentTotal uint64
CommentAlready uint64
Coin string
IntegralDeduction string
IntegralPrice string
OrderIdent uint8
}
func (o *OrderInfoService) GetOrderInfo() (*models.OrderInfo, error) {
orderInfo, err := models.GetOrderInfo(o.Oid)
if err != nil && err != gorm.ErrRecordNotFound {
return nil, err
}
return orderInfo, nil
}
package order_share_relation_service
import (
"encoding/json"
"slg/models"
)
type OrderShareRelationService struct {
Id int
ShareUid string
InvitedUid string
Oid string
Oids json.RawMessage
}
func (o *OrderShareRelationService) GetOrderShareRelation() (*models.OrderShareRelation, error) {
orderShareRelationInfo, err := models.GetOrderShareRelation(o.Oid)
if err != nil {
return nil, err
}
return orderShareRelationInfo, nil
}
......@@ -4,6 +4,7 @@ import (
"fmt"
"github.com/streadway/amqp"
"slg/pkg/rabbitmq"
"slg/service/bonus_service"
)
type AmqpConsumer struct {
......@@ -32,7 +33,6 @@ func (a AmqpConsumer) Consumer() {
Tag: a.Tag,
}
consumer, err := rabbitmq.AMQP.NewConsumer(exchange, queue, binding, consumerOptions)
if err != nil {
return
......@@ -51,5 +51,12 @@ var handler = func(delivery amqp.Delivery) {
message := string(delivery.Body)
fmt.Println("消费------------------------:", message)
bonusService := bonus_service.BonusService{
Oid: message,
}
err := bonusService.SettlementBonus()
if err != nil {
delivery.Ack(false)
}
delivery.Ack(true)
}
package user_service
import (
"slg/models"
)
type UserService struct {
Id uint64 `json:"id"`
Uid string `json:"uid"`
InviteCode string `json:"invite_code"`
RegisterCode string `json:"register_code"`
}
func (u UserService) GetUserInfo() (*models.User, error) {
var user *models.User
user, err := models.GetUserInfo(u.getCondition())
if err != nil {
return nil, err
}
return user, nil
}
func (u *UserService) getCondition() map[string]interface{} {
conditions := make(map[string]interface{})
if u.Id != 0 {
conditions["id"] = u.Id
}
if u.Uid != "" {
conditions["uid"] = u.Uid
}
if u.InviteCode != "" {
conditions["invite_code"] = u.InviteCode
}
if u.RegisterCode != "" {
conditions["register_code"] = u.RegisterCode
}
return conditions
}
......@@ -56,4 +56,3 @@ func ValidateInputs(dataSet interface{}) (bool, map[string][]string) {
}
return true, nil
}
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment