|
@@ -53,6 +53,7 @@ import java.math.BigDecimal
|
|
|
import java.text.DateFormat
|
|
|
import java.text.SimpleDateFormat
|
|
|
import java.util.*
|
|
|
+import kotlin.collections.HashMap
|
|
|
|
|
|
class MainActivity : AppCompatActivity(),
|
|
|
View.OnClickListener,
|
|
@@ -78,6 +79,8 @@ class MainActivity : AppCompatActivity(),
|
|
|
private var homeAndMenuReceiver: HomeAndMenuReceiver? = null
|
|
|
private var isInLockTaskMode: Boolean = false
|
|
|
|
|
|
+ private val orderClearCountMap:HashMap<String,Int> = hashMapOf() //用于记录消单次数
|
|
|
+
|
|
|
private val mLoginTokenRefresher = LoginTokenRefresher()
|
|
|
|
|
|
override fun onCreate(savedInstanceState: Bundle?) {
|
|
@@ -122,7 +125,6 @@ class MainActivity : AppCompatActivity(),
|
|
|
fragmentRouter.stopFragmentToolbarTimer()
|
|
|
FusionManager.onFusionStatus = null
|
|
|
mLoginTokenRefresher.stop()
|
|
|
- this.stopLockTask()
|
|
|
}
|
|
|
|
|
|
@SuppressLint("MissingSuperCall")
|
|
@@ -153,7 +155,7 @@ class MainActivity : AppCompatActivity(),
|
|
|
)
|
|
|
|
|
|
if (isRelogin) {
|
|
|
- this@MainActivity.stopLockTask()
|
|
|
+ stopLockTask()
|
|
|
|
|
|
GlobalData.isLogin = false
|
|
|
GlobalData.password.set("")
|
|
@@ -350,10 +352,48 @@ class MainActivity : AppCompatActivity(),
|
|
|
|
|
|
val lockList = SPUtil.getLockOrderList()
|
|
|
// 解锁订单
|
|
|
+ //先查询云端状态,如果是支付过了,走消单流程;未支付的,走解锁流程
|
|
|
lockList.let { list ->
|
|
|
if (list.isEmpty()) return@let
|
|
|
|
|
|
- val deferredList = list.map { item ->
|
|
|
+ //查云端状态
|
|
|
+ val checkList = list.map { item ->
|
|
|
+ val info = item.split("-")
|
|
|
+ val pumpId = info[0].toInt()
|
|
|
+ val transactionNo = info[1]
|
|
|
+ async {
|
|
|
+ val deviceClass = DeviceClass()
|
|
|
+ deviceClass.pumpNo = pumpId
|
|
|
+ deviceClass.transactionSeqNo = transactionNo
|
|
|
+ SystemApi.getOrderStateForClound(deviceClass)
|
|
|
+ }
|
|
|
+ }
|
|
|
+ val checkResultList = checkList.map { item -> item.await() }
|
|
|
+ val unLockList = arrayListOf<String>()
|
|
|
+ checkResultList.forEachIndexed { index, dfsResult ->
|
|
|
+ if (dfsResult.success) {
|
|
|
+ val iListResult = dfsResult.data?.iListResult
|
|
|
+ val find = iListResult?.find { it.resultCode == "0" }
|
|
|
+ if (find != null) { //这笔单已支付了,删去待锁单记录,加入待消单记录,进行消单
|
|
|
+ val info = list[index].split("-")
|
|
|
+ val pumpId = info[0].toInt()
|
|
|
+ val transactionNo = info[1]
|
|
|
+ val token = info[2]
|
|
|
+ val deviceClass = DeviceClass()
|
|
|
+ deviceClass.pumpNo = pumpId
|
|
|
+ deviceClass.transactionSeqNo = transactionNo
|
|
|
+ deviceClass.releaseTokenAttribute = token
|
|
|
+
|
|
|
+ SPUtil.removeLockOrder(deviceClass)
|
|
|
+ SPUtil.addUnclearedOrder(deviceClass)
|
|
|
+ } else { //这笔单还未支付,加入解锁列表,做解锁
|
|
|
+ unLockList.add(list[index])
|
|
|
+ }
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
+ //做解锁
|
|
|
+ val deferredList = unLockList.map { item ->
|
|
|
val info = item.split("-")
|
|
|
val pumpId = info[0].toInt()
|
|
|
val transactionNo = info[1]
|
|
@@ -397,10 +437,26 @@ class MainActivity : AppCompatActivity(),
|
|
|
if (result.success) {
|
|
|
DFSLog.d("$tip succeeded")
|
|
|
SPUtil.removeWayneOrder(list[index])
|
|
|
+ orderClearCountMap.remove(list[index])
|
|
|
null
|
|
|
} else {
|
|
|
DFSLog.d("$tip failed")
|
|
|
- list[index]
|
|
|
+ /** 消单失败,会记录次数,如果三次消单都失败,便不再对这笔单消单
|
|
|
+ * 场景:这笔单在自助机执行 SPUtil.addUnclearedOrder(deviceClass) 前,被其他设备 clear 了,
|
|
|
+ 这个时候自助机再 clear 就肯定失败了,而且也无意义。
|
|
|
+ 虽然订单为 clear 状态时会在 FusionManager.onFdcMessageReceived 收到该订单为 clear,
|
|
|
+ 并调用 SPUtil.removeUnclearedOrder(dc) 删除,但如果是 FusionManager.onFdcMessageReceived
|
|
|
+ 执行完后再 SPUtil.addUnclearedOrder(deviceClass), 就会一直存在 SP 中尝试 clear。因此加了clear 次数
|
|
|
+ */
|
|
|
+ val unclearItem = list[index]
|
|
|
+ val clearTime = orderClearCountMap[unclearItem] ?: 1
|
|
|
+ if (clearTime >= 3) {
|
|
|
+ orderClearCountMap.remove(unclearItem)
|
|
|
+ null
|
|
|
+ } else {
|
|
|
+ orderClearCountMap[unclearItem] = clearTime + 1
|
|
|
+ list[index]
|
|
|
+ }
|
|
|
}
|
|
|
}.filterNotNull()
|
|
|
SPUtil.replaceUnclearedOrderList(remainLockList)
|