@@ -16,6 +16,7 @@ type GuideOrder struct { | |||||
Commission string `json:"commission" xorm:"default 0.0000 DECIMAL(20,4)"` | Commission string `json:"commission" xorm:"default 0.0000 DECIMAL(20,4)"` | ||||
RealCommission string `json:"real_commission" xorm:"default 0.0000 DECIMAL(20,4)"` | RealCommission string `json:"real_commission" xorm:"default 0.0000 DECIMAL(20,4)"` | ||||
Title string `json:"title" xorm:"VARCHAR(255)"` | Title string `json:"title" xorm:"VARCHAR(255)"` | ||||
Gid string `json:"gid" xorm:"VARCHAR(255)"` | |||||
Payment string `json:"payment" xorm:"default 0.00 DECIMAL(20,2)"` | Payment string `json:"payment" xorm:"default 0.00 DECIMAL(20,2)"` | ||||
Pvd string `json:"pvd" xorm:"VARCHAR(255)"` | Pvd string `json:"pvd" xorm:"VARCHAR(255)"` | ||||
Img string `json:"img" xorm:"VARCHAR(255)"` | Img string `json:"img" xorm:"VARCHAR(255)"` | ||||
@@ -0,0 +1,42 @@ | |||||
package offical | |||||
import ( | |||||
"applet/app/db" | |||||
officialModel "applet/app/db/model" | |||||
"applet/app/utils/logx" | |||||
) | |||||
func SysCfgByKey(key string) *officialModel.SysCfg { | |||||
var data officialModel.SysCfg | |||||
get, err := db.Db.Where("k=?", key).Get(&data) | |||||
if get == false || err != nil { | |||||
return nil | |||||
} | |||||
return &data | |||||
} | |||||
func SysCfgByKeyStr(key string) string { | |||||
var data officialModel.SysCfg | |||||
get, err := db.Db.Where("k=?", key).Get(&data) | |||||
if get == false || err != nil { | |||||
return "" | |||||
} | |||||
return data.V | |||||
} | |||||
func DbsSysCfgInserts(key, val string) bool { | |||||
cfg := officialModel.SysCfg{K: key, V: val} | |||||
_, err := db.Db.InsertOne(&cfg) | |||||
if err != nil { | |||||
logx.Error(err) | |||||
return false | |||||
} | |||||
return true | |||||
} | |||||
func DbsSysCfgUpdate(key, val string) bool { | |||||
cfg := officialModel.SysCfg{K: key, V: val} | |||||
_, err := db.Db.Where("`k`=?", key).Cols("v").Update(&cfg) | |||||
if err != nil { | |||||
logx.Error(err) | |||||
return false | |||||
} | |||||
return true | |||||
} |
@@ -0,0 +1,7 @@ | |||||
package model | |||||
type SysCfg struct { | |||||
K string `json:"k" xorm:"not null pk comment('键') VARCHAR(127)"` | |||||
V string `json:"v" xorm:"comment('值') TEXT"` | |||||
Memo string `json:"memo" xorm:"not null default '' comment('备注') VARCHAR(255)"` | |||||
} |
@@ -83,6 +83,8 @@ func doTask(fnName string) func() { | |||||
// 增加自动任务队列 | // 增加自动任务队列 | ||||
func initTasks() { | func initTasks() { | ||||
jobs[taskMd.ZhimengCronTikTokCsjp] = taskTikTokCsjp // | |||||
jobs[taskMd.ZhimengCronTikTokCsjpActivity] = taskTikTokCsjpActivity // | |||||
jobs[taskMd.ZhimengCronTikTokTask] = taskTikTokTask // | jobs[taskMd.ZhimengCronTikTokTask] = taskTikTokTask // | ||||
jobs[taskMd.ZhimengCronTikTokTaskRelate] = taskTikTokTaskRelate // | jobs[taskMd.ZhimengCronTikTokTaskRelate] = taskTikTokTaskRelate // | ||||
@@ -2,6 +2,8 @@ package md | |||||
const ( | const ( | ||||
ZhimengCronTikTokTaskRelate = "zhimeng_cron_tik_tok_relate" | ZhimengCronTikTokTaskRelate = "zhimeng_cron_tik_tok_relate" | ||||
ZhimengCronTikTokCsjp = "zhimeng_cron_tik_tok_csjp" | |||||
ZhimengCronTikTokCsjpActivity = "zhimeng_cron_tik_tok_csjp_activity" | |||||
ZhimengCronTikTokTask = "zhimeng_cron_tik_tok_task" //短剧订单 | ZhimengCronTikTokTask = "zhimeng_cron_tik_tok_task" //短剧订单 | ||||
ZhimengCronTikTokTaskMoney = "zhimeng_cron_tik_tok_task_money" //短剧订单 | ZhimengCronTikTokTaskMoney = "zhimeng_cron_tik_tok_task_money" //短剧订单 | ||||
ZhimengCronTikTokTaskMoneyByYestday = "zhimeng_cron_tik_tok_task_money_by_yestday" | ZhimengCronTikTokTaskMoneyByYestday = "zhimeng_cron_tik_tok_task_money_by_yestday" | ||||
@@ -0,0 +1,25 @@ | |||||
package svc | |||||
import ( | |||||
offical "applet/app/db/official" | |||||
"code.fnuoos.com/go_rely_warehouse/zyos_go_third_party_api.git/tik_tok" | |||||
) | |||||
func Base() map[string]string { | |||||
tikTokCsjpAppId := offical.SysCfgByKeyStr("tik_tok_csjp_app_id") | |||||
tikTokCsjpAppSecret := offical.SysCfgByKeyStr("tik_tok_csjp_app_secret") | |||||
var tmp = map[string]string{ | |||||
"app_id": tikTokCsjpAppId, | |||||
"app_secret": tikTokCsjpAppSecret, | |||||
} | |||||
return tmp | |||||
} | |||||
func CsjpOrder(tikTokArgs map[string]string) map[string]interface{} { | |||||
base := Base() | |||||
tikTokArgs["app_id"] = base["app_id"] | |||||
tikTokArgs["app_secret"] = base["app_secret"] | |||||
order := tik_tok.CsjpOrderList(tikTokArgs) | |||||
return order | |||||
} |
@@ -0,0 +1,196 @@ | |||||
package svc | |||||
import ( | |||||
"applet/app/db" | |||||
"applet/app/db/model" | |||||
offical "applet/app/db/official" | |||||
"applet/app/utils" | |||||
"fmt" | |||||
"strings" | |||||
"time" | |||||
) | |||||
var oilstationState = map[string]int{ | |||||
"订单付款": 0, | |||||
"订单成功": 2, | |||||
"订单完成": 2, | |||||
"订单失效": 4, | |||||
"订单退款": 4, | |||||
"订单结算": 3, | |||||
} | |||||
func TikTokCsjp(ordType int) { | |||||
pvdTimeKey := "csjp_time_" + utils.IntToStr(ordType) | |||||
// 获得最后时间 | |||||
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 { | |||||
ordData := new([]map[string]string) | |||||
var positionIndex = "" | |||||
var err error | |||||
if pageNo == 1 { | |||||
nextPositionIndex = "0" | |||||
} | |||||
if nextPositionIndex != "" { | |||||
ordData, positionIndex, err = OrdersTikTokGet(nextPositionIndex, pageSize, beginTime, endTime, "update", ordType) | |||||
} | |||||
count := 0 | |||||
if ordData == nil { | |||||
nextPositionIndex = "" | |||||
goto ChkArg | |||||
} | |||||
count = len(*ordData) | |||||
if err != nil || ordData == nil || len(*ordData) == 0 { | |||||
nextPositionIndex = "" | |||||
goto ChkArg | |||||
} | |||||
if count > 0 { | |||||
count = pageSize | |||||
} | |||||
// 判断是否分页已经全部取完了 | |||||
if count == pageSize { | |||||
nextPositionIndex = positionIndex | |||||
pageNo++ | |||||
fmt.Println("========下一页========" + utils.IntToStr(pageNo)) | |||||
ordData = nil | |||||
continue | |||||
} | |||||
ChkArg: | |||||
nextPositionIndex = "" | |||||
// 查询完后重置时间, 最后查询时间 | |||||
if endTime < now { | |||||
pageNo = 1 | |||||
offical.DbsSysCfgUpdate(pvdTimeKey, utils.TimeToStr(endTime)) | |||||
beginTime = endTime | |||||
endTime = endTime + 300 | |||||
if endTime > now { | |||||
endTime = now | |||||
} | |||||
ordData = nil | |||||
continue | |||||
} | |||||
ordData = nil | |||||
break | |||||
} | |||||
} | |||||
func OrdersTikTokGet(nextPositionIndex string, pageSize int, sTime, eTime int64, timeType string, pvd int) (*[]map[string]string, string, error) { | |||||
distributionType := pvd | |||||
tikTokArgs := map[string]string{ | |||||
"size": utils.IntToStr(pageSize), | |||||
"cursor": nextPositionIndex, | |||||
"start_time": utils.Int64ToStr(time.Unix(sTime, 0).Unix()), | |||||
"end_time": utils.Int64ToStr(time.Unix(eTime, 0).Unix()), | |||||
"time_type": timeType, | |||||
"order_type": utils.IntToStr(distributionType), | |||||
} | |||||
//if cfg.Prd == false { | |||||
// tikTokArgs["start_time"] = "2023-09-18 15:59:00" | |||||
// tikTokArgs["end_time"] = "2023-09-18 16:02:00" | |||||
//} | |||||
order := CsjpOrder(tikTokArgs) | |||||
cursor := utils.AnyToString(order["cursor"]) | |||||
list, ok := order["order"].([]map[string]string) | |||||
if ok { | |||||
for _, v := range list { | |||||
if utils.StrToInt(v["uid"]) == 0 { | |||||
continue | |||||
} | |||||
orderType := 0 | |||||
if v["is_share"] == "1" { | |||||
orderType = 1 | |||||
} | |||||
// 判断免单 | |||||
if v["is_share"] == "2" { | |||||
orderType = 2 | |||||
} | |||||
if v["is_share"] == "3" { | |||||
orderType = 10 | |||||
} | |||||
if v["is_share"] == "4" { | |||||
orderType = 11 | |||||
} | |||||
if v["is_share"] == "5" { | |||||
orderType = 12 | |||||
} | |||||
if v["is_share"] == "6" { | |||||
orderType = 13 | |||||
} | |||||
var ord = &model.GuideOrder{ | |||||
Uid: utils.StrToInt(v["mid"]), | |||||
StationUid: utils.StrToInt(v["uid"]), | |||||
PvdOid: utils.AnyToString(v["oid"]), | |||||
Status: v["status"], | |||||
CreateTime: utils.StrToInt(v["create_time"]), | |||||
UpdateTime: int(time.Now().Unix()), | |||||
Commission: v["commission"], | |||||
Title: utils.AnyToString(v["info"]), | |||||
Payment: v["payment"], | |||||
Pvd: "csjp", | |||||
Img: v["product_img"], | |||||
IsShare: orderType, | |||||
Gid: v["product_id"], | |||||
Ext: utils.SerializeStr(order), | |||||
} | |||||
if utils.StrToInt(v["lm_js_time"]) > 0 { | |||||
ord.PlatformSettleTime = utils.StrToInt(v["lm_js_time"]) | |||||
} | |||||
one := db.GetGuideOrderByOne(ord.PvdOid, utils.IntToStr(ord.Uid), ord.Pvd) | |||||
if one == nil { | |||||
insertOne, err := db.ZhimengDb.InsertOne(ord) | |||||
fmt.Println(insertOne) | |||||
fmt.Println(err) | |||||
} else { | |||||
ord.SettleTime = one.SettleTime | |||||
if one.PlatformSettleTime > 0 { | |||||
ord.PlatformSettleTime = one.PlatformSettleTime | |||||
} | |||||
db.ZhimengDb.Where("id=?", one.Id).AllCols().Update(ord) | |||||
} | |||||
} | |||||
return &list, cursor, nil | |||||
} | |||||
return nil, "", nil | |||||
} |
@@ -0,0 +1,22 @@ | |||||
package task | |||||
import ( | |||||
"applet/app/task/svc" | |||||
"math/rand" | |||||
"time" | |||||
) | |||||
// | |||||
func taskTikTokCsjp() { | |||||
for { | |||||
if len(ch) > workerNum { | |||||
time.Sleep(time.Millisecond * time.Duration(rand.Intn(1000))) | |||||
} else { | |||||
goto START | |||||
} | |||||
} | |||||
START: | |||||
ch <- 1 | |||||
svc.TikTokCsjp(1) | |||||
<-ch | |||||
} |
@@ -0,0 +1,22 @@ | |||||
package task | |||||
import ( | |||||
"applet/app/task/svc" | |||||
"math/rand" | |||||
"time" | |||||
) | |||||
// | |||||
func taskTikTokCsjpActivity() { | |||||
for { | |||||
if len(ch) > workerNum { | |||||
time.Sleep(time.Millisecond * time.Duration(rand.Intn(1000))) | |||||
} else { | |||||
goto START | |||||
} | |||||
} | |||||
START: | |||||
ch <- 1 | |||||
svc.TikTokCsjp(3) | |||||
<-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.20231023083145-a61813d50051 | |||||
code.fnuoos.com/go_rely_warehouse/zyos_go_third_party_api.git v1.1.21-0.20240131014841-ab7390becddd | |||||
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 | ||||