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

add(新增)
- 作业挂锁处理

周文健 4 сар өмнө
parent
commit
fe4f7a6caa
25 өөрчлөгдсөн 155 нэмэгдсэн , 80 устгасан
  1. 5 0
      app/src/main/java/com/grkj/iscs/features/init/fragment/InitCardRegistrationFragment.kt
  2. 5 2
      app/src/main/java/com/grkj/iscs/features/main/dialog/hardware_manage/UpdateKeyDialog.kt
  3. 4 2
      app/src/main/java/com/grkj/iscs/features/main/dialog/hardware_manage/UpdateLockDialog.kt
  4. 4 1
      app/src/main/java/com/grkj/iscs/features/main/fragment/hardware_manage/LockManageFragment.kt
  5. 15 15
      app/src/main/java/com/grkj/iscs/features/main/fragment/job_manage/CreateJobFragment.kt
  6. 9 10
      app/src/main/java/com/grkj/iscs/features/main/fragment/job_manage/CreateSopJobFragment.kt
  7. 8 6
      app/src/main/java/com/grkj/iscs/features/main/fragment/job_manage/EditJobFragment.kt
  8. 6 3
      app/src/main/java/com/grkj/iscs/features/main/fragment/job_manage/EditSopJobFragment.kt
  9. 7 7
      app/src/main/java/com/grkj/iscs/features/main/viewmodel/data_manage/WorkstationManageViewModel.kt
  10. 5 0
      app/src/main/java/com/grkj/iscs/features/main/viewmodel/hardware_manage/KeyManageViewModel.kt
  11. 9 0
      app/src/main/java/com/grkj/iscs/features/main/viewmodel/hardware_manage/LockManageViewModel.kt
  12. 7 7
      app/src/main/java/com/grkj/iscs/features/main/viewmodel/job_manage/JobViewModel.kt
  13. 7 7
      app/src/main/java/com/grkj/iscs/features/main/viewmodel/job_manage/SopJobViewModel.kt
  14. 1 0
      app/src/main/res/values-en/strings.xml
  15. 1 0
      app/src/main/res/values-zh/strings.xml
  16. 1 0
      app/src/main/res/values/strings.xml
  17. 12 0
      data/src/main/java/com/grkj/data/dao/HardwareDao.kt
  18. 10 9
      data/src/main/java/com/grkj/data/enums/CommonDictDataEnum.kt
  19. 4 0
      data/src/main/java/com/grkj/data/model/dos/IsKey.kt
  20. 10 0
      data/src/main/java/com/grkj/data/repository/IHardwareRepository.kt
  21. 1 1
      data/src/main/java/com/grkj/data/repository/IJobTicketRepository.kt
  22. 1 1
      data/src/main/java/com/grkj/data/repository/IWorkstationRepository.kt
  23. 15 4
      data/src/main/java/com/grkj/data/repository/impl/HardwareRepository.kt
  24. 2 1
      data/src/main/java/com/grkj/data/repository/impl/JobTicketRepository.kt
  25. 6 4
      data/src/main/java/com/grkj/data/repository/impl/WorkstationRepository.kt

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

@@ -8,12 +8,14 @@ import com.grkj.data.data.EventConstants
 import com.grkj.iscs.R
 import com.grkj.iscs.databinding.FragmentInitCardRegistrationBinding
 import com.grkj.iscs.databinding.ItemInitHardwareRfidBinding
+import com.grkj.iscs.features.init.activity.InitActivity
 import com.grkj.iscs.features.init.viewmodel.InitViewModel
 import com.grkj.shared.model.EventBean
 import com.grkj.ui_base.base.BaseFragment
 import com.grkj.ui_base.utils.event.CardSwipeEvent
 import com.sik.sikcore.extension.setDebouncedClickListener
 import dagger.hilt.android.AndroidEntryPoint
