Преглед изворни кода

feat(数据管理、硬件管理)
- 新增用户、角色、钥匙、挂锁删除校验,如果在进行中的作业中使用,则不允许删除

refactor(提示)
- 优化DialogX提示框标题和内容字体大小和样式

refactor(人脸)
- 优化人脸识别NV21转Bitmap的工具类引用

fix(我的待办)
- 修复我的待办ViewModel未注入用户仓库导致的功能异常

周文健 пре 3 месеци
родитељ
комит
ea66138b2f
22 измењених фајлова са 291 додато и 111 уклоњено
  1. 33 26
      app/src/main/java/com/grkj/iscs/features/main/fragment/data_manage/RoleManageFragment.kt
  2. 32 26
      app/src/main/java/com/grkj/iscs/features/main/fragment/data_manage/UserManageFragment.kt
  3. 33 26
      app/src/main/java/com/grkj/iscs/features/main/fragment/hardware_manage/KeyManageFragment.kt
  4. 22 17
      app/src/main/java/com/grkj/iscs/features/main/fragment/hardware_manage/LockManageFragment.kt
  5. 16 1
      app/src/main/java/com/grkj/iscs/features/main/viewmodel/data_manage/RoleManageViewModel.kt
  6. 14 2
      app/src/main/java/com/grkj/iscs/features/main/viewmodel/data_manage/UserManageViewModel.kt
  7. 19 3
      app/src/main/java/com/grkj/iscs/features/main/viewmodel/hardware_manage/KeyManageViewModel.kt
  8. 13 4
      app/src/main/java/com/grkj/iscs/features/main/viewmodel/hardware_manage/LockManageViewModel.kt
  9. 4 1
      app/src/main/java/com/grkj/iscs/features/main/viewmodel/job_manage/MyTodoViewModel.kt
  10. 8 1
      app/src/main/java/com/grkj/iscs/features/splash/activity/SplashActivity.kt
  11. 4 0
      app/src/main/res/values-en/strings.xml
  12. 4 0
      app/src/main/res/values-zh/strings.xml
  13. 4 0
      app/src/main/res/values/strings.xml
  14. 24 2
      data/src/main/java/com/grkj/data/dao/JobTicketDao.kt
  15. 6 0
      data/src/main/java/com/grkj/data/dao/RoleDao.kt
  16. 15 0
      data/src/main/java/com/grkj/data/repository/IJobTicketRepository.kt
  17. 5 0
      data/src/main/java/com/grkj/data/repository/IRoleRepository.kt
  18. 12 0
      data/src/main/java/com/grkj/data/repository/impl/network/NetworkJobTicketRepository.kt
  19. 4 0
      data/src/main/java/com/grkj/data/repository/impl/network/NetworkRoleRepository.kt
  20. 14 1
      data/src/main/java/com/grkj/data/repository/impl/standard/JobTicketRepository.kt
  21. 4 0
      data/src/main/java/com/grkj/data/repository/impl/standard/RoleRepository.kt
  22. 1 1
      shared/src/main/java/com/grkj/shared/utils/ArcSoftUtil.kt

+ 33 - 26
app/src/main/java/com/grkj/iscs/features/main/fragment/data_manage/RoleManageFragment.kt

@@ -253,31 +253,38 @@ class RoleManageFragment : BaseFragment<FragmentRoleManageBinding>() {
             PopTip.build().tip(R.string.role_in_preset_tip)
             return
         }
