联合支付模式使用人脸识别生成就餐记录

This commit is contained in:
2026-03-19 14:19:20 +08:00
parent a6d2441704
commit b51be58c64
8 changed files with 176 additions and 24 deletions
@@ -114,6 +114,7 @@ class MainScreenPresentation(
var isKeepFaceState = false
var currentUserId: String? = null
var isMember: Boolean = false
var facePreviewInfoList: MutableList<FacePreviewInfo>? = 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 {