增加支付接口相关逻辑
This commit is contained in:
@@ -121,6 +121,8 @@ class MainActivity : BaseActivity<ActivityMainBinding>() {
|
||||
private fun initData() {
|
||||
// viewModel.getEquipmentToken()
|
||||
viewModel.getUserFaceCache(pageNo = 1)
|
||||
//viewModel.getUserFaceCache2()
|
||||
|
||||
// presentation?.step1()
|
||||
presentation?.step1FoodRecognizing()
|
||||
}
|
||||
@@ -219,7 +221,15 @@ class MainActivity : BaseActivity<ActivityMainBinding>() {
|
||||
ToastUtils.showToast("暂无识别数据,请搜索选择")
|
||||
return@setOnClickListener
|
||||
}
|
||||
createOrder(checkedItem!!)
|
||||
|
||||
val realWeight = (lastWeight * 1000).roundToInt()
|
||||
createOrder(foodInfo = checkedItem!!, foodWeight = realWeight, eatWeight = realWeight) {
|
||||
presentation?.dismiss()
|
||||
startActivity(Intent(this, PayActivity::class.java).apply {
|
||||
putExtra(PayActivity.FOOD_INFO, checkedItem!!)
|
||||
putExtra(PayActivity.FOOD_ORDER_ID, foodOrderId)
|
||||
})
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -656,19 +666,18 @@ class MainActivity : BaseActivity<ActivityMainBinding>() {
|
||||
lastTouchTime = System.currentTimeMillis()
|
||||
}
|
||||
|
||||
private fun createOrder(foodInfo: FoodInfo) {
|
||||
fun createOrder(foodInfo: FoodInfo, foodWeight: Int, eatWeight: Int, block:()-> Unit) {
|
||||
val mode = SPUtil.getInstance().get(GlobalKey.KEY_CHARGE_MODE, 0)
|
||||
val realWeight = (lastWeight * 1000).roundToInt()
|
||||
val order = FoodOrder(
|
||||
deviceId = GlobalData.deviceId,
|
||||
foodId = foodInfo.foodId,
|
||||
foodName = foodInfo.foodName ?: "",
|
||||
foodMaterialId = foodInfo.foodMaterialId ?: "",
|
||||
specId = foodInfo.specId ?: "",
|
||||
foodWeight = realWeight,
|
||||
eatWeight = realWeight,
|
||||
foodWeight = foodWeight,
|
||||
eatWeight = eatWeight,
|
||||
//根据specId对应规格重量计算
|
||||
eatNum = getEatNum(realWeight, foodInfo.specWeight ?: 0.0),
|
||||
eatNum = getEatNum(foodWeight, foodInfo.specWeight ?: 0.0),
|
||||
userId = null,
|
||||
notPay = mode != 0,
|
||||
)
|
||||
@@ -679,12 +688,7 @@ class MainActivity : BaseActivity<ActivityMainBinding>() {
|
||||
return@runOnUiThread
|
||||
}
|
||||
foodOrderId = orderId
|
||||
presentation?.dismiss()
|
||||
startActivity(Intent(this, PayActivity::class.java).apply {
|
||||
putExtra(PayActivity.FOOD_INFO, foodInfo)
|
||||
putExtra(PayActivity.FOOD_ORDER_ID, orderId)
|
||||
})
|
||||
// ToastUtils.showToast("订单已生成")
|
||||
block()
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -14,6 +14,7 @@ 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>() {
|
||||
@@ -52,13 +53,13 @@ class PayActivity : BaseActivity<ActivityPayBinding>() {
|
||||
var facePayFragment: FacePayFragment? = null
|
||||
private var payResultFragment: PayResultFragment? = null
|
||||
|
||||
var foodOrderId:String = ""
|
||||
var foodOrderId: String = ""
|
||||
|
||||
@Suppress("DEPRECATION")
|
||||
override fun initialize() {
|
||||
super.initialize()
|
||||
foodInfo = intent.getParcelableExtra(FOOD_INFO)
|
||||
foodOrderId = intent.getStringExtra(FOOD_ORDER_ID)?:""
|
||||
foodOrderId = intent.getStringExtra(FOOD_ORDER_ID) ?: ""
|
||||
// totalAmount = intent.getDoubleExtra(TOTAL_AMOUNT,0.0)
|
||||
// memberInfo = intent.getParcelableExtra(MEMBER_INFO)
|
||||
binding.tvFoodName.text = foodInfo?.foodName
|
||||
@@ -164,40 +165,63 @@ class PayActivity : BaseActivity<ActivityPayBinding>() {
|
||||
|
||||
private var scanQrCodePayPresentation: ScanQrCodePayPresentation? = null
|
||||
var memberInfo: MemberInfo? = null
|
||||
fun showPayInfo(memberInfo: MemberInfo) {
|
||||
fun showPayInfo(type: Int = 1, isVip: Boolean = false, memberInfo: MemberInfo? = null) {
|
||||
this.memberInfo = memberInfo
|
||||
payResultFragment = PayResultFragment.instance(1, memberInfo)
|
||||
payResultFragment = PayResultFragment.instance(type, memberInfo)
|
||||
showFragment(payResultFragment!!, TAG_PAY_RESULT)
|
||||
if (displays.size > 1) {
|
||||
scanQrCodePayPresentation = ScanQrCodePayPresentation(
|
||||
activity = this,
|
||||
display = displays[1],
|
||||
type = 1
|
||||
type = type
|
||||
) {
|
||||
scanQrCodePayPresentation?.dismiss()
|
||||
}.also {
|
||||
it.foodName = foodInfo?.foodName
|
||||
it.totalPrice = foodInfo?.vipPrice?:0.0
|
||||
//确认使用vipPrice 还是 specPrice
|
||||
val totalPrice = if (isVip) foodInfo?.vipPrice else foodInfo?.specPrice
|
||||
it.totalPrice = totalPrice ?: 0.0
|
||||
}
|
||||
scanQrCodePayPresentation?.show()
|
||||
}
|
||||
}
|
||||
|
||||
fun showPaySuccess() {
|
||||
payResultFragment = PayResultFragment.instance(2, memberInfo!!)
|
||||
showFragment(payResultFragment!!, TAG_PAY_RESULT)
|
||||
if (displays.size > 1) {
|
||||
scanQrCodePayPresentation = ScanQrCodePayPresentation(
|
||||
activity = this,
|
||||
display = displays[1],
|
||||
type = 2
|
||||
) {
|
||||
scanQrCodePayPresentation?.dismiss()
|
||||
}.also {
|
||||
it.foodName = foodInfo?.foodName
|
||||
it.totalPrice = foodInfo?.vipPrice?:0.0
|
||||
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)
|
||||
}
|
||||
scanQrCodePayPresentation?.show()
|
||||
}
|
||||
}
|
||||
|
||||
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()
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@@ -7,11 +7,13 @@ import androidx.core.text.buildSpannedString
|
||||
import com.sw.dualscreen.activity.PayActivity
|
||||
import com.sw.dualscreen.activity.fragment.BaseFragment
|
||||
import com.sw.dualscreen.databinding.FragmentCashPayBinding
|
||||
import com.sw.dualscreen.ext.format2String
|
||||
import com.sw.dualscreen.presentation.pay.CashPayPresentation
|
||||
import com.sw.plate.utils.ToastUtils
|
||||
|
||||
class CashPayFragment : BaseFragment<FragmentCashPayBinding>() {
|
||||
|
||||
private lateinit var payActivity: PayActivity
|
||||
private var payActivity: PayActivity? = null
|
||||
private var foodName: String? = null
|
||||
private var payAmount: String? = null
|
||||
|
||||
@@ -22,12 +24,30 @@ class CashPayFragment : BaseFragment<FragmentCashPayBinding>() {
|
||||
}
|
||||
|
||||
override fun initialize() {
|
||||
payActivity = requireActivity() as PayActivity
|
||||
payActivity = requireActivity() as? PayActivity
|
||||
|
||||
foodName = payActivity.foodInfo?.foodName
|
||||
payAmount = "36.80"
|
||||
foodName = payActivity?.foodInfo?.foodName
|
||||
payAmount = payActivity?.foodInfo?.specPrice.format2String(2)
|
||||
binding.tvRealAmount.text = getAmountText(payAmount?:"")
|
||||
|
||||
binding.btnConfirmPayFinish.setOnClickListener {
|
||||
payActivity?.cashPay(hashMapOf(
|
||||
//标价金额(单位为元)
|
||||
"totalFee" to (payAmount?:""),
|
||||
//订单类型(0付款1会员充值)
|
||||
"orderType" to "0",
|
||||
//商户订单号
|
||||
"orderNo" to (payActivity?.foodOrderId?:""),
|
||||
//支付来源:0线下收款 、3:线上纯会员支付 101:支付宝主动、102:支付宝被动、201:微信主动、202:微信被动
|
||||
"paySource" to "0"
|
||||
)) { paySuccess ->
|
||||
if (paySuccess.not()) {
|
||||
ToastUtils.showToast("接口调用失败")
|
||||
return@cashPay
|
||||
}
|
||||
payActivity?.showPaySuccess( false)
|
||||
}
|
||||
}
|
||||
showSubScreen()
|
||||
}
|
||||
override fun onHiddenChanged(hidden: Boolean) {
|
||||
@@ -36,7 +56,7 @@ class CashPayFragment : BaseFragment<FragmentCashPayBinding>() {
|
||||
delayDismiss()
|
||||
return
|
||||
}
|
||||
showSubScreen()
|
||||
//showSubScreen()
|
||||
}
|
||||
|
||||
override fun onDestroy() {
|
||||
@@ -54,7 +74,7 @@ class CashPayFragment : BaseFragment<FragmentCashPayBinding>() {
|
||||
private fun showSubScreen() {
|
||||
// 查找副屏(通常索引为1)
|
||||
if (displays.size > 1) {
|
||||
presentation = CashPayPresentation(activity = payActivity, display = displays[1]) {
|
||||
presentation = CashPayPresentation(activity = payActivity!!, display = displays[1]) {
|
||||
presentation?.dismiss()
|
||||
}.also {
|
||||
it.foodName = foodName
|
||||
|
||||
@@ -4,6 +4,7 @@ import android.graphics.Bitmap
|
||||
import com.sw.dualscreen.activity.PayActivity
|
||||
import com.sw.dualscreen.activity.fragment.BaseFragment
|
||||
import com.sw.dualscreen.databinding.FragmentFacePayBinding
|
||||
import com.sw.dualscreen.ext.format2String
|
||||
import com.sw.dualscreen.presentation.pay.FacePayPresentation
|
||||
|
||||
class FacePayFragment : BaseFragment<FragmentFacePayBinding>() {
|
||||
@@ -22,7 +23,7 @@ class FacePayFragment : BaseFragment<FragmentFacePayBinding>() {
|
||||
// payActivity?.showPayResult()
|
||||
// }
|
||||
foodName = payActivity?.foodInfo?.foodName
|
||||
payAmount = "36.80"
|
||||
payAmount = payActivity?.foodInfo?.specPrice.format2String(2)
|
||||
showSubScreen()
|
||||
}
|
||||
|
||||
@@ -32,7 +33,7 @@ class FacePayFragment : BaseFragment<FragmentFacePayBinding>() {
|
||||
delayDismiss()
|
||||
return
|
||||
}
|
||||
showSubScreen()
|
||||
//showSubScreen()
|
||||
}
|
||||
|
||||
override fun onDestroy() {
|
||||
|
||||
@@ -32,7 +32,7 @@ class NumberPayFragment: BaseFragment<FragmentNumberPayBinding>() {
|
||||
delayDismiss()
|
||||
return
|
||||
}
|
||||
showSubScreen()
|
||||
//showSubScreen()
|
||||
}
|
||||
|
||||
override fun onDestroy() {
|
||||
|
||||
@@ -1,12 +1,6 @@
|
||||
package com.sw.dualscreen.activity.fragment.pay
|
||||
|
||||
import android.os.Bundle
|
||||
import android.text.Spanned
|
||||
import android.text.SpannedString
|
||||
import android.text.style.AbsoluteSizeSpan
|
||||
import android.text.style.ForegroundColorSpan
|
||||
import androidx.core.graphics.toColorInt
|
||||
import androidx.core.text.buildSpannedString
|
||||
import com.sw.dualscreen.R
|
||||
import com.sw.dualscreen.activity.PayActivity
|
||||
import com.sw.dualscreen.activity.fragment.BaseFragment
|
||||
@@ -16,7 +10,6 @@ import com.sw.dualscreen.ext.gone
|
||||
import com.sw.dualscreen.ext.invisible
|
||||
import com.sw.dualscreen.ext.load
|
||||
import com.sw.dualscreen.ext.visible
|
||||
import com.sw.dualscreen.model.response.FoodInfo
|
||||
import com.sw.dualscreen.model.response.MemberInfo
|
||||
import com.sw.dualscreen.model.response.TextBean
|
||||
import com.sw.dualscreen.utils.SpannedUtils
|
||||
@@ -30,7 +23,7 @@ class PayResultFragment : BaseFragment<FragmentPayResultBinding>() {
|
||||
companion object {
|
||||
const val PAGE_TYPE = "pageType"
|
||||
const val MEMBER_INFO = "memberInfo"
|
||||
fun instance(pageType: Int, memberInfo: MemberInfo): PayResultFragment {
|
||||
fun instance(pageType: Int, memberInfo: MemberInfo?): PayResultFragment {
|
||||
return PayResultFragment().apply {
|
||||
arguments = Bundle().also {
|
||||
it.putInt(PAGE_TYPE, pageType)
|
||||
@@ -53,16 +46,24 @@ class PayResultFragment : BaseFragment<FragmentPayResultBinding>() {
|
||||
binding.btnBack.setOnClickListener {
|
||||
//payActivity?.showFacePay()
|
||||
}
|
||||
if (memberInfo != null) {
|
||||
binding.layoutMemberInfo.visible()
|
||||
} else {
|
||||
binding.layoutMemberInfo.gone()
|
||||
|
||||
}
|
||||
arguments?.let {
|
||||
pageType = it.getInt(PAGE_TYPE, 0)
|
||||
memberInfo = it.getParcelable(MEMBER_INFO)
|
||||
}
|
||||
|
||||
totalPrice = payActivity?.foodInfo?.vipPrice ?: 0.0
|
||||
balance = (memberInfo?.topUpBalance ?: 0.0) + (memberInfo?.rewardBalance ?: 0.0)
|
||||
realPayPrice = if (balance >= totalPrice) 0.0 else totalPrice - balance
|
||||
expensesBalance = if (balance >= totalPrice) totalPrice else balance
|
||||
memberInfo?.let { loadUserInfo(it) }
|
||||
memberInfo?.let {
|
||||
balance = (memberInfo?.topUpBalance ?: 0.0) + (memberInfo?.rewardBalance ?: 0.0)
|
||||
realPayPrice = if (balance >= totalPrice) 0.0 else totalPrice - balance
|
||||
expensesBalance = if (balance >= totalPrice) totalPrice else balance
|
||||
loadUserInfo(it)
|
||||
}
|
||||
|
||||
when (pageType) {
|
||||
0 -> {
|
||||
@@ -95,19 +96,24 @@ class PayResultFragment : BaseFragment<FragmentPayResultBinding>() {
|
||||
)
|
||||
if (balance >= totalPrice) {
|
||||
binding.ivPayQrCode.invisible()
|
||||
binding.btnConfirmPay.isEnabled = true
|
||||
binding.btnConfirmPay.run {
|
||||
isEnabled = true
|
||||
//点击支付,接口成功打开成功页面
|
||||
setOnClickListener {
|
||||
memberPay()
|
||||
}
|
||||
}
|
||||
} else {
|
||||
binding.ivPayQrCode.visible()
|
||||
// binding.ivPayQrCode.load(payQrCodePic)
|
||||
binding.btnConfirmPay.isEnabled = false
|
||||
}
|
||||
//点击支付接口成功打开成功页面,或者扫码手动成功回调打开成功页面
|
||||
binding.btnConfirmPay.setOnClickListener {
|
||||
payActivity?.showWaitingDialog("支付中,请稍后……")
|
||||
binding.root.postDelayed({
|
||||
payActivity?.hideWaitingDialog()
|
||||
payActivity?.showPaySuccess()
|
||||
},1000)
|
||||
payActivity?.getQrCodeImg(
|
||||
orderId = payActivity!!.foodOrderId,
|
||||
userId = memberInfo!!.id
|
||||
) { qrCodeImg ->
|
||||
binding.ivPayQrCode.load(qrCodeImg)
|
||||
//扫码成功回调打开成功页面
|
||||
payActivity?.paySuccessCallback(true)
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -115,9 +121,22 @@ class PayResultFragment : BaseFragment<FragmentPayResultBinding>() {
|
||||
binding.layoutPayInfo.gone()
|
||||
binding.layoutPaySuccess.visible()
|
||||
|
||||
binding.tvPayInfo.text =
|
||||
"应收 ${totalPrice.format2String(2)} 元,余额扣除 ${expensesBalance.format2String(2)} 元"
|
||||
binding.tvPayAmount.text = "收款金额 ${realPayPrice.format2String(2)} 元"
|
||||
if (memberInfo != null) {
|
||||
val remainBalance = if (balance >= totalPrice) balance - totalPrice else 0.0
|
||||
binding.tvUserBalance.text = SpannedUtils.getAmountText(
|
||||
listOf(
|
||||
TextBean(text = "¥", textSize = 24),
|
||||
TextBean(text = remainBalance.format2String(2), textSize = 36),
|
||||
)
|
||||
)
|
||||
binding.tvPayAmount.text = "收款金额 ${realPayPrice.format2String(2)} 元"
|
||||
binding.tvPayInfo.text =
|
||||
"应收 ${totalPrice.format2String(2)} 元,余额扣除 ${expensesBalance.format2String(2)} 元"
|
||||
} else {
|
||||
binding.tvPayAmount.text = "收款金额 ${totalPrice.format2String(2)} 元"
|
||||
binding.tvPayInfo.text =
|
||||
"应收 ${totalPrice.format2String(2)} 元"
|
||||
}
|
||||
}
|
||||
|
||||
else -> {}
|
||||
@@ -168,6 +187,25 @@ class PayResultFragment : BaseFragment<FragmentPayResultBinding>() {
|
||||
phone
|
||||
}
|
||||
|
||||
|
||||
private fun memberPay() {
|
||||
payActivity?.run {
|
||||
showWaitingDialog("支付中,请稍后……")
|
||||
memberPay(
|
||||
hashMapOf(
|
||||
//支付金额
|
||||
"totalFee" to totalPrice.format2String(2),
|
||||
//订单号
|
||||
"orderNo" to payActivity!!.foodOrderId,
|
||||
//用户id
|
||||
"memberId" to memberInfo!!.id!!
|
||||
)
|
||||
) {
|
||||
binding.root.postDelayed({
|
||||
hideWaitingDialog()
|
||||
showPaySuccess(true)
|
||||
},1000)
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
@@ -24,7 +24,7 @@ class ScanQrCodePayFragment: BaseFragment<FragmentScanQrcodePayBinding>() {
|
||||
private lateinit var payActivity: PayActivity
|
||||
private var foodName: String? = null
|
||||
private var payAmount: String? = null
|
||||
private var payQrCodePic: Any? = null
|
||||
private var payQrCodePic: String? = null
|
||||
var presentation: ScanQrCodePayPresentation?=null
|
||||
private var countDownJob: Job? = null
|
||||
|
||||
@@ -37,14 +37,19 @@ class ScanQrCodePayFragment: BaseFragment<FragmentScanQrcodePayBinding>() {
|
||||
|
||||
foodName = payActivity.foodInfo?.foodName
|
||||
payAmount = payActivity.foodInfo?.specPrice.format2String(2)
|
||||
payQrCodePic = R.drawable.ic_qrcode
|
||||
binding.tvRealAmount.text = getAmountText(payAmount?:"")
|
||||
binding.ivPayQrCode.load(payQrCodePic)
|
||||
binding.tvPayResult.text = "待支付(60s)..."
|
||||
|
||||
startCountDown()
|
||||
payActivity.getQrCodeImg(orderId = payActivity.foodOrderId) {
|
||||
payQrCodePic = it
|
||||
binding.ivPayQrCode.load(payQrCodePic)
|
||||
binding.tvPayResult.text = "待支付(60s)..."
|
||||
|
||||
showSubScreen()
|
||||
payActivity.paySuccessCallback(false)
|
||||
|
||||
showSubScreen()
|
||||
|
||||
startCountDown()
|
||||
}
|
||||
}
|
||||
|
||||
override fun onHiddenChanged(hidden: Boolean) {
|
||||
@@ -53,7 +58,7 @@ class ScanQrCodePayFragment: BaseFragment<FragmentScanQrcodePayBinding>() {
|
||||
delayDismiss()
|
||||
return
|
||||
}
|
||||
showSubScreen()
|
||||
//showSubScreen()
|
||||
}
|
||||
|
||||
override fun onDestroy() {
|
||||
@@ -104,4 +109,5 @@ class ScanQrCodePayFragment: BaseFragment<FragmentScanQrcodePayBinding>() {
|
||||
}
|
||||
)
|
||||
}
|
||||
|
||||
}
|
||||
Reference in New Issue
Block a user