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

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