Browse Source

完成底座测试页

Frankensteinly 9 months ago
parent
commit
644b7a98e4

+ 5 - 4
app/src/main/java/com/grkj/iscs/util/SPUtils.kt

@@ -6,6 +6,7 @@ import com.grkj.iscs.model.vo.card.CardInfoRespVO
 object SPUtils {
 
     private const val SP_NAME = "iscs"
+    private const val SP_CONFIG_NAME = "iscs_config"
 
     private const val KEY_LOGIN_USER_CARD_ID = "card_id"
     private const val KEY_LOGIN_USER_CARD_CODE = "card_code"
@@ -79,26 +80,26 @@ object SPUtils {
     }
 
     fun saveDockConfig(context: Context, config: String) {
-        val sp = context.getSharedPreferences(SP_NAME, Context.MODE_PRIVATE)
+        val sp = context.getSharedPreferences(SP_CONFIG_NAME, Context.MODE_PRIVATE)
         val edit = sp.edit()
         edit.putString(KEY_DOCK_CONFIG, config)
         edit.apply()
     }
 
     fun getDockConfig(context: Context): String? {
-        val sp = context.getSharedPreferences(SP_NAME, Context.MODE_PRIVATE)
+        val sp = context.getSharedPreferences(SP_CONFIG_NAME, Context.MODE_PRIVATE)
         return sp.getString(KEY_DOCK_CONFIG, null)
     }
 
     fun savePortConfig(context: Context, config: String) {
-        val sp = context.getSharedPreferences(SP_NAME, Context.MODE_PRIVATE)
+        val sp = context.getSharedPreferences(SP_CONFIG_NAME, Context.MODE_PRIVATE)
         val edit = sp.edit()
         edit.putString(KEY_PORT_CONFIG, config)
         edit.apply()
     }
 
     fun getPortConfig(context: Context): String? {
-        val sp = context.getSharedPreferences(SP_NAME, Context.MODE_PRIVATE)
+        val sp = context.getSharedPreferences(SP_CONFIG_NAME, Context.MODE_PRIVATE)
         return sp.getString(KEY_PORT_CONFIG, null)
     }
 }

+ 12 - 7
app/src/main/java/com/grkj/iscs/view/activity/HomeActivity.kt

@@ -11,9 +11,11 @@ import com.grkj.iscs.extentions.toHexStrings
 import com.grkj.iscs.view.adapter.MenuAdapter
 import com.grkj.iscs.view.base.BaseFragment
 import com.grkj.iscs.view.base.BaseMvpActivity
+import com.grkj.iscs.view.fragment.DockTestFragment
 import com.grkj.iscs.view.fragment.JobManagementFragment
 import com.grkj.iscs.view.fragment.MaterialManagementFragment
 import com.grkj.iscs.view.fragment.SettingFragment
+import com.grkj.iscs.view.fragment.SystemSettingFragment
 import com.grkj.iscs.view.iview.IHomeView
 import com.grkj.iscs.view.presenter.HomePresenter
 import com.zhy.adapter.recyclerview.CommonAdapter
@@ -26,6 +28,7 @@ class HomeActivity : BaseMvpActivity<IHomeView, HomePresenter, ActivityHomeBindi
 
     private var cardNo = ""
     val cardNoLiveData = MutableLiveData("")
+    private var mMenuList = mutableListOf<Menu>()
 
     override val viewBinding: ActivityHomeBinding
         get() = ActivityHomeBinding.inflate(layoutInflater)
