init
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 f8da627..f3203a1 100644
--- a/app/src/main/java/com/supwisdom/activities/consume/ConsumeActivity.kt
+++ b/app/src/main/java/com/supwisdom/activities/consume/ConsumeActivity.kt
@@ -1,10 +1,466 @@
package com.supwisdom.activities.consume
+import android.annotation.SuppressLint
+import android.app.Activity
+import android.content.Intent
+import android.graphics.Color
+import android.os.Bundle
+import android.os.CountDownTimer
+import android.view.KeyEvent
+import android.view.View
+import android.widget.ImageView
+import android.widget.LinearLayout
+import android.widget.TextView
+import com.supwisdom.R
import com.supwisdom.activities.BaseActivity
+import com.supwisdom.activities.SPApplication
+import com.supwisdom.activities.consume.bean.CardUserInfoBean
+import com.supwisdom.activities.menu.MenuActivity
+import com.supwisdom.activities.transdtl.TransdtlActivity
+import com.supwisdom.auxscreen.AuxScreenController
+import com.supwisdom.entity.PayStatus
+import com.supwisdom.entity.ReversalFlag
+import com.supwisdom.entity.TransdtlUnionRecord
+import com.supwisdom.utils.CommonUtil
+import com.supwisdom.utils.DateUtil
+import com.supwisdom.utils.PublicDef
+import com.supwisdom.utils.SoundUtil
+import java.util.*
/**
** create by zzq on 2019/7/24
** @desc
**/
+@Suppress("DEPRECATION")
+@SuppressLint("NewApi")
class ConsumeActivity : BaseActivity(), IConsumeView {
+ private lateinit var amountTxt: TextView
+ 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 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 vLastPayway: TextView
+ private lateinit var vLastPayday: TextView
+ private lateinit var vLastPaytime: TextView
+ private lateinit var vLastPayFailreason: TextView
+ private lateinit var vLastPayFailll: LinearLayout
+ private lateinit var vLastPayamtll: LinearLayout
+ @Volatile
+ private var isBackRuning = false
+ private var addAmount: Int = 0
+ private var counter: LastPayShowTimer? = null
+ private var lastPayInfo: CardUserInfoBean? = null
+
+ override fun onCreate(savedInstanceState: Bundle?) {
+ super.onCreate(savedInstanceState)
+ setContentView(R.layout.activity_consume)
+
+ initView()
+ initData()
+ }
+
+ private fun initData() {
+ presenter = ConsumePresenter(this)
+ presenter.start()
+ }
+
+ private fun initView() {
+ vShopname = findViewById<TextView>(R.id.consume_shopname)
+ vLinkLogo = findViewById<ImageView>(R.id.consume_linklogo)
+ vLinkstat = findViewById<TextView>(R.id.consume_linkstat)
+ amountTxt = findViewById<TextView>(R.id.consume_amt)
+ vCustname = findViewById<TextView>(R.id.consume_custname)
+ vStuempno = findViewById<TextView>(R.id.consume_stuempno)
+ vCardstatus = findViewById<TextView>(R.id.consume_cardstatus)
+ vBalance = findViewById<TextView>(R.id.consume_balance)
+ vTime = findViewById<TextView>(R.id.consume_time)
+ vLastResult = findViewById<TextView>(R.id.consume_last_result)
+ vLastPayamt = findViewById<TextView>(R.id.consume_last_payamt)
+ vLastPayway = findViewById<TextView>(R.id.consume_last_payway)
+ vLastPayday = findViewById<TextView>(R.id.consume_last_payday)
+ vLastPaytime = findViewById<TextView>(R.id.consume_last_paytime)
+ vLastPayFailreason = findViewById<TextView>(R.id.consume_last_failreason)
+ vLastPayFailll = findViewById<LinearLayout>(R.id.ll_consume_last_failreason)
+ vLastPayamtll = findViewById<LinearLayout>(R.id.ll_consume_last_payamt)
+ }
+
+ private fun delValueToEdit() {
+ presenter.clickNoPay()
+ val str = amountTxt.text.toString()
+ val len = str.length
+ when {
+ len == 0 ||
+ len == 1 -> {
+ refresh()
+ }
+ len > 1 -> {
+ amountTxt.text = str.substring(0, len - 1)
+ showScreenAmount()
+ }
+ }
+ }
+
+ private fun checkAmtToPay() {
+ val amt = getCurAmount() + addAmount
+ if (amt > 0) {
+ amountTxt.text = String.format("%.02f", amt / 100.0f)
+ jumpToPay(amt)
+ } else {
+ AuxScreenController.getInstance().refreshContent(Arrays.asList("请先输入金额:", "金额不能为0"))
+ }
+ }
+
+ private fun getCurAmount(): Int {
+ return try {
+ CommonUtil.YuanToFen(java.lang.Double.parseDouble(amountTxt.text.toString().trim { it <= ' ' }))
+ } catch (ex: Exception) {
+ ex.printStackTrace()
+ 0
+ }
+ }
+
+ private fun jumpToPay(amount: Int) {
+// val intent = Intent()
+// intent.putExtra("datetime", CommonUtil.getSystemMills())
+// intent.putExtra("amount", amount.toString())
+// intent.putExtra("consumeType", PublicDef.CONSUME_TYPE_PAY)
+// intent.setClass(this@WaitActivity, PayActivity::class.java)
+// startActivity(intent)
+ }
+
+ private fun jumpToFixpay(amount: Int) {
+// val intent = Intent()
+// intent.putExtra("datetime", CommonUtil.getSystemMills())
+// intent.putExtra("amount", amount.toString())
+// intent.putExtra("consumeType", PublicDef.CONSUME_TYPE_FIXPAY)
+// intent.setClass(this@WaitActivity, PayActivity::class.java)
+// startActivity(intent)
+ }
+
+ private fun addValueToEdit(value: Int) {
+ var str = amountTxt.text.toString()
+ if ("0" == str) {
+ str = ""
+ }
+ //如果已经有小数点,则小数点后面不能超过两位
+ if (str.indexOf(".") > 0) {
+ if (str.length - str.indexOf(".") <= 2) {
+ amountTxt.text = "$str$value"
+ }
+ } else {
+ //限制消费金额<1000
+ if (str.length < 3) {
+ amountTxt.text = "$str$value"
+ }
+ }
+ showScreenAmount()
+ }
+
+ 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
+ vCardstatus.setTextColor(Color.RED)
+ vBalance.text = null
+ }
+ }
+
+ private var lastshowtime: String? = null
+ override fun clearUserInfo(datetime: String) {
+ if (!isBackRuning) {
+ vCustname.text = null
+ vStuempno.text = null
+ vCardstatus.text = null
+ vBalance.text = null
+ val tmptime = datetime.substring(0, 16)
+ if (lastshowtime != tmptime) {
+ lastshowtime = tmptime
+ vTime.text = tmptime
+ AuxScreenController.getInstance().refreshBottom(tmptime)
+ }
+ }
+ }
+
+ override fun onResume() {
+ super.onResume()
+ isBackRuning = false
+ refresh()
+ refreshRecentDtl()
+ }
+
+ override fun onNewIntent(intent: Intent) {
+ }
+
+ private fun refresh() {
+ addAmount = 0
+ amountTxt.text = "0"
+ var shopname = SPApplication.getInstance().getPos().getConfigPara()!!.shopname
+ if (shopname == null || shopname.length < 9) {
+ vShopname.textSize = resources.getDimension(R.dimen.consume_shopname_text_size_normal)
+ } else {
+ vShopname.textSize = resources.getDimension(R.dimen.consume_shopname_text_size_middle)
+ if (shopname.length > 10) {
+ val len = shopname.length / 2
+ shopname = shopname.substring(0, len) + "\n" + shopname.substring(len)
+ }
+ }
+ vShopname.text = shopname
+
+ refreshLinkStatus(SPApplication.getInstance().isOnline())
+ AuxScreenController.getInstance().refreshBottom(DateUtil.getNowDate().substring(0, 16))
+ AuxScreenController.getInstance().refreshContent(Arrays.asList(" 欢迎光临!", " 请刷卡..."))
+
+ val record = SPApplication.getInstance().getPos().getControlPara(PublicDef.CONTROL_FIXAMT)
+ if (record != null && PublicDef.CONTROL_NO_FIXPAY_FLAG != record.paraval) {
+ try {
+ val amount = Integer.parseInt(record.paraval)
+ amountTxt.text = String.format("%.02f", amount / 100.0f)
+ jumpToFixpay(amount)
+ } catch (ex: Exception) {
+ ex.printStackTrace()
+ }
+ }
+ }
+
+ override fun refreshLinkStatus(isOnline: Boolean) {
+ if (isOnline) {
+ vLinkLogo.setImageDrawable(getDrawable(R.drawable.wireless_on))
+ vLinkstat.text = "联机"
+ vLinkstat.setTextColor(resources.getColor(R.color.blue))
+ AuxScreenController.getInstance().refreshTitle("联机 F4查看上笔记录")
+ } else {
+ vLinkLogo.setImageDrawable(getDrawable(R.drawable.wireless_off))
+ vLinkstat.text = "脱机"
+ vLinkstat.setTextColor(Color.RED)
+ AuxScreenController.getInstance().refreshTitle("脱机 F4查看上笔记录")
+ }
+ }
+
+ override fun showConsumeSuc(info: CardUserInfoBean) {
+ TODO("not implemented") //To change body of created functions use File | Settings | File Templates.
+ }
+
+ override fun showConsumeHint(hint: String) {
+ TODO("not implemented") //To change body of created functions use File | Settings | File Templates.
+ }
+
+ override fun showConsumeFail(info: CardUserInfoBean) {
+ TODO("not implemented") //To change body of created functions use File | Settings | File Templates.
+ }
+
+ override fun showReverseSuc(info: CardUserInfoBean) {
+ TODO("not implemented") //To change body of created functions use File | Settings | File Templates.
+ }
+
+ override fun showReverseFail(info: CardUserInfoBean) {
+ TODO("not implemented") //To change body of created functions use File | Settings | File Templates.
+ }
+
+ private var lastShowRecentDatetime: String? = null
+ private fun refreshRecentDtl() {
+ val info = lastPayInfo
+ if (info != null) {
+ //已显示过不在显示
+ if (lastShowRecentDatetime == info.datetime) {
+ return
+ }
+ lastShowRecentDatetime = info.datetime
+
+ if (info.status == PayStatus.SUC) {
+ when {
+ info.reversalFlag == ReversalFlag.AUTO -> vLastResult.text = "自动冲正"
+ info.reversalFlag == ReversalFlag.MANUAL -> vLastResult.text = "手动撤销"
+ else -> vLastResult.text = "消费成功"
+ }
+ vLastPayFailll.visibility = View.GONE
+ vLastPayamtll.visibility = View.VISIBLE
+ vLastPayamt.text = String.format("%.02f元", info.payamt / 100.0f)
+ } else {
+ if (info.reversalFlag == ReversalFlag.AUTO ||
+ info.reversalFlag == ReversalFlag.MANUAL
+ ) {
+ vLastResult.text = "冲正失败"
+ } else {
+ vLastResult.text = "消费失败"
+ }
+ vLastPayFailll.visibility = View.VISIBLE
+ vLastPayamtll.visibility = View.GONE
+ vLastPayFailreason.text = info.retmsg
+ }
+
+ 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))
+ vLastPaytime.text = sb.toString()
+ resetPayShowCounter(10 * 1000)
+ }
+ }
+
+ private fun clearLastPayResult() {
+ vLastResult.text = null
+ vLastPayamt.text = null
+ vLastPayway.text = null
+ vLastPayday.text = null
+ vLastPaytime.text = null
+ vLastPayFailreason.text = null
+ }
+
+ override fun onStop() {
+ super.onStop()
+ isBackRuning = true
+ }
+
+ override fun onDestroy() {
+ SoundUtil.releaseMusic()
+ presenter.stop()
+ super.onDestroy()
+ }
+
+ @SuppressLint("SetTextI18n")
+ override fun dispatchKeyEvent(event: KeyEvent): Boolean {
+ if (event.action == KeyEvent.ACTION_DOWN) {
+ val keyCode = event.keyCode
+ when (keyCode) {
+ KeyEvent.KEYCODE_BACK -> {
+ amountTxt.text = "0"
+ presenter.clickNoPay()
+ }
+ KeyEvent.KEYCODE_0,
+ KeyEvent.KEYCODE_1,
+ KeyEvent.KEYCODE_2,
+ KeyEvent.KEYCODE_3,
+ KeyEvent.KEYCODE_4,
+ KeyEvent.KEYCODE_5,
+ KeyEvent.KEYCODE_6,
+ KeyEvent.KEYCODE_7,
+ KeyEvent.KEYCODE_8,
+ KeyEvent.KEYCODE_9 -> {
+ presenter.clickNoPay()
+ addValueToEdit(keyCode - KeyEvent.KEYCODE_0)
+ }
+ KeyEvent.KEYCODE_POUND, KeyEvent.KEYCODE_PERIOD -> {
+ presenter.clickNoPay()
+ val str = amountTxt.text.toString()
+ if (str.length < 8 && str.indexOf('.') < 0) {
+ amountTxt.text = "$str."
+ showScreenAmount()
+ }
+ }
+ KeyEvent.KEYCODE_NUMPAD_ADD -> {
+ //'+'
+ addAmount += getCurAmount()
+ amountTxt.text = ""
+ showScreenAmount()
+ }
+ KeyEvent.KEYCODE_DPAD_LEFT -> {
+ //'F1'
+ isBackRuning = true
+ jumpActivity(MenuActivity::class.java)
+ }
+// KeyEvent.KEYCODE_DPAD_UP ->
+ //'F2'
+// KeyEvent.KEYCODE_DPAD_DOWN ->
+ //'F3'
+ KeyEvent.KEYCODE_DPAD_RIGHT -> {
+ //'F4'
+ jumpActivity(TransdtlActivity::class.java)
+ }
+ KeyEvent.KEYCODE_DEL -> {
+ //cancel
+ presenter.clickNoPay()
+ delValueToEdit()
+ }
+ KeyEvent.KEYCODE_ENTER -> {
+ checkAmtToPay()
+ }
+ }
+ }
+ return super.dispatchKeyEvent(event)
+ }
+
+ private fun showScreenAmount() {
+ if (addAmount > 0) {
+ AuxScreenController.getInstance().refreshContent(
+ Arrays.asList(
+ "输入金额: +" + String.format("%.02f", addAmount / 100.0f),
+ amountTxt.text.toString()
+ )
+ )
+ } else {
+ AuxScreenController.getInstance().refreshContent(Arrays.asList("输入金额:", amountTxt.text.toString()))
+ }
+ }
+
+ override fun getActivity(): Activity {
+ return this
+ }
+
+ override fun isBackRuning(): Boolean {
+ return isBackRuning
+ }
+
+ fun showFixConsume(fixamt: Int) {
+ amountTxt.text = String.format("%.02f", fixamt / 100.0f)
+ }
+
+ override fun showRecentDtl(record: TransdtlUnionRecord?) {
+ if (record != null) {
+ val info = CardUserInfoBean(PublicDef.SUCCESS, "")
+ info.datetime = record.transdate + record.transtime
+ info.username = record.username
+ info.payamt = record.payamt
+ info.status = record.status
+ info.payway = record.payway
+ info.reversalFlag = record.reversalflag
+ refreshRecentDtl()
+ }
+ }
+
+ private fun resetPayShowCounter(timems: Long) {
+ counter?.cancel()
+ counter = LastPayShowTimer(timems, 500)
+ counter?.start()
+ }
+
+ private inner class LastPayShowTimer(millisInFuture: Long, countDownInterval: Long) :
+ CountDownTimer(millisInFuture, countDownInterval) {
+
+ override fun onTick(millisUntilFinished: Long) {
+
+ }
+
+ override fun onFinish() {
+ clearLastPayResult()
+ }
+ }
}
\ No newline at end of file
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 d42ccfc..216dfcd 100644
--- a/app/src/main/java/com/supwisdom/activities/consume/ConsumePresenter.kt
+++ b/app/src/main/java/com/supwisdom/activities/consume/ConsumePresenter.kt
@@ -1,8 +1,71 @@
package com.supwisdom.activities.consume
+import android.os.Handler
+import android.os.Looper
+import android.os.Message
+import com.supwisdom.activities.consume.bean.CardUserInfoBean
+import com.supwisdom.activities.consume.mode.CardPayService
+import com.supwisdom.utils.LogUtil
+import com.supwisdom.utils.PublicDef
+
/**
** create by zzq on 2019/7/25
** @desc
**/
-class ConsumePresenter constructor(iConsumeView: IConsumeView){
+class ConsumePresenter constructor(iConsumeView: IConsumeView) {
+ private val TAG = "ConsumePresenter"
+ private val iConsumeView = iConsumeView
+ private lateinit var handler: Handler
+ private var cardPayService: CardPayService
+
+ init {
+ createHandler()
+ cardPayService = CardPayService(iConsumeView, handler)
+ }
+
+ private fun createHandler() {
+ handler = object : android.os.Handler(Looper.getMainLooper()) {
+ override fun handleMessage(msg: Message) {
+ when (msg.what) {
+ 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_FAIL -> {
+ val ret = msg.obj as CardUserInfoBean
+ LogUtil.d(TAG, "pay fail,reason=${ret.retmsg}")
+ iConsumeView.showConsumeFail(ret)
+ }
+ PublicDef.MSG_CARD_REVERSE_FAIL -> {
+ val ret = msg.obj as CardUserInfoBean
+ LogUtil.d(TAG, "reverse fail,reason=${ret.retmsg}")
+ iConsumeView.showReverseFail(msg.obj as CardUserInfoBean)
+ }
+ PublicDef.MSG_CARD_REVERSE_SUC -> iConsumeView.showReverseSuc(msg.obj as CardUserInfoBean)
+ PublicDef.MSG_USER_INFO_SHOW -> iConsumeView.showUserInfo(msg.obj as CardUserInfoBean)
+ PublicDef.MSG_USER_INFO_CLEAR -> iConsumeView.clearUserInfo(msg.obj as String)
+ PublicDef.MSG_LINK_STATUS -> iConsumeView.refreshLinkStatus(msg.obj as Boolean)
+ }
+ }
+ }
+ }
+
+ fun start() {
+ cardPayService.start()
+ }
+
+ fun stop() {
+ cardPayService.stop()
+ }
+
+ fun clickNoPay() {
+ cardPayService.clickNoPay()
+ }
+
+ fun clickToPay(amount: Int) {
+ cardPayService.clickToPay(amount)
+ }
+
+ fun clickToReverse(amount: Int) {
+ cardPayService.clickToReverse(amount)
+ }
}
\ No newline at end of file
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 bca0fb1..d6c53bb 100644
--- a/app/src/main/java/com/supwisdom/activities/consume/IConsumeView.kt
+++ b/app/src/main/java/com/supwisdom/activities/consume/IConsumeView.kt
@@ -1,8 +1,33 @@
package com.supwisdom.activities.consume
+import android.app.Activity
+import com.supwisdom.activities.consume.bean.CardUserInfoBean
+import com.supwisdom.entity.TransdtlUnionRecord
+
/**
** create by zzq on 2019/7/24
** @desc
**/
interface IConsumeView {
+ fun getActivity(): Activity
+
+ fun isBackRuning(): Boolean
+
+ fun showConsumeSuc(info: CardUserInfoBean)
+
+ fun showConsumeHint(hint: String)
+
+ fun showConsumeFail(info: CardUserInfoBean)
+
+ fun showReverseSuc(info: CardUserInfoBean)
+
+ fun showReverseFail(info: CardUserInfoBean)
+
+ fun showUserInfo(info: CardUserInfoBean)
+
+ fun clearUserInfo(datetime: String)
+
+ fun refreshLinkStatus(isOnline: Boolean)
+
+ fun showRecentDtl(record: TransdtlUnionRecord?)
}
\ No newline at end of file
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
new file mode 100644
index 0000000..461c16d
--- /dev/null
+++ b/app/src/main/java/com/supwisdom/activities/consume/bean/CardAccountRetBean.kt
@@ -0,0 +1,14 @@
+package com.supwisdom.activities.consume.bean
+
+import com.supwisdom.bean.BaseResp
+
+/**
+ ** create by zzq on 2019/7/26
+ ** @desc
+ **/
+class CardAccountRetBean : BaseResp() {
+ var username: String? = null
+ var userid: 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/activities/consume/bean/CardBean.kt b/app/src/main/java/com/supwisdom/activities/consume/bean/CardBean.kt
index 162ff9b..f68486f 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
@@ -13,4 +13,6 @@
var amount: Int = 0
var username: String? = null
var userid: Int = 0
+ var balance: Int? = null
+ var cardstatus: Int = 0
}
\ 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 1fd28f2..10acf25 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
@@ -1,6 +1,8 @@
package com.supwisdom.activities.consume.bean
import com.supwisdom.bean.BaseResp
+import com.supwisdom.entity.PayStatus
+import com.supwisdom.entity.ReversalFlag
/**
** create by zzq on 2019/7/25
@@ -9,4 +11,11 @@
class CardUserInfoBean constructor(retcode: Int, retmsg: String) : BaseResp(retcode, retmsg) {
var username: String? = null
var showtime: Int = 3
+ var balance: Int? = null
+ var cardstatus: Int = 0
+ var payamt: Int = 0
+ var status: PayStatus? = null
+ var reversalFlag: ReversalFlag? = null
+ var datetime: String? = null
+ var payway: String? = null //card,code
}
\ 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 c11c4d8..71f7899 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
@@ -4,10 +4,9 @@
import android.os.Message
import com.supwisdom.activities.SPApplication
import com.supwisdom.activities.consume.IConsumeView
-import com.supwisdom.activities.consume.bean.CardBean
-import com.supwisdom.activities.consume.bean.CardPayConfirmRetBean
-import com.supwisdom.activities.consume.bean.CardPayInitRetBean
-import com.supwisdom.activities.consume.bean.CardUserInfoBean
+import com.supwisdom.activities.consume.bean.*
+import com.supwisdom.entity.PayStatus
+import com.supwisdom.entity.ReversalFlag
import com.supwisdom.entity.TransdtlOfflineRecord
import com.supwisdom.entity.TransdtlOnlineRecord
import com.supwisdom.epaycard.Cardlib
@@ -54,14 +53,44 @@
thread = null
}
+ fun clickNoPay() {
+ clickStat = ClickStat.INIT
+ amount = 0
+ }
+
+ fun clickToPay(amount: Int) {
+ clickStat = ClickStat.PAY
+ this.amount = amount
+ }
+
+ fun clickToReverse(amount: Int) {
+ clickStat = ClickStat.REVERSE
+ this.amount = amount
+ }
+
private inner class CardPayRunnable : Runnable {
private lateinit var onlRecord: TransdtlOnlineRecord
private lateinit var offRecord: TransdtlOfflineRecord
+ private var oldcardphyid: String? = null
+ private var onlineBalance = false
+ private var curLinkStatus = false
+ private var lastShowTime: Long = 0
+ private var lastUserInfoTime: Long = 0
+ private var curLinkRefreshTime: Long = 0
override fun run() {
while (!isExist) {
+ if (iConsumeView.isBackRuning()) {
+ CommonUtil.doSleep(1000)
+ continue
+ }
CommonUtil.doSleep(100)
try {
- readCard()
+ val cardphyid = Cardlib.instance.requestCard()
+ if (oldcardphyid != cardphyid) {
+ readCard()
+ cardBean.cardphyid = cardphyid
+ oldcardphyid = cardphyid
+ }
when (clickStat) {
ClickStat.PAY -> {
try {
@@ -75,32 +104,68 @@
try {
doReverse()
} catch (ex: CardPayCancelFailError) {
- sendMsg(PublicDef.MSG_CARD_PAYCANCEL_FAIL, getErrorInfo(ex.message))
+ sendMsg(PublicDef.MSG_CARD_REVERSE_FAIL, getErrorInfo(ex.message))
clickStat = ClickStat.INIT
}
}
ClickStat.INIT -> {
-
+ if (SPApplication.getInstance().isOnline() && !onlineBalance) {
+ onlineBalance = true
+ getAccountInfoByCard()
+ }
+ val curtime = System.currentTimeMillis()
+ if (curtime < lastUserInfoTime ||
+ curtime - lastUserInfoTime > 1000
+ ) {
+ lastUserInfoTime = curtime
+ showCardUserInfo()
+ }
}
}
} catch (ex: CardNotFoundError) {
ex.printStackTrace()
- continue
+ doClear()
}
-
}
}
+ private fun getAccountInfoByCard() {
+ val resp = consumeApi.accQuery(
+ pos.getConfigPara()!!.devphyid!!,
+ 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
+ }
+ }
+ }
+
+ private fun showCardUserInfo() {
+ val info = CardUserInfoBean(PublicDef.SUCCESS, "账户信息")
+ info.username = cardBean.username
+ info.balance = cardBean.balance
+ info.cardstatus = cardBean.cardstatus
+ sendMsg(PublicDef.MSG_USER_INFO_SHOW, info)
+ }
+
private fun readCard() {
- val cardphyid = Cardlib.instance.requestCard()
val cardinfo = Cardlib.instance.readCard()
cardBean = CardBean()
- cardBean.cardphyid = cardphyid
cardBean.cardNo = cardinfo.cardNo
cardBean.idCard = cardinfo.idCard
cardBean.expireDate = cardinfo.expireDate
cardBean.amount = amount
cardBean.datetime = DateUtil.getNowDateTimeFormat()
+ /**
+ * 用户名默认用卡号代替,在线查询更新为用户名
+ */
+ cardBean.username = cardBean.cardNo
}
private fun doConsume() {
@@ -145,7 +210,7 @@
}
onlRecord.billno = retBean.billno
onlRecord.username = retBean.username
- onlRecord.userid = retBean.userid
+// onlRecord.userid = retBean.userid
return true
}
@@ -180,9 +245,10 @@
onlRecord.cardno = cardBean.cardNo
onlRecord.cardphyid = cardBean.cardphyid
onlRecord.payamt = cardBean.amount
+ onlRecord.reversalflag = ReversalFlag.NONE
onlRecord.extraamt = 0
onlRecord.transtype = "card"
- onlRecord.status = "init"
+ onlRecord.status = PayStatus.INIT
onlRecord.upflag = 1
if (!pos.saveTransdtlOnline(onlRecord)) {
throw CardPayFailError("保存流水失败")
@@ -191,9 +257,9 @@
private fun updateTransdtlOnline(issuccess: Boolean) {
if (issuccess) {
- onlRecord.status = "suc"
+ onlRecord.status = PayStatus.SUC
} else {
- onlRecord.status = "fail"
+ onlRecord.status = PayStatus.FAIL
}
onlRecord.upflag = 0
if (!pos.updateTransdtlOnline(onlRecord)) {
@@ -212,10 +278,13 @@
if (!sysRecord!!.offlineEnable) {
throw CardPayFailError("禁止离线交易")
}
- val offdate = DateUtil.getDayDateNoFormatBefore(sysRecord.maxOfflineDays)
- val validdate = pos.getDynamicPara()!!.lastauthtime?.substring(0, 8) ?: "00000000"
- if (offdate > validdate) {
- throw CardPayFailError("设备已脱机${sysRecord.maxOfflineDays}天")
+ val ctlRecord = pos.getControlPara(PublicDef.CONTROL_OFFLINE_DAY_DISABLE)
+ if (ctlRecord == null || ctlRecord.paraval != "1") {
+ val offdate = DateUtil.getDayDateNoFormatBefore(sysRecord.maxOfflineDays)
+ val validdate = pos.getDynamicPara()!!.lastauthtime?.substring(0, 8) ?: "00000000"
+ if (offdate > validdate) {
+ throw CardPayFailError("设备已脱机${sysRecord.maxOfflineDays}天")
+ }
}
val whiteRecord =
@@ -241,9 +310,10 @@
offRecord.cardno = cardBean.cardNo
offRecord.cardphyid = cardBean.cardphyid
offRecord.payamt = cardBean.amount
+ offRecord.reversalflag = ReversalFlag.NONE
offRecord.extraamt = 0
offRecord.managefeetype = "none"
- offRecord.status = "init"
+ offRecord.status = PayStatus.INIT
offRecord.upflag = 1
if (!pos.saveTransdtlOffline(offRecord)) {
throw CardPayFailError("保存流水失败")
@@ -252,9 +322,9 @@
private fun updateTransdtlOffline(issuccess: Boolean) {
if (issuccess) {
- offRecord.status = "suc"
+ offRecord.status = PayStatus.SUC
} else {
- offRecord.status = "fail"
+ offRecord.status = PayStatus.FAIL
}
offRecord.upflag = 0
if (!pos.updateTransdtlOffline(offRecord)) {
@@ -262,6 +332,44 @@
}
}
+ private fun doClear() {
+ oldcardphyid = null
+ onlineBalance = false
+ val curtime = System.currentTimeMillis()
+ if (curtime < lastShowTime ||
+ curtime - lastShowTime > 1000
+ ) {
+ lastShowTime = curtime
+ sendMsg(PublicDef.MSG_USER_INFO_CLEAR, DateUtil.getNowDate())
+ showLinkStatus()
+ }
+ }
+
+ private fun showLinkStatus() {
+ if (SPApplication.getInstance().isOnline()) {
+ if (!curLinkStatus) {
+ curLinkRefreshTime = System.currentTimeMillis()
+ curLinkStatus = true
+ sendMsg(PublicDef.MSG_LINK_STATUS, true)
+ return
+ }
+ } else {
+ if (curLinkStatus) {
+ curLinkStatus = false
+ curLinkRefreshTime = System.currentTimeMillis()
+ sendMsg(PublicDef.MSG_LINK_STATUS, false)
+ return
+ }
+ }
+ val t = System.currentTimeMillis()
+ if (t < curLinkRefreshTime ||
+ t - curLinkRefreshTime > 30000
+ ) {
+ curLinkRefreshTime = t
+ sendMsg(PublicDef.MSG_LINK_STATUS, SPApplication.getInstance().isOnline())
+ }
+ }
+
private fun getErrorInfo(errmsg: String?): CardUserInfoBean {
val info = CardUserInfoBean(PublicDef.ERROR, errmsg ?: "null")
info.showtime = pos.getSysPara()!!.consumeFailShowtime
diff --git a/app/src/main/java/com/supwisdom/activities/consume/mode/ConsumeApi.kt b/app/src/main/java/com/supwisdom/activities/consume/mode/ConsumeApi.kt
index 54627af..e6c49b1 100644
--- a/app/src/main/java/com/supwisdom/activities/consume/mode/ConsumeApi.kt
+++ b/app/src/main/java/com/supwisdom/activities/consume/mode/ConsumeApi.kt
@@ -49,4 +49,13 @@
return YktSession.getInstance().sendYktRequestPost("/api/pos/payquery", "", params)
}
+
+ fun accQuery(devphyid: String, cardphyid: String, cardno: String): TransResp? {
+ val params = WebParams()
+ params.setParameter("devphyid", devphyid)
+ .setParameter("cardphyid", cardphyid)
+ .setParameter("cardno", cardno)
+
+ return YktSession.getInstance().sendYktRequestPost("/api/pos/accquery", "", params)
+ }
}
\ No newline at end of file
diff --git a/app/src/main/java/com/supwisdom/activities/transdtl/TransdtlActivity.kt b/app/src/main/java/com/supwisdom/activities/transdtl/TransdtlActivity.kt
new file mode 100644
index 0000000..b047f21
--- /dev/null
+++ b/app/src/main/java/com/supwisdom/activities/transdtl/TransdtlActivity.kt
@@ -0,0 +1,10 @@
+package com.supwisdom.activities.transdtl
+
+import com.supwisdom.activities.BaseActivity
+
+/**
+ ** create by zzq on 2019/7/26
+ ** @desc
+ **/
+class TransdtlActivity : BaseActivity() {
+}
\ 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 aaac8dc..347db4a 100644
--- a/app/src/main/java/com/supwisdom/db/BeanPropEnum.kt
+++ b/app/src/main/java/com/supwisdom/db/BeanPropEnum.kt
@@ -58,6 +58,8 @@
transtype,
payamt,
extraamt,
+ managefeetype,
+ username,
billno,
reversalflag,
reversalbillno,
@@ -90,6 +92,7 @@
}
enum class TransdtlUnion {
+ username,
transdate,
transtime,
devseqno,
diff --git a/app/src/main/java/com/supwisdom/db/DBTransdtlHelper.kt b/app/src/main/java/com/supwisdom/db/DBTransdtlHelper.kt
index 6fd57b1..a814f3a 100644
--- a/app/src/main/java/com/supwisdom/db/DBTransdtlHelper.kt
+++ b/app/src/main/java/com/supwisdom/db/DBTransdtlHelper.kt
@@ -62,6 +62,8 @@
+ BeanPropEnum.TransdtlOnline.transtype + " varchar(8),"
+ BeanPropEnum.TransdtlOnline.payamt + " integer,"
+ BeanPropEnum.TransdtlOnline.extraamt + " integer,"
+ + BeanPropEnum.TransdtlOnline.managefeetype + " varchar(10),"
+ + BeanPropEnum.TransdtlOnline.username + " varchar(32),"
+ BeanPropEnum.TransdtlOnline.billno + " varchar(32),"
+ BeanPropEnum.TransdtlOnline.reversalflag + " varchar(8),"
+ BeanPropEnum.TransdtlOnline.reversalbillno + " varchar(32),"
diff --git a/app/src/main/java/com/supwisdom/db/TransdtlOnlineDao.kt b/app/src/main/java/com/supwisdom/db/TransdtlOnlineDao.kt
index f40b672..9d3d760 100644
--- a/app/src/main/java/com/supwisdom/db/TransdtlOnlineDao.kt
+++ b/app/src/main/java/com/supwisdom/db/TransdtlOnlineDao.kt
@@ -128,6 +128,9 @@
record.qrcode = cursor.getString(cursor.getColumnIndex(BeanPropEnum.TransdtlOnline.qrcode.toString()))
record.transtype = cursor.getString(cursor.getColumnIndex(BeanPropEnum.TransdtlOnline.transtype.toString()))
record.billno = cursor.getString(cursor.getColumnIndex(BeanPropEnum.TransdtlOnline.billno.toString()))
+ record.managefeetype =
+ cursor.getString(cursor.getColumnIndex(BeanPropEnum.TransdtlOnline.managefeetype.toString()))
+ 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()))
var flag = cursor.getString(cursor.getColumnIndex(BeanPropEnum.TransdtlOnline.reversalflag.toString()))
@@ -163,6 +166,8 @@
values.put(BeanPropEnum.TransdtlOnline.payamt.toString(), record.payamt)
values.put(BeanPropEnum.TransdtlOnline.extraamt.toString(), record.extraamt)
values.put(BeanPropEnum.TransdtlOnline.billno.toString(), record.billno)
+ values.put(BeanPropEnum.TransdtlOnline.managefeetype.toString(), record.managefeetype)
+ values.put(BeanPropEnum.TransdtlOnline.username.toString(), record.username)
values.put(BeanPropEnum.TransdtlOnline.reversalflag.toString(), record.reversalflag.toString())
values.put(BeanPropEnum.TransdtlOnline.reversalbillno.toString(), record.reversalbillno)
values.put(BeanPropEnum.TransdtlOnline.status.toString(), record.status.toString())
diff --git a/app/src/main/java/com/supwisdom/db/TransdtlUnionDao.kt b/app/src/main/java/com/supwisdom/db/TransdtlUnionDao.kt
index 62bd5d6..99b2107 100644
--- a/app/src/main/java/com/supwisdom/db/TransdtlUnionDao.kt
+++ b/app/src/main/java/com/supwisdom/db/TransdtlUnionDao.kt
@@ -24,6 +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(BeanPropEnum.TransdtlOffline.upflag)
.append(" from ").append(DBTransdtlHelper.TABLE_NAME_DTL_OFFLINE)
.append(" UNION ALL select ")
@@ -33,9 +35,10 @@
.append(BeanPropEnum.TransdtlOnline.transtype).append(" as ").append(BeanPropEnum.TransdtlUnion.payway)
.append(",")
.append(BeanPropEnum.TransdtlOnline.reversalflag).append(",")
- .append(BeanPropEnum.TransdtlOffline.payamt).append(",")
- .append(BeanPropEnum.TransdtlOffline.status).append(",")
- .append(BeanPropEnum.TransdtlOffline.upflag)
+ .append(BeanPropEnum.TransdtlOnline.payamt).append(",")
+ .append(BeanPropEnum.TransdtlOnline.status).append(",")
+ .append(BeanPropEnum.TransdtlOnline.username).append(",")
+ .append(BeanPropEnum.TransdtlOnline.upflag)
.append(" from ").append(DBTransdtlHelper.TABLE_NAME_DTL_ONLINE)
}
@@ -96,6 +99,7 @@
record.transtime = cursor.getString(cursor.getColumnIndex(BeanPropEnum.TransdtlUnion.transtime.toString()))
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()))
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/entity/TransdtlOnlineRecord.kt b/app/src/main/java/com/supwisdom/entity/TransdtlOnlineRecord.kt
index 8114a10..b2b0d6e 100644
--- a/app/src/main/java/com/supwisdom/entity/TransdtlOnlineRecord.kt
+++ b/app/src/main/java/com/supwisdom/entity/TransdtlOnlineRecord.kt
@@ -17,7 +17,7 @@
var extraamt: Int = 0
var managefeetype: String? = null // none,discount,mealer
var username: String? = null
- var userid: Int = 0
+ // var userid: Int = 0
var billno: String? = null
var reversalflag: ReversalFlag? = null //消费none 自动冲正auto 手动撤销 manual
var reversalbillno: String? = null //被冲正交易参考号
diff --git a/app/src/main/java/com/supwisdom/entity/TransdtlUnionRecord.kt b/app/src/main/java/com/supwisdom/entity/TransdtlUnionRecord.kt
index 184265c..bc78c6f 100644
--- a/app/src/main/java/com/supwisdom/entity/TransdtlUnionRecord.kt
+++ b/app/src/main/java/com/supwisdom/entity/TransdtlUnionRecord.kt
@@ -5,6 +5,7 @@
** @desc
**/
class TransdtlUnionRecord {
+ var username: String? = null
var transdate: String? = null
var transtime: String? = null
var devseqno: Int = 0
diff --git a/app/src/main/java/com/supwisdom/utils/PublicDef.kt b/app/src/main/java/com/supwisdom/utils/PublicDef.kt
index d0cf3de..d5fac32 100644
--- a/app/src/main/java/com/supwisdom/utils/PublicDef.kt
+++ b/app/src/main/java/com/supwisdom/utils/PublicDef.kt
@@ -22,11 +22,15 @@
/**************************************************************/
/*************************handler 状态码***********************/
const val MSG_CARD_PAYING = 10
- const val MSG_CARD_PAY_FAIL = 11
- const val MSG_CARD_PAY_SUC = 12
- const val MSG_CARD_PAY_QUERY = 13
- const val MSG_CARD_PAYCANCEL_FAIL = 14
- const val MSG_CARD_PAYCANCEL_SUC = 15
+ const val MSG_CARD_READ_AGAIN = 11
+ const val MSG_CARD_PAY_FAIL = 12
+ const val MSG_CARD_PAY_SUC = 13
+ const val MSG_CARD_PAY_QUERY = 14
+ const val MSG_CARD_REVERSE_FAIL = 15
+ const val MSG_CARD_REVERSE_SUC = 16
+ const val MSG_USER_INFO_SHOW = 17
+ const val MSG_USER_INFO_CLEAR = 18
+ const val MSG_LINK_STATUS = 19
/*************************不能重复*****************************/
/**
* 卡消费标志(1 byte)
@@ -74,6 +78,10 @@
const val CONTROL_OFFLINE_DAY_DISABLE = "offdaydisable"
const val CONTROL_DEBUG_ENABLE = "debugenable"
/**
+ * 非定额消费标识
+ */
+ const val CONTROL_NO_FIXPAY_FLAG = "none"
+ /**
* 消费冲正时限
*/
const val REVERSE_MS_GAP = 600000
diff --git a/app/src/main/java/com/supwisdom/utils/SoundUtil.kt b/app/src/main/java/com/supwisdom/utils/SoundUtil.kt
new file mode 100644
index 0000000..2c80655
--- /dev/null
+++ b/app/src/main/java/com/supwisdom/utils/SoundUtil.kt
@@ -0,0 +1,70 @@
+package com.supwisdom.utils
+
+import android.content.Context
+import android.media.AudioManager
+import android.media.SoundPool
+import com.supwisdom.R
+
+/**
+ ** create by zzq on 2019/7/26
+ ** @desc
+ **/
+@Suppress("DEPRECATION")
+object SoundUtil {
+ private var soundId: Int = 0
+ private var soundPool: SoundPool? = null
+ private val soundMap = hashMapOf<Int, Int>()
+ private var keyEnable = false
+
+ fun playMusic(context: Context, mid: Int) {
+ if (!keyEnable && isKeyPlay(mid)) {
+ return
+ }
+ if (soundPool == null) {
+ soundPool = SoundPool(30, AudioManager.STREAM_MUSIC, 0) //分别对应声音池数量,AudioManager.STREAM_MUSIC 和 0
+ }
+ if (soundMap.containsKey(mid)) {
+ soundPool!!.play(soundMap[mid]!!, 1.0f, 1.0f, 1, 0, 1.0f)
+ } else {
+ soundId = soundPool!!.load(context, mid, 1)
+ soundPool!!.setOnLoadCompleteListener { pool, sampleId, status ->
+ soundMap[mid] = soundId
+ // 加载完成
+ pool.play(soundId, 1.0f, 1.0f, 1, 0, 1.0f)
+ }
+ }
+ }
+
+ fun releaseMusic() {
+ if (soundPool != null) {
+ soundPool!!.release()
+ soundPool = null
+ }
+ soundMap.clear()
+ }
+
+ fun setKeyPlay(enable: Boolean) {
+ keyEnable = enable
+ }
+
+ private fun isKeyPlay(mid: Int): Boolean {
+ return mid == R.raw.key_one ||
+ mid == R.raw.key_two ||
+ mid == R.raw.key_three ||
+ mid == R.raw.key_four ||
+ mid == R.raw.key_five ||
+ mid == R.raw.key_six ||
+ mid == R.raw.key_seven ||
+ mid == R.raw.key_eight ||
+ mid == R.raw.key_nine ||
+ mid == R.raw.key_zero ||
+ mid == R.raw.key_dot ||
+ mid == R.raw.key_add ||
+ mid == R.raw.key_clear ||
+ mid == R.raw.key_enter ||
+ mid == R.raw.key_fone ||
+ mid == R.raw.key_ftwo ||
+ mid == R.raw.key_fthree ||
+ mid == R.raw.key_ffour
+ }
+}
\ No newline at end of file
diff --git a/app/src/main/res/layout/activity_consume.xml b/app/src/main/res/layout/activity_consume.xml
new file mode 100644
index 0000000..b4565e0
--- /dev/null
+++ b/app/src/main/res/layout/activity_consume.xml
@@ -0,0 +1,437 @@
+<?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">
+
+ <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: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">
+
+ <ImageView
+ 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">
+
+ <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" />
+
+ <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" />
+ </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">
+
+ <ImageView
+ android:id="@+id/consume_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" />
+ </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: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" />
+
+ <TextView
+ android:id="@+id/consume_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: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: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" />
+ </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" />
+
+ <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" />
+ </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: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_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" />
+ </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">
+
+ <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_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" />
+ </LinearLayout>
+ </LinearLayout>
+</LinearLayout>
\ No newline at end of file