营养接口调试、支付接口联调

This commit is contained in:
2025-12-08 18:06:48 +08:00
parent 04e318f47b
commit 086845dd16
27 changed files with 491 additions and 237 deletions
@@ -87,6 +87,12 @@ class MainActivity : BaseActivity<ActivityMainBinding>() {
checkedItem = item
notifyDataSetChanged()
updateCurrentFood(item)
val mode = SPUtil.getInstance().get(GlobalKey.KEY_CHARGE_MODE, 0)
//不计费模式切换菜品,重新加载数据
if(mode == 1) {
presentation?.loadUnbilledMode()
}
}
}
}
@@ -222,8 +228,19 @@ class MainActivity : BaseActivity<ActivityMainBinding>() {
return@setOnClickListener
}
val realWeight = (lastWeight * 1000).roundToInt()
createOrder(foodInfo = checkedItem!!, foodWeight = realWeight, eatWeight = realWeight) {
//val realWeight = (lastWeight * 1000).roundToInt()
val mealPickupMode = SPUtil.getInstance().get(GlobalKey.KEY_PICKUP_MODE, 0) ?: 0
val eatWeight = if (mealPickupMode == 0) {
//即放即取
presentation?.recognitionWeight?:0.0
} else {
presentation?.recognitionWeight?.minus(lastWeight)?:0.0
}
createOrder(
foodInfo = checkedItem!!,
foodWeight = presentation?.lastWeight?.roundToInt()?:0,
eatWeight = eatWeight.roundToInt()
) {
presentation?.dismiss()
startActivity(Intent(this, PayActivity::class.java).apply {
putExtra(PayActivity.FOOD_INFO, checkedItem!!)
@@ -684,7 +701,7 @@ class MainActivity : BaseActivity<ActivityMainBinding>() {
viewModel.createOrder(order) { orderId ->
runOnUiThread {
if (orderId.isBlank()) {
ToastUtils.showToast("订单id为空")
//ToastUtils.showToast("订单id为空")
return@runOnUiThread
}
foodOrderId = orderId
@@ -9,6 +9,7 @@ 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.ext.gone
import com.sw.dualscreen.model.response.FoodInfo
import com.sw.dualscreen.model.response.MemberInfo
import com.sw.dualscreen.presentation.pay.ScanQrCodePayPresentation
@@ -60,6 +61,7 @@ class PayActivity : BaseActivity<ActivityPayBinding>() {
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
@@ -160,6 +162,7 @@ class PayActivity : BaseActivity<ActivityPayBinding>() {
cashPayFragment?.presentation?.dismiss()
numberPayFragment?.presentation?.dismiss()
facePayFragment?.presentation?.dismiss()
scanQrCodePayPresentation?.dismiss()
super.onDestroy()
}
@@ -188,6 +191,7 @@ class PayActivity : BaseActivity<ActivityPayBinding>() {
fun showPaySuccess(isVip: Boolean) {
showPayInfo(type = 2, isVip = isVip, memberInfo = memberInfo)
hidePayTab()
}
fun getQrCodeImg(orderId: String, userId: String? = null, block: (String?) -> Unit) {
@@ -218,11 +222,31 @@ class PayActivity : BaseActivity<ActivityPayBinding>() {
}
}
fun paySuccessCallback(isVip: Boolean, block: () -> Unit = {}) {
userViewModel.paySuccessCallback(queryType = 1, orderId = foodOrderId) {
showPaySuccess(isVip)
block()
suspend fun queryOrderState(isVip: Boolean, block: (Boolean) -> Unit) {
userViewModel.queryOrderState(orderId = foodOrderId) { payResult ->
runOnUiThread {
if (payResult) {
showPaySuccess(isVip)
block(true)
} else {
block(false)
}
}
}
}
fun hidePayTab() {
binding.llPayTab.gone()
}
// private val intervalExecutor by lazy { IntervalExecutor() }
// private var payTaskJob: Job? = null
// fun paySuccessCallback() {
// payTaskJob = intervalExecutor.startIntervalTaskWithInitialDelay(5000, 10000) {
//
// }
// }
}
@@ -12,7 +12,9 @@ import com.sw.dualscreen.ext.load
import com.sw.dualscreen.ext.visible
import com.sw.dualscreen.model.response.MemberInfo
import com.sw.dualscreen.model.response.TextBean
import com.sw.dualscreen.utils.IntervalExecutor
import com.sw.dualscreen.utils.SpannedUtils
import kotlinx.coroutines.Job
class PayResultFragment : BaseFragment<FragmentPayResultBinding>() {
@@ -44,13 +46,7 @@ class PayResultFragment : BaseFragment<FragmentPayResultBinding>() {
override fun initialize() {
payActivity = activity as PayActivity
binding.btnBack.setOnClickListener {
//payActivity?.showFacePay()
}
if (memberInfo != null) {
binding.layoutMemberInfo.visible()
} else {
binding.layoutMemberInfo.gone()
activity?.finish()
}
arguments?.let {
pageType = it.getInt(PAGE_TYPE, 0)
@@ -58,11 +54,14 @@ class PayResultFragment : BaseFragment<FragmentPayResultBinding>() {
}
totalPrice = payActivity?.foodInfo?.vipPrice ?: 0.0
memberInfo?.let {
balance = (memberInfo?.topUpBalance ?: 0.0) + (memberInfo?.rewardBalance ?: 0.0)
if (memberInfo != null) {
binding.layoutMemberInfo.visible()
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)
loadUserInfo(memberInfo!!)
} else {
binding.layoutMemberInfo.gone()
}
when (pageType) {
@@ -112,7 +111,7 @@ class PayResultFragment : BaseFragment<FragmentPayResultBinding>() {
) { qrCodeImg ->
binding.ivPayQrCode.load(qrCodeImg)
//扫码成功回调打开成功页面
payActivity?.paySuccessCallback(true)
paySuccessCallback(true)
}
}
}
@@ -208,4 +207,21 @@ class PayResultFragment : BaseFragment<FragmentPayResultBinding>() {
}
}
override fun onDestroy() {
payTaskJob?.cancel()
super.onDestroy()
}
private val intervalExecutor by lazy { IntervalExecutor() }
private var payTaskJob: Job? = null
fun paySuccessCallback(isVip: Boolean) {
payTaskJob = intervalExecutor.startIntervalTaskWithInitialDelay(5000, 10000) {
payActivity?.queryOrderState(isVip) { paySuccess ->
if (paySuccess) {
payTaskJob?.cancel()
}
}
}
}
}
@@ -14,6 +14,7 @@ import com.sw.dualscreen.utils.countDownByFlow
import kotlinx.coroutines.Job
import com.sw.dualscreen.databinding.FragmentScanQrcodePayBinding
import com.sw.dualscreen.ext.format2String
import com.sw.dualscreen.utils.IntervalExecutor
class ScanQrCodePayFragment: BaseFragment<FragmentScanQrcodePayBinding>() {
@@ -44,7 +45,7 @@ class ScanQrCodePayFragment: BaseFragment<FragmentScanQrcodePayBinding>() {
binding.ivPayQrCode.load(payQrCodePic)
binding.tvPayResult.text = "待支付(60s)..."
payActivity.paySuccessCallback(false)
paySuccessCallback(false)
showSubScreen()
@@ -64,6 +65,7 @@ class ScanQrCodePayFragment: BaseFragment<FragmentScanQrcodePayBinding>() {
override fun onDestroy() {
delayDismiss()
countDownJob?.cancel() // 自动取消订阅,防止内存泄漏
payTaskJob?.cancel()
super.onDestroy()
}
@@ -110,4 +112,16 @@ class ScanQrCodePayFragment: BaseFragment<FragmentScanQrcodePayBinding>() {
)
}
private val intervalExecutor by lazy { IntervalExecutor() }
private var payTaskJob: Job? = null
fun paySuccessCallback(isVip: Boolean) {
payTaskJob = intervalExecutor.startIntervalTaskWithInitialDelay(5000, 10000) {
payActivity.queryOrderState(isVip) { paySuccess ->
if (paySuccess) {
payTaskJob?.cancel()
}
}
}
}
}