Merge tag '1.0.1' into develop
tag 1.0.1
diff --git a/app/build.gradle b/app/build.gradle
index e9986f9..96711f5 100644
--- a/app/build.gradle
+++ b/app/build.gradle
@@ -8,7 +8,7 @@
android {
compileSdkVersion 28
defaultConfig {
- applicationId "com.supwisdom.posa711"
+ applicationId "com.supwisdom.posa711dali"
minSdkVersion 22
targetSdkVersion 28
versionCode 1
diff --git a/app/src/main/java/com/supwisdom/activities/CrashHandler.kt b/app/src/main/java/com/supwisdom/activities/CrashHandler.kt
index 48caaf3..6c60829 100644
--- a/app/src/main/java/com/supwisdom/activities/CrashHandler.kt
+++ b/app/src/main/java/com/supwisdom/activities/CrashHandler.kt
@@ -15,6 +15,7 @@
** create by zzq on 2019/7/23
** @desc
**/
+@Suppress("DEPRECATION")
class CrashHandler : Thread.UncaughtExceptionHandler {
private var context: Context? = null
private var mDefaultHandler: Thread.UncaughtExceptionHandler? = null
diff --git a/app/src/main/java/com/supwisdom/activities/SPApplication.kt b/app/src/main/java/com/supwisdom/activities/SPApplication.kt
index 61e704d..781fd44 100644
--- a/app/src/main/java/com/supwisdom/activities/SPApplication.kt
+++ b/app/src/main/java/com/supwisdom/activities/SPApplication.kt
@@ -5,7 +5,6 @@
import android.support.multidex.MultiDex
import android.support.multidex.MultiDexApplication
import com.supwisdom.db.Pos
-import com.supwisdom.service.BackgroundTaskService
import com.supwisdom.utils.CommonUtil
import com.supwisdom.utils.PublicDef
@@ -60,11 +59,11 @@
private fun startService() {
if (!CommonUtil.isServiceWork(this, PublicDef.BG_SERVICE_NAME)) {
- startService(Intent(this, BackgroundTaskService::class.java))
+ startService(Intent(this, ServiceDemo::class.java))
}
}
fun stopService() {
- stopService(Intent(this, BackgroundTaskService::class.java))
+ stopService(Intent(this, ServiceDemo::class.java))
}
}
\ No newline at end of file
diff --git a/app/src/main/java/com/supwisdom/activities/ServiceDemo.kt b/app/src/main/java/com/supwisdom/activities/ServiceDemo.kt
index c0bc6b1..90d1564 100644
--- a/app/src/main/java/com/supwisdom/activities/ServiceDemo.kt
+++ b/app/src/main/java/com/supwisdom/activities/ServiceDemo.kt
@@ -2,14 +2,81 @@
import android.app.Service
import android.content.Intent
+import android.os.Binder
import android.os.IBinder
+import com.supwisdom.service.BackgroundTaskService
+import com.supwisdom.utils.CommonUtil
/**
** create by zzq on 2019/7/23
** @desc
**/
class ServiceDemo : Service() {
+ private var guardThread: Thread? = null
+ private var bind: ServiceBind? = null
+ private var bgTask: BackgroundTaskService? = null
+ private val pos = SPApplication.getInstance().getPos()
+ @Volatile
+ private var isExist = false
+
+ override fun onCreate() {
+ super.onCreate()
+ }
+
+ override fun onDestroy() {
+ closeThread()
+ super.onDestroy()
+ }
+
override fun onBind(intent: Intent): IBinder? {
- return null
+ if (bind == null) {
+ bind = ServiceBind()
+ }
+ return bind
+ }
+
+ override fun onStartCommand(intent: Intent, flags: Int, startId: Int): Int {
+ createThread()
+ return super.onStartCommand(intent, flags, startId)
+ }
+
+ private fun createThread() {
+ isExist = false
+ if (bgTask == null) {
+ bgTask = BackgroundTaskService()
+ }
+ if (guardThread == null) {
+ guardThread = GuardThread()
+ guardThread!!.start()
+ }
+ }
+
+ private fun closeThread() {
+ bgTask?.interrupt()
+ bgTask = null
+ isExist = true
+ guardThread?.interrupt()
+ guardThread = null
+ }
+
+ private inner class GuardThread : Thread() {
+ override fun run() {
+ CommonUtil.doSleep(60 * 1000)
+ while (!isExist) {
+ val hasInit = pos.getConfigPara()?.initOK ?: false
+ if (hasInit) {
+ break
+ }
+ CommonUtil.doSleep(1000)
+ }
+ if (!isExist) {
+ bgTask!!.start()
+ }
+ }
+ }
+
+ inner class ServiceBind : Binder() {
+ val serviceDemo: ServiceDemo
+ get() = this@ServiceDemo
}
}
\ No newline at end of file
diff --git a/app/src/main/java/com/supwisdom/activities/cardlib/CardlibActivity.kt b/app/src/main/java/com/supwisdom/activities/cardlib/CardlibActivity.kt
index f64c8cb..1417fe2 100644
--- a/app/src/main/java/com/supwisdom/activities/cardlib/CardlibActivity.kt
+++ b/app/src/main/java/com/supwisdom/activities/cardlib/CardlibActivity.kt
@@ -23,7 +23,7 @@
@Suppress("DEPRECATION")
class CardlibActivity : BaseActivity(), ICardlibView {
private val pos = SPApplication.getInstance().getPos()
- private var vResult: TextView? = null
+ private lateinit var vResult: TextView
private var vProgressBar: ProgressBar? = null
private var presenter: CardlibPresenter? = null
@Volatile
@@ -86,14 +86,14 @@
override fun showInitCardlibResult(issuccess: Boolean, msg: String) {
if (issuccess) {
val record = pos.getConfigPara()
- if (record != null && record.initOK) {
+ if (record != null && record.initOK && pos.getDynamicPara() != null) {
jumpActivity(LoadActivity::class.java)
} else {
jumpActivity(InitActivity::class.java)
}
} else {
- vResult!!.text = msg
- vResult!!.visibility = View.VISIBLE
+ vResult.text = msg
+ vResult.visibility = View.VISIBLE
AuxScreenController.getInstance().refreshTitle("卡库初始化")
AuxScreenController.getInstance().refreshBottom(DateUtil.getNowDateTime())
AuxScreenController.getInstance().refreshContent(listOf("请联系管理员", "加载驱动失败", "原因:", msg))
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 6308775..5a07853 100644
--- a/app/src/main/java/com/supwisdom/activities/consume/ConsumeActivity.kt
+++ b/app/src/main/java/com/supwisdom/activities/consume/ConsumeActivity.kt
@@ -14,6 +14,7 @@
import com.supwisdom.R
import com.supwisdom.activities.BaseActivity
import com.supwisdom.activities.SPApplication
+import com.supwisdom.activities.consume.bean.CardStatus
import com.supwisdom.activities.consume.bean.CardUserInfoBean
import com.supwisdom.activities.menu.MenuActivity
import com.supwisdom.activities.transdtl.TransdtlActivity
@@ -40,16 +41,15 @@
private lateinit var presenter: ConsumePresenter
private lateinit var vLinkstat: TextView
private lateinit var vShopname: TextView
- private lateinit var vCustname: TextView
- private lateinit var vStuempno: TextView
+ private lateinit var vCitizenName: TextView
+ private lateinit var vCitizenCardno: TextView
private lateinit var vCardstatus: TextView
- private lateinit var vBalance: TextView
private lateinit var vTime: TextView
private lateinit var vLinkLogo: ImageView
private lateinit var vLastResult: TextView
private lateinit var vLastPayamt: TextView
+ private lateinit var vLastCardno: TextView
private lateinit var vLastPayway: TextView
- private lateinit var vLastPayday: TextView
private lateinit var vLastPaytime: TextView
private lateinit var vLastPayFailreason: TextView
private lateinit var vLastPayFailll: LinearLayout
@@ -83,9 +83,14 @@
presenter.start()
beepManager = BeepManager(this)
dialogPurchase = DialogPurchase(this, object : DialogPurchase.ICallBack {
- override fun callback(isManualCancel: Boolean) {
- presenter.clickNoPay()
- amountTxt.text = ""
+ override fun callback(isManualCancel: Boolean, isPaying: Boolean) {
+ if (isPaying) {
+ presenter.clickToInterrupt()
+ } else {
+ presenter.clickNoPay()
+ amountTxt.text = ""
+ AuxScreenController.getInstance().refreshContent(Arrays.asList(" 欢迎光临!", " 请刷卡..."))
+ }
}
override fun callback(code: String) {
@@ -116,24 +121,24 @@
}
}
})
+ presenter.loadLastTransdtl()
}
private fun initView() {
- vShopname = this.findViewById<TextView>(R.id.consume_shopname)
- vLinkLogo = this.findViewById<ImageView>(R.id.consume_linklogo)
- vLinkstat = this.findViewById<TextView>(R.id.consume_linkstat)
- amountTxt = this.findViewById<TextView>(R.id.consume_amt)
- vCustname = this.findViewById<TextView>(R.id.consume_custname)
- vStuempno = this.findViewById<TextView>(R.id.consume_stuempno)
- vCardstatus = this.findViewById<TextView>(R.id.consume_cardstatus)
- vBalance = this.findViewById<TextView>(R.id.consume_balance)
- vTime = this.findViewById<TextView>(R.id.consume_time)
- vLastResult = this.findViewById<TextView>(R.id.consume_last_result)
- vLastPayamt = this.findViewById<TextView>(R.id.consume_last_payamt)
- vLastPayway = this.findViewById<TextView>(R.id.consume_last_payway)
- vLastPayday = this.findViewById<TextView>(R.id.consume_last_payday)
- vLastPaytime = this.findViewById<TextView>(R.id.consume_last_paytime)
- vLastPayFailreason = this.findViewById<TextView>(R.id.consume_last_failreason)
+ vShopname = this.findViewById<TextView>(R.id.tv_shopname)
+ vLinkLogo = this.findViewById<ImageView>(R.id.tv_linklogo)
+ vLinkstat = this.findViewById<TextView>(R.id.tv_linkstat)
+ amountTxt = this.findViewById<TextView>(R.id.tv_input_amt)
+ vCitizenName = this.findViewById<TextView>(R.id.tv_citizen_name)
+ vCitizenCardno = this.findViewById<TextView>(R.id.tv_citizen_cardno)
+ vCardstatus = this.findViewById<TextView>(R.id.tv_cardstatus)
+ vTime = this.findViewById<TextView>(R.id.tv_nowtime)
+ vLastResult = this.findViewById<TextView>(R.id.tv_last_pay_result)
+ vLastCardno = this.findViewById<TextView>(R.id.tv_last_cardno)
+ vLastPayamt = this.findViewById<TextView>(R.id.tv_last_payamt)
+ vLastPayway = this.findViewById<TextView>(R.id.tv_last_payway)
+ vLastPaytime = this.findViewById<TextView>(R.id.tv_last_paytime)
+ vLastPayFailreason = this.findViewById<TextView>(R.id.tv_last_failreason)
vLastPayFailll = this.findViewById<LinearLayout>(R.id.ll_consume_last_failreason)
vLastPayamtll = this.findViewById<LinearLayout>(R.id.ll_consume_last_payamt)
}
@@ -214,33 +219,22 @@
override fun showUserInfo(info: CardUserInfoBean) {
CommonUtil.acquireWakeLock(this)
- vCustname.text = info.username
- if (info.retcode == PublicDef.SUCCESS) {
- vCardstatus.text = "暂未实现"//PublicDef.CARD_STAT_MAP[info.cardstat]
- if (info.cardstatus != 0) {
- vCardstatus.setTextColor(Color.RED)
- } else {
- vCardstatus.setTextColor(resources.getColor(R.color.blue))
- }
- if (info.balance == null) {
- vBalance.text = null
- } else {
- vBalance.text = String.format("%.02f 元", info.balance!! / 100.0f)
- }
- } else {
- vCardstatus.text = info.retmsg
+ vCitizenName.text = info.username
+ vCitizenCardno.text = info.cardno
+ vCardstatus.text = info.cardstatus?.toString()
+ if (info.cardstatus != CardStatus.NORMAL) {
vCardstatus.setTextColor(Color.RED)
- vBalance.text = null
+ } else {
+ vCardstatus.setTextColor(resources.getColor(R.color.blue))
}
}
private var lastshowtime: String? = null
override fun clearUserInfo(datetime: String) {
if (!isBackRuning) {
- vCustname.text = null
- vStuempno.text = null
+ vCitizenName.text = null
+ vCitizenCardno.text = null
vCardstatus.text = null
- vBalance.text = null
val tmptime = datetime.substring(0, 16)
if (lastshowtime != tmptime) {
lastshowtime = tmptime
@@ -266,15 +260,22 @@
}
private fun dealIntent() {
- amount = this.intent.getIntExtra("amount", 0)
+ amount = this.intent.getStringExtra("amount")?.toInt() ?: 0
payWay = this.intent.getStringExtra("payway")
+ val operation = this.intent.getStringExtra("operation")
+ if (operation == "reverse") {
+ presenter.clickToReverse(amount)
+ dialogPurchase!!.show("等待冲正", CommonUtil.showFormatAmount("金额", amount))
+ }
this.intent.putExtra("amount", "0")
this.intent.putExtra("payway", "")
+ this.intent.putExtra("operation", "")
}
override fun onNewIntent(intent: Intent) {
this.intent.putExtra("amount", intent.getStringExtra("amount"))
this.intent.putExtra("payway", intent.getStringExtra("payway"))
+ this.intent.putExtra("operation", intent.getStringExtra("operation"))
}
private fun refresh() {
@@ -301,6 +302,7 @@
try {
amount = Integer.parseInt(record.paraval)
amountTxt.text = String.format("%.02f", amount / 100.0f)
+ payStatusEnable = true
presenter.clickToPay(amount)
showDialogPay()
} catch (ex: Exception) {
@@ -341,6 +343,7 @@
}
AuxScreenController.getInstance().refreshContent(auxList)
SoundUtil.playMusic(applicationContext, R.raw.consume_suc)
+ refreshRecentDtl(info)
}
override fun showConsumeHint(hint: String) {
@@ -349,10 +352,23 @@
AuxScreenController.getInstance().refreshContent(Arrays.asList(hint, amountStr))
}
+ override fun showConsumeQuery(hint: String) {
+ dialogPurchase!!.showQueryProcess(hint, "请耐心等待")
+ AuxScreenController.getInstance().refreshContent(Arrays.asList(hint, "请耐心等待"))
+ }
+
+ override fun showConsumeInterrupt(info: CardUserInfoBean) {
+ showPayInterrupt(info.cardno)
+ dialogPurchase!!.showPayInterrupt()
+ AuxScreenController.getInstance().refreshContent(Arrays.asList<String>("交易取消", "以银行交易为准"))
+ SoundUtil.playMusic(applicationContext, R.raw.pay_cancel)
+ }
+
override fun showConsumeFail(info: CardUserInfoBean) {
dialogPurchase!!.showPayFail(info)
- SoundUtil.playMusic(applicationContext, R.raw.consume_fail)
AuxScreenController.getInstance().refreshContent(Arrays.asList<String>("消费失败", "原因:", info.retmsg))
+ SoundUtil.playMusic(applicationContext, R.raw.consume_fail)
+ refreshRecentDtl(info)
}
override fun showReverseSuc(info: CardUserInfoBean) {
@@ -360,23 +376,35 @@
AuxScreenController.getInstance()
.refreshContent(Arrays.asList<String>(info.retmsg, CommonUtil.showFormatAmount("金额", info.payamt)))
SoundUtil.playMusic(applicationContext, R.raw.reversal_suc)
+ refreshRecentDtl(info)
}
override fun showReverseFail(info: CardUserInfoBean) {
dialogPurchase!!.showReverseFail(info)
- SoundUtil.playMusic(applicationContext, R.raw.reversal_fail)
AuxScreenController.getInstance().refreshContent(Arrays.asList<String>("冲正失败", "原因:", info.retmsg))
+ SoundUtil.playMusic(applicationContext, R.raw.reversal_fail)
+ refreshRecentDtl(info)
}
- private var lastShowRecentDatetime: String? = null
+ private var lastShowRecentTime: String? = null
private fun refreshRecentDtl(info: CardUserInfoBean?) {
if (info != null) {
+ val showtime: Long = 30 * 1000
lastPayInfo = info
+ if (lastShowRecentTime == null) {
+ if (info.transtime != null) {
+ val paytime = DateUtil.timeFormatConvertToLong(info.transtime!!)
+ val nowtime = DateUtil.timeFormatConvertToLong(DateUtil.getNowTimeNoFormat())
+ if (nowtime - paytime > showtime) {
+ return
+ }
+ }
+ }
//已显示过不在显示
- if (lastShowRecentDatetime == info.datetime) {
+ if (lastShowRecentTime == info.transtime) {
return
}
- lastShowRecentDatetime = info.datetime
+ lastShowRecentTime = info.transtime
if (info.status == PayStatus.SUC) {
when {
@@ -399,25 +427,32 @@
vLastPayamtll.visibility = View.GONE
vLastPayFailreason.text = info.retmsg
}
-
+ vLastCardno.text = info.cardno
vLastPayway.text = if (info.payway == "code") {
"二维码"
} else {
"市民卡"
}
val sb = StringBuilder()
- sb.append(info.datetime!!.substring(0, 4)).append("/")
- .append(info.datetime!!.substring(4, 6)).append("/")
- .append(info.datetime!!.substring(6, 8))
- vLastPayday.text = sb.toString()
- sb.setLength(0)
- sb.append(info.datetime!!.substring(8, 10)).append(":")
- .append(info.datetime!!.substring(10, 12)).append(":").append(info.datetime!!.substring(12))
+ sb.append(info.transtime?.substring(0, 2)).append(":")
+ .append(info.transtime?.substring(2, 4)).append(":")
+ .append(info.transtime?.substring(4))
vLastPaytime.text = sb.toString()
- resetPayShowCounter(10 * 1000)
+ resetPayShowCounter(showtime)
}
}
+ private fun showPayInterrupt(cardno: String?) {
+ vLastResult.text = "交易取消"
+ vLastPayFailll.visibility = View.VISIBLE
+ vLastPayamtll.visibility = View.GONE
+ vLastPayFailreason.text = "以银行交易为准"
+ vLastCardno.text = cardno
+ vLastPayway.text = "card"
+ vLastPaytime.text = DateUtil.getNowTime()
+ resetPayShowCounter(30 * 1000)
+ }
+
private fun delValueToEdit() {
presenter.clickNoPay()
val str = amountTxt.text.toString()
@@ -437,7 +472,10 @@
private fun checkAmtToPay() {
amount = getCurAmount() + addAmount
if (amount > 0) {
+ AuxScreenController.getInstance()
+ .refreshContent(Arrays.asList("等待付款", CommonUtil.showFormatAmount("金额", amount)))
amountTxt.text = String.format("%.02f", amount / 100.0f)
+ payStatusEnable = true
presenter.clickToPay(amount)
showDialogPay()
} else {
@@ -472,8 +510,8 @@
amountTxt.text = "$str$value"
}
} else {
- //限制消费金额<1000
- if (str.length < 3) {
+ //限制消费金额<10000
+ if (str.length < 4) {
amountTxt.text = "$str$value"
}
}
@@ -482,9 +520,9 @@
private fun clearLastPayResult() {
vLastResult.text = null
+ vLastCardno.text = null
vLastPayamt.text = null
vLastPayway.text = null
- vLastPayday.text = null
vLastPaytime.text = null
vLastPayFailreason.text = null
}
@@ -513,8 +551,10 @@
override fun showRecentDtl(record: TransdtlUnionRecord?) {
if (record != null) {
val info = CardUserInfoBean(PublicDef.SUCCESS, "")
- info.datetime = record.transdate + record.transtime
+ info.transdate = record.transdate
+ info.transtime = record.transtime
info.username = record.username
+ info.cardno = record.cardno
info.payamt = record.payamt
info.status = record.status
info.payway = record.payway
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 268a67f..b5aeb03 100644
--- a/app/src/main/java/com/supwisdom/activities/consume/ConsumePresenter.kt
+++ b/app/src/main/java/com/supwisdom/activities/consume/ConsumePresenter.kt
@@ -3,9 +3,11 @@
import android.os.Handler
import android.os.Looper
import android.os.Message
+import com.supwisdom.activities.SPApplication
import com.supwisdom.activities.consume.bean.CardUserInfoBean
import com.supwisdom.activities.consume.mode.CardPayService
import com.supwisdom.activities.consume.mode.CodePayService
+import com.supwisdom.utils.DateUtil
import com.supwisdom.utils.LogUtil
import com.supwisdom.utils.PublicDef
import com.supwisdom.utils.ThreadPool
@@ -16,6 +18,7 @@
**/
class ConsumePresenter constructor(iConsumeView: IConsumeView) {
private val TAG = "ConsumePresenter"
+ private val pos = SPApplication.getInstance().getPos()
private val iConsumeView = iConsumeView
private val codePayRunnable = CodePayRunnable()
private lateinit var handler: Handler
@@ -39,11 +42,17 @@
PublicDef.MSG_CARD_PAY_SUC -> iConsumeView.showConsumeSuc(msg.obj as CardUserInfoBean)
PublicDef.MSG_CARD_PAYING,
PublicDef.MSG_CARD_READ_AGAIN -> iConsumeView.showConsumeHint(msg.obj as String)
+ PublicDef.MSG_CARD_PAY_QUERY -> iConsumeView.showConsumeQuery(msg.obj as String)
PublicDef.MSG_CARD_PAY_FAIL -> {
val ret = msg.obj as CardUserInfoBean
LogUtil.d(TAG, "pay fail,reason=${ret.retmsg}")
iConsumeView.showConsumeFail(ret)
}
+ PublicDef.MSG_PAYING_INTERRUPT -> {
+ val ret = msg.obj as CardUserInfoBean
+ LogUtil.d(TAG, "pay interrupt,reason=${ret.retmsg}")
+ iConsumeView.showConsumeInterrupt(ret)
+ }
PublicDef.MSG_CARD_REVERSE_FAIL -> {
val ret = msg.obj as CardUserInfoBean
LogUtil.d(TAG, "reverse fail,reason=${ret.retmsg}")
@@ -78,6 +87,10 @@
cardPayService.clickToReverse(amount)
}
+ fun clickToInterrupt() {
+ cardPayService.clickToInterrupt()
+ }
+
fun codeToPay(code: String, amount: Int) {
this.code = code
this.amount = amount
@@ -94,6 +107,17 @@
codePayService.interruptPay()
}
+ fun loadLastTransdtl() {
+ ThreadPool.getShortPool().execute(Runnable {
+ val list = pos.getTransdtlUnion(DateUtil.getNowDateNoFormat(), 0, 0, 1)
+ if (list.isNotEmpty()) {
+ iConsumeView.getActivity().runOnUiThread {
+ iConsumeView.showRecentDtl(list[0])
+ }
+ }
+ })
+ }
+
private inner class CodePayRunnable : Runnable {
override fun run() {
codePayService.pay(code!!, amount)
diff --git a/app/src/main/java/com/supwisdom/activities/consume/IConsumeView.kt b/app/src/main/java/com/supwisdom/activities/consume/IConsumeView.kt
index b633d51..608ff3f 100644
--- a/app/src/main/java/com/supwisdom/activities/consume/IConsumeView.kt
+++ b/app/src/main/java/com/supwisdom/activities/consume/IConsumeView.kt
@@ -17,6 +17,10 @@
fun showConsumeHint(hint: String)
+ fun showConsumeQuery(hint: String)
+
+ fun showConsumeInterrupt(info: CardUserInfoBean)
+
fun showConsumeFail(info: CardUserInfoBean)
fun showReverseSuc(info: CardUserInfoBean)
diff --git a/app/src/main/java/com/supwisdom/activities/consume/bean/CardAccountRetBean.kt b/app/src/main/java/com/supwisdom/activities/consume/bean/CardAccountRetBean.kt
index 461c16d..1cc78c1 100644
--- a/app/src/main/java/com/supwisdom/activities/consume/bean/CardAccountRetBean.kt
+++ b/app/src/main/java/com/supwisdom/activities/consume/bean/CardAccountRetBean.kt
@@ -8,7 +8,7 @@
**/
class CardAccountRetBean : BaseResp() {
var username: String? = null
- var userid: Int = 0
- var balance: Int = 0
+ var userid: String? = null
+ var balance: Int? = null
var status: String? = null
}
\ No newline at end of file
diff --git a/app/src/main/java/com/supwisdom/activities/consume/bean/CardBean.kt b/app/src/main/java/com/supwisdom/activities/consume/bean/CardBean.kt
index f68486f..e27206f 100644
--- a/app/src/main/java/com/supwisdom/activities/consume/bean/CardBean.kt
+++ b/app/src/main/java/com/supwisdom/activities/consume/bean/CardBean.kt
@@ -12,7 +12,7 @@
var datetime: String? = null
var amount: Int = 0
var username: String? = null
- var userid: Int = 0
+ var userid: String? = null
var balance: Int? = null
- var cardstatus: Int = 0
+ var cardstatus: CardStatus? = null
}
\ No newline at end of file
diff --git a/app/src/main/java/com/supwisdom/activities/consume/bean/CardUserInfoBean.kt b/app/src/main/java/com/supwisdom/activities/consume/bean/CardUserInfoBean.kt
index ebaf647..047d57b 100644
--- a/app/src/main/java/com/supwisdom/activities/consume/bean/CardUserInfoBean.kt
+++ b/app/src/main/java/com/supwisdom/activities/consume/bean/CardUserInfoBean.kt
@@ -10,13 +10,28 @@
**/
class CardUserInfoBean constructor(retcode: Int, retmsg: String) : BaseResp(retcode, retmsg) {
var username: String? = null
+ var cardno: String? = null
var showtime: Int = 3
var balance: Int? = null
- var cardstatus: Int = 0
+ var cardstatus: CardStatus? = null
var amount: Int = 0
var payamt: Int = 0
var status: PayStatus? = null
var reversalFlag: ReversalFlag? = null
- var datetime: String? = null
+ var transdate: String? = null
+ var transtime: String? = null
var payway: String? = null //card,code
+}
+
+enum class CardStatus(val desc: String) {
+ NORMAL("正常"),
+ LOCK("已锁定"),
+ FROZEN("已冻结"),
+ LOST("已挂失"),
+ EXPIRE("已过期"),
+ LOGOUT("已注销");
+
+ override fun toString(): String {
+ return this.desc
+ }
}
\ 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 3972fe6..cde67f4 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
@@ -5,19 +5,15 @@
import com.supwisdom.activities.SPApplication
import com.supwisdom.activities.consume.IConsumeView
import com.supwisdom.activities.consume.bean.*
-import com.supwisdom.entity.PayStatus
-import com.supwisdom.entity.ReversalFlag
-import com.supwisdom.entity.TransdtlOfflineRecord
-import com.supwisdom.entity.TransdtlOnlineRecord
+import com.supwisdom.entity.*
import com.supwisdom.epaycard.Cardlib
import com.supwisdom.exception.CardNotFoundError
import com.supwisdom.exception.CardPayCancelFailError
import com.supwisdom.exception.CardPayFailError
+import com.supwisdom.exception.CardPayInterruptError
import com.supwisdom.okhttp.TransResp
-import com.supwisdom.utils.CommonUtil
-import com.supwisdom.utils.DateUtil
-import com.supwisdom.utils.GsonUtil
-import com.supwisdom.utils.PublicDef
+import com.supwisdom.service.EpayApiImpl
+import com.supwisdom.utils.*
import org.apache.http.HttpStatus
/**
@@ -37,8 +33,10 @@
private var clickStat = ClickStat.INIT
@Volatile
private var amount: Int = 0
+ @Volatile
+ private var payQueryConfirm = false
private var thread: Thread? = null
- private lateinit var cardBean: CardBean
+ private var cardBean: CardBean? = null
fun start() {
isExist = false
@@ -69,9 +67,16 @@
this.amount = amount
}
+ fun clickToInterrupt() {
+ clickStat = ClickStat.INIT
+ payQueryConfirm = false
+ }
+
private inner class CardPayRunnable : Runnable {
private lateinit var onlRecord: TransdtlOnlineRecord
+ private lateinit var onlRvsRecord: TransdtlOnlineRecord
private lateinit var offRecord: TransdtlOfflineRecord
+ private lateinit var offRvsRecord: TransdtlOfflineRecord
private var oldcardphyid: String? = null
private var onlineBalance = false
private var curLinkStatus = false
@@ -92,7 +97,7 @@
iConsumeView.codeScannerEnable(false)
if (oldcardphyid != cardphyid) {
readCard()
- cardBean.cardphyid = cardphyid
+ cardBean!!.cardphyid = cardphyid
oldcardphyid = cardphyid
}
when (clickStat) {
@@ -101,6 +106,15 @@
doConsume()
} catch (ex: CardPayFailError) {
sendMsg(PublicDef.MSG_CARD_PAY_FAIL, getErrorInfo(ex.message))
+ } catch (ex: CardPayInterruptError) {
+ sendMsg(PublicDef.MSG_PAYING_INTERRUPT, getErrorInfo(ex.message))
+ } catch (ex: Exception) {
+ ex.printStackTrace()
+ LogUtil.d(
+ TAG, "card pay exception: cardphyid=$cardphyid"
+ + "exception=${CommonUtil.getExceptionStack(ex)}"
+ )
+ sendMsg(PublicDef.MSG_CARD_PAY_FAIL, getErrorInfo("程序异常"))
}
clickStat = ClickStat.INIT
}
@@ -108,7 +122,14 @@
try {
doReverse()
} catch (ex: CardPayCancelFailError) {
- sendMsg(PublicDef.MSG_CARD_REVERSE_FAIL, getErrorInfo(ex.message))
+ sendMsg(PublicDef.MSG_CARD_REVERSE_FAIL, getRvsErrorInfo(ex.message))
+ } catch (ex: Exception) {
+ ex.printStackTrace()
+ LogUtil.d(
+ TAG, "card pay cancel exception: cardphyid=$cardphyid"
+ + "exception=${CommonUtil.getExceptionStack(ex)}"
+ )
+ sendMsg(PublicDef.MSG_CARD_REVERSE_FAIL, getRvsErrorInfo("程序异常"))
}
clickStat = ClickStat.INIT
}
@@ -139,40 +160,53 @@
private fun getAccountInfoByCard() {
val resp = consumeApi.accQuery(
pos.getConfigPara()!!.devphyid!!,
- cardBean.cardphyid!!,
- cardBean.cardNo!!
+ cardBean!!.cardphyid!!,
+ cardBean!!.cardNo!!
)
if (resp != null && resp.retcode == HttpStatus.SC_OK) {
- val retBean = GsonUtil.GsonToBean(resp.retjson!!, CardAccountRetBean::class.java)
- if (retBean.retcode == PublicDef.SUCCESS) {
- cardBean.username = retBean.username
- cardBean.userid = retBean.userid
- cardBean.balance = retBean.balance
- cardBean.cardstatus = 1 //TODO
+ try {
+ val retBean = GsonUtil.GsonToBean(resp.retjson!!, CardAccountRetBean::class.java)
+ if (retBean.retcode == PublicDef.SUCCESS) {
+ cardBean!!.username = retBean.username
+ cardBean!!.userid = retBean.userid
+ cardBean!!.balance = retBean.balance
+ when {
+ "normal" == retBean.status -> cardBean!!.cardstatus = CardStatus.NORMAL
+ "expire" == retBean.status -> cardBean!!.cardstatus = CardStatus.EXPIRE
+ "lost" == retBean.status -> cardBean!!.cardstatus = CardStatus.LOCK
+ "logout" == retBean.status -> cardBean!!.cardstatus = CardStatus.LOGOUT
+ "frozen" == retBean.status -> cardBean!!.cardstatus = CardStatus.FROZEN
+ "lock" == retBean.status -> cardBean!!.cardstatus = CardStatus.LOST
+ }
+ }
+ } catch (ex: Exception) {
+ ex.printStackTrace()
}
}
}
private fun showCardUserInfo() {
val info = CardUserInfoBean(PublicDef.SUCCESS, "账户信息")
- info.username = cardBean.username
- info.balance = cardBean.balance
- info.cardstatus = cardBean.cardstatus
+ if (cardBean!!.username != cardBean!!.cardNo) {
+ info.username = cardBean!!.username
+ }
+ info.cardno = cardBean!!.cardNo
+ info.cardstatus = cardBean!!.cardstatus
sendMsg(PublicDef.MSG_USER_INFO_SHOW, info)
}
private fun readCard() {
val cardinfo = Cardlib.instance.readCard()
cardBean = CardBean()
- cardBean.cardNo = cardinfo.cardNo
- cardBean.idCard = cardinfo.idCard
- cardBean.expireDate = cardinfo.expireDate
- cardBean.amount = amount
- cardBean.datetime = DateUtil.getNowDateTimeFormat()
+ cardBean!!.cardNo = cardinfo.cardNo
+ cardBean!!.idCard = cardinfo.idCard
+ cardBean!!.expireDate = cardinfo.expireDate
+ cardBean!!.amount = amount
+ cardBean!!.datetime = DateUtil.getNowDateTimeFormat()
/**
* 用户名默认用卡号代替,在线查询更新为用户名
*/
- cardBean.username = cardBean.cardNo
+ cardBean!!.username = cardBean!!.cardNo
}
private fun doConsume() {
@@ -190,7 +224,109 @@
}
private fun doReverse() {
- throw CardPayCancelFailError("暂不支持")
+ val list = pos.getTransdtlUnion(DateUtil.getNowDateNoFormat(), 0, 0, 1)
+ if (list.isEmpty()) {
+ throw CardPayCancelFailError("未找到消费记录")
+ }
+ if (list[0].payway == "offcard") {
+ doOfflineReverse(list[0])
+ } else {
+ doOnlineReverse(list[0])
+ }
+ }
+
+ private fun doOnlineReverse(unionRecord: TransdtlUnionRecord) {
+ val record = pos.getTransdtlOnlineLast() ?: throw CardPayCancelFailError("未找到联机记录")
+ checkOnlineReverseVaild(unionRecord, record)
+ saveTransdtlOnlineReverse(record)
+ showRvsOnlSucInfo()
+ asyncUpload(onlRvsRecord)
+ }
+
+ private fun doOfflineReverse(unionRecord: TransdtlUnionRecord) {
+ val record = pos.getTransdtlOfflineLast() ?: throw CardPayCancelFailError("未找到离线记录")
+ checkOfflineReverseVaild(unionRecord, record)
+ saveTransdtlOfflineReverse(record)
+ showRvsOffSucInfo()
+ asyncUpload(offRvsRecord)
+ }
+
+ private fun saveTransdtlOfflineReverse(record: TransdtlOfflineRecord) {
+ offRvsRecord = record.clone()
+ offRvsRecord.devseqno += 1
+ offRvsRecord.transdate = DateUtil.getNowDateNoFormat()
+ offRvsRecord.transtime = DateUtil.getNowTimeNoFormat()
+ offRvsRecord.reversalflag = ReversalFlag.MANUAL
+ offRvsRecord.reversalseqno = record.devseqno
+ offRvsRecord.reversaltransdate = record.transdate
+ offRvsRecord.reversaltranstime = record.transtime
+ offRvsRecord.upflag = 0
+ if (!pos.saveTransdtlOffline(offRvsRecord)) {
+ throw CardPayCancelFailError("保存流水失败")
+ }
+ }
+
+ private fun saveTransdtlOnlineReverse(record: TransdtlOnlineRecord) {
+ onlRvsRecord = record.clone()
+ onlRvsRecord.devseqno += 1
+ onlRvsRecord.transdate = DateUtil.getNowDateNoFormat()
+ onlRvsRecord.transtime = DateUtil.getNowTimeNoFormat()
+ onlRvsRecord.reversalflag = ReversalFlag.MANUAL
+ onlRvsRecord.reversalbillno = record.billno
+ onlRvsRecord.upflag = 0
+ if (!pos.saveTransdtlOnline(onlRvsRecord)) {
+ throw CardPayCancelFailError("保存流水失败")
+ }
+ }
+
+ private fun checkOnlineReverseVaild(unionRecord: TransdtlUnionRecord, record: TransdtlOnlineRecord) {
+ if (record.cardphyid != cardBean!!.cardphyid) {
+ throw CardPayCancelFailError("该卡不是最后消费")
+ }
+ if (unionRecord.transdate != record.transdate ||
+ unionRecord.transtime != record.transtime
+ ) {
+ throw CardPayCancelFailError("联机记录时间异常")
+ }
+ if (record.reversalflag == ReversalFlag.AUTO
+ ) {
+ throw CardPayCancelFailError("已撤销")
+ }
+ if (record.reversalflag == ReversalFlag.MANUAL) {
+ throw CardPayCancelFailError("已冲正")
+ }
+ if (record.status != PayStatus.SUC) {
+ throw CardPayCancelFailError("消费失败不能冲正")
+ }
+ val t1 = DateUtil.dateFormatConvertToLong(record.transdate + record.transtime)
+ val t2 = System.currentTimeMillis()
+ if (t2 - t1 > PublicDef.REVERSE_MS_GAP) {
+ throw CardPayCancelFailError("消费已过期")
+ }
+ }
+
+ private fun checkOfflineReverseVaild(unionRecord: TransdtlUnionRecord, record: TransdtlOfflineRecord) {
+ if (record.cardphyid != cardBean!!.cardphyid) {
+ throw CardPayCancelFailError("该卡不是最后消费")
+ }
+ if (unionRecord.transdate != record.transdate ||
+ unionRecord.transtime != record.transtime
+ ) {
+ throw CardPayCancelFailError("离线记录时间异常")
+ }
+ if (record.reversalflag == ReversalFlag.MANUAL ||
+ record.reversalflag == ReversalFlag.AUTO
+ ) {
+ throw CardPayCancelFailError("已冲正")
+ }
+ if (record.status != PayStatus.SUC) {
+ throw CardPayCancelFailError("消费失败不能冲正")
+ }
+ val t1 = DateUtil.dateFormatConvertToLong(record.transdate + record.transtime)
+ val t2 = System.currentTimeMillis()
+ if (t2 - t1 > PublicDef.REVERSE_MS_GAP) {
+ throw CardPayCancelFailError("消费已过期")
+ }
}
private fun doOnlineConsume(): Boolean {
@@ -202,25 +338,64 @@
}
resp = consumeApi.payConfirm(onlRecord)
result = parseConfirmResult(resp)
- if (result) {
- showSucInfo()
+ payQueryConfirm = false
+ if (!result) {
+ payQueryConfirm = true
+ result = doOnlineConsumeQuery()
}
updateTransdtlOnline(result)
+ if (result) {
+ showOnlSucInfo()
+ }
return result
}
+ private fun doOnlineConsumeQuery(): Boolean {
+ var queryCnt = 1
+ sleepWithCancel(1000)
+ while (payQueryConfirm) {
+ sendMsg(PublicDef.MSG_CARD_PAY_QUERY, "消费确认中[$queryCnt]")
+ val resp = consumeApi.payQuery(onlRecord)
+ val result = parseConfirmResult(resp)
+ if (result) {
+ return result
+ }
+ queryCnt += 1
+ sleepWithCancel(3000)
+ }
+ /**
+ * 手动取消交易
+ */
+ LogUtil.e(TAG, "manual cancel pay,cardphyid=[${onlRecord.cardphyid}],billno=[${onlRecord.billno}]")
+ throw CardPayInterruptError("交易取消")
+ }
+
+ private fun sleepWithCancel(ms: Long) {
+ var time = 0
+ while (payQueryConfirm) {
+ CommonUtil.doSleep(20)
+ time += 20
+ if (time > ms) {
+ return
+ }
+ }
+ }
+
private fun parseInitResult(resp: TransResp?): Boolean {
if (resp == null || resp.retcode != HttpStatus.SC_OK) {
SPApplication.getInstance().setEpayLinking(false)
return false
}
- val retBean = GsonUtil.GsonToBean(resp.retjson!!, CardPayInitRetBean::class.java)
+ val retBean = try {
+ GsonUtil.GsonToBean(resp.retjson!!, CardPayInitRetBean::class.java)
+ } catch (ex: java.lang.Exception) {
+ throw CardPayFailError("json异常:${ex.message}")
+ }
if (retBean.retcode != PublicDef.SUCCESS) {
- throw CardPayFailError(retBean.retmsg!!)
+ throw CardPayFailError(retBean.getErrorMsg())
}
onlRecord.billno = retBean.billno
onlRecord.username = retBean.username
-// onlRecord.userid = retBean.userid
return true
}
@@ -229,17 +404,19 @@
SPApplication.getInstance().setEpayLinking(false)
return false
}
- val retBean = GsonUtil.GsonToBean(resp.retjson!!, CardPayConfirmRetBean::class.java)
+ val retBean = try {
+ GsonUtil.GsonToBean(resp.retjson!!, CardPayConfirmRetBean::class.java)
+ } catch (ex: Exception) {
+ throw CardPayFailError("json异常:${ex.message}")
+ }
if (retBean.retcode != PublicDef.SUCCESS) {
- throw CardPayFailError(retBean.retmsg!!)
+ throw CardPayFailError(retBean.getErrorMsg())
}
if (retBean.require_query) {
- //TODO
- throw CardPayFailError("查询未实现")
+ return false
}
onlRecord.payamt = retBean.amount
onlRecord.extraamt = retBean.extraamt
- onlRecord.balance = retBean.balance
return true
}
@@ -250,12 +427,12 @@
seqno = pos.getDynamicPara()?.onlineseqno ?: 0
}
onlRecord.devphyid = pos.getConfigPara()!!.devphyid
- onlRecord.transdate = cardBean.datetime!!.substring(0, 8)
- onlRecord.transtime = cardBean.datetime!!.substring(8)
+ onlRecord.transdate = cardBean!!.datetime!!.substring(0, 8)
+ onlRecord.transtime = cardBean!!.datetime!!.substring(8)
onlRecord.devseqno = seqno + 1
- onlRecord.cardno = cardBean.cardNo
- onlRecord.cardphyid = cardBean.cardphyid
- onlRecord.payamt = cardBean.amount
+ onlRecord.cardno = cardBean!!.cardNo
+ onlRecord.cardphyid = cardBean!!.cardphyid
+ onlRecord.payamt = cardBean!!.amount
onlRecord.reversalflag = ReversalFlag.NONE
onlRecord.extraamt = 0
onlRecord.transtype = "card"
@@ -280,6 +457,7 @@
initTransdtlOffline()
checkCardValid()
updateTransdtlOffline(true)
+ showOffSucInfo()
}
private fun checkCardValid() {
@@ -298,11 +476,16 @@
val whiteRecord =
pos.getWhiteList(offRecord.cardphyid!!, offRecord.cardno!!) ?: throw CardPayFailError("卡无权限")
- if (whiteRecord.flag == 1) {
- throw CardPayFailError("卡已锁定")
- }
- if (whiteRecord.balance < offRecord.payamt) {
- throw CardPayFailError("请到联机设备使用")
+ when (whiteRecord.status) {
+ "normal" -> {
+
+ }
+ "expire" -> throw CardPayFailError("卡已过期")
+ "lost" -> throw CardPayFailError("卡已挂失")
+ "logout" -> throw CardPayFailError("卡已注销")
+ "frozen" -> throw CardPayFailError("卡已冻结")
+ "lock" -> throw CardPayFailError("卡已锁定")
+ else -> throw CardPayFailError("卡状态:${whiteRecord.status}")
}
}
@@ -313,12 +496,12 @@
seqno = pos.getDynamicPara()?.offlineseqno ?: 0
}
offRecord.devphyid = pos.getConfigPara()!!.devphyid
- offRecord.transdate = cardBean.datetime!!.substring(0, 8)
- offRecord.transtime = cardBean.datetime!!.substring(8)
+ offRecord.transdate = cardBean!!.datetime!!.substring(0, 8)
+ offRecord.transtime = cardBean!!.datetime!!.substring(8)
offRecord.devseqno = seqno + 1
- offRecord.cardno = cardBean.cardNo
- offRecord.cardphyid = cardBean.cardphyid
- offRecord.payamt = cardBean.amount
+ offRecord.cardno = cardBean!!.cardNo
+ offRecord.cardphyid = cardBean!!.cardphyid
+ offRecord.payamt = cardBean!!.amount
offRecord.reversalflag = ReversalFlag.NONE
offRecord.extraamt = 0
offRecord.managefeetype = "none"
@@ -339,6 +522,89 @@
if (!pos.updateTransdtlOffline(offRecord)) {
throw CardPayFailError("更新流水失败")
}
+ asyncUpload(offRecord)
+ }
+
+ private fun showOnlSucInfo() {
+ val info = CardUserInfoBean(PublicDef.SUCCESS, "消费成功")
+ info.showtime = pos.getSysPara()!!.sucShowtime
+ info.amount = onlRecord.payamt
+ info.payamt = onlRecord.payamt
+ info.username = onlRecord.username
+ info.cardno = onlRecord.cardno
+ info.transdate = onlRecord.transdate
+ info.transtime = onlRecord.transtime
+ info.payway = onlRecord.transtype
+ info.status = onlRecord.status
+ info.reversalFlag = onlRecord.reversalflag
+ sendMsg(PublicDef.MSG_CARD_PAY_SUC, info)
+ }
+
+ private fun showOffSucInfo() {
+ val info = CardUserInfoBean(PublicDef.SUCCESS, "消费成功")
+ info.showtime = pos.getSysPara()!!.sucShowtime
+ info.amount = offRecord.payamt
+ info.payamt = offRecord.payamt
+ info.cardno = offRecord.cardno
+ info.transdate = offRecord.transdate
+ info.transtime = offRecord.transtime
+ info.payway = "card"
+ info.status = offRecord.status
+ info.reversalFlag = offRecord.reversalflag
+ sendMsg(PublicDef.MSG_CARD_PAY_SUC, info)
+ }
+
+ private fun showRvsOnlSucInfo() {
+ val info = CardUserInfoBean(PublicDef.SUCCESS, "冲正成功")
+ info.showtime = pos.getSysPara()!!.sucShowtime
+ info.amount = onlRvsRecord.payamt
+ info.payamt = onlRvsRecord.payamt
+ info.username = onlRvsRecord.username
+ info.cardno = onlRvsRecord.cardno
+ info.transdate = onlRvsRecord.transdate
+ info.transtime = onlRvsRecord.transtime
+ info.payway = onlRvsRecord.transtype
+ info.status = onlRvsRecord.status
+ info.reversalFlag = onlRvsRecord.reversalflag
+ sendMsg(PublicDef.MSG_CARD_REVERSE_SUC, info)
+ }
+
+ private fun showRvsOffSucInfo() {
+ val info = CardUserInfoBean(PublicDef.SUCCESS, "冲正成功")
+ info.showtime = pos.getSysPara()!!.sucShowtime
+ info.amount = offRvsRecord.payamt
+ info.payamt = offRvsRecord.payamt
+ info.cardno = offRvsRecord.cardno
+ info.transdate = offRvsRecord.transdate
+ info.transtime = offRvsRecord.transtime
+ info.payway = "card"
+ info.status = offRvsRecord.status
+ info.reversalFlag = offRvsRecord.reversalflag
+ sendMsg(PublicDef.MSG_CARD_REVERSE_SUC, info)
+ }
+
+ private fun asyncUpload(dtl: TransdtlOfflineRecord) {
+ ThreadPool.getShortPool().execute(Runnable {
+ try {
+ EpayApiImpl().uploadTransdtl(dtl)
+ dtl.upflag = 1
+ pos.updateTransdtlOffline(dtl)
+ } catch (ex: java.lang.Exception) {
+ ex.printStackTrace()
+ }
+ })
+ }
+
+ private fun asyncUpload(dtl: TransdtlOnlineRecord) {
+ ThreadPool.getShortPool().execute(Runnable {
+ try {
+ EpayApiImpl().uploadTransdtl(dtl)
+ dtl.upflag = 1
+ pos.updateTransdtlOnline(dtl)
+ } catch (ex: java.lang.Exception) {
+ ex.printStackTrace()
+ }
+ })
}
private fun doClear() {
@@ -379,23 +645,30 @@
}
}
- private fun showSucInfo() {
- val info = CardUserInfoBean(PublicDef.SUCCESS, "消费成功")
- info.showtime = pos.getSysPara()!!.sucShowtime
- info.amount = onlRecord.payamt
- info.payamt = onlRecord.payamt
- info.username = onlRecord.username
- info.datetime = onlRecord.transdate + onlRecord.transtime
- info.payway = onlRecord.transtype
- info.status = PayStatus.SUC
- info.balance = onlRecord.balance
- sendMsg(PublicDef.MSG_CARD_PAY_SUC, info)
- }
-
private fun getErrorInfo(errmsg: String?): CardUserInfoBean {
val info = CardUserInfoBean(PublicDef.ERROR, errmsg ?: "null")
info.showtime = pos.getSysPara()!!.failShowtime
info.status = PayStatus.FAIL
+ info.amount = amount
+ info.payamt = amount
+ info.payway = "card"
+ info.cardno = cardBean?.cardNo
+ info.transdate = DateUtil.getNowDateNoFormat()
+ info.transtime = DateUtil.getNowTimeNoFormat()
+ return info
+ }
+
+ private fun getRvsErrorInfo(errmsg: String?): CardUserInfoBean {
+ val info = CardUserInfoBean(PublicDef.ERROR, errmsg ?: "null")
+ info.showtime = pos.getSysPara()!!.failShowtime
+ info.status = PayStatus.FAIL
+ info.amount = amount
+ info.payamt = amount
+ info.cardno = cardBean?.cardNo
+ info.payway = "card"
+ info.transdate = DateUtil.getNowDateNoFormat()
+ info.transtime = DateUtil.getNowTimeNoFormat()
+ info.reversalFlag = ReversalFlag.MANUAL
return info
}
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 f69e698..08b68c1 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
@@ -14,6 +14,7 @@
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
@@ -32,12 +33,15 @@
*/
@Volatile
private var interruptedPay: Boolean = false
+ @Volatile
+ private var amount = 0
fun interruptPay() {
interruptedPay = true
}
fun pay(code: String, amount: Int) {
+ this.amount = amount
interruptedPay = false
try {
initTransdtlOnline(code, amount)
@@ -58,7 +62,7 @@
}
private fun payResultQuery(): Boolean {
- sendMsg(PublicDef.MSG_CODE_PAYING_CANCEL, "谨慎操作查询取消")
+ sendMsg(PublicDef.MSG_PAYING_QUERY, "谨慎操作查询取消")
LogUtil.d(TAG, "扫码消费确认超时,进行查询操作:billno=${codeRecord.billno}")
sleepWithCancel(1500)
var searchCnt = 1
@@ -92,9 +96,13 @@
if (resp.retcode != HttpStatus.SC_OK) {
throw CardPayFailError("错误码=${resp.retcode}")
}
- val retBean = GsonUtil.GsonToBean(resp.retjson!!, CardPayConfirmRetBean::class.java)
+ val retBean = try {
+ GsonUtil.GsonToBean(resp.retjson!!, CardPayConfirmRetBean::class.java)
+ } catch (ex: Exception) {
+ throw CardPayFailError("json异常:${ex.message}")
+ }
if (retBean.retcode != PublicDef.SUCCESS) {
- throw CardPayFailError(retBean.retmsg!!)
+ throw CardPayFailError(retBean.getErrorMsg())
}
if (retBean.require_query) {
// 等待查询
@@ -102,7 +110,6 @@
}
codeRecord.payamt = retBean.amount
codeRecord.extraamt = retBean.extraamt
- codeRecord.balance = retBean.balance
return true
}
@@ -114,9 +121,13 @@
if (resp.retcode != HttpStatus.SC_OK) {
throw CardPayFailError("错误码=${resp.retcode}")
}
- val retBean = GsonUtil.GsonToBean(resp.retjson!!, CardPayInitRetBean::class.java)
+ val retBean = try {
+ GsonUtil.GsonToBean(resp.retjson!!, CardPayInitRetBean::class.java)
+ } catch (ex: Exception) {
+ throw CardPayFailError("json异常:${ex.message}")
+ }
if (retBean.retcode != PublicDef.SUCCESS) {
- throw CardPayFailError(retBean.retmsg!!)
+ throw CardPayFailError(retBean.getErrorMsg())
}
codeRecord.billno = retBean.billno
codeRecord.username = retBean.username
@@ -172,10 +183,12 @@
info.amount = codeRecord.payamt
info.payamt = codeRecord.payamt
info.username = codeRecord.username
- info.datetime = codeRecord.transdate + codeRecord.transtime
+ info.cardno = codeRecord.cardno
+ info.transdate = codeRecord.transdate
+ info.transtime = codeRecord.transtime
info.payway = codeRecord.transtype
- info.status = PayStatus.SUC
- info.balance = codeRecord.balance
+ info.status = codeRecord.status
+ info.reversalFlag = codeRecord.reversalflag
sendMsg(PublicDef.MSG_CARD_PAY_SUC, info)
}
@@ -183,6 +196,11 @@
val info = CardUserInfoBean(PublicDef.ERROR, errmsg ?: "null")
info.showtime = pos.getSysPara()!!.failShowtime
info.status = PayStatus.FAIL
+ info.amount = amount
+ info.payamt = amount
+ info.payway = "code"
+ info.transdate = DateUtil.getNowDateNoFormat()
+ info.transtime = DateUtil.getNowTimeNoFormat()
return info
}
diff --git a/app/src/main/java/com/supwisdom/activities/menu/MenuPresenter.kt b/app/src/main/java/com/supwisdom/activities/menu/MenuPresenter.kt
index cbfac25..8f49136 100644
--- a/app/src/main/java/com/supwisdom/activities/menu/MenuPresenter.kt
+++ b/app/src/main/java/com/supwisdom/activities/menu/MenuPresenter.kt
@@ -13,7 +13,6 @@
import com.supwisdom.exception.TransdtlUploadError
import com.supwisdom.service.AuthEpay
import com.supwisdom.service.EpayApiImpl
-import com.supwisdom.utils.CommonUtil
import com.supwisdom.utils.DateUtil
import com.supwisdom.utils.PublicDef
@@ -108,6 +107,7 @@
intent.putExtra("datetime", DateUtil.getNowDateNoFormat())
intent.putExtra("amount", record.payamt.toString())
intent.putExtra("payway", record.payway)
+ intent.putExtra("operation", "reverse")
intent.setClass(iMenuView.getActivity(), ConsumeActivity::class.java)
iMenuView.getActivity().startActivity(intent)
}
diff --git a/app/src/main/java/com/supwisdom/activities/revenue/RevenuePresenter.kt b/app/src/main/java/com/supwisdom/activities/revenue/RevenuePresenter.kt
index 4ee5bd2..cbf95db 100644
--- a/app/src/main/java/com/supwisdom/activities/revenue/RevenuePresenter.kt
+++ b/app/src/main/java/com/supwisdom/activities/revenue/RevenuePresenter.kt
@@ -23,7 +23,7 @@
private inner class AsyncRevenue : AsyncTask<String, Void, RevenueAmtRetBean>() {
override fun onPostExecute(retBean: RevenueAmtRetBean) {
if (retBean.retcode != PublicDef.SUCCESS) {
- iRevenueView.showRevenueFail(retBean.retmsg!!)
+ iRevenueView.showRevenueFail(retBean.getErrorMsg())
} else {
iRevenueView.showRevenueSuc(retBean)
}
@@ -36,7 +36,11 @@
if (resp.retcode != HttpStatus.SC_OK) {
return RevenueAmtRetBean(resp.retcode, "错误码=" + resp.retcode)
}
- return GsonUtil.GsonToBean(resp.retjson!!, RevenueAmtRetBean::class.java)
+ return try {
+ GsonUtil.GsonToBean(resp.retjson!!, RevenueAmtRetBean::class.java)
+ } catch (ex: Exception) {
+ RevenueAmtRetBean(PublicDef.ERROR, "json异常:${ex.message}")
+ }
}
}
}
\ No newline at end of file
diff --git a/app/src/main/java/com/supwisdom/activities/syspara/SysparaActivity.kt b/app/src/main/java/com/supwisdom/activities/syspara/SysparaActivity.kt
index f2dba5f..160dfe3 100644
--- a/app/src/main/java/com/supwisdom/activities/syspara/SysparaActivity.kt
+++ b/app/src/main/java/com/supwisdom/activities/syspara/SysparaActivity.kt
@@ -45,9 +45,9 @@
kvMap[index++] = ControlParaRecord("服务器标识>>", cfgRecord.epayUri!!)
kvMap[index++] = ControlParaRecord("服务器端口>>", "" + cfgRecord.epayPort)
kvMap[index++] =
- ControlParaRecord("参数版本号>>", "no:" + dyRecord!!.paraverno + ",id:" + dyRecord.paragroupid)
+ ControlParaRecord("参数版本号>>", "no:${dyRecord!!.paraverno},id:${dyRecord.paragroupid}")
kvMap[index++] = ControlParaRecord("白名单版本>>", dyRecord.cardverno!!)
- kvMap[index++] = ControlParaRecord("通讯超时>>", String.format("%ds", CommonUtil.getCommunicateTime()))
+ kvMap[index++] = ControlParaRecord("通讯超时>>", "${CommonUtil.getCommunicateTime()}s")
if (sysRecord!!.returnFlag and 0x1 == 1) {
kvMap[index++] = ControlParaRecord("冲正使能>>", "启用")
} else {
@@ -63,17 +63,12 @@
} else {
kvMap[index++] = ControlParaRecord("网络状态>>", "脱机")
}
- kvMap[index++] = ControlParaRecord("成功显时间>>", String.format("%ds", sysRecord!!.sucShowtime))
- kvMap[index++] = ControlParaRecord("失败显时间>>", String.format("%ds", sysRecord.failShowtime))
- kvMap[index++] = ControlParaRecord("联机流水号>>", String.format("%d", pos.getTransdtlOnlineMaxSeqno()))
- kvMap[index++] = ControlParaRecord("离线流水号>>", String.format("%d", pos.getTransdtlOfflineMaxSeqno()))
- kvMap[index++] = ControlParaRecord(
- "未上传流水>>", String.format(
- "%d", pos.getTransdtlOnlineUnconfirm()
- + pos.getTransdtlOfflineUnconfirm()
- )
- )
- kvMap[index++] = ControlParaRecord("定额间隔时间(s)>>", "" + sysRecord.fixpayGap)
+ kvMap[index++] = ControlParaRecord("成功显时间>>", "${sysRecord.sucShowtime}s")
+ kvMap[index++] = ControlParaRecord("失败显时间>>", "${sysRecord.failShowtime}s")
+ kvMap[index++] = ControlParaRecord("联机流水号>>", pos.getTransdtlOnlineMaxSeqno().toString())
+ kvMap[index++] = ControlParaRecord("离线流水号>>", pos.getTransdtlOfflineMaxSeqno().toString())
+ kvMap[index++] = ControlParaRecord("未上传流水>>", pos.getTransdtlUnconfirmNum().toString())
+ kvMap[index++] = ControlParaRecord("定额间隔时间(s)>>", "${sysRecord.fixpayGap}s")
kvMap[index++] = ControlParaRecord("心跳间隔>>", "${sysRecord.heatBeat}s")
}
diff --git a/app/src/main/java/com/supwisdom/activities/upgrade/mode/EpayUpgradeApi.kt b/app/src/main/java/com/supwisdom/activities/upgrade/mode/EpayUpgradeApi.kt
index 1545002..336efac 100644
--- a/app/src/main/java/com/supwisdom/activities/upgrade/mode/EpayUpgradeApi.kt
+++ b/app/src/main/java/com/supwisdom/activities/upgrade/mode/EpayUpgradeApi.kt
@@ -21,7 +21,7 @@
class EpayUpgradeApi constructor(callbackInterface: CallbackInterface) {
private val TIMEOUT = 5 * 1000// 超时
private val callbackInterface = callbackInterface
- private val POSID = "chargepos"
+ private val POSID = "posa711dali"
fun upgrade(versionName: String) {
val resp = getAppVersion()
@@ -41,11 +41,9 @@
}
private fun downloadUpdateFile(downUrl: String, file: File, versionName: String): Boolean {
-// val downStep = 1// 提示step
var downStep = 0// 提示step
val totalSize: Int// 文件总大小
var downloadCount = 0// 已经下载好的大小
- var updateCount = 0// 已经上传的文件大小
try {
val url = URL(downUrl)
val urlConnection = url.openConnection() as HttpURLConnection
@@ -163,7 +161,7 @@
}
} catch (e: Exception) {
e.printStackTrace()
- UpgradeInfoRetBean(PublicDef.ERROR, "获取版本号JSON错误:${e.message}")
+ UpgradeInfoRetBean(PublicDef.ERROR, "获取版本号JSON异常:${e.message}")
}
}
diff --git a/app/src/main/java/com/supwisdom/bean/BaseResp.kt b/app/src/main/java/com/supwisdom/bean/BaseResp.kt
index ac5fb29..68e95fe 100644
--- a/app/src/main/java/com/supwisdom/bean/BaseResp.kt
+++ b/app/src/main/java/com/supwisdom/bean/BaseResp.kt
@@ -14,4 +14,7 @@
var retcode: Int = 0
var retmsg: String? = null
+ fun getErrorMsg(): String {
+ return retmsg ?: "错误码:$retcode"
+ }
}
\ No newline at end of file
diff --git a/app/src/main/java/com/supwisdom/bean/WhiteListItemBean.kt b/app/src/main/java/com/supwisdom/bean/WhiteListItemBean.kt
index 398667c..f74f4a5 100644
--- a/app/src/main/java/com/supwisdom/bean/WhiteListItemBean.kt
+++ b/app/src/main/java/com/supwisdom/bean/WhiteListItemBean.kt
@@ -7,6 +7,5 @@
class WhiteListItemBean {
var cardphyid: String? = null
var cardno: String? = null
- var flag: Int = 0
- var balance: Int = 0
+ var status: String? = null
}
\ No newline at end of file
diff --git a/app/src/main/java/com/supwisdom/db/BeanPropEnum.kt b/app/src/main/java/com/supwisdom/db/BeanPropEnum.kt
index 8eb7e66..a89d80e 100644
--- a/app/src/main/java/com/supwisdom/db/BeanPropEnum.kt
+++ b/app/src/main/java/com/supwisdom/db/BeanPropEnum.kt
@@ -43,6 +43,7 @@
paragroupid,
cardverno,
jwt,
+ jwtexpire,
token
}
@@ -64,7 +65,6 @@
extraamt,
managefeetype,
username,
- balance,
billno,
reversalflag,
reversalbillno,
@@ -92,12 +92,12 @@
enum class WhiteList {
cardphyid,
cardno,
- flag,
- balance
+ status
}
enum class TransdtlUnion {
username,
+ cardno,
transdate,
transtime,
devseqno,
diff --git a/app/src/main/java/com/supwisdom/db/DBParaHelper.kt b/app/src/main/java/com/supwisdom/db/DBParaHelper.kt
index 17c542a..3617287 100644
--- a/app/src/main/java/com/supwisdom/db/DBParaHelper.kt
+++ b/app/src/main/java/com/supwisdom/db/DBParaHelper.kt
@@ -41,8 +41,7 @@
+ TABLE_NAME_WHITELIST + " ( "
+ BeanPropEnum.WhiteList.cardphyid + " varchar(32),"
+ BeanPropEnum.WhiteList.cardno + " varchar(32),"
- + BeanPropEnum.WhiteList.flag + " integer,"
- + BeanPropEnum.WhiteList.balance + " integer,"
+ + BeanPropEnum.WhiteList.status + " varchar(16),"
+ "primary key ("
+ BeanPropEnum.WhiteList.cardphyid + ","
+ BeanPropEnum.WhiteList.cardno + ") )")
@@ -63,8 +62,9 @@
+ BeanPropEnum.DynamicPara.offlineseqno + " integer, "
+ BeanPropEnum.DynamicPara.paraverno + " integer, "
+ BeanPropEnum.DynamicPara.paragroupid + " integer, "
- + BeanPropEnum.DynamicPara.cardverno + " char(14),"
+ + BeanPropEnum.DynamicPara.cardverno + " varchar(32),"
+ BeanPropEnum.DynamicPara.jwt + " varchar(254),"
+ + BeanPropEnum.DynamicPara.jwtexpire + " varchar(16),"
+ BeanPropEnum.DynamicPara.token + " varchar(32) )")
private val DROP_TABLE_NAME_DYNAMICPARA = "DROP TABLE IF EXISTS $TABLE_NAME_DYNAMICPARA"
private val CREATE_TABLE_NAME_SYSPARA = ("create table IF NOT EXISTS "
diff --git a/app/src/main/java/com/supwisdom/db/DBTransdtlHelper.kt b/app/src/main/java/com/supwisdom/db/DBTransdtlHelper.kt
index aadfb8d..328f06d 100644
--- a/app/src/main/java/com/supwisdom/db/DBTransdtlHelper.kt
+++ b/app/src/main/java/com/supwisdom/db/DBTransdtlHelper.kt
@@ -46,7 +46,6 @@
+ BeanPropEnum.TransdtlOnline.transtype + " varchar(8),"
+ BeanPropEnum.TransdtlOnline.payamt + " integer,"
+ BeanPropEnum.TransdtlOnline.extraamt + " integer,"
- + BeanPropEnum.TransdtlOnline.balance + " integer,"
+ BeanPropEnum.TransdtlOnline.managefeetype + " varchar(10),"
+ BeanPropEnum.TransdtlOnline.username + " varchar(32),"
+ BeanPropEnum.TransdtlOnline.billno + " varchar(32),"
diff --git a/app/src/main/java/com/supwisdom/db/DynamicParaDao.kt b/app/src/main/java/com/supwisdom/db/DynamicParaDao.kt
index 20ab20d..5c6b0fb 100644
--- a/app/src/main/java/com/supwisdom/db/DynamicParaDao.kt
+++ b/app/src/main/java/com/supwisdom/db/DynamicParaDao.kt
@@ -93,6 +93,7 @@
record.paragroupid = cursor.getInt(cursor.getColumnIndex(BeanPropEnum.DynamicPara.paragroupid.toString()))
record.cardverno = cursor.getString(cursor.getColumnIndex(BeanPropEnum.DynamicPara.cardverno.toString()))
record.jwt = cursor.getString(cursor.getColumnIndex(BeanPropEnum.DynamicPara.jwt.toString()))
+ record.jwtExpire = cursor.getString(cursor.getColumnIndex(BeanPropEnum.DynamicPara.jwtexpire.toString()))
record.token = cursor.getString(cursor.getColumnIndex(BeanPropEnum.DynamicPara.token.toString()))
return record
}
@@ -112,6 +113,7 @@
values.put(BeanPropEnum.DynamicPara.cardverno.toString(), record.cardverno)
values.put(BeanPropEnum.DynamicPara.jwt.toString(), record.jwt)
values.put(BeanPropEnum.DynamicPara.token.toString(), record.token)
+ values.put(BeanPropEnum.DynamicPara.jwtexpire.toString(), record.jwtExpire)
return values
}
}
\ No newline at end of file
diff --git a/app/src/main/java/com/supwisdom/db/Pos.kt b/app/src/main/java/com/supwisdom/db/Pos.kt
index d03277b..0f36600 100644
--- a/app/src/main/java/com/supwisdom/db/Pos.kt
+++ b/app/src/main/java/com/supwisdom/db/Pos.kt
@@ -161,6 +161,15 @@
return onlMaxSeqno
}
+ fun getTransdtlOnlineLast(): TransdtlOnlineRecord? {
+ try {
+ transdtlOnlineDao.getLock().lock()
+ return transdtlOnlineDao.getLast()
+ } finally {
+ transdtlOnlineDao.getLock().unlock()
+ }
+ }
+
fun getTransdtlOnlineUnconfirm(): List<TransdtlOnlineRecord> {
try {
transdtlOnlineDao.getLock().lock()
@@ -170,10 +179,31 @@
}
}
+ fun getTransdtlUnconfirmNum(): Int {
+ var num = 0
+ try {
+ transdtlOnlineDao.getLock().lock()
+ num += transdtlOnlineDao.getUnconfirmNum()
+ } finally {
+ transdtlOnlineDao.getLock().unlock()
+ }
+ try {
+ transdtlOfflineDao.getLock().lock()
+ num += transdtlOfflineDao.getUnconfirmNum()
+ } finally {
+ transdtlOfflineDao.getLock().unlock()
+ }
+ return num
+ }
+
fun saveTransdtlOnline(record: TransdtlOnlineRecord): Boolean {
try {
transdtlOnlineDao.getLock().lock()
- return transdtlOnlineDao.save(record)
+ if (transdtlOnlineDao.save(record)) {
+ onlMaxSeqno = record.devseqno
+ return true
+ }
+ return false
} finally {
transdtlOnlineDao.getLock().unlock()
}
@@ -218,10 +248,23 @@
}
}
+ fun getTransdtlOfflineLast(): TransdtlOfflineRecord? {
+ try {
+ transdtlOfflineDao.getLock().lock()
+ return transdtlOfflineDao.getLast()
+ } finally {
+ transdtlOfflineDao.getLock().unlock()
+ }
+ }
+
fun saveTransdtlOffline(record: TransdtlOfflineRecord): Boolean {
try {
transdtlOfflineDao.getLock().lock()
- return transdtlOfflineDao.save(record)
+ if (transdtlOfflineDao.save(record)) {
+ offMaxSeqno = record.devseqno
+ return true
+ }
+ return false
} finally {
transdtlOfflineDao.getLock().unlock()
}
diff --git a/app/src/main/java/com/supwisdom/db/TransdtlOfflineDao.kt b/app/src/main/java/com/supwisdom/db/TransdtlOfflineDao.kt
index 20bcec1..fb9d0c0 100644
--- a/app/src/main/java/com/supwisdom/db/TransdtlOfflineDao.kt
+++ b/app/src/main/java/com/supwisdom/db/TransdtlOfflineDao.kt
@@ -87,6 +87,24 @@
return 0
}
+ fun getUnconfirmNum(): Int {
+ val db = dbHelper.readableDatabase
+ var cursor: Cursor? = null
+ val sql = ("select COUNT("
+ + BeanPropEnum.TransdtlOffline.devseqno
+ + ") as num from " + TABLE
+ + " where " + BeanPropEnum.TransdtlOffline.upflag + "=0")
+ try {
+ cursor = db.rawQuery(sql, null)
+ if (cursor != null && cursor.moveToNext()) {
+ return cursor.getInt(cursor.getColumnIndex("num"))
+ }
+ } finally {
+ cursor?.close()
+ }
+ return 0
+ }
+
fun clear(): Boolean {
val db = dbHelper.writableDatabase
try {
@@ -101,10 +119,25 @@
}
}
+ fun getLast(): TransdtlOfflineRecord? {
+ val db = dbHelper.readableDatabase
+ var cursor: Cursor? = null
+ val orderBy = BeanPropEnum.TransdtlOffline.devseqno.toString() + " desc"
+ try {
+ cursor = db.query(TABLE, null, null, null, null, null, orderBy, "1")
+ if (cursor != null && cursor.moveToNext()) {
+ return getRecord(cursor)
+ }
+ return null
+ } finally {
+ cursor?.close()
+ }
+ }
+
fun clear(date: String): Boolean {
val db = dbHelper.writableDatabase
val selection =
- BeanPropEnum.TransdtlOffline.upflag.toString() + "=?" + BeanPropEnum.TransdtlOffline.transdate + "<?"
+ BeanPropEnum.TransdtlOffline.upflag.toString() + "=? and " + BeanPropEnum.TransdtlOffline.transdate + "<?"
try {
db.beginTransaction()
if (db.delete(TABLE, selection, arrayOf("1", date)) < 0) {
diff --git a/app/src/main/java/com/supwisdom/db/TransdtlOnlineDao.kt b/app/src/main/java/com/supwisdom/db/TransdtlOnlineDao.kt
index 063c6e7..78a4328 100644
--- a/app/src/main/java/com/supwisdom/db/TransdtlOnlineDao.kt
+++ b/app/src/main/java/com/supwisdom/db/TransdtlOnlineDao.kt
@@ -72,6 +72,39 @@
}
}
+ fun getLast(): TransdtlOnlineRecord? {
+ val db = dbHelper.readableDatabase
+ var cursor: Cursor? = null
+ val orderBy = BeanPropEnum.TransdtlOnline.devseqno.toString() + " desc"
+ try {
+ cursor = db.query(TABLE, null, null, null, null, null, orderBy, "1")
+ if (cursor != null && cursor.moveToNext()) {
+ return getRecord(cursor)
+ }
+ return null
+ } finally {
+ cursor?.close()
+ }
+ }
+
+ fun getUnconfirmNum(): Int {
+ val db = dbHelper.readableDatabase
+ var cursor: Cursor? = null
+ val sql = ("select COUNT("
+ + BeanPropEnum.TransdtlOnline.devseqno
+ + ") as num from " + TABLE
+ + " where " + BeanPropEnum.TransdtlOnline.upflag + "=0")
+ try {
+ cursor = db.rawQuery(sql, null)
+ if (cursor != null && cursor.moveToNext()) {
+ return cursor.getInt(cursor.getColumnIndex("num"))
+ }
+ } finally {
+ cursor?.close()
+ }
+ return 0
+ }
+
fun getMaxSeqno(): Int {
val db = dbHelper.readableDatabase
val sql = ("select max(${BeanPropEnum.TransdtlOnline.devseqno}) as seqno from $TABLE")
@@ -104,7 +137,7 @@
fun clear(date: String): Boolean {
val db = dbHelper.writableDatabase
val selection =
- BeanPropEnum.TransdtlOnline.upflag.toString() + "=?" + BeanPropEnum.TransdtlOnline.transdate + "<?"
+ BeanPropEnum.TransdtlOnline.upflag.toString() + "=? and " + BeanPropEnum.TransdtlOnline.transdate + "<?"
try {
db.beginTransaction()
if (db.delete(TABLE, selection, arrayOf("1", date)) < 0) {
@@ -133,7 +166,6 @@
record.username = cursor.getString(cursor.getColumnIndex(BeanPropEnum.TransdtlOnline.username.toString()))
record.payamt = cursor.getInt(cursor.getColumnIndex(BeanPropEnum.TransdtlOnline.payamt.toString()))
record.extraamt = cursor.getInt(cursor.getColumnIndex(BeanPropEnum.TransdtlOnline.extraamt.toString()))
- record.balance = cursor.getInt(cursor.getColumnIndex(BeanPropEnum.TransdtlOnline.balance.toString()))
var flag = cursor.getString(cursor.getColumnIndex(BeanPropEnum.TransdtlOnline.reversalflag.toString()))
when (flag) {
ReversalFlag.NONE.toString() -> record.reversalflag = ReversalFlag.NONE
@@ -166,7 +198,6 @@
values.put(BeanPropEnum.TransdtlOnline.transtype.toString(), record.transtype)
values.put(BeanPropEnum.TransdtlOnline.payamt.toString(), record.payamt)
values.put(BeanPropEnum.TransdtlOnline.extraamt.toString(), record.extraamt)
- values.put(BeanPropEnum.TransdtlOnline.balance.toString(), record.balance)
values.put(BeanPropEnum.TransdtlOnline.billno.toString(), record.billno)
values.put(BeanPropEnum.TransdtlOnline.managefeetype.toString(), record.managefeetype)
values.put(BeanPropEnum.TransdtlOnline.username.toString(), record.username)
diff --git a/app/src/main/java/com/supwisdom/db/TransdtlUnionDao.kt b/app/src/main/java/com/supwisdom/db/TransdtlUnionDao.kt
index 78bae0c..e764afa 100644
--- a/app/src/main/java/com/supwisdom/db/TransdtlUnionDao.kt
+++ b/app/src/main/java/com/supwisdom/db/TransdtlUnionDao.kt
@@ -24,8 +24,8 @@
.append(BeanPropEnum.TransdtlOffline.reversalflag).append(",")
.append(BeanPropEnum.TransdtlOffline.payamt).append(",")
.append(BeanPropEnum.TransdtlOffline.status).append(",")
- .append(BeanPropEnum.TransdtlOffline.cardno).append(" as ").append(BeanPropEnum.TransdtlUnion.username)
- .append(",")
+ .append(" 'null' as ").append(BeanPropEnum.TransdtlUnion.username).append(",")
+ .append(BeanPropEnum.TransdtlOffline.cardno).append(",")
.append(BeanPropEnum.TransdtlOffline.upflag)
.append(" from ").append(DBTransdtlHelper.TABLE_NAME_DTL_OFFLINE)
.append(" UNION ALL select ")
@@ -38,6 +38,7 @@
.append(BeanPropEnum.TransdtlOnline.payamt).append(",")
.append(BeanPropEnum.TransdtlOnline.status).append(",")
.append(BeanPropEnum.TransdtlOnline.username).append(",")
+ .append(BeanPropEnum.TransdtlOnline.cardno).append(",")
.append(BeanPropEnum.TransdtlOnline.upflag)
.append(" from ").append(DBTransdtlHelper.TABLE_NAME_DTL_ONLINE)
}
@@ -97,6 +98,10 @@
record.devseqno = cursor.getInt(cursor.getColumnIndex(BeanPropEnum.TransdtlUnion.devseqno.toString()))
record.payway = cursor.getString(cursor.getColumnIndex(BeanPropEnum.TransdtlUnion.payway.toString()))
record.username = cursor.getString(cursor.getColumnIndex(BeanPropEnum.TransdtlUnion.username.toString()))
+ if (record.username == "null") {
+ record.username = null
+ }
+ record.cardno = cursor.getString(cursor.getColumnIndex(BeanPropEnum.TransdtlUnion.cardno.toString()))
var flag = cursor.getString(cursor.getColumnIndex(BeanPropEnum.TransdtlUnion.reversalflag.toString()))
when (flag) {
ReversalFlag.NONE.toString() -> record.reversalflag = ReversalFlag.NONE
diff --git a/app/src/main/java/com/supwisdom/db/WhiteListDao.kt b/app/src/main/java/com/supwisdom/db/WhiteListDao.kt
index a5dfcdd..2630c43 100644
--- a/app/src/main/java/com/supwisdom/db/WhiteListDao.kt
+++ b/app/src/main/java/com/supwisdom/db/WhiteListDao.kt
@@ -68,8 +68,7 @@
val record = WhiteListRecord()
record.cardphyid = cursor.getString(cursor.getColumnIndex(BeanPropEnum.WhiteList.cardphyid.toString()))
record.cardno = cursor.getString(cursor.getColumnIndex(BeanPropEnum.WhiteList.cardno.toString()))
- record.flag = cursor.getInt(cursor.getColumnIndex(BeanPropEnum.WhiteList.flag.toString()))
- record.balance = cursor.getInt(cursor.getColumnIndex(BeanPropEnum.WhiteList.balance.toString()))
+ record.status = cursor.getString(cursor.getColumnIndex(BeanPropEnum.WhiteList.status.toString()))
return record
}
@@ -77,8 +76,7 @@
val values = ContentValues()
values.put(BeanPropEnum.WhiteList.cardphyid.toString(), record.cardphyid)
values.put(BeanPropEnum.WhiteList.cardno.toString(), record.cardno)
- values.put(BeanPropEnum.WhiteList.flag.toString(), record.flag)
- values.put(BeanPropEnum.WhiteList.balance.toString(), record.balance)
+ values.put(BeanPropEnum.WhiteList.status.toString(), record.status)
return values
}
}
\ No newline at end of file
diff --git a/app/src/main/java/com/supwisdom/entity/TransdtlOfflineRecord.kt b/app/src/main/java/com/supwisdom/entity/TransdtlOfflineRecord.kt
index ea0e3b4..347d10a 100644
--- a/app/src/main/java/com/supwisdom/entity/TransdtlOfflineRecord.kt
+++ b/app/src/main/java/com/supwisdom/entity/TransdtlOfflineRecord.kt
@@ -1,10 +1,12 @@
package com.supwisdom.entity
+import com.supwisdom.utils.GsonUtil
+
/**
** create by zzq on 2019/7/24
** @desc 离线流水
**/
-class TransdtlOfflineRecord {
+class TransdtlOfflineRecord : Cloneable {
var devphyid: String? = null
var transdate: String? = null
var transtime: String? = null
@@ -20,4 +22,9 @@
var reversaltranstime: String? = null //被冲正流水时间
var status: PayStatus? = null // init,fail,suc
var upflag: Int = 0 // 1已上传
+
+ public override fun clone(): TransdtlOfflineRecord {
+ val tmp = GsonUtil.GsonString(this)
+ return GsonUtil.GsonToBean(tmp, TransdtlOfflineRecord::class.java)
+ }
}
\ No newline at end of file
diff --git a/app/src/main/java/com/supwisdom/entity/TransdtlOnlineRecord.kt b/app/src/main/java/com/supwisdom/entity/TransdtlOnlineRecord.kt
index 97cfa84..584e629 100644
--- a/app/src/main/java/com/supwisdom/entity/TransdtlOnlineRecord.kt
+++ b/app/src/main/java/com/supwisdom/entity/TransdtlOnlineRecord.kt
@@ -1,10 +1,12 @@
package com.supwisdom.entity
+import com.supwisdom.utils.GsonUtil
+
/**
** create by zzq on 2019/7/24
** @desc 联机流水
**/
-class TransdtlOnlineRecord {
+class TransdtlOnlineRecord : Cloneable {
var devphyid: String? = null
var transdate: String? = null
var transtime: String? = null
@@ -16,12 +18,15 @@
var payamt: Int = 0
var extraamt: Int = 0
var managefeetype: String? = null // none,discount,mealer
- var balance: Int? = null
var username: String? = null
- // var userid: Int = 0
var billno: String? = null
var reversalflag: ReversalFlag? = null //消费none 自动冲正auto 手动撤销 manual
var reversalbillno: String? = null //被冲正交易参考号
var status: PayStatus? = null // init,fail,suc
var upflag: Int = 0 // 1已上传
+
+ public override fun clone(): TransdtlOnlineRecord {
+ val tmp = GsonUtil.GsonString(this)
+ return GsonUtil.GsonToBean(tmp, TransdtlOnlineRecord::class.java)
+ }
}
\ No newline at end of file
diff --git a/app/src/main/java/com/supwisdom/entity/TransdtlUnionRecord.kt b/app/src/main/java/com/supwisdom/entity/TransdtlUnionRecord.kt
index bc78c6f..967fbd8 100644
--- a/app/src/main/java/com/supwisdom/entity/TransdtlUnionRecord.kt
+++ b/app/src/main/java/com/supwisdom/entity/TransdtlUnionRecord.kt
@@ -6,6 +6,7 @@
**/
class TransdtlUnionRecord {
var username: String? = null
+ var cardno: String? = null
var transdate: String? = null
var transtime: String? = null
var devseqno: Int = 0
diff --git a/app/src/main/java/com/supwisdom/entity/WhiteListRecord.kt b/app/src/main/java/com/supwisdom/entity/WhiteListRecord.kt
index bbda15c..a632753 100644
--- a/app/src/main/java/com/supwisdom/entity/WhiteListRecord.kt
+++ b/app/src/main/java/com/supwisdom/entity/WhiteListRecord.kt
@@ -7,6 +7,5 @@
class WhiteListRecord {
var cardphyid: String? = null
var cardno: String? = null
- var flag: Int = 0 // 0--白卡 1--黑卡
- var balance: Int = 0
+ var status: String? = null
}
\ No newline at end of file
diff --git a/app/src/main/java/com/supwisdom/exception/CardPayInterruptError.kt b/app/src/main/java/com/supwisdom/exception/CardPayInterruptError.kt
new file mode 100644
index 0000000..b69aa91
--- /dev/null
+++ b/app/src/main/java/com/supwisdom/exception/CardPayInterruptError.kt
@@ -0,0 +1,13 @@
+package com.supwisdom.exception
+
+/**
+ ** create by zzq on 2019/8/2
+ ** @desc 交易取消
+ **/
+class CardPayInterruptError : Exception {
+ constructor(message: String, ex: Exception) : super(message + ex.message)
+
+ constructor(message: String) : super(message)
+
+ constructor(ex: Exception) : super(ex.message)
+}
\ No newline at end of file
diff --git a/app/src/main/java/com/supwisdom/okhttp/NetworkHandler.kt b/app/src/main/java/com/supwisdom/okhttp/NetworkHandler.kt
index bf93d9b..5e3f70c 100644
--- a/app/src/main/java/com/supwisdom/okhttp/NetworkHandler.kt
+++ b/app/src/main/java/com/supwisdom/okhttp/NetworkHandler.kt
@@ -121,6 +121,8 @@
}
private fun addExtentHeader(request: Request.Builder): Request.Builder {
+ request.addHeader("Accept", "application/json; q=0.5")
+ .addHeader("Connection", "close")
if (!TextUtils.isEmpty(clientId)) {
request.addHeader("X-TENANT-ID", clientId)
}
@@ -133,16 +135,12 @@
fun get(url: String, params: WebParams?): TransResp? {
val request = Request.Builder()
.url(geturl(url, params))
- .addHeader("Accept", "application/json; q=0.5")
- .addHeader("Connection", "close")
return getTransResp(addExtentHeader(request).build())
}
fun get(url: String, params: WebParams, callback: com.supwisdom.okhttp.ICallBackok<Any?>) {
val request = Request.Builder()
.url(geturl(url, params))
- .addHeader("Accept", "application/json; q=0.5")
- .addHeader("Connection", "close")
client!!.newCall(addExtentHeader(request).build()).enqueue(object : Callback {
override fun onFailure(call: Call, e: IOException) {
callback.callback(null)
@@ -172,8 +170,6 @@
}
val request = Request.Builder()
.url(url)
- .addHeader("Accept", "application/json; q=0.5")
- .addHeader("Connection", "close")
.post(builder.build())
return getTransResp(addExtentHeader(request).build())
}
@@ -185,8 +181,6 @@
}
val request = Request.Builder()
.url(url)
- .addHeader("Accept", "application/json; q=0.5")
- .addHeader("Connection", "close")
.post(builder.build())
return getLongTransResp(addExtentHeader(request).build())
}
@@ -195,8 +189,6 @@
val body = RequestBody.create(JSON, json)
val request = Request.Builder()
.url(url)
- .addHeader("Accept", "application/json; q=0.5")
- .addHeader("Connection", "close")
.post(body)
return getTransResp(addExtentHeader(request).build())
}
@@ -205,8 +197,6 @@
val body = RequestBody.create(JSON, json)
val request = Request.Builder()
.url(url)
- .addHeader("Accept", "application/json; q=0.5")
- .addHeader("Connection", "close")
.post(body)
client!!.newCall(addExtentHeader(request).build()).enqueue(object : Callback {
override fun onFailure(call: Call, e: IOException) {
diff --git a/app/src/main/java/com/supwisdom/service/AuthEpay.kt b/app/src/main/java/com/supwisdom/service/AuthEpay.kt
index fc252ae..8c28078 100644
--- a/app/src/main/java/com/supwisdom/service/AuthEpay.kt
+++ b/app/src/main/java/com/supwisdom/service/AuthEpay.kt
@@ -35,7 +35,7 @@
val url = StringBuilder()
url.append(record!!.epayIP).append(":").append(record.epayPort)
.append("/").append(record.epayUri)
- .append("/api/auth/refresh/").append(record.devphyid).append("?")
+ .append("/api/auth/refresh")
val resp = NetworkHandler.getInstance().get(url.toString(), null)
?: throw AuthEpayError("jwt刷新请求超时")
if (resp.retcode != HttpStatus.SC_OK) {
@@ -72,7 +72,7 @@
throw AuthEpayError("token json异常:${ex.message}")
}
if (retBean.retcode != PublicDef.SUCCESS) {
- throw AuthEpayError(retBean.retmsg!!)
+ throw AuthEpayError(retBean.getErrorMsg())
}
if (TextUtils.isEmpty(retBean.token)) {
throw AuthEpayError("token不能为空")
@@ -126,14 +126,14 @@
throw AuthEpayError("json异常:${ex.message}")
}
if (retBean.retcode != PublicDef.SUCCESS) {
- throw AuthEpayError(retBean.retmsg!!)
+ throw AuthEpayError(retBean.getErrorMsg())
}
return retBean
}
private fun dealSession(bean: AuthJwtRetBean) {
if (bean.retcode != PublicDef.SUCCESS) {
- throw AuthEpayError(bean.retmsg!!)
+ throw AuthEpayError(bean.getErrorMsg())
}
if (TextUtils.isEmpty(bean.jwt)) {
throw AuthEpayError("jwt不能为空")
diff --git a/app/src/main/java/com/supwisdom/service/BackgroundTaskService.kt b/app/src/main/java/com/supwisdom/service/BackgroundTaskService.kt
index 8a7c9f7..4405f38 100644
--- a/app/src/main/java/com/supwisdom/service/BackgroundTaskService.kt
+++ b/app/src/main/java/com/supwisdom/service/BackgroundTaskService.kt
@@ -8,50 +8,42 @@
import com.supwisdom.utils.CommonUtil
import com.supwisdom.utils.DateUtil
import com.supwisdom.utils.FileUtil
+import com.supwisdom.utils.LogUtil
/**
** create by zzq on 2019/7/23
** @desc
**/
class BackgroundTaskService : Thread() {
+ private val TAG = "BackgroundTaskService"
private val pos = SPApplication.getInstance().getPos()
- private val websocketProcess = WebsocketProcess()
- private var websocketHasRun = false
- private var apiInterface: APIInterface? = null
+ private var apiInterface: APIInterface = EpayApiImpl()
private var sysRecord: SysParaRecord? = null
private var transdtlClearDate: String? = null
+ @Volatile
+ private var isExist = false
- fun getWebsocketProcess(): WebsocketProcess {
- return websocketProcess
+ override fun start() {
+ isExist = false
+ super.start()
+ }
+
+ override fun interrupt() {
+ isExist = true
+ super.interrupt()
}
override fun run() {
- var heartgap = 0
- CommonUtil.doSleep(60 * 1000)
- while (true) {
- val hasInit = pos.getConfigPara()?.initOK ?: false
- if (hasInit) {
- break
+ var heartgap: Int
+ while (!isExist) {
+ try {
+ heartAndTransdtl()
+ clearTransdtl()
+ } catch (ex: Exception) {
+ ex.printStackTrace()
+ LogUtil.d(TAG, CommonUtil.getExceptionStack(ex))
}
- CommonUtil.doSleep(1000)
- }
- while (true) {
- //做一卡通心跳和流水上传
- heartAndTransdtl()
- //清除流水
- clearTransdtl()
sysRecord = pos.getSysPara()
-// if (sysRecord != null && sysRecord!!.getSocketSwitch() != 0) {
-// if (!websocketHasRun) {
-// websocketHasRun = true
-// websocketProcess.start()
-// }
-// } else {
-// if (websocketHasRun) {
-// websocketHasRun = false
-// websocketProcess.stop()
-// }
-// }
heartgap = if (sysRecord == null || sysRecord!!.heatBeat < 10 || sysRecord!!.heatBeat > 600) {
60
} else {
@@ -62,47 +54,42 @@
}
private fun heartAndTransdtl() {
- //做一卡通的心跳以及流水上传
try {
- apiInterface!!.heartBeat()
- SPApplication.getInstance().setEpayLinking(true)
-// /*更新通讯jwt*/
+ /**更新通讯jwt*/
refreshJwt()
+ SPApplication.getInstance().setEpayLinking(true)
+ /**做一卡通的心跳以及流水上传*/
+ apiInterface.heartBeat()
+ SPApplication.getInstance().setEpayLinking(true)
uploadTransdtl()
} catch (ex: HeartBeatError) {
SPApplication.getInstance().setEpayLinking(false)
+ } catch (ex: TransdtlUploadError) {
+ ex.printStackTrace()
+ } catch (ex: AuthEpayError) {
+ SPApplication.getInstance().setEpayLinking(false)
}
}
private fun uploadTransdtl() {
- try {
- pos.getTransdtlOfflineUnconfirm().forEach {
- apiInterface!!.uploadTransdtl(it)
- it.upflag = 1
- pos.updateTransdtlOffline(it)
- }
- pos.getTransdtlOnlineUnconfirm().forEach {
- apiInterface!!.uploadTransdtl(it)
- it.upflag = 1
- pos.updateTransdtlOnline(it)
- }
- } catch (ex: TransdtlUploadError) {
- ex.printStackTrace()
+ pos.getTransdtlOfflineUnconfirm().forEach {
+ apiInterface.uploadTransdtl(it)
+ it.upflag = 1
+ pos.updateTransdtlOffline(it)
+ }
+ pos.getTransdtlOnlineUnconfirm().forEach {
+ apiInterface.uploadTransdtl(it)
+ it.upflag = 1
+ pos.updateTransdtlOnline(it)
}
}
private fun refreshJwt() {
- try {
- val jwtExpire = pos.getDynamicPara()?.jwtExpire ?: "0"
- if (jwtExpire < DateUtil.getNowDateTimeNoFormat()) {
- autoAuth()
- } else {
- AuthEpay().refresh()
- }
- SPApplication.getInstance().setEpayLinking(true)
- } catch (ex: AuthEpayError) {
- ex.printStackTrace()
- SPApplication.getInstance().setEpayLinking(false)
+ val jwtExpire = pos.getDynamicPara()?.jwtExpire ?: "0"
+ if (jwtExpire < DateUtil.getNowDateTimeNoFormat()) {
+ autoAuth()
+ } else {
+ AuthEpay().refresh()
}
}
diff --git a/app/src/main/java/com/supwisdom/service/EpayApiImpl.kt b/app/src/main/java/com/supwisdom/service/EpayApiImpl.kt
index 517819d..0cdffea 100644
--- a/app/src/main/java/com/supwisdom/service/EpayApiImpl.kt
+++ b/app/src/main/java/com/supwisdom/service/EpayApiImpl.kt
@@ -46,7 +46,7 @@
throw HeartBeatError("json异常:${ex.message}")
}
if (retBean.retcode != PublicDef.SUCCESS) {
- throw HeartBeatError(retBean.retmsg!!)
+ throw HeartBeatError(retBean.getErrorMsg())
}
if (cardverno < retBean.cardverno!!) {
try {
@@ -59,7 +59,7 @@
try {
downloadSyspara(retBean.paragroupid, retBean.paraverno)
} catch (ex: SysParaError) {
- throw SysParaError(ex.message ?: "null")
+ throw HeartBeatError(ex.message ?: "null")
}
}
/**
@@ -92,7 +92,7 @@
throw SysParaError("json异常:${ex.message}")
}
if (retBean.retcode != PublicDef.SUCCESS) {
- throw SysParaError(retBean.retmsg!!)
+ throw SysParaError(retBean.getErrorMsg())
}
val record = pos.getSysPara() ?: SysParaRecord()
retBean.syspara?.forEach {
@@ -108,6 +108,18 @@
it.paraname == "communicate_time" -> record.commTime = it.paraval!!.toInt()
}
}
+ if (record.heatBeat == 0) {
+ record.heatBeat = 60
+ }
+ if (record.sucShowtime == 0) {
+ record.sucShowtime = 2
+ }
+ if (record.failShowtime == 0) {
+ record.failShowtime = 3
+ }
+ if (record.commTime == 0) {
+ record.commTime = 3
+ }
if (!pos.replaceSysPara(record)) {
throw SysParaError("保存参数失败")
}
@@ -133,7 +145,7 @@
throw WhiteListError("json异常:${ex.message}")
}
if (retBean.retcode != PublicDef.SUCCESS) {
- throw WhiteListError(retBean.retmsg!!)
+ throw WhiteListError(retBean.getErrorMsg())
}
if (retBean.count != retBean.whitelist?.size) {
throw WhiteListError("白名单数量不对[${retBean.count},${retBean.whitelist?.size}]")
@@ -143,8 +155,7 @@
val record = WhiteListRecord()
record.cardphyid = it.cardphyid
record.cardno = it.cardno
- record.flag = it.flag
- record.balance = it.balance
+ record.status = it.status
list.add(record)
}
if (!pos.saveWhiteList(list)) {
@@ -160,28 +171,13 @@
@Throws(TransdtlUploadError::class)
override fun uploadTransdtl(record: TransdtlOnlineRecord) {
- var reversalflag = "false"
- if (record.reversalflag == ReversalFlag.AUTO ||
- record.reversalflag == ReversalFlag.MANUAL
- ) {
- reversalflag = "true"
- }
-
val params = WebParams()
params.setParameter("devphyid", record.devphyid)
.setParameter("transdate", record.transdate)
.setParameter("transtime", record.transtime)
.setParameter("termseqno", record.devseqno)
- .setParameter("cardno", record.cardno)
- .setParameter("cardphyid", record.cardphyid)
- .setParameter("qrcode", record.qrcode)
- .setParameter("transtype", record.transtype)
- .setParameter("amount", record.payamt)
- .setParameter("extraamt", record.extraamt)
- .setParameter("managefeetype", record.managefeetype)
- .setParameter("managefeetype", record.managefeetype)
- .setParameter("billno", record.billno)
- .setParameter("reversalflag", reversalflag)
+ .setParameter("reversalbillno", record.reversalbillno)
+ .setParameter("reversalflag", record.reversalflag.toString())
.setParameter("status", record.status.toString())
val resp = YktSession.getInstance().sendYktRequestPost("/api/pos/paycancel", "", params)
?: throw TransdtlUploadError("请求超时")
@@ -194,7 +190,7 @@
throw TransdtlUploadError("json异常:${ex.message}")
}
if (retBean.retcode != PublicDef.SUCCESS) {
- throw TransdtlUploadError(retBean.retmsg!!)
+ throw TransdtlUploadError(retBean.getErrorMsg())
}
if (retBean.termseqno != record.devseqno) {
throw TransdtlUploadError("返回流水号不一致")
@@ -236,7 +232,7 @@
throw TransdtlUploadError("json异常:${ex.message}")
}
if (retBean.retcode != PublicDef.SUCCESS) {
- throw TransdtlUploadError(retBean.retmsg!!)
+ throw TransdtlUploadError(retBean.getErrorMsg())
}
if (retBean.termseqno != record.devseqno) {
throw TransdtlUploadError("返回流水号不一致")
diff --git a/app/src/main/java/com/supwisdom/utils/DateUtil.kt b/app/src/main/java/com/supwisdom/utils/DateUtil.kt
index 6ce7a41..a65a9ce 100644
--- a/app/src/main/java/com/supwisdom/utils/DateUtil.kt
+++ b/app/src/main/java/com/supwisdom/utils/DateUtil.kt
@@ -218,6 +218,19 @@
}
/**
+ * @param time HHmmss
+ * @return ms
+ * @desc 将时间格式的字符串转换为长整型
+ */
+ fun timeFormatConvertToLong(time: String): Long {
+ return try {
+ FORMAT_HHmmss.parse(time).time
+ } catch (ex: ParseException) {
+ 0L
+ }
+ }
+
+ /**
* @param time ms
* @return yyyyMMddHHmmss
* @desc 将长整型数字转换为日期格式的字符串
diff --git a/app/src/main/java/com/supwisdom/utils/PublicDef.kt b/app/src/main/java/com/supwisdom/utils/PublicDef.kt
index b67e05b..551a3ac 100644
--- a/app/src/main/java/com/supwisdom/utils/PublicDef.kt
+++ b/app/src/main/java/com/supwisdom/utils/PublicDef.kt
@@ -31,7 +31,8 @@
const val MSG_USER_INFO_SHOW = 17
const val MSG_USER_INFO_CLEAR = 18
const val MSG_LINK_STATUS = 19
- const val MSG_CODE_PAYING_CANCEL = 19
+ const val MSG_PAYING_QUERY = 20
+ const val MSG_PAYING_INTERRUPT = 21
/*************************不能重复*****************************/
/**
* 卡消费标志(1 byte)
diff --git a/app/src/main/java/com/supwisdom/view/BigProgressDialog.kt b/app/src/main/java/com/supwisdom/view/BigProgressDialog.kt
index 9fd9825..e05a2a0 100644
--- a/app/src/main/java/com/supwisdom/view/BigProgressDialog.kt
+++ b/app/src/main/java/com/supwisdom/view/BigProgressDialog.kt
@@ -1,3 +1,5 @@
+@file:Suppress("DEPRECATION")
+
package com.supwisdom.view
import android.app.Activity
diff --git a/app/src/main/java/com/supwisdom/view/DialogPurchase.kt b/app/src/main/java/com/supwisdom/view/DialogPurchase.kt
index 39b5806..a03f510 100644
--- a/app/src/main/java/com/supwisdom/view/DialogPurchase.kt
+++ b/app/src/main/java/com/supwisdom/view/DialogPurchase.kt
@@ -18,16 +18,18 @@
** create by zzq on 2019/7/26
** @desc 消费弹窗
**/
+@Suppress("DEPRECATION")
class DialogPurchase constructor(context: Context, callBack: ICallBack) : DialogBase(context), IDecoderAcquirer {
private val TAG = "DialogPurchase"
private val callBack = callBack
private var vCount: TextView
private var vPayhint: TextView
private var vPayamt: TextView
- private var vBalance: TextView
+ private var vUsername: TextView
private var posDec: PosDecoder? = null
private var lastFixpayDecoderOpenTime: Long = 0
private val waitTime = 60
+ private var payQueryConfirm = false
var codePayingNoCancelEnable = false
var codePaying = false
var isFixPay = false
@@ -38,7 +40,7 @@
vCount = this.findViewById(R.id.tv_close_count) as TextView
vPayhint = this.findViewById(R.id.tv_pay_hint) as TextView
vPayamt = this.findViewById(R.id.tv_pay_amount) as TextView
- vBalance = this.findViewById(R.id.tv_pay_balance) as TextView
+ vUsername = this.findViewById(R.id.tv_pay_username) as TextView
posDec = PosDecoder(this)
}
@@ -65,7 +67,11 @@
}
when (event.keyCode) {
KeyEvent.KEYCODE_DEL -> {
- finish(true)
+ if (payQueryConfirm) {
+ finish(isManualCancel = true, isPaying = true)
+ } else {
+ finish(isManualCancel = true, isPaying = false)
+ }
}
}
}
@@ -74,23 +80,28 @@
fun show(hint: String, amount: String) {
vPayhint.text = hint
- vPayhint.setTextColor(Color.BLACK)
+ vPayhint.setTextColor(context.resources.getColor(R.color.blue))
vPayamt.text = amount
vPayamt.visibility = View.VISIBLE
- vBalance.visibility = View.GONE
+ vUsername.visibility = View.GONE
show()
asyncOpenDecoder()
resetCounter(waitTime)
}
+ fun showQueryProcess(hint: String, amount: String) {
+ payQueryConfirm = true
+ showProcess(hint, amount)
+ }
+
fun showProcess(hint: String, amount: String) {
vPayhint.text = hint
vPayhint.setTextColor(Color.RED)
vPayamt.text = amount
vPayamt.visibility = View.VISIBLE
- vBalance.visibility = View.GONE
+ vUsername.visibility = View.GONE
resetCounter(waitTime)
}
@@ -99,22 +110,28 @@
vPayhint.setTextColor(Color.GREEN)
vPayamt.text = CommonUtil.showFormatAmount("金额", info.payamt)
vPayamt.visibility = View.VISIBLE
- if (info.balance == null) {
- vBalance.visibility = View.GONE
- } else {
- vBalance.text = CommonUtil.showFormatAmount("余额", info.balance!!)
- vBalance.visibility = View.VISIBLE
- }
+ vUsername.text = "姓名: ${info.username ?: info.cardno}"
+ vUsername.visibility = View.VISIBLE
show()
resetCounter(info.showtime)
}
+ fun showPayInterrupt() {
+ vPayhint.text = "交易取消"
+ vPayhint.setTextColor(Color.RED)
+ vPayamt.text = "以银行交易为准"
+ vPayamt.visibility = View.VISIBLE
+ vUsername.visibility = View.GONE
+ show()
+ resetCounter(3)
+ }
+
fun showPayFail(info: CardUserInfoBean) {
vPayhint.text = "消费失败"
vPayhint.setTextColor(Color.RED)
vPayamt.text = info.retmsg
vPayamt.visibility = View.VISIBLE
- vBalance.visibility = View.GONE
+ vUsername.visibility = View.GONE
show()
resetCounter(info.showtime)
}
@@ -124,7 +141,7 @@
vPayhint.setTextColor(Color.GREEN)
vPayamt.text = CommonUtil.showFormatAmount("金额", info.amount)
vPayamt.visibility = View.VISIBLE
- vBalance.visibility = View.GONE
+ vUsername.visibility = View.GONE
show()
resetCounter(info.showtime)
}
@@ -134,7 +151,7 @@
vPayhint.setTextColor(Color.RED)
vPayamt.text = info.retmsg
vPayamt.visibility = View.VISIBLE
- vBalance.visibility = View.GONE
+ vUsername.visibility = View.GONE
show()
resetCounter(info.showtime)
}
@@ -180,11 +197,12 @@
}
}
- private fun finish(isManualCancel: Boolean) {
+ private fun finish(isManualCancel: Boolean, isPaying: Boolean) {
codePaying = false
codePayingNoCancelEnable = false
+ payQueryConfirm = false
dismiss()
- callBack.callback(isManualCancel)
+ callBack.callback(isManualCancel, isPaying)
asyncCloseDecoder()
}
@@ -211,12 +229,12 @@
}
override fun onFinish() {
- finish(false)
+ finish(false, false)
}
}
interface ICallBack {
- fun callback(isManualCancel: Boolean)
+ fun callback(isManualCancel: Boolean, isPaying: Boolean)
fun callback(code: String)
}
diff --git a/app/src/main/res/layout/activity_consume.xml b/app/src/main/res/layout/activity_consume.xml
index b4565e0..a1bf974 100644
--- a/app/src/main/res/layout/activity_consume.xml
+++ b/app/src/main/res/layout/activity_consume.xml
@@ -1,437 +1,424 @@
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
- android:layout_width="match_parent"
- android:layout_height="match_parent"
- android:background="@color/light_blue2"
- android:focusable="true"
- android:orientation="vertical">
+ android:layout_width="match_parent"
+ android:layout_height="match_parent"
+ android:background="@color/light_blue2"
+ android:focusable="true"
+ android:orientation="vertical">
<LinearLayout
- android:layout_width="match_parent"
- android:layout_height="wrap_content"
- android:layout_marginLeft="20dp"
- android:layout_marginTop="20dp"
- android:layout_marginRight="20dp"
- android:background="@drawable/corner_bg_white"
- android:orientation="vertical">
-
- <LinearLayout
android:layout_width="match_parent"
- android:layout_height="304dp"
+ android:layout_height="wrap_content"
+ android:layout_marginLeft="20dp"
+ android:layout_marginTop="20dp"
+ android:layout_marginRight="20dp"
+ android:background="@drawable/corner_bg_white"
android:orientation="vertical">
- <LinearLayout
+ <LinearLayout
android:layout_width="match_parent"
- android:layout_height="130dp"
- android:orientation="horizontal"
- android:padding="@dimen/consume_text_pad_size"
- android:weightSum="3">
+ android:layout_height="304dp"
+ android:orientation="vertical">
+
+ <LinearLayout
+ android:layout_width="match_parent"
+ android:layout_height="130dp"
+ android:orientation="horizontal"
+ android:padding="@dimen/consume_text_pad_size"
+ android:weightSum="3">
<LinearLayout
- android:layout_width="0dp"
- android:layout_height="match_parent"
- android:layout_weight="2"
- android:orientation="horizontal">
+ android:layout_width="0dp"
+ android:layout_height="match_parent"
+ android:layout_weight="2"
+ android:orientation="horizontal">
<ImageView
- android:layout_width="60dp"
- android:layout_height="60dp"
- android:layout_gravity="center"
- android:scaleType="fitXY"
- android:src="@mipmap/shop_logo" />
+ android:layout_width="60dp"
+ android:layout_height="60dp"
+ android:layout_gravity="center"
+ android:scaleType="fitXY"
+ android:src="@mipmap/shop_logo"/>
<LinearLayout
- android:layout_width="wrap_content"
- android:layout_height="match_parent"
- android:layout_gravity="center"
- android:layout_marginLeft="10dp"
- android:layout_marginTop="8dp"
- android:orientation="vertical"
- android:padding="1dp">
+ android:layout_width="wrap_content"
+ android:layout_height="match_parent"
+ android:layout_gravity="center"
+ android:layout_marginLeft="10dp"
+ android:layout_marginTop="8dp"
+ android:orientation="vertical"
+ android:padding="1dp">
<TextView
- android:id="@+id/consume_shopname"
- android:layout_width="match_parent"
- android:layout_height="wrap_content"
- android:maxLines="2"
- android:text=""
- android:textColor="@color/blue"
- android:textSize="28sp" />
+ android:id="@+id/tv_shopname"
+ android:layout_width="match_parent"
+ android:layout_height="wrap_content"
+ android:maxLines="2"
+ android:text=""
+ android:textColor="@color/blue"
+ android:textSize="28sp"/>
<TextView
- android:id="@+id/consume_time"
- android:layout_width="match_parent"
- android:layout_height="wrap_content"
- android:gravity="start"
- android:maxLines="1"
- android:text=""
- android:textColor="@color/blue"
- android:textSize="22sp" />
+ android:id="@+id/tv_nowtime"
+ android:layout_width="match_parent"
+ android:layout_height="wrap_content"
+ android:gravity="start"
+ android:maxLines="1"
+ android:text=""
+ android:textColor="@color/blue"
+ android:textSize="22sp"/>
</LinearLayout>
</LinearLayout>
<LinearLayout
- android:layout_width="0dp"
- android:layout_height="match_parent"
- android:layout_gravity="center"
- android:layout_weight="1"
- android:gravity="right"
- android:orientation="horizontal">
+ android:layout_width="0dp"
+ android:layout_height="match_parent"
+ android:layout_gravity="center"
+ android:layout_weight="1"
+ android:gravity="end"
+ android:orientation="horizontal">
<ImageView
- android:id="@+id/consume_linklogo"
- android:layout_width="30dp"
- android:layout_height="30dp"
- android:scaleType="fitXY"
- android:src="@drawable/wireless_on" />
+ android:id="@+id/tv_linklogo"
+ android:layout_width="30dp"
+ android:layout_height="30dp"
+ android:scaleType="fitXY"
+ android:src="@drawable/wireless_on"/>
<TextView
- android:id="@+id/consume_linkstat"
- android:layout_width="wrap_content"
- android:layout_height="wrap_content"
- android:maxLines="1"
- android:text="已联网"
- android:textColor="@color/blue"
- android:textSize="22sp" />
+ android:id="@+id/tv_linkstat"
+ android:layout_width="wrap_content"
+ android:layout_height="wrap_content"
+ android:maxLines="1"
+ android:text="已联网"
+ android:textColor="@color/blue"
+ android:textSize="22sp"/>
</LinearLayout>
</LinearLayout>
<View
+ android:layout_width="match_parent"
+ android:layout_height="1dp"
+ android:layout_marginLeft="10dp"
+ android:layout_marginRight="10dp"
+ android:background="@color/black"/>
+
+ <LinearLayout
+ android:layout_width="match_parent"
+ android:layout_height="match_parent"
+ android:orientation="horizontal"
+ android:padding="@dimen/consume_text_pad_size">
+
+ <TextView
+ android:layout_width="260dp"
+ android:layout_height="match_parent"
+ android:gravity="start|center"
+ android:text="消费金额"
+ android:textColor="@color/blue"
+ android:textSize="50sp"
+ android:textStyle="bold"/>
+
+ <TextView
+ android:id="@+id/tv_input_amt"
+ android:layout_width="wrap_content"
+ android:layout_height="match_parent"
+ android:gravity="center"
+ android:maxLines="1"
+ android:text="0"
+ android:textColor="@color/orange1"
+ android:textSize="65sp"
+ android:textStyle="bold"/>
+ </LinearLayout>
+ </LinearLayout>
+ </LinearLayout>
+
+ <LinearLayout
+ android:layout_width="match_parent"
+ android:layout_height="wrap_content"
+ android:layout_marginLeft="20dp"
+ android:layout_marginTop="10dp"
+ android:layout_marginRight="20dp"
+ android:background="@drawable/corner_bg_ordinary_consume_green"
+ android:orientation="vertical">
+
+ <LinearLayout
+ android:layout_width="match_parent"
+ android:layout_height="wrap_content"
+ android:orientation="horizontal"
+ android:padding="10dp">
+
+ <ImageView
+ android:layout_width="40dp"
+ android:layout_height="40dp"
+ android:scaleType="fitXY"
+ android:src="@mipmap/show_card_info"/>
+
+ <TextView
+ android:id="@+id/tv_card_info"
+ android:layout_width="match_parent"
+ android:layout_height="wrap_content"
+ android:text="市民卡信息"
+ android:textColor="@color/blue"
+ android:textSize="@dimen/consume_text_size2"/>
+ </LinearLayout>
+
+ <View
android:layout_width="match_parent"
android:layout_height="1dp"
android:layout_marginLeft="10dp"
+ android:layout_marginTop="5dp"
android:layout_marginRight="10dp"
- android:background="@color/black" />
+ android:layout_marginBottom="5dp"
+ android:background="@color/black"/>
- <LinearLayout
+ <LinearLayout
android:layout_width="match_parent"
android:layout_height="match_parent"
- android:orientation="horizontal"
- android:padding="@dimen/consume_text_pad_size">
+ android:layout_marginLeft="10dp"
+ android:layout_marginTop="5dp"
+ android:orientation="vertical">
- <TextView
- android:id="@+id/tv_consume_hint"
- android:layout_width="300dp"
- android:layout_height="match_parent"
- android:gravity="start|center"
- android:text="消费金额"
- android:textColor="@color/blue"
- android:textSize="50sp"
- android:textStyle="bold" />
+ <ImageView
+ android:layout_width="80dp"
+ android:layout_height="80dp"
+ android:layout_gravity="center"
+ android:scaleType="fitXY"
+ android:src="@mipmap/default_photo"
+ android:visibility="gone"/>
- <TextView
- android:id="@+id/consume_amt"
+
+ <TextView
android:layout_width="wrap_content"
- android:layout_height="match_parent"
- android:gravity="center"
- android:maxLines="1"
- android:text="0"
- android:textColor="@color/orange1"
- android:textSize="65sp"
- android:textStyle="bold" />
+ android:layout_height="wrap_content"
+ android:padding="@dimen/consume_text_pad_size1"
+ android:text="如需查询信息,请刷卡!"
+ android:textColor="@color/blue"
+ android:textSize="@dimen/consume_text_size2"/>
+
+ <LinearLayout style="@style/consume_wait_account_ll_style">
+
+ <TextView
+ style="@style/consume_wait_account_paraname_style"
+ android:text="姓 名: "/>
+
+ <TextView
+ android:id="@+id/tv_citizen_name"
+ style="@style/consume_wait_account_paraval_style"/>
+ </LinearLayout>
+
+ <LinearLayout style="@style/consume_wait_account_ll_style">
+
+ <TextView
+ style="@style/consume_wait_account_paraname_style"
+ android:text="市民卡号: "/>
+
+ <TextView
+ android:id="@+id/tv_citizen_cardno"
+ style="@style/consume_wait_account_paraval_style"/>
+ </LinearLayout>
+
+ <LinearLayout style="@style/consume_wait_account_ll_style">
+
+ <TextView
+ style="@style/consume_wait_account_paraname_style"
+ android:text="账户状态: "/>
+
+ <TextView
+ android:id="@+id/tv_cardstatus"
+ style="@style/consume_wait_account_paraval_style"/>
</LinearLayout>
</LinearLayout>
</LinearLayout>
<LinearLayout
- android:layout_width="match_parent"
- android:layout_height="wrap_content"
- android:layout_marginLeft="20dp"
- android:layout_marginTop="10dp"
- android:layout_marginRight="20dp"
- android:background="@drawable/corner_bg_ordinary_consume_green"
- android:orientation="vertical">
-
- <LinearLayout
- android:layout_width="match_parent"
- android:layout_height="wrap_content"
- android:orientation="horizontal"
- android:padding="10dp">
-
- <ImageView
- android:layout_width="40dp"
- android:layout_height="40dp"
- android:scaleType="fitXY"
- android:src="@mipmap/show_card_info" />
-
- <TextView
- android:id="@+id/tv_card_info"
- android:layout_width="match_parent"
- android:layout_height="wrap_content"
- android:text="校园卡信息"
- android:textColor="@color/blue"
- android:textSize="@dimen/consume_text_size2" />
- </LinearLayout>
-
- <View
- android:layout_width="match_parent"
- android:layout_height="1dp"
- android:layout_marginLeft="10dp"
- android:layout_marginTop="5dp"
- android:layout_marginRight="10dp"
- android:layout_marginBottom="5dp"
- android:background="@color/black" />
-
- <LinearLayout
android:layout_width="match_parent"
android:layout_height="match_parent"
- android:layout_marginLeft="10dp"
- android:layout_marginTop="5dp"
+ android:layout_marginLeft="20dp"
+ android:layout_marginTop="10dp"
+ android:layout_marginRight="20dp"
+ android:layout_marginBottom="20dp"
+ android:background="@drawable/corner_bg_ordinary_consume_green"
android:orientation="vertical">
- <ImageView
- android:layout_width="80dp"
- android:layout_height="80dp"
- android:layout_gravity="center"
- android:scaleType="fitXY"
- android:src="@mipmap/default_photo"
- android:visibility="gone" />
-
-
- <TextView
- android:layout_width="wrap_content"
- android:layout_height="wrap_content"
- android:padding="@dimen/consume_text_pad_size1"
- android:text="如需查询余额,请刷卡!"
- android:textColor="@color/blue"
- android:textSize="@dimen/consume_text_size2" />
-
- <LinearLayout style="@style/consume_wait_account_ll_style">
-
- <TextView
- style="@style/consume_wait_account_paraname_style"
- android:text="姓 名: " />
-
- <TextView
- android:id="@+id/consume_custname"
- style="@style/consume_wait_account_paraval_style" />
- </LinearLayout>
-
- <LinearLayout style="@style/consume_wait_account_ll_style">
-
- <TextView
- style="@style/consume_wait_account_paraname_style"
- android:text="学工号: " />
-
- <TextView
- android:id="@+id/consume_stuempno"
- style="@style/consume_wait_account_paraval_style" />
- </LinearLayout>
-
- <LinearLayout style="@style/consume_wait_account_ll_style">
-
- <TextView
- style="@style/consume_wait_account_paraname_style"
- android:text="余 额: " />
-
- <TextView
- android:id="@+id/consume_balance"
- style="@style/consume_wait_account_paraval_style" />
- </LinearLayout>
-
- <LinearLayout style="@style/consume_wait_account_ll_style">
-
- <TextView
- style="@style/consume_wait_account_paraname_style"
- android:text="卡状态: " />
-
- <TextView
- android:id="@+id/consume_cardstatus"
- style="@style/consume_wait_account_paraval_style" />
- </LinearLayout>
- </LinearLayout>
- </LinearLayout>
-
- <LinearLayout
- android:layout_width="match_parent"
- android:layout_height="match_parent"
- android:layout_marginLeft="20dp"
- android:layout_marginTop="10dp"
- android:layout_marginRight="20dp"
- android:layout_marginBottom="20dp"
- android:background="@drawable/corner_bg_ordinary_consume_green"
- android:orientation="vertical">
-
<LinearLayout
- android:layout_width="match_parent"
- android:layout_height="wrap_content"
- android:orientation="horizontal"
- android:padding="@dimen/consume_text_pad_size1">
-
- <ImageView
- android:layout_width="40dp"
- android:layout_height="40dp"
- android:scaleType="fitXY"
- android:src="@mipmap/bill_lastdtl" />
-
- <TextView
android:layout_width="match_parent"
android:layout_height="wrap_content"
- android:text="最近一笔"
- android:textColor="@color/blue"
- android:textSize="@dimen/consume_text_size2" />
+ android:orientation="horizontal"
+ android:padding="@dimen/consume_text_pad_size1">
+
+ <ImageView
+ android:layout_width="40dp"
+ android:layout_height="40dp"
+ android:scaleType="fitXY"
+ android:src="@mipmap/bill_lastdtl"/>
+
+ <TextView
+ android:layout_width="match_parent"
+ android:layout_height="wrap_content"
+ android:text="最近一笔"
+ android:textColor="@color/blue"
+ android:textSize="@dimen/consume_text_size2"/>
</LinearLayout>
<View
- android:layout_width="match_parent"
- android:layout_height="1dp"
- android:layout_marginLeft="10dp"
- android:layout_marginTop="10dp"
- android:layout_marginRight="10dp"
- android:layout_marginBottom="5dp"
- android:background="@color/black" />
+ android:layout_width="match_parent"
+ android:layout_height="1dp"
+ android:layout_marginLeft="10dp"
+ android:layout_marginTop="10dp"
+ android:layout_marginRight="10dp"
+ android:layout_marginBottom="5dp"
+ android:background="@color/black"/>
<LinearLayout
- android:layout_width="match_parent"
- android:layout_height="wrap_content"
- android:orientation="horizontal"
- android:paddingLeft="10dp"
- android:paddingTop="10dp">
-
- <TextView
- android:layout_width="wrap_content"
- android:layout_height="match_parent"
- android:text="支付结果: "
- android:textColor="@color/black"
- android:textSize="@dimen/consume_text_size2" />
-
- <TextView
- android:id="@+id/consume_last_result"
android:layout_width="match_parent"
android:layout_height="wrap_content"
- android:maxLines="1"
- android:text=""
- android:textColor="@color/blue"
- android:textSize="@dimen/consume_text_size2"
- android:textStyle="bold" />
+ android:orientation="horizontal"
+ android:paddingLeft="10dp"
+ android:paddingTop="10dp">
+
+ <TextView
+ android:layout_width="wrap_content"
+ android:layout_height="match_parent"
+ android:text="支付结果: "
+ android:textColor="@color/black"
+ android:textSize="@dimen/consume_text_size2"/>
+
+ <TextView
+ android:id="@+id/tv_last_pay_result"
+ android:layout_width="match_parent"
+ android:layout_height="wrap_content"
+ android:maxLines="1"
+ android:text=""
+ android:textColor="@color/blue"
+ android:textSize="@dimen/consume_text_size2"
+ android:textStyle="bold"/>
</LinearLayout>
<LinearLayout
- android:id="@+id/ll_consume_last_failreason"
- android:layout_width="match_parent"
- android:layout_height="wrap_content"
- android:orientation="horizontal"
- android:paddingLeft="10dp"
- android:paddingTop="5dp"
- android:visibility="gone">
-
- <TextView
- android:layout_width="wrap_content"
- android:layout_height="match_parent"
- android:text="失败提示: "
- android:textColor="@color/cl_red"
- android:textSize="@dimen/consume_text_size2" />
-
- <TextView
- android:id="@+id/consume_last_failreason"
+ android:id="@+id/ll_consume_last_failreason"
android:layout_width="match_parent"
android:layout_height="wrap_content"
- android:maxLines="1"
- android:text=""
- android:textColor="@color/cl_red"
- android:textSize="@dimen/consume_text_size2"
- android:textStyle="bold" />
+ android:orientation="horizontal"
+ android:paddingLeft="10dp"
+ android:paddingTop="5dp"
+ android:visibility="gone">
+
+ <TextView
+ android:layout_width="wrap_content"
+ android:layout_height="match_parent"
+ android:text="失败提示: "
+ android:textColor="@color/cl_red"
+ android:textSize="@dimen/consume_text_size2"/>
+
+ <TextView
+ android:id="@+id/tv_last_failreason"
+ android:layout_width="match_parent"
+ android:layout_height="wrap_content"
+ android:maxLines="1"
+ android:text=""
+ android:textColor="@color/cl_red"
+ android:textSize="@dimen/consume_text_size2"
+ android:textStyle="bold"/>
+ </LinearLayout>
+ <LinearLayout
+ android:id="@+id/ll_consume_cardno"
+ android:layout_width="match_parent"
+ android:layout_height="wrap_content"
+ android:orientation="horizontal"
+ android:paddingLeft="10dp"
+ android:paddingTop="5dp">
+
+ <TextView
+ android:layout_width="wrap_content"
+ android:layout_height="match_parent"
+ android:text="支付卡号: "
+ android:textColor="@color/black"
+ android:textSize="@dimen/consume_text_size2"/>
+
+ <TextView
+ android:id="@+id/tv_last_cardno"
+ android:layout_width="match_parent"
+ android:layout_height="match_parent"
+ android:maxLines="1"
+ android:text=""
+ android:textColor="@color/blue"
+ android:textSize="@dimen/consume_text_size2"
+ android:textStyle="bold"/>
+ </LinearLayout>
+ <LinearLayout
+ android:id="@+id/ll_consume_last_payamt"
+ android:layout_width="match_parent"
+ android:layout_height="wrap_content"
+ android:orientation="horizontal"
+ android:paddingLeft="10dp"
+ android:paddingTop="5dp">
+
+ <TextView
+ android:layout_width="wrap_content"
+ android:layout_height="match_parent"
+ android:text="支付金额: "
+ android:textColor="@color/black"
+ android:textSize="@dimen/consume_text_size2"/>
+
+ <TextView
+ android:id="@+id/tv_last_payamt"
+ android:layout_width="match_parent"
+ android:layout_height="match_parent"
+ android:maxLines="1"
+ android:text=""
+ android:textColor="@color/blue"
+ android:textSize="@dimen/consume_text_size2"
+ android:textStyle="bold"/>
</LinearLayout>
<LinearLayout
- android:id="@+id/ll_consume_last_payamt"
- android:layout_width="match_parent"
- android:layout_height="wrap_content"
- android:orientation="horizontal"
- android:paddingLeft="10dp"
- android:paddingTop="5dp">
-
- <TextView
- android:layout_width="wrap_content"
- android:layout_height="match_parent"
- android:text="支付金额: "
- android:textColor="@color/black"
- android:textSize="@dimen/consume_text_size2" />
-
- <TextView
- android:id="@+id/consume_last_payamt"
android:layout_width="match_parent"
- android:layout_height="match_parent"
- android:maxLines="1"
- android:text=""
- android:textColor="@color/blue"
- android:textSize="@dimen/consume_text_size2"
- android:textStyle="bold" />
+ android:layout_height="wrap_content"
+ android:orientation="horizontal"
+ android:paddingLeft="10dp"
+ android:paddingTop="5dp">
+
+ <TextView
+ android:layout_width="wrap_content"
+ android:layout_height="match_parent"
+ android:text="支付方式: "
+ android:textColor="@color/black"
+ android:textSize="@dimen/consume_text_size2"/>
+
+ <TextView
+ android:id="@+id/tv_last_payway"
+ android:layout_width="match_parent"
+ android:layout_height="match_parent"
+ android:maxLines="1"
+ android:text=""
+ android:textColor="@color/blue"
+ android:textSize="@dimen/consume_text_size2"
+ android:textStyle="bold"/>
</LinearLayout>
<LinearLayout
- android:layout_width="match_parent"
- android:layout_height="wrap_content"
- android:orientation="horizontal"
- android:paddingLeft="10dp"
- android:paddingTop="5dp">
-
- <TextView
- android:layout_width="wrap_content"
- android:layout_height="match_parent"
- android:text="支付方式: "
- android:textColor="@color/black"
- android:textSize="@dimen/consume_text_size2" />
-
- <TextView
- android:id="@+id/consume_last_payway"
android:layout_width="match_parent"
- android:layout_height="match_parent"
- android:maxLines="1"
- android:text=""
- android:textColor="@color/blue"
- android:textSize="@dimen/consume_text_size2"
- android:textStyle="bold" />
- </LinearLayout>
-
- <LinearLayout
- android:layout_width="match_parent"
- android:layout_height="wrap_content"
- android:orientation="horizontal"
- android:paddingLeft="10dp"
- android:paddingTop="5dp">
+ android:layout_height="wrap_content"
+ android:orientation="horizontal"
+ android:paddingLeft="10dp"
+ android:paddingTop="5dp">
<TextView
- android:layout_width="wrap_content"
- android:layout_height="match_parent"
- android:text="支付日期: "
- android:textColor="@color/black"
- android:textSize="@dimen/consume_text_size2" />
+ android:layout_width="wrap_content"
+ android:layout_height="match_parent"
+ android:text="支付时间: "
+ android:textColor="@color/black"
+ android:textSize="@dimen/consume_text_size2"/>
<TextView
- android:id="@+id/consume_last_payday"
- android:layout_width="match_parent"
- android:layout_height="match_parent"
- android:maxLines="1"
- android:text=""
- android:textColor="@color/blue"
- android:textSize="@dimen/consume_text_size2"
- android:textStyle="bold" />
- </LinearLayout>
-
- <LinearLayout
- android:layout_width="match_parent"
- android:layout_height="wrap_content"
- android:orientation="horizontal"
- android:paddingLeft="10dp"
- android:paddingTop="5dp">
-
- <TextView
- android:layout_width="wrap_content"
- android:layout_height="match_parent"
- android:text="支付时间: "
- android:textColor="@color/black"
- android:textSize="@dimen/consume_text_size2" />
-
- <TextView
- android:id="@+id/consume_last_paytime"
- android:layout_width="match_parent"
- android:layout_height="match_parent"
- android:maxLines="1"
- android:text=""
- android:textColor="@color/blue"
- android:textSize="@dimen/consume_text_size2"
- android:textStyle="bold" />
+ android:id="@+id/tv_last_paytime"
+ android:layout_width="match_parent"
+ android:layout_height="match_parent"
+ android:maxLines="1"
+ android:text=""
+ android:textColor="@color/blue"
+ android:textSize="@dimen/consume_text_size2"
+ android:textStyle="bold"/>
</LinearLayout>
</LinearLayout>
</LinearLayout>
\ No newline at end of file
diff --git a/app/src/main/res/layout/dialog_purchase.xml b/app/src/main/res/layout/dialog_purchase.xml
index e43ef15..bb9a98a 100644
--- a/app/src/main/res/layout/dialog_purchase.xml
+++ b/app/src/main/res/layout/dialog_purchase.xml
@@ -32,22 +32,20 @@
style="@style/purchase_tv_text_hint_style"
android:text="消费成功"
android:textColor="@color/light_green"/>
-
+ <TextView
+ android:id="@+id/tv_pay_username"
+ android:layout_width="wrap_content"
+ android:layout_height="wrap_content"
+ android:text="姓名: 张三"
+ android:textColor="@color/blue"
+ android:textSize="@dimen/ordinary_consume_text_size"/>
<TextView
android:id="@+id/tv_pay_amount"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginTop="10dp"
android:text="金额: 10.00元"
- android:textColor="@color/black"
- android:textSize="@dimen/ordinary_consume_text_size"/>
-
- <TextView
- android:id="@+id/tv_pay_balance"
- android:layout_width="wrap_content"
- android:layout_height="wrap_content"
- android:text="余额: 123.00元"
- android:textColor="@color/black"
+ android:textColor="@color/blue"
android:textSize="@dimen/ordinary_consume_text_size"/>
</LinearLayout>
diff --git a/app/src/main/res/raw/pay_cancel.wav b/app/src/main/res/raw/pay_cancel.wav
new file mode 100644
index 0000000..21c72d9
--- /dev/null
+++ b/app/src/main/res/raw/pay_cancel.wav
Binary files differ
diff --git a/app/src/main/res/values/styles.xml b/app/src/main/res/values/styles.xml
index d16cba1..123c964 100644
--- a/app/src/main/res/values/styles.xml
+++ b/app/src/main/res/values/styles.xml
@@ -393,6 +393,7 @@
<item name="android:layout_height">wrap_content</item>
<item name="android:layout_width">wrap_content</item>
<item name="android:textColor">@color/black</item>
+ <item name="android:maxLines">1</item>
<item name="android:textSize">@dimen/consume_text_size2</item>
</style>
diff --git a/upgrade.py b/upgrade.py
index 8de756f..6a2ec3c 100644
--- a/upgrade.py
+++ b/upgrade.py
@@ -28,12 +28,12 @@
def zip_file(apk):
fileDir = path.dirname(apk)
version = subprocess.check_output(['git', 'describe', '--abbrev=4','--dirty','--always','--tags']).strip().decode('utf-8')
- zipFile = fileDir+'/posa711'+'-'+version+'.zip'
+ zipFile = fileDir+'/posa711dali'+'-'+version+'.zip'
print('zipFile = '+zipFile)
zf = zipfile.ZipFile(zipFile,'w',zipfile.ZIP_DEFLATED)
zf.write(fileDir+'/'+hashFileName,hashFileName)
- zf.write(apk,'posa711.apk')
+ zf.write(apk,'posa711dali.apk')
zf.close()
if __name__ == '__main__':