@@ -23,4 +23,5 @@ type GuideOrder struct { | |||||
Ext string `json:"ext" xorm:"VARCHAR(3000)"` | Ext string `json:"ext" xorm:"VARCHAR(3000)"` | ||||
Gid string `json:"gid" xorm:"VARCHAR(255)"` | Gid string `json:"gid" xorm:"VARCHAR(255)"` | ||||
TeamType string `json:"team_type" xorm:"VARCHAR(255)"` | TeamType string `json:"team_type" xorm:"VARCHAR(255)"` | ||||
TaskType string `json:"task_type" xorm:"VARCHAR(255)"` | |||||
} | } |
@@ -19,6 +19,7 @@ func GuideOrderList(c *gin.Context) { | |||||
"csjp_live": "穿山甲抖音直播商品", | "csjp_live": "穿山甲抖音直播商品", | ||||
"kuaishou": "快手", | "kuaishou": "快手", | ||||
"kuaishou_live": "快手直播商品", | "kuaishou_live": "快手直播商品", | ||||
"meituan": "美团", | |||||
} | } | ||||
data, total := platform.GuideOrderList(c, args) | data, total := platform.GuideOrderList(c, args) | ||||
@@ -0,0 +1,27 @@ | |||||
package md | |||||
type MeituanOrder struct { | |||||
BusinessLine int `json:"businessLine"` | |||||
OrderId string `json:"orderId"` | |||||
PayTime int `json:"payTime"` | |||||
PayPrice string `json:"payPrice"` | |||||
UpdateTime int `json:"updateTime"` | |||||
CommissionRate string `json:"commissionRate"` | |||||
Profit string `json:"profit"` | |||||
CpaProfit string `json:"cpaProfit"` | |||||
Sid string `json:"sid"` | |||||
ProductId string `json:"productId"` | |||||
ProductName string `json:"productName"` | |||||
OrderDetail interface{} `json:"orderDetail"` | |||||
RefundPrice interface{} `json:"refundPrice"` | |||||
RefundTime string `json:"refundTime"` | |||||
RefundProfit string `json:"refundProfit"` | |||||
CpaRefundProfit string `json:"cpaRefundProfit"` | |||||
Status string `json:"status"` | |||||
TradeType int `json:"tradeType"` | |||||
ActId int `json:"actId"` | |||||
Appkey string `json:"appkey"` | |||||
SkuCount interface{} `json:"skuCount"` | |||||
Platform int `json:"platform"` | |||||
CityName interface{} `json:"cityName"` | |||||
} |
@@ -18,6 +18,7 @@ func GuideOrderList(c *gin.Context, args map[string]string) ([]map[string]string | |||||
"csjp_live": "穿山甲抖音直播商品", | "csjp_live": "穿山甲抖音直播商品", | ||||
"kuaishou": "快手", | "kuaishou": "快手", | ||||
"kuaishou_live": "快手直播商品", | "kuaishou_live": "快手直播商品", | ||||
"meituan": "美团", | |||||
} | } | ||||
if len(list) > 0 { | if len(list) > 0 { | ||||
for _, v := range list { | for _, v := range list { | ||||
@@ -79,6 +80,7 @@ func GuideOrderOutput(c *gin.Context, args map[string]string) (string, map[strin | |||||
"csjp_live": "穿山甲抖音直播商品", | "csjp_live": "穿山甲抖音直播商品", | ||||
"kuaishou": "快手", | "kuaishou": "快手", | ||||
"kuaishou_live": "快手直播商品", | "kuaishou_live": "快手直播商品", | ||||
"meituan": "美团", | |||||
} | } | ||||
list, _ := db.GetGuideOrderListTotal(args) | list, _ := db.GetGuideOrderListTotal(args) | ||||
@@ -118,5 +118,6 @@ func initTasks() { | |||||
jobs[taskMd.ZhimengCronTikTokLocalLifeOrderSettle] = taskTikTokLocalLifeOrderSettle // | jobs[taskMd.ZhimengCronTikTokLocalLifeOrderSettle] = taskTikTokLocalLifeOrderSettle // | ||||
jobs[taskMd.ZhimengCronKuaishouOrder] = taskKuaishouOrder // | jobs[taskMd.ZhimengCronKuaishouOrder] = taskKuaishouOrder // | ||||
jobs[taskMd.ZhimengCronKuaishouAuth] = taskKuaishouAuth // | jobs[taskMd.ZhimengCronKuaishouAuth] = taskKuaishouAuth // | ||||
jobs[taskMd.ZhimengCronMeituanOrder] = taskMeituanOrder // | |||||
} | } |
@@ -40,6 +40,7 @@ const ( | |||||
ZhimengCronHwDeliveryOrder = "zhimeng_cron_hw_delivery_order" | ZhimengCronHwDeliveryOrder = "zhimeng_cron_hw_delivery_order" | ||||
ZhimengCronHwTourismOrder = "zhimeng_cron_hw_tourism_order" | ZhimengCronHwTourismOrder = "zhimeng_cron_hw_tourism_order" | ||||
ZhimengCronKuaishouOrder = "zhimeng_cron_kuaishou_order" | ZhimengCronKuaishouOrder = "zhimeng_cron_kuaishou_order" | ||||
ZhimengCronMeituanOrder = "zhimeng_cron_meituan_order" | |||||
ZhimengCronKuaishouAuth = "zhimeng_cron_kuaishou_auth" | ZhimengCronKuaishouAuth = "zhimeng_cron_kuaishou_auth" | ||||
ZhimengCronTikTokLocalLifeOrder = "zhimeng_cron_tik_tok_local_life_order" | ZhimengCronTikTokLocalLifeOrder = "zhimeng_cron_tik_tok_local_life_order" | ||||
ZhimengCronTikTokLocalLifeOrderSettle = "zhimeng_cron_tik_tok_local_life_order_settle" | ZhimengCronTikTokLocalLifeOrderSettle = "zhimeng_cron_tik_tok_local_life_order_settle" | ||||
@@ -171,6 +171,12 @@ func OrdersKuaishouGet(nextPositionIndex string, pageSize int, sTime, eTime int6 | |||||
if ex[0] == "moref" { | if ex[0] == "moref" { | ||||
orderType = 13 | 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.Oid = utils.StrToInt64(utils.OrderUUID(utils.StrToInt(ex[1]))) | ||||
resNew.PvdOid = utils.IntToStr(v1.Oid) | resNew.PvdOid = utils.IntToStr(v1.Oid) | ||||
resNew.Uid = utils.StrToInt(ex[2]) | resNew.Uid = utils.StrToInt(ex[2]) | ||||
@@ -0,0 +1,209 @@ | |||||
package svc | |||||
import ( | |||||
"applet/app/db" | |||||
"applet/app/db/model" | |||||
offical "applet/app/db/official" | |||||
md2 "applet/app/md" | |||||
"applet/app/utils" | |||||
"code.fnuoos.com/go_rely_warehouse/zyos_go_third_party_api.git/meituan_cps" | |||||
"encoding/json" | |||||
"fmt" | |||||
"github.com/tidwall/gjson" | |||||
"strings" | |||||
"time" | |||||
) | |||||
func MeituanOrder() { | |||||
pvdTimeKey := "meituan_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 = "" | |||||
} | |||||
count, positionIndex = OrdersMeituanGet(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 OrdersMeituanGet(nextPositionIndex string, pageSize int, sTime, eTime int64, timeType string, pvd int) (int, string) { | |||||
key := offical.SysCfgByKeyStr("meituan_cps_key") | |||||
secret := offical.SysCfgByKeyStr("meituan_cps_secret") | |||||
arg := map[string]interface{}{ | |||||
"queryTimeType": 2, // 1 按订单支付时间查询, 2 按照更新时间查询, 默认为1 | |||||
"page": 1, //页码,默认1,从1开始,若searchType选择2,本字段必须传1,若不传参数默认1 | |||||
"searchType": 2, //订单分页查询方案选择,不填则默认为1。1 分页查询(最多能查询到1万条订单),当选择本查询方案,page参数不能为空。此查询方式后续不再维护,建议使用2逐页查询。2 逐页查询(不限制查询订单数,只能逐页查询,不能指定页数),当选择本查询方案,需配合scrollId参数使用 | |||||
"startTime": sTime, // | |||||
"endTime": eTime, // | |||||
"limit": pageSize, | |||||
"scrollId": nextPositionIndex, | |||||
} | |||||
method1 := "query_order" | |||||
send, err := meituan_cps.Send(method1, key, secret, arg) | |||||
goods := gjson.Get(send, "data.dataList").String() | |||||
newPcursor := gjson.Get(send, "data.scrollId").String() | |||||
if goods == "" || err != nil { | |||||
return 0, "" | |||||
} | |||||
var list = make([]md2.MeituanOrder, 0) | |||||
err = json.Unmarshal([]byte(goods), &list) | |||||
if err != nil { | |||||
return 0, "" | |||||
} | |||||
var meituanState = map[string]string{ | |||||
"2": "订单付款", | |||||
"3": "订单完成", | |||||
"4": "订单失效", | |||||
"5": "风控", | |||||
"6": "订单结算", | |||||
} | |||||
for _, v := range list { | |||||
var res = model.GuideOrder{ | |||||
PvdParentOid: v.OrderId, | |||||
Pvd: "meituan", | |||||
Status: meituanState[v.Status], | |||||
CreateTime: v.PayTime, | |||||
} | |||||
if v.PayTime == 0 { | |||||
res.CreateTime = int(time.Now().Unix()) | |||||
} | |||||
if v.UpdateTime > 0 && v.Status == "6" { | |||||
res.PlatformSettleTime = v.UpdateTime | |||||
} | |||||
ex := strings.Split(v.Sid, "_") | |||||
if len(ex) < 3 { | |||||
continue | |||||
} | |||||
orderType := 0 | |||||
if ex[0] == "share" { | |||||
orderType = 1 | |||||
} | |||||
res.Uid = utils.StrToInt(ex[1]) | |||||
res.StationUid = utils.StrToInt(ex[2]) | |||||
orderDetail, ok := v.OrderDetail.([]interface{}) | |||||
Profit := v.Profit | |||||
state := "1" | |||||
if ok { | |||||
if len(orderDetail) > 0 { | |||||
allEnd := "1" | |||||
for k1, v1 := range orderDetail { | |||||
v2, ok := v1.(map[string]interface{}) | |||||
if ok { | |||||
if k1 == 0 { | |||||
state = utils.AnyToString(v2["couponStatus"]) | |||||
} | |||||
if utils.StrToInt(utils.AnyToString(v2["couponStatus"])) < utils.StrToInt(state) { | |||||
state = utils.AnyToString(v2["couponStatus"]) | |||||
} | |||||
if utils.InArr(utils.AnyToString(v2["couponStatus"]), []string{"1", "2", "3"}) { | |||||
allEnd = "0" | |||||
} | |||||
} | |||||
} | |||||
if allEnd == "0" { | |||||
res.Status = state | |||||
res.PlatformSettleTime = 0 | |||||
} | |||||
} | |||||
} | |||||
res.Oid = utils.StrToInt64(utils.OrderUUID(utils.StrToInt(ex[1]))) | |||||
res.PvdOid = v.OrderId | |||||
res.Uid = utils.StrToInt(ex[1]) | |||||
res.StationUid = utils.StrToInt(ex[2]) | |||||
res.UpdateTime = int(time.Now().Unix()) | |||||
res.Commission = Profit | |||||
res.RealCommission = Profit | |||||
res.Title = v.ProductName | |||||
if v.ProductId == "null" { | |||||
v.ProductId = v.OrderId | |||||
} | |||||
res.Gid = v.ProductId | |||||
res.IsShare = orderType | |||||
res.Payment = v.PayPrice | |||||
one := db.GetGuideOrderByOne(res.PvdOid, utils.IntToStr(res.Uid), res.Pvd) | |||||
if one == nil { | |||||
insertOne, err := db.ZhimengDb.InsertOne(&res) | |||||
fmt.Println(insertOne) | |||||
fmt.Println(err) | |||||
} else { | |||||
res.SettleTime = one.SettleTime | |||||
res.CreateTime = one.CreateTime | |||||
if one.PlatformSettleTime > 0 { | |||||
res.PlatformSettleTime = one.PlatformSettleTime | |||||
} | |||||
db.ZhimengDb.Where("id=?", one.Id).AllCols().Update(&res) | |||||
} | |||||
} | |||||
return len(list), newPcursor | |||||
} |
@@ -36,6 +36,7 @@ func TikTokLocalLifeOrderSettle() { | |||||
"csjp_live": "穿山甲抖音直播商品", | "csjp_live": "穿山甲抖音直播商品", | ||||
"kuaishou": "快手", | "kuaishou": "快手", | ||||
"kuaishou_live": "快手直播商品", | "kuaishou_live": "快手直播商品", | ||||
"meituan": "美团", | |||||
} | } | ||||
for _, v := range order { | for _, v := range order { | ||||
fmt.Println("=================00") | fmt.Println("=================00") | ||||
@@ -65,6 +65,15 @@ func GetTaskDetail(appId string, tmp []int64) { | |||||
} | } | ||||
xinghes := map[string]string{ | xinghes := map[string]string{ | ||||
"7380190485731639322": "https://pan.baidu.com/s/1L8zOJCMdBIwdEvkLV2O4Nw?pwd=miof", | |||||
"7379912213080883200": "https://pan.baidu.com/s/1NBh7T8wsKg-qUv37lZh5Vg?pwd=qi55", | |||||
"7379861578981703695": "https://pan.baidu.com/s/1thjZIuLkMj2QUNEc3xLVFg?pwd=uvqo", | |||||
"7379784012149112872": "https://pan.baidu.com/s/1p9mCmmkrq0pDcNTSW0xtLg?pwd=aa57", | |||||
"7379784012149096488": "https://pan.baidu.com/s/1ZOINZXHrH_PnSwnEFRWN-Q?pwd=fz0g", | |||||
"7379804114810634276": "https://pan.baidu.com/s/1_RMKz-qqw96mqFN5N--zoQ?pwd=s9vb", | |||||
"7379461837433307173": "https://pan.baidu.com/s/1MTqjaO3oKt8KS-zTfXoG_Q?pwd=03l9", | |||||
"7379413447399784498": "https://pan.baidu.com/s/1JPuFx_a-AgDUMuotdoQhMg?pwd=9tch", | |||||
"7379413956869242906": "https://pan.baidu.com/s/1Z38OjOKTYaC6Eo4mePWlLg?pwd=qoo4", | |||||
"7379040298610999332": "https://pan.baidu.com/s/1Wq4GKZJk49WvKNvp55xMqA?pwd=9zal", | "7379040298610999332": "https://pan.baidu.com/s/1Wq4GKZJk49WvKNvp55xMqA?pwd=9zal", | ||||
"7377925238903881754": "https://pan.baidu.com/s/1ZhHrU40YMITyRwh0_evn-g?pwd=i77m", | "7377925238903881754": "https://pan.baidu.com/s/1ZhHrU40YMITyRwh0_evn-g?pwd=i77m", | ||||
"7377636356299898931": "https://pan.baidu.com/s/1bUN8GLg27dHkAKY8Arn98w?pwd=9lo9", | "7377636356299898931": "https://pan.baidu.com/s/1bUN8GLg27dHkAKY8Arn98w?pwd=9lo9", | ||||
@@ -0,0 +1,21 @@ | |||||
package task | |||||
import ( | |||||
"applet/app/task/svc" | |||||
"math/rand" | |||||
"time" | |||||
) | |||||
func taskMeituanOrder() { | |||||
for { | |||||
if len(ch) > workerNum { | |||||
time.Sleep(time.Millisecond * time.Duration(rand.Intn(1000))) | |||||
} else { | |||||
goto START | |||||
} | |||||
} | |||||
START: | |||||
ch <- 1 | |||||
svc.MeituanOrder() | |||||
<-ch | |||||
} |
@@ -4,7 +4,7 @@ go 1.15 | |||||
require ( | require ( | ||||
code.fnuoos.com/go_rely_warehouse/zyos_go_es.git v1.0.1-0.20230707081910-52e70aa52998 | code.fnuoos.com/go_rely_warehouse/zyos_go_es.git v1.0.1-0.20230707081910-52e70aa52998 | ||||
code.fnuoos.com/go_rely_warehouse/zyos_go_third_party_api.git v1.1.21-0.20240531095238-f42743eb0c52 | |||||
code.fnuoos.com/go_rely_warehouse/zyos_go_third_party_api.git v1.1.21-0.20240628083932-3a853b9ed178 | |||||
github.com/360EntSecGroup-Skylar/excelize v1.4.1 | github.com/360EntSecGroup-Skylar/excelize v1.4.1 | ||||
github.com/afex/hystrix-go v0.0.0-20180502004556-fa1af6a1f4f5 | github.com/afex/hystrix-go v0.0.0-20180502004556-fa1af6a1f4f5 | ||||
github.com/boombuler/barcode v1.0.1 | github.com/boombuler/barcode v1.0.1 | ||||