|  | @@ -9,6 +9,7 @@ import (
 | 
	
		
			
				|  |  |  	"duoduo/tools/app"
 | 
	
		
			
				|  |  |  	"encoding/base64"
 | 
	
		
			
				|  |  |  	"encoding/json"
 | 
	
		
			
				|  |  | +	"errors"
 | 
	
		
			
				|  |  |  	"fmt"
 | 
	
		
			
				|  |  |  	"github.com/gin-gonic/gin"
 | 
	
		
			
				|  |  |  	"github.com/shopspring/decimal"
 | 
	
	
		
			
				|  | @@ -445,3 +446,71 @@ func UpdateMerchantCard(c *gin.Context) {
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  |  	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, "核销成功")
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +}
 |