refactor(activity): 重构 MasterScaleActivity 多类型秤布局,新增 Scale22GridActivity
- MasterScaleActivity 使用 BaseMultiItemAdapter 支持4种 viewType(scale1/2/18/22) - 内嵌 adapter 改用 BaseQuickAdapter + 自定义 VH,替换原 RecyclerView.Adapter - 新增 Scale22GridActivity,使用 FlexboxLayoutManager 实现22格混合网格布局 - 新增 list_type_scale1/2/18/22.xml 及 list_item_scale22_row.xml 布局文件 - 删除废弃的 list_item_scale_data.xml - 新增 flexbox 依赖,注册 Scale22GridActivity
This commit is contained in:
@@ -0,0 +1,17 @@
|
||||
package com.shuwei.dish.match.scale
|
||||
|
||||
/**
|
||||
* 主设备向子设备发送的控制指令
|
||||
* @param cmd 指令类型,如 "tare"(清零)
|
||||
* @param deviceId 目标设备 ID,子设备收到后校验是否匹配自身
|
||||
* @param address 目标秤地址
|
||||
*/
|
||||
data class ScaleCommand(
|
||||
val cmd: String,
|
||||
val deviceId: String,
|
||||
val address: Int
|
||||
) {
|
||||
companion object {
|
||||
const val CMD_TARE = "tare"
|
||||
}
|
||||
}
|
||||
@@ -134,6 +134,22 @@ object ScaleServiceManager {
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* 向指定设备的指定秤发送清零指令
|
||||
* - 本机秤:直接调用 WeightUtil.tareTwo
|
||||
* - 子设备秤:通过 WebSocket 发送指令
|
||||
* @param deviceId 目标设备 ID
|
||||
* @param address 目标秤地址
|
||||
*/
|
||||
fun sendTare(deviceId: String, address: Int) {
|
||||
if (deviceId == GlobalData.deviceId) {
|
||||
com.shuwei.dish.match.utils.WeightUtil.tareTwo(address)
|
||||
} else {
|
||||
val cmd = ScaleCommand(ScaleCommand.CMD_TARE, deviceId, address)
|
||||
wsClient?.sendCommand(deviceId, cmd)
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* 停止所有秤服务,在 Application.onTerminate() 或退出时调用
|
||||
*/
|
||||
|
||||
@@ -120,6 +120,17 @@ class ScaleWebSocketClient {
|
||||
reconnectDelays[deviceId] = minOf(delay * 2, RECONNECT_MAX_MS)
|
||||
}
|
||||
|
||||
/**
|
||||
* 向指定子设备发送控制指令
|
||||
* @param deviceId 目标子设备 ID
|
||||
* @param command 指令对象
|
||||
* @return true=发送成功,false=设备未连接
|
||||
*/
|
||||
fun sendCommand(deviceId: String, command: ScaleCommand): Boolean {
|
||||
val ws = connections[deviceId] ?: return false
|
||||
return ws.send(gson.toJson(command))
|
||||
}
|
||||
|
||||
/**
|
||||
* 断开指定子设备连接(不再重连)
|
||||
* @param deviceId 子设备 ID
|
||||
|
||||
@@ -126,7 +126,19 @@ class ScaleWebSocketServer(private val deviceId: String, private val context: Co
|
||||
}
|
||||
|
||||
override fun onMessage(conn: WebSocket, message: String) {
|
||||
// 服务端无需处理来自主设备的消息
|
||||
try {
|
||||
val cmd = gson.fromJson(message, ScaleCommand::class.java)
|
||||
// 校验指令目标设备是否为本机
|
||||
if (cmd.deviceId != deviceId) return
|
||||
when (cmd.cmd) {
|
||||
ScaleCommand.CMD_TARE -> {
|
||||
Log.d(TAG, "收到清零指令, address=${cmd.address}")
|
||||
com.shuwei.dish.match.utils.WeightUtil.tareTwo(cmd.address)
|
||||
}
|
||||
}
|
||||
} catch (e: Exception) {
|
||||
Log.w(TAG, "解析指令失败: ${e.message}")
|
||||
}
|
||||
}
|
||||
|
||||
override fun onError(conn: WebSocket?, ex: Exception) {
|
||||
|
||||
Reference in New Issue
Block a user