|
|
@@ -1,26 +1,41 @@
|
|
|
package com.grkj.iscs.features.main.fragment.job_manage
|
|
|
|
|
|
+import android.graphics.drawable.GradientDrawable
|
|
|
+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.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.IsJobTicketPointsDataVo
|
|
|
+import com.grkj.data.model.vo.IsJobTicketStepDataVo
|
|
|
+import com.grkj.data.model.vo.UserManageVo
|
|
|
import com.grkj.iscs.R
|
|
|
import com.grkj.iscs.common.DataTransferConstants
|
|
|
import com.grkj.iscs.databinding.FragmentJobExecuteBinding
|
|
|
import com.grkj.iscs.databinding.ItemJobExecutePointBinding
|
|
|
+import com.grkj.iscs.databinding.ItemJobExecuteStepBinding
|
|
|
import com.grkj.iscs.features.main.viewmodel.job_manage.JobExecuteViewModel
|
|
|
+import com.grkj.shared.model.EventBean
|
|
|
import com.grkj.ui_base.base.BaseFragment
|
|
|
+import com.grkj.ui_base.data.EventConstants
|
|
|
+import com.grkj.ui_base.utils.event.RFIDCardReadEvent
|
|
|
import com.kongzue.dialogx.dialogs.PopTip
|
|
|
import com.sik.sikcore.data.GlobalDataTempStore
|
|
|
import com.sik.sikcore.extension.setDebouncedClickListener
|
|
|
+import dagger.hilt.android.AndroidEntryPoint
|
|
|
+import kotlin.getValue
|
|
|
|
|
|
/**
|
|
|
* 作业执行界面
|
|
|
*/
|
|
|
+@AndroidEntryPoint
|
|
|
class JobExecuteFragment : BaseFragment<FragmentJobExecuteBinding>() {
|
|
|
- private val viewModel: JobExecuteViewModel by lazy { ViewModelProvider(this)[JobExecuteViewModel::class] }
|
|
|
+ private val viewModel: JobExecuteViewModel by viewModels()
|
|
|
|
|
|
override fun getLayoutId(): Int {
|
|
|
return R.layout.fragment_job_execute
|
|
|
@@ -33,17 +48,173 @@ class JobExecuteFragment : BaseFragment<FragmentJobExecuteBinding>() {
|
|
|
binding.listRv.linear().setup {
|
|
|
addType<IsJobTicketPointsDataVo>(R.layout.item_job_execute_point)
|
|
|
onBind {
|
|
|
- onRVListBinding(this)
|
|
|
+ onPointsRVListBinding(this)
|
|
|
+ }
|
|
|
+ }
|
|
|
+ binding.stepRv.linear(orientation = LinearLayout.HORIZONTAL).setup {
|
|
|
+ addType<IsJobTicketStepDataVo>(R.layout.item_job_execute_step)
|
|
|
+ onBind {
|
|
|
+ onStepRVListBinding(this)
|
|
|
+ }
|
|
|
+ }
|
|
|
+ binding.cancelJob.setDebouncedClickListener {
|
|
|
+ viewModel.cancelJob().observe(this) {
|
|
|
+ navController.popBackStack()
|
|
|
+ }
|
|
|
+ }
|
|
|
+ binding.finishJob.setDebouncedClickListener {
|
|
|
+ viewModel.finishJob().observe(this) {
|
|
|
+ navController.popBackStack()
|
|
|
+ }
|
|
|
+ }
|
|
|
+ binding.toLock.setDebouncedClickListener {
|
|
|
+ viewModel.toLock().observe(this) {}
|
|
|
+ }
|
|
|
+ binding.toUnlock.setDebouncedClickListener {
|
|
|
+ viewModel.toUnLock().observe(this) {}
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
+ private fun BindingAdapter.BindingViewHolder.onStepRVListBinding(holder: BindingAdapter.BindingViewHolder) {
|
|
|
+ val itemBinding = holder.getBinding<ItemJobExecuteStepBinding>()
|
|
|
+ val item = holder.getModel<IsJobTicketStepDataVo>()
|
|
|
+ itemBinding.stepIconIv.setImageResource(getStepIcon(item.stepIndex))
|
|
|
+ itemBinding.stepNameTv.text = item.stepContent
|
|
|
+ itemBinding.stepIndexTv.text = (item.position + 1).toString()
|
|
|
+ itemBinding.dividerIv.isVisible = item.stepId != viewModel.ticketStep.last().stepId
|
|
|
+ val bg = itemBinding.stepLayout.background
|
|
|
+ when (item.stepStatus) {
|
|
|
+ "1" -> {
|
|
|
+ if (bg is GradientDrawable) {
|
|
|
+ bg.mutate() // 拷贝一份,避免影响到其它引用了同一个 drawable 的 view
|
|
|
+ bg.setColor(requireContext().getColor(R.color.color_b2f2bb))
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
+ "0" -> {
|
|
|
+ if (item.stepId == viewModel.ticketStep.first { it.stepStatus == "0" }.stepId) {
|
|
|
+ if (bg is GradientDrawable) {
|
|
|
+ bg.mutate() // 拷贝一份,避免影响到其它引用了同一个 drawable 的 view
|
|
|
+ bg.setColor(requireContext().getColor(R.color.color_ffec99))
|
|
|
+ }
|
|
|
+ } else {
|
|
|
+ itemBinding.stepLayout.backgroundTintList = null
|
|
|
+ }
|
|
|
+ }
|
|
|
+ }
|
|
|
+ //临时测试
|
|
|
+ itemBinding.stepLayout.setDebouncedClickListener {
|
|
|
+ if (item.stepIndex == LockStepEnum.SELECT_MEMBER.type) {
|
|
|
+ GlobalDataTempStore.getInstance().saveData(
|
|
|
+ DataTransferConstants.KEY_CAN_SELECT_COLOCKER,
|
|
|
+ viewModel.ticketData.lockMode?.contains(
|
|
|
+ LockStepEnum.COLOCK.type.toString()
|
|
|
+ ) == true
|
|
|
+ )
|
|
|
+ GlobalDataTempStore.getInstance()
|
|
|
+ .saveData(
|
|
|
+ DataTransferConstants.KEY_SELECT_POINT_WORKSTATION_ID,
|
|
|
+ viewModel.ticketData.workstationId
|
|
|
+ )
|
|
|
+ GlobalDataTempStore.getInstance()
|
|
|
+ .saveData(
|
|
|
+ DataTransferConstants.KEY_SELECTED_MEMBER_LOCKER_DATA,
|
|
|
+ viewModel.selectedLockerData
|
|
|
+ )
|
|
|
+ GlobalDataTempStore.getInstance()
|
|
|
+ .saveData(
|
|
|
+ DataTransferConstants.KEY_SELECTED_MEMBER_COLOCKER_DATA,
|
|
|
+ viewModel.selecteColockerData
|
|
|
+ )
|
|
|
+ GlobalDataTempStore.getInstance()
|
|
|
+ .saveData(
|
|
|
+ DataTransferConstants.KEY_PREVIEW_STEP_TITLE_DATA,
|
|
|
+ viewModel.ticketData.ticketName
|
|
|
+ )
|
|
|
+ GlobalDataTempStore.getInstance()
|
|
|
+ .saveData(
|
|
|
+ DataTransferConstants.KEY_PREVIEW_STEP_ICON_DATA,
|
|
|
+ R.mipmap.icon_data_manage_menu_point_manage
|
|
|
+ )
|
|
|
+ navController.navigate(R.id.action_jobExecuteFragment_to_selectMemberFragment)
|
|
|
}
|
|
|
}
|
|
|
}
|
|
|
|
|
|
- private fun BindingAdapter.BindingViewHolder.onRVListBinding(holder: BindingAdapter.BindingViewHolder) {
|
|
|
+ private fun getStepIcon(stepIndex: Int): Int {
|
|
|
+ return when (stepIndex) {
|
|
|
+ LockStepEnum.SELECT_MEMBER.type -> R.drawable.icon_select_member
|
|
|
+ LockStepEnum.LOCK.type -> R.drawable.icon_ticket_lock
|
|
|
+ LockStepEnum.COLOCK.type -> R.drawable.icon_ticket_colock
|
|
|
+ LockStepEnum.UNLOCK.type -> R.drawable.icon_ticket_unlock
|
|
|
+ else -> {
|
|
|
+ 0
|
|
|
+ }
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
+ private fun BindingAdapter.BindingViewHolder.onPointsRVListBinding(holder: BindingAdapter.BindingViewHolder) {
|
|
|
val itemBinding = holder.getBinding<ItemJobExecutePointBinding>()
|
|
|
val item = holder.getModel<IsJobTicketPointsDataVo>()
|
|
|
itemBinding.pointName.text = item.pointName
|
|
|
itemBinding.pointFunction.text = item.pointFunction
|
|
|
+ itemBinding.lockStatusLayout.isVisible = item.pointStatus != "0"
|
|
|
+ if (item.pointStatus == "1") {
|
|
|
+ itemBinding.lockStatusLayout.setBackgroundResource(R.drawable.bg_btn_job_execute_go_locking)
|
|
|
+ itemBinding.lockStatusIv.setImageResource(R.drawable.icon_ticket_lock)
|
|
|
+ itemBinding.lockStatusTv.text =
|
|
|
+ requireContext().getText(com.grkj.ui_base.R.string.has_locked)
|
|
|
+ } else if (item.pointStatus == "2") {
|
|
|
+ itemBinding.lockStatusLayout.setBackgroundResource(R.drawable.bg_btn_job_execute_go_unlocking)
|
|
|
+ itemBinding.lockStatusIv.setImageResource(R.drawable.icon_ticket_unlock)
|
|
|
+ itemBinding.lockStatusTv.text =
|
|
|
+ requireContext().getText(com.grkj.ui_base.R.string.unlocked)
|
|
|
+ }
|
|
|
+ }
|
|
|
|
|
|
+ override fun onEvent(event: EventBean<Any>) {
|
|
|
+ super.onEvent(event)
|
|
|
+ if (event.code == EventConstants.EVENT_RFID_CARD_READ) {
|
|
|
+ (event.data as RFIDCardReadEvent).let {
|
|
|
+ logger.info("读卡器获取卡片RFID:${it.rfidNo}")
|
|
|
+ if (viewModel.currentStepData?.stepIndex == LockStepEnum.COLOCK.type) {
|
|
|
+ logger.info("添加共锁")
|
|
|
+ } else {
|
|
|
+ logger.info("当前阶段无法共锁")
|
|
|
+ }
|
|
|
+ }
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
+ /**
|
|
|
+ * 检查当前步骤要显示的界面
|
|
|
+ */
|
|
|
+ private fun checkCurrentStep() {
|
|
|
+ binding.toLock.isVisible = false
|
|
|
+ binding.toUnlock.isVisible = false
|
|
|
+ binding.cancelJob.isVisible = false
|
|
|
+ binding.finishJob.isVisible = false
|
|
|
+ if (viewModel.currentStepData?.stepIndex == null) {
|
|
|
+ binding.finishJob.isVisible = true
|
|
|
+ } else {
|
|
|
+ when (viewModel.currentStepData?.stepIndex) {
|
|
|
+ LockStepEnum.SELECT_MEMBER.type -> {
|
|
|
+ binding.cancelJob.isVisible = true
|
|
|
+ }
|
|
|
+
|
|
|
+ LockStepEnum.LOCK.type -> {
|
|
|
+ binding.toLock.isVisible = true
|
|
|
+ }
|
|
|
+
|
|
|
+ LockStepEnum.COLOCK.type -> {
|
|
|
+
|
|
|
+ }
|
|
|
+
|
|
|
+ LockStepEnum.UNLOCK.type -> {
|
|
|
+ binding.toUnlock.isVisible = true
|
|
|
+ }
|
|
|
+ }
|
|
|
+ }
|
|
|
}
|
|
|
|
|
|
override fun initData() {
|
|
|
@@ -58,6 +229,37 @@ class JobExecuteFragment : BaseFragment<FragmentJobExecuteBinding>() {
|
|
|
viewModel.getJobTicketData().observe(this) {
|
|
|
binding.jobNameTv.text = viewModel.ticketData.ticketName
|
|
|
binding.listRv.models = viewModel.ticketPoints
|
|
|
+ binding.stepRv.models = viewModel.ticketStep
|
|
|
+ checkCurrentStep()
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
+ override fun onResume() {
|
|
|
+ super.onResume()
|
|
|
+ if (GlobalDataTempStore.getInstance()
|
|
|
+ .hasData(DataTransferConstants.KEY_SELECTED_MEMBER_LOCKER_DATA)
|
|
|
+ ) {
|
|
|
+ viewModel.selectedLockerData = GlobalDataTempStore.getInstance()
|
|
|
+ .getData(DataTransferConstants.KEY_SELECTED_MEMBER_LOCKER_DATA)
|
|
|
+ ?.let { return@let it as List<UserManageVo> } ?: listOf()
|
|
|
+ viewModel.checkMemberFinish = true
|
|
|
+ }
|
|
|
+ if (GlobalDataTempStore.getInstance()
|
|
|
+ .hasData(DataTransferConstants.KEY_SELECTED_MEMBER_COLOCKER_DATA)
|
|
|
+ ) {
|
|
|
+ viewModel.selecteColockerData = GlobalDataTempStore.getInstance()
|
|
|
+ .getData(DataTransferConstants.KEY_SELECTED_MEMBER_COLOCKER_DATA)
|
|
|
+ ?.let { return@let it as List<UserManageVo> } ?: listOf()
|
|
|
+ viewModel.checkMemberFinish = true
|
|
|
+ }
|
|
|
+ if (viewModel.checkMemberFinish) {
|
|
|
+ viewModel.updateLockerAndColockerData().observe(this) {
|
|
|
+ viewModel.currentStepData?.stepStatus = "1"
|
|
|
+ viewModel.currentStepData =
|
|
|
+ viewModel.ticketStep.firstOrNull { it.stepStatus == "0" }
|
|
|
+ checkCurrentStep()
|
|
|
+ binding.stepRv.adapter?.notifyDataSetChanged()
|
|
|
+ }
|
|
|
}
|
|
|
}
|
|
|
}
|