@@ -33,20 +36,22 @@ class HomeActivity : BaseMvpActivity<IHomeView, HomePresenter, ActivityHomeBindi
     override fun initView() {
         presenter?.registerStatusListener()
 
+        mMenuList = mutableListOf(
+//            Menu(getString(R.string.test), R.mipmap.menu_icon_test, DockTestFragment()),
+//            Menu(getString(R.string.test), R.mipmap.menu_icon_sys_setting, SystemSettingFragment()),
+            Menu(getString(R.string.job_management), R.mipmap.job_management, JobManagementFragment()),
+            Menu(getString(R.string.material_management), R.mipmap.material_management, MaterialManagementFragment()),
+            Menu(getString(R.string.settings), R.mipmap.settings, SettingFragment())
+        )
+
         mBinding?.itemSetting?.ivIcon?.setImageResource(R.mipmap.settings)
         mBinding?.itemSetting?.tvName?.text = getString(R.string.settings)
         mBinding?.itemSetting?.root?.setOnClickListener {
-            mBinding?.vp?.currentItem = 2
+            mBinding?.vp?.currentItem = mMenuList.size - 1
             mBinding?.itemSetting?.root?.setBackgroundColor(getColor(R.color.common_bg_white_30))
             mBinding?.rvMenu?.adapter?.notifyDataSetChanged()
         }
 
-        val mMenuList = mutableListOf(
-            Menu(getString(R.string.job_management), R.mipmap.job_management, JobManagementFragment()),
-            Menu(getString(R.string.material_management), R.mipmap.material_management, MaterialManagementFragment()),
-            Menu(getString(R.string.settings), R.mipmap.settings, SettingFragment())
-        )
-
         mBinding?.vp?.isUserInputEnabled = false
         mBinding?.vp?.offscreenPageLimit = mMenuList.size
         mBinding?.vp?.adapter = MenuAdapter(supportFragmentManager, lifecycle, mMenuList)

+ 94 - 0
app/src/main/java/com/grkj/iscs/view/fragment/DockTestFragment.kt

@@ -1,17 +1,111 @@
 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.FragmentDockTestBinding
+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.SPUtils
 import com.grkj.iscs.view.base.BaseFragment
+import com.zhy.adapter.recyclerview.CommonAdapter
+import com.zhy.adapter.recyclerview.base.ViewHolder
 
 /**
  * 底座测试页
  */
 class DockTestFragment : BaseFragment<FragmentDockTestBinding>() {
 
+    private var mKeyDockList = mutableListOf<DockTestBean>()
+    private var mLockDockList = mutableListOf<DockTestBean>()
+
     override val viewBinding: FragmentDockTestBinding
         get() = FragmentDockTestBinding.inflate(layoutInflater)
 
     override fun initView() {
+        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 })
+                mLockDockList.addAll(tempList.filter { it.type == DOCK_TYPE_LOCK })
+            }
+            mKeyDockList.forEach { dock ->
+                dock.deviceList = mutableListOf(1, 2)
+            }
+            mLockDockList.forEach { dock ->
+                dock.deviceList = mutableListOf(1, 2, 3, 4, 5, 6, 7, 8, 9, 10)
+            }
+        }
+
+        mBinding?.rvKey?.adapter = object :
+            CommonAdapter<DockTestBean>(requireActivity(), R.layout.item_rv_dock_test, mKeyDockList) {
+            override fun convert(holder: ViewHolder, dock: DockTestBean, position: Int) {
+                holder.setText(R.id.tv_address, "0x${String.format("%02X", dock.address)}")
+                val rvDevice = holder.getView<androidx.recyclerview.widget.RecyclerView>(R.id.rv_device)
+                rvDevice.adapter = object : CommonAdapter<Int>(
+                    requireActivity(), R.layout.item_rv_dock_test_child, dock.deviceList) {
+                    override fun convert(holder: ViewHolder, deviceIndex: Int, position: Int) {
+                        holder.setText(R.id.tv_name, getString(R.string.device_index, deviceIndex))
+                        holder.setOnClickListener(R.id.tv_turn_on) {
+                            ModBusController.controlKeyBuckle(true, deviceIndex == 1, dock.address.toInt() - 1)
+                        }
+                        holder.setOnClickListener(R.id.tv_turn_off) {
+                            ModBusController.controlKeyBuckle(false, deviceIndex == 1, dock.address.toInt() - 1)
+                        }
+                    }
+                }
+            }
+        }
+
+        mBinding?.rvLock?.adapter = object :
+            CommonAdapter<DockTestBean>(requireActivity(), R.layout.item_rv_dock_test, mLockDockList) {
+            override fun convert(holder: ViewHolder, dock: DockTestBean, position: Int) {
+                holder.setText(R.id.tv_address, "0x${String.format("%02X", dock.address)}")
+                val rvDevice = holder.getView<androidx.recyclerview.widget.RecyclerView>(R.id.rv_device)
+                rvDevice.adapter = object : CommonAdapter<Int>(
+                    requireActivity(), R.layout.item_rv_dock_test_child, dock.deviceList) {
+                    override fun convert(holder: ViewHolder, deviceIndex: Int, position: Int) {
+                        holder.setText(R.id.tv_name, getString(R.string.device_index, deviceIndex))
+                        holder.setOnClickListener(R.id.tv_turn_on) {
+                            ModBusController.controlLockBuckle(true, dock.address.toInt() - 1, deviceIndex - 1)
+                        }
+                        holder.setOnClickListener(R.id.tv_turn_off) {
+                            ModBusController.controlLockBuckle(false, dock.address.toInt() - 1, deviceIndex - 1)
+                        }
+                    }
+                }
+            }
+        }
 
