k.zhang 2 years ago
parent
commit
f0db263e55

+ 7 - 0
apis/bizhi/apis/score_log.go

@@ -0,0 +1,7 @@
+package apis
+
+import "github.com/gin-gonic/gin"
+
+func ScoreLogList(c *gin.Context) {
+
+}

+ 6 - 12
apis/bizhi/apis/upload.go

@@ -4,21 +4,18 @@ import (
 	"duoduo/models/bizhi"
 	"duoduo/tools/app"
 	"encoding/base64"
-	"fmt"
 	"github.com/gin-gonic/gin"
 	"io/ioutil"
 	"net/http"
 	"strings"
 )
 
-
-
-func Upload(c *gin.Context)  {
+func Upload(c *gin.Context) {
 	//按照规则来
 	inData := bizhi.UploadRequest{}
 	outData := bizhi.UploadResponse{}
-	err :=c.ShouldBindJSON(&inData)
-	if err != nil{
+	err := c.ShouldBindJSON(&inData)
+	if err != nil {
 		app.Error(c, 400, err, err.Error())
 		return
 	}
@@ -31,15 +28,12 @@ func Upload(c *gin.Context)  {
 	defer res.Body.Close()
 
 	data, _ := ioutil.ReadAll(res.Body)
-
 	str := base64.StdEncoding.EncodeToString(data)
-
 	pos := strings.LastIndex(inData.PictureUrl, "/")
-	//fmt.Println("str", str)
-	fmt.Println(pos)
+
 	outData.Base = str
 	outData.Name = inData.PictureUrl[pos+1:]
-	//c.JSON(200,str)
+
 	app.OK(c, outData, app.Success)
 
-}
+}

+ 105 - 0
apis/bizhi/apis/user.go

@@ -0,0 +1,105 @@
+package apis
+
+import (
+	"duoduo/apis/bizhi/models"
+	"duoduo/apis/pdd"
+	"duoduo/models/bizhi"
+	"duoduo/tools/app"
+	"fmt"
+	"github.com/gin-gonic/gin"
+	"pmo/pkg/tools"
+)
+
+//获取用户openid,没有,注册用户
+func OpenIdSet(c *gin.Context) {
+	var inData models.OpenIdSetRequest
+	var outData models.OpenIdSetResponse
+	var sqlData bizhi.User
+	var sql1 bizhi.User
+
+	err := c.ShouldBindJSON(&inData)
+	if err != nil {
+		app.Error(c, 400, err, err.Error())
+		return
+	}
+
+	url := fmt.Sprintf("https://api.weixin.qq.com/sns/jscode2session?appid=wx4a22fc1a791b34f2&secret=ca4b4fc0553002181b5106f3f4899924&js_code=%s&grant_type=authorization_code", inData.Code)
+
+	val, err := pdd.DuoDuoGet(url)
+	if err != nil {
+		app.Error(c, 500, err, err.Error())
+		return
+	}
+
+	err = tools.JsonUnmarshal(val, &outData)
+	if err != nil {
+		app.Error(c, 500, err, err.Error())
+		return
+	}
+	if outData.Errcode != 0 {
+		app.Error(c, outData.Errcode, err, outData.Errmsg)
+		return
+	}
+	//查询数据
+	sqlData.OpenID = outData.OpenId
+	num := sqlData.GetNum()
+	if num == 0 {
+		if inData.OpenId != "" { //有上级
+			sql1.OpenID = inData.OpenId
+			//创建用户
+			sqlData.CreateTime = tools.GetCurrentTimeStr()
+			sqlData.UpdateTime = tools.GetCurrentTimeStr()
+			sqlData.OpenID1 = inData.OpenId
+
+			sqlData.Create()
+		} else { //无上级用户
+			//创建用户
+			sqlData.CreateTime = tools.GetCurrentTimeStr()
+			sqlData.UpdateTime = tools.GetCurrentTimeStr()
+			sqlData.Create()
+		}
+
+	}
+
+	app.OK(c, outData, app.Success)
+
+}
+
+//获取用户积分
+func GetUserScore(c *gin.Context) {
+	var inData models.GetUserScoreRequest
+	var sqlData bizhi.User
+
+	err := c.ShouldBindJSON(&inData)
+	if err != nil {
+		app.Error(c, 400, err, err.Error())
+		return
+	}
+
+	sqlData.OpenID = inData.OpenId
+	data, err := sqlData.GetScore()
+	if err != nil {
+		app.Error(c, 500, err, err.Error())
+	}
+	app.OK(c, data.Score, "成功")
+}
+
+func SubUserScore(c *gin.Context) {
+	var inData models.SubUserScoreRequest
+	var sqlData bizhi.User
+
+	err := c.ShouldBindJSON(&inData)
+	if err != nil {
+		app.Error(c, 400, err, err.Error())
+		return
+	}
+
+	sqlData.OpenID = inData.OpenId
+	err = sqlData.SubScore(inData)
+	if err != nil {
+		app.Error(c, 500, err, err.Error())
+		return
+	}
+	app.OK(c, nil, "")
+
+}

+ 7 - 0
apis/bizhi/models/score_log.go

@@ -0,0 +1,7 @@
+package models
+
+type ScoreLogListRequest struct {
+	OpenId    string `json:"openId"`
+	PageSize  int    `json:"pageSize"`
+	PageIndex int    `json:"pageIndex"`
+}

+ 22 - 0
apis/bizhi/models/user.go

@@ -0,0 +1,22 @@
+package models
+
+type OpenIdSetRequest struct {
+	Code   string `json:"code"`   //微信code
+	OpenId string `json:"openId"` //邀请好友的openId
+}
+
+type OpenIdSetResponse struct {
+	SessionKey string `json:"session_key,omitempty"`
+	OpenId     string `json:"openid,omitempty"`
+	Errcode    int    `json:"errcode,omitempty"`
+	Errmsg     string `json:"errmsg,omitempty"`
+}
+
+type GetUserScoreRequest struct {
+	OpenId string `json:"openId"`
+}
+
+type SubUserScoreRequest struct {
+	OpenId string `json:"openId"`
+	Score  int    `json:"score"`
+}

+ 7 - 2
apis/bizhi/router.go

@@ -9,7 +9,12 @@ import (
 func InitBiZhiRouter(engine *gin.RouterGroup) {
 	v1 := engine.Group("v1")
 	{
-		v1.POST("/upload", apis.Upload)
-		v1.POST("/round", apis.RondPicture)
+		v1.POST("/upload", apis.Upload)           //下载图片
+		v1.POST("/round", apis.RondPicture)       //随机图片
+		v1.POST("/set.user", apis.OpenIdSet)      //用户注册
+		v1.POST("/get.score", apis.GetUserScore)  // 校验积分
+		v1.POST("/sub.score", apis.SubUserScore)  //+-积分
+		v1.POST("/score.list", apis.ScoreLogList) //积分消费记录
+		//邀请用户列表
 	}
 }

+ 1 - 1
database/mysql.go

@@ -86,7 +86,7 @@ func Setup() {
 
 	LyMysql.LogMode(true)
 
-	//加载领养数据库链接
+	//加载壁纸数据库链接
 	Host = confIni.MustValue("bz-mysql", "mysql_host")
 	Port = confIni.MustInt("bz-mysql", "mysql_port")
 	Name = confIni.MustValue("bz-mysql", "mysql_name")

+ 14 - 1
go.mod

@@ -1,6 +1,6 @@
 module duoduo
 
-go 1.14
+go 1.18
 
 require (
 	github.com/Unknwon/goconfig v0.0.0-20200908083735-df7de6a44db8
@@ -19,15 +19,28 @@ require (
 )
 
 require (
+	github.com/gin-contrib/sse v0.1.0 // indirect
+	github.com/go-playground/locales v0.14.0 // indirect
+	github.com/go-playground/universal-translator v0.18.0 // indirect
 	github.com/go-playground/validator/v10 v10.11.1 // indirect
 	github.com/goccy/go-json v0.9.11 // indirect
+	github.com/jinzhu/inflection v1.0.0 // indirect
+	github.com/json-iterator/go v1.1.12 // indirect
+	github.com/konsorten/go-windows-terminal-sequences v1.0.1 // indirect
+	github.com/leodido/go-urn v1.2.1 // indirect
+	github.com/mailru/easyjson v0.0.0-20190626092158-b2ccc519800e // indirect
 	github.com/mattn/go-isatty v0.0.16 // indirect
 	github.com/modern-go/concurrent v0.0.0-20180306012644-bacd9c7ef1dd // indirect
+	github.com/modern-go/reflect2 v1.0.2 // indirect
 	github.com/pelletier/go-toml/v2 v2.0.5 // indirect
+	github.com/pkg/errors v0.8.1 // indirect
 	github.com/smartystreets/goconvey v1.7.2 // indirect
+	github.com/ugorji/go/codec v1.2.7 // indirect
 	golang.org/x/crypto v0.0.0-20220919173607-35f4265a4bc0 // indirect
 	golang.org/x/net v0.0.0-20220919232410-f2f64ebce3c1 // indirect
 	golang.org/x/sync v0.0.0-20210220032951-036812b2e83c // indirect
 	golang.org/x/sys v0.0.0-20220919091848-fb04ddd9f9c8 // indirect
+	golang.org/x/text v0.3.7 // indirect
 	google.golang.org/protobuf v1.28.1 // indirect
+	gopkg.in/yaml.v2 v2.4.0 // indirect
 )

+ 0 - 8
go.sum

@@ -46,14 +46,12 @@ github.com/go-playground/universal-translator v0.17.0/go.mod h1:UkSxE5sNxxRwHyU+
 github.com/go-playground/universal-translator v0.18.0 h1:82dyy6p4OuJq4/CByFNOn/jYrnRPArHwAcmLoJZxyho=
 github.com/go-playground/universal-translator v0.18.0/go.mod h1:UvRDBj+xPUEGrFYl+lu/H90nyDXpg0fqeB/AQUGNTVA=
 github.com/go-playground/validator/v10 v10.8.0/go.mod h1:9JhgTzTaE31GZDpH/HSvHiRJrJ3iKAgqqH0Bl/Ocjdk=
-github.com/go-playground/validator/v10 v10.10.0/go.mod h1:74x4gJWsvQexRdW8Pn3dXSGrTK4nAUsbPlLADvpJkos=
 github.com/go-playground/validator/v10 v10.11.1 h1:prmOlTVv+YjZjmRmNSF3VmspqJIxJWXmqUsHwfTRRkQ=
 github.com/go-playground/validator/v10 v10.11.1/go.mod h1:i+3WkQ1FvaUjjxh1kSvIA4dMGDBiPU55YFDl0WbKdWU=
 github.com/go-sql-driver/mysql v1.5.0/go.mod h1:DCzpHaOWr8IXmIStZouvnhqoel9Qv2LBy8hT2VhHyBg=
 github.com/go-sql-driver/mysql v1.6.0 h1:BCTh4TKNUYmOmMUcQ3IipzF5prigylS7XXjEkfCHuOE=
 github.com/go-sql-driver/mysql v1.6.0/go.mod h1:DCzpHaOWr8IXmIStZouvnhqoel9Qv2LBy8hT2VhHyBg=
 github.com/go-stack/stack v1.8.0/go.mod h1:v0f6uXyyMGvRgIKkXu+yp6POWl0qKG85gN/melR3HDY=
-github.com/goccy/go-json v0.9.7/go.mod h1:6MelG93GURQebXPDq3khkgXZkazVtN9CRI+MGFi0w8I=
 github.com/goccy/go-json v0.9.11 h1:/pAaQDLHEoCq/5FFmSKBswWmK6H0e8g4159Kc/X/nqk=
 github.com/goccy/go-json v0.9.11/go.mod h1:6MelG93GURQebXPDq3khkgXZkazVtN9CRI+MGFi0w8I=
 github.com/gogo/protobuf v1.1.1/go.mod h1:r8qH/GZQm5c6nD/R0oafs1akxWv10x8SbQlK7atdtwQ=
@@ -108,7 +106,6 @@ github.com/lib/pq v1.1.1/go.mod h1:5WUZQaWbwv1U+lTReE5YruASi9Al49XbQIvNi/34Woo=
 github.com/mailru/easyjson v0.0.0-20190312143242-1de009706dbe/go.mod h1:C1wdFJiN94OJF2b5HbByQZoLdCWB1Yqtg26g4irojpc=
 github.com/mailru/easyjson v0.0.0-20190626092158-b2ccc519800e h1:hB2xlXdHp/pmPZq0y3QnmWAArdw9PqbmotexnWx/FU8=
 github.com/mailru/easyjson v0.0.0-20190626092158-b2ccc519800e/go.mod h1:C1wdFJiN94OJF2b5HbByQZoLdCWB1Yqtg26g4irojpc=
-github.com/mattn/go-isatty v0.0.14/go.mod h1:7GGIvUiUoEMVVmxf/4nioHXj79iQHKdU27kJ6hsGG94=
 github.com/mattn/go-isatty v0.0.16 h1:bq3VjFmv/sOjHtdEhmkEV4x1AJtvUvOJ2PFAZ5+peKQ=
 github.com/mattn/go-isatty v0.0.16/go.mod h1:kYGgaQfpe5nmfYZH+SKPsOc2e4SrIfOl2e/yFXSvRLM=
 github.com/mattn/go-sqlite3 v1.14.0 h1:mLyGNKR8+Vv9CAU7PphKa2hkEqxxhn8i32J6FPj1/QA=
@@ -127,7 +124,6 @@ github.com/onsi/ginkgo v1.7.0/go.mod h1:lLunBs/Ym6LB5Z9jYTR76FiuTmxDTDusOGeTQH+W
 github.com/onsi/gomega v1.4.3/go.mod h1:ex+gbHU/CVuBBDIJjb2X0qEXbFg53c61hWP/1CpauHY=
 github.com/opentracing/opentracing-go v1.1.0/go.mod h1:UkNAQd3GIcIGf0SeVgPpRdFStlNbqXla1AfSYxPUl2o=
 github.com/openzipkin/zipkin-go v0.1.6/go.mod h1:QgAqvLzwWbR/WpD4A3cGpPtJrZXNIiJc5AZX7/PBEpw=
-github.com/pelletier/go-toml/v2 v2.0.1/go.mod h1:r9LEWfGN8R5k0VXJ+0BkIe7MYkRdwZOjgMj2KwnJFUo=
 github.com/pelletier/go-toml/v2 v2.0.5 h1:ipoSadvV8oGUjnUbMub59IDPPwfxF694nG/jwbMiyQg=
 github.com/pelletier/go-toml/v2 v2.0.5/go.mod h1:OMHamSCAODeSsVrwwvcJOaoN0LIUIaFVNZzmWyNfXas=
 github.com/pierrec/lz4 v2.0.5+incompatible/go.mod h1:pdkljMzZIN41W+lC3N2tnIh5sFi+IEE17M5jbnwPHcY=
@@ -174,7 +170,6 @@ github.com/stretchr/testify v1.7.0/go.mod h1:6Fq8oRcR53rry900zMqJjRRixrwX3KX962/
 github.com/stretchr/testify v1.7.1/go.mod h1:6Fq8oRcR53rry900zMqJjRRixrwX3KX962/h/Wwjteg=
 github.com/stretchr/testify v1.8.0 h1:pSgiaMZlXftHpm5L7V1+rVB+AZJydKsMxsQBIJw4PKk=
 github.com/stretchr/testify v1.8.0/go.mod h1:yNjHg4UonilssWZ8iaSj1OCr/vHnekPRkoO+kdMU+MU=
-github.com/ugorji/go v1.2.7 h1:qYhyWUUd6WbiM+C6JZAUkIJt/1WrjzNHY9+KCIjVqTo=
 github.com/ugorji/go v1.2.7/go.mod h1:nF9osbDWLy6bDVv/Rtoh6QgnvNDpmCalQV5urGCCS6M=
 github.com/ugorji/go/codec v1.2.7 h1:YPXUKf7fYbp/y8xloBqZOw2qaVggbfwMlI8WM3wZUJ0=
 github.com/ugorji/go/codec v1.2.7/go.mod h1:WGN1fab3R1fzQlVQTkfxVtIBhWDRqOviHU95kRgeqEY=
@@ -234,12 +229,10 @@ golang.org/x/sys v0.0.0-20210615035016-665e8c7367d1/go.mod h1:oPkhp1MJrh7nUepCBc
 golang.org/x/sys v0.0.0-20210630005230-0f9fa26af87c/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
 golang.org/x/sys v0.0.0-20210806184541-e5e7981a1069/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
 golang.org/x/sys v0.0.0-20211020174200-9d6173849985/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
-golang.org/x/sys v0.0.0-20220728004956-3c1f35247d10/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
 golang.org/x/sys v0.0.0-20220811171246-fbc7d0a398ab/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
 golang.org/x/sys v0.0.0-20220919091848-fb04ddd9f9c8 h1:h+EGohizhe9XlX18rfpa8k8RAc5XyaeamM+0VHRd4lc=
 golang.org/x/sys v0.0.0-20220919091848-fb04ddd9f9c8/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
 golang.org/x/term v0.0.0-20201126162022-7de9c90e9dd1/go.mod h1:bj7SfCRtBDWHUb9snDiAeCFNEtKQo2Wmx5Cou7ajbmo=
-golang.org/x/term v0.0.0-20210927222741-03fcf44c2211/go.mod h1:jbD1KX2456YbFQfuXm/mYQcufACuNUgVhRMnK/tPxf8=
 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/go.mod h1:5Zoc/QRtKVWzQhOtBMvqHzDpF6irO9z98xDceosuGiQ=
@@ -262,7 +255,6 @@ google.golang.org/genproto v0.0.0-20190307195333-5fe7a883aa19/go.mod h1:VzzqZJRn
 google.golang.org/grpc v1.17.0/go.mod h1:6QZJwpn2B+Zp71q/5VxRsJ6NXXVCE5NRUHRo+f3cWCs=
 google.golang.org/grpc v1.19.0/go.mod h1:mqu4LbDTu4XGKhr4mRzUsmM4RtVoemTSY81AxZiDr8c=
 google.golang.org/protobuf v1.26.0-rc.1/go.mod h1:jlhhOSvTdKEhbULTjvd4ARK9grFBp09yW+WbY/TyQbw=
-google.golang.org/protobuf v1.28.0/go.mod h1:HV8QOd/L58Z+nl8r43ehVNZIU/HEI6OcFqwMG9pJV4I=
 google.golang.org/protobuf v1.28.1 h1:d0NfwRgPtno5B1Wa6L2DAG+KivqkdutMf1UhdNx175w=
 google.golang.org/protobuf v1.28.1/go.mod h1:HV8QOd/L58Z+nl8r43ehVNZIU/HEI6OcFqwMG9pJV4I=
 gopkg.in/alecthomas/kingpin.v2 v2.2.6/go.mod h1:FMv+mEhP44yOT+4EoQTLFTRgOQ1FBLkstjWtayDeSgw=

+ 12 - 0
models/bizhi/score_log.go

@@ -0,0 +1,12 @@
+package bizhi
+
+type ScoreLog struct {
+	ID         int64  `gorm:"column:id;type:bigint(20);primary_key" json:"id"`     // 主键
+	OpenID     string `gorm:"column:open_id;type:varchar(255)" json:"open_id"`     // open_id
+	CreateTime string `gorm:"column:create_time;type:datetime" json:"create_time"` // 创建时间
+	Score      int    `gorm:"column:score;type:int(11)" json:"score"`              // 积分
+}
+
+func (m *ScoreLog) TableName() string {
+	return "score_log"
+}

+ 78 - 0
models/bizhi/user.go

@@ -0,0 +1,78 @@
+package bizhi
+
+import (
+	models2 "duoduo/apis/bizhi/models"
+	orm "duoduo/database"
+	"pmo/pkg/tools"
+)
+
+type User struct {
+	ID         int64  `gorm:"column:id;type:bigint(20);primary_key;AUTO_INCREMENT" json:"id"` // 主键
+	Phone      string `gorm:"column:phone;type:varchar(24)" json:"phone"`                     // 手机号
+	OpenID1    string `gorm:"column:open_id_1;type:varchar(255)" json:"openId1"`              // 上级open_id
+	NickName   string `gorm:"column:nick_name;type:varchar(255)" json:"nickName"`             // 微信用户名
+	AvatarUrl  string `gorm:"column:avatar_url;type:varchar(255)" json:"avatarUrl"`           // 头像url
+	Admin      int    `gorm:"column:admin;type:int(11)" json:"admin"`                         // 1-管理员
+	OpenID     string `gorm:"column:open_id;type:varchar(255)" json:"openId"`                 // open_id
+	CreateTime string `gorm:"column:create_time;type:datetime" json:"createTime"`             // 创建时间
+	UpdateTime string `gorm:"column:update_time;type:datetime" json:"updateTime"`             // 更新时间
+	Score      int    `gorm:"column:score;type:int(11)" json:"score"`                         // 积分
+}
+
+func (m *User) TableName() string {
+	return "user"
+}
+
+func (u *User) GetNum() int {
+	var count int
+	tableCount := orm.BzMysql.Table(u.TableName()).Where("open_id = ? ", u.OpenID)
+	tableCount.Count(&count)
+	return count
+
+}
+func (u *User) Create() (User, error) {
+	var doc User
+	result := orm.Eloquent.Table(u.TableName()).Create(&u)
+	if result.Error != nil {
+		err := result.Error
+		return doc, err
+	}
+	doc = *u
+	return doc, nil
+}
+
+func (u *User) GetScore() (User, error) {
+	var doc User
+	if err := orm.BzMysql.Table(u.TableName()).Where("open_id = ?", u.OpenID).Select("score").First(&doc).Error; err != nil {
+		return doc, err
+	}
+	return doc, nil
+}
+
+func (u *User) SubScore(req models2.SubUserScoreRequest) error {
+	var score ScoreLog
+	var err error
+	tx := orm.BzMysql.Begin()
+	defer func() {
+		if err != nil {
+			tx.Rollback()
+		} else {
+			tx.Commit()
+		}
+	}()
+	score.Score = req.Score
+	score.OpenID = req.OpenId
+	score.CreateTime = tools.GetCurrentTimeStr()
+	scoreStr := tools.IntToString(req.Score)
+	if err := tx.Table(u.TableName()).Model(&u).Where("open_id = ? ", u.OpenID).Updates(
+		map[string]interface{}{
+			"score": "score + " + scoreStr}).Error; err != nil {
+		return err
+	}
+
+	if err := tx.Table(score.TableName()).Create(&score).Error; err != nil {
+		return err
+	}
+
+	return nil
+}