Przeglądaj źródła

1. 处理部分BUG

bjb 2 miesięcy temu
rodzic
commit
ed7b0e8750

+ 27 - 22
data/src/main/java/com/grkj/data/domain/logic/impl/JobTicketLogic.kt

@@ -1,7 +1,24 @@
 package com.grkj.data.domain.logic.impl
 
+import android.util.Log
+import com.google.gson.Gson
 import com.grkj.data.check_data.ICheckDataMode
 import com.grkj.data.data.MainDomainData
+import com.grkj.data.domain.logic.BaseLogic
+import com.grkj.data.domain.logic.IJobTicketLogic
+import com.grkj.data.domain.vo.IsJobTicketDataVo
+import com.grkj.data.domain.vo.IsJobTicketKeyDataVo
+import com.grkj.data.domain.vo.IsJobTicketLockDataVo
+import com.grkj.data.domain.vo.IsJobTicketPointsDataVo
+import com.grkj.data.domain.vo.IsJobTicketStepDataVo
+import com.grkj.data.domain.vo.IsJobTicketUserDataVo
+import com.grkj.data.domain.vo.JobPointVo
+import com.grkj.data.domain.vo.JobTicketGroupDataVo
+import com.grkj.data.domain.vo.JobTicketManageVo
+import com.grkj.data.domain.vo.JobUserVo
+import com.grkj.data.domain.vo.LockedPointVo
+import com.grkj.data.entity.local.TodoStepJoin
+import com.grkj.data.entity.local.only
 import com.grkj.data.enums.CommonDictDataEnum
 import com.grkj.data.enums.IsolationPointPowerTypeEnum
 import com.grkj.data.enums.JobTicketStatusEnum
@@ -10,8 +27,6 @@ import com.grkj.data.enums.OperationTypeEnum
 import com.grkj.data.enums.RoleEnum
 import com.grkj.data.enums.StepAction
 import com.grkj.data.enums.TodoStatusEnum
-import com.grkj.data.domain.logic.BaseLogic
-import com.grkj.data.domain.logic.IJobTicketLogic
 import com.grkj.data.local.dos.IsJobTicket
 import com.grkj.data.local.dos.IsJobTicketGroup
 import com.grkj.data.local.dos.IsJobTicketKey
@@ -19,22 +34,9 @@ import com.grkj.data.local.dos.IsJobTicketLock
 import com.grkj.data.local.dos.IsJobTicketPoints
 import com.grkj.data.local.dos.IsJobTicketStep
 import com.grkj.data.local.dos.IsJobTicketUser
-import com.grkj.data.entity.local.TodoStepJoin
-import com.grkj.data.entity.local.only
 import com.grkj.data.net.req.LockPointUpdateReq
 import com.grkj.data.net.res.StepDetailRes
 import com.grkj.data.net.res.TicketDetailRes
-import com.grkj.data.domain.vo.IsJobTicketDataVo
-import com.grkj.data.domain.vo.IsJobTicketKeyDataVo
-import com.grkj.data.domain.vo.IsJobTicketLockDataVo
-import com.grkj.data.domain.vo.IsJobTicketPointsDataVo
-import com.grkj.data.domain.vo.IsJobTicketStepDataVo
-import com.grkj.data.domain.vo.IsJobTicketUserDataVo
-import com.grkj.data.domain.vo.JobPointVo
-import com.grkj.data.domain.vo.JobTicketGroupDataVo
-import com.grkj.data.domain.vo.JobTicketManageVo
-import com.grkj.data.domain.vo.JobUserVo
-import com.grkj.data.domain.vo.LockedPointVo
 import com.grkj.data.repository.ExceptionRepository
 import com.grkj.data.repository.HardwareRepository
 import com.grkj.data.repository.IsolationPointRepository