+        mBinding?.cbOpen?.setOnClickListener {
+            mKeyDockList.forEach { dock ->
+                dock.deviceList?.forEach { deviceIndex ->
+                    ModBusController.controlKeyBuckle(true, deviceIndex == 1, dock.address.toInt() - 1)
+                }
+            }
+            mLockDockList.forEach { dock ->
+                dock.deviceList?.forEach { deviceIndex ->
+                    ModBusController.controlLockBuckle(true, dock.address.toInt() - 1, deviceIndex - 1)
+                }
+            }
+        }
+
+        mBinding?.cbClose?.setOnClickListener {
+            mKeyDockList.forEach { dock ->
+                dock.deviceList?.forEach { deviceIndex ->
+                    ModBusController.controlKeyBuckle(false, deviceIndex == 1, dock.address.toInt() - 1)
+                }
+            }
+            mLockDockList.forEach { dock ->
+                dock.deviceList?.forEach { deviceIndex ->
+                    ModBusController.controlLockBuckle(false, dock.address.toInt() - 1, deviceIndex - 1)
+                }
+            }
+        }
     }
+
+    data class DockTestBean(val address: Byte, val type: Byte, var deviceList: MutableList<Int>? = null)
 }

+ 25 - 2
app/src/main/res/layout/fragment_dock_test.xml

@@ -25,7 +25,7 @@
         app:btn_bg="@drawable/common_btn_red_bg"
         app:btn_name="@string/open_all_docks" />
 
-    <androidx.constraintlayout.widget.ConstraintLayout
+    <androidx.core.widget.NestedScrollView
         android:layout_width="match_parent"
         android:layout_height="match_parent"
         android:layout_above="@id/cb_close"
@@ -33,5 +33,28 @@
         android:background="@drawable/item_rv_technology_sop_bg_normal"
         android:padding="5dp">
 
-    </androidx.constraintlayout.widget.ConstraintLayout>
+        <LinearLayout
+            android:layout_width="match_parent"
+            android:layout_height="match_parent"
+            android:orientation="vertical">
+
+            <TextView
+                style="@style/CommonTextView"
+                android:layout_margin="@dimen/common_spacing_small"
+                android:text="@string/key_dock" />
+
+            <androidx.recyclerview.widget.RecyclerView
+                android:id="@+id/rv_key"
+                style="@style/CommonRecyclerView" />
+
+            <TextView
+                style="@style/CommonTextView"
+                android:layout_margin="@dimen/common_spacing_small"
+                android:text="@string/lock_dock" />
+
+            <androidx.recyclerview.widget.RecyclerView
+                android:id="@+id/rv_lock"
+                style="@style/CommonRecyclerView" />
+        </LinearLayout>
+    </androidx.core.widget.NestedScrollView>
 </RelativeLayout>

