Bläddra i källkod

refactor(更新)
- 硬件管理新增/编辑重复性校验

周文健 10 månader sedan
förälder
incheckning
867da9410c
23 ändrade filer med 293 tillägg och 200 borttagningar
  1. 4 5
      app/src/main/java/com/grkj/iscs/features/main/dialog/hardware_manage/AddCardDialog.kt
  2. 4 12
      app/src/main/java/com/grkj/iscs/features/main/dialog/hardware_manage/AddKeyDialog.kt
  3. 4 11
      app/src/main/java/com/grkj/iscs/features/main/dialog/hardware_manage/AddLockDialog.kt
  4. 4 11
      app/src/main/java/com/grkj/iscs/features/main/dialog/hardware_manage/AddRfidTokenDialog.kt
  5. 4 5
      app/src/main/java/com/grkj/iscs/features/main/dialog/hardware_manage/UpdateCardDialog.kt
  6. 4 5
      app/src/main/java/com/grkj/iscs/features/main/dialog/hardware_manage/UpdateKeyDialog.kt
  7. 4 5
      app/src/main/java/com/grkj/iscs/features/main/dialog/hardware_manage/UpdateLockDialog.kt
  8. 4 5
      app/src/main/java/com/grkj/iscs/features/main/dialog/hardware_manage/UpdateRfidTokenDialog.kt
  9. 34 28
      app/src/main/java/com/grkj/iscs/features/main/fragment/hardware_manage/CardManageFragment.kt
  10. 59 52
      app/src/main/java/com/grkj/iscs/features/main/fragment/hardware_manage/KeyManageFragment.kt
  11. 36 30
      app/src/main/java/com/grkj/iscs/features/main/fragment/hardware_manage/LockManageFragment.kt
  12. 33 29
      app/src/main/java/com/grkj/iscs/features/main/fragment/hardware_manage/RfidTokenManageFragment.kt
  13. 16 0
      app/src/main/java/com/grkj/iscs/features/main/viewmodel/hardware_manage/CardManageViewModel.kt
  14. 16 0
      app/src/main/java/com/grkj/iscs/features/main/viewmodel/hardware_manage/KeyManageViewModel.kt
  15. 16 0
      app/src/main/java/com/grkj/iscs/features/main/viewmodel/hardware_manage/LockManageViewModel.kt
  16. 16 0
      app/src/main/java/com/grkj/iscs/features/main/viewmodel/hardware_manage/RfidTokenManageViewModel.kt
  17. 2 0
      app/src/main/res/values-en/strings.xml
  18. 2 0
      app/src/main/res/values-zh/strings.xml
  19. 2 0
      app/src/main/res/values/strings.xml
  20. 6 0
      data/src/main/java/com/grkj/data/dao/HardwareDao.kt
  21. 10 0
      data/src/main/java/com/grkj/data/repository/IHardwareRepository.kt
  22. 5 0
      data/src/main/java/com/grkj/data/repository/impl/network/NetworkIsolationPointRepository.kt
  23. 8 2
      data/src/main/java/com/grkj/data/repository/impl/standard/HardwareRepository.kt

+ 4 - 5
app/src/main/java/com/grkj/iscs/features/main/dialog/hardware_manage/AddCardDialog.kt

