123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743744745746747748749750751752753754755756757758759760761762763764765766767768769770771772773774775776777778779780781782783784785 |
- package shanghu
- import (
- "context"
- "duoduo/apis/common"
- "duoduo/apis/pdd"
- "duoduo/apis/shanghu/models"
- "duoduo/conf"
- "duoduo/models/shanghu"
- "duoduo/tools"
- "duoduo/tools/app"
- "encoding/base64"
- "encoding/json"
- "errors"
- "fmt"
- "github.com/gin-gonic/gin"
- "github.com/qiniu/go-sdk/v7/auth/qbox"
- "github.com/qiniu/go-sdk/v7/storage"
- "github.com/shopspring/decimal"
- "strconv"
- "time"
- )
- func CreateMerchantCard(c *gin.Context) {
- var inData models.CreateMerchantCardRequest
- var sqlData shanghu.MerchantCard
- err := c.ShouldBindJSON(&inData)
- if err != nil {
- app.Error(c, 400, err, err.Error())
- return
- }
- sqlData.CreatedAt = time.Now()
- sqlData.UpdatedAt = time.Now()
- jsStr, err := json.Marshal(inData.CardProjectData)
- if err != nil {
- app.Error(c, 400, err, "包含项目不能为空")
- return
- }
- sqlData.CardProjectData = string(jsStr)
- sqlData.CardPrice = inData.CardPrice
- sqlData.CardTotalPrice = inData.CardTotalPrice
- sqlData.ActivityEndTime, err = tools.TimeToInt64(inData.ActivityEndTime, "2006-01-02")
- if err != nil {
- app.Error(c, 400, err, err.Error())
- return
- }
- sqlData.ActivityStartTime, err = tools.TimeToInt64(inData.ActivityStartTime, "2006-01-02")
- if err != nil {
- app.Error(c, 400, err, err.Error())
- return
- }
- sqlData.Inventory, err = strconv.ParseInt(inData.Inventory, 10, 64)
- if err != nil {
- app.Error(c, 400, err, err.Error())
- return
- }
- sqlData.MerchantCardTime, err = tools.TimeToInt64(inData.MerchantCardTime, "2006-01-02")
- if err != nil {
- app.Error(c, 400, err, err.Error())
- return
- }
- sqlData.MerchantOpenID = inData.MerchantOpenID
- sqlData.Picture = inData.Picture
- sqlData.QuotaNum, err = strconv.ParseInt(inData.QuotaNum, 10, 64)
- if err != nil {
- app.Error(c, 400, err, err.Error())
- return
- }
- sqlData.RebateRate, err = strconv.ParseInt(inData.RebateRate, 10, 64)
- if err != nil {
- app.Error(c, 400, err, err.Error())
- return
- }
- sqlData.UseRule = inData.UseRule
- sqlData.MerchantCardName = inData.MerchantCardName
- sqlData.CancelNumber, err = strconv.Atoi(inData.CancelNumber)
- if err != nil {
- app.Error(c, 400, err, err.Error())
- return
- }
- sqlData.BackgroundImage = inData.BackgroundImage
- _, err = sqlData.Create()
- if err != nil {
- app.Error(c, 500, err, err.Error())
- return
- }
- app.OK(c, nil, app.Success)
- }
- func GetMerchantCard(c *gin.Context) {
- var inData models.GetMerchantCardRequest
- var outData models.GetMerchantCardReply
- var sqlData shanghu.MerchantCard
- var project []int64
- err := c.ShouldBindJSON(&inData)
- if err != nil {
- app.Error(c, 400, err, err.Error())
- return
- }
- sqlData.ID = inData.MerchantId
- merchantCard, err := sqlData.GetMerchantCard()
- if err != nil {
- app.Error(c, 500, err, err.Error())
- return
- }
- err = json.Unmarshal([]byte(merchantCard.CardProjectData), &project)
- if err != nil {
- app.Error(c, 500, err, err.Error())
- return
- }
- merchantCard.CardProjectData = ""
- for i := 0; i < len(project); i++ {
- var cardProject shanghu.MerchantCardProject
- cardProject.ID = project[i]
- projectInfo, err := cardProject.GetMerchantCardProject()
- if err != nil {
- app.Error(c, 500, err, err.Error())
- return
- }
- merchantCard.CardProjectData = merchantCard.CardProjectData + projectInfo.ProjectName + "x1 "
- }
- outData.CardProjectData = merchantCard.CardProjectData
- outData.MerchantCardName = merchantCard.MerchantCardName
- outData.MerchantCardTime = time.Unix(merchantCard.MerchantCardTime, 0).Format("2006-01-02")
- outData.ActivityEndTime = time.Unix(merchantCard.ActivityEndTime, 0).Format("2006-01-02")
- outData.ActivityStartTime = time.Unix(merchantCard.ActivityStartTime, 0).Format("2006-01-02")
- outData.Picture = merchantCard.Picture
- outData.UseRule = merchantCard.UseRule
- outData.QuotaNum = merchantCard.QuotaNum
- outData.Inventory = merchantCard.Inventory
- outData.RebateRate = merchantCard.RebateRate
- outData.CardPrice = merchantCard.CardPrice
- outData.X = merchantCard.X
- outData.Y = merchantCard.Y
- outData.W = merchantCard.W
- outData.H = merchantCard.H
- outData.BackgroundImage = merchantCard.BackgroundImage
- outData.CardTotalPrice = merchantCard.CardTotalPrice
- app.OK(c, outData, app.Success)
- }
- func GetMerchantCancelInfo(c *gin.Context) {
- var inData models.GetMerchantCancelInfoRequest
- var outData models.GetMerchantCardInfoReply
- var qrMessage models.QRData
- var merchantCardData shanghu.MerchantCard
- var clientPay shanghu.ClientPayTrans
- var project []int64
- var cancelNum shanghu.CancelLog
- err := c.ShouldBindJSON(&inData)
- if err != nil {
- app.Error(c, 400, err, err.Error())
- return
- }
- err = json.Unmarshal([]byte(inData.QRMessage), &qrMessage)
- if err != nil {
- app.Error(c, 400, err, err.Error())
- return
- }
- clientPay.MerchantCardID = qrMessage.MerchantId
- clientPay.ClientOpenID = qrMessage.ClientOpenId
- clientInfo, err := clientPay.GetPayTransByOpenid()
- if err != nil {
- app.Error(c, 400, err, err.Error())
- return
- }
- outData.PayTime = clientInfo.PayTime.Format(time.DateTime)
- merchantCardData.ID = qrMessage.MerchantId
- merchantInfo, err := merchantCardData.GetMerchantCard()
- if err != nil {
- app.Error(c, 500, err, err.Error())
- return
- }
- cancelNum.ClientOpenID = qrMessage.ClientOpenId
- cancelNum.MerchantID = qrMessage.MerchantId
- outData.MerchantCardName = merchantInfo.MerchantCardName
- outData.MerchantCardTime = tools.TimeToStr(merchantInfo.MerchantCardTime)
- outData.TotalCancelNumber = merchantInfo.CancelNumber
- outData.CancelNumber = merchantInfo.CancelNumber - cancelNum.GetNumber()
- err = json.Unmarshal([]byte(merchantInfo.CardProjectData), &project)
- if err != nil {
- app.Error(c, 500, err, err.Error())
- return
- }
- for i := 0; i < len(project); i++ {
- var cardProject shanghu.MerchantCardProject
- var cardProjectInfo models.CardProjectInfo
- cardProject.ID = project[i]
- projectInfo, err := cardProject.GetMerchantCardProject()
- if err != nil {
- app.Error(c, 500, err, err.Error())
- return
- }
- cardProjectInfo.ProjectUnit = projectInfo.ProjectUnit
- cardProjectInfo.ProjectName = projectInfo.ProjectName
- cardProjectInfo.ProjectUnitPrice = projectInfo.ProjectUnitPrice
- outData.CardProjectData = append(outData.CardProjectData, cardProjectInfo)
- }
- app.OK(c, outData, app.Success)
- }
- func GetMerchantCanvasCard(c *gin.Context) {
- var inData models.GetMerchantCardRequest
- var outData models.GetMerchantCanvasCardReply
- var sqlData shanghu.MerchantCard
- var project []int64
- var qr models.QRRequest
- var getQR models.GetQRRequest
- confIni, err := conf.ConnIni()
- if err != nil {
- app.Error(c, 400, err, err.Error())
- return
- }
- err = c.ShouldBindJSON(&inData)
- if err != nil {
- app.Error(c, 400, err, err.Error())
- return
- }
- sqlData.ID = inData.MerchantId
- merchantCard, err := sqlData.GetMerchantCard()
- if err != nil {
- app.Error(c, 500, err, err.Error())
- return
- }
- outData.Static.Background = "/images/背景.jpg"
- var swiperList []models.SwiperList
- var rightButton models.RightButton
- var swiper models.SwiperList
- swiper.ID = 0
- swiper.URL = merchantCard.Picture
- swiperList = append(swiperList, swiper)
- //err = json.Unmarshal([]byte(merchantCard.Picture), &swiperList)
- //if err != nil {
- // fmt.Println("picture")
- // app.Error(c, 500, err, err.Error())
- // return
- //}
- outData.Inventory = merchantCard.Inventory
- outData.SwiperList = swiperList
- rightButton.ImageURL = "/images/资源 24.png"
- outData.RightButton = append(outData.RightButton, rightButton)
- rightButton.ImageURL = "/images/资源 25.png"
- outData.RightButton = append(outData.RightButton, rightButton)
- rightButton.ImageURL = "/images/资源 26.png"
- outData.RightButton = append(outData.RightButton, rightButton)
- rightButton.ImageURL = "/images/资源 28.png"
- outData.RightButton = append(outData.RightButton, rightButton)
- var dataList models.DataList
- err = json.Unmarshal([]byte(merchantCard.CardProjectData), &project)
- if err != nil {
- fmt.Println("picture2")
- app.Error(c, 500, err, err.Error())
- return
- }
- //merchantCard.CardProjectData = ""
- for i := 0; i < len(project); i++ {
- var cardProject shanghu.MerchantCardProject
- cardProject.ID = project[i]
- projectInfo, err := cardProject.GetMerchantCardProject()
- if err != nil {
- app.Error(c, 500, err, err.Error())
- return
- }
- dataList.Name = projectInfo.ProjectName
- dataList.Count = 1
- dataList.Price = projectInfo.ProjectUnitPrice
- dataList.Unit = projectInfo.ProjectUnit
- outData.DataList = append(outData.DataList, dataList)
- }
- var buy models.BuyKnowList
- buy.Icon = "/images/资源 46.png"
- buy.Title = "有效期"
- buy.Text = "至" + tools.TimeToStr(merchantCard.MerchantCardTime)
- outData.BuyKnowList = append(outData.BuyKnowList, buy)
- buy.Icon = "/images/资源 48.png"
- buy.Title = "限购数量"
- buy.Text = "每位用户限购1张"
- outData.BuyKnowList = append(outData.BuyKnowList, buy)
- buy.Icon = "/images/资源 49.png"
- buy.Title = "使用规则"
- buy.Text = merchantCard.UseRule
- outData.BuyKnowList = append(outData.BuyKnowList, buy)
- var shopData models.ShopData
- var merchant shanghu.Merchant
- merchant.OpenId = merchantCard.MerchantOpenID
- merchantInfo, err := merchant.GetMerchant()
- if err != nil {
- app.Error(c, 500, err, err.Error())
- return
- }
- shopData.Name = merchantInfo.MerchantName
- shopData.Address = merchantInfo.Address
- outData.ShopData = shopData
- outData.FenxiangShow = false
- outData.MerchantAmount, err = decimal.NewFromString(merchantCard.CardPrice)
- if err != nil {
- app.Error(c, 500, err, err.Error())
- return
- }
- outData.MerchantOriginalAmount, err = decimal.NewFromString(merchantCard.CardTotalPrice)
- if err != nil {
- app.Error(c, 500, err, err.Error())
- return
- }
- //outData.MerchantOriginalAmount = outData.MerchantAmount.Add(decimal.NewFromInt(50))
- var outQRData models.ClientCardQRReply
- val, err := pdd.DuoDuoGet("https://api.weixin.qq.com/cgi-bin/token?grant_type=client_credential&appid=wx25357518f710b8ce&secret=83c7dca801a6c93fbfac3c91f57a4eb2")
- if err != nil {
- app.Error(c, 500, err, err.Error())
- return
- }
- err = tools.JsonUnmarshal(val, &outQRData)
- if err != nil {
- app.Error(c, 500, err, err.Error())
- return
- }
- if outQRData.AccessToken == "" {
- app.Error(c, 500, err, "token error")
- return
- }
- url := "https://api.weixin.qq.com/wxa/getwxacodeunlimit?access_token=" + outQRData.AccessToken
- //1.原始码 不需要购买直接分享 ==原生码直接分享
- //2.code 本人openid 需要购买才能分享
- //3.空的 官方邀请码
- //返回邀请码
- if inData.Code == "yuanshima" { //可以分享 code 等于自己的与yuanshima的都给平台
- outData.IsShare = true
- outData.InvitationCode = "yuanshima"
- } else { //查询购买记录,没有购买过不让分享
- var payTrans shanghu.ClientPayTrans
- var userInfo shanghu.MerchantClientUser
- payTrans.MerchantCardID = inData.MerchantId
- payTrans.ClientOpenID = inData.Code
- payInfo, _ := payTrans.GetPayTransByOpenid()
- if payInfo.ID <= 0 {
- outData.IsShare = false
- } else {
- outData.IsShare = true
- }
- userInfo.ClientOpenID = inData.Code
- userInfoReply, _ := userInfo.GetUserInfo()
- outData.InvitationCode = userInfoReply.Code
- }
- //点击购买的时候把code给进去把 原始码购买属于平台
- qr.CheckPath = true
- qr.Page = "pages/home/home"
- qr.EnvVersion = "release"
- qr.Scene = "id-" + strconv.FormatInt(inData.MerchantId, 10) + "-c-" + outData.InvitationCode
- fmt.Println(qr.Scene)
- data, err := json.Marshal(&qr)
- if err != nil {
- app.Error(c, 500, err, err.Error())
- return
- }
- reply, err := common.Post(data, url)
- if err != nil {
- app.Error(c, 500, err, err.Error())
- return
- }
- if getQR.Errcode != 0 {
- app.Error(c, 500, err, getQR.Errmsg)
- return
- }
- encoded := base64.StdEncoding.EncodeToString(reply)
- outData.Base64Img = encoded
- //上传二维码文件
- timeUnixNano := time.Now().UnixNano() //单位纳秒
- fileName := fmt.Sprintf("%d.jpg", timeUnixNano)
- //七牛云上传图片
- bucket := "imgxx"
- key := "shanghuka/" + "erweima/" + time.Now().Format(time.DateOnly) + "/" + fileName
- putPolicy := storage.PutPolicy{
- Scope: bucket,
- }
- mac := qbox.NewMac(confIni.MustValue("ly-qn", "access_key"), confIni.MustValue("ly-qn", "secret_key"))
- upToken := putPolicy.UploadToken(mac)
- cfg := storage.Config{}
- // 空间对应的机房
- cfg.Zone = &storage.ZoneHuanan
- // 是否使用https域名
- cfg.UseHTTPS = false
- // 上传是否使用CDN上传加速
- cfg.UseCdnDomains = false
- // 构建表单上传的对象
- baseUploader := storage.NewBase64Uploader(&cfg)
- ret := storage.PutRet{}
- //data, err := base64.RawStdEncoding.DecodeString(inData.Pictures[i])
- //if err != nil {
- // app.Error(c, 500, err, "上传图片失败")
- // return
- //}
- err = baseUploader.Put(context.Background(), &ret, upToken, key, []byte(encoded), nil)
- if err != nil {
- app.Error(c, 500, err, "上传图片失败")
- return
- }
- outData.QRUrl = "http://lingyang.shisanmiao.com/" + key
- //err = json.Unmarshal([]byte(merchantCard.CardProjectData), &project)
- //if err != nil {
- // app.Error(c, 500, err, err.Error())
- // return
- //}
- //
- //merchantCard.CardProjectData = ""
- //for i := 0; i < len(project); i++ {
- // var cardProject shanghu.MerchantCardProject
- // cardProject.ID = project[i]
- // projectInfo, err := cardProject.GetMerchantCardProject()
- // if err != nil {
- // app.Error(c, 500, err, err.Error())
- // return
- // }
- // merchantCard.CardProjectData = merchantCard.CardProjectData + projectInfo.ProjectName + "x1 "
- //}
- app.OK(c, outData, app.Success)
- }
- func MerchantCardList(c *gin.Context) {
- var inData models.MerchantCardListRequest
- var sqlData shanghu.MerchantCard
- var outData []models.MerchantCardListReply
- 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.MerchantOpenID = inData.OpenId
- merchantCard, count, err := sqlData.GetOpenIdList(pageSize, pageIndex, inData.TypeList)
- if err != nil {
- app.Error(c, 500, err, err.Error())
- return
- }
- for _, v := range merchantCard {
- var merchant models.MerchantCardListReply
- var payNumber shanghu.ClientPayTrans
- merchant.ID = v.ID
- merchant.MerchantCardName = v.MerchantCardName
- merchant.ActivityEnd = tools.TimeToStr(v.ActivityEndTime)
- merchant.ActivityStart = tools.TimeToStr(v.ActivityStartTime)
- merchant.CardPrice = v.CardPrice
- payNumber.MerchantCardID = v.ID
- merchant.SaleCardNumber = payNumber.GetNumByCardID()
- outData = append(outData, merchant)
- }
- app.PageOK(c, outData, count, pageIndex, pageSize, app.Success)
- return
- //app.PageOK(c, merchantCard, count, pageIndex, pageSize, app.Success)
- }
- // c端获取卡信息
- func MerchantClientCardList(c *gin.Context) {
- var inData models.MerchantCardListRequest
- var sqlData shanghu.MerchantCard
- var outData []models.MerchantCardListReply
- 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
- }
- merchantCard, count, err := sqlData.ClientGetOpenIdList(pageSize, pageIndex, inData.TypeList)
- if err != nil {
- app.Error(c, 500, err, err.Error())
- return
- }
- for i := 0; i < len(merchantCard); i++ {
- var reply models.MerchantCardListReply
- reply.RebateRate = merchantCard[i].RebateRate
- reply.ID = merchantCard[i].ID
- reply.QuotaNum = merchantCard[i].QuotaNum
- reply.MerchantCardName = merchantCard[i].MerchantCardName
- reply.CardPrice = merchantCard[i].CardPrice
- priceDec, err := decimal.NewFromString(merchantCard[i].CardPrice)
- if err != nil {
- app.Error(c, 500, err, err.Error())
- return
- }
- reply.RebateAmount = priceDec.Mul(decimal.NewFromInt(merchantCard[i].RebateRate).Div(decimal.NewFromInt(100))).String()
- outData = append(outData, reply)
- }
- app.PageOK(c, outData, count, pageIndex, pageSize, app.Success)
- }
- func UpdateMerchantCard(c *gin.Context) {
- var inData models.UpdateMerchantCardRequest
- var sqlData shanghu.MerchantCard
- err := c.ShouldBindJSON(&inData)
- if err != nil {
- app.Error(c, 400, err, err.Error())
- return
- }
- sqlData.ID = inData.ID
- sqlData.QuotaNum = inData.QuotaNum
- sqlData.UseRule = inData.UseRule
- sqlData.Picture = inData.Picture
- sqlData.Inventory = inData.Inventory
- sqlData.ActivityStartTime = inData.ActivityStartTime
- sqlData.ActivityEndTime = inData.ActivityEndTime
- err = sqlData.UpdateMerchantCard()
- if err != nil {
- app.Error(c, 400, err, err.Error())
- return
- }
- app.OK(c, nil, app.Success)
- }
- func UpdateMerchantCardWXYZ(c *gin.Context) {
- var inData models.UpdateMerchantCardWHXYRequest
- var sqlData shanghu.MerchantCard
- var whxy []models.WHXYStr
- err := c.ShouldBindJSON(&inData)
- if err != nil {
- app.Error(c, 400, err, err.Error())
- return
- }
- //"json: cannot unmarshal number -0.33279827286174424 into Go struct field WHXYStr.rotate of type int"
- err = json.Unmarshal([]byte(inData.Whxy), &whxy)
- if err != nil {
- app.Error(c, 400, err, err.Error())
- return
- }
- for i := 0; i < len(whxy); i++ {
- if !whxy[i].Y.IsZero() {
- sqlData.W = whxy[i].W.String()
- sqlData.X = whxy[i].X.String()
- sqlData.Y = whxy[i].Y.String()
- sqlData.H = whxy[i].H.String()
- }
- }
- sqlData.ID = inData.MerchantCardId
- err = sqlData.UpdateMerchantWHXY()
- if err != nil {
- app.Error(c, 400, err, err.Error())
- return
- }
- app.OK(c, nil, app.Success)
- }
- // 核销次数
- func CancelNumber(c *gin.Context) {
- var inData models.CancelCardRequest
- var sqlData shanghu.MerchantCard
- var log shanghu.CancelLog
- var qrMessage models.QRData
- var clientPay shanghu.ClientPayTrans
- err := c.ShouldBindJSON(&inData)
- if err != nil {
- app.Error(c, 400, err, err.Error())
- return
- }
- err = json.Unmarshal([]byte(inData.QRMessage), &qrMessage)
- if err != nil {
- app.Error(c, 400, err, err.Error())
- return
- }
- clientPay.MerchantCardID = qrMessage.MerchantId
- clientPay.ClientOpenID = qrMessage.ClientOpenId
- clientInfo, err := clientPay.GetPayTransByOpenid()
- if err != nil {
- app.Error(c, 400, err, err.Error())
- return
- }
- if clientInfo.ID == 0 {
- app.Error(c, 200, errors.New("用户未购买此卡"), "用户未购买此卡")
- return
- }
- sqlData.ID = qrMessage.MerchantId
- merchantInfo, err := sqlData.GetMerchantCard()
- if err != nil {
- app.Error(c, 500, err, err.Error())
- return
- }
- log.MerchantID = qrMessage.MerchantId
- log.ClientOpenID = qrMessage.ClientOpenId
- if log.GetNumber() >= merchantInfo.CancelNumber {
- app.Error(c, 200, errors.New("卡已使用完,请重新购买"), "卡已使用完,请重新购买")
- return
- }
- if merchantInfo.MerchantOpenID != inData.MerchantOpenId {
- app.Error(c, 200, errors.New("核销商家与发卡商家不一致"), "核销商家与发卡商家不一致")
- return
- }
- log.MerchantID = qrMessage.MerchantId
- log.ClientOpenID = qrMessage.ClientOpenId
- log.MerchantOpenID = inData.MerchantOpenId
- log.CreatedAt = time.Now()
- log.UpdatedAt = time.Now()
- _, err = log.Create()
- if err != nil {
- app.Error(c, 500, err, err.Error())
- return
- }
- app.OK(c, nil, "核销成功")
- }
- // 核销 v2
- func CancelNumberV2(c *gin.Context) {
- var inData models.CancelCardV2Request
- var sqlData shanghu.MerchantCard
- var log shanghu.CancelLog
- var cancelLog []shanghu.CancelLog
- var qrMessage models.QRData
- var clientPay shanghu.ClientPayTrans
- err := c.ShouldBindJSON(&inData)
- if err != nil {
- app.Error(c, 400, err, err.Error())
- return
- }
- if inData.Number <= 0 {
- app.Error(c, 400, errors.New("核销次数不能为0"), "核销次数不能为0")
- return
- }
- err = json.Unmarshal([]byte(inData.QRMessage), &qrMessage)
- if err != nil {
- app.Error(c, 400, err, err.Error())
- return
- }
- clientPay.MerchantCardID = qrMessage.MerchantId
- clientPay.ClientOpenID = qrMessage.ClientOpenId
- clientInfo, err := clientPay.GetPayTransByOpenid()
- if err != nil {
- app.Error(c, 400, err, err.Error())
- return
- }
- if clientInfo.ID == 0 {
- app.Error(c, 500, errors.New("用户未购买此卡"), "用户未购买此卡")
- return
- }
- sqlData.ID = qrMessage.MerchantId
- merchantInfo, err := sqlData.GetMerchantCard()
- if err != nil {
- app.Error(c, 500, err, err.Error())
- return
- }
- log.MerchantID = qrMessage.MerchantId
- log.ClientOpenID = qrMessage.ClientOpenId
- if log.GetNumber()+inData.Number > merchantInfo.CancelNumber {
- app.Error(c, 500, errors.New("剩余核销次数不够,请重新购买"), "剩余核销次数不够,请重新购买")
- return
- }
- if merchantInfo.MerchantOpenID != inData.MerchantOpenId {
- app.Error(c, 500, errors.New("核销商家与发卡商家不一致"), "核销商家与发卡商家不一致")
- return
- }
- for i := 0; i < inData.Number; i++ {
- log.MerchantID = qrMessage.MerchantId
- log.ClientOpenID = qrMessage.ClientOpenId
- log.MerchantOpenID = inData.MerchantOpenId
- log.CreatedAt = time.Now()
- log.UpdatedAt = time.Now()
- cancelLog = append(cancelLog, log)
- }
- err = log.CreateBatches(cancelLog)
- if err != nil {
- app.Error(c, 500, err, err.Error())
- return
- }
- app.OK(c, nil, "核销成功")
- }
|