-        TipDialog.show(
-            msg = CommonUtils.getStr(R.string.check_delete_role).toString(),
-            countDownTime = 10,
-            onConfirmClick = {
-                viewModel.deleteSelectedRoles(viewModel.roleManageDataList.filter { it.isSelected }
-                    .map { it.roleId }).observe(this) {
-                    if (it) {
-                        TipDialog.show(
-                            dialogType = TipDialog.DialogType.SUCCESS,
-                            msg = CommonUtils.getStr(R.string.role_manage_delete_succeed)
-                                .toString(),
-                            showConfirm = false,
-                            countDownTime = 10
-                        )
-                        getRoleData(false)
-                    } else {
-                        TipDialog.show(
-                            dialogType = TipDialog.DialogType.ERROR,
-                            msg = CommonUtils.getStr(R.string.role_manage_delete_failed)
-                                .toString(),
-                            showConfirm = false,
-                            countDownTime = 10
-                        )
-                    }
-                }
-            })
+        viewModel.checkRoleInUse().observe(this){
+            if (!it){
+                TipDialog.show(
+                    msg = CommonUtils.getStr(R.string.check_delete_role).toString(),
+                    countDownTime = 10,
+                    onConfirmClick = {
+                        viewModel.deleteSelectedRoles(viewModel.roleManageDataList.filter { it.isSelected }
+                            .map { it.roleId }).observe(this) {
+                            if (it) {
+                                TipDialog.show(
+                                    dialogType = TipDialog.DialogType.SUCCESS,
+                                    msg = CommonUtils.getStr(R.string.role_manage_delete_succeed)
+                                        .toString(),
+                                    showConfirm = false,
+                                    countDownTime = 10
+                                )
+                                getRoleData(false)
+                            } else {
+                                TipDialog.show(
+                                    dialogType = TipDialog.DialogType.ERROR,
+                                    msg = CommonUtils.getStr(R.string.role_manage_delete_failed)
+                                        .toString(),
+                                    showConfirm = false,
+                                    countDownTime = 10
+                                )
+                            }
+                        }
+                    })
+            }else{
+                TipDialog.showError(CommonUtils.getStr(R.string.role_in_use).toString())
+            }
+        }
+
     }
 }

+ 32 - 26
app/src/main/java/com/grkj/iscs/features/main/fragment/data_manage/UserManageFragment.kt

@@ -236,31 +236,37 @@ class UserManageFragment : BaseFragment<FragmentUserManageBinding>() {
             PopTip.build().tip(R.string.please_select_user)
             return
         }
-        TipDialog.show(
-            msg = CommonUtils.getStr(R.string.check_delete_user).toString(),
-            countDownTime = 10,
-            onConfirmClick = {
-                viewModel.deleteSelectedUsers(viewModel.userManageDataList.filter { it.isSelected }
-                    .map { it.userId }).observe(this) {
-                    if (it) {
-                        TipDialog.show(
-                            dialogType = TipDialog.DialogType.SUCCESS,
-                            msg = CommonUtils.getStr(R.string.user_manage_delete_succeed)
-                                .toString(),
-                            showConfirm = false,
-                            countDownTime = 10
-                        )
-                        getUserData(false)
-                    } else {
-                        TipDialog.show(
-                            dialogType = TipDialog.DialogType.ERROR,
-                            msg = CommonUtils.getStr(R.string.user_manage_delete_failed)
-                                .toString(),
-                            showConfirm = false,
-                            countDownTime = 10
-                        )
-                    }
-                }
-            })
+        viewModel.userInProgressJob().observe(this){
+            if (!it){
+                TipDialog.show(
+                    msg = CommonUtils.getStr(R.string.check_delete_user).toString(),
+                    countDownTime = 10,
+                    onConfirmClick = {
+                        viewModel.deleteSelectedUsers(viewModel.userManageDataList.filter { it.isSelected }
+                            .map { it.userId }).observe(this) {
+                            if (it) {
+                                TipDialog.show(
+                                    dialogType = TipDialog.DialogType.SUCCESS,
+                                    msg = CommonUtils.getStr(R.string.user_manage_delete_succeed)
+                                        .toString(),
+                                    showConfirm = false,
+                                    countDownTime = 10
+                                )
+                                getUserData(false)
+                            } else {
+                                TipDialog.show(
+                                    dialogType = TipDialog.DialogType.ERROR,
+                                    msg = CommonUtils.getStr(R.string.user_manage_delete_failed)
+                                        .toString(),
+                                    showConfirm = false,
+                                    countDownTime = 10
+                                )
+                            }
+                        }
+                    })
+            }else{
+                TipDialog.showError(CommonUtils.getStr(R.string.has_user_in_progress_job).toString())
+            }
+        }
     }
 }

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

