定额消费
diff --git a/app/src/main/java/com/supwisdom/activities/consume/ConsumeActivity.kt b/app/src/main/java/com/supwisdom/activities/consume/ConsumeActivity.kt
index aa4194b..c754d51 100644
--- a/app/src/main/java/com/supwisdom/activities/consume/ConsumeActivity.kt
+++ b/app/src/main/java/com/supwisdom/activities/consume/ConsumeActivity.kt
@@ -29,6 +29,7 @@
import com.supwisdom.view.DialogPurchase
import java.util.*
import java.util.concurrent.locks.ReentrantLock
+import kotlin.collections.ArrayList
/**
** create by zzq on 2019/7/24
@@ -67,6 +68,7 @@
private var amount: Int = 0
private var payMode: PayMode? = null
private val hotkeyPayMap = hashMapOf<Int, Int>()
+ private val hotkeyPayList = ArrayList<String>()
private var payWay: String? = null
private var counter: LastPayShowTimer? = null
private var lastPayInfo: CardUserInfoBean? = null
@@ -89,14 +91,16 @@
if (isPaying) {
presenter.clickToInterrupt()
} else {
- if (payMode == PayMode.FIXPAY) {
- checkAmtToPay(amount, true)
- } else if (payMode == PayMode.HOTKEY) {
-
- } else {
- presenter.clickNoPay()
- amountTxt.text = ""
- AuxScreenController.getInstance().refreshContent(Arrays.asList(" 欢迎光临!", " 请刷卡..."))
+ when (payMode) {
+ PayMode.FIXPAY -> checkAmtToPay(amount)
+ PayMode.HOTKEY -> {
+ AuxScreenController.getInstance().refreshContent(hotkeyPayList)
+ }
+ else -> {
+ presenter.clickNoPay()
+ amountTxt.text = ""
+ AuxScreenController.getInstance().refreshContent(Arrays.asList(" 欢迎光临!", " 请刷卡..."))
+ }
}
}
}
@@ -204,9 +208,14 @@
val key = keyCode - KeyEvent.KEYCODE_0
if (hotkeyPayMap.containsKey(key)) {
amount = hotkeyPayMap[key]!!
- checkAmtToPay(amount, false)
+ checkAmtToPay(amount)
}
}
+ KeyEvent.KEYCODE_DEL -> {
+ //cancel
+ presenter.clickNoPay()
+ AuxScreenController.getInstance().refreshContent(hotkeyPayList)
+ }
KeyEvent.KEYCODE_DPAD_LEFT -> {
//'F1'
isBackRuning = true
@@ -273,7 +282,7 @@
KeyEvent.KEYCODE_ENTER -> {
amount = getCurAmount() + addAmount
if (amount > 0) {
- checkAmtToPay(amount, false)
+ checkAmtToPay(amount)
} else {
AuxScreenController.getInstance().refreshContent(Arrays.asList("请先输入金额:", "金额不能为0"))
}
@@ -364,19 +373,24 @@
SPApplication.getInstance().getPos().getControlPara(PublicDef.CONTROL_FIXAMT)?.also { mode ->
when {
mode.paraval == PayMode.HOTKEY.desc -> {
+ presenter.setFixMode(false)
payMode = PayMode.HOTKEY
hotkeyPayMap.clear()
+ hotkeyPayList.clear()
SPApplication.getInstance().getPos().getHotkeyPay()?.forEach {
hotkeyPayMap[it.key] = it.amount
+ hotkeyPayList.add(String.format("%d-%.02f", it.key, it.amount / 100.0f))
}
}
mode.paraval == PayMode.NORMAL.desc -> {
+ presenter.setFixMode(false)
payMode = PayMode.NORMAL
}
else -> {
+ presenter.setFixMode(true)
payMode = PayMode.FIXPAY
try {
- checkAmtToPay(Integer.parseInt(mode.paraval), true)
+ checkAmtToPay(Integer.parseInt(mode.paraval))
} catch (ex: Exception) {
ex.printStackTrace()
}
@@ -543,19 +557,28 @@
}
}
- private fun checkAmtToPay(inputAmt: Int, isFixPay: Boolean) {
- if (isFixPay) {
- AuxScreenController.getInstance()
- .refreshContent(Arrays.asList("定额付款", CommonUtil.showFormatAmount("金额", inputAmt)))
- } else {
- AuxScreenController.getInstance()
- .refreshContent(Arrays.asList("等待付款", CommonUtil.showFormatAmount("金额", inputAmt)))
- }
+ private fun checkAmtToPay(inputAmt: Int) {
amount = inputAmt
amountTxt.text = String.format("%.02f", inputAmt / 100.0f)
payStatusEnable = true
presenter.clickToPay(inputAmt)
- showDialogPay(isFixPay)
+ when (payMode) {
+ PayMode.FIXPAY -> {
+ AuxScreenController.getInstance()
+ .refreshContent(Arrays.asList("定额付款", CommonUtil.showFormatAmount("金额", inputAmt)))
+ showDialogPay(true)
+ }
+ PayMode.HOTKEY -> {
+ AuxScreenController.getInstance()
+ .refreshContent(Arrays.asList("热键付款", CommonUtil.showFormatAmount("金额", inputAmt)))
+ showDialogPay(false)
+ }
+ else -> {
+ AuxScreenController.getInstance()
+ .refreshContent(Arrays.asList("等待付款", CommonUtil.showFormatAmount("金额", inputAmt)))
+ showDialogPay(false)
+ }
+ }
}
private fun showDialogPay(isFixPay: Boolean) {
diff --git a/app/src/main/java/com/supwisdom/activities/consume/ConsumePresenter.kt b/app/src/main/java/com/supwisdom/activities/consume/ConsumePresenter.kt
index f4fdfad..43b5ed2 100644
--- a/app/src/main/java/com/supwisdom/activities/consume/ConsumePresenter.kt
+++ b/app/src/main/java/com/supwisdom/activities/consume/ConsumePresenter.kt
@@ -32,7 +32,7 @@
init {
createHandler()
cardPayService = CardPayService(iConsumeView, handler)
- codePayService = CodePayService(iConsumeView, handler)
+ codePayService = CodePayService(handler)
}
private fun createHandler() {
@@ -91,6 +91,11 @@
cardPayService.clickToInterrupt()
}
+ fun setFixMode(isFixMode: Boolean) {
+ cardPayService.isFixMode = isFixMode
+ codePayService.isFixMode = isFixMode
+ }
+
fun codeToPay(code: String, amount: Int) {
this.code = code
this.amount = amount
diff --git a/app/src/main/java/com/supwisdom/activities/consume/bean/LastPayBean.kt b/app/src/main/java/com/supwisdom/activities/consume/bean/LastPayBean.kt
new file mode 100644
index 0000000..5da0ba9
--- /dev/null
+++ b/app/src/main/java/com/supwisdom/activities/consume/bean/LastPayBean.kt
@@ -0,0 +1,11 @@
+package com.supwisdom.activities.consume.bean
+
+/**
+ ** create by zzq on 2019/9/16
+ ** @desc
+ **/
+class LastPayBean {
+ var cardphyid: String? = null
+ var code: String? = null
+ var suctime: Long = 0 //ms
+}
\ No newline at end of file
diff --git a/app/src/main/java/com/supwisdom/activities/consume/mode/CardPayService.kt b/app/src/main/java/com/supwisdom/activities/consume/mode/CardPayService.kt
index 4f90429..4b39eea 100644
--- a/app/src/main/java/com/supwisdom/activities/consume/mode/CardPayService.kt
+++ b/app/src/main/java/com/supwisdom/activities/consume/mode/CardPayService.kt
@@ -20,10 +20,8 @@
** create by zzq on 2019/7/25
** @desc 刷卡消费
**/
-class CardPayService constructor(iConsumeView: IConsumeView, handler: Handler) {
+class CardPayService constructor(private val iConsumeView: IConsumeView, private val handler: Handler) {
private val TAG = "CardPayService"
- private val iConsumeView = iConsumeView
- private val handler = handler
private val pos = SPApplication.getInstance().getPos()
private val runnable = CardPayRunnable()
private val consumeApi = ConsumeApi()
@@ -35,8 +33,13 @@
private var amount: Int = 0
@Volatile
private var payQueryConfirm = false
+ var isFixMode = false
private var thread: Thread? = null
private var cardBean: CardBean? = null
+ /**
+ * 防止定额连续消费
+ */
+ private var lastPayBean = LastPayBean()
fun start() {
isExist = false
@@ -210,6 +213,13 @@
}
private fun doConsume() {
+ if (isFixMode) {
+ if (lastPayBean.cardphyid == cardBean!!.cardphyid) {
+ if (System.currentTimeMillis() - lastPayBean.suctime < 15000) {
+ throw CardPayFailError("15s内不能连续消费")
+ }
+ }
+ }
sendMsg(PublicDef.MSG_CARD_PAYING, "正在扣款...")
if (SPApplication.getInstance().isOnline()) {
if (!doOnlineConsume()) {
@@ -531,6 +541,8 @@
}
private fun showOnlSucInfo() {
+ lastPayBean.cardphyid = cardBean!!.cardphyid
+ lastPayBean.suctime = System.currentTimeMillis()
val info = CardUserInfoBean(PublicDef.SUCCESS, "消费成功")
info.showtime = pos.getSysPara()!!.sucShowtime
info.amount = onlRecord.payamt
@@ -546,6 +558,8 @@
}
private fun showOffSucInfo() {
+ lastPayBean.cardphyid = cardBean!!.cardphyid
+ lastPayBean.suctime = System.currentTimeMillis()
val info = CardUserInfoBean(PublicDef.SUCCESS, "消费成功")
info.showtime = pos.getSysPara()!!.sucShowtime
info.amount = offRecord.payamt
diff --git a/app/src/main/java/com/supwisdom/activities/consume/mode/CodePayService.kt b/app/src/main/java/com/supwisdom/activities/consume/mode/CodePayService.kt
index 08b68c1..eb076ea 100644
--- a/app/src/main/java/com/supwisdom/activities/consume/mode/CodePayService.kt
+++ b/app/src/main/java/com/supwisdom/activities/consume/mode/CodePayService.kt
@@ -3,10 +3,10 @@
import android.os.Handler
import android.os.Message
import com.supwisdom.activities.SPApplication
-import com.supwisdom.activities.consume.IConsumeView
import com.supwisdom.activities.consume.bean.CardPayConfirmRetBean
import com.supwisdom.activities.consume.bean.CardPayInitRetBean
import com.supwisdom.activities.consume.bean.CardUserInfoBean
+import com.supwisdom.activities.consume.bean.LastPayBean
import com.supwisdom.entity.PayStatus
import com.supwisdom.entity.ReversalFlag
import com.supwisdom.entity.TransdtlOnlineRecord
@@ -14,16 +14,13 @@
import com.supwisdom.okhttp.TransResp
import com.supwisdom.utils.*
import org.apache.http.HttpStatus
-import java.lang.Exception
/**
** create by zzq on 2019/7/30
** @desc 二维码消费
**/
-class CodePayService constructor(iConsumeView: IConsumeView, handler: Handler) {
+class CodePayService constructor(private val handler: Handler) {
private val TAG = "CodePayService"
- private val iConsumeView = iConsumeView
- private val handler = handler
private val pos = SPApplication.getInstance().getPos()
private lateinit var codeRecord: TransdtlOnlineRecord
private val consumeApi = ConsumeApi()
@@ -35,6 +32,8 @@
private var interruptedPay: Boolean = false
@Volatile
private var amount = 0
+ var isFixMode = false
+ private val lastPayBean = LastPayBean()
fun interruptPay() {
interruptedPay = true
@@ -44,6 +43,13 @@
this.amount = amount
interruptedPay = false
try {
+ if (isFixMode) {
+ if (lastPayBean.code == code) {
+ if (System.currentTimeMillis() - lastPayBean.suctime < 15000) {
+ throw CardPayFailError("15s内不能连续消费")
+ }
+ }
+ }
initTransdtlOnline(code, amount)
var resp = consumeApi.payInit(codeRecord)
parseInitResult(resp)
@@ -178,6 +184,8 @@
}
private fun showSucInfo() {
+ lastPayBean.code = codeRecord.qrcode
+ lastPayBean.suctime = System.currentTimeMillis()
val info = CardUserInfoBean(PublicDef.SUCCESS, "消费成功")
info.showtime = pos.getSysPara()!!.sucShowtime
info.amount = codeRecord.payamt
diff --git a/app/src/main/java/com/supwisdom/view/DialogPurchase.kt b/app/src/main/java/com/supwisdom/view/DialogPurchase.kt
index a03f510..fa71710 100644
--- a/app/src/main/java/com/supwisdom/view/DialogPurchase.kt
+++ b/app/src/main/java/com/supwisdom/view/DialogPurchase.kt
@@ -1,6 +1,7 @@
package com.supwisdom.view
import android.content.Context
+import android.content.Intent
import android.graphics.Color
import android.os.CountDownTimer
import android.view.KeyEvent
@@ -11,6 +12,8 @@
import com.newcapec.zxinglib.PosDecoder
import com.supwisdom.R
import com.supwisdom.activities.consume.bean.CardUserInfoBean
+import com.supwisdom.activities.menu.MenuActivity
+import com.supwisdom.activities.transdtl.TransdtlActivity
import com.supwisdom.utils.CommonUtil
import com.supwisdom.utils.LogUtil
@@ -73,11 +76,17 @@
finish(isManualCancel = true, isPaying = false)
}
}
+ KeyEvent.KEYCODE_DPAD_LEFT -> jumpActivity(MenuActivity::class.java)
+ KeyEvent.KEYCODE_DPAD_RIGHT -> jumpActivity(TransdtlActivity::class.java)
}
}
return super.dispatchKeyEvent(event)
}
+ private fun <T> jumpActivity(cls: Class<T>) {
+ context.startActivity(Intent(context, cls))
+ }
+
fun show(hint: String, amount: String) {
vPayhint.text = hint
vPayhint.setTextColor(context.resources.getColor(R.color.blue))