PresentationManager.kt 9.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231
  1. package com.grkj.iscs.presentation
  2. import com.google.gson.Gson
  3. import com.grkj.iscs.modbus.ModBusController
  4. import com.grkj.iscs.model.DeviceConst
  5. import com.grkj.iscs.model.presentation.WorkTicketBean
  6. import com.grkj.iscs.model.presentation.WorkTicketStatusBean
  7. import com.grkj.iscs.util.Executor
  8. import com.grkj.iscs.util.ToastUtils
  9. import com.grkj.iscs.util.log.LogUtil
  10. object PresentationManager {
  11. // val cardList = mutableListOf("267747D5", "34A347D5", "464947D5")
  12. var keyMac = "64:E8:33:47:59:7A"
  13. // val keyMac = "64:E8:33:47:59:42"
  14. var cardList: List<PCardInfoBean> = mutableListOf()
  15. val mSopList = mutableListOf(
  16. PresentationBean(
  17. 1,
  18. "组装车间",
  19. "打包线1",
  20. "组装包装车间-打包线1-保养",
  21. "组装包装车间-打包线1-保养",
  22. "SOP001",
  23. "保养",
  24. mutableListOf(PPointBean("E-1", "1DA0C66D031080"), PPointBean("E-2", "1DCAD26D031080"))
  25. ),
  26. PresentationBean(
  27. 2,
  28. "拆解车间",
  29. "打包线2",
  30. "拆解包装车间-打包线2-维护",
  31. "拆解包装车间-打包线2-维护",
  32. "SOP002",
  33. "维护",
  34. mutableListOf(PPointBean("E-3", "1DA0C66D031080"), PPointBean("E-4", "1DCAD26D031080"))
  35. )
  36. )
  37. // 上锁人
  38. // val mLockerList = mutableListOf("上锁人1", "上锁人2", "上锁人3")
  39. val mLockerList = mutableListOf<PLockerBean>()
  40. // 安全员
  41. val mSafetyList = mutableListOf("安全员1", "安全员2", "安全员3")
  42. // 共锁人
  43. val mLockerTogetherList = mutableListOf<PLockerTogetherBean>()
  44. // val mLockerTogetherList = mutableListOf(
  45. // PLockerTogetherBean("共锁人1", false, null),
  46. // PLockerTogetherBean("共锁人2", false, null)
  47. // )
  48. var workTicketList = mutableListOf<PServerTicket>()
  49. // 卡片信息
  50. data class PCardInfoBean(val rfid: String, val isLocker: Boolean, val keyMac: String) {
  51. override fun toString(): String {
  52. return "PCardInfoBean(rfid='$rfid', isLocker=$isLocker, keyMac='$keyMac')"
  53. }
  54. }
  55. // 上锁人
  56. data class PLockerBean(val name: String, var rfid: String?, var status: Int?) { // status:0待上锁 1待解锁 2已解锁
  57. override fun toString(): String {
  58. return "PLockerBean(name='$name', rfid=$rfid, status=$status)"
  59. }
  60. }
  61. // 共锁人
  62. data class PLockerTogetherBean(var name: String? = null, var isChecked: Boolean = false, var rfid: String?, var status: Int?) { // status:0待上锁 1待解锁 2已解锁
  63. override fun toString(): String {
  64. return "PLockerTogetherBean(name=$name, isChecked=$isChecked, rfid=$rfid, status=$status)"
  65. }
  66. }
  67. // 隔离点位
  68. data class PPointBean(var name: String? = null, var rfid: String? = null) {
  69. override fun toString(): String {
  70. return "PPointBean(name=$name, rfid=$rfid)"
  71. }
  72. }
  73. // 服务端工作票(完整)
  74. data class PServerTicket(
  75. var ticketId: Int? = null,
  76. var sopId: Long? = null,
  77. var sop: PresentationBean? = null,
  78. var workTicketBean: WorkTicketBean? = null,
  79. var startTime: String? = null,
  80. var endTime: String? = null,
  81. var status: Int? = null, // 0:待上锁人上锁 1:部分共锁人上锁 2:待共锁人解锁 3:部分共锁人解锁 4:待上锁人解锁 5:待归还设备 6:已完成
  82. var locker: PLockerBean? = null, // 上锁人
  83. var lockerTogetherList: MutableList<PLockerTogetherBean>? = null, // 共锁人
  84. var safety: String? = null, // 安全员
  85. var isAllLocksReturned: Boolean = false // 是否归还所有锁具
  86. ) {
  87. override fun toString(): String {
  88. return "PServerTicket(ticketId=$ticketId, sopId=$sopId, sop=$sop, workTicketBean=$workTicketBean, startTime=$startTime, endTime=$endTime, status=$status, locker=$locker, lockerTogetherList=$lockerTogetherList, safety=$safety)"
  89. }
  90. }
  91. fun checkLocker(rfid: String): Int? {
  92. val locker = workTicketList.find { it.locker?.rfid == rfid && it.status != 6 }?.locker
  93. if (locker == null) {
  94. return null
  95. }
  96. return locker.status
  97. }
  98. fun updateTogetherLockerStatus(rfid: String, rst: Int) {
  99. if (rst == 1 || rst == 0) {
  100. workTicketList.find { it.lockerTogetherList?.find { it.rfid == rfid } != null }?.lockerTogetherList?.find { it.rfid == rfid }?.status = rst + 1
  101. } else {
  102. ToastUtils.tip("未知共锁人状态更新")
  103. }
  104. }
  105. fun checkTogetherLocker(rfid: String): Int? {
  106. val pServerTicket = workTicketList.find { itList -> itList.lockerTogetherList?.find { it.rfid == rfid } != null }
  107. if (pServerTicket == null) {
  108. return null
  109. }
  110. val lockerStatus = pServerTicket.locker?.status
  111. val togetherStatus = pServerTicket.lockerTogetherList?.find { it.rfid == rfid }?.status
  112. if (lockerStatus == 0) {
  113. return 100
  114. }
  115. return togetherStatus
  116. }
  117. fun updateWorkTicket(ticketStatusBean: WorkTicketStatusBean) {
  118. println("updateWorkTicket1 : $ticketStatusBean")
  119. println("updateWorkTicket2 : $workTicketList")
  120. val statusTicketList = ticketStatusBean.data
  121. if (statusTicketList.isNullOrEmpty()) {
  122. ToastUtils.tip("钥匙无工作票数据")
  123. return
  124. }
  125. val taskCodeList = statusTicketList.map { it.taskCode }
  126. val pServerTicket = workTicketList.find { it.workTicketBean?.data!!.any { taskCodeList.contains(it.taskCode) } }
  127. val serverTicketList = pServerTicket?.workTicketBean?.data
  128. if (serverTicketList.isNullOrEmpty()) {
  129. ToastUtils.tip("无服务端工作票数据")
  130. return
  131. }
  132. serverTicketList.forEach { itServerTicket ->
  133. var isLockerDone = true
  134. itServerTicket.dataList?.forEach { itServerTask ->
  135. statusTicketList.forEach { itStatusTicket ->
  136. itStatusTicket.dataList?.forEach { itStatusTask ->
  137. if (itServerTask.equipRfidNo == itStatusTask.equipRfidNo) {
  138. itServerTask.infoRfidNo = itStatusTask.infoRfidNo
  139. if (itStatusTask.target == 0) {
  140. itServerTask.target = 1
  141. }
  142. if (itStatusTask.closed == 0) {
  143. isLockerDone = false
  144. println("测试打印 : 有未完成的")
  145. }
  146. }
  147. }
  148. }
  149. }
  150. if (pServerTicket.locker?.status == 0) {
  151. pServerTicket.status = 1
  152. } else if (pServerTicket.locker?.status == 1) {
  153. if (pServerTicket.isAllLocksReturned) {
  154. pServerTicket.status = 6
  155. } else {
  156. pServerTicket.status = 5
  157. }
  158. }
  159. if (isLockerDone) {
  160. println("测试打印 : 上锁人状态 - ${pServerTicket.locker?.status}")
  161. if (pServerTicket.locker?.status == 0 || pServerTicket.locker?.status == 1) {
  162. pServerTicket.locker?.status = pServerTicket.locker!!.status!! + 1
  163. }
  164. }
  165. }
  166. println("updateWorkTicket3 : $workTicketList")
  167. }
  168. fun getTicketJson(): String {
  169. val workTicketBean = workTicketList.find { it.workTicketBean?.cardNo == ticketCardNo && (it.status == 0 || it.status == 1) }?.workTicketBean
  170. if (workTicketBean == null) {
  171. ToastUtils.tip("暂无可处理的工作票")
  172. }
  173. val jsonStr = Gson().toJson(workTicketBean)
  174. LogUtil.i("getTicketJson : $jsonStr")
  175. return jsonStr
  176. }
  177. var ticketCardNo = ""
  178. fun updateLockReturnStatus(rfid: String) {
  179. Executor.runOnMain {
  180. val pServerTicket = workTicketList.find { it.workTicketBean?.data!!.any { it.dataList!!.any { it.infoRfidNo == rfid } } }
  181. pServerTicket?.let {
  182. val dockList = ModBusController.getDockByType(DeviceConst.DOCK_TYPE_PORTABLE)
  183. if (dockList.isEmpty()) {
  184. return@runOnMain
  185. }
  186. val dockLockRfidList = dockList[0].getLockList().map { it.rfid }
  187. val ticketLockRfidList = mutableListOf<String?>()
  188. // 遍历 data 列表
  189. it.workTicketBean?.data?.forEach { dataDto ->
  190. // 遍历 dataList 列表
  191. dataDto.dataList?.forEach { dataListDto ->
  192. // 添加 infoRfidNo 到集合中
  193. ticketLockRfidList.add(dataListDto.infoRfidNo)
  194. }
  195. }
  196. it.isAllLocksReturned = dockLockRfidList.containsAll(ticketLockRfidList)
  197. if (it.isAllLocksReturned && it.status == 5) {
  198. ToastUtils.tip("工作票已完成")
  199. it.status = 6
  200. }
  201. }
  202. }
  203. }
  204. }