From 465c8abaa982fba6868a900d25316c70afc20fb7 Mon Sep 17 00:00:00 2001
From: zuoxiao <470321431@qq.com>
Date: 星期三, 18 六月 2025 13:59:46 +0800
Subject: [PATCH] feat(card): 优化销卡功能并添加写卡操作
---
generallibrary/src/main/java/com/dayu/general/activity/BSCardFragment.kt | 3
generallibrary/src/main/java/com/dayu/general/activity/CardWriteSuccessActivity.kt | 22 +
generallibrary/src/main/java/com/dayu/general/activity/NfcWreatActivity.kt | 75 +++++-
generallibrary/src/main/res/layout/activity_card_cancel.xml | 269 ++++++++++++++----------
generallibrary/src/main/java/com/dayu/general/activity/CardCancelActivity.kt | 121 +++++++---
README.md | 165 +++++++++++++++
6 files changed, 482 insertions(+), 173 deletions(-)
diff --git a/README.md b/README.md
index dee3b50..0e4714c 100644
--- a/README.md
+++ b/README.md
@@ -232,6 +232,171 @@
- CardData: 鍗$墖鏁版嵁
- ProjectDataBean: 椤圭洰鏁版嵁
+## 鏁版嵁绫荤鐞嗚鑼�
+
+### Bean鍖呯粨鏋勭粍缁�
+
+椤圭洰涓墍鏈夌殑鏁版嵁绫伙紙Data Class锛夐兘搴旇缁熶竴鏀惧湪`bean`鍖呬笅鐨勭浉搴斿瓙鐩綍涓紝鎸夌収鍔熻兘鍜岀敤閫旇繘琛屽垎绫伙細
+
+```
+generallibrary/src/main/java/com/dayu/general/bean/
+鈹溾攢鈹� net/ # 缃戠粶鎺ュ彛鐩稿叧鏁版嵁绫�
+鈹溾攢鈹� card/ # 鍗$墖鐩稿叧鏁版嵁绫�
+鈹溾攢鈹� db/ # 鏁版嵁搴撳疄浣撶被
+鈹斺攢鈹� ... # 鍏朵粬鍔熻兘妯″潡鏁版嵁绫�
+```
+
+#### 1. 缃戠粶鎺ュ彛鏁版嵁绫� (bean/net/)
+
+鎵�鏈堿PI鎺ュ彛鐨勮姹傚拰鍝嶅簲鏁版嵁绫婚兘鏀惧湪`net`鐩綍涓嬶細
+
+```kotlin
+// 璇锋眰鏁版嵁绫荤ず渚�
+data class RechargeRequest(
+ val rechargeType: Int,
+ val cardNum: String,
+ val money: String,
+ // ... 鍏朵粬瀛楁
+)
+
+// 鍝嶅簲鏁版嵁绫荤ず渚�
+data class CardCancelResult(
+ val projectNo: Int,
+ val cardNum: String,
+ val orderNo: String
+)
+```
+
+#### 2. 鍗$墖鐩稿叧鏁版嵁绫� (bean/card/)
+
+鎵�鏈夊崱鐗囨搷浣滅浉鍏崇殑鏁版嵁绫绘斁鍦╜card`鐩綍涓嬶細
+
+```kotlin
+data class UserCard(
+ var cardType: String = "",
+ var balance: Int = 0,
+ var userCode: String = "",
+ // ... 鍏朵粬瀛楁
+)
+```
+
+#### 3. 鏁版嵁搴撳疄浣撶被 (bean/db/)
+
+鎵�鏈塕oom鏁版嵁搴撶殑瀹炰綋绫绘斁鍦╜db`鐩綍涓嬶細
+
+```kotlin
+@Entity(tableName = "card_data")
+data class CardData(
+ @PrimaryKey val id: Long,
+ val cardNumber: String,
+ // ... 鍏朵粬瀛楁
+)
+```
+
+### 鏁版嵁绫诲懡鍚嶈鑼�
+
+1. **鎺ュ彛鍝嶅簲鏁版嵁绫�**: 浠Result`缁撳熬
+ - `CardCancelResult` - 閿�鍗℃帴鍙e搷搴�
+ - `RechargeResult` - 鍏呭�兼帴鍙e搷搴�
+ - `WaterPriceResult` - 姘翠环鎺ュ彛鍝嶅簲
+
+2. **鎺ュ彛璇锋眰鏁版嵁绫�**: 浠Request`缁撳熬
+ - `RechargeRequest` - 鍏呭�兼帴鍙h姹�
+ - `SearchUserBeanRequest` - 鐢ㄦ埛鎼滅储璇锋眰
+
+3. **涓氬姟瀹炰綋鏁版嵁绫�**: 浣跨敤涓氬姟鍚嶇О
+ - `UserCard` - 鐢ㄦ埛鍗$墖鏁版嵁
+ - `ClearCard` - 娓呴浂鍗℃暟鎹�
+
+4. **鏁版嵁搴撳疄浣撶被**: 浣跨敤琛ㄥ悕瀵瑰簲鐨勫疄浣撳悕
+ - `CardData` - 鍗$墖鏁版嵁琛�
+ - `ProjectDataBean` - 椤圭洰鏁版嵁琛�
+
+### 鏁版嵁绫诲垱寤烘渶浣冲疄璺�
+
+#### 1. 鏂囦欢澶存敞閲婅鑼�
+
+```kotlin
+package com.dayu.general.bean.net
+
+/**
+ * 閿�鍗$粨鏋滄暟鎹被
+ * @author: zuo
+ * @date: 2025/01/17
+ * @description: 閿�鍗℃帴鍙h繑鍥炴暟鎹�
+ */
+data class CardCancelResult(
+ val projectNo: Int, // 椤圭洰缂栧彿
+ val cardNum: String, // 鍗″彿
+ val orderNo: String // 璁㈠崟鍙�
+)
+```
+
+#### 2. 瀛楁娉ㄩ噴瑙勮寖
+
+- 姣忎釜瀛楁閮藉簲璇ユ坊鍔犺鍐呮敞閲婅鏄庣敤閫�
+- 瀵逛簬鏋氫妇鍊兼垨鐗规畩鍚箟鐨勫瓧娈碉紝璇︾粏璇存槑鍙栧�艰寖鍥�
+
+#### 3. 瀵煎叆浣跨敤瑙勮寖
+
+鍦ˋctivity鎴栧叾浠栫被涓娇鐢ㄦ暟鎹被鏃讹紝搴旇瀵煎叆鍏蜂綋鐨勬暟鎹被锛�
+
+```kotlin
+// 姝g‘鐨勫鍏ユ柟寮�
+import com.dayu.general.bean.net.CardCancelResult
+import com.dayu.general.bean.net.RechargeResult
+
+// 鍦ㄤ唬鐮佷腑浣跨敤
+private fun handleCancelResult(result: CardCancelResult) {
+ // 澶勭悊閿�鍗$粨鏋�
+}
+```
+
+#### 4. 绂佹鍐呰仈瀹氫箟
+
+**绂佹**鍦ˋctivity鎴栧叾浠栫被涓唴鑱斿畾涔夋暟鎹被锛�
+
+```kotlin
+// 鉂� 閿欒鍋氭硶 - 涓嶈鍦ˋctivity涓唴鑱斿畾涔夋暟鎹被
+class CardCancelActivity : BaseNfcActivity() {
+
+ // 鉂� 绂佹杩欐牱鍋�
+ data class CardCancelResult(
+ val projectNo: Int,
+ val cardNum: String,
+ val orderNo: String
+ )
+}
+
+// 鉁� 姝g‘鍋氭硶 - 鍦╞ean鍖呬腑瀹氫箟鏁版嵁绫�
+// 鏂囦欢: generallibrary/src/main/java/com/dayu/general/bean/net/CardCancelResult.kt
+data class CardCancelResult(
+ val projectNo: Int,
+ val cardNum: String,
+ val orderNo: String
+)
+```
+
+### 鏁版嵁绫荤鐞嗕紭鍔�
+
+1. **缁熶竴绠$悊**: 鎵�鏈夋暟鎹被闆嗕腑鍦╞ean鍖呬笅锛屼究浜庢煡鎵惧拰缁存姢
+2. **鑱岃矗鍒嗙**: 涓氬姟閫昏緫鍜屾暟鎹粨鏋勫垎绂伙紝浠g爜缁撴瀯鏇存竻鏅�
+3. **澶嶇敤鎬у己**: 鏁版嵁绫诲彲浠ュ湪澶氫釜妯″潡闂村鐢�
+4. **鏄撲簬閲嶆瀯**: 鏁版嵁缁撴瀯鍙樻洿鏃跺彧闇�淇敼涓�涓枃浠�
+5. **绫诲瀷瀹夊叏**: 缂栬瘧鏈熺被鍨嬫鏌ワ紝鍑忓皯杩愯鏃堕敊璇�
+
+### 杩佺Щ鐜版湁浠g爜
+
+瀵逛簬宸茬粡瀛樺湪鐨勫唴鑱旀暟鎹被锛屽簲璇ユ寜鐓т互涓嬫楠よ繘琛岃縼绉伙細
+
+1. 鍦╞ean鍖呯殑鐩稿簲瀛愮洰褰曚笅鍒涘缓鏁版嵁绫绘枃浠�
+2. 绉诲姩鏁版嵁绫诲畾涔夊埌鏂版枃浠�
+3. 鍦ㄥ師鏂囦欢涓坊鍔犲鍏ヨ鍙�
+4. 娴嬭瘯纭繚鍔熻兘姝e父
+5. 鎻愪氦浠g爜鍙樻洿
+
+閫氳繃缁熶竴鐨勬暟鎹被绠$悊瑙勮寖锛屽彲浠ユ彁楂樹唬鐮佺殑鍙淮鎶ゆ�у拰鍙鎬э紝浣块」鐩粨鏋勬洿鍔犳竻鏅拌鑼冦��
+
## 寮�鍙戠幆澧冭姹�
- Android Studio Arctic Fox鎴栨洿楂樼増鏈�
diff --git a/generallibrary/src/main/java/com/dayu/general/activity/BSCardFragment.kt b/generallibrary/src/main/java/com/dayu/general/activity/BSCardFragment.kt
index 7e4ffc1..09aae1d 100644
--- a/generallibrary/src/main/java/com/dayu/general/activity/BSCardFragment.kt
+++ b/generallibrary/src/main/java/com/dayu/general/activity/BSCardFragment.kt
@@ -54,6 +54,9 @@
binding.homeRedCard.setOnClickListener {
context?.let { CardReadActivity.start(it) }
}
+ binding.homeReverse.setOnClickListener {
+ context?.let { CardCancelActivity.start(it) }
+ }
}
}
diff --git a/generallibrary/src/main/java/com/dayu/general/activity/CardCancelActivity.kt b/generallibrary/src/main/java/com/dayu/general/activity/CardCancelActivity.kt
index 163990f..4d29030 100644
--- a/generallibrary/src/main/java/com/dayu/general/activity/CardCancelActivity.kt
+++ b/generallibrary/src/main/java/com/dayu/general/activity/CardCancelActivity.kt
@@ -8,13 +8,19 @@
import com.dayu.baselibrary.utils.ToastUtil
import com.dayu.baselibrary.view.TipDialog
import com.dayu.baselibrary.view.TitleBar
+import com.dayu.general.BaseApplication
import com.dayu.general.bean.net.CardInfoResult
+import com.dayu.general.bean.net.CardCancelResult
import com.dayu.general.databinding.ActivityCardCancelBinding
import com.dayu.general.net.ApiManager
import com.dayu.general.net.BaseResponse
import com.dayu.general.tool.NfcReadHelper
import com.dayu.general.bean.card.UserCard
import com.dayu.general.tool.CardCommon
+import com.dayu.general.bean.card.ClearCard
+import com.dayu.general.tool.NfcWreatHelper
+import com.dayu.baselibrary.tools.nfc.NFCCallBack
+import com.dayu.general.tool.CardOperationType
/**
* @author: zuo
@@ -25,6 +31,7 @@
private lateinit var binding: ActivityCardCancelBinding
private var cardNumber: String? = null
private var cardInfo: CardInfoResult? = null
+ private var userCard: UserCard? = null
companion object {
/**
@@ -60,8 +67,9 @@
* 閲嶇疆鍒拌鍗$姸鎬�
*/
private fun resetToReadingState() {
- binding.cardReadLL.visibility = android.view.View.VISIBLE
+ binding.scrollReadCard.visibility = android.view.View.VISIBLE
binding.cardInfoContainer.visibility = android.view.View.GONE
+ binding.bottomButtonContainer.visibility = android.view.View.GONE
cardNumber = null
cardInfo = null
binding.etRefundAmount.setText("")
@@ -80,6 +88,7 @@
override fun onNfcBack(intent: Intent?) {
intent?.let {
+ // 澶勭悊姝e父鐨勮鍗℃搷浣�
handleNfcIntent(it)
} ?: run {
showConfirmDialog("NFC鏁版嵁寮傚父锛岃閲嶆柊鍒峰崱") {
@@ -162,7 +171,7 @@
android.util.Log.d("CardCancelActivity", "鍗$墖绫诲瀷: $cardType")
android.util.Log.d("CardCancelActivity", "鍗″唴浣欓: ${userCard.balance}")
android.util.Log.d("CardCancelActivity", "==================")
-
+ this.userCard = userCard
// 鏍规嵁鍗″彿鑾峰彇鍗$墖璇︾粏淇℃伅
getCardInfo(cardNumber, cardType, userCard)
}
@@ -207,9 +216,10 @@
cardType: String,
userCard: UserCard
) {
- // 闅愯棌璇诲崱鎻愮ず锛屾樉绀轰俊鎭尯鍩�
- binding.cardReadLL.visibility = android.view.View.GONE
+ // 闅愯棌璇诲崱鎻愮ず锛屾樉绀轰俊鎭尯鍩熷拰搴曢儴鎸夐挳
+ binding.scrollReadCard.visibility = android.view.View.GONE
binding.cardInfoContainer.visibility = android.view.View.VISIBLE
+ binding.bottomButtonContainer.visibility = android.view.View.VISIBLE
this.cardInfo = cardInfo
binding.tvCardNumber.text = cardNumber
@@ -222,9 +232,7 @@
card.balance.toString()
}
binding.tvCardBalance.text = "${balanceInYuan}鍏�"
-
- // 榛樿閫�娆鹃噾棰濊缃负鍗″唴浣欓
- binding.etRefundAmount.setText(balanceInYuan)
+
// 鍗$墖鐘舵��
binding.tvCardStatus.text = "姝e父"
@@ -280,64 +288,68 @@
val refundAmountStr = binding.etRefundAmount.text.toString().trim()
val remarks = binding.etRemarks.text.toString().trim()
- if (TextUtils.isEmpty(refundAmountStr)) {
- ToastUtil.showToast("璇疯緭鍏ラ��娆鹃噾棰�")
- return
+ // 閫�娆鹃噾棰濆鐞嗭紙闈炲繀濉級
+ val refundAmount = if (refundAmountStr.isEmpty()) {
+ 0.0 // 濡傛灉鏈緭鍏ラ��娆鹃噾棰濓紝榛樿涓�0
+ } else {
+ try {
+ val amount = refundAmountStr.toDouble()
+ if (amount < 0) {
+ ToastUtil.show("閫�娆鹃噾棰濅笉鑳戒负璐熸暟")
+ return
+ }
+ amount
+ } catch (e: NumberFormatException) {
+ ToastUtil.show("璇疯緭鍏ユ湁鏁堢殑閫�娆鹃噾棰�")
+ return
+ }
}
- val refundAmount = try {
- refundAmountStr.toDouble()
- } catch (e: NumberFormatException) {
- ToastUtil.showToast("璇疯緭鍏ユ湁鏁堢殑閫�娆鹃噾棰�")
- return
- }
-
- if (refundAmount < 0) {
- ToastUtil.showToast("閫�娆鹃噾棰濅笉鑳戒负璐熸暟")
- return
- }
-
- if (TextUtils.isEmpty(remarks)) {
- ToastUtil.showToast("璇疯緭鍏ュ娉ㄤ俊鎭�")
- return
+ // 澶囨敞澶勭悊锛堥潪蹇呭~锛�
+ val finalRemarks = if (remarks.isEmpty()) {
+ "鏃犲娉�" // 濡傛灉鏈緭鍏ュ娉紝浣跨敤榛樿鍊�
+ } else {
+ remarks
}
// 纭閿�鍗�
- showConfirmDialog(
- "纭瑕侀攢鍗″悧锛焅n\n鍗″彿锛�${cardNumber}\n閫�娆鹃噾棰濓細${refundAmount}鍏僜n澶囨敞锛�${remarks}\n\n閿�鍗″悗姝ゅ崱灏嗘棤娉曞啀娆′娇鐢紒"
- ) {
- callCancelCardApi(refundAmount, remarks)
+ val confirmMessage = if (refundAmount > 0) {
+ "纭瑕侀攢鍗″悧锛焅n\n鍗″彿锛�${cardNumber}\n閫�娆鹃噾棰濓細${refundAmount}鍏僜n澶囨敞锛�${finalRemarks}\n\n閿�鍗″悗姝ゅ崱灏嗘棤娉曞啀娆′娇鐢紒"
+ } else {
+ "纭瑕侀攢鍗″悧锛焅n\n鍗″彿锛�${cardNumber}\n鏃犻��娆鹃噾棰漒n澶囨敞锛�${finalRemarks}\n\n閿�鍗″悗姝ゅ崱灏嗘棤娉曞啀娆′娇鐢紒"
+ }
+
+ showConfirmDialog(confirmMessage) {
+ callCancelCardApi(refundAmount, finalRemarks)
}
}
/**
* 璋冪敤閿�鍗PI鎺ュ彛
*/
- private fun callCancelCardApi(refundAmount: Double, remarks: String) {
+ private fun callCancelCardApi(refundAmount: Double, finalRemarks: String) {
if (cardNumber.isNullOrBlank()) {
- ToastUtil.showToast("鍗″彿淇℃伅寮傚父锛岃閲嶆柊鍒峰崱")
+ ToastUtil.show("鍗″彿淇℃伅寮傚父锛岃閲嶆柊鍒峰崱")
return
}
val map = mutableMapOf<String, Any>()
- map["cardNum"] = cardNumber!!
- map["refund"] = (refundAmount * 100).toInt() // 杞崲涓哄垎
+ map["cardNum"] = cardInfo?.cardNum.toString()
+ map["refund"] = refundAmount.toString() // 鏀逛负String绫诲瀷锛屽崟浣嶄负鍏�
map["refundType"] = 1838466162264350700L
- map["remarks"] = remarks
- map["operator"] = 2024090516595200300L
+ map["remarks"] = finalRemarks
+ map["operator"] = BaseApplication.userId
ApiManager.getInstance().requestPostLoading(
this,
"terminal/card/termCancel",
- Boolean::class.java,
+ CardCancelResult::class.java,
map,
- object : SubscriberListener<BaseResponse<Boolean>>() {
- override fun onNext(t: BaseResponse<Boolean>) {
- if (t.success && t.content == true) {
- // 閿�鍗℃垚鍔�
- showConfirmDialog("閿�鍗℃垚鍔燂紒\n\n閫�娆鹃噾棰濓細${refundAmount}鍏冨凡閫�杩�") {
- finish()
- }
+ object : SubscriberListener<BaseResponse<CardCancelResult>>() {
+ override fun onNext(t: BaseResponse<CardCancelResult>) {
+ if (t.success && t.content != null) {
+ // 閿�鍗℃垚鍔燂紝璺宠浆鍒板啓鍗$晫闈�
+ startWriteCardActivity(t.content!!, refundAmount, userCard!!)
} else {
// 閿�鍗″け璐�
val errorMsg = if (t.msg.isNullOrBlank()) "閿�鍗″け璐ワ紝璇烽噸璇�" else t.msg
@@ -354,4 +366,27 @@
}
)
}
+
+ /**
+ * 璺宠浆鍒板啓鍗$晫闈㈣繘琛屽崱鍐呭娓呴櫎
+ */
+ private fun startWriteCardActivity(
+ cancelResult: CardCancelResult,
+ refundAmount: Double,
+ userCard: UserCard
+ ) {
+ val intent = Intent(this, NfcWreatActivity::class.java).apply {
+ putExtra("cardAddr", cardNumber)
+ putExtra("operationTypeCode", CardOperationType.CancelCard.code)
+ putExtra("orderNumber", cancelResult.orderNo)
+ putExtra("refundAmount", refundAmount)
+ putExtra("userCard", userCard)
+ // 浼犻�掑綋鍓嶅崱鍐呬綑棰濅俊鎭�
+ cardInfo?.let { info ->
+ putExtra("cardBalance", info.balance ?: 0.0)
+ }
+ }
+ startActivity(intent)
+ finish()
+ }
}
\ No newline at end of file
diff --git a/generallibrary/src/main/java/com/dayu/general/activity/CardWriteSuccessActivity.kt b/generallibrary/src/main/java/com/dayu/general/activity/CardWriteSuccessActivity.kt
index fb58603..73182db 100644
--- a/generallibrary/src/main/java/com/dayu/general/activity/CardWriteSuccessActivity.kt
+++ b/generallibrary/src/main/java/com/dayu/general/activity/CardWriteSuccessActivity.kt
@@ -12,26 +12,42 @@
class CardWriteSuccessActivity : BaseActivity() {
private lateinit var binding: ActivityCardWriteSuccessBinding
+ private var cardNumber: String? = null
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
binding = ActivityCardWriteSuccessBinding.inflate(layoutInflater)
setContentView(binding.root)
+ // 鑾峰彇浼犲叆鐨勫崱鍙�
+ cardNumber = intent.getStringExtra("cardNumber")
+
initView()
}
private fun initView() {
+ // 璁剧疆鏍囬
+ binding.titleBar.setCenterText("閿�鍗℃垚鍔�")
+
+ // 璁剧疆鎴愬姛淇℃伅
+ binding.successTitle.text = "閿�鍗℃垚鍔�"
+
+ // 璁剧疆璇︾粏淇℃伅
+ val message = if (cardNumber.isNullOrBlank()) {
+ "鍗$墖宸叉垚鍔熼攢鍗″苟娓呴櫎鍐呭\n璇ュ崱鐗囧皢鏃犳硶鍐嶆浣跨敤"
+ } else {
+ "鍗$墖宸叉垚鍔熼攢鍗″苟娓呴櫎鍐呭\n鍗″彿锛�$cardNumber\n璇ュ崱鐗囧皢鏃犳硶鍐嶆浣跨敤"
+ }
+ binding.successMessage.text = message
+
// 璁剧疆鐐瑰嚮纭畾鎸夐挳鍚庡叧闂〉闈�
binding.btnConfirm.setOnClickListener {
finish()
}
// 璁剧疆鏍囬鏍忚繑鍥炴寜閽�
- binding.titleBar.setOnClickListener {
+ binding.titleBar.setOnItemclickListner(com.dayu.baselibrary.view.TitleBar.ClickType_LEFT_IMAGE) {
finish()
}
}
-
-
}
\ No newline at end of file
diff --git a/generallibrary/src/main/java/com/dayu/general/activity/NfcWreatActivity.kt b/generallibrary/src/main/java/com/dayu/general/activity/NfcWreatActivity.kt
index ad1a0c3..3bf4fce 100644
--- a/generallibrary/src/main/java/com/dayu/general/activity/NfcWreatActivity.kt
+++ b/generallibrary/src/main/java/com/dayu/general/activity/NfcWreatActivity.kt
@@ -36,6 +36,10 @@
private var rechargeAmount = 0.0
private var bonusAmount = 0.0
+ // 閿�鍗$浉鍏充俊鎭�
+ private var refundAmount = 0.0
+ private var cardBalance = 0.0
+
//璁㈠崟缂栧彿
var orderNumber = ""
private lateinit var userCard: UserCard
@@ -63,6 +67,10 @@
rechargeAmount = intent?.getDoubleExtra("rechargeAmount", 0.0) ?: 0.0
bonusAmount = intent?.getDoubleExtra("bonusAmount", 0.0) ?: 0.0
+ // 鑾峰彇閿�鍗$浉鍏充俊鎭�
+ refundAmount = intent?.getDoubleExtra("refundAmount", 0.0) ?: 0.0
+ cardBalance = intent?.getDoubleExtra("cardBalance", 0.0) ?: 0.0
+
if (intent?.hasExtra("cardFee") == true) {
cardFee = intent?.getIntExtra("cardFee", 0) ?: 0
}
@@ -77,7 +85,27 @@
if (operationTypeCode != -1) {
when (operationType) {
CardOperationType.CleanCard -> {
- binding?.cardData?.text = "娓呴浂鍗″啓鍗�"
+ val textData = StringBuilder()
+
+ // 鍒ゆ柇鏄惁鏉ヨ嚜閿�鍗℃搷浣滐紙鏈夐��娆鹃噾棰濇垨鍗″唴浣欓淇℃伅锛�
+ if (refundAmount > 0 || cardBalance > 0) {
+ textData.append("閿�鍗℃竻闆舵搷浣淺n")
+ textData.append("鍗″湴鍧�锛�$cardAddr\n")
+
+ if (cardBalance > 0) {
+ textData.append("鍗″唴浣欓锛�${String.format("%.2f", cardBalance)}鍏僜n")
+ }
+
+ if (refundAmount > 0) {
+ textData.append("閫�娆鹃噾棰濓細${String.format("%.2f", refundAmount)}鍏�")
+ } else {
+ textData.append("鏃犻��娆鹃噾棰�")
+ }
+ } else {
+ textData.append("娓呴浂鍗″啓鍗�")
+ }
+
+ binding?.cardData?.text = textData.toString()
}
CardOperationType.OpenCard -> {
@@ -126,7 +154,14 @@
binding?.cardData?.text = textData.toString()
}
- CardOperationType.CancelCard -> TODO()
+ CardOperationType.CancelCard -> {
+ var textData = StringBuilder()
+ textData.append("閿�鍗n")
+ textData.append("鍗″唴浣欓锛�" + MornyUtil.changeF2Y(userCard.balance) + "鍏僜n")
+ textData.append("閫�娆鹃噾棰濓細" + refundAmount + "鍏�")
+ binding?.cardData?.text = textData.toString()
+ }
+
CardOperationType.CheckCard -> TODO()
CardOperationType.DeductCard -> TODO()
CardOperationType.ReplaceCard -> TODO()
@@ -151,7 +186,7 @@
// 纭繚Toast鍦ㄤ富绾跨▼涓皟鐢�
runOnUiThread {
if (success) {
- postCardData(cardType, cardAddr)
+ postCardData(cardAddr)
ToastUtil.show("鍐欏崱鎴愬姛!")
} else {
// 澶勭悊鍐欏崱澶辫触鐨勬儏鍐�
@@ -167,7 +202,7 @@
// 纭繚Toast鍦ㄤ富绾跨▼涓皟鐢�
runOnUiThread {
if (flag) {
- postCardData(cardType, cardAddr)
+ postCardData(cardAddr)
} else {
ToastUtil.show("鍐欏崱澶辫触: ${msg ?: "鏈煡閿欒"}")
@@ -184,8 +219,7 @@
// 纭繚Toast鍦ㄤ富绾跨▼涓皟鐢�
runOnUiThread {
if (flag) {
- postCardData(cardType, cardAddr)
- ToastUtil.show("鍏呭�煎啓鍗℃垚鍔�!")
+ postCardData(cardAddr)
} else {
ToastUtil.show("鍏呭�煎啓鍗″け璐�: ${msg ?: "鏈煡閿欒"}")
}
@@ -194,7 +228,23 @@
})
}
- CardOperationType.CancelCard -> TODO()
+ CardOperationType.CancelCard -> {
+ var userCard = UserCard()
+ userCard.cardType = "00";
+ nfcWreatHelper.writeUserDataAsync(userCard, object : NFCCallBack {
+ override fun isSusses(flag: Boolean, msg: String?) {
+ // 纭繚Toast鍦ㄤ富绾跨▼涓皟鐢�
+ runOnUiThread {
+ if (flag) {
+ postCardData(cardAddr)
+ } else {
+ ToastUtil.show("閿�鍗″啓鍗″け璐�: ${msg ?: "鏈煡閿欒"}")
+ }
+ }
+ }
+ })
+ }
+
CardOperationType.CheckCard -> TODO()
CardOperationType.DeductCard -> TODO()
CardOperationType.ReplaceCard -> TODO()
@@ -242,12 +292,8 @@
}
}
- fun postCardData(cardType: String, cardAddr: String) {
- when (cardType) {
- CardCommon.CHECK_CARD -> {
- binding?.cardData?.text = "鍐欑敤鎴峰崱"
- }
- }
+ fun postCardData(cardAddr: String) {
+
val map = mutableMapOf<String, Any>()
if (cardAddr.isNotEmpty()) {
@@ -267,10 +313,7 @@
object : SubscriberListener<BaseResponse<String>>() {
override fun onNext(t: BaseResponse<String>) {
if (t.success) {
-
updateCardWrittenStatus(cardAddr)
-
-
} else {
// 澶勭悊鎼滅储澶辫触鐨勬儏鍐�
ToastUtil.show(t.msg)
diff --git a/generallibrary/src/main/res/layout/activity_card_cancel.xml b/generallibrary/src/main/res/layout/activity_card_cancel.xml
index 31345af..ad95c59 100644
--- a/generallibrary/src/main/res/layout/activity_card_cancel.xml
+++ b/generallibrary/src/main/res/layout/activity_card_cancel.xml
@@ -14,11 +14,14 @@
app:centerText="閿�鍗�"
app:leftImage="@mipmap/icon_back" />
+ <!-- 璇诲崱鎻愮ず鍖哄煙 - 鍏ㄥ睆鏄剧ず -->
<ScrollView
+ android:id="@+id/scroll_read_card"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:layout_below="@+id/titleBar"
- android:fillViewport="true">
+ android:fillViewport="true"
+ android:visibility="visible">
<LinearLayout
android:layout_width="match_parent"
@@ -26,14 +29,12 @@
android:orientation="vertical"
android:padding="16dp">
- <!-- 璇诲崱鎻愮ず鍖哄煙 -->
<LinearLayout
android:id="@+id/card_read_LL"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:gravity="center"
- android:orientation="vertical"
- android:visibility="visible">
+ android:orientation="vertical">
<androidx.cardview.widget.CardView
android:layout_width="match_parent"
@@ -42,26 +43,28 @@
app:cardCornerRadius="8dp"
app:cardElevation="2dp">
- <LinearLayout
+ <RelativeLayout
android:layout_width="match_parent"
android:layout_height="match_parent"
- android:gravity="center"
- android:orientation="vertical"
android:padding="16dp">
<TextView
+ android:id="@+id/tv_title"
android:layout_width="match_parent"
android:layout_height="wrap_content"
- android:layout_marginBottom="16dp"
+ android:layout_marginBottom="100dp"
android:gravity="center"
android:text="閿�鍗℃搷浣�"
+ android:layout_marginTop="20dp"
android:textColor="@color/base_blue_bg"
android:textSize="@dimen/big_text_size"
android:textStyle="bold" />
<TextView
+ android:id="@+id/tv_subtitle"
android:layout_width="match_parent"
android:layout_height="wrap_content"
+ android:layout_below="@+id/tv_title"
android:layout_marginBottom="20dp"
android:gravity="center"
android:text="璇峰皢闇�瑕侀攢鍗$殑鍗$墖璐村湪璁惧涓婅繘琛岃鍙�"
@@ -70,38 +73,59 @@
android:textStyle="bold" />
<ImageView
+ android:id="@+id/iv_nfc"
android:layout_width="120dp"
android:layout_height="120dp"
- android:layout_gravity="center"
+ android:layout_below="@+id/tv_subtitle"
+ android:layout_centerHorizontal="true"
android:layout_marginBottom="20dp"
android:scaleType="fitCenter"
android:src="@mipmap/nfc_write" />
<TextView
+ android:id="@+id/tv_tip"
android:layout_width="match_parent"
android:layout_height="wrap_content"
+ android:layout_below="@+id/iv_nfc"
android:gravity="center"
android:text="璇蜂繚鎸佹墜鎸佹満鍜屽崱鐗囦笉瑕佺Щ鍔�"
android:textColor="#666666"
android:textSize="@dimen/new_card_size" />
- </LinearLayout>
+ </RelativeLayout>
</androidx.cardview.widget.CardView>
</LinearLayout>
- <!-- 鍗$墖淇℃伅鏄剧ず鍖哄煙 -->
+ </LinearLayout>
+ </ScrollView>
+
+ <!-- 鍗$墖淇℃伅鏄剧ず鍖哄煙 - 甯﹀浐瀹氬簳閮ㄦ寜閽� -->
+ <LinearLayout
+ android:id="@+id/card_info_container"
+ android:layout_width="match_parent"
+ android:layout_height="match_parent"
+ android:layout_above="@+id/bottom_button_container"
+ android:layout_below="@+id/titleBar"
+ android:orientation="vertical"
+ android:visibility="gone">
+
+ <ScrollView
+ android:layout_width="match_parent"
+ android:layout_height="0dp"
+ android:layout_weight="1"
+ android:fillViewport="true"
+ android:padding="12dp">
+
<LinearLayout
- android:id="@+id/card_info_container"
android:layout_width="match_parent"
android:layout_height="wrap_content"
- android:orientation="vertical"
- android:visibility="gone">
+ android:orientation="vertical">
- <!-- 鍗″唴鏁版嵁鍖哄煙 -->
+ <!-- 鍗$墖淇℃伅鍖哄煙 -->
<androidx.cardview.widget.CardView
android:layout_width="match_parent"
android:layout_height="wrap_content"
- android:layout_marginBottom="16dp"
+ android:layout_marginBottom="12dp"
app:cardCornerRadius="8dp"
app:cardElevation="2dp">
@@ -109,34 +133,34 @@
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:orientation="vertical"
- android:padding="16dp">
+ android:padding="12dp">
<TextView
android:layout_width="match_parent"
android:layout_height="wrap_content"
- android:layout_marginBottom="12dp"
- android:gravity="center"
+ android:layout_marginBottom="8dp"
+ android:gravity=""
android:text="鍗$墖淇℃伅"
android:textColor="@color/base_blue_bg"
- android:textSize="@dimen/big_text_size"
+ android:textSize="16sp"
android:textStyle="bold" />
<!-- 鎸佸崱浜� -->
<LinearLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
- android:layout_marginBottom="2dp"
+ android:layout_marginBottom="1dp"
android:background="#F8F9FA"
android:gravity="center_vertical"
android:orientation="horizontal"
- android:padding="12dp">
+ android:padding="8dp">
<TextView
- android:layout_width="105dp"
+ android:layout_width="80dp"
android:layout_height="wrap_content"
android:text="鎸佸崱浜猴細"
android:textColor="#333333"
- android:textSize="@dimen/text_size" />
+ android:textSize="14sp" />
<TextView
android:id="@+id/tv_user_name"
@@ -145,25 +169,25 @@
android:layout_weight="1"
android:text="--"
android:textColor="#666666"
- android:textSize="@dimen/text_size" />
+ android:textSize="14sp" />
</LinearLayout>
<!-- 鍗″彿 -->
<LinearLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
- android:layout_marginBottom="2dp"
+ android:layout_marginBottom="1dp"
android:background="#FFFFFF"
android:gravity="center_vertical"
android:orientation="horizontal"
- android:padding="12dp">
+ android:padding="8dp">
<TextView
- android:layout_width="105dp"
+ android:layout_width="80dp"
android:layout_height="wrap_content"
android:text="鍗″湴鍧�锛�"
android:textColor="#333333"
- android:textSize="@dimen/text_size" />
+ android:textSize="14sp" />
<TextView
android:id="@+id/tv_card_number"
@@ -172,25 +196,25 @@
android:layout_weight="1"
android:text="--"
android:textColor="#666666"
- android:textSize="@dimen/text_size" />
+ android:textSize="14sp" />
</LinearLayout>
<!-- 鍗$墖鐘舵�� -->
<LinearLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
- android:layout_marginBottom="2dp"
+ android:layout_marginBottom="1dp"
android:background="#F8F9FA"
android:gravity="center_vertical"
android:orientation="horizontal"
- android:padding="12dp">
+ android:padding="8dp">
<TextView
- android:layout_width="105dp"
+ android:layout_width="80dp"
android:layout_height="wrap_content"
android:text="鍗$墖鐘舵�侊細"
android:textColor="#333333"
- android:textSize="@dimen/text_size" />
+ android:textSize="14sp" />
<TextView
android:id="@+id/tv_card_status"
@@ -199,25 +223,25 @@
android:layout_weight="1"
android:text="姝e父"
android:textColor="#4CAF50"
- android:textSize="@dimen/text_size" />
+ android:textSize="14sp" />
</LinearLayout>
<!-- 鍗″唴浣欓 -->
<LinearLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
- android:layout_marginBottom="2dp"
+ android:layout_marginBottom="1dp"
android:background="#FFFFFF"
android:gravity="center_vertical"
android:orientation="horizontal"
- android:padding="12dp">
+ android:padding="8dp">
<TextView
- android:layout_width="105dp"
+ android:layout_width="80dp"
android:layout_height="wrap_content"
android:text="鍗′綑棰濓細"
android:textColor="#333333"
- android:textSize="@dimen/text_size" />
+ android:textSize="14sp" />
<TextView
android:id="@+id/tv_card_balance"
@@ -226,7 +250,7 @@
android:layout_weight="1"
android:text="0.00鍏�"
android:textColor="#FF6B35"
- android:textSize="@dimen/text_size"
+ android:textSize="14sp"
android:textStyle="bold" />
</LinearLayout>
@@ -234,18 +258,17 @@
<LinearLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
- android:layout_marginBottom="2dp"
android:background="#F8F9FA"
android:gravity="center_vertical"
android:orientation="horizontal"
- android:padding="12dp">
+ android:padding="8dp">
<TextView
- android:layout_width="105dp"
+ android:layout_width="80dp"
android:layout_height="wrap_content"
android:text="鎵嬫満鍙凤細"
android:textColor="#333333"
- android:textSize="@dimen/text_size" />
+ android:textSize="14sp" />
<TextView
android:id="@+id/tv_phone"
@@ -254,7 +277,7 @@
android:layout_weight="1"
android:text="--"
android:textColor="#666666"
- android:textSize="@dimen/text_size" />
+ android:textSize="14sp" />
</LinearLayout>
</LinearLayout>
@@ -264,7 +287,6 @@
<androidx.cardview.widget.CardView
android:layout_width="match_parent"
android:layout_height="wrap_content"
- android:layout_marginBottom="16dp"
app:cardCornerRadius="8dp"
app:cardElevation="2dp">
@@ -272,94 +294,119 @@
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:orientation="vertical"
- android:padding="16dp">
+ android:padding="12dp">
<TextView
android:layout_width="match_parent"
android:layout_height="wrap_content"
- android:layout_marginBottom="16dp"
- android:gravity="center"
+ android:layout_marginBottom="12dp"
+ android:gravity=""
android:text="閿�鍗℃搷浣�"
android:textColor="@color/base_blue_bg"
- android:textSize="@dimen/big_text_size"
+ android:textSize="16sp"
android:textStyle="bold" />
- <!-- 閫�娆鹃噾棰濊緭鍏� -->
+ <!-- 閫�娆鹃噾棰濆拰澶囨敞骞舵帓鏄剧ず -->
<LinearLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
- android:layout_marginBottom="16dp"
android:orientation="vertical">
- <TextView
- android:layout_width="wrap_content"
- android:layout_height="wrap_content"
- android:layout_marginBottom="8dp"
- android:text="閫�娆鹃噾棰濓紙鍏冿級:"
- android:textColor="#333333"
- android:textSize="@dimen/text_size"
- android:textStyle="bold" />
-
- <EditText
- android:id="@+id/et_refund_amount"
+ <!-- 閫�娆鹃噾棰濊緭鍏� -->
+ <LinearLayout
android:layout_width="match_parent"
- android:layout_height="48dp"
- android:background="@drawable/edit_text_bg"
- android:hint="璇疯緭鍏ラ��娆鹃噾棰�"
- android:inputType="numberDecimal"
- android:padding="12dp"
- android:textColor="#333333"
- android:textColorHint="#999999"
- android:textSize="@dimen/text_size" />
- </LinearLayout>
-
- <!-- 澶囨敞杈撳叆 -->
- <LinearLayout
- android:layout_width="match_parent"
- android:layout_height="wrap_content"
- android:layout_marginBottom="24dp"
- android:orientation="vertical">
-
- <TextView
- android:layout_width="wrap_content"
android:layout_height="wrap_content"
- android:layout_marginBottom="8dp"
- android:text="澶囨敞:"
- android:textColor="#333333"
- android:textSize="@dimen/text_size"
- android:textStyle="bold" />
+ android:layout_marginEnd="6dp"
+ android:layout_weight="1"
+ android:orientation="vertical">
- <EditText
- android:id="@+id/et_remarks"
+ <TextView
+ android:layout_width="wrap_content"
+ android:layout_height="wrap_content"
+ android:layout_marginBottom="6dp"
+ android:text="閫�娆鹃噾棰濓紙鍏冿級:"
+ android:textColor="#333333"
+ android:textSize="14sp"
+ android:textStyle="bold" />
+
+ <EditText
+ android:id="@+id/et_refund_amount"
+ android:layout_width="match_parent"
+ android:layout_height="40dp"
+ android:layout_marginTop="5dp"
+ android:background="@drawable/edit_text_bg"
+ android:hint="璇疯緭鍏ラ��娆鹃噾棰�"
+ android:inputType="numberDecimal"
+ android:padding="8dp"
+ android:textColor="#333333"
+ android:textColorHint="#999999"
+ android:textSize="14sp" />
+ </LinearLayout>
+
+ <!-- 澶囨敞杈撳叆 -->
+ <LinearLayout
android:layout_width="match_parent"
- android:layout_height="80dp"
- android:background="@drawable/edit_text_bg"
- android:gravity="top|start"
- android:hint="璇疯緭鍏ラ攢鍗″娉ㄤ俊鎭�"
- android:inputType="textMultiLine"
- android:padding="12dp"
- android:textColor="#333333"
- android:textColorHint="#999999"
- android:textSize="@dimen/text_size" />
- </LinearLayout>
+ android:layout_height="wrap_content"
+ android:layout_marginTop="5dp"
+ android:layout_weight="1"
+ android:orientation="vertical">
- <!-- 閿�鍗℃寜閽� -->
- <Button
- android:id="@+id/btn_cancel_card"
- android:layout_width="match_parent"
- android:layout_height="48dp"
- android:background="@drawable/button_red_bg"
- android:text="纭閿�鍗�"
- android:textColor="#FFFFFF"
- android:textSize="@dimen/big_text_size"
- android:textStyle="bold" />
+ <TextView
+ android:layout_width="wrap_content"
+ android:layout_height="wrap_content"
+ android:layout_marginBottom="6dp"
+ android:text="澶囨敞:"
+ android:textColor="#333333"
+ android:textSize="14sp"
+ android:textStyle="bold" />
+
+ <EditText
+ android:id="@+id/et_remarks"
+ android:layout_width="match_parent"
+ android:layout_height="80dp"
+ android:layout_marginTop="5dp"
+ android:background="@drawable/edit_text_bg"
+ android:hint="璇疯緭鍏ラ攢鍗″娉�"
+ android:inputType="text"
+ android:minLines="2"
+ android:padding="8dp"
+ android:textColor="#333333"
+ android:textColorHint="#999999"
+ android:textSize="14sp" />
+ </LinearLayout>
+
+ </LinearLayout>
</LinearLayout>
</androidx.cardview.widget.CardView>
</LinearLayout>
+ </ScrollView>
+ </LinearLayout>
- </LinearLayout>
- </ScrollView>
+ <!-- 搴曢儴鎸夐挳鍖哄煙 -->
+ <LinearLayout
+ android:id="@+id/bottom_button_container"
+ android:layout_width="match_parent"
+ android:layout_height="wrap_content"
+ android:layout_alignParentBottom="true"
+ android:background="#FFFFFF"
+ android:elevation="4dp"
+ android:orientation="vertical"
+ android:padding="16dp"
+ android:visibility="gone">
+
+ <!-- 閿�鍗℃寜閽� -->
+ <Button
+ android:id="@+id/btn_cancel_card"
+ android:layout_width="match_parent"
+ android:layout_height="48dp"
+ android:background="@drawable/button_red_bg"
+ android:text="纭閿�鍗�"
+ android:textColor="#FFFFFF"
+ android:textSize="@dimen/big_text_size"
+ android:textStyle="bold" />
+
+ </LinearLayout>
</RelativeLayout>
\ No newline at end of file
--
Gitblit v1.8.0