Переглянути джерело

refactor(更新)
- 用户逻辑获取作业用户数据,通过用户ID和票证ID

周文健 3 місяців тому
батько
коміт
cc5bd6794f

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

@@ -120,7 +120,7 @@ class UserManageViewModel @Inject constructor(
     fun validateUserData(username: String): LiveData<Boolean> {
         return liveData(Dispatchers.IO) {
             val user = userRepository.getUserByUserName(username)
-            if (user.isNotEmpty()) {
+            if (user != null) {
                 showTip(CommonUtils.getStr(R.string.user_already_exists).toString())
             } else {
                 emit(true)
@@ -133,8 +133,9 @@ class UserManageViewModel @Inject constructor(
      */
     fun userInProgressJob(): LiveData<Boolean> {
         return liveData(Dispatchers.IO) {
-            val hasUserInProgressJob = jobTicketRepository.checkUserInProgressJob(userManageDataList.filter { it.isSelected }
-                .map { it.userId })
+            val hasUserInProgressJob =
+                jobTicketRepository.checkUserInProgressJob(userManageDataList.filter { it.isSelected }
+                    .map { it.userId })
             emit(hasUserInProgressJob)
         }
     }

+ 12 - 5
app/src/main/java/com/grkj/iscs/features/main/viewmodel/exception_manage/ExceptionJobViewModel.kt

@@ -30,7 +30,6 @@ import com.sik.sikcore.date.TimeUtils
 import dagger.hilt.android.lifecycle.HiltViewModel
 import kotlinx.coroutines.Dispatchers
 import javax.inject.Inject
-import kotlin.math.log
 
 /**
  * 作业执行数据
@@ -226,7 +225,9 @@ class ExceptionJobViewModel @Inject constructor(
                 userRepository.getJobUserDataByUserIdAndTicketId(
                     ticketId,
                     jobTicketUsers.filter { it.userRole == RoleEnum.JTLOCKER.roleKey }
-                        .map { it.userId }).groupBy { it.groupName }
+                        .map { it.userId },
+                    RoleEnum.JTLOCKER.roleKey
+                ).groupBy { it.groupName }
                     .map {
                         JobTicketGroupDataVo(
                             JobTicketGroupInfoVo(groupName = it.key),
@@ -239,7 +240,9 @@ class ExceptionJobViewModel @Inject constructor(
                     jobTicketUsers.filter { it.userRole == RoleEnum.JTCOLOCKER.roleKey }
                         .map {
                             it.userId
-                        })
+                        },
+                    RoleEnum.JTCOLOCKER.roleKey
+                )
             jobTicketRepository.createLockJob(
                 jobTicketPoints,
                 locker,
@@ -275,7 +278,9 @@ class ExceptionJobViewModel @Inject constructor(
                 userRepository.getJobUserDataByUserIdAndTicketId(
                     ticketId,
                     jobTicketUsers.filter { it.userRole == RoleEnum.JTLOCKER.roleKey }
-                        .map { it.userId }).groupBy { it.groupName }
+                        .map { it.userId },
+                    RoleEnum.JTLOCKER.roleKey
+                ).groupBy { it.groupName }
                     .map {
                         JobTicketGroupDataVo(
                             JobTicketGroupInfoVo(groupName = it.key),
@@ -289,7 +294,9 @@ class ExceptionJobViewModel @Inject constructor(
                         .map {
                             it
                                 .userId
-                        })
+                        },
+                    RoleEnum.JTCOLOCKER.roleKey
+                )
             jobTicketRepository.createUnLockJob(
                 jobTicketPoints,
                 locker,

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

@@ -11,6 +11,8 @@ import com.grkj.data.model.dos.IsLock
 import com.grkj.data.model.dos.IsLockCabinet
 import com.grkj.data.model.dos.IsLockCabinetSlots
 import com.grkj.data.model.dos.IsRfidToken
+import com.grkj.data.model.dos.IsUserWorkstation
+import com.grkj.data.model.dos.IsWorkstation
 import com.grkj.data.model.local.LockData
 import com.grkj.data.model.local.PointData
 import com.sik.sikcore.date.TimeUtils
@@ -482,4 +484,22 @@ interface HardwareDao {
     @Query("select * from is_rfid_token where rfid = :rfid")
     fun getRfidDataByRfid(rfid: String): IsRfidToken?
 
+    /**
+     * 获取所有区域信息
+     */
+    @Query("select * from is_workstation where del_flag = 0")
+    fun getAllWorkstation(): List<IsWorkstation>
+
+    /**
+     * 获取所有区域信息
+     */
+    @Query("select * from is_user_workstation")
+    fun getAllUserWorkstations(): List<IsUserWorkstation>
+
+    /**
+     * 获取所有卡片数据
+     */
+    @Query("select * from is_job_card where del_flag = 0")
+    fun getAllJobCard(): List<IsJobCard>
+
 }

+ 12 - 0
data/src/main/java/com/grkj/data/dao/JobTicketDao.kt

@@ -822,4 +822,16 @@ interface JobTicketDao {
      */
     @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
+
+    /**
+     * 根据作业票id获取用户
+     */
+    @Query("select * from is_job_ticket_user where ticket_id = :ticketId")
+    fun getJobTicketUsersByTicketId(ticketId: Long): List<IsJobTicketUser>
+
+    /**
+     * 根据作业票id获取分组信息
+     */
+    @Query("select * from is_job_ticket_group where ticket_id = :ticketId")
+    fun getJobTicketGroupsByTicketId(ticketId: Long): List<IsJobTicketGroup>
 }

+ 13 - 5
data/src/main/java/com/grkj/data/dao/RoleDao.kt

@@ -62,11 +62,7 @@ interface RoleDao {
   """
     )
     fun getRoleManageData(
-        roleName: String?,
-        permissionCharacters: String?,
-        status: String?,
-        size: Int,
-        offset: Int
+        roleName: String?, permissionCharacters: String?, status: String?, size: Int, offset: Int
     ): List<RoleManageVo>
 
     /**
@@ -92,4 +88,16 @@ interface RoleDao {
      */
     @Query("select user_id from sys_user_role where role_id in (:roleIds)")
     fun getUserIdsByRoleIds(roleIds: List<Long>): List<Long>
+
+    /**
+     * 获取所有角色
+     */
+    @Query("select * from sys_role where del_flag = 0")
+    fun getAllRole(): List<SysRole>
+
+    /**
+     * 获取所有角色绑定信息
+     */
+    @Query("select * from sys_user_role")
+    fun getAllUserRoles(): List<SysUserRole>
 }

+ 18 - 6
data/src/main/java/com/grkj/data/dao/UserDao.kt

@@ -30,7 +30,7 @@ interface UserDao {
      * 根据userid查询用户信息
      */
     @Query("select * from sys_user where user_id = :userId")
-    fun getUserInfoByUserId(userId: String): SysUserDo?
+    fun getUserInfoByUserId(userId: Long): SysUserDo?
 
     /**
      * 获取所有指纹数据
@@ -42,7 +42,7 @@ interface UserDao {
      * 根据用户id获取指纹数据
      */
     @Query("select * from sys_user_characteristic where type = 1 and user_id = :userId")
-    fun getFingerprintDataByUserId(userId: Long): List<SysBiometricDataVo>
+    fun getFingerprintDataByUserId(userId: Long): List<SysUserCharacteristicDo>
 
     /**
      * 获取所有人脸数据
@@ -168,7 +168,7 @@ interface UserDao {
     /**
      * 删除用户
      */
-    @Query("delete from sys_user where user_id in (:userIds)")
+    @Query("update sys_user set del_flag = 1 where user_id in (:userIds)")
     fun deleteUserByIds(userIds: List<Long>)
 
     /**
@@ -223,7 +223,7 @@ interface UserDao {
             FROM sys_user AS u
             JOIN sys_user_role AS ur ON u.user_id = ur.user_id
             JOIN sys_role       AS r  ON ur.role_id  = r.role_id
-            WHERE r.role_key = :roleKey;
+            WHERE r.role_key = :roleKey and u.del_flag = 0;
     """
     )
     fun getUsersByRoleKey(roleKey: String): List<Long>
@@ -279,13 +279,13 @@ interface UserDao {
      * 获取用户生物信息
      */
     @Query("select * from sys_user_characteristic where user_id = :userId")
-    fun getUserBiometricData(userId: Long): MutableList<SysBiometricDataVo>
+    fun getSysUserCharacteristicDo(userId: Long): MutableList<SysBiometricDataVo>
 
     /**
      * 根据用户id获取用户生物信息
      */
     @Query("select * from sys_user_characteristic where user_id in (:userIds)")
-    fun getUserBiometricDataByUserIds(userIds: List<Long>): List<SysBiometricDataVo>
+    fun getUserBiometricDataByUserIds(userIds: List<Long>): List<SysUserCharacteristicDo>
 
     /**
      * 根据用户名获取用户
@@ -304,4 +304,16 @@ interface UserDao {
      */
     @Query("update sys_user set password = :password where user_id = :userId")
     fun updateUserPassword(userId: Long, password: String)
+
+    /**
+     * 获取用户信息分页
+     */
+    @Query("select * from sys_user where del_flag = 0 limit :size offset :offset")
+    fun getUserInfoPage(size: Int, offset: Int): List<SysUserDo>
+
+    /**
+     * 根据用户id列表获取用户数据列表
+     */
+    @Query("select * from sys_user where user_id in (:userIds)")
+    fun getUserInfosByUserIds(userIds: List<Long>): List<SysUserDo>
 }

+ 15 - 0
data/src/main/java/com/grkj/data/di/RepositoryModule.kt

@@ -1,6 +1,8 @@
 package com.grkj.data.di
 
+import com.grkj.data.repository.JobTicketRepository
 import com.grkj.data.repository.UserRepository
+import com.grkj.data.repository.impl.JobTicketRepositoryImpl
 import com.grkj.data.repository.impl.UserRepositoryImpl
 import dagger.Module
 import dagger.Provides
@@ -15,10 +17,23 @@ import javax.inject.Singleton
 @InstallIn(SingletonComponent::class)
 object RepositoryModule {
 
+    /**
+     * 用户仓储层注入
+     */
     @Provides
     @Singleton
     fun provideUserRepository(
         userRepository: UserRepositoryImpl,
     ): UserRepository = userRepository
 
+    /**
+     * 作业票仓储层注入
+     */
+    @Provides
+    @Singleton
+    fun provideJobTicketRepository(
+        jobTicketRepository: JobTicketRepositoryImpl,
+    ): JobTicketRepository = jobTicketRepository
+
+
 }

+ 6 - 3
data/src/main/java/com/grkj/data/logic/IUserLogic.kt

@@ -33,7 +33,7 @@ interface IUserLogic {
     /**
      * 指纹登录
      */
-     suspend fun loginWithFingerprint(fingerprint: String): LoginResultEnum
+    suspend fun loginWithFingerprint(fingerprint: String): LoginResultEnum
 
     /**
      * 检查指纹
@@ -67,7 +67,10 @@ interface IUserLogic {
     /**
      * 根据用户id获取用户数据
      */
-    fun getJobUserDataByUserIdAndTicketId(ticketId: Long, userIds: List<Long>): List<JobUserVo>
+    fun getJobUserDataByUserIdAndTicketId(
+        ticketId: Long, userIds: List<Long>,
+        userRole: String
+    ): List<JobUserVo>
 
     /**
      * 获取所有用户数据
@@ -157,7 +160,7 @@ interface IUserLogic {
     /**
      * 根据用户名获取用户
      */
-    fun getUserByUserName(username: String): List<SysUserDo>
+    fun getUserByUserName(username: String): SysUserDo?
 
     /**
      * 根据用户id更新用户

+ 3 - 2
data/src/main/java/com/grkj/data/logic/impl/network/NetworkUserLogic.kt

@@ -65,7 +65,8 @@ class NetworkUserLogic @Inject constructor() : BaseLogic(), IUserLogic {
 
     override fun getJobUserDataByUserIdAndTicketId(
         ticketId: Long,
-        userIds: List<Long>
+        userIds: List<Long>,
+        userRole: String
     ): List<JobUserVo> {
         TODO("Not yet implemented")
     }
@@ -110,7 +111,7 @@ class NetworkUserLogic @Inject constructor() : BaseLogic(), IUserLogic {
         TODO("Not yet implemented")
     }
 
-    override fun getUserByUserName(username: String): List<SysUserDo> {
+    override fun getUserByUserName(username: String): SysUserDo? {
         TODO("Not yet implemented")
     }
 

+ 183 - 59
data/src/main/java/com/grkj/data/logic/impl/standard/UserLogic.kt

@@ -3,7 +3,6 @@ package com.grkj.data.logic.impl.standard
 import com.grkj.data.dao.HardwareDao
 import com.grkj.data.dao.RoleDao
 import com.grkj.data.dao.SysMenuDao
-import com.grkj.data.dao.UserDao
 import com.grkj.data.data.MainDomainData
 import com.grkj.data.enums.LoginResultEnum
 import com.grkj.data.enums.RoleEnum
@@ -20,8 +19,11 @@ import com.grkj.data.model.vo.UserManageVo
 import com.grkj.data.model.vo.UserManageFilterVo
 import com.grkj.data.logic.BaseLogic
 import com.grkj.data.logic.IUserLogic
+import com.grkj.data.repository.JobTicketRepository
+import com.grkj.data.repository.UserRepository
 import com.grkj.shared.utils.BCryptUtils
 import com.grkj.shared.utils.BiometricVerifier
+import com.sik.sikcore.data.BeanUtils
 import com.sik.sikcore.extension.deleteIfExists
 import com.sik.sikcore.extension.file
 import kotlinx.coroutines.Dispatchers
@@ -36,8 +38,9 @@ import javax.inject.Singleton
  */
 @Singleton
 class UserLogic @Inject constructor(
+    private val userRepository: UserRepository,
+    private val jobTicketRepository: JobTicketRepository,
     private val hardwareDao: HardwareDao,
-    private val userDao: UserDao,
     private val roleDao: RoleDao,
     private val sysMenuDao: SysMenuDao,
 ) : BaseLogic(), IUserLogic {
@@ -45,7 +48,7 @@ class UserLogic @Inject constructor(
     override fun loginWithAccount(
         username: String, password: String
     ): LoginResultEnum {
-        val sysUserDo = userDao.getUserInfoByUsername(username)
+        val sysUserDo = userRepository.getUserInfoByUsername(username)
         if (sysUserDo == null) {
             return LoginResultEnum.USERNAME_PASSWORD_NOT_EXISTS
         }
@@ -55,8 +58,11 @@ class UserLogic @Inject constructor(
             MainDomainData.userInfo = sysUserDo
             val userCardList = hardwareDao.getIsJobCardByUserId(sysUserDo.userId)
             val roleDatas = roleDao.getRoleDataByUserId(sysUserDo.userId)
-            val userBiometricDataVo = userDao.getUserBiometricData(sysUserDo.userId)
-            MainDomainData.userBiometricDataVo = userBiometricDataVo
+            val sysUserCharacteristicDos =
+                userRepository.getSysUserCharacteristicDo(sysUserDo.userId)
+            val userBiometricDataVo =
+                BeanUtils.copyList(sysUserCharacteristicDos, SysBiometricDataVo::class.java)
+            MainDomainData.userBiometricDataVo = userBiometricDataVo.toMutableList()
             MainDomainData.userCardList = userCardList
             logger.info("卡号数据:${userCardList}")
             MainDomainData.roleKeys = roleDatas.joinToString(",") { it.roleKey }
@@ -77,13 +83,16 @@ class UserLogic @Inject constructor(
         if (userId == null) {
             return LoginResultEnum.JOB_CARD_LOGIN_FAILED
         } else {
-            val sysUserDo = userDao.getUserInfoByUserId(userId)
+            val sysUserDo = userRepository.getUserInfoByUserId(userId.toLong())
             if (sysUserDo != null) {
                 MainDomainData.userInfo = sysUserDo
                 val userCardList = hardwareDao.getIsJobCardByUserId(sysUserDo.userId)
                 val roleDatas = roleDao.getRoleDataByUserId(sysUserDo.userId)
-                val userBiometricDataVo = userDao.getUserBiometricData(sysUserDo.userId)
-                MainDomainData.userBiometricDataVo = userBiometricDataVo
+                val sysUserCharacteristicDos =
+                    userRepository.getSysUserCharacteristicDo(sysUserDo.userId)
+                val userBiometricDataVo =
+                    BeanUtils.copyList(sysUserCharacteristicDos, SysBiometricDataVo::class.java)
+                MainDomainData.userBiometricDataVo = userBiometricDataVo.toMutableList()
                 MainDomainData.userCardList = userCardList
                 MainDomainData.roleKeys = roleDatas.joinToString(",") { it.roleKey }
                 MainDomainData.permissions =
@@ -98,11 +107,11 @@ class UserLogic @Inject constructor(
     }
 
     override fun getUserByUserId(userId: Long): SysUserDo? {
-        return userDao.getUserInfoByUserId(userId.toString())
+        return userRepository.getUserInfoByUserId(userId)
     }
 
     override fun updatePassword(userId: Long, password: String) {
-        userDao.updateUserPassword(userId, password)
+        userRepository.updatePassword(userId, password)
     }
 
     override fun updateUserInfo(
@@ -110,7 +119,7 @@ class UserLogic @Inject constructor(
         nickName: String,
         phone: String
     ) {
-        userDao.updateUserInfo(userId, nickName, phone)
+        userRepository.updateUserInfo(userId, nickName, phone)
     }
 
     override fun checkCard(cardNo: String): LoginResultEnum {
@@ -118,7 +127,7 @@ class UserLogic @Inject constructor(
         if (userId == null) {
             return LoginResultEnum.JOB_CARD_LOGIN_FAILED
         } else {
-            val sysUserDo = userDao.getUserInfoByUserId(userId)
+            val sysUserDo = userRepository.getUserInfoByUserId(userId.toLong())
             if (sysUserDo != null) {
                 return LoginResultEnum.JOB_CARD_LOGIN_SUCCESS
             }
@@ -128,7 +137,7 @@ class UserLogic @Inject constructor(
 
     override suspend fun loginWithFingerprint(fingerprint: String): LoginResultEnum =
         coroutineScope {
-            val fingerprintDataList = userDao.getFingerprintData()
+            val fingerprintDataList = userRepository.getFingerprintData()
             if (fingerprintDataList.isEmpty()) return@coroutineScope LoginResultEnum.FINGERPRINTER_VERIFY_FAILED
 
             /* ① 并发计算匹配分数 */
@@ -149,7 +158,7 @@ class UserLogic @Inject constructor(
             /* ③ 若匹配成功,加载用户信息 */
             if (bestMatch != null) {
                 val fpData = bestMatch.first
-                val sysUserDo = userDao.getUserInfoByUserId(fpData.userId.toString())
+                val sysUserDo = userRepository.getUserInfoByUserId(fpData.userId)
                 if (sysUserDo != null) {
                     // —— 缓存域数据 —— //
                     MainDomainData.userInfo = sysUserDo
@@ -161,8 +170,11 @@ class UserLogic @Inject constructor(
                         sysMenuDao.getPermissionsByRoleIds(
                             roleDao.getRoleDataByUserId(sysUserDo.userId).map { it.roleId }
                         )
-                    MainDomainData.userBiometricDataVo =
-                        userDao.getUserBiometricData(sysUserDo.userId)
+                    val sysUserCharacteristicDos =
+                        userRepository.getSysUserCharacteristicDo(sysUserDo.userId)
+                    val userBiometricDataVo =
+                        BeanUtils.copyList(sysUserCharacteristicDos, SysBiometricDataVo::class.java)
+                    MainDomainData.userBiometricDataVo = userBiometricDataVo.toMutableList()
 
                     logger.info("用户信息: {}", MainDomainData.userInfo)
                     logger.info("用户角色: {}", MainDomainData.roleKeys)
@@ -174,7 +186,7 @@ class UserLogic @Inject constructor(
         }
 
     override suspend fun checkFingerprint(fingerprint: String): LoginResultEnum = coroutineScope {
-        val fingerprintDataList = userDao.getFingerprintData()
+        val fingerprintDataList = userRepository.getFingerprintData()
         if (fingerprintDataList.isEmpty()) return@coroutineScope LoginResultEnum.FINGERPRINTER_VERIFY_FAILED
 
         /* ① 并发计算匹配分数 */
@@ -192,8 +204,6 @@ class UserLogic @Inject constructor(
             .filterNotNull()
             .maxByOrNull { it.second }    // second == score
         if (bestMatch != null) {
-            val fpData = bestMatch.first
-            val sysUserDo = userDao.getUserInfoByUserId(fpData.userId.toString())
             LoginResultEnum.FINGERPRINTER_VERIFY_SUCCESS
         } else {
             LoginResultEnum.FINGERPRINTER_VERIFY_FAILED
@@ -201,7 +211,7 @@ class UserLogic @Inject constructor(
     }
 
     override fun loginWithFace(face: String): LoginResultEnum {
-        val faceDataList = userDao.getFaceData()
+        val faceDataList = userRepository.getFaceData()
         if (faceDataList.isEmpty()) {
             return LoginResultEnum.FACE_VERIFY_FAILED
         }
@@ -216,13 +226,16 @@ class UserLogic @Inject constructor(
             }
         }
         if (userId != null) {
-            val sysUserDo = userDao.getUserInfoByUserId(userId)
+            val sysUserDo = userRepository.getUserInfoByUserId(userId.toLong())
             if (sysUserDo != null) {
                 MainDomainData.userInfo = sysUserDo
                 val userCardList = hardwareDao.getIsJobCardByUserId(sysUserDo.userId)
                 val roleDatas = roleDao.getRoleDataByUserId(sysUserDo.userId)
-                val userBiometricDataVo = userDao.getUserBiometricData(sysUserDo.userId)
-                MainDomainData.userBiometricDataVo = userBiometricDataVo
+                val sysUserCharacteristicDos =
+                    userRepository.getSysUserCharacteristicDo(sysUserDo.userId)
+                val userBiometricDataVo =
+                    BeanUtils.copyList(sysUserCharacteristicDos, SysBiometricDataVo::class.java)
+                MainDomainData.userBiometricDataVo = userBiometricDataVo.toMutableList()
                 MainDomainData.userCardList = userCardList
                 MainDomainData.roleKeys = roleDatas.joinToString(",") { it.roleKey }
                 MainDomainData.permissions =
@@ -243,7 +256,7 @@ class UserLogic @Inject constructor(
         if (userId == null) {
             return LoginResultEnum.FACE_VERIFY_FAILED
         }
-        val faceDataList = userDao.getFaceDataByUserId(userId)
+        val faceDataList = userRepository.getFaceDataByUserId(userId)
         if (faceDataList.isEmpty()) {
             return LoginResultEnum.FACE_VERIFY_FAILED
         }
@@ -268,25 +281,119 @@ class UserLogic @Inject constructor(
         current: Int,
         size: Int
     ): List<UserManageVo> {
-        return userDao.getUserManagerData(
-            userManageFilterData?.nickname,
-            userManageFilterData?.cardCode,
-            userManageFilterData?.workstationName,
-            userManageFilterData?.status,
-            current * size,
-            size
-        )
+        //1.根据分页获取用户信息
+        val sysUserDos = userRepository.getUserInfoPage(size, current * size)
+        //2.获取所有区域信息和绑定信息
+        val workstationDos = hardwareDao.getAllWorkstation()
+        val userWorkstationDos = hardwareDao.getAllUserWorkstations()
+        //3.获取所有角色信息和用户角色关联信息
+        val roleDos = roleDao.getAllRole()
+        val userRoleDos = roleDao.getAllUserRoles()
+        //4.获取所有卡片数据
+        val jobCardDos = hardwareDao.getAllJobCard()
+        val userManageVos = BeanUtils.copyList(sysUserDos, UserManageVo::class.java)
+        userManageVos.forEach { user ->
+            val userRoles = roleDos.filter {
+                it.roleId in userRoleDos.filter { it.userId == user.userId }.map { it.roleId }
+            }
+            user.roleKeys = userRoles.map { it.roleKey }
+            user.roleIds = userRoles.map { it.roleId }
+            user.roleNames = userRoles.map { it.roleName }
+            val userWorkstations = workstationDos.filter {
+                it.workstationId in userWorkstationDos.filter { it.userId == user.userId }
+                    .map { it.workstationId }
+            }
+            user.workstationIds = userWorkstations.map { it.workstationId }
+            user.workstationNames = userWorkstations.map { it.workstationName }
+            user.cardCodes = jobCardDos.filter { it.userId == user.userId }.map { it.cardCode }
+        }
+        return userManageVos.filter {
+            it.nickName.contains(userManageFilterData?.nickname ?: "") ||
+                    it.status == (userManageFilterData?.status ?: it.status) ||
+                    it.cardCodes.any {
+                        it?.contains(
+                            userManageFilterData?.cardCode ?: ""
+                        ) == true
+                    } ||
+                    it.workstationNames.any {
+                        it?.contains(
+                            userManageFilterData?.workstationName ?: ""
+                        ) == true
+                    }
+        }
     }
 
+
     override fun getJobUserDataByUserIdAndTicketId(
         ticketId: Long,
-        userIds: List<Long>
+        userIds: List<Long>,
+        userRole: String
     ): List<JobUserVo> {
-        return userDao.getJobUserDataByUserIdAndTicketId(ticketId, userIds)
+        //1.根据用户id获取用户数据
+        val sysUserDos = userRepository.getUserInfosByUserIds(userIds)
+        //2.获取所有区域信息和绑定信息
+        val workstationDos = hardwareDao.getAllWorkstation()
+        val userWorkstationDos = hardwareDao.getAllUserWorkstations()
+        //3.获取所有角色信息和用户角色关联信息
+        val roleDos = roleDao.getAllRole()
+        val userRoleDos = roleDao.getAllUserRoles()
+        //4.获取所有卡片数据
+        val jobCardDos = hardwareDao.getAllJobCard()
+        //5.根据作业票id获取用户数据
+        val jobTicketUsers = jobTicketRepository.getJobTicketUsersByTicketId(ticketId)
+        val needJobTicketUser =
+            jobTicketUsers.filter { it.userId in userIds && it.userRole == userRole }
+        //6.根据作业票id获取分组数据
+        val jobTicketGroups = jobTicketRepository.getJobTicketGroupsByTicketId(ticketId)
+        val userManageVos = BeanUtils.copyList(sysUserDos, JobUserVo::class.java)
+        userManageVos.forEach { user ->
+            val userRoles = roleDos.filter {
+                it.roleId in userRoleDos.filter { it.userId == user.userId }.map { it.roleId }
+            }
+            user.roleKeys = userRoles.map { it.roleKey }
+            user.roleIds = userRoles.map { it.roleId }
+            user.roleNames = userRoles.map { it.roleName }
+            val userWorkstations = workstationDos.filter {
+                it.workstationId in userWorkstationDos.filter { it.userId == user.userId }
+                    .map { it.workstationId }
+            }
+            user.workstationIds = userWorkstations.map { it.workstationId }
+            user.workstationNames = userWorkstations.map { it.workstationName }
+            user.cardCodes = jobCardDos.filter { it.userId == user.userId }.map { it.cardCode }
+            user.groupId = needJobTicketUser.find { it.userId == user.userId }?.groupId ?: 0
+            user.groupName = jobTicketGroups.find { it.id == user.groupId }?.groupName ?: ""
+        }
+        return userManageVos
     }
 
     override fun getAllUserDataWithWorkstation(workstationId: Long): List<UserManageVo> {
-        return userDao.getAllUserDataWithWorkstationId(workstationId)
+        //1.根据分页获取用户信息
+        val sysUserDos = userRepository.getAllUserInfos()
+        //2.获取所有区域信息和绑定信息
+        val workstationDos = hardwareDao.getAllWorkstation()
+        val userWorkstationDos = hardwareDao.getAllUserWorkstations()
+        //3.获取所有角色信息和用户角色关联信息
+        val roleDos = roleDao.getAllRole()
+        val userRoleDos = roleDao.getAllUserRoles()
+        //4.获取所有卡片数据
+        val jobCardDos = hardwareDao.getAllJobCard()
+        val userManageVos = BeanUtils.copyList(sysUserDos, UserManageVo::class.java)
+        userManageVos.forEach { user ->
+            val userRoles = roleDos.filter {
+                it.roleId in userRoleDos.filter { it.userId == user.userId }.map { it.roleId }
+            }
+            user.roleKeys = userRoles.map { it.roleKey }
+            user.roleIds = userRoles.map { it.roleId }
+            user.roleNames = userRoles.map { it.roleName }
+            val userWorkstations = workstationDos.filter {
+                it.workstationId in userWorkstationDos.filter { it.userId == user.userId }
+                    .map { it.workstationId }
+            }
+            user.workstationIds = userWorkstations.map { it.workstationId }
+            user.workstationNames = userWorkstations.map { it.workstationName }
+            user.cardCodes = jobCardDos.filter { it.userId == user.userId }.map { it.cardCode }
+        }
+        return userManageVos.filter { it.workstationIds.contains(workstationId) }
     }
 
     override fun addUserData(addUserDataVo: AddUserDataVo): Long {
@@ -295,11 +402,11 @@ class UserLogic @Inject constructor(
         sysUserDo.nickName = addUserDataVo.nickname
         sysUserDo.status = if (addUserDataVo.status) "0" else "2"
         sysUserDo.delFlag = "0"
-        return userDao.insert(sysUserDo)
+        return userRepository.insert(sysUserDo)
     }
 
-    override fun getUserByUserName(username: String): List<SysUserDo> {
-        return userDao.getUsersByUsername(username)
+    override fun getUserByUserName(username: String): SysUserDo? {
+        return userRepository.getUserInfoByUsername(username)
     }
 
     override fun updateUserData(userDataVo: UpdateUserDataVo) {
@@ -309,20 +416,20 @@ class UserLogic @Inject constructor(
         sysUserDo.nickName = userDataVo.nickname
         sysUserDo.status = if (userDataVo.status) "0" else "2"
         sysUserDo.delFlag = "0"
-        userDao.updateUserData(sysUserDo)
+        userRepository.updateUserData(sysUserDo)
     }
 
     override fun updateUser(sysUserDo: SysUserDo) {
-        userDao.updateUserData(sysUserDo)
+        userRepository.updateUserData(sysUserDo)
     }
 
     override fun deleteUserById(userIds: List<Long>) {
-        userDao.deleteUserByIds(userIds)
+        userRepository.deleteUserByIds(userIds)
     }
 
     override fun removeAdminUser() {
-        val adminUserIds = userDao.getUsersByRoleKey(RoleEnum.ADMIN.roleKey)
-        userDao.deleteUserByIds(adminUserIds)
+        val adminUserIds = userRepository.getUserIdsByRoleKey(RoleEnum.ADMIN.roleKey)
+        userRepository.deleteUserByIds(adminUserIds)
         roleDao.deleteUserRoleByUserIds(adminUserIds)
     }
 
@@ -332,7 +439,7 @@ class UserLogic @Inject constructor(
         sysUserDo.nickName = "管理员"
         sysUserDo.password = BCryptUtils.encryptPassword(password)
         sysUserDo.status = "0"
-        val userId = userDao.insert(sysUserDo)
+        val userId = userRepository.insert(sysUserDo)
         val roleId = roleDao.getRoleDataByRoleKey(RoleEnum.ADMIN.roleKey)
         val userRole = SysUserRole()
         userRole.userId = userId
@@ -341,59 +448,76 @@ class UserLogic @Inject constructor(
     }
 
     override fun getAllUsers(): List<SysUserDo> {
-        return userDao.getAllUsers()
+        return userRepository.getAllUserInfos()
     }
 
     override fun getAllUsersWithRole(): List<SysUserVo> {
-        return userDao.getAllUsersWithRole()
+        val sysUserDos = userRepository.getAllUserInfos()
+        val roleDatas = roleDao.getAllRole()
+        val userRoleDatas = roleDao.getAllUserRoles()
+        val userVos = BeanUtils.copyList(sysUserDos, SysUserVo::class.java)
+        userVos.forEach { user ->
+            val userRoles = roleDatas.filter {
+                it.roleId in userRoleDatas.filter { it.userId == user.userId }.map { it.roleId }
+            }
+            user.roleKeys = userRoles.map { it.roleKey }
+        }
+        return userVos
     }
 
     override fun getFingerprintDataByUserId(userId: Long?): MutableList<SysBiometricDataVo> {
         if (userId == null) {
             return mutableListOf()
         }
-        return userDao.getFingerprintDataByUserId(userId).toMutableList()
+        val sysUserCharacteristicDos = userRepository.getFingerprintDataByUserId(userId)
+        val userBiometricDataVo =
+            BeanUtils.copyList(sysUserCharacteristicDos, SysBiometricDataVo::class.java)
+        return userBiometricDataVo.toMutableList()
     }
 
     override fun getFaceDataByUserId(userId: Long?): MutableList<SysBiometricDataVo> {
         if (userId == null) {
             return mutableListOf()
         }
-        return userDao.getFaceDataByUserId(userId).toMutableList()
+        val sysUserCharacteristicDos = userRepository.getFaceDataByUserId(userId)
+        val userBiometricDataVo =
+            BeanUtils.copyList(sysUserCharacteristicDos, SysBiometricDataVo::class.java)
+        return userBiometricDataVo.toMutableList()
     }
 
     override fun deleteFingerprintByIds(fingerprintIds: List<Long>) {
-        userDao.deleteFingerprintByIds(fingerprintIds)
+        userRepository.deleteFingerprintByIds(fingerprintIds)
     }
 
     override fun saveUserCharacteristic(sysUserCharacteristicDo: SysUserCharacteristicDo): Long {
-        return userDao.saveUserCharacteristic(sysUserCharacteristicDo)
+        return userRepository.saveUserCharacteristic(sysUserCharacteristicDo)
     }
 
     override fun deleteFaceDataByUserId(userId: Long) {
-        userDao.getFaceDataByUserId(userId).forEach {
-            it.content.deleteIfExists()
-        }
-        userDao.deleteFaceDataByUserId(userId)
+        userRepository.deleteFaceDataByUserId(userId)
     }
 
     override fun getUserBiometricDataByUserIds(userIds: List<Long>): List<SysBiometricDataVo> {
-        return userDao.getUserBiometricDataByUserIds(userIds)
+        val sysUserCharacteristicDos = userRepository.getSysUserCharacteristicDosByUserIds(userIds)
+        return BeanUtils.copyList(sysUserCharacteristicDos, SysBiometricDataVo::class.java)
     }
 
     override fun getAllFaceData(): List<SysUserCharacteristicDo> {
-        return userDao.getFaceData()
+        return userRepository.getFaceData()
     }
 
     override fun loginWithUserId(userId: Long?): LoginResultEnum {
         return if (userId != null) {
-            val sysUserDo = userDao.getUserInfoByUserId(userId.toString())
+            val sysUserDo = userRepository.getUserInfoByUserId(userId)
             if (sysUserDo != null) {
                 MainDomainData.userInfo = sysUserDo
                 val userCardList = hardwareDao.getIsJobCardByUserId(sysUserDo.userId)
                 val roleDatas = roleDao.getRoleDataByUserId(sysUserDo.userId)
-                val userBiometricDataVo = userDao.getUserBiometricData(sysUserDo.userId)
-                MainDomainData.userBiometricDataVo = userBiometricDataVo
+                val sysUserCharacteristicDos =
+                    userRepository.getSysUserCharacteristicDo(sysUserDo.userId)
+                val userBiometricDataVo =
+                    BeanUtils.copyList(sysUserCharacteristicDos, SysBiometricDataVo::class.java)
+                MainDomainData.userBiometricDataVo = userBiometricDataVo.toMutableList()
                 MainDomainData.userCardList = userCardList
                 MainDomainData.roleKeys = roleDatas.joinToString(",") { it.roleKey }
                 MainDomainData.permissions =

+ 19 - 0
data/src/main/java/com/grkj/data/repository/JobTicketRepository.kt

@@ -0,0 +1,19 @@
+package com.grkj.data.repository
+
+import com.grkj.data.model.dos.IsJobTicketGroup
+import com.grkj.data.model.dos.IsJobTicketUser
+
+/**
+ * 作业票仓储
+ */
+interface JobTicketRepository {
+    /**
+     * 根据作业票id获取作业票用户
+     */
+    fun getJobTicketUsersByTicketId(ticketId: Long): List<IsJobTicketUser>
+
+    /**
+     * 根据作业票id获取分组数据
+     */
+    fun getJobTicketGroupsByTicketId(ticketId: Long): List<IsJobTicketGroup>
+}

+ 109 - 0
data/src/main/java/com/grkj/data/repository/UserRepository.kt

@@ -0,0 +1,109 @@
+package com.grkj.data.repository
+
+import com.grkj.data.model.dos.SysUserCharacteristicDo
+import com.grkj.data.model.dos.SysUserDo
+
+/**
+ * 用户仓储层
+ */
+interface UserRepository {
+    /**
+     * 根据用户名获取用户数据
+     */
+    fun getUserInfoByUsername(username: String): SysUserDo?
+
+    /**
+     * 获取用户特征数据
+     */
+    fun getSysUserCharacteristicDo(userId: Long): List<SysUserCharacteristicDo>
+
+    /**
+     * 根据用户id获取用户信息
+     */
+    fun getUserInfoByUserId(userId: Long): SysUserDo?
+
+    /**
+     * 根据用户id更新密码
+     */
+    fun updatePassword(userId: Long, password: String)
+
+    /**
+     * 根据用户id更新用户信息
+     */
+    fun updateUserInfo(userId: Long, nickName: String, phone: String)
+
+    /**
+     * 获取指纹数据
+     */
+    fun getFingerprintData(): List<SysUserCharacteristicDo>
+
+    /**
+     * 获取人脸数据
+     */
+    fun getFaceData(): List<SysUserCharacteristicDo>
+
+    /**
+     * 根据用户id获取人脸数据
+     */
+    fun getFaceDataByUserId(userId: Long): List<SysUserCharacteristicDo>
+
+    /**
+     * 获取用户信息分页
+     */
+    fun getUserInfoPage(size: Int, offset: Int): List<SysUserDo>
+
+    /**
+     * 根据用户id获取用户信息
+     */
+    fun getUserInfosByUserIds(userIds: List<Long>): List<SysUserDo>
+
+    /**
+     * 获取所有用户数据
+     */
+    fun getAllUserInfos(): List<SysUserDo>
+
+    /**
+     * 插入数据
+     */
+    fun insert(sysUserDo: SysUserDo): Long
+
+    /**
+     * 更新数据
+     */
+    fun updateUserData(sysUserDo: SysUserDo)
+
+    /**
+     * 根据用户id删除用户
+     */
+    fun deleteUserByIds(userIds: List<Long>)
+
+    /**
+     * 根据角色获取用户列表
+     */
+    fun getUserIdsByRoleKey(roleKey: String): List<Long>
+
+    /**
+     * 根据用户id获取指纹数据
+     */
+    fun getFingerprintDataByUserId(userId: Long): List<SysUserCharacteristicDo>
+
+    /**
+     * 根据指纹数据id删除指纹
+     */
+    fun deleteFingerprintByIds(fingerprintIds: List<Long>)
+
+    /**
+     * 保存用户特征数据
+     */
+    fun saveUserCharacteristic(sysUserCharacteristicDo: SysUserCharacteristicDo): Long
+
+    /**
+     * 根据用户id删除人脸数据
+     */
+    fun deleteFaceDataByUserId(userId: Long)
+
+    /**
+     * 根据用户id列表获取特征数据
+     */
+    fun getSysUserCharacteristicDosByUserIds(userIds: List<Long>): List<SysUserCharacteristicDo>
+}

+ 24 - 0
data/src/main/java/com/grkj/data/repository/impl/JobTicketRepositoryImpl.kt

@@ -0,0 +1,24 @@
+package com.grkj.data.repository.impl
+
+import com.grkj.data.dao.JobTicketDao
+import com.grkj.data.model.dos.IsJobTicketGroup
+import com.grkj.data.model.dos.IsJobTicketUser
+import com.grkj.data.repository.BaseRepository
+import com.grkj.data.repository.JobTicketRepository
+import javax.inject.Inject
+
+/**
+ * 作业票仓储实现
+ */
+class JobTicketRepositoryImpl @Inject constructor(
+    private val jobTicketDao: JobTicketDao
+) : BaseRepository(), JobTicketRepository {
+    override fun getJobTicketUsersByTicketId(ticketId: Long): List<IsJobTicketUser> {
+        return jobTicketDao.getJobTicketUsersByTicketId(ticketId)
+    }
+
+    override fun getJobTicketGroupsByTicketId(ticketId: Long): List<IsJobTicketGroup> {
+        return jobTicketDao.getJobTicketGroupsByTicketId(ticketId)
+    }
+
+}

+ 104 - 0
data/src/main/java/com/grkj/data/repository/impl/UserRepositoryImpl.kt

@@ -0,0 +1,104 @@
+package com.grkj.data.repository.impl
+
+import com.grkj.data.dao.UserDao
+import com.grkj.data.model.dos.SysUserCharacteristicDo
+import com.grkj.data.model.dos.SysUserDo
+import com.grkj.data.repository.BaseRepository
+import com.grkj.data.repository.UserRepository
+import javax.inject.Inject
+
+/**
+ * 用户仓储层实现
+ */
+class UserRepositoryImpl @Inject constructor(
+    val userDao: UserDao
+) : BaseRepository(), UserRepository {
+
+    override fun getUserInfoByUsername(username: String): SysUserDo? {
+        return userDao.getUserInfoByUsername(username)
+    }
+
+    override fun getUserInfoByUserId(userId: Long): SysUserDo? {
+        return userDao.getUserInfoByUserId(userId)
+    }
+
+    override fun updateUserInfo(
+        userId: Long,
+        nickName: String,
+        phone: String
+    ) {
+        userDao.updateUserInfo(userId, nickName, phone)
+    }
+
+    override fun getFaceData(): List<SysUserCharacteristicDo> {
+        return userDao.getFaceData()
+    }
+
+    override fun getFaceDataByUserId(userId: Long): List<SysUserCharacteristicDo> {
+        return userDao.getFaceDataByUserId(userId)
+    }
+
+    override fun getUserInfosByUserIds(userIds: List<Long>): List<SysUserDo> {
+        return userDao.getUserInfosByUserIds(userIds)
+    }
+
+    override fun getAllUserInfos(): List<SysUserDo> {
+        return userDao.getAllUsers()
+    }
+
+    override fun insert(sysUserDo: SysUserDo): Long {
+        return userDao.insert(sysUserDo)
+    }
+
+    override fun deleteUserByIds(userIds: List<Long>) {
+        userDao.deleteUserByIds(userIds)
+    }
+
+    override fun getUserIdsByRoleKey(roleKey: String): List<Long> {
+        return userDao.getUsersByRoleKey(roleKey)
+    }
+
+    override fun getFingerprintDataByUserId(userId: Long): List<SysUserCharacteristicDo> {
+        return userDao.getFingerprintDataByUserId(userId)
+    }
+
+    override fun saveUserCharacteristic(sysUserCharacteristicDo: SysUserCharacteristicDo): Long {
+        return userDao.saveUserCharacteristic(sysUserCharacteristicDo)
+    }
+
+    override fun deleteFaceDataByUserId(userId: Long) {
+        userDao.deleteFaceDataByUserId(userId)
+    }
+
+    override fun getSysUserCharacteristicDosByUserIds(userIds: List<Long>): List<SysUserCharacteristicDo> {
+        return userDao.getUserBiometricDataByUserIds(userIds)
+    }
+
+    override fun deleteFingerprintByIds(fingerprintIds: List<Long>) {
+        userDao.deleteFingerprintByIds(fingerprintIds)
+    }
+
+    override fun updateUserData(sysUserDo: SysUserDo) {
+        userDao.updateUserData(sysUserDo)
+    }
+
+    override fun getUserInfoPage(
+        size: Int,
+        offset: Int
+    ): List<SysUserDo> {
+        return userDao.getUserInfoPage(size, offset)
+    }
+
+    override fun getFingerprintData(): List<SysUserCharacteristicDo> {
+        return userDao.getFingerprintData()
+    }
+
+    override fun updatePassword(userId: Long, password: String) {
+        userDao.updateUserPassword(userId, password)
+    }
+
+    override fun getSysUserCharacteristicDo(userId: Long): List<SysUserCharacteristicDo> {
+        return userDao.getSysUserCharacteristicDo(userId)
+    }
+
+}

+ 1 - 1
gradle/libs.versions.toml

@@ -11,7 +11,7 @@ material = "1.10.0"
 activity = "1.8.0"
 constraintlayout = "2.1.4"
 jetbrainsKotlinJvm = "2.0.21"
-sikextension = "1.1.64"
+sikextension = "1.1.66"
 sikcamera = "1.0.11"
 sikcronjob = "1.0.3"
 sikfontmanager = "1.0.2"