cash.out.go 3.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133
  1. package report
  2. import (
  3. "context"
  4. apiShanghu "duoduo/apis/shanghu"
  5. "duoduo/models/shanghu"
  6. "encoding/json"
  7. "fmt"
  8. "github.com/go-pay/gopay"
  9. "time"
  10. )
  11. func CashOut() {
  12. for true {
  13. var cashOut shanghu.CashOut
  14. bm := make(gopay.BodyMap)
  15. cashOut.Status = 1 // 提现中
  16. cashOutInfo, err := cashOut.GetCashOutByStatus()
  17. if err != nil {
  18. fmt.Println("GetCashOutByStatus err ", err.Error())
  19. break
  20. }
  21. wechatV3, err := apiShanghu.NewWechatServiceV3("")
  22. if err != nil {
  23. break
  24. }
  25. bm.Set("need_query_detail", false)
  26. transferBatch, err := wechatV3.V3TransferMerchantQuery(context.Background(), cashOutInfo.PartnerTradeNo, bm)
  27. if err != nil {
  28. break
  29. }
  30. by, _ := json.Marshal(transferBatch)
  31. fmt.Println(string(by))
  32. if transferBatch.Code != 0 {
  33. break
  34. }
  35. if transferBatch.Response.TransferBatch.FailNum == 0 && transferBatch.Response.TransferBatch.BatchStatus == "FINISHED" { //转账成功
  36. cashOut.PartnerTradeNo = transferBatch.Response.TransferBatch.OutBatchNo
  37. cashOut.Status = 3
  38. err = cashOut.UpdateCashOutStatus()
  39. if err != nil {
  40. break
  41. }
  42. } else if transferBatch.Response.TransferBatch.FailNum > 0 { //失败
  43. cashOut.PartnerTradeNo = transferBatch.Response.TransferBatch.OutBatchNo
  44. cashOut.Status = 2
  45. err = cashOut.UpdateCashOutStatus()
  46. if err != nil {
  47. break
  48. }
  49. } else if transferBatch.Response.TransferBatch.BatchStatus == "CLOSE" {
  50. cashOut.PartnerTradeNo = transferBatch.Response.TransferBatch.OutBatchNo
  51. cashOut.Status = 2
  52. cashOut.FailRes = transferBatch.Response.TransferBatch.CloseReason
  53. err = cashOut.UpdateCashOutStatusClose()
  54. if err != nil {
  55. break
  56. }
  57. } else {
  58. time.Sleep(time.Second * 1)
  59. continue
  60. }
  61. }
  62. }
  63. func CashOutAccount() {
  64. for true {
  65. var cashOut shanghu.CashOut
  66. cashOut.AccountStatus = 0 //未分账
  67. cashOut.Status = 3 //钱已到账为扣减金额
  68. cashOutInfo, err := cashOut.GetCashOutByAccount()
  69. if err != nil {
  70. break
  71. }
  72. cashOut.AccountStatus = 3 //分账中
  73. cashOut.ID = cashOutInfo.ID
  74. err = cashOut.UpdateCashOutAccountStatus()
  75. if err != nil {
  76. break
  77. }
  78. if cashOutInfo.AppID == "wxcf8e7dbe7d7e1ebd" { //b端 云联通商户卡
  79. var account shanghu.ClientPayTrans
  80. err = account.SettleSubMerchant(cashOutInfo.Amount, cashOutInfo.OpenID, cashOutInfo.ID)
  81. if err != nil {
  82. cashOut.AccountStatus = 2 //分账失败
  83. cashOut.AccountFailRes = err.Error()
  84. cashOut.ID = cashOutInfo.ID
  85. cashOut.UpdateCashOutAccountStatus()
  86. continue
  87. }
  88. } else if cashOutInfo.AppID == "wx8595c589dd736486" { //c端 云联通玩乐卡
  89. var account shanghu.ClientPayTrans
  90. err = account.SettleSubClient(cashOutInfo.Amount, cashOutInfo.OpenID, cashOutInfo.ID)
  91. if err != nil {
  92. cashOut.AccountStatus = 2 //分账失败
  93. cashOut.AccountFailRes = err.Error()
  94. cashOut.ID = cashOutInfo.ID
  95. cashOut.UpdateCashOutAccountStatus()
  96. continue
  97. }
  98. //给
  99. var client shanghu.MerchantClientUser
  100. client.Code = "7jb6"
  101. clientInfo, _ := client.GetUserInfoByCode()
  102. if clientInfo.ClientOpenID == account.ClientOpenID { //超级管理员钱已经有了不需要收服务费 暂时无效
  103. continue
  104. } else { //服务费加到超级管理员账户
  105. var accountClient shanghu.ClientPayTrans
  106. accountClient.SettleAddCashOutFee(cashOutInfo.Fee, clientInfo.ClientOpenID, cashOutInfo.ID)
  107. }
  108. } else if cashOutInfo.AppID == "wx8595c589dd736486" {
  109. } else {
  110. continue
  111. }
  112. }
  113. }