package pdd import ( "duoduo/conf" "duoduo/models/mysql" "duoduo/models/pdd" "duoduo/tools" "duoduo/tools/app" "fmt" "github.com/gin-gonic/gin" "github.com/shopspring/decimal" "time" ) func PddDdkOrderListIncrementGet(c *gin.Context) { var inData pdd.PddDdkOrderListIncrementGetRequest var outData pdd.PddDdkOrderListIncrementGetResponse var pddErr pdd.ErrorPddResponse var sqlData mysql.Order var pag int confIni, err := conf.ConnIni() if err != nil { app.Error(c, 400, err, err.Error()) return } err = c.ShouldBindJSON(&inData) if err != nil { app.Error(c, 400, err, err.Error()) return } pag = 0 for { pag++ inData.ClientId = confIni.MustValue("pdd", "client_id") inData.Type = "pdd.ddk.order.list.increment.get" inData.Timestamp = fmt.Sprintf("%d", time.Now().Unix()) inData.DataType = "JSON" inData.Page = fmt.Sprintf("%d", pag) inData.PageSize = "50" startTm, _ := tools.GetTimeStamp(inData.StartUpdateTime) inData.StartUpdateTime = fmt.Sprintf("%d", startTm) endTm, _ := tools.GetTimeStamp(inData.EndUpdateTime) inData.EndUpdateTime = fmt.Sprintf("%d", endTm) inData.Sign = "sign" sign, err := DDKSign(inData) if err != nil { app.Error(c, 400, err, err.Error()) return } inData.Sign = sign val, err := PostDDk(inData, nil) if err != nil { app.Error(c, 400, err, err.Error()) return } err = tools.JsonUnmarshal(val, &pddErr) if err != nil { app.Error(c, 500, err, err.Error()) return } err = tools.JsonUnmarshal(val, &outData) if err != nil { app.Error(c, 500, nil, err.Error()) return } if pddErr.ErrorResponse.ErrorCode != 0 { app.Error(c, 500, nil, pddErr.ErrorResponse.SubMsg) return } //同步订单信息 for i := 0; i < len(outData.OrderListGetResponse.OrderList); i++ { var pid mysql.Pid //var order mysql.Order //var trans mysql.TransRecords var user mysql.User //var wallet mysql.Wallet sqlData.OrderID = outData.OrderListGetResponse.OrderList[i].OrderID sqlData.PID = outData.OrderListGetResponse.OrderList[i].PID sqlData.UpdateTime = tools.GetCurrntTimeStr() sqlData.OrderStatus = outData.OrderListGetResponse.OrderList[i].OrderStatus sqlData.GoodsName = outData.OrderListGetResponse.OrderList[i].GoodsName sqlData.GoodsThumbnailURL = outData.OrderListGetResponse.OrderList[i].GoodsThumbnailURL sqlData.OrderGroupSuccessTime = tools.TimeToStr(outData.OrderListGetResponse.OrderList[i].OrderGroupSuccessTime) sqlData.OrderStatusDesc = outData.OrderListGetResponse.OrderList[i].OrderStatusDesc sqlData.PromotionAmount = outData.OrderListGetResponse.OrderList[i].PromotionAmount sqlData.JSONData, _ = tools.JsonMarshal(&outData.OrderListGetResponse.OrderList[i]) sqlData.OrderCreateTime = tools.TimeToStr(outData.OrderListGetResponse.OrderList[i].OrderCreateTime) sqlData.OrderSn = outData.OrderListGetResponse.OrderList[i].OrderSn sqlData.Amount = decimal.NewFromInt(outData.OrderListGetResponse.OrderList[i].PromotionAmount).Mul(decimal.NewFromFloat(0.006)) sqlData.Amount1 = decimal.NewFromInt(outData.OrderListGetResponse.OrderList[i].PromotionAmount).Mul(decimal.NewFromFloat(0.001)) sqlData.Amount2 = decimal.NewFromInt(outData.OrderListGetResponse.OrderList[i].PromotionAmount).Mul(decimal.NewFromFloat(0.001)) sqlData.OrderAmount = decimal.NewFromInt(outData.OrderListGetResponse.OrderList[i].OrderAmount).Div(decimal.NewFromInt(100)) //根据pid pid.Pid = outData.OrderListGetResponse.OrderList[i].PID pidVal, err := pid.GetOpenId() if err != nil { continue } //根据openId 获取 openId1-2 user.OpenID = pidVal.OpenID userVal, err := user.Get() if err != nil { continue } sqlData.OpenId = user.OpenID sqlData.OpenId1 = userVal.OpenIdOne sqlData.OpenId2 = userVal.OpenIdTwo count := sqlData.GetNum() if count <= 0 { sqlData.CreateTime = tools.GetCurrntTimeStr() _, err = sqlData.Create() if err != nil { return } } else { _, err = sqlData.Update(sqlData.OrderID) if err != nil { return } } //统计钱包数据 //首先获取open_id //本人 err = UpdateWallet(user.OpenID) if err != nil { continue } if userVal.OpenIdOne != "" { err = UpdateWallet(userVal.OpenIdOne) if err != nil { continue } } if userVal.OpenIdTwo != "" { err = UpdateWallet(userVal.OpenIdTwo) if err != nil { continue } } } if outData.OrderListGetResponse.TotalCount < 50 { break } } app.OK(c, nil, app.Success) } func UpdateWallet(openId string) error { var order mysql.Order var wallet mysql.Wallet var trans mysql.TransRecords var pid mysql.Pid order.OpenId = openId //根据订单统计钱包数据 walletVal, err := order.GetAmountOpenId() if err != nil { return err } wallet.TotalAmount = walletVal.TotalAmount.Add(walletVal.TotalAmountOne).Add(walletVal.TotalAmountTwo) wallet.LatelyAmount = walletVal.LatelyAmount.Add(walletVal.LatelyAmountOne).Add(walletVal.LatelyAmountTwo) wallet.TodayAmount = walletVal.TodayAmount.Add(walletVal.TodayAmountOne).Add(walletVal.TodayAmountTwo) wallet.YesterdayAmount = walletVal.YesterdayAmount.Add(walletVal.YesterdayAmountOne).Add(walletVal.YesterdayAmountTwo) wallet.AvailableAmount = walletVal.AvailableAmount.Add(walletVal.AvailableAmountOne).Add(walletVal.AvailableAmountTwo) //本人金额计算 //walletVal.LatelyAmount = walletVal.LatelyAmount.Div(decimal.NewFromInt(100)).Mul(decimal.NewFromFloat(0.6)).Round(2) //walletVal.TodayAmount = walletVal.TodayAmount.Div(decimal.NewFromInt(100)).Mul(decimal.NewFromFloat(0.6)).Round(2) //walletVal.TotalAmount = walletVal.TotalAmount.Div(decimal.NewFromInt(100)).Mul(decimal.NewFromFloat(0.6)).Round(2) //walletVal.YesterdayAmount = walletVal.YesterdayAmount.Div(decimal.NewFromInt(100)).Mul(decimal.NewFromFloat(0.6)).Round(2) //walletVal.AvailableAmount = walletVal.AvailableAmount.Div(decimal.NewFromInt(100)).Mul(decimal.NewFromFloat(0.6)).Round(2) trans.TransStatus = 3 trans.OpenID = openId transVal, err := trans.GetAmount() if err != nil { return err } //已提现总金额 = 提现记录求和 wallet.WithdrawalAmount = transVal.Amount //可以提现金额 = 5求和-已体现金额 wallet.AvailableAmount = wallet.AvailableAmount.Sub(wallet.WithdrawalAmount).Round(2) pid.OpenID = openId pid.PidStatus = 1 pidVal, err := pid.Get() if err != nil { return err } //更新钱包 wallet.OpenID = openId wallet.Pid = pidVal.Pid wallet.UpdateTime = tools.GetCurrntTimeStr() _, err = wallet.UpdateAll() if err != nil { return err } return nil }