PresentationLoginActivity.kt 7.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141
  1. package com.grkj.iscs.presentation
  2. import android.content.Intent
  3. import android.os.Environment
  4. import android.view.View
  5. import com.google.gson.Gson
  6. import com.google.gson.reflect.TypeToken
  7. import com.grkj.iscs.BusinessManager
  8. import com.grkj.iscs.base.BaseActivity
  9. import com.grkj.iscs.databinding.ActivityPresentationLoginBinding
  10. import com.grkj.iscs.extentions.removeLeadingZeros
  11. import com.grkj.iscs.extentions.toHexStrings
  12. import com.grkj.iscs.modbus.ModBusController
  13. import com.grkj.iscs.model.DeviceConst
  14. import com.grkj.iscs.model.DeviceConst.DEVICE_TYPE_CARD
  15. import com.grkj.iscs.model.DeviceConst.DEVICE_TYPE_KEY
  16. import com.grkj.iscs.model.DeviceConst.DEVICE_TYPE_LOCK
  17. import com.grkj.iscs.model.DeviceConst.DOCK_TYPE_PORTABLE
  18. import com.grkj.iscs.model.WorkTicketStatusBean
  19. import com.grkj.iscs.util.ActivityUtils
  20. import com.grkj.iscs.util.Executor
  21. import com.grkj.iscs.util.FileUtil
  22. import com.grkj.iscs.util.ToastUtils
  23. class PresentationLoginActivity : BaseActivity<ActivityPresentationLoginBinding>() {
  24. override val viewBinding: ActivityPresentationLoginBinding
  25. get() = ActivityPresentationLoginBinding.inflate(layoutInflater)
  26. override fun initView() {
  27. val path =
  28. Environment.getExternalStoragePublicDirectory(Environment.DIRECTORY_DOWNLOADS).absolutePath + "/presentation/presentation.txt"
  29. val str = FileUtil.readTxt(path)
  30. if (str.isEmpty()) {
  31. ToastUtils.tip("未找到 presentation.txt 文件,请先在手机Download目录创建 presentation 文件夹,并将 presentation.txt 文件放入")
  32. return
  33. }
  34. println("Mac Json : $str")
  35. PresentationManager.cardList =
  36. Gson().fromJson(str, object : TypeToken<List<PresentationManager.PCardInfoBean>>() {}.type)
  37. if (PresentationManager.cardList.isEmpty()) {
  38. ToastUtils.tip("配置列表为空")
  39. return
  40. }
  41. PresentationManager.keyMac = PresentationManager.cardList.first().keyMac
  42. val lockerList = PresentationManager.cardList.filter { it.isLocker }
  43. for (i in lockerList.indices) {
  44. PresentationManager.mLockerList.add(PresentationManager.PLockerBean("上锁人${i + 1}", lockerList[i].rfid, 0))
  45. }
  46. val togetherList = PresentationManager.cardList.filter { !it.isLocker }
  47. for (i in togetherList.indices) {
  48. PresentationManager.mLockerTogetherList.add(
  49. PresentationManager.PLockerTogetherBean(
  50. "共锁人${i + 1}",
  51. false,
  52. togetherList[i].rfid,
  53. 0
  54. )
  55. )
  56. }
  57. handleLoading(true, "正在初始化设备...")
  58. BusinessManager.connectDock(true)
  59. // TODO 时间需要由ModBusController重置后来通知
  60. Executor.delayOnMain(2000) {
  61. handleLoading(false)
  62. }
  63. BusinessManager.registerStatusListener(this) { dockBean ->
  64. when (dockBean.type) {
  65. DOCK_TYPE_PORTABLE -> {
  66. dockBean.deviceList.forEach { deviceBean ->
  67. if (deviceBean.isExist) {
  68. when (deviceBean.type) {
  69. DEVICE_TYPE_CARD -> {
  70. ModBusController.readPortalCaseCardRfid(dockBean.addr.toInt() - 1) { res ->
  71. if (res.size >= 11) {
  72. val rfid = res.copyOfRange(3, 11).toHexStrings(false).removeLeadingZeros()
  73. println("卡片RFID : $rfid")
  74. if(window.decorView.visibility != View.VISIBLE) {
  75. // ToastUtils.tip("当前页面不可见")
  76. val current = ActivityUtils.currentActivity()
  77. if (current is LockerActivity) {
  78. current.showDlg(rfid)
  79. } else if (current is LockerTogetherActivity) {
  80. current.showDlg(rfid)
  81. }
  82. } else {
  83. if (PresentationManager.cardList.any { it.rfid == rfid && it.isLocker}) {
  84. ToastUtils.tip("登录成功,欢迎 $rfid")
  85. val intent = Intent(this, LockerActivity::class.java)
  86. intent.putExtra("card", rfid)
  87. startActivity(intent)
  88. } else if (PresentationManager.cardList.any { it.rfid == rfid && !it.isLocker}) {
  89. ToastUtils.tip("登录成功,欢迎 $rfid")
  90. val intent = Intent(this, LockerTogetherActivity::class.java)
  91. intent.putExtra("card", rfid)
  92. startActivity(intent)
  93. } else {
  94. ToastUtils.tip("登录失败,$rfid 没有权限")
  95. }
  96. }
  97. }
  98. }
  99. }
  100. DEVICE_TYPE_KEY -> {
  101. Executor.runOnMain {
  102. BusinessManager.getTicketStatusBusiness(PresentationManager.keyMac, this) { b, s, rst ->
  103. handleLoading(b, s)
  104. if (!s.isNullOrEmpty() && s.startsWith("工作票完成接收")) {
  105. val ticket = s.substring(2)
  106. val ticketStatusBean = Gson().fromJson(ticket, WorkTicketStatusBean::class.java)
  107. PresentationManager.updateWorkTicket(ticketStatusBean)
  108. }
  109. }
  110. }
  111. }
  112. DEVICE_TYPE_LOCK -> {
  113. Executor.runOnMain {
  114. ModBusController.readLockRfid(dockBean.addr.toInt() - 1, deviceBean.idx) { res ->
  115. val rfid = res.copyOfRange(3, 11).toHexStrings(false).removeLeadingZeros()
  116. PresentationManager.updateLockReturnStatus(rfid)
  117. }
  118. }
  119. }
  120. }
  121. }
  122. }
  123. }
  124. }
  125. }
  126. }
  127. override fun onDestroy() {
  128. super.onDestroy()
  129. ModBusController.unregisterListener(this)
  130. }
  131. }