增加消费码支付功能、支付逻辑优化、金额问题优化、订单绑定优化
This commit is contained in:
@@ -78,9 +78,11 @@ abstract class BaseActivity<VB : ViewBinding> : AppCompatActivity() {
|
||||
hideWaitingDialog()
|
||||
val view = View.inflate(this, R.layout.dialog_waiting, null)
|
||||
if (!TextUtils.isEmpty(tip)) (view.findViewById<View?>(R.id.tvTip) as TextView).text = tip
|
||||
mDialogWaiting = CustomDialog(this, view, R.style.MyDialog)
|
||||
mDialogWaiting!!.show()
|
||||
mDialogWaiting!!.setCancelable(true)
|
||||
mDialogWaiting = CustomDialog(this, view, R.style.MyDialog).apply {
|
||||
setCancelable(true)
|
||||
setCanceledOnTouchOutside(true)
|
||||
show()
|
||||
}
|
||||
return mDialogWaiting
|
||||
}
|
||||
|
||||
|
||||
@@ -63,6 +63,7 @@ import kotlin.math.roundToInt
|
||||
class MainActivity : BaseActivity<ActivityMainBinding>() {
|
||||
|
||||
companion object {
|
||||
private const val TAG = "MainActivity"
|
||||
const val TIME_OUT = 5 * 60 * 1000L
|
||||
}
|
||||
|
||||
@@ -237,32 +238,35 @@ class MainActivity : BaseActivity<ActivityMainBinding>() {
|
||||
//计费
|
||||
if (mealPickupMode == 0) {
|
||||
//即放即取
|
||||
eatWeight = presentation!!.lastWeight
|
||||
foodWeight = presentation!!.lastWeight
|
||||
eatWeight = lastWeight * 1000
|
||||
foodWeight = lastWeight * 1000
|
||||
} else {
|
||||
//余量计量
|
||||
eatWeight = presentation!!.recognitionWeight - presentation!!.lastWeight
|
||||
foodWeight = presentation!!.recognitionWeight
|
||||
eatWeight = (recognizeWeight - lastWeight) * 1000
|
||||
foodWeight = recognizeWeight * 1000
|
||||
}
|
||||
} else {
|
||||
//不计费
|
||||
foodWeight = presentation!!.recognitionWeight
|
||||
foodWeight = recognizeWeight * 1000
|
||||
eatWeight = if (mealPickupMode == 0) {
|
||||
//即放即取
|
||||
presentation!!.recognitionWeight
|
||||
recognizeWeight * 1000
|
||||
} else {
|
||||
//余量计量
|
||||
presentation!!.recognitionWeight - presentation!!.lastWeight
|
||||
(recognizeWeight - lastWeight) * 1000
|
||||
}
|
||||
}
|
||||
val eatNum = getEatNum(eatWeight, checkedItem!!.specWeight)
|
||||
createOrder(
|
||||
foodInfo = checkedItem!!,
|
||||
foodWeight = foodWeight.roundToInt(),
|
||||
eatWeight = eatWeight.roundToInt()
|
||||
eatWeight = eatWeight.roundToInt(),
|
||||
eatNum = eatNum
|
||||
) {
|
||||
presentation?.dismiss()
|
||||
startActivity(Intent(this, PayActivity::class.java).apply {
|
||||
putExtra(PayActivity.FOOD_INFO, checkedItem!!)
|
||||
putExtra(PayActivity.FOOD_EAT_NUM, eatNum)
|
||||
putExtra(PayActivity.FOOD_ORDER_ID, foodOrderId)
|
||||
})
|
||||
}
|
||||
@@ -270,6 +274,7 @@ class MainActivity : BaseActivity<ActivityMainBinding>() {
|
||||
}
|
||||
}
|
||||
|
||||
private var recognizeWeight = 0.0
|
||||
fun updateCurrentFood(foodInfo: FoodInfo?) {
|
||||
if (foodInfo == null) {
|
||||
binding.tvFoodName.text = "-"
|
||||
@@ -280,6 +285,7 @@ class MainActivity : BaseActivity<ActivityMainBinding>() {
|
||||
return
|
||||
}
|
||||
pauseAnalysis()
|
||||
recognizeWeight = lastWeight
|
||||
presentation?.updateFood(foodInfo)
|
||||
binding.tvFoodName.text = foodInfo.foodName
|
||||
binding.previewView.visibility = View.GONE
|
||||
@@ -393,13 +399,9 @@ class MainActivity : BaseActivity<ActivityMainBinding>() {
|
||||
|
||||
@SuppressLint("NotifyDataSetChanged")
|
||||
private fun updateFoodInfo(list: MutableList<FoodInfo>, scoreList: List<IdNameScore>) {
|
||||
Timber.d(
|
||||
"registerDataChange识别后查询接口数据:${GsonUtils.toJson(list)},识别数据:${
|
||||
GsonUtils.toJson(
|
||||
scoreList
|
||||
)
|
||||
}"
|
||||
)
|
||||
val queryData = GsonUtils.toJson(list)
|
||||
val recData = GsonUtils.toJson(scoreList)
|
||||
Timber.d("registerDataChange识别后查询接口数据:$queryData,识别数据:$recData")
|
||||
list.forEach { foodInfo ->
|
||||
val scoreItem = scoreList.firstOrNull { it.name == foodInfo.foodName }
|
||||
val score = scoreItem?.score ?: 0.0
|
||||
@@ -702,12 +704,20 @@ class MainActivity : BaseActivity<ActivityMainBinding>() {
|
||||
lastTouchTime = System.currentTimeMillis()
|
||||
}
|
||||
|
||||
fun createOrder(foodInfo: FoodInfo, foodWeight: Int, eatWeight: Int, block: () -> Unit) {
|
||||
fun createOrder(
|
||||
foodInfo: FoodInfo,
|
||||
foodWeight: Int,
|
||||
eatWeight: Int,
|
||||
eatNum: Int,
|
||||
block: () -> Unit
|
||||
) {
|
||||
Timber.tag(TAG).d("foodWeight=$foodWeight,eatWeight=$eatWeight")
|
||||
if (foodWeight <= 5 || eatWeight <= 5) {
|
||||
ToastUtils.showToast("请取走餐品")
|
||||
return
|
||||
}
|
||||
val mode = SPUtil.getInstance().get(GlobalKey.KEY_CHARGE_MODE, 0)
|
||||
val chargeMode = SPUtil.getInstance().get(GlobalKey.KEY_CHARGE_MODE, 0)
|
||||
val pickupMode = SPUtil.getInstance().get(GlobalKey.KEY_PICKUP_MODE, 0) ?: 0
|
||||
val order = FoodOrder(
|
||||
deviceId = GlobalData.deviceId,
|
||||
foodId = foodInfo.foodId,
|
||||
@@ -717,9 +727,11 @@ class MainActivity : BaseActivity<ActivityMainBinding>() {
|
||||
foodWeight = foodWeight,
|
||||
eatWeight = eatWeight,
|
||||
//根据specId对应规格重量计算
|
||||
eatNum = getEatNum(foodWeight, foodInfo.specWeight ?: 0.0),
|
||||
eatNum = eatNum,
|
||||
userId = null,
|
||||
notPay = mode != 0,
|
||||
notPay = chargeMode != 0,
|
||||
//即放即取-1,称重-2
|
||||
mode = if (pickupMode == 1) 1 else 2
|
||||
)
|
||||
viewModel.createOrder(order) { orderId ->
|
||||
runOnUiThread {
|
||||
@@ -733,8 +745,8 @@ class MainActivity : BaseActivity<ActivityMainBinding>() {
|
||||
}
|
||||
}
|
||||
|
||||
private fun getEatNum(realWeight: Int, specWeight: Double): Int {
|
||||
if (realWeight == 0 || specWeight == 0.0) return 0
|
||||
fun getEatNum(realWeight: Double?, specWeight: Double?): Int {
|
||||
if (realWeight == null || realWeight == 0.0 || specWeight == null || specWeight == 0.0) return 1
|
||||
return (realWeight / specWeight).roundToInt()
|
||||
}
|
||||
|
||||
|
||||
@@ -2,6 +2,7 @@ package com.sw.dualscreen.activity
|
||||
|
||||
import androidx.activity.viewModels
|
||||
import androidx.fragment.app.Fragment
|
||||
import com.sw.dualscreen.GlobalKey
|
||||
import com.sw.dualscreen.R
|
||||
import com.sw.dualscreen.activity.fragment.pay.CashPayFragment
|
||||
import com.sw.dualscreen.activity.fragment.pay.FacePayFragment
|
||||
@@ -13,6 +14,7 @@ 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
|
||||
import com.sw.dualscreen.utils.SPUtil
|
||||
import com.sw.dualscreen.viewmodel.BaseViewModel
|
||||
import com.sw.dualscreen.viewmodel.UserViewModel
|
||||
import com.sw.plate.utils.ToastUtils
|
||||
@@ -25,6 +27,7 @@ class PayActivity : BaseActivity<ActivityPayBinding>() {
|
||||
const val FOOD_INFO = "foodInfo"
|
||||
const val TOTAL_AMOUNT = "totalAmount"
|
||||
const val FOOD_ORDER_ID = "foodOrderId"
|
||||
const val FOOD_EAT_NUM = "foodEatNum"
|
||||
|
||||
// const val MEMBER_INFO = "memberInfo"
|
||||
const val TAG_PAY_QR_CODE = "tagPayQrCode"
|
||||
@@ -55,13 +58,14 @@ class PayActivity : BaseActivity<ActivityPayBinding>() {
|
||||
private var payResultFragment: PayResultFragment? = null
|
||||
|
||||
var foodOrderId: String = ""
|
||||
var eatNum: Int = 1
|
||||
|
||||
@Suppress("DEPRECATION")
|
||||
override fun initialize() {
|
||||
super.initialize()
|
||||
foodInfo = intent.getParcelableExtra(FOOD_INFO)
|
||||
foodOrderId = intent.getStringExtra(FOOD_ORDER_ID) ?: ""
|
||||
|
||||
eatNum = intent.getIntExtra(FOOD_EAT_NUM, 1)
|
||||
// totalAmount = intent.getDoubleExtra(TOTAL_AMOUNT,0.0)
|
||||
// memberInfo = intent.getParcelableExtra(MEMBER_INFO)
|
||||
binding.tvFoodName.text = foodInfo?.foodName
|
||||
@@ -129,34 +133,6 @@ class PayActivity : BaseActivity<ActivityPayBinding>() {
|
||||
}
|
||||
}
|
||||
|
||||
// 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()
|
||||
@@ -182,23 +158,36 @@ class PayActivity : BaseActivity<ActivityPayBinding>() {
|
||||
}.also {
|
||||
it.foodName = foodInfo?.foodName
|
||||
//确认使用vipPrice 还是 specPrice
|
||||
val totalPrice = if (isVip) foodInfo?.vipPrice else foodInfo?.specPrice
|
||||
it.totalPrice = totalPrice ?: 0.0
|
||||
val onePrice = if (isVip) foodInfo?.vipPrice else foodInfo?.specPrice
|
||||
it.totalPrice = (onePrice ?: 0.0) * eatNum
|
||||
}
|
||||
scanQrCodePayPresentation?.show()
|
||||
}
|
||||
}
|
||||
|
||||
fun updateQrCodeImage(qrCodeUrl: String?) {
|
||||
scanQrCodePayPresentation?.loadQrCodeImage(qrCodeUrl)
|
||||
}
|
||||
|
||||
fun showPaySuccess(isVip: Boolean) {
|
||||
showPayInfo(type = 2, isVip = isVip, memberInfo = memberInfo)
|
||||
hidePayTab()
|
||||
}
|
||||
|
||||
fun getQrCodeImg(orderId: String, userId: String? = null, totalFee: String?=null, block: (String?) -> Unit) {
|
||||
userViewModel.getQrCodeImg(orderId = orderId, userId = userId, totalFee = totalFee) { qrCodeImg ->
|
||||
fun getQrCodeImg(
|
||||
orderId: String,
|
||||
userId: String? = null,
|
||||
totalFee: String? = null,
|
||||
block: (String?) -> Unit
|
||||
) {
|
||||
userViewModel.getQrCodeImg(
|
||||
orderId = orderId,
|
||||
userId = userId,
|
||||
totalFee = totalFee
|
||||
) { qrCodeImg ->
|
||||
runOnUiThread {
|
||||
if (qrCodeImg.isNullOrBlank()) {
|
||||
ToastUtils.showToast("获取二维码失败")
|
||||
//ToastUtils.showToast("获取二维码失败")
|
||||
return@runOnUiThread
|
||||
}
|
||||
block(qrCodeImg)
|
||||
@@ -218,7 +207,7 @@ class PayActivity : BaseActivity<ActivityPayBinding>() {
|
||||
userViewModel.memberPay(param) {
|
||||
runOnUiThread {
|
||||
if (it.not()) {
|
||||
ToastUtils.showToast("支付失败,请稍后重试")
|
||||
//ToastUtils.showToast("支付失败,请稍后重试")
|
||||
return@runOnUiThread
|
||||
}
|
||||
block()
|
||||
@@ -242,14 +231,72 @@ class PayActivity : BaseActivity<ActivityPayBinding>() {
|
||||
binding.llPayTab.gone()
|
||||
}
|
||||
|
||||
fun getMemberInfoByPhone(phone: String, key: String, block: (MemberInfo?) -> Unit) {
|
||||
userViewModel.getMemberInfoByPhone(phone, key) { memberInfo ->
|
||||
runOnUiThread {
|
||||
block(memberInfo)
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
fun getMemberInfoById(userId: String, block: (MemberInfo?) -> Unit) {
|
||||
userViewModel.getMemberInfoById(memberId = userId) { memberInfo ->
|
||||
runOnUiThread {
|
||||
block(memberInfo)
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
// private val intervalExecutor by lazy { IntervalExecutor() }
|
||||
// private var payTaskJob: Job? = null
|
||||
// fun paySuccessCallback() {
|
||||
// payTaskJob = intervalExecutor.startIntervalTaskWithInitialDelay(5000, 10000) {
|
||||
//
|
||||
fun bindOrder(userId: String, block: (Boolean) -> Unit) {
|
||||
val pickupMode = SPUtil.getInstance().get(GlobalKey.KEY_PICKUP_MODE, 0)
|
||||
val mode = if (pickupMode == 1) 1 else 2
|
||||
userViewModel.bindOrder(userId, foodOrderId, mode = mode) { bindResult ->
|
||||
runOnUiThread {
|
||||
block(bindResult)
|
||||
}
|
||||
}
|
||||
}
|
||||
// fun bindOrder(userId: String, block: () -> Unit) {
|
||||
// val pickupMode = SPUtil.getInstance().get(GlobalKey.KEY_PICKUP_MODE, 0)
|
||||
// val mode = if (pickupMode == 1) 1 else 2
|
||||
// userViewModel.bindOrder(userId, foodOrderId, mode = mode) { bindResult ->
|
||||
// runOnUiThread {
|
||||
// if (bindResult.not()) {
|
||||
// hideWaitingDialog()
|
||||
// //ToastUtils.showToast("订单绑定失败")
|
||||
// return@runOnUiThread
|
||||
// }
|
||||
// binding.root.postDelayed({
|
||||
// hideWaitingDialog()
|
||||
// showPayInfo(type = 1, isVip = true, memberInfo = memberInfo)
|
||||
// hidePayTab()
|
||||
// block()
|
||||
// }, 1000)
|
||||
// }
|
||||
// }
|
||||
// }
|
||||
// fun getMemberInfoByPhone(phone: String, key: String, block: (MemberInfo) -> Unit) {
|
||||
// userViewModel.getMemberInfoByPhone(phone, key) { memberInfo ->
|
||||
// runOnUiThread {
|
||||
// if (memberInfo == null) {
|
||||
// hideWaitingDialog()
|
||||
// //ToastUtils.showToast("查询会员信息失败,请稍后重试")
|
||||
// return@runOnUiThread
|
||||
// }
|
||||
// block(memberInfo)
|
||||
// }
|
||||
// }
|
||||
// }
|
||||
// fun getMemberInfo(userId: String, block: (MemberInfo) -> Unit) {
|
||||
// userViewModel.getMemberInfoById(memberId = userId) { memberInfo ->
|
||||
// runOnUiThread {
|
||||
// if (memberInfo == null) {
|
||||
// hideWaitingDialog()
|
||||
// //ToastUtils.showToast("查询会员信息失败,请稍后重试")
|
||||
// return@runOnUiThread
|
||||
// }
|
||||
// block(memberInfo)
|
||||
// }
|
||||
// }
|
||||
// }
|
||||
|
||||
}
|
||||
@@ -10,7 +10,6 @@ import android.view.inputmethod.EditorInfo
|
||||
import android.view.inputmethod.InputMethodManager
|
||||
import android.widget.Toast
|
||||
import androidx.camera.view.PreviewView
|
||||
import androidx.core.net.toUri
|
||||
import androidx.core.view.updateLayoutParams
|
||||
import androidx.lifecycle.lifecycleScope
|
||||
import androidx.recyclerview.widget.GridLayoutManager
|
||||
@@ -40,14 +39,13 @@ import kotlinx.coroutines.launch
|
||||
import okhttp3.RequestBody
|
||||
import okhttp3.RequestBody.Companion.toRequestBody
|
||||
import timber.log.Timber
|
||||
import java.io.File
|
||||
import kotlin.getValue
|
||||
|
||||
class CollectFragment : BaseFragment<FragmentCollectBinding>() {
|
||||
|
||||
companion object {
|
||||
private const val TAG = "CollectFragment"
|
||||
const val MAX_COUNT = 100
|
||||
const val MAX_COUNT = 102
|
||||
}
|
||||
private var selectedFoodId: String? = ""
|
||||
private var selectedFoodName: String? = ""
|
||||
@@ -339,8 +337,11 @@ class CollectFragment : BaseFragment<FragmentCollectBinding>() {
|
||||
private fun clearData() {
|
||||
foodCollectionList.forEach {
|
||||
it.bitmap = null
|
||||
it.imageVector = null
|
||||
it.imageFile = null
|
||||
it.isShowCamera = true
|
||||
it.isFinish = false
|
||||
it.uploadSuccess = false
|
||||
}
|
||||
collectionAdapter.notifyDataSetChanged()
|
||||
|
||||
|
||||
@@ -13,9 +13,9 @@ import com.sw.plate.utils.ToastUtils
|
||||
|
||||
class CashPayFragment : BaseFragment<FragmentCashPayBinding>() {
|
||||
|
||||
private var payActivity: PayActivity? = null
|
||||
private lateinit var payActivity: PayActivity
|
||||
private var foodName: String? = null
|
||||
private var payAmount: String? = null
|
||||
private var payAmount: Double? = null
|
||||
|
||||
var presentation: CashPayPresentation? = null
|
||||
|
||||
@@ -24,20 +24,21 @@ class CashPayFragment : BaseFragment<FragmentCashPayBinding>() {
|
||||
}
|
||||
|
||||
override fun initialize() {
|
||||
payActivity = requireActivity() as? PayActivity
|
||||
|
||||
foodName = payActivity?.foodInfo?.foodName
|
||||
payAmount = payActivity?.foodInfo?.specPrice.format2String(2)
|
||||
binding.tvRealAmount.text = getAmountText(payAmount?:"")
|
||||
payActivity = requireActivity() as PayActivity
|
||||
payActivity.foodInfo?.let {
|
||||
foodName = it.foodName
|
||||
payAmount = (it.specPrice?:0.0) * payActivity.eatNum
|
||||
}
|
||||
binding.tvRealAmount.text = getAmountText(payAmount.format2String(2))
|
||||
|
||||
binding.btnConfirmPayFinish.setOnClickListener {
|
||||
payActivity?.cashPay(hashMapOf(
|
||||
payActivity.cashPay(hashMapOf(
|
||||
//标价金额(单位为元)
|
||||
"totalFee" to (payAmount?:""),
|
||||
"totalFee" to payAmount.format2String(2),
|
||||
//订单类型(0付款1会员充值)
|
||||
"orderType" to "0",
|
||||
//商户订单号
|
||||
"orderNo" to (payActivity?.foodOrderId?:""),
|
||||
"orderNo" to payActivity.foodOrderId,
|
||||
//支付来源:0线下收款 、3:线上纯会员支付 101:支付宝主动、102:支付宝被动、201:微信主动、202:微信被动
|
||||
"paySource" to "0"
|
||||
)) { paySuccess ->
|
||||
@@ -45,7 +46,7 @@ class CashPayFragment : BaseFragment<FragmentCashPayBinding>() {
|
||||
ToastUtils.showToast("接口调用失败")
|
||||
return@cashPay
|
||||
}
|
||||
payActivity?.showPaySuccess( false)
|
||||
payActivity.showPaySuccess( false)
|
||||
}
|
||||
}
|
||||
showSubScreen()
|
||||
@@ -74,11 +75,11 @@ 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
|
||||
it.payAmount = payAmount
|
||||
it.payAmount = payAmount.format2String(2)
|
||||
}
|
||||
presentation?.show()
|
||||
}
|
||||
|
||||
@@ -9,9 +9,9 @@ import com.sw.dualscreen.presentation.pay.FacePayPresentation
|
||||
|
||||
class FacePayFragment : BaseFragment<FragmentFacePayBinding>() {
|
||||
|
||||
private var payActivity: PayActivity? = null
|
||||
private lateinit var payActivity: PayActivity
|
||||
private var foodName: String? = null
|
||||
private var payAmount: String? = null
|
||||
private var payAmount: Double? = null
|
||||
var presentation: FacePayPresentation? = null
|
||||
override fun inflateViewBinding(): FragmentFacePayBinding {
|
||||
return FragmentFacePayBinding.inflate(layoutInflater)
|
||||
@@ -22,8 +22,10 @@ class FacePayFragment : BaseFragment<FragmentFacePayBinding>() {
|
||||
// binding.tvFaceState.setOnClickListener {
|
||||
// payActivity?.showPayResult()
|
||||
// }
|
||||
foodName = payActivity?.foodInfo?.foodName
|
||||
payAmount = payActivity?.foodInfo?.specPrice.format2String(2)
|
||||
payActivity.foodInfo?.let {
|
||||
foodName = it.foodName
|
||||
payAmount = (it.vipPrice?:0.0) * payActivity.eatNum
|
||||
}
|
||||
showSubScreen()
|
||||
}
|
||||
|
||||
@@ -56,16 +58,16 @@ class FacePayFragment : BaseFragment<FragmentFacePayBinding>() {
|
||||
// 查找副屏(通常索引为1)
|
||||
if (displays.size > 1) {
|
||||
presentation = FacePayPresentation(
|
||||
activity = payActivity!!,
|
||||
activity = payActivity,
|
||||
display = displays[1],
|
||||
userViewModel = payActivity!!.userViewModel,
|
||||
recognizeViewModel = payActivity!!.recognizeViewModel,
|
||||
userViewModel = payActivity.userViewModel,
|
||||
recognizeViewModel = payActivity.recognizeViewModel,
|
||||
// parentTextureView = binding.parentTextureView,
|
||||
) {
|
||||
presentation?.dismiss()
|
||||
}.also {
|
||||
it.foodName = foodName
|
||||
it.payAmount = payAmount
|
||||
it.payAmount = payAmount.format2String(2)
|
||||
}
|
||||
presentation?.show()
|
||||
}
|
||||
|
||||
@@ -1,28 +1,82 @@
|
||||
package com.sw.dualscreen.activity.fragment.pay
|
||||
|
||||
import com.sw.dualscreen.GlobalKey
|
||||
import com.sw.dualscreen.activity.PayActivity
|
||||
import com.sw.dualscreen.activity.fragment.BaseFragment
|
||||
import com.sw.dualscreen.databinding.FragmentNumberPayBinding
|
||||
import com.sw.dualscreen.ext.format2String
|
||||
import com.sw.dualscreen.ext.hideKeyboard
|
||||
import com.sw.dualscreen.model.response.MemberInfo
|
||||
import com.sw.dualscreen.presentation.pay.CashPayPresentation
|
||||
import com.sw.dualscreen.utils.SPUtil
|
||||
import com.sw.plate.utils.ToastUtils
|
||||
|
||||
class NumberPayFragment: BaseFragment<FragmentNumberPayBinding>() {
|
||||
class NumberPayFragment : BaseFragment<FragmentNumberPayBinding>() {
|
||||
|
||||
private lateinit var payActivity: PayActivity
|
||||
private var foodName: String? = null
|
||||
private var payAmount: String? = null
|
||||
private var payAmount: Double? = null
|
||||
var presentation: CashPayPresentation? = null
|
||||
override fun inflateViewBinding(): FragmentNumberPayBinding {
|
||||
return FragmentNumberPayBinding.inflate(layoutInflater)
|
||||
}
|
||||
|
||||
override fun initialize() {
|
||||
binding.root.hideKeyboard()
|
||||
binding.root.setOnClickListener { v ->
|
||||
v.hideKeyboard()
|
||||
}
|
||||
payActivity = requireActivity() as PayActivity
|
||||
|
||||
foodName = payActivity.foodInfo?.foodName
|
||||
payAmount = "36.80"
|
||||
payActivity.foodInfo?.let {
|
||||
foodName = it.foodName
|
||||
payAmount = (it.specPrice ?: 0.0) * payActivity.eatNum
|
||||
}
|
||||
binding.btnConfirm.setOnClickListener { v ->
|
||||
val phone = binding.etInputPhone.text.toString().trim()
|
||||
val key = binding.etInputNumber.text.toString().trim()
|
||||
if (phone.isBlank() || key.isBlank()) {
|
||||
ToastUtils.showToast("请输入会员验证信息")
|
||||
return@setOnClickListener
|
||||
}
|
||||
payActivity.showWaitingDialog("加载中,请稍后……")
|
||||
v.hideKeyboard()
|
||||
// payActivity.getMemberInfoByPhone(phone, key) { memberInfo ->
|
||||
// payActivity.bindOrder(memberInfo.id?:"") {
|
||||
// ToastUtils.showToast("会员验证成功")
|
||||
// }
|
||||
// }
|
||||
|
||||
payActivity.getMemberInfoByPhone(phone, key) { memberInfo ->
|
||||
if (memberInfo == null) {
|
||||
payActivity.hideWaitingDialog()
|
||||
//ToastUtils.showToast("查询会员信息失败,请稍后重试")
|
||||
return@getMemberInfoByPhone
|
||||
}
|
||||
//绑定订单使用faceUserId
|
||||
payActivity.bindOrder(memberInfo.faceUserId ?: "") { bindResult ->
|
||||
if (bindResult.not()) {
|
||||
payActivity.hideWaitingDialog()
|
||||
//ToastUtils.showToast("订单绑定失败")
|
||||
return@bindOrder
|
||||
}
|
||||
binding.root.postDelayed({
|
||||
payActivity.hideWaitingDialog()
|
||||
payActivity.showPayInfo(type = 1, isVip = true, memberInfo = memberInfo)
|
||||
payActivity.hidePayTab()
|
||||
}, 1000)
|
||||
}
|
||||
}
|
||||
|
||||
// getMemberInfo(phone, key) { memberInfo ->
|
||||
// bindOrder(memberInfo.id ?: "") {
|
||||
// binding.root.postDelayed({
|
||||
// payActivity.hideWaitingDialog()
|
||||
// payActivity.showPayInfo(type = 1, isVip = true, memberInfo = memberInfo)
|
||||
// payActivity.hidePayTab()
|
||||
// }, 1000)
|
||||
// }
|
||||
// }
|
||||
}
|
||||
showSubScreen()
|
||||
}
|
||||
|
||||
@@ -54,9 +108,31 @@ class NumberPayFragment: BaseFragment<FragmentNumberPayBinding>() {
|
||||
presentation?.dismiss()
|
||||
}.also {
|
||||
it.foodName = foodName
|
||||
it.payAmount = payAmount
|
||||
it.payAmount = payAmount.format2String(2)
|
||||
}
|
||||
presentation?.show()
|
||||
}
|
||||
}
|
||||
|
||||
// private fun bindOrder(userId: String, block: () -> Unit) {
|
||||
// payActivity.bindOrder(userId) { bindResult ->
|
||||
// if (bindResult.not()) {
|
||||
// payActivity.hideWaitingDialog()
|
||||
// //ToastUtils.showToast("订单绑定失败")
|
||||
// return@bindOrder
|
||||
// }
|
||||
// block()
|
||||
// }
|
||||
// }
|
||||
// private fun getMemberInfo(phone: String, key: String, block: (MemberInfo) -> Unit) {
|
||||
// payActivity.getMemberInfoByPhone(phone, key) { memberInfo ->
|
||||
// if (memberInfo == null) {
|
||||
// payActivity.hideWaitingDialog()
|
||||
// //ToastUtils.showToast("查询会员信息失败,请稍后重试")
|
||||
// return@getMemberInfoByPhone
|
||||
// }
|
||||
// block(memberInfo)
|
||||
// }
|
||||
// }
|
||||
|
||||
}
|
||||
@@ -42,7 +42,7 @@ class PayResultFragment : BaseFragment<FragmentPayResultBinding>() {
|
||||
return FragmentPayResultBinding.inflate(layoutInflater)
|
||||
}
|
||||
|
||||
private var payActivity: PayActivity? = null
|
||||
private lateinit var payActivity: PayActivity
|
||||
override fun initialize() {
|
||||
payActivity = activity as PayActivity
|
||||
binding.btnBack.setOnClickListener {
|
||||
@@ -54,7 +54,7 @@ class PayResultFragment : BaseFragment<FragmentPayResultBinding>() {
|
||||
}
|
||||
|
||||
if (memberInfo != null) {
|
||||
totalPrice = payActivity?.foodInfo?.vipPrice ?: 0.0
|
||||
totalPrice = (payActivity.foodInfo?.vipPrice ?: 0.0) * payActivity.eatNum
|
||||
binding.layoutVip.visible()
|
||||
balance = (memberInfo!!.topUpBalance ?: 0.0) + (memberInfo!!.rewardBalance ?: 0.0)
|
||||
realPayPrice = if (balance >= totalPrice) 0.0 else totalPrice - balance
|
||||
@@ -62,7 +62,7 @@ class PayResultFragment : BaseFragment<FragmentPayResultBinding>() {
|
||||
loadUserInfo(memberInfo!!)
|
||||
} else {
|
||||
binding.layoutVip.gone()
|
||||
totalPrice = payActivity?.foodInfo?.specPrice ?: 0.0
|
||||
totalPrice = (payActivity.foodInfo?.specPrice ?: 0.0) * payActivity.eatNum
|
||||
}
|
||||
|
||||
when (pageType) {
|
||||
@@ -77,7 +77,7 @@ class PayResultFragment : BaseFragment<FragmentPayResultBinding>() {
|
||||
binding.tvRealAmount.text = SpannedUtils.getAmountText(
|
||||
listOf(
|
||||
TextBean(text = "¥", textSize = 36),
|
||||
TextBean(text = realPayPrice.format2String(2), textSize = 60),
|
||||
TextBean(text = totalPrice.format2String(2), textSize = 60),
|
||||
)
|
||||
)
|
||||
|
||||
@@ -100,12 +100,12 @@ class PayResultFragment : BaseFragment<FragmentPayResultBinding>() {
|
||||
isEnabled = true
|
||||
//点击支付,接口成功打开成功页面
|
||||
setOnClickListener {
|
||||
payActivity?.showWaitingDialog("支付中,请稍后……")
|
||||
payActivity.showWaitingDialog("支付中,请稍后……")
|
||||
memberPay(totalPrice.format2String(2)) {
|
||||
binding.root.postDelayed({
|
||||
payActivity?.hideWaitingDialog()
|
||||
payActivity?.showPaySuccess(true)
|
||||
},1000)
|
||||
payActivity.hideWaitingDialog()
|
||||
payActivity.showPaySuccess(true)
|
||||
}, 1000)
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -113,16 +113,18 @@ class PayResultFragment : BaseFragment<FragmentPayResultBinding>() {
|
||||
binding.ivPayQrCode.visible()
|
||||
binding.btnConfirmPay.isEnabled = false
|
||||
val payAmount = totalPrice - balance
|
||||
payActivity?.getQrCodeImg(
|
||||
orderId = payActivity!!.foodOrderId,
|
||||
payActivity.getQrCodeImg(
|
||||
orderId = payActivity.foodOrderId,
|
||||
userId = memberInfo!!.id,
|
||||
totalFee = payAmount.format2String(2)
|
||||
) { qrCodeImg ->
|
||||
binding.ivPayQrCode.load(qrCodeImg)
|
||||
//更新副屏二维码
|
||||
payActivity.updateQrCodeImage(qrCodeImg)
|
||||
}
|
||||
paySuccessCallback {
|
||||
//扫码成功回调打开成功页面,后端处理余额扣除
|
||||
payActivity?.showPaySuccess(true)
|
||||
payActivity.showPaySuccess(true)
|
||||
// if (balance > 0.0) {
|
||||
// memberPay(balance.format2String(2)) {
|
||||
// //扫码成功+会员支付完成后打开成功页面
|
||||
@@ -146,13 +148,15 @@ class PayResultFragment : BaseFragment<FragmentPayResultBinding>() {
|
||||
TextBean(text = remainBalance.format2String(2), textSize = 36),
|
||||
)
|
||||
)
|
||||
binding.tvPayAmount.text = "收款金额 ${realPayPrice.format2String(2)} 元"
|
||||
binding.tvPayInfo.text =
|
||||
"应收 ${totalPrice.format2String(2)} 元,余额扣除 ${expensesBalance.format2String(2)} 元"
|
||||
|
||||
val showTotalPrice = totalPrice.format2String(2)
|
||||
binding.tvPayAmount.text = "收款金额 $showTotalPrice 元"
|
||||
|
||||
val showExpensesBalance = expensesBalance.format2String(2)
|
||||
binding.tvPayInfo.text = "应收 $showTotalPrice 元,余额扣除 $showExpensesBalance 元"
|
||||
} else {
|
||||
binding.tvPayAmount.text = "收款金额 ${totalPrice.format2String(2)} 元"
|
||||
binding.tvPayInfo.text =
|
||||
"应收 ${totalPrice.format2String(2)} 元"
|
||||
binding.tvPayInfo.text = "应收 ${totalPrice.format2String(2)} 元"
|
||||
}
|
||||
}
|
||||
|
||||
@@ -165,8 +169,10 @@ class PayResultFragment : BaseFragment<FragmentPayResultBinding>() {
|
||||
|
||||
//余额
|
||||
private var balance = 0.0
|
||||
|
||||
//实际支付金额
|
||||
private var realPayPrice = 0.0
|
||||
|
||||
//扣除余额
|
||||
private var expensesBalance = 0.0
|
||||
|
||||
@@ -174,20 +180,41 @@ class PayResultFragment : BaseFragment<FragmentPayResultBinding>() {
|
||||
val list: MutableList<TextBean> = mutableListOf()
|
||||
|
||||
list.add(TextBean(text = "余额扣除 ", textSize = 30, textColor = "#FF889AC2"))
|
||||
list.add(TextBean(text = "-${expensesBalance.format2String(2)}", textSize = 30, textColor = "#FF0A1428"))
|
||||
list.add(
|
||||
TextBean(
|
||||
text = "-${expensesBalance.format2String(2)}",
|
||||
textSize = 30,
|
||||
textColor = "#FF0A1428",
|
||||
isBold = true
|
||||
)
|
||||
)
|
||||
|
||||
if (balance >= totalPrice) {
|
||||
//余额大于等于总价格,使用余额支付
|
||||
TextBean(text = " 元,扣除后可用余额 ", textSize = 30, textColor = "#FF889AC2")
|
||||
list.add(TextBean(text = " 元,扣除后可用余额 ", textSize = 30, textColor = "#FF889AC2"))
|
||||
val remainingBalance = balance - totalPrice
|
||||
TextBean(text = remainingBalance.format2String(2), textSize = 30, textColor = "#FF0A1428")
|
||||
list.add(
|
||||
TextBean(
|
||||
text = remainingBalance.format2String(2),
|
||||
textSize = 30,
|
||||
textColor = "#FF0A1428",
|
||||
isBold = true
|
||||
)
|
||||
)
|
||||
} else {
|
||||
//余额小于总价格,使用余额+扫码支付
|
||||
//实际支付金额
|
||||
TextBean(text = " 元,还需支付 ", textSize = 30, textColor = "#FF889AC2")
|
||||
TextBean(text = realPayPrice.format2String(2), textSize = 30, textColor = "#FF0A1428")
|
||||
TextBean(text = " 元", textSize = 30, textColor = "#FF889AC2")
|
||||
list.add(TextBean(text = " 元,还需支付 ", textSize = 30, textColor = "#FF889AC2"))
|
||||
list.add(
|
||||
TextBean(
|
||||
text = realPayPrice.format2String(2),
|
||||
textSize = 30,
|
||||
textColor = "#FF0A1428",
|
||||
isBold = true
|
||||
)
|
||||
)
|
||||
}
|
||||
list.add(TextBean(text = " 元", textSize = 30, textColor = "#FF889AC2"))
|
||||
|
||||
return list
|
||||
}
|
||||
@@ -204,14 +231,14 @@ class PayResultFragment : BaseFragment<FragmentPayResultBinding>() {
|
||||
phone
|
||||
}
|
||||
|
||||
private fun memberPay(total: String, callback:()-> Unit) {
|
||||
payActivity?.run {
|
||||
private fun memberPay(total: String, callback: () -> Unit) {
|
||||
payActivity.run {
|
||||
memberPay(
|
||||
param = hashMapOf(
|
||||
//支付金额
|
||||
"totalFee" to total,
|
||||
//订单号
|
||||
"orderNo" to payActivity!!.foodOrderId,
|
||||
"orderNo" to payActivity.foodOrderId,
|
||||
//用户id
|
||||
"memberId" to memberInfo!!.id!!
|
||||
),
|
||||
|
||||
@@ -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 payAmount: Double? = null
|
||||
private var payQrCodePic: String? = null
|
||||
var presentation: ScanQrCodePayPresentation? = null
|
||||
private var countDownJob: Job? = null
|
||||
@@ -36,11 +36,16 @@ class ScanQrCodePayFragment : BaseFragment<FragmentScanQrcodePayBinding>() {
|
||||
override fun initialize() {
|
||||
payActivity = requireActivity() as PayActivity
|
||||
|
||||
foodName = payActivity.foodInfo?.foodName
|
||||
payAmount = payActivity.foodInfo?.specPrice.format2String(2)
|
||||
binding.tvRealAmount.text = getAmountText(payAmount ?: "")
|
||||
|
||||
payActivity.getQrCodeImg(orderId = payActivity.foodOrderId, totalFee = payAmount) {
|
||||
payActivity.foodInfo?.let {
|
||||
foodName = it.foodName
|
||||
payAmount = (it.specPrice?:0.0)*payActivity.eatNum
|
||||
}
|
||||
binding.tvRealAmount.text = getAmountText(payAmount.format2String(2))
|
||||
//不需要绑定会员id
|
||||
payActivity.getQrCodeImg(
|
||||
orderId = payActivity.foodOrderId,
|
||||
totalFee = payAmount.format2String(2)
|
||||
) {
|
||||
payQrCodePic = it
|
||||
binding.ivPayQrCode.load(payQrCodePic)
|
||||
binding.tvPayResult.text = "待支付(60s)..."
|
||||
@@ -84,7 +89,7 @@ class ScanQrCodePayFragment : BaseFragment<FragmentScanQrcodePayBinding>() {
|
||||
presentation?.dismiss()
|
||||
}.also {
|
||||
it.foodName = foodName
|
||||
it.totalPrice = payActivity.foodInfo?.specPrice ?: 0.0
|
||||
it.totalPrice = payAmount ?: 0.0
|
||||
it.payQrCodePic = payQrCodePic
|
||||
}
|
||||
presentation?.show()
|
||||
|
||||
Reference in New Issue
Block a user