浏览代码

simple demo临时提交

Frankensteinly 10 月之前
父节点
当前提交
528ef66fc2

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

@@ -94,9 +94,9 @@ object BusinessManager {
             LogUtil.i("设备状态:${(res as List<ByteArray>).map { it.toHexStrings() }}")
             res.forEach { bytes ->
                 val dockBean = ModBusController.updateStatus(bytes) ?: return@forEach
-                if (!CAN_RETURN) {
-                    return@forEach
-                }
+//                if (!CAN_RETURN) {
+//                    return@forEach
+//                }
                 when (dockBean.type) {
                     DOCK_TYPE_KEY -> {
                         dockBean.deviceList.forEach { keyBean ->
@@ -751,7 +751,8 @@ object BusinessManager {
             loadingCallBack.invoke(false, ctx.getString(R.string.simple_get_ticket_status_done), null)
             BleUtil.instance?.getBleDeviceByMac(bleDevice.mac)?.let {
                 println("工作票完成接收 : ${String(it.ticketStatus)}")
-                loadingCallBack.invoke(false, "工作票完成接收${String(it.ticketStatus)}", true)
+                // TD:Ticket Done
+                loadingCallBack.invoke(false, "TD${String(it.ticketStatus)}", true)
                 // TODO 清空ticket
                 it.ticketStatus = byteArrayOf()
                 // TODO 根据工作票完成情况,切换为待机模式

+ 10 - 4
app/src/main/java/com/grkj/iscs/activity/test/ModbusActivity.kt

@@ -111,8 +111,11 @@ class ModbusActivity : BaseMvpActivity<IModbusView, ModBusPresenter, ActivityMod
 
         mBinding?.openKeyBuckle?.setOnClickListener {
             println("____________________________________")
-            // TODO 暂时写死,调试用
-            ModBusController.controlKeyBuckle(isOpen = true, true, 0) {
+            if (mBinding?.slaveIdx?.text.toString().isEmpty()) {
+                ToastUtils.tip("请输入设备编号")
+                return@setOnClickListener
+            }
+            ModBusController.controlKeyBuckle(isOpen = true, false, mBinding?.slaveIdx?.text.toString().toInt()) {
                 LogUtil.i("开锁钥匙卡扣 : ${it.toHexStrings()}")
                 println("____________________________________")
             }
@@ -120,8 +123,11 @@ class ModbusActivity : BaseMvpActivity<IModbusView, ModBusPresenter, ActivityMod
 
         mBinding?.closeKeyBuckle?.setOnClickListener {
             println("____________________________________")
-            // TODO 暂时写死,调试用
-            ModBusController.controlKeyBuckle(isOpen = false, true, 0) {
+            if (mBinding?.slaveIdx?.text.toString().isEmpty()) {
+                ToastUtils.tip("请输入设备编号")
+                return@setOnClickListener
+            }
+            ModBusController.controlKeyBuckle(isOpen = false, false, mBinding?.slaveIdx?.text.toString().toInt()) {
                 LogUtil.i("关锁钥匙卡扣 : ${it.toHexStrings()}")
                 println("____________________________________")
             }

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

@@ -108,10 +108,10 @@ class PresentationLoginActivity : BaseActivity<ActivityPresentationLoginBinding>
 
                                 DEVICE_TYPE_KEY -> {
                                     Executor.runOnMain {
-                                        BusinessManager.getTicketStatusBusiness(PresentationManager.keyMac, this) { b, s ->
+                                        BusinessManager.getTicketStatusBusiness(PresentationManager.keyMac, this) { b, s, rst ->
                                             handleLoading(b, s)
                                             if (!s.isNullOrEmpty() && s.startsWith("工作票完成接收")) {
-                                                val ticket = s.substring(7)
+                                                val ticket = s.substring(2)
                                                 val ticketStatusBean = Gson().fromJson(ticket, WorkTicketStatusBean::class.java)
                                                 PresentationManager.updateWorkTicket(ticketStatusBean)
                                             }

+ 88 - 0
app/src/main/java/com/grkj/iscs/presentation/PresentationManager.kt

@@ -14,6 +14,8 @@ import com.grkj.iscs.model.DeviceConst
 import com.grkj.iscs.model.WorkTicketBean
 import com.grkj.iscs.model.WorkTicketStatusBean
 import com.grkj.iscs.model.vo.lock.LockTakeUpdateReqVO
+import com.grkj.iscs.presentation.simple.SimpleProcessActivity
+import com.grkj.iscs.util.ActivityUtils
 import com.grkj.iscs.util.Executor
 import com.grkj.iscs.util.NetApi
 import com.grkj.iscs.util.ToastUtils
@@ -388,10 +390,96 @@ object PresentationManager {
                     // 更新钥匙信息
                     // TODO 更新钥匙配对
                     BusinessManager.sendTicketBusiness(keyPair.second?.mac!!, ctx) { b, s, rst ->
+                        if (rst == true) {
+                            mSimpleTicket?.status = 2
+                            mSimpleTicket?.locker?.status = 1
+                            updateStep(2)
+                        }
+                    }
+                }
+            }
+        }
+    }
 
+    fun updateSimpleTicket(ticketStatusBean: WorkTicketStatusBean) {
+        val statusTicketList = ticketStatusBean.data
+        if (statusTicketList.isNullOrEmpty()) {
+            ToastUtils.tip(R.string.simple_no_key_ticket_data)
+            return
+        }
+        val serverTicketList = mSimpleTicket?.workTicketBean?.data
+        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
+                                println("测试打印 : 有未完成的")
+                            }
+                        }
                     }
                 }
             }
+            // TODO 待修改
+            if (mSimpleTicket?.locker?.status == 0) {
+                mSimpleTicket?.status = 1
+            } else if (mSimpleTicket?.locker?.status == 1) {
+                mSimpleTicket?.locker?.status = 2
+                if (mSimpleTicket?.isAllLocksReturned == true) {
+                    mSimpleTicket?.status = 5
+                } else {
+                    mSimpleTicket?.status = 4
+                }
+            }
+            if (isLockerDone) {
+                println("测试打印 : 上锁人状态 - ${mSimpleTicket?.locker?.status}")
+                if (mSimpleTicket?.locker?.status == 0 || mSimpleTicket?.locker?.status == 1) {
+                    mSimpleTicket?.locker?.status = mSimpleTicket?.locker!!.status!! + 1
+                }
+            }
+        }
+    }
+
+    fun updateSimpleLockReturnStatus() {
+        Executor.runOnMain {
+            mSimpleTicket?.let {
+                val dockList = ModBusController.getDockByType(DeviceConst.DOCK_TYPE_LOCK)
+                if (dockList.isEmpty()) {
+                    return@runOnMain
+                }
+                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 = dockLockRfidList.containsAll(ticketLockRfidList)
+                if (it.isAllLocksReturned && it.status == 4) {
+                    ToastUtils.tip(R.string.simple_ticket_is_done)
+                    it.status = 5
+                    updateStep(5)
+                }
+            }
+        }
+    }
+
+    fun updateStep(step: Int) {
+        mStep = step
+        val current = ActivityUtils.currentActivity()
+        if (current is SimpleProcessActivity) {
+            current.changeStep(mStep)
         }
     }
 }

+ 1 - 1
app/src/main/java/com/grkj/iscs/presentation/simple/SimpleLoginActivity.kt

@@ -62,7 +62,7 @@ class SimpleLoginActivity : BaseActivity<ActivitySimpleLoginBinding>() {
 
         handleLoading(true, getString(R.string.simple_device_is_initializing))
         BusinessManager.connectDock(true)
-        Executor.delayOnMain(15000) {
+        Executor.delayOnMain(5000) {
             handleLoading(false)
         }
 

+ 60 - 23
app/src/main/java/com/grkj/iscs/presentation/simple/SimpleProcessActivity.kt

@@ -1,40 +1,33 @@
 package com.grkj.iscs.presentation.simple
 
-import android.content.Intent
+import android.view.InputDevice
+import android.view.KeyEvent
 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.databinding.ActivitySimpleProcessBinding
-import com.grkj.iscs.extentions.removeLeadingZeros
+import com.grkj.iscs.extentions.toByteArrays
 import com.grkj.iscs.extentions.toHexStrings
 import com.grkj.iscs.modbus.DockBean
 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_KEY
 import com.grkj.iscs.model.DeviceConst.DOCK_TYPE_LOCK
-import com.grkj.iscs.model.DeviceConst.DOCK_TYPE_PORTABLE
 import com.grkj.iscs.model.WorkTicketStatusBean
-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.ToastUtils
 
 class SimpleProcessActivity : BaseActivity<ActivitySimpleProcessBinding>() {
     
     private lateinit var mStepList: MutableList<View>
+    private var cardNo: String = ""
 
     override val viewBinding: ActivitySimpleProcessBinding
         get() = ActivitySimpleProcessBinding.inflate(layoutInflater)
 
     override fun initView() {
-        reg()
-
         mStepList = mutableListOf(mBinding!!.rlContainer0, mBinding!!.rlContainer1,
             mBinding!!.rlContainer2, mBinding!!.rlContainer3, mBinding!!.rlContainer4, mBinding!!.rlContainer5)
 
@@ -51,13 +44,24 @@ class SimpleProcessActivity : BaseActivity<ActivitySimpleProcessBinding>() {
 
 
         mBinding?.tvStart?.setOnClickListener {
-            PresentationManager.mStep = 1
             PresentationManager.initTicket()
+            PresentationManager.mStep = 1
+            PresentationManager.mSimpleTicket?.status = 1
             changeStep(PresentationManager.mStep)
         }
     }
+
+    override fun onResume() {
+        super.onResume()
+        reg()
+    }
+
+    override fun onStop() {
+        super.onStop()
+        ModBusController.unregisterListener(this)
+    }
     
-    private fun changeStep(step: Int) {
+    fun changeStep(step: Int) {
         for (i in mStepList.indices) {
             if (i == step) {
                 mStepList[i].visibility = View.VISIBLE
@@ -74,13 +78,23 @@ class SimpleProcessActivity : BaseActivity<ActivitySimpleProcessBinding>() {
             when (dockBean.type) {
                 DOCK_TYPE_KEY -> {
                     dockBean.deviceList.forEach { keyBean ->
-                        Executor.runOnMain {
-                            BusinessManager.getTicketStatusBusiness((keyBean as DockBean.KeyBean).mac!!, this) { b, s ->
-                                handleLoading(b, s)
-                                if (!s.isNullOrEmpty() && s.startsWith("工作票完成接收")) {
-                                    val ticket = s.substring(7)
-                                    val ticketStatusBean = Gson().fromJson(ticket, WorkTicketStatusBean::class.java)
-                                    PresentationManager.updateWorkTicket(ticketStatusBean)
+                        if (keyBean.isExist) {
+                            Executor.runOnMain {
+                                BusinessManager.getTicketStatusBusiness((keyBean as DockBean.KeyBean).mac!!, this) { b, s, rst ->
+                                    handleLoading(b, s)
+                                    if (!s.isNullOrEmpty() && rst == true) {
+                                        val ticket = s.substring(2)
+                                        val ticketStatusBean = Gson().fromJson(ticket, WorkTicketStatusBean::class.java)
+                                        PresentationManager.updateSimpleTicket(ticketStatusBean)
+                                        // TODO 更新mStep
+                                        if (PresentationManager.mSimpleTicket!!.status!! < 3) {
+                                            PresentationManager.mSimpleTicket?.status = 2
+                                            PresentationManager.updateStep(3)
+                                        } else {
+                                            PresentationManager.mSimpleTicket?.status = 4
+                                            PresentationManager.updateStep(5)
+                                        }
+                                    }
                                 }
                             }
                         }
@@ -89,9 +103,8 @@ class SimpleProcessActivity : BaseActivity<ActivitySimpleProcessBinding>() {
                 DOCK_TYPE_LOCK -> {
                     dockBean.deviceList.forEach { lockBean ->
                         if (lockBean.isExist) {
-                            ModBusController.readLockRfid(dockBean.addr.toInt() - 1, lockBean.idx) { res ->
-                                val rfid = res.copyOfRange(3, 11).toHexStrings(false).removeLeadingZeros()
-                                ModBusController.updateLockRfid(dockBean.addr.toInt(), lockBean.idx, rfid)
+                            Executor.delayOnMain(200) {
+                                PresentationManager.updateSimpleLockReturnStatus()
                             }
                         }
                     }
@@ -99,4 +112,28 @@ class SimpleProcessActivity : BaseActivity<ActivitySimpleProcessBinding>() {
             }
         }
     }
+
+    override fun dispatchKeyEvent(event: KeyEvent): Boolean {
+        if (event.action == KeyEvent.ACTION_UP && event.source == InputDevice.SOURCE_KEYBOARD) {
+            // 检测到回车开始处理
+            if (event.keyCode == 66) {
+                val formattedCard = cardNo.toLong().toByteArrays().toHexStrings(false)
+                println("Simple demo : $formattedCard")
+                // 重置cardNo
+                cardNo = ""
+
+                val colocker = PresentationManager.mSimpleTicket?.lockerTogetherList?.find { it.rfid == formattedCard }
+                colocker?.let {
+                    if (it.status == 0) {
+                        it.status = 1
+                    } else if (it.status == 1) {
+                        it.status = 2
+                    }
+                }
+                return super.dispatchKeyEvent(event)
+            }
+            cardNo += event.keyCharacterMap.getDisplayLabel(event.keyCode)
+        }
+        return super.dispatchKeyEvent(event)
+    }
 }

+ 2 - 2
app/src/main/java/com/grkj/iscs/presenter/TicketDetailPresenter.kt

@@ -104,7 +104,7 @@ class TicketDetailPresenter : BasePresenter<ITicketDetailView>() {
                         NetApi.updateKeyTake(ticketDetail.ticketId!!, keyPair.second?.rfid!!, mContext!!.serialNo()) {
                             if (it) {
                                 // 下发工作票
-                                BusinessManager.sendTicketBusiness(keyPair.second?.mac!!, ticketDetail, mvpView as TicketDetailActivity) { b, s ->
+                                BusinessManager.sendTicketBusiness(keyPair.second?.mac!!, ticketDetail, mvpView as TicketDetailActivity) { b, s, rst ->
 
                                 }
                             }
@@ -121,7 +121,7 @@ class TicketDetailPresenter : BasePresenter<ITicketDetailView>() {
                         NetApi.updateKeyTake(ticketDetail.ticketId!!, keyPair.second?.rfid!!, mContext!!.serialNo()) {
                             if (it) {
                                 // 下发工作票
-                                BusinessManager.sendTicketBusiness(keyPair.second?.mac!!, ticketDetail, mvpView as TicketDetailActivity) { b, s ->
+                                BusinessManager.sendTicketBusiness(keyPair.second?.mac!!, ticketDetail, mvpView as TicketDetailActivity) { b, s, rst ->
                                     (mvpView as TicketDetailActivity).handleLoading(b, s)
                                 }
                             }

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

@@ -147,4 +147,6 @@
     <string name="simple_switch_standby_mode_success">切换待机模式成功</string>
     <string name="simple_get_ticket_part">获取工作票分包</string>
     <string name="simple_get_ticket_status_done">工作票完成状态读取完成</string>
+    <string name="simple_no_key_ticket_data">钥匙无工作票数据</string>
+    <string name="simple_ticket_is_done">工作票已完成</string>
 </resources>