package svc import ( "applet/app/db" "applet/app/db/model" offical "applet/app/db/official" "applet/app/utils" "code.fnuoos.com/go_rely_warehouse/zyos_go_third_party_api.git/kuaishou" "code.fnuoos.com/go_rely_warehouse/zyos_go_third_party_api.git/md" "encoding/json" "fmt" "github.com/tidwall/gjson" "strings" "time" ) func KuaishouOrder() { pvdTimeKey := "kuaishou_time" // 获得最后时间 latest := offical.SysCfgByKey(pvdTimeKey) if latest == nil { offical.DbsSysCfgInserts(pvdTimeKey, time.Now().String()) latest = offical.SysCfgByKey(pvdTimeKey) } // 所有时间都是在操作秒数 now := time.Now().Unix() strs := strings.Split(latest.V, ":") timeStr := latest.V if len(strs) == 3 { timeStr = strs[0] + ":" + strs[1] + ":00" } fmt.Println(timeStr) past := utils.TimeParseStd(timeStr).Unix() // 如果上次记录超过30天或者 过去时间大于当前时间戳, 把时间设置为此前20分钟 if past < now-180*86400 || past > now { past = now } var ( beginTime int64 = 0 endTime int64 = 0 pageNo int = 1 pageSize int = 50 nextPositionIndex string = "" ) //怕时间不是走最新的 leave := now - past if leave > 500 { leave = 0 } past = past + leave beginTime = past - 300 endTime = past if endTime > now { endTime = now } for { count := 0 var positionIndex = "" if pageNo == 1 { nextPositionIndex = "0" } if nextPositionIndex != "" { count, positionIndex = OrdersKuaishouGet(nextPositionIndex, pageSize, beginTime, endTime, "update", 0) } if count == 0 { nextPositionIndex = "" goto ChkArg } // 判断是否分页已经全部取完了 if count <= pageSize { nextPositionIndex = positionIndex pageNo++ fmt.Println("========下一页========" + utils.IntToStr(pageNo)) count = 0 continue } ChkArg: nextPositionIndex = "" // 查询完后重置时间, 最后查询时间 if endTime < now { pageNo = 1 offical.DbsSysCfgUpdate(pvdTimeKey, utils.TimeToStr(endTime)) beginTime = endTime endTime = endTime + 300 if endTime > now { endTime = now } count = 0 continue } count = 0 break } } func OrdersKuaishouGet(nextPositionIndex string, pageSize int, sTime, eTime int64, timeType string, pvd int) (int, string) { arg := map[string]interface{}{ "cpsOrderStatus": 0, "pageSize": pageSize, "sortType": 2, //排序类型 [1:按指定查询类型降序] [2:按指定查询类型升序] "queryType": 2, //查询类型 [1:按分销订单创建时间查询] [2:按分销订单更新时间查询] "beginTime": time.Unix(sTime, 0).Unix() * 1000, "endTime": time.Unix(eTime, 0).Unix() * 1000, "pcursor": nextPositionIndex, } param, kuaishouData := GetKuaishouKey() param["param"] = utils.SerializeStr(arg) data, err := kuaishou.GetKuishouCpsOrder(kuaishouData["sign_secret"], param) goods := gjson.Get(data, "data.orderList").String() newPcursor := gjson.Get(data, "data.pcursor").String() if goods == "" || err != nil { return 0, "" } var list = make([]md.KuaishouCpsOrder, 0) err = json.Unmarshal([]byte(goods), &list) if err != nil { return 0, "" } var kuaishouState = map[int]string{ 30: "订单付款", 50: "订单完成", 80: "订单失效", 60: "订单结算", } for _, v := range list { var res = model.GuideOrder{ PvdParentOid: utils.IntToStr(v.Oid), Pvd: "kuaishou", Status: kuaishouState[v.CpsOrderStatus], CreateTime: v.OrderCreateTime / 1000, } if v.SettlementSuccessTime > 0 { res.PlatformSettleTime = int(v.SettlementSuccessTime / 1000) } for _, v1 := range v.CpsKwaimoneyOrderProductView { resNew := res if v1.CpsType == 3 { resNew.Pvd = "kuaishou_live" } if strings.Contains(v1.Comments, "official_") == false { continue } v1.Comments = strings.ReplaceAll(v1.Comments, "official_", "") ex := strings.Split(v1.Comments, "_") if len(ex) < 3 { continue } orderType := 0 if ex[0] == "s" { orderType = 1 } // 判断免单 if ex[0] == "f" { orderType = 2 } if ex[0] == "cloud" { orderType = 10 } if ex[0] == "sef" { orderType = 11 } if ex[0] == "shareSeFree" { orderType = 12 } if ex[0] == "moref" { orderType = 13 } taskType := "" if utils.InArr(ex[0], []string{"happy_orchard"}) { orderType = 1 taskType = ex[0] } resNew.TaskType = taskType resNew.Oid = utils.StrToInt64(utils.OrderUUID(utils.StrToInt(ex[1]))) resNew.PvdOid = utils.IntToStr(v1.Oid) resNew.Uid = utils.StrToInt(ex[2]) resNew.StationUid = utils.StrToInt(ex[1]) resNew.UpdateTime = int(time.Now().Unix()) resNew.Commission = utils.Float64ToStr(float64(v1.EstimatedIncome) / 100) resNew.RealCommission = utils.Float64ToStr(float64(v1.EstimatedIncome) / 100) resNew.Title = v1.ItemTitle resNew.Img = v1.ItemPicUrl resNew.Gid = utils.IntToStr(v1.ItemId) resNew.IsShare = orderType resNew.Payment = utils.Float64ToStr(float64(v1.PaymentFee) / 100) one := db.GetGuideOrderByOne(resNew.PvdOid, utils.IntToStr(resNew.Uid), resNew.Pvd) if one == nil { insertOne, err := db.ZhimengDb.InsertOne(&resNew) fmt.Println(insertOne) fmt.Println(err) } else { resNew.SettleTime = one.SettleTime if one.PlatformSettleTime > 0 { resNew.PlatformSettleTime = one.PlatformSettleTime } db.ZhimengDb.Where("id=?", one.Id).AllCols().Update(&resNew) } } } return len(list), newPcursor } func GetKuaishouKey() (map[string]string, map[string]string) { kuaishouData := CommKuaishou() param := map[string]string{ "appkey": kuaishouData["appkey"], "access_token": kuaishouData["token"], } return param, kuaishouData } func CommKuaishou() map[string]string { res := OfficialCommKuaishou() return res } func OfficialCommKuaishou() map[string]string { kuaishouAppkey := offical.MasterListCfgGetOneData("0", "kuaishou_kfx_appkey") kuaishouAppSecret := offical.MasterListCfgGetOneData("0", "kuaishou_kfx_app_secret") kuaishouSignSecret := offical.MasterListCfgGetOneData("0", "kuaishou_kfx_sign_secret") authType := "0" kuaishouToken := db.MasterListCfgGetOneData("0", "kuaishou_official_access_token") kuaishouPid := offical.MasterListCfgGetOneData("0", "kuaishou_official_pid") res := map[string]string{ "pid": kuaishouPid, "authType": authType, "appkey": kuaishouAppkey, "token": kuaishouToken, "app_secret": kuaishouAppSecret, "sign_secret": kuaishouSignSecret, } return res }