|
@@ -0,0 +1,96 @@
|
|
|
+package user
|
|
|
+
|
|
|
+import (
|
|
|
+ "duoduo/models/mysql"
|
|
|
+ "duoduo/models/user"
|
|
|
+ "duoduo/tools"
|
|
|
+ "duoduo/tools/app"
|
|
|
+
|
|
|
+ "github.com/shopspring/decimal"
|
|
|
+
|
|
|
+ "github.com/gin-gonic/gin"
|
|
|
+)
|
|
|
+
|
|
|
+func TransCreate(c *gin.Context) {
|
|
|
+ var inData user.TransCreateInput
|
|
|
+ var trans mysql.TransRecords
|
|
|
+ var pid mysql.Pid
|
|
|
+ var walletInfo mysql.Wallet
|
|
|
+
|
|
|
+ err := c.ShouldBindJSON(&inData)
|
|
|
+ if err != nil {
|
|
|
+ app.Error(c, 400, err, err.Error())
|
|
|
+ return
|
|
|
+ }
|
|
|
+
|
|
|
+ if inData.Amount.Cmp(decimal.NewFromFloat32(0)) <= 0 {
|
|
|
+ app.Error(c, 400, err, "提现金额不能小于等于0")
|
|
|
+ return
|
|
|
+ }
|
|
|
+
|
|
|
+ pid.OpenID = inData.OpenId
|
|
|
+ pid.PidStatus = inData.PidStatus
|
|
|
+ pidInfo, err := pid.Get()
|
|
|
+ if err != nil {
|
|
|
+ app.Error(c, 400, err, err.Error())
|
|
|
+ return
|
|
|
+ }
|
|
|
+
|
|
|
+ walletInfo.Pid = pidInfo.Pid
|
|
|
+ walletInfo.OpenID = inData.OpenId
|
|
|
+ walletVal, err := walletInfo.GetWallet()
|
|
|
+ if err != nil {
|
|
|
+ app.Error(c, 400, err, err.Error())
|
|
|
+ return
|
|
|
+ }
|
|
|
+
|
|
|
+ if walletVal.AvailableAmount.Cmp(inData.Amount) < 0 {
|
|
|
+ app.Error(c, 400, err, "提现金额超长可提现金额")
|
|
|
+ return
|
|
|
+ }
|
|
|
+
|
|
|
+
|
|
|
+ trans.OpenID = inData.OpenId
|
|
|
+ trans.TransStatus = 1
|
|
|
+
|
|
|
+ transCount := trans.GetTransNum()
|
|
|
+ if transCount != 0 {
|
|
|
+ app.Error(c, 400, err, "已经申请过一笔提现,不能再次申请。")
|
|
|
+ return
|
|
|
+ }
|
|
|
+ trans.PidStatus = inData.PidStatus
|
|
|
+ trans.Amount = inData.Amount
|
|
|
+ trans.Pid = pidInfo.Pid
|
|
|
+ trans.CreateTime = tools.GetCurrntTimeStr()
|
|
|
+ trans.UpdateTime = tools.GetCurrntTimeStr()
|
|
|
+ _, err = trans.Create()
|
|
|
+ if err != nil {
|
|
|
+ app.Error(c, 400, err, err.Error())
|
|
|
+ return
|
|
|
+ }
|
|
|
+
|
|
|
+ var orderAmount mysql.Order
|
|
|
+ var wallet mysql.Wallet
|
|
|
+ var trans2 mysql.TransRecords
|
|
|
+ orderAmount.OpenId = inData.OpenId
|
|
|
+ orderWallet, _ := orderAmount.GetAvailableAmount()
|
|
|
+
|
|
|
+ trans2.OpenID = inData.OpenId
|
|
|
+ trans2.Pid = pidInfo.Pid
|
|
|
+ trans.PidStatus = inData.PidStatus
|
|
|
+
|
|
|
+ transInfo, err := trans.GetTrans()
|
|
|
+ if err != nil && err.Error() != "record not found" {
|
|
|
+ app.Error(c, 400, err, err.Error())
|
|
|
+ return
|
|
|
+ }
|
|
|
+
|
|
|
+
|
|
|
+ wallet.AvailableAmount = orderWallet.Amount.Add(orderWallet.Amount1.Add(orderWallet.Amount2)).Sub(transInfo.Amount)
|
|
|
+ wallet.OpenID = inData.OpenId
|
|
|
+ wallet.Pid = pidInfo.Pid
|
|
|
+ wallet.UpdateAvailable()
|
|
|
+
|
|
|
+ app.OK(c, nil, app.Success)
|
|
|
+
|
|
|
+}
|