+ 41 - 0
app/src/main/res/layout/item_rv_dock_test.xml

@@ -0,0 +1,41 @@
+<?xml version="1.0" encoding="utf-8"?>
+<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
+    xmlns:app="http://schemas.android.com/apk/res-auto"
+    android:id="@+id/root"
+    android:layout_width="match_parent"
+    android:layout_height="wrap_content"
+    android:layout_margin="@dimen/common_spacing_small"
+    android:background="@drawable/item_rv_technology_sop_bg_selector"
+    android:gravity="center_vertical"
+    android:orientation="horizontal"
+    android:padding="@dimen/common_spacing_small">
+
+    <androidx.constraintlayout.widget.ConstraintLayout
+        android:layout_width="wrap_content"
+        android:layout_height="match_parent"
+        android:layout_marginHorizontal="@dimen/common_spacing">
+
+        <TextView
+            android:id="@+id/tv_name"
+            style="@style/CommonTextView"
+            android:text="@string/address"
+            app:layout_constraintLeft_toLeftOf="parent"
+            app:layout_constraintRight_toRightOf="parent"
+            app:layout_constraintTop_toTopOf="parent" />
+
+        <TextView
+            android:id="@+id/tv_address"
+            style="@style/CommonTextView"
+            android:text="@string/address"
+            app:layout_constraintBottom_toBottomOf="parent"
+            app:layout_constraintLeft_toLeftOf="parent"
+            app:layout_constraintRight_toRightOf="parent"
+            app:layout_constraintTop_toBottomOf="@id/tv_name" />
+    </androidx.constraintlayout.widget.ConstraintLayout>
+
+    <androidx.recyclerview.widget.RecyclerView
+        android:id="@+id/rv_device"
+        style="@style/CommonRecyclerView"
+        android:layout_height="wrap_content"
+        android:orientation="horizontal" />
+</LinearLayout>

+ 36 - 0
app/src/main/res/layout/item_rv_dock_test_child.xml

@@ -0,0 +1,36 @@
+<?xml version="1.0" encoding="utf-8"?>
+<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
+    android:id="@+id/root"
+    android:layout_width="wrap_content"
+    android:layout_height="match_parent"
+    android:layout_marginHorizontal="2dp"
+    android:gravity="center_horizontal"
+    android:orientation="vertical">
+
+    <TextView
+        android:id="@+id/tv_name"
+        style="@style/CommonTextView" />
+
+    <LinearLayout
+        android:layout_width="wrap_content"
+        android:layout_height="wrap_content"
+        android:background="@drawable/item_rv_technology_sop_bg_selector"
+        android:orientation="horizontal"
+        android:padding="2dp">
+
+        <TextView
+            android:id="@+id/tv_turn_on"
+            style="@style/CommonTextView"
+            android:layout_marginRight="@dimen/common_spacing_small"
+            android:background="@color/common_btn_red_bg"
+            android:padding="2dp"
+            android:text="@string/turn_on" />
+
+        <TextView
+            android:id="@+id/tv_turn_off"
+            style="@style/CommonTextView"
+            android:background="@color/main_color_dark"
+            android:padding="2dp"
+            android:text="@string/turn_off" />
+    </LinearLayout>
+</LinearLayout>

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


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


+ 9 - 1
app/src/main/res/values/strings.xml

@@ -174,5 +174,13 @@
     <string name="not_involved_in_ticket">您不参与该工票</string>
     <string name="you_are_not_locker_tip">您不是上锁人,无法执行此操作</string>
     <string name="open_all_docks">全仓开</string>
-    <string name="close_all_docks">全仓关</string>
+    <string name="close_all_docks">全仓关</string>\
+    <string name="key_dock">钥匙仓</string>
+    <string name="lock_dock">锁仓</string>
+    <string name="address">地址</string>
+    <string name="device_index">%d号仓</string>
+    <string name="test">测试</string>
+    <string name="system_setting">系统设置</string>
+    <string name="turn_on">开</string>
+    <string name="turn_off">关</string>
 </resources>