|
@@ -3,9 +3,13 @@ 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"
|
|
|
"time"
|
|
|
)
|
|
|
|
|
@@ -49,7 +53,7 @@ func PendingCancelAmount(c *gin.Context) {
|
|
|
}
|
|
|
|
|
|
// 拼团购买
|
|
|
-func GetGroupBuyPay(c *gin.Context) {
|
|
|
+func GetGroupBuyPayList(c *gin.Context) {
|
|
|
var inData models.GetGroupBuyPayRequest
|
|
|
var sqlData shanghu.ClientActivePayTrans
|
|
|
var outData []models.GetGroupBuyPayReply
|
|
@@ -112,8 +116,274 @@ func GetGroupBuyPay(c *gin.Context) {
|
|
|
}
|
|
|
data.GroupBuyName = groupBuyInfo.GroupBuyName
|
|
|
data.PayTime = v.PayTime.Format(time.DateTime)
|
|
|
+ data.TradeNo = v.ThirdTradeNo
|
|
|
outData = append(outData, data)
|
|
|
}
|
|
|
app.PageOK(c, outData, count, pageIndex, pageSize, app.Success)
|
|
|
|
|
|
}
|
|
|
+
|
|
|
+// 拼团核销码
|
|
|
+func GroupBuyPayCode(c *gin.Context) {
|
|
|
+ var inData models.GroupBuyPayCodeRequest
|
|
|
+ var outData models.GroupBuyPayCodeReply
|
|
|
+ //var sqlData shanghu.ClientActivePayTrans
|
|
|
+
|
|
|
+ err := c.ShouldBindJSON(&inData)
|
|
|
+ if err != nil {
|
|
|
+ app.Error(c, 400, err, err.Error())
|
|
|
+ return
|
|
|
+ }
|
|
|
+
|
|
|
+ outData.Key = "GROU" + tools.MD5(inData.TradeNo+"zhangkun429@")
|
|
|
+ outData.TradeNo = inData.TradeNo
|
|
|
+
|
|
|
+ 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 GroupBuyCancelInfo(c *gin.Context) {
|
|
|
+ var inData models.GroupBuyCancelInfoRequest
|
|
|
+ var outData models.GroupBuyCancelInfoReply
|
|
|
+ var sqlData shanghu.ClientActivePayTrans
|
|
|
+ var activeConfigSql shanghu.MerchantActiveConfig
|
|
|
+ var groupBuySql shanghu.MerchantActiveGroupBuy
|
|
|
+ var groupBuyProjectSql shanghu.MerchantActiveGroupByProject
|
|
|
+
|
|
|
+ err := c.ShouldBindJSON(&inData)
|
|
|
+ if err != nil {
|
|
|
+ app.Error(c, 400, err, err.Error())
|
|
|
+ return
|
|
|
+ }
|
|
|
+
|
|
|
+ key := "GROU" + tools.MD5(inData.TradeNo+"zhangkun429@")
|
|
|
+ if inData.Key != key {
|
|
|
+ app.Error(c, 500, errors.New("数据错误"), "数据错误")
|
|
|
+ return
|
|
|
+ }
|
|
|
+ sqlData.ThirdTradeNo = inData.TradeNo
|
|
|
+ payTransInfo, err := sqlData.GetPayTransByThirdTradeNo()
|
|
|
+ if err != nil {
|
|
|
+ app.Error(c, 500, err, err.Error())
|
|
|
+ return
|
|
|
+ }
|
|
|
+
|
|
|
+ //校验分账类型
|
|
|
+ //if payTransInfo.AccountStatus != shanghu.ClientActivePayTransAccountStatusUnSettle && payTransInfo.AccountStatus != shanghu.ClientActivePayTransAccountStatusSettleFail {
|
|
|
+ // app.Error(c, 500, errors.New("核销已完成"), "核销已完成")
|
|
|
+ // return
|
|
|
+ //}
|
|
|
+ // 校验支付类型
|
|
|
+ if payTransInfo.Status != shanghu.ClientActivePayTransStatusPaySuccess {
|
|
|
+ app.Error(c, 500, errors.New("未支付交易不准核销"), "未支付交易不准核销")
|
|
|
+ return
|
|
|
+ }
|
|
|
+
|
|
|
+ // 返回拼团信息
|
|
|
+ outData.Amount = payTransInfo.Amount.String()
|
|
|
+ outData.TradeNo = inData.TradeNo
|
|
|
+ outData.PayTime = payTransInfo.PayTime.Format(time.DateTime)
|
|
|
+ outData.MerchantAmount = payTransInfo.MerchantAmount.String()
|
|
|
+ outData.ClientAmount = payTransInfo.ClientAmount.String()
|
|
|
+
|
|
|
+ activeConfigSql.ID = payTransInfo.ActiveConfigID
|
|
|
+ activeConfigInfo, err := activeConfigSql.GetConfigInfoById()
|
|
|
+ if err != nil {
|
|
|
+ app.Error(c, 500, err, err.Error())
|
|
|
+ return
|
|
|
+ }
|
|
|
+ outData.ActiveName = activeConfigInfo.ActiveName
|
|
|
+ groupBuySql.ID = payTransInfo.GroupBuyID
|
|
|
+ groupBuyInfo, err := groupBuySql.GetMerchantActiveGroupBuyById()
|
|
|
+ if err != nil {
|
|
|
+ app.Error(c, 500, err, err.Error())
|
|
|
+ return
|
|
|
+ }
|
|
|
+
|
|
|
+ outData.GroupBuyName = groupBuyInfo.GroupBuyName
|
|
|
+ groupBuyProjectSql.GroupBuyID = payTransInfo.GroupBuyID
|
|
|
+ project, _, err := groupBuyProjectSql.GetGroupBuyProjectList()
|
|
|
+ if err != nil {
|
|
|
+ app.Error(c, 500, err, err.Error())
|
|
|
+ return
|
|
|
+ }
|
|
|
+
|
|
|
+ for _, v := range project {
|
|
|
+ var projectInfo models.CancelGroupBuyProject
|
|
|
+ var activeCancelSql shanghu.ActiveCancelLog
|
|
|
+ activeCancelSql.ClientOpenID = payTransInfo.ClientOpenID
|
|
|
+ activeCancelSql.ActiveConfigID = payTransInfo.ActiveConfigID
|
|
|
+ num := activeCancelSql.GetActiveCancelNum()
|
|
|
+ projectInfo.ProjectName = v.ProjectName
|
|
|
+ projectInfo.TotalCancelNum = v.CancelNum
|
|
|
+ projectInfo.PendingCancelNum = v.CancelNum - num
|
|
|
+ projectInfo.ID = v.ID
|
|
|
+ outData.GroupBuyProject = append(outData.GroupBuyProject, projectInfo)
|
|
|
+ }
|
|
|
+
|
|
|
+ app.OK(c, outData, app.Success)
|
|
|
+}
|
|
|
+
|
|
|
+// 拼团核销
|
|
|
+func GroupBuyCancel(c *gin.Context) {
|
|
|
+ var inData models.GroupBuyCancelRequest
|
|
|
+ var payTrans shanghu.ClientActivePayTrans
|
|
|
+ var activeCancelLogList []shanghu.ActiveCancelLog
|
|
|
+
|
|
|
+ err := c.ShouldBindJSON(&inData)
|
|
|
+ if err != nil {
|
|
|
+ app.Error(c, 400, err, err.Error())
|
|
|
+ return
|
|
|
+ }
|
|
|
+
|
|
|
+ key := "GROU" + tools.MD5(inData.TradeNo+"zhangkun429@")
|
|
|
+ if inData.Key != key {
|
|
|
+ app.Error(c, 500, errors.New("数据错误"), "数据错误")
|
|
|
+ return
|
|
|
+ }
|
|
|
+
|
|
|
+ //查交易
|
|
|
+ payTrans.ThirdTradeNo = inData.TradeNo
|
|
|
+
|
|
|
+ transInfo, err := payTrans.GetPayTransByThirdTradeNo()
|
|
|
+ if err != nil {
|
|
|
+ app.Error(c, 500, err, err.Error())
|
|
|
+ return
|
|
|
+ }
|
|
|
+
|
|
|
+ //校验分账类型
|
|
|
+ //if transInfo.AccountStatus != shanghu.ClientActivePayTransAccountStatusUnSettle && transInfo.AccountStatus != shanghu.ClientActivePayTransAccountStatusSettleFail {
|
|
|
+ // app.Error(c, 500, errors.New("核销已完成"), "核销已完成")
|
|
|
+ // return
|
|
|
+ //}
|
|
|
+
|
|
|
+ // 校验支付类型
|
|
|
+ if transInfo.Status != shanghu.ClientActivePayTransStatusPaySuccess {
|
|
|
+ app.Error(c, 500, errors.New("未支付交易不准核销"), "未支付交易不准核销")
|
|
|
+ return
|
|
|
+ }
|
|
|
+
|
|
|
+ //查看核销次数
|
|
|
+ //是否可以核销,默认不可以核销,只要有一个可以核销就为true
|
|
|
+ isCancel := false
|
|
|
+ for _, v := range inData.GroupBuyProject {
|
|
|
+ var projectSql shanghu.MerchantActiveGroupByProject
|
|
|
+ var activeCancel shanghu.ActiveCancelLog
|
|
|
+
|
|
|
+ projectSql.ID = v.ID
|
|
|
+ projectInfo, err := projectSql.GetMerchantActiveGroupBuyProjectByID()
|
|
|
+ if err != nil {
|
|
|
+ app.Error(c, 500, err, err.Error())
|
|
|
+ return
|
|
|
+ }
|
|
|
+
|
|
|
+ cancelNum := activeCancel.GetActiveCancelNum()
|
|
|
+ if projectInfo.CancelNum >= cancelNum+v.CancelNum && v.CancelNum > 0 {
|
|
|
+ isCancel = true
|
|
|
+ for i := 0; i < projectInfo.CancelNum; i++ {
|
|
|
+ var activeCancelLogInfo shanghu.ActiveCancelLog
|
|
|
+ activeCancelLogInfo.ActiveConfigID = payTrans.ActiveConfigID
|
|
|
+ activeCancelLogInfo.ClientOpenID = payTrans.ClientOpenID
|
|
|
+ activeCancelLogInfo.MerchantOpenID = inData.OpenId
|
|
|
+ activeCancelLogInfo.GroupByProjectID = v.ID
|
|
|
+ activeCancelLogInfo.CreatedAt = time.Now()
|
|
|
+ activeCancelLogInfo.UpdatedAt = time.Now()
|
|
|
+
|
|
|
+ activeCancelLogList = append(activeCancelLogList, activeCancelLogInfo)
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
+ }
|
|
|
+
|
|
|
+ if !isCancel {
|
|
|
+ app.Error(c, 500, errors.New("核销次数不够"), "核销次数不够")
|
|
|
+ return
|
|
|
+ }
|
|
|
+
|
|
|
+ // 分账
|
|
|
+ if transInfo.AccountStatus != shanghu.ClientActivePayTransAccountStatusUnSettle && transInfo.AccountStatus != shanghu.ClientActivePayTransAccountStatusSettleFail {
|
|
|
+ //不需要分账
|
|
|
+ var activeCancel shanghu.ActiveCancelLog
|
|
|
+ err = activeCancel.TXActiveCancelLogCreate(activeCancelLogList)
|
|
|
+ if err != nil {
|
|
|
+ app.Error(c, 500, err, err.Error())
|
|
|
+ return
|
|
|
+ }
|
|
|
+ } else { // 需要分账
|
|
|
+ //校验是否被分过,分过后不再分账
|
|
|
+ var merchantAccountLog shanghu.MerchantAccountLog
|
|
|
+ merchantAccountLog.PayTransId = payTrans.ID
|
|
|
+ merchantAccountLog.TransType = shanghu.MerchantAccountLogTransTypeGroupBuy
|
|
|
+ num := merchantAccountLog.GetAccountLogNum()
|
|
|
+ if num > 0 { //交易已经分过账
|
|
|
+ app.Error(c, 500, errors.New("交易已分过账"), "交易已分过账")
|
|
|
+ return
|
|
|
+ }
|
|
|
+ //分账校验账号
|
|
|
+ var merchantAccount shanghu.MerchantAccount
|
|
|
+ merchantAccount.MerchantOpenID = payTrans.MerchantOpenID
|
|
|
+ merchantAccountInfo, err := merchantAccount.GetMerchantAccount()
|
|
|
+ if err != nil && err.Error() != "record not found" {
|
|
|
+ app.Error(c, 500, err, err.Error())
|
|
|
+ return
|
|
|
+ }
|
|
|
+ if merchantAccountInfo.ID == 0 { //需要创建新账号
|
|
|
+ merchantAccount.MerchantOpenID = payTrans.MerchantOpenID
|
|
|
+ merchantAccount.Version = 1
|
|
|
+ merchantAccount.CreatedAt = time.Now()
|
|
|
+ merchantAccount.UpdatedAt = time.Now()
|
|
|
+ _, err = merchantAccount.Create()
|
|
|
+ if err != nil {
|
|
|
+ app.Error(c, 500, err, err.Error())
|
|
|
+ return
|
|
|
+ }
|
|
|
+
|
|
|
+ }
|
|
|
+ if payTrans.InvitationCode != shanghu.YuanShiMa { //校验c端客户
|
|
|
+ var activeUser shanghu.ActiveUser
|
|
|
+ var clientAccount shanghu.ActiveClientAccount
|
|
|
+ activeUser.Code = payTrans.InvitationCode
|
|
|
+ activeUserInfo, err := activeUser.GetUserInfoByCode()
|
|
|
+ if err != nil {
|
|
|
+ app.Error(c, 500, err, err.Error())
|
|
|
+ return
|
|
|
+ }
|
|
|
+ clientAccount.ClientOpenID = activeUserInfo.OpenID
|
|
|
+ clientAccountInfo, err := clientAccount.GetMerchantAccount()
|
|
|
+ if err != nil && err.Error() != "record not found" {
|
|
|
+ app.Error(c, 500, err, err.Error())
|
|
|
+ return
|
|
|
+ }
|
|
|
+
|
|
|
+ if clientAccountInfo.ID == 0 { //需要创建新账号
|
|
|
+ clientAccount.ClientOpenID = activeUserInfo.OpenID
|
|
|
+ clientAccount.Version = 1
|
|
|
+ clientAccount.CreatedAt = time.Now()
|
|
|
+ clientAccount.UpdatedAt = time.Now()
|
|
|
+ _, err = clientAccount.Create()
|
|
|
+ if err != nil {
|
|
|
+ app.Error(c, 500, err, err.Error())
|
|
|
+ return
|
|
|
+ }
|
|
|
+
|
|
|
+ }
|
|
|
+
|
|
|
+ }
|
|
|
+
|
|
|
+ //分账 根据merchant-openid + activeUserInfo.openid 进行分账
|
|
|
+
|
|
|
+ }
|
|
|
+
|
|
|
+}
|