298 lines
6.6 KiB
Go
298 lines
6.6 KiB
Go
package service
|
|
|
|
import (
|
|
"q5"
|
|
"f5"
|
|
"jccommon"
|
|
"main/constant"
|
|
)
|
|
|
|
func GetNftItemIdQuality(netId int32, contractAddress string, tokenId string,
|
|
itemId *int32, quality *int32) {
|
|
f5.GetGoStyleDb().OrmSelectOne(
|
|
constant.BCNFT_DB,
|
|
"t_nft",
|
|
[][]string {
|
|
{"net_id", q5.ToString(netId)},
|
|
{"contract_address", contractAddress},
|
|
{"token_id", tokenId},
|
|
},
|
|
func (err error, ds *f5.DataSet) {
|
|
if err != nil {
|
|
return
|
|
}
|
|
if ds.Next() {
|
|
*itemId = q5.ToInt32(ds.GetByName("item_id"))
|
|
*quality = q5.ToInt32(ds.GetByName("quality"))
|
|
tokenType := q5.ToInt32(ds.GetByName("token_type"))
|
|
if tokenType == jccommon.NFT_TYPE_CFHERO ||
|
|
tokenType == jccommon.NFT_TYPE_CFHERO_NORMAL {
|
|
f5.GetGoStyleDb().OrmSelectOne(
|
|
constant.GAME_DB,
|
|
"t_hero",
|
|
[][]string {
|
|
{"token_id", tokenId},
|
|
},
|
|
func (err error, ds *f5.DataSet) {
|
|
if err != nil {
|
|
return
|
|
}
|
|
if ds.Next() {
|
|
*quality = q5.ToInt32(ds.GetByName("quality"))
|
|
}
|
|
})
|
|
}
|
|
}
|
|
})
|
|
}
|
|
|
|
func GetHeroByTokenId(tokenId string, itemId *int32, heroQuality *int32) bool {
|
|
result := false
|
|
f5.GetGoStyleDb().OrmSelectOne(
|
|
constant.GAME_DB,
|
|
"t_hero",
|
|
[][]string {
|
|
{"token_id", tokenId},
|
|
},
|
|
func (err error, ds *f5.DataSet) {
|
|
if err != nil {
|
|
return
|
|
}
|
|
if ds.Next() {
|
|
*itemId = q5.ToInt32(ds.GetByName("hero_id"))
|
|
*heroQuality = q5.ToInt32(ds.GetByName("quality"))
|
|
result = true
|
|
}
|
|
})
|
|
return result
|
|
}
|
|
|
|
func GetGoldBullionByNetIdTokenId(netId int32, tokenId string, itemId *int32) bool {
|
|
result := false
|
|
f5.GetGoStyleDb().OrmSelectOne(
|
|
constant.GAME_DB,
|
|
"t_gold_bullion",
|
|
[][]string {
|
|
{"net_id", q5.ToString(netId)},
|
|
{"token_id", tokenId},
|
|
},
|
|
func (err error, ds *f5.DataSet) {
|
|
if err != nil {
|
|
return
|
|
}
|
|
if ds.Next() {
|
|
*itemId = q5.ToInt32(ds.GetByName("item_id"))
|
|
result = true
|
|
}
|
|
})
|
|
return result
|
|
}
|
|
|
|
func GetGoldBullionItemIdByTokenId(tokenId string, itemId *int32) bool {
|
|
result := false
|
|
f5.GetGoStyleDb().OrmSelectOne(
|
|
constant.GAME_DB,
|
|
"t_gold_bullion",
|
|
[][]string {
|
|
{"token_id", tokenId},
|
|
},
|
|
func (err error, ds *f5.DataSet) {
|
|
if err != nil {
|
|
return
|
|
}
|
|
if ds.Next() {
|
|
*itemId = q5.ToInt32(ds.GetByName("item_id"))
|
|
result = true
|
|
}
|
|
})
|
|
return result
|
|
}
|
|
|
|
func GetNoOpenGoldBullionItemIdByTokenId(tokenId string, itemId *int32) bool {
|
|
result := false
|
|
f5.GetGoStyleDb().OrmSelectOne(
|
|
constant.GAME_DB,
|
|
"t_gold_bullion",
|
|
[][]string {
|
|
{"token_id", tokenId},
|
|
{"status", q5.ToString(jccommon.GOLD_BULLION_NO_OPEN)},
|
|
},
|
|
func (err error, ds *f5.DataSet) {
|
|
if err != nil {
|
|
return
|
|
}
|
|
if ds.Next() {
|
|
*itemId = q5.ToInt32(ds.GetByName("item_id"))
|
|
result = true
|
|
}
|
|
})
|
|
return result
|
|
}
|
|
|
|
func NftExists(netId int32, contractAddress string, tokenId string) bool {
|
|
result := false
|
|
f5.GetGoStyleDb().OrmSelectOne(
|
|
constant.BCNFT_DB,
|
|
"t_nft",
|
|
[][]string {
|
|
{"net_id", q5.ToString(netId)},
|
|
{"token_id", tokenId},
|
|
{"contract_address", contractAddress},
|
|
},
|
|
func (err error, ds *f5.DataSet) {
|
|
if err != nil {
|
|
return
|
|
}
|
|
if ds.Next() {
|
|
result = true
|
|
}
|
|
})
|
|
return result
|
|
}
|
|
|
|
func NftUpdateLock(netId int32, contractAddress string, tokenId string,
|
|
lockIdx int64, lockAddress string, lockSender string) bool {
|
|
nowTime := f5.GetApp().GetRealSeconds()
|
|
result := false
|
|
f5.GetGoStyleDb().UpsertEx(
|
|
constant.BCNFT_DB,
|
|
"t_nft",
|
|
[][]string {
|
|
{"net_id", q5.ToString(netId)},
|
|
{"token_id", tokenId},
|
|
{"contract_address", contractAddress},
|
|
},
|
|
[][]string {
|
|
{"last_lock_idx", q5.ToString(lockIdx)},
|
|
{"last_lock_address", lockAddress},
|
|
{"last_lock_sender", lockSender},
|
|
{"last_lock_time", q5.ToString(nowTime)},
|
|
},
|
|
[][]string {},
|
|
func (err error, lastInsertId int64, rowsAffected int64) {
|
|
if err != nil {
|
|
return
|
|
}
|
|
result = true
|
|
},
|
|
func (ds *f5.DataSet) bool {
|
|
return lockIdx > q5.ToInt64(ds.GetByName("last_lock_idx"))
|
|
})
|
|
return result
|
|
}
|
|
|
|
func RepiarHeroQuality() error {
|
|
var resultErr error
|
|
nftDatas := []*jccommon.NftIdentityAndExtData{}
|
|
{
|
|
f5.GetGoStyleDb().OrmSelect(
|
|
constant.BCNFT_DB,
|
|
"t_nft",
|
|
[][]string{
|
|
{"token_type", q5.ToString(jccommon.NFT_TYPE_CFHERO)},
|
|
},
|
|
func (err error, ds *f5.DataSet) {
|
|
resultErr = err
|
|
if err != nil {
|
|
return
|
|
}
|
|
for ds.Next() {
|
|
p := new(jccommon.NftIdentityAndExtData)
|
|
p.LoadFromDb(ds)
|
|
q5.AppendSlice(&nftDatas, p);
|
|
}
|
|
})
|
|
if resultErr == nil {
|
|
f5.GetGoStyleDb().OrmSelect(
|
|
constant.BCNFT_DB,
|
|
"t_nft",
|
|
[][]string{
|
|
{"token_type", q5.ToString(jccommon.NFT_TYPE_CFHERO_NORMAL)},
|
|
},
|
|
func (err error, ds *f5.DataSet) {
|
|
resultErr = err
|
|
if err != nil {
|
|
return
|
|
}
|
|
for ds.Next() {
|
|
p := new(jccommon.NftIdentityAndExtData)
|
|
p.LoadFromDb(ds)
|
|
q5.AppendSlice(&nftDatas, p);
|
|
}
|
|
})
|
|
}
|
|
}
|
|
procBatchFunc := func(batch []*jccommon.NftIdentityAndExtData) {
|
|
if len(batch) <= 0 {
|
|
return
|
|
}
|
|
sql := "SELECT token_id, hero_id, quality FROM t_hero WHERE token_id IN ("
|
|
params := []string{}
|
|
tokenIdQualityHash := map[string]*jccommon.NftIdentityAndExtData{}
|
|
{
|
|
inited := false
|
|
for _, val := range batch {
|
|
if !inited {
|
|
sql += "?"
|
|
} else {
|
|
sql += ", ?"
|
|
}
|
|
q5.AppendSlice(¶ms, val.TokenId)
|
|
tokenIdQualityHash[val.TokenId] = val
|
|
}
|
|
}
|
|
f5.GetGoStyleDb().RawQuery(
|
|
constant.GAME_DB,
|
|
sql,
|
|
params,
|
|
func (err error, ds *f5.DataSet) {
|
|
if err != nil {
|
|
return
|
|
}
|
|
for ds.Next() {
|
|
tokenId := ds.GetByName("token_id")
|
|
quality := q5.ToInt32(ds.GetByName("quality"))
|
|
if val, ok := tokenIdQualityHash[tokenId]; ok && val.Quality != quality {
|
|
}
|
|
}
|
|
})
|
|
}
|
|
if resultErr == nil && len(nftDatas) > 0 {
|
|
batchNftQuality := []*jccommon.NftIdentityAndExtData{}
|
|
for _, val := range nftDatas {
|
|
if len(batchNftQuality) < 100 {
|
|
q5.AppendSlice(&batchNftQuality, val)
|
|
} else {
|
|
procBatchFunc(batchNftQuality)
|
|
batchNftQuality = []*jccommon.NftIdentityAndExtData{}
|
|
}
|
|
}
|
|
if len(batchNftQuality) > 0 {
|
|
procBatchFunc(batchNftQuality)
|
|
}
|
|
}
|
|
return resultErr
|
|
}
|
|
|
|
func updateNftItemIdQuality(netId int32, contractAddress string, tokenId string,
|
|
itemId int32, quality int32) error {
|
|
var resultErr error
|
|
f5.GetGoStyleDb().Update(
|
|
constant.BCNFT_DB,
|
|
"t_nft",
|
|
[][]string {
|
|
{"net_id", q5.ToString(netId)},
|
|
{"contract_address", contractAddress},
|
|
{"token_id", tokenId},
|
|
{"item_id", q5.ToString(0)},
|
|
},
|
|
[][]string {
|
|
{"item_id", q5.ToString(itemId)},
|
|
{"quality", q5.ToString(quality)},
|
|
},
|
|
func (err error, lastInsertId int64, rowsAffected int64) {
|
|
resultErr = err
|
|
})
|
|
return resultErr
|
|
}
|