|
@@ -1,6 +1,8 @@
|
|
|
package com.grkj.iscs.features.main.fragment.data_manage
|
|
package com.grkj.iscs.features.main.fragment.data_manage
|
|
|
|
|
|
|
|
|
|
+import android.graphics.Bitmap
|
|
|
import android.graphics.Color
|
|
import android.graphics.Color
|
|
|
|
|
+import android.widget.TextView
|
|
|
import androidx.fragment.app.viewModels
|
|
import androidx.fragment.app.viewModels
|
|
|
import com.drake.brv.BindingAdapter
|
|
import com.drake.brv.BindingAdapter
|
|
|
import com.drake.brv.annotaion.DividerOrientation
|
|
import com.drake.brv.annotaion.DividerOrientation
|
|
@@ -8,23 +10,34 @@ import com.drake.brv.utils.divider
|
|
|
import com.drake.brv.utils.linear
|
|
import com.drake.brv.utils.linear
|
|
|
import com.drake.brv.utils.models
|
|
import com.drake.brv.utils.models
|
|
|
import com.drake.brv.utils.setup
|
|
import com.drake.brv.utils.setup
|
|
|
|
|
+import com.grkj.data.data.CommonConstants
|
|
|
|
|
+import com.grkj.data.data.EventConstants
|
|
|
|
|
+import com.grkj.data.data.MMKVConstants
|
|
|
import com.grkj.data.model.vo.UserManageVo
|
|
import com.grkj.data.model.vo.UserManageVo
|
|
|
import com.grkj.iscs.R
|
|
import com.grkj.iscs.R
|
|
|
import com.grkj.iscs.databinding.FragmentUserManageBinding
|
|
import com.grkj.iscs.databinding.FragmentUserManageBinding
|
|
|
import com.grkj.iscs.databinding.ItemUserManageUserBinding
|
|
import com.grkj.iscs.databinding.ItemUserManageUserBinding
|
|
|
|
|
+import com.grkj.iscs.features.main.dialog.SwipCardOperationTipDialog
|
|
|
import com.grkj.iscs.features.main.dialog.TextDropDownDialog
|
|
import com.grkj.iscs.features.main.dialog.TextDropDownDialog
|
|
|
import com.grkj.iscs.features.main.dialog.data_manage.AddUserDialog
|
|
import com.grkj.iscs.features.main.dialog.data_manage.AddUserDialog
|
|
|
import com.grkj.iscs.features.main.dialog.data_manage.FilterUserDialog
|
|
import com.grkj.iscs.features.main.dialog.data_manage.FilterUserDialog
|
|
|
import com.grkj.iscs.features.main.dialog.data_manage.UpdateUserDialog
|
|
import com.grkj.iscs.features.main.dialog.data_manage.UpdateUserDialog
|
|
|
|
|
+import com.grkj.iscs.features.main.dialog.user_info.AddFingerprintDialog
|
|
|
import com.grkj.iscs.features.main.viewmodel.data_manage.UserManageViewModel
|
|
import com.grkj.iscs.features.main.viewmodel.data_manage.UserManageViewModel
|
|
|
|
|
+import com.grkj.shared.model.EventBean
|
|
|
import com.grkj.shared.utils.i18n.I18nManager
|
|
import com.grkj.shared.utils.i18n.I18nManager
|
|
|
import com.grkj.ui_base.base.BaseFragment
|
|
import com.grkj.ui_base.base.BaseFragment
|
|
|
import com.grkj.ui_base.dialog.TipDialog
|
|
import com.grkj.ui_base.dialog.TipDialog
|
|
|
import com.grkj.ui_base.utils.CommonUtils
|
|
import com.grkj.ui_base.utils.CommonUtils
|
|
|
-import com.grkj.ui_base.utils.extension.tip
|
|
|
|
|
-import com.kongzue.dialogx.dialogs.PopTip
|
|
|
|
|
|
|
+import com.grkj.ui_base.utils.event.RFIDCardReadEvent
|
|
|
|
|
+import com.grkj.ui_base.utils.fingerprint.FingerprintUtil
|
|
|
|
|
+import com.kongzue.dialogx.dialogs.CustomDialog
|
|
|
|
|
+import com.kongzue.dialogx.interfaces.DialogLifecycleCallback
|
|
|
|
|
+import com.sik.sikcore.extension.getMMKVData
|
|
|
import com.sik.sikcore.extension.setDebouncedClickListener
|
|
import com.sik.sikcore.extension.setDebouncedClickListener
|
|
|
|
|
+import com.sik.sikimage.ImageConvertUtils
|
|
|
import dagger.hilt.android.AndroidEntryPoint
|
|
import dagger.hilt.android.AndroidEntryPoint
|
|
|
|
|
+import java.util.UUID
|
|
|
|
|
|
|
|
/**
|
|
/**
|
|
|
* 用户管理
|
|
* 用户管理
|
|
@@ -32,6 +45,24 @@ import dagger.hilt.android.AndroidEntryPoint
|
|
|
@AndroidEntryPoint
|
|
@AndroidEntryPoint
|
|
|
class UserManageFragment : BaseFragment<FragmentUserManageBinding>() {
|
|
class UserManageFragment : BaseFragment<FragmentUserManageBinding>() {
|
|
|
private val viewModel: UserManageViewModel by viewModels()
|
|
private val viewModel: UserManageViewModel by viewModels()
|
|
|
|
|
+ private var fingerprintTempData = mutableListOf<ByteArray>()
|
|
|
|
|
+ private var mFingerprintPressTimes: Int = 0
|
|
|
|
|
+ private var mFingerprintInputErrorTimes: Int = 0
|
|
|
|
|
+ private var mFingerprintGroupName: String = ""
|
|
|
|
|
+ private val maxPressTimes = 3
|
|
|
|
|
+ private val inputFingerprintErrorTimes = 3
|
|
|
|
|
+ private var pressTip: TextView? = null
|
|
|
|
|
+ private val inputFingerprintIds: MutableList<Long> = mutableListOf()
|
|
|
|
|
+
|
|
|
|
|
+ private var addUserDialog: AddUserDialog? = null
|
|
|
|
|
+ private var updateUserDialog: UpdateUserDialog? = null
|
|
|
|
|
+
|
|
|
|
|
+ /**
|
|
|
|
|
+ * 最大指纹录入数
|
|
|
|
|
+ */
|
|
|
|
|
+ private val maxFingerprintInsertSize =
|
|
|
|
|
+ MMKVConstants.KEY_MAX_FINGERPRINT_INSERT.getMMKVData(CommonConstants.DEFAULT_MAX_FINGERPRINT_INSERT_SIZE)
|
|
|
|
|
+
|
|
|
override fun getLayoutId(): Int {
|
|
override fun getLayoutId(): Int {
|
|
|
return R.layout.fragment_user_manage
|
|
return R.layout.fragment_user_manage
|
|
|
}
|
|
}
|
|
@@ -48,6 +79,8 @@ class UserManageFragment : BaseFragment<FragmentUserManageBinding>() {
|
|
|
getUserData(false)
|
|
getUserData(false)
|
|
|
}
|
|
}
|
|
|
binding.addUser.setDebouncedClickListener {
|
|
binding.addUser.setDebouncedClickListener {
|
|
|
|
|
+ viewModel.startReadCard = true
|
|
|
|
|
+ viewModel.isDialogRead = true
|
|
|
viewModel.getRoleAndWorkStationData().observe(this) {
|
|
viewModel.getRoleAndWorkStationData().observe(this) {
|
|
|
AddUserDialog.show(viewModel.roleData.map {
|
|
AddUserDialog.show(viewModel.roleData.map {
|
|
|
val i18NRoleName = CommonUtils.getStr(it.roleKey ?: "")
|
|
val i18NRoleName = CommonUtils.getStr(it.roleKey ?: "")
|
|
@@ -78,6 +111,8 @@ class UserManageFragment : BaseFragment<FragmentUserManageBinding>() {
|
|
|
}
|
|
}
|
|
|
})
|
|
})
|
|
|
}
|
|
}
|
|
|
|
|
+ }, {
|
|
|
|
|
+ addUserDialog = this
|
|
|
}) { data, dialog ->
|
|
}) { data, dialog ->
|
|
|
viewModel.validateUserData(data.username).observe(this) {
|
|
viewModel.validateUserData(data.username).observe(this) {
|
|
|
viewModel.addUser(data).observe(this) {
|
|
viewModel.addUser(data).observe(this) {
|
|
@@ -95,7 +130,13 @@ class UserManageFragment : BaseFragment<FragmentUserManageBinding>() {
|
|
|
}
|
|
}
|
|
|
}
|
|
}
|
|
|
}
|
|
}
|
|
|
- }
|
|
|
|
|
|
|
+ }.setDialogLifecycleCallback(object : DialogLifecycleCallback<CustomDialog>() {
|
|
|
|
|
+ override fun onDismiss(dialog: CustomDialog?) {
|
|
|
|
|
+ viewModel.startReadCard = false
|
|
|
|
|
+ viewModel.isDialogRead = false
|
|
|
|
|
+ super.onDismiss(dialog)
|
|
|
|
|
+ }
|
|
|
|
|
+ })
|
|
|
}
|
|
}
|
|
|
}
|
|
}
|
|
|
binding.filterUser.setDebouncedClickListener {
|
|
binding.filterUser.setDebouncedClickListener {
|
|
@@ -136,7 +177,7 @@ class UserManageFragment : BaseFragment<FragmentUserManageBinding>() {
|
|
|
val itemBinding = holder.getBinding<ItemUserManageUserBinding>()
|
|
val itemBinding = holder.getBinding<ItemUserManageUserBinding>()
|
|
|
val item = holder.getModel<UserManageVo>()
|
|
val item = holder.getModel<UserManageVo>()
|
|
|
itemBinding.nickname.text = item.nickName
|
|
itemBinding.nickname.text = item.nickName
|
|
|
- itemBinding.cardCode.text = item.cardCodes.joinToString(",")
|
|
|
|
|
|
|
+ itemBinding.cardCode.text = item.cardNfc
|
|
|
itemBinding.role.text = item.roleNames.joinToString(",")
|
|
itemBinding.role.text = item.roleNames.joinToString(",")
|
|
|
itemBinding.select.setOnCheckedChangeListener(null)
|
|
itemBinding.select.setOnCheckedChangeListener(null)
|
|
|
itemBinding.select.isChecked = item.isSelected
|
|
itemBinding.select.isChecked = item.isSelected
|
|
@@ -146,7 +187,44 @@ class UserManageFragment : BaseFragment<FragmentUserManageBinding>() {
|
|
|
binding.selectAll.isChecked = viewModel.userManageDataList.all { it.isSelected }
|
|
binding.selectAll.isChecked = viewModel.userManageDataList.all { it.isSelected }
|
|
|
setSelectAllListener()
|
|
setSelectAllListener()
|
|
|
}
|
|
}
|
|
|
|
|
+ itemBinding.registerCard.setDebouncedClickListener {
|
|
|
|
|
+ viewModel.startReadCard = true
|
|
|
|
|
+ viewModel.isDialogRead = false
|
|
|
|
|
+ viewModel.currentHandleUser = item
|
|
|
|
|
+ SwipCardOperationTipDialog.show().setDialogLifecycleCallback(object :
|
|
|
|
|
+ DialogLifecycleCallback<CustomDialog>() {
|
|
|
|
|
+ override fun onDismiss(dialog: CustomDialog?) {
|
|
|
|
|
+ viewModel.startReadCard = false
|
|
|
|
|
+ viewModel.isDialogRead = false
|
|
|
|
|
+ super.onDismiss(dialog)
|
|
|
|
|
+ }
|
|
|
|
|
+ })
|
|
|
|
|
+ }
|
|
|
|
|
+ itemBinding.registerFingerprint.setDebouncedClickListener {
|
|
|
|
|
+ if (item.fingerprintSize >= maxFingerprintInsertSize) {
|
|
|
|
|
+ showToast(CommonUtils.getStr("fingerprint_limit_tip"))
|
|
|
|
|
+ return@setDebouncedClickListener
|
|
|
|
|
+ }
|
|
|
|
|
+ viewModel.currentHandleUser = item
|
|
|
|
|
+ mFingerprintPressTimes = 0
|
|
|
|
|
+ mFingerprintInputErrorTimes = 0
|
|
|
|
|
+ fingerprintTempData.clear()
|
|
|
|
|
+ AddFingerprintDialog.show({
|
|
|
|
|
+ FingerprintUtil.stop()
|
|
|
|
|
+ it.dismiss()
|
|
|
|
|
+ }) {
|
|
|
|
|
+ pressTip = it
|
|
|
|
|
+ it.text = CommonUtils.getStr(
|
|
|
|
|
+ "fingerprint_scan_tip",
|
|
|
|
|
+ maxPressTimes - mFingerprintPressTimes
|
|
|
|
|
+ )
|
|
|
|
|
+ }.apply {
|
|
|
|
|
+ startCaptureFingerprint(this)
|
|
|
|
|
+ }
|
|
|
|
|
+ }
|
|
|
itemBinding.root.setDebouncedClickListener {
|
|
itemBinding.root.setDebouncedClickListener {
|
|
|
|
|
+ viewModel.startReadCard = true
|
|
|
|
|
+ viewModel.isDialogRead = true
|
|
|
viewModel.getRoleAndWorkStationData().observe(this@UserManageFragment) {
|
|
viewModel.getRoleAndWorkStationData().observe(this@UserManageFragment) {
|
|
|
UpdateUserDialog.show(item, viewModel.roleData.map {
|
|
UpdateUserDialog.show(item, viewModel.roleData.map {
|
|
|
val i18NRoleName = I18nManager.t(it.roleKey ?: "")
|
|
val i18NRoleName = I18nManager.t(it.roleKey ?: "")
|
|
@@ -177,6 +255,8 @@ class UserManageFragment : BaseFragment<FragmentUserManageBinding>() {
|
|
|
}
|
|
}
|
|
|
})
|
|
})
|
|
|
}
|
|
}
|
|
|
|
|
+ }, {
|
|
|
|
|
+ updateUserDialog = this
|
|
|
}) { data, dialog ->
|
|
}) { data, dialog ->
|
|
|
viewModel.updateUser(data).observe(this@UserManageFragment) {
|
|
viewModel.updateUser(data).observe(this@UserManageFragment) {
|
|
|
dialog.dismiss()
|
|
dialog.dismiss()
|
|
@@ -202,11 +282,77 @@ class UserManageFragment : BaseFragment<FragmentUserManageBinding>() {
|
|
|
)
|
|
)
|
|
|
}
|
|
}
|
|
|
}
|
|
}
|
|
|
- }
|
|
|
|
|
|
|
+ }.setDialogLifecycleCallback(object : DialogLifecycleCallback<CustomDialog>() {
|
|
|
|
|
+ override fun onDismiss(dialog: CustomDialog?) {
|
|
|
|
|
+ viewModel.startReadCard = false
|
|
|
|
|
+ viewModel.isDialogRead = false
|
|
|
|
|
+ super.onDismiss(dialog)
|
|
|
|
|
+ }
|
|
|
|
|
+ })
|
|
|
}
|
|
}
|
|
|
}
|
|
}
|
|
|
}
|
|
}
|
|
|
|
|
|
|
|
|
|
+ private fun startCaptureFingerprint(dialog: CustomDialog) {
|
|
|
|
|
+ FingerprintUtil.init(requireContext())
|
|
|
|
|
+ FingerprintUtil.start()
|
|
|
|
|
+ mFingerprintGroupName = UUID.randomUUID().toString()
|
|
|
|
|
+ FingerprintUtil.setScanListener(object : FingerprintUtil.OnScanListener {
|
|
|
|
|
+ override fun onScan(bitmap: Bitmap) {
|
|
|
|
|
+ viewModel.saveUserFingerprint(
|
|
|
|
|
+ ImageConvertUtils.bitmapToBase64(bitmap) ?: "",
|
|
|
|
|
+ mFingerprintGroupName
|
|
|
|
|
+ ).observe(this@UserManageFragment) {
|
|
|
|
|
+ if (it != null) {
|
|
|
|
|
+ logger.info("添加指纹:${it}")
|
|
|
|
|
+ inputFingerprintIds.add(it)
|
|
|
|
|
+ mFingerprintPressTimes++
|
|
|
|
|
+ if (mFingerprintPressTimes == maxPressTimes) {
|
|
|
|
|
+ dialog?.dismiss()
|
|
|
|
|
+ showToast(CommonUtils.getStr("fingerprint_add_success_tip"))
|
|
|
|
|
+ getUserData(false)
|
|
|
|
|
+ } else if (mFingerprintInputErrorTimes == inputFingerprintErrorTimes) {
|
|
|
|
|
+ mFingerprintGroupName = UUID.randomUUID().toString()
|
|
|
|
|
+ mFingerprintPressTimes = 0
|
|
|
|
|
+ mFingerprintInputErrorTimes = 0
|
|
|
|
|
+ pressTip?.text = CommonUtils.getStr(
|
|
|
|
|
+ "fingerprint_scan_tip",
|
|
|
|
|
+ maxPressTimes - mFingerprintPressTimes
|
|
|
|
|
+ )
|
|
|
|
|
+ viewModel.deleteFingerprintByIds(inputFingerprintIds)
|
|
|
|
|
+ .observe(this@UserManageFragment) {
|
|
|
|
|
+ getUserData(false)
|
|
|
|
|
+ }
|
|
|
|
|
+ showToast(CommonUtils.getStr("please_re_press_fingerprint_again"))
|
|
|
|
|
+ } else {
|
|
|
|
|
+ pressTip?.text = CommonUtils.getStr(
|
|
|
|
|
+ "fingerprint_scan_tip",
|
|
|
|
|
+ maxPressTimes - mFingerprintPressTimes
|
|
|
|
|
+ )
|
|
|
|
|
+ showToast(CommonUtils.getStr("please_press_fingerprint_again"))
|
|
|
|
|
+ }
|
|
|
|
|
+ } else {
|
|
|
|
|
+ mFingerprintInputErrorTimes++
|
|
|
|
|
+ if (mFingerprintInputErrorTimes == inputFingerprintErrorTimes) {
|
|
|
|
|
+ mFingerprintGroupName = UUID.randomUUID().toString()
|
|
|
|
|
+ mFingerprintPressTimes = 0
|
|
|
|
|
+ mFingerprintInputErrorTimes = 0
|
|
|
|
|
+ pressTip?.text = CommonUtils.getStr(
|
|
|
|
|
+ "fingerprint_scan_tip",
|
|
|
|
|
+ maxPressTimes - mFingerprintPressTimes
|
|
|
|
|
+ )
|
|
|
|
|
+ viewModel.deleteFingerprintByIds(inputFingerprintIds)
|
|
|
|
|
+ .observe(this@UserManageFragment) {
|
|
|
|
|
+ getUserData(false)
|
|
|
|
|
+ }
|
|
|
|
|
+ showToast(CommonUtils.getStr("please_re_press_fingerprint_again"))
|
|
|
|
|
+ }
|
|
|
|
|
+ }
|
|
|
|
|
+ }
|
|
|
|
|
+ }
|
|
|
|
|
+ })
|
|
|
|
|
+ }
|
|
|
|
|
+
|
|
|
override fun initData() {
|
|
override fun initData() {
|
|
|
super.initData()
|
|
super.initData()
|
|
|
viewModel.userFilterData = null
|
|
viewModel.userFilterData = null
|
|
@@ -270,4 +416,38 @@ class UserManageFragment : BaseFragment<FragmentUserManageBinding>() {
|
|
|
}
|
|
}
|
|
|
}
|
|
}
|
|
|
}
|
|
}
|
|
|
|
|
+
|
|
|
|
|
+ override fun onEvent(event: EventBean<Any>) {
|
|
|
|
|
+ super.onEvent(event)
|
|
|
|
|
+ when (event.code) {
|
|
|
|
|
+ EventConstants.EVENT_RFID_CARD_READ -> {
|
|
|
|
|
+ if (!viewModel.startReadCard) {
|
|
|
|
|
+ return
|
|
|
|
|
+ }
|
|
|
|
|
+ val rfid = (event.data as RFIDCardReadEvent).rfidNo
|
|
|
|
|
+ if (viewModel.isDialogRead) {
|
|
|
|
|
+ viewModel.checkJobCardInUse(rfid).observe(this) {
|
|
|
|
|
+ if (it == null) {
|
|
|
|
|
+ showToast(CommonUtils.getStr(com.grkj.ui_base.R.string.job_card_already_bind))
|
|
|
|
|
+ return@observe
|
|
|
|
|
+ }
|
|
|
|
|
+ addUserDialog?.refreshJobCardData(rfid)
|
|
|
|
|
+ updateUserDialog?.refreshJobCardData(rfid)
|
|
|
|
|
+ }
|
|
|
|
|
+ } else {
|
|
|
|
|
+ viewModel.changeJobCard(rfid).observe(this) {
|
|
|
|
|
+ if (it) {
|
|
|
|
|
+ TipDialog.showSuccess(
|
|
|
|
|
+ CommonUtils.getStr(com.grkj.ui_base.R.string.bind_job_card_success),
|
|
|
|
|
+ onConfirmClick = {
|
|
|
|
|
+ getUserData(nextPage = false)
|
|
|
|
|
+ })
|
|
|
|
|
+ } else {
|
|
|
|
|
+ TipDialog.showError(CommonUtils.getStr(com.grkj.ui_base.R.string.job_card_already_bind))
|
|
|
|
|
+ }
|
|
|
|
|
+ }
|
|
|
|
|
+ }
|
|
|
|
|
+ }
|
|
|
|
|
+ }
|
|
|
|
|
+ }
|
|
|
}
|
|
}
|