k.zhang 4 anos atrás
pai
commit
dd521a7273
4 arquivos alterados com 130 adições e 2 exclusões
  1. 2 1
      apis/user/base.go
  2. 92 0
      apis/user/user.pid.get.go
  3. 27 1
      models/mysql/user.go
  4. 9 0
      models/user/user.pid.get.go

+ 2 - 1
apis/user/base.go

@@ -5,6 +5,7 @@ import "github.com/gin-gonic/gin"
 func InitUserRouter(engine *gin.RouterGroup) {
 	v1 := engine.Group("v1")
 	{
-		v1.POST("/user/open.id/set", OpenIdSet) //多多客  商品查询
+		v1.POST("/user/open.id/set", OpenIdSet) //设置openId
+		v1.POST("/user/pid/get", PidGet)        //获取pid
 	}
 }

+ 92 - 0
apis/user/user.pid.get.go

@@ -0,0 +1,92 @@
+package user
+
+import (
+	pdd2 "duoduo/apis/pdd"
+	"duoduo/conf"
+	"duoduo/models/mysql"
+	"duoduo/models/pdd"
+	"duoduo/models/user"
+	"duoduo/tools"
+	"duoduo/tools/app"
+	"fmt"
+	"github.com/gin-gonic/gin"
+	"time"
+)
+
+func PidGet(c *gin.Context) {
+	var inData user.PidGetRequest
+	var outData user.PidGetResponse
+	var sqlData mysql.User
+	err := c.ShouldBindJSON(&inData)
+	if err != nil {
+		app.Error(c, 400, err, err.Error())
+		return
+	}
+
+	sqlData.OpenID = inData.OpenId
+	val, err := sqlData.Get()
+	if err != nil {
+		app.Error(c, 500, err, err.Error())
+		return
+	}
+
+	//创建pid
+	if val.Pid == "" {
+		var pidCreate pdd.PddDdkGoodsPidGenerateRequest
+		var pidOut pdd.PddDdkGoodsPidGenerateResponse
+		var pddErr pdd.ErrorPddResponse
+
+		confIni, err := conf.ConnIni()
+		if err != nil {
+			app.Error(c, 400, err, err.Error())
+			return
+		}
+		pidCreate.ClientId = confIni.MustValue("pdd", "client_id")
+		pidCreate.Type = "pdd.ddk.goods.pid.generate"
+		pidCreate.Timestamp = fmt.Sprintf("%d", time.Now().Unix())
+		pidCreate.DataType = "JSON"
+		pidCreate.Sign = "sign"
+		pidCreate.Number = "1"
+
+		sign, err := pdd2.DDKSign(pidCreate)
+		if err != nil {
+			app.Error(c, 400, err, err.Error())
+			return
+		}
+
+		pidCreate.Sign = sign
+		val, err := pdd2.PostDDk(pidCreate, nil)
+
+		if err != nil {
+			app.Error(c, 400, err, err.Error())
+			return
+		}
+
+		err = tools.JsonUnmarshal(val, &pddErr)
+		if err != nil {
+			app.Error(c, 500, err, err.Error())
+			return
+		}
+		if pddErr.ErrorResponse.ErrorCode != 0 {
+			app.Error(c, 500, err, pddErr.ErrorResponse.ErrorMsg)
+			return
+		}
+
+		err = tools.JsonUnmarshal(val, &pidOut)
+		if err != nil {
+			app.Error(c, 500, err, err.Error())
+			return
+		}
+		outData.Pid = pidOut.PIDGenerateResponse.PIDList[0].PID
+		//更新pid
+		sqlData.Pid = outData.Pid
+		sqlData.OpenID = inData.OpenId
+		sqlData.Update()
+
+	} else {
+		outData.Pid = val.Pid
+	}
+
+	app.OK(c, outData, app.Success)
+
+}

+ 27 - 1
models/mysql/user.go

@@ -1,6 +1,9 @@
 package mysql
 
-import orm "duoduo/database"
+import (
+	orm "duoduo/database"
+	"duoduo/tools"
+)
 
 type User struct {
 	CreateTime string `gorm:"column:create_time" json:"createTime"`
@@ -23,6 +26,17 @@ func (u *User) GetNum() int {
 
 }
 
+//根据share_info_id
+func (u *User) Get() (User, error) {
+	var doc User
+	err := orm.Eloquent.Select("pid").Where("open_id = ? ", u.OpenID).Table(u.TableName()).First(&doc).Error
+	if err != nil {
+		return doc, err
+	}
+	return doc, nil
+
+}
+
 func (u *User) Create() (User, error) {
 	var doc User
 	result := orm.Eloquent.Table(u.TableName()).Create(&u)
@@ -33,3 +47,15 @@ func (u *User) Create() (User, error) {
 	doc = *u
 	return doc, nil
 }
+
+func (u *User) Update() (update User, err error) {
+
+	if err := orm.Eloquent.Table(u.TableName()).Model(&update).Where("open_id = ? ", u.OpenID).Updates(
+		map[string]interface{}{
+			"pid":         u.Pid,
+			"update_time": tools.GetCurrntTimeStr()}).Error; err != nil {
+		return update, err
+	}
+
+	return update, nil
+}

+ 9 - 0
models/user/user.pid.get.go

@@ -0,0 +1,9 @@
+package user
+
+type PidGetRequest struct {
+	OpenId string `json:"openId"`
+}
+
+type PidGetResponse struct {
+	Pid string `json:"pid"`
+}