1
This commit is contained in:
parent
5142a0fef3
commit
bec4070a8b
@ -3,10 +3,7 @@ package service
|
|||||||
import (
|
import (
|
||||||
"q5"
|
"q5"
|
||||||
"f5"
|
"f5"
|
||||||
"jccommon"
|
|
||||||
"main/constant"
|
"main/constant"
|
||||||
. "main/global"
|
|
||||||
"fmt"
|
|
||||||
)
|
)
|
||||||
|
|
||||||
func UpdateSpecTransferStatus(dbIdx int64, status int32) bool {
|
func UpdateSpecTransferStatus(dbIdx int64, status int32) bool {
|
||||||
@ -25,216 +22,3 @@ func UpdateSpecTransferStatus(dbIdx int64, status int32) bool {
|
|||||||
})
|
})
|
||||||
return dbErr == nil
|
return dbErr == nil
|
||||||
}
|
}
|
||||||
|
|
||||||
func OpenGoldBullion(accountId string, accountAddress string, netId int32, tokenId string) bool {
|
|
||||||
GetTaskMgr().LockOpenGodBullion()
|
|
||||||
defer GetTaskMgr().UnLockOpenGodBullion()
|
|
||||||
|
|
||||||
if !AccountIdExistsAndIgnoreError(accountId) {
|
|
||||||
return false
|
|
||||||
}
|
|
||||||
|
|
||||||
var itemId int32
|
|
||||||
if !GetNoOpenGoldBullionItemIdByTokenId(tokenId, &itemId) {
|
|
||||||
return false
|
|
||||||
}
|
|
||||||
goldNum := jccommon.GetGoldBullionGoldNum(itemId)
|
|
||||||
if goldNum <= 0 {
|
|
||||||
return false
|
|
||||||
}
|
|
||||||
|
|
||||||
{
|
|
||||||
var dbErr error
|
|
||||||
nowTime := f5.GetApp().GetRealSeconds()
|
|
||||||
f5.GetGoStyleDb().Update(
|
|
||||||
constant.GAME_DB,
|
|
||||||
"t_gold_bullion",
|
|
||||||
[][]string {
|
|
||||||
{"token_id", tokenId},
|
|
||||||
{"status", q5.ToString(jccommon.GOLD_BULLION_NO_OPEN)},
|
|
||||||
},
|
|
||||||
[][]string {
|
|
||||||
{"status", q5.ToString(jccommon.GOLD_BULLION_OPENED)},
|
|
||||||
{"open_status", q5.ToString(jccommon.GOLD_BULLION_OPEN_STATUS_SENT)},
|
|
||||||
{"open_address", accountAddress},
|
|
||||||
{"open_time", q5.ToString(nowTime)},
|
|
||||||
{"open_account_id", accountId},
|
|
||||||
},
|
|
||||||
func (err error, lastInsertId int64, rowsAffected int64) {
|
|
||||||
dbErr = err
|
|
||||||
})
|
|
||||||
if dbErr != nil {
|
|
||||||
return false
|
|
||||||
}
|
|
||||||
}
|
|
||||||
{
|
|
||||||
if !UserAddGold(accountId, goldNum, netId, tokenId, constant.USER_ADD_GOLD_REASON_USE) {
|
|
||||||
return false
|
|
||||||
}
|
|
||||||
}
|
|
||||||
{
|
|
||||||
var dbErr error
|
|
||||||
f5.GetGoStyleDb().Update(
|
|
||||||
constant.GAME_DB,
|
|
||||||
"t_gold_bullion",
|
|
||||||
[][]string {
|
|
||||||
{"token_id", tokenId},
|
|
||||||
{"status", q5.ToString(jccommon.GOLD_BULLION_OPENED)},
|
|
||||||
},
|
|
||||||
[][]string {
|
|
||||||
{"open_status", q5.ToString(jccommon.GOLD_BULLION_OPEN_STATUS_RECEIVED)},
|
|
||||||
},
|
|
||||||
func (err error, lastInsertId int64, rowsAffected int64) {
|
|
||||||
dbErr = err
|
|
||||||
})
|
|
||||||
if dbErr != nil {
|
|
||||||
return false
|
|
||||||
}
|
|
||||||
}
|
|
||||||
return true
|
|
||||||
}
|
|
||||||
|
|
||||||
func ReturnGoldBullion(accountId string, netId int32, tokenId string) bool {
|
|
||||||
GetTaskMgr().LockOpenGodBullion()
|
|
||||||
defer GetTaskMgr().UnLockOpenGodBullion()
|
|
||||||
|
|
||||||
if !AccountIdExistsAndIgnoreError(accountId) {
|
|
||||||
return false
|
|
||||||
}
|
|
||||||
|
|
||||||
var itemId int32
|
|
||||||
if !GetNoOpenGoldBullionItemIdByTokenId(tokenId, &itemId) {
|
|
||||||
return false
|
|
||||||
}
|
|
||||||
goldNum := jccommon.GetGoldBullionGoldNum(itemId)
|
|
||||||
if goldNum <= 0 {
|
|
||||||
return false
|
|
||||||
}
|
|
||||||
|
|
||||||
{
|
|
||||||
goldNumStr := q5.ToString(goldNum)
|
|
||||||
if goldNum == 1000 {
|
|
||||||
goldNumStr = "1,000"
|
|
||||||
} else if goldNum == 10000 {
|
|
||||||
goldNumStr = "10,000"
|
|
||||||
}
|
|
||||||
nowTime := f5.GetApp().GetRealSeconds()
|
|
||||||
subject := "gold return"
|
|
||||||
content := fmt.Sprintf("We regret to inform you that the minting of your Gold Card has failed. The %s gold has been refunded to your account. Please check your balance to confirm the refund.", goldNumStr)
|
|
||||||
uniKey := fmt.Sprintf("gold_bullion.return:%d_%s", netId, tokenId)
|
|
||||||
sendOk := SendSysMail(
|
|
||||||
uniKey,
|
|
||||||
accountId,
|
|
||||||
subject,
|
|
||||||
content,
|
|
||||||
q5.ToInt32(nowTime),
|
|
||||||
q5.ToInt32(nowTime) + 3600 * 24 * 14,
|
|
||||||
jccommon.MAIL_TAG1_GOLD_BULLION,
|
|
||||||
jccommon.MAIL_TAG2_GOLD_BULLION_RETURN)
|
|
||||||
if !sendOk {
|
|
||||||
return false
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
{
|
|
||||||
var dbErr error
|
|
||||||
returned := false
|
|
||||||
f5.GetGoStyleDb().OrmSelectOne(
|
|
||||||
constant.GAME_DB,
|
|
||||||
"t_gold_bullion_return",
|
|
||||||
[][]string {
|
|
||||||
{"net_id", q5.ToString(netId)},
|
|
||||||
{"token_id", tokenId},
|
|
||||||
},
|
|
||||||
func (err error, ds *f5.DataSet) {
|
|
||||||
dbErr = err
|
|
||||||
if err != nil {
|
|
||||||
return
|
|
||||||
}
|
|
||||||
if ds.Next() {
|
|
||||||
returned = true
|
|
||||||
}
|
|
||||||
})
|
|
||||||
if dbErr != nil {
|
|
||||||
return false
|
|
||||||
}
|
|
||||||
if returned {
|
|
||||||
return false
|
|
||||||
}
|
|
||||||
}
|
|
||||||
{
|
|
||||||
var dbErr error
|
|
||||||
nowTime := f5.GetApp().GetRealSeconds()
|
|
||||||
f5.GetGoStyleDb().Upsert(
|
|
||||||
constant.GAME_DB,
|
|
||||||
"t_gold_bullion_return",
|
|
||||||
[][]string {
|
|
||||||
{"token_id", tokenId},
|
|
||||||
},
|
|
||||||
[][]string {},
|
|
||||||
[][]string {
|
|
||||||
{"account_id", accountId},
|
|
||||||
{"token_id", tokenId},
|
|
||||||
{"net_id", q5.ToString(netId)},
|
|
||||||
{"item_id", q5.ToString(itemId)},
|
|
||||||
{"gold", q5.ToString(goldNum)},
|
|
||||||
{"createtime", q5.ToString(nowTime)},
|
|
||||||
{"modifytime", q5.ToString(nowTime)},
|
|
||||||
},
|
|
||||||
func (err error, lastInsertId int64, rowsAffected int64) {
|
|
||||||
dbErr = err
|
|
||||||
})
|
|
||||||
if dbErr != nil {
|
|
||||||
return false
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
{
|
|
||||||
var dbErr error
|
|
||||||
nowTime := f5.GetApp().GetRealSeconds()
|
|
||||||
f5.GetGoStyleDb().Update(
|
|
||||||
constant.GAME_DB,
|
|
||||||
"t_gold_bullion",
|
|
||||||
[][]string {
|
|
||||||
{"token_id", tokenId},
|
|
||||||
},
|
|
||||||
[][]string {
|
|
||||||
{"return_status", q5.ToString(1)},
|
|
||||||
{"returned", q5.ToString(1)},
|
|
||||||
{"return_time", q5.ToString(nowTime)},
|
|
||||||
},
|
|
||||||
func (err error, lastInsertId int64, rowsAffected int64) {
|
|
||||||
dbErr = err
|
|
||||||
})
|
|
||||||
if dbErr != nil {
|
|
||||||
return false
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
{
|
|
||||||
if !UserAddGold(accountId, goldNum, netId, tokenId, constant.USER_ADD_GOLD_REASON_RETURN) {
|
|
||||||
return false
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
{
|
|
||||||
var dbErr error
|
|
||||||
f5.GetGoStyleDb().Update(
|
|
||||||
constant.GAME_DB,
|
|
||||||
"t_gold_bullion",
|
|
||||||
[][]string {
|
|
||||||
{"token_id", tokenId},
|
|
||||||
},
|
|
||||||
[][]string {
|
|
||||||
{"return_status", q5.ToString(2)},
|
|
||||||
},
|
|
||||||
func (err error, lastInsertId int64, rowsAffected int64) {
|
|
||||||
dbErr = err
|
|
||||||
})
|
|
||||||
if dbErr != nil {
|
|
||||||
return false
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
return true
|
|
||||||
}
|
|
||||||
|
@ -1,217 +0,0 @@
|
|||||||
package task
|
|
||||||
|
|
||||||
import (
|
|
||||||
"q5"
|
|
||||||
"f5"
|
|
||||||
"fmt"
|
|
||||||
"strings"
|
|
||||||
"mt"
|
|
||||||
"jccommon"
|
|
||||||
"main/constant"
|
|
||||||
"main/service"
|
|
||||||
"math/rand"
|
|
||||||
)
|
|
||||||
|
|
||||||
type lockReturnValues struct {
|
|
||||||
Nft string `json:"nft"`
|
|
||||||
Sender string `json:"sender"`
|
|
||||||
To string `json:"to"`
|
|
||||||
TokenIds []string `json:"tokenIds"`
|
|
||||||
}
|
|
||||||
|
|
||||||
type nftLock struct {
|
|
||||||
mailCfgHash *q5.ConcurrentMap[string, *jccommon.MailConfig]
|
|
||||||
}
|
|
||||||
|
|
||||||
func (this* nftLock) init() {
|
|
||||||
this.mailCfgHash = new(q5.ConcurrentMap[string, *jccommon.MailConfig])
|
|
||||||
this.registerMailConfig(constant.MAIL_GOLD_BULLION_LOCK,
|
|
||||||
jccommon.MAIL_TAG1_GOLD_BULLION,
|
|
||||||
jccommon.MAIL_TAG2_GOLD_BULLION_LOCK)
|
|
||||||
go this.process()
|
|
||||||
}
|
|
||||||
|
|
||||||
func (this* nftLock) unInit() {
|
|
||||||
}
|
|
||||||
|
|
||||||
func (this* nftLock) process() {
|
|
||||||
f5.GetGoStyleDb().LoopLoad(
|
|
||||||
constant.BCEVENT_DB,
|
|
||||||
"nftLock",
|
|
||||||
"t_nft_lock_event",
|
|
||||||
func () int64 {
|
|
||||||
return 3
|
|
||||||
},
|
|
||||||
func (lastIdx int64) string {
|
|
||||||
sql := fmt.Sprintf(`
|
|
||||||
SELECT * FROM t_nft_lock_event WHERE idx > %d AND (nft_sync_status = 0 OR nft_use_status = 0) LIMIT 100`,
|
|
||||||
lastIdx,
|
|
||||||
)
|
|
||||||
return sql
|
|
||||||
},
|
|
||||||
[]string{
|
|
||||||
},
|
|
||||||
func () int64 {
|
|
||||||
return 3
|
|
||||||
},
|
|
||||||
func () int64 {
|
|
||||||
return 60 + q5.ToInt64(rand.Intn(3))
|
|
||||||
},
|
|
||||||
this.repair)
|
|
||||||
}
|
|
||||||
|
|
||||||
func (this* nftLock) repair(ds *f5.DataSet) bool {
|
|
||||||
nftSyncStatus := q5.ToInt32(ds.GetByName("nft_sync_status"))
|
|
||||||
nftUseStatus := q5.ToInt32(ds.GetByName("nft_use_status"))
|
|
||||||
netId := q5.ToInt32(ds.GetByName("net_id"))
|
|
||||||
idx := q5.ToInt64(ds.GetByName("idx"))
|
|
||||||
lockTo := ds.GetByName("lock_to")
|
|
||||||
lockSender := ds.GetByName("lock_sender")
|
|
||||||
if nftSyncStatus == 0 && lockTo != "" {
|
|
||||||
p := new(lockReturnValues)
|
|
||||||
if q5.DecodeJson(ds.GetByName("return_values"), p) == nil {
|
|
||||||
for _, val := range p.TokenIds {
|
|
||||||
contractAddress := strings.ToLower(p.Nft)
|
|
||||||
tokenId := val
|
|
||||||
if service.NftExists(netId, contractAddress, tokenId) {
|
|
||||||
service.NftUpdateLock(netId, contractAddress, tokenId, idx, lockTo, lockSender)
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
if nftUseStatus == 0 {
|
|
||||||
p := new(lockReturnValues)
|
|
||||||
if q5.DecodeJson(ds.GetByName("return_values"), p) == nil {
|
|
||||||
this.useNft(idx, netId, lockTo, p)
|
|
||||||
}
|
|
||||||
}
|
|
||||||
return true
|
|
||||||
}
|
|
||||||
|
|
||||||
func (this *nftLock) useNft(dbIdx int64, netId int32, lockTo string, p *lockReturnValues) {
|
|
||||||
lockTo = strings.ToLower(lockTo)
|
|
||||||
contractAddress := strings.ToLower(p.Nft)
|
|
||||||
|
|
||||||
goldMeta := mt.Table.Contract.GetByNetIdName(netId, jccommon.CONTRACT_NAME_GoldBrick)
|
|
||||||
if goldMeta == nil {
|
|
||||||
return
|
|
||||||
}
|
|
||||||
if contractAddress != strings.ToLower(goldMeta.GetAddress()) {
|
|
||||||
f5.GetGoStyleDb().Update(
|
|
||||||
constant.BCEVENT_DB,
|
|
||||||
"t_nft_lock_event",
|
|
||||||
[][]string {
|
|
||||||
{"idx", q5.ToString(dbIdx)},
|
|
||||||
},
|
|
||||||
[][]string {
|
|
||||||
{"nft_use_status", q5.ToString(1)},
|
|
||||||
},
|
|
||||||
func (err error, lastInsertId int64, rowsAffected int64) {
|
|
||||||
})
|
|
||||||
return
|
|
||||||
}
|
|
||||||
accountId := service.GetAccountIdByAddress(lockTo)
|
|
||||||
if accountId == "" {
|
|
||||||
return
|
|
||||||
}
|
|
||||||
ok := true
|
|
||||||
for _, tokenId := range p.TokenIds {
|
|
||||||
var itemId int32
|
|
||||||
if service.GetGoldBullionByNetIdTokenId(netId, tokenId, &itemId) {
|
|
||||||
if service.OpenGoldBullion(accountId, lockTo, netId, tokenId) {
|
|
||||||
if this.internalSendMail(dbIdx, lockTo, constant.MAIL_GOLD_BULLION_LOCK, tokenId) {
|
|
||||||
|
|
||||||
} else {
|
|
||||||
ok = false
|
|
||||||
break
|
|
||||||
}
|
|
||||||
} else {
|
|
||||||
ok = false
|
|
||||||
break
|
|
||||||
}
|
|
||||||
} else {
|
|
||||||
ok = false
|
|
||||||
break
|
|
||||||
}
|
|
||||||
}
|
|
||||||
if ok {
|
|
||||||
f5.GetGoStyleDb().Update(
|
|
||||||
constant.BCEVENT_DB,
|
|
||||||
"t_nft_lock_event",
|
|
||||||
[][]string {
|
|
||||||
{"idx", q5.ToString(dbIdx)},
|
|
||||||
},
|
|
||||||
[][]string {
|
|
||||||
{"nft_use_status", q5.ToString(1)},
|
|
||||||
},
|
|
||||||
func (err error, lastInsertId int64, rowsAffected int64) {
|
|
||||||
})
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
func (this* nftLock) internalSendMail(dbIdx int64, accountAddress string, mailName string, tokenId string) bool {
|
|
||||||
var itemId int32
|
|
||||||
if !service.GetGoldBullionItemIdByTokenId(tokenId, &itemId) {
|
|
||||||
return true
|
|
||||||
}
|
|
||||||
goldNum := jccommon.GetGoldBullionGoldNum(itemId)
|
|
||||||
goldNumStr := this.formatGoldNum(goldNum)
|
|
||||||
itemMeta := mt.Table.Item.GetById(q5.ToInt64(itemId))
|
|
||||||
if itemMeta == nil {
|
|
||||||
return true
|
|
||||||
}
|
|
||||||
accountId := service.GetAccountIdByAddress(accountAddress)
|
|
||||||
if accountId == "" {
|
|
||||||
return true
|
|
||||||
}
|
|
||||||
mailMeta := mt.Table.Mail.GetByName(mailName)
|
|
||||||
if mailMeta == nil {
|
|
||||||
return true
|
|
||||||
}
|
|
||||||
mailCfg := this.getMailConfig(mailName)
|
|
||||||
if mailCfg == nil {
|
|
||||||
return true
|
|
||||||
}
|
|
||||||
nowTime := f5.GetApp().GetRealSeconds()
|
|
||||||
subject := mailMeta.GetTitle()
|
|
||||||
content := mailMeta.ReplaceContent(map[string]string{
|
|
||||||
"${item.name}": itemMeta.GetRealName(),
|
|
||||||
"${gold}": goldNumStr,
|
|
||||||
})
|
|
||||||
uniKey := fmt.Sprintf("%s_%s_%d", mailName, tokenId, dbIdx)
|
|
||||||
sendOk := service.SendSysMail(
|
|
||||||
uniKey,
|
|
||||||
accountId,
|
|
||||||
subject,
|
|
||||||
content,
|
|
||||||
q5.ToInt32(nowTime),
|
|
||||||
q5.ToInt32(nowTime) + 3600 * 24 * 7,
|
|
||||||
mailCfg.Tag1,
|
|
||||||
mailCfg.Tag2)
|
|
||||||
return sendOk
|
|
||||||
}
|
|
||||||
|
|
||||||
func (this *nftLock) formatGoldNum(goldNum int32) string {
|
|
||||||
if goldNum == 1000 {
|
|
||||||
return "1,000"
|
|
||||||
} else if goldNum == 10000 {
|
|
||||||
return "10,000"
|
|
||||||
}
|
|
||||||
return q5.ToString(goldNum)
|
|
||||||
}
|
|
||||||
|
|
||||||
func (this *nftLock) getMailConfig(mailName string) *jccommon.MailConfig {
|
|
||||||
if v, ok := this.mailCfgHash.Load(mailName); ok {
|
|
||||||
return *v
|
|
||||||
} else {
|
|
||||||
return nil
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
func (this *nftLock) registerMailConfig(mailName string, tag1 int32, tag2 int32) {
|
|
||||||
p := new(jccommon.MailConfig)
|
|
||||||
p.MailName = mailName
|
|
||||||
p.Tag1 = tag1
|
|
||||||
p.Tag2 = tag2
|
|
||||||
this.mailCfgHash.Store(mailName, p)
|
|
||||||
}
|
|
Loading…
x
Reference in New Issue
Block a user