浏览代码

补充上锁人取锁、取钥匙相关流程

Frankensteinly 9 月之前
父节点
当前提交
3c24c46f41

+ 10 - 0
app/src/main/java/com/grkj/iscs/view/fragment/JobProgressFragment.kt

@@ -21,6 +21,7 @@ class JobProgressFragment(val goBack: () -> Unit) :
     private val mPointList = mutableListOf<TicketDetailMonitorRespVO.IsJobTicketPointsVO>()
     private val mUserList = mutableListOf<TicketDetailMonitorRespVO.IsJobTicketUser>()
     private var mStep = 0
+    private var mPageChangeBO: PageChangeBO? = null
 
     override val viewBinding: FragmentJobProgressBinding
         get() = FragmentJobProgressBinding.inflate(layoutInflater)
@@ -57,9 +58,18 @@ class JobProgressFragment(val goBack: () -> Unit) :
                     holder.setVisible(R.id.iv_unlocked, user.jobStatus >= 5)
                 }
             }
+
+        mBinding?.cbAction?.setOnClickListener {
+            if (mStep == 4) {
+                presenter?.handleLockProcess(mPageChangeBO?.ticketId!!)
+            } else if (mStep == 7) {
+                presenter?.handleUnlockProcess(mPageChangeBO?.ticketId!!)
+            }
+        }
     }
 
     override fun refreshPage(pageChangeBO: PageChangeBO) {
+        mPageChangeBO = pageChangeBO
         presenter?.getTicketDetailMonitor(pageChangeBO.ticketId!!) {
             mPointList.clear()
             mUserList.clear()

+ 83 - 0
app/src/main/java/com/grkj/iscs/view/presenter/JobProgressPresenter.kt

@@ -1,12 +1,22 @@
 package com.grkj.iscs.view.presenter
 
+import com.grkj.iscs.BusinessManager
 import com.grkj.iscs.R
+import com.grkj.iscs.extentions.serialNo
+import com.grkj.iscs.modbus.ModBusController
+import com.grkj.iscs.model.Constants.JOB_STATUS_ACQUIRE_KEY
+import com.grkj.iscs.model.Constants.JOB_STATUS_ACQUIRE_LOCK
+import com.grkj.iscs.model.Constants.JOB_STATUS_NOT_STARTED
+import com.grkj.iscs.model.Constants.USER_TYPE_LOCKER
+import com.grkj.iscs.model.vo.lock.LockTakeUpdateReqVO
 import com.grkj.iscs.model.vo.ticket.StepDetailRespVO
 import com.grkj.iscs.model.vo.ticket.TicketDetailMonitorRespVO
 import com.grkj.iscs.model.vo.ticket.TicketDetailRespVO
 import com.grkj.iscs.util.Executor
 import com.grkj.iscs.util.NetApi
+import com.grkj.iscs.util.SPUtils
 import com.grkj.iscs.util.ToastUtils
+import com.grkj.iscs.view.activity.TicketDetailActivity
 import com.grkj.iscs.view.base.BasePresenter
 import com.grkj.iscs.view.iview.IJobProgressVIew
 
@@ -41,4 +51,77 @@ class JobProgressPresenter : BasePresenter<IJobProgressVIew>() {
             }
         }
     }
+
+    /**
+     * 上锁人上锁流程
+     */
+    fun handleLockProcess(ticketId: Long) {
+        // TODO 上锁人上锁流程
+        getTicketDetail(ticketId) { ticketDetail ->
+            val role = ticketDetail?.jobTicketUserList?.find { it.userId == SPUtils.getLoginUser(mContext!!)?.userId && it.userType == USER_TYPE_LOCKER }
+            if (role == null) {
+                return@getTicketDetail
+            }
+
+            when (role.jobStatus) {
+                JOB_STATUS_NOT_STARTED, JOB_STATUS_ACQUIRE_LOCK -> {
+                    NetApi.getTicketEquipDetail(ticketId) { equipDetail ->
+                        // 取锁具、取钥匙
+                        val needLockCount = equipDetail?.ticketLockVOList?.filter { it.lockId == null }?.size ?: 0
+                        BusinessManager.checkEquipCount(needLockCount) { keyPair, lockMap ->
+                            val list = mutableListOf<LockTakeUpdateReqVO>()
+                            lockMap.forEach { (_, lockList) ->
+                                list.addAll(lockList.map { LockTakeUpdateReqVO(ticketDetail.ticketId, it.rfid, mContext!!.serialNo()) })
+                            }
+                            NetApi.updateLockTake(list) {
+                                if (it == true) {
+                                    lockMap.forEach { (addr, lockList) ->
+                                        // 开锁卡扣
+                                        ModBusController.controlLockBuckle(true, addr.toInt(), lockList.map { it.idx }.toMutableList())
+                                    }
+                                }
+                            }
+                            // null表示锁具数量不够,不给钥匙
+                            if (keyPair != null) {
+                                // 更新钥匙信息
+                                NetApi.updateKeyTake(ticketDetail.ticketId!!, keyPair.second?.rfid!!, mContext!!.serialNo()) {
+                                    if (it) {
+                                        // 下发工作票
+                                        BusinessManager.sendTicketBusiness(keyPair.second?.mac!!, ticketDetail, mvpView as TicketDetailActivity) { b, s, rst ->
+
+                                        }
+                                    }
+                                }
+                            }
+                        }
+                    }
+                }
+                JOB_STATUS_ACQUIRE_KEY -> {
+                    // 这个时候锁具已经全了
+                    BusinessManager.checkEquipCount(0) { keyPair, _ ->
+                        // null表示锁具数量不够,不给钥匙
+                        if (keyPair != null) {
+                            // 更新钥匙信息
+                            NetApi.updateKeyTake(ticketDetail.ticketId!!, keyPair.second?.rfid!!, mContext!!.serialNo()) {
+                                if (it) {
+                                    // 下发工作票
+                                    BusinessManager.sendTicketBusiness(keyPair.second?.mac!!, ticketDetail, mvpView as TicketDetailActivity) { b, s, rst ->
+                                        (mvpView as TicketDetailActivity).handleLoading(b, s)
+                                    }
+                                }
+                            }
+                        }
+                    }
+                }
+            }
+
+        }
+    }
+
+    /**
+     * 上锁人解锁流程
+     */
+    fun handleUnlockProcess(ticketId: Long) {
+        // TODO 上锁人解锁流程
+    }
 }