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

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