Эх сурвалжийг харах

refactor(更新)
- 权限修改
- 点位管理列表查询lockId
- 作业票组数据成员字段名修改
- 上下锁作业逻辑修改
- 硬件管理仓位检测提示

周文健 3 сар өмнө
parent
commit
bbab4192a9
23 өөрчлөгдсөн 159 нэмэгдсэн , 121 устгасан
  1. 13 13
      app/src/main/java/com/grkj/iscs/features/main/fragment/common/SelectMemberFragment.kt
  2. 6 8
      app/src/main/java/com/grkj/iscs/features/main/fragment/common/SelectPointFragment.kt
  3. 16 0
      app/src/main/java/com/grkj/iscs/features/main/fragment/hardware_manage/SlotsManageFragment.kt
  4. 6 9
      app/src/main/java/com/grkj/iscs/features/main/fragment/job_manage/CreateJobFragment.kt
  5. 6 7
      app/src/main/java/com/grkj/iscs/features/main/fragment/job_manage/CreateSopFragment.kt
  6. 6 7
      app/src/main/java/com/grkj/iscs/features/main/fragment/job_manage/CreateSopJobFragment.kt
  7. 4 5
      app/src/main/java/com/grkj/iscs/features/main/fragment/job_manage/EditJobFragment.kt
  8. 4 4
      app/src/main/java/com/grkj/iscs/features/main/fragment/job_manage/EditSopFragment.kt
  9. 3 4
      app/src/main/java/com/grkj/iscs/features/main/fragment/job_manage/EditSopJobFragment.kt
  10. 4 5
      app/src/main/java/com/grkj/iscs/features/main/viewmodel/exception_manage/ExceptionJobViewModel.kt
  11. 2 2
      app/src/main/java/com/grkj/iscs/features/main/viewmodel/job_manage/JobViewModel.kt
  12. 2 2
      app/src/main/java/com/grkj/iscs/features/main/viewmodel/job_manage/SopViewModel.kt
  13. 2 0
      app/src/main/res/values-en/strings.xml
  14. 2 0
      app/src/main/res/values-zh/strings.xml
  15. 2 0
      app/src/main/res/values/strings.xml
  16. 2 1
      data/src/main/java/com/grkj/data/dao/JobTicketDao.kt
  17. 6 0
      data/src/main/java/com/grkj/data/logic/impl/standard/ExceptionLogic.kt
  18. 52 42
      data/src/main/java/com/grkj/data/logic/impl/standard/JobTicketLogic.kt
  19. 2 2
      data/src/main/java/com/grkj/data/logic/impl/standard/SopLogic.kt
  20. 11 4
      data/src/main/java/com/grkj/data/logic/impl/standard/SysMenuLogic.kt
  21. 5 2
      data/src/main/java/com/grkj/data/model/extension/TodoDataExtension.kt
  22. 1 2
      data/src/main/java/com/grkj/data/model/vo/JobPointVo.kt
  23. 2 2
      data/src/main/java/com/grkj/data/model/vo/JobTicketGroupDataVo.kt

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