@@ -195,31 +195,38 @@ class KeyManageFragment : BaseFragment<FragmentKeyManageBinding>() {
             PopTip.tip(R.string.please_select_key)
             return
         }
-        TipDialog.show(
-            msg = CommonUtils.getStr(R.string.check_delete_key).toString(),
-            countDownTime = 10,
-            onConfirmClick = {
-                viewModel.deleteSelectedKey(viewModel.keyManageDataList.filter { it.isSelected }
-                    .map { it.keyId }).observe(this) {
-                    if (it) {
-                        TipDialog.show(
-                            dialogType = TipDialog.DialogType.SUCCESS,
-                            msg = CommonUtils.getStr(R.string.key_manage_delete_succeed)
-                                .toString(),
-                            showConfirm = false,
-                            countDownTime = 10
-                        )
-                        getKeyData(false)
-                    } else {
-                        TipDialog.show(
-                            dialogType = TipDialog.DialogType.ERROR,
-                            msg = CommonUtils.getStr(R.string.key_manage_delete_failed)
-                                .toString(),
-                            showConfirm = false,
-                            countDownTime = 10
-                        )
-                    }
-                }
-            })
+        viewModel.checkKeyInUse().observe(this){
+            if (!it){
+                TipDialog.show(
+                    msg = CommonUtils.getStr(R.string.check_delete_key).toString(),
+                    countDownTime = 10,
+                    onConfirmClick = {
+                        viewModel.deleteSelectedKey(viewModel.keyManageDataList.filter { it.isSelected }
+                            .map { it.keyId }).observe(this) {
+                            if (it) {
+                                TipDialog.show(
+                                    dialogType = TipDialog.DialogType.SUCCESS,
+                                    msg = CommonUtils.getStr(R.string.key_manage_delete_succeed)
+                                        .toString(),
+                                    showConfirm = false,
+                                    countDownTime = 10
+                                )
+                                getKeyData(false)
+                            } else {
+                                TipDialog.show(
+                                    dialogType = TipDialog.DialogType.ERROR,
+                                    msg = CommonUtils.getStr(R.string.key_manage_delete_failed)
+                                        .toString(),
+                                    showConfirm = false,
+                                    countDownTime = 10
+                                )
+                            }
+                        }
+                    })
+            }else{
+                TipDialog.showError(CommonUtils.getStr(R.string.key_in_use).toString())
+            }
+        }
+
     }
 }

+ 22 - 17
app/src/main/java/com/grkj/iscs/features/main/fragment/hardware_manage/LockManageFragment.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
@@ -10,7 +9,6 @@ import com.drake.brv.utils.divider
 import com.drake.brv.utils.linear
 import com.drake.brv.utils.models
 import com.drake.brv.utils.setup
-import com.grkj.data.data.DictConstants
 import com.grkj.data.enums.CommonDictDataEnum
 import com.grkj.data.model.dos.IsLock
 import com.grkj.iscs.R
@@ -161,21 +159,28 @@ class LockManageFragment : BaseFragment<FragmentLockManageBinding>() {
         if (viewModel.lockManageDataList.none { it.isSelected }) {
             PopTip.tip(R.string.please_select_lock); return
         }
-        TipDialog.show(
-            msg = CommonUtils.getStr(R.string.check_delete_lock).toString(),
-            countDownTime = 10,
-            onConfirmClick = {
-                val ids = viewModel.lockManageDataList.filter { it.isSelected }.map { it.lockId }
-                viewModel.deleteSelectedLock(ids).observe(this) { ok ->
-                    TipDialog.show(
-                        dialogType = if (ok) TipDialog.DialogType.SUCCESS else TipDialog.DialogType.ERROR,
-                        msg = CommonUtils.getStr(if (ok) R.string.lock_manage_delete_succeed else R.string.lock_manage_delete_failed)
-                            .toString(),
-                        showConfirm = false, countDownTime = 10
-                    )
-                    loadLocks(reset = true)
-                }
+        viewModel.lockInUse().observe(this){
+            if (!it){
+                TipDialog.show(
+                    msg = CommonUtils.getStr(R.string.check_delete_lock).toString(),
+                    countDownTime = 10,
+                    onConfirmClick = {
+                        val ids = viewModel.lockManageDataList.filter { it.isSelected }.map { it.lockId }
+                        viewModel.deleteSelectedLock(ids).observe(this) { ok ->
+                            TipDialog.show(
+                                dialogType = if (ok) TipDialog.DialogType.SUCCESS else TipDialog.DialogType.ERROR,
+                                msg = CommonUtils.getStr(if (ok) R.string.lock_manage_delete_succeed else R.string.lock_manage_delete_failed)
+                                    .toString(),
+                                showConfirm = false, countDownTime = 10
+                            )
+                            loadLocks(reset = true)
+                        }
+                    }
+                )
+            }else{
+                TipDialog.showError(CommonUtils.getStr(R.string.lock_in_use).toString())
             }
-        )
+        }
+
     }
 }