+import razerdp.util.KeyboardUtils
 
 /**
  * 卡片录入
@@ -31,6 +33,7 @@ class InitCardRegistrationFragment : BaseFragment<FragmentInitCardRegistrationBi
     }
 
     override fun initView() {
+        (requireActivity() as InitActivity).clearCardNo()
         binding.previousBtn.setDebouncedClickListener {
             navController.popBackStack()
         }
@@ -49,6 +52,7 @@ class InitCardRegistrationFragment : BaseFragment<FragmentInitCardRegistrationBi
                 onInitHardwareBinding(this)
             }
         }.models = cardRfidData
+        viewModel.removeCardData().observe(this){}
     }
 
     private fun BindingAdapter.BindingViewHolder.onInitHardwareBinding(holder: BindingAdapter.BindingViewHolder) {
@@ -68,6 +72,7 @@ class InitCardRegistrationFragment : BaseFragment<FragmentInitCardRegistrationBi
                 val cardSwipeEvent = (event.data as CardSwipeEvent)
                 cardRfidData.add(cardSwipeEvent.cardNo)
                 binding.cardRv.adapter?.notifyDataSetChanged()
+                KeyboardUtils.close(requireActivity())
             }
         }
     }

+ 5 - 2
app/src/main/java/com/grkj/iscs/features/main/dialog/hardware_manage/UpdateKeyDialog.kt

@@ -2,6 +2,7 @@ package com.grkj.iscs.features.main.dialog.hardware_manage
 
 import android.content.Context
 import android.view.View
+import com.grkj.data.enums.CommonDictDataEnum
 import com.grkj.data.model.dos.IsKey
 import com.grkj.data.model.vo.UpdateKeyDataVo
 import com.grkj.iscs.R
@@ -85,7 +86,9 @@ class UpdateKeyDialog(context: Context) : BasePopupWindow(context) {
         binding.keyCodeEt.setText(isKey.keyCode)
         binding.keyNfcEt.setText(isKey.keyNfc)
         binding.keyMacEt.setText(isKey.macAddress)
-        binding.activateRb.isChecked = isKey.exStatus == "0"
-        binding.deactivateRb.isChecked = isKey.exStatus != "0"
+        binding.activateRb.isChecked =
+            CommonDictDataEnum.KEY_STATUS.commonDictRes.find { it.dictLabel == "正常" }?.dictValue == isKey.exStatus
+        binding.deactivateRb.isChecked =
+            CommonDictDataEnum.KEY_STATUS.commonDictRes.find { it.dictLabel == "正常" }?.dictValue != isKey.exStatus
     }
 }

+ 4 - 2
app/src/main/java/com/grkj/iscs/features/main/dialog/hardware_manage/UpdateLockDialog.kt

@@ -2,6 +2,7 @@ package com.grkj.iscs.features.main.dialog.hardware_manage
 
 import android.content.Context
 import android.view.View
+import com.grkj.data.enums.CommonDictDataEnum
 import com.grkj.data.model.dos.IsLock
 import com.grkj.data.model.vo.UpdateLockDataVo
 import com.grkj.iscs.R
@@ -74,8 +75,9 @@ class UpdateLockDialog(context: Context) : BasePopupWindow(context) {
         lockId = lock.lockId
         binding.lockCodeEt.setText(lock.lockCode)
         binding.lockNfcEt.setText(lock.lockNfc)
-        binding.activateRb.isChecked = lock.exStatus == "0"
-        binding.deactivateRb.isChecked = lock.exStatus != "0"
+        binding.activateRb.isChecked =
+            CommonDictDataEnum.PADLOCK_STATUS.commonDictRes.find { it.dictLabel == "正常" }?.dictValue == lock.exStatus
+        binding.deactivateRb.isChecked = CommonDictDataEnum.PADLOCK_STATUS.commonDictRes.find { it.dictLabel == "正常" }?.dictValue != lock.exStatus
         binding.remarkEt.setText(lock.exRemark)
     }
 }

+ 4 - 1
app/src/main/java/com/grkj/iscs/features/main/fragment/hardware_manage/LockManageFragment.kt

@@ -10,6 +10,8 @@ import com.drake.brv.utils.divider
 import com.drake.brv.utils.linear
 import com.drake.brv.utils.models
 import com.drake.brv.utils.setup
+import com.grkj.data.data.DictConstants
+import com.grkj.data.enums.CommonDictDataEnum
 import com.grkj.data.model.dos.IsLock
 import com.grkj.iscs.R
 import com.grkj.iscs.databinding.FragmentLockManageBinding
@@ -115,7 +117,8 @@ class LockManageFragment : BaseFragment<FragmentLockManageBinding>() {
         val item = holder.getModel<IsLock>()
         bind.lockCode.text = item.lockCode
         bind.lockNfc.text = item.lockNfc
-        bind.status.text = if (item.exStatus == "0") "正常" else "异常"
+        bind.status.text =
+            if (item.exStatus == CommonDictDataEnum.PADLOCK_STATUS.commonDictRes.find { it.dictLabel == "正常" }?.dictValue) "正常" else "异常"
         bind.select.apply {
             setOnCheckedChangeListener(null)
             isChecked = item.isSelected

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

@@ -29,9 +29,6 @@ import com.sik.sikcore.data.GlobalDataTempStore
 import com.sik.sikcore.extension.setDebouncedClickListener
 import com.sik.sikcore.thread.ThreadUtils
 import dagger.hilt.android.AndroidEntryPoint
-import kotlinx.coroutines.Dispatchers
-import kotlinx.coroutines.async
-import kotlinx.coroutines.withContext
 import kotlin.coroutines.resume
 import kotlin.coroutines.suspendCoroutine
 import kotlin.getValue
@@ -79,11 +76,14 @@ class CreateJobFragment : BaseFragment<FragmentCreateJobBinding>() {
             if (checkData()) {
                 TipDialog.show(
                     title = CommonUtils.getStr(com.grkj.ui_base.R.string.action_hint).toString(),
-                    msg = CommonUtils.getStr(R.string.job_save_tip).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 = {
-                        saveJob(null)
+                        createJob(null)
                     })
             }
         }
@@ -98,7 +98,7 @@ class CreateJobFragment : BaseFragment<FragmentCreateJobBinding>() {
                     dialogType = TipDialog.DialogType.INFO,
                     countDownTime = 10,
                     onConfirmClick = {
-                        saveJob(null, true)
+                        createJob(null, true)
                     })
             }
         }
@@ -274,21 +274,20 @@ class CreateJobFragment : BaseFragment<FragmentCreateJobBinding>() {
     /**
      * 保存作业
      */
