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

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214
  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.EndUpdateTime = "1626786000"
  41. //inData.StartUpdateTime = "1626739940"
  42. inData.Sign = "sign"
  43. sign, err := pdd2.DDKSign(inData)
  44. if err != nil {
  45. return
  46. }
  47. inData.Sign = sign
  48. val, err := pdd2.PostDDk(inData, nil)
  49. if err != nil {
  50. return
  51. }
  52. err = tools.JsonUnmarshal(val, &pddErr)
  53. if err != nil {
  54. return
  55. }
  56. err = tools.JsonUnmarshal(val, &outData)
  57. if err != nil {
  58. return
  59. }
  60. if pddErr.ErrorResponse.ErrorCode != 0 {
  61. return
  62. }
  63. //同步订单信息
  64. for i := 0; i < len(outData.OrderListGetResponse.OrderList); i++ {
  65. var pid mysql.Pid
  66. //var order mysql.Order
  67. //var trans mysql.TransRecords
  68. var user mysql.User
  69. //var wallet mysql.Wallet
  70. sqlData.OrderID = outData.OrderListGetResponse.OrderList[i].OrderID
  71. sqlData.PID = outData.OrderListGetResponse.OrderList[i].PID
  72. sqlData.UpdateTime = tools.GetCurrntTimeStr()
  73. sqlData.OrderStatus = outData.OrderListGetResponse.OrderList[i].OrderStatus
  74. sqlData.GoodsName = outData.OrderListGetResponse.OrderList[i].GoodsName
  75. sqlData.GoodsThumbnailURL = outData.OrderListGetResponse.OrderList[i].GoodsThumbnailURL
  76. sqlData.OrderGroupSuccessTime = tools.TimeToStr(outData.OrderListGetResponse.OrderList[i].OrderGroupSuccessTime)
  77. sqlData.OrderStatusDesc = outData.OrderListGetResponse.OrderList[i].OrderStatusDesc
  78. sqlData.PromotionAmount = outData.OrderListGetResponse.OrderList[i].PromotionAmount
  79. sqlData.JSONData, _ = tools.JsonMarshal(&outData.OrderListGetResponse.OrderList[i])
  80. sqlData.OrderCreateTime = tools.TimeToStr(outData.OrderListGetResponse.OrderList[i].OrderCreateTime)
  81. sqlData.OrderSn = outData.OrderListGetResponse.OrderList[i].OrderSn
  82. sqlData.Amount = decimal.NewFromInt(outData.OrderListGetResponse.OrderList[i].PromotionAmount).Mul(decimal.NewFromFloat(0.006))
  83. sqlData.Amount1 = decimal.NewFromInt(outData.OrderListGetResponse.OrderList[i].PromotionAmount).Mul(decimal.NewFromFloat(0.001))
  84. sqlData.Amount2 = decimal.NewFromInt(outData.OrderListGetResponse.OrderList[i].PromotionAmount).Mul(decimal.NewFromFloat(0.001))
  85. sqlData.OrderAmount = decimal.NewFromInt(outData.OrderListGetResponse.OrderList[i].OrderAmount).Div(decimal.NewFromInt(100))
  86. //根据pid
  87. pid.Pid = outData.OrderListGetResponse.OrderList[i].PID
  88. pidVal, err := pid.GetOpenId()
  89. if err != nil {
  90. continue
  91. }
  92. //根据openId 获取 openId1-2
  93. user.OpenID = pidVal.OpenID
  94. userVal, err := user.Get()
  95. if err != nil {
  96. continue
  97. }
  98. sqlData.OpenId = user.OpenID
  99. sqlData.OpenId1 = userVal.OpenIdOne
  100. sqlData.OpenId2 = userVal.OpenIdTwo
  101. count := sqlData.GetNum()
  102. if count <= 0 {
  103. sqlData.CreateTime = tools.GetCurrntTimeStr()
  104. _, err = sqlData.Create()
  105. if err != nil {
  106. return
  107. }
  108. } else {
  109. _, err = sqlData.Update(sqlData.OrderID)
  110. if err != nil {
  111. return
  112. }
  113. }
  114. //统计钱包数据
  115. //首先获取open_id
  116. //本人
  117. err = UpdateWallet(user.OpenID)
  118. if err != nil {
  119. continue
  120. }
  121. if userVal.OpenIdOne != "" {
  122. err = UpdateWallet(userVal.OpenIdOne)
  123. if err != nil {
  124. continue
  125. }
  126. }
  127. if userVal.OpenIdTwo != "" {
  128. err = UpdateWallet(userVal.OpenIdTwo)
  129. if err != nil {
  130. continue
  131. }
  132. }
  133. }
  134. if outData.OrderListGetResponse.TotalCount < 50 {
  135. break
  136. }
  137. }
  138. }
  139. func UpdateWallet(openId string) error {
  140. var order mysql.Order
  141. var wallet mysql.Wallet
  142. var trans mysql.TransRecords
  143. var pid mysql.Pid
  144. order.OpenId = openId
  145. //根据订单统计钱包数据
  146. walletVal, err := order.GetAmountOpenId()
  147. if err != nil {
  148. return err
  149. }
  150. wallet.TotalAmount = walletVal.TotalAmount.Add(walletVal.TotalAmountOne).Add(walletVal.TotalAmountTwo)
  151. wallet.LatelyAmount = walletVal.LatelyAmount.Add(walletVal.LatelyAmountOne).Add(walletVal.LatelyAmountTwo)
  152. wallet.TodayAmount = walletVal.TodayAmount.Add(walletVal.TodayAmountOne).Add(walletVal.TodayAmountTwo)
  153. wallet.YesterdayAmount = walletVal.YesterdayAmount.Add(walletVal.YesterdayAmountOne).Add(walletVal.YesterdayAmountTwo)
  154. wallet.AvailableAmount = walletVal.AvailableAmount.Add(walletVal.AvailableAmountOne).Add(walletVal.AvailableAmountTwo)
  155. //本人金额计算
  156. //walletVal.LatelyAmount = walletVal.LatelyAmount.Div(decimal.NewFromInt(100)).Mul(decimal.NewFromFloat(0.6)).Round(2)
  157. //walletVal.TodayAmount = walletVal.TodayAmount.Div(decimal.NewFromInt(100)).Mul(decimal.NewFromFloat(0.6)).Round(2)
  158. //walletVal.TotalAmount = walletVal.TotalAmount.Div(decimal.NewFromInt(100)).Mul(decimal.NewFromFloat(0.6)).Round(2)
  159. //walletVal.YesterdayAmount = walletVal.YesterdayAmount.Div(decimal.NewFromInt(100)).Mul(decimal.NewFromFloat(0.6)).Round(2)
  160. //walletVal.AvailableAmount = walletVal.AvailableAmount.Div(decimal.NewFromInt(100)).Mul(decimal.NewFromFloat(0.6)).Round(2)
  161. trans.TransStatus = 3
  162. trans.OpenID = openId
  163. transVal, err := trans.GetAmount()
  164. if err != nil {
  165. return err
  166. }
  167. //已提现总金额 = 提现记录求和
  168. wallet.WithdrawalAmount = transVal.Amount
  169. //可以提现金额 = 5求和-已体现金额
  170. wallet.AvailableAmount = wallet.AvailableAmount.Sub(wallet.WithdrawalAmount).Round(2)
  171. pid.OpenID = openId
  172. pid.PidStatus = 1
  173. pidVal, err := pid.Get()
  174. if err != nil {
  175. return err
  176. }
  177. //更新钱包
  178. wallet.OpenID = openId
  179. wallet.Pid = pidVal.Pid
  180. wallet.UpdateTime = tools.GetCurrntTimeStr()
  181. _, err = wallet.UpdateAll()
  182. if err != nil {
  183. return err
  184. }
  185. return nil
  186. }