Ver código fonte

fix(作业管理):
- 修复作业取消和结束权限判断问题
- 修复作业执行过程中权限判断问题
- 修复刷卡时权限判断问题

周文健 3 meses atrás
pai
commit
d254398384

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

@@ -250,11 +250,10 @@ class JobExecuteFragment : BaseFragment<FragmentJobExecuteBinding>() {
             val workflowStep = viewModel.workflowSteps.find { it.stepId == item.workflowStepId }
             viewModel.canCheckStep().observe(this@JobExecuteFragment) {
                 if (it) {
-
                     if (item.stepIndex < viewModel.currentStepData?.stepIndex!!) {
                         return@observe
                     }
-                    if (item.stepId != viewModel.currentStepData?.stepId && workflowStep?.enableSetLocker == false && workflowStep.enableSetColocker == false) {
+                    if (item.stepId != viewModel.currentStepData?.stepId && workflowStep?.enableSetLocker == false && !workflowStep.enableSetColocker) {
                         PopTip(
                             getString(
                                 R.string.please_done_operation,
@@ -263,6 +262,13 @@ class JobExecuteFragment : BaseFragment<FragmentJobExecuteBinding>() {
                         )
                         return@observe
                     }
+                    if (MainDomainData.userInfo?.userName != viewModel.ticketData?.createBy) {
+                        showToast(
+                            CommonUtils.getStr(com.grkj.ui_base.R.string.no_permission_to_handle)
+                                .toString()
+                        )
+                        return@observe
+                    }
                     if (workflowStep?.confirmType != 0 && (workflowStep?.enableSetLocker == true || workflowStep?.enableSetColocker == true)) {
                         stepClickConfirm(adapter, item, workflowStep)
                     } else if (workflowStep?.confirmType == 0 && workflowStep.confirmRoleCode == null && workflowStep.confirmUser == null) {
@@ -289,6 +295,9 @@ class JobExecuteFragment : BaseFragment<FragmentJobExecuteBinding>() {
         }
     }
 
+    /**
+     * 点击确认
+     */
     private fun stepClickConfirm(
         adapter: BindingAdapter, item: IsJobTicketStepDataVo, workflowStep: WorkflowStep?
     ) {
@@ -321,6 +330,9 @@ class JobExecuteFragment : BaseFragment<FragmentJobExecuteBinding>() {
         }
     }
 
+    /**
+     * 检查是否是选择人员
+     */
     private fun checkSelectMember(
         workflowStep: WorkflowStep?
     ): Boolean {
@@ -443,6 +455,13 @@ class JobExecuteFragment : BaseFragment<FragmentJobExecuteBinding>() {
         super.onEvent(event)
         when (event.code) {
             EventConstants.EVENT_RFID_CARD_READ -> {
+                if (MainDomainData.userInfo?.userName != viewModel.ticketData?.createBy) {
+                    showToast(
+                        CommonUtils.getStr(com.grkj.ui_base.R.string.no_permission_to_handle)
+                            .toString()
+                    )
+                    return
+                }
                 checkLayout(2)
                 (event.data as RFIDCardReadEvent).let {
                     val currentWorkflowStep =

+ 22 - 51
app/src/main/java/com/grkj/iscs/features/main/viewmodel/job_manage/JobExecuteViewModel.kt

@@ -137,31 +137,15 @@ class JobExecuteViewModel @Inject constructor(
      */
     fun cancelJob(): LiveData<Boolean> {
         return liveData(Dispatchers.IO) {
-            val ticketDetail = RepositoryManager.jobTicketRepo.getTicketDetail(ticketId)
-            val workflowStep = workflowSteps.find { it.stepId == currentStepData?.workflowStepId }
-            val role = ticketDetail?.ticketUserVOList?.find {
-                it.userId == MainDomainData.userInfo?.userId && workflowStep?.currentUserCanConfirm() == true
-            }
-            if (role == null) {
+            if (ticketData?.createBy != MainDomainData.userInfo?.userName) {
                 ThreadUtils.runOnMain {
                     PopTip.build()
                         .tip(CommonUtils.getStr(com.grkj.ui_base.R.string.no_permission_to_handle))
                 }
                 return@liveData
             }
-            if (workflowStep?.needCheckFace() == true) {
-                _uiEvents.send(UiEvent.FaceCheck)
-                val checkResult = _paramResponse.receive() as Boolean
-                if (checkResult) {
-                    jobTicketRepository.cancelJob(ticketId)
-                    emit(true)
-                } else {
-                    emit(false)
-                }
-            } else {
-                jobTicketRepository.cancelJob(ticketId)
-                emit(true)
-            }
+            jobTicketRepository.cancelJob(ticketId)
+            emit(true)
         }
     }
 
@@ -170,32 +154,15 @@ class JobExecuteViewModel @Inject constructor(
      */
     fun finishJob(): LiveData<Boolean> {
         return liveData(Dispatchers.IO) {
-            val ticketDetail = RepositoryManager.jobTicketRepo.getTicketDetail(ticketId)
-            val workflowStep = workflowSteps.find { it.stepId == currentStepData?.workflowStepId }
-                ?: workflowSteps.last()
-            val role = ticketDetail?.ticketUserVOList?.find {
-                it.userId == MainDomainData.userInfo?.userId
-            }
-            if (role == null) {
+            if (ticketData?.createBy != MainDomainData.userInfo?.userName) {
                 ThreadUtils.runOnMain {
                     PopTip.build()
                         .tip(CommonUtils.getStr(com.grkj.ui_base.R.string.no_permission_to_handle))
                 }
                 return@liveData
             }
-            if (workflowStep?.needCheckFace() == true) {
-                _uiEvents.send(UiEvent.FaceCheck)
-                val checkResult = _paramResponse.receive() as Boolean
-                if (checkResult) {
-                    jobTicketRepository.finishJob(ticketId)
-                    emit(true)
-                } else {
-                    emit(false)
-                }
-            } else {
-                jobTicketRepository.finishJob(ticketId)
-                emit(true)
-            }
+            jobTicketRepository.finishJob(ticketId)
+            emit(true)
         }
     }
 
@@ -219,19 +186,21 @@ class JobExecuteViewModel @Inject constructor(
                 val rfid = ModbusBusinessManager.getWaitTakeDeviceByTicketId(
                     DeviceConst.DEVICE_TYPE_KEY, ticketId
                 )?.nfc
-                rfid?.let {
-                    val keyMac = ModbusBusinessManager.getKeyMacByRfid(it)
+                if (rfid != null) {
+                    val keyMac = ModbusBusinessManager.getKeyMacByRfid(rfid)
                     ModbusBusinessManager.checkTicketAndSendTicket(keyMac)
                     return@liveData
-                } ?: run {
+                } else {
                     hideLoading()
                 }
             }
             val ticketDetail = RepositoryManager.jobTicketRepo.getTicketDetail(ticketId)
             val workflowStep = workflowSteps.find { it.stepId == currentStepData?.workflowStepId }
-            val role = ticketDetail?.ticketUserVOList?.find {
-                it.userId == MainDomainData.userInfo?.userId && workflowStep?.currentUserCanConfirm() == true && it.groupId == groupId
-            }
+            val role =
+                ticketDetail?.ticketUserVOList?.filter { it.userRole == RoleEnum.JTLOCKER.roleKey }
+                    ?.find {
+                        it.userId == MainDomainData.userInfo?.userId && workflowStep?.currentUserCanConfirm() == true && it.groupId == groupId
+                    }
             if (role == null) {
                 ThreadUtils.runOnMain {
                     PopTip.build()
@@ -338,19 +307,21 @@ class JobExecuteViewModel @Inject constructor(
                 val rfid = ModbusBusinessManager.getWaitTakeDeviceByTicketId(
                     DeviceConst.DEVICE_TYPE_KEY, ticketId
                 )?.nfc
-                rfid?.let {
-                    val keyMac = ModbusBusinessManager.getKeyMacByRfid(it)
+                if (rfid != null) {
+                    val keyMac = ModbusBusinessManager.getKeyMacByRfid(rfid)
                     ModbusBusinessManager.checkTicketAndSendTicket(keyMac)
                     return@liveData
-                } ?: run {
+                } else {
                     hideLoading()
                 }
             }
             val ticketDetail = RepositoryManager.jobTicketRepo.getTicketDetail(ticketId)
             val workflowStep = workflowSteps.find { it.stepId == currentStepData?.workflowStepId }
-            val role = ticketDetail?.ticketUserVOList?.find {
-                it.userId == MainDomainData.userInfo?.userId && workflowStep?.currentUserCanConfirm() == true && it.groupId == groupId
-            }
+            val role =
+                ticketDetail?.ticketUserVOList?.filter { it.userRole == RoleEnum.JTLOCKER.roleKey }
+                    ?.find {
+                        it.userId == MainDomainData.userInfo?.userId && workflowStep?.currentUserCanConfirm() == true && it.groupId == groupId
+                    }
             if (role == null) {
                 ThreadUtils.runOnMain {
                     PopTip.build()