diff --git a/microservice/common/consts.go b/microservice/common/consts.go deleted file mode 100644 index 21f4191..0000000 --- a/microservice/common/consts.go +++ /dev/null @@ -1,50 +0,0 @@ -/*************************************************** - ** @Desc : This file for ... - ** @Time : 2019/11/25 14:14 - ** @Author : yuebin - ** @File : consts.go - ** @Last Modified by : yuebin - ** @Last Modified time: 2019/11/25 14:14 - ** @Software: GoLand -****************************************************/ -package common - -const ( - ACTIVE = "active" - UNACTIVE = "unactive" - DELETE = "delete" - REFUND = "refund" - ORDERROLL = "order_roll" - WAIT = "wait" - SUCCESS = "success" - FAIL = "fail" - YES = "yes" - NO = "no" - ZERO = 0.0 //0元手续费 - VERIFY_CODE_LEN = 4 //验证码的长度 - PAYFOR_FEE = 2.00 //代付手续费 - PAYFOR_INTERVAL = 5 //每过5分钟执行一次代付 - - PLUS_AMOUNT = "plus_amount" //加款操作 - SUB_AMOUNT = "sub_amount" //减款操作 - FREEZE_AMOUNT = "freeze_amount" //冻结操作 - UNFREEZE_AMOUNT = "unfreeze_amount" //解冻操作 - - PAYFOR_COMFRIM = "payfor_confirm" //下发带审核 - PAYFOR_SOLVING = "payfor_solving" //发下处理中 - PAYFOR_HANDING = "payfor_handing" //手动打款中 - PAYFOR_BANKING = "payfor_banking" //银行处理中 - PAYFOR_FAIL = "payfor_fail" //代付失败 - PAYFOR_SUCCESS = "payfor_success" //代付成功 - - PAYFOR_ROAD = "payfor_road" //通道打款 - PAYFOR_HAND = "payfor_hand" //手动打款 - PAYFOR_REFUSE = "payfor_refuse" // 拒绝打款 - - SELF_API = "self_api" //自助api系统下发 - SELF_MERCHANT = "self_merchant" //管理手动处理商户下发 - SELF_HELP = "self_help" //管理自己提现 - - PUBLIC = "public" //对公卡 - PRIVATE = "private" //对私卡 -) diff --git a/microservice/common/mq_config.go b/microservice/common/mq_config.go deleted file mode 100644 index 472bdcd..0000000 --- a/microservice/common/mq_config.go +++ /dev/null @@ -1,25 +0,0 @@ -/*************************************************** - ** @Desc : This file for ... - ** @Time : 2019/11/6 11:37 - ** @Author : yuebin - ** @File : mq_config - ** @Last Modified by : yuebin - ** @Last Modified time: 2019/11/6 11:37 - ** @Software: GoLand -****************************************************/ -package common - -import "net" - -const ( - mqHost = "127.0.0.1" - mqPort = "61613" - - MqOrderQuery = "order_query" - MQ_PAYFOR_QUERY = "payfor_query" - MqOrderNotify = "order_notify" -) - -func GetMQAddress() string { - return net.JoinHostPort(mqHost, mqPort) -} diff --git a/microservice/common/pay_way_code.go b/microservice/common/pay_way_code.go deleted file mode 100644 index a848388..0000000 --- a/microservice/common/pay_way_code.go +++ /dev/null @@ -1,99 +0,0 @@ -/*************************************************** - ** @Desc : This file for ... - ** @Time : 2019/10/29 15:01 - ** @Author : yuebin - ** @File : pay_way_code - ** @Last Modified by : yuebin - ** @Last Modified time: 2019/10/29 15:01 - ** @Software: GoLand -****************************************************/ -package common - -var ScanPayWayCodes = []string{ - "WEIXIN_SCAN", - "UNION_SCAN", - "ALI_SCAN", - "BAIDU_SCAN", - "JD_SCAN", - "QQ_SCAN", -} - -var H5PayWayCodes = []string{ - "WEIXIN_H5", - "ALI_H5", - "QQ_H5", - "UNION_H5", - "BAIDU_H5", - "JD_H5", -} - -var SytPayWayCodes = []string{ - "WEIXIN_SYT", - "ALI_SYT", - "QQ_SYT", - "UNION_SYT", - "BAIDU_SYT", - "JD_SYT", -} - -var FastPayWayCodes = []string{ - "UNION-FAST", -} - -var WebPayWayCode = []string{ - "UNION-WAP", -} - -func GetScanPayWayCodes() []string { - return ScanPayWayCodes -} - -func GetNameByPayWayCode(code string) string { - switch code { - case "WEIXIN_SCAN": - return "微信扫码" - case "UNION_SCAN": - return "银联扫码" - case "ALI_SCAN": - return "支付宝扫码" - case "BAIDU_SCAN": - return "百度扫码" - case "JD_SCAN": - return "京东扫码" - case "QQ_SCAN": - return "QQ扫码" - - case "WEIXIN_H5": - return "微信H5" - case "UNION_H5": - return "银联H5" - case "ALI_H5": - return "支付宝H5" - case "BAIDU_H5": - return "百度H5" - case "JD_H5": - return "京东H5" - case "QQ_H5": - return "QQ-H5" - - case "WEIXIN_SYT": - return "微信收银台" - case "UNION_SYT": - return "银联收银台" - case "ALI_SYT": - return "支付宝收银台" - case "BAIDU_SYT": - return "百度收银台" - case "JD_SYT": - return "京东收银台" - case "QQ_SYT": - return "QQ-收银台" - - case "UNION_FAST": - return "银联快捷" - case "UNION_WAP": - return "银联web" - default: - return "未知" - } -} diff --git a/microservice/common/supplier.go b/microservice/common/supplier.go deleted file mode 100644 index 9276277..0000000 --- a/microservice/common/supplier.go +++ /dev/null @@ -1,47 +0,0 @@ -/*************************************************** - ** @Desc : 上有支付公司的编号 - ** @Time : 2019/10/28 10:47 - ** @Author : yuebin - ** @File : supplier - ** @Last Modified by : yuebin - ** @Last Modified time: 2019/10/28 10:47 - ** @Software: GoLand -****************************************************/ -package common - -//添加新的上游通道时,需要添加这里 -var supplierCode2Name = map[string]string{ - "KF": "快付支付", - "WEIXIN": "官方微信", - "ALIPAY": "官方支付宝", -} - -func GetSupplierMap() map[string]string { - return supplierCode2Name -} - -func GetSupplierCodes() []string { - var supplierCodes []string - for k := range supplierCode2Name { - supplierCodes = append(supplierCodes, k) - } - - return supplierCodes -} - -func GetSupplierNames() []string { - var supplierNames []string - for _, v := range supplierCode2Name { - supplierNames = append(supplierNames, v) - } - return supplierNames -} - -func CheckSupplierByCode(code string) string { - for k, v := range supplierCode2Name { - if k == code { - return v + ",注册完毕" - } - } - return "未找到上游名称,注册有问题。" -} diff --git a/microservice/conf/app.conf b/microservice/conf/app.conf deleted file mode 100644 index 8dcea95..0000000 --- a/microservice/conf/app.conf +++ /dev/null @@ -1,5 +0,0 @@ -appname = jhmicro -httpport = 8010 -runmode = dev - -mysql = dljjj diff --git a/microservice/conf/config.go b/microservice/conf/config.go deleted file mode 100644 index 8e330d3..0000000 --- a/microservice/conf/config.go +++ /dev/null @@ -1,18 +0,0 @@ -/*************************************************** - ** @Desc : This file for ... - ** @Time : 2019/10/26 15:30 - ** @Author : yuebin - ** @File : conf_pro - ** @Last Modified by : yuebin - ** @Last Modified time: 2019/10/26 15:30 - ** @Software: GoLand -****************************************************/ -package conf - -const ( - DB_HOST = "localhost" - DB_PORT = "3306" - DB_USER = "root" - DB_PASSWORD = "Kyb^15273031604" - DB_BASE = "juhe_pay" -) diff --git a/microservice/go.mod b/microservice/go.mod deleted file mode 100644 index 1567d97..0000000 --- a/microservice/go.mod +++ /dev/null @@ -1,13 +0,0 @@ -module microservice - -go 1.13 - -require github.com/beego/beego/v2 v2.0.1 - -require ( - github.com/astaxie/beego v1.12.3 - github.com/go-sql-driver/mysql v1.5.0 - github.com/go-stomp/stomp v2.1.4+incompatible - github.com/rs/xid v1.3.0 - github.com/smartystreets/goconvey v1.6.4 // indirect -) diff --git a/microservice/go.sum b/microservice/go.sum deleted file mode 100644 index 2c35717..0000000 --- a/microservice/go.sum +++ /dev/null @@ -1,284 +0,0 @@ -cloud.google.com/go v0.26.0/go.mod h1:aQUYkXzVsufM+DwF1aE+0xfcU+56JwCaLick0ClmMTw= -github.com/BurntSushi/toml v0.3.1/go.mod h1:xHWCNGjB5oqiDr8zfno3MHue2Ht5sIBksp03qcyfWMU= -github.com/Knetic/govaluate v3.0.0+incompatible/go.mod h1:r7JcOSlj0wfOMncg0iLm8Leh48TZaKVeNIfJntJ2wa0= -github.com/alecthomas/template v0.0.0-20160405071501-a0175ee3bccc/go.mod h1:LOuyumcjzFXgccqObfd/Ljyb9UuFJ6TxHnclSeseNhc= -github.com/alecthomas/template v0.0.0-20190718012654-fb15b899a751/go.mod h1:LOuyumcjzFXgccqObfd/Ljyb9UuFJ6TxHnclSeseNhc= -github.com/alecthomas/units v0.0.0-20151022065526-2efee857e7cf/go.mod h1:ybxpYRFXyAe+OPACYpWeL0wqObRcbAqCMya13uyzqw0= -github.com/alecthomas/units v0.0.0-20190717042225-c3de453c63f4/go.mod h1:ybxpYRFXyAe+OPACYpWeL0wqObRcbAqCMya13uyzqw0= -github.com/alicebob/gopher-json v0.0.0-20180125190556-5a6b3ba71ee6/go.mod h1:SGnFV6hVsYE877CKEZ6tDNTjaSXYUk6QqoIK6PrAtcc= -github.com/alicebob/miniredis v2.5.0+incompatible/go.mod h1:8HZjEj4yU0dwhYHky+DxYx+6BMjkBbe5ONFIF1MXffk= -github.com/astaxie/beego v1.12.3 h1:SAQkdD2ePye+v8Gn1r4X6IKZM1wd28EyUOVQ3PDSOOQ= -github.com/astaxie/beego v1.12.3/go.mod h1:p3qIm0Ryx7zeBHLljmd7omloyca1s4yu1a8kM1FkpIA= -github.com/beego/beego/v2 v2.0.1 h1:07a7Z0Ok5vbqyqh+q53sDPl9LdhKh0ZDy3gbyGrhFnE= -github.com/beego/beego/v2 v2.0.1/go.mod h1:8zyHi1FnWO1mZLwTn62aKRIZF/aIKvkCBB2JYs+eqQI= -github.com/beego/goyaml2 v0.0.0-20130207012346-5545475820dd/go.mod h1:1b+Y/CofkYwXMUU0OhQqGvsY2Bvgr4j6jfT699wyZKQ= -github.com/beego/x2j v0.0.0-20131220205130-a0352aadc542/go.mod h1:kSeGC/p1AbBiEp5kat81+DSQrZenVBZXklMLaELspWU= -github.com/beorn7/perks v0.0.0-20180321164747-3a771d992973/go.mod h1:Dwedo/Wpr24TaqPxmxbtue+5NUziq4I4S80YR8gNf3Q= -github.com/beorn7/perks v1.0.0/go.mod h1:KWe93zE9D1o94FZ5RNwFwVgaQK1VOXiVxmqh+CedLV8= -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/bradfitz/gomemcache v0.0.0-20180710155616-bc664df96737/go.mod h1:PmM6Mmwb0LSuEubjR8N7PtNe1KxZLtOUHtbeikc5h60= -github.com/casbin/casbin v1.7.0/go.mod h1:c67qKN6Oum3UF5Q1+BByfFxkwKvhwW57ITjqwtzR1KE= -github.com/census-instrumentation/opencensus-proto v0.2.1/go.mod h1:f6KPmirojxKA12rnyqOA5BBL4O983OfeGPqjHWSTneU= -github.com/cespare/xxhash/v2 v2.1.1 h1:6MnRN8NT7+YBpUIWxHtefFZOKTAPgGjpQSxqLNn0+qY= -github.com/cespare/xxhash/v2 v2.1.1/go.mod h1:VGX0DQ3Q6kWi7AoAeZDth3/j3BFtOZR5XLFGgcrjCOs= -github.com/client9/misspell v0.3.4/go.mod h1:qj6jICC3Q7zFZvVWo7KLAzC3yx5G7kyvSDkc90ppPyw= -github.com/cloudflare/golz4 v0.0.0-20150217214814-ef862a3cdc58/go.mod h1:EOBUe0h4xcZ5GoxqC5SDxFQ8gwyZPKQoEzownBlhI80= -github.com/coreos/etcd v3.3.25+incompatible/go.mod h1:uF7uidLiAD3TWHmW31ZFd/JWoc32PjwdhPthX9715RE= -github.com/coreos/go-semver v0.3.0/go.mod h1:nnelYz7RCh+5ahJtPPxZlU+153eP4D4r3EedlOD2RNk= -github.com/coreos/go-systemd v0.0.0-20191104093116-d3cd4ed1dbcf/go.mod h1:F5haX7vjVVG0kc13fIWeqUViNPyEJxv/OmvnBo0Yme4= -github.com/coreos/pkg v0.0.0-20180928190104-399ea9e2e55f/go.mod h1:E3G3o1h8I7cfcXa63jLwjI0eiQQMgzzUDFVpN/nH/eA= -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/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= -github.com/davecgh/go-spew v1.1.1/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38= -github.com/edsrzf/mmap-go v0.0.0-20170320065105-0bce6a688712/go.mod h1:YO35OhQPt3KJa3ryjFM5Bs14WD66h8eGKpfaBNrHW5M= -github.com/elastic/go-elasticsearch/v6 v6.8.5/go.mod h1:UwaDJsD3rWLM5rKNFzv9hgox93HoX8utj1kxD9aFUcI= -github.com/elazarl/go-bindata-assetfs v1.0.0 h1:G/bYguwHIzWq9ZoyUQqrjTmJbbYn3j3CKKpKinvZLFk= -github.com/elazarl/go-bindata-assetfs v1.0.0/go.mod h1:v+YaWX3bdea5J/mo8dSETolEo7R71Vk1u8bnjau5yw4= -github.com/envoyproxy/go-control-plane v0.9.1-0.20191026205805-5f8ba28d4473/go.mod h1:YTl/9mNaCwkRvm6d1a2C3ymFceY/DCBVvsKhRF0iEA4= -github.com/envoyproxy/protoc-gen-validate v0.1.0/go.mod h1:iSmxcyjqTsJpI2R4NaDN7+kN2VEUnK/pcBlmesArF7c= -github.com/fsnotify/fsnotify v1.4.7/go.mod h1:jwhsz4b93w/PPRr/qN1Yymfu8t87LnFCMoQvtojpjFo= -github.com/glendc/gopher-json v0.0.0-20170414221815-dc4743023d0c/go.mod h1:Gja1A+xZ9BoviGJNA2E9vFkPjjsl+CoJxSXiQM1UXtw= -github.com/go-kit/kit v0.8.0/go.mod h1:xBxKIO96dXMWWy0MnWVtmwkA9/13aqxPnvrjFYMA2as= -github.com/go-kit/kit v0.9.0/go.mod h1:xBxKIO96dXMWWy0MnWVtmwkA9/13aqxPnvrjFYMA2as= -github.com/go-logfmt/logfmt v0.3.0/go.mod h1:Qt1PoO58o5twSAckw1HlFXLmHsOX5/0LbT9GBnD5lWE= -github.com/go-logfmt/logfmt v0.4.0/go.mod h1:3RMwSq7FuexP4Kalkev3ejPJsZTpXXBr9+V4qmtdjCk= -github.com/go-redis/redis v6.14.2+incompatible/go.mod h1:NAIEuMOZ/fxfXJIrKDQDz8wamY7mA7PouImQ2Jvg6kA= -github.com/go-redis/redis/v7 v7.4.0/go.mod h1:JDNMw23GTyLNC4GZu9njt15ctBQVn7xjRfnwdHj/Dcg= -github.com/go-sql-driver/mysql v1.5.0 h1:ozyZYNQW3x3HtqT1jira07DN2PArx2v7/mN66gGcHOs= -github.com/go-sql-driver/mysql v1.5.0/go.mod h1:DCzpHaOWr8IXmIStZouvnhqoel9Qv2LBy8hT2VhHyBg= -github.com/go-stack/stack v1.8.0/go.mod h1:v0f6uXyyMGvRgIKkXu+yp6POWl0qKG85gN/melR3HDY= -github.com/go-stomp/stomp v1.0.2 h1:apk/+6YIaphgNd+K0MoOkxENskEa9dSDUq5OADDcqKw= -github.com/go-stomp/stomp v2.1.4+incompatible h1:D3SheUVDOz9RsjVWkoh/1iCOwD0qWjyeTZMUZ0EXg2Y= -github.com/go-stomp/stomp v2.1.4+incompatible/go.mod h1:VqCtqNZv1226A1/79yh+rMiFUcfY3R109np+7ke4n0c= -github.com/gogo/protobuf v1.1.1/go.mod h1:r8qH/GZQm5c6nD/R0oafs1akxWv10x8SbQlK7atdtwQ= -github.com/gogo/protobuf v1.3.1/go.mod h1:SlYgWuQ5SjCEi6WLHjHCa1yvBfUnHcTbrrZtXPKa29o= -github.com/golang/glog v0.0.0-20160126235308-23def4e6c14b/go.mod h1:SBH7ygxi8pfUlaOkMMuAQtPIUF8ecWP5IEl/CR7VP2Q= -github.com/golang/mock v1.1.1/go.mod h1:oTYuIxOrZwtPieC+H1uAHpcLFnEyAGVDL/k47Jfbm0A= -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.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= -github.com/golang/protobuf v1.4.0-rc.2/go.mod h1:LlEzMj4AhA7rCAGe4KMBDvJI+AwstrUpVNzEA03Pprs= -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.2 h1:+Z5KGCizgyZCbGh1KZqA0fcLLkwbsjIzS4aV2v7wJX0= -github.com/golang/protobuf v1.4.2/go.mod h1:oDoupMAO8OvCJWAcko0GGGIgR6R6ocIYbsSw735rRwI= -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 v2.0.0+incompatible/go.mod h1:B4C85qUVwatsJoIUNIfCRsp7qO0iAmpGFZ4EELWSbC4= -github.com/google/go-cmp v0.2.0/go.mod h1:oXzfMopK8JAjlY9xF4vHSVASa0yLyX7SntLO5aqRK0M= -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.4.0/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE= -github.com/google/go-cmp v0.5.0 h1:/QaMHBdZ26BB3SSst0Iwl10Epc+xhTquomWX0oZEB6w= -github.com/google/go-cmp v0.5.0/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE= -github.com/google/gofuzz v1.0.0/go.mod h1:dBl0BpW6vV/+mYPU4Po3pmUjxk6FQPldtuIdl/M65Eg= -github.com/google/renameio v0.1.0/go.mod h1:KWCgfxg9yswjAJkECMjeO8J8rahYeXnNhOm40UhjYkI= -github.com/google/uuid v1.1.1/go.mod h1:TIyPZe4MgqvfeYDBFedMoGGpEw/LqOeaOT+nhxU+yHo= -github.com/gopherjs/gopherjs v0.0.0-20181017120253-0766667cb4d1/go.mod h1:wJfORRmW1u3UXTncJ5qlYoELFm8eSnnEO6hX4iZ3EWY= -github.com/grpc-ecosystem/go-grpc-prometheus v1.2.0/go.mod h1:8NvIoxWQoOIhqOTXgfV/d3M/q6VIi02HzZEHgUlZvzk= -github.com/hashicorp/golang-lru v0.5.4 h1:YDjusn29QI/Das2iO9M0BHnIbxPeyuCHsjMW+lJfyTc= -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= -github.com/json-iterator/go v1.1.6/go.mod h1:+SdeFBvtyEkXs7REEP0seUULqWtbJapLOCVDaaPEHmU= -github.com/json-iterator/go v1.1.10/go.mod h1:KdQUCv79m/52Kvf8AW2vK1V8akMuk1QjK/uOdHXbAo4= -github.com/jtolds/gls v4.20.0+incompatible/go.mod h1:QJZ7F/aHp+rZTRtaJ1ow/lLfFfVYBRgL+9YlvaHOwJU= -github.com/julienschmidt/httprouter v1.2.0/go.mod h1:SYymIcj16QtmaHHD7aYtjjsJG7VTCxuUUipMqKk8s4w= -github.com/kisielk/errcheck v1.2.0/go.mod h1:/BMXB+zMLi60iA8Vv6Ksmxu/1UDYcXs4uQLJ+jE2L00= -github.com/kisielk/gotool v1.0.0/go.mod h1:XhKaO+MFFWcvkIS/tQcRk01m1F5IRFswLeQ+oQHNcck= -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/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/ledisdb/ledisdb v0.0.0-20200510135210-d35789ec47e6/go.mod h1:n931TsDuKuq+uX4v1fulaMbA/7ZLLhjc85h7chZGBCQ= -github.com/lib/pq v1.0.0 h1:X5PMW56eZitiTeO7tKzZxFCSpbFZJtkMMooicw2us9A= -github.com/lib/pq v1.0.0/go.mod h1:5WUZQaWbwv1U+lTReE5YruASi9Al49XbQIvNi/34Woo= -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 h1:4hp9jkHxhMHkqkrB3Ix0jegS5sx/RkqARlsWZ6pIwiU= -github.com/matttproud/golang_protobuf_extensions v1.0.1/go.mod h1:D8He9yQNgCq6Z5Ld7szi9bcBfOoFv/3dc6xSMkL2PC0= -github.com/mitchellh/mapstructure v1.3.3 h1:SzB1nHZ2Xi+17FP0zVQBHIZqvwRN9408fJO8h+eeNA8= -github.com/mitchellh/mapstructure v1.3.3/go.mod h1:bFUtVrKA4DC2yAKiSyO/QUcy7e+RRV2QTWOzhPopBRo= -github.com/modern-go/concurrent v0.0.0-20180228061459-e0a39a4cb421/go.mod h1:6dJC0mAP4ikYIbvyc7fijjWJddQyLn8Ig3JB5CqoB9Q= -github.com/modern-go/concurrent v0.0.0-20180306012644-bacd9c7ef1dd/go.mod h1:6dJC0mAP4ikYIbvyc7fijjWJddQyLn8Ig3JB5CqoB9Q= -github.com/modern-go/reflect2 v0.0.0-20180701023420-4b7aa43c6742/go.mod h1:bx2lNnkwVCuqBIxFjflWJWanXIb3RllmbCylyMrvgv0= -github.com/modern-go/reflect2 v1.0.1/go.mod h1:bx2lNnkwVCuqBIxFjflWJWanXIb3RllmbCylyMrvgv0= -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= -github.com/onsi/ginkgo v1.6.0/go.mod h1:lLunBs/Ym6LB5Z9jYTR76FiuTmxDTDusOGeTQH+WWjE= -github.com/onsi/ginkgo v1.10.1/go.mod h1:lLunBs/Ym6LB5Z9jYTR76FiuTmxDTDusOGeTQH+WWjE= -github.com/onsi/ginkgo v1.12.0/go.mod h1:oUhWkIvk5aDxtKvDDuw8gItl8pKl42LzjC9KZE0HfGg= -github.com/onsi/gomega v1.7.0/go.mod h1:ex+gbHU/CVuBBDIJjb2X0qEXbFg53c61hWP/1CpauHY= -github.com/onsi/gomega v1.7.1/go.mod h1:XdKZgCCFLUoM/7CFJVPcG8C1xQ1AJ0vpAezJrB7JYyY= -github.com/opentracing/opentracing-go v1.2.0/go.mod h1:GxEUsuufX4nBwe+T+Wl9TAgYrxe9dPLANfrWvHYVTgc= -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/pelletier/go-toml v1.8.1/go.mod h1:T2/BmBdy8dvIRq1a/8aqjN41wvWlN4lrapLU/GW4pbc= -github.com/peterh/liner v1.0.1-0.20171122030339-3681c2a91233/go.mod h1:xIteQHvHuaLYG9IFj6mSxM0fCKrs34IrEQUhOYuGPHc= -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 h1:FEBLx1zS214owpjy7qsBeixbURkuhQAwrK5UwLGTwt4= -github.com/pkg/errors v0.9.1/go.mod h1:bwawxfHBFNV+L2hUp1rHADufV3IMtnDRdf1r5NINEl0= -github.com/pmezard/go-difflib v1.0.0 h1:4DBwDE0NGyQoBHbLQYPwSUPoCMWR5BEzIk/f1lZbAQM= -github.com/pmezard/go-difflib v1.0.0/go.mod h1:iKH77koFhYxTK1pcRnkKkqfTogsbg7gZNVY4sRDYZ/4= -github.com/prometheus/client_golang v0.9.1/go.mod h1:7SWBe2y4D6OKWSNQJUaRYU/AaXPKyh/dDVn+NZz0KFw= -github.com/prometheus/client_golang v1.0.0/go.mod h1:db9x61etRT2tGnBNRi70OPL5FsnadC4Ky3P0J6CfImo= -github.com/prometheus/client_golang v1.7.0 h1:wCi7urQOGBsYcQROHqpUUX4ct84xp40t9R9JX0FuA/U= -github.com/prometheus/client_golang v1.7.0/go.mod h1:PY5Wy2awLA44sXw4AOSfFBetzPP4j5+D6mVACh+pe2M= -github.com/prometheus/client_model v0.0.0-20180712105110-5c3871d89910/go.mod h1:MbSGuTsp3dbXC40dX6PRTWyKYBIrTGTE9sqQNg2J8bo= -github.com/prometheus/client_model v0.0.0-20190129233127-fd36f4220a90/go.mod h1:xMI15A0UPsDsEKsMN9yxemIoYk6Tm2C1GtYGdfGttqA= -github.com/prometheus/client_model v0.0.0-20190812154241-14fe0d1b01d4/go.mod h1:xMI15A0UPsDsEKsMN9yxemIoYk6Tm2C1GtYGdfGttqA= -github.com/prometheus/client_model v0.2.0 h1:uq5h0d+GuxiXLJLNABMgp2qUWDPiLvgCzz2dUR+/W/M= -github.com/prometheus/client_model v0.2.0/go.mod h1:xMI15A0UPsDsEKsMN9yxemIoYk6Tm2C1GtYGdfGttqA= -github.com/prometheus/common v0.4.1/go.mod h1:TNfzLD0ON7rHzMJeJkieUDPYmFC7Snx/y86RQel1bk4= -github.com/prometheus/common v0.10.0 h1:RyRA7RzGXQZiW+tGMr7sxa85G1z0yOpM1qq5c8lNawc= -github.com/prometheus/common v0.10.0/go.mod h1:Tlit/dnDKsSWFlCLTWaA1cyBgKHSMdTB80sz/V91rCo= -github.com/prometheus/procfs v0.0.0-20181005140218-185b4288413d/go.mod h1:c3At6R/oaqEKCNdg8wHV1ftS6bRYblBhIjjI8uT2IGk= -github.com/prometheus/procfs v0.0.2/go.mod h1:TjEm7ze935MbeOT/UhFTIMYKhuLP4wbCsTZCD3I8kEA= -github.com/prometheus/procfs v0.1.3 h1:F0+tqvhOksq22sc6iCHF5WGlWjdwj92p0udFh1VFBS8= -github.com/prometheus/procfs v0.1.3/go.mod h1:lV6e/gmhEcM9IjHGsFOCxxuZ+z1YqCvr4OA4YeYWdaU= -github.com/rogpeppe/go-internal v1.3.0/go.mod h1:M8bDsm7K2OlrFYOpmOWEs/qY81heoFRclV5y23lUDJ4= -github.com/rs/xid v1.3.0 h1:6NjYksEUlhurdVehpc7S7dk6DAmcKv8V9gG0FsVN2U4= -github.com/rs/xid v1.3.0/go.mod h1:trrq9SKmegXys3aeAKXMUTdJsYXVwGY3RLcfgqegfbg= -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/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= -github.com/sirupsen/logrus v1.2.0/go.mod h1:LxeOpSwHxABJmUn/MG1IvRgCAasNZTLOkJPxbbu5VWo= -github.com/sirupsen/logrus v1.4.2/go.mod h1:tLMulIdttU9McNUspp0xgXVQah82FyeX6MwdIuYE2rE= -github.com/smartystreets/assertions v0.0.0-20180927180507-b2de0cb4f26d/go.mod h1:OnSkiWE9lh6wB0YB77sQom3nweQdgAjqCqsofrRNTgc= -github.com/smartystreets/goconvey v1.6.4/go.mod h1:syvi0/a8iFYH4r/RixwvyeAJjdLS9QV7WQ/tjFTllLA= -github.com/ssdb/gossdb v0.0.0-20180723034631-88f6b59b84ec/go.mod h1:QBvMkMya+gXctz3kmljlUCu/yB3GZ6oee+dUozsezQE= -github.com/stretchr/objx v0.1.0/go.mod h1:HFkY916IF+rwdDfMAkV7OtwuqBVzrE8GR6GFx+wExME= -github.com/stretchr/objx v0.1.1/go.mod h1:HFkY916IF+rwdDfMAkV7OtwuqBVzrE8GR6GFx+wExME= -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 h1:2E4SXV/wtOkTonXsotYi4li6zVWxYlZuYNCXe9XRJyk= -github.com/stretchr/testify v1.4.0/go.mod h1:j7eGeouHqKxXV5pUuKE4zz7dFj8WfuZ+81PSLYec5m4= -github.com/syndtr/goleveldb v0.0.0-20160425020131-cfa635847112/go.mod h1:Z4AUp2Km+PwemOoO/VB5AOx9XSsIItzFjoJlOSiYmn0= -github.com/syndtr/goleveldb v0.0.0-20181127023241-353a9fca669c/go.mod h1:Z4AUp2Km+PwemOoO/VB5AOx9XSsIItzFjoJlOSiYmn0= -github.com/ugorji/go v0.0.0-20171122102828-84cb69a8af83/go.mod h1:hnLbHMwcvSihnDhEfx2/BzKp2xb0Y+ErdfYcrs9tkJQ= -github.com/wendal/errors v0.0.0-20130201093226-f66c77a7882b/go.mod h1:Q12BUT7DqIlHRmgv3RskH+UCM/4eqVMgI0EMmlSpAXc= -github.com/yuin/goldmark v1.2.1/go.mod h1:3hX8gzYuyVAZsxl0MRgGTJEmQBFcNTphYh9decYSb74= -github.com/yuin/gopher-lua v0.0.0-20171031051903-609c9cd26973/go.mod h1:aEV29XrmTYFr3CiRxZeGHpkvbwq+prZduBqMaascyCU= -go.etcd.io/etcd v3.3.25+incompatible/go.mod h1:yaeTdrJi5lOmYerz05bd8+V7KubZs8YSFZfzsF9A6aI= -go.uber.org/atomic v1.6.0/go.mod h1:sABNBOSYdrvTF6hTgEIbc7YasKWGhgEQZyfxyTvoXHQ= -go.uber.org/multierr v1.5.0/go.mod h1:FeouvMocqHpRaaGuG9EjoKcStLC43Zu/fmqdUMPcKYU= -go.uber.org/tools v0.0.0-20190618225709-2cfd321de3ee/go.mod h1:vJERXedbb3MVM5f9Ejo0C68/HhF8uaILCdgjnY+goOA= -go.uber.org/zap v1.15.0/go.mod h1:Mb2vm2krFEG5DV0W9qcHBYFtp/Wku1cvYaqPsS/WYfc= -golang.org/x/crypto v0.0.0-20180904163835-0709b304e793/go.mod h1:6SG95UA2DQfeDnfUPMdvaQW0Q7yPrPDi9nlGo2tz2b4= -golang.org/x/crypto v0.0.0-20190308221718-c2843e01d9a2/go.mod h1:djNgcEr1/C05ACkg1iLfiJU5Ep61QUkGW8qpdssI0+w= -golang.org/x/crypto v0.0.0-20190510104115-cbcb75029529/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 h1:psW17arqaxU48Z5kZ0CQnkZWQJsqcURM6tKiBApRjXI= -golang.org/x/crypto v0.0.0-20200622213623-75b288015ac9/go.mod h1:LzIPMQfyMNhhGPhUkYOs5KpL4U8rLKemX1yGLhDgUto= -golang.org/x/exp v0.0.0-20190121172915-509febef88a4/go.mod h1:CJ0aWSM057203Lf6IL+f9T1iT9GByDxfZKAQTCR3kQA= -golang.org/x/lint v0.0.0-20181026193005-c67002cb31c3/go.mod h1:UVdnD1Gm6xHRNCYTkRU2/jEulfH38KcIWyp/GAMgvoE= -golang.org/x/lint v0.0.0-20190227174305-5b3e6a55c961/go.mod h1:wehouNa3lNwaWXcvxsM5YxQ5yQlVC4a0KAMCusXpPoU= -golang.org/x/lint v0.0.0-20190313153728-d0100b6bd8b3/go.mod h1:6SW0HCj/g11FgYtHlgUYUwCkIfeOF89ocIRzGO/8vkc= -golang.org/x/lint v0.0.0-20190930215403-16217165b5de/go.mod h1:6SW0HCj/g11FgYtHlgUYUwCkIfeOF89ocIRzGO/8vkc= -golang.org/x/lint v0.0.0-20201208152925-83fdc39ff7b5/go.mod h1:3xt1FjdF8hUf6vQPIChWIBhFzV8gjjsPE/fR3IyQdNY= -golang.org/x/mod v0.0.0-20190513183733-4bf6d317e70e/go.mod h1:mXi4GBBbnImb6dmsKGUJ2LatrhH/nqhxcFungHvyanc= -golang.org/x/mod v0.1.1-0.20191105210325-c90efee705ee/go.mod h1:QqPTAvyqsEbceGzBzNggFXnrqF1CaUcvgkdR5Ot7KZg= -golang.org/x/mod v0.3.0 h1:RM4zey1++hCTbCVQfnWeKs9/IEsaBLA8vTkd0WVtmH4= -golang.org/x/mod v0.3.0/go.mod h1:s0Qsj1ACt9ePp/hMypM3fl4fZqREWJwdYDEqhRiZZUA= -golang.org/x/net v0.0.0-20180724234803-3673e40ba225/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= -golang.org/x/net v0.0.0-20180826012351-8a410e7b638d/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= -golang.org/x/net v0.0.0-20180906233101-161cd47e91fd/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= -golang.org/x/net v0.0.0-20181114220301-adae6a3d119a/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= -golang.org/x/net v0.0.0-20190213061140-3a22650c66bd/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= -golang.org/x/net v0.0.0-20190311183353-d8887717615a/go.mod h1:t9HGtf8HONx5eT2rtn7q6eTqICYqUVnKs3thJo3Qplg= -golang.org/x/net v0.0.0-20190404232315-eb5bcb51f2a3/go.mod h1:t9HGtf8HONx5eT2rtn7q6eTqICYqUVnKs3thJo3Qplg= -golang.org/x/net v0.0.0-20190613194153-d28f0bde5980/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-20190923162816-aa69164e4478/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s= -golang.org/x/net v0.0.0-20201021035429-f5854403a974 h1:IX6qOQeG5uLjB/hjjwjedwfjND0hgjPMMyO1RoIXQNI= -golang.org/x/net v0.0.0-20201021035429-f5854403a974/go.mod h1:sp8m0HH+o8qH0wwXwYZr8TS3Oi6o0r6Gce1SSxlDquU= -golang.org/x/oauth2 v0.0.0-20180821212333-d2e6202438be/go.mod h1:N/0e6XlmueqKjAGxoOufVs8QHGRruUQn6yWY3a++T0U= -golang.org/x/sync v0.0.0-20180314180146-1d60e4601c6f/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= -golang.org/x/sync v0.0.0-20181108010431-42b317875d0f/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= -golang.org/x/sync v0.0.0-20181221193216-37e7f081c4d4/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= -golang.org/x/sync v0.0.0-20190423024810-112230192c58/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= -golang.org/x/sync v0.0.0-20190911185100-cd5d95a43a6e/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= -golang.org/x/sync v0.0.0-20201020160332-67f06af15bc9/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= -golang.org/x/sys v0.0.0-20180830151530-49385e6e1522/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= -golang.org/x/sys v0.0.0-20180905080454-ebe1bf3edb33/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= -golang.org/x/sys v0.0.0-20180909124046-d0be0721c37e/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= -golang.org/x/sys v0.0.0-20181116152217-5ac8a444bdc5/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= -golang.org/x/sys v0.0.0-20190215142949-d0b11bdaac8a/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= -golang.org/x/sys v0.0.0-20190412213103-97732733099d/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20190422165155-953cdadca894/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20191010194322-b09406accb47/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20191120155948-bd437916bb0e/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20200106162015-b016eb3dc98e/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20200615200032-f1bc736245b1/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20200930185726-fdedc70b468f h1:+Nyd8tzPX9R7BWHguqsrbFdRx3WQ/1ib8I44HXV5yTA= -golang.org/x/sys v0.0.0-20200930185726-fdedc70b468f/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -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.3 h1:cokOdA+Jmi5PJGXLlLllQSgYigAEfHXJAERHVMaCc2k= -golang.org/x/text v0.3.3/go.mod h1:5Zoc/QRtKVWzQhOtBMvqHzDpF6irO9z98xDceosuGiQ= -golang.org/x/tools v0.0.0-20180917221912-90fa682c2a6e/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ= -golang.org/x/tools v0.0.0-20181030221726-6c7e314b6563/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ= -golang.org/x/tools v0.0.0-20190114222345-bf090417da8b/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ= -golang.org/x/tools v0.0.0-20190226205152-f727befe758c/go.mod h1:9Yl7xja0Znq3iFh3HoIrodX9oNMXvdceNzlUR8zjMvY= -golang.org/x/tools v0.0.0-20190311212946-11955173bddd/go.mod h1:LCzVGOaR6xXOjkQ3onu1FJEFr0SW1gC7cKk1uF8kGRs= -golang.org/x/tools v0.0.0-20190328211700-ab21143f2384/go.mod h1:LCzVGOaR6xXOjkQ3onu1FJEFr0SW1gC7cKk1uF8kGRs= -golang.org/x/tools v0.0.0-20190524140312-2c0ae7006135/go.mod h1:RgjU9mgBXZiqYHBnxXauZ1Gv1EHHAz9KjViQ78xBX0Q= -golang.org/x/tools v0.0.0-20190621195816-6e04913cbbac/go.mod h1:/rFqwRUd4F7ZHNgwSSTFct+R/Kf4OFW1sUzUTQQTgfc= -golang.org/x/tools v0.0.0-20191029041327-9cc4af7d6b2c/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo= -golang.org/x/tools v0.0.0-20191029190741-b9c20aec41a5/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-20191130070609-6e064ea0cf2d/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo= -golang.org/x/tools v0.0.0-20200130002326-2f3ba24bd6e7/go.mod h1:TB2adYChydJhpapKDTa4BR/hXlZSLoq2Wpct/0txZ28= -golang.org/x/tools v0.0.0-20201211185031-d93e913c1a58 h1:1Bs6RVeBFtLZ8Yi1Hk07DiOqzvwLD/4hln4iahvFlag= -golang.org/x/tools v0.0.0-20201211185031-d93e913c1a58/go.mod h1:emZCQorbCU4vsT4fOWvOPXz4eW1wZW4PmDk9uLelYpA= -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-20191204190536-9bdfabe68543/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0= -golang.org/x/xerrors v0.0.0-20200804184101-5ec99f83aff1 h1:go1bK/D/BFZV2I8cIQd1NKEZ+0owSTG1fDTci4IqFcE= -golang.org/x/xerrors v0.0.0-20200804184101-5ec99f83aff1/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0= -google.golang.org/appengine v1.1.0/go.mod h1:EbEs0AVv82hx2wNQdGPgUI5lhzA/G0D9YwlJXL52JkM= -google.golang.org/appengine v1.4.0/go.mod h1:xpcJRLb0r/rnEns0DIKYYv+WjYCduHsrkT7/EB5XEv4= -google.golang.org/genproto v0.0.0-20180817151627-c66870c02cf8/go.mod h1:JiN7NxoALGmiZfu7CAH4rXhgtRTLTxftemlI0sWmxmc= -google.golang.org/genproto v0.0.0-20190819201941-24fa4b261c55/go.mod h1:DMBHOl98Agz4BDEuKkezgsaosCRResVns1a3J2ZsMNc= -google.golang.org/grpc v1.19.0/go.mod h1:mqu4LbDTu4XGKhr4mRzUsmM4RtVoemTSY81AxZiDr8c= -google.golang.org/grpc v1.23.0/go.mod h1:Y5yQAOtifL1yxbo5wqy6BxZv8vAUGQwXBOALyacEbxg= -google.golang.org/grpc v1.26.0/go.mod h1:qbnxyOmOxrQa7FizSgH+ReBfzJrCY1pSN7KXBS8abTk= -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-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.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= -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/errgo.v2 v2.1.0/go.mod h1:hNsd1EY+bozCKY1Ytp96fpM3vjJbqLJn88ws8XvfDNI= -gopkg.in/fsnotify.v1 v1.4.7/go.mod h1:Tz8NjZHkW78fSQdbUxIjBTcgA1z1m8ZHf0WmKUhAMys= -gopkg.in/mgo.v2 v2.0.0-20190816093944-a6b53ec6cb22/go.mod h1:yeKp02qBN3iKW1OzL3MGk2IdtZzaj7SFntXj72NppTA= -gopkg.in/tomb.v1 v1.0.0-20141024135613-dd632973f1e7/go.mod h1:dt/ZhP58zS4L8KSrWDmTeBkI65Dw0HsyUHuEVlX15mw= -gopkg.in/yaml.v2 v2.2.1/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.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= -honnef.co/go/tools v0.0.0-20190102054323-c2f93a96b099/go.mod h1:rf3lG4BRIbNafJWhAfAdb/ePZxsR/4RtNHQocxwk9r4= -honnef.co/go/tools v0.0.0-20190523083050-ea95bdfd59fc/go.mod h1:rf3lG4BRIbNafJWhAfAdb/ePZxsR/4RtNHQocxwk9r4= -honnef.co/go/tools v0.0.1-2019.2.3/go.mod h1:a3bituU0lyd329TUQxRnasdCoJDkEUEAqEt0JzvZhAg= -honnef.co/go/tools v0.0.1-2020.1.5/go.mod h1:X/FiERA/W4tHapMX5mGpAtMSVEeEUOyHaw9vFzvIQ3k= diff --git a/microservice/gojson/gojson.go b/microservice/gojson/gojson.go deleted file mode 100644 index 2252c03..0000000 --- a/microservice/gojson/gojson.go +++ /dev/null @@ -1,224 +0,0 @@ -package gojson - -import ( - "encoding/json" - "errors" - "fmt" - "reflect" - "strconv" -) - -type Js struct { - data interface{} -} - -//Initialize the json configruation -func Json(data string) *Js { - j := new(Js) - var f interface{} - err := json.Unmarshal([]byte(data), &f) - if err != nil { - return j - } - j.data = f - return j -} - -//According to the key of the returned data information,return js.data -func (j *Js) Get(key string) *Js { - m := j.Getdata() - if v, ok := m[key]; ok { - j.data = v - return j - } - j.data = nil - return j -} - -//判断是否有郊 -func (j *Js) IsValid() bool { - if nil == j.data { - return false - } else { - return true - } -} - -//return json data -func (j *Js) Getdata() map[string]interface{} { - if m, ok := (j.data).(map[string]interface{}); ok { - return m - } - return nil -} - -func (j *Js) Getindex(i int) *Js { - - num := i - 1 - if m, ok := (j.data).([]interface{}); ok { - //防止越界 - if num < len((j.data).([]interface{})) { - v := m[num] - j.data = v - } else { - j.data = nil - } - return j - } - - if m, ok := (j.data).(map[string]interface{}); ok { - var n = 0 - var data = make(map[string]interface{}) - for i, v := range m { - if n == num { - switch vv := v.(type) { - case float64: - data[i] = strconv.FormatFloat(vv, 'f', -1, 64) - j.data = data - return j - case string: - data[i] = vv - j.data = data - return j - case []interface{}: - j.data = vv - return j - } - - } - n++ - } - - } - j.data = nil - return j -} - -// When the data {"result":["username","password"]} can use arrayindex(1) get the username -func (j *Js) Arrayindex(i int) string { - num := i - 1 - if i > len((j.data).([]interface{})) { - data := errors.New("index out of range list").Error() - return data - } - if m, ok := (j.data).([]interface{}); ok { - v := m[num] - switch vv := v.(type) { - case float64: - return strconv.FormatFloat(vv, 'f', -1, 64) - case string: - return vv - default: - return "" - } - - } - - if _, ok := (j.data).(map[string]interface{}); ok { - return "error" - } - return "error" - -} - -//The data must be []interface{} ,According to your custom number to return your key and array data -func (j *Js) Getkey(key string, i int) *Js { - num := i - 1 - if i > len((j.data).([]interface{})) { - j.data = errors.New("index out of range list").Error() - return j - } - if m, ok := (j.data).([]interface{}); ok { - v := m[num].(map[string]interface{}) - if h, ok := v[key]; ok { - j.data = h - return j - } - - } - j.data = nil - return j -} - -//According to the custom of the PATH to find the PATH -func (j *Js) Getpath(args ...string) *Js { - d := j - for i := range args { - m := d.Getdata() - - if val, ok := m[args[i]]; ok { - d.data = val - } else { - d.data = nil - return d - } - } - return d -} - -func (j *Js) Tostring() string { - if m, ok := j.data.(string); ok { - return m - } - if m, ok := j.data.(float64); ok { - return strconv.FormatFloat(m, 'f', -1, 64) - } - if m, ok := j.data.(bool); ok { - return strconv.FormatBool(m) - } - return "" -} - -func (j *Js) ToArray() (k, d []string) { - var key, data []string - if m, ok := (j.data).([]interface{}); ok { - for _, value := range m { - for index, v := range value.(map[string]interface{}) { - switch vv := v.(type) { - case float64: - data = append(data, strconv.FormatFloat(vv, 'f', -1, 64)) - key = append(key, index) - case string: - data = append(data, vv) - key = append(key, index) - - } - } - } - - return key, data - } - - if m, ok := (j.data).(map[string]interface{}); ok { - for index, v := range m { - switch vv := v.(type) { - case float64: - data = append(data, strconv.FormatFloat(vv, 'f', -1, 64)) - key = append(key, index) - case string: - data = append(data, vv) - key = append(key, index) - } - } - return key, data - } - - return nil, nil -} - -func (j *Js) StringtoArray() []string { - var data []string - for _, v := range j.data.([]interface{}) { - switch vv := v.(type) { - case string: - data = append(data, vv) - case float64: - data = append(data, strconv.FormatFloat(vv, 'f', -1, 64)) - } - } - return data -} - -func (j *Js) Type() { - fmt.Println(reflect.TypeOf(j.data)) -} \ No newline at end of file diff --git a/microservice/main.go b/microservice/main.go deleted file mode 100644 index 06b1ef1..0000000 --- a/microservice/main.go +++ /dev/null @@ -1,46 +0,0 @@ -package main - -import ( - "github.com/beego/beego/v2/core/logs" - beego "github.com/beego/beego/v2/server/web" - "microservice/notify" - "microservice/order_settle" - "microservice/pay_for" - "microservice/query" - _ "microservice/supplier" -) - -func main() { - RegisterLogs() - //logs.SetLogger(logs.AdapterFile, `{"level": 7, "color":true, "filename":"jhmicro.log"}`) - go notify.CreateOrderNotifyConsumer() - go query.CreateSupplierOrderQueryCuConsumer() - go pay_for.PayForInit() - go query.CreatePayForQueryConsumer() - go order_settle.OrderSettleInit() - beego.Run() -} - -/** -** 注册日志信息 - */ -func RegisterLogs() { - logs.SetLogger(logs.AdapterFile, - `{ - "filename":"../logs/legend.log", - "level":4, - "maxlines":0, - "maxsize":0, - "daily":true, - "maxdays":10, - "color":true - }`) - - f := &logs.PatternLogFormatter{ - Pattern: "%F:%n|%w%t>> %m", - WhenFormat: "2006-01-02", - } - - logs.RegisterFormatter("pattern", f) - _ = logs.SetGlobalFormatter("pattern") -} diff --git a/microservice/message_queue/active_mq.go b/microservice/message_queue/active_mq.go deleted file mode 100644 index 166bcb2..0000000 --- a/microservice/message_queue/active_mq.go +++ /dev/null @@ -1,45 +0,0 @@ -/*************************************************** - ** @Desc : This file for ... - ** @Time : 2019/11/6 11:43 - ** @Author : yuebin - ** @File : active_mq - ** @Last Modified by : yuebin - ** @Last Modified time: 2019/11/6 11:43 - ** @Software: GoLand -****************************************************/ -package message_queue - -import ( - "github.com/beego/beego/v2/core/logs" - "github.com/go-stomp/stomp" - "microservice/common" - "os" - "time" -) - -//解决第一个问题的代码 -var activeConn *stomp.Conn - -var options = []func(*stomp.Conn) error{ - //设置读写超时,超时时间为1个小时 - stomp.ConnOpt.HeartBeat(7200*time.Second, 7200*time.Second), - stomp.ConnOpt.HeartBeatError(360 * time.Second), -} - -func init() { - address := common.GetMQAddress() - - conn, err := stomp.Dial("tcp", address, options...) - if err != nil { - logs.Error("链接active mq 失败:", err.Error()) - os.Exit(1) - } - - activeConn = conn -} - -func GetActiveMQConn() *stomp.Conn { - return activeConn -} - - diff --git a/microservice/message_queue/send_message.go b/microservice/message_queue/send_message.go deleted file mode 100644 index 0ad0024..0000000 --- a/microservice/message_queue/send_message.go +++ /dev/null @@ -1,33 +0,0 @@ -/*************************************************** - ** @Desc : This file for ... - ** @Time : 2019/11/21 15:53 - ** @Author : yuebin - ** @File : send_message - ** @Last Modified by : yuebin - ** @Last Modified time: 2019/11/21 15:53 - ** @Software: GoLand -****************************************************/ -package message_queue - -import ( - "github.com/beego/beego/v2/core/logs" - "os" -) - -func SendMessage(topic, message string) { - - conn := GetActiveMQConn() - - if conn == nil { - logs.Error("send message get Active mq fail") - os.Exit(1) - } - - err := conn.Send(topic, "text/plain", []byte(message)) - - if err != nil { - logs.Error("发送消息给activeMQ失败, message=", message) - } else { - logs.Info("发送消息给activeMQ成功,message=", message) - } -} diff --git a/microservice/models/account.go b/microservice/models/account.go deleted file mode 100644 index 770c85c..0000000 --- a/microservice/models/account.go +++ /dev/null @@ -1,119 +0,0 @@ -/*************************************************** - ** @Desc : This file for ... - ** @Time : 2019/10/16 11:11 - ** @Author : yuebin - ** @File : account - ** @Last Modified by : yuebin - ** @Last Modified time: 2019/10/16 11:11 - ** @Software: GoLand -****************************************************/ -package models - -import ( - "github.com/beego/beego/v2/client/orm" - "github.com/beego/beego/v2/core/logs" -) - -type AccountInfo struct { - Id int - Status string - AccountUid string - AccountName string - Balance float64 //账户总余额 - SettleAmount float64 //已经结算的金额 - LoanAmount float64 //账户押款金额 - FreezeAmount float64 //账户冻结金额 - WaitAmount float64 //待结算资金 - PayforAmount float64 //代付在途金额 - //AbleBalance float64 //账户可用金额 - UpdateTime string - CreateTime string -} - -const ACCOUNT_INFO = "account_info" - -func InsetAcount(account AccountInfo) bool { - o := orm.NewOrm() - _, err := o.Insert(&account) - if err != nil { - logs.Error("insert account fail: ", err) - return false - } - return true -} - -func GetAccountByUid(accountUid string) AccountInfo { - o := orm.NewOrm() - var account AccountInfo - _, err := o.QueryTable(ACCOUNT_INFO).Filter("account_uid", accountUid).Limit(1).All(&account) - if err != nil { - logs.Error("get account by uid fail: ", err) - } - - return account -} - -func GetAccountLenByMap(params map[string]string) int { - o := orm.NewOrm() - qs := o.QueryTable(ACCOUNT_INFO) - for k, v := range params { - if len(v) > 0 { - qs = qs.Filter(k, v) - } - } - cnt, err := qs.Limit(-1).OrderBy("-update_time").Count() - if err != nil { - logs.Error("get account len by map fail: ", err) - } - return int(cnt) -} - -func GetAccountByMap(params map[string]string, displayCount, offset int) []AccountInfo { - o := orm.NewOrm() - var accountList []AccountInfo - qs := o.QueryTable(ACCOUNT_INFO) - for k, v := range params { - if len(v) > 0 { - qs = qs.Filter(k, v) - } - } - - _, err := qs.Limit(displayCount, offset).OrderBy("-update_time").All(&accountList) - if err != nil { - logs.Error("get account by map fail: ", err) - } - return accountList -} - -func GetAllAccount() []AccountInfo { - o := orm.NewOrm() - var accountList []AccountInfo - - _, err := o.QueryTable(ACCOUNT_INFO).Limit(-1).All(&accountList) - - if err != nil { - logs.Error("get all account fail: ", err) - } - - return accountList -} - -func UpdateAccount(account AccountInfo) bool { - o := orm.NewOrm() - _, err := o.Update(&account) - if err != nil { - logs.Error("update account fail: ", err) - return false - } - return true -} - -func DeleteAccountByUid(accountUid string) bool { - o := orm.NewOrm() - _, err := o.QueryTable(ACCOUNT_INFO).Filter("account_uid", accountUid).Delete() - if err != nil { - logs.Error("delete account fail: ", err) - return false - } - return true -} diff --git a/microservice/models/account_history_info.go b/microservice/models/account_history_info.go deleted file mode 100644 index abb630f..0000000 --- a/microservice/models/account_history_info.go +++ /dev/null @@ -1,69 +0,0 @@ -/*************************************************** - ** @Desc : This file for ... - ** @Time : 2019/10/19 14:56 - ** @Author : yuebin - ** @File : account_history_info - ** @Last Modified by : yuebin - ** @Last Modified time: 2019/10/19 14:56 - ** @Software: GoLand -****************************************************/ -package models - -import ( - "github.com/beego/beego/v2/client/orm" - "github.com/beego/beego/v2/core/logs" -) - -type AccountHistoryInfo struct { - Id int - AccountUid string - AccountName string - Type string - Amount float64 - Balance float64 - UpdateTime string - CreateTime string -} - -const ACCOUNT_HISTORY_INFO = "account_history_info" - -func InsertAccountHistory(accountHistory AccountHistoryInfo) bool { - o := orm.NewOrm() - _, err := o.Insert(accountHistory) - if err != nil { - logs.Error("insert account history fail: ", err) - return false - } - return true -} - -func GetAccountHistoryLenByMap(params map[string]string) int { - o := orm.NewOrm() - qs := o.QueryTable(ACCOUNT_HISTORY_INFO) - for k, v := range params { - if len(v) > 0 { - qs = qs.Filter(k, v) - } - } - cnt, err := qs.Limit(-1).Count() - if err != nil { - logs.Error("get account history len by map fail: ", err) - } - return int(cnt) -} - -func GetAccountHistoryByMap(params map[string]string, displayCount, offset int) []AccountHistoryInfo { - o := orm.NewOrm() - qs := o.QueryTable(ACCOUNT_HISTORY_INFO) - var accountHistoryList []AccountHistoryInfo - for k, v := range params { - if len(v) > 0 { - qs = qs.Filter(k, v) - } - } - _, err := qs.Limit(displayCount, offset).OrderBy("-update_time").All(&accountHistoryList) - if err != nil { - logs.Error("get account history by map fail: ", err) - } - return accountHistoryList -} diff --git a/microservice/models/agent_info.go b/microservice/models/agent_info.go deleted file mode 100644 index 2c43f1e..0000000 --- a/microservice/models/agent_info.go +++ /dev/null @@ -1,162 +0,0 @@ -/*************************************************** - ** @Desc : This file for ... - ** @Time : 2019/9/19 14:41 - ** @Author : yuebin - ** @File : agent_info - ** @Last Modified by : yuebin - ** @Last Modified time: 2019/9/19 14:41 - ** @Software: GoLand -****************************************************/ -package models - -import ( - "github.com/beego/beego/v2/client/orm" - "github.com/beego/beego/v2/core/logs" -) - -type AgentInfo struct { - Id int - Status string - AgentName string - AgentPassword string - PayPassword string - AgentRemark string - AgentUid string - AgentPhone string - UpdateTime string - CreateTime string -} - -const AGENT_INFO = "agent_info" - -func IsEixstByAgentName(agentName string) bool { - o := orm.NewOrm() - exist := o.QueryTable(AGENT_INFO).Filter("agent_name", agentName).Exist() - - return exist -} - -func IsExistByAgentUid(uid string) bool { - o := orm.NewOrm() - exist := o.QueryTable(AGENT_INFO).Filter("agent_uid", uid).Exist() - - return exist -} - -func IsEixstByAgentPhone(agentPhone string) bool { - o := orm.NewOrm() - exist := o.QueryTable(AGENT_INFO).Filter("agent_phone", agentPhone).Exist() - return exist -} - -func InsertAgentInfo(agentInfo AgentInfo) bool { - o := orm.NewOrm() - _, err := o.Insert(&agentInfo) - if err != nil { - logs.Error("insert agent info fail: ", err) - return false - } - - return true -} - -func GetAgentInfoByAgentUid(agentUid string) AgentInfo { - o := orm.NewOrm() - var agentInfo AgentInfo - _, err := o.QueryTable(AGENT_INFO).Filter("agent_uid", agentUid).Limit(1).All(&agentInfo) - - if err != nil { - logs.Error("get agent info by agentUid fail: ", err) - } - - return agentInfo -} - -func GetAgentInfoByPhone(phone string) AgentInfo { - o := orm.NewOrm() - var agentInfo AgentInfo - _, err := o.QueryTable(AGENT_INFO).Filter("agent_phone", phone).Limit(1).All(&agentInfo) - - if err != nil { - logs.Error("get agent info by phone fail: ", err) - } - - return agentInfo -} - -func GetAgentInfoLenByMap(params map[string]string) int { - o := orm.NewOrm() - qs := o.QueryTable(AGENT_INFO) - for k, v := range params { - if len(v) > 0 { - qs = qs.Filter(k, v) - } - } - cnt, err := qs.Limit(-1).Count() - if err != nil { - logs.Error("get agentinfo len by map fail: ", err) - } - - return int(cnt) -} - -func GetAgentInfoByMap(params map[string]string, displayCount, offset int) []AgentInfo { - o := orm.NewOrm() - var agentInfoList []AgentInfo - - qs := o.QueryTable(AGENT_INFO) - for k, v := range params { - if len(v) > 0 { - qs = qs.Filter(k, v) - } - } - - _, err := qs.Limit(displayCount, offset).OrderBy("-update_time").All(&agentInfoList) - - if err != nil { - logs.Error("get agentInfo by map fail: ", err) - } - - return agentInfoList -} - -func GetAllAgentByMap(parmas map[string]string) []AgentInfo { - o := orm.NewOrm() - var agentList []AgentInfo - - qs := o.QueryTable(AGENT_INFO) - for k, v := range parmas { - if len(v) > 0 { - qs = qs.Filter(k, v) - } - } - - _, err := qs.Limit(-1).All(&agentList) - if err != nil { - logs.Error("get all agent by map fail: ", err) - } - - return agentList -} - -func UpdateAgentInfo(agentInfo AgentInfo) bool { - o := orm.NewOrm() - _, err := o.Update(&agentInfo) - - if err != nil { - logs.Error("update agentinfo fail: ", err) - return false - } - - return true -} - -func DeleteAgentByAgentUid(agentUid string) bool { - o := orm.NewOrm() - _, err := o.QueryTable(AGENT_INFO).Filter("agent_uid", agentUid).Delete() - if err != nil { - logs.Error("delete agent by agent uid fail: ", err) - return false - } - return true -} diff --git a/microservice/models/agent_profit.go b/microservice/models/agent_profit.go deleted file mode 100644 index 1897b85..0000000 --- a/microservice/models/agent_profit.go +++ /dev/null @@ -1,13 +0,0 @@ -/*************************************************** - ** @Desc : This file for ... - ** @Time : 2019/12/17 17:50 - ** @Author : yuebin - ** @File : agent_profit - ** @Last Modified by : yuebin - ** @Last Modified time: 2019/12/17 17:50 - ** @Software: GoLand -****************************************************/ -package models - -type AgentProfit struct { -} diff --git a/microservice/models/bank_card_info.go b/microservice/models/bank_card_info.go deleted file mode 100644 index ff881ea..0000000 --- a/microservice/models/bank_card_info.go +++ /dev/null @@ -1,106 +0,0 @@ -/*************************************************** - ** @Desc : This file for ... - ** @Time : 2019/9/6 10:19 - ** @Author : yuebin - ** @File : bank_card_info - ** @Last Modified by : yuebin - ** @Last Modified time: 2019/9/6 10:19 - ** @Software: GoLand -****************************************************/ -package models - -import ( - "github.com/beego/beego/v2/client/orm" - "github.com/beego/beego/v2/core/logs" -) - -type BankCardInfo struct { - Id int - Uid string - UserName string - BankName string - BankCode string - BankAccountType string - AccountName string - BankNo string - IdentifyCard string - CertificateNo string - PhoneNo string - BankAddress string - UpdateTime string - CreateTime string -} - -const BANK_CARD_INFO = "bank_card_info" - -func InsertBankCardInfo(bankCardInfo BankCardInfo) bool { - o := orm.NewOrm() - _, err := o.Insert(&bankCardInfo) - - if err != nil { - logs.Error("insert bank card info fail: ", err) - return false - } - return true -} - -func GetBankCardLenByMap(params map[string]string) int { - o := orm.NewOrm() - qs := o.QueryTable(BANK_CARD_INFO) - for k, v := range params { - qs = qs.Filter(k, v) - } - cnt, err := qs.Limit(-1).Count() - if err != nil { - logs.Error("get bank card len by map fail: ", err) - } - return int(cnt) -} - -func GetBankCardByMap(params map[string]string, displayCount, offset int) []BankCardInfo { - o := orm.NewOrm() - var bankCardList []BankCardInfo - qs := o.QueryTable(BANK_CARD_INFO) - for k, v := range params { - if len(v) > 0 { - qs = qs.Filter(k, v) - } - } - _, err := qs.Limit(displayCount, offset).OrderBy("-update_time").All(&bankCardList) - if err != nil { - logs.Error("get bank card by map fail: ", err) - } - return bankCardList -} - -func GetBankCardByUid(uid string) BankCardInfo { - o := orm.NewOrm() - var bankCardInfo BankCardInfo - _, err := o.QueryTable(bankCardInfo).Filter("uid", uid).Limit(1).All(&bankCardInfo) - if err != nil { - logs.Error("get bank card by uid fail: ", err) - } - - return bankCardInfo -} - -func DeleteBankCardByUid(uid string) bool { - o := orm.NewOrm() - _, err := o.QueryTable(BANK_CARD_INFO).Filter("uid", uid).Delete() - - if err != nil { - logs.Error("delete bank card by uid fail: ", err) - return false - } - return true -} - -func UpdateBankCard(bankCard BankCardInfo) bool { - o := orm.NewOrm() - _, err := o.Update(&bankCard) - if err != nil { - logs.Error("update bank card fail: ", err) - return false - } - return true -} diff --git a/microservice/models/init.go b/microservice/models/init.go deleted file mode 100644 index 0d681a4..0000000 --- a/microservice/models/init.go +++ /dev/null @@ -1,39 +0,0 @@ -/*************************************************** - ** @Desc : This file for ... - ** @Time : 2019/8/9 13:48 - ** @Author : yuebin - ** @File : init - ** @Last Modified by : yuebin - ** @Last Modified time: 2019/8/9 13:48 - ** @Software: GoLand -****************************************************/ -package models - -import ( - "fmt" - "github.com/beego/beego/v2/client/orm" - "github.com/beego/beego/v2/core/logs" - _ "github.com/go-sql-driver/mysql" - "microservice/conf" -) - -func init() { - dbHost := conf.DB_HOST - dbUser := conf.DB_USER - dbPassword := conf.DB_PASSWORD - dbBase := conf.DB_BASE - dbPort := conf.DB_PORT - - link := fmt.Sprintf("%s:%s@tcp(%s:%s)/%s?charset=utf8", dbUser, dbPassword, dbHost, dbPort, dbBase) - - logs.Info("mysql init.....", link) - - orm.RegisterDriver("mysql", orm.DRMySQL) - orm.RegisterDataBase("default", "mysql", link) - orm.RegisterModel(new(UserInfo), new(MenuInfo), new(SecondMenuInfo), - new(PowerInfo), new(RoleInfo), new(BankCardInfo), new(RoadInfo), - new(RoadPoolInfo), new(AgentInfo), new(MerchantInfo), new(MerchantDeployInfo), - new(AccountInfo), new(AccountHistoryInfo), new(OrderInfo), new(OrderProfitInfo), - new(OrderSettleInfo), new(NotifyInfo), new(MerchantLoadInfo), - new(PayforInfo)) -} diff --git a/microservice/models/menu_info.go b/microservice/models/menu_info.go deleted file mode 100644 index e974db5..0000000 --- a/microservice/models/menu_info.go +++ /dev/null @@ -1,179 +0,0 @@ -/*************************************************** - ** @Desc : This file for ... - ** @Time : 2019/8/21 9:33 - ** @Author : yuebin - ** @File : menu_info - ** @Last Modified by : yuebin - ** @Last Modified time: 2019/8/21 9:33 - ** @Software: GoLand -****************************************************/ -package models - -import ( - "github.com/beego/beego/v2/client/orm" - "github.com/beego/beego/v2/core/logs" -) - -type MenuInfo struct { - Id int - MenuOrder int - MenuUid string - FirstMenu string - SecondMenu string - Creater string - Status string - CreateTime string - UpdateTime string -} - -//实现排序的三个接口函数 -type MenuInfoSlice []MenuInfo - -func (m MenuInfoSlice) Len() int { - return len(m) -} - -func (m MenuInfoSlice) Swap(i, j int) { - m[i], m[j] = m[j], m[i] -} - -func (m MenuInfoSlice) Less(i, j int) bool { - return m[i].MenuOrder < m[j].MenuOrder //从小到大排序 -} - -const MENUINFO = "menu_info" - -func InsertMenu(menuInfo MenuInfo) bool { - o := orm.NewOrm() - _, err := o.Insert(&menuInfo) - if err != nil { - logs.Error("insert new menu info fail:", err) - return false - } - return true -} - -func FirstMenuIsExists(firstMenu string) bool { - o := orm.NewOrm() - exist := o.QueryTable(MENUINFO).Filter("first_menu", firstMenu).Exist() - return exist -} - -func FirstMenuUidIsExists(firstMenUid string) bool { - o := orm.NewOrm() - exist := o.QueryTable(MENUINFO).Filter("menu_uid", firstMenUid).Exist() - return exist -} - -func MenuOrderIsExists(menuOrder int) bool { - o := orm.NewOrm() - exist := o.QueryTable(MENUINFO).Filter("menu_order", menuOrder).Exist() - return exist -} - -func GetMenuLen() int { - o := orm.NewOrm() - cnt, err := o.QueryTable(MENUINFO).Count() - if err != nil { - logs.Error("get menu info len length fail: ", err) - } - return int(cnt) -} - -func GetMenuInfoByMenuUid(menuUid string) MenuInfo { - o := orm.NewOrm() - var menuInfo MenuInfo - _, err := o.QueryTable(MENUINFO).Filter("menu_uid", menuUid).Limit(1).All(&menuInfo) - if err != nil { - logs.Error("get menu info by menuUid fail: ", err) - } - return menuInfo -} - -func GetMenuInfosByMenuUids(menuUids []string) []MenuInfo { - menuInfoList := make([]MenuInfo, 0) - for _, v := range menuUids { - m := GetMenuInfoByMenuUid(v) - menuInfoList = append(menuInfoList, m) - } - return menuInfoList -} - -func GetMenuInfoByMenuOrder(menuOrder int) MenuInfo { - o := orm.NewOrm() - var menuInfo MenuInfo - _, err := o.QueryTable(MENUINFO).Filter("menu_order", menuOrder).Limit(1).All(&menuInfo) - if err != nil { - logs.Error("get menu info by menu order fail: ", err) - } - return menuInfo -} - -func GetMenuAll() []MenuInfo { - o := orm.NewOrm() - var menuInfoList []MenuInfo - _, err := o.QueryTable(MENUINFO).OrderBy("-update_time").All(&menuInfoList) - if err != nil { - logs.Error("get all menu list fail:", err) - } - return menuInfoList -} - -func GetMenuOffset(displayCount, offset int) []MenuInfo { - o := orm.NewOrm() - var menuInfoList []MenuInfo - _, err := o.QueryTable(MENUINFO).Limit(displayCount, offset).All(&menuInfoList) - if err != nil { - logs.Error("get menu offset fail: ", err) - } - return menuInfoList -} - -func GetMenuOffsetByMap(params map[string]string, displayCount, offset int) []MenuInfo { - o := orm.NewOrm() - var menuInfoList []MenuInfo - qs := o.QueryTable(MENUINFO) - for k, v := range params { - if len(v) > 0 { - qs = qs.Filter(k, v) - } - } - _, err := qs.Limit(displayCount, offset).OrderBy("-update_time").All(&menuInfoList) - if err != nil { - logs.Error("get menu offset by map fail: ", err) - } - return menuInfoList -} - -func GetMenuLenByMap(params map[string]string) int { - o := orm.NewOrm() - qs := o.QueryTable(MENUINFO) - for k, v := range params { - if len(v) > 0 { - qs = qs.Filter(k, v) - } - } - cnt, err := qs.Count() - if err != nil { - logs.Error("get menu len by map fail: ", err) - } - return int(cnt) -} - -func UpdateMenuInfo(menuInfo MenuInfo) { - o := orm.NewOrm() - cnt, err := o.Update(&menuInfo) - if err != nil { - logs.Error("update menu info fail: ", err) - } - logs.Info("update menu info success, num: ", cnt) -} - -func DeleteMenuInfo(menuUid string) { - o := orm.NewOrm() - cnt, err := o.QueryTable(MENUINFO).Filter("menu_uid", menuUid).Delete() - if err != nil { - logs.Error("delete menu info fail: ", err) - } - logs.Info("delete menu info num: ", cnt) -} diff --git a/microservice/models/merchant_deploy_info.go b/microservice/models/merchant_deploy_info.go deleted file mode 100644 index e8fa6da..0000000 --- a/microservice/models/merchant_deploy_info.go +++ /dev/null @@ -1,135 +0,0 @@ -/*************************************************** - ** @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 -****************************************************/ -package models - -import ( - "github.com/beego/beego/v2/client/orm" - "github.com/beego/beego/v2/core/logs" -) - -type MerchantDeployInfo struct { - Id int - Status string - MerchantUid string - PayType string - SingleRoadUid string - SingleRoadName string - SingleRoadPlatformRate float64 - SingleRoadAgentRate float64 - RollRoadCode string - RollRoadName string - RollRoadPlatformRate float64 - RollRoadAgentRate float64 - IsLoan string - LoanRate float64 - LoanDays int - UnfreezeHour int - WaitUnfreezeAmount float64 - LoanAmount float64 - UpdateTime string - CreateTime string -} - -const MERCHANT_DEPLOY_INFO = "merchant_deploy_info" - -func InsertMerchantDeployInfo(merchantDeployInfo MerchantDeployInfo) bool { - o := orm.NewOrm() - _, err := o.Insert(&merchantDeployInfo) - if err != nil { - logs.Error("insert merchant deploy info fail: ", err) - return false - } - return true -} - -func IsExistByUidAndPayType(uid, payType string) bool { - o := orm.NewOrm() - isEixst := o.QueryTable(MERCHANT_DEPLOY_INFO).Filter("merchant_uid", uid).Filter("pay_type", payType).Exist() - return isEixst -} - -func GetMerchantDeployByUidAndPayType(uid, payType string) MerchantDeployInfo { - o := orm.NewOrm() - var merchantDeployInfo MerchantDeployInfo - _, err := o.QueryTable(MERCHANT_DEPLOY_INFO).Filter("merchant_uid", uid).Filter("pay_type", payType).Limit(1).All(&merchantDeployInfo) - if err != nil { - logs.Error("get merchant deploy by uid and paytype fail:", err) - } - return merchantDeployInfo -} - -func GetMerchantDeployByUid(uid string) (ms []MerchantDeployInfo) { - o := orm.NewOrm() - _, err := o.QueryTable(MERCHANT_DEPLOY_INFO).Filter("merchant_uid", uid).All(&ms) - if err != nil { - logs.Error("get merchant deploy by uid fail:", err) - } - return ms -} - -func GetMerchantDeployByHour(hour int) []MerchantDeployInfo { - o := orm.NewOrm() - var merchantDeployList []MerchantDeployInfo - _, err := o.QueryTable(MERCHANT_DEPLOY_INFO).Filter("unfreeze_hour", hour).Filter("status", "active").Limit(-1).All(&merchantDeployList) - if err != nil { - logs.Error("get merchant deploy list fail: ", err) - } - - return merchantDeployList -} -func DeleteMerchantDeployByUidAndPayType(uid, payType string) bool { - o := orm.NewOrm() - _, err := o.QueryTable(MERCHANT_DEPLOY_INFO).Filter("merchant_uid", uid).Filter("pay_type", payType).Delete() - if err != nil { - logs.Error("delete merchant deploy by uid and payType fail: ", err) - return false - } - return true -} - -func UpdateMerchantDeploy(merchantDeploy MerchantDeployInfo) bool { - o := orm.NewOrm() - _, err := o.Update(&merchantDeploy) - if err != nil { - logs.Error("update merchant deploy fail: ", err) - return false - } - return true -} - -func GetMerchantDeployLenByMap(params map[string]string) int { - o := orm.NewOrm() - qs := o.QueryTable(MERCHANT_DEPLOY_INFO) - for k, v := range params { - if len(v) > 0 { - qs = qs.Filter(k, v) - } - } - cnt, err := qs.Count() - if err != nil { - logs.Error("get merchant deploy len by map fail: ", err) - } - return int(cnt) -} - -func GetMerchantDeployListByMap(params map[string]string, displayCount, offset int) (md []MerchantDeployInfo) { - o := orm.NewOrm() - qs := o.QueryTable(MERCHANT_DEPLOY_INFO) - for k, v := range params { - if len(v) > 0 { - qs = qs.Filter(k, v) - } - } - _, err := qs.Limit(displayCount, offset).OrderBy("-update_time").All(&md) - if err != nil { - logs.Error("get merchant deploy list by map fail: ", err) - } - return md -} diff --git a/microservice/models/merchant_info.go b/microservice/models/merchant_info.go deleted file mode 100644 index 2877ace..0000000 --- a/microservice/models/merchant_info.go +++ /dev/null @@ -1,205 +0,0 @@ -/*************************************************** - ** @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 -****************************************************/ -package models - -import ( - "github.com/beego/beego/v2/client/orm" - "github.com/beego/beego/v2/core/logs" -) - -type MerchantInfo struct { - Id int - Status string - BelongAgentUid string - BelongAgentName string - MerchantName string - MerchantUid string - MerchantKey string - MerchantSecret string - LoginPassword string - LoginAccount string - AutoSettle string - AutoPayFor string - WhiteIps string - Remark string - SinglePayForRoadUid string - SinglePayForRoadName string - RollPayForRoadCode string - RollPayForRoadName string - PayforFee float64 - UpdateTime string - CreateTime string -} - -const MERCHANT_INFO = "merchant_info" - -func IsExistByMerchantName(merchantName string) bool { - o := orm.NewOrm() - exist := o.QueryTable(MERCHANT_INFO).Filter("merchant_name", merchantName).Exist() - - return exist -} - -func IsExistByMerchantUid(uid string) bool { - o := orm.NewOrm() - exist := o.QueryTable(MERCHANT_INFO).Filter("merchant_uid", uid).Exist() - - return exist -} - -func IsExistMerchantByAgentUid(uid string) bool { - o := orm.NewOrm() - exist := o.QueryTable(MERCHANT_INFO).Filter("belong_agent_uid", uid).Exist() - - return exist -} - -func IsExistByMerchantPhone(phone string) bool { - o := orm.NewOrm() - exist := o.QueryTable(MERCHANT_INFO).Filter("LoginAccount", phone).Exist() - - return exist -} - -func GetMerchantByPhone(phone string) (m MerchantInfo) { - o := orm.NewOrm() - _, e := o.QueryTable(MERCHANT_INFO).Filter("LoginAccount", phone).Limit(1).All(&m) - if e != nil { - logs.Error("GetMerchantByPhone merchant fail: ", e) - } - return m -} - -func InsertMerchantInfo(merchantInfo MerchantInfo) bool { - o := orm.NewOrm() - _, err := o.Insert(&merchantInfo) - if err != nil { - logs.Error("insert merchant fail: ", err) - return false - } - return true -} - -func GetMerchantLenByMap(params map[string]string) int { - o := orm.NewOrm() - qs := o.QueryTable(MERCHANT_INFO) - for k, v := range params { - if len(v) > 0 { - qs = qs.Filter(k, v) - } - } - cnt, err := qs.Count() - if err != nil { - logs.Error("get merchant len by map fail: ", err) - } - return int(cnt) -} - -func GetMerchantListByMap(params map[string]string, displayCount, offset int) []MerchantInfo { - o := orm.NewOrm() - qs := o.QueryTable(MERCHANT_INFO) - for k, v := range params { - if len(v) > 0 { - qs = qs.Filter(k, v) - } - } - var merchantList []MerchantInfo - _, err := qs.Limit(displayCount, offset).OrderBy("-update_time").All(&merchantList) - if err != nil { - logs.Error("get merchant list by map fail: ", err) - } - return merchantList -} - -func GetAllMerchant() []MerchantInfo { - o := orm.NewOrm() - var merchantList []MerchantInfo - - _, err := o.QueryTable(MERCHANT_INFO).Limit(-1).All(&merchantList) - if err != nil { - logs.Error("get all merchant fail:", err) - } - - return merchantList -} - -func GetMerchantByParams(params map[string]string, displayCount, offset int) []MerchantInfo { - o := orm.NewOrm() - var merchantList []MerchantInfo - qs := o.QueryTable(MERCHANT_INFO) - for k, v := range params { - if len(v) > 0 { - qs = qs.Filter(k, v) - } - } - - qs.Limit(displayCount, offset).All(&merchantList) - - return merchantList -} - -func GetMerchantLenByParams(params map[string]string) int { - o := orm.NewOrm() - qs := o.QueryTable(MERCHANT_INFO) - for k, v := range params { - if len(v) > 0 { - qs = qs.Filter(k, v) - } - } - - cnt, err := qs.Limit(-1).Count() - - if err != nil { - logs.Error("get merchant len by params fail: ", err) - } - return int(cnt) -} - -func GetMerchantByUid(merchantUid string) MerchantInfo { - o := orm.NewOrm() - var merchantInfo MerchantInfo - _, err := o.QueryTable(MERCHANT_INFO).Filter("merchant_uid", merchantUid).Limit(1).All(&merchantInfo) - if err != nil { - logs.Error("get merchant info fail: ", err) - } - return merchantInfo -} - -func GetMerchantByPaykey(payKey string) MerchantInfo { - o := orm.NewOrm() - var merchantInfo MerchantInfo - _, err := o.QueryTable(MERCHANT_INFO).Filter("merchant_key", payKey).Limit(1).All(&merchantInfo) - if err != nil { - logs.Error("get merchant by merchantKey fail: ", err) - } - return merchantInfo -} - -func UpdateMerchant(merchantInfo MerchantInfo) bool { - o := orm.NewOrm() - _, err := o.Update(&merchantInfo) - - if err != nil { - logs.Error("update merchant fail: ", err) - return false - } - - return true -} - -func DeleteMerchantByUid(merchantUid string) bool { - o := orm.NewOrm() - _, err := o.QueryTable(MERCHANT_INFO).Filter("merchant_uid", merchantUid).Delete() - if err != nil { - logs.Error("delete merchant fail: ", err) - return false - } - return true -} diff --git a/microservice/models/merchant_load_info.go b/microservice/models/merchant_load_info.go deleted file mode 100644 index 8277c6f..0000000 --- a/microservice/models/merchant_load_info.go +++ /dev/null @@ -1,56 +0,0 @@ -/*************************************************** - ** @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 -****************************************************/ -package models - -import ( - "github.com/beego/beego/v2/client/orm" - "github.com/beego/beego/v2/core/logs" -) - -type MerchantLoadInfo struct { - Id int - Status string - MerchantUid string - RoadUid string - LoadDate string - LoadAmount float64 - UpdateTime string - CreateTime string -} - -const MERCHANT_LOAD_INFO = "merchant_load_info" - -func GetMerchantLoadInfoByMap(params map[string]string) []MerchantLoadInfo { - o := orm.NewOrm() - qs := o.QueryTable(MERCHANT_LOAD_INFO) - for k, v := range params { - if len(v) > 0 { - qs = qs.Filter(k, v) - } - } - var merchantLoadList []MerchantLoadInfo - _, err := qs.Limit(-11).All(&merchantLoadList) - if err != nil { - logs.Error("get merchant load info fail: ", err) - } - return merchantLoadList -} - -func IsExistMerchantLoadByParams(params map[string]string) bool { - o := orm.NewOrm() - qs := o.QueryTable(MERCHANT_LOAD_INFO) - for k, v := range params { - if len(v) > 0 { - qs = qs.Filter(k, v) - } - } - - return qs.Exist() -} diff --git a/microservice/models/notify_info.go b/microservice/models/notify_info.go deleted file mode 100644 index d2bab17..0000000 --- a/microservice/models/notify_info.go +++ /dev/null @@ -1,103 +0,0 @@ -/*************************************************** - ** @Desc : This file for ... - ** @Time : 2019/11/20 13:13 - ** @Author : yuebin - ** @File : notify_info - ** @Last Modified by : yuebin - ** @Last Modified time: 2019/11/20 13:13 - ** @Software: GoLand -****************************************************/ -package models - -import ( - "github.com/beego/beego/v2/client/orm" - "github.com/beego/beego/v2/core/logs" -) - -type NotifyInfo struct { - Id int - Type string //订单-order,代付-payfor - BankOrderId string - MerchantOrderId string - Status string - Times int - Url string - Response string - UpdateTime string - CreateTime string -} - -const NOTIFYINFO = "notify_info" - -func InsertNotifyInfo(notifyInfo NotifyInfo) bool { - o := orm.NewOrm() - _, err := o.Insert(¬ifyInfo) - if err != nil { - logs.Error("insert notify fail:", err) - return false - } - return true -} - -func NotifyInfoExistByBankOrderId(bankOrderId string) bool { - o := orm.NewOrm() - exist := o.QueryTable(NOTIFYINFO).Filter("bank_order_id", bankOrderId).Exist() - return exist -} - -func GetNotifyInfoByBankOrderId(bankOrderId string) NotifyInfo { - o := orm.NewOrm() - var notifyInfo NotifyInfo - _, err := o.QueryTable(NOTIFYINFO).Filter("bank_order_id", bankOrderId).All(¬ifyInfo) - if err != nil { - logs.Error("get notify info by bankOrderId fail: ", err) - } - - return notifyInfo -} - -func GetNotifyInfosNotSuccess(params map[string]interface{}) []NotifyInfo { - o := orm.NewOrm() - var notifyInfoList []NotifyInfo - qs := o.QueryTable(NOTIFYINFO) - for k, v := range params { - qs = qs.Filter(k, v) - } - qs = qs.Exclude("status", "success") - _, err := qs.Limit(-1).All(¬ifyInfoList) - - if err != nil { - logs.Error("get notifyinfos fail: ", err) - } - - return notifyInfoList -} - -func GetNotifyBankOrderIdListByParams(params map[string]string) []string { - o := orm.NewOrm() - qs := o.QueryTable(NOTIFYINFO) - for k, v := range params { - if len(v) > 0 { - qs = qs.Filter(k, v) - } - } - - var notifyList []NotifyInfo - qs.Limit(-1).All(¬ifyList) - var list []string - for _, n := range notifyList { - list = append(list, n.BankOrderId) - } - - return list -} - -func UpdateNotifyInfo(notifyInfo NotifyInfo) bool { - o := orm.NewOrm() - _, err := o.Update(¬ifyInfo) - if err != nil { - logs.Error("update notify info fail: ", err) - return false - } - return true -} diff --git a/microservice/models/order_info.go b/microservice/models/order_info.go deleted file mode 100644 index 1a82ce0..0000000 --- a/microservice/models/order_info.go +++ /dev/null @@ -1,222 +0,0 @@ -/*************************************************** - ** @Desc : This file for ... - ** @Time : 2019/10/28 10:15 - ** @Author : yuebin - ** @File : order_info - ** @Last Modified by : yuebin - ** @Last Modified time: 2019/10/28 10:15 - ** @Software: GoLand -****************************************************/ -package models - -import ( - "fmt" - "github.com/beego/beego/v2/client/orm" - "github.com/beego/beego/v2/core/logs" - "strconv" -) - -type OrderInfo struct { - Id int - ShopName string //商品名称 - OrderPeriod string //订单有效时间 - MerchantOrderId string //商户订单id - BankOrderId string //本系统订单id - BankTransId string //上游流水id - OrderAmount float64 //订单提交的金额 - ShowAmount float64 //待支付的金额 - FactAmount float64 //用户实际支付金额 - RollPoolCode string //轮询池编码 - RollPoolName string //轮询池名臣 - RoadUid string //通道标识 - RoadName string //通道名称 - PayProductName string //上游支付公司的名称 - PayProductCode string //上游支付公司的编码代号 - PayTypeCode string //支付产品编码 - PayTypeName string //支付产品名称 - OsType string //操作系统类型 - Status string //订单支付状态 - Refund string //退款状态 - RefundTime string //退款操作时间 - Freeze string //冻结状态 - FreezeTime string //冻结时间 - Unfreeze string //是否已经解冻 - UnfreezeTime string //解冻时间 - ReturnUrl string //支付完跳转地址 - NotifyUrl string //下游回调地址 - MerchantUid string //商户id - MerchantName string //商户名称 - AgentUid string //该商户所属代理 - AgentName string //该商户所属代理名称 - UpdateTime string - CreateTime string -} - -const ORDER_INFO = "order_info" - -func InsertOrder(orderInfo OrderInfo) bool { - o := orm.NewOrm() - _, err := o.Insert(&orderInfo) - if err != nil { - logs.Error("insert order info fail: ", err) - return false - } - return true -} - -func OrderNoIsEixst(orderId string) bool { - o := orm.NewOrm() - exits := o.QueryTable(ORDER_INFO).Filter("merchant_order_id", orderId).Exist() - return exits -} - -func BankOrderIdIsEixst(bankOrderId string) bool { - o := orm.NewOrm() - exists := o.QueryTable(ORDER_INFO).Filter("bank_order_id", bankOrderId).Exist() - return exists -} - -func GetOrderLenByMap(params map[string]string) int { - o := orm.NewOrm() - qs := o.QueryTable(ORDER_INFO) - for k, v := range params { - if len(v) > 0 { - qs = qs.Filter(k, v) - } - } - cnt, _ := qs.Limit(-1).Count() - return int(cnt) -} - -func GetOrderByMap(params map[string]string, display, offset int) []OrderInfo { - o := orm.NewOrm() - var orderInfoList []OrderInfo - qs := o.QueryTable(ORDER_INFO) - for k, v := range params { - if len(v) > 0 { - qs = qs.Filter(k, v) - } - } - _, err := qs.Limit(display, offset).OrderBy("-update_time").All(&orderInfoList) - if err != nil { - logs.Error("get order by map fail: ", err) - } - return orderInfoList -} - -func GetSuccessRateByMap(params map[string]string) string { - o := orm.NewOrm() - qs := o.QueryTable(ORDER_INFO) - for k, v := range params { - if len(v) > 0 { - qs = qs.Filter(k, v) - } - } - - successRate := "0%" - allCount, _ := qs.Limit(-1).Count() - successCount, _ := qs.Filter("status", "success").Limit(-1).Count() - if allCount == 0 { - return successRate - } - tmp := float64(successCount) / float64(allCount) * 100 - successRate = fmt.Sprintf("%.1f", tmp) - return successRate + "%" -} - -func GetAllAmountByMap(params map[string]string) float64 { - o := orm.NewOrm() - condition := "select sum(order_amount) as allAmount from order_info " - for _, v := range params { - if len(v) > 0 { - condition = condition + "where " - break - } - } - flag := false - if params["create_time__gte"] != "" { - flag = true - condition = condition + " create_time >= '" + params["create_time__gte"] + "'" - } - if params["create_time__lte"] != "" { - if flag { - condition = condition + " and " - } - condition = condition + " create_time <= '" + params["create_time__lte"] + "'" - } - if params["merchant_name__icontains"] != "" { - if flag { - condition = condition + " and " - } - condition = condition + "merchant_name like %'" + params["merchant_name__icontains"] + "'% " - } - if params["merchant_order_id"] != "" { - if flag { - condition = condition + " and " - } - condition = condition + " merchant_order_id = '" + params["merchant_order_id"] + "'" - } - if params["bank_order_id"] != "" { - if flag { - condition = condition + " and " - } - condition = condition + " bank_order_id = '" + params["bank_order_id"] + "'" - } - if params["status"] != "" { - if flag { - condition = condition + " and " - } - condition = condition + "status = '" + params["status"] + "'" - } - if params["pay_product_code"] != "" { - if flag { - condition = condition + " and " - } - condition = condition + "pay_product_code = " + params["pay_product_code"] + "'" - } - if params["pay_type_code"] != "" { - if flag { - condition = condition + " and " - } - condition = condition + "pay_type_code = " + params["pay_type_code"] - } - logs.Info("get order amount str = ", condition) - var maps []orm.Params - allAmount := 0.00 - num, err := o.Raw(condition).Values(&maps) - if err == nil && num > 0 { - allAmount, _ = strconv.ParseFloat(maps[0]["allAmount"].(string), 64) - } - return allAmount -} - -func GetOrderByBankOrderId(bankOrderId string) OrderInfo { - o := orm.NewOrm() - var orderInfo OrderInfo - _, err := o.QueryTable(ORDER_INFO).Filter("bank_order_id", bankOrderId).Limit(1).All(&orderInfo) - if err != nil { - logs.Error("get order info by bankOrderId fail: ", err) - } - return orderInfo -} - -func GetOrderByMerchantOrderId(merchantOrderId string) OrderInfo { - o := orm.NewOrm() - var orderInfo OrderInfo - _, err := o.QueryTable(ORDER_INFO).Filter("merchant_order_id", merchantOrderId).Limit(1).All(&orderInfo) - if err != nil { - logs.Error("get order by merchant_order_id: ", err.Error()) - } - return orderInfo -} - -func GetOneOrder(bankOrderId string) OrderInfo { - o := orm.NewOrm() - var orderInfo OrderInfo - _, err := o.QueryTable(ORDER_INFO).Filter("bank_order_id", bankOrderId).Limit(1).All(&orderInfo) - if err != nil { - logs.Error("get one order fail: ", err) - } - - return orderInfo -} diff --git a/microservice/models/order_profit_info.go b/microservice/models/order_profit_info.go deleted file mode 100644 index 94e8559..0000000 --- a/microservice/models/order_profit_info.go +++ /dev/null @@ -1,119 +0,0 @@ -/*************************************************** - ** @Desc : This file for ... - ** @Time : 2019/10/30 11:44 - ** @Author : yuebin - ** @File : order_profit_info - ** @Last Modified by : yuebin - ** @Last Modified time: 2019/10/30 11:44 - ** @Software: GoLand -****************************************************/ -package models - -import ( - "github.com/beego/beego/v2/client/orm" - "github.com/beego/beego/v2/core/logs" - "strings" -) - -type OrderProfitInfo struct { - Id int - MerchantName string - MerchantUid string - AgentName string - AgentUid string - PayProductCode string - PayProductName string - PayTypeCode string - PayTypeName string - Status string - MerchantOrderId string - BankOrderId string - BankTransId string - OrderAmount float64 - ShowAmount float64 - FactAmount float64 - UserInAmount float64 - SupplierRate float64 - PlatformRate float64 - AgentRate float64 - AllProfit float64 - SupplierProfit float64 - PlatformProfit float64 - AgentProfit float64 - UpdateTime string - CreateTime string -} - -const ORDER_PROFIT_INFO = "order_profit_info" - -func GetOrderProfitByBankOrderId(bankOrderId string) OrderProfitInfo { - o := orm.NewOrm() - var orderProfit OrderProfitInfo - _, err := o.QueryTable(ORDER_PROFIT_INFO).Filter("bank_order_id", bankOrderId).Limit(1).All(&orderProfit) - if err != nil { - logs.Error("GetOrderProfitByBankOrderId fail:", err) - } - return orderProfit -} - -func GetOrderProfitLenByMap(params map[string]string) int { - o := orm.NewOrm() - qs := o.QueryTable(ORDER_PROFIT_INFO) - for k, v := range params { - if len(v) > 0 { - qs = qs.Filter(k, v) - } - } - cnt, _ := qs.Limit(-1).Count() - return int(cnt) -} - -func GetOrderProfitByMap(params map[string]string, display, offset int) []OrderProfitInfo { - o := orm.NewOrm() - var orderProfitInfoList []OrderProfitInfo - qs := o.QueryTable(ORDER_PROFIT_INFO) - for k, v := range params { - if len(v) > 0 { - qs = qs.Filter(k, v) - } - } - _, err := qs.Limit(display, offset).OrderBy("-update_time").All(&orderProfitInfoList) - if err != nil { - logs.Error("get order by map fail: ", err) - } - return orderProfitInfoList -} - -func GetPlatformProfitByMap(params map[string]string) []PlatformProfit { - - o := orm.NewOrm() - - cond := "select merchant_name, agent_name, pay_product_name as supplier_name, pay_type_name, sum(fact_amount) as order_amount, count(1) as order_count, " + - "sum(platform_profit) as platform_profit, sum(agent_profit) as agent_profit from " + ORDER_PROFIT_INFO + " where status='success' " - flag := false - for k, v := range params { - if len(v) > 0 { - if flag { - cond += " and" - } - if strings.Contains(k, "create_time__gte") { - cond = cond + " create_time>='" + v + "'" - } else if strings.Contains(k, "create_time__lte") { - cond = cond + " create_time<='" + v + "'" - } else { - cond = cond + " " + k + "='" + v + "'" - } - flag = true - } - } - - cond += " group by merchant_uid, agent_uid, pay_product_code, pay_type_code" - - var platformProfitList []PlatformProfit - _, err := o.Raw(cond).QueryRows(&platformProfitList) - if err != nil { - logs.Error("get platform profit by map fail:", err) - } - - return platformProfitList -} diff --git a/microservice/models/order_settle_info.go b/microservice/models/order_settle_info.go deleted file mode 100644 index 966477d..0000000 --- a/microservice/models/order_settle_info.go +++ /dev/null @@ -1,51 +0,0 @@ -/*************************************************** - ** @Desc : This file for ... - ** @Time : 2019/10/30 11:41 - ** @Author : yuebin - ** @File : order_settle_info - ** @Last Modified by : yuebin - ** @Last Modified time: 2019/10/30 11:41 - ** @Software: GoLand -****************************************************/ -package models - -import ( - "github.com/beego/beego/v2/client/orm" - "github.com/beego/beego/v2/core/logs" -) - -type OrderSettleInfo struct { - Id int - PayProductCode string - PayProductName string - PayTypeCode string - RoadUid string - PayTypeName string - MerchantUid string - MerchantName string - MerchantOrderId string - BankOrderId string - SettleAmount float64 - IsAllowSettle string - IsCompleteSettle string - UpdateTime string - CreateTime string -} - -const ORDER_SETTLE_INFO = "order_settle_info" - -func GetOrderSettleListByParams(params map[string]string) []OrderSettleInfo { - o := orm.NewOrm() - qs := o.QueryTable(ORDER_SETTLE_INFO) - for k, v := range params { - if len(v) > 0 { - qs = qs.Filter(k, v) - } - } - var orderSettleList []OrderSettleInfo - if _, err := qs.Limit(-1).All(&orderSettleList); err != nil { - logs.Error("get order settle list fail: ", err) - } - - return orderSettleList -} diff --git a/microservice/models/payfor_info.go b/microservice/models/payfor_info.go deleted file mode 100644 index d1f8e57..0000000 --- a/microservice/models/payfor_info.go +++ /dev/null @@ -1,228 +0,0 @@ -/*************************************************** - ** @Desc : This file for ... - ** @Time : 2019/11/25 14:32 - ** @Author : yuebin - ** @File : payfor_info - ** @Last Modified by : yuebin - ** @Last Modified time: 2019/11/25 14:32 - ** @Software: GoLand -****************************************************/ -package models - -import ( - "context" - "errors" - "fmt" - "github.com/beego/beego/v2/client/orm" - "github.com/beego/beego/v2/core/logs" - "microservice/common" - "microservice/utils" -) - -type PayforInfo struct { - Id int - PayforUid string - MerchantUid string - MerchantName string - MerchantOrderId string - BankOrderId string - BankTransId string - RoadUid string - RoadName string - RollPoolCode string - RollPoolName string - PayforFee float64 - PayforAmount float64 - PayforTotalAmount float64 - BankCode string - BankName string - BankAccountName string - BankAccountNo string - BankAccountType string - Country string - City string - Ares string - BankAccountAddress string - PhoneNo string - GiveType string - Type string - NotifyUrl string - Status string - IsSend string - RequestTime string - ResponseTime string - ResponseContext string - Remark string - CreateTime string - UpdateTime string -} - -const PAYFORINFO = "payfor_info" - -func InsertPayfor(payFor PayforInfo) bool { - o := orm.NewOrm() - _, err := o.Insert(&payFor) - if err != nil { - logs.Error("insert payfor fail: ", err) - return false - } - return true -} - -func IsExistPayForByBankOrderId(bankOrderId string) bool { - o := orm.NewOrm() - exist := o.QueryTable(PAYFORINFO).Filter("bank_order_id", bankOrderId).Exist() - - return exist -} - -func IsExistPayForByMerchantOrderId(merchantOrderId string) bool { - o := orm.NewOrm() - exist := o.QueryTable(PAYFORINFO).Filter("merchant_order_id", merchantOrderId).Exist() - - return exist -} - -func GetPayForLenByMap(params map[string]string) int { - o := orm.NewOrm() - qs := o.QueryTable(PAYFORINFO) - for k, v := range params { - if len(v) > 0 { - qs = qs.Filter(k, v) - } - } - - cnt, err := qs.Limit(-1).Count() - - if err != nil { - logs.Error("get pay for len by map fail: ", err) - } - - return int(cnt) -} - -func GetPayForByMap(params map[string]string, displayCount, offset int) []PayforInfo { - o := orm.NewOrm() - var payForList []PayforInfo - - qs := o.QueryTable(PAYFORINFO) - for k, v := range params { - if len(v) > 0 { - qs = qs.Filter(k, v) - } - } - - _, err := qs.Limit(displayCount, offset).OrderBy("-create_time").All(&payForList) - - if err != nil { - logs.Error("get agentInfo by map fail: ", err) - } - - return payForList -} - -func GetPayForListByParams(params map[string]string) []PayforInfo { - o := orm.NewOrm() - var payForList []PayforInfo - qs := o.QueryTable(PAYFORINFO) - for k, v := range params { - if len(v) > 0 { - qs = qs.Filter(k, v) - } - } - _, err := qs.Limit(-1).All(&payForList) - if err != nil { - logs.Error("GetPayForListByParams fail:", err) - } - return payForList -} - -func GetPayForByBankOrderId(bankOrderId string) PayforInfo { - o := orm.NewOrm() - var payFor PayforInfo - _, err := o.QueryTable(PAYFORINFO).Filter("bank_order_id", bankOrderId).Limit(1).All(&payFor) - - if err != nil { - logs.Error("get pay for by bank_order_id fail: ", err) - } - - return payFor -} - -func GetPayForByMerchantOrderId(merchantOrderId string) PayforInfo { - o := orm.NewOrm() - var payFor PayforInfo - - _, err := o.QueryTable(PAYFORINFO).Filter("merchant_order_id", merchantOrderId).Limit(1).All(&payFor) - - if err != nil { - logs.Error("fail: ", err) - } - - return payFor -} - -func ForUpdatePayFor(payFor PayforInfo) bool { - o := orm.NewOrm() - - if err := o.DoTx(func(ctx context.Context, txOrm orm.TxOrmer) error { - - var tmp PayforInfo - if err := txOrm.Raw("select * from payfor_info where bank_order_id = ? for update", payFor.BankOrderId).QueryRow(&tmp); err != nil || tmp.PayforUid == "" { - logs.Error("for update payfor select fail:", err) - return err - } - - if tmp.Status == common.PAYFOR_FAIL || tmp.Status == common.PAYFOR_SUCCESS { - return errors.New("订单已经处理") - } - - //如果是手动打款,并且是需要处理商户金额 - if payFor.Status == common.PAYFOR_SOLVING && tmp.Status == common.PAYFOR_COMFRIM && - payFor.GiveType == common.PAYFOR_HAND && payFor.Type != common.SELF_HELP { - - var account AccountInfo - if err := txOrm.Raw("select * from account_info where account_uid = ? for update", payFor.MerchantUid).QueryRow(&account); err != nil || account.AccountUid == "" { - logs.Error("for update payfor select account info,fail:", err) - return err - } - //计算该用户的可用金额 - ableAmount := account.SettleAmount - account.FreezeAmount - account.PayforAmount - account.LoanAmount - if ableAmount >= payFor.PayforAmount+payFor.PayforFee { - account.PayforAmount += payFor.PayforFee + payFor.PayforAmount - account.UpdateTime = utils.GetBasicDateTime() - if _, err := txOrm.Update(&account); err != nil { - logs.Error("for update payfor update account fail:", err) - return err - } - } else { - logs.Error(fmt.Sprintf("商户uid=%s,可用金额不够", payFor.MerchantUid)) - payFor.ResponseContext = "商户可用余额不足" - payFor.Status = common.PAYFOR_FAIL - } - } - - if _, err := txOrm.Update(&payFor); err != nil { - logs.Error("for update payfor fail: ", err) - return err - } - - return nil - - }); err != nil { - return false - } - return true -} - -func UpdatePayFor(payFor PayforInfo) bool { - o := orm.NewOrm() - _, err := o.Update(&payFor) - - if err != nil { - logs.Error("update pay for fail:", err) - return false - } - - return true -} diff --git a/microservice/models/platform_profit.go b/microservice/models/platform_profit.go deleted file mode 100644 index d408819..0000000 --- a/microservice/models/platform_profit.go +++ /dev/null @@ -1,21 +0,0 @@ -/*************************************************** - ** @Desc : This file for ... - ** @Time : 2019/12/17 17:50 - ** @Author : yuebin - ** @File : platform_profit - ** @Last Modified by : yuebin - ** @Last Modified time: 2019/12/17 17:50 - ** @Software: GoLand -****************************************************/ -package models - -type PlatformProfit struct { - MerchantName string - AgentName string - SupplierName string - PayTypeName string - OrderAmount float64 - OrderCount int - PlatformProfit float64 - AgentProfit float64 -} diff --git a/microservice/models/power_info.go b/microservice/models/power_info.go deleted file mode 100644 index 893a686..0000000 --- a/microservice/models/power_info.go +++ /dev/null @@ -1,143 +0,0 @@ -/*************************************************** - ** @Desc : This file for ... - ** @Time : 2019/8/28 17:59 - ** @Author : yuebin - ** @File : power_info - ** @Last Modified by : yuebin - ** @Last Modified time: 2019/8/28 17:59 - ** @Software: GoLand -****************************************************/ -package models - -import ( - "github.com/beego/beego/v2/client/orm" - "github.com/beego/beego/v2/core/logs" -) - -type PowerInfo struct { - Id int - FirstMenuUid string - SecondMenuUid string - SecondMenu string - PowerId string - PowerItem string - Creater string - Status string - CreateTime string - UpdateTime string -} - -const POWER_INFO = "power_info" - -type PowerInfoSlice []PowerInfo - -func (sm PowerInfoSlice) Len() int { - return len(sm) -} - -func (sm PowerInfoSlice) Swap(i, j int) { - sm[i], sm[j] = sm[j], sm[i] -} - -func (sm PowerInfoSlice) Less(i, j int) bool { - return sm[i].SecondMenuUid < sm[j].SecondMenuUid -} - -func PowerUidExists(powerUid string) bool { - o := orm.NewOrm() - exists := o.QueryTable(POWER_INFO).Filter("power_id", powerUid).Exist() - return exists -} - -func InsertPowerInfo(powerInfo PowerInfo) bool { - o := orm.NewOrm() - _, err := o.Insert(&powerInfo) - if err != nil { - logs.Error("insert power info fail: ", err) - return false - } - return true -} - -func GetPower() []PowerInfo { - o := orm.NewOrm() - var powerInfo []PowerInfo - _, err := o.QueryTable(POWER_INFO).Limit(-1).All(&powerInfo) - - if err != nil { - logs.Error("get power fail: ", err) - } - return powerInfo -} - -func GetPowerById(powerId string) PowerInfo { - o := orm.NewOrm() - var powerInfo PowerInfo - _, err := o.QueryTable(POWER_INFO).Filter("power_id", powerId).Limit(1).All(&powerInfo) - if err != nil { - logs.Error("get power by id fail: ", err) - } - return powerInfo -} - -func GetPowerByIds(powerIds []string) []PowerInfo { - var powerInfoList []PowerInfo - for _, v := range powerIds { - m := GetPowerById(v) - powerInfoList = append(powerInfoList, m) - } - return powerInfoList -} - -func GetPowerItemLenByMap(params map[string]string) int { - o := orm.NewOrm() - qs := o.QueryTable(POWER_INFO) - for k, v := range params { - if len(v) > 0 { - qs = qs.Filter(k, v) - } - } - cnt, err := qs.Limit(-1).Count() - if err != nil { - logs.Error("get power item len by map fail: ", err) - } - return int(cnt) -} - -func GetPowerItemByMap(params map[string]string, displpay, offset int) []PowerInfo { - o := orm.NewOrm() - var powerItemList []PowerInfo - qs := o.QueryTable(POWER_INFO) - for k, v := range params { - if len(v) > 0 { - qs = qs.Filter(k, v) - } - } - - _, err := qs.Limit(displpay, offset).OrderBy("-update_time").All(&powerItemList) - if err != nil { - logs.Error("get power item by map fail: ", err) - } - return powerItemList -} - -func DeletePowerItemByPowerID(powerID string) bool { - o := orm.NewOrm() - _, err := o.QueryTable(POWER_INFO).Filter("power_id", powerID).Delete() - if err != nil { - logs.Error("delete power item by powerID fail: ", err) - return false - } - return true -} - -func DeletePowerBySecondUid(secondUid string) bool { - o := orm.NewOrm() - _, err := o.QueryTable(POWER_INFO).Filter("second_menu_uid", secondUid).Delete() - - if err != nil { - logs.Error("delete power by second menu uid fail: ", err) - return false - } - return true -} diff --git a/microservice/models/road_info.go b/microservice/models/road_info.go deleted file mode 100644 index 10c6c6c..0000000 --- a/microservice/models/road_info.go +++ /dev/null @@ -1,162 +0,0 @@ -/*************************************************** - ** @Desc : This file for ... - ** @Time : 2019/9/8 12:09 - ** @Author : yuebin - ** @File : road_info - ** @Last Modified by : yuebin - ** @Last Modified time: 2019/9/8 12:09 - ** @Software: GoLand -****************************************************/ -package models - -import ( - "github.com/beego/beego/v2/client/orm" - "github.com/beego/beego/v2/core/logs" -) - -type RoadInfo struct { - Id int - Status string - RoadName string - RoadUid string - Remark string - ProductName string - ProductUid string - PayType string - BasicFee float64 - SettleFee float64 - TotalLimit float64 - TodayLimit float64 - SingleMinLimit float64 - SingleMaxLimit float64 - StarHour int - EndHour int - Params string - TodayIncome float64 - TotalIncome float64 - TodayProfit float64 - TotalProfit float64 - Balance float64 - RequestAll int - RequestSuccess int - UpdateTime string - CreateTime string -} - -const ROAD_INFO = "road_info" - -func GetRoadInfoByRoadUid(roadUid string) RoadInfo { - o := orm.NewOrm() - var roadInfo RoadInfo - _, err := o.QueryTable(ROAD_INFO).Exclude("status", "delete").Filter("road_uid", roadUid).Limit(1).All(&roadInfo) - if err != nil { - logs.Error("get road info by road uid fail: ", err) - } - return roadInfo -} - -func GetRoadInfosByRoadUids(roadUids []string) []RoadInfo { - o := orm.NewOrm() - var roadInfoList []RoadInfo - _, err := o.QueryTable(ROAD_INFO).Filter("road_uid__in", roadUids).OrderBy("update_time").All(&roadInfoList) - if err != nil { - logs.Error("get roadInfos by roadUids fail: ", err) - } - return roadInfoList -} - -func GetRoadInfoByName(roadName string) RoadInfo { - o := orm.NewOrm() - var roadInfo RoadInfo - _, err := o.QueryTable(ROAD_INFO).Exclude("status", "delete").Filter("road_name", roadName).Limit(1).All(&roadInfo) - if err != nil { - logs.Error("get road info by name fail: ", err) - } - return roadInfo -} - -func GetRoadLenByMap(params map[string]string) int { - o := orm.NewOrm() - qs := o.QueryTable(ROAD_INFO) - for k, v := range params { - if len(v) > 0 { - qs = qs.Filter(k, v) - } - } - cnt, err := qs.Exclude("status", "delete").Limit(-1).Count() - if err != nil { - logs.Error("get road len by map fail: ", err) - } - return int(cnt) -} - -func GetRoadInfoByMap(params map[string]string, displayCount, offset int) []RoadInfo { - o := orm.NewOrm() - var roadInfoList []RoadInfo - qs := o.QueryTable(ROAD_INFO) - for k, v := range params { - if len(v) > 0 { - qs = qs.Filter(k, v) - } - } - - _, err := qs.Exclude("status", "delete").Limit(displayCount, offset).OrderBy("-update_time").All(&roadInfoList) - if err != nil { - logs.Error("get road info by map fail: ", err) - } - return roadInfoList -} - -func GetAllRoad(params map[string]string) []RoadInfo { - o := orm.NewOrm() - var roadInfoList []RoadInfo - qs := o.QueryTable(ROAD_INFO) - for k, v := range params { - if len(v) > 0 { - qs = qs.Filter(k, v) - } - } - _, err := qs.Limit(-1).All(&roadInfoList) - if err != nil { - logs.Error("get all road fail: ", err) - } - return roadInfoList -} - -func InsertRoadInfo(roadInfo RoadInfo) bool { - o := orm.NewOrm() - _, err := o.Insert(&roadInfo) - - if err != nil { - logs.Error("insert road info fail: ", err) - return false - } - return true -} - -func RoadInfoExistByRoadUid(roadUid string) bool { - o := orm.NewOrm() - exist := o.QueryTable(ROAD_INFO).Filter("status", "active").Filter("road_uid", roadUid).Exist() - - return exist -} - -func UpdateRoadInfo(roadInfo RoadInfo) bool { - o := orm.NewOrm() - _, err := o.Update(&roadInfo) - if err != nil { - logs.Error("update road info fail: ", err) - return false - } - return true -} - -func DeleteRoadByRoadUid(roadUid string) bool { - o := orm.NewOrm() - _, err := o.QueryTable(ROAD_INFO).Filter("road_uid", roadUid).Delete() - if err != nil { - logs.Error("delete road by road uid fail: ", err) - return false - } - return true -} diff --git a/microservice/models/road_pool_info.go b/microservice/models/road_pool_info.go deleted file mode 100644 index 0fdced9..0000000 --- a/microservice/models/road_pool_info.go +++ /dev/null @@ -1,127 +0,0 @@ -/*************************************************** - ** @Desc : This file for ... - ** @Time : 2019/9/9 16:35 - ** @Author : yuebin - ** @File : road_pool_info - ** @Last Modified by : yuebin - ** @Last Modified time: 2019/9/9 16:35 - ** @Software: GoLand -****************************************************/ -package models - -import ( - "github.com/beego/beego/v2/client/orm" - "github.com/beego/beego/v2/core/logs" -) - -type RoadPoolInfo struct { - Id int - Status string - RoadPoolName string - RoadPoolCode string - RoadUidPool string - UpdateTime string - CreateTime string -} - -const ROAD_POOL_INFO = "road_pool_info" - -func InsertRoadPool(roadPool RoadPoolInfo) bool { - o := orm.NewOrm() - _, err := o.Insert(&roadPool) - if err != nil { - logs.Error("insert road pool fail: ", err) - return false - } - return true -} - -func GetRoadPoolLenByMap(params map[string]string) int { - o := orm.NewOrm() - qs := o.QueryTable(ROAD_POOL_INFO) - for k, v := range params { - if len(v) > 0 { - qs = qs.Filter(k, v) - } - } - cnt, err := qs.Limit(-1).Count() - if err != nil { - logs.Error("get road pool len by map fail: ", err) - } - return int(cnt) -} - -func GetRoadPoolByMap(params map[string]string, displayCount, offset int) []RoadPoolInfo { - o := orm.NewOrm() - var roadPoolList []RoadPoolInfo - qs := o.QueryTable(ROAD_POOL_INFO) - for k, v := range params { - if len(v) > 0 { - qs.Filter(k, v) - } - } - _, err := qs.Limit(displayCount, offset).OrderBy("-update_time").All(&roadPoolList) - if err != nil { - logs.Error("get road pool by map fail: ", err) - } - return roadPoolList -} - -func GetRoadPoolByRoadPoolCode(roadPoolCode string) RoadPoolInfo { - o := orm.NewOrm() - var roadPoolInfo RoadPoolInfo - _, err := o.QueryTable(ROAD_POOL_INFO).Filter("road_pool_code", roadPoolCode).Limit(1).All(&roadPoolInfo) - - if err != nil { - logs.Error("get road pool info by road pool code fail: ", err) - } - - return roadPoolInfo -} - -func GetAllRollPool(params map[string]string) []RoadPoolInfo { - o := orm.NewOrm() - var roadPoolList []RoadPoolInfo - qs := o.QueryTable(ROAD_POOL_INFO) - for k, v := range params { - if len(v) > 0 { - qs = qs.Filter(k, v) - } - } - _, err := qs.Limit(-1).All(&roadPoolList) - if err != nil { - logs.Error("get all roll pool fail: ", err) - } - return roadPoolList -} - -func GetRoadPoolByName(roadPoolName string) RoadPoolInfo { - o := orm.NewOrm() - var roadPoolInfo RoadPoolInfo - _, err := o.QueryTable(ROAD_POOL_INFO).Filter("road_pool_name", roadPoolName).Limit(1).All(&roadPoolInfo) - if err != nil { - logs.Error("get road pool by name fail: ", err) - } - return roadPoolInfo -} - -func DeleteRoadPoolByCode(roadPoolCode string) bool { - o := orm.NewOrm() - _, err := o.QueryTable(ROAD_POOL_INFO).Filter("road_pool_code", roadPoolCode).Delete() - if err != nil { - logs.Error("delete road pool by code fail: ", err) - return false - } - return true -} - -func UpdateRoadPool(roadPool RoadPoolInfo) bool { - o := orm.NewOrm() - _, err := o.Update(&roadPool) - - if err != nil { - logs.Error("update road pool fail: ", err) - return false - } - return true -} diff --git a/microservice/models/role_info.go b/microservice/models/role_info.go deleted file mode 100644 index 49c7c51..0000000 --- a/microservice/models/role_info.go +++ /dev/null @@ -1,123 +0,0 @@ -/*************************************************** - ** @Desc : This file for ... - ** @Time : 2019/8/29 14:43 - ** @Author : yuebin - ** @File : role_info - ** @Last Modified by : yuebin - ** @Last Modified time: 2019/8/29 14:43 - ** @Software: GoLand -****************************************************/ -package models - -import ( - "github.com/beego/beego/v2/client/orm" - "github.com/beego/beego/v2/core/logs" -) - -type RoleInfo struct { - Id int - RoleName string - RoleUid string - ShowFirstMenu string - ShowFirstUid string - ShowSecondMenu string - ShowSecondUid string - ShowPower string - ShowPowerUid string - Creater string - Status string - Remark string - CreateTime string - UpdateTime string -} - -const ROLE_INFO = "role_info" - -func GetRoleLenByMap(params map[string]string) int { - o := orm.NewOrm() - qs := o.QueryTable(ROLE_INFO) - for k, v := range params { - if len(v) > 0 { - qs = qs.Filter(k, v) - } - } - cnt, err := qs.Count() - if err != nil { - logs.Error("get role len by map fail: ", err) - } - return int(cnt) -} - -func GetRole() []RoleInfo { - o := orm.NewOrm() - var roleInfo []RoleInfo - _, err := o.QueryTable(ROLE_INFO).Limit(-1).OrderBy("-update_time").All(&roleInfo) - if err != nil { - logs.Error("get all role fail: ", err) - } - return roleInfo -} - -func GetRoleByMap(params map[string]string, display, offset int) []RoleInfo { - o := orm.NewOrm() - var roleInfo []RoleInfo - qs := o.QueryTable(ROLE_INFO) - for k, v := range params { - if len(v) > 0 { - qs = qs.Filter(k, v) - } - } - _, err := qs.Limit(display, offset).OrderBy("-update_time").All(&roleInfo) - if err != nil { - logs.Error("get role by map fail: ", err) - } - return roleInfo -} - -func GetRoleByRoleUid(roleUid string) RoleInfo { - o := orm.NewOrm() - var roleInfo RoleInfo - _, err := o.QueryTable(ROLE_INFO).Filter("role_uid", roleUid).Limit(1).All(&roleInfo) - - if err != nil { - logs.Error("get role by role uid fail: ", err) - } - return roleInfo -} - -func RoleNameExists(roleName string) bool { - o := orm.NewOrm() - exists := o.QueryTable(ROLE_INFO).Filter("role_name", roleName).Exist() - return exists -} - -func InsertRole(roleInfo RoleInfo) bool { - o := orm.NewOrm() - _, err := o.Insert(&roleInfo) - if err != nil { - logs.Error("insert role fail: ", err) - return false - } - return true -} - -func DeleteRoleByRoleUid(roleUid string) bool { - o := orm.NewOrm() - _, err := o.QueryTable(ROLE_INFO).Filter("role_uid", roleUid).Delete() - if err != nil { - logs.Error("delete role by role uid fail: ", err) - return false - } - return true -} - -func UpdateRoleInfo(roleInfo RoleInfo) bool { - o := orm.NewOrm() - _, err := o.Update(&roleInfo) - - if err != nil { - logs.Error("update role info fail: ", err) - return false - } - return true -} diff --git a/microservice/models/second_menu_info.go b/microservice/models/second_menu_info.go deleted file mode 100644 index e1b3f87..0000000 --- a/microservice/models/second_menu_info.go +++ /dev/null @@ -1,216 +0,0 @@ -/*************************************************** - ** @Desc : This file for ... - ** @Time : 2019/8/26 9:33 - ** @Author : yuebin - ** @File : second_menu_info - ** @Last Modified by : yuebin - ** @Last Modified time: 2019/8/26 9:33 - ** @Software: GoLand -****************************************************/ -package models - -import ( - "github.com/beego/beego/v2/client/orm" - "github.com/beego/beego/v2/core/logs" -) - -const SECOND_MENU_INFO = "second_menu_info" - -type SecondMenuInfo struct { - Id int - FirstMenuOrder int - FirstMenuUid string - FirstMenu string - MenuOrder int - SecondMenuUid string - SecondMenu string - SecondRouter string - Creater string - Status string - CreateTime string - UpdateTime string -} - -type SecondMenuSlice []SecondMenuInfo - -func (sm SecondMenuSlice) Len() int { - return len(sm) -} - -func (sm SecondMenuSlice) Swap(i, j int) { - sm[i], sm[j] = sm[j], sm[i] -} - -func (sm SecondMenuSlice) Less(i, j int) bool { - if sm[i].FirstMenuOrder == sm[j].FirstMenuOrder { - return sm[i].MenuOrder < sm[j].MenuOrder - } - return sm[i].FirstMenuOrder < sm[j].FirstMenuOrder -} - -func GetSecondMenuLen() int { - o := orm.NewOrm() - cnt, err := o.QueryTable(SECOND_MENU_INFO).Count() - if err != nil { - logs.Error("get second meun len fail: ", err) - } - return int(cnt) -} - -func GetSecondMenuInfoByMenuOrder(menuOrder int, firstMenuUid string) SecondMenuInfo { - o := orm.NewOrm() - var secondMenuInfo SecondMenuInfo - _, err := o.QueryTable(SECOND_MENU_INFO).Filter("first_menu_uid", firstMenuUid).Filter("menu_order", menuOrder).Limit(1).All(&secondMenuInfo) - if err != nil { - logs.Error("get second menu info by menu order fail: ", err) - } - return secondMenuInfo -} - -func GetSecondMenuLenByFirstMenuUid(firstMenuUid string) int { - o := orm.NewOrm() - cnt, err := o.QueryTable(SECOND_MENU_INFO).Filter("first_menu_uid", firstMenuUid).Count() - if err != nil { - logs.Error("get second menu len by first menu uid fail: ", err) - } - return int(cnt) -} - -func GetSecondMenuList() []SecondMenuInfo { - o := orm.NewOrm() - var secondMenuList []SecondMenuInfo - _, err := o.QueryTable(SECOND_MENU_INFO).Limit(-1).OrderBy("-update_time").All(&secondMenuList) - if err != nil { - logs.Error("get second menu list fail: ", err) - } - return secondMenuList -} - -func GetSecondMenuInfoBySecondMenuUid(secondMenuUid string) SecondMenuInfo { - o := orm.NewOrm() - var secondMenuInfo SecondMenuInfo - _, err := o.QueryTable(SECOND_MENU_INFO).Filter("second_menu_uid", secondMenuUid).Limit(1).All(&secondMenuInfo) - if err != nil { - logs.Error("get scond menu info by second menu uid fail: ", err) - } - return secondMenuInfo -} - -func GetSecondMenuInfoBySecondMenuUids(secondMenuUids []string) []SecondMenuInfo { - secondMenuInfoList := make([]SecondMenuInfo, 0) - for _, v := range secondMenuUids { - sm := GetSecondMenuInfoBySecondMenuUid(v) - secondMenuInfoList = append(secondMenuInfoList, sm) - } - return secondMenuInfoList -} - -func GetSecondMenuListByFirstMenuUid(firstMenuUid string) []SecondMenuInfo { - o := orm.NewOrm() - var secondMenuList []SecondMenuInfo - _, err := o.QueryTable(SECOND_MENU_INFO).Filter("first_menu_uid", firstMenuUid).Limit(-1).OrderBy("-update_time").All(&secondMenuList) - if err != nil { - logs.Error("get second menu list by first menu uid fail: ", err) - } - return secondMenuList -} - -func GetSecondMenuLenByMap(params map[string]string) int { - o := orm.NewOrm() - qs := o.QueryTable(SECOND_MENU_INFO) - for k, v := range params { - qs = qs.Filter(k, v) - } - cnt, err := qs.Limit(-1).Count() - if err != nil { - logs.Error("get second menu len by map fail: ", err) - } - return int(cnt) -} - -func GetSecondMenuByMap(params map[string]string, displayCount, offset int) []SecondMenuInfo { - o := orm.NewOrm() - var secondMenuList []SecondMenuInfo - qs := o.QueryTable(SECOND_MENU_INFO) - for k, v := range params { - if len(v) > 0 { - qs = qs.Filter(k, v) - } - } - _, err := qs.Limit(displayCount, offset).OrderBy("-update_time").All(&secondMenuList) - if err != nil { - logs.Error("get second menu by map fail: ", err) - } - return secondMenuList -} -func InsertSecondMenu(secondMenuInfo SecondMenuInfo) bool { - o := orm.NewOrm() - _, err := o.Insert(&secondMenuInfo) - if err != nil { - logs.Error("insert second menu fail: ", err) - return false - } - return true -} - -func SecondMenuIsExists(seconfMenu string) bool { - o := orm.NewOrm() - exist := o.QueryTable(SECOND_MENU_INFO).Filter("second_menu", seconfMenu).Exist() - return exist -} - -func SecondMenuUidIsExists(secondMenuUid string) bool { - o := orm.NewOrm() - exist := o.QueryTable(SECOND_MENU_INFO).Filter("second_menu_uid", secondMenuUid).Exist() - return exist -} - -func SecondRouterExists(secondRouter string) bool { - o := orm.NewOrm() - exist := o.QueryTable(SECOND_MENU_INFO).Filter("second_router", secondRouter).Exist() - return exist -} - -func DeleteSecondMenuByFirstMenuUid(firstMenuUid string) bool { - o := orm.NewOrm() - num, err := o.QueryTable(SECOND_MENU_INFO).Filter("first_menu_uid", firstMenuUid).Delete() - if err != nil { - logs.Error("delete second menu by first menu uid fail: ", err) - return false - } - logs.Info("delete second menu by first menu uid success, num: ", num) - return true -} - -func DeleteSecondMenuBySecondMenuUid(secondMenuUid string) bool { - o := orm.NewOrm() - num, err := o.QueryTable(SECOND_MENU_INFO).Filter("second_menu_uid", secondMenuUid).Delete() - if err != nil { - logs.Error("delete second menu by second menu uid fail: ", err) - return false - } - logs.Info("delete second menu by second menu uid success, num: ", num) - return true -} - -func UpdateSecondMenuOrderBySecondUid(secondUid string, order int) { - o := orm.NewOrm() - _, err := o.QueryTable(SECOND_MENU_INFO).Filter("second_menu_uid", secondUid).Update(orm.Params{"menu_order": order}) - if err != nil { - logs.Error("update second menu order by second menu uid fail: ", err) - } -} - -func UpdateSecondMenu(secondMenu SecondMenuInfo) { - o := orm.NewOrm() - _, err := o.Update(&secondMenu) - if err != nil { - logs.Error("update second menu for first order fail: ", err) - } -} - -func SecondMenuExistByMenuOrder(menuOrder int) bool { - o := orm.NewOrm() - exist := o.QueryTable(SECOND_MENU_INFO).Filter("menu_order", menuOrder).Exist() - return exist -} diff --git a/microservice/models/transaction.go b/microservice/models/transaction.go deleted file mode 100644 index 1f3acb7..0000000 --- a/microservice/models/transaction.go +++ /dev/null @@ -1,82 +0,0 @@ -/*************************************************** - ** @Desc : This file for ... - ** @Time : 2019/10/19 14:17 - ** @Author : yuebin - ** @File : transaction - ** @Last Modified by : yuebin - ** @Last Modified time: 2019/10/19 14:17 - ** @Software: GoLand -****************************************************/ -package models - -import ( - "context" - "errors" - "github.com/beego/beego/v2/client/orm" - "github.com/beego/beego/v2/core/logs" - "microservice/common" - "microservice/utils" -) - -func OperatorAccount(accountUid, operatorType string, amount float64) (string, bool) { - o := orm.NewOrm() - - msg := "" - if err := o.DoTx(func(ctx context.Context, txOrm orm.TxOrmer) error { - - //处理事务 - accountInfo := new(AccountInfo) - if err := txOrm.Raw("select * from account_info where account_uid = ? for update", accountUid).QueryRow(accountInfo); err != nil || accountInfo.AccountUid == "" { - logs.Error("operator account get account info for update fail: ", err) - return err - } - - accountInfo.UpdateTime = utils.GetBasicDateTime() - flag := true - - switch operatorType { - case common.PLUS_AMOUNT: //处理加款操作 - accountInfo.Balance = accountInfo.Balance + amount - accountInfo.SettleAmount = accountInfo.SettleAmount + amount - case common.SUB_AMOUNT: //处理减款 - if accountInfo.Balance >= amount && accountInfo.SettleAmount >= amount { - accountInfo.Balance = accountInfo.Balance - amount - accountInfo.SettleAmount = accountInfo.SettleAmount - amount - } else { - msg = "账户余额不够减" - flag = false - } - case common.FREEZE_AMOUNT: //处理冻结款 - accountInfo.FreezeAmount = accountInfo.FreezeAmount + amount - case common.UNFREEZE_AMOUNT: //处理解冻款 - if accountInfo.FreezeAmount >= amount { - accountInfo.FreezeAmount = accountInfo.FreezeAmount - amount - } else { - msg = "账户冻结金额不够解冻款" - flag = false - } - } - if !flag { - return errors.New("处理失败") - } - - if _, err := txOrm.Update(accountInfo); err != nil { - logs.Error("operator account update account fail: ", err) - return err - } - //往account_history表中插入一条动账记录 - accountHistory := AccountHistoryInfo{AccountUid: accountUid, AccountName: accountInfo.AccountName, Type: operatorType, - Amount: amount, Balance: accountInfo.Balance, CreateTime: utils.GetBasicDateTime(), UpdateTime: utils.GetBasicDateTime()} - - if _, err := txOrm.Insert(&accountHistory); err != nil { - logs.Error("operator account insert account history fail: ", err) - return err - } - - return nil - }); err != nil { - return msg, false - } - - return msg, true -} diff --git a/microservice/models/user_info.go b/microservice/models/user_info.go deleted file mode 100644 index bf5235c..0000000 --- a/microservice/models/user_info.go +++ /dev/null @@ -1,146 +0,0 @@ -/*************************************************** - ** @Desc : This file for ... - ** @Time : 2019/8/9 14:02 - ** @Author : yuebin - ** @File : user_info - ** @Last Modified by : yuebin - ** @Last Modified time: 2019/8/9 14:02 - ** @Software: GoLand -****************************************************/ -package models - -import ( - "github.com/beego/beego/v2/client/orm" - "github.com/beego/beego/v2/core/logs" -) - -const ( - USERINFO = "user_info" -) - -type UserInfo struct { - Id int - UserId string - Passwd string - Nick string - Remark string - Ip string - Status string - Role string - RoleName string - CreateTime string - UpdateTime string -} - -func GetUserInfoByUserID(userID string) UserInfo { - o := orm.NewOrm() - var userInfo UserInfo - err := o.QueryTable(USERINFO).Exclude("status", "delete").Filter("user_id", userID).One(&userInfo) - if err != nil { - logs.Error("get user info fail: ", err) - } - return userInfo -} - -func GetOperatorByMap(params map[string]string, displayCount, offset int) []UserInfo { - o := orm.NewOrm() - var userInfo []UserInfo - qs := o.QueryTable(USERINFO) - for k, v := range params { - if len(v) > 0 { - qs = qs.Filter(k, v) - } - } - _, err := qs.Exclude("status", "delete").Limit(displayCount, offset).OrderBy("-update_time").All(&userInfo) - - if err != nil { - logs.Error("get operator by map fail: ", err) - } - return userInfo -} - -func GetOperatorLenByMap(params map[string]string) int { - o := orm.NewOrm() - qs := o.QueryTable(USERINFO) - for k, v := range params { - qs = qs.Filter(k, v) - } - cnt, err := qs.Exclude("status", "delete").Count() - if err != nil { - logs.Error("get operator len by map fail: ", err) - } - return int(cnt) -} - -func UpdateUserInfoIP(userInfo UserInfo) { - o := orm.NewOrm() - num, err := o.QueryTable(USERINFO).Exclude("status", "delete").Filter("user_id", userInfo.UserId).Update(orm.Params{"ip": userInfo.Ip}) - if err != nil { - logs.Error("%s update user info ip fail: %v", userInfo.UserId, err) - } else { - logs.Info("%s update user info ip success, num: %d", userInfo.UserId, num) - } -} - -func UpdateUserInfoPassword(userInfo UserInfo) { - o := orm.NewOrm() - num, err := o.QueryTable(USERINFO).Exclude("status", "delete").Filter("user_id", userInfo.UserId).Update(orm.Params{"passwd": userInfo.Passwd}) - if err != nil { - logs.Error("%s update user info password fail: %v", userInfo.UserId, err) - } else { - logs.Info("%s update user info password success, update num: %d", userInfo.UserId, num) - } -} - -func UpdateUserInfo(userInfo UserInfo) { - o := orm.NewOrm() - if num, err := o.Update(&userInfo); err != nil { - logs.Error("update user info fail: ", err) - } else { - logs.Info("update user info success, num: ", num) - } -} - -func UpdateStauts(status, userId string) bool { - o := orm.NewOrm() - _, err := o.QueryTable(USERINFO).Filter("user_id", userId).Update(orm.Params{"status": status}) - - if err != nil { - logs.Error("update status fail: ", err) - return false - } - return true -} - -func UserInfoExistByUserId(userId string) bool { - o := orm.NewOrm() - exist := o.QueryTable(USERINFO).Exclude("status", "delete").Filter("user_id", userId).Exist() - return exist -} - -func NickIsExist(nick string) bool { - o := orm.NewOrm() - exist := o.QueryTable(USERINFO).Exclude("status", "delete").Filter("nick", nick).Exist() - return exist -} - -func InsertUser(userInfo UserInfo) bool { - o := orm.NewOrm() - _, err := o.Insert(&userInfo) - if err != nil { - logs.Error("insert user fail: ", err) - return false - } - return true -} - -func DeleteUserByUserId(userId string) bool { - o := orm.NewOrm() - _, err := o.QueryTable(USERINFO).Exclude("status", "delete").Filter("user_id", userId).Update(orm.Params{"status": "delete"}) - - if err != nil { - logs.Error("delete user by userId fail: ", err) - return false - } - return true -} diff --git a/microservice/notify/order_notify.go b/microservice/notify/order_notify.go deleted file mode 100644 index 7bfad7c..0000000 --- a/microservice/notify/order_notify.go +++ /dev/null @@ -1,163 +0,0 @@ -/*************************************************** - ** @Desc : This file for ... - ** @Time : 2019/11/20 1:35 - ** @Author : yuebin - ** @File : order_notify - ** @Last Modified by : yuebin - ** @Last Modified time: 2019/11/20 1:35 - ** @Software: GoLand -****************************************************/ -package notify - -import ( - "fmt" - "github.com/beego/beego/v2/client/httplib" - "github.com/beego/beego/v2/core/logs" - "github.com/go-stomp/stomp" - "microservice/common" - "microservice/message_queue" - "microservice/models" - "microservice/utils" - "os" - "strings" - "time" -) - -type OrderNotifyTask struct { - Delay *time.Timer - MerchantOrderId string - BankOrderId string - FirstNotifyTime string - NotifyTimes int - LimitTimes int - Status string //success-通知成功,其余的为待通知或者通知未完成 -} - -const ( - LimitTimes = 5 //最多通知5次 -) - -//给商户发送订单结果 -func SendOrderNotify(bankOrderId string) { - if !models.NotifyInfoExistByBankOrderId(bankOrderId) { - logs.Error("该订单不存在回调内容,bankOrderId=", bankOrderId) - return - } - - notifyInfo := models.GetNotifyInfoByBankOrderId(bankOrderId) - if notifyInfo.Status == "success" { - logs.Info(fmt.Sprintf("该订单=%s,已经回调", bankOrderId)) - return - } - notifyInfo.Times += 1 - notifyInfo.UpdateTime = utils.GetBasicDateTime() - - req := httplib.Post(notifyInfo.Url) - response, err := req.String() - - if err == nil { - if strings.Contains(strings.ToLower(response), "success") { - notifyInfo.Status = "success" - if models.UpdateNotifyInfo(notifyInfo) { - logs.Info("订单回调成功, bankOrderId=", bankOrderId) - } else { - logs.Error("订单回调成功,但是更新数据库失败, bankOrderId=", bankOrderId) - } - } else { - logs.Notice("订单已经回调,商户已经收到了回调通知,但是返回值错误: ", response) - } - } else { - if notifyInfo.Times > LimitTimes { - logs.Notice(fmt.Sprintf("该订单=%s,已经超过了回调次数", bankOrderId)) - } else { - minute := GetOrderNotifyMinute(notifyInfo.Times) - task := OrderNotifyTask{Delay: time.NewTimer(time.Duration(minute) * time.Minute), - MerchantOrderId: notifyInfo.MerchantOrderId, BankOrderId: notifyInfo.BankOrderId, FirstNotifyTime: notifyInfo.CreateTime, - NotifyTimes: notifyInfo.Times, LimitTimes: LimitTimes, Status: notifyInfo.Status} - logs.Info(fmt.Sprintf("订单bankOrderId=%s,已经是第:%d,回调", bankOrderId, notifyInfo.Times)) - go OrderNotifyTimer(task) - if !models.UpdateNotifyInfo(notifyInfo) { - logs.Error("订单回调失败,数据库更新失败:", bankOrderId) - } - } - } -} - -func GetOrderNotifyMinute(times int) int { - cur := 1 - switch times { - case 0: - cur = 1 - case 2: - cur = 2 - case 3: - cur = 5 - case 4: - cur = 15 - case 5: - cur = 30 - } - return cur -} - -func OrderNotifyTimer(task OrderNotifyTask) { - for { - select { - case <-task.Delay.C: - SendOrderNotify(task.BankOrderId) - task.Delay.Stop() - return - //70分钟没有执行该协程,那么退出协程 - case <-time.After(time.Minute * 70): - logs.Notice("订单回调延时执行,70分钟没有执行") - return - } - } -} - -//读取一小时之内,未发送成功,并且还没有到达回调限制次数的记录读取,存入延迟队列 -func CreateOrderDelayQueue() { - params := make(map[string]interface{}) - params["times__lte"] = LimitTimes - params["create_time__gte"] = utils.GetDateTimeBeforeHours(1) - notifyList := models.GetNotifyInfosNotSuccess(params) - for _, notify := range notifyList { - minute := GetOrderNotifyMinute(notify.Times) - task := OrderNotifyTask{Delay: time.NewTimer(time.Duration(minute) * time.Minute), - MerchantOrderId: notify.MerchantOrderId, BankOrderId: notify.BankOrderId, FirstNotifyTime: notify.CreateTime, - NotifyTimes: notify.Times, LimitTimes: LimitTimes, Status: notify.Status} - go OrderNotifyTimer(task) - } -} - -//创建订单回调消费者 -func CreateOrderNotifyConsumer() { - CreateOrderDelayQueue() - //启动定时任务 - conn := message_queue.GetActiveMQConn() - if conn == nil { - logs.Error("启动消息队列消费者失败....") - os.Exit(1) - } - - logs.Notice("订单回调消息队列启动成功......") - orderNotify, err := conn.Subscribe(common.MqOrderNotify, stomp.AckClient) - if err != nil { - logs.Error("订阅订单回调失败......") - os.Exit(1) - } - for { - select { - case v := <-orderNotify.C: - if v != nil { - bankOrderId := string(v.Body) - go SendOrderNotify(bankOrderId) - //应答,重要 - err := conn.Ack(v) - if err != nil { - logs.Error("消息应答失败!") - } - } - } - } -} diff --git a/microservice/notify/payfor_notify.go b/microservice/notify/payfor_notify.go deleted file mode 100644 index 941d059..0000000 --- a/microservice/notify/payfor_notify.go +++ /dev/null @@ -1,10 +0,0 @@ -/*************************************************** - ** @Desc : This file for ... - ** @Time : 2019/11/20 1:35 - ** @Author : yuebin - ** @File : payfor_notify - ** @Last Modified by : yuebin - ** @Last Modified time: 2019/11/20 1:35 - ** @Software: GoLand -****************************************************/ -package notify diff --git a/microservice/order_settle/settle.go b/microservice/order_settle/settle.go deleted file mode 100644 index 2500917..0000000 --- a/microservice/order_settle/settle.go +++ /dev/null @@ -1,41 +0,0 @@ -/*************************************************** - ** @Desc : 将待结算的订单金额,加入账户可用金额中 - ** @Time : 2019/11/21 23:43 - ** @Author : yuebin - ** @File : settle - ** @Last Modified by : yuebin - ** @Last Modified time: 2019/11/21 23:43 - ** @Software: GoLand -****************************************************/ -package order_settle - -import ( - "github.com/astaxie/beego/logs" - controller "microservice/supplier" - "time" -) - -const ( - SettleInterval = 5 //隔多少分钟进行结算 - OneMinute = 15 //每隔15分钟,进行扫码,看有没有隔天押款金额 -) - -func OrderSettleInit() { - //每隔5分钟,巡查有没有可以进行结算的订单 - go func() { - settleTimer := time.NewTimer(time.Duration(SettleInterval) * time.Minute) - oneMinuteTimer := time.NewTimer(time.Duration(OneMinute) * time.Minute) - for { - select { - case <-settleTimer.C: - settleTimer = time.NewTimer(time.Duration(SettleInterval) * time.Minute) - logs.Info("开始对商户进行支付订单结算>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>") - controller.OrderSettle() - case <-oneMinuteTimer.C: - oneMinuteTimer = time.NewTimer(time.Duration(OneMinute) * time.Minute) - logs.Info("开始执行商户的解款操作>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>") - controller.MerchantLoadSolve() - } - } - }() -} diff --git a/microservice/pay_for/payfor.go b/microservice/pay_for/payfor.go deleted file mode 100644 index f10b015..0000000 --- a/microservice/pay_for/payfor.go +++ /dev/null @@ -1,32 +0,0 @@ -/*************************************************** - ** @Desc : 处理代付问题 - ** @Time : 2019/11/29 14:07 - ** @Author : yuebin - ** @File : payfor - ** @Last Modified by : yuebin - ** @Last Modified time: 2019/11/29 14:07 - ** @Software: GoLand -****************************************************/ -package pay_for - -import ( - "github.com/astaxie/beego/logs" - "microservice/common" - controller "microservice/supplier" - "time" -) - -func PayForInit() { - payForIntervalTimer := time.NewTimer(time.Duration(common.PAYFOR_INTERVAL * time.Second)) - for { - select { - case <-payForIntervalTimer.C: - logs.Info("代付小程序开始执行任务......") - payForIntervalTimer = time.NewTimer(time.Duration(common.PAYFOR_INTERVAL * time.Minute)) - controller.SolvePayForConfirm() - controller.SolvePayFor() - case <-time.After(time.Duration(10 * time.Minute)): - logs.Notice("代付小程序已经10分钟没有执行了.........") - } - } -} diff --git a/microservice/query/order_query.go b/microservice/query/order_query.go deleted file mode 100644 index d76701f..0000000 --- a/microservice/query/order_query.go +++ /dev/null @@ -1,109 +0,0 @@ -/*************************************************** - ** @Desc : This file for ... - ** @Time : 2019/11/22 23:02 - ** @Author : yuebin - ** @File : order_query - ** @Last Modified by : yuebin - ** @Last Modified time: 2019/11/22 23:02 - ** @Software: GoLand -****************************************************/ -package query - -import ( - "fmt" - "github.com/astaxie/beego/logs" - "github.com/go-stomp/stomp" - "microservice/common" - "microservice/message_queue" - "microservice/models" - controller "microservice/supplier" - "os" - "time" -) - -type OrderQueryTask struct { - BankOrderId string - OrderQueryTimer *time.Timer - Times int -} - -const ( - DelayTime = 5 //延时时间为5分钟查询一次 - LimitTimes = 5 //最多查询5次 -) - -/* -** 该接口是查询上游的订单 - */ -func solveSupplierOrderQuery(task OrderQueryTask) { - bankOrderId := task.BankOrderId - orderInfo := models.GetOrderByBankOrderId(bankOrderId) - if orderInfo.BankOrderId == "" || len(orderInfo.BankOrderId) == 0 { - logs.Error("不存在这样的订单,订单查询结束") - return - } - if orderInfo.Status != "" && orderInfo.Status != "wait" { - logs.Error(fmt.Sprintf("该订单=%s,已经处理完毕,", bankOrderId)) - return - } - supplierCode := orderInfo.PayProductCode - supplier := controller.GetPaySupplierByCode(supplierCode) - flag := supplier.PayQuery(orderInfo) - if flag { - logs.Info("订单查询成功, bankOrderId:", bankOrderId) - } else { - if task.Times <= LimitTimes { - task.Times += 1 - task.OrderQueryTimer = time.NewTimer(time.Duration(5) * time.Minute) - DelayOrderQueryQueue(task) - } else { - logs.Notice(fmt.Sprintf("订单id=%s, 已经查询超过次数")) - } - } -} - -/* -* 延时队列 - */ -func DelayOrderQueryQueue(task OrderQueryTask) { - for { - select { - case <-task.OrderQueryTimer.C: - logs.Info(fmt.Sprintf("订单id=%s,执行第:%d 次查询", task.BankOrderId, task.Times)) - solveSupplierOrderQuery(task) - return - case <-time.After(time.Duration(2*DelayTime) * time.Minute): - return - } - } -} - -/* -** 启动消息订单查询的消息队列消费者 - */ -func CreateSupplierOrderQueryCuConsumer() { - conn := message_queue.GetActiveMQConn() - if conn == nil { - logs.Error("supplier order query consumer fail") - os.Exit(1) - } - logs.Notice("启动订单查询的消费者成功.....") - orderQuerySub, _ := conn.Subscribe(common.MqOrderQuery, stomp.AckClient) - - for { - select { - case v := <-orderQuerySub.C: - if v != nil { - bankOrderId := string(v.Body) - logs.Info("消费者正在处理订单查询: " + bankOrderId) - task := OrderQueryTask{BankOrderId: bankOrderId, OrderQueryTimer: time.NewTimer(time.Second * 1), Times: 1} - DelayOrderQueryQueue(task) - //应答,重要 - err := conn.Ack(v) - if err != nil { - logs.Error("消息应答失败!") - } - } - } - } -} diff --git a/microservice/query/pay_for_query.go b/microservice/query/pay_for_query.go deleted file mode 100644 index ed9d0c5..0000000 --- a/microservice/query/pay_for_query.go +++ /dev/null @@ -1,135 +0,0 @@ -/*************************************************** - ** @Desc : 处理代付查询功能 - ** @Time : 2019/12/3 15:07 - ** @Author : yuebin - ** @File : pay_for_query - ** @Last Modified by : yuebin - ** @Last Modified time: 2019/12/3 15:07 - ** @Software: GoLand -****************************************************/ -package query - -import ( - "fmt" - "github.com/beego/beego/v2/core/logs" - "github.com/go-stomp/stomp" - "microservice/common" - "microservice/message_queue" - "microservice/models" - controller "microservice/supplier" - "microservice/utils" - "os" - "time" -) - -type PayForQueryTask struct { - Delay *time.Timer - MerchantOrderId string - BankOrderId string - FirstNotifyTime string - QueryTimes int - LimitTimes int - Status string -} - -const ( - PayForLimitTimes = 12 //最多查询次数 - PayForQueryInterval = 5 //时间间隔为5分钟 -) - -func PayForQueryTimer(task PayForQueryTask) { - for { - select { - case <-task.Delay.C: - PayForSupplier(task) - task.Delay.Stop() - return - //70分钟没有执行该协程,那么退出协程 - case <-time.After(time.Minute * 70): - return - } - } -} - -func PayForSupplier(task PayForQueryTask) { - logs.Info(fmt.Sprintf("执行代付查询任务:%+v", task)) - payFor := models.GetPayForByBankOrderId(task.BankOrderId) - roadInfo := models.GetRoadInfoByRoadUid(payFor.RoadUid) - supplier := controller.GetPaySupplierByCode(roadInfo.ProductUid) - if supplier == nil { - logs.Error("代付查询返回supplier为空") - return - } - res, _ := supplier.PayForQuery(payFor) - if res == common.PAYFOR_SUCCESS { - //代付成功了 - controller.PayForSuccess(payFor) - } else if res == common.PAYFOR_FAIL { - //代付失败 - controller.PayForFail(payFor) - } else if res == common.PAYFOR_BANKING { - //银行处理中,那么就继续执行查询,直到次数超过最大次数 - if task.QueryTimes <= task.LimitTimes { - task.QueryTimes += 1 - task.Delay = time.NewTimer(time.Duration(PayForQueryInterval) * time.Minute) - go PayForQueryTimer(task) - } else { - logs.Info(fmt.Sprintf("该代付订单已经超过最大查询次数,bankOrderId = %s", task.BankOrderId)) - } - } -} - -func payForQueryConsumer(bankOrderId string) { - exist := models.IsExistPayForByBankOrderId(bankOrderId) - if !exist { - logs.Error(fmt.Sprintf("代付记录不存在,bankOrderId = %s", bankOrderId)) - return - } - - payFor := models.GetPayForByBankOrderId(bankOrderId) - - if payFor.Status != common.PAYFOR_BANKING { - logs.Info(fmt.Sprintf("代付状态不是银行处理中,不需要去查询,bankOrderId = %s", bankOrderId)) - return - } - - payForQueryTask := PayForQueryTask{Delay: time.NewTimer(time.Duration(PayForQueryInterval) * time.Minute), MerchantOrderId: payFor.MerchantOrderId, - BankOrderId: payFor.BankOrderId, FirstNotifyTime: utils.GetBasicDateTime(), QueryTimes: 1, LimitTimes: PayForLimitTimes, Status: payFor.Status} - - go PayForQueryTimer(payForQueryTask) -} - -/* -* 创建代付查询的消费者 - */ -func CreatePayForQueryConsumer() { - //启动定时任务 - conn := message_queue.GetActiveMQConn() - if conn == nil { - logs.Error("启动消息队列消费者失败....") - os.Exit(1) - } - - logs.Notice("代付查询消费启动成功......") - - payForQuery, err := conn.Subscribe(common.MQ_PAYFOR_QUERY, stomp.AckClient) - if err != nil { - logs.Error("订阅代付查询失败......") - os.Exit(1) - } - - for { - select { - case v := <-payForQuery.C: - if v != nil { - bankOrderId := string(v.Body) - go payForQueryConsumer(bankOrderId) - //应答,重要 - err := conn.Ack(v) - if err != nil { - logs.Error("消息应答失败!") - } - } - } - } -} diff --git a/microservice/supplier/alipay.go b/microservice/supplier/alipay.go deleted file mode 100644 index 1b6d4cd..0000000 --- a/microservice/supplier/alipay.go +++ /dev/null @@ -1,70 +0,0 @@ -/*************************************************** - ** @Desc : This file for ... - ** @Time : 2019/10/28 16:38 - ** @Author : yuebin - ** @File : alipay - ** @Last Modified by : yuebin - ** @Last Modified time: 2019/10/28 16:38 - ** @Software: GoLand -****************************************************/ -package controller - -import ( - "microservice/models" -) - -type AlipayImpl struct { -} - -func (c *AlipayImpl) Scan(orderInfo models.OrderInfo, roadInfo models.RoadInfo, merchantInfo models.MerchantInfo) ScanData { - var scanData ScanData - scanData.Status = "01" - return scanData -} - -func (c *AlipayImpl) H5(orderInfo models.OrderInfo, roadInfo models.RoadInfo, merchantInfo models.MerchantInfo) ScanData { - var scanData ScanData - scanData.Status = "01" - return scanData -} - -func (c *AlipayImpl) Syt(orderInfo models.OrderInfo, roadInfo models.RoadInfo, merchantInfo models.MerchantInfo) ScanData { - var scanData ScanData - scanData.Status = "01" - return scanData -} - -func (c *AlipayImpl) Fast(orderInfo models.OrderInfo, roadInfo models.RoadInfo, merchantInfo models.MerchantInfo) bool { - var scanData ScanData - scanData.Status = "01" - return true -} - -func (c *AlipayImpl) Web(orderInfo models.OrderInfo, roadInfo models.RoadInfo, merchantInfo models.MerchantInfo) bool { - var scanData ScanData - scanData.Status = "01" - return true -} - -func (c *AlipayImpl) PayNotify() { -} - -func (c *AlipayImpl) PayQuery(orderInfo models.OrderInfo) bool { - return true -} - -func (c *AlipayImpl) PayFor(info models.PayforInfo) string { - return "" -} - -func (c *AlipayImpl) PayForNotify() string { - return "" -} - -func (c *AlipayImpl) PayForQuery(payFor models.PayforInfo) (string, string) { - return "", "" -} - -func (c *AlipayImpl) BalanceQuery(roadInfo models.RoadInfo) float64 { - return 0.00 -} diff --git a/microservice/supplier/consts.go b/microservice/supplier/consts.go deleted file mode 100644 index 6751d91..0000000 --- a/microservice/supplier/consts.go +++ /dev/null @@ -1,14 +0,0 @@ -/*************************************************** - ** @Desc : This file for ... - ** @Time : 2019/11/19 18:12 - ** @Author : yuebin - ** @File : consts.go - ** @Last Modified by : yuebin - ** @Last Modified time: 2019/11/19 18:12 - ** @Software: GoLand -****************************************************/ -package controller - -const ( - PayNotify = "" -) diff --git a/microservice/supplier/gateway_solve.go b/microservice/supplier/gateway_solve.go deleted file mode 100644 index b5d6de3..0000000 --- a/microservice/supplier/gateway_solve.go +++ /dev/null @@ -1,48 +0,0 @@ -/*************************************************** - ** @Desc : 处理网关模块的一些需要操作数据库的功能 - ** @Time : 2019/12/7 16:40 - ** @Author : yuebin - ** @File : gateway_solve - ** @Last Modified by : yuebin - ** @Last Modified time: 2019/12/7 16:40 - ** @Software: GoLand -****************************************************/ -package controller - -import ( - "github.com/beego/beego/v2/adapter/orm" - "github.com/beego/beego/v2/core/logs" - "microservice/models" -) - -/* -* 插入支付订单记录和订单利润记录,保证一致性 - */ -func InsertOrderAndOrderProfit(orderInfo models.OrderInfo, orderProfitInfo models.OrderProfitInfo) bool { - o := orm.NewOrm() - o.Begin() - - defer func(interface{}) { - if err := recover(); err != nil { - o.Rollback() - } - }(o) - - if _, err := o.Insert(&orderInfo); err != nil { - logs.Error("insert orderInfo fail: ", err) - o.Rollback() - return false - } - if _, err := o.Insert(&orderProfitInfo); err != nil { - logs.Error("insert orderProfit fail: ", err) - o.Rollback() - return false - } - - if err := o.Commit(); err != nil { - logs.Error("insert order and orderProfit fail:", err) - } else { - logs.Info("插入order和orderProfit记录成功") - } - return true -} diff --git a/microservice/supplier/init.go b/microservice/supplier/init.go deleted file mode 100644 index 7885ce3..0000000 --- a/microservice/supplier/init.go +++ /dev/null @@ -1,33 +0,0 @@ -/*************************************************** - ** @Desc : 注册上游支付接口 - ** @Time : 2019/10/28 14:48 - ** @Author : yuebin - ** @File : init - ** @Last Modified by : yuebin - ** @Last Modified time: 2019/10/28 14:48 - ** @Software: GoLand -****************************************************/ -package controller - -import ( - "github.com/beego/beego/v2/core/logs" - "microservice/common" - _ "microservice/models" -) - -var registerSupplier = make(map[string]PayInterface) - -//注册各种上游的支付接口 - -func init() { - registerSupplier["KF"] = new(KuaiFuImpl) - logs.Notice(common.CheckSupplierByCode("KF")) - registerSupplier["WEIXIN"] = new(WeiXinImpl) - logs.Notice(common.CheckSupplierByCode("WEIXIN")) - registerSupplier["ALIPAY"] = new(AlipayImpl) - logs.Notice(common.CheckSupplierByCode("ALIPAY")) -} - -func GetPaySupplierByCode(code string) PayInterface { - return registerSupplier[code] -} diff --git a/microservice/supplier/kuaifu.go b/microservice/supplier/kuaifu.go deleted file mode 100644 index 886889d..0000000 --- a/microservice/supplier/kuaifu.go +++ /dev/null @@ -1,381 +0,0 @@ -/*************************************************** - ** @Desc : 快付支付的实现逻辑 - ** @Time : 2019/10/28 14:12 - ** @Author : yuebin - ** @File : kuaifu - ** @Last Modified by : yuebin - ** @Last Modified time: 2019/10/28 14:12 - ** @Software: GoLand -****************************************************/ -package controller - -import ( - "fmt" - "github.com/beego/beego/v2/adapter/httplib" - "github.com/beego/beego/v2/core/logs" - beego "github.com/beego/beego/v2/server/web" - "github.com/rs/xid" - "microservice/common" - "microservice/gojson" - "microservice/models" - "microservice/utils" - "strconv" - "strings" -) - -type KuaiFuImpl struct { - beego.Controller -} - -const ( - HOST = "localhost" - KF_SCAN_HOST = "http://" + HOST + "/gateway/scanPay/payService" - KF_PAYFOR_HOST = "http://" + HOST + "/gateway/remittance/pay" - KF_BALANCE_QUERY = "http://" + HOST + "/gateway/remittance/getBalance" - KF_ORDER_QUERY = "http://" + HOST + "/gateway/scanPay/orderQuery" - KF_PAYFOR_QUERY = "http://" + HOST + "/gateway/remittance/query" - KF_PAY_KEY = "xxxxxxx" - KF_PAY_SECRET = "xxxxxx" -) - -func (c *KuaiFuImpl) Scan(orderInfo models.OrderInfo, roadInfo models.RoadInfo, merchantInfo models.MerchantInfo) ScanData { - payWayCode := "" - switch orderInfo.PayTypeCode { - case "ALI_SCAN": - payWayCode = "SCAN_ALIPAY" - case "WEIXIN_SCAN": - payWayCode = "SCAN_WEIXIN" - case "QQ_SCAN": - payWayCode = "SCAN_QQ" - case "UNION_SCAN": - payWayCode = "SCAN_YL" - case "BAIDU_SCAN": - case "JD_SCAN": - } - //将金额转为带有2位小数点的float - order := fmt.Sprintf("%0.2f", orderInfo.OrderAmount) - params := make(map[string]string) - params["orderNo"] = orderInfo.BankOrderId - params["productName"] = orderInfo.ShopName - params["orderPeriod"] = orderInfo.OrderPeriod - params["orderPrice"] = order - params["payWayCode"] = payWayCode - params["osType"] = orderInfo.OsType - params["notifyUrl"] = PayNotify + "KF" - params["payKey"] = KF_PAY_KEY - //params["field1"] = "field1" - - keys := utils.SortMap(params) - sign := utils.GetMD5Sign(params, keys, KF_PAY_SECRET) - params["sign"] = sign - - req := httplib.Post(KF_SCAN_HOST) - for k, v := range params { - req.Param(k, v) - } - var scanData ScanData - scanData.Supplier = orderInfo.PayProductCode - scanData.PayType = orderInfo.PayTypeCode - scanData.OrderNo = orderInfo.MerchantOrderId - scanData.BankNo = orderInfo.BankOrderId - scanData.OrderPrice = params["orderPrice"] - response, err := req.String() - if err != nil { - logs.Error("KF 请求失败:", err) - scanData.Status = "01" - scanData.Msg = gojson.Json(response).Get("statusMsg").Tostring() - return scanData - } - statusCode := gojson.Json(response).Get("statusCode").Tostring() - if statusCode != "00" { - logs.Error("KF生成扫码地址失败") - scanData.Status = "01" - scanData.Msg = "生成扫码地址失败" - return scanData - } - payUrl := gojson.Json(response).Get("payURL").Tostring() - scanData.Status = "00" - scanData.PayUrl = payUrl - scanData.Msg = "请求成功" - return scanData -} - -func (c *KuaiFuImpl) H5(orderInfo models.OrderInfo, roadInfo models.RoadInfo, merchantInfo models.MerchantInfo) ScanData { - var scanData ScanData - scanData.Status = "01" - return scanData -} - -func (c *KuaiFuImpl) Syt(orderInfo models.OrderInfo, roadInfo models.RoadInfo, merchantInfo models.MerchantInfo) ScanData { - var scanData ScanData - scanData.Status = "01" - return scanData -} - -func (c *KuaiFuImpl) Fast(orderInfo models.OrderInfo, roadInfo models.RoadInfo, merchantInfo models.MerchantInfo) bool { - var scanData ScanData - scanData.Status = "01" - return true -} - -func (c *KuaiFuImpl) Web(orderInfo models.OrderInfo, roadInfo models.RoadInfo, merchantInfo models.MerchantInfo) bool { - var scanData ScanData - scanData.Status = "01" - return true -} - -//支付回调 -func (c *KuaiFuImpl) PayNotify() { - params := make(map[string]string) - orderNo := strings.TrimSpace(c.GetString("orderNo")) - orderInfo := models.GetOrderByBankOrderId(orderNo) - if orderInfo.BankOrderId == "" || len(orderInfo.BankOrderId) == 0 { - logs.Error("快付回调的订单号不存在,订单号=", orderNo) - c.StopRun() - } - roadInfo := models.GetRoadInfoByRoadUid(orderInfo.RoadUid) - if roadInfo.RoadUid == "" || len(roadInfo.RoadUid) == 0 { - logs.Error("支付通道已经关系或者删除,不进行回调") - c.StopRun() - } - merchantUid := orderInfo.MerchantUid - merchantInfo := models.GetMerchantByUid(merchantUid) - if merchantInfo.MerchantUid == "" || len(merchantInfo.MerchantUid) == 0 { - logs.Error("快付回调失败,该商户不存在或者已经删除,商户uid=", merchantUid) - c.StopRun() - } - paySecret := merchantInfo.MerchantSecret - params["orderNo"] = orderNo - params["orderPrice"] = strings.TrimSpace(c.GetString("orderPrice")) - params["orderTime"] = strings.TrimSpace(c.GetString("orderTime")) - params["trxNo"] = strings.TrimSpace(c.GetString("trxNo")) - params["statusCode"] = strings.TrimSpace(c.GetString("statusCode")) - params["tradeStatus"] = strings.TrimSpace(c.GetString("tradeStatus")) - params["field1"] = strings.TrimSpace(c.GetString("field1")) - params["payKey"] = strings.TrimSpace(c.GetString("payKey")) - //对参数进行验签 - keys := utils.SortMap(params) - tmpSign := utils.GetMD5Sign(params, keys, paySecret) - sign := strings.TrimSpace(c.GetString("sign")) - if tmpSign != sign { - logs.Error("快付回调签名异常,回调失败") - c.StopRun() - } - //实际支付金额 - factAmount, err := strconv.ParseFloat(params["orderPrice"], 64) - if err != nil { - logs.Error("快付回调实际金额有误, factAmount=", params["orderPrice"]) - c.StopRun() - } - orderInfo.FactAmount = factAmount - orderInfo.BankTransId = params["trxNo"] - tradeStatus := params["tradeStatus"] - paySolveController := new(PaySolveController) - if tradeStatus == "FAILED" { - if !paySolveController.SolvePayFail(orderInfo, "fail") { - logs.Error("solve order fail fail") - } - } else if tradeStatus == "CANCELED" { - if !paySolveController.SolvePayFail(orderInfo, "cancel") { - logs.Error("solve order cancel fail") - } - } else if tradeStatus == "WAITING_PAYMENT" { - logs.Notice("快付回调,该订单还处于等待支付,订单id=", orderNo) - } else if tradeStatus == "SUCCESS" { - //订单支付成功,需要搞很多事情 TODO - paySolveController.SolvePaySuccess(orderInfo.BankOrderId, orderInfo.FactAmount, c.GetString("trxNo")) - } - c.Ctx.WriteString("success") -} - -func (c *KuaiFuImpl) PayQuery(orderInfo models.OrderInfo) bool { - if orderInfo.Status != "wait" && orderInfo.Status != "" { - logs.Error("订单已经被处理,不需要查询,bankOrderId:", orderInfo.BankOrderId) - return false - } - params := make(map[string]string) - params["orderNo"] = orderInfo.BankOrderId - params["payKey"] = KF_PAY_KEY - paySecret := KF_PAY_SECRET - keys := utils.SortMap(params) - params["sign"] = utils.GetMD5Sign(params, keys, paySecret) - req := httplib.Get(KF_ORDER_QUERY) - for k, v := range params { - req.Param(k, v) - } - response, err := req.String() - if err != nil { - logs.Error("快付订单查询失败,bankOrderId: ", orderInfo.BankOrderId) - logs.Error("err: ", err) - return false - } - statusCode := gojson.Json(response).Get("statusCode").Tostring() - if statusCode != "00" { - logs.Error("快付订单查询返回失败,bankOrderId:", orderInfo.BankOrderId) - logs.Error("err: ", response) - return false - } - //获取用户的实际支付金额 - orderPrice := gojson.Json(response).Get("orderPrice").Tostring() - factAmount, err := strconv.ParseFloat(orderPrice, 64) - if err != nil { - logs.Error("快速查询得到的实际金额错误, orderPrice=", orderPrice) - } - - //orderInfo.FactAmount = orderInfo.OrderAmount - tradeStatus := gojson.Json(response).Get("tradeStatus").Tostring() - paySolveController := new(PaySolveController) - trxNo := gojson.Json(response).Get("trxNo").Tostring() - if tradeStatus == "SUCCESS" { - //调用支付成功的接口,做加款更新操作,需要把实际支付金额传入 - if !paySolveController.SolvePaySuccess(orderInfo.BankOrderId, factAmount, trxNo) { - return false - } - } else if tradeStatus == "FAILED" { - if !paySolveController.SolvePayFail(orderInfo, "fail") { - return false - } - } else { - logs.Info("订单状态处于:" + tradeStatus + ";bankOrderId:" + orderInfo.BankOrderId) - } - return true -} - -func (c *KuaiFuImpl) PayFor(payFor models.PayforInfo) string { - params := make(map[string]string) - params["merchantKey"] = KF_PAY_KEY - params["realname"] = payFor.BankAccountName - params["cardNo"] = payFor.BankAccountNo - params["bankCode"] = payFor.BankCode - if payFor.BankAccountType == common.PRIVATE { - params["accType"] = "01" - } else { - params["accType"] = "02" - } - params["province"] = payFor.BankAccountAddress - params["city"] = payFor.BankAccountAddress - params["bankAccountAddress"] = payFor.BankAccountAddress - //将float64转为字符串 - params["amount"] = strconv.FormatFloat(payFor.PayforAmount, 'f', 2, 64) - params["moblieNo"] = payFor.PhoneNo - params["merchantOrderId"] = payFor.BankOrderId - keys := utils.SortMap(params) - sign := utils.GetMD5Sign(params, keys, KF_PAY_SECRET) - params["sign"] = sign - req := httplib.Post(KF_PAYFOR_HOST) - for k, v := range params { - req.Param(k, v) - } - response, err := req.String() - if err != nil { - logs.Error("快付代付返回错误结果: ", response) - } else { - json := gojson.Json(response) - resultCode := json.Get("resultCode").Tostring() - resultMsg := json.Get("resultMsg").Tostring() - if resultCode != "00" { - logs.Error("快付代付返回错误信息:", resultMsg) - return "fail" - } - settStatus := json.Get("settStatus").Tostring() - if settStatus == "00" { - logs.Info(fmt.Sprintf("代付uid=%s,已经成功发送给了上游处理", payFor.PayforUid)) - } else if settStatus == "01" { - logs.Info(fmt.Sprintf("代付uid=%s,发送失败", payFor.PayforUid)) - } - } - return "success" -} - -func (c *KuaiFuImpl) PayForNotify() string { - return "" -} - -func (c *KuaiFuImpl) PayForQuery(payFor models.PayforInfo) (string, string) { - params := make(map[string]string) - params["merchantKey"] = KF_PAY_KEY - params["timestamp"] = utils.GetNowTimesTamp() - params["merchantOrderId"] = payFor.BankOrderId - keys := utils.SortMap(params) - sign := utils.GetMD5Sign(params, keys, KF_PAY_SECRET) - params["sign"] = sign - req := httplib.Get(KF_PAYFOR_QUERY) - for k, v := range params { - req.Param(k, v) - } - response, err := req.String() - if err != nil { - logs.Error("快付代付查询失败:", err) - return common.PAYFOR_SOLVING, "查询失败" - } - - payFor.ResponseContext = response - payFor.ResponseTime = utils.GetBasicDateTime() - payFor.UpdateTime = utils.GetBasicDateTime() - if !models.UpdatePayFor(payFor) { - logs.Error("更新快付代付订单状态失败") - } - - resultCode := gojson.Json(response).Get("resultCode").Tostring() - resultMsg := gojson.Json(response).Get("resultMsg").Tostring() - - if resultCode != "00" { - logs.Error("快付代付查询返回错误:", resultMsg) - return common.PAYFOR_SOLVING, resultMsg - } - - logs.Info("快付代付查询返回结果:", resultMsg) - - merchantOrderId := gojson.Json(response).Get("merchantOrderId").Tostring() - if merchantOrderId != payFor.BankOrderId { - logs.Error("快付代付返回结果,订单id不一致: ", merchantOrderId) - return common.PAYFOR_SOLVING, "快付代付返回结果,订单id不一致" - } - - settStatus := gojson.Json(response).Get("settStatus").Tostring() - - if settStatus == "00" { - return common.PAYFOR_SUCCESS, "代付成功" - } else if settStatus == "01" { - return common.PAYFOR_FAIL, "代付失败" - } else { - return common.PAYFOR_BANKING, "银行处理中" - } -} - -func (c *KuaiFuImpl) BalanceQuery(roadInfo models.RoadInfo) float64 { - params := make(map[string]string) - params["merchantKey"] = KF_PAY_KEY - params["timestamp"] = utils.GetNowTimesTamp() - params["merchantOrderId"] = xid.New().String() - keys := utils.SortMap(params) - sign := utils.GetMD5Sign(params, keys, KF_PAY_SECRET) - params["sign"] = sign - req := httplib.Get(KF_BALANCE_QUERY) - for k, v := range params { - req.Param(k, v) - } - - response, err := req.String() - if err != nil { - logs.Error("快付余额查询失败,err: ", err) - return 0.00 - } - logs.Debug("快付余额查询返回:", response) - - resultCode := gojson.Json(response).Get("resultCode").Tostring() - resultMsg := gojson.Json(response).Get("resultMsg").Tostring() - logs.Notice("快付返回信息:", resultMsg) - - if resultCode != "00" { - return 0.00 - } - - balance := gojson.Json(response).Get("balance").Tostring() - availableAmount := gojson.Json(response).Get("availableAmount").Tostring() - - logs.Info(fmt.Sprintf("快付余额=%s,可用金额=%s", balance, availableAmount)) - - f, err := strconv.ParseFloat(availableAmount, 64) - return f -} diff --git a/microservice/supplier/order_settle.go b/microservice/supplier/order_settle.go deleted file mode 100644 index e8baa7c..0000000 --- a/microservice/supplier/order_settle.go +++ /dev/null @@ -1,192 +0,0 @@ -/*************************************************** - ** @Desc : 订单结算,将订单上面的钱加入到账户余额中 - ** @Time : 2019/11/22 11:34 - ** @Author : yuebin - ** @File : order_settle - ** @Last Modified by : yuebin - ** @Last Modified time: 2019/11/22 11:34 - ** @Software: GoLand -****************************************************/ -package controller - -import ( - "context" - "errors" - "fmt" - "github.com/beego/beego/v2/client/orm" - "github.com/beego/beego/v2/core/logs" - "microservice/common" - "microservice/models" - "microservice/utils" - "time" -) - -//订单结算,将那些支付成功的订单金额加入到商户账户的结算金额中 -func OrderSettle() { - - params := make(map[string]string) - params["is_allow_settle"] = common.YES - params["is_complete_settle"] = common.NO - orderSettleList := models.GetOrderSettleListByParams(params) - for _, orderSettle := range orderSettleList { - orderProfitInfo := models.GetOrderProfitByBankOrderId(orderSettle.BankOrderId) - if !settle(orderSettle, orderProfitInfo) { - logs.Error(fmt.Sprintf("结算订单bankOrderId=%s, 执行失败", orderSettle.BankOrderId)) - } else { - logs.Info(fmt.Sprintf("结算订单bankOrderId=%s,执行成功", orderSettle.BankOrderId)) - } - } -} - -func settle(orderSettle models.OrderSettleInfo, orderProfit models.OrderProfitInfo) bool { - o := orm.NewOrm() - - if err := o.DoTx(func(ctx context.Context, txOrm orm.TxOrmer) error { - tmpSettle := new(models.OrderSettleInfo) - - if err := txOrm.Raw("select * from order_settle_info where bank_order_id=? for update", orderSettle.BankOrderId).QueryRow(tmpSettle); err != nil || tmpSettle == nil { - logs.Error("获取tmpSettle失败,bankOrderId=%s", orderSettle.BankOrderId) - return err - } - - tmpSettle.UpdateTime = utils.GetBasicDateTime() - tmpSettle.IsCompleteSettle = common.YES - - if _, err := txOrm.Update(tmpSettle); err != nil { - logs.Error("更新tmpSettle失败,错误:", err) - return err - } - - accountInfo := new(models.AccountInfo) - - if err := txOrm.Raw("select * from account_info where account_uid=? for update", orderSettle.MerchantUid).QueryRow(accountInfo); err != nil || accountInfo == nil { - logs.Error("结算select account info失败,错误信息:", err) - return err - } - - accountInfo.UpdateTime = utils.GetBasicDateTime() - accountInfo.SettleAmount += orderProfit.FactAmount - - if _, err := txOrm.Update(accountInfo); err != nil { - logs.Error("结算update account 失败,错误信息:", err) - return err - } - - merchantDeployInfo := models.GetMerchantDeployByUidAndPayType(accountInfo.AccountUid, orderSettle.PayTypeCode) - if merchantDeployInfo.IsLoan == common.YES { - loadAmount := merchantDeployInfo.LoanRate * 0.01 * orderProfit.FactAmount - date := utils.GetDate() - params := make(map[string]string) - params["merchant_uid"] = tmpSettle.MerchantUid - params["road_uid"] = tmpSettle.RoadUid - params["load_date"] = date - - if !models.IsExistMerchantLoadByParams(params) { - tmp := models.MerchantLoadInfo{Status: common.NO, MerchantUid: orderSettle.MerchantUid, RoadUid: orderSettle.RoadUid, - LoadDate: date, LoadAmount: loadAmount, UpdateTime: utils.GetBasicDateTime(), CreateTime: utils.GetBasicDateTime()} - - if _, err := txOrm.Insert(tmp); err != nil { - logs.Error("結算插入merchantLoad失敗,失败信息:", err) - return err - } else { - logs.Info("结算插入新的merchantLoad信息成功") - } - } else { - merchantLoad := new(models.MerchantLoadInfo) - if err := txOrm.Raw("select * from merchant_load_info where merchant_uid=? and road_uid=? and load_date=? for update"). - QueryRow(merchantLoad); err != nil || merchantLoad == nil { - logs.Error(fmt.Sprintf("结算过程,select merchant load info失败,错误信息:%s", err)) - return err - } else { - merchantLoad.UpdateTime = utils.GetBasicDateTime() - merchantLoad.LoadAmount = merchantLoad.LoadAmount + loadAmount - if _, err := txOrm.Update(merchantLoad); err != nil { - logs.Error(fmt.Sprintf("结算过程,update merchant load info失败,失败信息:%s", err)) - return err - } - } - } - } else { - logs.Info(fmt.Sprintf("结算过程中,该商户不需要押款,全款结算")) - } - return nil - - }); err != nil { - return false - } - return true -} - -/* -* 商户的押款释放处理,根据商户的押款时间进行处理 - */ -func MerchantLoadSolve() { - hour := time.Now().Hour() - merchantDeployList := models.GetMerchantDeployByHour(hour) - for _, merchantDeploy := range merchantDeployList { - logs.Info(fmt.Sprintf("开始执行商户uid=%s,进行解款操作", merchantDeploy.MerchantUid)) - - loadDate := utils.GetDateBeforeDays(merchantDeploy.LoanDays) - params := make(map[string]string) - params["status"] = common.NO - params["merchant_uid"] = merchantDeploy.MerchantUid - params["load_date"] = loadDate - - merchantLoadList := models.GetMerchantLoadInfoByMap(params) - for _, merchantLoad := range merchantLoadList { - if MerchantAbleAmount(merchantLoad) { - logs.Info(fmt.Sprintf("商户uid=%s,押款金额=%f,押款通道=%s, 解款成功", merchantLoad.MerchantUid, merchantLoad.LoadAmount, merchantLoad.RoadUid)) - } else { - logs.Error(fmt.Sprintf("商户uid=%s,押款金额=%f,押款通道=%s, 解款失败", merchantLoad.MerchantUid, merchantLoad.LoadAmount, merchantLoad.RoadUid)) - } - } - } -} - -/* -* 对应的商户的账户可用金额进行调整操作 - */ -func MerchantAbleAmount(merchantLoad models.MerchantLoadInfo) bool { - o := orm.NewOrm() - - if err := o.DoTx(func(ctx context.Context, txOrm orm.TxOrmer) error { - tmpLoad := new(models.MerchantLoadInfo) - - if err := txOrm.Raw("select * from merchant_load_info where merchant_uid=? and road_uid=? and load_date=? for update", - merchantLoad.MerchantUid, merchantLoad.RoadUid, merchantLoad.LoadDate).QueryRow(tmpLoad); err != nil || tmpLoad == nil { - logs.Error(fmt.Sprintf("解款操作获取商户押款信息失败,fail: %s", err)) - return err - - } - if tmpLoad.Status != common.NO { - logs.Error(fmt.Sprintf("押款信息merchantuid=%s,通道uid=%s, 押款日期=%s,已经解款过,不需要再进行处理了", tmpLoad.MerchantUid, tmpLoad.RoadUid, tmpLoad.LoadDate)) - return errors.New("已经解款过,不需要再进行处理了") - } - - tmpLoad.UpdateTime = utils.GetBasicDateTime() - tmpLoad.Status = common.YES - - if _, err := txOrm.Update(tmpLoad); err != nil { - logs.Error(fmt.Sprintf("解款操作更新merchant load info 失败:%s", err)) - return err - } - - accountInfo := new(models.AccountInfo) - accountInfo.UpdateTime = utils.GetBasicDateTime() - if accountInfo.LoanAmount >= tmpLoad.LoadAmount { - accountInfo.LoanAmount -= tmpLoad.LoadAmount - } else { - accountInfo.LoanAmount = common.ZERO - } - - if _, err := txOrm.Update(accountInfo); err != nil { - logs.Error(fmt.Sprintf("解款操作更新account info 失败:%s,账户uid=%s", err, accountInfo.AccountUid)) - return err - } - - return nil - }); err != nil { - return false - } - return true -} diff --git a/microservice/supplier/pay_solve.go b/microservice/supplier/pay_solve.go deleted file mode 100644 index 5c6c16f..0000000 --- a/microservice/supplier/pay_solve.go +++ /dev/null @@ -1,489 +0,0 @@ -/*************************************************** - ** @Desc : 处理订单状态,用户加款等核心业务 - ** @Time : 2019/10/31 11:44 - ** @Author : yuebin - ** @File : pay_solve - ** @Last Modified by : yuebin - ** @Last Modified time: 2019/10/31 11:44 - ** @Software: GoLand -****************************************************/ -package controller - -import ( - "context" - "errors" - "fmt" - "github.com/beego/beego/v2/client/orm" - "github.com/beego/beego/v2/core/logs" - "microservice/common" - "microservice/message_queue" - "microservice/models" - "microservice/utils" - url2 "net/url" - "strconv" -) - -type PaySolveController struct { -} - -//处理支付成功的加款等各项操作 -func (c *PaySolveController) SolvePaySuccess(bankOrderId string, factAmount float64, trxNo string) bool { - - o := orm.NewOrm() - - err := o.DoTx(func(ctx context.Context, txOrm orm.TxOrmer) error { - - var orderInfo models.OrderInfo - if err := txOrm.Raw("select * from order_info where bank_order_id = ? for update", bankOrderId).QueryRow(&orderInfo); err != nil || orderInfo.BankOrderId == "" { - logs.Error("不存在该订单,或者select for update出错") - return err - } - - if orderInfo.Status != "wait" { - logs.Error("该订单已经处理,订单号=", bankOrderId) - return errors.New(fmt.Sprintf("该订单已经处理,订单号= %s", bankOrderId)) - } - - if factAmount <= common.ZERO { - factAmount = orderInfo.OrderAmount - } - - var orderProfitInfo models.OrderProfitInfo - if err := txOrm.Raw("select * from order_profit_info where bank_order_id = ? for update", bankOrderId).QueryRow(&orderProfitInfo); err != nil || orderProfitInfo.BankOrderId == "" { - logs.Error("select order_profit_info for update fail: ", err) - return err - } - - if orderProfitInfo.BankOrderId == "" { - logs.Error("solve pay success, get orderProfit fail, bankOrderId = ", bankOrderId) - return errors.New(fmt.Sprintf("solve pay success, get orderProfit fail, bankOrderId = %s", bankOrderId)) - } - - comp := c.CompareOrderAndFactAmount(factAmount, orderInfo) - //如果实际支付金额比订单金额大或者小,那么重新按照实际金额金额利润计算 - if comp != 0 { - orderProfitInfo.FactAmount = factAmount - orderProfitInfo.SupplierProfit = orderInfo.FactAmount * orderProfitInfo.SupplierRate - orderProfitInfo.PlatformProfit = orderInfo.FactAmount * orderProfitInfo.PlatformRate - orderProfitInfo.AgentProfit = orderInfo.FactAmount * orderProfitInfo.AgentRate - orderProfitInfo.AllProfit = orderProfitInfo.SupplierProfit + orderProfitInfo.PlatformProfit + orderProfitInfo.AgentProfit - orderProfitInfo.UserInAmount = orderProfitInfo.FactAmount - orderProfitInfo.AllProfit - orderProfitInfo.UpdateTime = utils.GetBasicDateTime() - - orderInfo.FactAmount = factAmount - //如果实际支付金额跟订单金额有出入,那么需要重新更新利润记录 - if _, err := txOrm.Update(orderProfitInfo); err != nil { - logs.Info("solve pay success fail:", err) - return err - } - } - - orderInfo.Status = common.SUCCESS - orderInfo.BankTransId = trxNo - orderInfo.UpdateTime = utils.GetBasicDateTime() - if _, err := txOrm.Update(&orderInfo); err != nil || orderInfo.BankOrderId == "" { - logs.Error(fmt.Sprintf("solve pay success, update order info fail: %s, bankOrderId = %s", err, bankOrderId)) - return err - } - - //插入一条待结算记录 - settAmount := orderProfitInfo.FactAmount - orderProfitInfo.SupplierProfit - orderProfitInfo.PlatformProfit - orderProfitInfo.AgentProfit - if settAmount <= 0.00 { - logs.Error(fmt.Sprintf("订单id=%s,计算利润存在异常", bankOrderId)) - return errors.New(fmt.Sprintf("订单id=%s,计算利润存在异常", bankOrderId)) - } - orderSettleInfo := models.OrderSettleInfo{PayTypeCode: orderInfo.PayTypeCode, PayProductCode: orderInfo.PayProductCode, RoadUid: orderInfo.RoadUid, - PayProductName: orderInfo.PayProductName, PayTypeName: orderInfo.PayTypeName, MerchantUid: orderInfo.MerchantUid, MerchantOrderId: orderInfo.MerchantOrderId, - MerchantName: orderInfo.MerchantName, BankOrderId: bankOrderId, SettleAmount: settAmount, IsAllowSettle: common.YES, - IsCompleteSettle: common.NO, UpdateTime: utils.GetBasicDateTime(), CreateTime: utils.GetBasicDateTime()} - - if _, err := txOrm.Insert(&orderSettleInfo); err != nil { - logs.Error(fmt.Sprintf("solve pay success,insert order settle info fail: %s, bankOrderId = %s", err, bankOrderId)) - return err - } - - //做账户的加款操作,最重要的一部 - var accountInfo models.AccountInfo - if err := txOrm.Raw("select * from account_info where account_uid = ? for update", orderInfo.MerchantUid).QueryRow(&accountInfo); err != nil || accountInfo.AccountUid == "" { - logs.Error(fmt.Sprintf("solve pay success, raw account info fail: %s, bankOrderId = %s", err, bankOrderId)) - return err - } - if _, err := txOrm.QueryTable(models.ACCOUNT_INFO).Filter("account_uid", orderInfo.MerchantUid). - Update((orm.Params{"balance": accountInfo.Balance + settAmount, "wait_amount": accountInfo.WaitAmount + settAmount})); err != nil { - logs.Error(fmt.Sprintf("solve pay success, update account info fail: %s, bankOrderId = %s", err, bankOrderId)) - return err - } - - //添加一条动账记录 - accountHistory := models.AccountHistoryInfo{AccountUid: orderInfo.MerchantUid, AccountName: orderInfo.MerchantName, - Type: common.PLUS_AMOUNT, Amount: settAmount, Balance: accountInfo.Balance + settAmount, - UpdateTime: utils.GetBasicDateTime(), CreateTime: utils.GetBasicDateTime()} - if _, err := txOrm.Insert(&accountHistory); err != nil { - logs.Error(fmt.Sprintf("solve pay success,insert account history fail:%s, bankOrderId = %s", err, bankOrderId)) - return err - } - - //更新通道信息 - roadInfo := models.GetRoadInfoByRoadUid(orderInfo.RoadUid) - roadInfo.UpdateTime = utils.GetBasicDateTime() - roadInfo.RequestSuccess += 1 - roadInfo.TotalIncome += orderInfo.FactAmount - roadInfo.TodayIncome += orderInfo.FactAmount - roadInfo.TodayProfit += orderProfitInfo.PlatformProfit + orderProfitInfo.AgentProfit - roadInfo.TotalProfit += orderProfitInfo.PlatformProfit + orderProfitInfo.AgentProfit - roadInfo.UpdateTime = utils.GetBasicDateTime() - if _, err := txOrm.Update(&roadInfo); err != nil { - logs.Error(fmt.Sprintf("solve pay success, update road info fail: %s, bankOrderId = %s", err, bankOrderId)) - return err - } - - //更新订单利润表 - orderProfitInfo.Status = common.SUCCESS - orderProfitInfo.UpdateTime = utils.GetBasicDateTime() - if _, err := txOrm.Update(&orderProfitInfo); err != nil { - logs.Error(fmt.Sprintf("solve pay success, update order profit info fail: %s, bankOrderId = %s", err, bankOrderId)) - return err - } - - // 给下游发送回调通知 - go c.CreateOrderNotifyInfo(orderInfo, common.SUCCESS) - - return nil - }) - - if err != nil { - logs.Error("SolvePaySuccess失败:", err) - return false - } - - logs.Info("SolvePaySuccess处理成功") - return true -} - -//处理支付失败 -func (c *PaySolveController) SolvePayFail(orderInfo models.OrderInfo, str string) bool { - o := orm.NewOrm() - err := o.DoTx(func(ctx context.Context, txOrm orm.TxOrmer) error { - - var orderTmp models.OrderInfo - bankOrderId := orderInfo.BankOrderId - if err := txOrm.Raw("select * from order_info where bank_order_id = ?", bankOrderId).QueryRow(&orderTmp); err != nil || orderTmp.BankOrderId == "" { - return err - } - - if orderTmp.Status != "wait" { - return errors.New("订单已经处理,不要重复加款") - } - if _, err := txOrm.QueryTable(models.ORDER_INFO).Filter("bank_order_id", bankOrderId).Update(orm.Params{"status": str, "bank_trans_id": orderInfo.BankTransId}); err != nil { - logs.Error("更改订单状态失败:", err) - return err - } - if _, err := txOrm.QueryTable(models.ORDER_PROFIT_INFO).Filter("bank_order_id", bankOrderId).Update(orm.Params{"status": str, "bank_trans_id": orderInfo.BankTransId}); err != nil { - logs.Error("更改订单状态失败:", err) - return err - } - - go c.CreateOrderNotifyInfo(orderInfo, common.FAIL) - - return nil - }) - - if err != nil { - logs.Error("SolvePayFail:", err) - return false - } - - logs.Info("SolvePayFail成功") - return true -} - -//处理订单冻结 -func (c *PaySolveController) SolveOrderFreeze(bankOrderId string) bool { - o := orm.NewOrm() - - err := o.DoTx(func(ctx context.Context, txOrm orm.TxOrmer) error { - - var orderInfo models.OrderInfo - if err := txOrm.Raw("select * from order_info where bank_order_id = ? for update", bankOrderId).QueryRow(&orderInfo); err != nil || orderInfo.BankOrderId == "" { - logs.Error("solve order freeze 不存在这样的订单记录,bankOrderId = ", bankOrderId) - return err - } - - if orderInfo.Status != common.SUCCESS { - logs.Error("非成功订单不能进行冻结") - return errors.New("非成功订单不能进行冻结") - } - - orderInfo.Freeze = common.YES - orderInfo.FreezeTime = utils.GetBasicDateTime() - orderInfo.UpdateTime = utils.GetBasicDateTime() - if _, err := txOrm.Update(&orderInfo); err != nil { - logs.Error("solve order freeze fail: ", err) - return err - } - - //账户的冻结金额里面加入相应的金额 - orderProfitInfo := models.GetOrderProfitByBankOrderId(bankOrderId) - var accountInfo models.AccountInfo - if err := txOrm.Raw("select * from account_info where account_uid = ? for update", orderInfo.MerchantUid).QueryRow(&accountInfo); err != nil || accountInfo.AccountUid == "" { - logs.Error(fmt.Sprintf("solve pay fail select acount fail:%s", err)) - return err - } - accountInfo.UpdateTime = utils.GetBasicDateTime() - accountInfo.FreezeAmount = accountInfo.FreezeAmount + orderProfitInfo.UserInAmount - if _, err := txOrm.Update(&accountInfo); err != nil { - logs.Error("solve order freeze fail: ", err) - return err - } - //插入一条动账记录 - accountHistoryInfo := models.AccountHistoryInfo{AccountName: accountInfo.AccountName, AccountUid: accountInfo.AccountUid, - Type: common.FREEZE_AMOUNT, Amount: orderProfitInfo.UserInAmount, Balance: accountInfo.Balance, UpdateTime: utils.GetBasicDateTime(), CreateTime: utils.GetBasicDateTime()} - if _, err := txOrm.Insert(&accountHistoryInfo); err != nil { - logs.Error("solve order freeze fail: ", err) - return err - } - - return nil - }) - - if err != nil { - logs.Error("SolveOrderFreeze:", err) - return false - } - - logs.Info("SolveOrderFreeze") - - return true -} - -//订单解冻 -func (c *PaySolveController) SolveOrderUnfreeze(bankOrderId string) bool { - o := orm.NewOrm() - - if err := o.DoTx(func(ctx context.Context, txOrm orm.TxOrmer) error { - - orderInfo := new(models.OrderInfo) - if err := txOrm.Raw("select * from order_info where bank_order_id = ? for update", bankOrderId).QueryRow(orderInfo); err != nil || orderInfo.BankOrderId == "" { - logs.Error("solve order unfreeze 不存在这样的订单记录,bankOrderId = ", bankOrderId) - return err - } - - orderInfo.Freeze = "" - orderInfo.Unfreeze = common.YES - orderInfo.UnfreezeTime = utils.GetBasicDateTime() - orderInfo.UpdateTime = utils.GetBasicDateTime() - if _, err := txOrm.Update(orderInfo); err != nil { - logs.Error("solve order unfreeze fail: ", err) - return err - } - - orderProfitInfo := models.GetOrderProfitByBankOrderId(bankOrderId) - - accountInfo := new(models.AccountInfo) - if err := txOrm.Raw("select * from account_info where account_uid = ? for update", orderInfo.MerchantUid).QueryRow(accountInfo); err != nil || accountInfo.AccountUid == "" { - logs.Error(fmt.Sprintf("unfreeze select account fail: %s", err)) - return err - } - accountInfo.UpdateTime = utils.GetBasicDateTime() - accountInfo.FreezeAmount = accountInfo.FreezeAmount - orderProfitInfo.UserInAmount - - if _, err := txOrm.Update(accountInfo); err != nil { - logs.Error("solve order unfreeze fail: ", err) - return err - } - - accountHistoryInfo := models.AccountHistoryInfo{AccountUid: accountInfo.AccountUid, AccountName: accountInfo.AccountName, Type: common.UNFREEZE_AMOUNT, - Amount: orderProfitInfo.UserInAmount, Balance: accountInfo.Balance, UpdateTime: utils.GetBasicDateTime(), CreateTime: utils.GetBasicDateTime()} - - if _, err := txOrm.Insert(&accountHistoryInfo); err != nil { - return err - } - - return nil - }); err != nil { - logs.Error("SolveOrderUnfreeze失败:", err) - return false - } - - return true -} - -func (c *PaySolveController) SolveRefund(bankOrderId string) bool { - o := orm.NewOrm() - if err := o.DoTx(func(ctx context.Context, txOrm orm.TxOrmer) error { - - orderInfo := new(models.OrderInfo) - if err := txOrm.Raw("select * from order_info where bank_order_id = ? for update", bankOrderId).QueryRow(orderInfo); err != nil || orderInfo.BankOrderId == "" { - logs.Error("solve refund 不存在这样的订单,bankOrderId = " + bankOrderId) - return err - } - - orderInfo.UpdateTime = utils.GetBasicDateTime() - orderInfo.Refund = common.YES - orderInfo.RefundTime = utils.GetBasicDateTime() - - orderProfitInfo := models.GetOrderProfitByBankOrderId(bankOrderId) - account := new(models.AccountInfo) - if err := txOrm.Raw("select * from account_info where account_uid = ? for update", orderInfo.MerchantUid).QueryRow(account); err != nil || account.AccountUid == "" { - return err - } - - account.UpdateTime = utils.GetBasicDateTime() - account.SettleAmount = account.SettleAmount - orderProfitInfo.UserInAmount - account.Balance = account.Balance - orderProfitInfo.UserInAmount - - if orderInfo.Freeze == common.YES { - account.FreezeAmount = account.FreezeAmount - orderProfitInfo.UserInAmount - if account.FreezeAmount < 0 { - account.FreezeAmount = common.ZERO - } - orderInfo.Freeze = "" - } - - if _, err := txOrm.Update(orderInfo); err != nil { - logs.Error("solve order refund update order info fail: ", err) - return err - } - if _, err := txOrm.Update(account); err != nil { - logs.Error("solve order refund update account fail: ", err) - return err - } - - accountHistoryInfo := models.AccountHistoryInfo{AccountName: account.AccountName, AccountUid: account.AccountUid, - Type: common.REFUND, Amount: orderProfitInfo.UserInAmount, Balance: account.Balance, - UpdateTime: utils.GetBasicDateTime(), CreateTime: utils.GetBasicDateTime()} - - if _, err := txOrm.Insert(&accountHistoryInfo); err != nil { - logs.Error("solve order refund insert account history fail: ", err) - return err - } - - return nil - }); err != nil { - logs.Error("SolveRefund 成功:", err) - return false - } - return true -} - -func (c *PaySolveController) SolveOrderRoll(bankOrderId string) bool { - o := orm.NewOrm() - if err := o.DoTx(func(ctx context.Context, txOrm orm.TxOrmer) error { - - orderInfo := new(models.OrderInfo) - - if err := txOrm.Raw("select * from order_info where bank_order_id = ? for update", bankOrderId).QueryRow(orderInfo); err != nil { - logs.Error("solve order roll fail: ", err) - return err - } - - if orderInfo.Status != common.SUCCESS { - logs.Error("solve order roll 订单不存在或者订单状态不是success, bankOrderId=", bankOrderId) - return errors.New("solve order roll failed") - } - orderInfo.UpdateTime = utils.GetBasicDateTime() - - orderProfitInfo := models.GetOrderProfitByBankOrderId(bankOrderId) - - account := new(models.AccountInfo) - if err := txOrm.Raw("select * from account_info where account_uid = ? for update", orderInfo.MerchantUid).QueryRow(account); err != nil || account.AccountUid == "" { - return err - } - - account.UpdateTime = utils.GetBasicDateTime() - if orderInfo.Refund == common.YES { - account.Balance = account.Balance + orderProfitInfo.UserInAmount - account.SettleAmount = account.SettleAmount + orderProfitInfo.UserInAmount - orderInfo.Refund = common.NO - } - - if _, err := txOrm.Update(orderInfo); err != nil { - logs.Error("solve order roll fail update order info fail: ", err) - return err - } - if _, err := txOrm.Update(account); err != nil { - logs.Error("solve order roll update account fail: ", err) - return err - } - - accountHistoryInfo := models.AccountHistoryInfo{AccountUid: account.AccountUid, AccountName: account.AccountName, - Type: common.PLUS_AMOUNT, Amount: orderProfitInfo.UserInAmount, Balance: account.Balance, - UpdateTime: utils.GetBasicDateTime(), CreateTime: utils.GetBasicDateTime()} - - if _, err := txOrm.Insert(&accountHistoryInfo); err != nil { - logs.Error("solve order roll insert account history fail: ", err) - return err - } - - return nil - - }); err != nil { - logs.Error("SolveOrderRoll处理失败:", err) - return false - } - - return true -} - -//比较订单金额和实际支付金额的大小 -func (c *PaySolveController) CompareOrderAndFactAmount(factAmount float64, orderInfo models.OrderInfo) int { - orderAmount := orderInfo.OrderAmount - //将金额放大1000倍 - oa := int64(orderAmount * 1000) - fa := int64(factAmount * 1000) - if oa > fa { - //如果实际金额大,返回1 - return 1 - } else if oa == fa { - return 0 - } else { - return 2 - } -} - -//支付完成后,处理给商户的回调信息 -func (c *PaySolveController) CreateOrderNotifyInfo(orderInfo models.OrderInfo, tradeStatus string) { - - notifyInfo := new(models.NotifyInfo) - notifyInfo.Type = "order" - notifyInfo.BankOrderId = orderInfo.BankOrderId - notifyInfo.MerchantOrderId = orderInfo.MerchantOrderId - notifyInfo.Status = "wait" - notifyInfo.Times = 0 - notifyInfo.UpdateTime = utils.GetBasicDateTime() - notifyInfo.CreateTime = utils.GetBasicDateTime() - - merchantInfo := models.GetMerchantByUid(orderInfo.MerchantUid) - - params := make(map[string]string) - params["orderNo"] = orderInfo.MerchantOrderId - params["orderPrice"] = strconv.FormatFloat(orderInfo.OrderAmount, 'f', 2, 64) - params["factPrice"] = strconv.FormatFloat(orderInfo.FactAmount, 'f', 2, 64) - params["orderTime"] = utils.GetDateTimeNot() - - if orderInfo.BankTransId != "" { - params["trxNo"] = orderInfo.BankTransId - } else { - params["trxNo"] = orderInfo.BankOrderId - } - params["statusCode"] = "00" - params["tradeStatus"] = tradeStatus - params["payKey"] = merchantInfo.MerchantKey - - params["sign"] = utils.GetMD5Sign(params, utils.SortMap(params), merchantInfo.MerchantSecret) - - url := url2.Values{} - for k, v := range params { - url.Add(k, v) - } - - notifyInfo.Url = orderInfo.NotifyUrl + "?" + url.Encode() - - if models.InsertNotifyInfo(*notifyInfo) { - logs.Info(fmt.Sprintf("订单bankOrderId=%s,已经将回调地址插入数据库", orderInfo.BankOrderId)) - } else { - logs.Error(fmt.Sprintf("订单bankOrderId=%s,插入回调数据库失败", orderInfo.BankOrderId)) - } - //将订单发送到消息队列,给下面的商户进行回调 - message_queue.SendMessage(common.MqOrderNotify, orderInfo.BankOrderId) -} diff --git a/microservice/supplier/payfor_solve.go b/microservice/supplier/payfor_solve.go deleted file mode 100644 index 65faa75..0000000 --- a/microservice/supplier/payfor_solve.go +++ /dev/null @@ -1,350 +0,0 @@ -/*************************************************** - ** @Desc : 代付处理 - ** @Time : 2019/11/28 18:52 - ** @Author : yuebin - ** @File : payfor_solve - ** @Last Modified by : yuebin - ** @Last Modified time: 2019/11/28 18:52 - ** @Software: GoLand -****************************************************/ -package controller - -import ( - "context" - "errors" - "fmt" - "github.com/beego/beego/v2/client/orm" - "github.com/beego/beego/v2/core/logs" - "microservice/common" - "microservice/message_queue" - "microservice/models" - "microservice/utils" - "strings" -) - -func PayForFail(payFor models.PayforInfo) bool { - - o := orm.NewOrm() - if err := o.DoTx(func(ctx context.Context, txOrm orm.TxOrmer) error { - - var tmpForPay models.PayforInfo - if err := txOrm.Raw("select * from payfor_info where bank_order_id = ? for update", payFor.BankOrderId).QueryRow(&tmpForPay); err != nil || tmpForPay.PayforUid == "" { - logs.Error("solve pay fail select fail:", err) - return err - } - - if tmpForPay.Status == common.PAYFOR_FAIL || tmpForPay.Status == common.PAYFOR_SUCCESS { - logs.Error(fmt.Sprintf("该代付订单uid=%s,状态已经是最终结果", payFor.PayforUid)) - return errors.New("状态已经是最终结果") - } - //更新payfor记录的状态 - tmpForPay.Status = common.PAYFOR_FAIL - tmpForPay.UpdateTime = utils.GetBasicDateTime() - if _, err := txOrm.Update(&tmpForPay); err != nil { - logs.Error("PayForFail update payfor_info fail: ", err) - return err - } - - var account models.AccountInfo - if err := txOrm.Raw("select * from account_info where account_uid = ? for update", payFor.MerchantUid).QueryRow(&account); err != nil || account.AccountUid == "" { - logs.Error("payfor select account fail:", err) - return err - } - account.UpdateTime = utils.GetBasicDateTime() - if account.PayforAmount < (payFor.PayforAmount + payFor.PayforFee) { - logs.Error(fmt.Sprintf("商户uid=%s,账户中待代付金额小于代付记录的金额", payFor.MerchantUid)) - return errors.New("账户中待代付金额小于代付记录的金额") - } - //将正在打款中的金额减去 - account.PayforAmount = account.PayforAmount - payFor.PayforAmount - payFor.PayforFee - - if _, err := txOrm.Update(&account); err != nil { - logs.Error("PayForFail update account fail: ", err) - return err - } - - return nil - - }); err != nil { - return false - } - return true -} - -func PayForSuccess(payFor models.PayforInfo) bool { - o := orm.NewOrm() - - if err := o.DoTx(func(ctx context.Context, txOrm orm.TxOrmer) error { - var tmpPayFor models.PayforInfo - if err := txOrm.Raw("select * from payfor_info where bank_order_id = ? for update", payFor.BankOrderId).QueryRow(&tmpPayFor); err != nil || tmpPayFor.PayforUid == "" { - logs.Error("payfor success select payfor fail:", err) - return err - } - if tmpPayFor.Status == common.PAYFOR_FAIL || tmpPayFor.Status == common.PAYFOR_SUCCESS { - logs.Error(fmt.Sprintf("该代付订单uid=%s,已经是最终结果,不需要处理", payFor.PayforUid)) - return errors.New("已经是最终结果,不需要处理") - } - tmpPayFor.UpdateTime = utils.GetBasicDateTime() - tmpPayFor.Status = common.PAYFOR_SUCCESS - _, err := txOrm.Update(&tmpPayFor) - if err != nil { - logs.Error("PayForSuccess update payfor fail: ", err) - return err - } - - var account models.AccountInfo - if err := txOrm.Raw("select * from account_info where account_uid = ? for update", payFor.MerchantUid).QueryRow(&account); err != nil || account.AccountUid == "" { - logs.Error("payfor success select account fail:", err) - return err - } - - account.UpdateTime = utils.GetBasicDateTime() - if account.PayforAmount < (payFor.PayforAmount + payFor.PayforFee) { - logs.Error(fmt.Sprintf("商户uid=%s,账户中待代付金额小于代付记录的金额", payFor.MerchantUid)) - return errors.New("账户中待代付金额小于代付记录的金额") - } - - //代付打款中的金额减去 - account.PayforAmount = account.PayforAmount - payFor.PayforAmount - payFor.PayforFee - //减去余额,减去可用金额 - account.Balance = account.Balance - payFor.PayforAmount - payFor.PayforFee - //已结算金额减去 - account.SettleAmount = account.SettleAmount - payFor.PayforAmount - payFor.PayforFee - - if _, err := txOrm.Update(&account); err != nil { - logs.Error("PayForSuccess udpate account fail:", err) - return err - } - - //添加一条动账记录 - accountHistory := models.AccountHistoryInfo{AccountUid: payFor.MerchantUid, AccountName: payFor.MerchantName, - Type: common.SUB_AMOUNT, Amount: payFor.PayforAmount + payFor.PayforFee, Balance: account.Balance, - UpdateTime: utils.GetBasicDateTime(), CreateTime: utils.GetBasicDateTime()} - - if _, err := txOrm.Insert(&accountHistory); err != nil { - logs.Error("PayForSuccess insert account history fail: ", err) - return err - } - - return nil - }); err != nil { - return false - } - - return true -} - -/* -* 自动审核代付订单 - */ -func SolvePayForConfirm() { - params := make(map[string]string) - beforeOneDay := utils.GetDateTimeBeforeDays(1) - nowDate := utils.GetBasicDateTime() - params["create_time__lte"] = beforeOneDay - params["create_time__gte"] = nowDate - params["status"] = common.PAYFOR_COMFRIM - payForList := models.GetPayForListByParams(params) - for _, p := range payForList { - if p.Type == common.SELF_HELP || p.Type == common.SELF_MERCHANT { - //系统后台提交的,人工审核 - continue - } - //判断商户是否开通了自动代付功能 - merchant := models.GetMerchantByUid(p.MerchantUid) - //判断商户是否开通了自动代付 - if merchant.AutoPayFor == common.NO || merchant.AutoPayFor == "" { - logs.Notice(fmt.Sprintf("该商户uid=%s, 没有开通自动代付功能", p.MerchantUid)) - continue - } - //找自动代付通道 - findPayForRoad(p, merchant) - } -} - -func findPayForRoad(payFor models.PayforInfo, merchant models.MerchantInfo) bool { - //检查是否单独填写了每笔代付的手续费 - if merchant.PayforFee > common.ZERO { - logs.Info(fmt.Sprintf("商户uid=%s,有单独的代付手续费。", merchant.MerchantUid)) - payFor.PayforFee = merchant.PayforFee - payFor.PayforTotalAmount = payFor.PayforFee + payFor.PayforAmount - } - - if merchant.SinglePayForRoadUid != "" { - payFor.RoadUid = merchant.SinglePayForRoadUid - payFor.RoadName = merchant.SinglePayForRoadName - } else { - //到轮询里面寻找代付通道 - if merchant.RollPayForRoadCode == "" { - logs.Notice(fmt.Sprintf("该商户没有配置代付通道")) - return false - } - roadPoolInfo := models.GetRoadPoolByRoadPoolCode(merchant.RollPayForRoadCode) - roadUids := strings.Split(roadPoolInfo.RoadUidPool, "||") - roadInfoList := models.GetRoadInfosByRoadUids(roadUids) - if len(roadUids) == 0 || len(roadInfoList) == 0 { - logs.Error(fmt.Sprintf("通道轮询池=%s, 没有配置通道", merchant.RollPayForRoadCode)) - return false - } - payFor.RoadUid = roadInfoList[0].RoadUid - payFor.RoadName = roadInfoList[0].RoadName - } - - o := orm.NewOrm() - // 开启事务 - if err := o.DoTx(func(ctx context.Context, txOrm orm.TxOrmer) error { - var tmpPayFor models.PayforInfo - if err := txOrm.Raw("select * from payfor_info where payfor_uid = ? for update", payFor.PayforUid).QueryRow(&tmpPayFor); err != nil || tmpPayFor.PayforUid == "" { - logs.Error("find payfor road select payfor fail:", err) - return err - } - - if tmpPayFor.Status != common.PAYFOR_COMFRIM { - logs.Notice(fmt.Sprintf("该代付记录uid=%s,已经被审核", payFor.PayforUid)) - return errors.New("已经被审核") - } - tmpPayFor.UpdateTime = utils.GetBasicDateTime() - tmpPayFor.Status = common.PAYFOR_SOLVING - tmpPayFor.GiveType = common.PAYFOR_ROAD - - if _, err := txOrm.Update(&tmpPayFor); err != nil { - logs.Error(fmt.Sprintf("该代付记录uid=%s,从审核更新为正在处理出错: %s", payFor.PayforUid, err)) - return err - } - - return nil - - }); err != nil { - return false - } - return true -} - -/* -* 执行逻辑 - */ -func SolvePayFor() { - //取出一天之内的没有做处理并且不是手动打款的代付记录 - params := make(map[string]string) - beforeOneDay := utils.GetDateTimeBeforeDays(1) - nowDate := utils.GetBasicDateTime() - params["create_time__lte"] = nowDate - params["create_time__gte"] = beforeOneDay - params["is_send"] = "no" - params["status"] = common.PAYFOR_SOLVING - params["give_type"] = common.PAYFOR_ROAD - - payForList := models.GetPayForListByParams(params) - for _, p := range payForList { - if p.Type == common.SELF_HELP { - //如果后台管理人员,通过任意下发,不涉及到商户减款操作,直接发送代付请求 - solveSelf(p) - } else { - SendPayFor(p) - } - } -} - -func solveSelf(payFor models.PayforInfo) bool { - o := orm.NewOrm() - - if err := o.DoTx(func(ctx context.Context, txOrm orm.TxOrmer) error { - var tmpPayFor models.PayforInfo - if err := txOrm.Raw("select * from payfor_info where payfor_uid = ? for update", payFor.PayforUid).QueryRow(&tmpPayFor); err != nil || tmpPayFor.PayforUid == "" { - logs.Error("solve self payfor fail:", err) - return errors.New("solve self payfor fail") - } - - if tmpPayFor.IsSend == common.YES { - return errors.New("代付已经发送") - } - - tmpPayFor.UpdateTime = utils.GetBasicDateTime() - if payFor.RoadUid == "" { - tmpPayFor.Status = common.PAYFOR_FAIL - } else { - tmpPayFor.Status = common.PAYFOR_BANKING - tmpPayFor.RequestTime = utils.GetBasicDateTime() - tmpPayFor.IsSend = common.YES - } - if _, err := txOrm.Update(&tmpPayFor); err != nil { - return err - } - - RequestPayFor(payFor) - - return nil - - }); err != nil { - return false - } - return true -} - -func SendPayFor(payFor models.PayforInfo) bool { - o := orm.NewOrm() - - if err := o.DoTx(func(ctx context.Context, txOrm orm.TxOrmer) error { - var tmpPayFor models.PayforInfo - if err := txOrm.Raw("select * from payfor_info where payfor_uid = ? for update", payFor.PayforUid).QueryRow(&tmpPayFor); err != nil || tmpPayFor.PayforUid == "" { - logs.Error("send payfor select payfor fail: ", err) - return err - } - - var account models.AccountInfo - if err := txOrm.Raw("select * from account_info where account_uid = ? for update", payFor.MerchantUid).QueryRow(&account); err != nil || account.AccountUid == "" { - logs.Error("send payfor select account fail:", err) - return err - } - - //支付金额不足,将直接判定为失败,不往下面邹逻辑了 - if account.SettleAmount-account.PayforAmount < tmpPayFor.PayforAmount+tmpPayFor.PayforFee { - tmpPayFor.Status = common.PAYFOR_FAIL - tmpPayFor.UpdateTime = utils.GetBasicDateTime() - - if _, err := txOrm.Update(&tmpPayFor); err != nil { - return err - } else { - return nil - } - } - - account.UpdateTime = utils.GetBasicDateTime() - account.PayforAmount = account.PayforAmount + payFor.PayforAmount + payFor.PayforFee - - if _, err := txOrm.Update(&account); err != nil { - logs.Error(fmt.Sprintf("商户uid=%s,在发送代付给上游的处理中,更新账户表出错, err: %s", payFor.MerchantUid, err)) - return err - } - - tmpPayFor.IsSend = common.YES - tmpPayFor.Status = common.PAYFOR_BANKING //变为银行处理中 - tmpPayFor.RequestTime = utils.GetBasicDateTime() - tmpPayFor.UpdateTime = utils.GetBasicDateTime() - - if _, err := txOrm.Update(&tmpPayFor); err != nil { - logs.Error(fmt.Sprintf("商户uid=%s,在发送代付给上游的处理中,更代付列表出错, err:%s", payFor.MerchantUid, err)) - return err - } - - RequestPayFor(payFor) - - return nil - }); err != nil { - return false - } - return true -} - -func RequestPayFor(payFor models.PayforInfo) { - if payFor.RoadUid == "" { - return - } - roadInfo := models.GetRoadInfoByRoadUid(payFor.RoadUid) - supplierCode := roadInfo.ProductUid - supplier := GetPaySupplierByCode(supplierCode) - res := supplier.PayFor(payFor) - logs.Info(fmt.Sprintf("代付uid=%s,上游处理结果为:%s", payFor.PayforUid, res)) - //将代付订单号发送到消息队列 - message_queue.SendMessage(common.MQ_PAYFOR_QUERY, payFor.BankOrderId) -} diff --git a/microservice/supplier/supplier_interface.go b/microservice/supplier/supplier_interface.go deleted file mode 100644 index b863a93..0000000 --- a/microservice/supplier/supplier_interface.go +++ /dev/null @@ -1,41 +0,0 @@ -/*************************************************** - ** @Desc : This file for ... - ** @Time : 2019/10/28 9:39 - ** @Author : yuebin - ** @File : supplier_interface - ** @Last Modified by : yuebin - ** @Last Modified time: 2019/10/28 9:39 - ** @Software: GoLand -****************************************************/ -package controller - -import ( - "microservice/models" -) - -//定义扫码支付的返回值 -type ScanData struct { - Supplier string //上游的通道供应商 - PayType string //支付类型 - OrderNo string //下游商户请求订单号 - BankNo string //本系统的请求订单号 - OrderPrice string //订单金额 - FactPrice string //实际的展示在客户面前的金额 - Status string //状态码 '00' 成功 - PayUrl string //支付二维码链接地址 - Msg string //附加的信息 -} - -type PayInterface interface { - Scan(models.OrderInfo, models.RoadInfo, models.MerchantInfo) ScanData - H5(models.OrderInfo, models.RoadInfo, models.MerchantInfo) ScanData - Fast(models.OrderInfo, models.RoadInfo, models.MerchantInfo) bool - Syt(models.OrderInfo, models.RoadInfo, models.MerchantInfo) ScanData - Web(models.OrderInfo, models.RoadInfo, models.MerchantInfo) bool - PayNotify() - PayQuery(models.OrderInfo) bool - PayFor(models.PayforInfo) string - PayForNotify() string - PayForQuery(models.PayforInfo) (string, string) - BalanceQuery(models.RoadInfo) float64 -} diff --git a/microservice/supplier/weixin.go b/microservice/supplier/weixin.go deleted file mode 100644 index 1ff9350..0000000 --- a/microservice/supplier/weixin.go +++ /dev/null @@ -1,70 +0,0 @@ -/*************************************************** - ** @Desc : This file for ... - ** @Time : 2019/10/28 16:38 - ** @Author : yuebin - ** @File : weixin - ** @Last Modified by : yuebin - ** @Last Modified time: 2019/10/28 16:38 - ** @Software: GoLand -****************************************************/ -package controller - -import ( - "microservice/models" -) - -type WeiXinImpl struct { -} - -func (c *WeiXinImpl) Scan(orderInfo models.OrderInfo, roadInfo models.RoadInfo, merchantInfo models.MerchantInfo) ScanData { - var scanData ScanData - scanData.Status = "01" - return scanData -} - -func (c *WeiXinImpl) H5(orderInfo models.OrderInfo, roadInfo models.RoadInfo, merchantInfo models.MerchantInfo) ScanData { - var scanData ScanData - scanData.Status = "01" - return scanData -} - -func (c *WeiXinImpl) Syt(orderInfo models.OrderInfo, roadInfo models.RoadInfo, merchantInfo models.MerchantInfo) ScanData { - var scanData ScanData - scanData.Status = "01" - return scanData -} - -func (c *WeiXinImpl) Fast(orderInfo models.OrderInfo, roadInfo models.RoadInfo, merchantInfo models.MerchantInfo) bool { - var scanData ScanData - scanData.Status = "01" - return true -} - -func (c *WeiXinImpl) Web(orderInfo models.OrderInfo, roadInfo models.RoadInfo, merchantInfo models.MerchantInfo) bool { - var scanData ScanData - scanData.Status = "01" - return true -} - -func (c *WeiXinImpl) PayNotify() { -} - -func (c *WeiXinImpl) PayQuery(orderInfo models.OrderInfo) bool { - return true -} - -func (c *WeiXinImpl) PayFor(payFor models.PayforInfo) string { - return "" -} - -func (c *WeiXinImpl) PayForNotify() string { - return "" -} - -func (c *WeiXinImpl) PayForQuery(payFor models.PayforInfo) (string, string) { - return "", "" -} - -func (c *WeiXinImpl) BalanceQuery(roadInfo models.RoadInfo) float64 { - return 0.00 -} diff --git a/microservice/utils/AES_ECB.go b/microservice/utils/AES_ECB.go deleted file mode 100644 index e7b6d60..0000000 --- a/microservice/utils/AES_ECB.go +++ /dev/null @@ -1,131 +0,0 @@ -/*************************************************** - ** @Desc : This file for ... - ** @Time : 2018-8-30 13:50 - ** @Author : Joker - ** @File : ACE_ECB - ** @Last Modified by : Joker - ** @Last Modified time: 2018-8-30 13:50 - ** @Software: GoLand -****************************************************/ -package utils - -import ( - "bytes" - "crypto/aes" - "crypto/cipher" - "encoding/hex" - "github.com/beego/beego/v2/core/logs" -) - -/* - aes解码 - crypted:要加密的字符串 - key:用来加密的密钥 密钥长度可以是128bit、192bit、256bit中的任意一个 - 16位key对应128bit -*/ -func AesDecrypt(src, key []byte) []byte { - block, err := aes.NewCipher(key) - if err != nil { - logs.Error("Joker: AesDecrypt failed to NewCipher") - logs.Error(err) - } - blockMode := NewECBDecrypter(block) - origData := make([]byte, len(src)) - blockMode.CryptBlocks(origData, src) - origData = PKCS5UnPadding(origData) - return origData -} - -/*aes编码*/ -func AesEncrypt(src []byte, key string) []byte { - decodeString, err := hex.DecodeString(key) - if err != nil { - logs.Error("Joker: AesEncrypt failed to hex key") - logs.Error(err) - } - block, err := aes.NewCipher(decodeString) - if err != nil { - logs.Error("Joker: AesEncrypt failed to NewCipher") - logs.Error(err) - } - if len(src) < 0 { - logs.Error("Joker: AesEncrypt`s input is null ") - } - ecb := NewECBEncrypter(block) - src = PKCS5Padding(src, block.BlockSize()) - crypted := make([]byte, len(src)) - ecb.CryptBlocks(crypted, src) - // 普通base64编码加密 区别于urlsafe base64 - //fmt.Println("base64 result:", base64.StdEncoding.EncodeToString(crypted)) - //fmt.Println("base64UrlSafe result:", Base64UrlSafeEncode(crypted)) - return crypted -} - -func PKCS5Padding(ciphertext []byte, blockSize int) []byte { - padding := blockSize - len(ciphertext)%blockSize - padtext := bytes.Repeat([]byte{byte(padding)}, padding) - return append(ciphertext, padtext...) -} - -func PKCS5UnPadding(origData []byte) []byte { - length := len(origData) - // 去掉最后一个字节 unpadding 次 - unpadding := int(origData[length-1]) - return origData[:(length - unpadding)] -} - -type ecb struct { - b cipher.Block - blockSize int -} - -func newECB(b cipher.Block) *ecb { - return &ecb{ - b: b, - blockSize: b.BlockSize(), - } -} - -type ecbEncrypter ecb - -// NewECBEncrypter returns a BlockMode which encrypts in electronic code book -// mode, using the given Block. -func NewECBEncrypter(b cipher.Block) cipher.BlockMode { - return (*ecbEncrypter)(newECB(b)) -} -func (x *ecbEncrypter) BlockSize() int { return x.blockSize } -func (x *ecbEncrypter) CryptBlocks(dst, src []byte) { - if len(src)%x.blockSize != 0 { - logs.Error("Joker: CryptBlocks`s input not full blocks") - } - if len(dst) < len(src) { - logs.Error("Joker: CryptBlocks`s output smaller than input") - } - for len(src) > 0 { - x.b.Encrypt(dst, src[:x.blockSize]) - src = src[x.blockSize:] - dst = dst[x.blockSize:] - } -} - -type ecbDecrypter ecb - -// NewECBDecrypter returns a BlockMode which decrypts in electronic code book -// mode, using the given Block. -func NewECBDecrypter(b cipher.Block) cipher.BlockMode { - return (*ecbDecrypter)(newECB(b)) -} -func (x *ecbDecrypter) BlockSize() int { return x.blockSize } -func (x *ecbDecrypter) CryptBlocks(dst, src []byte) { - if len(src)%x.blockSize != 0 { - logs.Error("Joker: CryptBlocks`s input not full blocks") - } - if len(dst) < len(src) { - logs.Error("Joker: CryptBlocks`s output smaller than input") - } - for len(src) > 0 { - x.b.Decrypt(dst, src[:x.blockSize]) - src = src[x.blockSize:] - dst = dst[x.blockSize:] - } -} diff --git a/microservice/utils/date_time.go b/microservice/utils/date_time.go deleted file mode 100644 index 919b998..0000000 --- a/microservice/utils/date_time.go +++ /dev/null @@ -1,40 +0,0 @@ -/*************************************************** - ** @Desc : This file for ... - ** @Time : 2019/8/21 10:21 - ** @Author : yuebin - ** @File : date_time - ** @Last Modified by : yuebin - ** @Last Modified time: 2019/8/21 10:21 - ** @Software: GoLand -****************************************************/ -package utils - -import "time" - -func GetDateTimeNot() string { - return time.Now().Format("2006010215:04:05") -} - -func GetDate() string { - return time.Now().Format("2006-01-02") -} - -func GetBasicDateTime() string { - return time.Now().Format("2006-01-02 15:04:05") -} - -func GetNowTimesTamp() string { - return time.Now().Format("20060102150405") -} - -func GetDateTimeBeforeHours(hour int) string { - return time.Now().Add(-time.Hour * time.Duration(hour)).Format("2006-01-02 15:04:05") -} - -func GetDateBeforeDays(days int) string { - return time.Now().Add(-time.Hour * time.Duration(days) * 24).Format("2006-01-02") -} - -func GetDateTimeBeforeDays(days int) string { - return time.Now().Add(-time.Hour * time.Duration(days) * 24).Format("2006-01-02 15:04:05") -} diff --git a/microservice/utils/login_verify_code.go b/microservice/utils/login_verify_code.go deleted file mode 100644 index f3d601b..0000000 --- a/microservice/utils/login_verify_code.go +++ /dev/null @@ -1,440 +0,0 @@ -/*************************************************** - ** @Desc : generate login verify code image - ** @Time : 2019/8/7 17:14 - ** @Author : yuebin - ** @File : login_verify_code - ** @Last Modified by : yuebin - ** @Last Modified time: 2019/8/7 17:14 - ** @Software: GoLand -****************************************************/ -package utils - -import ( - crand "crypto/rand" - "fmt" - "image" - "image/color" - "image/png" - "io" - "math/rand" - "net/http" - "strconv" - "time" -) - -const ( - stdWidth = 100 - stdHeight = 40 - maxSkew = 2 -) - -const ( - fontWidth = 5 - fontHeight = 8 - blackChar = 1 -) - -var font = [][]byte{ - { // 0 - 0, 1, 1, 1, 0, - 1, 0, 0, 0, 1, - 1, 0, 0, 0, 1, - 1, 0, 0, 0, 1, - 1, 0, 0, 0, 1, - 1, 0, 0, 0, 1, - 1, 0, 0, 0, 1, - 0, 1, 1, 1, 0}, - { // 1 - 0, 0, 1, 0, 0, - 0, 1, 1, 0, 0, - 1, 0, 1, 0, 0, - 0, 0, 1, 0, 0, - 0, 0, 1, 0, 0, - 0, 0, 1, 0, 0, - 0, 0, 1, 0, 0, - 1, 1, 1, 1, 1}, - { // 2 - 0, 1, 1, 1, 0, - 1, 0, 0, 0, 1, - 0, 0, 0, 0, 1, - 0, 0, 0, 1, 1, - 0, 1, 1, 0, 0, - 1, 0, 0, 0, 0, - 1, 0, 0, 0, 0, - 1, 1, 1, 1, 1}, - { // 3 - 1, 1, 1, 1, 0, - 0, 0, 0, 0, 1, - 0, 0, 0, 1, 0, - 0, 1, 1, 1, 0, - 0, 0, 0, 1, 0, - 0, 0, 0, 0, 1, - 0, 0, 0, 0, 1, - 1, 1, 1, 1, 0}, - { // 4 - 1, 0, 0, 1, 0, - 1, 0, 0, 1, 0, - 1, 0, 0, 1, 0, - 1, 0, 0, 1, 0, - 1, 1, 1, 1, 1, - 0, 0, 0, 1, 0, - 0, 0, 0, 1, 0, - 0, 0, 0, 1, 0}, - { // 5 - 1, 1, 1, 1, 1, - 1, 0, 0, 0, 0, - 1, 0, 0, 0, 0, - 1, 1, 1, 1, 0, - 0, 0, 0, 0, 1, - 0, 0, 0, 0, 1, - 0, 0, 0, 0, 1, - 1, 1, 1, 1, 0}, - { // 6 - 0, 0, 1, 1, 1, - 0, 1, 0, 0, 0, - 1, 0, 0, 0, 0, - 1, 1, 1, 1, 0, - 1, 0, 0, 0, 1, - 1, 0, 0, 0, 1, - 1, 0, 0, 0, 1, - 0, 1, 1, 1, 0}, - { // 7 - 1, 1, 1, 1, 1, - 0, 0, 0, 0, 1, - 0, 0, 0, 0, 1, - 0, 0, 0, 1, 0, - 0, 0, 1, 0, 0, - 0, 1, 0, 0, 0, - 0, 1, 0, 0, 0, - 0, 1, 0, 0, 0}, - { // 8 - 0, 1, 1, 1, 0, - 1, 0, 0, 0, 1, - 1, 0, 0, 0, 1, - 0, 1, 1, 1, 0, - 1, 0, 0, 0, 1, - 1, 0, 0, 0, 1, - 1, 0, 0, 0, 1, - 0, 1, 1, 1, 0}, - { // 9 - 0, 1, 1, 1, 0, - 1, 0, 0, 0, 1, - 1, 0, 0, 0, 1, - 1, 1, 0, 0, 1, - 0, 1, 1, 1, 1, - 0, 0, 0, 0, 1, - 0, 0, 0, 0, 1, - 1, 1, 1, 1, 0}, -} - -type Image struct { - *image.NRGBA - color *color.NRGBA - width int //a digit width - height int //a digit height - dotsize int -} - -func init() { - rand.Seed(int64(time.Second)) - -} - -func NewImage(digits []byte, width, height int) *Image { - img := new(Image) - r := image.Rect(img.width, img.height, stdWidth, stdHeight) - img.NRGBA = image.NewNRGBA(r) - img.color = &color.NRGBA{ - uint8(rand.Intn(129)), - uint8(rand.Intn(129)), - uint8(rand.Intn(129)), - 0xFF} - // Draw background (10 random circles of random brightness) - img.calculateSizes(width, height, len(digits)) - img.fillWithCircles(0, img.dotsize) - maxx := width - (img.width+img.dotsize)*len(digits) - img.dotsize - maxy := height - img.height - img.dotsize*2 - x := rnd(img.dotsize*2, maxx) - y := rnd(img.dotsize*2, maxy) - // Draw digits. - for _, n := range digits { - img.drawDigit(font[n], x, y) - x += img.width + img.dotsize - } - // Draw strike-through line. - //img.strikeThrough() - return img - -} - -func (img *Image) WriteTo(w io.Writer) (int64, error) { - return 0, png.Encode(w, img) - -} - -func (img *Image) calculateSizes(width, height, ncount int) { - // Goal: fit all digits inside the image. - var border int - if width > height { - border = height / 5 - } else { - border = width / 5 - } - // Convert everything to floats for calculations. - w := float64(width - border*2) //268 - h := float64(height - border*2) //48 - // fw takes into account 1-dot spacing between digits. - fw := float64(fontWidth) + 1 //6 - fh := float64(fontHeight) //8 - nc := float64(ncount) //7 - // Calculate the width of a single digit taking into account only the - // width of the image. - nw := w / nc //38 - // Calculate the height of a digit from this width. - nh := nw * fh / fw //51 - // Digit too high? - if nh > h { - // Fit digits based on height. - nh = h //nh = 44 - nw = fw / fh * nh - } - // Calculate dot size. - img.dotsize = int(nh / fh) - // Save everything, making the actual width smaller by 1 dot to account - // for spacing between digits. - img.width = int(nw) - img.height = int(nh) - img.dotsize - -} - -func (img *Image) fillWithCircles(n, maxradius int) { - color := img.color - maxx := img.Bounds().Max.X - maxy := img.Bounds().Max.Y - for i := 0; i < n; i++ { - setRandomBrightness(color, 255) - r := rnd(3, maxradius) - img.drawCircle(color, rnd(r, maxx-r), rnd(r, maxy-r), r) - } - -} - -func (img *Image) drawHorizLine(color color.Color, fromX, toX, y int) { - for x := fromX; x <= toX; x++ { - img.Set(x, y, color) - } - -} - -func (img *Image) drawCircle(color color.Color, x, y, radius int) { - f := 1 - radius - dfx := 1 - dfy := -2 * radius - xx := 0 - yy := radius - img.Set(x, y+radius, color) - img.Set(x, y-radius, color) - img.drawHorizLine(color, x-radius, x+radius, y) - for xx < yy { - if f >= 0 { - yy-- - dfy += 2 - f += dfy - } - xx++ - dfx += 2 - f += dfx - img.drawHorizLine(color, x-xx, x+xx, y+yy) - img.drawHorizLine(color, x-xx, x+xx, y-yy) - img.drawHorizLine(color, x-yy, x+yy, y+xx) - img.drawHorizLine(color, x-yy, x+yy, y-xx) - } - -} - -func (img *Image) strikeThrough() { - r := 0 - maxx := img.Bounds().Max.X - maxy := img.Bounds().Max.Y - y := rnd(maxy/3, maxy-maxy/3) - for x := 0; x < maxx; x += r { - r = rnd(1, img.dotsize/3) - y += rnd(-img.dotsize/2, img.dotsize/2) - if y <= 0 || y >= maxy { - y = rnd(maxy/3, maxy-maxy/3) - } - img.drawCircle(img.color, x, y, r) - } - -} - -func (img *Image) drawDigit(digit []byte, x, y int) { - skf := rand.Float64() * float64(rnd(-maxSkew, maxSkew)) - xs := float64(x) - minr := img.dotsize / 2 // minumum radius - maxr := img.dotsize/2 + img.dotsize/4 // maximum radius - y += rnd(-minr, minr) - for yy := 0; yy < fontHeight; yy++ { - for xx := 0; xx < fontWidth; xx++ { - if digit[yy*fontWidth+xx] != blackChar { - continue - } - // Introduce random variations. - or := rnd(minr, maxr) - ox := x + (xx * img.dotsize) + rnd(0, or/2) - oy := y + (yy * img.dotsize) + rnd(0, or/2) - img.drawCircle(img.color, ox, oy, or) - } - xs += skf - x = int(xs) - } - -} - -func setRandomBrightness(c *color.NRGBA, max uint8) { - minc := min3(c.R, c.G, c.B) - maxc := max3(c.R, c.G, c.B) - if maxc > max { - return - } - n := rand.Intn(int(max-maxc)) - int(minc) - c.R = uint8(int(c.R) + n) - c.G = uint8(int(c.G) + n) - c.B = uint8(int(c.B) + n) - -} - -func min3(x, y, z uint8) (o uint8) { - o = x - if y < o { - o = y - } - if z < o { - o = z - } - return - -} - -func max3(x, y, z uint8) (o uint8) { - o = x - if y > o { - o = y - } - if z > o { - o = z - } - return - -} - -// rnd returns a random number in range [from, to]. - -func rnd(from, to int) int { - //println(to+1-from) - return rand.Intn(to+1-from) + from - -} - -const ( - // Standard length of uniuri string to achive ~95 bits of entropy. - StdLen = 16 - // Length of uniurl string to achive ~119 bits of entropy, closest - // to what can be losslessly converted to UUIDv4 (122 bits). - UUIDLen = 20 -) - -// Standard characters allowed in uniuri string. - -var StdChars = []byte("ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789") - -// New returns a new random string of the standard length, consisting of -// standard characters. - -func New() string { - return NewLenChars(StdLen, StdChars) - -} - -// NewLen returns a new random string of the provided length, consisting of -// standard characters. - -func NewLen(length int) string { - return NewLenChars(length, StdChars) - -} - -// NewLenChars returns a new random string of the provided length, consisting -// of the provided byte slice of allowed characters (maximum 256). - -func NewLenChars(length int, chars []byte) string { - b := make([]byte, length) - r := make([]byte, length+(length/4)) // storage for random bytes. - clen := byte(len(chars)) - maxrb := byte(256 - (256 % len(chars))) - i := 0 - for { - if _, err := io.ReadFull(crand.Reader, r); err != nil { - panic("error reading from random source: " + err.Error()) - } - for _, c := range r { - if c >= maxrb { - // Skip this number to avoid modulo bias. - continue - } - b[i] = chars[c%clen] - i++ - if i == length { - return string(b) - } - } - } - panic("unreachable") - -} - -func GenerateVerifyCodeImg() (*Image, string) { - d := make([]byte, 4) - s := NewLen(4) - ss := "" - d = []byte(s) - for v := range d { - d[v] %= 10 - ss += strconv.FormatInt(int64(d[v]), 32) - } - return NewImage(d, 100, 40), ss -} - -func pic(w http.ResponseWriter, req *http.Request) { - d := make([]byte, 4) - s := NewLen(4) - ss := "" - d = []byte(s) - for v := range d { - d[v] %= 10 - ss += strconv.FormatInt(int64(d[v]), 32) - } - w.Header().Set("Content-Type", "image/png") - NewImage(d, 100, 40).WriteTo(w) - fmt.Println(ss) - -} - -func index(w http.ResponseWriter, req *http.Request) { - str := "