aozhiwei b031b3fda2 1
2024-07-29 11:48:58 +08:00

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(&params, 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
}