@@ -25,13 +25,13 @@ import org.greenrobot.eventbus.ThreadMode
  */
 class AddCardDialog(
     private val userData: List<TextDropDownDialog.TextDropDownEntity>,
-    private val onConfirm: (AddCardDataVo) -> Unit
+    private val onConfirm: (AddCardDataVo, CustomDialog) -> Unit
 ) : OnBindView<CustomDialog>(R.layout.dialog_add_card) {
 
     private lateinit var binding: DialogAddCardBinding
     private var selectedUser: TextDropDownDialog.TextDropDownEntity? = null
 
-    override fun onBind(dialog: CustomDialog?, v: View) {
+    override fun onBind(dialog: CustomDialog, v: View) {
         binding = DialogAddCardBinding.bind(v)
         dialog?.isCancelable = false
         dialog?.setMaskColor(CommonUtils.getColor(com.grkj.ui_base.R.color.scrim))
@@ -78,8 +78,7 @@ class AddCardDialog(
                 exStatus = statusChecked,
                 exRemark = binding.remarkEt.text.toString().takeIf { it.isNotBlank() }
             )
-            onConfirm(vo)
-            dialog?.dismiss()
+            onConfirm(vo,dialog)
         }
     }
 
@@ -101,7 +100,7 @@ class AddCardDialog(
         @JvmStatic
         fun show(
             userData: List<TextDropDownDialog.TextDropDownEntity>,
-            onConfirm: (AddCardDataVo) -> Unit
+            onConfirm: (AddCardDataVo, CustomDialog) -> Unit
         ) {
             CustomDialog.show(
                 AddCardDialog(userData, onConfirm),

+ 4 - 12
app/src/main/java/com/grkj/iscs/features/main/dialog/hardware_manage/AddKeyDialog.kt

@@ -16,12 +16,12 @@ import com.kongzue.dialogx.interfaces.OnBindView
  * AddKeyDialog.show { keyVo -> /* handle */ }
  */
 class AddKeyDialog(
-    private val onConfirm: (AddKeyDataVo) -> Unit
+    private val onConfirm: (AddKeyDataVo, CustomDialog) -> Unit
 ) : OnBindView<CustomDialog>(R.layout.dialog_add_key) {
 
     private lateinit var binding: DialogAddKeyBinding
 
-    override fun onBind(dialog: CustomDialog?, v: View) {
+    override fun onBind(dialog: CustomDialog, v: View) {
         binding = DialogAddKeyBinding.bind(v)
         dialog?.isCancelable = false
         dialog?.setMaskColor(CommonUtils.getColor(com.grkj.ui_base.R.color.scrim))
@@ -57,15 +57,7 @@ class AddKeyDialog(
                 statusChecked,
                 binding.remarkEt.text.toString()
             )
-            onConfirm(vo)
-            // 清空输入
-            binding.keyCodeEt.text?.clear()
-            binding.keyNfcEt.text?.clear()
-            binding.keyMacEt.text?.clear()
-            binding.remarkEt.text?.clear()
-            binding.statusRg.clearCheck()
-            // 安全关闭对话框
-            dialog?.dismiss()
+            onConfirm(vo,dialog)
         }
     }
 
@@ -74,7 +66,7 @@ class AddKeyDialog(
          * 显示新增钥匙对话框并设置回调
          */
         @JvmStatic
-        fun show(onConfirm: (AddKeyDataVo) -> Unit) {
+        fun show(onConfirm: (AddKeyDataVo, CustomDialog) -> Unit) {
             CustomDialog.show(
                 AddKeyDialog(onConfirm),
                 CustomDialog.ALIGN.CENTER

+ 4 - 11
app/src/main/java/com/grkj/iscs/features/main/dialog/hardware_manage/AddLockDialog.kt

@@ -16,12 +16,12 @@ import com.kongzue.dialogx.interfaces.OnBindView
  * AddLockDialog.show { lockVo -> /* handle */ }
  */
 class AddLockDialog(
-    private val onConfirm: (AddLockDataVo) -> Unit
+    private val onConfirm: (AddLockDataVo, CustomDialog) -> Unit
 ) : OnBindView<CustomDialog>(R.layout.dialog_add_lock) {
 
     private lateinit var binding: DialogAddLockBinding
 
-    override fun onBind(dialog: CustomDialog?, v: View) {
+    override fun onBind(dialog: CustomDialog, v: View) {
         binding = DialogAddLockBinding.bind(v)
         dialog?.isCancelable = false
         dialog?.setMaskColor(CommonUtils.getColor(com.grkj.ui_base.R.color.scrim))
@@ -52,14 +52,7 @@ class AddLockDialog(
                 statusChecked,
                 remark
             )
-            onConfirm(vo)
-            // 清空输入
-            binding.lockCodeEt.text?.clear()
-            binding.lockNfcEt.text?.clear()
-            binding.remarkEt.text?.clear()
-            binding.statusRg.clearCheck()
-            // 关闭对话框
-            dialog?.dismiss()
+            onConfirm(vo, dialog)
         }
     }
 
@@ -68,7 +61,7 @@ class AddLockDialog(
          * 显示新增挂锁对话框并设置回调
          */
         @JvmStatic
-        fun show(onConfirm: (AddLockDataVo) -> Unit) {
+        fun show(onConfirm: (AddLockDataVo, CustomDialog) -> Unit) {
             CustomDialog.show(
                 AddLockDialog(onConfirm),
                 CustomDialog.ALIGN.CENTER

+ 4 - 11
app/src/main/java/com/grkj/iscs/features/main/dialog/hardware_manage/AddRfidTokenDialog.kt

@@ -23,12 +23,12 @@ import org.greenrobot.eventbus.ThreadMode
  * AddRfidTokenDialog.show { tokenVo -> /* handle */ }
  */
 class AddRfidTokenDialog(
-    private val onConfirm: (AddRfidTokenDataVo) -> Unit
+    private val onConfirm: (AddRfidTokenDataVo, CustomDialog) -> Unit
 ) : OnBindView<CustomDialog>(R.layout.dialog_add_rfid_token) {
 
     private lateinit var binding: DialogAddRfidTokenBinding
 
-    override fun onBind(dialog: CustomDialog?, v: View) {
+    override fun onBind(dialog: CustomDialog, v: View) {
         binding = DialogAddRfidTokenBinding.bind(v)
         dialog?.isCancelable = false
         dialog?.setMaskColor(CommonUtils.getColor(com.grkj.ui_base.R.color.scrim))
@@ -68,14 +68,7 @@ class AddRfidTokenDialog(
                 statusChecked,
                 remark
             )
-            onConfirm(vo)
-            // 清空输入
-            binding.rfidCodeEt.text?.clear()
-            binding.rfidEt.text?.clear()
-            binding.remarkEt.text?.clear()
-            binding.statusRg.clearCheck()
-            // 安全关闭对话框
-            dialog?.dismiss()
+            onConfirm(vo, dialog)
         }
     }
 
@@ -95,7 +88,7 @@ class AddRfidTokenDialog(
          * 显示新增 RFID 标签对话框并设置回调
          */
         @JvmStatic
-        fun show(onConfirm: (AddRfidTokenDataVo) -> Unit) {
+        fun show(onConfirm: (AddRfidTokenDataVo, CustomDialog) -> Unit) {
             CustomDialog.show(
                 AddRfidTokenDialog(onConfirm),
                 CustomDialog.ALIGN.CENTER

+ 4 - 5
app/src/main/java/com/grkj/iscs/features/main/dialog/hardware_manage/UpdateCardDialog.kt

@@ -22,13 +22,13 @@ import com.kongzue.dialogx.interfaces.OnBindView
 class UpdateCardDialog(
     private val card: IsJobCard,
     private val userData: List<TextDropDownDialog.TextDropDownEntity>,
-    private val onConfirm: (UpdateCardDataVo) -> Unit
+    private val onConfirm: (UpdateCardDataVo, CustomDialog) -> Unit
 ) : OnBindView<CustomDialog>(R.layout.dialog_update_card) {
 
     private lateinit var binding: DialogUpdateCardBinding
     private var selectedUser: TextDropDownDialog.TextDropDownEntity? = null
 
-    override fun onBind(dialog: CustomDialog?, v: View) {
+    override fun onBind(dialog: CustomDialog, v: View) {
         binding = DialogUpdateCardBinding.bind(v)
         dialog?.isCancelable = false
         dialog?.setMaskColor(CommonUtils.getColor(com.grkj.ui_base.R.color.scrim))
@@ -70,8 +70,7 @@ class UpdateCardDialog(
                 statusChecked,
                 binding.remarkEt.text.toString()
             )
-            onConfirm(vo)
-            dialog?.dismiss()
+            onConfirm(vo,dialog)
         }
     }
 
@@ -83,7 +82,7 @@ class UpdateCardDialog(
         fun show(
             card: IsJobCard,
             userData: List<TextDropDownDialog.TextDropDownEntity>,
-            onConfirm: (UpdateCardDataVo) -> Unit
+            onConfirm: (UpdateCardDataVo, CustomDialog) -> Unit
         ) {
             CustomDialog.show(
                 UpdateCardDialog(card, userData, onConfirm),

+ 4 - 5
app/src/main/java/com/grkj/iscs/features/main/dialog/hardware_manage/UpdateKeyDialog.kt

@@ -19,12 +19,12 @@ import com.kongzue.dialogx.interfaces.OnBindView
  */
 class UpdateKeyDialog(
     private val isKey: IsKey,
-    private val onConfirm: (UpdateKeyDataVo) -> Unit
+    private val onConfirm: (UpdateKeyDataVo, CustomDialog) -> Unit
 ) : OnBindView<CustomDialog>(R.layout.dialog_update_key) {
 
     private lateinit var binding: DialogUpdateKeyBinding
 
-    override fun onBind(dialog: CustomDialog?, v: View) {
+    override fun onBind(dialog: CustomDialog, v: View) {
         binding = DialogUpdateKeyBinding.bind(v)
         dialog?.isCancelable = false
         dialog?.setMaskColor(CommonUtils.getColor(com.grkj.ui_base.R.color.scrim))
@@ -71,8 +71,7 @@ class UpdateKeyDialog(
                 statusChecked,
                 binding.remarkEt.text.toString()
             )
-            onConfirm(vo)
-            dialog?.dismiss()
+            onConfirm(vo, dialog)
         }
     }
 
@@ -83,7 +82,7 @@ class UpdateKeyDialog(
         @JvmStatic
         fun show(
             isKey: IsKey,
-            onConfirm: (UpdateKeyDataVo) -> Unit
+            onConfirm: (UpdateKeyDataVo, CustomDialog) -> Unit
         ) {
             CustomDialog.show(
                 UpdateKeyDialog(isKey, onConfirm),

+ 4 - 5
app/src/main/java/com/grkj/iscs/features/main/dialog/hardware_manage/UpdateLockDialog.kt

@@ -19,12 +19,12 @@ import com.kongzue.dialogx.interfaces.OnBindView
  */
 class UpdateLockDialog(
     private val isLock: IsLock,
-    private val onConfirm: (UpdateLockDataVo) -> Unit
+    private val onConfirm: (UpdateLockDataVo, CustomDialog) -> Unit
 ) : OnBindView<CustomDialog>(R.layout.dialog_update_lock) {
 
     private lateinit var binding: DialogUpdateLockBinding
 
-    override fun onBind(dialog: CustomDialog?, v: View) {
+    override fun onBind(dialog: CustomDialog, v: View) {
         binding = DialogUpdateLockBinding.bind(v)
         dialog?.isCancelable = false
         dialog?.setMaskColor(CommonUtils.getColor(com.grkj.ui_base.R.color.scrim))
@@ -64,8 +64,7 @@ class UpdateLockDialog(
                 statusChecked,
                 binding.remarkEt.text.toString()
             )
-            onConfirm(vo)
-            dialog?.dismiss()
+            onConfirm(vo,dialog)
         }
     }
 
@@ -76,7 +75,7 @@ class UpdateLockDialog(
         @JvmStatic
         fun show(
             isLock: IsLock,
-            onConfirm: (UpdateLockDataVo) -> Unit
+            onConfirm: (UpdateLockDataVo, CustomDialog) -> Unit
         ) {
             CustomDialog.show(
                 UpdateLockDialog(isLock, onConfirm),

+ 4 - 5
app/src/main/java/com/grkj/iscs/features/main/dialog/hardware_manage/UpdateRfidTokenDialog.kt

@@ -19,12 +19,12 @@ import com.kongzue.dialogx.interfaces.OnBindView
  */
 class UpdateRfidTokenDialog(
     private val token: IsRfidToken,
-    private val onConfirm: (UpdateRfidTokenDataVo) -> Unit
+    private val onConfirm: (UpdateRfidTokenDataVo, CustomDialog) -> Unit
 ) : OnBindView<CustomDialog>(R.layout.dialog_update_rfid_token) {
 
     private lateinit var binding: DialogUpdateRfidTokenBinding
 
-    override fun onBind(dialog: CustomDialog?, v: View) {
+    override fun onBind(dialog: CustomDialog, v: View) {
         binding = DialogUpdateRfidTokenBinding.bind(v)
         dialog?.isCancelable = false
         dialog?.setMaskColor(CommonUtils.getColor(com.grkj.ui_base.R.color.scrim))
@@ -66,8 +66,7 @@ class UpdateRfidTokenDialog(
                 statusChecked,
                 binding.remarkEt.text.toString()
             )
-            onConfirm(vo)
-            dialog?.dismiss()
+            onConfirm(vo,dialog)
         }
     }
 
@@ -78,7 +77,7 @@ class UpdateRfidTokenDialog(
         @JvmStatic
         fun show(
             token: IsRfidToken,
-            onConfirm: (UpdateRfidTokenDataVo) -> Unit
+            onConfirm: (UpdateRfidTokenDataVo, CustomDialog) -> Unit
         ) {
             CustomDialog.show(
                 UpdateRfidTokenDialog(token, onConfirm),

+ 34 - 28
app/src/main/java/com/grkj/iscs/features/main/fragment/hardware_manage/CardManageFragment.kt

@@ -38,21 +38,24 @@ class CardManageFragment : BaseFragment<FragmentCardManageBinding>() {
         binding.back.setDebouncedClickListener { navController.popBackStack() }
         binding.add.setDebouncedClickListener {
             viewModel.getAllUserData().observe(this) {
-                AddCardDialog.show(it) { vo ->
-                    viewModel.addCard(vo).observe(this) { ok ->
-                        @StringRes val titleRes =
-                            if (ok) com.grkj.ui_base.R.string.action_succeed else com.grkj.ui_base.R.string.action_failed
-                        @StringRes val msgRes =
-                            if (ok) R.string.add_card_succeed else R.string.add_card_failed
+                AddCardDialog.show(it) { vo, dialog ->
+                    viewModel.validateCardData(vo.cardNfc).observe(this) {
+                        viewModel.addCard(vo).observe(this) { ok ->
+                            dialog.dismiss()
+                            @StringRes val titleRes =
+                                if (ok) com.grkj.ui_base.R.string.action_succeed else com.grkj.ui_base.R.string.action_failed
+                            @StringRes val msgRes =
+                                if (ok) R.string.add_card_succeed else R.string.add_card_failed
 
-                        TipDialog.show(
-                            title = CommonUtils.getStr(titleRes).toString(),
-                            dialogType = if (ok) TipDialog.DialogType.SUCCESS else TipDialog.DialogType.ERROR,
-                            msg = CommonUtils.getStr(msgRes).toString(),
-                            countDownTime = 10,
-                            showConfirm = false,
-                            onCancelClick = { loadCards(reset = true) }
-                        )
+                            TipDialog.show(
+                                title = CommonUtils.getStr(titleRes).toString(),
+                                dialogType = if (ok) TipDialog.DialogType.SUCCESS else TipDialog.DialogType.ERROR,
+                                msg = CommonUtils.getStr(msgRes).toString(),
+                                countDownTime = 10,
+                                showConfirm = false,
+                                onCancelClick = { loadCards(reset = true) }
+                            )
+                        }
                     }
                 }
             }
@@ -104,21 +107,24 @@ class CardManageFragment : BaseFragment<FragmentCardManageBinding>() {
         }
         bind.root.setOnClickListener {
             viewModel.getAllUserData().observe(this) {
-                UpdateCardDialog.show(item, it) { vo ->
-                    viewModel.updateCard(vo).observe(this) { ok ->
-                        @StringRes val titleRes =
-                            if (ok) com.grkj.ui_base.R.string.action_succeed else com.grkj.ui_base.R.string.action_failed
-                        @StringRes val msgRes =
-                            if (ok) R.string.update_card_succeed else R.string.update_card_failed
+                UpdateCardDialog.show(item, it) { vo, dialog ->
+                    viewModel.validateCardData(vo.cardNfc).observe(this) {
+                        viewModel.updateCard(vo).observe(this) { ok ->
+                            dialog.dismiss()
+                            @StringRes val titleRes =
+                                if (ok) com.grkj.ui_base.R.string.action_succeed else com.grkj.ui_base.R.string.action_failed
+                            @StringRes val msgRes =
+                                if (ok) R.string.update_card_succeed else R.string.update_card_failed
 
-                        TipDialog.show(
-                            title = CommonUtils.getStr(titleRes).toString(),
-                            dialogType = if (ok) TipDialog.DialogType.SUCCESS else TipDialog.DialogType.ERROR,
-                            msg = CommonUtils.getStr(msgRes).toString(),
-                            countDownTime = 10,
-                            showConfirm = false,
-                            onCancelClick = { loadCards(reset = true) }
-                        )
+                            TipDialog.show(
+                                title = CommonUtils.getStr(titleRes).toString(),
+                                dialogType = if (ok) TipDialog.DialogType.SUCCESS else TipDialog.DialogType.ERROR,
+                                msg = CommonUtils.getStr(msgRes).toString(),
+                                countDownTime = 10,
+                                showConfirm = false,
+                                onCancelClick = { loadCards(reset = true) }
+                            )
+                        }
                     }
                 }
             }

+ 59 - 52
app/src/main/java/com/grkj/iscs/features/main/fragment/hardware_manage/KeyManageFragment.kt

@@ -41,32 +41,35 @@ class KeyManageFragment : BaseFragment<FragmentKeyManageBinding>() {
             deleteSelected()
         }
         binding.add.setDebouncedClickListener {
-            AddKeyDialog.show {
-                viewModel.addKey(it).observe(this) {
-                    if (it) {
-                        TipDialog.show(
-                            title = CommonUtils.getStr(com.grkj.ui_base.R.string.action_succeed)
-                                .toString(),
-                            dialogType = TipDialog.DialogType.SUCCESS,
-                            msg = CommonUtils.getStr(R.string.add_key_succeed).toString(),
-                            countDownTime = 10,
-                            showConfirm = false,
-                            onCancelClick = {
-                                getKeyData(false)
-                            }
-                        )
-                    } else {
-                        TipDialog.show(
-                            title = CommonUtils.getStr(com.grkj.ui_base.R.string.action_failed)
-                                .toString(),
-                            dialogType = TipDialog.DialogType.ERROR,
-                            msg = CommonUtils.getStr(R.string.add_key_failed).toString(),
-                            countDownTime = 10,
-                            showConfirm = false,
-                            onCancelClick = {
-                                getKeyData(false)
-                            }
-                        )
+            AddKeyDialog.show { data, dialog ->
+                viewModel.validateKeyData(data.keyNfc ?: "", data.macAddress ?: "").observe(this) {
+                    viewModel.addKey(data).observe(this) {
+                        dialog.dismiss()
+                        if (it) {
+                            TipDialog.show(
+                                title = CommonUtils.getStr(com.grkj.ui_base.R.string.action_succeed)
+                                    .toString(),
+                                dialogType = TipDialog.DialogType.SUCCESS,
+                                msg = CommonUtils.getStr(R.string.add_key_succeed).toString(),
+                                countDownTime = 10,
+                                showConfirm = false,
+                                onCancelClick = {
+                                    getKeyData(false)
+                                }
+                            )
+                        } else {
+                            TipDialog.show(
+                                title = CommonUtils.getStr(com.grkj.ui_base.R.string.action_failed)
+                                    .toString(),
+                                dialogType = TipDialog.DialogType.ERROR,
+                                msg = CommonUtils.getStr(R.string.add_key_failed).toString(),
+                                countDownTime = 10,
+                                showConfirm = false,
+                                onCancelClick = {
+                                    getKeyData(false)
+                                }
+                            )
+                        }
                     }
                 }
             }
@@ -120,34 +123,38 @@ class KeyManageFragment : BaseFragment<FragmentKeyManageBinding>() {
             setSelectAllListener()
         }
         itemBinding.root.setOnClickListener {
-            UpdateKeyDialog.show(item) {
-                viewModel.updateKey(it).observe(this@KeyManageFragment) {
-                    if (it) {
-                        TipDialog.show(
-                            title = CommonUtils.getStr(com.grkj.ui_base.R.string.action_succeed)
-                                .toString(),
-                            dialogType = TipDialog.DialogType.SUCCESS,
-                            msg = CommonUtils.getStr(R.string.update_key_succeed).toString(),
-                            countDownTime = 10,
-                            showConfirm = false,
-                            onCancelClick = {
-                                getKeyData(false)
-                            }
-                        )
-                    } else {
-                        TipDialog.show(
-                            title = CommonUtils.getStr(com.grkj.ui_base.R.string.action_failed)
-                                .toString(),
-                            dialogType = TipDialog.DialogType.ERROR,
-                            msg = CommonUtils.getStr(R.string.update_key_failed).toString(),
-                            countDownTime = 10,
-                            showConfirm = false,
-                            onCancelClick = {
-                                getKeyData(false)
+            UpdateKeyDialog.show(item) { data, dialog ->
+                viewModel.validateKeyData(data.keyNfc ?: "", data.macAddress ?: "")
+                    .observe(this@KeyManageFragment) {
+                        viewModel.updateKey(data).observe(this@KeyManageFragment) {
+                            if (it) {
+                                TipDialog.show(
+                                    title = CommonUtils.getStr(com.grkj.ui_base.R.string.action_succeed)
+                                        .toString(),
+                                    dialogType = TipDialog.DialogType.SUCCESS,
+                                    msg = CommonUtils.getStr(R.string.update_key_succeed)
+                                        .toString(),
+                                    countDownTime = 10,
+                                    showConfirm = false,
+                                    onCancelClick = {
+                                        getKeyData(false)
+                                    }
+                                )
+                            } else {
+                                TipDialog.show(
+                                    title = CommonUtils.getStr(com.grkj.ui_base.R.string.action_failed)
+                                        .toString(),
+                                    dialogType = TipDialog.DialogType.ERROR,
+                                    msg = CommonUtils.getStr(R.string.update_key_failed).toString(),
+                                    countDownTime = 10,
+                                    showConfirm = false,
+                                    onCancelClick = {
+                                        getKeyData(false)
+                                    }
+                                )
                             }
-                        )
+                        }
                     }
-                }
             }
         }
     }

+ 36 - 30
app/src/main/java/com/grkj/iscs/features/main/fragment/hardware_manage/LockManageFragment.kt

@@ -39,21 +39,24 @@ class LockManageFragment : BaseFragment<FragmentLockManageBinding>() {
     override fun initView() {
         binding.back.setDebouncedClickListener { navController.popBackStack() }
         binding.add.setDebouncedClickListener {
-            AddLockDialog.show { vo ->
-                viewModel.addLock(vo).observe(this) { ok ->
-                    @StringRes val titleRes =
-                        if (ok) com.grkj.ui_base.R.string.action_succeed else com.grkj.ui_base.R.string.action_failed
-                    @StringRes val msgRes =
-                        if (ok) R.string.add_lock_succeed else R.string.add_lock_failed
+            AddLockDialog.show { vo, dialog ->
+                viewModel.validateLockData(vo.lockNfc ?: "").observe(this) {
+                    viewModel.addLock(vo).observe(this) { ok ->
+                        dialog.dismiss()
+                        @StringRes val titleRes =
+                            if (ok) com.grkj.ui_base.R.string.action_succeed else com.grkj.ui_base.R.string.action_failed
+                        @StringRes val msgRes =
+                            if (ok) R.string.add_lock_succeed else R.string.add_lock_failed
 
-                    TipDialog.show(
-                        title = CommonUtils.getStr(titleRes).toString(),
-                        dialogType = if (ok) TipDialog.DialogType.SUCCESS else TipDialog.DialogType.ERROR,
-                        msg = CommonUtils.getStr(msgRes).toString(),
-                        countDownTime = 10,
-                        showConfirm = false,
-                        onCancelClick = { loadLocks(reset = true) }
-                    )
+                        TipDialog.show(
+                            title = CommonUtils.getStr(titleRes).toString(),
+                            dialogType = if (ok) TipDialog.DialogType.SUCCESS else TipDialog.DialogType.ERROR,
+                            msg = CommonUtils.getStr(msgRes).toString(),
+                            countDownTime = 10,
+                            showConfirm = false,
+                            onCancelClick = { loadLocks(reset = true) }
+                        )
+                    }
                 }
             }
         }
@@ -102,21 +105,24 @@ class LockManageFragment : BaseFragment<FragmentLockManageBinding>() {
             }
         }
         bind.root.setOnClickListener {
-            UpdateLockDialog.show(item) { vo ->
-                viewModel.updateLock(vo).observe(this) { ok ->
-                    @StringRes val titleRes =
-                        if (ok) com.grkj.ui_base.R.string.action_succeed else com.grkj.ui_base.R.string.action_failed
-                    @StringRes val msgRes =
-                        if (ok) R.string.update_lock_succeed else R.string.update_lock_failed
+            UpdateLockDialog.show(item) { vo, dialog ->
+                viewModel.validateLockData(vo.lockNfc ?: "").observe(this) {
+                    viewModel.updateLock(vo).observe(this) { ok ->
+                        dialog.dismiss()
+                        @StringRes val titleRes =
+                            if (ok) com.grkj.ui_base.R.string.action_succeed else com.grkj.ui_base.R.string.action_failed
+                        @StringRes val msgRes =
+                            if (ok) R.string.update_lock_succeed else R.string.update_lock_failed
 
-                    TipDialog.show(
-                        title = CommonUtils.getStr(titleRes).toString(),
-                        dialogType = if (ok) TipDialog.DialogType.SUCCESS else TipDialog.DialogType.ERROR,
-                        msg = CommonUtils.getStr(msgRes).toString(),
-                        countDownTime = 10,
-                        showConfirm = false,
-                        onCancelClick = { loadLocks(reset = true) }
-                    )
+                        TipDialog.show(
+                            title = CommonUtils.getStr(titleRes).toString(),
+                            dialogType = if (ok) TipDialog.DialogType.SUCCESS else TipDialog.DialogType.ERROR,
+                            msg = CommonUtils.getStr(msgRes).toString(),
+                            countDownTime = 10,
+                            showConfirm = false,
+                            onCancelClick = { loadLocks(reset = true) }
+                        )
+                    }
                 }
             }
         }
@@ -134,9 +140,9 @@ class LockManageFragment : BaseFragment<FragmentLockManageBinding>() {
             if (reset) binding.selectAll.isChecked = false
             binding.refreshLayout.finishRefresh()
             binding.refreshLayout.finishLoadMore()
-            if (viewModel.lockManageDataList.isEmpty()){
+            if (viewModel.lockManageDataList.isEmpty()) {
                 binding.state.showEmpty()
-            }else{
+            } else {
                 binding.state.showContent()
             }
             binding.listRv.models = viewModel.lockManageDataList

+ 33 - 29
app/src/main/java/com/grkj/iscs/features/main/fragment/hardware_manage/RfidTokenManageFragment.kt

@@ -1,7 +1,6 @@
 package com.grkj.iscs.features.main.fragment.hardware_manage
 
 import android.graphics.Color
-import android.view.Gravity
 import androidx.annotation.StringRes
 import androidx.fragment.app.viewModels
 import com.drake.brv.BindingAdapter
@@ -35,21 +34,23 @@ class RfidTokenManageFragment : BaseFragment<FragmentRfidTokenManageBinding>() {
     override fun initView() {
         binding.back.setDebouncedClickListener { navController.popBackStack() }
         binding.add.setDebouncedClickListener {
-            AddRfidTokenDialog.show { vo ->
-                viewModel.addRfidToken(vo).observe(this) { ok ->
-                    @StringRes val titleRes =
-                        if (ok) com.grkj.ui_base.R.string.action_succeed else com.grkj.ui_base.R.string.action_failed
-                    @StringRes val msgRes =
-                        if (ok) R.string.add_rfid_token_succeed else R.string.add_rfid_token_failed
+            AddRfidTokenDialog.show { vo, dialog ->
+                viewModel.validateRfidTokenData(vo.rfid).observe(this) {
+                    viewModel.addRfidToken(vo).observe(this) { ok ->
+                        @StringRes val titleRes =
+                            if (ok) com.grkj.ui_base.R.string.action_succeed else com.grkj.ui_base.R.string.action_failed
+                        @StringRes val msgRes =
+                            if (ok) R.string.add_rfid_token_succeed else R.string.add_rfid_token_failed
 
-                    TipDialog.show(
-                        title = CommonUtils.getStr(titleRes).toString(),
-                        dialogType = if (ok) TipDialog.DialogType.SUCCESS else TipDialog.DialogType.ERROR,
-                        msg = CommonUtils.getStr(msgRes).toString(),
-                        countDownTime = 10,
-                        showConfirm = false,
-                        onCancelClick = { loadTokens(reset = true) }
-                    )
+                        TipDialog.show(
+                            title = CommonUtils.getStr(titleRes).toString(),
+                            dialogType = if (ok) TipDialog.DialogType.SUCCESS else TipDialog.DialogType.ERROR,
+                            msg = CommonUtils.getStr(msgRes).toString(),
+                            countDownTime = 10,
+                            showConfirm = false,
+                            onCancelClick = { loadTokens(reset = true) }
+                        )
+                    }
                 }
             }
         }
@@ -99,21 +100,24 @@ class RfidTokenManageFragment : BaseFragment<FragmentRfidTokenManageBinding>() {
             }
         }
         bind.root.setOnClickListener {
-            UpdateRfidTokenDialog.show(item) { vo ->
-                viewModel.updateRfidToken(vo).observe(this) { ok ->
-                    @StringRes val titleRes =
-                        if (ok) com.grkj.ui_base.R.string.action_succeed else com.grkj.ui_base.R.string.action_failed
-                    @StringRes val msgRes =
-                        if (ok) R.string.update_rfid_token_succeed else R.string.update_rfid_token_failed
+            UpdateRfidTokenDialog.show(item) { vo, dialog ->
+                viewModel.validateRfidTokenData(vo.rfid).observe(this) {
+                    viewModel.updateRfidToken(vo).observe(this) { ok ->
+                        dialog.dismiss()
+                        @StringRes val titleRes =
+                            if (ok) com.grkj.ui_base.R.string.action_succeed else com.grkj.ui_base.R.string.action_failed
+                        @StringRes val msgRes =
+                            if (ok) R.string.update_rfid_token_succeed else R.string.update_rfid_token_failed
 
-                    TipDialog.show(
-                        title = CommonUtils.getStr(titleRes).toString(),
-                        dialogType = if (ok) TipDialog.DialogType.SUCCESS else TipDialog.DialogType.ERROR,
-                        msg = CommonUtils.getStr(msgRes).toString(),
-                        countDownTime = 10,
-                        showConfirm = false,
-                        onCancelClick = { loadTokens(reset = true) }
-                    )
+                        TipDialog.show(
+                            title = CommonUtils.getStr(titleRes).toString(),
+                            dialogType = if (ok) TipDialog.DialogType.SUCCESS else TipDialog.DialogType.ERROR,
+                            msg = CommonUtils.getStr(msgRes).toString(),
+                            countDownTime = 10,
+                            showConfirm = false,
+                            onCancelClick = { loadTokens(reset = true) }
+                        )
+                    }
                 }
             }
         }

+ 16 - 0
app/src/main/java/com/grkj/iscs/features/main/viewmodel/hardware_manage/CardManageViewModel.kt

@@ -9,8 +9,10 @@ import com.grkj.data.model.vo.CardManageFilterVo
 import com.grkj.data.model.vo.UpdateCardDataVo
 import com.grkj.data.repository.IHardwareRepository
 import com.grkj.data.repository.IUserRepository
+import com.grkj.iscs.R
 import com.grkj.iscs.features.main.dialog.TextDropDownDialog
 import com.grkj.ui_base.base.BaseViewModel
+import com.grkj.ui_base.utils.CommonUtils
 import com.sik.sikcore.data.BeanUtils
 import dagger.hilt.android.lifecycle.HiltViewModel
 import kotlinx.coroutines.Dispatchers
@@ -116,4 +118,18 @@ class CardManageViewModel @Inject constructor(
                 emit(true)
             } ?: emit(false)
         }
+
+    /**
+     * 校验卡片数据
+     */
+    fun validateCardData(cardRfid: String): LiveData<Boolean> {
+        return liveData(Dispatchers.IO) {
+            val card = hardwareRepository.getCardByCardRfid(cardRfid)
+            if (card == null) {
+                emit(true)
+            } else {
+                showTip(CommonUtils.getStr(R.string.card_already_registration).toString())
+            }
+        }
+    }
 }

+ 16 - 0
app/src/main/java/com/grkj/iscs/features/main/viewmodel/hardware_manage/KeyManageViewModel.kt

@@ -9,7 +9,9 @@ import com.grkj.data.model.vo.KeyManageFilterVo
 import com.grkj.data.model.vo.UpdateKeyDataVo
 import com.grkj.data.model.vo.UpdateUserDataVo
 import com.grkj.data.repository.IHardwareRepository
+import com.grkj.iscs.R
 import com.grkj.ui_base.base.BaseViewModel
+import com.grkj.ui_base.utils.CommonUtils
 import com.sik.sikcore.data.BeanUtils
 import dagger.hilt.android.lifecycle.HiltViewModel
 import kotlinx.coroutines.Dispatchers
@@ -95,4 +97,18 @@ class KeyManageViewModel @Inject constructor(
             } ?: emit(false)
         }
     }
+
+    /**
+     * 校验钥匙数据
+     */
+    fun validateKeyData(keyNfc: String, keyMac: String): LiveData<Boolean> {
+        return liveData(Dispatchers.IO) {
+            val keyInfo = hardwareRepository.getKeyInfo(keyNfc)
+            if (keyInfo == null || keyInfo.macAddress != keyMac){
+                emit(true)
+            }else{
+                showTip(CommonUtils.getStr(R.string.key_info_already_exists).toString())
+            }
+        }
+    }
 }

+ 16 - 0
app/src/main/java/com/grkj/iscs/features/main/viewmodel/hardware_manage/LockManageViewModel.kt

@@ -10,8 +10,10 @@ import com.grkj.data.model.vo.AddLockDataVo
 import com.grkj.data.model.vo.LockManageFilterVo
 import com.grkj.data.model.vo.UpdateLockDataVo
 import com.grkj.data.repository.IHardwareRepository
+import com.grkj.iscs.R
 import com.grkj.ui_base.base.BaseViewModel
 import com.grkj.ui_base.business.DataBusiness
+import com.grkj.ui_base.utils.CommonUtils
 import com.sik.sikcore.data.BeanUtils
 import dagger.hilt.android.lifecycle.HiltViewModel
 import kotlinx.coroutines.Dispatchers
@@ -94,4 +96,18 @@ class LockManageViewModel @Inject constructor(
                 emit(true)
             } ?: emit(false)
         }
+
+    /**
+     * 校验挂锁数据
+     */
+    fun validateLockData(lockRfid: String): LiveData<Boolean> {
+        return liveData(Dispatchers.IO) {
+            val lockInfo = hardwareRepository.getLockInfo(lockRfid)
+            if (lockInfo == null) {
+                emit(true)
+            }else{
+                showTip(CommonUtils.getStr(R.string.lock_already_exists).toString())
+            }
+        }
+    }
 }

+ 16 - 0
app/src/main/java/com/grkj/iscs/features/main/viewmodel/hardware_manage/RfidTokenManageViewModel.kt

@@ -8,7 +8,9 @@ import com.grkj.data.model.vo.AddRfidTokenDataVo
 import com.grkj.data.model.vo.RfidTokenManageFilterVo
 import com.grkj.data.model.vo.UpdateRfidTokenDataVo
 import com.grkj.data.repository.IHardwareRepository
+import com.grkj.iscs.R
 import com.grkj.ui_base.base.BaseViewModel
+import com.grkj.ui_base.utils.CommonUtils
 import com.sik.sikcore.data.BeanUtils
 import dagger.hilt.android.lifecycle.HiltViewModel
 import kotlinx.coroutines.Dispatchers
@@ -98,4 +100,18 @@ class RfidTokenManageViewModel @Inject constructor(
                 emit(true)
             } ?: emit(false)
         }
+
+    /**
+     * 校验标签数据
+     */
+    fun validateRfidTokenData(rfid: String): LiveData<Boolean> {
+        return liveData(Dispatchers.IO) {
+            val rfidTokenData = hardwareRepository.getRfidDataByRfid(rfid)
+            if (rfidTokenData == null) {
+                emit(true)
+            } else {
+                showTip(CommonUtils.getStr(R.string.rfid_already_registration).toString())
+            }
+        }
+    }
 }

+ 2 - 0
app/src/main/res/values-en/strings.xml

@@ -462,5 +462,7 @@
     <string name="current_job_has_cross_job">Warning! There are cross assignments in the current assignment. Do you want to continue handling exceptions</string>
     <string name="reset">Reset</string>
     <string name="rfid_already_bind">The Rfid tag has been bound</string>
+    <string name="key_info_already_exists">Key information already exists</string>
+    <string name="lock_already_exists">The padlock information already exists</string>
 
 </resources>

+ 2 - 0
app/src/main/res/values-zh/strings.xml

@@ -462,5 +462,7 @@
     <string name="current_job_has_cross_job">警告!当前作业存在交叉作业,是否继续处理异常</string>
     <string name="reset">重置</string>
     <string name="rfid_already_bind">该Rfid标签已被绑定</string>
+    <string name="key_info_already_exists">钥匙信息已存在</string>
+    <string name="lock_already_exists">挂锁信息已存在</string>
 
 </resources>

+ 2 - 0
app/src/main/res/values/strings.xml

@@ -465,5 +465,7 @@
     <string name="current_job_has_cross_job">警告!当前作业存在交叉作业,是否继续处理异常</string>
     <string name="reset">重置</string>
     <string name="rfid_already_bind">该Rfid标签已被绑定</string>
+    <string name="key_info_already_exists">钥匙信息已存在</string>
+    <string name="lock_already_exists">挂锁信息已存在</string>
 
 </resources>

+ 6 - 0
data/src/main/java/com/grkj/data/dao/HardwareDao.kt

@@ -476,4 +476,10 @@ interface HardwareDao {
     @Query("select * from is_rfid_token")
     fun getAllRfidTokenData(): List<IsRfidToken>
 
+    /**
+     * 根据rfid获取rfid数据
+     */
+    @Query("select * from is_rfid_token where rfid = :rfid")
+    fun getRfidDataByRfid(rfid: String): IsRfidToken?
+
 }

+ 10 - 0
data/src/main/java/com/grkj/data/repository/IHardwareRepository.kt

@@ -355,4 +355,14 @@ interface IHardwareRepository {
      * 获取所有硬件数量
      */
     fun getAllHardwareCount(): Int
+
+    /**
+     * 根据卡片rfid获取卡片数据
+     */
+    fun getCardByCardRfid(cardRfid: String): IsJobCard?
+
+    /**
+     * 根据rfid获取rfid数据
+     */
+    fun getRfidDataByRfid(rfid: String): IsRfidToken?
 }

+ 5 - 0
data/src/main/java/com/grkj/data/repository/impl/network/NetworkIsolationPointRepository.kt

@@ -1,5 +1,6 @@
 package com.grkj.data.repository.impl.network
 
+import com.grkj.data.model.dos.IsIsolationPoint
 import com.grkj.data.model.vo.AddPointManageVo
 import com.grkj.data.model.vo.PointManageFilterVo
 import com.grkj.data.model.vo.PointManageVo
@@ -41,4 +42,8 @@ class NetworkIsolationPointRepository  @Inject constructor() : BaseRepository(),
     override fun getAllLockedPointManageDataWithWorkstationId(workstationId: Long): MutableList<PointManageVo> {
         TODO("Not yet implemented")
     }
+
+    override fun getPointByRfId(rfidId: Long): IsIsolationPoint? {
+        TODO("Not yet implemented")
+    }
 }

+ 8 - 2
data/src/main/java/com/grkj/data/repository/impl/standard/HardwareRepository.kt

@@ -34,11 +34,9 @@ import com.grkj.data.model.vo.RfidTokenManageFilterVo
 import com.grkj.data.repository.BaseRepository
 import com.sik.sikcore.data.BeanUtils
 import com.sik.sikcore.date.TimeUtils
-import com.sik.sikcore.extension.isNullOrEmpty
 import com.sik.sikcore.extension.saveMMKVData
 import javax.inject.Inject
 import javax.inject.Singleton
-import kotlin.math.log
 
 /**
  * 硬件仓储
@@ -548,6 +546,14 @@ class HardwareRepository @Inject constructor(
         return keyData.count { it.exStatus == keyStatus } + lockData.count { it.exStatus == lockStatus } + rfidTokenData.count { it.status == rfidTokenStatus }
     }
 
+    override fun getCardByCardRfid(cardRfid: String): IsJobCard? {
+        return hardwareDao.getCardDataByRfid(cardRfid)
+    }
+
+    override fun getRfidDataByRfid(rfid: String): IsRfidToken? {
+        return hardwareDao.getRfidDataByRfid(rfid)
+    }
+
     override fun getAllPointCount(overviewWorkstationId: Long?): Int {
         return hardwareDao.getAllPointCount(overviewWorkstationId)
     }