-    private fun saveJob(sopId: Long?, isExecute: Boolean = false) {
-        viewModel.saveJob(
+    private fun createJob(sopId: Long?, isExecute: Boolean = false) {
+        viewModel.createJob(
             selectedPointData,
             selectedLockerData,
             selectedColockerData,
             selectedLockMode,
             sopId,
             selectedWorkstationId!!,
-            binding.jobNameEt.text.toString(),
-            viewModel.jobTicketData?.ticketId ?: 0
+            binding.jobNameEt.text.toString()
         ).observe(this) {
-            if (it) {
+            if (it.first) {
                 if (isExecute) {
-                    viewModel.startJob().observe(this) {
-                        if (it){
+                    viewModel.startJob(it.second).observe(this) {
+                        if (it) {
                             TipDialog.show(
                                 title = CommonUtils.getStr(com.grkj.ui_base.R.string.action_succeed)
                                     .toString(),
@@ -297,9 +296,10 @@ class CreateJobFragment : BaseFragment<FragmentCreateJobBinding>() {
                                 dialogType = TipDialog.DialogType.SUCCESS,
                                 countDownTime = 10,
                             )
-                        }else{
+                        } else {
                             TipDialog.show(
-                                title = CommonUtils.getStr(com.grkj.ui_base.R.string.action_failed).toString(),
+                                title = CommonUtils.getStr(com.grkj.ui_base.R.string.action_failed)
+                                    .toString(),
                                 msg = CommonUtils.getStr(R.string.job_create_and_execute_failed)
                                     .toString(),
                                 dialogType = TipDialog.DialogType.ERROR,

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

@@ -3,7 +3,6 @@ package com.grkj.iscs.features.main.fragment.job_manage
 import android.widget.LinearLayout
 import androidx.core.view.isVisible
 import androidx.fragment.app.viewModels
-import androidx.lifecycle.ViewModelProvider
 import com.drake.brv.BindingAdapter
 import com.drake.brv.utils.grid
 import com.drake.brv.utils.linear
@@ -73,11 +72,12 @@ class CreateSopJobFragment : BaseFragment<FragmentCreateSopJobBinding>() {
             if (checkData()) {
                 TipDialog.show(
                     title = CommonUtils.getStr(com.grkj.ui_base.R.string.action_hint).toString(),
-                    msg = CommonUtils.getStr(R.string.job_save_tip).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 = {
-                        saveSopJob()
+                        createSopJob()
                     })
             }
         }
@@ -92,7 +92,7 @@ class CreateSopJobFragment : BaseFragment<FragmentCreateSopJobBinding>() {
                     dialogType = TipDialog.DialogType.INFO,
                     countDownTime = 10,
                     onConfirmClick = {
-                        saveSopJob(true)
+                        createSopJob(true)
                     })
             }
         }
@@ -163,20 +163,19 @@ class CreateSopJobFragment : BaseFragment<FragmentCreateSopJobBinding>() {
     /**
      * 保存sop作业
      */
-    private fun saveSopJob(isExecute: Boolean = false) {
-        viewModel.saveSopJob(
+    private fun createSopJob(isExecute: Boolean = false) {
+        viewModel.createSopJob(
             selectedPointData,
             selectedLockerData,
             selectedColockerData,
             selectedSop?.lockMode,
             selectedSopId,
             selectedWorkstationId!!,
-            binding.jobNameEt.text.toString(),
-            viewModel.jobTicketData?.ticketId ?: 0
+            binding.jobNameEt.text.toString()
         ).observe(this) {
-            if (it) {
+            if (it.first) {
                 if (isExecute) {
-                    viewModel.startJob().observe(this) {
+                    viewModel.startJob(it.second).observe(this) {
                         if (it) {
                             TipDialog.show(
                                 title = CommonUtils.getStr(com.grkj.ui_base.R.string.action_succeed)

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

@@ -73,7 +73,8 @@ class EditJobFragment : BaseFragment<FragmentEditJobBinding>() {
             if (checkData()) {
                 TipDialog.show(
                     title = CommonUtils.getStr(com.grkj.ui_base.R.string.action_hint).toString(),
-                    msg = CommonUtils.getStr(R.string.job_save_tip).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 = {
@@ -192,10 +193,10 @@ class EditJobFragment : BaseFragment<FragmentEditJobBinding>() {
             binding.jobNameEt.text.toString(),
             viewModel.jobTicketData?.ticketId ?: 0
         ).observe(this) {
-            if (it) {
+            if (it.first) {
                 if (isExecute) {
-                    viewModel.startJob().observe(this) {
-                        if (it){
+                    viewModel.startJob(it.second).observe(this) {
+                        if (it) {
                             TipDialog.show(
                                 title = CommonUtils.getStr(com.grkj.ui_base.R.string.action_succeed)
                                     .toString(),
@@ -204,9 +205,10 @@ class EditJobFragment : BaseFragment<FragmentEditJobBinding>() {
                                 dialogType = TipDialog.DialogType.SUCCESS,
                                 countDownTime = 10,
                             )
-                        }else{
+                        } else {
                             TipDialog.show(
-                                title = CommonUtils.getStr(com.grkj.ui_base.R.string.action_failed).toString(),
+                                title = CommonUtils.getStr(com.grkj.ui_base.R.string.action_failed)
+                                    .toString(),
                                 msg = CommonUtils.getStr(R.string.job_create_and_execute_failed)
                                     .toString(),
                                 dialogType = TipDialog.DialogType.ERROR,

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

@@ -72,7 +72,10 @@ class EditSopJobFragment : BaseFragment<FragmentEditSopJobBinding>() {
             if (checkData()) {
                 TipDialog.show(
                     title = CommonUtils.getStr(com.grkj.ui_base.R.string.action_hint).toString(),
-                    msg = CommonUtils.getStr(R.string.job_save_tip).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 = {
@@ -170,9 +173,9 @@ class EditSopJobFragment : BaseFragment<FragmentEditSopJobBinding>() {
             binding.jobNameEt.text.toString(),
             viewModel.jobTicketData?.ticketId ?: 0
         ).observe(this) {
-            if (it) {
+            if (it.first) {
                 if (isExecute) {
-                    viewModel.startJob().observe(this) {
+                    viewModel.startJob(it.second).observe(this) {
                         if (it) {
                             TipDialog.show(
                                 title = CommonUtils.getStr(com.grkj.ui_base.R.string.action_succeed)

+ 7 - 7
app/src/main/java/com/grkj/iscs/features/main/viewmodel/data_manage/WorkstationManageViewModel.kt

@@ -14,7 +14,8 @@ import kotlinx.coroutines.Dispatchers
  * 岗位数据
  */
 @HiltViewModel
-class WorkstationManageViewModel @Inject constructor(val workstationRepository: IWorkstationRepository) : BaseViewModel() {
+class WorkstationManageViewModel @Inject constructor(val workstationRepository: IWorkstationRepository) :
+    BaseViewModel() {
     var workstationManageData: MutableList<WorkstationManageVo> = mutableListOf()
 
     /**
@@ -60,11 +61,12 @@ class WorkstationManageViewModel @Inject constructor(val workstationRepository:
      */
     fun addWorkstation(workstationName: String): LiveData<Boolean> {
         return liveData(Dispatchers.IO) {
-            val selectedItem = workstationManageData.first { it.isSelected }
-            val orderNum =
-                workstationManageData.count { it.parentId == selectedItem.workstationId } + 1
+            val selectedItem = workstationManageData.firstOrNull { it.isSelected }
+            val orderNum = selectedItem?.let {
+                return@let workstationManageData.count { it.parentId == selectedItem.workstationId } + 1
+            } ?: 0
             workstationRepository.insertWorkstation(
-                workstationManageData.first { it.isSelected },
+                workstationManageData.firstOrNull { it.isSelected },
                 orderNum,
                 workstationName
             )
@@ -142,6 +144,4 @@ class WorkstationManageViewModel @Inject constructor(val workstationRepository:
             }
         }
     }
-
-
 }

+ 5 - 0
app/src/main/java/com/grkj/iscs/features/main/viewmodel/hardware_manage/KeyManageViewModel.kt

@@ -2,6 +2,7 @@ package com.grkj.iscs.features.main.viewmodel.hardware_manage
 
 import androidx.lifecycle.LiveData
 import androidx.lifecycle.liveData
+import com.grkj.data.enums.CommonDictDataEnum
 import com.grkj.data.model.dos.IsKey
 import com.grkj.data.model.vo.AddKeyDataVo
 import com.grkj.data.model.vo.KeyManageFilterVo
@@ -64,6 +65,8 @@ class KeyManageViewModel @Inject constructor(
         return liveData(Dispatchers.IO) {
             var isKey = IsKey()
             isKey = BeanUtils.copyData<IsKey>(data, isKey)
+            isKey.exStatus =
+                CommonDictDataEnum.KEY_STATUS.commonDictRes.find { it.dictLabel == if (data.exStatus) "正常" else "异常" }?.dictValue
             hardwareRepository.addKeyInfo(isKey)
             emit(true)
         }
@@ -76,6 +79,8 @@ class KeyManageViewModel @Inject constructor(
         return liveData(Dispatchers.IO) {
             var isKey = IsKey()
             isKey = BeanUtils.copyData<IsKey>(data, isKey)
+            isKey.exStatus =
+                CommonDictDataEnum.KEY_STATUS.commonDictRes.find { it.dictLabel == if (data.exStatus) "正常" else "异常" }?.dictValue
             hardwareRepository.updateKeyInfo(isKey)
             emit(true)
         }

+ 9 - 0
app/src/main/java/com/grkj/iscs/features/main/viewmodel/hardware_manage/LockManageViewModel.kt

@@ -2,12 +2,16 @@ package com.grkj.iscs.features.main.viewmodel.hardware_manage
 
 import androidx.lifecycle.LiveData
 import androidx.lifecycle.liveData
+import com.grkj.data.data.DictConstants
+import com.grkj.data.enums.CommonDictDataEnum
 import com.grkj.data.model.dos.IsLock
+import com.grkj.data.model.res.CommonDictRes
 import com.grkj.data.model.vo.AddLockDataVo
 import com.grkj.data.model.vo.LockManageFilterVo
 import com.grkj.data.model.vo.UpdateLockDataVo
 import com.grkj.data.repository.IHardwareRepository
 import com.grkj.ui_base.base.BaseViewModel
+import com.grkj.ui_base.business.DataBusiness
 import com.sik.sikcore.data.BeanUtils
 import dagger.hilt.android.lifecycle.HiltViewModel
 import kotlinx.coroutines.Dispatchers
@@ -25,6 +29,7 @@ class LockManageViewModel @Inject constructor(
     var lockManageDataList: MutableList<IsLock> = mutableListOf()
     var lockFilterData: LockManageFilterVo? = null
 
+
     /**
      * 删除选中挂锁
      */
@@ -61,6 +66,8 @@ class LockManageViewModel @Inject constructor(
         liveData(Dispatchers.IO) {
             var isLock = IsLock()
             isLock = BeanUtils.copyData<IsLock>(data, isLock)
+            isLock.exStatus =
+                CommonDictDataEnum.PADLOCK_STATUS.commonDictRes.find { it.dictLabel == if (data.exStatus) "正常" else "异常" }?.dictValue
             hardwareRepository.addLockInfo(isLock)
             emit(true)
         }
@@ -72,6 +79,8 @@ class LockManageViewModel @Inject constructor(
         liveData(Dispatchers.IO) {
             var isLock = IsLock()
             isLock = BeanUtils.copyData<IsLock>(data, isLock)
+            isLock.exStatus =
+                CommonDictDataEnum.PADLOCK_STATUS.commonDictRes.find { it.dictLabel == if (data.exStatus) "正常" else "异常" }?.dictValue
             hardwareRepository.updateLockInfo(isLock)
             emit(true)
         }

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

@@ -71,9 +71,9 @@ class JobViewModel @Inject constructor(
         sopId: Long?,
         workstationId: Long,
         jobName: String
-    ): LiveData<Boolean> {
+    ): LiveData<Pair<Boolean, Long>> {
         return liveData(Dispatchers.IO) {
-            jobTicketRepository.createJob(
+            val ticketId = jobTicketRepository.createJob(
                 selectedPoints,
                 selectedLockerData,
                 selectedColockerData,
@@ -82,7 +82,7 @@ class JobViewModel @Inject constructor(
                 workstationId,
                 jobName
             )
-            emit(true)
+            emit(true to ticketId)
         }
     }
 
@@ -98,7 +98,7 @@ class JobViewModel @Inject constructor(
         workstationId: Long,
         jobName: String,
         ticketId: Long
-    ): LiveData<Boolean> {
+    ): LiveData<Pair<Boolean, Long>> {
         return liveData(Dispatchers.IO) {
             jobTicketRepository.saveJob(
                 selectedPoints,
@@ -110,16 +110,16 @@ class JobViewModel @Inject constructor(
                 jobName,
                 ticketId
             )
-            emit(true)
+            emit(true to ticketId)
         }
     }
 
     /**
      * 开始作业
      */
-    fun startJob(): LiveData<Boolean> {
+    fun startJob(ticketId: Long): LiveData<Boolean> {
         return liveData(Dispatchers.IO) {
-            jobTicketRepository.startJob(jobTicketData?.ticketId)
+            jobTicketRepository.startJob(ticketId)
             emit(true)
         }
     }

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

@@ -77,9 +77,9 @@ class SopJobViewModel @Inject constructor(
         sopId: Long?,
         workstationId: Long,
         jobName: String
-    ): LiveData<Boolean> {
+    ): LiveData<Pair<Boolean, Long>> {
         return liveData(Dispatchers.IO) {
-            jobTicketRepository.createJob(
+            val ticketId = jobTicketRepository.createJob(
                 selectedSopPoints,
                 selectedLockerData,
                 selectedColockerData,
@@ -88,7 +88,7 @@ class SopJobViewModel @Inject constructor(
                 workstationId,
                 jobName
             )
-            emit(true)
+            emit(true to ticketId)
         }
     }
 
@@ -104,7 +104,7 @@ class SopJobViewModel @Inject constructor(
         workstationId: Long,
         jobName: String,
         ticketId: Long
-    ): LiveData<Boolean> {
+    ): LiveData<Pair<Boolean, Long>> {
         return liveData(Dispatchers.IO) {
             jobTicketRepository.saveJob(
                 selectedSopPoints,
@@ -116,16 +116,16 @@ class SopJobViewModel @Inject constructor(
                 jobName,
                 ticketId
             )
-            emit(true)
+            emit(true to ticketId)
         }
     }
 
     /**
      * 开始作业
      */
-    fun startJob(): LiveData<Boolean> {
+    fun startJob(ticketId: Long): LiveData<Boolean> {
         return liveData(Dispatchers.IO) {
-            jobTicketRepository.startJob(jobTicketData?.ticketId)
+            jobTicketRepository.startJob(ticketId)
             emit(true)
         }
     }

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

@@ -315,5 +315,6 @@
     <string name="username">Username</string>
     <string name="card_manage_title">Card Manage</string>
     <string name="device_in_detect">In device recognition</string>
+    <string name="init_device_registration_key_and_lock_complete_step_hint">Scan complete</string>
 
 </resources>

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

@@ -315,5 +315,6 @@
     <string name="username">用户名称</string>
     <string name="card_manage_title">卡片管理</string>
     <string name="device_in_detect">设备识别中</string>
+    <string name="init_device_registration_key_and_lock_complete_step_hint">扫描完成</string>
 
 </resources>

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

@@ -318,5 +318,6 @@
     <string name="username">用户名称</string>
     <string name="card_manage_title">卡片管理</string>
     <string name="device_in_detect">设备识别中</string>
+    <string name="init_device_registration_key_and_lock_complete_step_hint">扫描完成</string>
 
 </resources>

+ 12 - 0
data/src/main/java/com/grkj/data/dao/HardwareDao.kt

@@ -358,4 +358,16 @@ interface HardwareDao {
      */
     @Query("delete from is_key where 1=1")
     fun deleteKeyTable()
+
+    /**
+     * 删除卡片表
+     */
+    @Query("delete from is_job_card where 1=1")
+    fun removeCardData()
+
+    /**
+     * 删除rfidtoken表
+     */
+    @Query("delete from is_rfid_token where 1=1")
+    fun removeRfidTokenData()
 }

+ 10 - 9
data/src/main/java/com/grkj/data/enums/CommonDictDataEnum.kt

@@ -1,5 +1,6 @@
 package com.grkj.data.enums
 
+import com.grkj.data.data.DictConstants
 import com.grkj.data.model.res.CommonDictRes
 import com.grkj.data.model.res.SimpleCommonDictRes
 
@@ -8,15 +9,15 @@ import com.grkj.data.model.res.SimpleCommonDictRes
  */
 enum class CommonDictDataEnum(val dictKey: String, val commonDictRes: List<CommonDictRes>) {
     SLOT_STATUS(
-        "slot_status",
+        DictConstants.KEY_SLOT_STATUS,
         listOf(SimpleCommonDictRes("可用", "0"), SimpleCommonDictRes("异常", "1"))
     ),
     IS_OCCUPIED_STATUS(
-        "isOccupied_status",
+        DictConstants.KEY_IS_OCCUPIED_STATUS,
         listOf(SimpleCommonDictRes("是", "1"), SimpleCommonDictRes("否", "0"))
     ),
     JOB_CARD_REASON(
-        "job_card_reason",
+        DictConstants.KEY_JOB_CARD_REASON,
         listOf(
             SimpleCommonDictRes("工卡丢失", "0"),
             SimpleCommonDictRes("工卡损坏", "1"),
@@ -24,33 +25,33 @@ enum class CommonDictDataEnum(val dictKey: String, val commonDictRes: List<Commo
         )
     ),
     PADLOCK_REASON(
-        "padlock_reason", listOf(
+        DictConstants.KEY_PAD_LOCK_REASON, listOf(
             SimpleCommonDictRes("挂锁损坏", "0"),
             SimpleCommonDictRes("挂锁丢失", "1"),
             SimpleCommonDictRes("-", "2")
         )
     ),
     PADLOCK_STATUS(
-        "padlock_status", listOf(
+        DictConstants.KEY_PAD_LOCK_STATUS, listOf(
             SimpleCommonDictRes("异常", "0"),
             SimpleCommonDictRes("正常", "1"),
         )
     ),
     KEY_REASON(
-        "key_reason", listOf(
+        DictConstants.KEY_KEY_REASON, listOf(
             SimpleCommonDictRes("钥匙损坏", "0"),
             SimpleCommonDictRes("钥匙丢失", "1"),
             SimpleCommonDictRes("-", "2")
         )
     ),
     KEY_STATUS(
-        "key_status", listOf(
+        DictConstants.KEY_KEY_STATUS, listOf(
             SimpleCommonDictRes("异常", "0"),
             SimpleCommonDictRes("正常", "1"),
         )
     ),
     SWITCH_STATUS(
-        "switch_status", listOf(
+        DictConstants.KEY_SWITCH_STATUS, listOf(
             SimpleCommonDictRes("关闭", "0"),
             SimpleCommonDictRes("打开", "1"),
             SimpleCommonDictRes("停止", "2"),
@@ -58,7 +59,7 @@ enum class CommonDictDataEnum(val dictKey: String, val commonDictRes: List<Commo
         )
     ),
     SLOT_TYPE(
-        "slot_type", listOf(
+        DictConstants.KEY_SLOT_TYPE,listOf(
             SimpleCommonDictRes("钥匙", "0"),
             SimpleCommonDictRes("锁", "1"),
         )

+ 4 - 0
data/src/main/java/com/grkj/data/model/dos/IsKey.kt

@@ -35,5 +35,9 @@ class IsKey : BaseBean() {
 
     @ColumnInfo(name = "ex_remark")
     var exRemark: String? = null
+    override fun toString(): String {
+        return "IsKey(keyId=$keyId, keyCode='$keyCode', keyName='$keyName', hardwareId=$hardwareId, keyNfc=$keyNfc, macAddress=$macAddress, delFlag=$delFlag, keySpec=$keySpec, exStatus=$exStatus, exRemark=$exRemark)"
+    }
+
 
 }

+ 10 - 0
data/src/main/java/com/grkj/data/repository/IHardwareRepository.kt

@@ -201,4 +201,14 @@ interface IHardwareRepository {
      * 删除钥匙表
      */
     fun deleteKeyTable()
+
+    /**
+     * 移除卡片数据
+     */
+    fun removeCardData()
+
+    /**
+     * 移除rfidtoken数据
+     */
+    fun removeRfidTokenData()
 }

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

@@ -28,7 +28,7 @@ interface IJobTicketRepository {
         sopId: Long?,
         workstationId: Long,
         jobName: String
-    )
+    ): Long
 
     /**
      * 保存作业

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

@@ -31,7 +31,7 @@ interface IWorkstationRepository {
      * 新增区域
      */
     fun insertWorkstation(
-        workstationManageVo: WorkstationManageVo,
+        workstationManageVo: WorkstationManageVo?,
         orderNum: Int,
         workstationName: String
     )

+ 15 - 4
data/src/main/java/com/grkj/data/repository/impl/HardwareRepository.kt

@@ -55,9 +55,9 @@ class HardwareRepository @Inject constructor(
      */
     private fun getLockInfo(rfid: String): LockInfoRes? {
         val isLock = hardwareDao.getLockInfoByRfid(rfid)
-        var lockInfoRes: LockInfoRes? = null
+        var lockInfoRes = LockInfoRes()
         isLock?.let {
-            lockInfoRes = BeanUtils.convert(it)
+            lockInfoRes = BeanUtils.copyData<LockInfoRes>(it,lockInfoRes)
         }
         return lockInfoRes
     }
@@ -74,9 +74,10 @@ class HardwareRepository @Inject constructor(
 
     private fun getKeyInfo(rfid: String): KeyInfoRes? {
         val isKey = hardwareDao.getKeyInfoByRfid(rfid)
-        var keyInfoRes: KeyInfoRes? = null
+        var keyInfoRes = KeyInfoRes()
         isKey?.let {
-            keyInfoRes = BeanUtils.convert(it)
+            logger.info("钥匙信息:${isKey}")
+            keyInfoRes = BeanUtils.copyData<KeyInfoRes>(it,keyInfoRes)
         }
         return keyInfoRes
     }
@@ -211,6 +212,7 @@ class HardwareRepository @Inject constructor(
         isKey.keyCode = "钥匙_${defaultKeyCodeSize + 1}"
         isKey.keyNfc = keyNfc
         isKey.macAddress = keyMacAddress
+        isKey.exStatus = CommonDictDataEnum.KEY_STATUS.commonDictRes.find { it.dictLabel=="正常" }?.dictValue
         hardwareDao.addKeyInfo(isKey)
     }
 
@@ -219,6 +221,7 @@ class HardwareRepository @Inject constructor(
         var defaultLockCodeSize = hardwareDao.getDefaultLockNameCount()
         isLock.lockCode = "挂锁_${defaultLockCodeSize + 1}"
         isLock.lockNfc = lockNfc
+        isLock.exStatus = CommonDictDataEnum.PADLOCK_STATUS.commonDictRes.find { it.dictLabel=="正常" }?.dictValue
         hardwareDao.addLockInfo(isLock)
     }
 
@@ -335,4 +338,12 @@ class HardwareRepository @Inject constructor(
     override fun deleteKeyTable() {
         hardwareDao.deleteKeyTable()
     }
+
+    override fun removeCardData() {
+        hardwareDao.removeCardData()
+    }
+
+    override fun removeRfidTokenData() {
+        hardwareDao.removeRfidTokenData()
+    }
 }

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

@@ -49,7 +49,7 @@ class JobTicketRepository @Inject constructor(
         sopId: Long?,
         workstationId: Long,
         jobName: String
-    ) {
+    ): Long {
         val isJobTicket = IsJobTicket()
         isJobTicket.ticketName = jobName
         isJobTicket.workstationId = workstationId
@@ -106,6 +106,7 @@ class JobTicketRepository @Inject constructor(
             }
         }
         jobTicketDao.saveIsJobTicketStep(ticketStep)
+        return ticketId
     }
 
     override fun saveJob(

+ 6 - 4
data/src/main/java/com/grkj/data/repository/impl/WorkstationRepository.kt

@@ -40,15 +40,17 @@ class WorkstationRepository @Inject constructor(val workstationDao: WorkstationD
     }
 
     override fun insertWorkstation(
-        workstationManageVo: WorkstationManageVo,
+        workstationManageVo: WorkstationManageVo?,
         orderNum: Int,
         workstationName: String
     ) {
         val isWorkstation = IsWorkstation()
         isWorkstation.workstationName = workstationName
-        isWorkstation.parentId = workstationManageVo.workstationId
-        isWorkstation.ancestors =
-            workstationManageVo.ancestors + ",${workstationManageVo.workstationId}"
+        isWorkstation.parentId = workstationManageVo?.workstationId ?: 0
+        isWorkstation.ancestors = workstationManageVo?.let {
+            return@let "${it.ancestors},${it.workstationId}"
+        } ?: "0"
+
         isWorkstation.orderNum = orderNum
         workstationDao.insertWorkstation(isWorkstation)
     }