1
This commit is contained in:
parent
b50680826d
commit
3896cccbc7
@ -6,6 +6,8 @@ require q5 v1.0.0
|
|||||||
|
|
||||||
require f5 v1.0.0
|
require f5 v1.0.0
|
||||||
|
|
||||||
|
require jccommon v1.0.0
|
||||||
|
|
||||||
require mt v1.0.0
|
require mt v1.0.0
|
||||||
|
|
||||||
require mtb v1.0.0 // indirect
|
require mtb v1.0.0 // indirect
|
||||||
@ -54,6 +56,8 @@ replace q5 => ../../third_party/q5
|
|||||||
|
|
||||||
replace f5 => ../../third_party/f5
|
replace f5 => ../../third_party/f5
|
||||||
|
|
||||||
|
replace jccommon => ../jccommon
|
||||||
|
|
||||||
replace mt => ./mt
|
replace mt => ./mt
|
||||||
|
|
||||||
replace mtb => ./mtb
|
replace mtb => ./mtb
|
||||||
|
@ -1,14 +1,17 @@
|
|||||||
package task
|
package task
|
||||||
|
|
||||||
type taskMgr struct {
|
type taskMgr struct {
|
||||||
HourlyTaskMgr
|
//HourlyTaskMgr
|
||||||
DailyTaskMgr
|
//DailyTaskMgr
|
||||||
|
webHook
|
||||||
}
|
}
|
||||||
|
|
||||||
func (t *taskMgr) Init() {
|
func (this *taskMgr) Init() {
|
||||||
t.HourlyTaskMgr.Init()
|
//t.HourlyTaskMgr.Init()
|
||||||
//t.DailyTaskMgr.Init()
|
//t.DailyTaskMgr.Init()
|
||||||
|
this.webHook.init()
|
||||||
}
|
}
|
||||||
|
|
||||||
func (t *taskMgr) UnInit() {
|
func (this *taskMgr) UnInit() {
|
||||||
|
this.webHook.unInit()
|
||||||
}
|
}
|
||||||
|
207
server/backtask/task/webhook.go
Normal file
207
server/backtask/task/webhook.go
Normal file
@ -0,0 +1,207 @@
|
|||||||
|
package task
|
||||||
|
|
||||||
|
import (
|
||||||
|
"q5"
|
||||||
|
"f5"
|
||||||
|
"jccommon"
|
||||||
|
"main/constant"
|
||||||
|
"time"
|
||||||
|
"strings"
|
||||||
|
)
|
||||||
|
|
||||||
|
type webHook struct {
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
func (this* webHook) init() {
|
||||||
|
go this.loadWebHookEvent(jccommon.ORDER_UPDATE_EVENT, this.orderUpdatedCb)
|
||||||
|
go this.loadWebHookEvent(jccommon.ACTIVITY_SALE_EVENT, this.activitySaleCb)
|
||||||
|
}
|
||||||
|
|
||||||
|
func (this* webHook) unInit() {
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
func (this* webHook) loadWebHookEvent(eventName string, cb func(ds *f5.DataSet) bool) {
|
||||||
|
var lastSyncIdx = this.getLastIdx(eventName)
|
||||||
|
for true {
|
||||||
|
if lastSyncIdx < 0 {
|
||||||
|
lastSyncIdx = this.getLastIdx(eventName)
|
||||||
|
if lastSyncIdx >= 0 {
|
||||||
|
continue
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
var newLastSyncIdx int64
|
||||||
|
f5.GetGoStyleDb().RawQuery(
|
||||||
|
constant.BCEVENT_DB,
|
||||||
|
"SELECT * FROM t_webhook_event WHERE idx > ? AND event_name = ? LIMIT 1000",
|
||||||
|
[]string{
|
||||||
|
q5.ToString(lastSyncIdx),
|
||||||
|
eventName,
|
||||||
|
},
|
||||||
|
func (err error, ds *f5.DataSet) {
|
||||||
|
if err == nil {
|
||||||
|
for ds.Next() {
|
||||||
|
idx := q5.ToInt64(ds.GetByName("idx"))
|
||||||
|
if cb(ds) {
|
||||||
|
if idx > newLastSyncIdx {
|
||||||
|
newLastSyncIdx = idx
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
break
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
})
|
||||||
|
if newLastSyncIdx > lastSyncIdx {
|
||||||
|
lastSyncIdx = newLastSyncIdx
|
||||||
|
this.saveLastIdx(eventName, lastSyncIdx)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
time.Sleep(time.Second * 3)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
func (this* webHook) getLastIdx(eventName string) int64 {
|
||||||
|
var lastSyncIdx int64 = -1
|
||||||
|
f5.GetGoStyleDb().OrmSelectOne(
|
||||||
|
constant.BCEVENT_DB,
|
||||||
|
"t_webhook_process_last_idx",
|
||||||
|
[][]string{
|
||||||
|
{"event_name", eventName},
|
||||||
|
},
|
||||||
|
func (err error, ds *f5.DataSet) {
|
||||||
|
if err != nil {
|
||||||
|
return
|
||||||
|
}
|
||||||
|
if ds.Next() {
|
||||||
|
lastSyncIdx = q5.ToInt64(ds.GetByName("last_idx"))
|
||||||
|
} else {
|
||||||
|
lastSyncIdx = 0
|
||||||
|
}
|
||||||
|
})
|
||||||
|
return lastSyncIdx
|
||||||
|
}
|
||||||
|
|
||||||
|
func (this* webHook) saveLastIdx(eventName string, lastIdx int64) bool {
|
||||||
|
var result bool = false
|
||||||
|
nowTime := f5.GetApp().GetRealSeconds()
|
||||||
|
f5.GetGoStyleDb().Upsert(
|
||||||
|
constant.BCEVENT_DB,
|
||||||
|
"t_webhook_process_last_idx",
|
||||||
|
[][]string{
|
||||||
|
{"event_name", eventName},
|
||||||
|
},
|
||||||
|
[][]string{
|
||||||
|
{"last_idx", q5.ToString(lastIdx)},
|
||||||
|
},
|
||||||
|
[][]string{
|
||||||
|
{"event_name", eventName},
|
||||||
|
{"last_idx", q5.ToString(lastIdx)},
|
||||||
|
{"createtime", q5.ToString(nowTime)},
|
||||||
|
{"modifytime", q5.ToString(nowTime)},
|
||||||
|
},
|
||||||
|
func (err error, lastInsertId int64, rowsAffected int64) {
|
||||||
|
result = err == nil
|
||||||
|
})
|
||||||
|
return result
|
||||||
|
}
|
||||||
|
|
||||||
|
func (this* webHook) orderUpdatedCb(ds *f5.DataSet) bool {
|
||||||
|
nowTime := f5.GetApp().GetRealSeconds()
|
||||||
|
rawData := ds.GetByName("raw_data")
|
||||||
|
p := new(jccommon.OrderUpdatedEvent)
|
||||||
|
err := q5.DecodeJson(rawData, &p)
|
||||||
|
netId := 13473
|
||||||
|
if err == nil {
|
||||||
|
updateFields := [][]string{
|
||||||
|
{"order_id", p.Data.Id},
|
||||||
|
{"chain", p.Chain},
|
||||||
|
{"status", p.Data.Status.Name},
|
||||||
|
{"start_time", q5.SafeToString(p.Data.StartAt)},
|
||||||
|
{"end_time", q5.SafeToString(p.Data.EndAt)},
|
||||||
|
{"created_at", q5.SafeToString(p.Data.CreatedAt)},
|
||||||
|
{"updated_at", q5.SafeToString(p.Data.UpdatedAt)},
|
||||||
|
{"event_id", p.EventId},
|
||||||
|
{"event_data", rawData},
|
||||||
|
{"modifytime", q5.ToString(nowTime)},
|
||||||
|
}
|
||||||
|
insertFields := [][]string{
|
||||||
|
{"order_id", p.Data.Id},
|
||||||
|
{"chain", p.Chain},
|
||||||
|
{"status", p.Data.Status.Name},
|
||||||
|
{"net_id", q5.ToString(netId)},
|
||||||
|
{"token_id", p.Data.Sell[0].TokenId},
|
||||||
|
{"contract_address", strings.ToLower(p.Data.Sell[0].ContractAddress)},
|
||||||
|
{"start_time", q5.SafeToString(p.Data.StartAt)},
|
||||||
|
{"end_time", q5.SafeToString(p.Data.EndAt)},
|
||||||
|
{"created_at", q5.SafeToString(p.Data.CreatedAt)},
|
||||||
|
{"updated_at", q5.SafeToString(p.Data.UpdatedAt)},
|
||||||
|
{"event_id", p.EventId},
|
||||||
|
{"event_data", rawData},
|
||||||
|
{"createtime", q5.ToString(nowTime)},
|
||||||
|
{"modifytime", q5.ToString(nowTime)},
|
||||||
|
}
|
||||||
|
f5.GetGoStyleDb().UpsertEx(
|
||||||
|
constant.BCNFT_DB,
|
||||||
|
"t_order",
|
||||||
|
[][]string{
|
||||||
|
{"net_id", q5.ToString(netId)},
|
||||||
|
{"contract_address", strings.ToLower(p.Data.Sell[0].ContractAddress)},
|
||||||
|
{"token_id", p.Data.Sell[0].TokenId},
|
||||||
|
},
|
||||||
|
updateFields,
|
||||||
|
insertFields,
|
||||||
|
func (err error, lastInsertId int64, rowsAffected int64) {
|
||||||
|
if err != nil {
|
||||||
|
return
|
||||||
|
}
|
||||||
|
},
|
||||||
|
func (ds *f5.DataSet) bool {
|
||||||
|
return p.EventId > ds.GetByName("event_id")
|
||||||
|
})
|
||||||
|
}
|
||||||
|
return true
|
||||||
|
}
|
||||||
|
|
||||||
|
func (this* webHook) activitySaleCb(ds *f5.DataSet) bool {
|
||||||
|
nowTime := f5.GetApp().GetRealSeconds()
|
||||||
|
rawData := ds.GetByName("raw_data")
|
||||||
|
p := new(jccommon.ActivitySaleEvent)
|
||||||
|
err := q5.DecodeJson(rawData, &p)
|
||||||
|
netId := 13473
|
||||||
|
if err == nil {
|
||||||
|
updateFields := [][]string{
|
||||||
|
}
|
||||||
|
insertFields := [][]string{
|
||||||
|
{"order_id", p.Data.Details.OrderId},
|
||||||
|
{"chain", p.Chain},
|
||||||
|
{"net_id", q5.ToString(netId)},
|
||||||
|
{"token_id", p.Data.Details.Asset[0].TokenId},
|
||||||
|
{"contract_address", strings.ToLower(p.Data.Details.Asset[0].ContractAddress)},
|
||||||
|
{"buyer", p.Data.Details.From},
|
||||||
|
{"seller", p.Data.Details.To},
|
||||||
|
{"event_id", p.EventId},
|
||||||
|
{"event_data", rawData},
|
||||||
|
{"createtime", q5.ToString(nowTime)},
|
||||||
|
{"modifytime", q5.ToString(nowTime)},
|
||||||
|
}
|
||||||
|
f5.GetGoStyleDb().UpsertEx(
|
||||||
|
constant.BCNFT_DB,
|
||||||
|
"t_sale",
|
||||||
|
[][]string{
|
||||||
|
{"order_id", p.Data.Details.OrderId},
|
||||||
|
},
|
||||||
|
updateFields,
|
||||||
|
insertFields,
|
||||||
|
func (err error, lastInsertId int64, rowsAffected int64) {
|
||||||
|
if err != nil {
|
||||||
|
return
|
||||||
|
}
|
||||||
|
},
|
||||||
|
func (ds *f5.DataSet) bool {
|
||||||
|
return p.EventId > ds.GetByName("event_id")
|
||||||
|
})
|
||||||
|
}
|
||||||
|
return true
|
||||||
|
}
|
@ -9,3 +9,23 @@ const (
|
|||||||
ITEM_TYPE_HERO = 3
|
ITEM_TYPE_HERO = 3
|
||||||
ITEM_TYPE_GOLD_BULLION = 31
|
ITEM_TYPE_GOLD_BULLION = 31
|
||||||
)
|
)
|
||||||
|
|
||||||
|
const (
|
||||||
|
ORDER_STATUS_PENDING = "PENDING"
|
||||||
|
ORDER_STATUS_ACTIVE = "ACTIVE"
|
||||||
|
ORDER_STATUS_INACTIVE = "INACTIVE"
|
||||||
|
ORDER_STATUS_CANCELLED = "CANCELLED"
|
||||||
|
ORDER_STATUS_FILLED = "FILLED"
|
||||||
|
ORDER_STATUS_EXPIRED = "EXPIRED"
|
||||||
|
)
|
||||||
|
|
||||||
|
const (
|
||||||
|
ORDER_UPDATE_EVENT = "imtbl_zkevm_order_updated"
|
||||||
|
TRADE_CREATED_EVENT = "imtbl_zkevm_trade_created"
|
||||||
|
ACTIVITY_SALE_EVENT = "imtbl_zkevm_activity_sale"
|
||||||
|
)
|
||||||
|
|
||||||
|
const (
|
||||||
|
CONTRACT_NAME_CFHero = "CFHero"
|
||||||
|
CONTRACT_NAME_GoldBrick = "GoldBrick"
|
||||||
|
)
|
||||||
|
42
server/jccommon/types.go
Normal file
42
server/jccommon/types.go
Normal file
@ -0,0 +1,42 @@
|
|||||||
|
package jccommon
|
||||||
|
|
||||||
|
type ActivitySaleEvent struct {
|
||||||
|
EventName string `json:"event_name"`
|
||||||
|
EventId string `json:"event_id"`
|
||||||
|
Chain string `json:"chain"`
|
||||||
|
Data struct {
|
||||||
|
Details struct {
|
||||||
|
To string `json:"to"`
|
||||||
|
From string `json:"from"`
|
||||||
|
OrderId string `json:"order_id"`
|
||||||
|
Asset [] struct {
|
||||||
|
TokenId string `json:"token_id"`
|
||||||
|
ContractType string `json:"contract_type"`
|
||||||
|
ContractAddress string `json:"contract_address"`
|
||||||
|
} `json:"asset"`
|
||||||
|
} `json:"details"`
|
||||||
|
} `json:"data"`
|
||||||
|
}
|
||||||
|
|
||||||
|
type OrderUpdatedEvent struct {
|
||||||
|
EventName string `json:"event_name"`
|
||||||
|
EventId string `json:"event_id"`
|
||||||
|
Chain string `json:"chain"`
|
||||||
|
Data struct {
|
||||||
|
Id string `json:"id"`
|
||||||
|
Sell [] struct {
|
||||||
|
TokenId string `json:"token_id"`
|
||||||
|
ItemType string `json:"item_type"`
|
||||||
|
EndAmount string `json:"end_amount"`
|
||||||
|
StartAmount string `json:"start_amount"`
|
||||||
|
ContractAddress string `json:"contract_address"`
|
||||||
|
} `json:"sell"`
|
||||||
|
Status struct {
|
||||||
|
Name string `json:"name"`
|
||||||
|
} `json:"status"`
|
||||||
|
StartAt interface{} `json:"start_at"`
|
||||||
|
EndAt interface{} `json:"end_at"`
|
||||||
|
CreatedAt interface{} `json:"created_at"`
|
||||||
|
UpdatedAt interface{} `json:"updated_at"`
|
||||||
|
} `json:"data"`
|
||||||
|
}
|
@ -15,47 +15,6 @@ type NftHomeMeta struct {
|
|||||||
ExternalLink string `json:"external_link"`
|
ExternalLink string `json:"external_link"`
|
||||||
}
|
}
|
||||||
|
|
||||||
type ActivitySaleEvent struct {
|
|
||||||
EventName string `json:"event_name"`
|
|
||||||
EventId string `json:"event_id"`
|
|
||||||
Chain string `json:"chain"`
|
|
||||||
Data struct {
|
|
||||||
Details struct {
|
|
||||||
To string `json:"to"`
|
|
||||||
From string `json:"from"`
|
|
||||||
OrderId string `json:"order_id"`
|
|
||||||
Asset [] struct {
|
|
||||||
TokenId string `json:"token_id"`
|
|
||||||
ContractType string `json:"contract_type"`
|
|
||||||
ContractAddress string `json:"contract_address"`
|
|
||||||
} `json:"asset"`
|
|
||||||
} `json:"details"`
|
|
||||||
} `json:"data"`
|
|
||||||
}
|
|
||||||
|
|
||||||
type OrderUpdatedEvent struct {
|
|
||||||
EventName string `json:"event_name"`
|
|
||||||
EventId string `json:"event_id"`
|
|
||||||
Chain string `json:"chain"`
|
|
||||||
Data struct {
|
|
||||||
Id string `json:"id"`
|
|
||||||
Sell [] struct {
|
|
||||||
TokenId string `json:"token_id"`
|
|
||||||
ItemType string `json:"item_type"`
|
|
||||||
EndAmount string `json:"end_amount"`
|
|
||||||
StartAmount string `json:"start_amount"`
|
|
||||||
ContractAddress string `json:"contract_address"`
|
|
||||||
} `json:"sell"`
|
|
||||||
Status struct {
|
|
||||||
Name string `json:"name"`
|
|
||||||
} `json:"status"`
|
|
||||||
StartAt interface{} `json:"start_at"`
|
|
||||||
EndAt interface{} `json:"end_at"`
|
|
||||||
CreatedAt interface{} `json:"created_at"`
|
|
||||||
UpdatedAt interface{} `json:"updated_at"`
|
|
||||||
} `json:"data"`
|
|
||||||
}
|
|
||||||
|
|
||||||
type StreamPagination struct {
|
type StreamPagination struct {
|
||||||
NextCursor string `json:"next_cursor"`
|
NextCursor string `json:"next_cursor"`
|
||||||
PreviousCursor string `json:"previous_cursor"`
|
PreviousCursor string `json:"previous_cursor"`
|
||||||
|
@ -14,26 +14,6 @@ const (
|
|||||||
MAX_MODULE_IDX
|
MAX_MODULE_IDX
|
||||||
)
|
)
|
||||||
|
|
||||||
const (
|
|
||||||
ORDER_STATUS_PENDING = "PENDING"
|
|
||||||
ORDER_STATUS_ACTIVE = "ACTIVE"
|
|
||||||
ORDER_STATUS_INACTIVE = "INACTIVE"
|
|
||||||
ORDER_STATUS_CANCELLED = "CANCELLED"
|
|
||||||
ORDER_STATUS_FILLED = "FILLED"
|
|
||||||
ORDER_STATUS_EXPIRED = "EXPIRED"
|
|
||||||
)
|
|
||||||
|
|
||||||
const (
|
|
||||||
ORDER_UPDATE_EVENT = "imtbl_zkevm_order_updated"
|
|
||||||
TRADE_CREATED_EVENT = "imtbl_zkevm_trade_created"
|
|
||||||
ACTIVITY_SALE_EVENT = "imtbl_zkevm_activity_sale"
|
|
||||||
)
|
|
||||||
|
|
||||||
const (
|
|
||||||
CONTRACT_NAME_CFHero = "CFHero"
|
|
||||||
CONTRACT_NAME_GoldBrick = "GoldBrick"
|
|
||||||
)
|
|
||||||
|
|
||||||
const (
|
const (
|
||||||
SHOPCART_MAX_GOODS_NUM = 20
|
SHOPCART_MAX_GOODS_NUM = 20
|
||||||
)
|
)
|
||||||
|
Loading…
x
Reference in New Issue
Block a user