package shanghu
import (
"duoduo/apis/shanghu/models"
"duoduo/models/shanghu"
"duoduo/tools"
"duoduo/tools/app"
"encoding/base64"
"encoding/json"
"errors"
"github.com/gin-gonic/gin"
"github.com/skip2/go-qrcode"
"strconv"
"time"
)
func DrawLog(c *gin.Context) {
var inData models.ClientDrawLogRequest
var sqlData shanghu.ClientActiveDrawLog
var outData []models.ClientDrawLogReply
err := c.ShouldBindJSON(&inData)
if err != nil {
app.Error(c, 400, err, err.Error())
return
}
var pageSize = 10
var pageIndex = 1
if inData.PageSize != 0 {
pageSize = inData.PageSize
}
if inData.PageIndex != 0 {
pageIndex = inData.PageIndex
}
sqlData.ClientOpenID = inData.ClientOpenID
activeDrawLogList, count, err := sqlData.GetClientActiveDrawLogListByOpenId(pageSize, pageIndex)
if err != nil {
app.Error(c, 500, err, err.Error())
return
}
for _, v := range activeDrawLogList {
//查询商品名称
var drawProduct shanghu.MerchantActiveDrawProduct
var drawLog models.ClientDrawLogReply
drawProduct.ID = v.DrawProductID
drawProductInfo, err := drawProduct.GetDrawProductById()
if err != nil {
app.Error(c, 500, err, err.Error())
return
}
drawLog.DrawProductName = drawProductInfo.DrawProductName
drawLog.IsPrize = v.IsPrize
drawLog.Id = v.ID
outData = append(outData, drawLog)
}
app.PageOK(c, outData, count, pageIndex, pageSize, app.Success)
}
func DrawLogVerificationCode(c *gin.Context) {
var inData models.DrawLogVerificationCodeRequest
var outData models.DrawLogVerificationCodeReply
var sqlData shanghu.ClientActiveDrawLog
err := c.ShouldBindJSON(&inData)
if err != nil {
app.Error(c, 400, err, err.Error())
return
}
sqlData.ID = inData.DrawLogId
sqlData.ClientOpenID = inData.OpenId
drawLog, err := sqlData.GetClientActiveDrawLogListByOpenIdAndId()
if err != nil {
app.Error(c, 500, err, err.Error())
return
}
if drawLog.IsPrize == models.NotWon {
app.Error(c, 500, errors.New("不需要兑奖"), "不需要兑奖")
return
}
outData.Key = "DRAW" + tools.MD5(strconv.FormatInt(inData.DrawLogId, 10)+"zhangkun429@")
outData.DrawLogId = inData.DrawLogId
str, err := json.Marshal(&outData)
if err != nil {
app.Error(c, 500, err, err.Error())
return
}
qr, err := qrcode.Encode(string(str), qrcode.High, 200)
if err != nil {
app.Error(c, 500, err, err.Error())
return
}
encodedData := base64.StdEncoding.EncodeToString(qr)
app.OK(c, encodedData, app.Success)
}
func DrawCancel(c *gin.Context) {
var inData models.DrawCancelRequest
var sqlData shanghu.ClientActiveDrawLog
err := c.ShouldBindJSON(&inData)
if err != nil {
app.Error(c, 400, err, err.Error())
return
}
key := "DRAW" + tools.MD5(strconv.FormatInt(inData.DrawLogId, 10)+"zhangkun429@")
if key != inData.Key {
app.Error(c, 500, errors.New("数据错误"), "数据错误")
return
}
sqlData.ID = inData.DrawLogId
drawLog, err := sqlData.GetClientActiveDrawLogListById()
if err != nil {
app.Error(c, 500, err, err.Error())
return
}
if drawLog.IsPrize != models.NotClaimed {
app.Error(c, 500, errors.New("不允许兑奖"), "不允许兑奖")
return
} else {
err = drawLog.UpdateDrawPrize()
if err != nil {
app.Error(c, 500, err, err.Error())
return
}
}
app.OK(c, nil, app.Success)
}
func DrawCancelInfo(c *gin.Context) {
var inData models.DrawCancelInfoRequest
var sqlData shanghu.ClientActiveDrawLog
var activeConfigSql shanghu.MerchantActiveConfig
var drawProductSql shanghu.MerchantActiveDrawProduct
var outData models.DrawCancelInfoReply
err := c.ShouldBindJSON(&inData)
if err != nil {
app.Error(c, 400, err, err.Error())
return
}
key := "DRAW" + tools.MD5(strconv.FormatInt(inData.DrawLogId, 10)+"zhangkun429@")
if key != inData.Key {
app.Error(c, 500, errors.New("数据错误"), "数据错误")
return
}
sqlData.ID = inData.DrawLogId
drawLog, err := sqlData.GetClientActiveDrawLogListById()
if err != nil {
app.Error(c, 500, err, err.Error())
return
}
if drawLog.IsPrize != 2 {
app.Error(c, 500, errors.New("未中奖或已兑奖"), "未中奖或已兑奖")
return
}
activeConfigSql.ID = drawLog.ActiveConfigID
activeInfo, err := activeConfigSql.GetConfigInfoById()
if err != nil {
app.Error(c, 500, err, err.Error())
return
}
drawProductSql.ID = drawLog.DrawProductID
drawProduct, err := drawProductSql.GetDrawProductById()
if err != nil {
app.Error(c, 500, err, err.Error())
return
}
outData.DrawUrl = drawProduct.DrawUrl
outData.DrawProductName = drawProduct.DrawProductName
outData.ActiveConfigName = activeInfo.ActiveName
outData.DrawLogId = inData.DrawLogId
outData.DrawTime = drawLog.CreatedAt.Format(time.DateTime)
app.OK(c, outData, app.Success)
}