فهرست منبع

1. 调整开锁流程,允许二次取锁
2. 共锁人逻辑调整3-7步骤中未处理过共锁的人员可以进行共锁选择
3. 优化关充电和开充电间隔,防止无法正常获取钥匙

bjb 5 ماه پیش
والد
کامیت
b994411c0a

+ 1 - 1
app/src/main/java/com/grkj/iscs_mars/ble/BleConnectionManager.kt

@@ -583,7 +583,7 @@ object BleConnectionManager {
                 HardwareMode.getCurrentHardwareMode().controlKeyCharge(false, mac) {
                     LogUtil.i("接收到消息,关闭充电")
                     ThreadUtils.runOnIO {
-                        delay(500)
+                        delay(1000)
                         HardwareMode.getCurrentHardwareMode().controlKeyCharge(true, mac) {
                             LogUtil.i("接收到消息,打开充电")
                             unitCont.resume(Unit)

+ 2 - 2
app/src/main/java/com/grkj/iscs_mars/can/CanHardwareHelper.kt

@@ -285,9 +285,9 @@ class CanHardwareHelper : IHardwareHelper {
         deviceKey?.isReady = isReady
     }
 
-    override fun updateAllBuckleStatus(done: () -> Unit) {
+    override fun updateAllBuckleStatus(needCharge: Boolean, done: () -> Unit) {
         // 执行一次更新设备状态
-        CustomCanConfig.instance.canReadyPlugin.startPollingSingleLoop()
+        CustomCanConfig.instance.canReadyPlugin.startPollingSingleLoop(needCharge)
     }
 
     override fun updateKeyPower(power: Int, mac: String) {

+ 42 - 42
app/src/main/java/com/grkj/iscs_mars/can/CanReadyPlugin.kt

@@ -74,7 +74,7 @@ class CanReadyPlugin : CommPlugin {
     }
 
     /** 单协程,逐节点轮询 */
-    fun startPollingSingleLoop() {
+    fun startPollingSingleLoop(needCharge: Boolean = true) {
         pollJob?.cancel()
         pollJob = scope.launch {
             NodeIdHelper.scanRangeLinear({ nodeId ->
@@ -112,7 +112,7 @@ class CanReadyPlugin : CommPlugin {
             }
             HardwareMode.getCurrentHardwareMode().controlAllKeyBuckleClose()
             initLock()    // 打开所有无锁的卡扣、关闭所有有锁的卡扣、读取所有锁的RFID
-            initKey()     // 打开所有无钥匙的卡扣、关闭所有有钥匙的卡扣、读取所有钥匙的RFID
+            initKey(needCharge)     // 打开所有无钥匙的卡扣、关闭所有有钥匙的卡扣、读取所有钥匙的RFID
             while (isActive) {
                 for (nodeId in activeNodes) {
                     try {
@@ -191,7 +191,7 @@ class CanReadyPlugin : CommPlugin {
     /**
      * 初始化钥匙
      */
-    private fun initKey() {
+    private fun initKey(needCharge: Boolean = true) {
         LogUtil.i("initKey : ${HardwareMode.getCurrentHardwareMode().getKeyDockData()}")
         HardwareMode.getCurrentHardwareMode().getKeyDockData().forEach { dockBean ->
             if (dockBean.addr != 3) {
@@ -203,48 +203,48 @@ class CanReadyPlugin : CommPlugin {
                         if (key.isExist) {
                             LogUtil.i("initKey : ${dockBean.addr} : ${key.idx == 0}")
                             HardwareMode.getCurrentHardwareMode().readKeyRfidStr(dockBean.addr, key.idx) { _, rfid ->
-                                    LogUtil.i("初始化钥匙 RFID : $rfid")
-                                    // 更新rfid
-                                    HardwareMode.getCurrentHardwareMode().updateKeyRfid(dockBean.addr, key.idx, rfid)
-                                    // 蓝牙准备操作
-                                    NetApi.getKeyInfo(rfid) { keyInfo ->
-                                        LogUtil.i("getKeyInfo : $rfid - ${keyInfo?.macAddress}")
-                                        HardwareMode.getCurrentHardwareMode().updateKeyNewHardware(
-                                            dockBean.addr,
-                                            key.idx,
-                                            keyInfo == null || keyInfo.keyNfc?.isEmpty() == true || keyInfo.macAddress?.isEmpty() == true
-                                        )
-                                        LogUtil.i("钥匙是否为新设备:${keyInfo == null || keyInfo.keyNfc?.isEmpty() == true || keyInfo.macAddress?.isEmpty() == true}")
-                                        if (keyInfo != null && !keyInfo.macAddress.isNullOrEmpty()) {
-                                            // 更新底座蓝牙Mac信息
-                                            HardwareMode.getCurrentHardwareMode().updateKeyMac(dockBean.addr, key.idx, keyInfo.macAddress)
-                                            HardwareMode.getCurrentHardwareMode().controlKeyBuckle(false, key.idx, dockBean.addr)
-                                            ThreadUtils.runOnIO {
-                                                delay(1000)
-                                                // 已经初始化完成才会去连接
-                                                HardwareMode.getCurrentHardwareMode().controlKeyCharge(true, key.idx, dockBean.addr)
-                                            }
-                                        } else {
-                                            ToastUtils.tip(R.string.get_key_info_fail)
-                                            HardwareMode.getCurrentHardwareMode().controlKeyLockAndCharge(true, key.idx, dockBean.addr)
-                                        }
-                                        val isKeyReady = HardwareMode.getCurrentHardwareMode().getKeyDockData().all {
-                                            it.keyData.filter { it.type == DeviceConst.DEVICE_TYPE_KEY }
-                                                .filterIsInstance<DockBean.KeyBean>()
-                                                .filter { it.isExist }
-                                                .all {
-                                                    LogUtil.i("钥匙信息:${it.rfid}")
-                                                    it.rfid?.isNotEmpty() == true
-                                                }
-                                        }
-                                        LogUtil.i("钥匙是否准备完毕:${isKeyReady}")
-                                        if (isKeyReady) {
-                                            ISCSDomainData.canInitDevice = true
-                                            LogUtil.i("发送初始化完成事件")
-                                            BusinessManager.sendEventMsg(MsgEvent(MsgEventConstants.MSG_EVENT_INIT_KEY_COMPLETE, null))
+                                LogUtil.i("初始化钥匙 RFID : $rfid")
+                                // 更新rfid
+                                HardwareMode.getCurrentHardwareMode().updateKeyRfid(dockBean.addr, key.idx, rfid)
+                                // 蓝牙准备操作
+                                NetApi.getKeyInfo(rfid) { keyInfo ->
+                                    LogUtil.i("getKeyInfo : $rfid - ${keyInfo?.macAddress}")
+                                    HardwareMode.getCurrentHardwareMode().updateKeyNewHardware(
+                                        dockBean.addr,
+                                        key.idx,
+                                        keyInfo == null || keyInfo.keyNfc?.isEmpty() == true || keyInfo.macAddress?.isEmpty() == true
+                                    )
+                                    LogUtil.i("钥匙是否为新设备:${keyInfo == null || keyInfo.keyNfc?.isEmpty() == true || keyInfo.macAddress?.isEmpty() == true}")
+                                    if (keyInfo != null && !keyInfo.macAddress.isNullOrEmpty()) {
+                                        // 更新底座蓝牙Mac信息
+                                        HardwareMode.getCurrentHardwareMode().updateKeyMac(dockBean.addr, key.idx, keyInfo.macAddress)
+                                        HardwareMode.getCurrentHardwareMode().controlKeyBuckle(false, key.idx, dockBean.addr)
+                                        ThreadUtils.runOnIO {
+                                            delay(1000)
+                                            // 已经初始化完成才会去连接
+                                            if (needCharge) HardwareMode.getCurrentHardwareMode().controlKeyCharge(true, key.idx, dockBean.addr)
                                         }
+                                    } else {
+                                        ToastUtils.tip(R.string.get_key_info_fail)
+                                        HardwareMode.getCurrentHardwareMode().controlKeyLockAndCharge(true, key.idx, dockBean.addr)
+                                    }
+                                    val isKeyReady = HardwareMode.getCurrentHardwareMode().getKeyDockData().all {
+                                        it.keyData.filter { it.type == DeviceConst.DEVICE_TYPE_KEY }
+                                            .filterIsInstance<DockBean.KeyBean>()
+                                            .filter { it.isExist }
+                                            .all {
+                                                LogUtil.i("钥匙信息:${it.rfid}")
+                                                it.rfid?.isNotEmpty() == true
+                                            }
+                                    }
+                                    LogUtil.i("钥匙是否准备完毕:${isKeyReady}")
+                                    if (isKeyReady) {
+                                        ISCSDomainData.canInitDevice = true
+                                        LogUtil.i("发送初始化完成事件")
+                                        BusinessManager.sendEventMsg(MsgEvent(MsgEventConstants.MSG_EVENT_INIT_KEY_COMPLETE, null))
                                     }
                                 }
+                            }
                         } else {
                             HardwareMode.getCurrentHardwareMode()
                                 .controlKeyBuckle(true, key.idx, dockBean.addr)

+ 2 - 2
app/src/main/java/com/grkj/iscs_mars/can/IHardwareHelper.kt

@@ -183,7 +183,7 @@ interface IHardwareHelper {
     /**
      * 更新所有状态
      */
-    fun updateAllBuckleStatus(done: () -> Unit)
+    fun updateAllBuckleStatus(needCharge: Boolean, done: () -> Unit)
 
     /**
      * 获取基座数据
@@ -212,7 +212,7 @@ interface IHardwareHelper {
 
     /**
      * 获取新挂锁RFID
-      */
+     */
     fun getNewLockRFID(): List<String>
 
     /**

+ 1 - 1
app/src/main/java/com/grkj/iscs_mars/view/activity/HomeActivity.kt

@@ -175,7 +175,7 @@ class HomeActivity : BaseMvpActivity<IHomeView, HomePresenter, ActivityHomeBindi
 
         BusinessManager.mEventBus.observe(this, observer)
         // 执行一次状态初始化操作
-        HardwareMode.getCurrentHardwareMode().updateAllBuckleStatus { }
+        HardwareMode.getCurrentHardwareMode().updateAllBuckleStatus(false) { }
     }
 
     override fun dispatchKeyEvent(event: KeyEvent): Boolean {

+ 14 - 7
app/src/main/java/com/grkj/iscs_mars/view/dialog/LockerSelectDialog.kt

@@ -3,6 +3,7 @@ package com.grkj.iscs_mars.view.dialog
 import android.content.Context
 import android.graphics.Color
 import android.graphics.drawable.ColorDrawable
+import android.util.Log
 import android.view.View
 import android.view.ViewGroup
 import com.grkj.iscs_mars.R
@@ -89,13 +90,17 @@ class LockerSelectDialog(val ctx: Context, val presenter: WorkerPresenter?) : Ba
                                 ticketUserList.find { ticketUser -> ticketUser.userId == t.userId }?.jobStatus
                             )
                             // 内部共锁人选择
-                            if (selects.any { it.userId == t.userId } && presenter.colockerCanRemove(ctx, addUser, step)) {
-                                val minColockerSize = presenter.getMinColockerSize(ctx) ?: 1
-                                if (selects.size == minColockerSize) {
-                                    ToastUtils.tip(ctx.getString(R.string.keep_at_least_colocker, minColockerSize))
-                                    return@setOnClickListener
+                            if (selects.any { it.userId == t.userId }) {
+                                if (presenter.colockerCanRemove(ctx, addUser, step)) {
+                                    val minColockerSize = presenter.getMinColockerSize(ctx) ?: 1
+                                    if (selects.size == minColockerSize) {
+                                        ToastUtils.tip(ctx.getString(R.string.keep_at_least_colocker, minColockerSize))
+                                        return@setOnClickListener
+                                    }
+                                    selects.removeIf { it.userId == t.userId }
+                                } else {
+                                    ToastUtils.tip(ctx.getString(R.string.can_not_remove_current_colocker))
                                 }
-                                selects.removeIf { it.userId == t.userId }
                             } else {
                                 selects.add(addUser)
                             }
@@ -158,10 +163,12 @@ class LockerSelectDialog(val ctx: Context, val presenter: WorkerPresenter?) : Ba
     /**
      * 设置当前已经选择的人员列表
      */
-    fun setSelectList(list: ArrayList<TicketUserReqVO>, step: Int) {
+    fun setSelectList(list: ArrayList<TicketUserReqVO>, step: Int, ticketUserList: ArrayList<TicketDetailRespVO.JobTicketUserVO>) {
         this.step = step
         this.selects.clear()
         this.selects.addAll(list)
+        this.ticketUserList.clear()
+        this.ticketUserList.addAll(ticketUserList)
         mBinding?.list1?.adapter?.notifyDataSetChanged()
         mBinding?.list2?.adapter?.notifyDataSetChanged()
     }

+ 1 - 1
app/src/main/java/com/grkj/iscs_mars/view/fragment/JobProgressFragment.kt

@@ -119,7 +119,7 @@ class JobProgressFragment(val goBack: () -> Unit, val changePage: (PageChangeBO)
                         mTipDialog?.setType(TipDialog.TYPE_HINT)
                         mTipDialog?.setConfirmListener {
                             BusinessManager.sendLoadingEventMsg(getString(R.string.system_is_processing))
-                            presenter?.handleLockProcess(mPageChangeBO?.ticketId!!)
+                            presenter?.handleLockProcess(mPageChangeBO?.ticketId!!, true)
                         }
                         mTipDialog?.showCancelCountdown(10)
                     } else {

+ 20 - 8
app/src/main/java/com/grkj/iscs_mars/view/fragment/WorkerFragment.kt

@@ -1,6 +1,5 @@
 package com.grkj.iscs_mars.view.fragment
 
-import android.util.Log
 import android.view.View
 import com.grkj.iscs_mars.R
 import com.grkj.iscs_mars.databinding.FragmentWorkerBinding
@@ -87,14 +86,14 @@ class WorkerFragment(val goBack: () -> Unit, val changePage: (PageChangeBO) -> U
         // 选择上锁人
         mBinding?.tvLockSelect?.setOnClickListener {
             mLockerSelectDialog.setTitle(getString(R.string.presentation_hint_locker))
-            mLockerSelectDialog.setSelectList(ArrayList(mLockerSelectedList), mStep)
+            mLockerSelectDialog.setSelectList(ArrayList(mLockerSelectedList), mStep, ArrayList(ticketUserVOList))
             mLockerSelectDialog.setListData(mLockerList, null)
             mLockerSelectDialog.show()
         }
         // 选择共锁人
         mBinding?.tvTogetherSelect?.setOnClickListener {
             mLockerSelectDialog.setTitle(getString(R.string.select_group_locker))
-            mLockerSelectDialog.setSelectList(ArrayList(mColockerSelectedShowList), mStep)
+            mLockerSelectDialog.setSelectList(ArrayList(mColockerSelectedShowList), mStep, ArrayList(ticketUserVOList))
             mLockerSelectDialog.setListData(mColockerInsideList, mColockerOutsideList)
             mLockerSelectDialog.show()
         }
@@ -134,6 +133,11 @@ class WorkerFragment(val goBack: () -> Unit, val changePage: (PageChangeBO) -> U
         mColockerInsideList.clear()
         mColockerOutsideList.clear()
 
+        mBinding?.rvTogetherPersonal?.adapter?.notifyDataSetChanged()
+        mBinding?.rvLockPersonal?.adapter?.notifyDataSetChanged()
+        mBinding?.rvColockerInside?.adapter?.notifyDataSetChanged()
+        mBinding?.rvColockerOutside?.adapter?.notifyDataSetChanged()
+
         mBinding?.llLocker?.visibility = View.VISIBLE
         mBinding?.llColockerInside?.visibility = View.GONE
         mBinding?.llColockerOutside?.visibility = View.GONE
@@ -153,9 +157,18 @@ class WorkerFragment(val goBack: () -> Unit, val changePage: (PageChangeBO) -> U
                 if (user.userRole == USER_ROLE_LOCKER) {
                     //mBinding?.layoutLocker?.root?.visibility = View.VISIBLE
                     //mBinding?.layoutLocker?.tvName?.text = user.userName
-                }
-                if (mLockerSelectedList.find { f -> f.userId == user.userId } == null)
-                    mLockerSelectedList.add(
+                    if (mLockerSelectedList.find { f -> f.userId == user.userId } == null)
+                        mLockerSelectedList.add(
+                            TicketUserReqVO(
+                                user.userId!!,
+                                user.userName!!,
+                                user.userType!!,
+                                user.userRole!!,
+                                user.jobStatus
+                            )
+                        )
+                } else {
+                    mCoLockerSelectedList.add(
                         TicketUserReqVO(
                             user.userId!!,
                             user.userName!!,
@@ -164,6 +177,7 @@ class WorkerFragment(val goBack: () -> Unit, val changePage: (PageChangeBO) -> U
                             user.jobStatus
                         )
                     )
+                }
             }
             // 上锁人默认选择自己
             if (mLockerSelectedList.none { it.userRole == USER_ROLE_LOCKER }) {
@@ -183,7 +197,6 @@ class WorkerFragment(val goBack: () -> Unit, val changePage: (PageChangeBO) -> U
                     //mBinding?.layoutLocker?.tvName?.text = it.userName
                 }
             }
-            Log.d("xiaoming","1- $mLockerSelectedList")
             mColockerSelectedShowList.addAll(mCoLockerSelectedList.filter { it.userRole == USER_ROLE_COLOCKER }.toMutableList())
             mBinding?.rvTogetherPersonal?.adapter?.notifyDataSetChanged()
             mBinding?.rvLockPersonal?.adapter?.notifyDataSetChanged()
@@ -212,7 +225,6 @@ class WorkerFragment(val goBack: () -> Unit, val changePage: (PageChangeBO) -> U
                         )
                 }
             }
-            Log.d("xiaoming","2- $mLockerSelectedList")
             mBinding?.rvLockPersonal?.adapter?.notifyDataSetChanged()
         }
 

+ 1 - 2
app/src/main/java/com/grkj/iscs_mars/view/fragment/WorkshopFragment.kt

@@ -89,8 +89,7 @@ class WorkshopFragment(val changePage: (PageChangeBO) -> Unit) :
             // changePage(PageChangeBO(1, mPointList[0].workstationId, machineryName = mPointList[0].name))
             if (!animator.isRunning) {
                 mBinding?.tvCreateTips?.visibility = View.VISIBLE
-                animator.duration = 2000
-                animator.repeatCount = 3
+                animator.duration = 3000
                 animator.repeatMode = ValueAnimator.REVERSE
                 animator.start()
             }

+ 4 - 3
app/src/main/java/com/grkj/iscs_mars/view/presenter/JobProgressPresenter.kt

@@ -1,7 +1,6 @@
 package com.grkj.iscs_mars.view.presenter
 
 import android.content.Context
-import android.util.Log
 import com.grkj.iscs_mars.BusinessManager
 import com.grkj.iscs_mars.R
 import com.grkj.iscs_mars.enums.HardwareMode
@@ -110,7 +109,7 @@ class JobProgressPresenter : BasePresenter<IJobProgressView>() {
     /**
      * 上锁人上锁流程
      */
-    fun handleLockProcess(ticketId: Long) {
+    fun handleLockProcess(ticketId: Long, forceKey: Boolean = false) {
         SPUtils.resetTicketTakeLockException(ticketId)
         NetApi.checkBeforeAction(ticketId, true) {
             if (!it) {
@@ -144,10 +143,12 @@ class JobProgressPresenter : BasePresenter<IJobProgressView>() {
                         ToastUtils.tip(R.string.please_take_out_ready_device_first)
                     }
                     //是否需要钥匙,如果钥匙已经取出则无法再取钥匙
-                    val isNeedKey =
+                    var isNeedKey =
                         ticketDetail.ticketKeyVOList?.filter { it.keyId == null }?.size != 1 &&
                                 BusinessManager.mDeviceTakeList.none { it.deviceType == DEVICE_TYPE_KEY && it.ticketId == ticketId }
                     LogUtil.i("needLockCount = $needLockCount , readyLockCount = $readyLockCount, realCount = $realCount, isNeedKey = $isNeedKey")
+                    // 如果强制取钥匙,这里开放即可
+                    if (forceKey) isNeedKey = true
                     BusinessManager.checkEquipCount(realCount, isNeedKey) { keyPair, lockMap ->
                         val lockCount = lockMap.flatMap { it.value }.count()
                         //首先你不需要挂锁,其次你的所有点位都禁止解锁的,说明已经锁上了,直接虚拟上锁就行了,补全钥匙的数据

+ 2 - 2
app/src/main/java/com/grkj/iscs_mars/view/step_mode/StepMode2.kt

@@ -27,9 +27,9 @@ class StepMode2 : IStepMode {
                 true
             }
 
-            5 -> {
+            5, 6, 7 -> {
                 if (data.jobStatus == null) {
-                    false
+                    true
                 } else {
                     data.jobStatus < 4
                 }

+ 0 - 1
app/src/main/java/com/grkj/iscs_mars/view/widget/CustomMarkLayerSample.kt

@@ -160,7 +160,6 @@ class CustomMarkLayerSample @JvmOverloads constructor(
 
             if (isClickMark) break
         }
-        Log.d("xiaoming","COUNT ${event.pointerCount} ${event.action}")
         if (listener != null && isClickMark && event.pointerCount == 1) {
             listener!!.markIsClick(num, btnIndex, isClickIcon)
             mapView.refreshWorld()