소스 검색

补充钥匙归还确认弹框流程;添加批量更新作业票下隔离点的上锁解锁状况接口;补充隔离点上报流程;完善放回钥匙逻辑

Frankensteinly 11 달 전
부모
커밋
5ec64a9293

+ 46 - 7
app/src/main/java/com/grkj/iscs/BusinessManager.kt

@@ -8,6 +8,7 @@ import com.clj.fastble.BleManager
 import com.clj.fastble.data.BleDevice
 import com.clj.fastble.exception.BleException
 import com.google.gson.Gson
+import com.grkj.iscs.base.BaseActivity
 import com.grkj.iscs.ble.BleBean
 import com.grkj.iscs.ble.BleCmdManager
 import com.grkj.iscs.ble.BleConst
@@ -19,6 +20,7 @@ import com.grkj.iscs.ble.CustomBleGattCallback
 import com.grkj.iscs.ble.CustomBleIndicateCallback
 import com.grkj.iscs.ble.CustomBleScanCallback
 import com.grkj.iscs.ble.CustomBleWriteCallback
+import com.grkj.iscs.dialog.TipDialog
 import com.grkj.iscs.extentions.removeLeadingZeros
 import com.grkj.iscs.extentions.serialNo
 import com.grkj.iscs.extentions.startsWith
@@ -36,8 +38,11 @@ import com.grkj.iscs.model.DeviceConst.DOCK_TYPE_ELEC_LOCK_BOARD
 import com.grkj.iscs.model.DeviceConst.DOCK_TYPE_KEY
 import com.grkj.iscs.model.DeviceConst.DOCK_TYPE_LOCK
 import com.grkj.iscs.model.DeviceConst.DOCK_TYPE_PORTABLE
+import com.grkj.iscs.model.bo.WorkTicketGetBO
 import com.grkj.iscs.model.bo.WorkTicketSendBO
+import com.grkj.iscs.model.vo.ticket.LockPointUpdateReqVO
 import com.grkj.iscs.model.vo.ticket.TicketDetailRespVO
+import com.grkj.iscs.util.ActivityUtils
 import com.grkj.iscs.util.CommonUtils
 import com.grkj.iscs.util.Executor
 import com.grkj.iscs.util.NetApi
@@ -62,11 +67,6 @@ object BusinessManager {
             return true
         }
 
-    /**
-     * 下发工作票还是读取工作票完成状态
-     */
-    var isSendTicket = true
-
     /****************************************** ModBus ******************************************/
 
     fun connectDock(isNeedInit: Boolean = false) {
@@ -107,13 +107,14 @@ object BusinessManager {
                                     NetApi.getKeyInfo(rfid) {
                                         if (it != null && !it.macAddress.isNullOrEmpty()) {
                                             ModBusController.updateKeyMac(dockBean.addr.toInt(), keyBean.isLeft, it.macAddress)
+                                            showKeyReturnDialog(it.macAddress, isLeft, dockBean.addr.toInt())
                                         } else {
                                             ToastUtils.tip(R.string.get_key_info_fail)
                                         }
                                     }
                                     // TODO 蓝牙通信
                                 }
-                                ModBusController.controlKeyBuckle(false, isLeft = true, dockBean.addr.toInt() - 1)
+//                                ModBusController.controlKeyBuckle(false, isLeft = true, dockBean.addr.toInt() - 1)
                             }
                         }
                     }
@@ -153,13 +154,14 @@ object BusinessManager {
                                             NetApi.getKeyInfo(rfid) {
                                                 if (it != null && !it.macAddress.isNullOrEmpty()) {
                                                     ModBusController.updateKeyMac(dockBean.addr.toInt(), isLeft, it.macAddress)
+                                                    showKeyReturnDialog(it.macAddress, isLeft, dockBean.addr.toInt())
                                                 } else {
                                                     ToastUtils.tip(R.string.get_key_info_fail)
                                                 }
                                             }
                                             // TODO 蓝牙通信
                                         }
