From 899cb6ce779b24a659ec3515dd3fb1cd1afef7d2 Mon Sep 17 00:00:00 2001 From: zuojincheng <lf_zuo@163.com> Date: 星期二, 24 六月 2025 14:02:46 +0800 Subject: [PATCH] feat(card): 增加区域表号卡制作功能 --- generallibrary/src/main/java/com/dayu/general/model/CardInfoModel.kt | 6 + generallibrary/src/main/res/layout/activity_manager_read.xml | 127 ++++++++++++++++---- baselibrary/src/main/java/com/dayu/baselibrary/tools/nfc/NativeNfcReadHelper.java | 2 app/src/main/res/layout/activity_login.xml | 2 generallibrary/src/main/java/com/dayu/general/activity/ManagerReadActivity.kt | 76 ++++++++++++ generallibrary/src/main/res/layout/activity_card_replace.xml | 6 generallibrary/src/main/java/com/dayu/general/activity/ManageListActivity.kt | 37 ++++- generallibrary/src/main/java/com/dayu/general/activity/NfcWreatActivity.kt | 53 ++++++-- generallibrary/src/main/java/com/dayu/general/tool/CardOperationType.kt | 4 9 files changed, 255 insertions(+), 58 deletions(-) diff --git a/app/src/main/res/layout/activity_login.xml b/app/src/main/res/layout/activity_login.xml index 4a637d3..5972b35 100644 --- a/app/src/main/res/layout/activity_login.xml +++ b/app/src/main/res/layout/activity_login.xml @@ -45,7 +45,7 @@ android:hint="璇疯緭鍏ヨ处鍙�" android:maxLines="1" android:singleLine="true" - android:text="15802220723" /> + android:text="17600123786" /> </LinearLayout> <LinearLayout android:layout_width="match_parent" diff --git a/baselibrary/src/main/java/com/dayu/baselibrary/tools/nfc/NativeNfcReadHelper.java b/baselibrary/src/main/java/com/dayu/baselibrary/tools/nfc/NativeNfcReadHelper.java index 93ac8c3..faf7efe 100644 --- a/baselibrary/src/main/java/com/dayu/baselibrary/tools/nfc/NativeNfcReadHelper.java +++ b/baselibrary/src/main/java/com/dayu/baselibrary/tools/nfc/NativeNfcReadHelper.java @@ -429,6 +429,8 @@ Log.i("NFCWreatActivity", "hex===" + hex); return hex.toUpperCase(); } + }else { + return BaseCommon.CARD_TYPE_ERROR2; } } catch (IOException e) { diff --git a/generallibrary/src/main/java/com/dayu/general/activity/ManageListActivity.kt b/generallibrary/src/main/java/com/dayu/general/activity/ManageListActivity.kt index 33198ef..1663bd6 100644 --- a/generallibrary/src/main/java/com/dayu/general/activity/ManageListActivity.kt +++ b/generallibrary/src/main/java/com/dayu/general/activity/ManageListActivity.kt @@ -19,18 +19,39 @@ fun initView() { binding?.titleBar?.setOnItemclickListner(ClickType_LEFT_IMAGE) { this.finish() } + + // 鍖哄煙琛ㄥ彿鍗$偣鍑讳簨浠� + binding?.tvAreaCard?.setOnClickListener { + var intent = Intent(this, ManagerReadActivity::class.java).apply { + putExtra("cardType", CardCommon.REGION_CARD) + putExtra("operationTypeCode", CardOperationType.RegionCard.code) + } + startActivity(intent) + } + + // 妫�鏌ュ崱鐐瑰嚮浜嬩欢 + binding?.tvCheckCard?.setOnClickListener { + var intent = Intent(this, ManagerReadActivity::class.java).apply { + putExtra("cardType", CardCommon.CHECK_CARD) + putExtra("operationTypeCode", CardOperationType.CheckCard.code) + } + startActivity(intent) + } + + // 璋冭瘯鍗$偣鍑讳簨浠� + binding?.tvDebugCard?.setOnClickListener { + var intent = Intent(this, ManagerReadActivity::class.java).apply { + putExtra("cardType", CardCommon.DEBUG_CARD) + putExtra("operationTypeCode", CardOperationType.DebugCard.code) + } + startActivity(intent) + } + + // 娓呴浂鍗$偣鍑讳簨浠� binding?.tvCleanCard?.setOnClickListener { var intent = Intent(this, ManagerReadActivity::class.java).apply { putExtra("cardType", CardCommon.CLEAN_CARD_TYPE) putExtra("operationTypeCode", CardOperationType.CleanCard.code) - } - - startActivity(intent) - } - binding?.tvCheckCard?.setOnClickListener { - var intent = Intent(this, ManagerReadActivity::class.java).apply { - putExtra("operationTypeCode", CardCommon.CHECK_CARD) - putExtra("operationTypeCode", CardOperationType.CheckCard.code) } startActivity(intent) } diff --git a/generallibrary/src/main/java/com/dayu/general/activity/ManagerReadActivity.kt b/generallibrary/src/main/java/com/dayu/general/activity/ManagerReadActivity.kt index 1c218d7..a90feb8 100644 --- a/generallibrary/src/main/java/com/dayu/general/activity/ManagerReadActivity.kt +++ b/generallibrary/src/main/java/com/dayu/general/activity/ManagerReadActivity.kt @@ -2,6 +2,8 @@ import android.content.Intent import android.os.Bundle +import android.text.Editable +import android.text.TextWatcher import android.view.View import androidx.databinding.DataBindingUtil import com.dayu.baselibrary.net.subscribers.SubscriberListener @@ -13,6 +15,7 @@ import com.dayu.general.model.CardInfoModel import com.dayu.general.net.ApiManager import com.dayu.general.net.BaseResponse +import com.dayu.general.tool.CardCommon import com.dayu.general.tool.NfcReadHelper class ManagerReadActivity : BaseNfcActivity() { @@ -37,15 +40,64 @@ } private fun initView() { - binding.titleBar.setCenterText("璇诲崱") + // 鏍规嵁鍗$被鍨嬭缃爣棰� + when (cardType) { + CardCommon.REGION_CARD -> binding.titleBar.setCenterText("鍒朵綔鍖哄煙琛ㄥ彿鍗�") + CardCommon.CHECK_CARD -> binding.titleBar.setCenterText("鍒朵綔妫�鏌ュ崱") + CardCommon.DEBUG_CARD -> binding.titleBar.setCenterText("鍒朵綔璋冭瘯鍗�") + CardCommon.CLEAN_CARD_TYPE -> binding.titleBar.setCenterText("鍒朵綔娓呴浂鍗�") + else -> binding.titleBar.setCenterText("璇诲崱") + } + binding.titleBar.setOnItemclickListner(ClickType_LEFT_IMAGE) { this.finish() } + + // 鏍规嵁鍗$被鍨嬭缃緭鍏ユ鍙鎬� + when (cardType) { + CardCommon.REGION_CARD -> { + // 鍖哄煙琛ㄥ彿鍗★細鏄剧ず鍖哄煙鍙疯緭鍏ユ + binding.regionNumberLayout.visibility = View.VISIBLE + // 涓哄尯鍩熷彿杈撳叆妗嗘坊鍔犺緭鍏ラ獙璇� + binding.regionNumberEt.addTextChangedListener(object : TextWatcher { + override fun beforeTextChanged(s: CharSequence?, start: Int, count: Int, after: Int) {} + override fun onTextChanged(s: CharSequence?, start: Int, before: Int, count: Int) {} + override fun afterTextChanged(s: Editable?) { + val text = s.toString() + if (text.length > 12) { + binding.regionNumberEt.setText(text.substring(0, 12)) + binding.regionNumberEt.setSelection(12) + } + } + }) + } + CardCommon.CHECK_CARD, + CardCommon.DEBUG_CARD, + CardCommon.CLEAN_CARD_TYPE -> { + // 妫�鏌ュ崱銆佽皟璇曞崱銆佹竻闆跺崱锛氶殣钘忓尯鍩熷彿杈撳叆妗嗭紝鍙樉绀哄崱鍦板潃鍜屽娉� + binding.regionNumberLayout.visibility = View.GONE + } + else -> { + // 鍏朵粬鍗$被鍨嬶細闅愯棌鍖哄煙鍙疯緭鍏ユ + binding.regionNumberLayout.visibility = View.GONE + } + } + binding.btnNext.setOnClickListener { if (viewModel.cardNumber.value.isNullOrEmpty()) { ToastUtil.show("璇峰厛璇诲彇鍗″彿") + } else if (cardType == CardCommon.REGION_CARD) { + // 鍖哄煙琛ㄥ彿鍗¢渶瑕侀獙璇佸尯鍩熷彿 + val regionNumber = viewModel.regionNumber.value + if (regionNumber.isNullOrEmpty()) { + ToastUtil.show("璇疯緭鍏ュ尯鍩熷彿") + } else if (regionNumber.length != 12) { + ToastUtil.show("鍖哄煙鍙峰繀椤讳负12浣嶆暟瀛�") + } else { + postCardData(cardType, viewModel.cardNumber.value!!, getRemark(), regionNumber) + } } else { + // 鍏朵粬鍗$被鍨嬶紙鍖呮嫭璋冭瘯鍗°�佹鏌ュ崱銆佹竻闆跺崱锛変笉闇�瑕佸尯鍩熷彿 postCardData(cardType, viewModel.cardNumber.value!!, getRemark()) } - } } @@ -71,7 +123,7 @@ if (cardNumber.isNotEmpty() && !cardNumber.contains(BaseCommon.CARD_TYPE_ERROR2)) { binding.btnNext.visibility = View.VISIBLE binding.dataLayout.visibility = View.VISIBLE - binding.rechargeReadLL.visibility = View.GONE + binding.scrollReadCard.visibility = View.GONE setCardNumber(cardNumber) } else if (cardNumber.contains(BaseCommon.CARD_TYPE_ERROR2)) { ToastUtil.show("褰撳墠鍗″瘑鐮侀敊璇紝涓嶆槸鏈叕鍙稿崱") @@ -91,9 +143,16 @@ /** - * 鎻愪氦鏁版嵁 + * 鎻愪氦鏁版嵁 - 涓嶅甫鍖哄煙鍙风殑鐗堟湰 */ fun postCardData(cardType: String, cardAddr: String, remark: String) { + postCardData(cardType, cardAddr, remark, null) +} + +/** + * 鎻愪氦鏁版嵁 - 甯﹀尯鍩熷彿鐨勭増鏈� + */ +fun postCardData(cardType: String, cardAddr: String, remark: String, regionNumber: String?) { val map = mutableMapOf<String, Any>() @@ -108,6 +167,12 @@ if (remark.isNotEmpty()) { map["remarks"] = remark } + + // 濡傛灉鏄尯鍩熻〃鍙峰崱骞朵笖鏈夊尯鍩熷彿锛屾坊鍔犲埌璇锋眰鍙傛暟涓� + if (cardType == CardCommon.REGION_CARD && !regionNumber.isNullOrEmpty()) { + map["regionNumber"] = regionNumber + } + // 浣跨敤姝g‘鐨勭被鍨嬪弬鏁� ApiManager.getInstance().requestPostLoading( this, @@ -121,6 +186,9 @@ putExtra("cardAddr", cardAddr) putExtra("orderId", t.content) putExtra("cardType", cardType) + if (cardType == CardCommon.REGION_CARD && !regionNumber.isNullOrEmpty()) { + putExtra("regionNumber", regionNumber) + } } this@ManagerReadActivity.finish() startActivity(intent) 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 1ccb366..b8bd087 100644 --- a/generallibrary/src/main/java/com/dayu/general/activity/NfcWreatActivity.kt +++ b/generallibrary/src/main/java/com/dayu/general/activity/NfcWreatActivity.kt @@ -206,7 +206,24 @@ binding?.cardData?.text = textData.toString() } - CardOperationType.CheckCard -> TODO() + CardOperationType.CheckCard -> { + var textData = StringBuilder() + textData.append("妫�鏌ュ崱鍒朵綔") + binding?.cardData?.text = textData.toString() + } + + CardOperationType.RegionCard -> { + var textData = StringBuilder() + textData.append("鍖哄煙琛ㄥ彿鍗″埗浣�") + binding?.cardData?.text = textData.toString() + } + + CardOperationType.DebugCard -> { + var textData = StringBuilder() + textData.append("璋冭瘯鍗″埗浣�") + binding?.cardData?.text = textData.toString() + } + null -> TODO() } } @@ -223,19 +240,8 @@ val nfcWreatHelper = NfcWreatHelper.getInstance(intent, this) when (operationType) { CardOperationType.CleanCard -> { - var clearCard = ClearCard() - nfcWreatHelper.writeData(clearCard.getZeroBytes(), 7, 0) { success, message -> - // 纭繚Toast鍦ㄤ富绾跨▼涓皟鐢� - runOnUiThread { - if (success) { - postCardData(cardAddr) - ToastUtil.show("鍐欏崱鎴愬姛!") - } else { - // 澶勭悊鍐欏崱澶辫触鐨勬儏鍐� - ToastUtil.show(message) - } - } - } + + } CardOperationType.OpenCard -> { @@ -332,7 +338,24 @@ }) } - CardOperationType.CheckCard -> TODO() + CardOperationType.CheckCard -> { + // 妫�鏌ュ崱鍐欏崱閫昏緫 + ToastUtil.show("妫�鏌ュ崱鍐欏崱鎴愬姛!") + postCardData(cardAddr) + } + + CardOperationType.RegionCard -> { + // 鍖哄煙琛ㄥ彿鍗″啓鍗¢�昏緫 + ToastUtil.show("鍖哄煙琛ㄥ彿鍗″啓鍗℃垚鍔�!") + postCardData(cardAddr) + } + + CardOperationType.DebugCard -> { + // 璋冭瘯鍗″啓鍗¢�昏緫 + ToastUtil.show("璋冭瘯鍗″啓鍗℃垚鍔�!") + postCardData(cardAddr) + } + null -> TODO() } } else { diff --git a/generallibrary/src/main/java/com/dayu/general/model/CardInfoModel.kt b/generallibrary/src/main/java/com/dayu/general/model/CardInfoModel.kt index 8a0afb2..f089095 100644 --- a/generallibrary/src/main/java/com/dayu/general/model/CardInfoModel.kt +++ b/generallibrary/src/main/java/com/dayu/general/model/CardInfoModel.kt @@ -6,10 +6,12 @@ class CardInfoModel : ViewModel() { val cardNumber = MutableLiveData<String>() val remark = MutableLiveData<String>() + val regionNumber = MutableLiveData<String>() init { cardNumber.value = "" remark.value = "" + regionNumber.value = "" } fun setCardNumber(number: String) { @@ -19,4 +21,8 @@ fun setRemark(remarkText: String) { remark.value = remarkText } + + fun setRegionNumber(regionNum: String) { + regionNumber.value = regionNum + } } \ No newline at end of file diff --git a/generallibrary/src/main/java/com/dayu/general/tool/CardOperationType.kt b/generallibrary/src/main/java/com/dayu/general/tool/CardOperationType.kt index efc0c1e..63525a7 100644 --- a/generallibrary/src/main/java/com/dayu/general/tool/CardOperationType.kt +++ b/generallibrary/src/main/java/com/dayu/general/tool/CardOperationType.kt @@ -13,6 +13,8 @@ object CleanCard : CardOperationType(6, "娓呴浂鍗�") object CheckCard : CardOperationType(7, "妫�鏌ュ崱") object ReturnCard : CardOperationType(8, "杩旇繕") + object RegionCard : CardOperationType(9, "鍖哄煙琛ㄥ彿鍗�") + object DebugCard : CardOperationType(10, "璋冭瘯鍗�") companion object { fun fromCode(code: Int): CardOperationType? { @@ -25,6 +27,8 @@ 6 -> CleanCard 7 -> CheckCard 8 -> ReturnCard + 9 -> RegionCard + 10 -> DebugCard else -> null } } diff --git a/generallibrary/src/main/res/layout/activity_card_replace.xml b/generallibrary/src/main/res/layout/activity_card_replace.xml index 10741cf..25c864b 100644 --- a/generallibrary/src/main/res/layout/activity_card_replace.xml +++ b/generallibrary/src/main/res/layout/activity_card_replace.xml @@ -21,7 +21,7 @@ android:layout_height="match_parent" android:layout_below="@+id/titleBar" android:fillViewport="true" - android:visibility="gone"> + android:visibility="visible"> <LinearLayout android:layout_width="match_parent" @@ -107,7 +107,7 @@ android:layout_above="@+id/bottom_button_container" android:layout_below="@+id/titleBar" android:orientation="vertical" - android:visibility="visible"> + android:visibility="gone"> <ScrollView android:layout_width="match_parent" @@ -367,7 +367,7 @@ android:elevation="4dp" android:orientation="vertical" android:padding="16dp" - android:visibility="visible"> + android:visibility="gone"> <!-- 鏀粯鏂瑰紡閫夋嫨鍖哄煙 --> <LinearLayout diff --git a/generallibrary/src/main/res/layout/activity_manager_read.xml b/generallibrary/src/main/res/layout/activity_manager_read.xml index 3ecb3e6..a202f03 100644 --- a/generallibrary/src/main/res/layout/activity_manager_read.xml +++ b/generallibrary/src/main/res/layout/activity_manager_read.xml @@ -21,6 +21,7 @@ android:background="@color/title_bar_bg" android:elevation="4dp" app:centerText="鍒朵綔绠$悊鍗�" + app:leftImage="@mipmap/icon_back" tools:ignore="MissingConstraints" /> <LinearLayout @@ -58,6 +59,34 @@ android:textSize="16sp" /> </LinearLayout> + <!-- 鍖哄煙鍙疯緭鍏ユ - 浠呭湪鍖哄煙琛ㄥ彿鍗℃椂鏄剧ず --> + <LinearLayout + android:id="@+id/region_number_layout" + android:layout_width="match_parent" + android:layout_height="wrap_content" + android:orientation="horizontal" + android:padding="16dp" + android:visibility="gone"> + + <TextView + android:layout_width="wrap_content" + android:layout_height="wrap_content" + android:text="鍖哄煙鍙凤細" + android:textColor="#333333" + android:textSize="16sp" /> + + <EditText + android:id="@+id/region_number_et" + android:layout_width="match_parent" + android:layout_height="wrap_content" + android:background="@null" + android:hint="璇疯緭鍏�12浣嶆暟瀛楀尯鍩熷彿" + android:inputType="number" + android:maxLength="12" + android:text="@={viewModel.regionNumber}" + android:textSize="16sp" /> + </LinearLayout> + <LinearLayout android:layout_width="match_parent" android:layout_height="wrap_content" @@ -86,47 +115,91 @@ </LinearLayout> - <LinearLayout - android:id="@+id/recharge_read_LL" + + <!-- 璇诲崱鎻愮ず鍖哄煙 - 鍏ㄥ睆鏄剧ず --> + <ScrollView + android:id="@+id/scroll_read_card" android:layout_width="match_parent" android:layout_height="match_parent" - android:layout_below="@+id/data_layout" - android:orientation="vertical" + android:layout_below="@+id/titleBar" + android:fillViewport="true" android:visibility="visible"> - <androidx.cardview.widget.CardView + <LinearLayout android:layout_width="match_parent" - android:layout_height="wrap_content" - android:layout_margin="16dp" - app:cardCornerRadius="8dp" - app:cardElevation="2dp"> + android:layout_height="match_parent" + android:orientation="vertical" + android:padding="16dp"> <LinearLayout + android:id="@+id/card_read_LL" android:layout_width="match_parent" - android:layout_height="wrap_content" - android:orientation="vertical" - android:padding="16dp"> + android:layout_height="match_parent" + android:gravity="center" + android:orientation="vertical"> - <TextView + <androidx.cardview.widget.CardView android:layout_width="match_parent" - android:layout_height="wrap_content" + android:layout_height="match_parent" android:layout_marginBottom="16dp" - android:gravity="center" - android:text="璇峰皢鍗¤创鍦ㄨ澶囦笂杩涜璇诲崱" - android:textColor="#333333" - android:textSize="@dimen/text_size" - android:textStyle="bold" /> + app:cardCornerRadius="8dp" + app:cardElevation="2dp"> - <ImageView - android:layout_width="200dp" - android:layout_height="200dp" - android:layout_gravity="center" - android:scaleType="fitCenter" - android:src="@mipmap/nfc_write" /> + <RelativeLayout + android:layout_width="match_parent" + android:layout_height="match_parent" + android:padding="16dp"> + + <TextView + android:id="@+id/tv_title" + android:layout_width="match_parent" + android:layout_height="wrap_content" + 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="璇峰皢鏂板崱璐村湪璁惧涓婅繘琛岃鍙�" + android:textColor="#333333" + android:textSize="@dimen/text_size" + android:textStyle="bold" /> + + <ImageView + android:id="@+id/iv_nfc" + android:layout_width="120dp" + android:layout_height="120dp" + 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" /> + + </RelativeLayout> + </androidx.cardview.widget.CardView> </LinearLayout> - </androidx.cardview.widget.CardView> - </LinearLayout> + </LinearLayout> + </ScrollView> <TextView android:id="@+id/btn_next" android:layout_width="match_parent" -- Gitblit v1.8.0