Merge pull request 'test' (#83) from test into master

Reviewed-on: https://git.oa00.com/recook/backend_v2/pulls/83
master
杨赟 3 years ago
commit 4227d3a774

@ -110,10 +110,12 @@ func init() {
}) })
rabbitmq.InitRabbitmq(rabbitmq.Config{ rabbitmq.InitRabbitmq(rabbitmq.Config{
Host: "supply_api.reecook.cn", Host: "supply_api.reecook.cn",
Port: 5672, Port: 5672,
User: "u0zPiIEZwMnmVdu20zZ1jAV931K5lMWM", User: "u0zPiIEZwMnmVdu20zZ1jAV931K5lMWM",
Password: "dfbfe3da92d363727a1e0bca612e40a4", Password: "dfbfe3da92d363727a1e0bca612e40a4",
ReConnSecond: 3,
ReConn: true,
}) })
} else { } else {
log.Println("当前为测试版") log.Println("当前为测试版")
@ -219,8 +221,8 @@ const (
ConfigShaMaMqHost = "shama.reecook.cn" ConfigShaMaMqHost = "shama.reecook.cn"
ConfigShaMaMqPort = "5672" ConfigShaMaMqPort = "5672"
AlipayAppid = "2021001108632223" // appId AlipayAppid = "2021001108632223" // appId
AlipayPrivateKey = "MIIEvgIBADANBgkqhkiG9w0BAQEFAASCBKgwggSkAgEAAoIBAQDMQOxcXlyNfnNEui3aipacvfR3NV50lpmVZ1KApskiIy5DjivOyBwvxqB/I7uutPgwlnRsjzzqTx55LbooeSO9UoobBKr3FdxGqjjw4MZNcW5wNiZG3JEQ3OtCgg3o7Y13SYAyKr3DNcHufAKuLKi/IFxmUubfWQ0mHR9ePFMec6ecqpHWsIZmNy5ujY0TMZH1q4Rg1zfUHQu78PWAcsNl+t3Zxs5j1tUo7ZtAfqca6sU+cPXuAx+l/CIhCwX35w39E6J1BYUBczSGvj5+dNAM+dMfuaZCeZo0W9cvhZ6d5Jd3ZCNP/II3S4Sk479kCO6ErG7MyO53//uW8aPnEeAxAgMBAAECggEBAMbjBQRgYdDpa0Zl39ZokoWntc8KKaJvLre7NyvMvBdAmIDxhBjC5CdlSsziN5PD5dQx/MXkqBUj23F1pEpawwFLyOzMG8mjAK3SfMWYqZ+pLzeWkqj3h04bP/2v8+l2vwSDjo/K7KKTyvX0zQtasyoAUdjVKrga12Hgg7XYGbuQdd6UXFqT+BTwQq2JDJEJTYPutN4VyCwiUEGuwCD3TkIFU0d5SGHaOgYBN/btaoPQLm8VnlKRvVr8o9vQ2cr6lDwRtFXkJ3RZJw8UExVPGHAoRlECwqEVA1mJMQ5EPhJrEgNINlE6JiqqCgo1/+58Q9XfYsf7uY8HccFYQP9FIRECgYEA9yXr2N6/vg6sW1PHu5HZWJm0761qq9ed2jZmwNPMD6Xz7Uz9GkYRbxuKvm9YP9qP7pNdH6K14E2gME0AjEmWdx9VId6rKRTR+GGVL01ETnZ62hrG/AEJfBAL+ZVCZYcyMAJYKHomgnY+dvdy3mtxmk8IOT+QkJHrKSX8XBRTxk0CgYEA05G0vfBq4oi3DdO/nrvxSc5K9SLvjW9Rnbr+jgmxw+ZEbqSrsooImfUYUbfkN96X7RePEVLznNYkjJPpp20DNnoauCAfCcjupSPFl1cVEWHs2Czc7HSiqHm7lCDcyyb4q2Vsu6zKmsJIHxEXw76gdUKxvNhiKE0BwHQ/Yqmmu3UCgYEAkGlSFBikBVPhlkOwE4O3cjPuK5YzHFIS5GyhQc8AD6yyiVhRFEcY7Mk1Gu1IrZbyPz9QTKnwiC4TieWUimR9TQG75tyLOqf1wKKUX11QqmBEjKjU2G9qsVlXBfEXKOgEhVT5Wj11vwmEmlMghaJWcQn5Dip8OF1rAVI20T73bIkCgYAtwc+TXNHhGKxugyNoU0GGMuWnSt0Ae9jtAipX0eTud3jJbTftL0lY8tdFpT3oj23QS04X8xbZDr9s3/iiy0Lsn0/0Do5n8VsbwDbV2nGmBsXQozNMuJUNVvaovMrD7TPO7eqsVFylR+uNPIclQK83bSs/qpTgHneIhhvHXOXAmQKBgATsDkvmaVTyGpuzaur7SodTJneNQWQEtnGhaAtbXtPWKpUJHAyIDt7/80FwHOun3/N0CBjzt06T4uvGDzRpYJCsTcoap/JbgdokN4KloRs2Nd7+3O1scep0mJoQWPcYKZxErmTtYgCrSLENbi6sf83xwTWcncFJ9qu1ei13NzPB" // 商户私钥 AlipayPrivateKey = "MIIEvgIBADANBgkqhkiG9w0BAQEFAASCBKgwggSkAgEAAoIBAQDMQOxcXlyNfnNEui3aipacvfR3NV50lpmVZ1KApskiIy5DjivOyBwvxqB/I7uutPgwlnRsjzzqTx55LbooeSO9UoobBKr3FdxGqjjw4MZNcW5wNiZG3JEQ3OtCgg3o7Y13SYAyKr3DNcHufAKuLKi/IFxmUubfWQ0mHR9ePFMec6ecqpHWsIZmNy5ujY0TMZH1q4Rg1zfUHQu78PWAcsNl+t3Zxs5j1tUo7ZtAfqca6sU+cPXuAx+l/CIhCwX35w39E6J1BYUBczSGvj5+dNAM+dMfuaZCeZo0W9cvhZ6d5Jd3ZCNP/II3S4Sk479kCO6ErG7MyO53//uW8aPnEeAxAgMBAAECggEBAMbjBQRgYdDpa0Zl39ZokoWntc8KKaJvLre7NyvMvBdAmIDxhBjC5CdlSsziN5PD5dQx/MXkqBUj23F1pEpawwFLyOzMG8mjAK3SfMWYqZ+pLzeWkqj3h04bP/2v8+l2vwSDjo/K7KKTyvX0zQtasyoAUdjVKrga12Hgg7XYGbuQdd6UXFqT+BTwQq2JDJEJTYPutN4VyCwiUEGuwCD3TkIFU0d5SGHaOgYBN/btaoPQLm8VnlKRvVr8o9vQ2cr6lDwRtFXkJ3RZJw8UExVPGHAoRlECwqEVA1mJMQ5EPhJrEgNINlE6JiqqCgo1/+58Q9XfYsf7uY8HccFYQP9FIRECgYEA9yXr2N6/vg6sW1PHu5HZWJm0761qq9ed2jZmwNPMD6Xz7Uz9GkYRbxuKvm9YP9qP7pNdH6K14E2gME0AjEmWdx9VId6rKRTR+GGVL01ETnZ62hrG/AEJfBAL+ZVCZYcyMAJYKHomgnY+dvdy3mtxmk8IOT+QkJHrKSX8XBRTxk0CgYEA05G0vfBq4oi3DdO/nrvxSc5K9SLvjW9Rnbr+jgmxw+ZEbqSrsooImfUYUbfkN96X7RePEVLznNYkjJPpp20DNnoauCAfCcjupSPFl1cVEWHs2Czc7HSiqHm7lCDcyyb4q2Vsu6zKmsJIHxEXw76gdUKxvNhiKE0BwHQ/Yqmmu3UCgYEAkGlSFBikBVPhlkOwE4O3cjPuK5YzHFIS5GyhQc8AD6yyiVhRFEcY7Mk1Gu1IrZbyPz9QTKnwiC4TieWUimR9TQG75tyLOqf1wKKUX11QqmBEjKjU2G9qsVlXBfEXKOgEhVT5Wj11vwmEmlMghaJWcQn5Dip8OF1rAVI20T73bIkCgYAtwc+TXNHhGKxugyNoU0GGMuWnSt0Ae9jtAipX0eTud3jJbTftL0lY8tdFpT3oj23QS04X8xbZDr9s3/iiy0Lsn0/0Do5n8VsbwDbV2nGmBsXQozNMuJUNVvaovMrD7TPO7eqsVFylR+uNPIclQK83bSs/qpTgHneIhhvHXOXAmQKBgATsDkvmaVTyGpuzaur7SodTJneNQWQEtnGhaAtbXtPWKpUJHAyIDt7/80FwHOun3/N0CBjzt06T4uvGDzRpYJCsTcoap/JbgdokN4KloRs2Nd7+3O1scep0mJoQWPcYKZxErmTtYgCrSLENbi6sf83xwTWcncFJ9qu1ei13NzPB" // 商户私钥
AlipayAliPublicKey = "MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAtrlT+XcRtKrfgDKB6XxlJbLzQWNMPQ8tTmZvd66OoJDbsnPZuIP7w01XNdIodEAxTFpK4wjUNauqUTSxJimkM8GsPgX/wUW7PR4i25cniHgFFH8vLuRnXcwTptr3LnAjgaSj0nOZYAnOkTcSLoPGgMqBzT/eADkpRvBTRvEhEaMjMPRJ09jVGrIjzpugZ5ECWNBD28nqtAAyDU1jKtHL5l290+WIA838D8sP54Kx8vAwFgMelRg1SljPcSrA2Hnh8qAesiZuJB3pGRKSEwPp51opdM2ARehbXLZsURkjGfB9jVBu9bdKMd7Mm7bun/GD2zM4V07JeFKnYwrcX5lL1wIDAQAB" // 支付宝公钥 AlipayAliPublicKey = "MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAtrlT+XcRtKrfgDKB6XxlJbLzQWNMPQ8tTmZvd66OoJDbsnPZuIP7w01XNdIodEAxTFpK4wjUNauqUTSxJimkM8GsPgX/wUW7PR4i25cniHgFFH8vLuRnXcwTptr3LnAjgaSj0nOZYAnOkTcSLoPGgMqBzT/eADkpRvBTRvEhEaMjMPRJ09jVGrIjzpugZ5ECWNBD28nqtAAyDU1jKtHL5l290+WIA838D8sP54Kx8vAwFgMelRg1SljPcSrA2Hnh8qAesiZuJB3pGRKSEwPp51opdM2ARehbXLZsURkjGfB9jVBu9bdKMd7Mm7bun/GD2zM4V07JeFKnYwrcX5lL1wIDAQAB" // 支付宝公钥
) )

