Browse Source

Merge branch 'develop' of k.zhang/duoduo into master

k.zhang 1 year ago
parent
commit
cf23d42e02

+ 6 - 0
apis/shanghu/base.go

@@ -39,4 +39,10 @@ func InitShangHuRouter(engine *gin.RouterGroup) {
 		v1.POST("/cash/out", PayCashOut)                                    //提现
 		v1.POST("/cash.out/list", CashOutList)                              //提现列表
 	}
+
+	v2 := engine.Group("v2")
+	{
+		v2.POST("/merchant/cancel/info", GetMerchantCancelInfo) //核销详情
+		v2.POST("/merchant/cancel", CancelNumberV2)
+	}
 }

+ 9 - 0
apis/shanghu/client.trans.go

@@ -48,18 +48,27 @@ func GetPayTransList(c *gin.Context) {
 	for i := 0; i < len(merchantCard); i++ {
 		var transData models.ClientTransReply
 		var cardSql shanghu.MerchantCard
+		var cancelNum shanghu.CancelLog
 		cardSql.ID = merchantCard[i].MerchantCardID
 		cardInfo, err := cardSql.GetMerchantCard()
 		if err != nil {
 			app.Error(c, 500, err, err.Error())
 			return
 		}
+
+		cancelNum.ClientOpenID = inData.OpenId
+		cancelNum.MerchantID = cardInfo.ID
+
 		transData.TransId = merchantCard[i].ID
 		transData.Amount = merchantCard[i].Amount
 		transData.PayTime = merchantCard[i].PayTime.Format(time.DateTime)
 		transData.MerchantCardID = merchantCard[i].MerchantCardID
 		transData.MerchantCardName = cardInfo.MerchantCardName
 		transData.MerchantCardTime = tools.TimeToStr(cardInfo.MerchantCardTime)
+		transData.TotalCancelNumber = cardInfo.CancelNumber
+		transData.CancelNumber = cardInfo.CancelNumber - cancelNum.GetNumber()
+
+		transData.CommAmount = merchantCard[i].Amount.Mul(decimal.NewFromInt(cardInfo.RebateRate)).Div(decimal.NewFromInt(100)).Round(2)
 
 		outTransData = append(outTransData, transData)
 	}

+ 149 - 0
apis/shanghu/merchant.card.go

@@ -150,6 +150,78 @@ func GetMerchantCard(c *gin.Context) {
 
 }
 
+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
@@ -634,3 +706,80 @@ func CancelNumber(c *gin.Context) {
 	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, "核销成功")
+
+}

+ 20 - 0
apis/shanghu/models/card.go

@@ -154,3 +154,23 @@ type WHXYStr struct {
 	//Rotate   int             `json:"rotate,omitempty"`
 	//SourceID any `json:"sourceId,omitempty"`
 }
+
+type GetMerchantCancelInfoRequest struct {
+	MerchantOpenId string `json:"merchant_open_id"`
+	QRMessage      string `json:"qr_message"` //
+}
+
+type GetMerchantCardInfoReply struct {
+	MerchantCardName  string            `json:"merchant_card_name"`  // 商户卡名称
+	CardProjectData   []CardProjectInfo `json:"card_project_data"`   // 项目
+	PayTime           string            `json:"pay_time"`            // 支付时间
+	MerchantCardTime  string            `json:"merchant_card_time"`  // 商户卡有效期
+	TotalCancelNumber int               `json:"total_cancel_number"` // 总核销次数
+	CancelNumber      int               `json:"cancel_number"`       // 待核销次数
+}
+
+type CardProjectInfo struct {
+	ProjectName      string `json:"project_name"`       //产品名
+	ProjectUnitPrice string `json:"project_unit_price"` //单价
+	ProjectUnit      string `json:"project_unit"`       //产品单位
+}

+ 9 - 6
apis/shanghu/models/client.trans.go

@@ -12,12 +12,15 @@ type ClientTransRequest struct {
 }
 
 type ClientTransReply struct {
-	MerchantCardID   int64           `json:"merchant_card_id"`   // 商户卡id
-	Amount           decimal.Decimal `json:"amount"`             // 交易金额
-	PayTime          string          `json:"pay_time"`           // 支付时间
-	MerchantCardName string          `json:"merchant_card_name"` // 商户卡名称
-	MerchantCardTime string          `json:"merchant_card_time"` // 商户卡有效期
-	TransId          int64           `json:"trans_id"`           //交易id
+	MerchantCardID    int64           `json:"merchant_card_id"`    // 商户卡id
+	Amount            decimal.Decimal `json:"amount"`              // 交易金额
+	PayTime           string          `json:"pay_time"`            // 支付时间
+	MerchantCardName  string          `json:"merchant_card_name"`  // 商户卡名称
+	MerchantCardTime  string          `json:"merchant_card_time"`  // 商户卡有效期
+	TransId           int64           `json:"trans_id"`            // 交易id
+	TotalCancelNumber int             `json:"total_cancel_number"` // 总核销次数
+	CancelNumber      int             `json:"cancel_number"`       // 待核销次数
+	CommAmount        decimal.Decimal `json:"comm_amount"`         //佣金
 }
 
 type VerificationCodeRequest struct {

+ 6 - 0
apis/shanghu/models/merchant.go

@@ -47,3 +47,9 @@ type CancelCardRequest struct {
 	MerchantOpenId string `json:"merchant_open_id"`
 	QRMessage      string `json:"qr_message"`
 }
+
+type CancelCardV2Request struct {
+	MerchantOpenId string `json:"merchant_open_id"`
+	QRMessage      string `json:"qr_message"`
+	Number         int    `json:"number"`
+}

+ 21 - 0
models/shanghu/cancel_log.go

@@ -34,6 +34,27 @@ func (u *CancelLog) Create() (CancelLog, error) {
 	return doc, nil
 }
 
+func (u *CancelLog) CreateBatches(log []CancelLog) error {
+	var err error
+	tx := orm.ShMysql.Begin()
+	defer func() {
+		if err != nil {
+			tx.Rollback()
+		} else {
+			tx.Commit()
+		}
+	}()
+
+	for i := 0; i < len(log); i++ {
+		err = orm.ShMysql.Table(log[i].TableName()).Create(&log[i]).Error
+		if err != nil {
+			return err
+		}
+	}
+
+	return nil
+}
+
 func (u *CancelLog) GetNumber() int {
 	var count int