| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743744745746747748749750751752753754755756757758759760761762763764765766767768769770771772773774775776777778779780781782783784785786787788789790791792 | 
							- 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" && inData.Openid == "" { //商家平台 可以分享   code 等于自己的与yuanshima的都给平台
 
- 		outData.IsShare = true
 
- 		outData.InvitationCode = "yuanshima"
 
- 	} else if inData.Code == "yuanshima" && inData.Openid != "" { // 原始码 c端用户调用
 
- 		var userInfo shanghu.MerchantClientUser
 
- 		outData.IsShare = true
 
- 		userInfo.ClientOpenID = inData.Openid
 
- 		userInfoReply, _ := userInfo.GetUserInfo()
 
- 		outData.InvitationCode = userInfoReply.Code
 
- 	} else if inData.Code != "yuanshima" && inData.Openid != "" && inData.Code != "" { //查询购买记录,没有购买过不让分享
 
- 		var payTrans shanghu.ClientPayTrans
 
- 		//var userInfo shanghu.MerchantClientUser
 
- 		payTrans.MerchantCardID = inData.MerchantId
 
- 		payTrans.ClientOpenID = inData.Openid
 
- 		payInfo, _ := payTrans.GetPayTransByOpenid()
 
- 		if payInfo.ID <= 0 {
 
- 			outData.IsShare = false
 
- 		} else {
 
- 			outData.IsShare = true
 
- 		}
 
- 		outData.InvitationCode = inData.Code
 
- 	} else {
 
- 		app.Error(c, 500, errors.New("code 错误"), "code 错误")
 
- 		return
 
- 	}
 
- 	//点击购买的时候把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, "核销成功")
 
- }
 
 
  |