-                                        ModBusController.controlKeyBuckle(false, isLeft = true, dockBean.addr.toInt() - 1)
+//                                        ModBusController.controlKeyBuckle(false, isLeft = true, dockBean.addr.toInt() - 1)
                                     }
                                     DEVICE_TYPE_LOCK -> {
                                         ModBusController.readLockRfid(dockBean.addr.toInt() - 1, deviceBean.idx) { res ->
@@ -198,6 +200,21 @@ object BusinessManager {
         }
     }
 
+    /**
+     * 钥匙归还提示确认弹框
+     */
+    private fun showKeyReturnDialog(mac: String, isLeft: Boolean, slaveIdx: Int) {
+        val dlg = TipDialog(MyApplication.instance!!.applicationContext)
+        dlg.setTip(MyApplication.instance!!.getString(R.string.key_return_tip))
+        dlg.setType(TipDialog.TYPE_CONFIRM)
+        dlg.setConfirmListener {
+            ModBusController.controlKeyBuckle(false, isLeft, slaveIdx)
+            getTicketStatusBusiness(mac, ActivityUtils.currentActivity() as BaseActivity<*>) { b, s ->
+                (ActivityUtils.currentActivity() as BaseActivity<*>).handleLoading(b, s)
+            }
+        }
+    }
+
     fun readLockBuckleStatus() {
         // TODO slaveIdx暂时写死,调试用
         ModBusController.readBuckleStatus(true, 0) { type, res ->
@@ -712,6 +729,28 @@ object BusinessManager {
                     override fun onWriteFailure(exception: BleException?) {
                         println("switch mode 1 fail")}
                 })
+
+                // 上报隔离点状态
+                val workTicketGetBO = Gson().fromJson(String(it.ticketStatus), WorkTicketGetBO::class.java)
+                val keyNfc = ModBusController.getKeyByMac(bleDevice.mac)?.rfid
+                workTicketGetBO?.data?.forEach { data ->
+                    val updateList = mutableListOf<LockPointUpdateReqVO>()
+                    data.dataList?.forEach { dataListDTO ->
+                        val updateVO = LockPointUpdateReqVO(
+                            data.taskId?.toLong(),
+                            dataListDTO.infoRfidNo,
+                            dataListDTO.equipRfidNo,
+                            keyNfc!!,
+                            dataListDTO.target,
+                            dataListDTO.status
+                        )
+                        updateList.add(updateVO)
+                    }
+
+                    NetApi.updateLockPointBatch(updateList) { itRst ->
+                        // TODO 上报结果
+                    }
+                }
             }
         }
     }

+ 16 - 0
app/src/main/java/com/grkj/iscs/dialog/TipDialog.kt

