ソースを参照

优化显示;隐藏部分界面直接入口;添加打印;所有设备全部归还才算工作票完成

Frankensteinly 1 年間 前
コミット
5444bc66aa

+ 2 - 1
app/src/main/java/com/grkj/iscs/BusinessManager.kt

@@ -110,6 +110,8 @@ object BusinessManager {
                                             ModBusController.updateKeyRfid(dockBean.addr.toInt(), true, rfid)
                                             // TODO 从HTTP读取Mac
                                             // TODO 蓝牙通信
+                                            // TODO 演示用,要删
+                                            PresentationManager.updateLockReturnStatus(rfid)
                                         }
                                         ModBusController.controlKeyBuckle(false, isLeft = true, dockBean.addr.toInt() - 1)
                                     }
@@ -356,7 +358,6 @@ object BusinessManager {
                     println("getToken success")
                     Executor.delayOnMain(500) {
                         if (isSendTicket) {
-                            println("haha : ${PresentationManager.getTicketJson()}")
                             sendTicket(PresentationManager.getTicketJson(), it.bleDevice, loadingCallBack)
                         } else {
                             getTicketStatus(it.bleDevice, loadingCallBack)

+ 16 - 0
app/src/main/java/com/grkj/iscs/model/WorkTicketBean.kt

@@ -61,6 +61,11 @@ class WorkTicketBean {
              * 前序任务ID
              */
             var prevId: Int? = null
+            override fun toString(): String {
+                return "DataListDTO(dataId=$dataId, equipRfidNo=$equipRfidNo, infoRfidNo=$infoRfidNo, target=$target, prevId=$prevId)"
+            }
+
+
         }
     }
 
@@ -73,5 +78,16 @@ class WorkTicketBean {
          * 挂锁RFID
          */
         var rfid: String? = null
+        override fun toString(): String {
+            return "LockListDTO(lockId=$lockId, rfid=$rfid)"
+        }
+
+
     }
+
+    override fun toString(): String {
+        return "WorkTicketBean(cardNo=$cardNo, password=$password, effectiveTime=$effectiveTime, data=$data, lockList=$lockList)"
+    }
+
+
 }

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

@@ -55,6 +55,23 @@ class WorkTicketStatusBean {
              * 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)"
     }
+
+
 }

+ 7 - 6
app/src/main/java/com/grkj/iscs/presentation/CurrentTicketActivity.kt

