diff --git a/server/light_backtask/service/spec_transfer.go b/server/light_backtask/service/spec_transfer.go index b7c5be43..e26f9d36 100644 --- a/server/light_backtask/service/spec_transfer.go +++ b/server/light_backtask/service/spec_transfer.go @@ -3,10 +3,7 @@ package service import ( "q5" "f5" - "jccommon" "main/constant" - . "main/global" - "fmt" ) func UpdateSpecTransferStatus(dbIdx int64, status int32) bool { @@ -25,216 +22,3 @@ func UpdateSpecTransferStatus(dbIdx int64, status int32) bool { }) 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 -} diff --git a/server/light_backtask/task/nftlock.go b/server/light_backtask/task/nftlock.go deleted file mode 100644 index 580a29bf..00000000 --- a/server/light_backtask/task/nftlock.go +++ /dev/null @@ -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) -}