Forráskód Böngészése

refactor(更新)
- 创建作业完成

周文健 5 hónapja
szülő
commit
ab3bd87976
27 módosított fájl, 1366 hozzáadás és 90 törlés
  1. 6 0
      app/src/main/java/com/grkj/iscs/common/DataTransferConstants.kt
  2. 10 0
      app/src/main/java/com/grkj/iscs/features/main/dialog/TextDropDownDialog.kt
  3. 5 0
      app/src/main/java/com/grkj/iscs/features/main/fragment/common/SelectMemberFragment.kt
  4. 11 0
      app/src/main/java/com/grkj/iscs/features/main/fragment/home/HomeFragment.kt
  5. 425 1
      app/src/main/java/com/grkj/iscs/features/main/fragment/job_manage/CreateJobFragment.kt
  6. 25 1
      app/src/main/java/com/grkj/iscs/features/main/fragment/job_manage/CreateSopFragment.kt
  7. 19 59
      app/src/main/java/com/grkj/iscs/features/main/fragment/job_manage/CreateSopJobFragment.kt
  8. 80 0
      app/src/main/java/com/grkj/iscs/features/main/viewmodel/job_manage/CreateJobViewModel.kt
  9. 2 0
      app/src/main/java/com/grkj/iscs/features/main/viewmodel/job_manage/CreateSopJobViewModel.kt
  10. 441 3
      app/src/main/res/layout/fragment_create_job.xml
  11. 2 0
      app/src/main/res/layout/fragment_create_sop.xml
  12. 2 0
      app/src/main/res/layout/fragment_create_sop_job.xml
  13. 1 0
      app/src/main/res/layout/fragment_select_memeber.xml
  14. 8 1
      app/src/main/res/navigation/nav_job_manage.xml
  15. 13 5
      app/src/main/res/values-en/strings.xml
  16. 13 5
      app/src/main/res/values-zh/strings.xml
  17. 13 5
      app/src/main/res/values/strings.xml
  18. 39 0
      data/src/main/java/com/grkj/data/model/dos/IsJobCard.kt
  19. 39 0
      data/src/main/java/com/grkj/data/model/dos/IsLock.kt
  20. 42 0
      data/src/main/java/com/grkj/data/model/dos/IsLockCabinet.kt
  21. 39 0
      data/src/main/java/com/grkj/data/model/dos/IsLockCabinetSlots.kt
  22. 42 0
      data/src/main/java/com/grkj/data/model/dos/IsLockType.kt
  23. 36 0
      data/src/main/java/com/grkj/data/model/dos/IsLockset.kt
  24. 42 0
      data/src/main/java/com/grkj/data/model/dos/IsLocksetType.kt
  25. 1 0
      data/src/main/java/com/grkj/data/repository/IJobTicketRepository.kt
  26. 2 2
      data/src/main/java/com/grkj/data/repository/impl/JobTicketRepository.kt
  27. 8 8
      ui-base/src/main/java/com/grkj/ui_base/base/BaseFragment.kt

+ 6 - 0
app/src/main/java/com/grkj/iscs/common/DataTransferConstants.kt