+ 16 - 1
app/src/main/java/com/grkj/iscs/features/main/viewmodel/data_manage/RoleManageViewModel.kt

@@ -6,7 +6,10 @@ import com.grkj.data.model.vo.AddRoleDo
 import com.grkj.data.model.vo.RoleManageFilterVo
 import com.grkj.data.model.vo.RoleManageVo
 import com.grkj.data.model.vo.UpdateRoleDo
+import com.grkj.data.repository.IJobTicketRepository
 import com.grkj.data.repository.IRoleRepository
+import com.grkj.data.repository.ISysMenuRepository
+import com.grkj.data.repository.impl.standard.JobTicketRepository
 import com.grkj.data.repository.impl.standard.SysMenuRepository
 import com.grkj.iscs.features.main.entity.AddRoleDataEntity
 import com.grkj.iscs.features.main.entity.RoleManageFunctionalPermissionsEntity
@@ -23,7 +26,8 @@ import javax.inject.Inject
 @HiltViewModel
 class RoleManageViewModel @Inject constructor(
     val roleRepository: IRoleRepository,
-    val sysMenuRepository: SysMenuRepository
+    val sysMenuRepository: ISysMenuRepository,
+    val jobTicketRepository: IJobTicketRepository
 ) :
     BaseViewModel() {
     private var current: Int = 0
@@ -132,4 +136,15 @@ class RoleManageViewModel @Inject constructor(
             }
         }
     }
+
+    /**
+     * 检查角色是否在使用
+     */
+    fun checkRoleInUse(): LiveData<Boolean> {
+        return liveData(Dispatchers.IO){
+            val userIds = roleRepository.getUserIdsByRole(roleManageDataList.filter { it.isSelected }.map { it.roleId })
+            val hasUserInProgress = jobTicketRepository.checkUserInProgressJob(userIds)
+            emit(hasUserInProgress)
+        }
+    }
 }

+ 14 - 2
app/src/main/java/com/grkj/iscs/features/main/viewmodel/data_manage/UserManageViewModel.kt

@@ -2,7 +2,6 @@ package com.grkj.iscs.features.main.viewmodel.data_manage
 
 import androidx.lifecycle.LiveData
 import androidx.lifecycle.liveData
-import com.grkj.data.model.dos.IsWorkstation
 import com.grkj.data.model.dos.SysRole
 import com.grkj.data.model.vo.AddUserDataVo
 import com.grkj.data.model.vo.UpdateUserDataVo
@@ -10,6 +9,7 @@ import com.grkj.data.model.vo.UserManageFilterVo
 import com.grkj.data.model.vo.UserManageVo
 import com.grkj.data.model.vo.WorkstationManageVo
 import com.grkj.data.repository.IHardwareRepository
+import com.grkj.data.repository.IJobTicketRepository
 import com.grkj.data.repository.IRoleRepository
 import com.grkj.data.repository.IUserRepository
 import com.grkj.data.repository.IWorkstationRepository
