Bladeren bron

设备状态页添加挂锁底座显示

Frankensteinly 6 maanden geleden
bovenliggende
commit
b502770e6f

+ 6 - 0
app/src/main/java/com/grkj/iscs/modbus/ModBusController.kt

@@ -458,6 +458,12 @@ object ModBusController {
             ?.find { it.isLeft == isLeft && it.isExist } != null
     }
 
+    fun isLockExist(dockAddr: Byte?, lockIdx: Int): Boolean {
+        dockAddr ?: return false
+        return dockList.find { it.addr == dockAddr }?.getLockList()
+            ?.find { it.idx == lockIdx && it.isExist } != null
+    }
+
     /**
      * 获取钥匙状态
      *

+ 19 - 28
app/src/main/java/com/grkj/iscs/view/fragment/DeviceStatusFragment.kt

@@ -1,15 +1,10 @@
 package com.grkj.iscs.view.fragment
 
-import com.google.gson.Gson
-import com.google.gson.reflect.TypeToken
 import com.grkj.iscs.R
 import com.grkj.iscs.databinding.FragmentDeviceStatusBinding
 import com.grkj.iscs.extentions.setSelected
 import com.grkj.iscs.extentions.setVisibleWithHolder
 import com.grkj.iscs.modbus.ModBusController
-import com.grkj.iscs.model.DeviceConst.DOCK_TYPE_KEY
-import com.grkj.iscs.util.SPUtils
-import com.grkj.iscs.util.log.LogUtil
 import com.grkj.iscs.view.base.BaseMvpFragment
 import com.grkj.iscs.view.fragment.DockTestFragment.DockTestBean
 import com.grkj.iscs.view.iview.IDeviceStatusView
@@ -21,18 +16,17 @@ import com.zhy.adapter.recyclerview.base.ViewHolder
  * 设备状态页
  */
 class DeviceStatusFragment : BaseMvpFragment<IDeviceStatusView, DeviceStatusPresenter, FragmentDeviceStatusBinding>() {
-
-    private var mKeyDockList = mutableListOf<DockTestBean>()
-    private var mRowList = mutableListOf<KeyDockStatusBO>()
+    private var mRowKeyList = mutableListOf<KeyDockStatusBO>()
+    private var mRowLockList = mutableListOf<LockDockStatusBO>()
 
     override val viewBinding: FragmentDeviceStatusBinding
         get() = FragmentDeviceStatusBinding.inflate(layoutInflater)
 
     override fun initView() {
-        initData()
+        presenter?.initData(mRowKeyList, mRowLockList)
 
         mBinding?.rvKey?.adapter = object :
-            CommonAdapter<KeyDockStatusBO>(requireActivity(), R.layout.item_rv_key_dock_status, mRowList) {
+            CommonAdapter<KeyDockStatusBO>(requireActivity(), R.layout.item_rv_key_dock_status, mRowKeyList) {
             override fun convert(holder: ViewHolder, row: KeyDockStatusBO, position: Int) {
                 holder.setVisibleWithHolder(R.id.ll_left, row.dockList.any { it.column == "1" })
                 holder.setVisibleWithHolder(R.id.ll_right, row.dockList.any { it.column == "2" })
@@ -70,33 +64,25 @@ class DeviceStatusFragment : BaseMvpFragment<IDeviceStatusView, DeviceStatusPres
                 }
             }
         }
-    }
 
-    private fun initData() {
-        val dockConfigJson = SPUtils.getDockConfig(requireActivity())
-        if (!dockConfigJson.isNullOrEmpty()) {
-            val tempList: MutableList<DockTestBean> =
-                Gson().fromJson(dockConfigJson, object : TypeToken<MutableList<DockTestBean>>() {}.type)
-            if (tempList.isNotEmpty()) {
-                mKeyDockList.addAll(tempList.filter { it.type == DOCK_TYPE_KEY })
-                mKeyDockList.forEach { dock ->
-                    try {
-                        mRowList.find { it.row == dock.row.toInt() }?.let {
-                            it.dockList.add(dock)
-                        } ?: let {
-                            mRowList.add(KeyDockStatusBO(dock.row.toInt(), mutableListOf(dock)))
-                        }
-                    } catch (e: Exception) {
-                        LogUtil.e("Device status data error : ${e.message}")
+        mBinding?.rvLock?.adapter = object :
+            CommonAdapter<LockDockStatusBO>(requireActivity(), R.layout.item_rv_lock_dock_status, mRowLockList) {
+                override fun convert(holder: ViewHolder, row: LockDockStatusBO, position: Int) {
+                    val rv = holder.getView<androidx.recyclerview.widget.RecyclerView>(R.id.rv_root)
+                    rv.adapter = object :
+                        CommonAdapter<Int>(requireActivity(), R.layout.item_rv_lock_dock_child_status, row.dock.deviceList) {
+                            override fun convert(holder: ViewHolder, lockIdx: Int, position: Int) {
+                                holder.setSelected(R.id.root, ModBusController.isLockExist(row.dock.address, lockIdx))
+                            }
                     }
                 }
             }
-        }
     }
 
     override fun onResume() {
         super.onResume()
         mBinding?.rvKey?.adapter?.notifyDataSetChanged()
+        mBinding?.rvLock?.adapter?.notifyDataSetChanged()
     }
 
     override fun initPresenter(): DeviceStatusPresenter {
@@ -107,4 +93,9 @@ class DeviceStatusFragment : BaseMvpFragment<IDeviceStatusView, DeviceStatusPres
         val row: Int,
         val dockList: MutableList<DockTestBean>
     )
+
+    data class LockDockStatusBO(
+        val row: Int,
+        var dock: DockTestBean
+    )
 }

+ 43 - 0
app/src/main/java/com/grkj/iscs/view/presenter/DeviceStatusPresenter.kt

@@ -1,20 +1,63 @@
 package com.grkj.iscs.view.presenter
 
 import com.clj.fastble.BleManager
+import com.google.gson.Gson
+import com.google.gson.reflect.TypeToken
 import com.grkj.iscs.BusinessManager
 import com.grkj.iscs.BusinessManager.getCurrentStatus
 import com.grkj.iscs.R
 import com.grkj.iscs.extentions.removeLeadingZeros
 import com.grkj.iscs.extentions.toHexStrings
 import com.grkj.iscs.modbus.ModBusController
+import com.grkj.iscs.model.DeviceConst.DOCK_TYPE_KEY
+import com.grkj.iscs.model.DeviceConst.DOCK_TYPE_LOCK
 import com.grkj.iscs.util.Executor
 import com.grkj.iscs.util.NetApi
+import com.grkj.iscs.util.SPUtils
 import com.grkj.iscs.util.ToastUtils
 import com.grkj.iscs.util.log.LogUtil
 import com.grkj.iscs.view.base.BasePresenter
+import com.grkj.iscs.view.fragment.DeviceStatusFragment.KeyDockStatusBO
+import com.grkj.iscs.view.fragment.DeviceStatusFragment.LockDockStatusBO
+import com.grkj.iscs.view.fragment.DockTestFragment.DockTestBean
 import com.grkj.iscs.view.iview.IDeviceStatusView
 
 class DeviceStatusPresenter : BasePresenter<IDeviceStatusView>() {
+
+    fun initData(rowKeyList: MutableList<KeyDockStatusBO>, rowLockList: MutableList<LockDockStatusBO>) {
+        val dockConfigJson = SPUtils.getDockConfig(mContext!!)
+        if (!dockConfigJson.isNullOrEmpty()) {
+            val tempList: MutableList<DockTestBean> =
+                Gson().fromJson(dockConfigJson, object : TypeToken<MutableList<DockTestBean>>() {}.type)
+            if (tempList.isNotEmpty()) {
+                tempList.filter { it.type == DOCK_TYPE_KEY }.forEach { dock ->
+                    try {
+                        rowKeyList.find { it.row == dock.row.toInt() }?.let {
+                            it.dockList.add(dock)
+                        } ?: let {
+                            rowKeyList.add(KeyDockStatusBO(dock.row.toInt(), mutableListOf(dock)))
+                        }
+                    } catch (e: Exception) {
+                        LogUtil.e("Device key status data error : ${e.message}")
+                    }
+                }
+                tempList.filter { it.type == DOCK_TYPE_LOCK }.forEach { dock ->
+                    try {
+                        dock.deviceList = mutableListOf(0, 1, 2, 3, 4, 5, 6, 7, 8, 9)
+                        rowLockList.find { it.row == dock.row.toInt() }?.let {
+                            it.dock = dock
+                        } ?: let {
+                            rowLockList.add(LockDockStatusBO(dock.row.toInt(), dock))
+                        }
+                    } catch (e: Exception) {
+                        LogUtil.e("Device lock status data error : ${e.message}")
+                    }
+                }
+                rowLockList.sortBy { it.row }
+            }
+        }
+    }
+
     fun getKeyStatus(dockAddr: Byte?, isLeft: Boolean): Pair<Boolean, String> {
         val status = ModBusController.getKeyStatus(dockAddr, isLeft)
         LogUtil.i("getKeyStatus Key status : $dockAddr - $isLeft - $status")

+ 5 - 0
app/src/main/res/drawable/dock_lock_selector.xml

@@ -0,0 +1,5 @@
+<?xml version="1.0" encoding="utf-8"?>
+<selector xmlns:android="http://schemas.android.com/apk/res/android">
+    <item android:state_selected="false" android:drawable="@mipmap/dock_no_lock" />
+    <item android:state_selected="true" android:drawable="@mipmap/dock_has_lock" />
+</selector>

+ 13 - 3
app/src/main/res/layout/fragment_device_status.xml

@@ -1,5 +1,5 @@
 <?xml version="1.0" encoding="utf-8"?>
-<FrameLayout xmlns:android="http://schemas.android.com/apk/res/android"
+<androidx.core.widget.NestedScrollView xmlns:android="http://schemas.android.com/apk/res/android"
     xmlns:tools="http://schemas.android.com/tools"
     android:layout_width="match_parent"
     android:layout_height="match_parent"
@@ -9,10 +9,20 @@
         android:layout_width="match_parent"
         android:layout_height="match_parent"
         android:background="@drawable/item_rv_technology_sop_bg_normal"
+        android:orientation="vertical"
         android:padding="@dimen/common_spacing">
 
         <androidx.recyclerview.widget.RecyclerView
             android:id="@+id/rv_key"
-            style="@style/CommonRecyclerView" />
+            style="@style/CommonRecyclerView"
+            android:layout_height="wrap_content" />
+
+        <androidx.recyclerview.widget.RecyclerView
+            android:id="@+id/rv_lock"
+            style="@style/CommonRecyclerView"
+            android:layout_width="wrap_content"
+            android:layout_height="wrap_content"
+            android:layout_gravity="center_horizontal"
+            android:layout_marginTop="@dimen/common_spacing" />
     </LinearLayout>
-</FrameLayout>
+</androidx.core.widget.NestedScrollView>

+ 8 - 0
app/src/main/res/layout/item_rv_lock_dock_child_status.xml

@@ -0,0 +1,8 @@
+<?xml version="1.0" encoding="utf-8"?>
+<FrameLayout xmlns:android="http://schemas.android.com/apk/res/android"
+    android:id="@+id/root"
+    android:layout_width="33dp"
+    android:layout_height="100dp"
+    android:layout_marginHorizontal="@dimen/common_spacing_small"
+    android:background="@drawable/dock_lock_selector"
+    android:orientation="horizontal" />

+ 6 - 0
app/src/main/res/layout/item_rv_lock_dock_status.xml

@@ -0,0 +1,6 @@
+<?xml version="1.0" encoding="utf-8"?>
+<androidx.recyclerview.widget.RecyclerView xmlns:android="http://schemas.android.com/apk/res/android"
+    android:id="@+id/rv_root"
+    style="@style/CommonRecyclerView"
+    android:layout_height="wrap_content"
+    android:orientation="horizontal" />

BIN
app/src/main/res/mipmap/dock_has_lock.png


BIN
app/src/main/res/mipmap/dock_no_lock.png