pdd.ddk.order.list.increment.get.go 4.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154
  1. package report
  2. import (
  3. pdd2 "duoduo/apis/pdd"
  4. "duoduo/conf"
  5. "duoduo/models/mysql"
  6. "duoduo/models/pdd"
  7. "duoduo/tools"
  8. "fmt"
  9. "github.com/shopspring/decimal"
  10. "time"
  11. )
  12. //1 分钟计算一次?
  13. //2 分钟计算一次
  14. //创建订单的时候就把他算好 根据状态进行累计加减 每天统计一次,
  15. func OrderList() {
  16. go DdkOrder()
  17. }
  18. func DdkOrder() {
  19. var inData pdd.PddDdkOrderListIncrementGetRequest
  20. var outData pdd.PddDdkOrderListIncrementGetResponse
  21. var pddErr pdd.ErrorPddResponse
  22. var sqlData mysql.Order
  23. var pag int
  24. confIni, err := conf.ConnIni()
  25. if err != nil {
  26. return
  27. }
  28. pag = 0
  29. for {
  30. pag++
  31. inData.ClientId = confIni.MustValue("pdd", "client_id")
  32. inData.Type = "pdd.ddk.order.list.increment.get"
  33. inData.Timestamp = fmt.Sprintf("%d", time.Now().Unix())
  34. inData.DataType = "JSON"
  35. inData.Page = fmt.Sprintf("%d", pag)
  36. inData.PageSize = "50"
  37. timeInt := time.Now().Unix()
  38. inData.EndUpdateTime = fmt.Sprintf("%d", timeInt)
  39. inData.StartUpdateTime = fmt.Sprintf("%d", timeInt-60)
  40. inData.Sign = "sign"
  41. sign, err := pdd2.DDKSign(inData)
  42. if err != nil {
  43. return
  44. }
  45. inData.Sign = sign
  46. val, err := pdd2.PostDDk(inData, nil)
  47. if err != nil {
  48. return
  49. }
  50. err = tools.JsonUnmarshal(val, &pddErr)
  51. if err != nil {
  52. return
  53. }
  54. err = tools.JsonUnmarshal(val, &outData)
  55. if err != nil {
  56. return
  57. }
  58. if pddErr.ErrorResponse.ErrorCode != 0 {
  59. return
  60. }
  61. //同步订单信息
  62. for i := 0; i < len(outData.OrderListGetResponse.OrderList); i++ {
  63. var pid mysql.Pid
  64. var order mysql.Order
  65. var trans mysql.TransRecords
  66. sqlData.OrderID = outData.OrderListGetResponse.OrderList[i].OrderID
  67. sqlData.PID = outData.OrderListGetResponse.OrderList[i].PID
  68. sqlData.UpdateTime = tools.GetCurrntTimeStr()
  69. sqlData.OrderStatus = outData.OrderListGetResponse.OrderList[i].OrderStatus
  70. sqlData.GoodsName = outData.OrderListGetResponse.OrderList[i].GoodsName
  71. sqlData.GoodsThumbnailURL = outData.OrderListGetResponse.OrderList[i].GoodsThumbnailURL
  72. sqlData.OrderGroupSuccessTime = tools.TimeToStr(outData.OrderListGetResponse.OrderList[i].OrderGroupSuccessTime)
  73. sqlData.OrderStatusDesc = outData.OrderListGetResponse.OrderList[i].OrderStatusDesc
  74. sqlData.PromotionAmount = outData.OrderListGetResponse.OrderList[i].PromotionAmount
  75. sqlData.JSONData, _ = tools.JsonMarshal(&outData.OrderListGetResponse.OrderList[i])
  76. sqlData.OrderCreateTime = tools.TimeToStr(outData.OrderListGetResponse.OrderList[i].OrderCreateTime)
  77. sqlData.OrderSn = outData.OrderListGetResponse.OrderList[i].OrderSn
  78. sqlData.Amount = decimal.NewFromInt(outData.OrderListGetResponse.OrderList[i].PromotionAmount).Mul(decimal.NewFromFloat(0.006))
  79. sqlData.Amount1 = decimal.NewFromInt(outData.OrderListGetResponse.OrderList[i].PromotionAmount).Mul(decimal.NewFromFloat(0.001))
  80. sqlData.Amount1 = decimal.NewFromInt(outData.OrderListGetResponse.OrderList[i].PromotionAmount).Mul(decimal.NewFromFloat(0.001))
  81. sqlData.OrderAmount = decimal.NewFromInt(outData.OrderListGetResponse.OrderList[i].OrderAmount).Div(decimal.NewFromInt(100))
  82. count := sqlData.GetNum()
  83. if count <= 0 {
  84. sqlData.CreateTime = tools.GetCurrntTimeStr()
  85. _, err = sqlData.Create()
  86. if err != nil {
  87. return
  88. }
  89. } else {
  90. _, err = sqlData.Update(sqlData.OrderID)
  91. if err != nil {
  92. return
  93. }
  94. }
  95. //统计钱包数据
  96. //首先获取open_id
  97. pid.Pid = outData.OrderListGetResponse.OrderList[i].PID
  98. pidVal, err := pid.GetOpenId()
  99. if err != nil {
  100. continue
  101. }
  102. order.PID = outData.OrderListGetResponse.OrderList[i].PID
  103. //统计钱包数据
  104. walletVal, err := order.GetAmount()
  105. if err != nil {
  106. continue
  107. }
  108. walletVal.LatelyAmount = walletVal.LatelyAmount.Div(decimal.NewFromInt(100)).Mul(decimal.NewFromFloat(0.6)).Round(2)
  109. walletVal.TodayAmount = walletVal.TodayAmount.Div(decimal.NewFromInt(100)).Mul(decimal.NewFromFloat(0.6)).Round(2)
  110. walletVal.TotalAmount = walletVal.TotalAmount.Div(decimal.NewFromInt(100)).Mul(decimal.NewFromFloat(0.6)).Round(2)
  111. walletVal.YesterdayAmount = walletVal.YesterdayAmount.Div(decimal.NewFromInt(100)).Mul(decimal.NewFromFloat(0.6)).Round(2)
  112. walletVal.AvailableAmount = walletVal.AvailableAmount.Div(decimal.NewFromInt(100)).Mul(decimal.NewFromFloat(0.6)).Round(2)
  113. trans.TransStatus = 3
  114. trans.OpenID = pidVal.OpenID
  115. transVal, err := trans.GetAmount()
  116. if err != nil {
  117. continue
  118. }
  119. walletVal.WithdrawalAmount = transVal.Amount.Div(decimal.NewFromInt(100)).Mul(decimal.NewFromFloat(0.6)).Round(2)
  120. walletVal.AvailableAmount = walletVal.AvailableAmount.Sub(walletVal.WithdrawalAmount).Mul(decimal.NewFromFloat(0.6)).Round(2)
  121. //更新钱包
  122. walletVal.OpenID = pidVal.OpenID
  123. walletVal.Pid = outData.OrderListGetResponse.OrderList[i].PID
  124. walletVal.UpdateTime = tools.GetCurrntTimeStr()
  125. _, err = walletVal.UpdateAll()
  126. if err != nil {
  127. continue
  128. }
  129. }
  130. if outData.OrderListGetResponse.TotalCount < 50 {
  131. break
  132. }
  133. }
  134. }