数据线程安全locker

This commit is contained in:
renhaoting 2025-12-25 18:51:56 +08:00
parent ab540875e6
commit 3fa2c5638f
1 changed files with 32 additions and 37 deletions

View File

@ -10,7 +10,6 @@ import com.gamedog.vididin.VidiConst
import com.gamedog.vididin.VidiConst.ZEROBUY_SECRET import com.gamedog.vididin.VidiConst.ZEROBUY_SECRET
import com.gamedog.vididin.VididinEvents import com.gamedog.vididin.VididinEvents
import com.gamedog.vididin.beans.ZeroBuyItem import com.gamedog.vididin.beans.ZeroBuyItem
import com.gamedog.vididin.beans.ZeroBuyResp
import com.gamedog.vididin.beans.ZeroBuyWithdrawResp import com.gamedog.vididin.beans.ZeroBuyWithdrawResp
import com.gamedog.vididin.core.login.login.AccountManager import com.gamedog.vididin.core.login.login.AccountManager
import com.gamedog.vididin.features.withdraw.dialogs.WithdrawBindBankDialog import com.gamedog.vididin.features.withdraw.dialogs.WithdrawBindBankDialog
@ -27,7 +26,7 @@ import kotlinx.coroutines.CoroutineScope
import kotlinx.coroutines.Dispatchers import kotlinx.coroutines.Dispatchers
import kotlinx.coroutines.SupervisorJob import kotlinx.coroutines.SupervisorJob
import kotlinx.coroutines.launch import kotlinx.coroutines.launch
import kotlinx.coroutines.withContext import java.util.concurrent.locks.ReentrantLock
import kotlin.Int import kotlin.Int
@ -50,6 +49,8 @@ class ZeroManager private constructor() {
SpUtil.instance().getList<WinZeroWithdrawInfoItem>(SpUtil.KEY_ZEROBUY_WIN_ITEMS).toMutableList() SpUtil.instance().getList<WinZeroWithdrawInfoItem>(SpUtil.KEY_ZEROBUY_WIN_ITEMS).toMutableList()
} }
private val mRecordLocker = ReentrantLock()
private fun saveWinWithdrawInfos() { private fun saveWinWithdrawInfos() {
SpUtil.instance().putList(SpUtil.KEY_ZEROBUY_WIN_ITEMS, mWinZeroList) SpUtil.instance().putList(SpUtil.KEY_ZEROBUY_WIN_ITEMS, mWinZeroList)
notifyChangeUpdate() notifyChangeUpdate()
@ -69,63 +70,57 @@ class ZeroManager private constructor() {
if (it.contains(userId) && zeroItem.completed) { if (it.contains(userId) && zeroItem.completed) {
var alreadyExist = false var alreadyExist = false
mWinZeroList.forEach { try {
if (it.purchase_id == zeroItem.id) { mRecordLocker.lock()
alreadyExist = true mWinZeroList.forEach {
return@forEach if (it.purchase_id == zeroItem.id) {
alreadyExist = true
return@forEach
}
} }
}
if (!alreadyExist) { if (!alreadyExist) {
mWinZeroList.add(WinZeroWithdrawInfoItem(zeroItem.id, zeroItem.title, zeroItem.price)) mWinZeroList.add(WinZeroWithdrawInfoItem(zeroItem.id, zeroItem.title, zeroItem.price))
saveWinWithdrawInfos() saveWinWithdrawInfos()
}
} finally {
mRecordLocker.unlock()
} }
} }
} }
} }
fun getZeroWithdrawItem(zeroItem: ZeroBuyItem): WinZeroWithdrawInfoItem { fun getZeroWithdrawItem(zeroItem: ZeroBuyItem): WinZeroWithdrawInfoItem {
return mWinZeroList.filter { zeroItem.id == it.purchase_id }[0] try {
mRecordLocker.lock()
return mWinZeroList.filter { zeroItem.id == it.purchase_id }[0]
} finally {
mRecordLocker.unlock()
}
} }
fun couldStartWithdraw(zeroItem: ZeroBuyItem): Boolean { fun couldStartWithdraw(zeroItem: ZeroBuyItem): Boolean {
val userId = AccountManager.getAccount().userId val userId = AccountManager.getAccount().userId
zeroItem.winners?.let { zeroItem.winners?.let {
if (it.contains(userId) && zeroItem.completed) { if (it.contains(userId) && zeroItem.completed) {
mWinZeroList.forEach { try {
if (it.purchase_id == zeroItem.id) { mRecordLocker.lock()
return it.withdrawState == TRANSACTION_STATE_UNSTART || it.withdrawState == TRANSACTION_STATE_FAIL mWinZeroList.forEach {
if (it.purchase_id == zeroItem.id) {
return it.withdrawState == TRANSACTION_STATE_UNSTART || it.withdrawState == TRANSACTION_STATE_FAIL
}
} }
addWinWithdrawItem(zeroItem)
return true
} finally {
mRecordLocker.unlock()
} }
addWinWithdrawItem(zeroItem)
return true
} }
} }
return false return false
} }
fun startWithdrawForWinPurchase(zeroItem: ZeroBuyItem) {
if (couldStartWithdraw(zeroItem)) {
/*when (it.withdrawState) {
TRANSACTION_STATE_UNSTART -> {
}
TRANSACTION_STATE_ONGOING -> {
}
TRANSACTION_STATE_SUCCESS -> {
}
TRANSACTION_STATE_FAIL -> {
}
}*/
}
}
private fun requestWithdrawZeroReward(zeroWithdrawItem: WinZeroWithdrawInfoItem) { private fun requestWithdrawZeroReward(zeroWithdrawItem: WinZeroWithdrawInfoItem) {