user.trans.create.go 2.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596
  1. package user
  2. import (
  3. "duoduo/models/mysql"
  4. "duoduo/models/user"
  5. "duoduo/tools"
  6. "duoduo/tools/app"
  7. "github.com/shopspring/decimal"
  8. "github.com/gin-gonic/gin"
  9. )
  10. func TransCreate(c *gin.Context) {
  11. var inData user.TransCreateInput
  12. var trans mysql.TransRecords
  13. var pid mysql.Pid
  14. var walletInfo mysql.Wallet
  15. err := c.ShouldBindJSON(&inData)
  16. if err != nil {
  17. app.Error(c, 400, err, err.Error())
  18. return
  19. }
  20. if inData.Amount.Cmp(decimal.NewFromFloat32(0)) <= 0 {
  21. app.Error(c, 400, err, "提现金额不能小于等于0")
  22. return
  23. }
  24. pid.OpenID = inData.OpenId
  25. pid.PidStatus = inData.PidStatus
  26. pidInfo, err := pid.Get()
  27. if err != nil {
  28. app.Error(c, 400, err, err.Error())
  29. return
  30. }
  31. walletInfo.Pid = pidInfo.Pid
  32. walletInfo.OpenID = inData.OpenId
  33. walletVal, err := walletInfo.GetWallet()
  34. if err != nil {
  35. app.Error(c, 400, err, err.Error())
  36. return
  37. }
  38. if walletVal.AvailableAmount.Cmp(inData.Amount) < 0 {
  39. app.Error(c, 400, err, "提现金额超长可提现金额")
  40. return
  41. }
  42. //只能申请一笔,一笔发完再申请第二笔
  43. trans.OpenID = inData.OpenId
  44. trans.TransStatus = 1 //申请提现
  45. transCount := trans.GetTransNum()
  46. if transCount != 0 {
  47. app.Error(c, 400, err, "已经申请过一笔提现,不能再次申请。")
  48. return
  49. }
  50. trans.PidStatus = inData.PidStatus
  51. trans.Amount = inData.Amount
  52. trans.Pid = pidInfo.Pid
  53. trans.CreateTime = tools.GetCurrntTimeStr()
  54. trans.UpdateTime = tools.GetCurrntTimeStr()
  55. _, err = trans.Create()
  56. if err != nil {
  57. app.Error(c, 400, err, err.Error())
  58. return
  59. }
  60. //重新计算可提现金额
  61. var orderAmount mysql.Order
  62. var wallet mysql.Wallet
  63. var trans2 mysql.TransRecords
  64. orderAmount.OpenId = inData.OpenId
  65. orderWallet, _ := orderAmount.GetAvailableAmount()
  66. //总金额减去提现金额
  67. trans2.OpenID = inData.OpenId
  68. trans2.Pid = pidInfo.Pid
  69. trans.PidStatus = inData.PidStatus //拼多多 订单
  70. transInfo, err := trans.GetTrans()
  71. if err != nil && err.Error() != "record not found" {
  72. app.Error(c, 400, err, err.Error())
  73. return
  74. }
  75. //更新钱包 钱包总和为 123级总和减去提现总额
  76. wallet.AvailableAmount = orderWallet.Amount.Add(orderWallet.Amount1.Add(orderWallet.Amount2)).Sub(transInfo.Amount)
  77. wallet.OpenID = inData.OpenId
  78. wallet.Pid = pidInfo.Pid
  79. wallet.UpdateAvailable()
  80. app.OK(c, nil, app.Success)
  81. }