Browse Source

feat(数据管理)
- 新增数据库备份Worker
- 新增步骤动作枚举
- 调整钥匙归还逻辑,增加强制上传数据选项

refactor(用户)
- 优化指纹登录和指纹校验逻辑,提高匹配效率
- 调整设置指纹界面的数据展示和删除逻辑

fix(流程)
- 修复流程导入时SHA256校验不一致的问题
- 修复作业票待办事项组装逻辑,确保不同类型的步骤能正确生成和关联

style(提示)
- 优化解压进度的文本展示格式
- 调整部分中英文提示文案

周文健 3 months ago
parent
commit
b9c2fe2c08

+ 1 - 1
app/src/main/java/com/grkj/iscs/features/main/fragment/home/HomeFragment.kt

@@ -247,7 +247,7 @@ class HomeFragment : BaseFragment<FragmentHomeBinding>() {
             TextDropDownDialog.showSingle(
                 workflowModes.map {
                     TextDropDownDialog.SimpleTextDropDownEntity(
-                        dataId = it.modeId, dataText = it.modeTitle.toString()
+                        dataId = it.modeId, dataText = it.modeName.toString()
                     )
                 }.toMutableList().apply {
                     add(

+ 1 - 1
app/src/main/java/com/grkj/iscs/features/main/fragment/job_manage/CreateJobFragment.kt

@@ -628,7 +628,7 @@ class CreateJobFragment : BaseFormFragment<FragmentCreateJobBinding>() {
             viewModel.workflowModes.map {
                 TextDropDownDialog.SimpleTextDropDownEntity(
                     dataId = it.modeId,
-                    dataText = it.modeTitle.toString()
+                    dataText = it.modeName.toString()
                 )
             }, binding.lockModeTv
         ) {

+ 1 - 1
app/src/main/java/com/grkj/iscs/features/main/fragment/job_manage/CreateSopFragment.kt

@@ -505,7 +505,7 @@ class CreateSopFragment : BaseFormFragment<FragmentCreateSopBinding>() {
         TextDropDownDialog.showSingle(
             viewModel.workflowModes.map {
                 TextDropDownDialog.SimpleTextDropDownEntity(
-                    dataId = it.modeId, dataText = it.modeTitle.toString()
+                    dataId = it.modeId, dataText = it.modeName.toString()
                 )
             }, binding.lockModeTv
         ) {

+ 2 - 2
app/src/main/java/com/grkj/iscs/features/main/fragment/job_manage/EditJobFragment.kt

@@ -427,7 +427,7 @@ class EditJobFragment : BaseFormFragment<FragmentEditJobBinding>() {
                     viewModel.workflowModes.find { it.modeId == selectedModeId }?.isColockSupport == true
                 binding.lockModeTv.text =
                     viewModel.workflowModes.find { it.modeId == selectedModeId }
-                        ?.modeTitle
+                        ?.modeName
                 binding.jobNameEt.setText(viewModel.jobTicketData?.ticketName)
                 selectedPointData = viewModel.jobPointsData.groupBy { it.groupId to it.groupName }
                     .map {
@@ -536,7 +536,7 @@ class EditJobFragment : BaseFormFragment<FragmentEditJobBinding>() {
         TextDropDownDialog.showSingle(
             viewModel.workflowModes.map {
                 TextDropDownDialog.SimpleTextDropDownEntity(
-                    dataId = it.modeId, dataText = it.modeTitle.toString()
+                    dataId = it.modeId, dataText = it.modeName.toString()
                 )
             }, binding.lockModeTv
         ) {

+ 2 - 2
app/src/main/java/com/grkj/iscs/features/main/fragment/job_manage/EditSopFragment.kt

@@ -396,7 +396,7 @@ class EditSopFragment : BaseFormFragment<FragmentEditSopBinding>() {
                 binding.workstationTv.text = viewModel.selectedSopData?.workstationName
                 binding.sopNameEt.setText(viewModel.selectedSopData?.sopName)
                 binding.lockModeTv.text = viewModel.workflowModes
-                    .find { it.modeId == selectedModeId }?.modeTitle
+                    .find { it.modeId == selectedModeId }?.modeName
                 selectedLockerData = viewModel.selectedSopUserData.filter {
                     it.roleKeys.contains(
                         RoleEnum.JTLOCKER.roleKey
@@ -505,7 +505,7 @@ class EditSopFragment : BaseFormFragment<FragmentEditSopBinding>() {
             viewModel.workflowModes.map {
                 TextDropDownDialog.SimpleTextDropDownEntity(
                     dataId = it.modeId,
-                    dataText = it.modeTitle.toString()
+                    dataText = it.modeName.toString()
                 )
             }, binding.lockModeTv
         ) {

+ 17 - 4
app/src/main/java/com/grkj/iscs/features/main/viewmodel/WorkflowViewModel.kt

@@ -44,7 +44,7 @@ class WorkflowViewModel @Inject constructor(val workflowRepository: IWorkflowRep
      */
     fun getData(): LiveData<Boolean> {
         return liveData(Dispatchers.IO) {
-            workflowModeData = workflowRepository.getWorkflowModes()
+            workflowModeData = workflowRepository.getAllWorkflowModes()
                 .mapNotNull { BeanUtils.copyProperties(it, WorkflowModeVo::class.java) }
             emit(true)
         }
@@ -155,13 +155,25 @@ class WorkflowViewModel @Inject constructor(val workflowRepository: IWorkflowRep
                                             object :
                                                 TypeToken<List<WorkflowModeImport>>() {}.type
                                         )
-                                    workflowImportData.forEach { workflowImportBean ->
+                                    val existsWorkflowModes =
+                                        workflowRepository.getAllWorkflowModes()
+                                    val importData =
+                                        workflowImportData.filter { it.modeName !in existsWorkflowModes.map { it.modeName } }
+                                    if (importData.isEmpty()) {
+                                        showTip(
+                                            CommonUtils.getStr(R.string.workflow_already_exists)
+                                                .toString()
+                                        )
+                                        return
+                                    }
+                                    importData.forEach { workflowImportBean ->
                                         BeanUtils.copyProperties(
                                             workflowImportBean,
                                             WorkflowMode::class.java
                                         )?.let {
                                             it.isPreset = false
-                                            val modeId = workflowRepository.insertWorkflowMode(it)
+                                            val modeId =
+                                                workflowRepository.insertWorkflowMode(it)
                                             workflowImportBean.stepList.mapNotNull {
                                                 BeanUtils.copyProperties(
                                                     it,
@@ -173,7 +185,8 @@ class WorkflowViewModel @Inject constructor(val workflowRepository: IWorkflowRep
                                         }
                                         LoadingEvent.sendLoadingEvent()
                                         TipDialog.showSuccess(
-                                            CommonUtils.getStr(R.string.import_success).toString()
+                                            CommonUtils.getStr(R.string.import_success)
+                                                .toString()
                                         )
                                     }
                                 } catch (e: Exception) {

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

@@ -533,5 +533,6 @@
     <string name="please_input_correct_phone">Please input correct phone</string>
     <string name="import_success">Import success</string>
     <string name="preset_workflow_can_not_delete">Preset workflow mode can not delete</string>
+    <string name="workflow_already_exists">Workflow already existss</string>
 
 </resources>

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

@@ -533,5 +533,6 @@
     <string name="please_input_correct_phone">请输入正确的手机号</string>
     <string name="import_success">导入成功</string>
     <string name="preset_workflow_can_not_delete">预设流程模式无法删除</string>
+    <string name="workflow_already_exists">流程模式已存在</string>
 
 </resources>

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

@@ -536,5 +536,6 @@
     <string name="please_input_correct_phone">请输入正确的手机号</string>
     <string name="import_success">导入成功</string>
     <string name="preset_workflow_can_not_delete">预设流程模式无法删除</string>
+    <string name="workflow_already_exists">流程模式已存在</string>
 
 </resources>

+ 9 - 1
data/src/main/java/com/grkj/data/dao/WorkflowStepDao.kt

@@ -78,9 +78,17 @@ interface WorkflowStepDao {
     )
     fun isUnlockBeforeLock(modeId: Long): Boolean
 
+    /**
+     * 获取开启的流程模式
+     */
+    @Query("select * from is_workflow_mode where deleted = 0 and status = 1")
+    fun getWorkflowModes(): List<WorkflowMode>
 
+    /**
+     * 获取所有流程模式
+     */
     @Query("select * from is_workflow_mode where deleted = 0")
-    fun getWorkflowModes(): List<WorkflowMode>
+    fun getAllWorkflowModes(): List<WorkflowMode>
 
     @Query("select * from is_workflow_mode where mode_id = :modeId")
     fun getWorkflowModeByModeId(modeId: Long): WorkflowMode?

+ 21 - 0
data/src/main/java/com/grkj/data/enums/LoginResultEnum.kt

@@ -0,0 +1,21 @@
+package com.grkj.data.enums
+
+/**
+ * 登录结果枚举
+ */
+enum class LoginResultEnum {
+    //------------指纹登录相关结果---------------
+    FINGERPRINTER_VERIFY_SUCCESS,
+    FINGERPRINTER_VERIFY_FAILED,
+    //------------人脸登录相关结果---------------
+    FACE_VERIFY_SUCCESS,
+    FACE_VERIFY_FAILED,
+    //------------账号密码登录相关结果---------------
+    USERNAME_PASSWORD_LOGIN_SUCCESS,
+    USERNAME_OR_PASSWORD_ERROR,
+    USERNAME_PASSWORD_NOT_EXISTS,
+    //------------工卡登录相关结果---------------
+    JOB_CARD_LOGIN_SUCCESS,
+    JOB_CARD_LOGIN_FAILED
+    ;
+}

+ 8 - 7
data/src/main/java/com/grkj/data/repository/IUserRepository.kt

@@ -1,5 +1,6 @@
 package com.grkj.data.repository
 
+import com.grkj.data.enums.LoginResultEnum
 import com.grkj.data.model.dos.SysUserCharacteristicDo
 import com.grkj.data.model.dos.SysUserDo
 import com.grkj.data.model.vo.AddUserDataVo
@@ -17,37 +18,37 @@ interface IUserRepository {
     /**
      * 账号密码登录
      */
-    fun loginWithAccount(username: String, password: String): Boolean
+    fun loginWithAccount(username: String, password: String): LoginResultEnum
 
     /**
      * 刷卡登录
      */
-    fun loginWithCard(cardNo: String): Boolean
+    fun loginWithCard(cardNo: String): LoginResultEnum
 
     /**
      * 检查卡片
      */
-    fun checkCard(cardNo: String): Boolean
+    fun checkCard(cardNo: String): LoginResultEnum
 
     /**
      * 指纹登录
      */
-     suspend fun loginWithFingerprint(fingerprint: String): Boolean
+     suspend fun loginWithFingerprint(fingerprint: String): LoginResultEnum
 
     /**
      * 检查指纹
      */
-    suspend fun checkFingerprint(fingerprint: String): Boolean
+    suspend fun checkFingerprint(fingerprint: String): LoginResultEnum
 
     /**
      * 人脸登录
      */
-    fun loginWithFace(face: String): Boolean
+    fun loginWithFace(face: String): LoginResultEnum
 
     /**
      * 检查人脸
      */
-    fun checkFace(face: String): Boolean
+    fun checkFace(face: String): LoginResultEnum
 
     /**
      * 退出登录

+ 6 - 1
data/src/main/java/com/grkj/data/repository/IWorkflowRepository.kt

@@ -45,6 +45,11 @@ interface IWorkflowRepository {
      */
     fun getWorkflowModes(): List<WorkflowMode>
 
+    /**
+     * 获取所有流程模式
+     */
+    fun getAllWorkflowModes(): List<WorkflowMode>
+
     /**
      * 更新流程模式
      */
@@ -58,7 +63,7 @@ interface IWorkflowRepository {
     /**
      * 添加流程模式
      */
-    fun insertWorkflowMode(workflowMode: WorkflowMode):Long
+    fun insertWorkflowMode(workflowMode: WorkflowMode): Long
 
     /**
      * 添加步骤

+ 2 - 1
data/src/main/java/com/grkj/data/repository/impl/network/NetworkUserRepository.kt

@@ -1,5 +1,6 @@
 package com.grkj.data.repository.impl.network
 
+import com.grkj.data.enums.LoginResultEnum
 import com.grkj.data.model.dos.SysUserCharacteristicDo
 import com.grkj.data.model.dos.SysUserDo
 import com.grkj.data.model.vo.AddUserDataVo
@@ -46,7 +47,7 @@ class NetworkUserRepository @Inject constructor() : BaseRepository(), IUserRepos
         TODO("Not yet implemented")
     }
 
-    override fun checkFace(face: String): Boolean {
+    override fun checkFace(face: String): LoginResultEnum {
         TODO("Not yet implemented")
     }
 

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

@@ -1233,7 +1233,7 @@ class JobTicketRepository @Inject constructor(
         workstationId: Long,
         jobName: String
     ): Long {
-        val modeId = workflowStepDao.getWorkflowModes().find { it.modeTitle == "解锁" }?.modeId!!
+        val modeId = workflowStepDao.getWorkflowModes().find { it.modeName == "解锁" }?.modeId!!
         val isJobTicket = IsJobTicket()
         isJobTicket.ticketName = jobName
         isJobTicket.workstationId = workstationId
@@ -1320,7 +1320,7 @@ class JobTicketRepository @Inject constructor(
         workstationId: Long,
         jobName: String
     ): Long {
-        val modeId = workflowStepDao.getWorkflowModes().find { it.modeTitle == "解锁" }?.modeId!!
+        val modeId = workflowStepDao.getWorkflowModes().find { it.modeName == "解锁" }?.modeId!!
         val isJobTicket = IsJobTicket()
         isJobTicket.ticketName = jobName
         isJobTicket.workstationId = workstationId

+ 75 - 72
data/src/main/java/com/grkj/data/repository/impl/standard/UserRepository.kt

@@ -5,6 +5,7 @@ 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
 import com.grkj.data.enums.RoleFunctionalPermissionsEnum
 import com.grkj.data.model.dos.SysUserCharacteristicDo
@@ -43,10 +44,10 @@ class UserRepository @Inject constructor(
 
     override fun loginWithAccount(
         username: String, password: String
-    ): Boolean {
+    ): LoginResultEnum {
         val sysUserDo = userDao.getUserInfoByUsername(username)
         if (sysUserDo == null) {
-            return false
+            return LoginResultEnum.USERNAME_PASSWORD_NOT_EXISTS
         }
         val matched = BCryptUtils.matchPassword(password, sysUserDo.password ?: "")
         logger.info("密码是否匹配:${password},${sysUserDo.password},${matched}")
@@ -66,14 +67,15 @@ class UserRepository @Inject constructor(
             logger.info("用户信息:{}", MainDomainData.userInfo.toString())
             logger.info("用户角色:{}", MainDomainData.roleKeys)
             logger.info("用户权限:{}", MainDomainData.permissions)
+            return LoginResultEnum.USERNAME_PASSWORD_LOGIN_SUCCESS
         }
-        return matched
+        return LoginResultEnum.USERNAME_OR_PASSWORD_ERROR
     }
 
-    override fun loginWithCard(cardnfc: String): Boolean {
+    override fun loginWithCard(cardnfc: String): LoginResultEnum {
         val userId = hardwareDao.getUserIdByCardNfc(cardnfc)?.toString()
         if (userId == null) {
-            return false
+            return LoginResultEnum.JOB_CARD_LOGIN_FAILED
         } else {
             val sysUserDo = userDao.getUserInfoByUserId(userId)
             if (sysUserDo != null) {
@@ -89,8 +91,9 @@ class UserRepository @Inject constructor(
                 logger.info("用户信息:{}", MainDomainData.userInfo.toString())
                 logger.info("用户角色:{}", MainDomainData.roleKeys)
                 logger.info("用户权限:{}", MainDomainData.permissions)
+                return LoginResultEnum.JOB_CARD_LOGIN_SUCCESS
             }
-            return userDao.getUserInfoByUserId(userId) != null
+            return LoginResultEnum.JOB_CARD_LOGIN_FAILED
         }
     }
 
@@ -110,61 +113,69 @@ class UserRepository @Inject constructor(
         userDao.updateUserInfo(userId, nickName, phone)
     }
 
-    override fun checkCard(cardNo: String): Boolean {
+    override fun checkCard(cardNo: String): LoginResultEnum {
         val userId = hardwareDao.getUserIdByCardNfc(cardNo)?.toString()
-        return userId?.let {
+        if (userId == null) {
+            return LoginResultEnum.JOB_CARD_LOGIN_FAILED
+        } else {
             val sysUserDo = userDao.getUserInfoByUserId(userId)
-            sysUserDo != null
-        } == true
-    }
-
-    override suspend fun loginWithFingerprint(fingerprint: String): Boolean = coroutineScope {
-        val fingerprintDataList = userDao.getFingerprintData()
-        if (fingerprintDataList.isEmpty()) return@coroutineScope false
-
-        /* ① 并发计算匹配分数 */
-        val deferred = fingerprintDataList.map { fpData ->
-            async(Dispatchers.Default) {
-                if (fpData.content.isEmpty()) return@async null
-                val score =
-                    BiometricVerifier.verifyFingerprint(fingerprint, fpData.content) // suspend
-                if (score >= 40) Pair(fpData, score) else null
+            if (sysUserDo != null) {
+                return LoginResultEnum.JOB_CARD_LOGIN_SUCCESS
             }
         }
+        return LoginResultEnum.JOB_CARD_LOGIN_FAILED
+    }
 
-        /* ② 找到最高分(若无满足阈值则 null) */
-        val bestMatch = deferred.awaitAll()
-            .filterNotNull()
-            .maxByOrNull { it.second }    // second == score
+    override suspend fun loginWithFingerprint(fingerprint: String): LoginResultEnum =
+        coroutineScope {
+            val fingerprintDataList = userDao.getFingerprintData()
+            if (fingerprintDataList.isEmpty()) return@coroutineScope LoginResultEnum.FINGERPRINTER_VERIFY_FAILED
+
+            /* ① 并发计算匹配分数 */
+            val deferred = fingerprintDataList.map { fpData ->
+                async(Dispatchers.Default) {
+                    if (fpData.content.isEmpty()) return@async null
+                    val score =
+                        BiometricVerifier.verifyFingerprint(fingerprint, fpData.content) // suspend
+                    if (score >= 40) Pair(fpData, score) else null
+                }
+            }
 
-        /* ③ 若匹配成功,加载用户信息 */
-        if (bestMatch != null) {
-            val fpData = bestMatch.first
-            val sysUserDo = userDao.getUserInfoByUserId(fpData.userId.toString())
-            if (sysUserDo != null) {
-                // —— 缓存域数据 —— //
-                MainDomainData.userInfo = sysUserDo
-                MainDomainData.userCardList = hardwareDao.getIsJobCardByUserId(sysUserDo.userId)
-                MainDomainData.roleKeys =
-                    roleDao.getRoleDataByUserId(sysUserDo.userId).joinToString(",") { it.roleKey }
-                MainDomainData.permissions =
-                    sysMenuDao.getPermissionsByRoleIds(
-                        roleDao.getRoleDataByUserId(sysUserDo.userId).map { it.roleId }
-                    )
-                MainDomainData.userBiometricDataVo = userDao.getUserBiometricData(sysUserDo.userId)
-
-                logger.info("用户信息: {}", MainDomainData.userInfo)
-                logger.info("用户角色: {}", MainDomainData.roleKeys)
-                logger.info("用户权限: {}", MainDomainData.permissions)
-                return@coroutineScope true
+            /* ② 找到最高分(若无满足阈值则 null) */
+            val bestMatch = deferred.awaitAll()
+                .filterNotNull()
+                .maxByOrNull { it.second }    // second == score
+
+            /* ③ 若匹配成功,加载用户信息 */
+            if (bestMatch != null) {
+                val fpData = bestMatch.first
+                val sysUserDo = userDao.getUserInfoByUserId(fpData.userId.toString())
+                if (sysUserDo != null) {
+                    // —— 缓存域数据 —— //
+                    MainDomainData.userInfo = sysUserDo
+                    MainDomainData.userCardList = hardwareDao.getIsJobCardByUserId(sysUserDo.userId)
+                    MainDomainData.roleKeys =
+                        roleDao.getRoleDataByUserId(sysUserDo.userId)
+                            .joinToString(",") { it.roleKey }
+                    MainDomainData.permissions =
+                        sysMenuDao.getPermissionsByRoleIds(
+                            roleDao.getRoleDataByUserId(sysUserDo.userId).map { it.roleId }
+                        )
+                    MainDomainData.userBiometricDataVo =
+                        userDao.getUserBiometricData(sysUserDo.userId)
+
+                    logger.info("用户信息: {}", MainDomainData.userInfo)
+                    logger.info("用户角色: {}", MainDomainData.roleKeys)
+                    logger.info("用户权限: {}", MainDomainData.permissions)
+                    return@coroutineScope LoginResultEnum.FINGERPRINTER_VERIFY_SUCCESS
+                }
             }
+            LoginResultEnum.FINGERPRINTER_VERIFY_FAILED
         }
-        false
-    }
 
-    override suspend fun checkFingerprint(fingerprint: String): Boolean = coroutineScope {
+    override suspend fun checkFingerprint(fingerprint: String): LoginResultEnum = coroutineScope {
         val fingerprintDataList = userDao.getFingerprintData()
-        if (fingerprintDataList.isEmpty()) return@coroutineScope false
+        if (fingerprintDataList.isEmpty()) return@coroutineScope LoginResultEnum.FINGERPRINTER_VERIFY_FAILED
 
         /* ① 并发计算匹配分数 */
         val deferred = fingerprintDataList.map { fpData ->
@@ -183,24 +194,22 @@ class UserRepository @Inject constructor(
         if (bestMatch != null) {
             val fpData = bestMatch.first
             val sysUserDo = userDao.getUserInfoByUserId(fpData.userId.toString())
-            sysUserDo != null
+            LoginResultEnum.FINGERPRINTER_VERIFY_SUCCESS
         } else {
-            false
+            LoginResultEnum.FINGERPRINTER_VERIFY_FAILED
         }
     }
 
-    override fun loginWithFace(face: String): Boolean {
+    override fun loginWithFace(face: String): LoginResultEnum {
         val faceDataList = userDao.getFaceData()
         if (faceDataList.isEmpty()) {
-            return false
+            return LoginResultEnum.FACE_VERIFY_FAILED
         }
-        var hasFace = false
         var userId: String? = null
         for (faceData in faceDataList) {
             if (faceData.content.isNotEmpty()) {
                 val fileData = faceData.content.file().readText()
                 if (BiometricVerifier.verifyFaceArcSoft(face, fileData)) {
-                    hasFace = true
                     userId = faceData.userId.toString()
                     break
                 }
@@ -221,28 +230,24 @@ class UserRepository @Inject constructor(
                 logger.info("用户信息:{}", MainDomainData.userInfo.toString())
                 logger.info("用户角色:{}", MainDomainData.roleKeys)
                 logger.info("用户权限:{}", MainDomainData.permissions)
-                hasFace = true
+                return LoginResultEnum.FACE_VERIFY_SUCCESS
             } else {
-                hasFace = false
+                return LoginResultEnum.FACE_VERIFY_FAILED
             }
-        } else {
-            hasFace = false
         }
-        return hasFace
+        return LoginResultEnum.FACE_VERIFY_FAILED
     }
 
-    override fun checkFace(face: String): Boolean {
+    override fun checkFace(face: String): LoginResultEnum {
         val faceDataList = userDao.getFaceData()
         if (faceDataList.isEmpty()) {
-            return false
+            return LoginResultEnum.FACE_VERIFY_FAILED
         }
-        var hasFace = false
         var userId: String? = null
         for (faceData in faceDataList) {
             if (faceData.content.isNotEmpty()) {
                 val fileData = faceData.content.file().readText()
                 if (BiometricVerifier.verifyFaceArcSoft(face, fileData)) {
-                    hasFace = true
                     userId = faceData.userId.toString()
                     break
                 }
@@ -250,15 +255,13 @@ class UserRepository @Inject constructor(
         }
         if (userId != null) {
             val sysUserDo = userDao.getUserInfoByUserId(userId)
-            hasFace = if (sysUserDo != null) {
-                true
+            if (sysUserDo != null) {
+                return LoginResultEnum.FACE_VERIFY_SUCCESS
             } else {
-                false
+                return LoginResultEnum.FACE_VERIFY_FAILED
             }
-        } else {
-            hasFace = false
         }
-        return hasFace
+        return LoginResultEnum.FACE_VERIFY_FAILED
     }
 
     override fun logout(): Boolean {

+ 1 - 0
data/src/main/java/com/grkj/data/repository/impl/standard/WorkflowRepository.kt

@@ -53,4 +53,5 @@ class WorkflowRepository @Inject constructor(val workflowStepDao: WorkflowStepDa
         workflowStepDao.isUnlockBeforeLock(modeId)
 
     override fun getWorkflowModes(): List<WorkflowMode> = workflowStepDao.getWorkflowModes()
+    override fun getAllWorkflowModes(): List<WorkflowMode> = workflowStepDao.getAllWorkflowModes()
 }

+ 0 - 1
ui-base/src/main/java/com/grkj/ui_base/base/BaseViewModel.kt

@@ -16,7 +16,6 @@ import kotlinx.coroutines.flow.receiveAsFlow
 import kotlinx.coroutines.launch
 import org.slf4j.Logger
 import org.slf4j.LoggerFactory
-import javax.inject.Inject
 
 /**
  * 界面模型基类