Browse Source

补充定位日志打印;修复工作票生成错误和参数缺失;补充接口返回字段;修复共锁人刷卡弹框不显示问题;修复弹框窗体泄露问题;优化下发工作票流程,规避减少异常场景;注释冗余代码

Frankensteinly 9 tháng trước cách đây
mục cha
commit
1854347cd0

+ 22 - 8
app/src/main/java/com/grkj/iscs/BusinessManager.kt

@@ -36,6 +36,7 @@ import com.grkj.iscs.model.DeviceConst.DOCK_TYPE_LOCK
 import com.grkj.iscs.model.DeviceConst.DOCK_TYPE_PORTABLE
 import com.grkj.iscs.model.bo.WorkTicketGetBO
 import com.grkj.iscs.model.bo.WorkTicketSendBO
+import com.grkj.iscs.model.bo.WorkTicketSendBO.LockListBO
 import com.grkj.iscs.model.vo.ticket.LockPointUpdateReqVO
 import com.grkj.iscs.model.vo.ticket.TicketDetailRespVO
 import com.grkj.iscs.util.ActivityUtils
@@ -370,6 +371,7 @@ object BusinessManager {
      * 注册连接监听
      */
     fun registerConnectListener(mac: String, callBack: ((Boolean, BleBean?) -> Unit)? = null) {
+        LogUtil.i("registerConnectListener : $mac")
         if (connectListeners.any { it.mac == mac }) {
             return
         }
@@ -387,6 +389,7 @@ object BusinessManager {
      * 连接监听反注册
      */
     fun unregisterConnectListener(mac: String, bleBean: BleBean? = null) {
+        LogUtil.i("unregisterConnectListener : $mac")
         connectListeners.find { it.mac == mac }?.let {
             // TODO 移除的时候是否要回调待定
 //            it.callBack?.invoke(true, bleBean)
@@ -477,7 +480,7 @@ object BusinessManager {
             }
 
             override fun onScanFinished(scanResultList: MutableList<BleDevice>?) {
-                LogUtil.i("onScanFinished: $mac - $scanResultList")
+                LogUtil.i("onScanFinished: $mac")
                 loadingCallBack?.invoke(false, null, null)
                 if (connectListeners.any { it.mac == mac }) {
                     LogUtil.w("$mac is not scanned")
@@ -513,7 +516,7 @@ object BusinessManager {
 
                 override fun onConnectSuccess(bleDevice: BleDevice?, gatt: BluetoothGatt?, status: Int) {
                     loadingCallBack?.invoke(false, null, null)
-                    LogUtil.i("onConnectSuccess : $bleDevice")
+                    LogUtil.i("onConnectSuccess : ${bleDevice?.mac}")
                     bleDevice?.let {
                         val bleBean = BleBean(it)
                         deviceList.add(bleBean)
@@ -631,12 +634,13 @@ object BusinessManager {
     fun sendTicketBusiness(
         mac: String,
         ticketDetail: TicketDetailRespVO,
+        lockList: MutableList<String?>?,
         activity: AppCompatActivity,
         loadingCallBack: ((Boolean, String?, Boolean?) -> Unit)?,
     ) {
         registerConnectListener(mac) { isDone, bleBean ->
             if (!isDone) {
-                sendTicketBusiness(mac, ticketDetail, activity, loadingCallBack)
+                sendTicketBusiness(mac, ticketDetail, lockList, activity, loadingCallBack)
                 return@registerConnectListener
             }
             if (bleBean == null) {
@@ -644,7 +648,7 @@ object BusinessManager {
                 return@registerConnectListener
             }
             // 单bleBean json赋值
-            bleBean.ticketSend = generateTicketSendJson(ticketDetail)
+            bleBean.ticketSend = generateTicketSendJson(ticketDetail, lockList)
             bleBean.ticketSend?.let { itJson ->
                 sendTicket(itJson, bleBean.bleDevice, loadingCallBack)
             }
@@ -690,9 +694,9 @@ object BusinessManager {
      *
      * @param vo 工作票详情
      */
-    private fun generateTicketSendJson(vo: TicketDetailRespVO): String {
+    private fun generateTicketSendJson(vo: TicketDetailRespVO, lockList: MutableList<String?>?): String {
         // 用ticketStatus的"待上锁"进行判断
-        val isLock = vo.ticketStatus == Constants.TICKET_STATUS_READY_TO_LOCK
+        val isLock = (vo.ticketStatus == Constants.TICKET_STATUS_NOT_STARTED || vo.ticketStatus == Constants.TICKET_STATUS_READY_TO_LOCK)
         val bo = WorkTicketSendBO(
             cardNo = SPUtils.getLoginUser(MyApplication.instance!!.applicationContext)?.cardNfc,
         )
@@ -711,9 +715,11 @@ object BusinessManager {
                     dataId = pointVO.pointId?.toInt(),
                     equipRfidNo = pointVO.pointNfc,
                     equipName = pointVO.pointName,
-                    infoRfidNo = pointVO.pointName,
                     target = if (isLock) 0 else 1
                 )
+                if (!isLock) {
+                    task.infoRfidNo = pointVO.lockNfc
+                }
                 pointVO.prePointId?.let {
                     task.prevId = it.toInt()
                 }
@@ -727,10 +733,17 @@ object BusinessManager {
         dataBO.dataList = taskList
         bo.data = mutableListOf(dataBO)
         if (isLock) {
-            bo.lockList = mutableListOf()
+            // TODO 挂锁数组
+            if (!lockList.isNullOrEmpty()) {
+                bo.lockList = mutableListOf()
+                lockList.forEachIndexed { index, s ->
+                    bo.lockList?.add(LockListBO((index + 1).toString(), s))
+                }
+            }
         }
         // TODO partList 待补充
         val jsonStr = Gson().toJson(bo)
+        LogUtil.i("json : $jsonStr")
         return jsonStr
     }
 
@@ -782,6 +795,7 @@ object BusinessManager {
             loadingCallBack?.invoke(false, null, null)
             if (isSuccess) {
                 // 下发完毕,切换工作模式
+                LogUtil.i("工作票下发完毕")
                 loadingCallBack?.invoke(true, "切换钥匙为工作模式", null)
                 BleCmdManager.switchMode(STATUS_WORK, bleBean.bleDevice, object : CustomBleWriteCallback() {
                     override fun onWriteSuccess(current: Int, total: Int, justWrite: ByteArray?) {

+ 5 - 5
app/src/main/java/com/grkj/iscs/modbus/ModBusController.kt

@@ -437,25 +437,25 @@ object ModBusController {
     }
 
     fun printDockInfo() {
-        println("当前底座列表 : $dockList")
+        LogUtil.i("当前底座列表 : $dockList")
         dockList.forEach { dockBean ->
             when (dockBean.type) {
                 DOCK_TYPE_LOCK -> {
                     dockBean.getLockList().forEach { lockBean ->
-                        println("${dockBean.addr}锁${lockBean.idx} : ${lockBean.rfid}")
+                        LogUtil.i("${dockBean.addr}锁${lockBean.idx} : ${lockBean.rfid}")
                     }
                 }
                 DOCK_TYPE_KEY -> {
                     dockBean.getKeyList().forEach { keyBean ->
-                        println("${dockBean.addr}钥${keyBean.idx} : ${keyBean.rfid}")
+                        LogUtil.i("${dockBean.addr}钥${keyBean.idx} : ${keyBean.rfid}")
                     }
                 }
                 DOCK_TYPE_PORTABLE -> {
                     dockBean.getLockList().forEach { lockBean ->
-                        println("${dockBean.addr}柜锁${lockBean.idx} : ${lockBean.rfid}")
+                        LogUtil.i("${dockBean.addr}柜锁${lockBean.idx} : ${lockBean.rfid}")
                     }
                     dockBean.getKeyList().forEach { keyBean ->
-                        println("${dockBean.addr}柜钥${keyBean.idx} : ${keyBean.rfid}")
+                        LogUtil.i("${dockBean.addr}柜钥${keyBean.idx} : ${keyBean.rfid}")
                     }
                 }
             }

+ 1 - 0
app/src/main/java/com/grkj/iscs/model/vo/ticket/TicketDetailRespVO.kt

@@ -47,6 +47,7 @@ data class TicketDetailRespVO(
         val lockTypeIcon: String?,
         val lockTypeImg: String?,
         val lockId: Long?,
+        val lockNfc: String?,
         val prePointId: Long?)
 
     data class UserVO(

+ 1 - 0
app/src/main/java/com/grkj/iscs/model/vo/ticket/TicketEquipDetailRespVO.kt

@@ -34,6 +34,7 @@ data class TicketEquipDetailRespVO(
         val recordId: Long?,
         val ticketId: Long?,
         val lockId: Long?,
+        val lockNfc: String?,
         val fromHardwareId: Long?,
         val toHardwareId: Long?,
         val isolationPointId: Long?,

+ 2 - 0
app/src/main/java/com/grkj/iscs/util/NetApi.kt

@@ -301,6 +301,8 @@ object NetApi {
             { res, _, _ ->
                 res?.let {
                     callBack.invoke(getRefBean(it))
+                } ?: run {
+                    callBack.invoke(null)
                 }
             }, isGet = true, isAuth = true
         )

+ 8 - 5
app/src/main/java/com/grkj/iscs/view/dialog/TipDialog.kt

@@ -5,6 +5,7 @@ import android.view.View
 import com.grkj.iscs.R
 import com.grkj.iscs.view.base.BaseDialog
 import com.grkj.iscs.databinding.DialogTipBinding
+import com.grkj.iscs.util.Executor
 import java.util.Timer
 import java.util.TimerTask
 
@@ -65,12 +66,14 @@ class TipDialog(ctx: Context) : BaseDialog<DialogTipBinding>(ctx) {
         mTimer = Timer().apply {
             schedule(object : TimerTask() {
                 override fun run() {
-                    mBinding?.btnCancel?.text = context.getString(R.string.cancel_countdown, countSeconds)
-                    if (countSeconds == 0) {
-                        dismiss()
-                        cancelListener?.invoke()
+                    Executor.runOnMain {
+                        mBinding?.btnCancel?.text = context.getString(R.string.cancel_countdown, countSeconds)
+                        if (countSeconds == 0) {
+                            dismiss()
+                            cancelListener?.invoke()
+                        }
+                        countSeconds--
                     }
-                    countSeconds--
                 }
             }, 0, 1000)
         }

+ 6 - 5
app/src/main/java/com/grkj/iscs/view/fragment/JobProgressFragment.kt

@@ -109,21 +109,21 @@ class JobProgressFragment(val goBack: () -> Unit) :
             if (it == null) {
                 return@getCardInfoByNfc
             }
-            mTipDialog ?: {
-                mTipDialog = TipDialog(requireActivity())
+            if (mTipDialog == null) {
+                mTipDialog = TipDialog(requireContext())
             }
             val jobStatus = mUserList.find { itUser -> itUser.userId == it.userId }?.jobStatus
             if (jobStatus == null || jobStatus >= 5) {
                 return@getCardInfoByNfc
             }
             if (jobStatus < 4) {
-                mTipDialog?.setTip(getString(R.string.confirm_to_colock, it.userName))
+                mTipDialog?.setTip(getString(R.string.confirm_to_colock, cardNo))
             } else {
-                mTipDialog?.setTip(getString(R.string.confirm_to_uncolock, it.userName))
+                mTipDialog?.setTip(getString(R.string.confirm_to_uncolock, cardNo))
             }
             mTipDialog?.setConfirmListener {
                 presenter?.updateColockerStatus(mPageChangeBO?.ticketId!!, cardNo, if (jobStatus < 4) "4" else "5") {
-
+                    // TODO 刷新界面
                 }
             }
             mTipDialog?.showCancelCountdown(10)
@@ -133,6 +133,7 @@ class JobProgressFragment(val goBack: () -> Unit) :
     override fun onPause() {
         super.onPause()
         mStep = 0
+        mTipDialog?.dismiss()
     }
 
     override fun initPresenter(): JobProgressPresenter {

+ 36 - 18
app/src/main/java/com/grkj/iscs/view/presenter/JobProgressPresenter.kt

@@ -18,6 +18,7 @@ import com.grkj.iscs.util.Executor
 import com.grkj.iscs.util.NetApi
 import com.grkj.iscs.util.SPUtils
 import com.grkj.iscs.util.ToastUtils
+import com.grkj.iscs.util.log.LogUtil
 import com.grkj.iscs.view.base.BaseActivity
 import com.grkj.iscs.view.base.BasePresenter
 import com.grkj.iscs.view.iview.IJobProgressView
@@ -87,26 +88,32 @@ class JobProgressPresenter : BasePresenter<IJobProgressView>() {
                         // 取锁具、取钥匙
                         val needLockCount = equipDetail?.ticketLockVOList?.filter { it.lockId == null }?.size ?: 0
                         BusinessManager.checkEquipCount(needLockCount) { keyPair, lockMap ->
-                            val list = mutableListOf<LockTakeUpdateReqVO>()
-                            lockMap.forEach { (_, lockList) ->
-                                list.addAll(lockList.map { LockTakeUpdateReqVO(ticketDetail.ticketId, it.rfid, mContext!!.serialNo()) })
+                            val lockList = mutableListOf<LockTakeUpdateReqVO>()
+                            lockMap.forEach { (_, list) ->
+                                lockList.addAll(list.map { LockTakeUpdateReqVO(ticketDetail.ticketId, it.rfid, mContext!!.serialNo()) })
                             }
-                            NetApi.updateLockTake(list) {
+                            NetApi.updateLockTake(lockList) {
                                 if (it == true) {
                                     lockMap.forEach { (addr, lockList) ->
                                         // 开锁卡扣
                                         ModBusController.controlLockBuckle(true, addr.toInt() - 1, lockList.map { it.idx }.toMutableList())
                                     }
                                 }
-                            }
-                            // null表示锁具数量不够,不给钥匙
-                            if (keyPair != null) {
-                                // 更新钥匙信息
-                                NetApi.updateKeyTake(ticketDetail.ticketId!!, keyPair.second?.rfid!!, mContext!!.serialNo()) {
-                                    if (it) {
-                                        // 下发工作票
-                                        BusinessManager.sendTicketBusiness(keyPair.second?.mac!!, ticketDetail, ActivityUtils.currentActivity() as BaseActivity<*>) { b, s, rst ->
-
+                                // 更新锁具信息后再发,防止后台失败
+                                // null表示锁具数量不够,不给钥匙
+                                if (keyPair != null) {
+                                    // 更新钥匙信息
+                                    NetApi.updateKeyTake(ticketDetail.ticketId!!, keyPair.second?.rfid!!, mContext!!.serialNo()) {
+                                        if (it) {
+                                            // 下发工作票
+                                            BusinessManager.sendTicketBusiness(
+                                                keyPair.second?.mac!!,
+                                                ticketDetail,
+                                                lockList.map { it.lockNfc }.toMutableList(),
+                                                ActivityUtils.currentActivity() as BaseActivity<*>
+                                            ) { b, s, rst ->
+                                                
+                                            }
                                         }
                                     }
                                 }
@@ -122,9 +129,16 @@ class JobProgressPresenter : BasePresenter<IJobProgressView>() {
                             // 更新钥匙信息
                             NetApi.updateKeyTake(ticketDetail.ticketId!!, keyPair.second?.rfid!!, mContext!!.serialNo()) {
                                 if (it) {
-                                    // 下发工作票
-                                    BusinessManager.sendTicketBusiness(keyPair.second?.mac!!, ticketDetail, ActivityUtils.currentActivity() as BaseActivity<*>) { b, s, rst ->
-                                        (ActivityUtils.currentActivity() as BaseActivity<*>).handleLoading(b, s)
+                                    NetApi.getTicketEquipDetail(ticketId) { equipDetail ->
+                                        // 下发工作票
+                                        BusinessManager.sendTicketBusiness(
+                                            keyPair.second?.mac!!,
+                                            ticketDetail,
+                                            equipDetail?.ticketLockVOList?.map { it.lockNfc }?.toMutableList(),
+                                            ActivityUtils.currentActivity() as BaseActivity<*>
+                                        ) { b, s, rst ->
+                                            (ActivityUtils.currentActivity() as BaseActivity<*>).handleLoading(b, s)
+                                        }
                                     }
                                 }
                             }
@@ -132,7 +146,6 @@ class JobProgressPresenter : BasePresenter<IJobProgressView>() {
                     }
                 }
             }
-
         }
     }
 
@@ -153,7 +166,12 @@ class JobProgressPresenter : BasePresenter<IJobProgressView>() {
                     NetApi.updateKeyTake(ticketDetail.ticketId!!, keyPair.second?.rfid!!, mContext!!.serialNo()) {
                         if (it) {
                             // 下发工作票
-                            BusinessManager.sendTicketBusiness(keyPair.second?.mac!!, ticketDetail, ActivityUtils.currentActivity() as BaseActivity<*>) { b, s, rst ->
+                            BusinessManager.sendTicketBusiness(
+                                keyPair.second?.mac!!,
+                                ticketDetail,
+                                null,
+                                ActivityUtils.currentActivity() as BaseActivity<*>
+                            ) { b, s, rst ->
                                 (ActivityUtils.currentActivity() as BaseActivity<*>).handleLoading(b, s)
                             }
                         }

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

@@ -104,9 +104,9 @@ 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, rst ->
-
-                                }
+//                                BusinessManager.sendTicketBusiness(keyPair.second?.mac!!, ticketDetail, mvpView as TicketDetailActivity) { b, s, rst ->
+//
+//                                }
                             }
                         }
                     }
@@ -121,9 +121,9 @@ 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, rst ->
-                                    (mvpView as TicketDetailActivity).handleLoading(b, s)
-                                }
+//                                BusinessManager.sendTicketBusiness(keyPair.second?.mac!!, ticketDetail, mvpView as TicketDetailActivity) { b, s, rst ->
+//                                    (mvpView as TicketDetailActivity).handleLoading(b, s)
+//                                }
                             }
                         }
                     }