@@ -12,6 +12,11 @@ class TipDialog(ctx: Context) : BaseDialog<DialogTipBinding>(ctx) {
     private var confirmListener: (() -> Unit)? = null
     private var cancelListener: (() -> Unit)? = null
 
+    companion object {
+        const val TYPE_CONFIRM = 0
+        const val TYPE_ALL = 1
+    }
+
     override val viewBinding: DialogTipBinding
         get() = DialogTipBinding.inflate(layoutInflater)
 
@@ -31,6 +36,17 @@ class TipDialog(ctx: Context) : BaseDialog<DialogTipBinding>(ctx) {
         mBinding?.tvTip?.text = tip
     }
 
+    fun setType(type: Int) {
+        when (type) {
+            TYPE_CONFIRM -> {
+                mBinding?.btnCancel?.visibility = android.view.View.GONE
+            }
+            TYPE_ALL -> {
+                mBinding?.btnCancel?.visibility = android.view.View.VISIBLE
+            }
+        }
+    }
+
     fun setConfirmListener(listener: () -> Unit) {
         confirmListener = listener
     }

+ 5 - 0
app/src/main/java/com/grkj/iscs/model/UrlConsts.kt

@@ -111,4 +111,9 @@ object UrlConsts {
      * 更新作业票进度
      */
     const val TICKET_UPDATE_PROGRESS = "/iscs/ticket/updateProgress"
+
+    /**
+     * 批量更新作业票下隔离点的上锁解锁状况
+     */
+    const val LOCK_POINT_UPDATE_BATCH = "/iscs/hardware-api/updateLockPointBatch"
 }

+ 77 - 0
app/src/main/java/com/grkj/iscs/model/bo/WorkTicketGetBO.kt

@@ -0,0 +1,77 @@
+package com.grkj.iscs.model.bo
+
+class WorkTicketGetBO {
+    /**
+     * 权限卡号
+     */
+    var cardNo: String? = null
+    /**
+     * 用户密码
+     */
+    var password: String? = null
+    /**
+     * 工作票数组
+     */
+    var data: MutableList<DataDTO>? = null
+
+    class DataDTO {
+        /**
+         * 工作票号
+         */
+        var taskCode: String? = null
+        /**
+         * 工作票ID
+         */
+        var taskId: String? = null
+        /**
+         * 工作票下挂任务列表
+         */
+        var dataList: MutableList<DataListDTO>? = null
+
+        class DataListDTO {
+            /**
+             * 任务ID
+             */
+            var dataId: Int? = null
+            /**
+             * 工作点位RFID号
+             */
+            var equipRfidNo: String? = null
+            /**
+             * 锁RFID号
+             */
+            var infoRfidNo: String? = null
+            /**
+             * 任务目标 0:挂锁 1:解锁
+             */
+            var target: Int? = null
+            /**
+             * 任务当前状态:
+             * 0—挂锁;1—解锁;2-无操作
+             */
+            var status: Int? = null
+            /**
+             * 任务操作状态
+             * 0—待完成;1—已完成
+             */
+            var closed: Int? = null
+            override fun toString(): String {
+                return "DataListDTO(dataId=$dataId, equipRfidNo=$equipRfidNo, infoRfidNo=$infoRfidNo, target=$target, status=$status, closed=$closed)"
+            }
+
+
+        }
+
+        override fun toString(): String {
+            return "DataDTO(taskCode=$taskCode, taskId=$taskId, dataList=$dataList)"
+        }
+
+
+    }
+
+    override fun toString(): String {
+        return "WorkTicketStatusBean(cardNo=$cardNo, password=$password, data=$data)"
+    }
+
+
+}

+ 10 - 0
app/src/main/java/com/grkj/iscs/model/vo/ticket/LockPointUpdateReqVO.kt

@@ -0,0 +1,10 @@
+package com.grkj.iscs.model.vo.ticket
+
+data class LockPointUpdateReqVO(
+    val ticketId: Long?,
+    val lockNfc: String?,
+    val pointNfc: String?,
+    val keyNfc: String?,
+    val target: Int?,
+    val status: Int?
+)

+ 0 - 11
app/src/main/java/com/grkj/iscs/presenter/LoginPresenter.kt

@@ -1,12 +1,8 @@
 package com.grkj.iscs.presenter
 
 import android.content.Context
-import android.content.Intent
-import android.view.View
-import com.google.gson.Gson
 import com.grkj.iscs.BusinessManager
 import com.grkj.iscs.R
-import com.grkj.iscs.base.BaseActivity
 import com.grkj.iscs.base.BasePresenter
 import com.grkj.iscs.extentions.removeLeadingZeros
 import com.grkj.iscs.extentions.toHexStrings
@@ -15,14 +11,7 @@ import com.grkj.iscs.modbus.ModBusController
 import com.grkj.iscs.model.DeviceConst.DEVICE_TYPE_CARD
 import com.grkj.iscs.model.DeviceConst.DEVICE_TYPE_KEY
 import com.grkj.iscs.model.DeviceConst.DEVICE_TYPE_LOCK
-import com.grkj.iscs.model.DeviceConst.DOCK_TYPE_PORTABLE
-import com.grkj.iscs.model.WorkTicketStatusBean
 import com.grkj.iscs.model.vo.card.CardInfoRespVO
-import com.grkj.iscs.presentation.LockerActivity
-import com.grkj.iscs.presentation.LockerTogetherActivity
-import com.grkj.iscs.presentation.PresentationManager
-import com.grkj.iscs.util.ActivityUtils
-import com.grkj.iscs.util.Executor
 import com.grkj.iscs.util.NetApi
 import com.grkj.iscs.util.SPUtils
 import com.grkj.iscs.util.ToastUtils

+ 17 - 0
app/src/main/java/com/grkj/iscs/util/NetApi.kt

@@ -10,6 +10,7 @@ import com.grkj.iscs.model.vo.lock.LockInfoRespVO
 import com.grkj.iscs.model.vo.lock.LockTakeUpdateReqVO
 import com.grkj.iscs.model.vo.sop.SopInfoRespVO
 import com.grkj.iscs.model.vo.sop.SopPageRespVO
+import com.grkj.iscs.model.vo.ticket.LockPointUpdateReqVO
 import com.grkj.iscs.model.vo.ticket.TicketDetailRespVO
 import com.grkj.iscs.model.vo.ticket.TicketEquipDetailRespVO
 import com.grkj.iscs.model.vo.ticket.TicketPageRespVO
@@ -395,4 +396,20 @@ object NetApi {
             }, isGet = false, isAuth = true
         )
     }
+
+    /**
+     * 批量更新作业票下隔离点的上锁解锁状况
+     */
+    fun updateLockPointBatch(list: MutableList<LockPointUpdateReqVO>, callBack: (Boolean) -> Unit) {
+        NetHttpManager.getInstance().doRequestNet(
+            UrlConsts.LOCK_POINT_UPDATE_BATCH,
+            false,
+            mapOf(
+                "dtos" to list
+            ),
+            { res, _, _ ->
+                callBack.invoke(res != null)
+            }, isGet = false, isAuth =true
+        )
+    }
 }

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

@@ -70,6 +70,7 @@
 
     <string name="make_sure_to_colock">确定要共锁吗?</string>
     <string name="make_sure_to_unlock">确定要解锁吗?</string>
+    <string name="key_return_tip">将读取工作票完成情况</string>
 
     <!--  演示页  -->
     <string name="presentation_select_sop">选择SOP</string>