k.zhang преди 2 години
родител
ревизия
f4152eb0cc
променени са 5 файла, в които са добавени 164 реда и са изтрити 17 реда
  1. 37 3
      apis/bizhi/apis/user.go
  2. 9 0
      apis/bizhi/models/user.go
  3. 2 1
      apis/bizhi/router.go
  4. 30 5
      models/bizhi/score_log.go
  5. 86 8
      models/bizhi/user.go

+ 37 - 3
apis/bizhi/apis/user.go

@@ -44,18 +44,19 @@ func OpenIdSet(c *gin.Context) {
 	sqlData.OpenID = outData.OpenId
 	num := sqlData.GetNum()
 	if num == 0 {
-		if inData.OpenId != "" { //有上级
+		if inData.OpenId != "" { //有上级更新上级加分日志
 			sql1.OpenID = inData.OpenId
 			//创建用户
 			sqlData.CreateTime = tools.GetCurrntTimeStr()
 			sqlData.UpdateTime = tools.GetCurrntTimeStr()
 			sqlData.OpenID1 = inData.OpenId
-
+			sqlData.Score = 3
 			sqlData.Create()
 		} else { //无上级用户
 			//创建用户
 			sqlData.CreateTime = tools.GetCurrntTimeStr()
 			sqlData.UpdateTime = tools.GetCurrntTimeStr()
+			sqlData.Score = 3
 			sqlData.Create()
 		}
 
@@ -80,14 +81,16 @@ func GetUserScore(c *gin.Context) {
 	data, err := sqlData.GetScore()
 	if err != nil {
 		app.Error(c, 500, err, err.Error())
+		return
 	}
-	app.OK(c, data.Score, "成功")
+	app.OK(c, data, "成功")
 }
 
 //用户消费积分
 func SubUserScore(c *gin.Context) {
 	var inData models.SubUserScoreRequest
 	var sqlData bizhi.User
+	var score bizhi.ScoreLog
 
 	err := c.ShouldBindJSON(&inData)
 	if err != nil {
@@ -96,6 +99,14 @@ func SubUserScore(c *gin.Context) {
 	}
 
 	sqlData.OpenID = inData.OpenId
+	score.OpenID = inData.OpenId
+	score.Type = inData.Type
+	if inData.Type == 2 { //签到领积分校验日期
+		if !score.CheckScoreLog(inData.Num) {
+			app.Error(c, 501, nil, "今日领取次数已满")
+			return
+		}
+	}
 	err = sqlData.SubScore(inData)
 	if err != nil {
 		app.Error(c, 500, err, err.Error())
@@ -145,3 +156,26 @@ func GetUserList(c *gin.Context) {
 
 	app.PageOK(c, userVal, count, pageIndex, pageSize, app.Success)
 }
+
+func UpdateUser(c *gin.Context) {
+	var inData models.UpdateUserScoreRequest
+	var user bizhi.User
+
+	err := c.ShouldBindJSON(&inData)
+	if err != nil {
+		app.Error(c, 400, err, err.Error())
+		return
+	}
+	user.NickName = inData.NickName
+	user.AvatarUrl = inData.AvatarUrl
+	user.OpenID = inData.OpenId
+
+	err = user.UpdateUserName()
+	if err != nil {
+		app.Error(c, 500, err, err.Error())
+		return
+	}
+
+	app.OK(c, nil, "成功")
+
+}

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

@@ -19,6 +19,9 @@ type GetUserScoreRequest struct {
 type SubUserScoreRequest struct {
 	OpenId string `json:"openId"`
 	Score  int    `json:"score"`
+	Type   int    `json:"type"`
+	Des    string `json:"des"`
+	Num    int    `json:"num"`
 }
 
 type GetUserListRequest struct {
@@ -26,3 +29,9 @@ type GetUserListRequest struct {
 	PageSize  int    `json:"pageSize"`
 	PageIndex int    `json:"pageIndex"`
 }
+
+type UpdateUserScoreRequest struct {
+	AvatarUrl string `json:"avatarUrl"`
+	NickName  string `json:"nickName"`
+	OpenId    string `json:"openId"`
+}

+ 2 - 1
apis/bizhi/router.go

@@ -12,7 +12,7 @@ func InitBiZhiRouter(engine *gin.RouterGroup) {
 		v1.POST("/upload", apis.Upload)                   //下载图片
 		v1.POST("/round", apis.RondPicture)               //随机图片
 		v1.POST("/set.user", apis.OpenIdSet)              //用户注册
-		v1.POST("/get.score", apis.GetUserScore)          // 校验积分
+		v1.POST("/get.score", apis.GetUserScore)          //校验积分
 		v1.POST("/sub.score", apis.SubUserScore)          //+-积分
 		v1.POST("/score.list", apis.ScoreLogList)         //积分消费记录
 		v1.POST("/openid.list", apis.GetUserList)         //邀请用户列表
@@ -21,5 +21,6 @@ func InitBiZhiRouter(engine *gin.RouterGroup) {
 		v1.POST("/label.insert", apis.LabelInert)         //插入标签
 		v1.POST("/bizhi.update", apis.PictureLabelUpdate) //更新标签
 		v1.POST("/bizhi.group", apis.PictureGroup)        //获取组图
+		v1.POST("/update.score", apis.UpdateUser)         //更新用户头像昵称
 	}
 }

+ 30 - 5
models/bizhi/score_log.go

@@ -1,12 +1,24 @@
 package bizhi
 
-import orm "duoduo/database"
+import (
+	orm "duoduo/database"
+	"time"
+)
 
 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"`              // 积分
+	ID         int64  `gorm:"column:id;type:bigint(20);primary_key" json:"id"`    // 主键
+	OpenID     string `gorm:"column:open_id;type:varchar(255)" json:"openId"`     // open_id
+	CreateTime string `gorm:"column:create_time;type:datetime" json:"createTime"` // 创建时间
+	Score      int    `gorm:"column:score;type:int(11)" json:"score"`             // 积分
+	Des        string `gorm:"column:des;type:varchar(255)" json:"des"`            //描述
+	Type       int    `gorm:"column:type;type:int(11)" json:"type"`               //1-新用户 2-签到领取积分 3-看广告获取积分 4-邀请好友奖励积分 5-其他
+}
+type ScoreLogs struct {
+	OpenID     string `gorm:"column:open_id;type:varchar(255)" json:"openId"`     // open_id
+	CreateTime string `gorm:"column:create_time;type:datetime" json:"createTime"` // 创建时间
+	Score      int    `gorm:"column:score;type:int(11)" json:"score"`             // 积分
+	Des        string `gorm:"column:des;type:varchar(255)" json:"des"`            //描述
+	Type       int    `gorm:"column:type;type:int(11)" json:"type"`               //1-新用户 2-签到领取积分 3-看广告获取积分 4-邀请好友奖励积分 5-其他
 }
 
 func (m *ScoreLog) TableName() string {
@@ -27,3 +39,16 @@ func (m *ScoreLog) ScoreLogList(pageSize int, pageIndex int) ([]ScoreLog, int, e
 	table.Count(&count)
 	return doc, count, nil
 }
+
+func (m *ScoreLog) CheckScoreLog(num int) bool {
+	var number int
+
+	err := orm.BzMysql.Table(m.TableName()).Where("open_id = ? and type = ? and create_time >= ?", m.OpenID, m.Type, time.Now().Format("2006-01-02")).Count(&number).Error
+	if err != nil {
+		return false
+	}
+	if number >= num {
+		return false
+	}
+	return true
+}

+ 86 - 8
models/bizhi/user.go

@@ -4,6 +4,8 @@ import (
 	models2 "duoduo/apis/bizhi/models"
 	orm "duoduo/database"
 	"duoduo/tools"
+	"fmt"
+	"github.com/jinzhu/gorm"
 	"strconv"
 )
 
@@ -33,18 +35,80 @@ func (u *User) GetNum() int {
 }
 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
+	var err error
+
+	tx := orm.BzMysql.Begin()
+	defer func() {
+		if err != nil {
+			tx.Rollback()
+		} else {
+			tx.Commit()
+		}
+	}()
+	if u.OpenID1 != "" { //有上级
+		var score ScoreLogs
+		err := tx.Table(u.TableName()).Create(&u).Error
+		if err != nil {
+			fmt.Println(err)
+			return doc, err
+		}
+		score.Des = "新用户赠送积分"
+		score.OpenID = u.OpenID
+		score.Score = 3
+		score.Type = 1
+		score.CreateTime = tools.GetCurrntTimeStr()
+		err = tx.Table("score_log").Create(&score).Error
+		if err != nil {
+			fmt.Println(err)
+			return doc, err
+		}
+		score.Des = "邀请好友赠送积分"
+		score.OpenID = u.OpenID1
+		score.Score = 2
+		score.Type = 4
+		score.CreateTime = tools.GetCurrntTimeStr()
+
+		err = tx.Table("score_log").Create(&score).Error
+		if err != nil {
+			fmt.Println(err)
+			return doc, err
+		}
+		//更新用户积分
+		scoreStr := strconv.Itoa(2)
+		if err := tx.Table(u.TableName()).Where("open_id = ? ", u.OpenID1).Updates(
+			map[string]interface{}{
+				"score":       gorm.Expr("score + ?", scoreStr),
+				"update_time": tools.GetCurrntTimeStr()}).Error; err != nil {
+			return doc, err
+		}
+
+	} else {
+		var score ScoreLog
+		err := tx.Table(u.TableName()).Create(&u).Error
+		if err != nil {
+			fmt.Println(err)
+			return doc, err
+		}
+		score.Des = "新用户赠送积分"
+		score.OpenID = u.OpenID
+		score.Score = 3
+		score.Type = 1
+		score.CreateTime = tools.GetCurrntTimeStr()
+
+		err = tx.Table("score_log").Create(&score).Error
+		if err != nil {
+			fmt.Println(err)
+			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 {
+	if err := orm.BzMysql.Table(u.TableName()).Where("open_id = ?", u.OpenID).Select("*").First(&doc).Error; err != nil {
 		return doc, err
 	}
 	return doc, nil
@@ -63,13 +127,15 @@ func (u *User) SubScore(req models2.SubUserScoreRequest) error {
 	}()
 	score.Score = req.Score
 	score.OpenID = req.OpenId
-
+	score.Des = req.Des
 	score.CreateTime = tools.GetCurrntTimeStr()
-	scoreStr := strconv.Itoa(req.Score)
+	score.Type = req.Type
+	//scoreStr := strconv.Itoa(req.Score)
 	//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 {
+			"score":       gorm.Expr("score + ?", req.Score),
+			"update_time": tools.GetCurrntTimeStr()}).Error; err != nil {
 		return err
 	}
 
@@ -95,3 +161,15 @@ func (u *User) GetOpenIdList(pageSize int, pageIndex int) ([]User, int, error) {
 	table.Count(&count)
 	return doc, count, nil
 }
+
+func (u *User) UpdateUserName() error {
+
+	if err := orm.BzMysql.Table(u.TableName()).Model(&u).Where("open_id = ? ", u.OpenID).Updates(
+		map[string]interface{}{
+			"nick_name":   u.NickName,
+			"avatar_url":  u.AvatarUrl,
+			"update_time": tools.GetCurrntTimeStr()}).Error; err != nil {
+		return err
+	}
+	return nil
+}