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

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153
  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.005))
  79. sqlData.Amount1 = decimal.NewFromInt(outData.OrderListGetResponse.OrderList[i].PromotionAmount).Mul(decimal.NewFromFloat(0.0015))
  80. sqlData.Amount1 = decimal.NewFromInt(outData.OrderListGetResponse.OrderList[i].PromotionAmount).Mul(decimal.NewFromFloat(0.001))
  81. count := sqlData.GetNum()
  82. if count <= 0 {
  83. sqlData.CreateTime = tools.GetCurrntTimeStr()
  84. _, err = sqlData.Create()
  85. if err != nil {
  86. return
  87. }
  88. } else {
  89. _, err = sqlData.Update(sqlData.OrderID)
  90. if err != nil {
  91. return
  92. }
  93. }
  94. //统计钱包数据
  95. //首先获取open_id
  96. pid.Pid = outData.OrderListGetResponse.OrderList[i].PID
  97. pidVal, err := pid.GetOpenId()
  98. if err != nil {
  99. continue
  100. }
  101. order.PID = outData.OrderListGetResponse.OrderList[i].PID
  102. //统计钱包数据
  103. walletVal, err := order.GetAmount()
  104. if err != nil {
  105. continue
  106. }
  107. walletVal.LatelyAmount = walletVal.LatelyAmount.Div(decimal.NewFromInt(100)).Mul(decimal.NewFromFloat(0.5))
  108. walletVal.TodayAmount = walletVal.TodayAmount.Div(decimal.NewFromInt(100)).Mul(decimal.NewFromFloat(0.5))
  109. walletVal.TotalAmount = walletVal.TotalAmount.Div(decimal.NewFromInt(100)).Mul(decimal.NewFromFloat(0.5))
  110. walletVal.YesterdayAmount = walletVal.YesterdayAmount.Div(decimal.NewFromInt(100)).Mul(decimal.NewFromFloat(0.5))
  111. walletVal.AvailableAmount = walletVal.AvailableAmount.Div(decimal.NewFromInt(100)).Mul(decimal.NewFromFloat(0.5))
  112. trans.TransStatus = 3
  113. trans.OpenID = pidVal.OpenID
  114. transVal, err := trans.GetAmount()
  115. if err != nil {
  116. continue
  117. }
  118. walletVal.WithdrawalAmount = transVal.Amount.Div(decimal.NewFromInt(100)).Mul(decimal.NewFromFloat(0.5))
  119. walletVal.AvailableAmount = walletVal.AvailableAmount.Sub(walletVal.WithdrawalAmount).Mul(decimal.NewFromFloat(0.5))
  120. //更新钱包
  121. walletVal.OpenID = pidVal.OpenID
  122. walletVal.Pid = outData.OrderListGetResponse.OrderList[i].PID
  123. walletVal.UpdateTime = tools.GetCurrntTimeStr()
  124. _, err = walletVal.UpdateAll()
  125. if err != nil {
  126. continue
  127. }
  128. }
  129. if outData.OrderListGetResponse.TotalCount < 50 {
  130. break
  131. }
  132. }
  133. }