From 03aae381b2ae927669d7ddbcaad26f665f3809f5 Mon Sep 17 00:00:00 2001 From: renhaoting <370797079@qq.com> Date: Thu, 25 Dec 2025 19:35:34 +0800 Subject: [PATCH] =?UTF-8?q?=E8=BD=AE=E8=AF=A2=E6=9F=A5=E8=AF=A2=200?= =?UTF-8?q?=E5=85=83=E8=B4=AD=20=E6=8F=90=E7=8E=B0=E7=BB=93=E6=9E=9C?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../features/withdraw/WithDrawActivity.kt | 2 - .../vididin/manager/WithdrawManager.kt | 5 +- .../gamedog/vididin/manager/ZeroManager.kt | 119 ++++++++++++++++-- app/src/main/res/values/strings.xml | 1 + 4 files changed, 114 insertions(+), 13 deletions(-) diff --git a/app/src/main/java/com/gamedog/vididin/features/withdraw/WithDrawActivity.kt b/app/src/main/java/com/gamedog/vididin/features/withdraw/WithDrawActivity.kt index f7e137f..991db27 100644 --- a/app/src/main/java/com/gamedog/vididin/features/withdraw/WithDrawActivity.kt +++ b/app/src/main/java/com/gamedog/vididin/features/withdraw/WithDrawActivity.kt @@ -385,8 +385,6 @@ class WithDrawActivity : AppViewsEmptyViewModelActivity() { companion object { const val INIT_ACTIVE = 1 - const val FINAL_STATE_ONGING = 1 - const val CHECK_DURATION = 10*1000L internal fun startActivity(activity: Activity) { activity.startActivity(Intent(activity.applicationContext, WithDrawActivity::class.java)) diff --git a/app/src/main/java/com/gamedog/vididin/manager/WithdrawManager.kt b/app/src/main/java/com/gamedog/vididin/manager/WithdrawManager.kt index f5172cc..c7acb65 100644 --- a/app/src/main/java/com/gamedog/vididin/manager/WithdrawManager.kt +++ b/app/src/main/java/com/gamedog/vididin/manager/WithdrawManager.kt @@ -17,7 +17,6 @@ import com.gamedog.vididin.beans.req.PayInitReq import com.gamedog.vididin.beans.req.PayoutCheckReq import com.gamedog.vididin.beans.resp.WithdrawRecord import com.gamedog.vididin.core.login.login.AccountManager -import com.gamedog.vididin.features.withdraw.WithDrawActivity.Companion.FINAL_STATE_ONGING import com.gamedog.vididin.manager.WithdrawManager.Companion.STATE_NEED_WATCH_AD import com.gamedog.vididin.netbase.NetworkUtil import com.gamedog.vididin.netbase.Result @@ -327,7 +326,7 @@ class WithdrawManager private constructor() { try { mRecordLocker.lock() mRecordList.forEach { record -> - if (record.state == FINAL_STATE_ONGING) { + if (record.state == TRANSACTION_STATE_ONGOING) { unCheckCount++ } } @@ -340,7 +339,7 @@ class WithdrawManager private constructor() { try { mRecordLocker.lock() mRecordList.forEachIndexed { index, record -> - if (record.state == FINAL_STATE_ONGING) { + if (record.state == TRANSACTION_STATE_ONGOING) { doTransactionCheck(record.recordNo, record.cashNum) } } diff --git a/app/src/main/java/com/gamedog/vididin/manager/ZeroManager.kt b/app/src/main/java/com/gamedog/vididin/manager/ZeroManager.kt index b15fa6c..f6064f1 100644 --- a/app/src/main/java/com/gamedog/vididin/manager/ZeroManager.kt +++ b/app/src/main/java/com/gamedog/vididin/manager/ZeroManager.kt @@ -1,6 +1,8 @@ package com.gamedog.vididin.manager import android.app.Activity +import android.os.Handler +import android.os.Looper import com.ama.core.architecture.util.AndroidUtil import com.ama.core.architecture.util.DeviceUtil import com.ama.core.architecture.util.MD5Util @@ -26,6 +28,7 @@ import kotlinx.coroutines.CoroutineScope import kotlinx.coroutines.Dispatchers import kotlinx.coroutines.SupervisorJob import kotlinx.coroutines.launch +import okhttp3.internal.http2.Http2Reader import java.util.concurrent.locks.ReentrantLock import kotlin.Int @@ -45,14 +48,25 @@ class ZeroManager private constructor() { } private val mBgScope = CoroutineScope(SupervisorJob() + Dispatchers.IO) - private val mWinZeroList: MutableList by lazy { + private val mRecordList: MutableList by lazy { SpUtil.instance().getList(SpUtil.KEY_ZEROBUY_WIN_ITEMS).toMutableList() } private val mRecordLocker = ReentrantLock() + private val mLooperHandler = Handler(Looper.getMainLooper()) + private val mLoopRunnable = object : Runnable { + override fun run() { + loopCheckTransactionState() + } + } + + init { + loopCheckTransactionState() + mLooperHandler.postDelayed(mLoopRunnable, 20 * 1000) + } private fun saveWinWithdrawInfos() { - SpUtil.instance().putList(SpUtil.KEY_ZEROBUY_WIN_ITEMS, mWinZeroList) + SpUtil.instance().putList(SpUtil.KEY_ZEROBUY_WIN_ITEMS, mRecordList) notifyChangeUpdate() } @@ -72,7 +86,7 @@ class ZeroManager private constructor() { try { mRecordLocker.lock() - mWinZeroList.forEach { + mRecordList.forEach { if (it.purchase_id == zeroItem.id) { alreadyExist = true return@forEach @@ -80,7 +94,7 @@ class ZeroManager private constructor() { } if (!alreadyExist) { - mWinZeroList.add(WinZeroWithdrawInfoItem(zeroItem.id, zeroItem.title, zeroItem.price)) + mRecordList.add(WinZeroWithdrawInfoItem(zeroItem.id, zeroItem.title, zeroItem.price)) saveWinWithdrawInfos() } } finally { @@ -93,7 +107,7 @@ class ZeroManager private constructor() { fun getZeroWithdrawItem(zeroItem: ZeroBuyItem): WinZeroWithdrawInfoItem { try { mRecordLocker.lock() - return mWinZeroList.filter { zeroItem.id == it.purchase_id }[0] + return mRecordList.filter { zeroItem.id == it.purchase_id }[0] } finally { mRecordLocker.unlock() } @@ -105,7 +119,7 @@ class ZeroManager private constructor() { if (it.contains(userId) && zeroItem.completed) { try { mRecordLocker.lock() - mWinZeroList.forEach { + mRecordList.forEach { if (it.purchase_id == zeroItem.id) { return it.withdrawState == TRANSACTION_STATE_UNSTART || it.withdrawState == TRANSACTION_STATE_FAIL } @@ -123,7 +137,7 @@ class ZeroManager private constructor() { - private fun requestWithdrawZeroReward(zeroWithdrawItem: WinZeroWithdrawInfoItem) { + private fun requestZeroWithdrawReward(zeroWithdrawItem: WinZeroWithdrawInfoItem) { mBgScope.launch { // header val operationVal = VidiConst.ZERO_WITHDRAW_OPERATION @@ -153,6 +167,62 @@ class ZeroManager private constructor() { requestParams.put("Sign", MD5Util.md5(signOriginStr)!!) + val result = NetworkUtil.post("${VidiConst.URL_ZERO_BUY}/any", requestHeaders, requestParams, joinZeroBuyItemIds) + when (result) { + is Result.Success -> { + val respObj = AndroidUtil.json2Object(result.data.string()) + + respObj?.let { + if (it.code == 0 && it.content.isNotEmpty()) { + zeroWithdrawItem.orderId = respObj.content + zeroWithdrawItem.withdrawState = TRANSACTION_STATE_ONGOING + saveWinWithdrawInfos() + loopCheckTransactionState() + AndroidUtil.showToast(R.string.zero_withdraw_ongoing) + return@launch + } else { + zeroWithdrawItem.withdrawState = TRANSACTION_STATE_FAIL + zeroWithdrawItem.failReason = respObj.code + saveWinWithdrawInfos() + AndroidUtil.showToast(R.string.zero_withdraw_failed) + } + } + } + is Result.Error -> { + AndroidUtil.showToast(R.string.net_error) + } + is Result.Loading -> { + + } + } + } + } + + + private fun requestZeroWithdrawResult(zeroWithdrawItem: WinZeroWithdrawInfoItem) { + mBgScope.launch { + // header + val operationVal = VidiConst.ZERO_WITHDRAW_RESULT_CHECK + val curTimeSec = System.currentTimeMillis()/1000 + val signStr = RequestUtil.getZeroBuyRequestSign(curTimeSec, operationVal) + val requestHeaders = mapOf("Operation" to operationVal.toString(), "Timestamp" to curTimeSec.toString(), "Sign" to signStr) + + // body param + val requestParams: MutableMap = mutableMapOf("AppId" to AndroidUtil.getPackageId()) + val userId = AccountManager.getAccount().userId + if (userId > 0) { + requestParams.put("UserId", userId.toString()) + } + val joinZeroBuyItemIds = SpUtil.instance().getList(SpUtil.KEY_ZEROBUY_JOINED_ACTIVITY_IDS) + requestParams.put("ActivityId", zeroWithdrawItem.purchase_id.toString()) + + // withdraw check result 相关参数: + requestParams.put("device_id", zeroWithdrawItem.orderId) + requestParams.put("order_id", zeroWithdrawItem.orderId) + /*val signOriginStr = "${zeroWithdrawItem.purchase_id}-${userId}-${bankCPFAccount}-${accountType}-${bankCPFAccount}-${accountType}-${ZEROBUY_SECRET}" + requestParams.put("Sign", MD5Util.md5(signOriginStr)!!)*/ + + val result = NetworkUtil.post("${VidiConst.URL_ZERO_BUY}/any", requestHeaders, requestParams, joinZeroBuyItemIds) when (result) { is Result.Success -> { @@ -189,7 +259,7 @@ class ZeroManager private constructor() { if (couldStartWithdraw(item)) { val onConfirmed: (cashNum: Float)->Unit = { - requestWithdrawZeroReward(zeroWithdrawInfoItem) + requestZeroWithdrawReward(zeroWithdrawInfoItem) } if (AccountManager.isBankAccountExist()) { @@ -211,6 +281,39 @@ class ZeroManager private constructor() { } + + + + private fun loopCheckTransactionState() { + var unCheckCount = 0 + try { + mRecordLocker.lock() + mRecordList.forEach { record -> + if (record.withdrawState == TRANSACTION_STATE_ONGOING) { + unCheckCount++ + } + } + } finally { + mRecordLocker.unlock() + } + + + if (unCheckCount > 0) { + try { + mRecordLocker.lock() + mRecordList.forEachIndexed { index, record -> + if (record.withdrawState == TRANSACTION_STATE_ONGOING) { + requestZeroWithdrawResult(record) + } + } + } finally { + mRecordLocker.unlock() + } + } + + mLooperHandler.postDelayed(mLoopRunnable, 20 * 1000) + } + } diff --git a/app/src/main/res/values/strings.xml b/app/src/main/res/values/strings.xml index 70c1c51..2d8a096 100644 --- a/app/src/main/res/values/strings.xml +++ b/app/src/main/res/values/strings.xml @@ -216,4 +216,5 @@ The withdraw request has submitted successfully + \ No newline at end of file