diff --git a/app/src/main/java/com/gamedog/vididin/beans/resp/WithDrawRespData.kt b/app/src/main/java/com/gamedog/vididin/beans/resp/WithDrawRespData.kt index 2b364da..3067b6e 100644 --- a/app/src/main/java/com/gamedog/vididin/beans/resp/WithDrawRespData.kt +++ b/app/src/main/java/com/gamedog/vididin/beans/resp/WithDrawRespData.kt @@ -72,9 +72,8 @@ data class PayoutData( data class PayoutReply ( var id: String? = null, - var record_no: String? = null, + var record_no: String = "", var error: Int = 0, - var hasCheckedResult: Boolean = false, ) @@ -88,4 +87,14 @@ data class PayoutCheckData(var data: PayoutCheck? = null) : BaseReply() data class PayoutCheck( var status: Int = 0, // 提现状态 1:提现中,2:提现成功,3:提现失败 var error: Int = 0, // 错误码,0成功,1失败,2签名验证失败,3客户端版本过低,4 ts长度错误 +) + + +data class WithdrawRecord ( + var id: String = "", + var recordNo: String = "", + var cashNum: Float = 0F, + var operateMs: Long = 0L, + var state: Int = 1, // 提现状态 1:提现中,2:提现成功,3:提现失败 + var failReason: Int = 0, // TODO - define various fail reasons ) \ No newline at end of file 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 7f1829b..6dc2eca 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 @@ -14,9 +14,12 @@ import com.ama.core.architecture.util.setOnClickBatch import com.gamedog.vididin.VidiConst import com.vididin.real.money.game.R import com.gamedog.vididin.VididinEvents +import com.gamedog.vididin.beans.resp.PayoutCheck import com.gamedog.vididin.beans.resp.PayoutReply +import com.gamedog.vididin.beans.resp.WithdrawRecord import com.gamedog.vididin.core.login.login.AccountManager import com.gamedog.vididin.features.withdraw.dialogs.WithdrawBindBankDialog +import com.gamedog.vididin.features.withdraw.dialogs.WithdrawFailDialog import com.gamedog.vididin.features.withdraw.dialogs.WithdrawInfoConfirmDialog import com.gamedog.vididin.features.withdraw.dialogs.WithdrawSuccessDialog import com.gamedog.vididin.features.withdraw.widget.WithDrawItemView @@ -36,11 +39,9 @@ class WithDrawActivity : AppViewsEmptyViewModelActivity(), OnTabSty private val viewModel: WithdrawViewModel by viewModels() private val mItemViewList: MutableList = mutableListOf() private var mCurSelectedIndex: Int = 0 - - - - - + private val mRecordList: MutableList by lazy { + SpUtil.instance().getList(SpUtil.KEY_WITHDRAW_HISTORY_LIST).toMutableList() + } override fun inflateViewBinding(inflater: LayoutInflater) = ViewBinding.inflate(inflater) @@ -138,11 +139,14 @@ class WithDrawActivity : AppViewsEmptyViewModelActivity(), OnTabSty VididinEvents.EVENT_AD_WATCHED_FOR_WITHDRAW -> { var withdrawNum: Float = (data.mData as Double).toFloat() - tryWithdraw(withdrawNum) + requestInit(withdrawNum) } } }, VididinEvents.Event_Account_Cash_Changed, VididinEvents.EVENT_AD_WATCHED_FOR_WITHDRAW) + + + checkTransactionState() } @@ -154,12 +158,8 @@ class WithDrawActivity : AppViewsEmptyViewModelActivity(), OnTabSty //TODO("Not yet implemented") } - private fun tryWithdraw(withdrawNum: Float) { - // withdrawInit(withdrawNum) - withdrawCheck("PGS53c1b0079fad5bf5dc71d4d6b5dfc22e") - } - private fun withdrawInit(withdrawNum: Float) { + private fun requestInit(withdrawNum: Float) { lifecycleScope.launch { repeatOnLifecycle(Lifecycle.State.STARTED) { viewModel.InitData.collect { result -> @@ -171,27 +171,32 @@ class WithDrawActivity : AppViewsEmptyViewModelActivity(), OnTabSty val reqInitBean = result.data.data reqInitBean?.let { + var errorHintRes = 0 + if (it.error == 0 && !it.uuid.isNullOrEmpty() && !it.items.isNullOrEmpty()) { val itemId = if (withdrawNum <= VidiConst.WITHDRAW_SMALL_NUM) 0 else 1 val withDrawItem = it.items?.get(itemId)!! - if (withDrawItem.status == ACTIVE) { - withdrawPayout(it.uuid!!, withDrawItem.id, withdrawNum) + if (withDrawItem.status == INIT_ACTIVE) { + requestPayout(it.uuid!!, withDrawItem.id, withdrawNum) } else { - AndroidUtil.showToast(R.string.withdraw_fail_status_is_unavailable) + errorHintRes = R.string.withdraw_fail_reach_day_limit } } else { - var errorHint = R.string.withdraw_fail_init_fail // 0成功,1失败,2签名验证失败,3客户端版本过低,4 ts长度错误 when (it.error) { - 3-> R.string.withdraw_fail_version_toolow + 3-> errorHintRes = R.string.withdraw_fail_version_toolow } - AndroidUtil.showToast(errorHint) + } + + if (errorHintRes > 0) { + showFailDialog(errorHintRes) } } } is Result.Error -> { + showFailDialog(R.string.withdraw_fail_unkown_error) } } } @@ -201,7 +206,9 @@ class WithDrawActivity : AppViewsEmptyViewModelActivity(), OnTabSty viewModel.withdrawInit() } - private fun withdrawPayout(initUUID: String, payItemId: Int, payCashNum: Float) { + private fun requestPayout(initUUID: String, payItemId: Int, payCashNum: Float) { + val currentTimeMs = System.currentTimeMillis() + lifecycleScope.launch { repeatOnLifecycle(Lifecycle.State.STARTED) { viewModel.PayoutResult.collect { result -> @@ -210,6 +217,7 @@ class WithDrawActivity : AppViewsEmptyViewModelActivity(), OnTabSty } is Result.Success -> { var errHintRes = 0 + when (result.data?.data?.error) { /* 错误码, 0成功,1失败,2签名验证失败,3客户端版本过低,4uuid错误,5所在地国家或地区不在提现限制内,6提现金额不符对应的产品id,7提现产品id不对,8达到提现金额限制,9提现次数超过限制,10今日没有提现机会,11提现账号达到次数限制,12身份审核条件不满足,不能提现,13巴西提现参数 document_type 错误, @@ -217,8 +225,7 @@ class WithDrawActivity : AppViewsEmptyViewModelActivity(), OnTabSty 21巴西提现参数 document_type 错误,22巴西提现参数account_type为CPF时 对应的 document_id 错误,23巴西提现参数account_type为CNPJ时 对应的 document_id 错误,24 ts长度错误,25 没提0.1就提现其它的 */ 0 -> { - saveTransactionData(result.data.data!!) - startTimerForCheckPayoutResult(result.data.data!!) + saveNewRecord(result.data.data!!, payCashNum, currentTimeMs) } 5-> { errHintRes = R.string.withdraw_fail_region_restricit @@ -241,10 +248,12 @@ class WithDrawActivity : AppViewsEmptyViewModelActivity(), OnTabSty } } } + + viewModel.withdrawPayout(initUUID, payItemId, payCashNum) } - private fun withdrawCheck(recordNo: String) { + private fun requestCheck(recordNo: String, cashNum: Float) { lifecycleScope.launch { repeatOnLifecycle(Lifecycle.State.STARTED) { viewModel.CheckResult.collect { result -> @@ -264,7 +273,7 @@ class WithDrawActivity : AppViewsEmptyViewModelActivity(), OnTabSty // try again } 2 -> { - showSuccessDialog() + showSuccessDialog(cashNum) } 3 -> { errHintRes = R.string.withdraw_normal_fail @@ -295,36 +304,76 @@ class WithDrawActivity : AppViewsEmptyViewModelActivity(), OnTabSty viewModel.withdrawCheck(recordNo) } - private fun showSuccessDialog() { - WithdrawSuccessDialog(this).show() + private fun showSuccessDialog(cashNum: Float) { + WithdrawSuccessDialog(this@WithDrawActivity, cashNum).show() } - private fun saveTransactionData(data: PayoutReply) { - val historyList: MutableList = SpUtil.instance().getList(SpUtil.KEY_WITHDRAW_HISTORY_LIST) as MutableList + private fun showFailDialog(errorHintRes: Int) { + WithdrawFailDialog(this@WithDrawActivity, errorHintRes).show() + } - historyList.forEachIndexed { index, reply -> - var hasExisted = false - if (reply.id == data.id) { - reply.record_no = data.record_no - reply.error = data.error - reply.hasCheckedResult = data.hasCheckedResult - hasExisted = true + + + + // ------------------------ new added -------------------------// + // WithdrawRecord + + @Synchronized + private fun saveNewRecord(payoutReply: PayoutReply, payCashNum: Float, timeMs: Long) { + val newRecord = WithdrawRecord().apply { + id = payoutReply.id!! + recordNo = payoutReply.record_no + cashNum = payCashNum + operateMs = timeMs + state = 1 + failReason = 0 + } + mRecordList.add(newRecord) + + SpUtil.instance().putList(SpUtil.KEY_WITHDRAW_HISTORY_LIST, mRecordList) + } + + @Synchronized + private fun updateRecord(recordNo: String, payCheck: PayoutCheck) { + var needSaveSp = false + mRecordList.forEachIndexed { index, record -> + if (record.recordNo == recordNo) { + if (record.state != payCheck.status) { + needSaveSp =true + record.state = payCheck.status + } + return@forEachIndexed } + } - if (!hasExisted) { - historyList.add(data) - } - - SpUtil.instance().putList(SpUtil.KEY_WITHDRAW_HISTORY_LIST, historyList) + if (needSaveSp) { + SpUtil.instance().putList(SpUtil.KEY_WITHDRAW_HISTORY_LIST, mRecordList) } } - private fun startTimerForCheckPayoutResult(data: PayoutReply) { - withdrawCheck(data.record_no!!) + @Synchronized + private fun checkTransactionState() { + var unCheckCount = 0 + mRecordList.forEach { record -> + if (record.state == FINAL_STATE_ONGING) { + unCheckCount++ + } + } + + if (unCheckCount > 0) { + mRecordList.forEachIndexed { index, record -> + if (record.state == FINAL_STATE_ONGING) { + requestCheck(record.recordNo, record.cashNum) + } + } + } } + + companion object { - const val ACTIVE = 1 + const val INIT_ACTIVE = 1 + const val FINAL_STATE_ONGING = 1 internal fun startActivity(activity: Activity) { activity.startActivity(Intent(activity.applicationContext, WithDrawActivity::class.java)) diff --git a/app/src/main/java/com/gamedog/vididin/features/withdraw/dialogs/WithdrawFailDialog.kt b/app/src/main/java/com/gamedog/vididin/features/withdraw/dialogs/WithdrawFailDialog.kt index 86ab28a..edc8c06 100644 --- a/app/src/main/java/com/gamedog/vididin/features/withdraw/dialogs/WithdrawFailDialog.kt +++ b/app/src/main/java/com/gamedog/vididin/features/withdraw/dialogs/WithdrawFailDialog.kt @@ -8,7 +8,7 @@ import com.vididin.real.money.game.databinding.DialogWithdrawFailBinding as View import com.gamedog.vididin.router.Router -class WithdrawFailDialog(context: Activity) : BindingDialog(context, ViewBinding::inflate) { +class WithdrawFailDialog(context: Activity, private val errorHintRes: Int) : BindingDialog(context, ViewBinding::inflate) { init { build() @@ -30,6 +30,7 @@ class WithdrawFailDialog(context: Activity) : BindingDialog(context tvActionFeedback -> { gotoFeedback() + dismiss() } tvActionConfirm -> { @@ -37,6 +38,8 @@ class WithdrawFailDialog(context: Activity) : BindingDialog(context } } } + + tvReason.setText(errorHintRes) } } diff --git a/app/src/main/java/com/gamedog/vididin/features/withdraw/dialogs/WithdrawSuccessDialog.kt b/app/src/main/java/com/gamedog/vididin/features/withdraw/dialogs/WithdrawSuccessDialog.kt index 631a88d..e984af7 100644 --- a/app/src/main/java/com/gamedog/vididin/features/withdraw/dialogs/WithdrawSuccessDialog.kt +++ b/app/src/main/java/com/gamedog/vididin/features/withdraw/dialogs/WithdrawSuccessDialog.kt @@ -7,7 +7,7 @@ import com.ama.core.architecture.widget.BindingDialog import com.vididin.real.money.game.databinding.DialogWithdrawSuccessBinding as ViewBinding -class WithdrawSuccessDialog(context: Activity) : BindingDialog(context, ViewBinding::inflate) { +class WithdrawSuccessDialog(context: Activity, private val mCashNum: Float) : BindingDialog(context, ViewBinding::inflate) { init { build() @@ -31,6 +31,8 @@ class WithdrawSuccessDialog(context: Activity) : BindingDialog(cont } } } + + tvCashNum.text = mCashNum.toString() } } } diff --git a/app/src/main/res/layout/dialog_withdraw_fail.xml b/app/src/main/res/layout/dialog_withdraw_fail.xml index 5826ad5..2ee3fb2 100644 --- a/app/src/main/res/layout/dialog_withdraw_fail.xml +++ b/app/src/main/res/layout/dialog_withdraw_fail.xml @@ -68,11 +68,21 @@ android:layout_height="wrap_content" android:layout_marginTop="10dp" android:textSize="14sp" - android:textStyle="bold" android:textColor="@color/gray6" android:text="@string/withdraw_fail_desc" /> + + diff --git a/app/src/main/res/layout/dialog_withdraw_success.xml b/app/src/main/res/layout/dialog_withdraw_success.xml index be7e2cf..6b395d7 100644 --- a/app/src/main/res/layout/dialog_withdraw_success.xml +++ b/app/src/main/res/layout/dialog_withdraw_success.xml @@ -26,7 +26,7 @@ @@ -35,9 +35,11 @@ android:layout_height="wrap_content" android:textSize="30sp" android:textStyle="bold" + android:gravity="center_vertical" android:textColor="@color/green_2c" android:text="@string/cash" android:drawableStart="@mipmap/icon_cash" + android:drawablePadding="3dp" /> Regision restriction Amount limit 0utros Erro + Your have reached the times limit. + 0utros Erro \ No newline at end of file