فهرست منبع

添加上锁人和共锁人操作

Frankensteinly 1 سال پیش
والد
کامیت
98a23b63e3

+ 10 - 0
app/src/main/java/com/grkj/iscs/BusinessManager.kt

@@ -205,6 +205,7 @@ object BusinessManager {
     @AfterPermissionGranted(PERMISSION_REQUEST_CODE)
     fun doScanBle(mac: String, loadingCallBack: (Boolean, String?) -> Unit) {
         LogUtil.d("扫描开始:$mac")
+        loadingCallBack(true, "正在扫描设备...")
         BleUtil.instance?.scan(object : CustomBleScanCallback() {
             override fun onPrompt(promptStr: String?) {
                 BleManager.getInstance().enableBluetooth()
@@ -231,6 +232,7 @@ object BusinessManager {
             }
 
             override fun onScanFinished(scanResultList: MutableList<BleDevice>?) {
+                loadingCallBack.invoke(false, null)
                 if (BleUtil.instance?.deviceList?.isEmpty() == true) {
                     ToastUtils.tip(R.string.ble_no_device_found)
                     return
@@ -267,6 +269,7 @@ object BusinessManager {
                     LogUtil.i("onConnectSuccess : $bleDevice")
                     bleDevice?.let {
                         val bleBean = BleBean(it)
+                        ToastUtils.tip("连接成功")
                         BleUtil.instance?.deviceList?.add(bleBean)
                         // 设置MTU
                         BleUtil.instance?.setMtu(it)
@@ -292,6 +295,7 @@ object BusinessManager {
     }
 
     fun indicate(bleBean: BleBean?, loadingCallBack: (Boolean, String?) -> Unit) {
+        loadingCallBack.invoke(true, "开始监听...")
         bleBean?.let {
             BleUtil.instance?.indicate(it.bleDevice, indicateCallback = object : CustomBleIndicateCallback() {
                 override fun onPrompt(promptStr: String?) {
@@ -314,6 +318,8 @@ object BusinessManager {
                 }
 
                 override fun onIndicateFailure(exception: BleException?) {
+                    loadingCallBack.invoke(false, null)
+                    ToastUtils.tip("监听失败")
                     LogUtil.i("监听失败")
                 }
 
@@ -328,6 +334,7 @@ object BusinessManager {
     }
 
     fun sendTicket(jsonStr: String, bleDevice: BleDevice, loadingCallBack: (Boolean, String?) -> Unit) {
+        loadingCallBack.invoke(true, "开始下发工作票...")
         BleCmdManager.sendWorkTicket(jsonStr, bleDevice = bleDevice, callback = object : CustomBleWriteCallback() {
             override fun onPrompt(promptStr: String?) {}
 
@@ -376,6 +383,9 @@ object BusinessManager {
         val job = byteArray[4]
         val res = byteArray[5]
         loadingCallBack.invoke(false, null)
+        if (res == 0x01.toByte() && job == 0x01.toByte()) {
+
+        }
     }
 
     /**

+ 27 - 0
app/src/main/java/com/grkj/iscs/presentation/LockerActivity.kt

@@ -1,8 +1,11 @@
 package com.grkj.iscs.presentation
 
 import android.content.Intent
+import androidx.appcompat.app.AlertDialog
 import com.grkj.iscs.base.BaseActivity
 import com.grkj.iscs.databinding.ActivityLockerBinding
+import com.grkj.iscs.util.Executor
+import com.grkj.iscs.util.ToastUtils
 
 class LockerActivity : BaseActivity<ActivityLockerBinding>() {
 
@@ -24,4 +27,28 @@ class LockerActivity : BaseActivity<ActivityLockerBinding>() {
             startActivity(Intent(this, CurrentTicketActivity::class.java))
         }
     }
+
+    fun showDlg(rst: Int) {
+        Executor.runOnMain {
+            val str = when (rst) {
+                0 -> "确定要上锁吗?"
+                1 -> "确定要解除锁吗?"
+                else -> ""
+            }
+            if (rst == 2) {
+                ToastUtils.tip("工作票已完成")
+                return@runOnMain
+            }
+            AlertDialog.Builder(this)
+                .setTitle("提示")
+                .setMessage(str)
+                .setPositiveButton("确定") { _, _ ->
+                    PresentationManager.updateLockerStatus(cardRfid!!, rst)
+                }
+                .setNegativeButton("取消") { dialog, _ ->
+                    dialog.dismiss()
+                }
+                .create().show()
+        }
+    }
 }

+ 30 - 23
app/src/main/java/com/grkj/iscs/presentation/LockerTogetherActivity.kt

@@ -1,5 +1,6 @@
 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
@@ -8,40 +9,46 @@ 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
 
 /**
  * 共锁人
  */
-class LockerTogetherActivity : BaseMvpActivity<ILockerTogetherView, LockerTogetherPresenter, ActivityLockerTogetherBinding>() {
+class LockerTogetherActivity :
+    BaseMvpActivity<ILockerTogetherView, LockerTogetherPresenter, ActivityLockerTogetherBinding>() {
+
+    private var cardRfid: String? = null
 
     override val viewBinding: ActivityLockerTogetherBinding
         get() = ActivityLockerTogetherBinding.inflate(layoutInflater)
 
     override fun initView() {
-        BusinessManager.registerStatusListener(this) { dockBean ->
-            when (dockBean.type) {
-                DOCK_TYPE_PORTABLE -> {
-                    dockBean.deviceList.forEach { deviceBean ->
-                        if (deviceBean.isExist) {
-                            when (deviceBean.type) {
-                                DEVICE_TYPE_CARD -> {
-                                    ModBusController.readPortalCaseCardRfid(dockBean.addr.toInt() - 1) { res ->
-                                        val rfid = res.copyOfRange(3, 11).toHexStrings(false).removeLeadingZeros()
-                                        println("卡片RFID : $rfid")
-                                        // TODO 根据工作票状态开始/结束工作
-                                    }
-                                }
-                            }
-                        }
-                    }
-                }
-            }
-        }
+        cardRfid = intent.getStringExtra("card")
     }
 
-    override fun onDestroy() {
-        super.onDestroy()
-        ModBusController.unregisterListener(this)
+    fun showDlg(rst: Int) {
+        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)
+                }
+                .setNegativeButton("取消") { dialog, _ ->
+                    dialog.dismiss()
+                }
+                .create().show()
+        }
     }
 
     override fun initPresenter(): LockerTogetherPresenter {

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

@@ -126,6 +126,7 @@ class PresentationActivity :
             ToastUtils.tip("没有找到钥匙的RFID")
             return
         }
+        val keyMac = "64:E8:33:47:59:7A"
 
         // 创建工单
         if (mBinding?.siPersonLock?.mSelectIdx == null) {
@@ -139,7 +140,7 @@ class PresentationActivity :
         ModBusController.controlLockBuckle(true, dockList[0].addr.toInt() - 1, lockIdxList) { res ->
             LogUtil.i("confirm开锁卡扣 : ${res.toHexStrings()}")
         }
-        BusinessManager.sendTicketBusiness(rfid, this) { b, s ->
+        BusinessManager.sendTicketBusiness(keyMac, this) { b, s ->
             handleLoading(b, s)
         }
     }

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

@@ -2,6 +2,7 @@ package com.grkj.iscs.presentation
 
 import android.content.Intent
 import android.os.Environment
+import android.view.View
 import com.google.gson.Gson
 import com.google.gson.reflect.TypeToken
 import com.grkj.iscs.BusinessManager
@@ -12,6 +13,7 @@ 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.ActivityUtils
 import com.grkj.iscs.util.Executor
 import com.grkj.iscs.util.FileUtil
 import com.grkj.iscs.util.ToastUtils
@@ -35,7 +37,7 @@ class PresentationLoginActivity : BaseActivity<ActivityPresentationLoginBinding>
             Gson().fromJson(str, object : TypeToken<List<PresentationManager.PCardInfoBean>>() {}.type)
         val lockerList = PresentationManager.cardList.filter { it.isLocker }
         for (i in lockerList.indices) {
-            PresentationManager.mLockerList.add(PresentationManager.PLockerBean("上锁人${i + 1}", lockerList[i].rfid))
+            PresentationManager.mLockerList.add(PresentationManager.PLockerBean("上锁人${i + 1}", lockerList[i].rfid, 0))
         }
         val togetherList = PresentationManager.cardList.filter { !it.isLocker }
         for (i in togetherList.indices) {
@@ -43,7 +45,8 @@ class PresentationLoginActivity : BaseActivity<ActivityPresentationLoginBinding>
                 PresentationManager.PLockerTogetherBean(
                     "共锁人${i + 1}",
                     false,
-                    togetherList[i].rfid
+                    togetherList[i].rfid,
+                    0
                 )
             )
         }
@@ -62,22 +65,39 @@ class PresentationLoginActivity : BaseActivity<ActivityPresentationLoginBinding>
                             when (deviceBean.type) {
                                 DEVICE_TYPE_CARD -> {
                                     ModBusController.readPortalCaseCardRfid(dockBean.addr.toInt() - 1) { res ->
-                                        val rfid = res.copyOfRange(3, 11).toHexStrings(false).removeLeadingZeros()
-                                        println("卡片RFID : $rfid")
-                                        if (PresentationManager.cardList.any { it.rfid == rfid && it.isLocker}) {
-                                            ToastUtils.tip("登录成功,欢迎 $rfid")
-                                            val intent = Intent(this, LockerActivity::class.java)
-                                            intent.putExtra("card", rfid)
-                                            startActivity(intent)
-                                            return@readPortalCaseCardRfid
-                                        } else if (PresentationManager.cardList.any { it.rfid == rfid && !it.isLocker}) {
-                                            ToastUtils.tip("登录成功,欢迎 $rfid")
-                                            val intent = Intent(this, LockerTogetherActivity::class.java)
-                                            intent.putExtra("card", rfid)
-                                            startActivity(intent)
-                                            return@readPortalCaseCardRfid
+                                        if (res.size >= 11) {
+                                            val rfid = res.copyOfRange(3, 11).toHexStrings(false).removeLeadingZeros()
+                                            println("卡片RFID : $rfid")
+                                            if(window.decorView.visibility != View.VISIBLE) {
+//                                            ToastUtils.tip("当前页面不可见")
+                                                val current = ActivityUtils.currentActivity()
+                                                if (current is LockerActivity) {
+                                                    val rst = PresentationManager.checkLocker(rfid)
+                                                    if (rst != null) {
+                                                        current.showDlg(rst)
+                                                    }
+                                                } else if (current is LockerTogetherActivity) {
+                                                    val rst = PresentationManager.checkTogetherLocker(rfid)
+                                                    if (rst != null) {
+                                                        current.showDlg(rst)
+                                                    }
+                                                }
+                                            } else {
+                                                if (PresentationManager.cardList.any { it.rfid == rfid && it.isLocker}) {
+                                                    ToastUtils.tip("登录成功,欢迎 $rfid")
+                                                    val intent = Intent(this, LockerActivity::class.java)
+                                                    intent.putExtra("card", rfid)
+                                                    startActivity(intent)
+                                                } else if (PresentationManager.cardList.any { it.rfid == rfid && !it.isLocker}) {
+                                                    ToastUtils.tip("登录成功,欢迎 $rfid")
+                                                    val intent = Intent(this, LockerTogetherActivity::class.java)
+                                                    intent.putExtra("card", rfid)
+                                                    startActivity(intent)
+                                                } else {
+                                                    ToastUtils.tip("登录失败,$rfid 没有权限")
+                                                }
+                                            }
                                         }
-                                        ToastUtils.tip("登录失败,$rfid 没有权限")
                                     }
                                 }
                             }

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

@@ -1,6 +1,7 @@
 package com.grkj.iscs.presentation
 
 import com.grkj.iscs.model.WorkTicketBean
+import com.grkj.iscs.util.ToastUtils
 
 object PresentationManager {
 
@@ -50,9 +51,9 @@ object PresentationManager {
     // 卡片信息
     data class PCardInfoBean(val rfid: String, val isLocker: Boolean)
     // 上锁人
-    data class PLockerBean(val name: String, var rfid: String?)
+    data class PLockerBean(val name: String, var rfid: String?, var status: Int?)       // status:0待上锁 1待解锁 2已解锁
     // 共锁人
-    data class PLockerTogetherBean(var name: String? = null, var isChecked: Boolean = false, var rfid: String?)
+    data class PLockerTogetherBean(var name: String? = null, var isChecked: Boolean = false, var rfid: String?, var status: Int?)   // status:0待上锁 1待解锁 2已解锁
     // 隔离点位
     data class PPointBean(var name: String? = null, var rfid: String? = null)
     // 服务端工作票(完整)
@@ -68,4 +69,39 @@ object PresentationManager {
         var lockerTogetherList: MutableList<PLockerTogetherBean>? = null,  // 共锁人
         var safety: String? = null  // 安全员
     )
+
+
+    fun checkLocker(rfid: String): Int? {
+        val locker = workTicketList.find { it.locker?.rfid == rfid }
+        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 }?.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
+        } else {
+            ToastUtils.tip("未知共锁人状态更新")
+        }
+    }
+
+
+
+    fun checkTogetherLocker(rfid: String): Int? {
+        val locker = workTicketList.find { itList -> itList.lockerTogetherList?.find { it.rfid == rfid } != null }
+        if (locker == null) {
+            return null
+        }
+        return locker.lockerTogetherList?.find { it.rfid == rfid }?.status
+    }
 }