@@ -28,7 +28,8 @@ class UserManageViewModel @Inject constructor(
     override val userRepository: IUserRepository,
     val roleRepository: IRoleRepository,
     val workstationRepository: IWorkstationRepository,
-    val hardwareRepository: IHardwareRepository
+    val hardwareRepository: IHardwareRepository,
+    val jobTicketRepository: IJobTicketRepository
 ) : BaseViewModel(userRepository) {
     private var current: Int = 0
     private var size: Int = 50
@@ -126,4 +127,15 @@ class UserManageViewModel @Inject constructor(
             }
         }
     }
+
+    /***
+     * 用户是否在作业中
+     */
+    fun userInProgressJob(): LiveData<Boolean> {
+        return liveData(Dispatchers.IO) {
+            val hasUserInProgressJob = jobTicketRepository.checkUserInProgressJob(userManageDataList.filter { it.isSelected }
+                .map { it.userId })
+            emit(hasUserInProgressJob)
+        }
+    }
 }

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

@@ -9,6 +9,8 @@ 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.data.repository.IJobTicketRepository
+import com.grkj.data.repository.impl.standard.JobTicketRepository
 import com.grkj.iscs.R
 import com.grkj.ui_base.base.BaseViewModel
 import com.grkj.ui_base.utils.CommonUtils
@@ -22,7 +24,8 @@ import javax.inject.Inject
  */
 @HiltViewModel
 class KeyManageViewModel @Inject constructor(
-    val hardwareRepository: IHardwareRepository
+    val hardwareRepository: IHardwareRepository,
+    val jobTicketRepository: IJobTicketRepository
 ) : BaseViewModel() {
     private var current: Int = 0
     private var size: Int = 50
@@ -104,11 +107,24 @@ class KeyManageViewModel @Inject constructor(
     fun validateKeyData(keyNfc: String, keyMac: String): LiveData<Boolean> {
         return liveData(Dispatchers.IO) {
             val keyInfo = hardwareRepository.getKeyInfo(keyNfc)
-            if (keyInfo == null || keyInfo.macAddress != keyMac){
+            if (keyInfo == null || keyInfo.macAddress != keyMac) {
                 emit(true)
-            }else{
+            } else {
                 showTip(CommonUtils.getStr(R.string.key_info_already_exists).toString())
             }
         }
     }
+
+    /**
+     * 检查钥匙是否在使用
+     */
+
+    fun checkKeyInUse(): LiveData<Boolean> {
+        return liveData(Dispatchers.IO) {
+            val keyInUse =
+                jobTicketRepository.checkKeyInUse(keyManageDataList.filter { it.isSelected }
+                    .map { it.keyId })
+            emit(keyInUse)
+        }
+    }
 }

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

@@ -2,17 +2,15 @@ package com.grkj.iscs.features.main.viewmodel.hardware_manage
 
 import androidx.lifecycle.LiveData
 import androidx.lifecycle.liveData
-import com.grkj.data.data.DictConstants
 import com.grkj.data.enums.CommonDictDataEnum
 import com.grkj.data.model.dos.IsLock
-import com.grkj.data.model.res.CommonDictRes
 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.data.repository.IJobTicketRepository
 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
@@ -24,7 +22,8 @@ import javax.inject.Inject
  */
 @HiltViewModel
 class LockManageViewModel @Inject constructor(
-    private val hardwareRepository: IHardwareRepository
+    private val hardwareRepository: IHardwareRepository,
+    val jobTicketRepository: IJobTicketRepository
 ) : BaseViewModel() {
     private var current: Int = 0
     private val size: Int = 50
@@ -110,4 +109,14 @@ class LockManageViewModel @Inject constructor(
             }
         }
     }
+
+    /**
+     * 挂锁是否在使用
+     */
+    fun lockInUse() : LiveData<Boolean>{
+        return liveData(Dispatchers.IO){
+            val inUse = jobTicketRepository.checkLockInUse(lockManageDataList.filter { it.isSelected }.map { it.lockId })
+            emit(inUse)
+        }
+    }
 }

+ 4 - 1
app/src/main/java/com/grkj/iscs/features/main/viewmodel/job_manage/MyTodoViewModel.kt

