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

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