228 lines
8.0 KiB
Kotlin
228 lines
8.0 KiB
Kotlin
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<ActivityPayBinding>() {
|
|
|
|
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<UserViewModel>()
|
|
val recognizeViewModel by viewModels<RecognizeViewModel>()
|
|
|
|
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<String, String>, block: (Boolean) -> Unit) {
|
|
userViewModel.cashPay(param) {
|
|
runOnUiThread {
|
|
block(it)
|
|
}
|
|
}
|
|
}
|
|
|
|
fun memberPay(param: HashMap<String, String>, block: () -> Unit) {
|
|
userViewModel.memberPay(param) {
|
|
runOnUiThread {
|
|
block()
|
|
}
|
|
}
|
|
}
|
|
|
|
fun paySuccessCallback(isVip: Boolean, block: () -> Unit = {}) {
|
|
userViewModel.paySuccessCallback(queryType = 1, orderId = foodOrderId) {
|
|
showPaySuccess(isVip)
|
|
block()
|
|
}
|
|
}
|
|
|
|
} |