@@ -4,6 +4,7 @@ package com.grkj.iscs.common
  * 数据传输常量
  */
 object DataTransferConstants {
+
     /**
      * 已经选择的点位
      */
@@ -25,4 +26,9 @@ object DataTransferConstants {
      */
     const val KEY_PREVIEW_STEP_TITLE_DATA = "key_preview_step_title_data"
     const val KEY_PREVIEW_STEP_ICON_DATA = "key_preview_step_icon_data"
+
+    /**
+     * 是否可以选择共锁人
+     */
+    const val KEY_CAN_SELECT_COLOCKER = "KEY_CAN_SELECT_COLOCKER"
 }

+ 10 - 0
app/src/main/java/com/grkj/iscs/features/main/dialog/TextDropDownDialog.kt

@@ -85,6 +85,11 @@ class TextDropDownDialog(context: Context) : BasePopupWindow(context) {
          * 获取展示文本
          */
         fun getShowText(): String
+
+        /**
+         * 获取保存的数据
+         */
+        fun getData(): Any?
     }
 
     /**
@@ -92,6 +97,7 @@ class TextDropDownDialog(context: Context) : BasePopupWindow(context) {
      */
     class SimpleTextDropDownEntity(
         var dataId: Long = 0,
+        var dataObject: Any? = null,
         val dataTag: String = "",
         var dataText: String = ""
     ) : TextDropDownEntity {
@@ -106,5 +112,9 @@ class TextDropDownDialog(context: Context) : BasePopupWindow(context) {
         override fun getShowText(): String {
             return dataText
         }
+
+        override fun getData(): Any? {
+            return dataObject
+        }
     }
 }

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

@@ -1,6 +1,7 @@
 package com.grkj.iscs.features.main.fragment.common
 
 import android.widget.LinearLayout
+import androidx.core.view.isVisible
 import androidx.lifecycle.ViewModelProvider
 import com.drake.brv.BindingAdapter
 import com.drake.brv.utils.grid
@@ -28,6 +29,7 @@ class SelectMemberFragment : BaseFragment<FragmentSelectMemeberBinding>() {
     private var selectedLockerData: MutableList<UserManageVo> = mutableListOf()
     private var selectedColockerData: MutableList<UserManageVo> = mutableListOf()
     private var isLockerSelect = true
+    private var canSelectColoker = true
     override fun getLayoutId(): Int {
         return R.layout.fragment_select_memeber
     }
@@ -37,6 +39,8 @@ class SelectMemberFragment : BaseFragment<FragmentSelectMemeberBinding>() {
             .getData(DataTransferConstants.KEY_PREVIEW_STEP_ICON_DATA) as Int
         val previewStepTitle = GlobalDataTempStore.getInstance()
             .getData(DataTransferConstants.KEY_PREVIEW_STEP_TITLE_DATA) as String
+        canSelectColoker = GlobalDataTempStore.getInstance()
+            .getData(DataTransferConstants.KEY_CAN_SELECT_COLOCKER) as Boolean
         binding.previewStepTitle.text = previewStepTitle
         binding.previewStepIv.setImageResource(previewStepIcon)
         binding.back.setDebouncedClickListener {
@@ -72,6 +76,7 @@ class SelectMemberFragment : BaseFragment<FragmentSelectMemeberBinding>() {
                 onAllUserRVBinding(this)
             }
         }
+        binding.selectColockerLayout.isVisible = canSelectColoker
         binding.selectLockerTv.setDebouncedClickListener {
             setLockerData()
         }

+ 11 - 0
app/src/main/java/com/grkj/iscs/features/main/fragment/home/HomeFragment.kt

@@ -13,7 +13,9 @@ import com.grkj.iscs.databinding.ItemHomeMenuBinding
 import com.grkj.iscs.databinding.ItemHomeQuickEntranceBinding
 import com.grkj.iscs.features.main.entity.MenuItemEntity
 import com.grkj.ui_base.base.BaseFragment
+import com.grkj.ui_base.utils.event.BottomNavVisibilityEvent
 import com.grkj.ui_base.utils.event.JumpViewEvent
+import com.sik.sikcore.extension.setDebouncedClickListener
 
 /**
  * 首页
@@ -42,6 +44,14 @@ class HomeFragment : BaseFragment<FragmentHomeBinding>() {
                 onQuickEntranceBinding(this)
             }
         }
+        binding.ongoingJobNum.setDebouncedClickListener {
+            BottomNavVisibilityEvent.sendBottomNavVisibilityEvent(false)
+            JumpViewEvent.sendJumpViewEvent(R.navigation.nav_job_manage, R.id.action_jobManageHomeFragment_to_createJobFragment)
+        }
+        binding.allJobNum.setDebouncedClickListener {
+            BottomNavVisibilityEvent.sendBottomNavVisibilityEvent(false)
+            JumpViewEvent.sendJumpViewEvent(R.navigation.nav_job_manage, R.id.action_jobManageHomeFragment_to_createJobFragment)
+        }
     }
 
     override fun initData() {
@@ -62,6 +72,7 @@ class HomeFragment : BaseFragment<FragmentHomeBinding>() {
     private fun onMenuClick(menuType: Int) {
         when (menuType) {
             0 -> {
+                BottomNavVisibilityEvent.sendBottomNavVisibilityEvent(false)
                 JumpViewEvent.sendJumpViewEvent(R.navigation.nav_job_manage, R.id.action_jobManageHomeFragment_to_createJobFragment)
             }
         }

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

@@ -1,18 +1,442 @@
 package com.grkj.iscs.features.main.fragment.job_manage
 
+import android.widget.LinearLayout
+import androidx.core.view.isVisible
+import androidx.lifecycle.ViewModelProvider
+import com.drake.brv.BindingAdapter
+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.grkj.data.enums.LockModeEnum
+import com.grkj.data.enums.LockStepEnum
+import com.grkj.data.model.vo.PointManageVo
+import com.grkj.data.model.vo.UserManageVo
 import com.grkj.iscs.R
+import com.grkj.iscs.common.DataTransferConstants
 import com.grkj.iscs.databinding.FragmentCreateJobBinding
+import com.grkj.iscs.databinding.ItemSelectMemberBinding
+import com.grkj.iscs.databinding.ItemSelectPointBinding
+import com.grkj.iscs.features.main.dialog.TextDropDownDialog
+import com.grkj.iscs.features.main.viewmodel.job_manage.CreateJobViewModel
+import com.grkj.iscs.utils.getLockModeStr
+import com.grkj.iscs.utils.getLockModeType
 import com.grkj.ui_base.base.BaseFragment
+import com.grkj.ui_base.dialog.TipDialog
+import com.grkj.ui_base.utils.CommonUtils
+import com.kongzue.dialogx.dialogs.PopTip
+import com.sik.sikcore.data.GlobalDataTempStore
+import com.sik.sikcore.extension.setDebouncedClickListener
+import com.sik.sikcore.thread.ThreadUtils
+import kotlinx.coroutines.Dispatchers
+import kotlinx.coroutines.async
+import kotlinx.coroutines.withContext
+import kotlin.coroutines.resume
+import kotlin.coroutines.suspendCoroutine
 
 /**
  * 新建作业
  */
-class CreateJobFragment: BaseFragment<FragmentCreateJobBinding>() {
+class CreateJobFragment : BaseFragment<FragmentCreateJobBinding>() {
+    private val viewModel: CreateJobViewModel by lazy { ViewModelProvider(this)[CreateJobViewModel::class] }
+    private var selectedLockMode: String? = null
+    private var selectedWorkstationId: Long? = null
+    private var selectedPointData: List<PointManageVo> = mutableListOf()
+    private var selectedLockerData: List<UserManageVo> = mutableListOf()
+    private var selectedColockerData: List<UserManageVo> = mutableListOf()
+    private lateinit var textDropDownDialog: TextDropDownDialog
     override fun getLayoutId(): Int {
         return R.layout.fragment_create_job
     }
 
     override fun initView() {
+        textDropDownDialog = TextDropDownDialog(requireContext())
+        textDropDownDialog.setWidthAsAnchorView(true)
+        binding.back.setDebouncedClickListener {
+            TipDialog.show(
+                title = CommonUtils.getStr(com.grkj.ui_base.R.string.action_hint).toString(),
+                msg = CommonUtils.getStr(R.string.not_save_tip).toString(),
+                dialogType = TipDialog.DialogType.ERROR,
+                countDownTime = 10,
+                onConfirmClick = {
+                    navController.popBackStack()
+                })
+        }
+        binding.cancel.setDebouncedClickListener {
+            TipDialog.show(
+                title = CommonUtils.getStr(com.grkj.ui_base.R.string.action_hint).toString(),
+                msg = CommonUtils.getStr(R.string.not_save_tip).toString(),
+                dialogType = TipDialog.DialogType.ERROR,
+                countDownTime = 10,
+                onConfirmClick = {
+                    navController.popBackStack()
+                })
+        }
+        binding.confirm.setDebouncedClickListener {
+            if (checkData()) {
+                TipDialog.show(
+                    title = CommonUtils.getStr(com.grkj.ui_base.R.string.action_confirm).toString(),
+                    msg = CommonUtils.getStr(
+                        R.string.job_save_tip,
+                        args = listOf<String>(binding.jobNameEt.text.toString()).toTypedArray()
+                    ).toString(),
+                    dialogType = TipDialog.DialogType.INFO,
+                    countDownTime = 10,
+                    onConfirmClick = {
+                        ThreadUtils.runOnIO {
+                            val sopId = if (binding.saveSop.isChecked) {
+                                async { saveSop() }
+                            } else {
+                                null
+                            }
+                            withContext(Dispatchers.Main) {
+                                saveJob(sopId?.await())
+                            }
+                        }
+                    })
+            }
+        }
+        binding.workstationTv.setOnClickListener {
+            setWorkstationData()
+        }
+        binding.lockModeTv.setOnClickListener {
+            setLockModeData()
+        }
+        binding.noSelectedPointLayout.setDebouncedClickListener {
+            if (selectedWorkstationId == null) {
+                PopTip.tip(R.string.please_select_job_workstation)
+                return@setDebouncedClickListener
+            }
+            GlobalDataTempStore.getInstance()
+                .saveData(
+                    DataTransferConstants.KEY_SELECT_POINT_WORKSTATION_ID,
+                    selectedWorkstationId!!
+                )
+            GlobalDataTempStore.getInstance()
+                .saveData(DataTransferConstants.KEY_SELECTED_POINT_DATA, selectedPointData)
+            GlobalDataTempStore.getInstance()
+                .saveData(
+                    DataTransferConstants.KEY_PREVIEW_STEP_TITLE_DATA,
+                    CommonUtils.getStr(R.string.create_job_title).toString()
+                )
+            GlobalDataTempStore.getInstance()
+                .saveData(
+                    DataTransferConstants.KEY_PREVIEW_STEP_ICON_DATA,
+                    R.mipmap.icon_data_manage_menu_point_manage
+                )
+            navController.navigate(R.id.action_createJobFragment_to_selectPointFragment)
+        }
+        binding.noSelectedMemberLayout.setDebouncedClickListener {
+            if (selectedWorkstationId == null) {
+                PopTip.tip(R.string.please_select_job_workstation)
+                return@setDebouncedClickListener
+            }
+            if (selectedLockMode == null) {
+                PopTip.tip(R.string.please_select_lock_mode)
+                return@setDebouncedClickListener
+            }
+            GlobalDataTempStore.getInstance().saveData(
+                DataTransferConstants.KEY_CAN_SELECT_COLOCKER, selectedLockMode?.contains(
+                    LockStepEnum.COLOCK.type.toString()
+                ) == true
+            )
+            GlobalDataTempStore.getInstance()
+                .saveData(
+                    DataTransferConstants.KEY_SELECT_POINT_WORKSTATION_ID,
+                    selectedWorkstationId!!
+                )
+            GlobalDataTempStore.getInstance()
+                .saveData(DataTransferConstants.KEY_SELECTED_MEMBER_LOCKER_DATA, selectedLockerData)
+            GlobalDataTempStore.getInstance()
+                .saveData(
+                    DataTransferConstants.KEY_SELECTED_MEMBER_COLOCKER_DATA,
+                    selectedColockerData
+                )
+            GlobalDataTempStore.getInstance().saveData(
+                DataTransferConstants.KEY_SELECTED_MEMBER_COLOCKER_DATA,
+                selectedColockerData
+            )
+            GlobalDataTempStore.getInstance()
+                .saveData(
+                    DataTransferConstants.KEY_PREVIEW_STEP_TITLE_DATA,
+                    CommonUtils.getStr(R.string.create_job_title).toString()
+                )
+            GlobalDataTempStore.getInstance()
+                .saveData(
+                    DataTransferConstants.KEY_PREVIEW_STEP_ICON_DATA,
+                    R.mipmap.icon_data_manage_menu_point_manage
+                )
+            navController.navigate(R.id.action_createJobFragment_to_selectMemberFragment)
+        }
+        binding.selectPointTv.setDebouncedClickListener {
+            if (selectedWorkstationId == null) {
+                PopTip.tip(R.string.please_select_job_workstation)
+                return@setDebouncedClickListener
+            }
+            GlobalDataTempStore.getInstance()
+                .saveData(
+                    DataTransferConstants.KEY_SELECT_POINT_WORKSTATION_ID,
+                    selectedWorkstationId!!
+                )
+            GlobalDataTempStore.getInstance()
+                .saveData(DataTransferConstants.KEY_SELECTED_POINT_DATA, selectedPointData)
+            GlobalDataTempStore.getInstance()
+                .saveData(
+                    DataTransferConstants.KEY_PREVIEW_STEP_TITLE_DATA,
+                    CommonUtils.getStr(R.string.create_job_title).toString()
+                )
+            GlobalDataTempStore.getInstance()
+                .saveData(
+                    DataTransferConstants.KEY_PREVIEW_STEP_ICON_DATA,
+                    R.mipmap.icon_data_manage_menu_point_manage
+                )
+            navController.navigate(R.id.action_createJobFragment_to_selectPointFragment)
+        }
+        binding.selectMemberTv.setDebouncedClickListener {
+            if (selectedWorkstationId == null) {
+                PopTip.tip(R.string.please_select_job_workstation)
+                return@setDebouncedClickListener
+            }
+            if (selectedLockMode == null) {
+                PopTip.tip(R.string.please_select_lock_mode)
+                return@setDebouncedClickListener
+            }
+            GlobalDataTempStore.getInstance().saveData(
+                DataTransferConstants.KEY_CAN_SELECT_COLOCKER, selectedLockMode?.contains(
+                    LockStepEnum.COLOCK.type.toString()
+                ) == true
+            )
+            GlobalDataTempStore.getInstance()
+                .saveData(
+                    DataTransferConstants.KEY_SELECT_POINT_WORKSTATION_ID,
+                    selectedWorkstationId!!
+                )
+            GlobalDataTempStore.getInstance()
+                .saveData(DataTransferConstants.KEY_SELECTED_MEMBER_LOCKER_DATA, selectedLockerData)
+            GlobalDataTempStore.getInstance()
+                .saveData(
+                    DataTransferConstants.KEY_SELECTED_MEMBER_COLOCKER_DATA,
+                    selectedColockerData
+                )
+            GlobalDataTempStore.getInstance()
+                .saveData(
+                    DataTransferConstants.KEY_PREVIEW_STEP_TITLE_DATA,
+                    CommonUtils.getStr(R.string.create_job_title).toString()
+                )
+            GlobalDataTempStore.getInstance()
+                .saveData(
+                    DataTransferConstants.KEY_PREVIEW_STEP_ICON_DATA,
+                    R.mipmap.icon_data_manage_menu_point_manage
+                )
+            navController.navigate(R.id.action_createJobFragment_to_selectMemberFragment)
+        }
+        binding.pointRv.grid(6).setup {
+            addType<PointManageVo>(R.layout.item_select_point)
+            onBind {
+                onSelectedPointRVBinding(this)
+            }
+        }
+        binding.colockerRv.linear(orientation = LinearLayout.HORIZONTAL).setup {
+            addType<UserManageVo>(R.layout.item_select_member)
+            onBind {
+                onSelectedMemberRVBinding(this)
+            }
+        }
+    }
+
+    /**
+     * 保存sop
+     */
+    private suspend fun saveSop(): Long {
+        val sopId = suspendCoroutine<Long> { cont ->
+            ThreadUtils.runOnMain {
+                viewModel.saveSop(
+                    selectedPointData,
+                    selectedLockerData,
+                    selectedColockerData,
+                    selectedLockMode,
+                    selectedWorkstationId!!,
+                    binding.jobNameEt.text.toString()
+                ).observe(this@CreateJobFragment) {
+                    cont.resume(it)
+                }
+            }
+        }
+        return sopId
+    }
+
+    /**
+     * 保存作业
+     */
+    private fun saveJob(sopId: Long?) {
+        viewModel.createJob(
+            selectedPointData,
+            selectedLockerData,
+            selectedColockerData,
+            selectedLockMode,
+            sopId,
+            selectedWorkstationId!!,
+            binding.jobNameEt.text.toString()
+        ).observe(this) {
+            if (it) {
+                TipDialog.show(
+                    title = CommonUtils.getStr(com.grkj.ui_base.R.string.action_succeed).toString(),
+                    msg = CommonUtils.getStr(R.string.job_create_succeed).toString(),
+                    dialogType = TipDialog.DialogType.SUCCESS,
+                    countDownTime = 10,
+                    onConfirmClick = {
+                        clearData()
+                    },
+                    onCancelClick = {
+                        clearData()
+                    }
+                )
+            } else {
+                TipDialog.show(
+                    title = CommonUtils.getStr(com.grkj.ui_base.R.string.action_failed).toString(),
+                    msg = CommonUtils.getStr(R.string.job_create_failed).toString(),
+                    dialogType = TipDialog.DialogType.ERROR,
+                    showConfirm = false,
+                    countDownTime = 10
+                )
+            }
+        }
+    }
+
+    private fun clearData() {
+        binding.jobNameEt.setText("")
+        selectedLockerData = listOf()
+        selectedColockerData = listOf()
+        selectedPointData = listOf()
+        selectedLockMode = null
+        selectedWorkstationId = null
+        binding.saveSop.isChecked = false
+        binding.lockModeTv.text = ""
+        binding.workstationTv.text = ""
+        binding.noSelectedMemberLayout.isVisible = true
+        binding.noSelectedPointLayout.isVisible = true
+    }
+
+    /**
+     * 检查数据
+     */
+    private fun checkData(): Boolean {
+        if (selectedWorkstationId == null) {
+            PopTip.tip(R.string.please_select_job_workstation)
+            return false
+        }
+        if (selectedLockMode == null) {
+            PopTip.tip(R.string.please_select_lock_mode)
+            return false
+        }
+        if (binding.jobNameEt.text.isEmpty()) {
+            PopTip.tip(R.string.please_input_job_name)
+            return false
+        }
+        if (selectedPointData.isEmpty()) {
+            PopTip.tip(R.string.please_must_select_at_least_one_point)
+            return false
+        }
+        if (selectedLockerData.isEmpty()) {
+            PopTip.tip(com.grkj.ui_base.R.string.select_locker)
+            return false
+        }
+        if (selectedLockMode?.contains(
+                LockStepEnum.COLOCK.type.toString()
+            ) == true && selectedColockerData.isEmpty()
+        ) {
+            PopTip.tip(com.grkj.ui_base.R.string.select_coloker)
+            return false
+        }
+        return true
+    }
+
+    private fun BindingAdapter.BindingViewHolder.onSelectedMemberRVBinding(holder: BindingAdapter.BindingViewHolder) {
+        val itemBinding = holder.getBinding<ItemSelectMemberBinding>()
+        val item = holder.getModel<UserManageVo>()
+        itemBinding.lockerName.text = item.nickName
+        itemBinding.lockerIcon.isSelected = true
+    }
+
+    private fun BindingAdapter.BindingViewHolder.onSelectedPointRVBinding(holder: BindingAdapter.BindingViewHolder) {
+        val itemBinding = holder.getBinding<ItemSelectPointBinding>()
+        val item = holder.getModel<PointManageVo>()
+        itemBinding.pointName.text = item.pointName.toString()
+        itemBinding.pointIcon.setImageResource(R.mipmap.icon_data_manage_menu_point_manage)
+    }
+
+    override fun onResume() {
+        super.onResume()
+        if (GlobalDataTempStore.getInstance()
+                .hasData(DataTransferConstants.KEY_SELECTED_MEMBER_LOCKER_DATA)
+        ) {
+            selectedLockerData = GlobalDataTempStore.getInstance()
+                .getData(DataTransferConstants.KEY_SELECTED_MEMBER_LOCKER_DATA)
+                ?.let { return@let it as List<UserManageVo> } ?: listOf()
+        }
+
+        if (GlobalDataTempStore.getInstance()
+                .hasData(DataTransferConstants.KEY_SELECTED_MEMBER_COLOCKER_DATA)
+        ) {
+            selectedColockerData = GlobalDataTempStore.getInstance()
+                .getData(DataTransferConstants.KEY_SELECTED_MEMBER_COLOCKER_DATA)
+                ?.let { return@let it as List<UserManageVo> } ?: listOf()
+        }
+
+        if (GlobalDataTempStore.getInstance()
+                .hasData(DataTransferConstants.KEY_SELECTED_POINT_DATA)
+        ) {
+            selectedPointData = GlobalDataTempStore.getInstance()
+                .getData(DataTransferConstants.KEY_SELECTED_POINT_DATA)
+                ?.let { return@let it as List<PointManageVo> } ?: listOf()
+        }
+        binding.noSelectedMemberLayout.isVisible =
+            selectedColockerData.isEmpty() && selectedLockerData.isEmpty()
+        binding.noSelectedPointLayout.isVisible = selectedPointData.isEmpty()
+        if (selectedColockerData.isNotEmpty()) {
+            binding.colockerRv.models = selectedColockerData
+        }
+        if (selectedLockerData.isNotEmpty()) {
+            val userData = selectedLockerData.first()
+            binding.lockerName.text = userData.nickName
+        }
+        if (selectedPointData.isNotEmpty()) {
+            binding.pointRv.models = selectedPointData
+        }
+    }
+
+    private fun setWorkstationData() {
+        viewModel.getWorkstationData().observe(this) {
+            textDropDownDialog.setData(
+                viewModel.workstationData.map {
+                    TextDropDownDialog.SimpleTextDropDownEntity(
+                        dataId = it.workstationId,
+                        dataText = it.workstationName
+                    )
+                })
+            textDropDownDialog.setOnItemSelectListener {
+                binding.workstationTv.text = it.getShowText()
+                selectedWorkstationId = it.getId()
+            }
+            textDropDownDialog.showPopupWindow(binding.workstationTv)
+        }
+    }
 
+    private fun setLockModeData() {
+        textDropDownDialog.setData(
+            LockModeEnum.values().map {
+                TextDropDownDialog.SimpleTextDropDownEntity(
+                    dataTag = it.getLockModeType(),
+                    dataText = it.getLockModeStr()
+                )
+            })
+        textDropDownDialog.setOnItemSelectListener {
+            binding.lockModeTv.text = it.getShowText()
+            selectedLockMode = it.getTag()
+            binding.selectColockerLayout.isVisible = selectedLockMode?.contains(
+                LockStepEnum.COLOCK.type.toString()
+            ) == true
+        }
+        textDropDownDialog.showPopupWindow(binding.lockModeTv)
     }
 }

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

@@ -17,6 +17,7 @@ import com.grkj.iscs.databinding.ItemSelectMemberBinding
 import com.grkj.iscs.databinding.ItemSelectPointBinding
 import com.grkj.iscs.features.main.dialog.TextDropDownDialog
 import com.grkj.data.enums.LockModeEnum
+import com.grkj.data.enums.LockStepEnum
 import com.grkj.iscs.features.main.viewmodel.job_manage.CreateSopViewModel
 import com.grkj.iscs.utils.getLockModeStr
 import com.grkj.iscs.utils.getLockModeType
@@ -115,6 +116,15 @@ class CreateSopFragment : BaseFragment<FragmentCreateSopBinding>() {
                 PopTip.tip(R.string.please_select_sop_workstation)
                 return@setDebouncedClickListener
             }
+            if (selectedLockMode == null) {
+                PopTip.tip(R.string.please_select_lock_mode)
+                return@setDebouncedClickListener
+            }
+            GlobalDataTempStore.getInstance().saveData(
+                DataTransferConstants.KEY_CAN_SELECT_COLOCKER, selectedLockMode?.contains(
+                    LockStepEnum.COLOCK.type.toString()
+                ) == true
+            )
             GlobalDataTempStore.getInstance()
                 .saveData(
                     DataTransferConstants.KEY_SELECT_POINT_WORKSTATION_ID,
@@ -172,6 +182,15 @@ class CreateSopFragment : BaseFragment<FragmentCreateSopBinding>() {
                 PopTip.tip(R.string.please_select_sop_workstation)
                 return@setDebouncedClickListener
             }
+            if (selectedLockMode == null) {
+                PopTip.tip(R.string.please_select_lock_mode)
+                return@setDebouncedClickListener
+            }
+            GlobalDataTempStore.getInstance().saveData(
+                DataTransferConstants.KEY_CAN_SELECT_COLOCKER, selectedLockMode?.contains(
+                    LockStepEnum.COLOCK.type.toString()
+                ) == true
+            )
             GlobalDataTempStore.getInstance()
                 .saveData(
                     DataTransferConstants.KEY_SELECT_POINT_WORKSTATION_ID,
@@ -284,7 +303,9 @@ class CreateSopFragment : BaseFragment<FragmentCreateSopBinding>() {
             PopTip.tip(com.grkj.ui_base.R.string.select_locker)
             return false
         }
-        if (selectedColockerData.isEmpty()) {
+        if (selectedLockMode?.contains(
+                LockStepEnum.COLOCK.type.toString()
+            ) == true &&selectedColockerData.isEmpty()) {
             PopTip.tip(com.grkj.ui_base.R.string.select_coloker)
             return false
         }
@@ -373,6 +394,9 @@ class CreateSopFragment : BaseFragment<FragmentCreateSopBinding>() {
         textDropDownDialog.setOnItemSelectListener {
             binding.lockModeTv.text = it.getShowText()
             selectedLockMode = it.getTag()
+            binding.selectColockerLayout.isVisible = selectedLockMode?.contains(
+                LockStepEnum.COLOCK.type.toString()
+            ) == true
         }
         textDropDownDialog.showPopupWindow(binding.lockModeTv)
     }

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

@@ -8,7 +8,9 @@ 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.grkj.data.enums.LockStepEnum
 import com.grkj.data.model.vo.PointManageVo
+import com.grkj.data.model.vo.SopManageVo
 import com.grkj.data.model.vo.UserManageVo
 import com.grkj.iscs.R
 import com.grkj.iscs.common.DataTransferConstants
@@ -31,6 +33,7 @@ class CreateSopJobFragment : BaseFragment<FragmentCreateSopJobBinding>() {
     private val viewModel: CreateSopJobViewModel by lazy { ViewModelProvider(this)[CreateSopJobViewModel::class] }
     private var selectedWorkstationId: Long? = null
     private var selectedSopId: Long? = null
+    private var selectedSop: SopManageVo? = null
     private var selectedPointData: List<PointManageVo> = mutableListOf()
     private var selectedLockerData: List<UserManageVo> = mutableListOf()
     private var selectedColockerData: List<UserManageVo> = mutableListOf()
@@ -90,68 +93,16 @@ class CreateSopJobFragment : BaseFragment<FragmentCreateSopJobBinding>() {
                 }
             }
         }
-        binding.noSelectedPointLayout.setDebouncedClickListener {
-            if (selectedWorkstationId == null) {
-                PopTip.tip(R.string.please_select_sop_workstation)
-                return@setDebouncedClickListener
-            }
-            GlobalDataTempStore.getInstance()
-                .saveData(
-                    DataTransferConstants.KEY_SELECT_POINT_WORKSTATION_ID,
-                    selectedWorkstationId!!
-                )
-            GlobalDataTempStore.getInstance()
-                .saveData(DataTransferConstants.KEY_SELECTED_POINT_DATA, selectedPointData)
-            GlobalDataTempStore.getInstance()
-                .saveData(
-                    DataTransferConstants.KEY_PREVIEW_STEP_TITLE_DATA,
-                    CommonUtils.getStr(R.string.create_sop_title).toString()
-                )
-            GlobalDataTempStore.getInstance()
-                .saveData(
-                    DataTransferConstants.KEY_PREVIEW_STEP_ICON_DATA,
-                    R.mipmap.icon_data_manage_menu_point_manage
-                )
-            navController.navigate(R.id.action_createSopFragment_to_selectPointFragment)
-        }
-        binding.noSelectedMemberLayout.setDebouncedClickListener {
+        binding.selectMemberTv.setDebouncedClickListener {
             if (selectedWorkstationId == null) {
                 PopTip.tip(R.string.please_select_sop_workstation)
                 return@setDebouncedClickListener
             }
-            GlobalDataTempStore.getInstance()
-                .saveData(
-                    DataTransferConstants.KEY_SELECT_POINT_WORKSTATION_ID,
-                    selectedWorkstationId!!
-                )
-            GlobalDataTempStore.getInstance()
-                .saveData(DataTransferConstants.KEY_SELECTED_MEMBER_LOCKER_DATA, selectedLockerData)
-            GlobalDataTempStore.getInstance()
-                .saveData(
-                    DataTransferConstants.KEY_SELECTED_MEMBER_COLOCKER_DATA,
-                    selectedColockerData
-                )
             GlobalDataTempStore.getInstance().saveData(
-                DataTransferConstants.KEY_SELECTED_MEMBER_COLOCKER_DATA,
-                selectedColockerData
+                DataTransferConstants.KEY_CAN_SELECT_COLOCKER, selectedSop?.lockMode?.contains(
+                    LockStepEnum.COLOCK.type.toString()
+                ) == true
             )
-            GlobalDataTempStore.getInstance()
-                .saveData(
-                    DataTransferConstants.KEY_PREVIEW_STEP_TITLE_DATA,
-                    CommonUtils.getStr(R.string.create_sop_title).toString()
-                )
-            GlobalDataTempStore.getInstance()
-                .saveData(
-                    DataTransferConstants.KEY_PREVIEW_STEP_ICON_DATA,
-                    R.mipmap.icon_data_manage_menu_point_manage
-                )
-            navController.navigate(R.id.action_createSopFragment_to_selectMemberFragment)
-        }
-        binding.selectMemberTv.setDebouncedClickListener {
-            if (selectedWorkstationId == null) {
-                PopTip.tip(R.string.please_select_sop_workstation)
-                return@setDebouncedClickListener
-            }
             GlobalDataTempStore.getInstance()
                 .saveData(
                     DataTransferConstants.KEY_SELECT_POINT_WORKSTATION_ID,
@@ -174,7 +125,7 @@ class CreateSopJobFragment : BaseFragment<FragmentCreateSopJobBinding>() {
                     DataTransferConstants.KEY_PREVIEW_STEP_ICON_DATA,
                     R.mipmap.icon_data_manage_menu_point_manage
                 )
-            navController.navigate(R.id.action_createSopFragment_to_selectMemberFragment)
+            navController.navigate(R.id.action_createSopJobFragment_to_selectMemberFragment)
         }
         binding.pointRv.grid(6).setup {
             addType<PointManageVo>(R.layout.item_select_point)
@@ -191,13 +142,14 @@ class CreateSopJobFragment : BaseFragment<FragmentCreateSopJobBinding>() {
     }
 
     /**
-     * 保存sop
+     * 保存sop作业
      */
     private fun saveSopJob() {
         viewModel.createSopJob(
             selectedPointData,
             selectedLockerData,
             selectedColockerData,
+            selectedSop?.lockMode,
             selectedSopId,
             selectedWorkstationId!!,
             binding.jobNameEt.text.toString()
@@ -260,7 +212,10 @@ class CreateSopJobFragment : BaseFragment<FragmentCreateSopJobBinding>() {
             PopTip.tip(com.grkj.ui_base.R.string.select_locker)
             return false
         }
-        if (selectedColockerData.isEmpty()) {
+        if (selectedSop?.lockMode?.contains(
+                LockStepEnum.COLOCK.type.toString()
+            ) == true && selectedColockerData.isEmpty()
+        ) {
             PopTip.tip(com.grkj.ui_base.R.string.select_coloker)
             return false
         }
@@ -341,12 +296,17 @@ class CreateSopJobFragment : BaseFragment<FragmentCreateSopJobBinding>() {
             viewModel.sopData.map {
                 TextDropDownDialog.SimpleTextDropDownEntity(
                     dataId = it.sopId,
+                    dataObject = it,
                     dataText = it.sopName ?: ""
                 )
             })
         textDropDownDialog.setOnItemSelectListener {
             binding.sopTv.text = it.getShowText()
             selectedSopId = it.getId()
+            selectedSop = it.getData() as SopManageVo
+            binding.selectColockerLayout.isVisible = selectedSop?.lockMode?.contains(
+                LockStepEnum.COLOCK.type.toString()
+            ) == true
             loadSopData(it.getId())
         }
         textDropDownDialog.showPopupWindow(binding.sopTv)

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

@@ -0,0 +1,80 @@
+package com.grkj.iscs.features.main.viewmodel.job_manage
+
+import androidx.lifecycle.LiveData
+import androidx.lifecycle.liveData
+import com.grkj.data.model.dos.IsWorkstation
+import com.grkj.data.model.vo.PointManageVo
+import com.grkj.data.model.vo.UserManageVo
+import com.grkj.data.repository.IJobTicketRepository
+import com.grkj.data.repository.ISopRepository
+import com.grkj.data.repository.IWorkstationRepository
+import com.grkj.data.repository.impl.JobTicketRepository
+import com.grkj.data.repository.impl.SopRepository
+import com.grkj.data.repository.impl.WorkstationRepository
+import com.grkj.ui_base.base.BaseViewModel
+import kotlinx.coroutines.Dispatchers
+
+/**
+ * 新建sop界面模型
+ */
+class CreateJobViewModel : BaseViewModel() {
+    private val workstationRepository: IWorkstationRepository by lazy { WorkstationRepository.instance }
+    private val sopRepository: ISopRepository by lazy { SopRepository.instance }
+    private val jobTicketRepository: IJobTicketRepository by lazy { JobTicketRepository.instance }
+    var workstationData: List<IsWorkstation> = listOf()
+
+    /**
+     * 初始化岗位数据
+     */
+    fun getWorkstationData(): LiveData<Boolean> {
+        return liveData(Dispatchers.IO) {
+            workstationData = workstationRepository.getWorkStationData()
+            emit(true)
+        }
+    }
+
+    /**
+     * 保存sop
+     */
+    fun saveSop(
+        selectedPointsData: List<PointManageVo>,
+        selectedLockerData: List<UserManageVo>,
+        selectedColockerData: List<UserManageVo>,
+        lockMode: String?,
+        workstationId: Long,
+        sopName: String
+    ): LiveData<Long> {
+        return liveData(Dispatchers.IO) {
+            val sopId = sopRepository.saveSop(sopName, workstationId, lockMode)
+            sopRepository.saveSopPoint(selectedPointsData, sopId)
+            sopRepository.saveSopUser(selectedLockerData, selectedColockerData, sopId)
+            emit(sopId)
+        }
+    }
+
+    /**
+     * 创建作业
+     */
+    fun createJob(
+        selectedPoints: List<PointManageVo>,
+        selectedLockerData: List<UserManageVo>,
+        selectedColockerData: List<UserManageVo>,
+        lockMode: String?,
+        sopId: Long?,
+        workstationId: Long,
+        jobName: String
+    ): LiveData<Boolean> {
+        return liveData(Dispatchers.IO) {
+            jobTicketRepository.createSopJob(
+                selectedPoints,
+                selectedLockerData,
+                selectedColockerData,
+                lockMode,
+                sopId,
+                workstationId,
+                jobName
+            )
+            emit(true)
+        }
+    }
+}

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

@@ -70,6 +70,7 @@ class CreateSopJobViewModel : BaseViewModel() {
         selectedSopPoints: List<PointManageVo>,
         selectedLockerData: List<UserManageVo>,
         selectedColockerData: List<UserManageVo>,
+        lockMode: String?,
         sopId: Long?,
         workstationId: Long,
         jobName: String
@@ -79,6 +80,7 @@ class CreateSopJobViewModel : BaseViewModel() {
                 selectedSopPoints,
                 selectedLockerData,
                 selectedColockerData,
+                lockMode,
                 sopId,
                 workstationId,
                 jobName

+ 441 - 3
app/src/main/res/layout/fragment_create_job.xml

@@ -1,9 +1,447 @@
 <?xml version="1.0" encoding="utf-8"?>
 <layout xmlns:android="http://schemas.android.com/apk/res/android">
 
-    <RelativeLayout
+    <LinearLayout
         android:layout_width="match_parent"
-        android:layout_height="match_parent">
+        android:layout_height="match_parent"
+        android:layout_margin="20dp"
+        android:background="@drawable/home_card_bg"
+        android:orientation="vertical">
 
-    </RelativeLayout>
+        <LinearLayout
+            android:id="@+id/title_layout"
+            android:layout_width="match_parent"
+            android:layout_height="wrap_content"
+            android:gravity="center_vertical"
+            android:orientation="horizontal"
+            android:paddingHorizontal="10dp"
+            android:paddingVertical="5dp">
+
+            <ImageView
+                android:layout_width="20dp"
+                android:layout_height="20dp"
+                android:src="@mipmap/icon_data_manage_menu_user_manage" />
+
+            <TextView
+                android:layout_width="match_parent"
+                android:layout_height="wrap_content"
+                android:layout_marginLeft="10dp"
+                android:layout_weight="1"
+                android:text="@string/create_job_title"
+                android:textColor="@color/black"
+                android:textSize="24sp" />
+
+            <TextView
+                android:id="@+id/back"
+                android:layout_width="wrap_content"
+                android:layout_height="wrap_content"
+                android:layout_marginLeft="10dp"
+                android:background="@drawable/common_dialog_btn"
+                android:paddingHorizontal="20dp"
+                android:text="@string/back"
+                android:textColor="@color/black"
+                android:textSize="20sp" />
+        </LinearLayout>
+
+        <View
+            android:layout_width="match_parent"
+            android:layout_height="1dp"
+            android:background="@color/black" />
+
+        <LinearLayout
+            android:id="@+id/base_info_layout"
+            android:layout_width="match_parent"
+            android:layout_height="wrap_content"
+            android:layout_marginHorizontal="20dp"
+            android:layout_marginTop="20dp"
+            android:layout_marginBottom="10dp"
+            android:background="@drawable/home_card_bg"
+            android:gravity="center_vertical"
+            android:orientation="vertical">
+
+            <TextView
+                android:layout_width="match_parent"
+                android:layout_height="wrap_content"
+                android:layout_marginLeft="10dp"
+                android:layout_weight="1"
+                android:text="@string/base_info_title"
+                android:textColor="@color/black"
+                android:textSize="24sp" />
+
+            <View
+                android:layout_width="match_parent"
+                android:layout_height="1dp"
+                android:background="@color/black" />
+
+
+            <LinearLayout
+                android:layout_width="match_parent"
+                android:layout_height="wrap_content"
+                android:layout_marginTop="20dp"
+                android:gravity="center_vertical"
+                android:orientation="horizontal"
+                android:paddingHorizontal="16dp">
+
+                <TextView
+                    android:layout_width="wrap_content"
+                    android:layout_height="wrap_content"
+                    android:text="@string/job_workstation"
+                    android:textColor="@color/black"
+                    android:textSize="18sp" />
+
+                <TextView
+                    android:id="@+id/workstation_tv"
+                    android:layout_width="match_parent"
+                    android:layout_height="wrap_content"
+                    android:layout_marginLeft="10dp"
+                    android:background="@drawable/bg_common_input"
+                    android:drawableRight="@drawable/icon_drop_down"
+                    android:hint="@string/please_select_job_workstation"
+                    android:maxLines="1"
+                    android:paddingHorizontal="10dp"
+                    android:paddingVertical="2dp"
+                    android:singleLine="true"
+                    android:textColor="@color/black"
+                    android:textSize="18sp" />
+            </LinearLayout>
+
+            <LinearLayout
+                android:layout_width="match_parent"
+                android:layout_height="wrap_content"
+                android:layout_marginTop="20dp"
+                android:gravity="center_vertical"
+                android:orientation="horizontal"
+                android:paddingHorizontal="16dp">
+
+                <TextView
+                    android:layout_width="wrap_content"
+                    android:layout_height="wrap_content"
+                    android:text="@string/lock_mode"
+                    android:textColor="@color/black"
+                    android:textSize="18sp" />
+
+                <TextView
+                    android:id="@+id/lock_mode_tv"
+                    android:layout_width="match_parent"
+                    android:layout_height="wrap_content"
+                    android:layout_marginLeft="10dp"
+                    android:background="@drawable/bg_common_input"
+                    android:drawableRight="@drawable/icon_drop_down"
+                    android:hint="@string/please_select_lock_mode"
+                    android:maxLines="1"
+                    android:paddingHorizontal="10dp"
+                    android:paddingVertical="2dp"
+                    android:singleLine="true"
+                    android:textColor="@color/black"
+                    android:textSize="18sp" />
+            </LinearLayout>
+
+            <LinearLayout
+                android:layout_width="match_parent"
+                android:layout_height="wrap_content"
+                android:layout_marginTop="20dp"
+                android:layout_marginBottom="20dp"
+                android:gravity="center_vertical"
+                android:orientation="horizontal"
+                android:paddingHorizontal="16dp">
+
+                <TextView
+                    android:layout_width="wrap_content"
+                    android:layout_height="wrap_content"
+                    android:text="@string/create_job_name"
+                    android:textColor="@color/black"
+                    android:textSize="18sp" />
+
+                <EditText
+                    android:id="@+id/job_name_et"
+                    android:layout_width="match_parent"
+                    android:layout_height="wrap_content"
+                    android:layout_marginLeft="10dp"
+                    android:background="@drawable/bg_common_input"
+                    android:hint="@string/please_input_job_name"
+                    android:maxLines="1"
+                    android:paddingHorizontal="10dp"
+                    android:paddingVertical="2dp"
+                    android:singleLine="true"
+                    android:textColor="@color/black"
+                    android:textSize="18sp" />
+            </LinearLayout>
+        </LinearLayout>
+
+        <LinearLayout
+            android:id="@+id/point_info_layout"
+            android:layout_width="match_parent"
+            android:layout_height="wrap_content"
+            android:layout_marginHorizontal="20dp"
+            android:layout_marginVertical="10dp"
+            android:background="@drawable/home_card_bg"
+            android:gravity="center_vertical"
+            android:orientation="vertical">
+
+            <LinearLayout
+                android:layout_width="match_parent"
+                android:layout_height="wrap_content"
+                android:orientation="horizontal">
+
+                <TextView
+                    android:layout_width="match_parent"
+                    android:layout_height="wrap_content"
+                    android:layout_marginLeft="10dp"
+                    android:layout_weight="1"
+                    android:text="@string/point_info_title"
+                    android:textColor="@color/black"
+                    android:textSize="24sp" />
+
+                <TextView
+                    android:id="@+id/select_point_tv"
+                    android:layout_width="wrap_content"
+                    android:layout_height="wrap_content"
+                    android:layout_marginLeft="10dp"
+                    android:layout_marginRight="10dp"
+                    android:background="@drawable/common_dialog_btn"
+                    android:paddingHorizontal="20dp"
+                    android:text="@string/select"
+                    android:textColor="@color/black"
+                    android:textSize="20sp" />
+            </LinearLayout>
+
+            <View
+                android:layout_width="match_parent"
+                android:layout_height="1dp"
+                android:background="@color/black" />
+
+            <FrameLayout
+                android:layout_width="match_parent"
+                android:layout_height="match_parent">
+
+                <androidx.recyclerview.widget.RecyclerView
+                    android:id="@+id/point_rv"
+                    android:layout_width="match_parent"
+                    android:layout_height="240dp"
+                    android:paddingBottom="10dp" />
+
+                <LinearLayout
+                    android:id="@+id/no_selected_point_layout"
+                    android:layout_width="match_parent"
+                    android:layout_height="match_parent"
+                    android:background="@drawable/card_white_bg"
+                    android:gravity="center"
+                    android:orientation="vertical">
+
+                    <ImageView
+                        android:layout_width="80dp"
+                        android:layout_height="80dp"
+                        android:src="@drawable/icon_add_box" />
+
+                    <TextView
+                        android:layout_width="wrap_content"
+                        android:layout_height="wrap_content"
+                        android:gravity="center"
+                        android:paddingHorizontal="20dp"
+                        android:paddingVertical="10dp"
+                        android:text="@string/please_must_select_at_least_one_point"
+                        android:textColor="@color/black"
+                        android:textSize="24sp" />
+                </LinearLayout>
+            </FrameLayout>
+
+        </LinearLayout>
+
+        <LinearLayout
+            android:id="@+id/member_info_layout"
+            android:layout_width="match_parent"
+            android:layout_height="wrap_content"
+            android:layout_marginHorizontal="20dp"
+            android:layout_marginVertical="10dp"
+            android:background="@drawable/home_card_bg"
+            android:gravity="center_vertical"
+            android:orientation="vertical">
+
+            <LinearLayout
+                android:layout_width="match_parent"
+                android:layout_height="wrap_content"
+                android:orientation="horizontal">
+
+                <TextView
+                    android:layout_width="match_parent"
+                    android:layout_height="wrap_content"
+                    android:layout_marginLeft="10dp"
+                    android:layout_weight="1"
+                    android:text="@string/member_info_title"
+                    android:textColor="@color/black"
+                    android:textSize="24sp" />
+
+                <TextView
+                    android:id="@+id/select_member_tv"
+                    android:layout_width="wrap_content"
+                    android:layout_height="wrap_content"
+                    android:layout_marginLeft="10dp"
+                    android:layout_marginRight="10dp"
+                    android:background="@drawable/common_dialog_btn"
+                    android:paddingHorizontal="20dp"
+                    android:text="@string/select"
+                    android:textColor="@color/black"
+                    android:textSize="20sp" />
+            </LinearLayout>
+
+            <View
+                android:layout_width="match_parent"
+                android:layout_height="1dp"
+                android:background="@color/black" />
+
+            <FrameLayout
+                android:layout_width="match_parent"
+                android:layout_height="match_parent">
+
+                <LinearLayout
+                    android:layout_width="match_parent"
+                    android:layout_height="match_parent"
+                    android:gravity="center"
+                    android:orientation="horizontal">
+
+                    <LinearLayout
+                        android:layout_width="wrap_content"
+                        android:layout_height="match_parent"
+                        android:background="@drawable/home_card_bg"
+                        android:orientation="vertical">
+
+                        <TextView
+                            android:layout_width="wrap_content"
+                            android:layout_height="wrap_content"
+                            android:gravity="center"
+                            android:paddingHorizontal="20dp"
+                            android:paddingVertical="10dp"
+                            android:text="@string/locker"
+                            android:textColor="@color/black"
+                            android:textSize="24sp" />
+
+                        <View
+                            android:layout_width="match_parent"
+                            android:layout_height="1dp"
+                            android:background="@color/black" />
+
+                        <LinearLayout
+                            android:layout_width="match_parent"
+                            android:layout_height="match_parent"
+                            android:gravity="center"
+                            android:orientation="vertical">
+
+                            <ImageView
+                                android:layout_width="50dp"
+                                android:layout_height="50dp"
+                                android:layout_marginTop="10dp"
+                                android:src="@mipmap/icon_data_manage_menu_user_manage"
+                                android:tint="@color/black" />
+
+                            <TextView
+                                android:id="@+id/locker_name"
+                                android:layout_width="wrap_content"
+                                android:layout_height="wrap_content"
+                                android:gravity="center"
+                                android:paddingHorizontal="20dp"
+                                android:paddingVertical="10dp"
+                                android:textColor="@color/black"
+                                android:textSize="20sp" />
+                        </LinearLayout>
+                    </LinearLayout>
+
+                    <LinearLayout
+                        android:id="@+id/select_colocker_layout"
+                        android:layout_width="match_parent"
+                        android:layout_height="match_parent"
+                        android:layout_weight="1"
+                        android:background="@drawable/home_card_bg"
+                        android:orientation="vertical">
+
+                        <TextView
+                            android:layout_width="match_parent"
+                            android:layout_height="wrap_content"
+                            android:gravity="center"
+                            android:paddingHorizontal="20dp"
+                            android:paddingVertical="10dp"
+                            android:text="@string/colocker"
+                            android:textColor="@color/black"
+                            android:textSize="24sp" />
+
+                        <View
+                            android:layout_width="match_parent"
+                            android:layout_height="1dp"
+                            android:background="@color/black" />
+
+                        <androidx.recyclerview.widget.RecyclerView
+                            android:id="@+id/colocker_rv"
+                            android:layout_width="wrap_content"
+                            android:layout_height="match_parent" />
+                    </LinearLayout>
+
+                </LinearLayout>
+
+                <LinearLayout
+                    android:id="@+id/no_selected_member_layout"
+                    android:layout_width="match_parent"
+                    android:layout_height="match_parent"
+                    android:background="@drawable/card_white_bg"
+                    android:gravity="center"
+                    android:orientation="vertical">
+
+                    <ImageView
+                        android:layout_width="80dp"
+                        android:layout_height="80dp"
+                        android:src="@drawable/icon_add_box" />
+
+                    <TextView
+                        android:layout_width="wrap_content"
+                        android:layout_height="wrap_content"
+                        android:gravity="center"
+                        android:paddingHorizontal="20dp"
+                        android:paddingVertical="10dp"
+                        android:text="@string/please_select_member"
+                        android:textColor="@color/black"
+                        android:textSize="24sp" />
+                </LinearLayout>
+            </FrameLayout>
+        </LinearLayout>
+
+        <LinearLayout
+            android:layout_width="match_parent"
+            android:layout_height="wrap_content"
+            android:orientation="horizontal"
+            android:padding="10dp">
+
+            <CheckBox
+                android:id="@+id/save_sop"
+                android:layout_width="wrap_content"
+                android:layout_height="wrap_content"
+                android:layout_marginLeft="10dp"
+                android:text="@string/save_sop_check"
+                android:textColor="@color/black"
+                android:textSize="20sp" />
+
+            <View
+                android:layout_width="0dp"
+                android:layout_height="wrap_content"
+                android:layout_weight="1" />
+
+            <TextView
+                android:id="@+id/confirm"
+                android:layout_width="wrap_content"
+                android:layout_height="wrap_content"
+                android:background="@drawable/common_dialog_btn"
+                android:paddingHorizontal="20dp"
+                android:text="@string/confirm"
+                android:textColor="@color/black"
+                android:textSize="20sp" />
+
+            <TextView
+                android:id="@+id/cancel"
+                android:layout_width="wrap_content"
+                android:layout_height="wrap_content"
+                android:layout_marginHorizontal="10dp"
+                android:background="@drawable/common_dialog_btn"
+                android:paddingHorizontal="20dp"
+                android:text="@string/cancel"
+                android:textColor="@color/black"
+                android:textSize="20sp" />
+        </LinearLayout>
+    </LinearLayout>
 </layout>

+ 2 - 0
app/src/main/res/layout/fragment_create_sop.xml

@@ -296,6 +296,7 @@
                 <LinearLayout
                     android:layout_width="match_parent"
                     android:layout_height="match_parent"
+                    android:gravity="center"
                     android:orientation="horizontal">
 
                     <LinearLayout
@@ -345,6 +346,7 @@
                     </LinearLayout>
 
                     <LinearLayout
+                        android:id="@+id/select_colocker_layout"
                         android:layout_width="match_parent"
                         android:layout_height="match_parent"
                         android:layout_weight="1"

+ 2 - 0
app/src/main/res/layout/fragment_create_sop_job.xml

@@ -281,6 +281,7 @@
                 <LinearLayout
                     android:layout_width="match_parent"
                     android:layout_height="match_parent"
+                    android:gravity="center"
                     android:orientation="horizontal">
 
                     <LinearLayout
@@ -330,6 +331,7 @@
                     </LinearLayout>
 
                     <LinearLayout
+                        android:id="@+id/select_colocker_layout"
                         android:layout_width="match_parent"
                         android:layout_height="match_parent"
                         android:layout_weight="1"

+ 1 - 0
app/src/main/res/layout/fragment_select_memeber.xml

@@ -125,6 +125,7 @@
 
 
             <LinearLayout
+                android:id="@+id/select_colocker_layout"
                 android:layout_width="match_parent"
                 android:layout_height="wrap_content"
                 android:background="@drawable/home_card_bg"

+ 8 - 1
app/src/main/res/navigation/nav_job_manage.xml

@@ -21,7 +21,14 @@
     <fragment
         android:id="@+id/createJobFragment"
         android:name="com.grkj.iscs.features.main.fragment.job_manage.CreateJobFragment"
-        android:label="CreateJobFragment" />
+        android:label="CreateJobFragment" >
+        <action
+            android:id="@+id/action_createJobFragment_to_selectPointFragment"
+            app:destination="@id/selectPointFragment" />
+        <action
+            android:id="@+id/action_createJobFragment_to_selectMemberFragment"
+            app:destination="@id/selectMemberFragment" />
+    </fragment>
     <fragment
         android:id="@+id/createSopFragment"
         android:name="com.grkj.iscs.features.main.fragment.job_manage.CreateSopFragment"

+ 13 - 5
app/src/main/res/values-en/strings.xml

@@ -61,9 +61,9 @@
     <string name="please_input_workstation_name">please input workstation name</string>
     <string name="workstation_manage_workstation_name">Workstation name</string>
     <string name="please_select_workstation">please select workstation</string>
-    <string name="check_delete_workstation">Do you want to delete selected workstation "%1$s"?</string>
-    <string name="workstation_manage_delete_succeed">delete workstation "%1$s" succeed</string>
-    <string name="workstation_manage_delete_failed">delete workstation "%1$s" failed</string>
+    <string name="check_delete_workstation">Do you want to delete selected workstation \"%1$s\"?</string>
+    <string name="workstation_manage_delete_succeed">delete workstation \"%1$s\" succeed</string>
+    <string name="workstation_manage_delete_failed">delete workstation \"%1$s\" failed</string>
     <string name="workstation_is_in_top">workstation is top</string>
     <string name="workstation_is_in_bottom">workstation is bottom</string>
     <string name="point_manage_title">Point Manage</string>
@@ -109,7 +109,7 @@
     <string name="lock_mode_3"><![CDATA[unlock->lock]]></string>
     <string name="lock_mode_4">lock</string>
     <string name="lock_mode_5">unlock</string>
-    <string name="sop_save_tip">Do you want to save "%1$s"?</string>
+    <string name="sop_save_tip">Do you want to save \"%1$s\"?</string>
     <string name="create_sop_job_title">Create SOP job</string>
     <string name="create_sop_job_sop">SOP</string>
     <string name="job_name">Job name</string>
@@ -117,7 +117,15 @@
     <string name="please_input_job_name">please input job name</string>
     <string name="show_points_when_selected_sop">Show SOP points when the sop has selected</string>
     <string name="show_member_when_selected_sop">Show SOP members when the sop has selected</string>
-    <string name="create_sop_job_tip">Are you sure you want to execute the job "%1$s"?</string>
+    <string name="create_sop_job_tip">Are you sure you want to execute the job \"%1$s\"?</string>
     <string name="sop_job_create_succeed">Create SOP job succeed</string>
     <string name="sop_job_create_failed">Create SOP job failed</string>
+    <string name="create_job_title">Create job</string>
+    <string name="job_workstation">Job workstation</string>
+    <string name="create_job_name">Job name</string>
+    <string name="please_select_job_workstation">Please select job workstation</string>
+    <string name="job_create_succeed">Job create succeed</string>
+    <string name="job_create_failed">Job create failed</string>
+    <string name="job_save_tip">Are you sure you want to execute the job \"%1$s\"?</string>
+    <string name="save_sop_check">Create SOP</string>
 </resources>

+ 13 - 5
app/src/main/res/values-zh/strings.xml

@@ -61,9 +61,9 @@
     <string name="please_input_workstation_name">请输入区域名称</string>
     <string name="workstation_manage_workstation_name">区域名称</string>
     <string name="please_select_workstation">请选择区域</string>
-    <string name="check_delete_workstation">您确定要删除区域"%1$s"吗</string>
-    <string name="workstation_manage_delete_succeed">删除区域"%1$s"成功</string>
-    <string name="workstation_manage_delete_failed">无法删除区域"%1$s"</string>
+    <string name="check_delete_workstation">您确定要删除区域\"%1$s\"吗</string>
+    <string name="workstation_manage_delete_succeed">删除区域\"%1$s\"成功</string>
+    <string name="workstation_manage_delete_failed">无法删除区域\"%1$s\"</string>
     <string name="workstation_is_in_top">区域已经在顶部</string>
     <string name="workstation_is_in_bottom">区域已经在底部</string>
     <string name="point_manage_title">点位管理</string>
@@ -109,7 +109,7 @@
     <string name="lock_mode_3"><![CDATA[解锁->上锁]]></string>
     <string name="lock_mode_4">上锁</string>
     <string name="lock_mode_5">解锁</string>
-    <string name="sop_save_tip">确定要保存"%1$s"吗?</string>
+    <string name="sop_save_tip">确定要保存\"%1$s\"吗?</string>
     <string name="create_sop_job_title">新建SOP作业</string>
     <string name="create_sop_job_sop">SOP</string>
     <string name="job_name">作业名称</string>
@@ -117,7 +117,15 @@
     <string name="please_input_job_name">请输入作业名称</string>
     <string name="show_points_when_selected_sop">选择SOP后,将自动展示SOP的点位信息。</string>
     <string name="show_member_when_selected_sop">选择SOP后,将自动展示SOP的人员信息。</string>
-    <string name="create_sop_job_tip">确定要执行作业"%1$s"吗?</string>
+    <string name="create_sop_job_tip">确定要执行作业\"%1$s\"吗?</string>
     <string name="sop_job_create_succeed">SOP作业创建成功</string>
     <string name="sop_job_create_failed">SOP作业创建失败</string>
+    <string name="create_job_title">新建作业</string>
+    <string name="job_workstation">作业区域</string>
+    <string name="create_job_name">作业名称</string>
+    <string name="please_select_job_workstation">请选择作业区域</string>
+    <string name="job_create_succeed">作业执行成功</string>
+    <string name="job_create_failed">作业执行失败</string>
+    <string name="job_save_tip">确定要执行作业\"%1$s\"吗?</string>
+    <string name="save_sop_check">生成SOP</string>
 </resources>

+ 13 - 5
app/src/main/res/values/strings.xml

@@ -60,9 +60,9 @@
     <string name="please_input_workstation_name">请输入区域名称</string>
     <string name="workstation_manage_workstation_name">区域名称</string>
     <string name="please_select_workstation">请选择区域</string>
-    <string name="check_delete_workstation">您确定要删除区域"%1$s"吗</string>
-    <string name="workstation_manage_delete_succeed">删除区域"%1$s"成功</string>
-    <string name="workstation_manage_delete_failed">无法删除区域"%1$s"</string>
+    <string name="check_delete_workstation">您确定要删除区域\"%1$s\"吗</string>
+    <string name="workstation_manage_delete_succeed">删除区域\"%1$s\"成功</string>
+    <string name="workstation_manage_delete_failed">无法删除区域\"%1$s\"</string>
     <string name="workstation_is_in_top">区域已经在顶部</string>
     <string name="workstation_is_in_bottom">区域已经在底部</string>
     <string name="point_manage_title">点位管理</string>
@@ -108,7 +108,7 @@
     <string name="lock_mode_3"><![CDATA[解锁->上锁]]></string>
     <string name="lock_mode_4">上锁</string>
     <string name="lock_mode_5">解锁</string>
-    <string name="sop_save_tip">确定要保存"%1$s"吗?</string>
+    <string name="sop_save_tip">确定要保存\"%1$s\"吗?</string>
     <string name="create_sop_job_title">新建SOP作业</string>
     <string name="create_sop_job_sop">SOP</string>
     <string name="job_name">作业名称</string>
@@ -116,7 +116,15 @@
     <string name="please_input_job_name">请输入作业名称</string>
     <string name="show_points_when_selected_sop">选择SOP后,将自动展示SOP的点位信息。</string>
     <string name="show_member_when_selected_sop">选择SOP后,将自动展示SOP的人员信息。</string>
-    <string name="create_sop_job_tip">确定要执行作业"%1$s"吗?</string>
+    <string name="create_sop_job_tip">确定要执行作业\"%1$s\"吗?</string>
     <string name="sop_job_create_succeed">SOP作业创建成功</string>
     <string name="sop_job_create_failed">SOP作业创建失败</string>
+    <string name="create_job_title">新建作业</string>
+    <string name="job_workstation">作业区域</string>
+    <string name="create_job_name">作业名称</string>
+    <string name="please_select_job_workstation">请选择作业区域</string>
+    <string name="job_create_succeed">作业执行成功</string>
+    <string name="job_create_failed">作业执行失败</string>
+    <string name="job_save_tip">确定要执行作业\"%1$s\"吗?</string>
+    <string name="save_sop_check">生成SOP</string>
 </resources>

+ 39 - 0
data/src/main/java/com/grkj/data/model/dos/IsJobCard.kt

@@ -0,0 +1,39 @@
+package com.grkj.data.model.dos
+
+import androidx.room.*
+
+@Entity(tableName = "is_job_card")
+class IsJobCard : BaseBean() {
+
+    @PrimaryKey(autoGenerate = true)
+    @ColumnInfo(name = "card_id")
+    var cardId: Int = 0
+
+    @ColumnInfo(name = "card_code")
+    var cardCode: String = ""
+
+    @ColumnInfo(name = "hardware_id")
+    var hardwareId: Int? = null
+
+    @ColumnInfo(name = "card_nfc")
+    var cardNfc: String = ""
+
+    @ColumnInfo(name = "card_type")
+    var cardType: Int? = null
+
+    @ColumnInfo(name = "user_id")
+    var userId: Int? = null
+
+    @ColumnInfo(name = "user_name")
+    var userName: String? = null
+
+    @ColumnInfo(name = "del_flag")
+    var delFlag: String = "0"
+
+    @ColumnInfo(name = "ex_status")
+    var exStatus: String? = null
+
+    @ColumnInfo(name = "ex_remark")
+    var exRemark: String? = null
+
+}

+ 39 - 0
data/src/main/java/com/grkj/data/model/dos/IsLock.kt

@@ -0,0 +1,39 @@
+package com.grkj.data.model.dos
+
+import androidx.room.*
+
+@Entity(tableName = "is_lock")
+class IsLock : BaseBean() {
+
+    @PrimaryKey(autoGenerate = true)
+    @ColumnInfo(name = "lock_id")
+    var lockId: Int = 0
+
+    @ColumnInfo(name = "lock_code")
+    var lockCode: String = ""
+
+    @ColumnInfo(name = "lock_name")
+    var lockName: String = ""
+
+    @ColumnInfo(name = "lock_type_id")
+    var lockTypeId: Int? = null
+
+    @ColumnInfo(name = "hardware_id")
+    var hardwareId: Int? = null
+
+    @ColumnInfo(name = "lock_nfc")
+    var lockNfc: String? = null
+
+    @ColumnInfo(name = "del_flag")
+    var delFlag: String = "0"
+
+    @ColumnInfo(name = "lock_spec")
+    var lockSpec: String? = null
+
+    @ColumnInfo(name = "ex_status")
+    var exStatus: String? = null
+
+    @ColumnInfo(name = "ex_remark")
+    var exRemark: String? = null
+
+}

+ 42 - 0
data/src/main/java/com/grkj/data/model/dos/IsLockCabinet.kt

@@ -0,0 +1,42 @@
+package com.grkj.data.model.dos
+
+import androidx.room.*
+
+@Entity(tableName = "is_lock_cabinet")
+class IsLockCabinet : BaseBean() {
+
+    @PrimaryKey(autoGenerate = true)
+    @ColumnInfo(name = "cabinet_id")
+    var cabinetId: Int = 0
+
+    @ColumnInfo(name = "cabinet_code")
+    var cabinetCode: String? = null
+
+    @ColumnInfo(name = "cabinet_name")
+    var cabinetName: String? = null
+
+    @ColumnInfo(name = "hardware_id")
+    var hardwareId: Int? = null
+
+    @ColumnInfo(name = "workare_id")
+    var workareId: Int? = null
+
+    @ColumnInfo(name = "workstation_id")
+    var workstationId: Int? = null
+
+    @ColumnInfo(name = "cabinet_icon")
+    var cabinetIcon: String? = null
+
+    @ColumnInfo(name = "cabinet_picture")
+    var cabinetPicture: String? = null
+
+    @ColumnInfo(name = "is_online")
+    var isOnline: String? = null
+
+    @ColumnInfo(name = "del_flag")
+    var delFlag: String = "0"
+
+    @ColumnInfo(name = "status")
+    var status: String? = null
+
+}

+ 39 - 0
data/src/main/java/com/grkj/data/model/dos/IsLockCabinetSlots.kt

@@ -0,0 +1,39 @@
+package com.grkj.data.model.dos
+
+import androidx.room.*
+
+@Entity(tableName = "is_lock_cabinet_slots")
+class IsLockCabinetSlots : BaseBean() {
+
+    @PrimaryKey(autoGenerate = true)
+    @ColumnInfo(name = "slot_id")
+    var slotId: Int = 0
+
+    @ColumnInfo(name = "slot_code")
+    var slotCode: String? = null
+
+    @ColumnInfo(name = "cabinet_id")
+    var cabinetId: Int? = null
+
+    @ColumnInfo(name = "slot_type")
+    var slotType: String? = null
+
+    @ColumnInfo(name = "row")
+    var row: String? = null
+
+    @ColumnInfo(name = "col")
+    var col: String? = null
+
+    @ColumnInfo(name = "is_occupied")
+    var isOccupied: String? = null
+
+    @ColumnInfo(name = "occupied_by")
+    var occupiedBy: Int? = null
+
+    @ColumnInfo(name = "del_flag")
+    var delFlag: String = "0"
+
+    @ColumnInfo(name = "status")
+    var status: String? = null
+
+}

+ 42 - 0
data/src/main/java/com/grkj/data/model/dos/IsLockType.kt

@@ -0,0 +1,42 @@
+package com.grkj.data.model.dos
+
+import androidx.room.*
+
+@Entity(tableName = "is_lock_type")
+class IsLockType : BaseBean() {
+
+    @PrimaryKey(autoGenerate = true)
+    @ColumnInfo(name = "lock_type_id")
+    var lockTypeId: Int = 0
+
+    @ColumnInfo(name = "lock_type_code")
+    var lockTypeCode: String = ""
+
+    @ColumnInfo(name = "lock_type_name")
+    var lockTypeName: String = ""
+
+    @ColumnInfo(name = "lock_type_description")
+    var lockTypeDescription: String? = null
+
+    @ColumnInfo(name = "lock_type_icon")
+    var lockTypeIcon: String? = null
+
+    @ColumnInfo(name = "lock_type_img")
+    var lockTypeImg: String? = null
+
+    @ColumnInfo(name = "hardware_type_id")
+    var hardwareTypeId: Int = 0
+
+    @ColumnInfo(name = "del_flag")
+    var delFlag: String = "0"
+
+    @ColumnInfo(name = "parent_type_id")
+    var parentTypeId: Int? = null
+
+    @ColumnInfo(name = "ancestors")
+    var ancestors: String? = null
+
+    @ColumnInfo(name = "lock_type_spec")
+    var lockTypeSpec: String? = null
+
+}

+ 36 - 0
data/src/main/java/com/grkj/data/model/dos/IsLockset.kt

@@ -0,0 +1,36 @@
+package com.grkj.data.model.dos
+
+import androidx.room.*
+
+@Entity(tableName = "is_lockset")
+class IsLockset : BaseBean() {
+
+    @PrimaryKey(autoGenerate = true)
+    @ColumnInfo(name = "lockset_id")
+    var locksetId: Int = 0
+
+    @ColumnInfo(name = "lockset_code")
+    var locksetCode: String = ""
+
+    @ColumnInfo(name = "lockset_name")
+    var locksetName: String = ""
+
+    @ColumnInfo(name = "lockset_type_id")
+    var locksetTypeId: Int? = null
+
+    @ColumnInfo(name = "materials_id")
+    var materialsId: Int? = null
+
+    @ColumnInfo(name = "lockset_nfc")
+    var locksetNfc: String? = null
+
+    @ColumnInfo(name = "lockset_rfid")
+    var locksetRfid: Int? = null
+
+    @ColumnInfo(name = "del_flag")
+    var delFlag: String = "0"
+
+    @ColumnInfo(name = "lockset_spec")
+    var locksetSpec: String? = null
+
+}

+ 42 - 0
data/src/main/java/com/grkj/data/model/dos/IsLocksetType.kt

@@ -0,0 +1,42 @@
+package com.grkj.data.model.dos
+
+import androidx.room.*
+
+@Entity(tableName = "is_lockset_type")
+class IsLocksetType : BaseBean() {
+
+    @PrimaryKey(autoGenerate = true)
+    @ColumnInfo(name = "lockset_type_id")
+    var locksetTypeId: Int = 0
+
+    @ColumnInfo(name = "lockset_type_code")
+    var locksetTypeCode: String = ""
+
+    @ColumnInfo(name = "lockset_type_name")
+    var locksetTypeName: String = ""
+
+    @ColumnInfo(name = "lockset_type_description")
+    var locksetTypeDescription: String? = null
+
+    @ColumnInfo(name = "lockset_type_icon")
+    var locksetTypeIcon: String? = null
+
+    @ColumnInfo(name = "lockset_type_img")
+    var locksetTypeImg: String? = null
+
+    @ColumnInfo(name = "materials_type_id")
+    var materialsTypeId: Int = 0
+
+    @ColumnInfo(name = "del_flag")
+    var delFlag: String = "0"
+
+    @ColumnInfo(name = "parent_type_id")
+    var parentTypeId: Int? = null
+
+    @ColumnInfo(name = "ancestors")
+    var ancestors: String? = null
+
+    @ColumnInfo(name = "lockset_type_spec")
+    var locksetTypeSpec: String? = null
+
+}

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

@@ -14,6 +14,7 @@ interface IJobTicketRepository {
         selectedSopPoints: List<PointManageVo>,
         selectedLockerData: List<UserManageVo>,
         selectedColockerData: List<UserManageVo>,
+        lockMode: String?,
         sopId: Long?,
         workstationId: Long,
         jobName: String

+ 2 - 2
data/src/main/java/com/grkj/data/repository/impl/JobTicketRepository.kt

@@ -24,6 +24,7 @@ class JobTicketRepository : IJobTicketRepository {
         selectedSopPoints: List<PointManageVo>,
         selectedLockerData: List<UserManageVo>,
         selectedColockerData: List<UserManageVo>,
+        lockMode: String?,
         sopId: Long?,
         workstationId: Long,
         jobName: String
@@ -67,9 +68,8 @@ class JobTicketRepository : IJobTicketRepository {
             }
         }
         jobTicketDao.saveIsJobTicketLock(ticketLocks)
-        val sopData = sopDao.getSopDataBySopId(sopId!!)
         val ticketStep = mutableListOf<IsJobTicketStep>().apply {
-            sopData.lockMode?.split(",")?.forEachIndexed { index, stepType ->
+            lockMode?.split(",")?.forEachIndexed { index, stepType ->
                 val isJobTicketStep = IsJobTicketStep()
                 isJobTicketStep.ticketId = ticketId
                 isJobTicketStep.stepType = stepType

+ 8 - 8
ui-base/src/main/java/com/grkj/ui_base/base/BaseFragment.kt

@@ -28,7 +28,7 @@ import org.slf4j.LoggerFactory
 abstract class BaseFragment<V : ViewDataBinding> : Fragment() {
     protected val logger: Logger = LoggerFactory.getLogger(this::class.java)
     protected lateinit var binding: V
-
+    private var isFirstLoad: Boolean = true
     protected val navController: NavController get() = findNavController()
 
     override fun onCreateView(
@@ -45,16 +45,17 @@ abstract class BaseFragment<V : ViewDataBinding> : Fragment() {
 
     override fun onViewCreated(view: View, savedInstanceState: Bundle?) {
         super.onViewCreated(view, savedInstanceState)
-
         // EventBus 注册
         if (!EventBus.getDefault().isRegistered(this)) {
             EventBus.getDefault().register(this)
         }
-
-        initView()
-        initData()
-        initListeners()
-        initObservers()
+        if (isFirstLoad) {
+            initView()
+            initData()
+            initListeners()
+            initObservers()
+            isFirstLoad = false
+        }
     }
 
     /** 请求权限,基于 PermissionUtils */
@@ -77,7 +78,6 @@ abstract class BaseFragment<V : ViewDataBinding> : Fragment() {
         if (EventBus.getDefault().isRegistered(this)) {
             EventBus.getDefault().unregister(this)
         }
-        logger.info("销毁当前页")
         super.onDestroyView()
     }