From b51be58c64177cf6a2129a905ffdc9bd46929773 Mon Sep 17 00:00:00 2001 From: lvmeng <848755140@qq.com> Date: Thu, 19 Mar 2026 14:19:20 +0800 Subject: [PATCH] =?UTF-8?q?=E8=81=94=E5=90=88=E6=94=AF=E4=BB=98=E6=A8=A1?= =?UTF-8?q?=E5=BC=8F=E4=BD=BF=E7=94=A8=E4=BA=BA=E8=84=B8=E8=AF=86=E5=88=AB?= =?UTF-8?q?=E7=94=9F=E6=88=90=E5=B0=B1=E9=A4=90=E8=AE=B0=E5=BD=95?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../main/java/com/sw/dualscreen/GlobalData.kt | 1 + .../sw/dualscreen/activity/InitActivity.kt | 6 ++ .../sw/dualscreen/activity/MainActivity.kt | 36 +++++++-- .../com/sw/dualscreen/activity/PayActivity.kt | 1 + .../activity/fragment/BusinessFragment.kt | 23 ++++-- .../sw/dualscreen/model/response/DataBean.kt | 6 +- .../presentation/MainScreenPresentation.kt | 47 +++++++++-- app/src/main/res/layout/fragment_business.xml | 80 +++++++++++++++++++ 8 files changed, 176 insertions(+), 24 deletions(-) diff --git a/app/src/main/java/com/sw/dualscreen/GlobalData.kt b/app/src/main/java/com/sw/dualscreen/GlobalData.kt index 8d342c2..c916641 100644 --- a/app/src/main/java/com/sw/dualscreen/GlobalData.kt +++ b/app/src/main/java/com/sw/dualscreen/GlobalData.kt @@ -68,4 +68,5 @@ object GlobalKey { const val KEY_USER_INFO = "userInfoKey" const val KEY_PICKUP_MODE = "pickupMode" const val KEY_CHARGE_MODE = "chargeMode" + const val KEY_SETTLEMENT_MODE = "settlementMode" } \ No newline at end of file diff --git a/app/src/main/java/com/sw/dualscreen/activity/InitActivity.kt b/app/src/main/java/com/sw/dualscreen/activity/InitActivity.kt index 48c78bb..0bc20e8 100644 --- a/app/src/main/java/com/sw/dualscreen/activity/InitActivity.kt +++ b/app/src/main/java/com/sw/dualscreen/activity/InitActivity.kt @@ -9,6 +9,7 @@ import androidx.activity.viewModels import androidx.core.content.ContextCompat import androidx.lifecycle.lifecycleScope import com.sw.dualscreen.GlobalData +import com.sw.dualscreen.GlobalKey import com.sw.dualscreen.databinding.ActivityInitBinding import com.sw.dualscreen.dialog.RemindDialog import com.sw.dualscreen.ext.clickWithDebounce @@ -18,6 +19,7 @@ import com.sw.dualscreen.objbox.Food import com.sw.dualscreen.objbox.FoodModule import com.sw.dualscreen.objbox.ObjectBox import com.sw.dualscreen.utils.L +import com.sw.dualscreen.utils.SPUtil import com.sw.dualscreen.viewmodel.BaseViewModel import com.sw.dualscreen.viewmodel.UserViewModel import com.sw.plate.utils.AppUtil @@ -110,6 +112,10 @@ class InitActivity : BaseActivity() { override fun initialize() { super.initialize() + // TODO: 暂时写死,后续改为从接口获取结算类型 ------------------------------------------ + val settlementMode = 0 + SPUtil.getInstance().put(GlobalKey.KEY_SETTLEMENT_MODE, settlementMode) + registerKeyEvent() initNetworkTimer() binding.okButton.clickWithDebounce(500) { 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 e936c5f..34ba397 100644 --- a/app/src/main/java/com/sw/dualscreen/activity/MainActivity.kt +++ b/app/src/main/java/com/sw/dualscreen/activity/MainActivity.kt @@ -117,7 +117,7 @@ class MainActivity : BaseActivity() { checkedItem = item notifyDataSetChanged() updateCurrentFood(item) - + //0-计费,1-不计费 val mode = SPUtil.getInstance().get(GlobalKey.KEY_CHARGE_MODE, 0) //不计费模式切换菜品,重新加载数据 if (mode == 1) { @@ -595,11 +595,13 @@ class MainActivity : BaseActivity() { } } } - //根据付费模式确认是否显示按钮 binding.btnPay.run { - val mode = SPUtil.getInstance().get(GlobalKey.KEY_CHARGE_MODE, 0) - if (mode == 0) visible() else gone() + //0-计费,1-不计费 + val chargeMode = SPUtil.getInstance().get(GlobalKey.KEY_CHARGE_MODE, 0) + //0-联合支付,1-独立支付 + val settlementMode = SPUtil.getInstance().get(GlobalKey.KEY_SETTLEMENT_MODE, 1) + if (settlementMode == 1 && chargeMode == 0) visible() else gone() } } @@ -634,16 +636,26 @@ class MainActivity : BaseActivity() { lastTouchTime = System.currentTimeMillis() } + fun joinPayment() { + + } + fun createOrder( foodInfo: FoodInfo, foodWeight: Int, eatWeight: Int, eatNum: Int, userId: String?, + isMember:Boolean, notEnoughOneBlock: () -> Unit = {}, block: () -> Unit ) { log("foodWeight=$foodWeight,eatWeight=$eatWeight") + //0-联合支付,1-独立支付 + val settlementMode = SPUtil.getInstance().get(GlobalKey.KEY_SETTLEMENT_MODE, 1) + //0-计费,1-不计费 + val chargeMode = SPUtil.getInstance().get(GlobalKey.KEY_CHARGE_MODE, 0) + //0-即放即取,1-余量计量 val pickupMode = SPUtil.getInstance().get(GlobalKey.KEY_PICKUP_MODE, 0) ?: 0 // if (pickupMode == 0) { // if (foodWeight <= 5) { @@ -661,7 +673,6 @@ class MainActivity : BaseActivity() { return } showWaitingDialog("加载中,请稍候……") - val chargeMode = SPUtil.getInstance().get(GlobalKey.KEY_CHARGE_MODE, 0) val order = FoodOrder( deviceId = GlobalData.deviceId, foodId = foodInfo.foodId, @@ -675,7 +686,9 @@ class MainActivity : BaseActivity() { userId = userId, notPay = chargeMode != 0, //即放即取-1,称重-2 - mode = if (pickupMode == 1) 1 else 2 + mode = if (pickupMode == 1) 1 else 2, + paymentFrom = if (settlementMode == 0) 1 else 2, + member = isMember ) submitOrder(order, block) } @@ -734,6 +747,7 @@ class MainActivity : BaseActivity() { @Subscribe(threadMode = ThreadMode.MAIN) fun onPaySuccessEvent(event: PaySuccessEvent) { isRefreshPage = true + //0-计费,1-不计费 val chargeMode = SPUtil.getInstance().get(GlobalKey.KEY_CHARGE_MODE, 0) ?: 0 presentation?.hideNutritionView(chargeMode) presentation?.cancel() @@ -768,7 +782,9 @@ class MainActivity : BaseActivity() { } //val realWeight = (lastWeight * 1000).roundToInt() + //0-即放即取,1-余量计量 val mealPickupMode = SPUtil.getInstance().get(GlobalKey.KEY_PICKUP_MODE, 0) ?: 0 + //0-计费,1-不计费 val chargeMode = SPUtil.getInstance().get(GlobalKey.KEY_CHARGE_MODE, 0) ?: 0 var foodWeight = 0.0 var eatWeight = 0.0 @@ -802,6 +818,7 @@ class MainActivity : BaseActivity() { eatWeight = eatWeight.roundToInt(), eatNum = eatNum, userId = null, + isMember = false ) { isRefreshPage = false shutdownCamera() @@ -1035,9 +1052,12 @@ class MainActivity : BaseActivity() { log("registerDataChange photoUri 识别数据名称:$foodName") runOnUiThread { binding.flPay.run { - val chargeMode = SPUtil.getInstance().get(GlobalKey.KEY_CHARGE_MODE, 0) + //0-联合支付,1-独立支付 + val settlementMode = SPUtil.getInstance().get(GlobalKey.KEY_SETTLEMENT_MODE, 1) //0-计费,1-不计费 - if (chargeMode == 0) visible() else gone() + val chargeMode = SPUtil.getInstance().get(GlobalKey.KEY_CHARGE_MODE, 0) + //独立支付+计费模式才显示“去结算”按钮,否则使用人脸识别 + if (settlementMode == 1 && chargeMode == 0) visible() else gone() } } if (TextUtils.isEmpty(foodName)) { 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 b6dddb2..d0d75f5 100644 --- a/app/src/main/java/com/sw/dualscreen/activity/PayActivity.kt +++ b/app/src/main/java/com/sw/dualscreen/activity/PayActivity.kt @@ -287,6 +287,7 @@ class PayActivity : BaseActivity() { } fun bindOrder(userId: String, block: (Boolean) -> Unit) { + //0-即放即取,1-余量计量 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 -> diff --git a/app/src/main/java/com/sw/dualscreen/activity/fragment/BusinessFragment.kt b/app/src/main/java/com/sw/dualscreen/activity/fragment/BusinessFragment.kt index 33d66e5..fe8bc1f 100644 --- a/app/src/main/java/com/sw/dualscreen/activity/fragment/BusinessFragment.kt +++ b/app/src/main/java/com/sw/dualscreen/activity/fragment/BusinessFragment.kt @@ -19,19 +19,21 @@ class BusinessFragment: BaseFragment() { } override fun initialize() { + binding.rgSettlement.let { + //val settlementMode = if (binding.rgSettlement.checkedRadioButtonId == R.id.rbJointPayment) 0 else 1 + + val mode = SPUtil.getInstance().get(GlobalKey.KEY_SETTLEMENT_MODE, 1) + it.check(if (mode == 0) R.id.rbJointPayment else R.id.rbIndependentPayment) + binding.rbJointPayment.isEnabled = false + binding.rbIndependentPayment.isEnabled = false + } binding.rgCharge.let { -// it.setOnCheckedChangeListener { group, checkedId -> -// val mode = if (checkedId == R.id.rbChargeYes) 0 else 1 -// SPUtil.getInstance().put(GlobalKey.KEY_CHARGE_MODE, mode) -// } + //0-计费,1-不计费 val mode = SPUtil.getInstance().get(GlobalKey.KEY_CHARGE_MODE, 0) it.check(if (mode == 0) R.id.rbChargeYes else R.id.rbChargeNot) } binding.rgTakeFood.let { -// it.setOnCheckedChangeListener { group, checkedId -> -// val mode = if (checkedId == R.id.rbPickAndPlace) 0 else 1 -// SPUtil.getInstance().put(GlobalKey.KEY_PICKUP_MODE, mode) -// } + //0-即放即取,1-余量计量 val mode = SPUtil.getInstance().get(GlobalKey.KEY_PICKUP_MODE, 0) it.check(if (mode == 0) R.id.rbPickAndPlace else R.id.rbSurplusCalculate) } @@ -39,6 +41,10 @@ class BusinessFragment: BaseFragment() { SensorScaleUtils.tare() } binding.btnConfirm.setOnClickListener { v -> +// if (binding.rgSettlement.checkedRadioButtonId == -1) { +// ToastUtils.showToast("请设置结算模式") +// return@setOnClickListener +// } if (binding.rgCharge.checkedRadioButtonId == -1) { ToastUtils.showToast("请设置计费模式") return@setOnClickListener @@ -50,6 +56,7 @@ class BusinessFragment: BaseFragment() { val chargeMode = if (binding.rgCharge.checkedRadioButtonId == R.id.rbChargeYes) 0 else 1 //原来的支付模式 + //0-计费,1-不计费 val oldChargeMode = SPUtil.getInstance().get(GlobalKey.KEY_CHARGE_MODE, 0) if (chargeMode != oldChargeMode) { //支付模式有变化通知首页页面刷新 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 2352cb3..40b5d80 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 @@ -34,7 +34,11 @@ data class FoodOrder( var remark: String? = "", //即放即取-1,称重-2 - var mode: Int + var mode: Int, + //设备模式,1 结算终端,2档口机 + var paymentFrom: Int, + //是否会员 + var member: Boolean ) @Parcelize 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 1fc8b9c..e50bf33 100644 --- a/app/src/main/java/com/sw/dualscreen/presentation/MainScreenPresentation.kt +++ b/app/src/main/java/com/sw/dualscreen/presentation/MainScreenPresentation.kt @@ -114,6 +114,7 @@ class MainScreenPresentation( var isKeepFaceState = false var currentUserId: String? = null + var isMember: Boolean = false var facePreviewInfoList: MutableList? = null @@ -121,11 +122,15 @@ class MainScreenPresentation( super.onCreate(savedInstanceState) binding = PresentationMainScreenBinding.inflate(layoutInflater) setContentView(binding.root) + //0-即放即取,1-余量计量 mealPickupMode = SPUtil.getInstance().get(GlobalKey.KEY_PICKUP_MODE, 0) ?: 0 window?.setBackgroundDrawableResource(android.R.color.white) initView() + //0-计费,1-不计费 val chargeMode = SPUtil.getInstance().get(GlobalKey.KEY_CHARGE_MODE, 0) - if (chargeMode == 1) { + //0-联合支付,1-独立支付 + val settlementMode = SPUtil.getInstance().get(GlobalKey.KEY_SETTLEMENT_MODE, 1) + if (settlementMode == 0 || chargeMode == 1) { setupArcCamera() } registerDataChange() @@ -138,7 +143,9 @@ class MainScreenPresentation( lastWeight = weight * 1000 // 将千克转成克 Timber.tag(TAG) .d("updateWeight lastWeight = $weight, currentStep = $currentStep, isGoStep1 = $isGoStep1") + //0-即放即取,1-余量计量 mealPickupMode = SPUtil.getInstance().get(GlobalKey.KEY_PICKUP_MODE, 0) ?: 0 + //0-计费,1-不计费 val chargeMode = SPUtil.getInstance().get(GlobalKey.KEY_CHARGE_MODE, 0) // if (mealPickupMode == 1 && chargeMode == 0) { // //余量计量+计费模式 @@ -586,6 +593,9 @@ class MainScreenPresentation( binding.tvFoodName.text = foodInfo.foodName binding.ivPreviewImage.gone() binding.ivFrame.gone() + //0-联合支付,1-独立支付 + val settlementMode = SPUtil.getInstance().get(GlobalKey.KEY_SETTLEMENT_MODE, 1) + //0-计费,1-不计费 val chargeMode = SPUtil.getInstance().get(GlobalKey.KEY_CHARGE_MODE, 0) if (chargeMode == 0) { binding.ivRecImage.let { @@ -597,15 +607,19 @@ class MainScreenPresentation( } else { binding.ivRecImage.gone() } - val mode = SPUtil.getInstance().get(GlobalKey.KEY_CHARGE_MODE, 0) - if (mode == 0) { + //独立支付+计费模式,使用人脸识别 + if (settlementMode == 1 && chargeMode == 0) { //计费,查询营养信息、价格信息------------------------ loadBilledMode() } else { - //不计费 - //开启人脸识别 - if (currentStep == 1 || binding.tvFaceTip.isVisible.not()) { + //联合支付,进行人脸识别 + if (settlementMode == 0) { step2FaceRecognizing(foodInfo) + } else { + //不计费,开启人脸识别 + if (currentStep == 1 || binding.tvFaceTip.isVisible.not()) { + step2FaceRecognizing(foodInfo) + } } } //if (currentStep == 1) { @@ -785,7 +799,10 @@ class MainScreenPresentation( fun resumeCamera() { Timber.tag(TAG).d("resumeCamera isRecognition = $isRecognition") isRecognition = true - if (rgbCameraHelper != null && rgbCameraHelper!!.isStopped) { + if (rgbCameraHelper == null) { + setupArcCamera() + rgbCameraHelper!!.start() + } else if (rgbCameraHelper!!.isStopped) { rgbCameraHelper!!.start() } } @@ -859,6 +876,7 @@ class MainScreenPresentation( val faceEntity = compareResult.faceEntity val userId = faceEntity.userName currentUserId = userId + isMember = faceEntity.userType == "1" isAgainLoadData = false if (userId == null) return@Observer //ToastUtils.showToast("人脸识别成功,userId = $userId") @@ -978,6 +996,7 @@ class MainScreenPresentation( } if (facePreviewInfoList.isNullOrEmpty()) { currentUserId = null + isMember = false } //recognizeViewModel.clearLeftFace(facePreviewInfoList) clearLeftFaceData() @@ -1139,6 +1158,7 @@ class MainScreenPresentation( .d("listIsEmpty=$listIsEmpty,lastFaceTrackId=$lastFaceTrackId,listFirstTrackId=$listFirstTrackId") if (listIsEmpty || (lastFaceTrackId != listFirstTrackId)) { if (lastFaceTrackId != -1 && currentUserId != null) { + //0-即放即取,1-余量计量 mealPickupMode = SPUtil.getInstance().get(GlobalKey.KEY_PICKUP_MODE, 0) ?: 0 Timber.tag(TAG).i("$lastFaceTrackId 用户离开") lastFaceTrackId = -1 @@ -1159,6 +1179,7 @@ class MainScreenPresentation( ToastUtils.showToast("订单已生成") } currentUserId = null + isMember = false //ToastUtils.showToast("isKeepFaceState=$isKeepFaceState,mealPickupMode=$mealPickupMode") //|| isKeepFaceState if (mealPickupMode == 1) { @@ -1173,8 +1194,19 @@ class MainScreenPresentation( } } + /** + * 人脸离开后调用创建订单接口 + */ fun createOrder(notEnoughOneBlock: () -> Unit = {}, block: () -> Unit) { + ////0-联合支付,1-独立支付 + //val settlementMode = SPUtil.getInstance().get(GlobalKey.KEY_SETTLEMENT_MODE, 1) + //0-即放即取,1-余量计量 mealPickupMode = SPUtil.getInstance().get(GlobalKey.KEY_PICKUP_MODE, 0) ?: 0 + //if (settlementMode == 0) { + // //使用联合支付方式 + // ToastUtils.showToast("使用联合支付方式") + // return + //} val eatWeight = if (mealPickupMode == 0) { //即放即取 recognitionWeight @@ -1196,6 +1228,7 @@ class MainScreenPresentation( eatWeight = eatWeight.roundToInt(), eatNum = activity.getEatNum(eatWeight, currentFood!!.specWeight), userId = currentUserId, + isMember = isMember , notEnoughOneBlock = notEnoughOneBlock, block = { activity.runOnUiThread { diff --git a/app/src/main/res/layout/fragment_business.xml b/app/src/main/res/layout/fragment_business.xml index bdafa0d..96f1290 100644 --- a/app/src/main/res/layout/fragment_business.xml +++ b/app/src/main/res/layout/fragment_business.xml @@ -6,6 +6,7 @@ android:layout_height="match_parent" android:orientation="vertical"> + + + + + + + + + + + + + + + + + + + + + +