diff --git a/app/src/main/java/com/sw/dualscreen/activity/BaseActivity.kt b/app/src/main/java/com/sw/dualscreen/activity/BaseActivity.kt index fcfa140..329c59b 100644 --- a/app/src/main/java/com/sw/dualscreen/activity/BaseActivity.kt +++ b/app/src/main/java/com/sw/dualscreen/activity/BaseActivity.kt @@ -78,9 +78,11 @@ abstract class BaseActivity : AppCompatActivity() { hideWaitingDialog() val view = View.inflate(this, R.layout.dialog_waiting, null) if (!TextUtils.isEmpty(tip)) (view.findViewById(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 } diff --git a/app/src/main/java/com/sw/dualscreen/activity/MainActivity.kt b/app/src/main/java/com/sw/dualscreen/activity/MainActivity.kt index 5ee4147..be0feac 100644 --- a/app/src/main/java/com/sw/dualscreen/activity/MainActivity.kt +++ b/app/src/main/java/com/sw/dualscreen/activity/MainActivity.kt @@ -63,6 +63,7 @@ import kotlin.math.roundToInt class MainActivity : BaseActivity() { companion object { + private const val TAG = "MainActivity" const val TIME_OUT = 5 * 60 * 1000L } @@ -237,32 +238,35 @@ class MainActivity : BaseActivity() { //计费 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() { } } + private var recognizeWeight = 0.0 fun updateCurrentFood(foodInfo: FoodInfo?) { if (foodInfo == null) { binding.tvFoodName.text = "-" @@ -280,6 +285,7 @@ class MainActivity : BaseActivity() { return } pauseAnalysis() + recognizeWeight = lastWeight presentation?.updateFood(foodInfo) binding.tvFoodName.text = foodInfo.foodName binding.previewView.visibility = View.GONE @@ -393,13 +399,9 @@ class MainActivity : BaseActivity() { @SuppressLint("NotifyDataSetChanged") private fun updateFoodInfo(list: MutableList, scoreList: List) { - 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() { 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() { 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() { } } - 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() } diff --git a/app/src/main/java/com/sw/dualscreen/activity/PayActivity.kt b/app/src/main/java/com/sw/dualscreen/activity/PayActivity.kt index f50ed14..223fbb9 100644 --- a/app/src/main/java/com/sw/dualscreen/activity/PayActivity.kt +++ b/app/src/main/java/com/sw/dualscreen/activity/PayActivity.kt @@ -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() { 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() { 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() { } } -// 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() { }.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() { userViewModel.memberPay(param) { runOnUiThread { if (it.not()) { - ToastUtils.showToast("支付失败,请稍后重试") + //ToastUtils.showToast("支付失败,请稍后重试") return@runOnUiThread } block() @@ -242,14 +231,72 @@ class PayActivity : BaseActivity() { 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) +// } // } // } - } \ No newline at end of file diff --git a/app/src/main/java/com/sw/dualscreen/activity/fragment/CollectFragment.kt b/app/src/main/java/com/sw/dualscreen/activity/fragment/CollectFragment.kt index 989a991..717818e 100644 --- a/app/src/main/java/com/sw/dualscreen/activity/fragment/CollectFragment.kt +++ b/app/src/main/java/com/sw/dualscreen/activity/fragment/CollectFragment.kt @@ -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() { 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() { 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() diff --git a/app/src/main/java/com/sw/dualscreen/activity/fragment/pay/CashPayFragment.kt b/app/src/main/java/com/sw/dualscreen/activity/fragment/pay/CashPayFragment.kt index 4796dee..52794db 100644 --- a/app/src/main/java/com/sw/dualscreen/activity/fragment/pay/CashPayFragment.kt +++ b/app/src/main/java/com/sw/dualscreen/activity/fragment/pay/CashPayFragment.kt @@ -13,9 +13,9 @@ import com.sw.plate.utils.ToastUtils class CashPayFragment : BaseFragment() { - 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() { } 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() { ToastUtils.showToast("接口调用失败") return@cashPay } - payActivity?.showPaySuccess( false) + payActivity.showPaySuccess( false) } } showSubScreen() @@ -74,11 +75,11 @@ class CashPayFragment : BaseFragment() { 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() } diff --git a/app/src/main/java/com/sw/dualscreen/activity/fragment/pay/FacePayFragment.kt b/app/src/main/java/com/sw/dualscreen/activity/fragment/pay/FacePayFragment.kt index 9201fb4..25372b7 100644 --- a/app/src/main/java/com/sw/dualscreen/activity/fragment/pay/FacePayFragment.kt +++ b/app/src/main/java/com/sw/dualscreen/activity/fragment/pay/FacePayFragment.kt @@ -9,9 +9,9 @@ import com.sw.dualscreen.presentation.pay.FacePayPresentation class FacePayFragment : BaseFragment() { - 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() { // 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() { // 查找副屏(通常索引为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() } diff --git a/app/src/main/java/com/sw/dualscreen/activity/fragment/pay/NumberPayFragment.kt b/app/src/main/java/com/sw/dualscreen/activity/fragment/pay/NumberPayFragment.kt index 1554cce..31e25d9 100644 --- a/app/src/main/java/com/sw/dualscreen/activity/fragment/pay/NumberPayFragment.kt +++ b/app/src/main/java/com/sw/dualscreen/activity/fragment/pay/NumberPayFragment.kt @@ -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() { +class NumberPayFragment : BaseFragment() { 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() { 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) +// } +// } + } \ No newline at end of file diff --git a/app/src/main/java/com/sw/dualscreen/activity/fragment/pay/PayResultFragment.kt b/app/src/main/java/com/sw/dualscreen/activity/fragment/pay/PayResultFragment.kt index 3780240..a2ccadd 100644 --- a/app/src/main/java/com/sw/dualscreen/activity/fragment/pay/PayResultFragment.kt +++ b/app/src/main/java/com/sw/dualscreen/activity/fragment/pay/PayResultFragment.kt @@ -42,7 +42,7 @@ class PayResultFragment : BaseFragment() { 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() { } 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() { 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() { 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() { 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() { 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() { 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() { //余额 private var balance = 0.0 + //实际支付金额 private var realPayPrice = 0.0 + //扣除余额 private var expensesBalance = 0.0 @@ -174,20 +180,41 @@ class PayResultFragment : BaseFragment() { val list: MutableList = 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() { 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!! ), diff --git a/app/src/main/java/com/sw/dualscreen/activity/fragment/pay/ScanQrCodePayFragment.kt b/app/src/main/java/com/sw/dualscreen/activity/fragment/pay/ScanQrCodePayFragment.kt index d6dd1ba..0e19568 100644 --- a/app/src/main/java/com/sw/dualscreen/activity/fragment/pay/ScanQrCodePayFragment.kt +++ b/app/src/main/java/com/sw/dualscreen/activity/fragment/pay/ScanQrCodePayFragment.kt @@ -24,7 +24,7 @@ class ScanQrCodePayFragment : BaseFragment() { 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() { 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() { presentation?.dismiss() }.also { it.foodName = foodName - it.totalPrice = payActivity.foodInfo?.specPrice ?: 0.0 + it.totalPrice = payAmount ?: 0.0 it.payQrCodePic = payQrCodePic } presentation?.show() diff --git a/app/src/main/java/com/sw/dualscreen/model/response/DataBean.kt b/app/src/main/java/com/sw/dualscreen/model/response/DataBean.kt index 67f7185..41f0991 100644 --- a/app/src/main/java/com/sw/dualscreen/model/response/DataBean.kt +++ b/app/src/main/java/com/sw/dualscreen/model/response/DataBean.kt @@ -30,12 +30,17 @@ data class FoodOrder( var notPay: Boolean, //备注 var remark: String? = "", + + //即放即取-1,称重-2 + var mode: Int ) @Parcelize data class MemberInfo( //会员id val id: String?, + //刷脸识别用户ID + val faceUserId: String?, //手机号 val phone: String?, //姓名 @@ -53,7 +58,8 @@ data class MemberInfo( data class TextBean( var text: String, var textSize: Int = 0, - var textColor: String? = null + var textColor: String? = null, + var isBold: Boolean = false ) data class UserNutrition( @@ -104,4 +110,9 @@ data class UserEnergy( var grain:Double, var fruitsVegetables:Double, var meatEggs:Double, +) + +data class RespCodeMsg( + val code: String?, + val msg: String? ) \ No newline at end of file diff --git a/app/src/main/java/com/sw/dualscreen/network/api/ApiService.kt b/app/src/main/java/com/sw/dualscreen/network/api/ApiService.kt index 57da1b0..0df52d3 100644 --- a/app/src/main/java/com/sw/dualscreen/network/api/ApiService.kt +++ b/app/src/main/java/com/sw/dualscreen/network/api/ApiService.kt @@ -213,11 +213,20 @@ interface ApiService { * APP根据id获取会员或员工信息及余额 */ @GET - suspend fun getMemberInfo( + suspend fun getMemberInfoById( @Url url: String = "${GlobalData.appBaseUrl}/terminal/neglect/common/app/getUserInfoBalanceById", @Query("id") memberId: String, ): ApiResponse + /** + * 根据手机尾号和密钥查询员工信息及余额 + */ + @POST + suspend fun getMemberInfoByPhone( + @Url url: String = "${GlobalData.appBaseUrl}/terminal/neglect/common/app/queryUserInfoBalanceByPhone", + @Body param: HashMap + ): ApiResponse + /** * 绑定用户与订单号 */ @@ -225,7 +234,8 @@ interface ApiService { suspend fun bindOrder( @Url url: String = "${GlobalData.appBaseUrl}/terminal/neglect/boothMachine/app/bingOrder", @Query("userId") userId: String, - @Query("orderNo") orderId: String + @Query("orderNo") orderId: String, + @Query("mode") mode: Int ): ApiResponse diff --git a/app/src/main/java/com/sw/dualscreen/presentation/MainScreenPresentation.kt b/app/src/main/java/com/sw/dualscreen/presentation/MainScreenPresentation.kt index 5dc2993..629dc75 100644 --- a/app/src/main/java/com/sw/dualscreen/presentation/MainScreenPresentation.kt +++ b/app/src/main/java/com/sw/dualscreen/presentation/MainScreenPresentation.kt @@ -121,18 +121,18 @@ class MainScreenPresentation( .d("updateWeight lastWeight = $weight, currentStep = $currentStep, isGoStep1 = $isGoStep1") mealPickupMode = SPUtil.getInstance().get(GlobalKey.KEY_PICKUP_MODE, 0) ?: 0 val chargeMode = SPUtil.getInstance().get(GlobalKey.KEY_CHARGE_MODE, 0) - if (mealPickupMode == 1 && chargeMode == 0) { - //余量计量+计费模式 - if (isFirstGetWeight && lastWeight > 5) { - recognitionWeight = lastWeight - isFirstGetWeight = false - } - if (lastWeight > 5) { - //余量计量,有重量的情况下不回到重新识别状态 - return - } - isFirstGetWeight = true - } +// if (mealPickupMode == 1 && chargeMode == 0) { +// //余量计量+计费模式 +// if (isFirstGetWeight && lastWeight > 5) { +// recognitionWeight = lastWeight +// isFirstGetWeight = false +// } +// if (lastWeight > 5) { +// //余量计量,有重量的情况下不回到重新识别状态 +// return +// } +// isFirstGetWeight = true +// } if (currentStep == 2 && lastWeight <= 5 && isGoStep1) { //人脸识别过程中,秤上物品拿走 isGoStep1 = false @@ -1109,7 +1109,8 @@ class MainScreenPresentation( activity.createOrder( foodInfo = currentFood!!, foodWeight = lastWeight.roundToInt(), - eatWeight = eatWeight.roundToInt() + eatWeight = eatWeight.roundToInt(), + eatNum = activity.getEatNum(eatWeight, currentFood!!.specWeight) ) { if (MyApp.DEBUG) { ToastUtils.showToast("订单已生成") diff --git a/app/src/main/java/com/sw/dualscreen/presentation/pay/FacePayPresentation.kt b/app/src/main/java/com/sw/dualscreen/presentation/pay/FacePayPresentation.kt index 14ccb3b..bc54781 100644 --- a/app/src/main/java/com/sw/dualscreen/presentation/pay/FacePayPresentation.kt +++ b/app/src/main/java/com/sw/dualscreen/presentation/pay/FacePayPresentation.kt @@ -4,36 +4,28 @@ import android.Manifest import android.app.Dialog import android.app.Presentation import android.content.pm.PackageManager -import android.graphics.Bitmap import android.graphics.Point import android.hardware.Camera import android.os.Build import android.os.Bundle -import android.text.Spanned -import android.text.SpannedString import android.text.TextUtils -import android.text.style.AbsoluteSizeSpan import android.view.Display -import android.view.TextureView import android.view.View import android.view.ViewGroup import android.view.ViewTreeObserver -import android.widget.ImageView import android.widget.TextView import androidx.annotation.RequiresApi import androidx.core.content.ContextCompat -import androidx.core.text.buildSpannedString import androidx.lifecycle.Observer import androidx.lifecycle.lifecycleScope import com.arcsoft.face.ErrorInfo +import com.sw.dualscreen.GlobalKey import com.sw.dualscreen.R import com.sw.dualscreen.activity.PayActivity import com.sw.dualscreen.databinding.PresentationFacePayBinding -import com.sw.dualscreen.ext.format2String -import com.sw.dualscreen.ext.load import com.sw.dualscreen.model.response.MemberInfo import com.sw.dualscreen.model.response.TextBean -import com.sw.dualscreen.utils.GsonUtils +import com.sw.dualscreen.utils.SPUtil import com.sw.dualscreen.utils.SpannedUtils import com.sw.dualscreen.view.CustomDialog import com.sw.dualscreen.viewmodel.UserViewModel @@ -248,7 +240,7 @@ class FacePayPresentation( // recognitionWeight = lastWeight lastFaceTrackId = compareResult.trackId val faceEntity = compareResult.faceEntity - var userId = faceEntity.userName + val userId = faceEntity.userName if (userId == null) return@Observer // TODO: 测试支付用户id // userId = "1987710988425662466" @@ -566,77 +558,66 @@ class FacePayPresentation( } private var lastFaceTrackId: Int = -1 // 上一次的人脸信息 - private var mDialogWaiting: CustomDialog? = null - - /** - * 显示等待提示框 - */ - fun showWaitingDialog(tip: String?): Dialog? { - hideWaitingDialog() - val view = View.inflate(activity, R.layout.dialog_waiting, null) - if (!TextUtils.isEmpty(tip)) (view.findViewById(R.id.tvTip) as TextView).text = tip - mDialogWaiting = CustomDialog(activity, view, R.style.MyDialog) - mDialogWaiting!!.show() - mDialogWaiting!!.setCancelable(true) - return mDialogWaiting - } - - /** - * 隐藏等待提示框 - */ - fun hideWaitingDialog() { - mDialogWaiting?.dismiss() - mDialogWaiting = null - } override fun onDisplayRemoved() { super.onDisplayRemoved() onDismissListener() } + private fun faceRecSuccess(userId: String) { activity.runOnUiThread { - showWaitingDialog("加载中,请稍后……") + activity.showWaitingDialog("加载中,请稍后……") } - getMemberInfo(userId) { memberInfo -> - bindOrder(userId) { + activity.getMemberInfoById(userId) { memberInfo -> + if (memberInfo == null) { + activity.hideWaitingDialog() + //ToastUtils.showToast("查询会员信息失败,请稍后重试") + return@getMemberInfoById + } + activity.bindOrder(memberInfo.faceUserId?:"") { bindResult -> + if (bindResult.not()) { + activity.hideWaitingDialog() + //ToastUtils.showToast("订单绑定失败") + return@bindOrder + } binding.root.postDelayed({ - hideWaitingDialog() + activity.hideWaitingDialog() activity.showPayInfo(type = 1, isVip = true, memberInfo = memberInfo) activity.hidePayTab() binding.root.postDelayed({ dismiss() }, 500) - }, 1500) - } - } - } - - private fun bindOrder(userId:String, block:()-> Unit) { - userViewModel.bindOrder(userId, activity.foodOrderId) { bindResult -> - activity.runOnUiThread { - if (bindResult.not()) { - hideWaitingDialog() - ToastUtils.showToast("订单绑定失败") - return@runOnUiThread - } - block() - } - } - } - - private fun getMemberInfo(userId: String, block:(MemberInfo)-> Unit) { - userViewModel.getMemberInfo(memberId = userId) { memberInfo -> - activity.runOnUiThread { - if (memberInfo == null) { - hideWaitingDialog() - ToastUtils.showToast("查询会员信息失败,请稍后重试") - return@runOnUiThread - } - block(memberInfo) + }, 1000) } } } +// private 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, activity.foodOrderId, mode = mode) { bindResult -> +// activity.runOnUiThread { +// if (bindResult.not()) { +// activity.hideWaitingDialog() +// //ToastUtils.showToast("订单绑定失败") +// return@runOnUiThread +// } +// block() +// } +// } +// } +// private fun getMemberInfo(userId: String, block:(MemberInfo)-> Unit) { +// userViewModel.getMemberInfoById(memberId = userId) { memberInfo -> +// activity.runOnUiThread { +// if (memberInfo == null) { +// activity.hideWaitingDialog() +// //ToastUtils.showToast("查询会员信息失败,请稍后重试") +// return@runOnUiThread +// } +// block(memberInfo) +// } +// } +// } } \ No newline at end of file diff --git a/app/src/main/java/com/sw/dualscreen/presentation/pay/ScanQrCodePayPresentation.kt b/app/src/main/java/com/sw/dualscreen/presentation/pay/ScanQrCodePayPresentation.kt index 8df6cc4..9ec49ba 100644 --- a/app/src/main/java/com/sw/dualscreen/presentation/pay/ScanQrCodePayPresentation.kt +++ b/app/src/main/java/com/sw/dualscreen/presentation/pay/ScanQrCodePayPresentation.kt @@ -74,12 +74,11 @@ class ScanQrCodePayPresentation( 1 -> { val memberInfo = activity.memberInfo binding.layoutVip.run { - if (memberInfo!=null) visible() else gone() + if (memberInfo != null) visible() else gone() } binding.layoutPaySuccess.gone() binding.layoutScanQrCode.visible() - //totalPrice = if (memberInfo != null) activity.foodInfo?.vipPrice else activity.foodInfo?.specPrice 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 @@ -110,13 +109,13 @@ class ScanQrCodePayPresentation( 2 -> { val memberInfo = activity.memberInfo binding.layoutVip.run { - if (memberInfo!=null) visible() else gone() + if (memberInfo != null) visible() else gone() } binding.layoutPaySuccess.visible() binding.layoutScanQrCode.gone() - //totalPrice = activity.foodInfo?.vipPrice ?: 0.0 - balance = if (memberInfo != null) (memberInfo.topUpBalance ?: 0.0)+(memberInfo.rewardBalance ?: 0.0) else 0.0 + balance = if (memberInfo != null) (memberInfo.topUpBalance + ?: 0.0) + (memberInfo.rewardBalance ?: 0.0) else 0.0 realPayPrice = if (balance >= totalPrice) 0.0 else totalPrice - balance expensesBalance = if (balance >= totalPrice) totalPrice else balance @@ -136,6 +135,10 @@ class ScanQrCodePayPresentation( } } + fun loadQrCodeImage(qrCodeUrl: String?) { + binding.ivPayQrCode.load(qrCodeUrl) + } + private fun loadUserInfo(item: MemberInfo) { binding.ivHeadPic.load(item.faceUrl?.ifBlank { R.drawable.ic_avatar_default }) binding.tvUserName.text = item.name @@ -154,24 +157,37 @@ class ScanQrCodePayPresentation( TextBean( text = "-${expensesBalance.format2String(2)}", textSize = 30, - textColor = "#FF0A1428" + textColor = "#FF0A1428", + isBold = true ) ) if (balance >= totalPrice) { //余额大于等于总价格,使用余额支付 - TextBean(text = " 元,扣除后可用余额 ", textSize = 30, textColor = "#FF5E7585") + list.add(TextBean(text = " 元,扣除后可用余额 ", textSize = 30, textColor = "#FF5E7585")) 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 = "#FF5E7585") - TextBean(text = realPayPrice.format2String(2), textSize = 30, textColor = "#FF0A1428") - TextBean(text = " 元", textSize = 30, textColor = "#FF5E7585") + list.add(TextBean(text = " 元,还需支付 ", textSize = 30, textColor = "#FF5E7585")) + list.add( + TextBean( + text = realPayPrice.format2String(2), + textSize = 30, + textColor = "#FF0A1428", + isBold = true + ) + ) } + list.add(TextBean(text = " 元", textSize = 30, textColor = "#FF5E7585")) return list } diff --git a/app/src/main/java/com/sw/dualscreen/repository/BaseRepository.kt b/app/src/main/java/com/sw/dualscreen/repository/BaseRepository.kt index f34eeaa..18dbcb2 100644 --- a/app/src/main/java/com/sw/dualscreen/repository/BaseRepository.kt +++ b/app/src/main/java/com/sw/dualscreen/repository/BaseRepository.kt @@ -2,6 +2,8 @@ package com.sw.dualscreen.repository import com.google.gson.JsonParseException import com.sw.dualscreen.model.response.ApiResponse +import com.sw.dualscreen.model.response.RespCodeMsg +import com.sw.dualscreen.utils.GsonUtils import retrofit2.HttpException import timber.log.Timber import java.io.IOException @@ -18,7 +20,13 @@ abstract class BaseRepository { when (e) { is HttpException -> { - ApiResponse(code = "${e.code()}", msg = e.message()) + val respData = e.response()?.errorBody()?.string() + val respCodeMsg = GsonUtils.fromJson(respData, RespCodeMsg::class.java) + if (respCodeMsg?.msg.isNullOrBlank()) { + ApiResponse(code = "${e.code()}", msg = e.message()) + } else { + ApiResponse(code = respCodeMsg.code ?:"-10", msg = respCodeMsg.msg) + } } is SocketTimeoutException -> { diff --git a/app/src/main/java/com/sw/dualscreen/repository/RemoteRepository.kt b/app/src/main/java/com/sw/dualscreen/repository/RemoteRepository.kt index 82a0c33..959bbe2 100644 --- a/app/src/main/java/com/sw/dualscreen/repository/RemoteRepository.kt +++ b/app/src/main/java/com/sw/dualscreen/repository/RemoteRepository.kt @@ -222,15 +222,33 @@ class RemoteRepository constructor( } } - suspend fun bindOrder(userId: String, orderId: String): ApiResponse { + /** + * 绑定订单 + */ + suspend fun bindOrder(userId: String, orderId: String, mode: Int): ApiResponse { return safeApiCall { - apiService.bindOrder(userId = userId, orderId = orderId) + apiService.bindOrder(userId = userId, orderId = orderId, mode = mode) } } - suspend fun getMemberInfo(memberId: String): ApiResponse { + /** + * 根据id查询会员信息 + */ + suspend fun getMemberInfoById(memberId: String): ApiResponse { return safeApiCall { - apiService.getMemberInfo(memberId = memberId) + apiService.getMemberInfoById(memberId = memberId) + } + } + + /** + * 根据id查询会员信息 + */ + suspend fun getMemberInfoByPhone(phone: String, key: String): ApiResponse { + return safeApiCall { + apiService.getMemberInfoByPhone(param = hashMapOf( + "phone" to phone, + "password" to key + )) } } diff --git a/app/src/main/java/com/sw/dualscreen/utils/SpannedUtils.kt b/app/src/main/java/com/sw/dualscreen/utils/SpannedUtils.kt index ab1fa40..0ee61eb 100644 --- a/app/src/main/java/com/sw/dualscreen/utils/SpannedUtils.kt +++ b/app/src/main/java/com/sw/dualscreen/utils/SpannedUtils.kt @@ -1,9 +1,11 @@ package com.sw.dualscreen.utils +import android.graphics.Typeface import android.text.Spanned import android.text.SpannedString import android.text.style.AbsoluteSizeSpan import android.text.style.ForegroundColorSpan +import android.text.style.StyleSpan import androidx.core.graphics.toColorInt import androidx.core.text.buildSpannedString import com.sw.dualscreen.model.response.TextBean @@ -24,6 +26,9 @@ object SpannedUtils { if (it.textColor.isNullOrBlank().not()) { setSpan(ForegroundColorSpan(it.textColor!!.toColorInt()), start, end, SPAN_FLAGS) } + if (it.isBold) { + setSpan(StyleSpan(Typeface.BOLD), start, end, SPAN_FLAGS) + } } } } diff --git a/app/src/main/java/com/sw/dualscreen/viewmodel/UserViewModel.kt b/app/src/main/java/com/sw/dualscreen/viewmodel/UserViewModel.kt index 95cfbd1..7813b39 100644 --- a/app/src/main/java/com/sw/dualscreen/viewmodel/UserViewModel.kt +++ b/app/src/main/java/com/sw/dualscreen/viewmodel/UserViewModel.kt @@ -9,12 +9,10 @@ import com.sw.dualscreen.model.response.DinnerType import com.sw.dualscreen.model.response.FoodInfo import com.sw.dualscreen.model.response.FoodOrder import com.sw.dualscreen.model.response.MemberInfo -import com.sw.dualscreen.model.response.PayResult import com.sw.dualscreen.model.response.UserFaceModel import com.sw.dualscreen.model.response.UserFaceModel2 import com.sw.dualscreen.model.response.UserNutrition import com.sw.dualscreen.objbox.CollectedFoodInfo -import com.sw.dualscreen.utils.GsonUtils import com.sw.dualscreen.utils.SPUtil import com.sw.plate.App import com.sw.plate.utils.Base64 @@ -277,10 +275,16 @@ class UserViewModel : BaseViewModel() { /** * 获取支付二维码 */ - fun getQrCodeImg(orderId: String, userId: String? = null, totalFee: String?=null, block: (String?) -> Unit) { + fun getQrCodeImg( + orderId: String, + userId: String? = null, + totalFee: String? = null, + block: (String?) -> Unit + ) { Timber.tag(TAG).d("getQrCodeImg orderId = $orderId, userId = $userId") launch { - val response = repository.getQrCodeImg(orderNo = orderId, memberId = userId, totalFee = totalFee) + val response = + repository.getQrCodeImg(orderNo = orderId, memberId = userId, totalFee = totalFee) if (parseResponse(response)) { block(response.data) } else { @@ -419,10 +423,10 @@ class UserViewModel : BaseViewModel() { /** * 绑定订单 */ - fun bindOrder(userId: String, orderId: String, block: (Boolean) -> Unit) { + fun bindOrder(userId: String, orderId: String, mode: Int, block: (Boolean) -> Unit) { Timber.tag(TAG).d("bindOrder") launchWithLoading { - val response = repository.bindOrder(userId = userId, orderId = orderId) + val response = repository.bindOrder(userId = userId, orderId = orderId, mode =mode) if (parseResponse(response)) { block(true) } else { @@ -431,10 +435,22 @@ class UserViewModel : BaseViewModel() { } } - fun getMemberInfo(memberId: String, block: (MemberInfo?) -> Unit) { + fun getMemberInfoById(memberId: String, block: (MemberInfo?) -> Unit) { Timber.tag(TAG).d("getMemberInfo") launchWithLoading { - val response = repository.getMemberInfo(memberId) + val response = repository.getMemberInfoById(memberId) + if (parseResponse(response)) { + block(response.data) + } else { + block(null) + } + } + } + + fun getMemberInfoByPhone(phone: String, key: String, block: (MemberInfo?) -> Unit) { + Timber.tag(TAG).d("getMemberInfo") + launchWithLoading { + val response = repository.getMemberInfoByPhone(phone, key) if (parseResponse(response)) { block(response.data) } else { diff --git a/app/src/main/res/drawable/line_shape_horizontal.xml b/app/src/main/res/drawable/line_shape_horizontal.xml new file mode 100644 index 0000000..37a5000 --- /dev/null +++ b/app/src/main/res/drawable/line_shape_horizontal.xml @@ -0,0 +1,17 @@ + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/app/src/main/res/layout/activity_setting.xml b/app/src/main/res/layout/activity_setting.xml index baa4e8e..ca7d750 100644 --- a/app/src/main/res/layout/activity_setting.xml +++ b/app/src/main/res/layout/activity_setting.xml @@ -31,6 +31,7 @@ android:text="经营设置" android:textColor="@color/setting_radio" android:textSize="30sp" + android:drawableBottom="@drawable/line_shape_horizontal" android:textStyle="bold" /> diff --git a/app/src/main/res/layout/fragment_number_pay.xml b/app/src/main/res/layout/fragment_number_pay.xml index f502525..6e37b06 100644 --- a/app/src/main/res/layout/fragment_number_pay.xml +++ b/app/src/main/res/layout/fragment_number_pay.xml @@ -53,6 +53,7 @@ tools:ignore="Autofill,HardcodedText,LabelFor,TextFields" /> + - + android:paddingTop="10dp" + android:paddingBottom="10dp" + android:gravity="center_vertical" + android:paddingStart="20dp" + android:paddingEnd="20dp" + android:textColor="#ffffff" + android:textSize="36sp" + tools:text="TextView" /> \ No newline at end of file