test vault status

This commit is contained in:
shoopea 2019-10-11 14:53:49 +08:00
parent 63c9371ee4
commit 7c063108ce
2 changed files with 92 additions and 29 deletions

106
job.go
View File

@ -329,29 +329,29 @@ func jobPillage(j Job) {
logOnError(err, "jobPillage : Unmarshal payload")
// check if we have a acknoledgment of go or a timeout within 3m30 of the PillageInc from the Job
ids := getSQLListID64(` select ox.id
from obj ox
,obj_msg omx
,obj op
,obj_msg omp
,obj_job oj
where oj.obj_id = ` + strconv.FormatInt(j.ID64, 10) + `
and omx.user_id = oj.user_id
and omx.sender_user_id = ` + strconv.Itoa(userID64ChtWrsBot) + `
and omx.obj_id = ox.id
and ox.obj_sub_type_id in (` + strconv.Itoa(objSubTypeMessagePillageGo) +
ids := getSQLListID64(`SELECT ox.id
FROM obj ox
,obj_msg omx
,obj op
,obj_msg omp
,obj_job oj
WHERE oj.obj_id = ` + strconv.FormatInt(j.ID64, 10) + `
AND omx.user_id = oj.user_id
AND omx.sender_user_id = ` + strconv.Itoa(userID64ChtWrsBot) + `
AND omx.obj_id = ox.id
AND ox.obj_sub_type_id in (` + strconv.Itoa(objSubTypeMessagePillageGo) +
`, ` + strconv.Itoa(objSubTypeMessagePillageTimeout) +
`, ` + strconv.Itoa(objSubTypeMessagePillageLoss) +
`, ` + strconv.Itoa(objSubTypeMessagePillageWin) + `)
and op.id = ` + strconv.FormatInt(r.ObjID64, 10) + `
and omp.obj_id = op.id
and omx.date between omp.date and addtime(omp.date, '0 0:3:30.000000')
order by case ox.obj_sub_type_id when ` + strconv.Itoa(objSubTypeMessagePillageWin) + ` then 0
when ` + strconv.Itoa(objSubTypeMessagePillageLoss) + ` then 1
when ` + strconv.Itoa(objSubTypeMessagePillageTimeout) + ` then 2
when ` + strconv.Itoa(objSubTypeMessagePillageGo) + ` then 3
else 4 end asc
limit 1;`)
AND op.id = ` + strconv.FormatInt(r.ObjID64, 10) + `
AND omp.obj_id = op.id
AND omx.date between omp.date AND ADDTIME(omp.date, '0 0:3:30.000000')
ORDER BY CASE ox.obj_sub_type_id WHEN ` + strconv.Itoa(objSubTypeMessagePillageWin) + ` THEN 0
WHEN ` + strconv.Itoa(objSubTypeMessagePillageLoss) + ` THEN 1
WHEN ` + strconv.Itoa(objSubTypeMessagePillageTimeout) + ` THEN 2
WHEN ` + strconv.Itoa(objSubTypeMessagePillageGo) + ` THEN 3
ELSE 4 END ASC
LIMIT 1;`)
if len(ids) > 1 { // issue there ?
s := TGCommand{
@ -893,12 +893,76 @@ func jobGDeposit(j Job) {
}
func jobVaultStatus(j Job) {
var p JobPayloadVaultStatus
var (
p JobPayloadVaultStatus
userID64, currentUserID64 int64
itemID64, deposit, withdraw int64
itemList, depositList, withdrawList []int64
)
err := setJobStart(j.ID64)
logOnError(err, "jobVaultStatus : setJobStart")
err = json.Unmarshal(j.Payload, &p)
logOnError(err, "jobVaultStatus : Unmarshal payload")
stmt := `SELECT x.user_id
,x.item_id
,(SELECT COALESCE(SUM(omv.quantity), 0)
FROM obj_msg_vault_v omv
WHERE omv.user_id = x.user_id
AND omv.item_id = x.item_id
AND omv.msg_type_id = ` + strconv.Itoa(objSubTypeMessageGDepositAck) + `
AND omv.chat_id = x.chat_id) deposit
,(SELECT COALESCE(SUM(omv.quantity), 0)
FROM obj_msg_vault_v omv
WHERE omv.user_id = x.user_id
AND omv.item_id = x.item_id
AND omv.msg_type_id = ` + strconv.Itoa(objSubTypeMessageWithdrawRcv) + `
AND omv.chat_id = x.chat_id) withdraw
FROM (SELECT DISTINCT
omv.user_id
,omv.chat_id
,omv.item_id
FROM obj_msg_vault_v omv
WHERE omv.chat_id = ?
AND omv.user_id in (?` + strings.Repeat(",?", len(p.UserListID64)-1) + `)
AND omv.item_type_id in (?` + strings.Repeat(",?", len(p.ItemTypeListID64)-1) + `)) x
ORDER BY x.user_id ASC;`
rows, err := db.Query(stmt, p.DepositChatID64, p.UserListID64..., p.ItemTypeListID64...)
logOnError(err, "jobVaultStatus : Get rows")
if err != nil {
err = setJobDone(j.ID64)
logOnError(err, "jobVaultStatus : setJobDone")
return
}
currentUserID64 = 0
for rows.Next() {
err = rows.Scan(&userID64, &itemID64, &deposit, &withdraw)
logOnError(err, "jobVaultStatus : scan next val")
if userID64 != currentUserID64 {
if currentUserID64 != 0 {
// display info
}
itemList = nil
depositList = nil
withdrawList = nil
}
itemList = append(itemList, itemID64)
depositList = append(depositList, deposit)
withdrawList = append(withdrawList, withdraw)
}
if currentUserID64 != 0 {
//display info
}
err = rows.Err()
logOnError(err, "jobVaultStatus : query end")
rows.Close()
err = setJobDone(j.ID64)
logOnError(err, "jobVaultStatus : setJobDone")

15
sql.go
View File

@ -585,16 +585,17 @@ func initDB() {
_, err = db.Exec(`CREATE VIEW obj_msg_vault_v AS
SELECT om.sender_user_id user_id
,om.chat_id
,o.obj_sub_type_id msg_type_id
,om.obj_sub_type_id msg_type_id
,omi.item_id
,oi.obj_sub_type_id item_type_id
,omi.quantity
FROM obj o
,obj_msg om
FROM obj om
,obj oi
,obj_msg_item omi
WHERE o.id = om.obj_id
AND o.obj_type_id = ` + strconv.Itoa(objTypeMessage) + `
AND o.obj_sub_type_id in (` + strconv.Itoa(objSubTypeMessageWithdrawRcv) + `, ` + strconv.Itoa(objSubTypeMessageGDepositAck) + `)
WHERE om.obj_type_id = ` + strconv.Itoa(objTypeMessage) + `
AND om.obj_sub_type_id in (` + strconv.Itoa(objSubTypeMessageWithdrawRcv) + `, ` + strconv.Itoa(objSubTypeMessageGDepositAck) + `)
AND omi.obj_id = o.id
AND oi.id = omi.item_id
ORDER BY om.sender_user_id ASC
,omi.item_id ASC;`)
failOnError(err, "initDB : create view obj_msg_vault_v")
@ -604,8 +605,6 @@ func initDB() {
}
func insertMsgItem(objId int64, itemId int64, quantity int64) error {
log.Printf("insertMsgItem inserting (%d, %d, %d)\n", objId, itemId, quantity)
stmt, err := db.Prepare(`INSERT INTO obj_msg_item (obj_id, item_id, quantity)
VALUES (?, ?, ?);`)
if err != nil {