package com.sw.dualscreen.activity import androidx.activity.viewModels import androidx.fragment.app.Fragment import com.sw.dualscreen.R import com.sw.dualscreen.activity.fragment.pay.CashPayFragment import com.sw.dualscreen.activity.fragment.pay.FacePayFragment import com.sw.dualscreen.activity.fragment.pay.NumberPayFragment import com.sw.dualscreen.activity.fragment.pay.PayResultFragment import com.sw.dualscreen.activity.fragment.pay.ScanQrCodePayFragment import com.sw.dualscreen.databinding.ActivityPayBinding import com.sw.dualscreen.model.response.FoodInfo import com.sw.dualscreen.model.response.MemberInfo import com.sw.dualscreen.presentation.pay.ScanQrCodePayPresentation import com.sw.dualscreen.viewmodel.BaseViewModel import com.sw.dualscreen.viewmodel.UserViewModel import com.sw.plate.utils.ToastUtils import com.sw.plate.utils.arcface.viewmodel.RecognizeViewModel class PayActivity : BaseActivity() { companion object { const val FOOD_INFO = "foodInfo" const val TOTAL_AMOUNT = "totalAmount" const val FOOD_ORDER_ID = "foodOrderId" // const val MEMBER_INFO = "memberInfo" const val TAG_PAY_QR_CODE = "tagPayQrCode" const val TAG_PAY_CASH = "tagPayCash" const val TAG_PAY_NUMBER = "tagPayNumber" const val TAG_PAY_FACE = "tagPayFace" const val TAG_PAY_RESULT = "tagPayResult" } val userViewModel by viewModels() val recognizeViewModel by viewModels() override fun getViewModel(): BaseViewModel { return userViewModel } override fun inflateViewBinding(): ActivityPayBinding { return ActivityPayBinding.inflate(layoutInflater) } var foodInfo: FoodInfo? = null // var totalAmount:Double = 0.0 private var qrCodePayFragment: ScanQrCodePayFragment? = null private var cashPayFragment: CashPayFragment? = null private var numberPayFragment: NumberPayFragment? = null var facePayFragment: FacePayFragment? = null private var payResultFragment: PayResultFragment? = null var foodOrderId: String = "" @Suppress("DEPRECATION") override fun initialize() { super.initialize() foodInfo = intent.getParcelableExtra(FOOD_INFO) foodOrderId = intent.getStringExtra(FOOD_ORDER_ID) ?: "" // totalAmount = intent.getDoubleExtra(TOTAL_AMOUNT,0.0) // memberInfo = intent.getParcelableExtra(MEMBER_INFO) binding.tvFoodName.text = foodInfo?.foodName binding.include.ivPageBack.setOnClickListener { finish() } binding.include.tvPageTitle.text = "下单结算" binding.btnPayQrCode.setOnClickListener { if (binding.btnPayQrCode.isChecked) { return@setOnClickListener } showScanQrCodePay() } binding.btnPayCash.setOnClickListener { if (binding.btnPayCash.isChecked) { return@setOnClickListener } cashPayFragment = CashPayFragment() showFragment(cashPayFragment!!, TAG_PAY_CASH) switchButton(false, true, false, false) } binding.btnPayNumber.setOnClickListener { if (binding.btnPayNumber.isChecked) { return@setOnClickListener } numberPayFragment = NumberPayFragment() showFragment(numberPayFragment!!, TAG_PAY_NUMBER) switchButton(false, false, true, false) } binding.btnPayFace.setOnClickListener { if (binding.btnPayFace.isChecked) { return@setOnClickListener } showFacePay() } showScanQrCodePay() } private fun showScanQrCodePay() { qrCodePayFragment = ScanQrCodePayFragment() showFragment(qrCodePayFragment!!, TAG_PAY_QR_CODE) switchButton(true, false, false, false) } private fun switchButton(vararg arr: Boolean) { binding.btnPayQrCode.isChecked = arr[0] binding.btnPayCash.isChecked = arr[1] binding.btnPayNumber.isChecked = arr[2] binding.btnPayFace.isChecked = arr[3] } fun showFacePay() { facePayFragment = FacePayFragment() showFragment(facePayFragment!!, TAG_PAY_FACE) switchButton(false, false, false, true) } private fun showFragment(fragment: Fragment, tag: String) { runCatching { supportFragmentManager.beginTransaction().apply { replace(R.id.fragmentContainerView, fragment) commitNowAllowingStateLoss() } }.onFailure { it.printStackTrace() } } // private fun showFragment(currentFragment: Fragment, tag: String) { // runCatching { // supportFragmentManager.beginTransaction().apply { // val existFragment = supportFragmentManager.findFragmentByTag(tag) // if (existFragment == null) { // add(R.id.fragmentContainerView, currentFragment, tag) // } // val fragments = supportFragmentManager.fragments // fragments.forEach { // it?.let { fragment -> // if (fragment != currentFragment) { // hide(fragment) // } // } // } // show(currentFragment) // commitAllowingStateLoss() // } // }.onFailure { // it.printStackTrace() // } // } // fun showPayResult() { // payResultFragment = PayResultFragment.instance(1, memberInfo) // showFragment(payResultFragment!!, TAG_PAY_RESULT) // } override fun onDestroy() { qrCodePayFragment?.presentation?.dismiss() cashPayFragment?.presentation?.dismiss() numberPayFragment?.presentation?.dismiss() facePayFragment?.presentation?.dismiss() super.onDestroy() } private var scanQrCodePayPresentation: ScanQrCodePayPresentation? = null var memberInfo: MemberInfo? = null fun showPayInfo(type: Int = 1, isVip: Boolean = false, memberInfo: MemberInfo? = null) { this.memberInfo = memberInfo payResultFragment = PayResultFragment.instance(type, memberInfo) showFragment(payResultFragment!!, TAG_PAY_RESULT) if (displays.size > 1) { scanQrCodePayPresentation = ScanQrCodePayPresentation( activity = this, display = displays[1], type = type ) { scanQrCodePayPresentation?.dismiss() }.also { it.foodName = foodInfo?.foodName //确认使用vipPrice 还是 specPrice val totalPrice = if (isVip) foodInfo?.vipPrice else foodInfo?.specPrice it.totalPrice = totalPrice ?: 0.0 } scanQrCodePayPresentation?.show() } } fun showPaySuccess(isVip: Boolean) { showPayInfo(type = 2, isVip = isVip, memberInfo = memberInfo) } fun getQrCodeImg(orderId: String, userId: String? = null, block: (String?) -> Unit) { userViewModel.getQrCodeImg(orderId = orderId, userId = userId) { qrCodeImg -> runOnUiThread { if (qrCodeImg.isNullOrBlank()) { ToastUtils.showToast("获取二维码失败") return@runOnUiThread } block(qrCodeImg) } } } fun cashPay(param: HashMap, block: (Boolean) -> Unit) { userViewModel.cashPay(param) { runOnUiThread { block(it) } } } fun memberPay(param: HashMap, block: () -> Unit) { userViewModel.memberPay(param) { runOnUiThread { block() } } } fun paySuccessCallback(isVip: Boolean, block: () -> Unit = {}) { userViewModel.paySuccessCallback(queryType = 1, orderId = foodOrderId) { showPaySuccess(isVip) block() } } }