From 647ec0dcb7bea11c76369b9ec289f7bbe4775f0b Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E9=A9=AC=E5=A2=9E=E9=A3=9E?= <331023091@qq.com> Date: Thu, 6 Nov 2025 19:29:18 +0800 Subject: [PATCH] =?UTF-8?q?=E8=AE=BE=E5=A4=87=E8=81=94=E8=B0=83=E4=BC=98?= =?UTF-8?q?=E5=8C=96?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../intelligent/shelves/HomeActivity.kt | 143 ++++++++++++++---- .../intelligent/shelves/InitActivity.kt | 12 +- .../intelligent/shelves/ShelfActivity.kt | 111 +++++++------- .../shelves/adapter/ShelfAdapter.kt | 5 +- .../intelligent/shelves/base/BaseActivity.kt | 52 ++++++- .../intelligent/shelves/model/GoodsRecord.kt | 2 +- .../shelves/model/SendWeightEvent.kt | 4 +- .../intelligent/shelves/model/ShelfResult.kt | 2 +- .../intelligent/shelves/net/ApiService.kt | 12 +- .../intelligent/shelves/net/NetViewModel.kt | 23 +-- .../intelligent/shelves/net/RespData.kt | 7 +- .../intelligent/shelves/net/UrlConfig.kt | 15 +- .../shelves/serial/SerialPortManager.kt | 12 +- .../intelligent/shelves/task/SyncTask.kt | 10 +- .../intelligent/shelves/task/TaskManager.kt | 4 +- .../intelligent/shelves/utils/AppUtil.java | 76 +++++----- .../intelligent/shelves/utils/KeyboardUtil.kt | 6 +- app/src/main/res/drawable-xxxhdpi/close.png | Bin 0 -> 4549 bytes app/src/main/res/layout/activity_base.xml | 16 +- app/src/main/res/layout/activity_home.xml | 7 + app/src/main/res/layout/activity_shelf.xml | 17 ++- .../main/res/layout/layout_light_switch.xml | 126 +++++++++++++++ 22 files changed, 488 insertions(+), 174 deletions(-) create mode 100644 app/src/main/res/drawable-xxxhdpi/close.png create mode 100644 app/src/main/res/layout/layout_light_switch.xml diff --git a/app/src/main/java/com/shuwei/intelligent/shelves/HomeActivity.kt b/app/src/main/java/com/shuwei/intelligent/shelves/HomeActivity.kt index 6ed74c3..605b22c 100644 --- a/app/src/main/java/com/shuwei/intelligent/shelves/HomeActivity.kt +++ b/app/src/main/java/com/shuwei/intelligent/shelves/HomeActivity.kt @@ -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 = mutableListOf() val weightArray = SparseArray() 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)) + } } \ No newline at end of file diff --git a/app/src/main/java/com/shuwei/intelligent/shelves/InitActivity.kt b/app/src/main/java/com/shuwei/intelligent/shelves/InitActivity.kt index 0c48b00..2c23000 100644 --- a/app/src/main/java/com/shuwei/intelligent/shelves/InitActivity.kt +++ b/app/src/main/java/com/shuwei/intelligent/shelves/InitActivity.kt @@ -51,11 +51,9 @@ class InitActivity : BaseActivity() { binding = ActivityInitBinding.inflate(layoutInflater) setContentView(binding.root) - // 获取 ANDROID_ID - val androidId = - Settings.Secure.getString(contentResolver, Settings.Secure.ANDROID_ID) - App.deviceId = androidId - SpTool.put(SpTool.DEVICE_ID, androidId) + + App.deviceId = AppUtil.getUDID( this) + SpTool.put(SpTool.DEVICE_ID, App.deviceId) App.configUrl = UrlConfig.BASE_URL App.canteenId = "0" @@ -115,7 +113,7 @@ class InitActivity : BaseActivity() { when (state) { is UiState.Loading -> {} is UiState.Success<*> -> { - state.data.result?.let { deviceToken -> + state.data.data?.let { deviceToken -> Log.d(TAG, "initConfig: $deviceToken") viewModel.getDeviceConfig( deviceId = App.deviceId, @@ -133,7 +131,7 @@ class InitActivity : BaseActivity() { when (state) { is UiState.Loading -> {} is UiState.Success<*> -> { - state.data.result?.let { + state.data.data?.let { if (it is DeviceConfigInfo) { SpTool.put(SpTool.DEVICE_CONFIG_CACHE, it.toJsonString()) App.configUrl = it.appPackageUrl?:"" diff --git a/app/src/main/java/com/shuwei/intelligent/shelves/ShelfActivity.kt b/app/src/main/java/com/shuwei/intelligent/shelves/ShelfActivity.kt index 2235132..e3ea8d7 100644 --- a/app/src/main/java/com/shuwei/intelligent/shelves/ShelfActivity.kt +++ b/app/src/main/java/com/shuwei/intelligent/shelves/ShelfActivity.kt @@ -20,6 +20,7 @@ import com.shuwei.intelligent.shelves.HomeActivity.Companion.DEVICE_INFO_CMD import com.shuwei.intelligent.shelves.adapter.SearchAdapter import com.shuwei.intelligent.shelves.base.BaseActivity import com.shuwei.intelligent.shelves.databinding.ActivityShelfBinding +import com.shuwei.intelligent.shelves.model.ClearShelfEvent import com.shuwei.intelligent.shelves.model.GoodsModel import com.shuwei.intelligent.shelves.model.GoodsRecord import com.shuwei.intelligent.shelves.model.SendWeightEvent @@ -135,27 +136,17 @@ class ShelfActivity : BaseActivity() { finish() } binding.root.setOnClickListener { v -> - KeyboardUtil.hideKeyboard(v.context, v) + KeyboardUtil.hideKeyboard(v) } - binding.btnClearZero.setOnClickListener { v -> - lifecycleScope.launch { - val shelfNo = shelfModel?.deviceNo ?: 0 - val hex = shelfNo.toString(16).padStart(2, '0').uppercase() - Log.d(TAG, "onCreate: hex=$hex") - val zeroClearingCmd = "${HomeActivity.HEADER}0401${hex}${HomeActivity.FOOTER}" - Log.d(TAG, "onCreate: zeroClearingCmd=$zeroClearingCmd") - SerialPortManager.send(zeroClearingCmd) - //清零 - realWeight = 0 -// binding.tvFoodWeight.text = "${realWeight}克" - - SerialPortManager.send(DEVICE_INFO_CMD) - Loading.show(this@ShelfActivity) - v.postDelayed({ Loading.dismiss() }, 5000) - } - KeyboardUtil.hideKeyboard(v.context, v) + binding.btnClearZero.setOnClickListener { + clearZero() + } + binding.btnClearEmpty?.setOnClickListener { + clearZero() + binding.tvFoodName.text = "-" + binding.tvFoodWeight.text = "0克" + EventBus.getDefault().post(ClearShelfEvent(shelfModel!!.deviceNo)) } - lifecycleScope.launch { SerialPortManager.send(DEVICE_INFO_CMD) @@ -219,45 +210,44 @@ class ShelfActivity : BaseActivity() { finishRefresh() binding.root.postDelayed({ Loading.dismiss() }, 200) Log.d(TAG, "updateUI: ${data.toJsonString()}") - if (data.result !is GoodsRecord) { + + val goodsList = data.data as MutableList + if (data.data.isNullOrEmpty()) { if (pageNo == 1) { loadEmptyView() } return } - if (data.result.records.isNullOrEmpty()) { - if (pageNo == 1) { - loadEmptyView() - } - return - } - var firstOne:GoodsModel?=null - if (pageNo == 1) { - if (shelfModel?.goodsId.isNullOrBlank().not()) { - firstOne = list.firstOrNull { it.goodsId == shelfModel?.goodsId } - if (firstOne == null) { - firstOne = GoodsModel( - goodsId = shelfModel?.goodsId, - goodsName = shelfModel?.goodsName, - isClicked = true - ) - } - } + if(pageNo == 1){ list.clear() } - val records = data.result.records - if (pageNo == 1) { - firstOne?.let { one -> - val filterResult = records.firstOrNull{one.goodsId == it.goodsId } - if (filterResult != null) { - records.remove(filterResult) - } - clickIndex = 0 - list.add(one) - } - } - list.addAll(records) - val enableLoadMore = records.size >= PAGE_SIZE +// var firstOne:GoodsModel?=null +// if (pageNo == 1) { +// if (shelfModel?.goodsId.isNullOrBlank().not()) { +// firstOne = list.firstOrNull { it.goodsId == shelfModel?.goodsId } +// if (firstOne == null) { +// firstOne = GoodsModel( +// goodsId = shelfModel?.goodsId, +// goodsName = shelfModel?.goodsName, +// isClicked = true +// ) +// } +// } +// list.clear() +// } +// val records = data.data.records +// if (pageNo == 1) { +// firstOne?.let { one -> +// val filterResult = records.firstOrNull{one.goodsId == it.goodsId } +// if (filterResult != null) { +// records.remove(filterResult) +// } +// clickIndex = 0 +// list.add(one) +// } +// } + list.addAll(goodsList) + val enableLoadMore = goodsList.size >= PAGE_SIZE binding.refreshLayout.setEnableLoadMore(enableLoadMore) if (enableLoadMore) { pageNo++ @@ -371,4 +361,23 @@ class ShelfActivity : BaseActivity() { } } + private fun clearZero() { + lifecycleScope.launch { + val shelfNo = shelfModel?.deviceNo ?: 0 + val hex = shelfNo.toString(16).padStart(2, '0').uppercase() + Log.d(TAG, "onCreate: hex=$hex") + val zeroClearingCmd = "${HomeActivity.HEADER}0401${hex}${HomeActivity.FOOTER}" + Log.d(TAG, "onCreate: zeroClearingCmd=$zeroClearingCmd") + SerialPortManager.send(zeroClearingCmd) + //清零 + realWeight = 0 +// binding.tvFoodWeight.text = "${realWeight}克" + + SerialPortManager.send(DEVICE_INFO_CMD) + Loading.show(this@ShelfActivity) + window.decorView.postDelayed({ Loading.dismiss() }, 5000) + } + KeyboardUtil.hideKeyboard(window.decorView) + } + } \ No newline at end of file diff --git a/app/src/main/java/com/shuwei/intelligent/shelves/adapter/ShelfAdapter.kt b/app/src/main/java/com/shuwei/intelligent/shelves/adapter/ShelfAdapter.kt index f47098f..b10957f 100644 --- a/app/src/main/java/com/shuwei/intelligent/shelves/adapter/ShelfAdapter.kt +++ b/app/src/main/java/com/shuwei/intelligent/shelves/adapter/ShelfAdapter.kt @@ -14,6 +14,7 @@ import com.shuwei.intelligent.shelves.utils.DateTimeUtil import com.shuwei.intelligent.shelves.utils.ext.gone import com.shuwei.intelligent.shelves.utils.ext.visible import java.util.Date +import kotlin.math.roundToInt class ShelfAdapter(list: MutableList) : BaseQuickAdapter(list) { @@ -61,8 +62,8 @@ class ShelfAdapter(list: MutableList) : //?.setImageResource() binding.tvFoodWeight.run { setTextColor(getColor(R.color.food_weight_orange)) - val showWeight = if (weight == 0.toDouble()) "0" else "%.3f".format(weight) - text = "${showWeight}千克" + //val showWeight = if (weight == 0.toDouble()) "0克" else "%.3f千克".format(weight) + text = "${(weight*1000).roundToInt()}克" } //val isBlankShelf = weight <= 0 val isBlankShelf = item.goodsName.isNullOrBlank() diff --git a/app/src/main/java/com/shuwei/intelligent/shelves/base/BaseActivity.kt b/app/src/main/java/com/shuwei/intelligent/shelves/base/BaseActivity.kt index 9796a88..8d29ec3 100644 --- a/app/src/main/java/com/shuwei/intelligent/shelves/base/BaseActivity.kt +++ b/app/src/main/java/com/shuwei/intelligent/shelves/base/BaseActivity.kt @@ -3,17 +3,19 @@ package com.shuwei.intelligent.shelves.base import android.content.Intent import android.os.Build import android.os.Bundle +import android.os.Handler +import android.os.Looper import android.view.View import android.view.WindowInsets import android.view.WindowInsetsController import android.widget.TextView -import androidx.activity.enableEdgeToEdge import androidx.activity.result.ActivityResultLauncher import androidx.activity.result.contract.ActivityResultContracts import androidx.appcompat.app.AppCompatActivity import androidx.core.content.ContextCompat import com.gyf.immersionbar.BarHide import com.gyf.immersionbar.ImmersionBar +import com.shuwei.intelligent.shelves.HomeActivity import com.shuwei.intelligent.shelves.R import com.shuwei.intelligent.shelves.databinding.ActivityBaseBinding @@ -91,5 +93,53 @@ open class BaseActivity : AppCompatActivity() { binding.tvRightStatus.text = data } + fun addViewClick(view:View, click: () -> Unit) { + view.setOnClickListener { + click() + } + } + + fun getLeftView(): TextView { + return binding.tvLeftStatus + } + + fun addLeftClick(click: (View) -> Unit) { + binding.tvLeftStatus.setOnClickListener(click) + } + + fun addRightClick(click: (View) -> Unit) { + binding.tvRightStatus.setOnClickListener(click) + } + // 5分钟 + private val TIME_OUT: Long = (5 * 60 * 1000).toLong() + private val mHandler by lazy { Handler(Looper.getMainLooper()) } + private val mTimeoutRunnable = Runnable { + if (this is HomeActivity) { + this.switchLight(false) + } + } + + override fun onUserInteraction() { + super.onUserInteraction() + // 重置定时器 + mHandler.removeCallbacks(mTimeoutRunnable) + mHandler.postDelayed(mTimeoutRunnable, TIME_OUT) + } + + override fun onResume() { + super.onResume() + // 启动定时器 + mHandler.postDelayed(mTimeoutRunnable, TIME_OUT) + } + + override fun onPause() { + super.onPause() + // 取消定时器 + mHandler.removeCallbacks(mTimeoutRunnable) + } + + fun timeOutOperation() { + + } } \ No newline at end of file diff --git a/app/src/main/java/com/shuwei/intelligent/shelves/model/GoodsRecord.kt b/app/src/main/java/com/shuwei/intelligent/shelves/model/GoodsRecord.kt index 5f9596c..0c4ad0a 100644 --- a/app/src/main/java/com/shuwei/intelligent/shelves/model/GoodsRecord.kt +++ b/app/src/main/java/com/shuwei/intelligent/shelves/model/GoodsRecord.kt @@ -5,4 +5,4 @@ data class GoodsRecord( val size: Int = 0, val page: Int = 0, val records: MutableList? = null -) +) \ No newline at end of file diff --git a/app/src/main/java/com/shuwei/intelligent/shelves/model/SendWeightEvent.kt b/app/src/main/java/com/shuwei/intelligent/shelves/model/SendWeightEvent.kt index 9c4031d..4ac15d0 100644 --- a/app/src/main/java/com/shuwei/intelligent/shelves/model/SendWeightEvent.kt +++ b/app/src/main/java/com/shuwei/intelligent/shelves/model/SendWeightEvent.kt @@ -5,4 +5,6 @@ data class SendWeightEvent( var weight:Int=0 ) -data class WeightEvent(var weight: Int) \ No newline at end of file +data class WeightEvent(var weight: Int) + +data class ClearShelfEvent(var shelfNo: Int) \ No newline at end of file diff --git a/app/src/main/java/com/shuwei/intelligent/shelves/model/ShelfResult.kt b/app/src/main/java/com/shuwei/intelligent/shelves/model/ShelfResult.kt index 64bb13a..2d589d1 100644 --- a/app/src/main/java/com/shuwei/intelligent/shelves/model/ShelfResult.kt +++ b/app/src/main/java/com/shuwei/intelligent/shelves/model/ShelfResult.kt @@ -1,7 +1,7 @@ package com.shuwei.intelligent.shelves.model data class ShelfResult( - val canteenId: String = "", + val placeId: String = "", val canteenName: String = "", val containerGoodsList: List? = null ) diff --git a/app/src/main/java/com/shuwei/intelligent/shelves/net/ApiService.kt b/app/src/main/java/com/shuwei/intelligent/shelves/net/ApiService.kt index 51f1d6d..c2f74f2 100644 --- a/app/src/main/java/com/shuwei/intelligent/shelves/net/ApiService.kt +++ b/app/src/main/java/com/shuwei/intelligent/shelves/net/ApiService.kt @@ -2,6 +2,7 @@ package com.shuwei.intelligent.shelves.net import com.shuwei.intelligent.shelves.App import com.shuwei.intelligent.shelves.model.DeviceConfigInfo +import com.shuwei.intelligent.shelves.model.GoodsModel import com.shuwei.intelligent.shelves.model.GoodsRecord import com.shuwei.intelligent.shelves.model.ShelfBody import com.shuwei.intelligent.shelves.model.ShelfResult @@ -43,7 +44,8 @@ interface ApiService { suspend fun getShelfList( @Url url: String = UrlConfig.GET_SHELF_LIST, @Query("deviceId") deviceId: String, - @Query("x-access-token") token: String = App.accessToken + @Query("x-access-token") token: String = App.accessToken, + @Header("authorization") authorization: String = "57ee87183f2a4fa59683ec9ef41c8f5d" ): RespData @GET @@ -53,14 +55,16 @@ interface ApiService { @Query("goodsName") goodsName: String? = null, @Query("pageNo") pageNo: Int = 1, @Query("pageSize") pageSize: Int = 50, - @Query("x-access-token") token: String = App.accessToken - ): RespData + @Query("x-access-token") token: String = App.accessToken, + @Header("authorization") authorization: String = "57ee87183f2a4fa59683ec9ef41c8f5d" + ): RespData?> @POST suspend fun saveShelfGoodsList( @Url url: String = UrlConfig.SAVE_SHELF_GOODS_LIST, @Body body: ShelfBody, - @Query("x-access-token") token: String = App.accessToken + @Query("x-access-token") token: String = App.accessToken, + @Header("authorization") authorization: String = "57ee87183f2a4fa59683ec9ef41c8f5d" ): RespData } \ No newline at end of file diff --git a/app/src/main/java/com/shuwei/intelligent/shelves/net/NetViewModel.kt b/app/src/main/java/com/shuwei/intelligent/shelves/net/NetViewModel.kt index 6ffb63f..00743c0 100644 --- a/app/src/main/java/com/shuwei/intelligent/shelves/net/NetViewModel.kt +++ b/app/src/main/java/com/shuwei/intelligent/shelves/net/NetViewModel.kt @@ -44,10 +44,10 @@ class NetViewModel : ViewModel() { _getDeviceTokenUiState.value = UiState.Loading runCatching { val response = apiService.getDeviceToken(qrcodeId = deviceId) - if (response.success) { + if (response.code == 0) { _getDeviceTokenUiState.value = UiState.Success(response) } else { - _getDeviceTokenUiState.value = UiState.Error(response.message ?: "请求失败") + _getDeviceTokenUiState.value = UiState.Error(response.msg ?: "请求失败") } }.onFailure { _getDeviceTokenUiState.value = UiState.Error(it.message ?: "请求异常") @@ -59,11 +59,12 @@ class NetViewModel : ViewModel() { viewModelScope.launch { _getDeviceTokenUiState.value = UiState.Loading runCatching { - val response = apiService.getDeviceInfo(equipmentCode = deviceId, token = deviceToken) - if (response.success) { + val response = + apiService.getDeviceInfo(equipmentCode = deviceId, token = deviceToken) + if (response.code == 0) { _getDeviceTokenUiState.value = UiState.Success(response) } else { - _getDeviceTokenUiState.value = UiState.Error(response.message ?: "请求失败") + _getDeviceTokenUiState.value = UiState.Error(response.msg ?: "请求失败") } }.onFailure { _getDeviceTokenUiState.value = UiState.Error(it.message ?: "请求异常") @@ -76,10 +77,10 @@ class NetViewModel : ViewModel() { _getAccessTokenUiState.value = UiState.Loading runCatching { val response = apiService.getAccessToken(qrcodeId = deviceId) - if (response.success) { + if (response.code == 0) { _getAccessTokenUiState.value = UiState.Success(response) } else { - _getAccessTokenUiState.value = UiState.Error(response.message ?: "请求失败") + _getAccessTokenUiState.value = UiState.Error(response.msg ?: "请求失败") } }.onFailure { _getAccessTokenUiState.value = UiState.Error(it.message ?: "请求异常") @@ -92,10 +93,10 @@ class NetViewModel : ViewModel() { _getShelfListUiState.value = UiState.Loading runCatching { val response = apiService.getShelfList(deviceId = deviceId) - if (response.success) { + if (response.code == 0) { _getShelfListUiState.value = UiState.Success(response) } else { - _getShelfListUiState.value = UiState.Error(response.message ?: "请求失败") + _getShelfListUiState.value = UiState.Error(response.msg ?: "请求失败") } }.onFailure { _getShelfListUiState.value = UiState.Error(it.message ?: "请求异常") @@ -134,10 +135,10 @@ class NetViewModel : ViewModel() { pageNo = pageNo, pageSize = pageSize ) - if (response.success) { + if (response.code == 0) { _getGoodsListUiState.value = UiState.Success(response) } else { - _getGoodsListUiState.value = UiState.Error(response.message ?: "请求失败") + _getGoodsListUiState.value = UiState.Error(response.msg ?: "请求失败") } }.onFailure { _getGoodsListUiState.value = UiState.Error(it.message ?: "请求异常") diff --git a/app/src/main/java/com/shuwei/intelligent/shelves/net/RespData.kt b/app/src/main/java/com/shuwei/intelligent/shelves/net/RespData.kt index d225825..ac6bfe5 100644 --- a/app/src/main/java/com/shuwei/intelligent/shelves/net/RespData.kt +++ b/app/src/main/java/com/shuwei/intelligent/shelves/net/RespData.kt @@ -1,8 +1,9 @@ package com.shuwei.intelligent.shelves.net data class RespData( - val success: Boolean = false, - val message: String? = null, +// val success: Boolean = false, + val msg: String? = null, val code: Int = 0, - val result: T? = null + val data: T? = null, + val total: Int ) \ No newline at end of file diff --git a/app/src/main/java/com/shuwei/intelligent/shelves/net/UrlConfig.kt b/app/src/main/java/com/shuwei/intelligent/shelves/net/UrlConfig.kt index 8c87dc1..c96abd4 100644 --- a/app/src/main/java/com/shuwei/intelligent/shelves/net/UrlConfig.kt +++ b/app/src/main/java/com/shuwei/intelligent/shelves/net/UrlConfig.kt @@ -13,12 +13,17 @@ object UrlConfig { // */ // const val DEVICE_CONFIG = "${DEVICE_BASE_URL}/equipment/stEquipment/queryByEquipmentCode" -// const val BASE_URL = "http://192.168.1.3:9002" - const val BASE_URL = "https://yyjk.shuziweidao.com/gateway" + const val BASE_URL = "http://dev.yixiong-tech.com:8081" +// const val BASE_URL = "https://yyjk.shuziweidao.com/gateway" +// const val BASE_URL = "http://192.168.1.201:14801" + var GET_ACCESS_TOKEN = "${App.configUrl}/restaurant/equipment/stEquipment/getEquipmentToken" - var GET_SHELF_LIST = "${App.configUrl}/inventory/smartShelves/app/getShelvesListByDeviceId" - var GET_GOODS_LIST = "${App.configUrl}/inventory/smartShelves/app/getGoodsPageList" - var SAVE_SHELF_GOODS_LIST = "${App.configUrl}/inventory/smartShelves/app/saveShelvesGoodsList" + var GET_SHELF_LIST = + "${App.configUrl}/terminal/neglect/smartShelves/app/smartShelves/app/getShelvesListByDeviceId" + var GET_GOODS_LIST = + "${App.configUrl}/terminal/neglect/smartShelves/app/smartShelves/app/getGoodsPageList" + var SAVE_SHELF_GOODS_LIST = + "${App.configUrl}/terminal/neglect/smartShelves/app/smartShelves/app/saveShelvesGoodsList" } diff --git a/app/src/main/java/com/shuwei/intelligent/shelves/serial/SerialPortManager.kt b/app/src/main/java/com/shuwei/intelligent/shelves/serial/SerialPortManager.kt index 34e3c55..7fce0e8 100644 --- a/app/src/main/java/com/shuwei/intelligent/shelves/serial/SerialPortManager.kt +++ b/app/src/main/java/com/shuwei/intelligent/shelves/serial/SerialPortManager.kt @@ -7,6 +7,7 @@ import io.github.jeadyx.jserialport.AndroidSerialPort import io.github.jeadyx.jserialport.SerialPort import io.github.jeadyx.jserialport.SerialPortFactory import kotlinx.coroutines.* +import kotlinx.coroutines.flow.collectLatest import java.nio.charset.Charset import java.util.Locale @@ -53,9 +54,14 @@ object SerialPortManager { fun startReceive(callback: (String) -> Unit) { scope.launch { while (isActive) { - serialPort?.read()?.collect { buffer -> - val data = buffer.toHexString2().toUpperCase() - callback(data) + try { + val flow = serialPort?.read() + flow?.collect { buffer -> + val data = buffer.toHexString2().toUpperCase() + callback(data) + } + } catch (e: Exception) { + e.printStackTrace() } delay(50) } diff --git a/app/src/main/java/com/shuwei/intelligent/shelves/task/SyncTask.kt b/app/src/main/java/com/shuwei/intelligent/shelves/task/SyncTask.kt index f51b4c8..03b843e 100644 --- a/app/src/main/java/com/shuwei/intelligent/shelves/task/SyncTask.kt +++ b/app/src/main/java/com/shuwei/intelligent/shelves/task/SyncTask.kt @@ -38,10 +38,10 @@ class SyncTask(appContext: Context, workerParams: WorkerParameters) : val list = HomeActivity.list Log.d(TAG, "performSync: list:${list.toJsonString()}") val submitList = list.sortedBy { it.deviceNo } - submitList.forEach { - it.temperature = HomeActivity.showTemperatureC - it.humidity = HomeActivity.showHumidity - } +// submitList.forEach { +// it.temperature = HomeActivity.showTemperatureC +// it.humidity = HomeActivity.showHumidity +// } val body = ShelfBody().also { it.deviceId = App.deviceId ?: "" it.canteenId = App.canteenId @@ -49,8 +49,8 @@ class SyncTask(appContext: Context, workerParams: WorkerParameters) : it.humidity = HomeActivity.showHumidity it.goodsList = submitList } - val resp = apiService.saveShelfGoodsList(body = body) Log.d(TAG, "performSync: body:${body.toJsonString()}") + val resp = apiService.saveShelfGoodsList(body = body) Log.d(TAG, "performSync: resp:${resp.toJsonString()}") } } diff --git a/app/src/main/java/com/shuwei/intelligent/shelves/task/TaskManager.kt b/app/src/main/java/com/shuwei/intelligent/shelves/task/TaskManager.kt index 339e7f2..2f544a7 100644 --- a/app/src/main/java/com/shuwei/intelligent/shelves/task/TaskManager.kt +++ b/app/src/main/java/com/shuwei/intelligent/shelves/task/TaskManager.kt @@ -12,7 +12,7 @@ object TaskManager { fun startTask() { val nextRequest = OneTimeWorkRequestBuilder() - .setInitialDelay(3, TimeUnit.MINUTES) + .setInitialDelay(2, TimeUnit.MINUTES) // .setInitialDelay(30, TimeUnit.SECONDS) // .setInputData(inputData) .build() @@ -44,7 +44,7 @@ object TaskManager { fun startDeviceTask() { val nextRequest = OneTimeWorkRequestBuilder() - .setInitialDelay(3, TimeUnit.SECONDS) + .setInitialDelay(2, TimeUnit.MINUTES) .build() WorkManager.getInstance(App.getInstance()) .enqueueUniqueWork(DEVICE_TASK_NAME, ExistingWorkPolicy.REPLACE, nextRequest) diff --git a/app/src/main/java/com/shuwei/intelligent/shelves/utils/AppUtil.java b/app/src/main/java/com/shuwei/intelligent/shelves/utils/AppUtil.java index c821e73..af3b846 100644 --- a/app/src/main/java/com/shuwei/intelligent/shelves/utils/AppUtil.java +++ b/app/src/main/java/com/shuwei/intelligent/shelves/utils/AppUtil.java @@ -406,46 +406,44 @@ public class AppUtil { */ @SuppressLint("MissingPermission") public static String getUDID(Context context) { + return "test111"; // String androidID = Settings.Secure.getString(context.getContentResolver(), Settings.Secure.ANDROID_ID); -// L.e("androidID===" + androidID); -// return androidID; - String androidID = Settings.Secure.getString(context.getContentResolver(), Settings.Secure.ANDROID_ID); - if (!androidID.equals("")) { - try { - if (!"9774d56d682e549c".equals(androidID)) { - androidID = UUID.nameUUIDFromBytes(androidID.getBytes("utf8")).toString(); - } else { - @SuppressLint("MissingPermission") final String deviceId = ((TelephonyManager) context.getSystemService(TELEPHONY_SERVICE)).getDeviceId(); - androidID = deviceId != null ? UUID.nameUUIDFromBytes(deviceId.getBytes("utf8")).toString() : UUID.randomUUID().toString(); - } - } catch (UnsupportedEncodingException e) { - throw new RuntimeException(e); - } - return androidID; - } - - //需要权限 android.permission.READ_PHONE_STATE - TelephonyManager TelephonyMgr = (TelephonyManager) context.getSystemService(TELEPHONY_SERVICE); - String szImei = TelephonyMgr.getDeviceId(); - if (!szImei.equals("")) { - return szImei; - } - - //需要权限 android.permission.ACCESS_WIFI_STATE - WifiManager wm = (WifiManager) context.getSystemService(Context.WIFI_SERVICE); - String m_szWLANMAC = wm.getConnectionInfo().getMacAddress(); - if (!m_szWLANMAC.equals("")) { - return m_szWLANMAC; - } - - //需要权限 android.permission.BLUETOOTH - BluetoothAdapter m_BluetoothAdapter = null; - m_BluetoothAdapter = BluetoothAdapter.getDefaultAdapter(); - String m_szBTMAC = m_BluetoothAdapter.getAddress(); - if (!m_szBTMAC.equals("")) { - return m_szBTMAC; - } - return getUniquePsuedoID(); +// if (!androidID.equals("")) { +// try { +// if (!"9774d56d682e549c".equals(androidID)) { +// androidID = UUID.nameUUIDFromBytes(androidID.getBytes("utf8")).toString(); +// } else { +// @SuppressLint("MissingPermission") final String deviceId = ((TelephonyManager) context.getSystemService(TELEPHONY_SERVICE)).getDeviceId(); +// androidID = deviceId != null ? UUID.nameUUIDFromBytes(deviceId.getBytes("utf8")).toString() : UUID.randomUUID().toString(); +// } +// } catch (UnsupportedEncodingException e) { +// throw new RuntimeException(e); +// } +// return androidID; +// } +// +// //需要权限 android.permission.READ_PHONE_STATE +// TelephonyManager TelephonyMgr = (TelephonyManager) context.getSystemService(TELEPHONY_SERVICE); +// String szImei = TelephonyMgr.getDeviceId(); +// if (!szImei.equals("")) { +// return szImei; +// } +// +// //需要权限 android.permission.ACCESS_WIFI_STATE +// WifiManager wm = (WifiManager) context.getSystemService(Context.WIFI_SERVICE); +// String m_szWLANMAC = wm.getConnectionInfo().getMacAddress(); +// if (!m_szWLANMAC.equals("")) { +// return m_szWLANMAC; +// } +// +// //需要权限 android.permission.BLUETOOTH +// BluetoothAdapter m_BluetoothAdapter = null; +// m_BluetoothAdapter = BluetoothAdapter.getDefaultAdapter(); +// String m_szBTMAC = m_BluetoothAdapter.getAddress(); +// if (!m_szBTMAC.equals("")) { +// return m_szBTMAC; +// } +// return getUniquePsuedoID(); } //获得 Psuedo ID diff --git a/app/src/main/java/com/shuwei/intelligent/shelves/utils/KeyboardUtil.kt b/app/src/main/java/com/shuwei/intelligent/shelves/utils/KeyboardUtil.kt index a6e1ae6..a39f2a0 100644 --- a/app/src/main/java/com/shuwei/intelligent/shelves/utils/KeyboardUtil.kt +++ b/app/src/main/java/com/shuwei/intelligent/shelves/utils/KeyboardUtil.kt @@ -13,5 +13,9 @@ object KeyboardUtil { view.clearFocus() // 清除焦点避免键盘再次弹出 } - + fun hideKeyboard(view: View) { + val imm = view.context.getSystemService(Context.INPUT_METHOD_SERVICE) as InputMethodManager + imm.hideSoftInputFromWindow(view.windowToken, 0) + view.clearFocus() // 清除焦点避免键盘再次弹出 + } } \ No newline at end of file diff --git a/app/src/main/res/drawable-xxxhdpi/close.png b/app/src/main/res/drawable-xxxhdpi/close.png new file mode 100644 index 0000000000000000000000000000000000000000..9aab2c61550869b5f58a681b25e8990cf4714787 GIT binary patch literal 4549 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 SEGmyIfT{5%qiRD`^nU?~u7MH& literal 0 HcmV?d00001 diff --git a/app/src/main/res/layout/activity_base.xml b/app/src/main/res/layout/activity_base.xml index 61f3bc4..03e8501 100644 --- a/app/src/main/res/layout/activity_base.xml +++ b/app/src/main/res/layout/activity_base.xml @@ -11,29 +11,33 @@ + android:layout_height="30dp"> + diff --git a/app/src/main/res/layout/activity_home.xml b/app/src/main/res/layout/activity_home.xml index 23803d3..1f5add4 100644 --- a/app/src/main/res/layout/activity_home.xml +++ b/app/src/main/res/layout/activity_home.xml @@ -25,4 +25,11 @@ layout="@layout/layout_empty_view" android:visibility="gone"/> + + + + + + + \ No newline at end of file diff --git a/app/src/main/res/layout/activity_shelf.xml b/app/src/main/res/layout/activity_shelf.xml index 0f6e58c..a3f73dd 100644 --- a/app/src/main/res/layout/activity_shelf.xml +++ b/app/src/main/res/layout/activity_shelf.xml @@ -93,7 +93,7 @@ android:insetTop="0dp" android:insetBottom="0dp" android:maxLines="1" - android:text="清零" + android:text="清零00" android:textColor="@color/white" android:textSize="15sp" app:cornerRadius="6dp" @@ -110,6 +110,21 @@ android:src="@drawable/ic_back_512" tools:ignore="ContentDescription" /> + + diff --git a/app/src/main/res/layout/layout_light_switch.xml b/app/src/main/res/layout/layout_light_switch.xml new file mode 100644 index 0000000..d9f77dd --- /dev/null +++ b/app/src/main/res/layout/layout_light_switch.xml @@ -0,0 +1,126 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file