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> <selectionStates>
<SelectionState runConfigName="app"> <SelectionState runConfigName="app">
<option name="selectionMode" value="DROPDOWN" /> <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"> <Target type="DEFAULT_BOOT">
<handle> <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> </handle>
</Target> </Target>
</DropdownSelection> </DropdownSelection>
+1
View File
@@ -69,6 +69,7 @@
android:name=".activity.MainActivity" android:name=".activity.MainActivity"
android:exported="false"> android:exported="false">
</activity> </activity>
<activity android:name="com.sw.platecabinet.activity.FunActivity" />
</application> </application>
</manifest> </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 plateEnable = false
Debouncer(5000).debounce { Debouncer(5000).debounce {
//打开柜子 //打开柜子
PlateUtils.open(this, item.equipmentBoxCode, false) PlateUtils.open(this, item.equipmentBoxCode, false) {
goInitActivity()
}
countDownTimer?.cancel() countDownTimer?.cancel()
goInitActivity()
} }
currentPlateInfo = item currentPlateInfo = item
MyApp.plateList = items MyApp.plateList = items
@@ -86,7 +86,7 @@ class MainActivity : BaseActivity<ActivityMainBinding>() {
override fun onRightDoubleClick() { override fun onRightDoubleClick() {
if (pageType == PageType.SETTING_LIST) { if (pageType == PageType.SETTING_LIST) {
loadClearDialog() startActivity(Intent(this, FunActivity::class.java))
} }
} }
@@ -104,25 +104,7 @@ class MainActivity : BaseActivity<ActivityMainBinding>() {
super.registerDataChange() 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, fragmentActivity: FragmentActivity,
code: String?, code: String?,
isScanCode: Boolean, isScanCode: Boolean,
isSetting: Boolean = false isSetting: Boolean = false,
callback: () -> Unit = {}
) { ) {
val activity = fragmentActivity as BaseActivity<*> val activity = fragmentActivity as BaseActivity<*>
Timber.d("itemClick llOpen equipmentBoxCode = ${code}") Timber.d("itemClick llOpen equipmentBoxCode = ${code}")
@@ -36,15 +37,30 @@ object PlateUtils {
) )
} else { } else {
ToastUtils.showToast("柜门打开成功") ToastUtils.showToast("柜门打开成功")
callback()
} }
} }
override fun onFail(e: Exception?) { override fun onFail(e: Exception?) {
activity.hideWaitingDialog() activity.hideWaitingDialog()
ToastUtils.showToast("柜门打开失败") 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>