user.trans.create.go 2.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109
  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. var user mysql.User
  16. err := c.ShouldBindJSON(&inData)
  17. if err != nil {
  18. app.Error(c, 400, err, err.Error())
  19. return
  20. }
  21. user.OpenID = inData.OpenId
  22. userInfo, err := user.Get()
  23. if err != nil {
  24. app.Error(c, 400, err, "提现失败请联系客服")
  25. return
  26. }
  27. if userInfo.AliPay == "" && userInfo.WxPay == "" {
  28. app.Error(c, 401, err, "请填写提款项目")
  29. return
  30. }
  31. if inData.Amount.Cmp(decimal.NewFromFloat32(0)) <= 0 {
  32. app.Error(c, 400, err, "提现金额不能小于等于0")
  33. return
  34. }
  35. pid.OpenID = inData.OpenId
  36. pid.PidStatus = inData.PidStatus
  37. pidInfo, err := pid.Get()
  38. if err != nil {
  39. app.Error(c, 400, err, err.Error())
  40. return
  41. }
  42. walletInfo.Pid = pidInfo.Pid
  43. walletInfo.OpenID = inData.OpenId
  44. walletVal, err := walletInfo.GetWallet()
  45. if err != nil {
  46. app.Error(c, 400, err, err.Error())
  47. return
  48. }
  49. if walletVal.AvailableAmount.Cmp(inData.Amount) < 0 {
  50. app.Error(c, 400, err, "提现金额超长可提现金额")
  51. return
  52. }
  53. //只能申请一笔,一笔发完再申请第二笔
  54. trans.OpenID = inData.OpenId
  55. trans.TransStatus = 1 //申请提现
  56. transCount := trans.GetTransNum()
  57. if transCount != 0 {
  58. app.Error(c, 400, err, "已经申请过一笔提现,不能再次申请。")
  59. return
  60. }
  61. trans.PidStatus = inData.PidStatus
  62. trans.Amount = inData.Amount
  63. trans.Pid = pidInfo.Pid
  64. trans.CreateTime = tools.GetCurrntTimeStr()
  65. trans.UpdateTime = tools.GetCurrntTimeStr()
  66. _, err = trans.Create()
  67. if err != nil {
  68. app.Error(c, 400, err, err.Error())
  69. return
  70. }
  71. //重新计算可提现金额
  72. var orderAmount mysql.Order
  73. var wallet mysql.Wallet
  74. var trans2 mysql.TransRecords
  75. orderAmount.OpenId = inData.OpenId
  76. orderWallet, _ := orderAmount.GetAvailableAmount()
  77. //总金额减去提现金额
  78. trans2.OpenID = inData.OpenId
  79. trans2.Pid = pidInfo.Pid
  80. trans.PidStatus = inData.PidStatus //拼多多 订单
  81. transInfo, err := trans.GetTrans()
  82. if err != nil && err.Error() != "record not found" {
  83. app.Error(c, 400, err, err.Error())
  84. return
  85. }
  86. //更新钱包 钱包总和为 123级总和减去提现总额
  87. wallet.AvailableAmount = orderWallet.Amount.Add(orderWallet.Amount1.Add(orderWallet.Amount2)).Sub(transInfo.Amount)
  88. wallet.OpenID = inData.OpenId
  89. wallet.Pid = pidInfo.Pid
  90. wallet.UpdateAvailable()
  91. app.OK(c, nil, app.Success)
  92. }