This commit is contained in:
mazengfei
2026-02-05 18:16:38 +08:00
parent 1e6ea1517c
commit e979322697
7 changed files with 202 additions and 26 deletions
+2 -2
View File
@@ -4,10 +4,10 @@
<selectionStates>
<SelectionState runConfigName="app">
<option name="selectionMode" value="DROPDOWN" />
<DropdownSelection timestamp="2026-01-22T07:28:00.026342Z">
<DropdownSelection timestamp="2026-02-05T08:42:12.462597100Z">
<Target type="DEFAULT_BOOT">
<handle>
<DeviceId pluginId="Default" identifier="serial=192.168.1.128:5555;connection=c168ec92" />
<DeviceId pluginId="Default" identifier="serial=192.168.3.114:5555;connection=a41f05a9" />
</handle>
</Target>
</DropdownSelection>
+1
View File
@@ -69,6 +69,7 @@
android:name=".activity.MainActivity"
android:exported="false">
</activity>
<activity android:name="com.sw.platecabinet.activity.FunActivity" />
</application>
</manifest>
@@ -0,0 +1,114 @@
package com.sw.platecabinet.activity
import androidx.lifecycle.lifecycleScope
import com.sw.plate.utils.ToastUtils
import com.sw.platecabinet.MyApp
import com.sw.platecabinet.databinding.ActivityFunBinding
import com.sw.platecabinet.databinding.ItemTitleTimeBinding
import com.sw.platecabinet.dialog.CustomDialog
import com.sw.platecabinet.ext.clickWithDebounce
import com.sw.platecabinet.utils.PlateUtils
import com.sw.platecabinet.utils.SpTool
import kotlinx.coroutines.CoroutineDispatcher
import kotlinx.coroutines.Dispatchers
import kotlinx.coroutines.delay
import kotlinx.coroutines.launch
import kotlinx.coroutines.withContext
class FunActivity : BaseActivity<ActivityFunBinding>() {
override fun inflateTitleBinding(): ItemTitleTimeBinding? {
return binding.includeHeader
}
override fun inflateViewBinding() = ActivityFunBinding.inflate(layoutInflater)
override fun initialize() {
binding.btnClearFace.clickWithDebounce { clearFace() }
binding.btnClearAndGetAll.clickWithDebounce { clearFaceAndGetAll() }
binding.btnOpenAllPlate.clickWithDebounce {
lifecycleScope.launch {
openAllPlate()
}
}
binding.btnPutPlate.clickWithDebounce { putPlate() }
}
private fun clearFace() {
loadClearDialog("请确认是否清除本地所有数据?") {
showWaitingDialog("加载中……")
clearAllFace {
binding.root.postDelayed(
{
hideWaitingDialog()
ToastUtils.showToast("已清除")
}, 500
)
}
}
}
private fun clearFaceAndGetAll() {
loadClearDialog("请确认是否清除本地所有数据,并重新拉取全量人脸数据?") {
showWaitingDialog("加载中……")
clearAllFace {
userViewModel.getUserFaceCache { status, msg ->
hideWaitingDialog()
ToastUtils.showToast(
if (status) "请求成功,$msg" else "请求失败,$msg"
)
}
}
}
}
private suspend fun openAllPlate() {
MyApp.plateList?.let { plateList ->
val boxCodeList = plateList.filter { it.equipmentBoxCode.isNullOrBlank().not() }
.map { it.equipmentBoxCode }
boxCodeList.forEach { boxCode ->
withContext(Dispatchers.Default) {
PlateUtils.openDirect(boxCode)
delay(500)
}
}
}
}
private fun putPlate() {
showWaitingDialog("加载中……")
MyApp.plateList?.forEachIndexed { index, item ->
val num = index + 1
val realNum = if (num < 10) "0${num}" else "${num}"
item.plateNumber = realNum + realNum + realNum
item.faceId = null
item.updateTime = null
}
SpTool.savePlateData(MyApp.plateList!!)
binding.root.postDelayed({
hideWaitingDialog()
ToastUtils.showToast("已完成")
}, 1000)
}
/**
* 加载清除数据弹窗
*/
private fun loadClearDialog(msg: String, callback: () -> Unit) {
CustomDialog(
activity = this,
content = msg,
onConfirm = {
callback()
}).show()
}
override fun onLeftDoubleClick() {
finish()
}
override fun onRightDoubleClick() {
}
}
@@ -521,10 +521,10 @@ class LoginByFaceActivity : BaseActivity<ActivityLoginFaceBinding>(),
plateEnable = false
Debouncer(5000).debounce {
//打开柜子
PlateUtils.open(this, item.equipmentBoxCode, false)
PlateUtils.open(this, item.equipmentBoxCode, false) {
goInitActivity()
}
countDownTimer?.cancel()
goInitActivity()
}
currentPlateInfo = item
MyApp.plateList = items
@@ -86,7 +86,7 @@ class MainActivity : BaseActivity<ActivityMainBinding>() {
override fun onRightDoubleClick() {
if (pageType == PageType.SETTING_LIST) {
loadClearDialog()
startActivity(Intent(this, FunActivity::class.java))
}
}
@@ -104,25 +104,7 @@ class MainActivity : BaseActivity<ActivityMainBinding>() {
super.registerDataChange()
}
/**
* 加载清除数据弹窗
*/
private fun loadClearDialog() {
CustomDialog(
activity = this,
content = "请确认是否清除本地所有数据,并重新拉取全量人脸数据?",
onConfirm = {
showWaitingDialog("加载中……")
clearAllFace {
userViewModel.getUserFaceCache { status, msg ->
hideWaitingDialog()
ToastUtils.showToast(
if (status) "请求成功,$msg" else "请求失败,$msg"
)
}
}
}).show()
}
}
/**
@@ -15,7 +15,8 @@ object PlateUtils {
fragmentActivity: FragmentActivity,
code: String?,
isScanCode: Boolean,
isSetting: Boolean = false
isSetting: Boolean = false,
callback: () -> Unit = {}
) {
val activity = fragmentActivity as BaseActivity<*>
Timber.d("itemClick llOpen equipmentBoxCode = ${code}")
@@ -36,15 +37,30 @@ object PlateUtils {
)
} else {
ToastUtils.showToast("柜门打开成功")
callback()
}
}
override fun onFail(e: Exception?) {
activity.hideWaitingDialog()
ToastUtils.showToast("柜门打开失败")
callback()
}
})
}
fun openDirect(boxCode: String?) {
val boxNumber = boxCode?.toIntOrNull() ?: -1
if (boxNumber < 0) return
SerialApi.openPlate(boxNumber, object : SerialPortManager.SendCallback {
override fun onSuccess() {
}
override fun onFail(e: Exception?) {
}
})
}
}
+63
View File
@@ -0,0 +1,63 @@
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:background="@drawable/bg"
android:orientation="vertical">
<include
android:id="@+id/includeHeader"
layout="@layout/item_title_time" />
<TextView
android:id="@+id/btnClearFace"
android:layout_width="match_parent"
android:layout_height="60dp"
android:layout_marginTop="30dp"
android:textSize="24sp"
android:gravity="center"
android:layout_marginHorizontal="50dp"
android:paddingHorizontal="30dp"
android:background="@drawable/btn_outline"
android:text="清除人脸数据"
android:textColor="#FFCC99" />
<TextView
android:id="@+id/btnClearAndGetAll"
android:layout_width="match_parent"
android:layout_height="60dp"
android:layout_marginTop="30dp"
android:textSize="24sp"
android:gravity="center"
android:layout_marginHorizontal="50dp"
android:paddingHorizontal="30dp"
android:background="@drawable/btn_outline"
android:text="清除并重新拉取数据"
android:textColor="#FFCC99" />
<TextView
android:id="@+id/btnOpenAllPlate"
android:layout_width="match_parent"
android:layout_height="60dp"
android:layout_marginTop="30dp"
android:textSize="24sp"
android:gravity="center"
android:layout_marginHorizontal="50dp"
android:paddingHorizontal="30dp"
android:background="@drawable/btn_outline"
android:text="打开全部柜子"
android:textColor="#FFCC99" />
<TextView
android:id="@+id/btnPutPlate"
android:layout_width="match_parent"
android:layout_height="60dp"
android:layout_marginTop="30dp"
android:textSize="24sp"
android:gravity="center"
android:layout_marginHorizontal="50dp"
android:paddingHorizontal="30dp"
android:background="@drawable/btn_outline"
android:text="模拟放置餐盘"
android:textColor="#FFCC99" />
</LinearLayout>