|
|
@@ -23,17 +23,22 @@ import com.grkj.iscs.common.DataTransferConstants
|
|
|
import com.grkj.iscs.databinding.FragmentMyTodoListBinding
|
|
|
import com.grkj.iscs.databinding.ItemMyTodoBinding
|
|
|
import com.grkj.iscs.features.main.dialog.CheckFaceDialog
|
|
|
+import com.grkj.iscs.features.main.dialog.ColockOperationTipDialog
|
|
|
import com.grkj.iscs.features.main.dialog.TextDropDownDialog
|
|
|
import com.grkj.iscs.features.main.dialog.job_manage.TodoPointDetailDialog
|
|
|
import com.grkj.iscs.features.main.viewmodel.job_manage.JobExecuteViewModel
|
|
|
import com.grkj.iscs.features.main.viewmodel.job_manage.MyTodoViewModel
|
|
|
import com.grkj.shared.model.EventBean
|
|
|
+import com.grkj.shared.utils.ArcSoftUtil
|
|
|
import com.grkj.ui_base.base.BaseFragment
|
|
|
import com.grkj.ui_base.dialog.TipDialog
|
|
|
import com.grkj.ui_base.utils.CommonUtils
|
|
|
+import com.grkj.ui_base.utils.event.RFIDCardReadEvent
|
|
|
import com.grkj.ui_base.utils.event.UiEvent
|
|
|
import com.grkj.ui_base.utils.extension.tip
|
|
|
+import com.kongzue.dialogx.dialogs.CustomDialog
|
|
|
import com.kongzue.dialogx.dialogs.PopTip
|
|
|
+import com.kongzue.dialogx.interfaces.DialogLifecycleCallback
|
|
|
import com.loper7.date_time_picker.dialog.CardDatePickerDialog
|
|
|
import com.sik.sikcore.data.GlobalDataTempStore
|
|
|
import com.sik.sikcore.date.TimeUtils
|
|
|
@@ -117,7 +122,7 @@ class MyTodoListFragment : BaseFragment<FragmentMyTodoListBinding>() {
|
|
|
TimeUtils.DEFAULT_DATE_HOUR_MIN_SEC_FORMAT
|
|
|
)
|
|
|
updateTimeDate?.let {
|
|
|
- TimeUtils.calcDayNum(it, Date()) <= 1
|
|
|
+ TimeUtils.calcDayNum(it, Date()) <= 7
|
|
|
} ?: false
|
|
|
}.sortedByDescending { it.stepUpdateTime }
|
|
|
}
|
|
|
@@ -286,21 +291,19 @@ class MyTodoListFragment : BaseFragment<FragmentMyTodoListBinding>() {
|
|
|
itemBinding.btnPointDetail.isVisible =
|
|
|
item.todoType == OperationTypeEnum.LOCK_TAKE_KEY || item.todoType == OperationTypeEnum.UNLOCK_TAKE_KEY || item.todoType == OperationTypeEnum.LOCK_RETURN_KEY || item.todoType == OperationTypeEnum.UNLOCK_RETURN_KEY
|
|
|
itemBinding.btnHandle.isVisible = if (item.todoType == OperationTypeEnum.UNLOCK_TAKE_KEY) {
|
|
|
- val currentStep =
|
|
|
- jobExecuteViewModel.currentStepData
|
|
|
- val canUnLock = currentStep?.enableUnlock == true &&
|
|
|
- jobExecuteViewModel.ticketPoints.any { it.pointStatus == "1" } &&
|
|
|
- (jobExecuteViewModel.workflowModes.find { it.modeId == jobExecuteViewModel.ticketData?.modeId }?.isColockSupport == false ||
|
|
|
- (jobExecuteViewModel.workflowModes.find { it.modeId == jobExecuteViewModel.ticketData?.modeId }?.isColockSupport == true &&
|
|
|
- jobExecuteViewModel.ticketUser.filter { it.userRole == RoleEnum.JTCOLOCKER.roleKey }
|
|
|
- .all { it.jobStatus == "2" }))
|
|
|
+ val canUnLock =
|
|
|
+ item.enableUnlock && jobExecuteViewModel.ticketPoints.filter { it.groupId == item.groupId }
|
|
|
+ .all { it.pointStatus == "1" } && ((jobExecuteViewModel.workflowModes.find { it.modeId == jobExecuteViewModel.ticketData?.modeId }?.isColockSupport == false) ||
|
|
|
+ ((jobExecuteViewModel.workflowModes.find { it.modeId == jobExecuteViewModel.ticketData?.modeId }?.isColockSupport == true) &&
|
|
|
+ jobExecuteViewModel.ticketUser.filter { it.userRole == RoleEnum.JTCOLOCKER.roleKey }
|
|
|
+ .all { it.jobStatus == "2" }))
|
|
|
item.isCurrentStep && item.todoType != OperationTypeEnum.LOCK_RETURN_KEY && item.todoType != OperationTypeEnum.UNLOCK_RETURN_KEY && canUnLock
|
|
|
} else {
|
|
|
item.isCurrentStep && item.todoType != OperationTypeEnum.LOCK_RETURN_KEY && item.todoType != OperationTypeEnum.UNLOCK_RETURN_KEY
|
|
|
}
|
|
|
itemBinding.btnPointDetail.setDebouncedClickListener {
|
|
|
viewModel.getTicketPointsData(item.ticketId).observe(this) {
|
|
|
- TodoPointDetailDialog.show(it)
|
|
|
+ TodoPointDetailDialog.show(it.filter { it.groupId == item.groupId })
|
|
|
}
|
|
|
}
|
|
|
itemBinding.btnHandle.setDebouncedClickListener {
|
|
|
@@ -321,6 +324,28 @@ class MyTodoListFragment : BaseFragment<FragmentMyTodoListBinding>() {
|
|
|
jobExecuteViewModel.toUnLock(it).observe(this) {}
|
|
|
} ?: showToast(getString(R.string.not_group_can_unlock))
|
|
|
|
|
|
+ OperationTypeEnum.COLOCK -> {
|
|
|
+ viewModel.startReadCard = true
|
|
|
+ ColockOperationTipDialog.show().setDialogLifecycleCallback(object :
|
|
|
+ DialogLifecycleCallback<CustomDialog>() {
|
|
|
+ override fun onDismiss(dialog: CustomDialog?) {
|
|
|
+ viewModel.startReadCard = false
|
|
|
+ super.onDismiss(dialog)
|
|
|
+ }
|
|
|
+ })
|
|
|
+ }
|
|
|
+
|
|
|
+ OperationTypeEnum.RELEASE_COLOCK -> {
|
|
|
+ viewModel.startReadCard = true
|
|
|
+ ColockOperationTipDialog.show().setDialogLifecycleCallback(object :
|
|
|
+ DialogLifecycleCallback<CustomDialog>() {
|
|
|
+ override fun onDismiss(dialog: CustomDialog?) {
|
|
|
+ viewModel.startReadCard = false
|
|
|
+ super.onDismiss(dialog)
|
|
|
+ }
|
|
|
+ })
|
|
|
+ }
|
|
|
+
|
|
|
OperationTypeEnum.CONFIRM -> {
|
|
|
jobExecuteViewModel.currentStepData
|
|
|
?.let { stepVo ->
|
|
|
@@ -374,6 +399,84 @@ class MyTodoListFragment : BaseFragment<FragmentMyTodoListBinding>() {
|
|
|
override fun onEvent(event: EventBean<Any>) {
|
|
|
super.onEvent(event)
|
|
|
when (event.code) {
|
|
|
+ EventConstants.EVENT_RFID_CARD_READ -> {
|
|
|
+ if (MainDomainData.userInfo?.userName != jobExecuteViewModel.ticketData?.createBy) {
|
|
|
+ showToast(
|
|
|
+ CommonUtils.getStr(com.grkj.ui_base.R.string.no_permission_to_handle)
|
|
|
+ .toString()
|
|
|
+ )
|
|
|
+ return
|
|
|
+ }
|
|
|
+ if (!viewModel.startReadCard) {
|
|
|
+ return
|
|
|
+ }
|
|
|
+ (event.data as RFIDCardReadEvent).let {
|
|
|
+ val currentWorkflowStep = jobExecuteViewModel.currentStepData
|
|
|
+ //当前步骤能加共锁并且锁已经上锁或者当前步骤能解共锁并且锁已经上锁
|
|
|
+ if ((currentWorkflowStep?.enableColock == true || currentWorkflowStep?.enableReleaseColock == true) && jobExecuteViewModel.ticketPoints.all { it.pointStatus == "1" }) {
|
|
|
+ jobExecuteViewModel.getUserIdByCardRfid(it.rfidNo).observe(this) { userId ->
|
|
|
+ userId?.let {
|
|
|
+ val isJobCardUser = jobExecuteViewModel.ticketUser.filter {
|
|
|
+ it.userRole?.contains(
|
|
|
+ RoleEnum.JTCOLOCKER.roleKey
|
|
|
+ ) == true
|
|
|
+ }.find { it.userId == userId }
|
|
|
+ isJobCardUser?.let { colocker ->
|
|
|
+ if (colocker.jobStatus == "0" && currentWorkflowStep.enableColock) {
|
|
|
+ logger.info("添加共锁")
|
|
|
+ TipDialog.showInfo(
|
|
|
+ msg = CommonUtils.getStr(
|
|
|
+ com.grkj.ui_base.R.string.confirm_to_colock,
|
|
|
+ colocker.nickName ?: ""
|
|
|
+ ).toString(), countDownTime = 10, onConfirmClick = {
|
|
|
+ colocker.jobStatus = "1"
|
|
|
+ jobExecuteViewModel.colockerStatusChange(colocker)
|
|
|
+ .observe(this) {
|
|
|
+ if (it) {
|
|
|
+ PopTip.build()
|
|
|
+ .tip(R.string.colock_complete)
|
|
|
+ checkStepComplete()
|
|
|
+ getData()
|
|
|
+ } else {
|
|
|
+ PopTip.build()
|
|
|
+ .tip(R.string.colock_failed)
|
|
|
+ }
|
|
|
+ }
|
|
|
+ })
|
|
|
+ } else if (colocker.jobStatus == "1" && currentWorkflowStep.enableReleaseColock) {
|
|
|
+ logger.info("解除共锁")
|
|
|
+ TipDialog.showInfo(
|
|
|
+ msg = CommonUtils.getStr(
|
|
|
+ com.grkj.ui_base.R.string.confirm_to_uncolock,
|
|
|
+ colocker.nickName ?: ""
|
|
|
+ ).toString(), countDownTime = 10, onConfirmClick = {
|
|
|
+ colocker.jobStatus = "2"
|
|
|
+ jobExecuteViewModel.colockerStatusChange(colocker)
|
|
|
+ .observe(this) {
|
|
|
+ if (it) {
|
|
|
+ PopTip.build()
|
|
|
+ .tip(R.string.uncolock_complete)
|
|
|
+ checkStepComplete()
|
|
|
+ getData()
|
|
|
+ } else {
|
|
|
+ PopTip.build()
|
|
|
+ .tip(R.string.uncolock_failed)
|
|
|
+ }
|
|
|
+ }
|
|
|
+ })
|
|
|
+ } else {
|
|
|
+ PopTip.build()
|
|
|
+ .tip(R.string.currently_unable_to_lock_together)
|
|
|
+ }
|
|
|
+ } ?: PopTip.build().tip(R.string.invalid_user)
|
|
|
+ } ?: PopTip.build().tip(R.string.invalid_card)
|
|
|
+ }
|
|
|
+ } else {
|
|
|
+ PopTip.build().tip(R.string.currently_unable_to_lock_together)
|
|
|
+ }
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
EventConstants.EVENT_UPDATE_TICKET_PROGRESS -> {
|
|
|
getData()
|
|
|
}
|
|
|
@@ -394,6 +497,7 @@ class MyTodoListFragment : BaseFragment<FragmentMyTodoListBinding>() {
|
|
|
if (!checkSelectMember(workflowStep)) {
|
|
|
if (jobExecuteViewModel.stepConditionsComplete(workflowStep)) {
|
|
|
item.stepStatus = "1"
|
|
|
+ item.updateTime = TimeUtils.nowString(TimeUtils.DEFAULT_DATE_HOUR_MIN_SEC_FORMAT)
|
|
|
jobExecuteViewModel.updateStepStatus(item).observe(this@MyTodoListFragment) {
|
|
|
if (it == false) {
|
|
|
showToast(getString(R.string.handle_failed))
|
|
|
@@ -472,7 +576,6 @@ class MyTodoListFragment : BaseFragment<FragmentMyTodoListBinding>() {
|
|
|
override fun onResume() {
|
|
|
super.onResume()
|
|
|
if (!isFirstEnter) {
|
|
|
-
|
|
|
if (GlobalDataTempStore.getInstance()
|
|
|
.hasData(DataTransferConstants.KEY_SELECTED_MEMBER_LOCKER_DATA)
|
|
|
) {
|
|
|
@@ -499,7 +602,7 @@ class MyTodoListFragment : BaseFragment<FragmentMyTodoListBinding>() {
|
|
|
jobExecuteViewModel.currentStepData?.let {
|
|
|
jobExecuteViewModel.updateStepStatus(it)
|
|
|
.observe(this@MyTodoListFragment) {
|
|
|
-
|
|
|
+ getData()
|
|
|
}
|
|
|
}
|
|
|
}
|
|
|
@@ -511,6 +614,8 @@ class MyTodoListFragment : BaseFragment<FragmentMyTodoListBinding>() {
|
|
|
it.stepIndex >= workflowStep.gotoStepAfterAddingColocker!!
|
|
|
}.sortedByDescending { it.stepIndex }.forEach {
|
|
|
it.stepStatus = "0"
|
|
|
+ it.updateTime =
|
|
|
+ TimeUtils.nowString(TimeUtils.DEFAULT_DATE_HOUR_MIN_SEC_FORMAT)
|
|
|
jobExecuteViewModel.updateStepStatusBack(it)
|
|
|
.observe(this@MyTodoListFragment) {
|
|
|
if (it == false) {
|
|
|
@@ -518,6 +623,7 @@ class MyTodoListFragment : BaseFragment<FragmentMyTodoListBinding>() {
|
|
|
} else {
|
|
|
jobExecuteViewModel.currentStepData =
|
|
|
jobExecuteViewModel.ticketStep.firstOrNull { it.stepStatus == "0" }
|
|
|
+ getData()
|
|
|
}
|
|
|
}
|
|
|
}
|
|
|
@@ -529,6 +635,30 @@ class MyTodoListFragment : BaseFragment<FragmentMyTodoListBinding>() {
|
|
|
getData()
|
|
|
}
|
|
|
|
|
|
+ /**
|
|
|
+ * 检查流程是否完成
|
|
|
+ */
|
|
|
+ private fun checkStepComplete() {
|
|
|
+ val workflowStep = jobExecuteViewModel.currentStepData
|
|
|
+ if (jobExecuteViewModel.stepConditionsComplete(workflowStep) && workflowStep?.confirmType != 0) {
|
|
|
+ jobExecuteViewModel.currentStepData =
|
|
|
+ jobExecuteViewModel.ticketStep.firstOrNull { it.stepStatus == "0" }
|
|
|
+ logger.info("当前步骤数据:${jobExecuteViewModel.currentStepData}")
|
|
|
+ jobExecuteViewModel.currentStepData?.let {
|
|
|
+ it.stepStatus = "1"
|
|
|
+ it.updateTime = TimeUtils.nowString(TimeUtils.DEFAULT_DATE_HOUR_MIN_SEC_FORMAT)
|
|
|
+ jobExecuteViewModel.updateStepStatus(it).observe(this@MyTodoListFragment) {
|
|
|
+ if (it == false) {
|
|
|
+ PopTip.build().tip(R.string.step_confirm_failed)
|
|
|
+ } else {
|
|
|
+ logger.info("检查更新步骤状态完成")
|
|
|
+ getData()
|
|
|
+ }
|
|
|
+ }
|
|
|
+ }
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
private fun getData() {
|
|
|
viewModel.getMyTodoList().observe(this) {
|
|
|
for (tabPosition in 0 until binding.tabLayout.tabCount) {
|