Explorar el Código

refactor(点位选择、异常作业):
- 优化点位分组选择逻辑,修复删除分组后仍选中已删除分组的问题
- 调整异常作业步骤获取方式,直接从作业步骤数据中获取,不再依赖工作流步骤
- 优化横屏模式下点位分组标题样式

feat(数据库):
- is_job_ticket_step 表新增 workflow_step 相关字段
- 新增 is_sop_workflow_step 表

周文健 hace 3 meses
padre
commit
301cb812bd

+ 13 - 15
app/src/main/java/com/grkj/iscs/features/main/fragment/common/SelectPointFragment.kt

@@ -90,22 +90,16 @@ class SelectPointFragment : BaseFragment<FragmentSelectPointBinding>() {
     private fun BindingAdapter.BindingViewHolder.onPointGroupRVBinding(holder: BindingAdapter.BindingViewHolder) {
         val itemBinding = holder.getBinding<ItemPointGroupBinding>()
         val item = holder.getModel<JobTicketGroupDataVo<JobPointVo>>()
-        fun groupSelect() {
-            itemBinding.groupTitleLayout.isSelected = !itemBinding.groupTitleLayout.isSelected
-            itemBinding.groupName.isSelected = itemBinding.groupTitleLayout.isSelected
-            itemBinding.deleteGroup.isSelected = itemBinding.groupTitleLayout.isSelected
-            viewModel.currentSelectGroupId = item.jobTicketGroupInfo.groupId
-            adapter.notifyDataSetChanged()
-        }
         itemBinding.groupTitleLayout.setDebouncedClickListener {
-            groupSelect()
+            logger.info("分组选择2:${item.jobTicketGroupInfo.groupId}")
+            viewModel.currentSelectGroupId = item.jobTicketGroupInfo.groupId
         }
         itemBinding.groupName.setDebouncedClickListener {
-            groupSelect()
-        }
-        itemBinding.selectedPointInfoLayout.setDebouncedClickListener {
-            groupSelect()
+            logger.info("分组选择2:${item.jobTicketGroupInfo.groupId}")
+            viewModel.currentSelectGroupId = item.jobTicketGroupInfo.groupId
         }
+        logger.info("分组选择3:${item.jobTicketGroupInfo.groupId}")
+        logger.info("分组选择4:${viewModel.currentSelectGroupId}")
         itemBinding.groupTitleLayout.isSelected =
             item.jobTicketGroupInfo.groupId == viewModel.currentSelectGroupId
         itemBinding.groupName.isSelected =
@@ -122,6 +116,9 @@ class SelectPointFragment : BaseFragment<FragmentSelectPointBinding>() {
             viewModel.selectedPointData.removeIf { it.jobTicketGroupInfo.groupId == item.jobTicketGroupInfo.groupId }
             binding.unselectedPointRv.models =
                 viewModel.pointManageData.filter { it.isSelected == false }
+            if (viewModel.currentSelectGroupId == item.jobTicketGroupInfo.groupId) {
+                viewModel.currentSelectGroupId = null // 关键点!
+            }
             adapter.notifyDataSetChanged()
         }
         itemBinding.editOrSave.setDebouncedClickListener {
@@ -149,13 +146,14 @@ class SelectPointFragment : BaseFragment<FragmentSelectPointBinding>() {
                 imm.hideSoftInputFromWindow(itemBinding.groupName.windowToken, 0)
                 item.jobTicketGroupInfo.groupName = itemBinding.groupName.text.toString()
                 itemBinding.editOrSave.text = getString(R.string.edit)
-
                 adapter?.notifyDataSetChanged()
             }
         }
         itemBinding.groupPointRv.apply {
-            addOnItemTouchListener(BlankAreaTouchListener(this) {
-                groupSelect()
+            addOnItemTouchListener(BlankAreaTouchListener(itemBinding.groupPointRv) {
+                logger.info("分组选择2:${item.jobTicketGroupInfo.groupId}")
+                viewModel.currentSelectGroupId = holder.getModel<JobTicketGroupDataVo<JobPointVo>>().jobTicketGroupInfo.groupId
+                holder.adapter.notifyDataSetChanged()
             })
         }.grid(6).setup {
             addType<JobPointVo>(R.layout.item_select_point)

+ 5 - 5
app/src/main/java/com/grkj/iscs/features/main/fragment/exception_manage/ExceptionJobFragment.kt

@@ -280,7 +280,7 @@ class ExceptionJobFragment : BaseFragment<FragmentExceptionJobBinding>() {
         binding.dataTitleTv.text = when (index) {
             0 -> CommonUtils.getStr(
                 R.string.job_execute_step_description,
-                viewModel.workflowSteps.find { it.stepId == viewModel.currentStepData?.workflowStepId }?.stepTitle
+                viewModel.currentStepData?.stepTitle
                     ?: ""
             ).toString()
 
@@ -293,9 +293,9 @@ class ExceptionJobFragment : BaseFragment<FragmentExceptionJobBinding>() {
     private fun BindingAdapter.BindingViewHolder.onStepRVListBinding(holder: BindingAdapter.BindingViewHolder) {
         val itemBinding = holder.getBinding<ItemJobExecuteStepBinding>()
         val item = holder.getModel<IsJobTicketStepDataVo>()
-        itemBinding.stepIconIv.setImageResource(getStepIcon(viewModel.workflowSteps.find { it.stepId == item.workflowStepId }))
+        itemBinding.stepIconIv.setImageResource(getStepIcon(viewModel.currentStepData))
         itemBinding.stepNameTv.text =
-            viewModel.workflowSteps.find { it.stepId == item.workflowStepId }?.stepTitleShort
+            viewModel.currentStepData?.stepTitleShort
         itemBinding.stepIndexTv.text = item.stepIndex.toString()
         itemBinding.dividerIv.isVisible = item.stepId != viewModel.ticketStep.last().stepId
         val bg = itemBinding.stepLayout.background
@@ -326,7 +326,7 @@ class ExceptionJobFragment : BaseFragment<FragmentExceptionJobBinding>() {
         itemBinding.name.text = item.nickName
     }
 
-    private fun getStepIcon(workflowStep: WorkflowStep?): Int {
+    private fun getStepIcon(workflowStep: IsJobTicketStepDataVo?): Int {
         if (workflowStep == null) {
             return 0
         }
@@ -436,7 +436,7 @@ class ExceptionJobFragment : BaseFragment<FragmentExceptionJobBinding>() {
                     viewModel.currentStepData =
                         viewModel.ticketStep.firstOrNull { it.stepStatus == "0" }
                     binding.stepDescriptionTv.text =
-                        viewModel.workflowSteps.find { it.stepId == viewModel.currentStepData?.workflowStepId }?.stepDescription
+                        viewModel.currentStepData?.stepDescription
                     refreshTicketUser()
                     checkCurrentStep()
                     checkLayout(currentTab)

+ 1 - 1
app/src/main/java/com/grkj/iscs/features/main/viewmodel/common/SelectPointViewModel.kt

@@ -24,7 +24,7 @@ class SelectPointViewModel @Inject constructor(val pointRepository: IIsolationPo
     var unlockFirst: Boolean = false
     var selectedPointData: MutableList<JobTicketGroupDataVo<JobPointVo>> =
         mutableListOf()
-    var currentSelectGroupId: Long = 0L
+    var currentSelectGroupId: Long? = null
 
     /**
      * 获取点位数据

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

@@ -115,7 +115,7 @@ class ExceptionJobViewModel @Inject constructor(
         return liveData(Dispatchers.IO) {
             workflowSteps = workflowRepository.getStepsByMode(modeId)
             for (stepDataVo in ticketStep) {
-                val workflowStep = workflowSteps.find { it.stepId == stepDataVo.workflowStepId }
+                val workflowStep = stepDataVo
                 //如果是自动确认并且没有操作的功能,则更新步骤
                 if (workflowStep?.confirmType != 0 && workflowStep?.hasAnyOperationFunction() == false) {
                     stepDataVo.stepStatus = "1"
@@ -125,9 +125,7 @@ class ExceptionJobViewModel @Inject constructor(
                         jobTicketRepository.updateTicketStepData(jobTicketStep)
                         currentStepData =
                             ticketStep.find { it.stepIndex == jobTicketStep.stepIndex + 1 }
-                        val currentWorkflowStep = workflowSteps.find {
-                            it.stepId == ticketStep.firstOrNull { it.stepStatus == "0" }?.workflowStepId
-                        }
+                        val currentWorkflowStep = ticketStep.firstOrNull { it.stepStatus == "0" }
                         ticketData?.ticketStatus =
                             currentWorkflowStep?.getTicketStatus() ?: ""
                         jobTicketRepository.updateTicketDataStatus(

+ 4 - 3
app/src/main/res/layout-land/item_locker_group.xml

@@ -10,10 +10,10 @@
             android:id="@+id/group_layout"
             android:layout_width="wrap_content"
             android:layout_height="wrap_content"
+            android:layout_gravity="center_vertical"
             android:background="@drawable/home_card_bg"
             android:gravity="center_vertical"
             android:minWidth="@dimen/item_locker_group_min_width"
-            android:layout_gravity="center_vertical"
             android:orientation="vertical">
 
             <LinearLayout
@@ -21,7 +21,8 @@
                 android:layout_width="wrap_content"
                 android:layout_height="wrap_content"
                 android:background="@drawable/bg_item_group_title_layout"
-                android:gravity="center_vertical"
+                android:gravity="center"
+                android:minWidth="@dimen/item_locker_group_min_width"
                 android:orientation="horizontal"
                 android:paddingVertical="@dimen/common_spacing_small">
 
@@ -29,9 +30,9 @@
                     android:id="@+id/group_name"
                     android:layout_width="match_parent"
                     android:layout_height="match_parent"
+                    android:layout_gravity="center"
                     android:enabled="false"
                     android:focusable="false"
-                    android:layout_gravity="center"
                     android:focusableInTouchMode="false"
                     android:gravity="center"
                     android:paddingHorizontal="@dimen/common_spacing"

+ 5 - 3
app/src/main/res/layout/item_locker_group.xml

@@ -20,17 +20,19 @@
                 android:id="@+id/group_title_layout"
                 android:layout_width="wrap_content"
                 android:layout_height="wrap_content"
+                android:layout_gravity="center"
                 android:background="@drawable/bg_item_group_title_layout"
-                android:gravity="center_vertical"
+                android:gravity="center"
+                android:minWidth="@dimen/item_locker_group_min_width"
                 android:orientation="horizontal"
                 android:paddingVertical="@dimen/common_spacing_small">
 
                 <TextView
                     android:id="@+id/group_name"
-                    android:layout_width="match_parent"
+                    android:layout_width="wrap_content"
                     android:layout_height="match_parent"
-                    android:gravity="center"
                     android:layout_gravity="center"
+                    android:gravity="center"
                     android:paddingHorizontal="@dimen/common_spacing"
                     android:text="@string/selected_point_info_title"
                     android:textColor="@color/text_color_item_group_title_text"

+ 23 - 20
data/src/main/java/com/grkj/data/database/ISCSMigrations.kt

@@ -34,51 +34,54 @@ object ISCSMigrations {
                 step_content TEXT,
                 android_step_content TEXT,
                 del_flag TEXT,
-                
-                -- 以下为新增字段(来自 workflow_step)
+
                 step_template_id INTEGER,
                 step_name TEXT,
                 step_title TEXT,
                 step_title_short TEXT,
                 step_description TEXT,
-                confirm_type INTEGER DEFAULT 0,
+                confirm_type INTEGER NOT NULL DEFAULT 0,
                 confirm_role_code TEXT,
                 confirm_user INTEGER,
-                enable_cancel_job INTEGER DEFAULT 0,
-                enable_set_locker INTEGER DEFAULT 0,
-                enable_set_colocker INTEGER DEFAULT 0,
-                enable_add_colocker INTEGER DEFAULT 0,
+
+                enable_cancel_job INTEGER NOT NULL DEFAULT 0,
+                enable_set_locker INTEGER NOT NULL DEFAULT 0,
+                enable_set_colocker INTEGER NOT NULL DEFAULT 0,
+                enable_add_colocker INTEGER NOT NULL DEFAULT 0,
                 goto_step_after_adding_colocker INTEGER,
-                enable_reduce_colocker INTEGER DEFAULT 0,
-                enable_lock INTEGER DEFAULT 0,
-                enable_colock INTEGER DEFAULT 0,
-                enable_release_colock INTEGER DEFAULT 0,
-                enable_unlock INTEGER DEFAULT 0,
-                enable_end_job INTEGER DEFAULT 0
+                enable_reduce_colocker INTEGER NOT NULL DEFAULT 0,
+                enable_lock INTEGER NOT NULL DEFAULT 0,
+                enable_colock INTEGER NOT NULL DEFAULT 0,
+                enable_release_colock INTEGER NOT NULL DEFAULT 0,
+                enable_unlock INTEGER NOT NULL DEFAULT 0,
+                enable_end_job INTEGER NOT NULL DEFAULT 0,
+
+                create_by TEXT,
+                create_time TEXT,
+                update_by TEXT,
+                update_time TEXT,
+                remark TEXT
             );
         """.trimIndent())
 
-            // 2. 拷贝旧数据(workflow_step_id 不再迁移)
             database.execSQL("""
             INSERT INTO is_job_ticket_step_new (
                 step_id, ticket_id, step_index, step_status,
                 step_content, android_step_content, del_flag
+                -- 新字段可以留空(默认值填充)
             )
-            SELECT
-                step_id, ticket_id, step_index, step_status,
-                step_content, android_step_content, del_flag
+            SELECT step_id, ticket_id, step_index, step_status,
+                   step_content, android_step_content, del_flag
             FROM is_job_ticket_step;
         """.trimIndent())
 
-            // 3. 删除旧表
             database.execSQL("DROP TABLE is_job_ticket_step;")
-
-            // 4. 重命名新表为旧表名
             database.execSQL("ALTER TABLE is_job_ticket_step_new RENAME TO is_job_ticket_step;")
             // 5. 增加 is_sop_workflow_step 表
             database.execSQL("""
             CREATE TABLE IF NOT EXISTS is_sop_workflow_step (
                 step_id INTEGER PRIMARY KEY AUTOINCREMENT NOT NULL,
+                sop_id INTEGER NOT NULL,
                 mode_id INTEGER NOT NULL,
                 step_template_id INTEGER,
                 step_index INTEGER NOT NULL,