Ver código fonte

feat(作业管理)

- 新增检查SOP作业是否正在进行中的功能
- 创建、编辑作业时,如果当前SOP存在进行中的作业,则提示用户
周文健 3 meses atrás
pai
commit
de22713af5

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

@@ -111,7 +111,13 @@ class CreateSopJobFragment : BaseFormFragment<FragmentCreateSopJobBinding>() {
                     dialogType = TipDialog.DialogType.INFO,
                     countDownTime = 10,
                     onConfirmClick = {
-                        createSopJob(true)
+                        viewModel.checkSopHasJobInProgress(selectedSopId!!).observe(this) {
+                            if (!it) {
+                                createSopJob(true)
+                            } else {
+                                TipDialog.showError(getString(R.string.current_sop_has_job_in_progress))
+                            }
+                        }
                     })
             }
         }
@@ -392,7 +398,7 @@ class CreateSopJobFragment : BaseFormFragment<FragmentCreateSopJobBinding>() {
 
     override fun onResume() {
         super.onResume()
-        if (selectedSop!=null){
+        if (selectedSop != null) {
             refreshWorkflowMode()
         }
         if (GlobalDataTempStore.getInstance()

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

@@ -115,7 +115,13 @@ class EditSopJobFragment : BaseFormFragment<FragmentEditSopJobBinding>() {
                     dialogType = TipDialog.DialogType.INFO,
                     countDownTime = 10,
                     onConfirmClick = {
-                        saveSopJob(true)
+                        viewModel.checkSopHasJobInProgress(selectedSopId!!).observe(this) {
+                            if (!it) {
+                                saveSopJob(true)
+                            } else {
+                                TipDialog.showError(getString(R.string.current_sop_has_job_in_progress))
+                            }
+                        }
                     })
             }
         }

+ 10 - 0
app/src/main/java/com/grkj/iscs/features/main/viewmodel/job_manage/SopJobViewModel.kt

@@ -227,4 +227,14 @@ class SopJobViewModel @Inject constructor(
             emit(true)
         }
     }
+
+    /**
+     * 检查SOP作业是否正在进行
+     */
+    fun checkSopHasJobInProgress(sopId: Long): LiveData<Boolean> {
+        return liveData(Dispatchers.IO){
+            val hasJobInProgress = jobTicketRepository.checkSopHasJobInProgress(sopId)
+            emit(hasJobInProgress)
+        }
+    }
 }

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

@@ -527,5 +527,6 @@
     <string name="data_file_is_corrupted">Data file is corrupted</string>
     <string name="data_decrypt_failed">Data decrypt failed</string>
     <string name="data_content_error">Data content error</string>
+    <string name="current_sop_has_job_in_progress">Current sop has job in progress</string>
 
 </resources>

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

@@ -527,5 +527,6 @@
     <string name="data_file_is_corrupted">数据文件已损坏</string>
     <string name="data_decrypt_failed">数据解密失败</string>
     <string name="data_content_error">数据内容错误</string>
+    <string name="current_sop_has_job_in_progress">当前SOP存在进行中的作业</string>
 
 </resources>

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

@@ -530,5 +530,6 @@
     <string name="data_file_is_corrupted">数据文件已损坏</string>
     <string name="data_decrypt_failed">数据解密失败</string>
     <string name="data_content_error">数据内容错误</string>
+    <string name="current_sop_has_job_in_progress">当前SOP存在进行中的作业</string>
 
 </resources>

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

@@ -696,13 +696,21 @@ interface JobTicketDao {
     /**
      * 根据作业票id获取用户数据
      */
-    @Query("""
+    @Query(
+        """
         select ijtu.*,
         su.nick_name as nickName,
         ijtg.group_name
         from is_job_ticket_user ijtu 
         left join sys_user su on ijtu.user_id = su.user_id 
         left join is_job_ticket_group ijtg on ijtg.id = ijtu.group_id 
-        where ijtu.ticket_id in (:ticketIds)""")
+        where ijtu.ticket_id in (:ticketIds)"""
+    )
     fun getTicketUsersByTicketIds(ticketIds: List<Long>): List<IsJobTicketUserDataVo>
+
+    /**
+     * 检查sop是否有进行中的作业
+     */
+    @Query("select count(1) from is_job_ticket where sop_id = :sopId and ticket_status in ('1','2','3','4','7')")
+    fun checkSopHasJobInProgress(sopId: Long): Int
 }

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

@@ -314,4 +314,9 @@ interface IJobTicketRepository {
      * 获取我的待办列表
      */
     fun getMyTodoList(): List<TodoStepJoin>
+
+    /**
+     * 检查sop是否存在进心中的作业
+     */
+    fun checkSopHasJobInProgress(sopId: Long): Boolean
 }

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

@@ -259,6 +259,10 @@ class NetworkJobTicketRepository  @Inject constructor() : BaseRepository(), IJob
         TODO("Not yet implemented")
     }
 
+    override fun checkSopHasJobInProgress(sopId: Long):Boolean {
+        TODO("Not yet implemented")
+    }
+
     override fun isNextLockOrUnLock(ticketId: Long): NextJobPrompt {
         TODO("Not yet implemented")
     }

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

@@ -236,6 +236,10 @@ class JobTicketRepository @Inject constructor(
         jobTicketDao.saveIsJobTicketStep(ticketStep)
     }
 
+    override fun checkSopHasJobInProgress(sopId: Long): Boolean {
+        return jobTicketDao.checkSopHasJobInProgress(sopId) > 1
+    }
+
     override fun getMyTodoList(): List<TodoStepJoin> {
         val userId = MainDomainData.userInfo?.userId ?: return emptyList()
         val userName = MainDomainData.userInfo?.userName ?: return emptyList()
@@ -1183,7 +1187,8 @@ class JobTicketRepository @Inject constructor(
         val workflowStepList = workflowStepDao.getStepsByMode(modeId)
         val ticketStep = mutableListOf<IsJobTicketStep>().apply {
             workflowStepList.forEach { workflowStep ->
-                val isJobTicketStep = BeanUtils.copyProperties(workflowStep, IsJobTicketStep::class.java)
+                val isJobTicketStep =
+                    BeanUtils.copyProperties(workflowStep, IsJobTicketStep::class.java)
                         ?: IsJobTicketStep()
                 isJobTicketStep.ticketId = ticketId
                 isJobTicketStep.stepIndex = workflowStep.stepIndex