소스 검색

调整上锁人、共锁人业务流程;添加更新工作票

Frankensteinly 1 년 전
부모
커밋
534e0c2368

+ 3 - 5
app/src/main/java/com/grkj/iscs/BusinessManager.kt

@@ -33,6 +33,7 @@ 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.presentation.PresentationManager
 import com.grkj.iscs.util.CommonUtils
 import com.grkj.iscs.util.Executor
 import com.grkj.iscs.util.ToastUtils
@@ -193,9 +194,6 @@ object BusinessManager {
 
 
     /****************************************** 蓝牙 ******************************************/
-
-    // 工作票下发json
-    var ticketJson: String? = null
     /**
      * 下发工作票
      */
@@ -358,8 +356,8 @@ object BusinessManager {
                     println("getToken success")
                     Executor.delayOnMain(500) {
                         if (isSendTicket) {
-                            println("haha : $ticketJson")
-                            sendTicket(ticketJson!!, it.bleDevice, loadingCallBack)
+                            println("haha : ${PresentationManager.getTicketJson()}")
+                            sendTicket(PresentationManager.getTicketJson(), it.bleDevice, loadingCallBack)
                         } else {
                             getTicketStatus(it.bleDevice, loadingCallBack)
                         }

+ 1 - 1
app/src/main/java/com/grkj/iscs/model/WorkTicketStatusBean.kt

@@ -38,7 +38,7 @@ class WorkTicketStatusBean {
              */
             var equipRfidNo: String? = null
             /**
-             * 锁RFID号(只在创建的时候有)
+             * 锁RFID号
              */
             var infoRfidNo: String? = null
             /**

+ 52 - 14
app/src/main/java/com/grkj/iscs/presentation/LockerActivity.kt

@@ -2,10 +2,15 @@ package com.grkj.iscs.presentation
 
 import android.content.Intent
 import androidx.appcompat.app.AlertDialog
+import com.grkj.iscs.BusinessManager
 import com.grkj.iscs.base.BaseActivity
 import com.grkj.iscs.databinding.ActivityLockerBinding
+import com.grkj.iscs.extentions.toHexStrings
+import com.grkj.iscs.modbus.ModBusController
+import com.grkj.iscs.model.DeviceConst
 import com.grkj.iscs.util.Executor
 import com.grkj.iscs.util.ToastUtils
+import com.grkj.iscs.util.log.LogUtil
 
 class LockerActivity : BaseActivity<ActivityLockerBinding>() {
 
@@ -28,27 +33,60 @@ class LockerActivity : BaseActivity<ActivityLockerBinding>() {
         }
     }
 
-    fun showDlg(rst: Int) {
+    fun showDlg(rfid: String) {
         Executor.runOnMain {
-            val str = when (rst) {
-                0 -> "确定要上锁吗?"
-                1 -> "确定要解除锁吗?"
-                else -> ""
+            PresentationManager.ticketCardNo = rfid
+
+            val lockerStatus = PresentationManager.checkLocker(rfid)
+
+            // 锁
+            val dockList = ModBusController.getDockByType(DeviceConst.DOCK_TYPE_PORTABLE)
+            if (dockList.isEmpty()) {
+                ToastUtils.tip("没有找到移动柜")
+                return@runOnMain
+            }
+            val lockList = dockList[0].getLockList().take(2)
+            if (lockList.isEmpty()) {
+                ToastUtils.tip("没有找到移动柜的锁")
+                return@runOnMain
+            }
+            if (lockList.size < 2) {
+                ToastUtils.tip("移动柜的锁数量不够2个")
+                return@runOnMain
+            }
+            val lockIdxList = lockList.map { it.idx } as MutableList
+
+            // 蓝牙钥匙
+            val keyList = ModBusController.getKeyByDockType(DeviceConst.DOCK_TYPE_PORTABLE)
+            if (keyList.isNullOrEmpty()) {
+                ToastUtils.tip("没有找到钥匙")
+                return@runOnMain
+            }
+            val rfid = keyList[0].rfid
+            if (rfid.isNullOrEmpty()) {
+                ToastUtils.tip("没有找到钥匙的RFID")
+                return@runOnMain
             }
-            if (rst == 2) {
+
+            if (lockerStatus == 2) {
                 ToastUtils.tip("工作票已完成")
                 return@runOnMain
             }
-            AlertDialog.Builder(this)
-                .setTitle("提示")
-                .setMessage(str)
-                .setPositiveButton("确定") { _, _ ->
-                    PresentationManager.updateLockerStatus(cardRfid!!, rst)
+
+            // 操作设备
+            if (lockerStatus == 0) {
+                ModBusController.controlLockBuckle(true, dockList[0].addr.toInt() - 1, lockIdxList) { res ->
+                    LogUtil.i("confirm开锁卡扣 : ${res.toHexStrings()}")
                 }
-                .setNegativeButton("取消") { dialog, _ ->
-                    dialog.dismiss()
+            }
+            if (lockerStatus == 0 || lockerStatus == 1) {
+                BusinessManager.sendTicketBusiness(PresentationManager.keyMac, this) { b, s ->
+                    handleLoading(b, s)
+                    if (s.equals("切换工作模式成功")) {
+                        ModBusController.controlKeyBuckle(true, isLeft = true, dockList[0].addr.toInt() - 1)
+                    }
                 }
-                .create().show()
+            }
         }
     }
 }

+ 25 - 24
app/src/main/java/com/grkj/iscs/presentation/LockerTogetherActivity.kt

@@ -1,14 +1,8 @@
 package com.grkj.iscs.presentation
 
 import androidx.appcompat.app.AlertDialog
-import com.grkj.iscs.BusinessManager
 import com.grkj.iscs.base.BaseMvpActivity
 import com.grkj.iscs.databinding.ActivityLockerTogetherBinding
-import com.grkj.iscs.extentions.removeLeadingZeros
-import com.grkj.iscs.extentions.toHexStrings
-import com.grkj.iscs.modbus.ModBusController
-import com.grkj.iscs.model.DeviceConst.DEVICE_TYPE_CARD
-import com.grkj.iscs.model.DeviceConst.DOCK_TYPE_PORTABLE
 import com.grkj.iscs.util.Executor
 import com.grkj.iscs.util.ToastUtils
 
@@ -27,27 +21,34 @@ class LockerTogetherActivity :
         cardRfid = intent.getStringExtra("card")
     }
 
-    fun showDlg(rst: Int) {
+    fun showDlg(rfid: String) {
         Executor.runOnMain {
-            val str = when (rst) {
-                0 -> "确定要共锁吗?"
-                1 -> "确定要解除共锁吗?"
-                else -> ""
-            }
-            if (rst == 2) {
-                ToastUtils.tip("共锁已完成")
-                return@runOnMain
-            }
-            AlertDialog.Builder(this)
-                .setTitle("提示")
-                .setMessage(str)
-                .setPositiveButton("确定") { _, _ ->
-                    PresentationManager.updateTogetherLockerStatus(cardRfid!!, rst)
+            val togetherStatus = PresentationManager.checkTogetherLocker(rfid)
+            if (togetherStatus != null) {
+                val str = when (togetherStatus) {
+                    0 -> "确定要共锁吗?"
+                    1 -> "确定要解除共锁吗?"
+                    else -> ""
                 }
-                .setNegativeButton("取消") { dialog, _ ->
-                    dialog.dismiss()
+                if (togetherStatus == 100) {
+                    ToastUtils.tip("请等待上锁人上锁")
+                    return@runOnMain
                 }
-                .create().show()
+                if (togetherStatus == 2) {
+                    ToastUtils.tip("共锁已完成")
+                    return@runOnMain
+                }
+                AlertDialog.Builder(this)
+                    .setTitle("提示")
+                    .setMessage(str)
+                    .setPositiveButton("确定") { _, _ ->
+                        PresentationManager.updateTogetherLockerStatus(cardRfid!!, togetherStatus)
+                    }
+                    .setNegativeButton("取消") { dialog, _ ->
+                        dialog.dismiss()
+                    }
+                    .create().show()
+            }
         }
     }
 

+ 25 - 25
app/src/main/java/com/grkj/iscs/presentation/PresentationActivity.kt

@@ -114,37 +114,37 @@ class PresentationActivity :
             ToastUtils.tip("移动柜的锁数量不够2个")
             return
         }
-        val lockIdxList = lockList.map { it.idx } as MutableList
-
-        // 蓝牙钥匙
-        val keyList = ModBusController.getKeyByDockType(DeviceConst.DOCK_TYPE_PORTABLE)
-        if (keyList.isNullOrEmpty()) {
-            ToastUtils.tip("没有找到钥匙")
-            return
-        }
-        val rfid = keyList[0].rfid
-        if (rfid.isNullOrEmpty()) {
-            ToastUtils.tip("没有找到钥匙的RFID")
-            return
-        }
+//        val lockIdxList = lockList.map { it.idx } as MutableList
+
+//        // 蓝牙钥匙
+//        val keyList = ModBusController.getKeyByDockType(DeviceConst.DOCK_TYPE_PORTABLE)
+//        if (keyList.isNullOrEmpty()) {
+//            ToastUtils.tip("没有找到钥匙")
+//            return
+//        }
+//        val rfid = keyList[0].rfid
+//        if (rfid.isNullOrEmpty()) {
+//            ToastUtils.tip("没有找到钥匙的RFID")
+//            return
+//        }
 
         // 创建工单
         if (mBinding?.siPersonLock?.mSelectIdx == null) {
             ToastUtils.tip("请选择上锁人")
             return
         }
-        BusinessManager.ticketJson = createWorkTicket(lockList)
-
-        // 操作设备
-        ModBusController.controlLockBuckle(true, dockList[0].addr.toInt() - 1, lockIdxList) { res ->
-            LogUtil.i("confirm开锁卡扣 : ${res.toHexStrings()}")
-        }
-        BusinessManager.sendTicketBusiness(PresentationManager.keyMac, this) { b, s ->
-            handleLoading(b, s)
-            if (s.equals("切换工作模式成功")) {
-                ModBusController.controlKeyBuckle(true, isLeft = true, dockList[0].addr.toInt() - 1)
-            }
-        }
+        createWorkTicket(lockList)
+
+//        // 操作设备
+//        ModBusController.controlLockBuckle(true, dockList[0].addr.toInt() - 1, lockIdxList) { res ->
+//            LogUtil.i("confirm开锁卡扣 : ${res.toHexStrings()}")
+//        }
+//        BusinessManager.sendTicketBusiness(PresentationManager.keyMac, this) { b, s ->
+//            handleLoading(b, s)
+//            if (s.equals("切换工作模式成功")) {
+//                ModBusController.controlKeyBuckle(true, isLeft = true, dockList[0].addr.toInt() - 1)
+//            }
+//        }
     }
 
 

+ 3 - 8
app/src/main/java/com/grkj/iscs/presentation/PresentationLoginActivity.kt

@@ -76,15 +76,9 @@ class PresentationLoginActivity : BaseActivity<ActivityPresentationLoginBinding>
 //                                            ToastUtils.tip("当前页面不可见")
                                                 val current = ActivityUtils.currentActivity()
                                                 if (current is LockerActivity) {
-                                                    val rst = PresentationManager.checkLocker(rfid)
-                                                    if (rst != null) {
-                                                        current.showDlg(rst)
-                                                    }
+                                                    current.showDlg(rfid)
                                                 } else if (current is LockerTogetherActivity) {
-                                                    val rst = PresentationManager.checkTogetherLocker(rfid)
-                                                    if (rst != null) {
-                                                        current.showDlg(rst)
-                                                    }
+                                                    current.showDlg(rfid)
                                                 }
                                             } else {
                                                 if (PresentationManager.cardList.any { it.rfid == rfid && it.isLocker}) {
@@ -113,6 +107,7 @@ class PresentationLoginActivity : BaseActivity<ActivityPresentationLoginBinding>
                                             if (!s.isNullOrEmpty() && s.startsWith("工作票完成接收")) {
                                                 val ticket = s.substring(7)
                                                 val ticketStatusBean = Gson().fromJson(ticket, WorkTicketStatusBean::class.java)
+                                                PresentationManager.updateWorkTicket(ticketStatusBean)
                                             }
                                         }
                                     }

+ 54 - 23
app/src/main/java/com/grkj/iscs/presentation/PresentationManager.kt

@@ -1,5 +1,6 @@
 package com.grkj.iscs.presentation
 
+import com.google.gson.Gson
 import com.grkj.iscs.model.WorkTicketBean
 import com.grkj.iscs.model.WorkTicketStatusBean
 import com.grkj.iscs.util.ToastUtils
@@ -69,7 +70,7 @@ object PresentationManager {
         var workTicketBean: WorkTicketBean? = null,
         var startTime: String? = null,
         var endTime: String? = null,
-        var status: Int? = null,     // 0:待上锁 1:待上锁人上锁 2:部分共锁人上锁 3:待共锁人解锁 4:部分共锁人解锁 5:待上锁人解锁 6:已完成
+        var status: Int? = null,     // 0:待上锁人上锁 1:部分共锁人上锁 2:待共锁人解锁 3:部分共锁人解锁 4:待上锁人解锁 5:已完成
         var locker: PLockerBean? = null,    // 上锁人
         var lockerTogetherList: MutableList<PLockerTogetherBean>? = null,  // 共锁人
         var safety: String? = null  // 安全员
@@ -77,7 +78,7 @@ object PresentationManager {
 
 
     fun checkLocker(rfid: String): Int? {
-        val locker = workTicketList.find { it.locker?.rfid == rfid }
+        val locker = workTicketList.find { it.locker?.rfid == rfid }?.locker
         if (locker == null) {
             return null
         }
@@ -103,36 +104,66 @@ object PresentationManager {
 
 
     fun checkTogetherLocker(rfid: String): Int? {
-        val locker = workTicketList.find { itList -> itList.lockerTogetherList?.find { it.rfid == rfid } != null }
-        if (locker == null) {
+        val pServerTicket = workTicketList.find { itList -> itList.lockerTogetherList?.find { it.rfid == rfid } != null }
+        if (pServerTicket == null) {
             return null
         }
-        return locker.lockerTogetherList?.find { it.rfid == rfid }?.status
+        val lockerStatus = pServerTicket.locker?.status
+        val togetherStatus = pServerTicket.lockerTogetherList?.find { it.rfid == rfid }?.status
+        if (lockerStatus == 0) {
+            return 100
+        }
+        return togetherStatus
     }
 
     fun updateWorkTicket(ticketStatusBean: WorkTicketStatusBean) {
-        val list = findMatchingTickets(ticketStatusBean)
-        if (list.isNotEmpty()) {
-            val ticket = list.first()
+        val statusTicketList = ticketStatusBean.data
+        if (statusTicketList.isNullOrEmpty()) {
+            ToastUtils.tip("钥匙无工作票数据")
+            return
         }
-    }
-
-    fun findMatchingTickets(ticketStatusBean: WorkTicketStatusBean): List<PServerTicket> {
-        val matchingTickets = mutableListOf<PServerTicket>()
-
-        // 获取 ticketStatusBean 中的所有 taskCode
-        val taskCodes = ticketStatusBean.data?.map { it.taskCode }
-
-        // 遍历 workTicketList
-        for (ticket in workTicketList) {
-            // 检查 ticket 的 workTicketBean 是否存在且包含相同的 taskCode
-            ticket.workTicketBean?.data?.forEach { data ->
-                if (taskCodes?.contains(data.taskCode) == true) {
-                    matchingTickets.add(ticket)
+        val taskCodeList = statusTicketList.map { it.taskCode }
+        val pServerTicket = workTicketList.find { it.workTicketBean?.data!!.any { taskCodeList.contains(it.taskCode) } }
+        val serverTicketList = pServerTicket?.workTicketBean?.data
+        if (serverTicketList.isNullOrEmpty()) {
+            ToastUtils.tip("无服务端工作票数据")
+            return
+        }
+        serverTicketList.forEach { itServerTicket ->
+            var isLockerDone = true
+            itServerTicket.dataList?.forEach { itServerTask ->
+                statusTicketList.forEach { itStatusTicket ->
+                    itStatusTicket.dataList?.forEach { itStatusTask ->
+                        if (itServerTask.equipRfidNo == itStatusTask.equipRfidNo) {
+                            itServerTask.infoRfidNo = itStatusTask.infoRfidNo
+                            if (itStatusTask.target == 0) {
+                                itServerTask.target = 1
+                            }
+                            if (itStatusTask.closed == 0) {
+                                isLockerDone = false
+                            }
+                        }
+                    }
                 }
             }
+            if (isLockerDone) {
+                updateLockerStatus(pServerTicket.locker!!.rfid!!, pServerTicket.locker!!.status!! + 1)
+            }
+            if (pServerTicket.locker?.status == 0) {
+                pServerTicket.status = 1
+            } else if (pServerTicket.locker?.status == 1) {
+                pServerTicket.status = 5
+            }
         }
+    }
 
-        return matchingTickets
+    fun getTicketJson(): String {
+        val workTicketBean = workTicketList.find { it.workTicketBean?.cardNo == ticketCardNo && (it.status == 0 || it.status == 1) }?.workTicketBean
+        if (workTicketBean == null) {
+            ToastUtils.tip("暂无可处理的工作票")
+        }
+        return Gson().toJson(workTicketBean)
     }
+
+    var ticketCardNo = ""
 }