shang.hu.ka.go 1.5 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758
  1. package report
  2. import (
  3. "duoduo/models/shanghu"
  4. "github.com/shopspring/decimal"
  5. "time"
  6. )
  7. // C端分账
  8. // 分账逻辑:
  9. // 1.获取待分账、分账失败的数据
  10. // 2.根据商户卡id 将 90%分给商家,剩下的 10% 分给用户
  11. // 3.一条一条的处理,防止处理数据太多导致重复重复分账 查到数据里面修改成分账中
  12. func ClientAccount() {
  13. //
  14. for true {
  15. //查询订单信息
  16. var account shanghu.ClientPayTrans
  17. account.AccountStatus = 1 //未分账
  18. account.Status = 2 //支付成功
  19. clientTrans, err := account.GetPayTransByStatus()
  20. if err != nil {
  21. break
  22. }
  23. data := make(map[string]interface{})
  24. data["account_status"] = 3 //分账中
  25. data["updated_at"] = time.Now()
  26. err = clientTrans.UpdateById(data)
  27. if err != nil {
  28. break
  29. }
  30. //查询卡信息
  31. var cardInfo shanghu.MerchantCard
  32. cardInfo.ID = clientTrans.MerchantCardID
  33. merchantCard, err := cardInfo.GetMerchantCard()
  34. if err != nil {
  35. dataErr := make(map[string]interface{})
  36. dataErr["account_status"] = 2 //分账失败
  37. dataErr["account_err_log"] = err.Error() //分账失败日志
  38. dataErr["updated_at"] = time.Now()
  39. err = clientTrans.UpdateById(dataErr)
  40. if err != nil {
  41. break
  42. }
  43. continue
  44. }
  45. //分账
  46. //按比例商户一部分,分销一部分
  47. //计算金额
  48. clientAmount := account.Amount.Mul(decimal.NewFromInt(merchantCard.RebateRate)).Div(decimal.NewFromInt(100)).Round(2)
  49. //merchantAmount := account.Amount.Sub(clientAmount).Round(2)
  50. account.Amount.Sub(clientAmount).Round(2)
  51. }
  52. }