@@ -381,20 +383,21 @@ class JobTicketLogic @Inject constructor(
             val groupList = groups.filter { it.ticketId == ticketId }
             val lockerList = lockers.filter { it.ticketId == ticketId }
             val colockerList = colockers.filter { it.ticketId == ticketId }
-            val ticketSteps = stepInstances.filter { it.ticketId == ticketId }
-                .sortedBy { it.stepIndex }
+            val ticketSteps =
+                stepInstances.filter { it.ticketId == ticketId }.sortedBy { it.stepIndex }
             val currentStepId =
                 ticketSteps.filter { isJobTicketStep -> isJobTicketStep.stepStatus == "0" }
                     .minByOrNull { isJobTicketStep -> isJobTicketStep.stepIndex }?.stepId
             val previousStepJoin: MutableList<TodoStepJoin> = mutableListOf()
             ticketSteps.sortedBy { it.stepIndex }.forEach { stepDef ->
-
-                val stepJoins = mutableListOf<TodoStepJoin>()  // 本 step 产生的所有 Todo
+                Log.d("xiaoming", "ticket -> ${Gson().toJson(stepDef)}")
+                val stepJoins = mutableListOf<TodoStepJoin>()  // 本 step 产生的所有 待办
 
                 /** 工具:给待办挂上前置链并收集 **/
                 fun collect(join: TodoStepJoin) {
-                    if (previousStepJoin.isNotEmpty()) join.previousTodoStepJoin =
-                        previousStepJoin.toList()
+                    if (previousStepJoin.isNotEmpty()) {
+                        join.previousTodoStepJoin = previousStepJoin.toList()
+                    }
                     stepJoins += join
                 }
 
@@ -436,7 +439,9 @@ class JobTicketLogic @Inject constructor(
                 if (stepDef.enableColock) {
                     collect(
                         buildTodoStepJoin(
-                            stepDef, ticket, stepDef, lockerList, colockerList, pointDatas,
+                            stepDef, ticket, stepDef,
+                            lockerList, colockerList,
+                            pointDatas,
                             null, "", null
                         ).only(StepAction.COLOCK)
                     )

+ 51 - 9
data/src/main/java/com/grkj/data/domain/logic/impl/UserLogic.kt

@@ -1,20 +1,22 @@
 package com.grkj.data.domain.logic.impl
 
+import com.grkj.data.data.MMKVConstants
 import com.grkj.data.data.MainDomainData
-import com.grkj.data.enums.LoginResultEnum
-import com.grkj.data.enums.RoleEnum
-import com.grkj.data.local.dos.SysUserCharacteristicDo
-import com.grkj.data.local.dos.SysUserDo
-import com.grkj.data.local.dos.SysUserRole
+import com.grkj.data.domain.logic.BaseLogic
+import com.grkj.data.domain.logic.IUserLogic
 import com.grkj.data.domain.vo.AddUserDataVo
 import com.grkj.data.domain.vo.JobUserVo
 import com.grkj.data.domain.vo.SysBiometricDataVo
 import com.grkj.data.domain.vo.SysUserVo
 import com.grkj.data.domain.vo.UpdateUserDataVo
-import com.grkj.data.domain.vo.UserManageVo
 import com.grkj.data.domain.vo.UserManageFilterVo
-import com.grkj.data.domain.logic.BaseLogic
-import com.grkj.data.domain.logic.IUserLogic
+import com.grkj.data.domain.vo.UserManageVo
+import com.grkj.data.enums.LoginResultEnum
+import com.grkj.data.enums.RoleEnum
+import com.grkj.data.hardware.BiometricVerifier
+import com.grkj.data.local.dos.SysUserCharacteristicDo
+import com.grkj.data.local.dos.SysUserDo
+import com.grkj.data.local.dos.SysUserRole
 import com.grkj.data.repository.HardwareRepository
 import com.grkj.data.repository.JobTicketRepository
 import com.grkj.data.repository.RoleRepository
@@ -22,11 +24,11 @@ import com.grkj.data.repository.SysMenuRepository
 import com.grkj.data.repository.UserRepository
 import com.grkj.data.repository.WorkstationRepository
 import com.grkj.shared.utils.BCryptUtils
-import com.grkj.data.hardware.BiometricVerifier
 import com.grkj.shared.utils.i18n.I18nManager
 import com.sik.sikcore.data.BeanUtils
 import com.sik.sikcore.extension.exists
 import com.sik.sikcore.extension.file
+import com.sik.sikcore.extension.getMMKVData
 import kotlinx.coroutines.Dispatchers
 import kotlinx.coroutines.async
 import kotlinx.coroutines.awaitAll
@@ -73,6 +75,16 @@ class UserLogic @Inject constructor(
             logger.info("用户信息:{}", MainDomainData.userInfo.toString())
             logger.info("用户角色:{}", MainDomainData.roleKeys)
             logger.info("用户权限:{}", MainDomainData.permissions)
+            // 如果不允许共锁人登录,并且角色只有共锁人(不能是Admin或者负责人)
+            if (!MMKVConstants.KEY_ALLOW_COLOCKER_COLOCK.getMMKVData(false)
+                && roleDatas.any { it.roleKey == RoleEnum.JTCOLOCKER.roleKey }
+                && (roleDatas.filter {
+                    listOf(RoleEnum.ADMIN.roleKey, RoleEnum.JTDRAWER.roleKey).contains(it.roleKey)
+                }).isEmpty()
+            ) {
+                // 要报错,提示不能登录
+                return LoginResultEnum.LOGIN_FAILED_NO_ALLOW_COLOCKER
+            }
             return LoginResultEnum.USERNAME_PASSWORD_LOGIN_SUCCESS
         }
         return LoginResultEnum.USERNAME_OR_PASSWORD_ERROR
@@ -100,6 +112,16 @@ class UserLogic @Inject constructor(
                 logger.info("用户信息:{}", MainDomainData.userInfo.toString())
                 logger.info("用户角色:{}", MainDomainData.roleKeys)
                 logger.info("用户权限:{}", MainDomainData.permissions)
+                // 如果不允许共锁人登录,并且角色只有共锁人(不能是Admin或者负责人)
+                if (!MMKVConstants.KEY_ALLOW_COLOCKER_COLOCK.getMMKVData(false)
+                    && roleDatas.any { it.roleKey == RoleEnum.JTCOLOCKER.roleKey }
+                    && (roleDatas.filter {
+                        listOf(RoleEnum.ADMIN.roleKey, RoleEnum.JTDRAWER.roleKey).contains(it.roleKey)
+                    }).isEmpty()
+                ) {
+                    // 要报错,提示不能登录
+                    return LoginResultEnum.LOGIN_FAILED_NO_ALLOW_COLOCKER
+                }
                 return LoginResultEnum.JOB_CARD_LOGIN_SUCCESS
             }
             return LoginResultEnum.JOB_CARD_LOGIN_FAILED
@@ -271,6 +293,16 @@ class UserLogic @Inject constructor(
                 logger.info("用户信息:{}", MainDomainData.userInfo.toString())
                 logger.info("用户角色:{}", MainDomainData.roleKeys)
                 logger.info("用户权限:{}", MainDomainData.permissions)
+                // 如果不允许共锁人登录,并且角色只有共锁人(不能是Admin或者负责人)
+                if (!MMKVConstants.KEY_ALLOW_COLOCKER_COLOCK.getMMKVData(false)
+                    && roleDatas.any { it.roleKey == RoleEnum.JTCOLOCKER.roleKey }
+                    && (roleDatas.filter {
+                        listOf(RoleEnum.ADMIN.roleKey, RoleEnum.JTDRAWER.roleKey).contains(it.roleKey)
+                    }).isEmpty()
+                ) {
+                    // 要报错,提示不能登录
+                    return LoginResultEnum.LOGIN_FAILED_NO_ALLOW_COLOCKER
+                }
                 return LoginResultEnum.FACE_VERIFY_SUCCESS
             } else {
                 return LoginResultEnum.FACE_VERIFY_FAILED
@@ -460,6 +492,16 @@ class UserLogic @Inject constructor(
                 logger.info("用户信息:{}", MainDomainData.userInfo.toString())
                 logger.info("用户角色:{}", MainDomainData.roleKeys)
                 logger.info("用户权限:{}", MainDomainData.permissions)
+                // 如果不允许共锁人登录,并且角色只有共锁人(不能是Admin或者负责人)
+                if (!MMKVConstants.KEY_ALLOW_COLOCKER_COLOCK.getMMKVData(false)
+                    && roleDatas.any { it.roleKey == RoleEnum.JTCOLOCKER.roleKey }
+                    && (roleDatas.filter {
+                        listOf(RoleEnum.ADMIN.roleKey, RoleEnum.JTDRAWER.roleKey).contains(it.roleKey)
+                    }).isEmpty()
+                ) {
+                    // 要报错,提示不能登录
+                    return LoginResultEnum.LOGIN_FAILED_NO_ALLOW_COLOCKER
+                }
                 LoginResultEnum.FACE_VERIFY_SUCCESS
             } else {
                 LoginResultEnum.FACE_VERIFY_FAILED

+ 3 - 5
data/src/main/java/com/grkj/data/entity/local/TodoStepJoin.kt

@@ -63,11 +63,9 @@ fun TodoStepJoin.isMyTodo(currentUserId: Long, currentUserName: String): Boolean
 
     // ---- 判定共锁/解除共锁(由创建者) ----
     //根据配置判断,如果允许共锁人登录共锁只要共锁人列表包含当前人员的id,就是他的待办,否则不是。如果没开就还是判断创建人
-    if (enableColock && (MMKVConstants.KEY_ALLOW_COLOCKER_COLOCK.getMMKVData(false) && colockerUserId.contains(
-            currentUserId
-        )) || (isCreator && !MMKVConstants.KEY_ALLOW_COLOCKER_COLOCK.getMMKVData(
-            false
-        ))
+    if (enableColock && (MMKVConstants.KEY_ALLOW_COLOCKER_COLOCK.getMMKVData(false)
+                && colockerUserId.contains(currentUserId))
+        || (isCreator && !MMKVConstants.KEY_ALLOW_COLOCKER_COLOCK.getMMKVData(false))
     ) return true
     if (enableReleaseColock && (MMKVConstants.KEY_ALLOW_COLOCKER_COLOCK.getMMKVData(false) && colockerUserId.contains(
             currentUserId

+ 4 - 2
data/src/main/java/com/grkj/data/enums/LoginResultEnum.kt

@@ -16,6 +16,8 @@ enum class LoginResultEnum {
     USERNAME_PASSWORD_NOT_EXISTS,
     //------------工卡登录相关结果---------------
     JOB_CARD_LOGIN_SUCCESS,
-    JOB_CARD_LOGIN_FAILED
-    ;
+    JOB_CARD_LOGIN_FAILED,
+
+    // 不允许共锁人登录
+    LOGIN_FAILED_NO_ALLOW_COLOCKER
 }

+ 5 - 2
data/src/main/java/com/grkj/data/enums/OperationTypeEnum.kt

@@ -28,9 +28,12 @@ enum class OperationTypeEnum(val code: String, val desc: String, val todoTitle:
                 j.enableLock && j.userRole == RoleEnum.JTLOCKER.roleKey && (j.keyStatus == "1" || j.keyStatus == "2") -> LOCK_RETURN_KEY
                 j.enableUnlock && j.userRole == RoleEnum.JTLOCKER.roleKey && j.keyStatus == "0" -> UNLOCK_TAKE_KEY
                 j.enableUnlock && j.userRole == RoleEnum.JTLOCKER.roleKey && (j.keyStatus == "1" || j.keyStatus == "2") -> UNLOCK_RETURN_KEY
-                //todo 共锁人的共锁暂时不算代办
+                // TODO 共锁人的共锁暂时不算代办
+                // 2026.03.18 新增 共锁人待办开放
+                j.enableColock && j.userRole == RoleEnum.JTCOLOCKER.roleKey -> COLOCK
                 j.enableColock && isCreator -> COLOCK
-                j.enableReleaseColock && isCreator-> RELEASE_COLOCK
+                j.enableReleaseColock && j.userRole == RoleEnum.JTCOLOCKER.roleKey -> RELEASE_COLOCK
+                j.enableReleaseColock && isCreator -> RELEASE_COLOCK
                 j.enableEndJob && isCreator -> END
                 !j.hasAnyHardwareOperationFunction() -> CONFIRM
                 else -> UNKNOWN

+ 6 - 3
iscs_lock/src/main/java/com/grkj/iscs/features/login/activity/LoginActivity.kt

@@ -195,6 +195,7 @@ class LoginActivity : BaseActivity<ActivityLoginBinding>() {
                     LoginResultEnum.JOB_CARD_LOGIN_FAILED -> showToast(
                         CommonUtils.getStr(com.grkj.ui_base.R.string.job_card_login_failed)
                     )
+                    LoginResultEnum.LOGIN_FAILED_NO_ALLOW_COLOCKER -> showToast(CommonUtils.getStr(com.grkj.ui_base.R.string.login_no_allow_colocker))
                 }
             }.setDialogLifecycleCallback(object : DialogLifecycleCallback<CustomDialog>() {
                 override fun onDismiss(dialog: CustomDialog?) {
@@ -334,9 +335,11 @@ class LoginActivity : BaseActivity<ActivityLoginBinding>() {
                                 startActivity(Intent(this@LoginActivity, MainActivity::class.java))
                                 finish()
                             } else {
-                                showToast(
-                                    CommonUtils.getStr(com.grkj.ui_base.R.string.job_card_login_failed)
-                                )
+                                if (isSuccess == LoginResultEnum.LOGIN_FAILED_NO_ALLOW_COLOCKER) {
+                                    showToast(CommonUtils.getStr(com.grkj.ui_base.R.string.login_no_allow_colocker))
+                                } else {
+                                    showToast(CommonUtils.getStr(com.grkj.ui_base.R.string.job_card_login_failed))
+                                }
                             }
                         }
                         // 重置cardNo

+ 28 - 23
iscs_lock/src/main/java/com/grkj/iscs/features/main/fragment/job_manage/MyTodoListFragment.kt

@@ -1,5 +1,6 @@
 package com.grkj.iscs.features.main.fragment.job_manage
 
+import android.util.Log
 import android.widget.TextView
 import androidx.core.view.isVisible
 import androidx.fragment.app.viewModels
@@ -11,14 +12,15 @@ import com.drake.brv.utils.linear
 import com.drake.brv.utils.models
 import com.drake.brv.utils.setup
 import com.google.android.material.tabs.TabLayout
+import com.google.gson.Gson
 import com.grkj.data.data.EventConstants
 import com.grkj.data.data.MainDomainData
 import com.grkj.data.data.Type
+import com.grkj.data.domain.vo.IsJobTicketStepDataVo
+import com.grkj.data.domain.vo.TodoItemVo
 import com.grkj.data.enums.OperationTypeEnum
 import com.grkj.data.enums.RoleEnum
 import com.grkj.data.enums.TodoStatusEnum
-import com.grkj.data.domain.vo.IsJobTicketStepDataVo
-import com.grkj.data.domain.vo.TodoItemVo
 import com.grkj.iscs.R
 import com.grkj.iscs.common.DataTransferConstants
 import com.grkj.iscs.databinding.FragmentMyTodoListBinding
@@ -333,24 +335,26 @@ class MyTodoListFragment : BaseFragment<FragmentMyTodoListBinding>() {
 
                             OperationTypeEnum.COLOCK -> {
                                 viewModel.startReadCard = true
-                                SwipCardOperationTipDialog.show().setDialogLifecycleCallback(object :
-                                    DialogLifecycleCallback<CustomDialog>() {
-                                    override fun onDismiss(dialog: CustomDialog) {
-                                        viewModel.startReadCard = false
-                                        super.onDismiss(dialog)
-                                    }
-                                })
+                                SwipCardOperationTipDialog.show()
+                                    .setDialogLifecycleCallback(object :
+                                        DialogLifecycleCallback<CustomDialog>() {
+                                        override fun onDismiss(dialog: CustomDialog) {
+                                            viewModel.startReadCard = false
+                                            super.onDismiss(dialog)
+                                        }
+                                    })
                             }
 
                             OperationTypeEnum.RELEASE_COLOCK -> {
                                 viewModel.startReadCard = true
-                                SwipCardOperationTipDialog.show().setDialogLifecycleCallback(object :
-                                    DialogLifecycleCallback<CustomDialog>() {
-                                    override fun onDismiss(dialog: CustomDialog) {
-                                        viewModel.startReadCard = false
-                                        super.onDismiss(dialog)
-                                    }
-                                })
+                                SwipCardOperationTipDialog.show()
+                                    .setDialogLifecycleCallback(object :
+                                        DialogLifecycleCallback<CustomDialog>() {
+                                        override fun onDismiss(dialog: CustomDialog) {
+                                            viewModel.startReadCard = false
+                                            super.onDismiss(dialog)
+                                        }
+                                    })
                             }
 
                             OperationTypeEnum.CONFIRM -> {
@@ -381,7 +385,8 @@ class MyTodoListFragment : BaseFragment<FragmentMyTodoListBinding>() {
             })
         }
         itemBinding.cardRoot.setDebouncedClickListener {
-            GlobalDataTempStore.getInstance().saveData(DataTransferConstants.KEY_JOB_TICKET_ID, item.ticketId)
+            GlobalDataTempStore.getInstance()
+                .saveData(DataTransferConstants.KEY_JOB_TICKET_ID, item.ticketId)
             navController.navigate(R.id.action_myTodoListFragment_to_jobExecuteFragment)
         }
     }
@@ -450,7 +455,7 @@ class MyTodoListFragment : BaseFragment<FragmentMyTodoListBinding>() {
                                                             checkStepComplete()
                                                             getData()
                                                         } else {
-                                                           showToast(CommonUtils.getStr("colock_failed"))
+                                                            showToast(CommonUtils.getStr("colock_failed"))
                                                         }
                                                     }
                                             })
@@ -476,10 +481,8 @@ class MyTodoListFragment : BaseFragment<FragmentMyTodoListBinding>() {
                                     } else {
                                         showToast(CommonUtils.getStr("currently_unable_to_lock_together"))
                                     }
-                                } ?:
-                                showToast(CommonUtils.getStr("invalid_user"))
-                            } ?:
-                            showToast(CommonUtils.getStr("invalid_card"))
+                                } ?: showToast(CommonUtils.getStr("invalid_user"))
+                            } ?: showToast(CommonUtils.getStr("invalid_card"))
                         }
                     } else {
                         showToast(CommonUtils.getStr("currently_unable_to_lock_together"))
@@ -586,6 +589,8 @@ class MyTodoListFragment : BaseFragment<FragmentMyTodoListBinding>() {
     override fun onResume() {
         super.onResume()
         if (!isFirstEnter) {
+            // 检查前需要将是否完成人员选择设置为false,否则有BUG
+            jobExecuteViewModel.checkMemberFinish = false
             if (GlobalDataTempStore.getInstance()
                     .hasData(DataTransferConstants.KEY_SELECTED_MEMBER_LOCKER_DATA)
             ) {
@@ -605,7 +610,7 @@ class MyTodoListFragment : BaseFragment<FragmentMyTodoListBinding>() {
                 jobExecuteViewModel.updateLockerAndColockerData().observe(this) {
                     val workflowStep = jobExecuteViewModel.currentStepData
                     if (workflowStep?.confirmType != 0 ||//自动确认
-                        ((jobExecuteViewModel.ticketData?.createBy == MainDomainData.userInfo?.userName && workflowStep.confirmUser==null) || workflowStep.currentUserCanConfirm())
+                        ((jobExecuteViewModel.ticketData?.createBy == MainDomainData.userInfo?.userName && workflowStep.confirmUser == null) || workflowStep.currentUserCanConfirm())
                     ) {
                         if (workflowStep?.currentUserCanConfirm() == true) {
                             CheckFaceDialog.show(viewLifecycleOwner, viewModel, 0) {

+ 2 - 0
iscs_lock/src/main/java/com/grkj/iscs/features/main/viewmodel/job_manage/JobExecuteViewModel.kt

@@ -68,6 +68,8 @@ class JobExecuteViewModel @Inject constructor(
 
     var selectedLockerData: List<JobTicketGroupDataVo<JobUserVo>> = mutableListOf()
     var selecteColockerData: List<JobUserVo> = mutableListOf()
+
+    // 是否人员检查流程
     var checkMemberFinish: Boolean = false
     var currentStepData: IsJobTicketStepDataVo? = null
     var workflowModes: List<WorkflowMode> = mutableListOf()

+ 10 - 9
iscs_lock/src/main/java/com/grkj/iscs/features/main/viewmodel/job_manage/MyTodoViewModel.kt

@@ -1,21 +1,23 @@
 package com.grkj.iscs.features.main.viewmodel.job_manage
 
+import android.util.Log
 import androidx.lifecycle.LiveData
 import androidx.lifecycle.liveData
+import com.google.gson.Gson
 import com.grkj.data.data.DictConstants
 import com.grkj.data.data.MainDomainData
-import com.grkj.data.enums.JobTicketStatusEnum
-import com.grkj.data.enums.OperationTypeEnum
-import com.grkj.data.enums.TodoStatusEnum
 import com.grkj.data.domain.logic.IJobTicketLogic
 import com.grkj.data.domain.logic.IUserLogic
+import com.grkj.data.domain.vo.IsJobTicketPointsDataVo
+import com.grkj.data.domain.vo.TodoItemVo
 import com.grkj.data.entity.extension.actionKey
 import com.grkj.data.entity.extension.findPredecessors
 import com.grkj.data.entity.extension.toTodoVo
 import com.grkj.data.entity.local.isMyTodo
+import com.grkj.data.enums.JobTicketStatusEnum
+import com.grkj.data.enums.OperationTypeEnum
+import com.grkj.data.enums.TodoStatusEnum
 import com.grkj.data.net.res.CommonDictRes
-import com.grkj.data.domain.vo.IsJobTicketPointsDataVo
-import com.grkj.data.domain.vo.TodoItemVo
 import com.grkj.ui_base.base.BaseViewModel
 import com.grkj.ui_base.business.DataBusiness
 import com.grkj.ui_base.utils.CommonUtils
@@ -105,7 +107,8 @@ class MyTodoViewModel @Inject constructor(
                 }
             val pendingSteps =
                 steps.filter {
-                    it.stepStatus == "0" || (it.stepStatus == "1" && it.enableEndJob && it.ticketStatus in listOf(
+                    it.stepStatus == "0" || (it.stepStatus == "1" && it.enableEndJob
+                            && it.ticketStatus in listOf(
                         JobTicketStatusEnum.SELECT_MEMBER.status,
                         JobTicketStatusEnum.LOCKING.status,
                         JobTicketStatusEnum.COLOCKING.status,
@@ -113,10 +116,8 @@ class MyTodoViewModel @Inject constructor(
                         JobTicketStatusEnum.PROGRESSING.status,
                     ))
                 }
-
             /* —— 当前步骤 → todoData —— */
-            val todoStep =
-                pendingSteps.filter { it.isCurrentStep }.findPredecessors()
+            val todoStep = pendingSteps.filter { it.isCurrentStep }.findPredecessors()
             tempTodo += todoStep.second
             doneSteps = doneSteps.toMutableList().apply {
                 addAll(todoStep.third)

+ 1 - 0
iscs_mc/src/main/java/com/grkj/iscs_mc/features/login/fragment/LoginFragment.kt

@@ -273,6 +273,7 @@ class LoginFragment : BaseFragment<FragmentLoginBinding>() {
             LoginResultEnum.JOB_CARD_LOGIN_FAILED -> showToast(
                 CommonUtils.getStr("job_card_login_failed")
             )
+            LoginResultEnum.LOGIN_FAILED_NO_ALLOW_COLOCKER -> showToast(CommonUtils.getStr("login_no_allow_colocker"))
         }
     }
 

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

@@ -16,6 +16,7 @@
     <string name="add_card_failed">Failed to Add Card</string>
     <string name="add_card_succeed">Card Added Successfully</string>
     <string name="add_colocker">Add Co-lock User ({0})</string>
+    <string name="login_no_allow_colocker">Co-locker not allowed to login</string>
     <string name="add_group">+Group</string>
     <string name="add_key_failed">Failed to Add Key</string>
     <string name="add_key_succeed">Key Added Successfully</string>

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

@@ -16,6 +16,7 @@
     <string name="add_card_failed">添加卡片失败</string>
     <string name="add_card_succeed">添加卡片成功</string>
     <string name="add_colocker">添加共锁人({0})</string>
+    <string name="login_no_allow_colocker">不允许共锁人登录</string>
     <string name="add_group">添加分组</string>
     <string name="add_key_failed">新增钥匙失败</string>
     <string name="add_key_succeed">新增钥匙成功</string>

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

@@ -16,6 +16,7 @@
     <string name="add_card_failed">添加卡片失败</string>
     <string name="add_card_succeed">添加卡片成功</string>
     <string name="add_colocker">添加共锁人({0})</string>
+    <string name="login_no_allow_colocker">不允许共锁人登录</string>
     <string name="add_group">添加分组</string>
     <string name="add_key_failed">新增钥匙失败</string>
     <string name="add_key_succeed">新增钥匙成功</string>