@@ -12,6 +12,7 @@ class CurrentTicketActivity : BaseActivity<ActivityCurrentTicketBinding>() {
         get() = ActivityCurrentTicketBinding.inflate(layoutInflater)
 
     override fun initView() {
+        mBinding?.loTitile?.root?.setBackgroundColor(resources.getColor(R.color.main_color))
         mBinding?.loTitile?.tvNumber?.text = resources.getString(R.string.sop_number)
         mBinding?.loTitile?.tvName?.text = resources.getString(R.string.sop_name)
         mBinding?.loTitile?.tvType?.text = resources.getString(R.string.sop_type)
@@ -26,12 +27,12 @@ class CurrentTicketActivity : BaseActivity<ActivityCurrentTicketBinding>() {
                 holder.setText(R.id.tv_start_time, ticket?.startTime)
                 holder.setText(R.id.tv_end_time, ticket?.endTime)
                 holder.setText(R.id.tv_action, when(ticket?.status) {
-                    0 -> "待上锁"
-                    1 -> "待上锁人上锁"
-                    2 -> "部分共锁人上锁"
-                    3 -> "共锁人解锁"
-                    4 -> "部分共锁人解锁"
-                    5 -> "待上锁人解锁"
+                    0 -> "待上锁人上锁"
+                    1 -> "部分共锁人上锁"
+                    2 -> "待共锁人解锁"
+                    3 -> "部分共锁人解锁"
+                    4 -> "待上锁人解锁"
+                    5 -> "待归还设备"
                     6 -> "已完成"
                     else -> ""
                 })

+ 2 - 1
app/src/main/java/com/grkj/iscs/presentation/LockerActivity.kt

@@ -69,7 +69,7 @@ class LockerActivity : BaseActivity<ActivityLockerBinding>() {
             }
 
             if (lockerStatus == 2) {
-                ToastUtils.tip("工作票已完成")
+                ToastUtils.tip("解锁已完成")
                 return@runOnMain
             }
 
@@ -84,6 +84,7 @@ class LockerActivity : BaseActivity<ActivityLockerBinding>() {
                     handleLoading(b, s)
                     if (s.equals("切换工作模式成功")) {
                         ModBusController.controlKeyBuckle(true, isLeft = true, dockList[0].addr.toInt() - 1)
+                        finish()
                     }
                 }
             }

+ 80 - 21
app/src/main/java/com/grkj/iscs/presentation/PresentationManager.kt

@@ -1,9 +1,12 @@
 package com.grkj.iscs.presentation
 
 import com.google.gson.Gson
+import com.grkj.iscs.modbus.ModBusController
+import com.grkj.iscs.model.DeviceConst
 import com.grkj.iscs.model.WorkTicketBean
 import com.grkj.iscs.model.WorkTicketStatusBean
 import com.grkj.iscs.util.ToastUtils
+import com.grkj.iscs.util.log.LogUtil
 
 object PresentationManager {
 
@@ -55,13 +58,31 @@ object PresentationManager {
     var workTicketList = mutableListOf<PServerTicket>()
 
     // 卡片信息
-    data class PCardInfoBean(val rfid: String, val isLocker: Boolean)
+    data class PCardInfoBean(val rfid: String, val isLocker: Boolean) {
+        override fun toString(): String {
+            return "PCardInfoBean(rfid='$rfid', isLocker=$isLocker)"
+        }
+    }
     // 上锁人
-    data class PLockerBean(val name: String, var rfid: String?, var status: Int?)       // status:0待上锁 1待解锁 2已解锁
+    data class PLockerBean(val name: String, var rfid: String?, var status: Int?)     {   // status:0待上锁 1待解锁 2已解锁
+        override fun toString(): String {
+            return "PLockerBean(name='$name', rfid=$rfid, status=$status)"
+        }
+    }
+
     // 共锁人
-    data class PLockerTogetherBean(var name: String? = null, var isChecked: Boolean = false, var rfid: String?, var status: Int?)   // status:0待上锁 1待解锁 2已解锁
+    data class PLockerTogetherBean(var name: String? = null, var isChecked: Boolean = false, var rfid: String?, var status: Int?) {  // status:0待上锁 1待解锁 2已解锁
+        override fun toString(): String {
+            return "PLockerTogetherBean(name=$name, isChecked=$isChecked, rfid=$rfid, status=$status)"
+        }
+    }
+
     // 隔离点位
-    data class PPointBean(var name: String? = null, var rfid: String? = null)
+    data class PPointBean(var name: String? = null, var rfid: String? = null) {
+        override fun toString(): String {
+            return "PPointBean(name=$name, rfid=$rfid)"
+        }
+    }
     // 服务端工作票(完整)
     data class PServerTicket(
         var ticketId: Int? = null,
@@ -70,29 +91,26 @@ object PresentationManager {
         var workTicketBean: WorkTicketBean? = null,
         var startTime: String? = null,
         var endTime: String? = null,
-        var status: Int? = null,     // 0:待上锁人上锁 1:部分共锁人上锁 2:待共锁人解锁 3:部分共锁人解锁 4:待上锁人解锁 5:已完成
+        var status: Int? = null,     // 0:待上锁人上锁 1:部分共锁人上锁 2:待共锁人解锁 3:部分共锁人解锁 4:待上锁人解锁 5:待归还设备 6:已完成
         var locker: PLockerBean? = null,    // 上锁人
         var lockerTogetherList: MutableList<PLockerTogetherBean>? = null,  // 共锁人
-        var safety: String? = null  // 安全员
-    )
+        var safety: String? = null,  // 安全员
+        var isAllLocksReturned: Boolean = false    // 是否归还所有锁具
+    ) {
+        override fun toString(): String {
+            return "PServerTicket(ticketId=$ticketId, sopId=$sopId, sop=$sop, workTicketBean=$workTicketBean, startTime=$startTime, endTime=$endTime, status=$status, locker=$locker, lockerTogetherList=$lockerTogetherList, safety=$safety)"
+        }
+    }
 
 
     fun checkLocker(rfid: String): Int? {
-        val locker = workTicketList.find { it.locker?.rfid == rfid }?.locker
+        val locker = workTicketList.find { it.locker?.rfid == rfid && it.status != 6 }?.locker
         if (locker == null) {
             return null
         }
         return locker.status
     }
 
-    fun updateLockerStatus(rfid: String, rst: Int) {
-        if (rst == 1 || rst == 0) {
-            workTicketList.find { it.locker?.rfid == rfid }?.locker?.status == rst + 1
-        } else {
-            ToastUtils.tip("未知上锁人状态更新")
-        }
-    }
-
     fun updateTogetherLockerStatus(rfid: String, rst: Int) {
         if (rst == 1 || rst == 0) {
             workTicketList.find { it.lockerTogetherList?.find { it.rfid == rfid } != null }?.lockerTogetherList?.find { it.rfid == rfid }?.status = rst + 1
@@ -117,6 +135,8 @@ object PresentationManager {
     }
 
     fun updateWorkTicket(ticketStatusBean: WorkTicketStatusBean) {
+        println("updateWorkTicket1 : $ticketStatusBean")
+        println("updateWorkTicket2 : $workTicketList")
         val statusTicketList = ticketStatusBean.data
         if (statusTicketList.isNullOrEmpty()) {
             ToastUtils.tip("钥匙无工作票数据")
@@ -141,20 +161,30 @@ object PresentationManager {
                             }
                             if (itStatusTask.closed == 0) {
                                 isLockerDone = false
+                                println("测试打印 : 有未完成的")
                             }
                         }
                     }
                 }
             }
-            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
+                if (pServerTicket.isAllLocksReturned) {
+                    pServerTicket.status = 6
+                } else {
+                    pServerTicket.status = 5
+                }
+            }
+            if (isLockerDone) {
+                println("测试打印 : 上锁人状态 - ${pServerTicket.locker?.status}")
+                if (pServerTicket.locker?.status == 0 || pServerTicket.locker?.status == 1) {
+                    pServerTicket.locker?.status = pServerTicket.locker!!.status!! + 1
+                }
             }
         }
+
+        println("updateWorkTicket3 : $workTicketList")
     }
 
     fun getTicketJson(): String {
@@ -162,8 +192,37 @@ object PresentationManager {
         if (workTicketBean == null) {
             ToastUtils.tip("暂无可处理的工作票")
         }
-        return Gson().toJson(workTicketBean)
+        val jsonStr = Gson().toJson(workTicketBean)
+        LogUtil.i("getTicketJson : $jsonStr")
+        return jsonStr
     }
 
     var ticketCardNo = ""
+
+    fun updateLockReturnStatus(rfid: String) {
+        val pServerTicket = workTicketList.find { it.workTicketBean?.data!!.any { it.dataList!!.any { it.infoRfidNo == rfid } } }
+        pServerTicket?.let {
+            val dockList = ModBusController.getDockByType(DeviceConst.DOCK_TYPE_PORTABLE)
+            if (dockList.isEmpty()) {
+                return
+            }
+            val dockLockRfidList = dockList[0].getLockList().map { it.rfid }
+
+            val ticketLockRfidList = mutableListOf<String?>()
+
+            // 遍历 data 列表
+            it.workTicketBean?.data?.forEach { dataDto ->
+                // 遍历 dataList 列表
+                dataDto.dataList?.forEach { dataListDto ->
+                    // 添加 infoRfidNo 到集合中
+                    ticketLockRfidList.add(dataListDto.infoRfidNo)
+                }
+            }
+            it.isAllLocksReturned = ticketLockRfidList.containsAll(dockLockRfidList)
+            if (it.isAllLocksReturned && it.status == 5) {
+                ToastUtils.tip("工作票已完成")
+                it.status = 6
+            }
+        }
+    }
 }

+ 1 - 2
app/src/main/res/layout/activity_current_ticket.xml

@@ -10,8 +10,7 @@
 
     <include
         android:id="@+id/lo_titile"
-        layout="@layout/item_rv_sop"
-        android:background="@color/main_color" />
+        layout="@layout/item_rv_sop" />
 
     <androidx.recyclerview.widget.RecyclerView
         android:id="@+id/rv_current"

+ 2 - 1
app/src/main/res/layout/activity_main.xml

@@ -98,7 +98,8 @@
             android:minHeight="0dp"
             android:text="Presentation"
             android:textSize="10sp"
-            android:layout_margin="5dp"/>
+            android:layout_margin="5dp"
+            android:visibility="gone"/>
 
         <Button
             android:id="@+id/presentation_login"

+ 2 - 1
app/src/main/res/layout/item_rv_sop.xml

@@ -3,7 +3,8 @@
     android:layout_width="match_parent"
     android:layout_height="wrap_content"
     android:layout_margin="@dimen/rv_item_margin"
-    android:orientation="horizontal">
+    android:orientation="horizontal"
+    android:id="@+id/root">
 
     <TextView
         android:id="@+id/tv_number"