@ -5,7 +5,7 @@ go 1.16
require ( require (
git.oa00.com/go/alipay v1.0.0 git.oa00.com/go/alipay v1.0.0
git.oa00.com/go/mysql v1.0.0 git.oa00.com/go/mysql v1.0.0
git.oa00.com/go/rabbitmq v1.0.5 git.oa00.com/go/rabbitmq v1.0.9
github.com/360EntSecGroup-Skylar/excelize/v2 v2.3.0 github.com/360EntSecGroup-Skylar/excelize/v2 v2.3.0
github.com/alecthomas/template v0.0.0-20190718012654-fb15b899a751 github.com/alecthomas/template v0.0.0-20190718012654-fb15b899a751
github.com/alibabacloud-go/opensearch-util v1.0.1 github.com/alibabacloud-go/opensearch-util v1.0.1
@ -39,7 +39,7 @@ require (
github.com/nfnt/resize v0.0.0-20180221191011-83c6a9932646 github.com/nfnt/resize v0.0.0-20180221191011-83c6a9932646
github.com/panjf2000/ants/v2 v2.5.0 github.com/panjf2000/ants/v2 v2.5.0
github.com/pkg/errors v0.9.1 github.com/pkg/errors v0.9.1
github.com/rabbitmq/amqp091-go v1.4.0 github.com/rabbitmq/amqp091-go v1.5.0
github.com/robfig/cron/v3 v3.0.0 github.com/robfig/cron/v3 v3.0.0
github.com/shopspring/decimal v1.2.0 github.com/shopspring/decimal v1.2.0
github.com/siddontang/go-log v0.0.0-20190221022429-1e957dd83bed github.com/siddontang/go-log v0.0.0-20190221022429-1e957dd83bed

@ -10,8 +10,8 @@ git.oa00.com/go/formatime v1.0.0 h1:DYyHRA58N7MH70oe0wJKboV61Sq+QwoZDCajUP/T14A=
git.oa00.com/go/formatime v1.0.0/go.mod h1:E48/rexcow7/YAIu5O5X/D+NVzFf39jEuENyhRKNlP0= git.oa00.com/go/formatime v1.0.0/go.mod h1:E48/rexcow7/YAIu5O5X/D+NVzFf39jEuENyhRKNlP0=
git.oa00.com/go/mysql v1.0.0 h1:E9H6MF0eYgFovLmVYgyCiwjIestp/wRPWjwKyayg3LI= git.oa00.com/go/mysql v1.0.0 h1:E9H6MF0eYgFovLmVYgyCiwjIestp/wRPWjwKyayg3LI=
git.oa00.com/go/mysql v1.0.0/go.mod h1:pQm9xCn8iFew9egnEPvzAlggGykmAlwV1nqTX5KIXiQ= git.oa00.com/go/mysql v1.0.0/go.mod h1:pQm9xCn8iFew9egnEPvzAlggGykmAlwV1nqTX5KIXiQ=
git.oa00.com/go/rabbitmq v1.0.5 h1:/Y6R1lIPMbgnOtf37TKankz89ni920t9p1VzNZvmak8= git.oa00.com/go/rabbitmq v1.0.9 h1:VTZwQMB1Tm4ai8RNG1jTn6+HflQ75/Zn+PDqb4ykhzY=
git.oa00.com/go/rabbitmq v1.0.5/go.mod h1:/qLsl9f+AF92+ApdUOUbrdjN+uy2/5HeBkjMyMcMtXI= git.oa00.com/go/rabbitmq v1.0.9/go.mod h1:gE3VfK8y7GqW3L86bMXWzpsDNKnjQIj5Xq6xtX3zGDI=
github.com/360EntSecGroup-Skylar/excelize/v2 v2.3.0 h1:tDWYNCJrpNnlNg8mVdlzAzPjlPaRbsA/kS8H9LczleQ= github.com/360EntSecGroup-Skylar/excelize/v2 v2.3.0 h1:tDWYNCJrpNnlNg8mVdlzAzPjlPaRbsA/kS8H9LczleQ=
github.com/360EntSecGroup-Skylar/excelize/v2 v2.3.0/go.mod h1:Uwb0d1GgxJieUWZG5WylTrgQ2SrldfjagAxheU8W6MQ= github.com/360EntSecGroup-Skylar/excelize/v2 v2.3.0/go.mod h1:Uwb0d1GgxJieUWZG5WylTrgQ2SrldfjagAxheU8W6MQ=
github.com/Azure/azure-sdk-for-go v32.4.0+incompatible/go.mod h1:9XXNKU+eRnpl9moKnB4QOLf1HestfXbmab5FXxiDBjc= github.com/Azure/azure-sdk-for-go v32.4.0+incompatible/go.mod h1:9XXNKU+eRnpl9moKnB4QOLf1HestfXbmab5FXxiDBjc=
@ -499,8 +499,8 @@ github.com/prometheus/procfs v0.0.3/go.mod h1:4A/X28fw3Fc593LaREMrKMqOKvUAntwMDa
github.com/prometheus/procfs v0.0.5/go.mod h1:4A/X28fw3Fc593LaREMrKMqOKvUAntwMDaekg4FpcdQ= github.com/prometheus/procfs v0.0.5/go.mod h1:4A/X28fw3Fc593LaREMrKMqOKvUAntwMDaekg4FpcdQ=
github.com/prometheus/procfs v0.1.3 h1:F0+tqvhOksq22sc6iCHF5WGlWjdwj92p0udFh1VFBS8= 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/prometheus/procfs v0.1.3/go.mod h1:lV6e/gmhEcM9IjHGsFOCxxuZ+z1YqCvr4OA4YeYWdaU=
github.com/rabbitmq/amqp091-go v1.4.0 h1:T2G+J9W9OY4p64Di23J6yH7tOkMocgnESvYeBjuG9cY= github.com/rabbitmq/amqp091-go v1.5.0 h1:VouyHPBu1CrKyJVfteGknGOGCzmOz0zcv/tONLkb7rg=
github.com/rabbitmq/amqp091-go v1.4.0/go.mod h1:JsV0ofX5f1nwOGafb8L5rBItt9GyhfQfcJj+oyz0dGg= github.com/rabbitmq/amqp091-go v1.5.0/go.mod h1:JsV0ofX5f1nwOGafb8L5rBItt9GyhfQfcJj+oyz0dGg=
github.com/rainycape/memcache v0.0.0-20150622160815-1031fa0ce2f2/go.mod h1:7tZKcyumwBO6qip7RNQ5r77yrssm9bfCowcLEBcU5IA= github.com/rainycape/memcache v0.0.0-20150622160815-1031fa0ce2f2/go.mod h1:7tZKcyumwBO6qip7RNQ5r77yrssm9bfCowcLEBcU5IA=
github.com/rcrowley/go-metrics v0.0.0-20181016184325-3113b8401b8a/go.mod h1:bCqnVzQkZxMG4s8nGwiZ5l3QUCyqpo9Y+/ZMZ9VjZe4= github.com/rcrowley/go-metrics v0.0.0-20181016184325-3113b8401b8a/go.mod h1:bCqnVzQkZxMG4s8nGwiZ5l3QUCyqpo9Y+/ZMZ9VjZe4=
github.com/robfig/cron/v3 v3.0.0 h1:kQ6Cb7aHOHTSzNVNEhmp8EcWKLb4CbiMW9h9VyIhO4E= github.com/robfig/cron/v3 v3.0.0 h1:kQ6Cb7aHOHTSzNVNEhmp8EcWKLb4CbiMW9h9VyIhO4E=

@ -101,6 +101,11 @@ func SetupNewMysql() {
if err != nil { if err != nil {
panic(err) panic(err)
} }
db, err := mysql2.Db.DB()
if err != nil {
panic(err)
}
db.SetConnMaxLifetime(43200)
} else { } else {
err := mysql2.InitMysql(&mysql2.DbConfig{ err := mysql2.InitMysql(&mysql2.DbConfig{
Username: configs.GetEnv("mysql-username", "db_recook_v2"), Username: configs.GetEnv("mysql-username", "db_recook_v2"),

@ -8,6 +8,7 @@ import (
"recook/internal/model/user" "recook/internal/model/user"
"recook/internal/v2/lib/common" "recook/internal/v2/lib/common"
"recook/internal/v2/model/recook/goods" "recook/internal/v2/model/recook/goods"
"recook/tools"
"time" "time"
"git.oa00.com/go/mysql" "git.oa00.com/go/mysql"
@ -142,3 +143,122 @@ func (o Proxy) VipIsUsed(c *gin.Context) {
res := dbc.Rds.SIsMember(key2, id) res := dbc.Rds.SIsMember(key2, id)
back.Suc(c, "操作成功", gin.H{"is_used": res.Val()}) back.Suc(c, "操作成功", gin.H{"is_used": res.Val()})
} }
// InviteCheck @Title 邀请码验证
func (o *Proxy) InviteCheck(c *gin.Context) {
args := argsGoodsInvite{}
err := tools.Params(&args, c)
if err != nil {
back.Fail(c, err.Error())
return
}
if args.InviteNo == "" {
back.Fail(c, "二维码不存在或已失效")
return
}
recookGoodsInvite := goods.RecookGoodsInvite{}
if mysql.Db.Where("inviter_code = ? and status = ?", args.InviteNo, goods.RecookGoodsInviteStatusNone).First(&recookGoodsInvite).Error != nil {
back.Fail(c, "二维码已使用")
return
}
userId, _ := common.GetAppUserId(c)
var u1 user.Information
if err := mysql.Db.First(&u1, "id = ?", userId).Error; err != nil {
back.Fail(c, "二维码不存在或已失效")
return
}
if u1.Level == 10 {
// 合伙人或者真实vip店铺无需操作
back.Suc(c, "操作成功", gin.H{"isVip": true})
return
} else {
back.Suc(c, "操作成功", gin.H{"isVip": false})
return
}
}
type argsGoodsInvite struct {
InviteNo string
}
// Invite @Title 邀请码
func (o *Proxy) Invite(c *gin.Context) {
args := argsGoodsInvite{}
err := tools.Params(&args, c)
if err != nil {
back.Fail(c, err.Error())
return
}
if args.InviteNo == "" {
back.Fail(c, "二维码不存在或已失效")
return
}
recookGoodsInvite := goods.RecookGoodsInvite{}
if mysql.Db.Where("inviter_code = ? and status = ?", args.InviteNo, goods.RecookGoodsInviteStatusNone).First(&recookGoodsInvite).Error != nil {
back.Fail(c, "二维码已使用")
return
}
userId, _ := common.GetAppUserId(c)
var u1 user.Information
if err := mysql.Db.First(&u1, "id = ?", userId).Error; err != nil {
back.Fail(c, "二维码不存在或已失效")
return
}
if u1.Level == 10 {
// 合伙人或者真实vip店铺无需操作
back.Fail(c, "合伙人无需领取权益卡")
return
}
patch := make(map[string]interface{})
patch["level"] = 2
patch["parent_id"] = 0
patch["is_offline"] = true
now := time.Now()
end := now
level := u1.Level
if u1.VipUpgradeEnd.Valid && time.Now().Before(u1.VipUpgradeEnd.Time) {
// 续约
level = u1.OldLevel
now = u1.VipUpgradeStart.Time
end = u1.VipUpgradeEnd.Time
} else {
// 没有升级过 || 升级过已经过了上一次的时间重新计算
patch["old_level"] = u1.Level
patch["old_parent_id"] = u1.ParentID
patch["old_root_id"] = u1.RootID
}
end = end.AddDate(1, 0, 0)
patch["vip_upgrade_start"] = formatime.NewSecondFrom(now)
patch["vip_upgrade_end"] = formatime.NewSecondFrom(end)
if err := mysql.Db.Transaction(func(tx *gorm.DB) error {
if tx.Model(&recookGoodsInvite).Where(&recookGoodsInvite).Updates(map[string]interface{}{
"status": goods.RecookGoodsInviteStatusUsed,
"use_user_id": userId,
}).RowsAffected != 1 {
return errors.New("领取失败")
}
if err := tx.Table((&user.Information{}).TableName()).Where("id = ?", u1.ID).Updates(patch).Error; err != nil {
return errors.New("领取失败")
}
kind := user.Year
if tx.Create(&user.VipHistory{
UserID: int(userId),
Name: kind.Str(),
Start: &now,
End: &end,
Amount: decimal.Zero,
Level: level,
Nickname: u1.Nickname,
Mobile: u1.Mobile,
Kind: kind,
}).Error != nil {
return errors.New("领取失败")
}
return nil
}); err != nil {
back.Fail(c, err.Error())
return
}
back.Suc(c, "操作成功", gin.H{"endTime": end.Unix()})
return
}

@ -0,0 +1,17 @@
package goods
import "time"
const (
RecookGoodsInviteStatusNone = 1 // 未使用
RecookGoodsInviteStatusUsed = 2 // 已使用
)
type RecookGoodsInvite struct {
Id uint `gorm:"primaryKey"`
InviterCode string // 邀请的code
Status uint // 验证码状态 1=未使用 2=已使用
UseUserId uint // 使用用户id
CreatedAt time.Time
UpdatedAt time.Time
}

@ -273,6 +273,8 @@ func routerApp(appRouter *gin.RouterGroup) {
vipController.POST("goods", proxy.VipGoods) vipController.POST("goods", proxy.VipGoods)
vipController.POST("active", proxy.VipActive) vipController.POST("active", proxy.VipActive)
vipController.POST("is_used", proxy.VipIsUsed) vipController.POST("is_used", proxy.VipIsUsed)
vipController.POST("invite_check", proxy.InviteCheck)
vipController.POST("invite", proxy.Invite)
} }
} }
pushController := appRouter.Group("push", authorize) pushController := appRouter.Group("push", authorize)

Loading…
Cancel
Save