@@ -77,7 +77,7 @@ class SelectMemberFragment : BaseFragment<FragmentSelectMemeberBinding>() {
             navController.popBackStack()
         }
         binding.confirm.setDebouncedClickListener {
-            if (selectedLockerData.flatMap { it.jobTicketGroupMemberList }.isEmpty()) {
+            if (selectedLockerData.flatMap { it.jobTicketGroupDataList }.isEmpty()) {
                 PopTip.build().tip(com.grkj.ui_base.R.string.please_select_locker)
                 return@setDebouncedClickListener
             }
@@ -139,7 +139,7 @@ class SelectMemberFragment : BaseFragment<FragmentSelectMemeberBinding>() {
                 if (isLockerSelect) {
                     selectedLockerData.find {
                         it.jobTicketGroupInfo.groupId == viewModel.currentSelectGroup?.groupId
-                    }?.jobTicketGroupMemberList?.removeIf { it.userId == item.userId }
+                    }?.jobTicketGroupDataList?.removeIf { it.userId == item.userId }
                     item.isSelected = false
                 } else {
                     item.isSelected = false
@@ -158,14 +158,14 @@ class SelectMemberFragment : BaseFragment<FragmentSelectMemeberBinding>() {
                     PopTip.build().tip(R.string.current_user_has_not_face_data)
                 }
                 if (isLockerSelect) {
-                    selectedLockerData.find { it.jobTicketGroupInfo.groupId == viewModel.currentSelectGroup?.groupId }?.jobTicketGroupMemberList?.clear()
-                    selectedLockerData.find { it.jobTicketGroupInfo.groupId == viewModel.currentSelectGroup?.groupId }?.jobTicketGroupMemberList?.add(
+                    selectedLockerData.find { it.jobTicketGroupInfo.groupId == viewModel.currentSelectGroup?.groupId }?.jobTicketGroupDataList?.clear()
+                    selectedLockerData.find { it.jobTicketGroupInfo.groupId == viewModel.currentSelectGroup?.groupId }?.jobTicketGroupDataList?.add(
                         item
                     )
                     viewModel.userData.forEach {
                         it.isSelected =
                             selectedLockerData.find { it.jobTicketGroupInfo.groupId == viewModel.currentSelectGroup?.groupId }
-                                ?.jobTicketGroupMemberList?.map { selectedLocker -> selectedLocker.userId }
+                                ?.jobTicketGroupDataList?.map { selectedLocker -> selectedLocker.userId }
                                 ?.contains(it.userId) == true
                     }
                     viewModel.userData.sortedBy { it.isSelected }
@@ -203,7 +203,7 @@ class SelectMemberFragment : BaseFragment<FragmentSelectMemeberBinding>() {
                 viewModel.userData.filter { it.roleKeys.contains(RoleEnum.JTLOCKER.roleKey) }
                     .onEach {
                         it.isSelected =
-                            item.jobTicketGroupMemberList.map { selectedLocker -> selectedLocker.userId }
+                            item.jobTicketGroupDataList.map { selectedLocker -> selectedLocker.userId }
                                 .contains(it.userId)
                     }.sortedBy { it.isSelected }
             adapter.notifyDataSetChanged()
@@ -225,9 +225,9 @@ class SelectMemberFragment : BaseFragment<FragmentSelectMemeberBinding>() {
         }.linear(LinearLayout.HORIZONTAL).setup {
             addType<JobUserVo>(R.layout.item_select_member)
             onBind {
-                onLockerRVBinding(item.jobTicketGroupInfo, item.jobTicketGroupMemberList, this)
+                onLockerRVBinding(item.jobTicketGroupInfo, item.jobTicketGroupDataList, this)
             }
-        }.models = item.jobTicketGroupMemberList
+        }.models = item.jobTicketGroupDataList
     }
 
     private fun BindingAdapter.BindingViewHolder.onLockerRVBinding(
@@ -247,12 +247,12 @@ class SelectMemberFragment : BaseFragment<FragmentSelectMemeberBinding>() {
             }
         } ?: itemBinding.lockerIcon.setImageResource(R.drawable.icon_select_member)
         itemBinding.root.setDebouncedClickListener {
-            if (selectedLockerData.find { it.jobTicketGroupInfo.groupId == groupData.groupId }?.jobTicketGroupMemberList?.size == 1 && viewModel.jobTicketData != null && viewModel.jobTicketData?.ticketStatus != JobTicketStatusEnum.SELECT_MEMBER.status) {
+            if (selectedLockerData.find { it.jobTicketGroupInfo.groupId == groupData.groupId }?.jobTicketGroupDataList?.size == 1 && viewModel.jobTicketData != null && viewModel.jobTicketData?.ticketStatus != JobTicketStatusEnum.SELECT_MEMBER.status) {
                 PopTip.build().tip(com.grkj.ui_base.R.string.can_not_remove_current_locker)
                 return@setDebouncedClickListener
             }
             if (isLockerSelect) {
-                selectedLockerData.find { it.jobTicketGroupInfo.groupId == groupData.groupId }?.jobTicketGroupMemberList?.removeIf { it.userId == item.userId }
+                selectedLockerData.find { it.jobTicketGroupInfo.groupId == groupData.groupId }?.jobTicketGroupDataList?.removeIf { it.userId == item.userId }
                 viewModel.userData.find { it.userId == item.userId }?.isSelected = false
                 if (groupData.groupId == viewModel.currentSelectGroup?.groupId) {
                     binding.allUserRv.adapter?.notifyDataSetChanged()
@@ -270,13 +270,13 @@ class SelectMemberFragment : BaseFragment<FragmentSelectMemeberBinding>() {
                 isLockerSelect = true
                 checkSelectArea()
                 viewModel.currentSelectGroup = groupData
-                selectedLockerData.find { it.jobTicketGroupInfo.groupId == groupData.groupId }?.jobTicketGroupMemberList?.removeIf { it.userId == item.userId }
+                selectedLockerData.find { it.jobTicketGroupInfo.groupId == groupData.groupId }?.jobTicketGroupDataList?.removeIf { it.userId == item.userId }
                 viewModel.userData.find { it.userId == item.userId }?.isSelected = false
                 binding.allUserRv.models =
                     viewModel.userData.filter { it.roleKeys.contains(RoleEnum.JTLOCKER.roleKey) }
                         .onEach {
                             it.isSelected =
-                                selectedLockerData.find { it.jobTicketGroupInfo.groupId == groupData.groupId }?.jobTicketGroupMemberList?.map { selectedLocker -> selectedLocker.userId }
+                                selectedLockerData.find { it.jobTicketGroupInfo.groupId == groupData.groupId }?.jobTicketGroupDataList?.map { selectedLocker -> selectedLocker.userId }
                                     ?.contains(it.userId) == true
                         }.sortedBy { it.isSelected }
                 adapter.notifyDataSetChanged()
@@ -333,7 +333,7 @@ class SelectMemberFragment : BaseFragment<FragmentSelectMemeberBinding>() {
             }.apply {
                 forEach {
                     it.isSelected =
-                        it.userId in selectedLockerData.flatMap { it.jobTicketGroupMemberList }
+                        it.userId in selectedLockerData.flatMap { it.jobTicketGroupDataList }
                             .map { it.userId }
                 }
                 sortedBy { it.isSelected }

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

@@ -5,7 +5,6 @@ import android.view.inputmethod.InputMethodManager
 import android.widget.LinearLayout
 import androidx.core.view.isVisible
 import androidx.fragment.app.viewModels
-import androidx.recyclerview.widget.ItemTouchHelper
 import com.drake.brv.BindingAdapter
 import com.drake.brv.utils.grid
 import com.drake.brv.utils.linear
@@ -26,7 +25,6 @@ import com.grkj.ui_base.listeners.BlankAreaTouchListener
 import com.grkj.ui_base.utils.CommonUtils
 import com.sik.sikcore.data.GlobalDataTempStore
 import com.sik.sikcore.extension.setDebouncedClickListener
-import com.sik.sikcore.extension.toJson
 import dagger.hilt.android.AndroidEntryPoint
 
 /**
@@ -47,7 +45,7 @@ class SelectPointFragment : BaseFragment<FragmentSelectPointBinding>() {
             navController.popBackStack()
         }
         binding.confirm.setDebouncedClickListener {
-            if (viewModel.selectedPointData.any { it.jobTicketGroupMemberList.isEmpty() }){
+            if (viewModel.selectedPointData.any { it.jobTicketGroupDataList.isEmpty() }){
                 showToast(CommonUtils.getStr(R.string.group_at_least_has_one_point).toString())
                 return@setDebouncedClickListener
             }
@@ -113,7 +111,7 @@ class SelectPointFragment : BaseFragment<FragmentSelectPointBinding>() {
         itemBinding.groupName.setText(item.jobTicketGroupInfo.groupName)
         itemBinding.deleteGroup.isVisible = viewModel.selectedPointData.size > 1
         itemBinding.deleteGroup.setDebouncedClickListener {
-            item.jobTicketGroupMemberList.forEach { selectedPoint ->
+            item.jobTicketGroupDataList.forEach { selectedPoint ->
                 viewModel.pointManageData.find { it.pointId == selectedPoint.pointId }?.isSelected =
                     false
             }
@@ -164,7 +162,7 @@ class SelectPointFragment : BaseFragment<FragmentSelectPointBinding>() {
             onBind {
                 onSelectedPointRVBinding(item.jobTicketGroupInfo, this)
             }
-        }.models = item.jobTicketGroupMemberList
+        }.models = item.jobTicketGroupDataList
     }
 
     private fun BindingAdapter.BindingViewHolder.onSelectedPointRVBinding(
@@ -176,7 +174,7 @@ class SelectPointFragment : BaseFragment<FragmentSelectPointBinding>() {
         itemBinding.pointName.text = item.pointName
         itemBinding.pointIcon.isSelected = false
         itemBinding.root.setDebouncedClickListener {
-            viewModel.selectedPointData.find { it.jobTicketGroupInfo.groupId == groupData.groupId }?.jobTicketGroupMemberList?.removeIf { it.pointId == item.pointId }
+            viewModel.selectedPointData.find { it.jobTicketGroupInfo.groupId == groupData.groupId }?.jobTicketGroupDataList?.removeIf { it.pointId == item.pointId }
             viewModel.pointManageData.find { it.pointId == item.pointId }?.isSelected = false
             binding.unselectedPointRv.models =
                 viewModel.pointManageData.filter { it.isSelected == false }
@@ -195,7 +193,7 @@ class SelectPointFragment : BaseFragment<FragmentSelectPointBinding>() {
                 return@setDebouncedClickListener
             }
             item.isSelected = true
-            viewModel.selectedPointData.find { it.jobTicketGroupInfo.groupId == viewModel.currentSelectGroupId }?.jobTicketGroupMemberList?.add(
+            viewModel.selectedPointData.find { it.jobTicketGroupInfo.groupId == viewModel.currentSelectGroupId }?.jobTicketGroupDataList?.add(
                 item
             )
             binding.unselectedPointRv.models =
@@ -243,7 +241,7 @@ class SelectPointFragment : BaseFragment<FragmentSelectPointBinding>() {
             binding.unselectedPointRv.models = viewModel.pointManageData.apply {
                 forEach {
                     it.isSelected =
-                        it.pointId in viewModel.selectedPointData.flatMap { it.jobTicketGroupMemberList }
+                        it.pointId in viewModel.selectedPointData.flatMap { it.jobTicketGroupDataList }
                             .map { it.pointId }
                 }
             }.filter { it.isSelected == false }

+ 16 - 0
app/src/main/java/com/grkj/iscs/features/main/fragment/hardware_manage/SlotsManageFragment.kt

@@ -255,6 +255,10 @@ class SlotsManageFragment : BaseFragment<FragmentSlotsManageBinding>() {
                     slotSwitch(false, itemKey)
                 }
                 itemKeyBinding.detect.setDebouncedClickListener {
+                    if (!itemKey.isExist) {
+                        showToast(getString(R.string.current_slot_has_no_key))
+                        return@setDebouncedClickListener
+                    }
                     detectSlot(itemKey)
                 }
                 itemKeyBinding.ivKey.setOnLongClickListener { v ->
@@ -331,6 +335,10 @@ class SlotsManageFragment : BaseFragment<FragmentSlotsManageBinding>() {
                     slotSwitch(false, itemLock)
                 }
                 itemLockBinding.detect.setDebouncedClickListener {
+                    if (!itemLock.isExist) {
+                        showToast(getString(R.string.current_slot_has_no_lock))
+                        return@setDebouncedClickListener
+                    }
                     detectSlot(itemLock)
                 }
                 itemLockBinding.root.setOnLongClickListener { v ->
@@ -408,6 +416,10 @@ class SlotsManageFragment : BaseFragment<FragmentSlotsManageBinding>() {
                             slotSwitch(false, itemPortable)
                         }
                         itemKeyBinding.detect.setDebouncedClickListener {
+                            if (!itemPortable.isExist) {
+                                showToast(getString(R.string.current_slot_has_no_key))
+                                return@setDebouncedClickListener
+                            }
                             detectSlot(itemPortable)
                         }
                         itemKeyBinding.ivKey.setOnLongClickListener { v ->
@@ -473,6 +485,10 @@ class SlotsManageFragment : BaseFragment<FragmentSlotsManageBinding>() {
                             slotSwitch(false, itemPortable)
                         }
                         itemLockBinding.detect.setDebouncedClickListener {
+                            if (!itemPortable.isExist) {
+                                showToast(getString(R.string.current_slot_has_no_lock))
+                                return@setDebouncedClickListener
+                            }
                             detectSlot(itemPortable)
                         }
                         itemLockBinding.root.setOnLongClickListener { v ->

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

@@ -10,12 +10,10 @@ import com.drake.brv.utils.grid
 import com.drake.brv.utils.linear
 import com.drake.brv.utils.models
 import com.drake.brv.utils.setup
-import com.google.gson.Gson
 import com.grkj.data.data.Type
 import com.grkj.data.model.dos.WorkflowStep
 import com.grkj.data.model.vo.JobPointVo
 import com.grkj.data.model.vo.JobTicketGroupDataVo
-import com.grkj.data.model.vo.JobTicketGroupInfoVo
 import com.grkj.data.model.vo.JobUserVo
 import com.grkj.iscs.R
 import com.grkj.iscs.common.DataTransferConstants
@@ -41,7 +39,6 @@ import com.sik.sikimage.ImageConvertUtils
 import dagger.hilt.android.AndroidEntryPoint
 import kotlin.coroutines.resume
 import kotlin.coroutines.suspendCoroutine
-import kotlin.math.log
 
 /**
  * 新建作业
@@ -468,7 +465,7 @@ class CreateJobFragment : BaseFormFragment<FragmentCreateJobBinding>() {
             PopTip.tip(R.string.please_must_select_at_least_one_point)
             return false
         }
-        if (selectedLockerData.map { it.jobTicketGroupMemberList }.any { it.isEmpty() }) {
+        if (selectedLockerData.map { it.jobTicketGroupDataList }.any { it.isEmpty() }) {
             PopTip.tip(com.grkj.ui_base.R.string.select_locker)
             return false
         }
@@ -489,7 +486,7 @@ class CreateJobFragment : BaseFormFragment<FragmentCreateJobBinding>() {
             onBind {
                 onLockerRVBinding(this)
             }
-        }.models = item.jobTicketGroupMemberList
+        }.models = item.jobTicketGroupDataList
     }
 
     private fun BindingAdapter.BindingViewHolder.onLockerRVBinding(
@@ -531,7 +528,7 @@ class CreateJobFragment : BaseFormFragment<FragmentCreateJobBinding>() {
             onBind {
                 onSelectedPointRVBinding(this)
             }
-        }.models = item.jobTicketGroupMemberList
+        }.models = item.jobTicketGroupDataList
     }
 
     private fun BindingAdapter.BindingViewHolder.onSelectedPointRVBinding(holder: BindingAdapter.BindingViewHolder) {
@@ -577,7 +574,7 @@ class CreateJobFragment : BaseFormFragment<FragmentCreateJobBinding>() {
                 selectedLockerData = selectedPointData.map {
                     JobTicketGroupDataVo(
                         it.jobTicketGroupInfo,
-                        selectedLockerData.find { lockerGroup -> it.jobTicketGroupInfo.groupId == lockerGroup.jobTicketGroupInfo.groupId }?.jobTicketGroupMemberList
+                        selectedLockerData.find { lockerGroup -> it.jobTicketGroupInfo.groupId == lockerGroup.jobTicketGroupInfo.groupId }?.jobTicketGroupDataList
                             ?: mutableListOf()
                     )
                 }
@@ -589,10 +586,10 @@ class CreateJobFragment : BaseFormFragment<FragmentCreateJobBinding>() {
         }
 
         binding.noSelectedMemberLayout.isVisible =
-            selectedColockerData.isEmpty() && selectedLockerData.flatMap { it.jobTicketGroupMemberList }
+            selectedColockerData.isEmpty() && selectedLockerData.flatMap { it.jobTicketGroupDataList }
                 .isEmpty()
         binding.noSelectedPointLayout.isVisible = selectedPointData.isEmpty()
-        viewModel.getUserBiometricDataByUserIds((selectedLockerData.flatMap { it.jobTicketGroupMemberList } + selectedColockerData).map { it.userId })
+        viewModel.getUserBiometricDataByUserIds((selectedLockerData.flatMap { it.jobTicketGroupDataList } + selectedColockerData).map { it.userId })
             .observe(this) {
                 if (selectedColockerData.isNotEmpty()) {
                     binding.colockerRv.models = selectedColockerData

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

@@ -14,7 +14,6 @@ import com.grkj.data.data.Type
 import com.grkj.data.model.dos.WorkflowStep
 import com.grkj.data.model.vo.JobPointVo
 import com.grkj.data.model.vo.JobTicketGroupDataVo
-import com.grkj.data.model.vo.JobTicketGroupInfoVo
 import com.grkj.data.model.vo.JobUserVo
 import com.grkj.iscs.R
 import com.grkj.iscs.common.DataTransferConstants
@@ -351,7 +350,7 @@ class CreateSopFragment : BaseFormFragment<FragmentCreateSopBinding>() {
             PopTip.tip(R.string.please_must_select_at_least_one_point)
             return false
         }
-        if (selectedLockerData.map { it.jobTicketGroupMemberList }.any { it.isEmpty() }) {
+        if (selectedLockerData.map { it.jobTicketGroupDataList }.any { it.isEmpty() }) {
             PopTip.tip(com.grkj.ui_base.R.string.select_locker)
             return false
         }
@@ -371,7 +370,7 @@ class CreateSopFragment : BaseFormFragment<FragmentCreateSopBinding>() {
             onBind {
                 onLockerRVBinding(this)
             }
-        }.models = item.jobTicketGroupMemberList
+        }.models = item.jobTicketGroupDataList
     }
 
     private fun BindingAdapter.BindingViewHolder.onLockerRVBinding(
@@ -413,7 +412,7 @@ class CreateSopFragment : BaseFormFragment<FragmentCreateSopBinding>() {
             onBind {
                 onSelectedPointRVBinding(this)
             }
-        }.models = item.jobTicketGroupMemberList
+        }.models = item.jobTicketGroupDataList
     }
 
     private fun BindingAdapter.BindingViewHolder.onSelectedPointRVBinding(holder: BindingAdapter.BindingViewHolder) {
@@ -458,7 +457,7 @@ class CreateSopFragment : BaseFormFragment<FragmentCreateSopBinding>() {
                 selectedLockerData = selectedPointData.map {
                     JobTicketGroupDataVo(
                         it.jobTicketGroupInfo,
-                        selectedLockerData.find { lockerGroup -> it.jobTicketGroupInfo.groupId == lockerGroup.jobTicketGroupInfo.groupId }?.jobTicketGroupMemberList
+                        selectedLockerData.find { lockerGroup -> it.jobTicketGroupInfo.groupId == lockerGroup.jobTicketGroupInfo.groupId }?.jobTicketGroupDataList
                             ?: mutableListOf()
                     )
                 }
@@ -469,10 +468,10 @@ class CreateSopFragment : BaseFormFragment<FragmentCreateSopBinding>() {
             }
         }
         binding.noSelectedMemberLayout.isVisible =
-            selectedColockerData.isEmpty() && selectedLockerData.flatMap { it.jobTicketGroupMemberList }
+            selectedColockerData.isEmpty() && selectedLockerData.flatMap { it.jobTicketGroupDataList }
                 .isEmpty()
         binding.noSelectedPointLayout.isVisible = selectedPointData.isEmpty()
-        viewModel.getUserBiometricDataByUserIds((selectedLockerData.flatMap { it.jobTicketGroupMemberList } + selectedColockerData).map { it.userId })
+        viewModel.getUserBiometricDataByUserIds((selectedLockerData.flatMap { it.jobTicketGroupDataList } + selectedColockerData).map { it.userId })
             .observe(this) {
                 if (selectedColockerData.isNotEmpty()) {
                     binding.colockerRv.models = selectedColockerData

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

@@ -14,7 +14,6 @@ import com.grkj.data.data.Type
 import com.grkj.data.model.dos.WorkflowStep
 import com.grkj.data.model.vo.JobPointVo
 import com.grkj.data.model.vo.JobTicketGroupDataVo
-import com.grkj.data.model.vo.JobTicketGroupInfoVo
 import com.grkj.data.model.vo.JobUserVo
 import com.grkj.data.model.vo.SopManageVo
 import com.grkj.iscs.R
@@ -322,7 +321,7 @@ class CreateSopJobFragment : BaseFormFragment<FragmentCreateSopJobBinding>() {
             PopTip.tip(R.string.please_input_job_name)
             return false
         }
-        if (selectedLockerData.map { it.jobTicketGroupMemberList }.any { it.isEmpty() }) {
+        if (selectedLockerData.map { it.jobTicketGroupDataList }.any { it.isEmpty() }) {
             PopTip.tip(com.grkj.ui_base.R.string.select_locker)
             return false
         }
@@ -344,7 +343,7 @@ class CreateSopJobFragment : BaseFormFragment<FragmentCreateSopJobBinding>() {
             onBind {
                 onLockerRVBinding(this)
             }
-        }.models = item.jobTicketGroupMemberList
+        }.models = item.jobTicketGroupDataList
     }
 
     private fun BindingAdapter.BindingViewHolder.onLockerRVBinding(
@@ -386,7 +385,7 @@ class CreateSopJobFragment : BaseFormFragment<FragmentCreateSopJobBinding>() {
             onBind {
                 onSelectedPointRVBinding(this)
             }
-        }.models = item.jobTicketGroupMemberList
+        }.models = item.jobTicketGroupDataList
     }
 
     private fun BindingAdapter.BindingViewHolder.onSelectedPointRVBinding(holder: BindingAdapter.BindingViewHolder) {
@@ -418,10 +417,10 @@ class CreateSopJobFragment : BaseFormFragment<FragmentCreateSopJobBinding>() {
                 .getData(DataTransferConstants.KEY_SELECTED_MEMBER_COLOCKER_DATA) ?: listOf()
         }
         binding.noSelectedMemberLayout.isVisible =
-            selectedColockerData.isEmpty() && selectedLockerData.flatMap { it.jobTicketGroupMemberList }
+            selectedColockerData.isEmpty() && selectedLockerData.flatMap { it.jobTicketGroupDataList }
                 .isEmpty()
         binding.noSelectedPointLayout.isVisible = selectedPointData.isEmpty()
-        viewModel.getUserBiometricDataByUserIds((selectedLockerData.flatMap { it.jobTicketGroupMemberList } + selectedColockerData).map { it.userId })
+        viewModel.getUserBiometricDataByUserIds((selectedLockerData.flatMap { it.jobTicketGroupDataList } + selectedColockerData).map { it.userId })
             .observe(this) {
                 if (selectedColockerData.isNotEmpty()) {
                     binding.colockerRv.models = selectedColockerData
@@ -512,7 +511,7 @@ class CreateSopJobFragment : BaseFormFragment<FragmentCreateSopJobBinding>() {
             binding.lockerRv.models = selectedLockerData
             binding.colockerRv.models = selectedColockerData
             binding.noSelectedMemberLayout.isVisible =
-                selectedColockerData.isEmpty() && selectedLockerData.flatMap { it.jobTicketGroupMemberList }
+                selectedColockerData.isEmpty() && selectedLockerData.flatMap { it.jobTicketGroupDataList }
                     .isEmpty()
             binding.noSelectedPointLayout.isVisible = selectedPointData.isEmpty()
         }

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

@@ -35,7 +35,6 @@ import com.kongzue.dialogx.dialogs.PopTip
 import com.sik.sikcore.data.GlobalDataTempStore
 import com.sik.sikcore.extension.file
 import com.sik.sikcore.extension.setDebouncedClickListener
-import com.sik.sikcore.extension.toJson
 import com.sik.sikimage.ImageConvertUtils
 import dagger.hilt.android.AndroidEntryPoint
 
@@ -336,7 +335,7 @@ class EditJobFragment : BaseFormFragment<FragmentEditJobBinding>() {
             PopTip.build().tip(R.string.please_must_select_at_least_one_point)
             return false
         }
-        if (selectedLockerData.map { it.jobTicketGroupMemberList }.any { it.isEmpty() }) {
+        if (selectedLockerData.map { it.jobTicketGroupDataList }.any { it.isEmpty() }) {
             PopTip.tip(com.grkj.ui_base.R.string.select_locker)
             return false
         }
@@ -358,7 +357,7 @@ class EditJobFragment : BaseFormFragment<FragmentEditJobBinding>() {
             onBind {
                 onLockerRVBinding(this)
             }
-        }.models = item.jobTicketGroupMemberList
+        }.models = item.jobTicketGroupDataList
     }
 
     private fun BindingAdapter.BindingViewHolder.onLockerRVBinding(
@@ -400,7 +399,7 @@ class EditJobFragment : BaseFormFragment<FragmentEditJobBinding>() {
             onBind {
                 onSelectedPointRVBinding(this)
             }
-        }.models = item.jobTicketGroupMemberList
+        }.models = item.jobTicketGroupDataList
     }
 
     private fun BindingAdapter.BindingViewHolder.onSelectedPointRVBinding(holder: BindingAdapter.BindingViewHolder) {
@@ -496,7 +495,7 @@ class EditJobFragment : BaseFormFragment<FragmentEditJobBinding>() {
                 selectedLockerData = selectedPointData.map {
                     JobTicketGroupDataVo(
                         it.jobTicketGroupInfo,
-                        selectedLockerData.find { lockerGroup -> it.jobTicketGroupInfo.groupId == lockerGroup.jobTicketGroupInfo.groupId }?.jobTicketGroupMemberList
+                        selectedLockerData.find { lockerGroup -> it.jobTicketGroupInfo.groupId == lockerGroup.jobTicketGroupInfo.groupId }?.jobTicketGroupDataList
                             ?: mutableListOf()
                     )
                 }

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

@@ -302,7 +302,7 @@ class EditSopFragment : BaseFormFragment<FragmentEditSopBinding>() {
             PopTip.build().tip(R.string.please_must_select_at_least_one_point)
             return false
         }
-        if (selectedLockerData.map { it.jobTicketGroupMemberList }.any { it.isEmpty() }) {
+        if (selectedLockerData.map { it.jobTicketGroupDataList }.any { it.isEmpty() }) {
             PopTip.tip(com.grkj.ui_base.R.string.select_locker)
             return false
         }
@@ -323,7 +323,7 @@ class EditSopFragment : BaseFormFragment<FragmentEditSopBinding>() {
             onBind {
                 onLockerRVBinding(this)
             }
-        }.models = item.jobTicketGroupMemberList
+        }.models = item.jobTicketGroupDataList
     }
 
     private fun BindingAdapter.BindingViewHolder.onLockerRVBinding(
@@ -365,7 +365,7 @@ class EditSopFragment : BaseFormFragment<FragmentEditSopBinding>() {
             onBind {
                 onSelectedPointRVBinding(this)
             }
-        }.models = item.jobTicketGroupMemberList
+        }.models = item.jobTicketGroupDataList
     }
 
     private fun BindingAdapter.BindingViewHolder.onSelectedPointRVBinding(holder: BindingAdapter.BindingViewHolder) {
@@ -463,7 +463,7 @@ class EditSopFragment : BaseFormFragment<FragmentEditSopBinding>() {
                 selectedLockerData = selectedPointData.map {
                     JobTicketGroupDataVo(
                         it.jobTicketGroupInfo,
-                        selectedLockerData.find { lockerGroup -> it.jobTicketGroupInfo.groupId == lockerGroup.jobTicketGroupInfo.groupId }?.jobTicketGroupMemberList
+                        selectedLockerData.find { lockerGroup -> it.jobTicketGroupInfo.groupId == lockerGroup.jobTicketGroupInfo.groupId }?.jobTicketGroupDataList
                             ?: mutableListOf()
                     )
                 }

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

@@ -14,7 +14,6 @@ import com.grkj.data.data.Type
 import com.grkj.data.model.dos.WorkflowStep
 import com.grkj.data.model.vo.JobPointVo
 import com.grkj.data.model.vo.JobTicketGroupDataVo
-import com.grkj.data.model.vo.JobTicketGroupInfoVo
 import com.grkj.data.model.vo.JobUserVo
 import com.grkj.data.model.vo.SopManageVo
 import com.grkj.iscs.R
@@ -321,7 +320,7 @@ class EditSopJobFragment : BaseFormFragment<FragmentEditSopJobBinding>() {
             PopTip.tip(R.string.please_input_job_name)
             return false
         }
-        if (selectedLockerData.map { it.jobTicketGroupMemberList }.any { it.isEmpty() }) {
+        if (selectedLockerData.map { it.jobTicketGroupDataList }.any { it.isEmpty() }) {
             PopTip.tip(com.grkj.ui_base.R.string.select_locker)
             return false
         }
@@ -342,7 +341,7 @@ class EditSopJobFragment : BaseFormFragment<FragmentEditSopJobBinding>() {
             onBind {
                 onLockerRVBinding(this)
             }
-        }.models = item.jobTicketGroupMemberList
+        }.models = item.jobTicketGroupDataList
     }
 
     private fun BindingAdapter.BindingViewHolder.onLockerRVBinding(
@@ -384,7 +383,7 @@ class EditSopJobFragment : BaseFormFragment<FragmentEditSopJobBinding>() {
             onBind {
                 onSelectedPointRVBinding(this)
             }
-        }.models = item.jobTicketGroupMemberList
+        }.models = item.jobTicketGroupDataList
     }
 
     private fun BindingAdapter.BindingViewHolder.onSelectedPointRVBinding(holder: BindingAdapter.BindingViewHolder) {

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

@@ -6,6 +6,9 @@ import com.grkj.data.data.DictConstants
 import com.grkj.data.enums.JobTicketStatusEnum
 import com.grkj.data.enums.NextJobPrompt
 import com.grkj.data.enums.RoleEnum
+import com.grkj.data.logic.IExceptionLogic
+import com.grkj.data.logic.IJobTicketLogic
+import com.grkj.data.logic.IUserLogic
 import com.grkj.data.model.dos.IsJobTicketStep
 import com.grkj.data.model.res.CommonDictRes
 import com.grkj.data.model.vo.IsExceptionStandardVo
@@ -18,9 +21,6 @@ import com.grkj.data.model.vo.IsJobTicketUserDataVo
 import com.grkj.data.model.vo.JobTicketGroupDataVo
 import com.grkj.data.model.vo.JobTicketGroupInfoVo
 import com.grkj.data.model.vo.JobUserVo
-import com.grkj.data.logic.IExceptionLogic
-import com.grkj.data.logic.IJobTicketLogic
-import com.grkj.data.logic.IUserLogic
 import com.grkj.iscs.R
 import com.grkj.ui_base.base.BaseViewModel
 import com.grkj.ui_base.business.DataBusiness
@@ -232,8 +232,7 @@ class ExceptionJobViewModel @Inject constructor(
                     ticketId,
                     jobTicketUsers.filter { it.userRole == RoleEnum.JTCOLOCKER.roleKey }
                         .map {
-                            it
-                                .userId
+                            it.userId
                         })
             jobTicketRepository.createLockJob(
                 jobTicketPoints,

+ 2 - 2
app/src/main/java/com/grkj/iscs/features/main/viewmodel/job_manage/JobViewModel.kt

@@ -76,10 +76,10 @@ class JobViewModel @Inject constructor(
                 isSopGroup.groupName = it.jobTicketGroupInfo.groupName ?: ""
                 isSopGroup.sopId = sopId
                 val groupId = sopRepository.saveSopGroup(isSopGroup)
-                it.jobTicketGroupMemberList.forEach {
+                it.jobTicketGroupDataList.forEach {
                     it.groupId = groupId
                 }
-                selectedLockerData.find { lockerGroup -> lockerGroup.jobTicketGroupInfo.groupId == it.jobTicketGroupInfo.groupId }?.jobTicketGroupMemberList?.forEach {
+                selectedLockerData.find { lockerGroup -> lockerGroup.jobTicketGroupInfo.groupId == it.jobTicketGroupInfo.groupId }?.jobTicketGroupDataList?.forEach {
                     it.groupId=groupId
                 }
             }

+ 2 - 2
app/src/main/java/com/grkj/iscs/features/main/viewmodel/job_manage/SopViewModel.kt

@@ -71,10 +71,10 @@ class SopViewModel @Inject constructor(
                 isSopGroup.groupName = it.jobTicketGroupInfo.groupName ?: ""
                 isSopGroup.sopId = sopId
                 val groupId = sopRepository.saveSopGroup(isSopGroup)
-                it.jobTicketGroupMemberList.forEach { pointVo ->
+                it.jobTicketGroupDataList.forEach { pointVo ->
                     pointVo.groupId = groupId
                 }
-                selectedLockerData.find { lockerGroup -> lockerGroup.jobTicketGroupInfo.groupId == it.jobTicketGroupInfo.groupId }?.jobTicketGroupMemberList?.forEach { locker ->
+                selectedLockerData.find { lockerGroup -> lockerGroup.jobTicketGroupInfo.groupId == it.jobTicketGroupInfo.groupId }?.jobTicketGroupDataList?.forEach { locker ->
                     locker.groupId = groupId
                 }
             }

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

@@ -557,5 +557,7 @@
     <string name="workstation_manage_update_workstation">Edit workstation</string>
     <string name="update_workstation_succeed">Update workstation success</string>
     <string name="update_workstation_failed">Update workstation failed</string>
+    <string name="current_slot_has_no_key">Current slot has no key</string>
+    <string name="current_slot_has_no_lock">Current slot has no lock</string>
 
 </resources>

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

@@ -557,5 +557,7 @@
     <string name="workstation_manage_update_workstation">修改区域</string>
     <string name="update_workstation_succeed">更新区域成功</string>
     <string name="update_workstation_failed">更新区域失败</string>
+    <string name="current_slot_has_no_key">当前仓位不存在钥匙</string>
+    <string name="current_slot_has_no_lock">当前仓位不存在挂锁</string>
 
 </resources>

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

@@ -560,5 +560,7 @@
     <string name="workstation_manage_update_workstation">修改区域</string>
     <string name="update_workstation_succeed">更新区域成功</string>
     <string name="update_workstation_failed">更新区域失败</string>
+    <string name="current_slot_has_no_key">当前仓位不存在钥匙</string>
+    <string name="current_slot_has_no_lock">当前仓位不存在挂锁</string>
 
 </resources>

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

@@ -56,7 +56,7 @@ interface JobTicketDao {
      * 保存作业票点位
      */
     @Insert(onConflict = OnConflictStrategy.REPLACE)
-    fun saveIsJobTicketPoints(ticket: List<IsJobTicketPoints>): List<Long>
+    fun saveIsJobTicketPoints(ticket: List<IsJobTicketPoints>)
 
     /**
      * 保存作业票步骤
@@ -224,6 +224,7 @@ interface JobTicketDao {
         irt.rfid as rfidToken,
         irt.rfid_id as rfidId,
         ijtp.point_status as pointStatus,
+        ijtp.lock_id as lockId,
         iip.power_type as powerType,
         ijtp.group_id as groupId,
         ijtg.group_name as groupName

+ 6 - 0
data/src/main/java/com/grkj/data/logic/impl/standard/ExceptionLogic.kt

@@ -139,6 +139,8 @@ class ExceptionLogic @Inject constructor(
                     CommonDictDataEnum.EXCEPTION_SOURCE_TYPE.commonDictRes.find { it.dictLabel == "作业" }?.dictValue?.toInt() -> {
                         val jobTicketData =
                             jobTicketDao.getTicketRawDataByTicketId(exceptionSource.sourceDataId)
+                        val jobTicketSteps =
+                            jobTicketDao.getJobTicketStepDataByTicketId(exceptionSource.sourceDataId)
                         jobTicketData?.exStatus =
                             CommonDictDataEnum.JOB_TICKET_STATUS.commonDictRes.find { it.dictLabel == "异常" }?.dictValue?.toInt()
                         jobTicketData?.remark = exceptionSource.remark
@@ -157,6 +159,10 @@ class ExceptionLogic @Inject constructor(
                                     "结束作业"
                                 )
                             }?.dictValue) {
+                            jobTicketSteps.forEach {
+                                it.stepStatus = "1"
+                                jobTicketDao.updateTicketStepData(it)
+                            }
                             jobTicketData?.ticketStatus = JobTicketStatusEnum.FINISHED.status
                         }
                         jobTicketData?.let {

+ 52 - 42
data/src/main/java/com/grkj/data/logic/impl/standard/JobTicketLogic.kt

@@ -23,7 +23,6 @@ import com.grkj.data.model.dos.IsJobTicketPoints
 import com.grkj.data.model.dos.IsJobTicketStep
 import com.grkj.data.model.dos.IsJobTicketUser
 import com.grkj.data.model.local.TodoStepJoin
-import com.grkj.data.model.local.isMyTodo
 import com.grkj.data.model.local.only
 import com.grkj.data.model.req.LockPointUpdateReq
 import com.grkj.data.model.res.StepDetailRes
@@ -78,10 +77,10 @@ class JobTicketLogic @Inject constructor(
             isJobTicketGroup.ticketId = ticketId
             isJobTicketGroup.groupName = it.jobTicketGroupInfo.groupName ?: ""
             val groupId = jobTicketDao.saveIsJobTicketGroup(isJobTicketGroup)
-            selectedLockerData.find { lockerGroup -> lockerGroup.jobTicketGroupInfo.groupId == it.jobTicketGroupInfo.groupId }?.jobTicketGroupMemberList?.forEach { locker ->
+            selectedLockerData.find { lockerGroup -> lockerGroup.jobTicketGroupInfo.groupId == it.jobTicketGroupInfo.groupId }?.jobTicketGroupDataList?.forEach { locker ->
                 locker.groupId = groupId
             }
-            it.jobTicketGroupMemberList.map {
+            it.jobTicketGroupDataList.map {
                 val isJobTicketPoint = IsJobTicketPoints()
                 isJobTicketPoint.ticketId = ticketId
                 isJobTicketPoint.pointId = it.pointId
@@ -92,10 +91,10 @@ class JobTicketLogic @Inject constructor(
                 isJobTicketPoint
             }
         }
-        val ticketPointIds = jobTicketDao.saveIsJobTicketPoints(ticketPoints.flatten())
+        jobTicketDao.saveIsJobTicketPoints(ticketPoints.flatten())
         val ticketPointSaveData = jobTicketDao.getJobTicketPointsDataByTicketId(ticketId)
         val ticketLockerUsers = selectedLockerData.map {
-            it.jobTicketGroupMemberList.map {
+            it.jobTicketGroupDataList.map {
                 val isJobticketUser = IsJobTicketUser()
                 isJobticketUser.userId = it.userId
                 isJobticketUser.ticketId = ticketId
@@ -116,11 +115,11 @@ class JobTicketLogic @Inject constructor(
         jobTicketDao.saveIsJobTicketUser(ticketLockerUsers.flatten())
         jobTicketDao.saveIsJobTicketUser(ticketColockerUsers)
         val ticketLocks = mutableListOf<IsJobTicketLock>().apply {
-            ticketPointIds.forEach { point ->
+            ticketPointSaveData.forEach { point ->
                 val isJobTicketLock = IsJobTicketLock()
                 isJobTicketLock.ticketId = ticketId
-                isJobTicketLock.isolationPointId = point
-                isJobTicketLock.groupId = ticketPointSaveData.find { it.recordId == point }?.groupId
+                isJobTicketLock.isolationPointId = point.pointId
+                isJobTicketLock.groupId = point.groupId
                 add(isJobTicketLock)
             }
         }
@@ -186,10 +185,10 @@ class JobTicketLogic @Inject constructor(
             isJobTicketGroup.id = it.jobTicketGroupInfo.groupId
             isJobTicketGroup.groupName = it.jobTicketGroupInfo.groupName ?: ""
             val groupId = jobTicketDao.saveIsJobTicketGroup(isJobTicketGroup)
-            selectedLockerData.find { lockerGroup -> it.jobTicketGroupInfo.groupId == lockerGroup.jobTicketGroupInfo.groupId }?.jobTicketGroupMemberList?.forEach {
+            selectedLockerData.find { lockerGroup -> it.jobTicketGroupInfo.groupId == lockerGroup.jobTicketGroupInfo.groupId }?.jobTicketGroupDataList?.forEach {
                 it.groupId = groupId
             }
-            it.jobTicketGroupMemberList.map {
+            it.jobTicketGroupDataList.map {
                 val isJobTicketPoint = IsJobTicketPoints()
                 isJobTicketPoint.ticketId = ticketId
                 isJobTicketPoint.pointId = it.pointId
@@ -200,10 +199,10 @@ class JobTicketLogic @Inject constructor(
                 isJobTicketPoint
             }
         }
-        val ticketPointIds = jobTicketDao.saveIsJobTicketPoints(ticketPoints.flatten())
+        jobTicketDao.saveIsJobTicketPoints(ticketPoints.flatten())
         val ticketPointSaveData = jobTicketDao.getJobTicketPointsDataByTicketId(ticketId)
         val ticketLockerUsers = selectedLockerData.map {
-            it.jobTicketGroupMemberList.map {
+            it.jobTicketGroupDataList.map {
                 val isJobticketUser = IsJobTicketUser()
                 isJobticketUser.userId = it.userId
                 isJobticketUser.ticketId = ticketId
@@ -224,11 +223,9 @@ class JobTicketLogic @Inject constructor(
         jobTicketDao.saveIsJobTicketUser(ticketLockerUsers.flatten())
         jobTicketDao.saveIsJobTicketUser(ticketColockerUsers)
         val ticketLocks = mutableListOf<IsJobTicketLock>().apply {
-            ticketPointIds.forEach { point ->
+            ticketPointSaveData.forEach { point ->
                 val isJobTicketLock = IsJobTicketLock()
                 isJobTicketLock.ticketId = ticketId
-                isJobTicketLock.isolationPointId = point
-                isJobTicketLock.groupId = ticketPointSaveData.find { it.recordId == point }?.groupId
                 add(isJobTicketLock)
             }
         }
@@ -848,10 +845,10 @@ class JobTicketLogic @Inject constructor(
     ) {
         val existsUsers = jobTicketDao.getJobTicketUserDataByTicketId(ticketId)
         jobTicketDao.deleteJobTicketUserByUserIds(existsUsers.filter {
-            it.userId !in (selectedLockerData.map { it.jobTicketGroupMemberList }
+            it.userId !in (selectedLockerData.map { it.jobTicketGroupDataList }
                 .flatten() + selectedColockerData).map { it.userId }
         }.map { it.userId })
-        val newLockUser = selectedLockerData.map { it.jobTicketGroupMemberList }.flatten()
+        val newLockUser = selectedLockerData.map { it.jobTicketGroupDataList }.flatten()
             .filter { it.userId !in existsUsers.map { it.userId } }
         val newCoLockUser =
             selectedColockerData.filter { it.userId !in existsUsers.map { it.userId } }
@@ -1167,6 +1164,9 @@ class JobTicketLogic @Inject constructor(
         }
     }
 
+    /**
+     * 创建上锁作业
+     */
     override fun createLockJob(
         selectedPointsData: List<JobTicketGroupDataVo<JobPointVo>>,
         selectedLockerData: List<JobTicketGroupDataVo<JobUserVo>>,
@@ -1175,40 +1175,42 @@ class JobTicketLogic @Inject constructor(
         workstationId: Long,
         jobName: String
     ): Long {
-        val modeId = workflowStepDao.getWorkflowModes().find { it.modeName == "锁" }?.modeId!!
+        val modeId = workflowStepDao.getWorkflowModes().find { it.modeName == "锁" }?.modeId!!
         val isJobTicket = IsJobTicket()
-        isJobTicket.ticketName = jobName
+        isJobTicket.ticketName = "${jobName}-上锁"
         isJobTicket.workstationId = workstationId
         isJobTicket.modeId = modeId
         isJobTicket.sopId = sopId
         val ticketId = jobTicketDao.saveIsJobTicket(isJobTicket)
-        val isUnlockFirst = workflowStepDao.isUnlockBeforeLock(modeId)
+        val groupData = mutableMapOf<String, Long>()
         val ticketPoints = selectedPointsData.map {
             val isJobTicketGroup = IsJobTicketGroup()
             isJobTicketGroup.ticketId = ticketId
             isJobTicketGroup.groupName = it.jobTicketGroupInfo.groupName ?: ""
-            isJobTicketGroup
-            jobTicketDao.saveIsJobTicketGroup(isJobTicketGroup)
-            it.jobTicketGroupMemberList.map {
+            val groupId = jobTicketDao.saveIsJobTicketGroup(isJobTicketGroup)
+            groupData[it.jobTicketGroupInfo.groupName ?: ""] = groupId
+            it.jobTicketGroupDataList.map {
                 val isJobTicketPoint = IsJobTicketPoints()
                 isJobTicketPoint.ticketId = ticketId
                 isJobTicketPoint.pointId = it.pointId
                 isJobTicketPoint.workstationId = workstationId
-                isJobTicketPoint.pointStatus = if (isUnlockFirst) "1" else "0"
+                isJobTicketPoint.pointStatus = "0"
                 isJobTicketPoint.lockId = it.lockId
+                isJobTicketPoint.groupId = groupId
                 isJobTicketPoint
             }
         }
-        val ticketPointIds = jobTicketDao.saveIsJobTicketPoints(ticketPoints.flatten())
+        jobTicketDao.saveIsJobTicketPoints(ticketPoints.flatten())
         val ticketPointSaveData = jobTicketDao.getJobTicketPointsDataByTicketId(ticketId)
         val ticketLockerUsers = selectedLockerData.map {
-            it.jobTicketGroupMemberList.map {
+            val groupId = groupData[it.jobTicketGroupInfo.groupName ?: ""]
+            it.jobTicketGroupDataList.map {
                 val isJobticketUser = IsJobTicketUser()
                 isJobticketUser.userId = it.userId
                 isJobticketUser.ticketId = ticketId
                 isJobticketUser.userName = it.userName
                 isJobticketUser.userRole = RoleEnum.JTLOCKER.roleKey
-                isJobticketUser.groupId = it.groupId
+                isJobticketUser.groupId = groupId
                 isJobticketUser
             }
         }
@@ -1223,11 +1225,9 @@ class JobTicketLogic @Inject constructor(
         jobTicketDao.saveIsJobTicketUser(ticketLockerUsers.flatten())
         jobTicketDao.saveIsJobTicketUser(ticketColockerUsers)
         val ticketLocks = mutableListOf<IsJobTicketLock>().apply {
-            ticketPointIds.forEach { point ->
+            ticketPointSaveData.forEach { point ->
                 val isJobTicketLock = IsJobTicketLock()
                 isJobTicketLock.ticketId = ticketId
-                isJobTicketLock.isolationPointId = point
-                isJobTicketLock.groupId = ticketPointSaveData.find { it.recordId == point }?.groupId
                 add(isJobTicketLock)
             }
         }
@@ -1239,6 +1239,7 @@ class JobTicketLogic @Inject constructor(
                     BeanUtils.copyProperties(workflowStep, IsJobTicketStep::class.java)
                         ?: IsJobTicketStep()
                 isJobTicketStep.stepId = 0L
+                isJobTicketStep.stepStatus = "0"
                 isJobTicketStep.ticketId = ticketId
                 isJobTicketStep.stepIndex = workflowStep.stepIndex
                 isJobTicketStep.stepContent = workflowStep.stepTitle
@@ -1251,9 +1252,13 @@ class JobTicketLogic @Inject constructor(
             }
         }
         jobTicketDao.saveIsJobTicketStep(ticketStep)
+        startJob(ticketId)
         return ticketId
     }
 
+    /**
+     * 创建解锁作业
+     */
     override fun createUnLockJob(
         selectedPointsData: List<JobTicketGroupDataVo<JobPointVo>>,
         selectedLockerData: List<JobTicketGroupDataVo<JobUserVo>>,
@@ -1264,38 +1269,40 @@ class JobTicketLogic @Inject constructor(
     ): Long {
         val modeId = workflowStepDao.getWorkflowModes().find { it.modeName == "解锁" }?.modeId!!
         val isJobTicket = IsJobTicket()
-        isJobTicket.ticketName = jobName
+        isJobTicket.ticketName = "${jobName}-解锁"
         isJobTicket.workstationId = workstationId
         isJobTicket.modeId = modeId
         isJobTicket.sopId = sopId
         val ticketId = jobTicketDao.saveIsJobTicket(isJobTicket)
-        val isUnlockFirst = workflowStepDao.isUnlockBeforeLock(modeId)
+        val groupData = mutableMapOf<String, Long>()
         val ticketPoints = selectedPointsData.map {
             val isJobTicketGroup = IsJobTicketGroup()
             isJobTicketGroup.ticketId = ticketId
             isJobTicketGroup.groupName = it.jobTicketGroupInfo.groupName ?: ""
-            isJobTicketGroup
-            jobTicketDao.saveIsJobTicketGroup(isJobTicketGroup)
-            it.jobTicketGroupMemberList.map {
+            val groupId = jobTicketDao.saveIsJobTicketGroup(isJobTicketGroup)
+            groupData[isJobTicketGroup.groupName] = groupId
+            it.jobTicketGroupDataList.map {
                 val isJobTicketPoint = IsJobTicketPoints()
                 isJobTicketPoint.ticketId = ticketId
                 isJobTicketPoint.pointId = it.pointId
                 isJobTicketPoint.workstationId = workstationId
-                isJobTicketPoint.pointStatus = if (isUnlockFirst) "1" else "0"
+                isJobTicketPoint.pointStatus = "1"
                 isJobTicketPoint.lockId = it.lockId
+                isJobTicketPoint.groupId = groupId
                 isJobTicketPoint
             }
         }
-        val ticketPointIds = jobTicketDao.saveIsJobTicketPoints(ticketPoints.flatten())
+        jobTicketDao.saveIsJobTicketPoints(ticketPoints.flatten())
         val ticketPointSaveData = jobTicketDao.getJobTicketPointsDataByTicketId(ticketId)
         val ticketLockerUsers = selectedLockerData.map {
-            it.jobTicketGroupMemberList.map {
+            val groupId = groupData[it.jobTicketGroupInfo.groupName]
+            it.jobTicketGroupDataList.map {
                 val isJobticketUser = IsJobTicketUser()
                 isJobticketUser.userId = it.userId
                 isJobticketUser.ticketId = ticketId
                 isJobticketUser.userName = it.userName
                 isJobticketUser.userRole = RoleEnum.JTLOCKER.roleKey
-                isJobticketUser.groupId = it.groupId
+                isJobticketUser.groupId = groupId
                 isJobticketUser
             }
         }
@@ -1310,11 +1317,12 @@ class JobTicketLogic @Inject constructor(
         jobTicketDao.saveIsJobTicketUser(ticketLockerUsers.flatten())
         jobTicketDao.saveIsJobTicketUser(ticketColockerUsers)
         val ticketLocks = mutableListOf<IsJobTicketLock>().apply {
-            ticketPointIds.forEach { point ->
+            ticketPointSaveData.forEach { point ->
                 val isJobTicketLock = IsJobTicketLock()
                 isJobTicketLock.ticketId = ticketId
-                isJobTicketLock.isolationPointId = point
-                isJobTicketLock.groupId = ticketPointSaveData.find { it.recordId == point }?.groupId
+                isJobTicketLock.isolationPointId = point.pointId
+                isJobTicketLock.groupId = point.groupId
+                isJobTicketLock.lockId = point.lockId
                 add(isJobTicketLock)
             }
         }
@@ -1327,6 +1335,7 @@ class JobTicketLogic @Inject constructor(
                         ?: IsJobTicketStep()
                 isJobTicketStep.stepId = 0L
                 isJobTicketStep.ticketId = ticketId
+                isJobTicketStep.stepStatus = "0"
                 isJobTicketStep.stepIndex = workflowStep.stepIndex
                 isJobTicketStep.stepContent = workflowStep.stepTitle
                 isJobTicketStep.androidStepContent = workflowStep.stepTitleShort
@@ -1338,6 +1347,7 @@ class JobTicketLogic @Inject constructor(
             }
         }
         jobTicketDao.saveIsJobTicketStep(ticketStep)
+        startJob(ticketId)
         return ticketId
     }
 

+ 2 - 2
data/src/main/java/com/grkj/data/logic/impl/standard/SopLogic.kt

@@ -55,7 +55,7 @@ class SopLogic @Inject constructor(
         sopId: Long
     ) {
         val isSopPoints = selectedSopPint.map {
-            it.jobTicketGroupMemberList.map { pointVo ->
+            it.jobTicketGroupDataList.map { pointVo ->
                 val isSopPoint = IsSopPoints()
                 isSopPoint.sopId = sopId
                 isSopPoint.pointId = pointVo.pointId
@@ -92,7 +92,7 @@ class SopLogic @Inject constructor(
         sopId: Long
     ) {
         val isSopLockerUsers = selectedLockerData.map {
-            it.jobTicketGroupMemberList.map { userVo ->
+            it.jobTicketGroupDataList.map { userVo ->
                 val isSopUser = IsSopUser()
                 isSopUser.userId = userVo.userId
                 isSopUser.userName = userVo.userName

+ 11 - 4
data/src/main/java/com/grkj/data/logic/impl/standard/SysMenuLogic.kt

@@ -28,9 +28,14 @@ class SysMenuLogic @Inject constructor(val sysMenuDao: SysMenuDao, val roleDao:
         roleDao.getRoleData().filter { it.roleKey in RoleEnum.values().map { it.roleKey } }
             .forEach { roleData ->
                 when (roleData.roleKey) {
+                    //超管权限
                     RoleEnum.ADMIN.roleKey -> {
                         val roleMenuData = mutableListOf<SysRoleMenu>().apply {
-                            for (permissionsEnum in RoleFunctionalPermissionsEnum.values()) {
+                            for (permissionsEnum in RoleFunctionalPermissionsEnum.except(
+                                RoleFunctionalPermissionsEnum.CREATE_SOP_JOB,
+                                RoleFunctionalPermissionsEnum.CREATE_SOP,
+                                RoleFunctionalPermissionsEnum.CREATE_JOB
+                            )) {
                                 sysMenuData.find { it.perms == permissionsEnum.functionalPermission }?.menuId?.let { menuId ->
                                     val sysRoleMenu = SysRoleMenu()
                                     sysRoleMenu.roleId = roleData.roleId
@@ -41,7 +46,7 @@ class SysMenuLogic @Inject constructor(val sysMenuDao: SysMenuDao, val roleDao:
                         }
                         sysMenuDao.insertRoleMenus(roleMenuData)
                     }
-
+                    //作业管理员权限
                     RoleEnum.JTDRAWER.roleKey -> {
                         val roleMenuData = mutableListOf<SysRoleMenu>().apply {
                             for (permissionsEnum in RoleFunctionalPermissionsEnum.except(
@@ -59,7 +64,7 @@ class SysMenuLogic @Inject constructor(val sysMenuDao: SysMenuDao, val roleDao:
                         }
                         sysMenuDao.insertRoleMenus(roleMenuData)
                     }
-
+                    //作业负责人权限
                     RoleEnum.JTLOCKER.roleKey -> {
                         val roleMenuData = mutableListOf<SysRoleMenu>().apply {
                             for (permissionsEnum in RoleFunctionalPermissionsEnum.except(
@@ -78,7 +83,7 @@ class SysMenuLogic @Inject constructor(val sysMenuDao: SysMenuDao, val roleDao:
                         }
                         sysMenuDao.insertRoleMenus(roleMenuData)
                     }
-
+                    //作业参与人权限
                     RoleEnum.JTCOLOCKER.roleKey -> {
                         val roleMenuData = mutableListOf<SysRoleMenu>().apply {
                             for (permissionsEnum in RoleFunctionalPermissionsEnum.except(
@@ -98,6 +103,7 @@ class SysMenuLogic @Inject constructor(val sysMenuDao: SysMenuDao, val roleDao:
                         sysMenuDao.insertRoleMenus(roleMenuData)
                     }
 
+                    //作业观察员权限
                     RoleEnum.JTGUARD.roleKey -> {
                         val roleMenuData = mutableListOf<SysRoleMenu>().apply {
                             for (permissionsEnum in RoleFunctionalPermissionsEnum.except(
@@ -117,6 +123,7 @@ class SysMenuLogic @Inject constructor(val sysMenuDao: SysMenuDao, val roleDao:
                         sysMenuDao.insertRoleMenus(roleMenuData)
                     }
 
+                    //系统配置员权限
                     RoleEnum.SYSCONFIG.roleKey -> {
                         val roleMenuData = mutableListOf<SysRoleMenu>().apply {
                             for (permissionsEnum in RoleFunctionalPermissionsEnum.except(

+ 5 - 2
data/src/main/java/com/grkj/data/model/extension/TodoDataExtension.kt

@@ -25,10 +25,13 @@ fun TodoStepJoin.toTodoVo(sameTicketStepJoinData: List<TodoStepJoin>): TodoItemV
         this.workflowStepId = temp.workflowStepId
         this.stepIndex = temp.stepIndex
         this.isCurrentStep =
-            sameTicketStepJoinData.filter { it.stepStatus == "0" }
+            (sameTicketStepJoinData.filter { it.stepStatus == "0" }
                 .minByOrNull { it.stepIndex }?.stepIndex == temp.stepIndex || (sameTicketStepJoinData.none {
                 it.stepStatus == "0"
-            } && temp.enableEndJob)
+            } && temp.enableEndJob)) && temp.ticketStatus !in listOf(
+                JobTicketStatusEnum.CANCELED.status,
+                JobTicketStatusEnum.FINISHED.status, JobTicketStatusEnum.NOT_START.status
+            )
         this.todoTitle = temp.stepTitleShort ?: temp.stepTitle
         this.todoContent = temp.stepDescription
         this.todoType = type

+ 1 - 2
data/src/main/java/com/grkj/data/model/vo/JobPointVo.kt

@@ -18,8 +18,7 @@ class JobPointVo {
     var powerType: String? = ""
     var pointStatus: String? = null
 
-    @Ignore
-    var lockId: Long = 0
+    var lockId: Long? = null
 
     @Ignore
     var isSelected: Boolean = false

+ 2 - 2
data/src/main/java/com/grkj/data/model/vo/JobTicketGroupDataVo.kt

@@ -11,9 +11,9 @@ data class JobTicketGroupDataVo<T>(
     /**
      * 分组成员
      */
-    val jobTicketGroupMemberList: MutableList<@JvmSuppressWildcards T>
+    val jobTicketGroupDataList: MutableList<@JvmSuppressWildcards T>
 ) {
     override fun toString(): String {
-        return "JobTicketGroupDataVo(jobTicketGroupInfo=$jobTicketGroupInfo, jobTicketGroupMemberList=$jobTicketGroupMemberList)"
+        return "JobTicketGroupDataVo(jobTicketGroupInfo=$jobTicketGroupInfo, jobTicketGroupDataList=$jobTicketGroupDataList)"
     }
 }