From e2c0ed35ec5f48d9fd1ef83dbc5adf03defec2a4 Mon Sep 17 00:00:00 2001 From: lvmeng <848755140@qq.com> Date: Wed, 4 Feb 2026 18:00:46 +0800 Subject: [PATCH] =?UTF-8?q?=E4=BC=98=E5=8C=96=E8=AF=86=E5=88=AB=E5=8F=8A?= =?UTF-8?q?=E5=A2=9E=E5=8A=A0=E6=89=AB=E7=A0=81=E6=9E=AA=E9=80=BB=E8=BE=91?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../sw/dualscreen/activity/BaseActivity.kt | 41 ++++++++++++++++ .../sw/dualscreen/activity/MainActivity.kt | 47 +++++++++++++------ .../sw/dualscreen/activity/SettingActivity.kt | 3 +- .../activity/fragment/CollectFragment.kt | 17 +++---- .../sw/dualscreen/model/response/DataBean.kt | 1 + .../model/response/UserFaceModel.kt | 12 ++++- app/src/main/res/layout/activity_main.xml | 10 +++- .../sw/plate/utils/ScanGunKeyEventHelper.java | 27 +++++++++-- .../arcface/facedb/entity/FaceEntity.java | 29 ++++++++++-- 9 files changed, 152 insertions(+), 35 deletions(-) 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 9bc3aa3..670e16a 100644 --- a/app/src/main/java/com/sw/dualscreen/activity/BaseActivity.kt +++ b/app/src/main/java/com/sw/dualscreen/activity/BaseActivity.kt @@ -4,7 +4,9 @@ import android.content.Context import android.graphics.drawable.ColorDrawable import android.hardware.display.DisplayManager import android.os.Bundle +import android.util.Log import android.view.Display +import android.view.KeyEvent import android.view.LayoutInflater import android.view.View import android.view.ViewGroup @@ -21,6 +23,7 @@ import com.sw.dualscreen.model.response.PostEvent import com.sw.dualscreen.utils.FileUtil import com.sw.dualscreen.view.CustomDialog import com.sw.dualscreen.viewmodel.BaseViewModel +import com.sw.plate.utils.ScanGunKeyEventHelper import com.sw.plate.utils.ToastUtils import org.greenrobot.eventbus.EventBus import org.greenrobot.eventbus.Subscribe @@ -56,6 +59,7 @@ abstract class BaseActivity : AppCompatActivity() { } override fun onDestroy() { + keyEventHelper?.onDestroy() EventBus.getDefault().unregister(this) super.onDestroy() } @@ -142,4 +146,41 @@ abstract class BaseActivity : AppCompatActivity() { fun onPostEvent(event: PostEvent) { } + + + /** + * 监听扫描枪扫描事件 + */ + fun registerKeyEvent() { + keyEventHelper = + ScanGunKeyEventHelper(context, object : ScanGunKeyEventHelper.OnScanSuccessListener { + override fun onScanSuccess(barcode: String?) { + Timber.d("onScanSuccess barcode = $barcode") + if (barcode == null) return + handleScanKeyInfo(barcode) + } + }) + } + protected var keyEventHelper: ScanGunKeyEventHelper? = null + + /** + * 处理扫描枪数据 + */ + protected open fun handleScanKeyInfo(scanInfo: String) { + var payCode = scanInfo + //if (scanInfo.length > 6) { + // payCode = scanInfo.take(6) + //} + Log.d("TAG", "handleScanKeyInfo: " + payCode) + } + + override fun dispatchKeyEvent(event: KeyEvent): Boolean { + if (keyEventHelper != null) { + if (keyEventHelper!!.isScanGunEvent(event)) { + keyEventHelper!!.analysisKeyEvent(event) + return true + } + } + return super.dispatchKeyEvent(event) + } } \ No newline at end of file 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 49c981a..afd30c8 100644 --- a/app/src/main/java/com/sw/dualscreen/activity/MainActivity.kt +++ b/app/src/main/java/com/sw/dualscreen/activity/MainActivity.kt @@ -39,6 +39,7 @@ import com.sw.dualscreen.model.response.ClickBackEvent import com.sw.dualscreen.model.response.FoodInfo import com.sw.dualscreen.model.response.FoodOrder import com.sw.dualscreen.model.response.PaySuccessEvent +import com.sw.dualscreen.model.response.UpdateRefreshEvent import com.sw.dualscreen.model.response.UserFaceModel import com.sw.dualscreen.objbox.Food import com.sw.dualscreen.objbox.FoodModule @@ -155,6 +156,7 @@ class MainActivity : BaseActivity() { viewModel.getUserFaceCache(pageNo = 1) setupCamera() initData() + registerKeyEvent() } private fun initData() { @@ -239,6 +241,15 @@ class MainActivity : BaseActivity() { super.registerDataChange() SensorScaleUtils.addWeightListener { weight -> log("registerDataChange weight = $weight") + //runOnUiThread { binding.tvShowWeight.text="${weight*1000}克" } + if (lastWeight - weight > 0.005) { + //及放及取,从秤上拿走超过5克 + if (presentation?.mealPickupMode == 0) { + presentation?.updateWeight(weight) + lastWeight = weight + return@addWeightListener + } + } if (isPageVisible.not() || isStartRecognize.not()) { if (ActivityManager.currentActivity() is MainActivity) { isPageVisible = true @@ -246,7 +257,9 @@ class MainActivity : BaseActivity() { } return@addWeightListener } - val isWeightChange = abs(weight - lastWeight) > 0.05 + //0.05 +// val isWeightChange = abs(weight - lastWeight) > 0.02 + val isWeightChange = weight - lastWeight > 0.02 log("recognizeByWeight---00001,weight=$weight,lastWeight=$lastWeight,isWeightChange=$isWeightChange") recognizeByWeight(weight, isWeightChange) } @@ -256,8 +269,8 @@ class MainActivity : BaseActivity() { presentation?.updateWeight(weight) if (weight <= 0.005) { - log("recognizeByWeight---00002,未超过5克") - ////余量取餐,检测到秤上没有东西,重新启动识别菜品 && presentation?.mealPickupMode == 1 + log("recognizeByWeight---00002,秤重未超过5克") + //检测到秤上没有东西,重新启动识别菜品 && presentation?.mealPickupMode == 1 isRecognitionFood = true return } @@ -270,11 +283,17 @@ class MainActivity : BaseActivity() { debouncer.debounce { log("recognizeByWeight---00004") recognizeFood() + if (presentation?.mealPickupMode == 0) { + lastWeight = weight + } } } else { block() } - lastWeight = weight + + if (presentation?.mealPickupMode == 1) { + lastWeight = weight + } } private var startTime = 0L @@ -291,14 +310,7 @@ class MainActivity : BaseActivity() { }.start() failCount = 0 }, failureCallback = { - runOnUiThread { - if (failCount >= 10) { - ToastUtils.showToast("相机异常,请稍后重试") - shutdownCamera() - setupCamera() - return@runOnUiThread - } - } + //ToastUtils.showToast("拍照异常,请重试") failCount++ hideWaitingDialog() @@ -553,7 +565,7 @@ class MainActivity : BaseActivity() { } else { //副屏未显示重新加载 isRecognitionFood = true - log("onResume-00001") + log("onResume-00001,isRefreshPage=$isRefreshPage") if (presentation == null || !presentation!!.isShowing) { log("onResume-00002,副屏未显示,加载副屏") lastWeight = 0.0 @@ -706,6 +718,11 @@ class MainActivity : BaseActivity() { }) } + @Subscribe(threadMode = ThreadMode.MAIN) + fun onUpdateRefreshEvent(event: UpdateRefreshEvent) { + isRefreshPage = true + } + @Subscribe(threadMode = ThreadMode.MAIN) fun onPaySuccessEvent(event: PaySuccessEvent) { isRefreshPage = true @@ -938,7 +955,9 @@ class MainActivity : BaseActivity() { val faceEntity = FaceEntity( model.userId, null, Base64.decode(model.faceFeatureStr) ).also { - it.userType = "1" + //1-会员、2-临时用户 + it.userType = if (model.isMember) "1" else "2" + it.cardNo = model.cardNo } faceList.add(faceEntity) } diff --git a/app/src/main/java/com/sw/dualscreen/activity/SettingActivity.kt b/app/src/main/java/com/sw/dualscreen/activity/SettingActivity.kt index fb47f9f..5f88b03 100644 --- a/app/src/main/java/com/sw/dualscreen/activity/SettingActivity.kt +++ b/app/src/main/java/com/sw/dualscreen/activity/SettingActivity.kt @@ -9,6 +9,7 @@ import com.sw.dualscreen.activity.fragment.CollectFragment import com.sw.dualscreen.databinding.ActivitySettingBinding import com.sw.dualscreen.model.response.FoodInfo import com.sw.dualscreen.model.response.ClickBackEvent +import com.sw.dualscreen.model.response.UpdateRefreshEvent import com.sw.dualscreen.viewmodel.BaseViewModel import com.sw.dualscreen.viewmodel.UserViewModel import org.greenrobot.eventbus.EventBus @@ -47,7 +48,7 @@ class SettingActivity : BaseActivity() { return@setOnCheckedChangeListener } if (checkedId == R.id.rbCollect) { - + EventBus.getDefault().post(UpdateRefreshEvent()) showFragment(fragmentList[1]) return@setOnCheckedChangeListener } 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 0c94389..b148eab 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 @@ -176,14 +176,15 @@ class CollectFragment : BaseFragment() { settingActivity?.showWaitingDialog("采集中……") cameraUtils.takePhoto(cameraCallback) { errMsg -> settingActivity?.hideWaitingDialog() - if (cameraErrorCount >= 10) { - ToastUtils.showToast("拍照异常,请重新操作") - settingActivity?.log("拍照异常,请重新操作:$errMsg") - cameraErrorCount = 0 - return@takePhoto - } - cameraErrorCount++ - takePhoto() +// ToastUtils.showToast("拍照异常,请重新操作") +// if (cameraErrorCount >= 10) { +// ToastUtils.showToast("拍照异常,请重新操作") +// settingActivity?.log("拍照异常,请重新操作:$errMsg") +// cameraErrorCount = 0 +// return@takePhoto +// } +// cameraErrorCount++ +// takePhoto() } } 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 3669bcc..663f3e0 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 @@ -120,6 +120,7 @@ data class RespCodeMsg( data class PostEvent(var name: String = "") +data class UpdateRefreshEvent(var name:String = "") data class PaySuccessEvent( var name: String = "" ) diff --git a/app/src/main/java/com/sw/dualscreen/model/response/UserFaceModel.kt b/app/src/main/java/com/sw/dualscreen/model/response/UserFaceModel.kt index 6c4d5a8..0e177b7 100644 --- a/app/src/main/java/com/sw/dualscreen/model/response/UserFaceModel.kt +++ b/app/src/main/java/com/sw/dualscreen/model/response/UserFaceModel.kt @@ -22,7 +22,17 @@ data class UserFaceModel( val userId: String? = "", val faceFeatureStr: String? = "", val faceUpdateTimestamp:Long?=null, - val faceDeleted: Boolean? = false + val faceDeleted: Boolean? = false, + + /** + * 会员编号 + */ + val cardNo: String, + + /** + * 是否会员 + */ + val isMember: Boolean ) : Parcelable @Parcelize diff --git a/app/src/main/res/layout/activity_main.xml b/app/src/main/res/layout/activity_main.xml index 84ae33c..ec1a727 100644 --- a/app/src/main/res/layout/activity_main.xml +++ b/app/src/main/res/layout/activity_main.xml @@ -44,11 +44,17 @@ android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_marginTop="50dp" - android:text="羊肉臊子荞面饸饹" + tools:text="羊肉臊子荞面饸饹" android:textColor="#FF0A1428" android:textSize="52sp" android:textStyle="bold" /> - + + + + + + + devices = Arrays.asList(deviceNameArray); + return devices.contains(deviceName); } } diff --git a/lib_face/src/main/java/com/sw/plate/utils/arcface/facedb/entity/FaceEntity.java b/lib_face/src/main/java/com/sw/plate/utils/arcface/facedb/entity/FaceEntity.java index 27c8119..e0e4387 100644 --- a/lib_face/src/main/java/com/sw/plate/utils/arcface/facedb/entity/FaceEntity.java +++ b/lib_face/src/main/java/com/sw/plate/utils/arcface/facedb/entity/FaceEntity.java @@ -45,10 +45,15 @@ public class FaceEntity implements Parcelable { @ColumnInfo(name = "register_time") private long registerTime; /** - * 用户类型:1-普通会员、2-临时用户、3-内部员工、或者其它待定类型 + * 用户类型:1-普通会员、2-临时用户、或者其它待定类型 */ @ColumnInfo(name = "user_type") private String userType; + /** + * 会员编号 + */ + @ColumnInfo(name = "cardNo") + private String cardNo; @Ignore private int trackId;//人脸追踪ID @@ -66,6 +71,8 @@ public class FaceEntity implements Parcelable { this.imagePath = faceEntity.imagePath; this.featureData = faceEntity.featureData; this.registerTime = faceEntity.registerTime; + this.userType = faceEntity.getUserType(); + this.cardNo = faceEntity.getCardNo(); } @@ -75,6 +82,8 @@ public class FaceEntity implements Parcelable { userName = in.readString(); imagePath = in.readString(); featureData = in.createByteArray(); + userType = in.readString(); + cardNo = in.readString(); } public static final Creator CREATOR = new Creator() { @@ -145,6 +154,16 @@ public class FaceEntity implements Parcelable { this.userType = userType; } + public String getCardNo() { + return cardNo; + } + + public void setCardNo(String cardNo) { + this.cardNo = cardNo; + } + + + @Override public int describeContents() { return 0; @@ -158,10 +177,9 @@ public class FaceEntity implements Parcelable { dest.writeString(imagePath); dest.writeByteArray(featureData); dest.writeString(userType); + dest.writeString(cardNo); } - - @Override public boolean equals(Object o) { if (this == o) { @@ -176,12 +194,13 @@ public class FaceEntity implements Parcelable { TextUtils.equals(this.userName, that.userName) && TextUtils.equals(this.imagePath, that.imagePath) && Arrays.equals(featureData, that.featureData) && - TextUtils.equals(this.userType, that.userType); + TextUtils.equals(this.userType, that.userType) && + TextUtils.equals(this.cardNo, that.cardNo); } @Override public int hashCode() { - int result = Objects.hash(faceId, registerTime, userName, imagePath, userType); + int result = Objects.hash(faceId, registerTime, userName, imagePath, userType, cardNo); result = 31 * result + Arrays.hashCode(featureData); return result; }