设备联调优化
This commit is contained in:
@@ -9,6 +9,7 @@ import android.os.Looper
|
||||
import android.provider.Settings
|
||||
import android.util.Log
|
||||
import android.util.SparseArray
|
||||
import android.view.View
|
||||
import androidx.activity.viewModels
|
||||
import androidx.lifecycle.Lifecycle
|
||||
import androidx.lifecycle.lifecycleScope
|
||||
@@ -19,7 +20,9 @@ import com.chad.library.adapter4.util.setOnDebouncedItemClick
|
||||
import com.shuwei.intelligent.shelves.adapter.ShelfAdapter
|
||||
import com.shuwei.intelligent.shelves.base.BaseActivity
|
||||
import com.shuwei.intelligent.shelves.databinding.ActivityHomeBinding
|
||||
import com.shuwei.intelligent.shelves.model.ClearShelfEvent
|
||||
import com.shuwei.intelligent.shelves.model.SendWeightEvent
|
||||
import com.shuwei.intelligent.shelves.model.ShelfBody
|
||||
import com.shuwei.intelligent.shelves.model.ShelfModel
|
||||
import com.shuwei.intelligent.shelves.model.ShelfResult
|
||||
import com.shuwei.intelligent.shelves.model.WeightEvent
|
||||
@@ -27,16 +30,21 @@ import com.shuwei.intelligent.shelves.net.Loading
|
||||
import com.shuwei.intelligent.shelves.net.NetViewModel
|
||||
import com.shuwei.intelligent.shelves.net.RespData
|
||||
import com.shuwei.intelligent.shelves.net.UiState
|
||||
import com.shuwei.intelligent.shelves.net.apiService
|
||||
import com.shuwei.intelligent.shelves.serial.SerialPortManager
|
||||
import com.shuwei.intelligent.shelves.task.SyncTask
|
||||
import com.shuwei.intelligent.shelves.task.TaskManager
|
||||
import com.shuwei.intelligent.shelves.utils.binaryToHex
|
||||
import com.shuwei.intelligent.shelves.utils.ext.gone
|
||||
import com.shuwei.intelligent.shelves.utils.ext.toJsonString
|
||||
import com.shuwei.intelligent.shelves.utils.ext.toast
|
||||
import com.shuwei.intelligent.shelves.utils.ext.visible
|
||||
import com.shuwei.intelligent.shelves.utils.f2C
|
||||
import com.shuwei.intelligent.shelves.utils.hexToBinary
|
||||
import com.shuwei.intelligent.shelves.utils.hexToDec
|
||||
import kotlinx.coroutines.Dispatchers
|
||||
import kotlinx.coroutines.launch
|
||||
import kotlinx.coroutines.withContext
|
||||
import org.greenrobot.eventbus.EventBus
|
||||
import org.greenrobot.eventbus.Subscribe
|
||||
import org.greenrobot.eventbus.ThreadMode
|
||||
@@ -56,8 +64,8 @@ class HomeActivity : BaseActivity() {
|
||||
|
||||
//协议尾
|
||||
const val FOOTER = "FFFF"
|
||||
const val ACTIVE_CMD =
|
||||
"${HEADER}000281C5D70A7D428A4FA67B50F7DACA241938938B4B9CBD73673E9C8E7F2E15062D${FOOTER}"
|
||||
// const val ACTIVE_CMD =
|
||||
// "${HEADER}000281C5D70A7D428A4FA67B50F7DACA241938938B4B9CBD73673E9C8E7F2E15062D${FOOTER}"
|
||||
|
||||
const val LEFT_SHELF_OPEN_CMD =
|
||||
"${HEADER}020101000000000000000000000000000000000000${FOOTER}"
|
||||
@@ -68,12 +76,27 @@ class HomeActivity : BaseActivity() {
|
||||
|
||||
const val DEVICE_INFO_CMD = "${HEADER}0301000000000000000000000000${FOOTER}"
|
||||
|
||||
const val ACTIVE_CMD =
|
||||
"${HEADER}000281C5D70A7D428948AD7254FADBB1516738938B4B9CBD73673E9D8E7F2E15062D${FOOTER}"
|
||||
|
||||
//开灯(开 继电器1)
|
||||
const val LIGHT_CLOSE = "${HEADER}020102020102020000000000000000000000000000${FOOTER}"
|
||||
const val LIGHT_OPEN = "${HEADER}020102020002020000000000000000000000000000${FOOTER}"
|
||||
// const val LIGHT_CLOSE = "${HEADER}020102020101010000000000000000000000000000${FOOTER}"
|
||||
// const val LIGHT_OPEN = "${HEADER}020102020000000000000000000000000000000000${FOOTER}"
|
||||
// const val LIGHT_CLOSE2 = "${HEADER}020102020102020000000000000000000000000000${FOOTER}"
|
||||
// const val LIGHT_OPEN2 = "${HEADER}020102020002020000000000000000000000000000${FOOTER}"
|
||||
// const val LIGHT_CLOSE3 = "${HEADER}020102020102020000000000000000000000000000${FOOTER}"
|
||||
// const val LIGHT_OPEN3 = "${HEADER}020102020002020000000000000000000000000000${FOOTER}"
|
||||
|
||||
val list: MutableList<ShelfModel> = mutableListOf()
|
||||
val weightArray = SparseArray<Double?>()
|
||||
var shelfIndex = 0
|
||||
// public fun getRealWeight():Double = weightArray[shelfIndex]?:0.0
|
||||
|
||||
// public fun getRealWeight():Double = weightArray[shelfIndex]?:0.0
|
||||
// 温度
|
||||
var showTemperatureC = "0"
|
||||
|
||||
// 湿度
|
||||
var showHumidity = "0"
|
||||
}
|
||||
@@ -146,7 +169,9 @@ class HomeActivity : BaseActivity() {
|
||||
// Log.d(TAG, "onCreate: swDpValue=$swDpValue")
|
||||
|
||||
|
||||
viewModel.getAccessToken(App.deviceId)
|
||||
// viewModel.getAccessToken(App.deviceId)
|
||||
|
||||
viewModel.getShelfList(deviceId = App.deviceId)
|
||||
|
||||
// repeat(100) {
|
||||
// lifecycleScope.launch {
|
||||
@@ -178,11 +203,32 @@ class HomeActivity : BaseActivity() {
|
||||
// delay(500)
|
||||
// }
|
||||
// }
|
||||
|
||||
lightSwitchClick()
|
||||
}
|
||||
|
||||
fun switchLight(isOpen: Boolean) {
|
||||
val tag = getLeftView().tag?.toString()?.toBoolean() ?: true
|
||||
if(tag == isOpen) {
|
||||
return
|
||||
}
|
||||
lifecycleScope.launch {
|
||||
SerialPortManager.send(if (isOpen) LIGHT_OPEN else LIGHT_CLOSE)
|
||||
}
|
||||
getLeftView().tag = isOpen
|
||||
}
|
||||
|
||||
private fun lightSwitchClick() {
|
||||
switchLight(true)
|
||||
addLeftClick {
|
||||
val tag = getLeftView().tag?.toString()?.toBoolean() ?: true
|
||||
switchLight(tag.not())
|
||||
}
|
||||
}
|
||||
|
||||
private fun getTokenSuccess(data: RespData<*>) {
|
||||
Log.d(TAG, "getTokenSuccess: $data")
|
||||
data.result?.let {
|
||||
data.data?.let {
|
||||
App.accessToken = it.toString()
|
||||
//UIUtils.toast(it.toString())
|
||||
viewModel.getShelfList(deviceId = App.deviceId)
|
||||
@@ -196,25 +242,25 @@ class HomeActivity : BaseActivity() {
|
||||
@SuppressLint("NotifyDataSetChanged")
|
||||
private fun updateUI(data: RespData<*>) {
|
||||
binding.include?.root?.gone()
|
||||
window?.decorView?.postDelayed({Loading.dismiss()},500)
|
||||
if (data.result !is ShelfResult) {
|
||||
window?.decorView?.postDelayed({ Loading.dismiss() }, 500)
|
||||
if (data.data !is ShelfResult) {
|
||||
loadEmptyView()
|
||||
return
|
||||
}
|
||||
App.canteenId = data.result.canteenId
|
||||
val tempList = data.result.containerGoodsList
|
||||
App.canteenId = data.data.placeId
|
||||
val tempList = data.data.containerGoodsList
|
||||
if (tempList.isNullOrEmpty()) {
|
||||
loadEmptyView()
|
||||
return
|
||||
}
|
||||
if (tempList.size < 10) {
|
||||
toast("数据错误")
|
||||
return
|
||||
}
|
||||
// if (tempList.size < 10) {
|
||||
// toast("数据错误")
|
||||
// return
|
||||
// }
|
||||
list.clear()
|
||||
val subList01 = tempList.subList(0, 5)
|
||||
val subList02 = tempList.subList(5, 10)
|
||||
repeat(5) { index ->
|
||||
val subList01 = tempList.subList(0, tempList.size / 2)
|
||||
val subList02 = tempList.subList(tempList.size / 2, tempList.size)
|
||||
repeat(tempList.size / 2) { index ->
|
||||
list.add(subList01[index].also { it.deviceId = App.deviceId })
|
||||
list.add(subList02[index].also { it.deviceId = App.deviceId })
|
||||
}
|
||||
@@ -253,6 +299,10 @@ class HomeActivity : BaseActivity() {
|
||||
|
||||
val cmd = data.substring(HEADER.length, HEADER.length + 4)
|
||||
when (cmd) {
|
||||
"0001" -> {
|
||||
|
||||
}
|
||||
|
||||
"0101" -> {
|
||||
//心跳-01
|
||||
Log.d(TAG, "receiveSerialPortData:心跳01: $data")
|
||||
@@ -263,10 +313,11 @@ class HomeActivity : BaseActivity() {
|
||||
// Log.d(TAG, "receiveSerialPortData:心跳08: $data")
|
||||
// heartBeat(data)
|
||||
// }
|
||||
"0202" -> {
|
||||
//开关锁反馈
|
||||
lockFeedback(data)
|
||||
}
|
||||
// "0202" -> {
|
||||
// //开关锁反馈
|
||||
// lockFeedback(data)
|
||||
// }
|
||||
|
||||
"0302" -> {
|
||||
//获取设备状态
|
||||
getDeviceInfo(data)
|
||||
@@ -325,7 +376,7 @@ class HomeActivity : BaseActivity() {
|
||||
|
||||
val percent = 10 * list.count { it.goodsName.isNullOrBlank().not() }
|
||||
|
||||
updateLeftStatus("1-1冷藏柜 ${showTemperatureC}°C / ${percent}%")
|
||||
updateLeftStatus("1-1冷藏柜 [$temperatureHex] ${showTemperatureC}°C / ${percent}%")
|
||||
}.onFailure {
|
||||
it.printStackTrace()
|
||||
}
|
||||
@@ -413,15 +464,15 @@ class HomeActivity : BaseActivity() {
|
||||
setOnDebouncedItemClick { adapter, view, position ->
|
||||
shelfIndex = position
|
||||
lifecycleScope.launch {
|
||||
val openCmd = if (list[position].deviceNo in 1..5)
|
||||
LEFT_SHELF_OPEN_CMD
|
||||
else
|
||||
RIGHT_SHELF_OPEN_CMD
|
||||
val openState = SerialPortManager.send(openCmd)
|
||||
if (openState.not()) {
|
||||
toast("${list[position].goodsName}柜门开启失败")
|
||||
return@launch
|
||||
}
|
||||
// val openCmd = if (list[position].deviceNo in 1..5)
|
||||
// LEFT_SHELF_OPEN_CMD
|
||||
// else
|
||||
// RIGHT_SHELF_OPEN_CMD
|
||||
// val openState = SerialPortManager.send(openCmd)
|
||||
// if (openState.not()) {
|
||||
// toast("${list[position].goodsName}柜门开启失败")
|
||||
// return@launch
|
||||
// }
|
||||
launch(Intent(this@HomeActivity, ShelfActivity::class.java).also {
|
||||
it.putExtra(ShelfActivity.SHELF_MODEL, list[position])
|
||||
}) {
|
||||
@@ -437,6 +488,25 @@ class HomeActivity : BaseActivity() {
|
||||
}
|
||||
}
|
||||
notifyItemChanged(position)
|
||||
|
||||
try {
|
||||
|
||||
val submitList = list.sortedBy { it.deviceNo }
|
||||
val body = ShelfBody().also {
|
||||
it.deviceId = App.deviceId ?: ""
|
||||
it.canteenId = App.canteenId
|
||||
it.temperature = showTemperatureC
|
||||
it.humidity = showHumidity
|
||||
it.goodsList = submitList
|
||||
}
|
||||
Log.d("mzf", "performSync: body:${body.toJsonString()}")
|
||||
lifecycleScope.launch {
|
||||
val resp = apiService.saveShelfGoodsList(body = body)
|
||||
Log.d("mzf", "performSync: resp:${resp.toJsonString()}")
|
||||
}
|
||||
} catch (e: Exception) {
|
||||
e.printStackTrace()
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -502,4 +572,17 @@ class HomeActivity : BaseActivity() {
|
||||
public fun weightEvent(event: WeightEvent) {
|
||||
|
||||
}
|
||||
|
||||
@Subscribe(threadMode = ThreadMode.MAIN)
|
||||
public fun clearEmptyShelf(event: ClearShelfEvent) {
|
||||
val item = list.firstOrNull { it.deviceNo == event.shelfNo }
|
||||
item?.apply {
|
||||
goodsId = ""
|
||||
goodsName = null
|
||||
weight = null
|
||||
createTime = null
|
||||
overdueDay = null
|
||||
}
|
||||
shelfAdapter.notifyItemChanged(list.indexOf(item))
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user