@@ -13,6 +13,8 @@ import com.grkj.data.model.res.CommonDictRes
 import com.grkj.data.model.vo.IsJobTicketPointsDataVo
 import com.grkj.data.model.vo.TodoItemVo
 import com.grkj.data.repository.IJobTicketRepository
+import com.grkj.data.repository.IUserRepository
+import com.grkj.data.repository.impl.standard.UserRepository
 import com.grkj.iscs.R
 import com.grkj.iscs.features.main.entity.actionKey
 import com.grkj.iscs.features.main.entity.findPredecessors
@@ -31,7 +33,8 @@ import kotlin.collections.contains
 @HiltViewModel
 class MyTodoViewModel @Inject constructor(
     val jobTicketRepository: IJobTicketRepository,
-) : BaseViewModel() {
+    override val userRepository: IUserRepository
+) : BaseViewModel(userRepository) {
     /**
      * 开始读卡
      */

+ 8 - 1
app/src/main/java/com/grkj/iscs/features/splash/activity/SplashActivity.kt

@@ -1,6 +1,7 @@
 package com.grkj.iscs.features.splash.activity
 
 import android.content.Intent
+import android.view.Gravity
 import androidx.activity.viewModels
 import com.grkj.data.data.MMKVConstants
 import com.grkj.iscs.R
@@ -24,10 +25,16 @@ class SplashActivity : BaseActivity<ActivitySplashBinding>() {
 
     override fun initView() {
         val dialogXTextInfo = TextInfo()
+        val dialogXTitleTextInfo = TextInfo().apply {
+            setBold(true)
+            setGravity(Gravity.CENTER)
+        }
         if (isLandscape()) {
             dialogXTextInfo.fontSize = (18 * 1.7f).toInt()
+            dialogXTitleTextInfo.fontSize = (22 * 1.7f).toInt()
         } else {
             dialogXTextInfo.fontSize = 18
+            dialogXTitleTextInfo.fontSize = 22
         }
         DialogX.popTextInfo = dialogXTextInfo
         DialogX.buttonTextInfo = dialogXTextInfo
@@ -35,7 +42,7 @@ class SplashActivity : BaseActivity<ActivitySplashBinding>() {
         DialogX.messageTextInfo = dialogXTextInfo
         DialogX.menuTextInfo = dialogXTextInfo
         DialogX.okButtonTextInfo = dialogXTextInfo
-        DialogX.titleTextInfo = dialogXTextInfo
+        DialogX.titleTextInfo = dialogXTitleTextInfo
         StartModbusEvent.sendStartModbusEvent()
         //todo 测试用,直接进入,不初始化
 //        viewModel.checkSysMenuAndRole().observe(this) {

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

@@ -548,5 +548,9 @@
     <string name="selected_rfid_in_use">Exists RFID tag in use</string>
     <string name="rfid_in_use">RFID tag is in use and cannot be modified</string>
     <string name="group_at_least_has_one_point">At least one point must exist for each group</string>
+    <string name="has_user_in_progress_job">Has user in progress job</string>
+    <string name="role_in_use">Role has job in use</string>
+    <string name="lock_in_use">Lock in use</string>
+    <string name="key_in_use">Key in use</string>
 
 </resources>

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

@@ -548,5 +548,9 @@
     <string name="selected_rfid_in_use">存在正在使用的RFID标签</string>
     <string name="rfid_in_use">RFID标签使用中,无法修改</string>
     <string name="group_at_least_has_one_point">每个分组至少需要存在一个点位</string>
+    <string name="has_user_in_progress_job">有用户在进行的作业中</string>
+    <string name="role_in_use">角色已有作业在使用</string>
+    <string name="lock_in_use">挂锁正在使用中</string>
+    <string name="key_in_use">钥匙正在使用</string>
 
 </resources>

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

@@ -551,5 +551,9 @@
     <string name="selected_rfid_in_use">存在正在使用的RFID标签</string>
     <string name="rfid_in_use">RFID标签使用中,无法修改</string>
     <string name="group_at_least_has_one_point">每个分组至少需要存在一个点位</string>
+    <string name="has_user_in_progress_job">有用户在进行的作业中</string>
+    <string name="role_in_use">角色已有作业在使用</string>
+    <string name="lock_in_use">挂锁正在使用中</string>
+    <string name="key_in_use">钥匙正在使用</string>
 
 </resources>

+ 24 - 2
data/src/main/java/com/grkj/data/dao/JobTicketDao.kt

@@ -759,6 +759,7 @@ interface JobTicketDao {
     """
     )
     fun getTicketPointsByTicketIds(ticketIds: List<Long>): List<JobPointVo>
+
     /**
      * 判定在同一模式下 "解锁" 步骤是否排在 "上锁" 步骤之前
      * 通过比较两者的最小 step_index
@@ -789,10 +790,31 @@ interface JobTicketDao {
     """
     )
     fun isUnLockBeforeLock(ticketId: Long): Boolean
-    @Query("""
+
+    @Query(
+        """
         select * from is_job_ticket_points ijtp
         left join is_job_ticket ijt on ijtp.ticket_id = ijt.ticket_id
         where ijt.ticket_status in ('1','2','3','4','7')
-    """)
+    """
+    )
     fun getAllInUsePoints(): List<IsJobTicketPoints>
+
+    /**
+     * 检查用户是否在作业中
+     */
+    @Query("select count(1) from is_job_ticket ijt left join is_job_ticket_user ijtu on ijt.ticket_id = ijtu.ticket_id left join sys_user su on ijt.create_by = su.user_name where (su.user_id in (:userIds) or ijtu.user_id in (:userIds)) and ijt.ticket_status in ('1','2','3','4','7') ")
+    fun checkUserInProgressJob(userIds: List<Long>): Int
+
+    /**
+     * 检查挂锁是否在使用
+     */
+    @Query("select count(1) from is_job_ticket ijt left join is_job_ticket_points ijtp on ijt.ticket_id = ijtp.ticket_id where ijtp.lock_id in (:lockIds) and ijt.ticket_status in ('1','2','3','4','7')")
+    fun checkLockInUse(lockIds: List<Long>): Int
+
+    /**
+     * 检查钥匙是否在使用
+     */
+    @Query("select count(1) from is_job_ticket ijt left join is_job_ticket_key ijtk on ijt.ticket_id = ijtk.ticket_id where ijtk.key_id in (:keyIds) and ijtk.collect_time is not null and ijtk.give_back_time is null and ijt.ticket_status in ('1','2','3','4','7')")
+    fun checkKeyInUse(keyIds: List<Long>): Int
 }

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

@@ -86,4 +86,10 @@ interface RoleDao {
      */
     @Query("select role_id from sys_role where role_key = :roleKey")
     fun getRoleDataByRoleKey(roleKey: String): Long?
+
+    /**
+     *
+     */
+    @Query("select user_id from sys_user_role where role_id in (:roleIds)")
+    fun getUserIdsByRoleIds(roleIds: List<Long>): List<Long>
 }

+ 15 - 0
data/src/main/java/com/grkj/data/repository/IJobTicketRepository.kt

@@ -341,4 +341,19 @@ interface IJobTicketRepository {
      * 检查是否有只有上锁的作业
      */
     fun checkOnlyLockJob(selectedTicketId: List<Long>): Boolean
+
+    /**
+     * 用户是否在进行中的作业
+     */
+    fun checkUserInProgressJob(userIds: List<Long>): Boolean
+
+    /**
+     * 检查挂锁是否在使用
+     */
+    fun checkLockInUse(lockIds: List<Long>): Boolean
+
+    /**
+     * 检查钥匙是否在使用
+     */
+    fun checkKeyInUse(keyIds: List<Long>): Boolean
 }

+ 5 - 0
data/src/main/java/com/grkj/data/repository/IRoleRepository.kt

@@ -49,4 +49,9 @@ interface IRoleRepository {
      * 根据角色字符获取角色
      */
     fun getRoleByRoleKey(roleKey: String): Long?
+
+    /**
+     * 获取角色下的用户
+     */
+    fun getUserIdsByRole(roleIds: List<Long>): List<Long>
 }

+ 12 - 0
data/src/main/java/com/grkj/data/repository/impl/network/NetworkJobTicketRepository.kt

@@ -269,10 +269,22 @@ class NetworkJobTicketRepository @Inject constructor() : BaseRepository(), IJobT
         TODO("Not yet implemented")
     }
 
+    override fun checkUserInProgressJob(userIds: List<Long>): Boolean {
+        TODO("Not yet implemented")
+    }
+
+    override fun checkLockInUse(lockIds: List<Long>): Boolean {
+        TODO("Not yet implemented")
+    }
+
     override fun getAllLockedPointsData(): List<LockedPointVo> {
         TODO("Not yet implemented")
     }
 
+    override fun checkKeyInUse(keyIds: List<Long>): Boolean {
+        TODO("Not yet implemented")
+    }
+
     override fun getAllInUsePointsData(): List<Long> {
         TODO("Not yet implemented")
     }

+ 4 - 0
data/src/main/java/com/grkj/data/repository/impl/network/NetworkRoleRepository.kt

@@ -46,6 +46,10 @@ class NetworkRoleRepository @Inject constructor() : BaseRepository(), IRoleRepos
         TODO("Not yet implemented")
     }
 
+    override fun getUserIdsByRole(roleIds: List<Long>): List<Long> {
+        TODO("Not yet implemented")
+    }
+
     override fun addRoleData(addRoleDo: AddRoleDo) {
         TODO("Not yet implemented")
     }

+ 14 - 1
data/src/main/java/com/grkj/data/repository/impl/standard/JobTicketRepository.kt

@@ -254,6 +254,18 @@ class JobTicketRepository @Inject constructor(
         jobTicketDao.saveIsJobTicketStep(ticketStep)
     }
 
+    override fun checkLockInUse(lockIds: List<Long>): Boolean {
+        return jobTicketDao.checkLockInUse(lockIds) > 0
+    }
+
+    override fun checkKeyInUse(keyIds: List<Long>): Boolean {
+        return jobTicketDao.checkKeyInUse(keyIds) > 0
+    }
+
+    override fun checkUserInProgressJob(userIds: List<Long>): Boolean {
+        return jobTicketDao.checkUserInProgressJob(userIds) > 0
+    }
+
     override fun checkOnlyLockJob(selectedTicketId: List<Long>): Boolean {
         val ticketSteps = jobTicketDao.getStepsByTicketIds(selectedTicketId)
         return ticketSteps.groupBy { it.ticketId }
@@ -598,7 +610,8 @@ class JobTicketRepository @Inject constructor(
         }
         tempWait.forEach {
             it.todoStatus = TodoStatusEnum.WAIT
-            it.previousTodoStepJoin = tempTodo.filter { todoData -> it.ticketId == todoData.ticketId }
+            it.previousTodoStepJoin =
+                tempTodo.filter { todoData -> it.ticketId == todoData.ticketId }
         }
         tempDone.forEach {
             it.todoStatus = TodoStatusEnum.DONE

+ 4 - 0
data/src/main/java/com/grkj/data/repository/impl/standard/RoleRepository.kt

@@ -37,6 +37,10 @@ class RoleRepository @Inject constructor(val roleDao: RoleDao, val sysMenuDao: S
 
     }
 
+    override fun getUserIdsByRole(roleIds: List<Long>): List<Long> {
+        return roleDao.getUserIdsByRoleIds(roleIds)
+    }
+
     override fun deleteUserRoleByUserId(userIds: List<Long>) {
         roleDao.deleteUserRoleByUserIds(userIds)
     }

+ 1 - 1
shared/src/main/java/com/grkj/shared/utils/ArcSoftUtil.kt

@@ -187,7 +187,7 @@ object ArcSoftUtil {
                         previewSize!!.width, previewSize!!.height
                     ))
                 ) {
-                    val bitmap = NV21ToBitmap(context).nv21ToBitmap(
+                    val bitmap = ImageConvertUtils.nv21ToBitmap(
                         nv21, previewSize!!.width, previewSize!!.height
                     )
 //                    val faceRect = faceInfoList[0].rect.expandToPadCenter()