From 87e5604ad04c0b7aaacf3d52bae85e62d308cb6d Mon Sep 17 00:00:00 2001 From: zuoxiao <lf_zuo@163.com> Date: 星期四, 26 六月 2025 16:41:02 +0800 Subject: [PATCH] refactor(generallibrary):重构开卡成功界面并移除未使用的开卡界面 --- /dev/null | 600 -------------------------- generallibrary/src/main/java/com/dayu/general/activity/SearchUserListActivity.kt | 2 generallibrary/src/main/java/com/dayu/general/bean/net/NewCardInfo.kt | 6 generallibrary/src/main/AndroidManifest.xml | 13 generallibrary/src/main/java/com/dayu/general/activity/CardWriteSuccessActivity.kt | 114 +++- generallibrary/src/main/java/com/dayu/general/activity/NewCardActivity.kt | 598 +++++++++++++++++++++++++ generallibrary/src/main/java/com/dayu/general/activity/NfcWreatActivity.kt | 8 7 files changed, 682 insertions(+), 659 deletions(-) diff --git a/generallibrary/src/main/AndroidManifest.xml b/generallibrary/src/main/AndroidManifest.xml index 24cbef4..b9de4d7 100644 --- a/generallibrary/src/main/AndroidManifest.xml +++ b/generallibrary/src/main/AndroidManifest.xml @@ -12,10 +12,6 @@ android:name="android.hardware.nfc" android:required="true" /> - <!-- <intent-filter>--> - <!-- <action android:name="android.nfc.action.TAG_DISCOVERED" />--> - <!-- <data android:mimeType="text/plain" />--> - <!-- </intent-filter>--> <!--鐢ㄤ簬杩涜缃戠粶瀹氫綅--> <uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION"></uses-permission> <!--鐢ㄤ簬璁块棶GPS瀹氫綅--> @@ -39,7 +35,7 @@ android:supportsRtl="true" android:theme="@style/AppTheme"> - <activity android:name="com.dayu.general.activity.NewCardActivity" /> + <activity android:name="com.dayu.general.activity.ManageListActivity" /> <activity android:name="com.dayu.general.activity.SearchUserListActivity" /> <activity android:name="com.dayu.general.activity.RechargeDetailActivity" /> @@ -76,7 +72,7 @@ </activity> <activity android:name=".activity.SearchCardListActivity" /> <activity - android:name=".activity.NewCard2Activity" + android:name=".activity.NewCardActivity" android:exported="false" android:launchMode="singleTop"> <intent-filter> @@ -138,8 +134,9 @@ <activity android:name=".activity.CardUnlossActivity" android:exported="false" - android:launchMode="singleTop"/> - <activity android:name=".activity.CardReplaceActivity" + android:launchMode="singleTop" /> + <activity + android:name=".activity.CardReplaceActivity" android:exported="false" android:launchMode="singleTop"> <intent-filter> 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 6872853..8af188e 100644 --- a/generallibrary/src/main/java/com/dayu/general/activity/CardWriteSuccessActivity.kt +++ b/generallibrary/src/main/java/com/dayu/general/activity/CardWriteSuccessActivity.kt @@ -7,6 +7,7 @@ import com.dayu.general.BaseApplication import com.dayu.general.bean.card.UserCard import com.dayu.general.bean.net.CardInfoResult +import com.dayu.general.bean.net.ClientInfo import com.dayu.general.databinding.ActivityCardWriteSuccessBinding import com.dayu.general.tool.CardOperationType @@ -24,6 +25,7 @@ private var userCard: UserCard? = null private var orderNumber: String? = null private var cardInfo: CardInfoResult? = null + private var clientInfo: ClientInfo? = null // 鍏呭�肩浉鍏冲弬鏁� private var rechargeAmount = 0.0 @@ -69,6 +71,10 @@ if (intent.hasExtra("cardInfo")) { cardInfo = intent.getSerializableExtra("cardInfo") as CardInfoResult + } + + if (intent.hasExtra("clientInfo")) { + clientInfo = intent.getSerializableExtra("clientInfo") as ClientInfo } initView() @@ -186,12 +192,38 @@ CardOperationType.OpenCard -> { binding.titleBar.setCenterText("寮�鍗℃垚鍔�") binding.successTitle.text = "寮�鍗℃垚鍔�" + val messageBuilder = StringBuilder() + messageBuilder.append("寮�鍗℃搷浣滃凡鎴愬姛瀹屾垚\n") + + // 鏄剧ず鐢ㄦ埛濮撳悕 + val userName = getUserName() + if (!userName.isNullOrEmpty()) { + messageBuilder.append("鐢ㄦ埛濮撳悕锛�$userName\n") + } + + // 鏄剧ず鍗″湴鍧� + val cardAddress = cardNumber ?: cardAddr + if (!cardAddress.isNullOrEmpty()) { + messageBuilder.append("鍗″湴鍧�锛�$cardAddress\n") + } + + // 鏄剧ず宸ユ湰璐� + if (cardFee > 0) { + messageBuilder.append("宸ユ湰璐癸細${cardFee}鍏僜n") + } + + // 鏄剧ず鍏呭�奸噾棰� if (rechargeAmount > 0) { messageBuilder.append("鍏呭�奸噾棰濓細${String.format("%.2f", rechargeAmount)}鍏僜n") } + + // 鏄剧ず鍗″唴浣欓 messageBuilder.append("鍗″唴浣欓锛�${MornyUtil.changeF2Y(userCard?.balance ?: 0)}鍏�") - // 鍏呭�兼垚鍔熷悗鑷姩鎵撳嵃 + + binding.successMessage.text = messageBuilder.toString() + + // 寮�鍗℃垚鍔熷悗鑷姩鎵撳嵃 userCard?.let { card -> doPrint(card) } @@ -230,6 +262,14 @@ } /** + * 鑾峰彇鐢ㄦ埛濮撳悕锛屼紭鍏堜粠ClientInfo鑾峰彇锛屽鏋滄病鏈夊啀浠嶤ardInfo鑾峰彇 + * @return 鐢ㄦ埛濮撳悕 + */ + private fun getUserName(): String? { + return clientInfo?.name ?: cardInfo?.userName + } + + /** * 鎵撳嵃鍏呭�兼垚鍔熶俊鎭埌鎵撳嵃鏈� * @param userCard 鐢ㄦ埛鍗$墖淇℃伅锛屽寘鍚綑棰濈瓑淇℃伅 * 鍑芥暟浼氭瀯寤烘墦鍗版暟鎹苟璋冪敤鎵撳嵃閫傞厤鍣ㄨ繘琛屾墦鍗� @@ -249,11 +289,10 @@ data.add(" 鍏呭�煎嚟璇�") data.add("*****************************") - // 娣诲姞鐢ㄦ埛鍚嶏紙浠嶤ardInfo涓幏鍙栵級 - cardInfo?.userName?.let { userName -> - if (userName.isNotEmpty()) { - data.add("鐢ㄦ埛濮撳悕锛�$userName") - } + // 娣诲姞鐢ㄦ埛鍚嶏紙浼樺厛浠嶤lientInfo涓幏鍙栵紝濡傛灉娌℃湁鍐嶄粠CardInfo涓幏鍙栵級 + val userName = getUserName() + if (!userName.isNullOrEmpty()) { + data.add("鐢ㄦ埛濮撳悕锛�$userName") } // 娣诲姞鍗″湴鍧� @@ -305,11 +344,10 @@ data.add(" 琛ュ崱鍑瘉") data.add("*****************************") - // 娣诲姞鐢ㄦ埛鍚嶏紙浠嶤ardInfo涓幏鍙栵級 - cardInfo?.userName?.let { userName -> - if (userName.isNotEmpty()) { - data.add("鐢ㄦ埛濮撳悕锛�$userName") - } + // 娣诲姞鐢ㄦ埛鍚嶏紙浼樺厛浠嶤lientInfo涓幏鍙栵紝濡傛灉娌℃湁鍐嶄粠CardInfo涓幏鍙栵級 + val userName = getUserName() + if (!userName.isNullOrEmpty()) { + data.add("鐢ㄦ埛濮撳悕锛�$userName") } val cardAddress = cardNumber ?: cardAddr @@ -352,11 +390,10 @@ data.add(" 閿�鍗″嚟璇�") data.add("*****************************") - // 娣诲姞鐢ㄦ埛鍚嶏紙浠嶤ardInfo涓幏鍙栵級 - cardInfo?.userName?.let { userName -> - if (userName.isNotEmpty()) { - data.add("鐢ㄦ埛濮撳悕锛�$userName") - } + // 娣诲姞鐢ㄦ埛鍚嶏紙浼樺厛浠嶤lientInfo涓幏鍙栵紝濡傛灉娌℃湁鍐嶄粠CardInfo涓幏鍙栵級 + val userName = getUserName() + if (!userName.isNullOrEmpty()) { + data.add("鐢ㄦ埛濮撳悕锛�$userName") } val cardAddress = cardNumber ?: cardAddr @@ -397,11 +434,10 @@ data.add(" 杩旇繕鍑瘉") data.add("*****************************") - // 娣诲姞鐢ㄦ埛鍚嶏紙浠嶤ardInfo涓幏鍙栵級 - cardInfo?.userName?.let { userName -> - if (userName.isNotEmpty()) { - data.add("鐢ㄦ埛濮撳悕锛�$userName") - } + // 娣诲姞鐢ㄦ埛鍚嶏紙浼樺厛浠嶤lientInfo涓幏鍙栵紝濡傛灉娌℃湁鍐嶄粠CardInfo涓幏鍙栵級 + val userName = getUserName() + if (!userName.isNullOrEmpty()) { + data.add("鐢ㄦ埛濮撳悕锛�$userName") } val cardAddress = cardNumber ?: cardAddr @@ -442,11 +478,10 @@ data.add(" 琛ユ墸鍑瘉") data.add("*****************************") - // 娣诲姞鐢ㄦ埛鍚嶏紙浠嶤ardInfo涓幏鍙栵級 - cardInfo?.userName?.let { userName -> - if (userName.isNotEmpty()) { - data.add("鐢ㄦ埛濮撳悕锛�$userName") - } + // 娣诲姞鐢ㄦ埛鍚嶏紙浼樺厛浠嶤lientInfo涓幏鍙栵紝濡傛灉娌℃湁鍐嶄粠CardInfo涓幏鍙栵級 + val userName = getUserName() + if (!userName.isNullOrEmpty()) { + data.add("鐢ㄦ埛濮撳悕锛�$userName") } val cardAddress = cardNumber ?: cardAddr @@ -486,11 +521,10 @@ data.add(" 寮�鍗″嚟璇�") data.add("*****************************") - // 娣诲姞鐢ㄦ埛鍚嶏紙浠嶤ardInfo涓幏鍙栵級 - cardInfo?.userName?.let { userName -> - if (userName.isNotEmpty()) { - data.add("鐢ㄦ埛濮撳悕锛�$userName") - } + // 娣诲姞鐢ㄦ埛鍚嶏紙浼樺厛浠嶤lientInfo涓幏鍙栵紝濡傛灉娌℃湁鍐嶄粠CardInfo涓幏鍙栵級 + val userName = getUserName() + if (!userName.isNullOrEmpty()) { + data.add("鐢ㄦ埛濮撳悕锛�$userName") } // 娣诲姞鍗″湴鍧� @@ -507,14 +541,15 @@ // 娣诲姞鍏呭�奸噾棰� if (rechargeAmount > 0) { data.add("鍏呭�奸噾棰濓細${String.format("%.2f", rechargeAmount)} 鍏�") - // 娣诲姞鍏呭�煎悗浣欓 - data.add("鍏呭�煎悗浣欓锛�${MornyUtil.changeF2Y(userCard.balance)} 鍏�") } - // 娣诲姞璧犻�侀噾棰� + // 娣诲姞宸ユ湰璐� if (cardFee > 0) { - data.add("宸ユ湰璐癸細" + MornyUtil.changeF2Y(cardFee) + "鍏�") + data.add("宸ユ湰璐癸細" + cardFee + "鍏�") } + + // 娣诲姞鍗″唴浣欓锛堝紑鍗″悗鐨勪綑棰濓級 + data.add("鍗″唴浣欓锛�${MornyUtil.changeF2Y(userCard.balance)} 鍏�") // 娣诲姞璁㈠崟鍙� if (!orderNumber.isNullOrEmpty()) { @@ -541,11 +576,10 @@ data.add(" 鎿嶄綔鍑瘉") data.add("*****************************") - // 娣诲姞鐢ㄦ埛鍚嶏紙浠嶤ardInfo涓幏鍙栵級 - cardInfo?.userName?.let { userName -> - if (userName.isNotEmpty()) { - data.add("鐢ㄦ埛濮撳悕锛�$userName") - } + // 娣诲姞鐢ㄦ埛鍚嶏紙浼樺厛浠嶤lientInfo涓幏鍙栵紝濡傛灉娌℃湁鍐嶄粠CardInfo涓幏鍙栵級 + val userName = getUserName() + if (!userName.isNullOrEmpty()) { + data.add("鐢ㄦ埛濮撳悕锛�$userName") } val cardAddress = cardNumber ?: cardAddr diff --git a/generallibrary/src/main/java/com/dayu/general/activity/NewCard2Activity.kt b/generallibrary/src/main/java/com/dayu/general/activity/NewCard2Activity.kt deleted file mode 100644 index 1be8768..0000000 --- a/generallibrary/src/main/java/com/dayu/general/activity/NewCard2Activity.kt +++ /dev/null @@ -1,600 +0,0 @@ -package com.dayu.general.activity - -import android.content.Intent -import android.os.Bundle -import android.text.Editable -import android.text.TextWatcher -import android.util.TypedValue -import android.view.View -import android.widget.RadioButton -import android.widget.Toast -import androidx.lifecycle.lifecycleScope -import com.dayu.baselibrary.net.subscribers.SubscriberListener -import com.dayu.baselibrary.utils.MornyUtil -import com.dayu.baselibrary.view.TitleBar.ClickType_LEFT_IMAGE -import com.dayu.general.BaseApplication -import com.dayu.general.R -import com.dayu.general.bean.card.UserCard -import com.dayu.general.bean.db.CardRegistrationBean -import com.dayu.general.bean.net.ClientInfo -import com.dayu.general.bean.net.NewCardDataResult -import com.dayu.general.bean.net.PaymentMethod -import com.dayu.general.bean.net.PaymentMethodResponse -import com.dayu.general.dao.BaseDaoSingleton -import com.dayu.general.databinding.ActivityNewCardGeBinding -import com.dayu.general.net.ApiManager -import com.dayu.general.net.BaseResponse -import com.dayu.general.tool.BaseCommon.Companion.protocol -import com.dayu.general.tool.CardCommon.Companion.USER_CARD_TYPE_1 -import com.dayu.general.tool.CardOperationType -import com.dayu.general.tool.NfcReadHelper -import com.dayu.general.tool.NfcWreatHelper -import com.dayu.general.utils.DateUtils -import com.tencent.bugly.crashreport.CrashReport -import kotlinx.coroutines.launch -import java.util.Calendar - -/** - * Description: 鐢ㄦ埛寮�鍗$晫闈�(鍚屾淇敼鐧藉崱瀵嗙爜) - * Author: zuo - * Date: 2025/4/7 - */ -class NewCard2Activity : BaseNfcActivity() { - - private lateinit var binding: ActivityNewCardGeBinding - - // 鏀粯鏂瑰紡 - private var paymentMethod: String = "鐜伴噾" - - // 鏀粯鏂瑰紡ID - private var paymentId: String = "" - - // 鏀粯鏂瑰紡鍒楄〃 - private var paymentMethodList: List<PaymentMethod> = listOf() - - // 鍗$墿鐞咺D - private var cardPhysicalId: String = "" - - // 鐢ㄦ埛ID - private var userId: String = "" - - // 瀹㈡埛ID - private var clientId: String = "" - - private lateinit var clientInfo: ClientInfo - - // 鏄惁宸茶鍗� - private var isReadCard: Boolean = false - - private var orderId: String = "" - - companion object { - private const val TAG = "NewCard2Activity" - private const val REQUEST_CODE_NFC_WRITE = 1001 - } - - - override fun onCreate(savedInstanceState: Bundle?) { - super.onCreate(savedInstanceState) - binding = ActivityNewCardGeBinding.inflate(layoutInflater) - setContentView(binding.root) - - // 鑾峰彇浼犻�掔殑clientId鍙傛暟 - clientId = intent.getStringExtra("clientId") ?: "" - - initView() - - // 濡傛灉鏈塩lientId锛岃幏鍙栧鎴蜂俊鎭� - if (clientId.isNotEmpty()) { - getClientInfo(clientId) - } - - // 鑾峰彇鏀粯鏂瑰紡 - getPaymentMethods() - initListener() - } - - private fun initView() { - // 鍒濆鍖栨爣棰樻爮杩斿洖鎸夐挳 - binding.titleBar.setOnItemclickListner(ClickType_LEFT_IMAGE) { - finish() - } - - // 鍒濆鍖朜FC璇诲崱瀹瑰櫒锛屽垵濮嬮殣钘� - binding.nfcContainer.visibility = View.VISIBLE - - // 璁剧疆閲戦杈撳叆闄愬埗涓轰袱浣嶅皬鏁� - binding.newCardRechargeAmount.addTextChangedListener(createDecimalTextWatcher()) - binding.newCardCardFee.addTextChangedListener(createDecimalTextWatcher()) - } - - /** - * 鑾峰彇瀹㈡埛璇︾粏淇℃伅 - */ - private fun getClientInfo(clientId: String) { - ApiManager.getInstance().requestGetLoading( - this, - "terminal/client/getTermOne/$clientId", - ClientInfo::class.java, - null, - object : SubscriberListener<BaseResponse<ClientInfo>>() { - override fun onNext(response: BaseResponse<ClientInfo>) { - if (response.success) { - clientInfo = response.content!! - if (clientInfo != null) { - // 鏄剧ず瀹㈡埛淇℃伅鍒扮晫闈� - displayClientInfo(clientInfo) - } else { - Toast.makeText( - this@NewCard2Activity, - "鑾峰彇瀹㈡埛淇℃伅澶辫触: 杩斿洖鏁版嵁涓虹┖", - Toast.LENGTH_SHORT - ).show() - } - } else { - Toast.makeText( - this@NewCard2Activity, - "鑾峰彇瀹㈡埛淇℃伅澶辫触: ${response.msg}", - Toast.LENGTH_SHORT - ).show() - } - } - - override fun onError(e: Throwable?) { - super.onError(e) - Toast.makeText( - this@NewCard2Activity, - "鑾峰彇瀹㈡埛淇℃伅澶辫触: ${e?.message ?: "缃戠粶寮傚父"}", - Toast.LENGTH_SHORT - ).show() - } - } - ) - } - - /** - * 鏄剧ず瀹㈡埛淇℃伅鍒扮晫闈� - */ - private fun displayClientInfo(clientInfo: ClientInfo) { - // 淇濆瓨鐢ㄦ埛ID渚涘悗缁娇鐢� - userId = clientInfo.clientId - - // 鏄剧ず鐢ㄦ埛鍩烘湰淇℃伅 - binding.newCardUserName.text = clientInfo.name - binding.newCardIdCard.text = if (clientInfo.idCard.isBlank()) "鏃�" else clientInfo.idCard - binding.newCardFarmerCode.text = clientInfo.clientNum - } - - /** - * 鑾峰彇鏀粯鏂瑰紡鍒楄〃 - */ - private fun getPaymentMethods() { - ApiManager.getInstance().requestGetLoading( - this, - "terminal/paymentmethod/get", - Any::class.java, - null, - object : SubscriberListener<BaseResponse<Any>>() { - override fun onNext(response: BaseResponse<Any>) { - if (response.success) { - try { - // 瀹夊叏鍦板鐞嗚繑鍥炵殑content锛屾湇鍔″櫒杩斿洖鐨勬槸ArrayList<LinkedHashMap> - val paymentMethods = mutableListOf<PaymentMethod>() - val content = response.content - - if (content is List<*>) { - content.forEach { item -> - if (item is Map<*, *>) { - val id = item["id"]?.toString() ?: "" - val name = item["name"]?.toString() ?: "" - if (id.isNotEmpty() && name.isNotEmpty()) { - paymentMethods.add(PaymentMethod(id, name)) - } - } - } - } - - if (paymentMethods.isNotEmpty()) { - paymentMethodList = paymentMethods - // 鏇存柊鏀粯鏂瑰紡鏄剧ず - updatePaymentMethodRadioGroup() - } else { - Toast.makeText( - this@NewCard2Activity, - "鑾峰彇鏀粯鏂瑰紡澶辫触锛氳繑鍥炴暟鎹负绌�", - Toast.LENGTH_SHORT - ).show() - } - } catch (e: Exception) { - android.util.Log.e("NewCard2Activity", "瑙f瀽鏀粯鏂瑰紡鏁版嵁澶辫触", e) - android.util.Log.e("NewCard2Activity", "鍘熷鏁版嵁绫诲瀷: ${response.content?.javaClass?.name}") - android.util.Log.e("NewCard2Activity", "鍘熷鏁版嵁鍐呭: ${response.content}") - Toast.makeText( - this@NewCard2Activity, - "瑙f瀽鏀粯鏂瑰紡鏁版嵁澶辫触: ${e.message}", - Toast.LENGTH_SHORT - ).show() - } - } else { - Toast.makeText( - this@NewCard2Activity, - "鑾峰彇鏀粯鏂瑰紡澶辫触: ${response.msg}", - Toast.LENGTH_SHORT - ).show() - } - } - - override fun onError(e: Throwable?) { - super.onError(e) - android.util.Log.e("NewCard2Activity", "缃戠粶璇锋眰澶辫触", e) - Toast.makeText( - this@NewCard2Activity, - "鑾峰彇鏀粯鏂瑰紡澶辫触: ${e?.message ?: "缃戠粶寮傚父"}", - Toast.LENGTH_SHORT - ).show() - } - } - ) - } - - /** - * 鏇存柊鏀粯鏂瑰紡RadioGroup - */ - private fun updatePaymentMethodRadioGroup() { - // 娓呯┖鍘熸湁RadioButton - binding.newCardPaymentMethod.removeAllViews() - - // 鍔ㄦ�佹坊鍔燫adioButton - paymentMethodList.forEachIndexed { index, method -> - val radioButton = RadioButton(this) - radioButton.id = View.generateViewId() // 鐢熸垚鍞竴ID - radioButton.layoutParams = android.widget.LinearLayout.LayoutParams( - 0, - resources.getDimensionPixelSize(R.dimen.dimen_40), - 1.0f - ) - - // 濡傛灉涓嶆槸鏈�鍚庝竴涓寜閽紝娣诲姞鍙宠竟璺� - if (index < paymentMethodList.size - 1) { - (radioButton.layoutParams as android.widget.LinearLayout.LayoutParams).rightMargin = - resources.getDimensionPixelSize(R.dimen.dimen_15) - } - - radioButton.text = method.name - radioButton.background = resources.getDrawable(R.drawable.radio_selector) - radioButton.buttonDrawable = null - radioButton.gravity = android.view.Gravity.CENTER - radioButton.setTextColor(resources.getColorStateList(R.color.radio_button_text_color)) - radioButton.setTextSize(TypedValue.COMPLEX_UNIT_SP, 14f) - - // 娣诲姞鍒癛adioGroup - binding.newCardPaymentMethod.addView(radioButton) - - // 榛樿閫変腑绗竴涓� - if (index == 0) { - radioButton.isChecked = true - paymentMethod = method.name - paymentId = method.id - } - } - } - - /** - * 鍒涘缓闄愬埗杈撳叆涓や綅灏忔暟鐨凾extWatcher - */ - private fun createDecimalTextWatcher(): TextWatcher { - return 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?) { - if (s == null || s.isEmpty()) return - - val str = s.toString() - // 濡傛灉杈撳叆鐨勪笉鏄湁鏁堢殑灏忔暟鏍煎紡锛岃繘琛屽鐞� - if (str.contains(".")) { - val decimalIndex = str.indexOf(".") - // 濡傛灉灏忔暟鐐瑰悗瓒呰繃涓や綅锛屾埅鍙栧埌涓や綅 - if (decimalIndex >= 0 && str.length - decimalIndex > 3) { - s.delete(decimalIndex + 3, str.length) - } - } - } - } - } - - private fun initListener() { - // 璁剧疆鏀粯鏂瑰紡閫夋嫨鐩戝惉 - binding.newCardPaymentMethod.setOnCheckedChangeListener { group, checkedId -> - // 鏍规嵁閫変腑鐨処D鑾峰彇鏀粯鏂瑰紡 - for (i in 0 until group.childCount) { - val radioButton = group.getChildAt(i) as RadioButton - if (radioButton.id == checkedId) { - paymentMethod = radioButton.text.toString() - paymentId = paymentMethodList[i].id - break - } - } - } - - // 璁剧疆寮�鍗℃寜閽偣鍑荤洃鍚� - binding.newCardRegistBtn.setOnClickListener { - if (cardPhysicalId.isEmpty()) { - // 濡傛灉灏氭湭璇诲彇鍒板崱鐗╃悊ID锛屾樉绀篘FC璇诲崱鐣岄潰 - binding.nfcContainer.visibility = View.VISIBLE - } else { - // 宸茶鍙栧埌鍗$墿鐞咺D锛岃繘琛屽紑鍗℃搷浣� - registerNewCard() - } - } - } - - /** - * 娉ㄥ唽鏂板崱 - */ - private fun registerNewCard() { - // 鑾峰彇鍏呭�奸噾棰� - val rechargeAmountStr = binding.newCardRechargeAmount.text.toString() - val rechargeAmount = if (rechargeAmountStr.isEmpty()) 0.0 else rechargeAmountStr.toDouble() - - // 鑾峰彇宸ユ湰璐� - val cardFeeStr = binding.newCardCardFee.text.toString() - val cardFee = if (cardFeeStr.isEmpty()) 0 else cardFeeStr.toInt() - - val remark = binding.newCardRemark.text.toString() - - // 鏋勫缓璇锋眰鍙傛暟 - val params = HashMap<String, Any>() - params["cardAddr"] = cardPhysicalId // 姘村崱鍦板潃锛堢墿鐞咺D锛� - params["clientId"] = clientId // 鍐滄埛ID - params["cardCost"] = cardFee // 璐崱閲戦锛堝伐鏈垂锛�(鍏�) - params["amount"] = rechargeAmount // 鍏呭�奸噾棰�(鍏�) - params["paymentId"] = paymentId // 鏀粯鏂瑰紡ID - params["remarks"] = remark // 澶囨敞 - params["protocol"] = protocol // 鍗忚 - params["operator"] = BaseApplication.userId // 鎿嶄綔浜篒D - - // 鎵ц鍗$墖婵�娲籄PI璇锋眰 - ApiManager.getInstance().requestPostLoading( - this, - "terminal/card/termActiveCard", - NewCardDataResult::class.java, - params, - object : SubscriberListener<BaseResponse<NewCardDataResult>>() { - override fun onNext(response: BaseResponse<NewCardDataResult>) { - if (response.success) { - orderId = response.content?.orderNo.toString() - // 淇濆瓨寮�鍗′俊鎭埌鏁版嵁搴� - val cardRegistration = CardRegistrationBean( - cardNumber = cardPhysicalId, - userName = binding.newCardUserName.text.toString(), - idCard = binding.newCardIdCard.text.toString(), - clientId = clientId, - cardFee = cardFee, - remark = binding.newCardRemark.text.toString(), - paymentMethod = paymentId.toLongOrNull()?.toInt() ?: 0, - isReported = true, - isCardWritten = false, // 鍒濆璁剧疆涓篺alse锛屽啓鍗℃垚鍔熷悗鍐嶆洿鏂颁负true - operatorId = orderId, - - ) - - // 浣跨敤鍗忕▼鍦ㄥ悗鍙扮嚎绋嬩腑淇濆瓨鏁版嵁 - lifecycleScope.launch { - try { - BaseDaoSingleton.getInstance(this@NewCard2Activity) - .cardRegistrationDao().insert(cardRegistration) - setResult(RESULT_OK) - Intent(this@NewCard2Activity, NfcWreatActivity::class.java).apply { - putExtra("cardType", USER_CARD_TYPE_1) - putExtra("orderNumber", orderId) - putExtra("cardAddr", cardPhysicalId) - var userCard = UserCard() - userCard.areaNumber = - response.content?.cardNum?.substring(0, 12).toString() - userCard.userCode = clientInfo.clientNum - userCard.phoneNumber = clientInfo.phone - userCard.userCodeNumber = - response.content?.cardNum?.substring(12)?.toInt()!! - userCard.projectCode = response.content?.projectNo!! - userCard.balance = - MornyUtil.changeY2F(response.content?.balance) -// userCard.surplusWater = response.content?.surplusWater?.toInt()!! - userCard.waterPrice = - MornyUtil.changeY2F(response.content?.waterPrice) - userCard.electricPrice = - MornyUtil.changeY2F(response.content?.waterPrice) - userCard.rechargeDate = - DateUtils.parseStringToCalendar(response.content?.time) - - // 杈撳嚭userCard鐨勬墍鏈変俊鎭埌鏃ュ織 - android.util.Log.d( - "NewCard2Activity", - "=== 寮�鍗serCard淇℃伅 ===" - ) - android.util.Log.d( - "NewCard2Activity", - "鍗$墖绫诲瀷: ${userCard.cardType}" - ) - android.util.Log.d( - "NewCard2Activity", - "鍥藉琛屾斂鍖哄煙鍙�: ${userCard.areaNumber}" - ) - android.util.Log.d( - "NewCard2Activity", - "鐢ㄦ埛缂栧彿: ${userCard.userCode}" - ) - android.util.Log.d( - "NewCard2Activity", - "鐢ㄦ埛鍗$紪鍙�: ${userCard.userCodeNumber}" - ) - android.util.Log.d( - "NewCard2Activity", - "瀹屾暣鐢ㄦ埛缂栧彿: ${userCard.getMyUserCode()}" - ) - android.util.Log.d( - "NewCard2Activity", - "鎵嬫満鍙�: ${userCard.phoneNumber}" - ) - android.util.Log.d( - "NewCard2Activity", - "椤圭洰缂栫爜: ${userCard.projectCode}" - ) - android.util.Log.d( - "NewCard2Activity", - "鍗″唴浣欓: ${userCard.balance}" - ) - android.util.Log.d( - "NewCard2Activity", - "鍓╀綑姘撮噺: ${userCard.surplusWater}" - ) - android.util.Log.d( - "NewCard2Activity", - "姘撮噺鍗曚环: ${userCard.waterPrice}" - ) - android.util.Log.d( - "NewCard2Activity", - "鐢甸噺鍗曚环: ${userCard.electricPrice}" - ) - android.util.Log.d( - "NewCard2Activity", - "鍏呭�兼椂闂�: ${userCard.rechargeDate}" - ) - android.util.Log.d("NewCard2Activity", "==================") - - putExtra("userCard", userCard) - putExtra("operationTypeCode", CardOperationType.OpenCard.code) - putExtra("cardFee", cardFee) - - startActivityForResult(this, REQUEST_CODE_NFC_WRITE) - } - } catch (e: Exception) { - CrashReport.postCatchedException(e) - Toast.makeText( - this@NewCard2Activity, - "淇濆瓨寮�鍗′俊鎭け璐�: ${e.message}", - Toast.LENGTH_SHORT - ).show() - } - } - } else { - // 婵�娲诲け璐� - Toast.makeText( - this@NewCard2Activity, - "寮�鍗″け璐�: ${response.msg}", - Toast.LENGTH_SHORT - ).show() - } - } - - override fun onError(e: Throwable?) { - super.onError(e) - // 璇锋眰寮傚父 - Toast.makeText( - this@NewCard2Activity, - "寮�鍗″け璐�: ${e?.message ?: "缃戠粶寮傚父"}", - Toast.LENGTH_SHORT - ).show() - } - } - ) - } - - override fun onResume() { - super.onResume() - // 寮�鍚墠鍙拌皟搴︾郴缁燂紝浼樺厛澶勭悊NFC鏍囩 - - } - - override fun onPause() { - super.onPause() - // 鍏抽棴鍓嶅彴璋冨害绯荤粺 - - } - - override fun onNfcBack(intent: Intent) { - if (!isReadCard) { - val cardNumber = NfcReadHelper.getInstance(intent, this).getCardNumberNoClose() - if (cardNumber.isNotEmpty()) { - try { - // 鍒涘缓瀵嗛挜鍒楄〃鐨勫壇鏈紝閬垮厤ConcurrentModificationException - val keyList = ArrayList(NfcReadHelper.getInstance(intent, this).getKeyList()) - - // 浣跨敤缇庡寲鐨勫姞杞藉姩鐢绘潵鏄剧ずNFC鎿嶄綔鐨勫姞杞界姸鎬� - val nfcHelper = NfcWreatHelper.getInstance(intent, this) - nfcHelper.setLoadingView(binding.loadingContainer, binding.nfcProgressWheel) - - // 寮傛淇敼瀵嗙爜 - nfcHelper.changePSAsync( - keyList, - false, - true - ) { success: Boolean, msg: String? -> - if (success) { - isReadCard = true - // 淇濆瓨鍗$墿鐞咺D - cardPhysicalId = cardNumber - // 鏇存柊UI - binding.newCardArerNumber.text = cardNumber - // 闅愯棌NFC璇诲崱鐣岄潰 - binding.nfcContainer.visibility = View.GONE - binding.centerScroll.visibility = View.VISIBLE - binding.newCardRegistBtn.visibility = View.VISIBLE - } else { - // 瀵嗙爜淇敼澶辫触锛屽鐞嗛敊璇儏鍐� - Toast.makeText( - this@NewCard2Activity, - "鍗$墖鍒濆鍖栧け璐ワ細$msg", - Toast.LENGTH_LONG - ).show() - } - } - } catch (e: Exception) { - // 澶勭悊寮傚父鎯呭喌 - CrashReport.postCatchedException(e) - e.printStackTrace() - } - } else { - Toast.makeText( - this@NewCard2Activity, - "鑾峰彇鍗″彿澶辫触", - Toast.LENGTH_SHORT - ).show() - } - } else { - Toast.makeText( - this@NewCard2Activity, - "褰撳墠宸茶鍗★紝涓嶅彲鍐嶆璇诲崱", - Toast.LENGTH_SHORT - ).show() - } - - } - - override fun onDestroy() { - super.onDestroy() - // 娓呯悊NFC宸ュ叿绫讳腑鐨凴xJava璁㈤槄锛岄槻姝㈠唴瀛樻硠婕� - try { - NfcReadHelper.getInstance(intent, this).clearDisposables() - NfcWreatHelper.getInstance(intent, this).clearDisposables() - // 纭繚鍋滄鍔ㄧ敾锛岄伩鍏嶅唴瀛樻硠婕� - binding.nfcProgressWheel.stopSpinning() - } catch (e: Exception) { - e.printStackTrace() - } - } - - override fun onActivityResult(requestCode: Int, resultCode: Int, data: Intent?) { - super.onActivityResult(requestCode, resultCode, data) - if (requestCode == REQUEST_CODE_NFC_WRITE && resultCode == RESULT_OK) { - // 鍐欏崱鎴愬姛锛屽叧闂綋鍓岮ctivity - finish() - } - } - -} \ No newline at end of file diff --git a/generallibrary/src/main/java/com/dayu/general/activity/NewCardActivity.kt b/generallibrary/src/main/java/com/dayu/general/activity/NewCardActivity.kt index 26af596..6979b1d 100644 --- a/generallibrary/src/main/java/com/dayu/general/activity/NewCardActivity.kt +++ b/generallibrary/src/main/java/com/dayu/general/activity/NewCardActivity.kt @@ -1,17 +1,599 @@ package com.dayu.general.activity +import android.content.Intent import android.os.Bundle -import android.view.LayoutInflater -import com.dayu.baselibrary.activity.BaseActivity +import android.text.Editable +import android.text.TextWatcher +import android.util.TypedValue +import android.view.View +import android.widget.RadioButton +import android.widget.Toast +import androidx.lifecycle.lifecycleScope +import com.dayu.baselibrary.net.subscribers.SubscriberListener +import com.dayu.baselibrary.utils.MornyUtil +import com.dayu.baselibrary.view.TitleBar.ClickType_LEFT_IMAGE +import com.dayu.general.BaseApplication +import com.dayu.general.R +import com.dayu.general.bean.card.UserCard +import com.dayu.general.bean.db.CardRegistrationBean +import com.dayu.general.bean.net.ClientInfo +import com.dayu.general.bean.net.NewCardDataResult +import com.dayu.general.bean.net.PaymentMethod +import com.dayu.general.dao.BaseDaoSingleton import com.dayu.general.databinding.ActivityNewCardGeBinding +import com.dayu.general.net.ApiManager +import com.dayu.general.net.BaseResponse +import com.dayu.general.tool.BaseCommon.Companion.protocol +import com.dayu.general.tool.CardCommon.Companion.USER_CARD_TYPE_1 +import com.dayu.general.tool.CardOperationType +import com.dayu.general.tool.NfcReadHelper +import com.dayu.general.tool.NfcWreatHelper +import com.dayu.general.utils.DateUtils +import com.tencent.bugly.crashreport.CrashReport +import kotlinx.coroutines.launch -class NewCardActivity:BaseActivity() { - var binding:ActivityNewCardGeBinding? = null - override fun onCreate(savedInstanceState: Bundle?) { - super.onCreate(savedInstanceState) - binding= ActivityNewCardGeBinding.inflate(LayoutInflater.from(this)) - setContentView(binding?.root) +/** + * Description: 鐢ㄦ埛寮�鍗$晫闈�(鍚屾淇敼鐧藉崱瀵嗙爜) + * Author: zuo + * Date: 2025/4/7 + */ +class NewCardActivity : BaseNfcActivity() { + + private lateinit var binding: ActivityNewCardGeBinding + + // 鏀粯鏂瑰紡 + private var paymentMethod: String = "鐜伴噾" + + // 鏀粯鏂瑰紡ID + private var paymentId: String = "" + + // 鏀粯鏂瑰紡鍒楄〃 + private var paymentMethodList: List<PaymentMethod> = listOf() + + // 鍗$墿鐞咺D + private var cardPhysicalId: String = "" + + // 鐢ㄦ埛ID + private var userId: String = "" + + // 瀹㈡埛ID + private var clientId: String = "" + + private lateinit var clientInfo: ClientInfo + + // 鏄惁宸茶鍗� + private var isReadCard: Boolean = false + + private var orderId: String = "" + + companion object { + private const val TAG = "NewCard2Activity" + private const val REQUEST_CODE_NFC_WRITE = 1001 } + override fun onCreate(savedInstanceState: Bundle?) { + super.onCreate(savedInstanceState) + binding = ActivityNewCardGeBinding.inflate(layoutInflater) + setContentView(binding.root) + + // 鑾峰彇浼犻�掔殑clientId鍙傛暟 + clientId = intent.getStringExtra("clientId") ?: "" + + initView() + + // 濡傛灉鏈塩lientId锛岃幏鍙栧鎴蜂俊鎭� + if (clientId.isNotEmpty()) { + getClientInfo(clientId) + } + + // 鑾峰彇鏀粯鏂瑰紡 + getPaymentMethods() + initListener() + } + + private fun initView() { + // 鍒濆鍖栨爣棰樻爮杩斿洖鎸夐挳 + binding.titleBar.setOnItemclickListner(ClickType_LEFT_IMAGE) { + finish() + } + + // 鍒濆鍖朜FC璇诲崱瀹瑰櫒锛屽垵濮嬮殣钘� + binding.nfcContainer.visibility = View.VISIBLE + + // 璁剧疆閲戦杈撳叆闄愬埗涓轰袱浣嶅皬鏁� + binding.newCardRechargeAmount.addTextChangedListener(createDecimalTextWatcher()) + binding.newCardCardFee.addTextChangedListener(createDecimalTextWatcher()) + } + + /** + * 鑾峰彇瀹㈡埛璇︾粏淇℃伅 + */ + private fun getClientInfo(clientId: String) { + ApiManager.getInstance().requestGetLoading( + this, + "terminal/client/getTermOne/$clientId", + ClientInfo::class.java, + null, + object : SubscriberListener<BaseResponse<ClientInfo>>() { + override fun onNext(response: BaseResponse<ClientInfo>) { + if (response.success) { + clientInfo = response.content!! + if (clientInfo != null) { + // 鏄剧ず瀹㈡埛淇℃伅鍒扮晫闈� + displayClientInfo(clientInfo) + } else { + Toast.makeText( + this@NewCardActivity, + "鑾峰彇瀹㈡埛淇℃伅澶辫触: 杩斿洖鏁版嵁涓虹┖", + Toast.LENGTH_SHORT + ).show() + } + } else { + Toast.makeText( + this@NewCardActivity, + "鑾峰彇瀹㈡埛淇℃伅澶辫触: ${response.msg}", + Toast.LENGTH_SHORT + ).show() + } + } + + override fun onError(e: Throwable?) { + super.onError(e) + Toast.makeText( + this@NewCardActivity, + "鑾峰彇瀹㈡埛淇℃伅澶辫触: ${e?.message ?: "缃戠粶寮傚父"}", + Toast.LENGTH_SHORT + ).show() + } + } + ) + } + + /** + * 鏄剧ず瀹㈡埛淇℃伅鍒扮晫闈� + */ + private fun displayClientInfo(clientInfo: ClientInfo) { + // 淇濆瓨鐢ㄦ埛ID渚涘悗缁娇鐢� + userId = clientInfo.clientId + + // 鏄剧ず鐢ㄦ埛鍩烘湰淇℃伅 + binding.newCardUserName.text = clientInfo.name + binding.newCardIdCard.text = if (clientInfo.idCard.isBlank()) "鏃�" else clientInfo.idCard + binding.newCardFarmerCode.text = clientInfo.clientNum + } + + /** + * 鑾峰彇鏀粯鏂瑰紡鍒楄〃 + */ + private fun getPaymentMethods() { + ApiManager.getInstance().requestGetLoading( + this, + "terminal/paymentmethod/get", + Any::class.java, + null, + object : SubscriberListener<BaseResponse<Any>>() { + override fun onNext(response: BaseResponse<Any>) { + if (response.success) { + try { + // 瀹夊叏鍦板鐞嗚繑鍥炵殑content锛屾湇鍔″櫒杩斿洖鐨勬槸ArrayList<LinkedHashMap> + val paymentMethods = mutableListOf<PaymentMethod>() + val content = response.content + + if (content is List<*>) { + content.forEach { item -> + if (item is Map<*, *>) { + val id = item["id"]?.toString() ?: "" + val name = item["name"]?.toString() ?: "" + if (id.isNotEmpty() && name.isNotEmpty()) { + paymentMethods.add(PaymentMethod(id, name)) + } + } + } + } + + if (paymentMethods.isNotEmpty()) { + paymentMethodList = paymentMethods + // 鏇存柊鏀粯鏂瑰紡鏄剧ず + updatePaymentMethodRadioGroup() + } else { + Toast.makeText( + this@NewCardActivity, + "鑾峰彇鏀粯鏂瑰紡澶辫触锛氳繑鍥炴暟鎹负绌�", + Toast.LENGTH_SHORT + ).show() + } + } catch (e: Exception) { + android.util.Log.e("NewCard2Activity", "瑙f瀽鏀粯鏂瑰紡鏁版嵁澶辫触", e) + android.util.Log.e("NewCard2Activity", "鍘熷鏁版嵁绫诲瀷: ${response.content?.javaClass?.name}") + android.util.Log.e("NewCard2Activity", "鍘熷鏁版嵁鍐呭: ${response.content}") + Toast.makeText( + this@NewCardActivity, + "瑙f瀽鏀粯鏂瑰紡鏁版嵁澶辫触: ${e.message}", + Toast.LENGTH_SHORT + ).show() + } + } else { + Toast.makeText( + this@NewCardActivity, + "鑾峰彇鏀粯鏂瑰紡澶辫触: ${response.msg}", + Toast.LENGTH_SHORT + ).show() + } + } + + override fun onError(e: Throwable?) { + super.onError(e) + android.util.Log.e("NewCard2Activity", "缃戠粶璇锋眰澶辫触", e) + Toast.makeText( + this@NewCardActivity, + "鑾峰彇鏀粯鏂瑰紡澶辫触: ${e?.message ?: "缃戠粶寮傚父"}", + Toast.LENGTH_SHORT + ).show() + } + } + ) + } + + /** + * 鏇存柊鏀粯鏂瑰紡RadioGroup + */ + private fun updatePaymentMethodRadioGroup() { + // 娓呯┖鍘熸湁RadioButton + binding.newCardPaymentMethod.removeAllViews() + + // 鍔ㄦ�佹坊鍔燫adioButton + paymentMethodList.forEachIndexed { index, method -> + val radioButton = RadioButton(this) + radioButton.id = View.generateViewId() // 鐢熸垚鍞竴ID + radioButton.layoutParams = android.widget.LinearLayout.LayoutParams( + 0, + resources.getDimensionPixelSize(R.dimen.dimen_40), + 1.0f + ) + + // 濡傛灉涓嶆槸鏈�鍚庝竴涓寜閽紝娣诲姞鍙宠竟璺� + if (index < paymentMethodList.size - 1) { + (radioButton.layoutParams as android.widget.LinearLayout.LayoutParams).rightMargin = + resources.getDimensionPixelSize(R.dimen.dimen_15) + } + + radioButton.text = method.name + radioButton.background = resources.getDrawable(R.drawable.radio_selector) + radioButton.buttonDrawable = null + radioButton.gravity = android.view.Gravity.CENTER + radioButton.setTextColor(resources.getColorStateList(R.color.radio_button_text_color)) + radioButton.setTextSize(TypedValue.COMPLEX_UNIT_SP, 14f) + + // 娣诲姞鍒癛adioGroup + binding.newCardPaymentMethod.addView(radioButton) + + // 榛樿閫変腑绗竴涓� + if (index == 0) { + radioButton.isChecked = true + paymentMethod = method.name + paymentId = method.id + } + } + } + + /** + * 鍒涘缓闄愬埗杈撳叆涓や綅灏忔暟鐨凾extWatcher + */ + private fun createDecimalTextWatcher(): TextWatcher { + return 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?) { + if (s == null || s.isEmpty()) return + + val str = s.toString() + // 濡傛灉杈撳叆鐨勪笉鏄湁鏁堢殑灏忔暟鏍煎紡锛岃繘琛屽鐞� + if (str.contains(".")) { + val decimalIndex = str.indexOf(".") + // 濡傛灉灏忔暟鐐瑰悗瓒呰繃涓や綅锛屾埅鍙栧埌涓や綅 + if (decimalIndex >= 0 && str.length - decimalIndex > 3) { + s.delete(decimalIndex + 3, str.length) + } + } + } + } + } + + private fun initListener() { + // 璁剧疆鏀粯鏂瑰紡閫夋嫨鐩戝惉 + binding.newCardPaymentMethod.setOnCheckedChangeListener { group, checkedId -> + // 鏍规嵁閫変腑鐨処D鑾峰彇鏀粯鏂瑰紡 + for (i in 0 until group.childCount) { + val radioButton = group.getChildAt(i) as RadioButton + if (radioButton.id == checkedId) { + paymentMethod = radioButton.text.toString() + paymentId = paymentMethodList[i].id + break + } + } + } + + // 璁剧疆寮�鍗℃寜閽偣鍑荤洃鍚� + binding.newCardRegistBtn.setOnClickListener { + if (cardPhysicalId.isEmpty()) { + // 濡傛灉灏氭湭璇诲彇鍒板崱鐗╃悊ID锛屾樉绀篘FC璇诲崱鐣岄潰 + binding.nfcContainer.visibility = View.VISIBLE + } else { + // 宸茶鍙栧埌鍗$墿鐞咺D锛岃繘琛屽紑鍗℃搷浣� + registerNewCard() + } + } + } + + /** + * 娉ㄥ唽鏂板崱 + */ + private fun registerNewCard() { + // 鑾峰彇鍏呭�奸噾棰� + val rechargeAmountStr = binding.newCardRechargeAmount.text.toString() + val rechargeAmount = if (rechargeAmountStr.isEmpty()) 0.0 else rechargeAmountStr.toDouble() + + // 鑾峰彇宸ユ湰璐� + val cardFeeStr = binding.newCardCardFee.text.toString() + val cardFee = if (cardFeeStr.isEmpty()) 0 else cardFeeStr.toInt() + + val remark = binding.newCardRemark.text.toString() + + // 鏋勫缓璇锋眰鍙傛暟 + val params = HashMap<String, Any>() + params["cardAddr"] = cardPhysicalId // 姘村崱鍦板潃锛堢墿鐞咺D锛� + params["clientId"] = clientId // 鍐滄埛ID + params["cardCost"] = cardFee // 璐崱閲戦锛堝伐鏈垂锛�(鍏�) + params["amount"] = rechargeAmount // 鍏呭�奸噾棰�(鍏�) + params["paymentId"] = paymentId // 鏀粯鏂瑰紡ID + params["remarks"] = remark // 澶囨敞 + params["protocol"] = protocol // 鍗忚 + params["operator"] = BaseApplication.userId // 鎿嶄綔浜篒D + + // 鎵ц鍗$墖婵�娲籄PI璇锋眰 + ApiManager.getInstance().requestPostLoading( + this, + "terminal/card/termActiveCard", + NewCardDataResult::class.java, + params, + object : SubscriberListener<BaseResponse<NewCardDataResult>>() { + override fun onNext(response: BaseResponse<NewCardDataResult>) { + if (response.success) { + orderId = response.content?.orderNo.toString() + // 淇濆瓨寮�鍗′俊鎭埌鏁版嵁搴� + val cardRegistration = CardRegistrationBean( + cardNumber = cardPhysicalId, + userName = binding.newCardUserName.text.toString(), + idCard = binding.newCardIdCard.text.toString(), + clientId = clientId, + cardFee = cardFee, + remark = binding.newCardRemark.text.toString(), + paymentMethod = paymentId.toLongOrNull()?.toInt() ?: 0, + isReported = true, + isCardWritten = false, // 鍒濆璁剧疆涓篺alse锛屽啓鍗℃垚鍔熷悗鍐嶆洿鏂颁负true + operatorId = orderId, + + ) + + // 浣跨敤鍗忕▼鍦ㄥ悗鍙扮嚎绋嬩腑淇濆瓨鏁版嵁 + lifecycleScope.launch { + try { + BaseDaoSingleton.getInstance(this@NewCardActivity) + .cardRegistrationDao().insert(cardRegistration) + setResult(RESULT_OK) + Intent(this@NewCardActivity, NfcWreatActivity::class.java).apply { + putExtra("cardType", USER_CARD_TYPE_1) + putExtra("orderNumber", orderId) + putExtra("cardAddr", cardPhysicalId) + var userCard = UserCard() + userCard.areaNumber = + response.content?.cardNum?.substring(0, 12).toString() + userCard.userCode = clientInfo.clientNum + userCard.phoneNumber = clientInfo.phone + userCard.userCodeNumber = + response.content?.cardNum?.substring(12)?.toInt()!! + userCard.projectCode = response.content?.projectNo!! + userCard.balance = + MornyUtil.changeY2F(response.content?.balance) +// userCard.surplusWater = response.content?.surplusWater?.toInt()!! + userCard.waterPrice = + MornyUtil.changeY2F(response.content?.waterPrice) + userCard.electricPrice = + MornyUtil.changeY2F(response.content?.waterPrice) + userCard.rechargeDate = + DateUtils.parseStringToCalendar(response.content?.time) + + // 杈撳嚭userCard鐨勬墍鏈変俊鎭埌鏃ュ織 + android.util.Log.d( + "NewCard2Activity", + "=== 寮�鍗serCard淇℃伅 ===" + ) + android.util.Log.d( + "NewCard2Activity", + "鍗$墖绫诲瀷: ${userCard.cardType}" + ) + android.util.Log.d( + "NewCard2Activity", + "鍥藉琛屾斂鍖哄煙鍙�: ${userCard.areaNumber}" + ) + android.util.Log.d( + "NewCard2Activity", + "鐢ㄦ埛缂栧彿: ${userCard.userCode}" + ) + android.util.Log.d( + "NewCard2Activity", + "鐢ㄦ埛鍗$紪鍙�: ${userCard.userCodeNumber}" + ) + android.util.Log.d( + "NewCard2Activity", + "瀹屾暣鐢ㄦ埛缂栧彿: ${userCard.getMyUserCode()}" + ) + android.util.Log.d( + "NewCard2Activity", + "鎵嬫満鍙�: ${userCard.phoneNumber}" + ) + android.util.Log.d( + "NewCard2Activity", + "椤圭洰缂栫爜: ${userCard.projectCode}" + ) + android.util.Log.d( + "NewCard2Activity", + "鍗″唴浣欓: ${userCard.balance}" + ) + android.util.Log.d( + "NewCard2Activity", + "鍓╀綑姘撮噺: ${userCard.surplusWater}" + ) + android.util.Log.d( + "NewCard2Activity", + "姘撮噺鍗曚环: ${userCard.waterPrice}" + ) + android.util.Log.d( + "NewCard2Activity", + "鐢甸噺鍗曚环: ${userCard.electricPrice}" + ) + android.util.Log.d( + "NewCard2Activity", + "鍏呭�兼椂闂�: ${userCard.rechargeDate}" + ) + android.util.Log.d("NewCard2Activity", "==================") + + putExtra("userCard", userCard) + putExtra("operationTypeCode", CardOperationType.OpenCard.code) + putExtra("cardFee", cardFee) + putExtra("clientInfo",clientInfo) + + startActivityForResult(this, REQUEST_CODE_NFC_WRITE) + } + } catch (e: Exception) { + CrashReport.postCatchedException(e) + Toast.makeText( + this@NewCardActivity, + "淇濆瓨寮�鍗′俊鎭け璐�: ${e.message}", + Toast.LENGTH_SHORT + ).show() + } + } + } else { + // 婵�娲诲け璐� + Toast.makeText( + this@NewCardActivity, + "寮�鍗″け璐�: ${response.msg}", + Toast.LENGTH_SHORT + ).show() + } + } + + override fun onError(e: Throwable?) { + super.onError(e) + // 璇锋眰寮傚父 + Toast.makeText( + this@NewCardActivity, + "寮�鍗″け璐�: ${e?.message ?: "缃戠粶寮傚父"}", + Toast.LENGTH_SHORT + ).show() + } + } + ) + } + + override fun onResume() { + super.onResume() + // 寮�鍚墠鍙拌皟搴︾郴缁燂紝浼樺厛澶勭悊NFC鏍囩 + + } + + override fun onPause() { + super.onPause() + // 鍏抽棴鍓嶅彴璋冨害绯荤粺 + + } + + override fun onNfcBack(intent: Intent) { + if (!isReadCard) { + val cardNumber = NfcReadHelper.getInstance(intent, this).getCardNumberNoClose() + if (cardNumber.isNotEmpty()) { + try { + // 鍒涘缓瀵嗛挜鍒楄〃鐨勫壇鏈紝閬垮厤ConcurrentModificationException + val keyList = ArrayList(NfcReadHelper.getInstance(intent, this).getKeyList()) + + // 浣跨敤缇庡寲鐨勫姞杞藉姩鐢绘潵鏄剧ずNFC鎿嶄綔鐨勫姞杞界姸鎬� + val nfcHelper = NfcWreatHelper.getInstance(intent, this) + nfcHelper.setLoadingView(binding.loadingContainer, binding.nfcProgressWheel) + + // 寮傛淇敼瀵嗙爜 + nfcHelper.changePSAsync( + keyList, + false, + true + ) { success: Boolean, msg: String? -> + if (success) { + isReadCard = true + // 淇濆瓨鍗$墿鐞咺D + cardPhysicalId = cardNumber + // 鏇存柊UI + binding.newCardArerNumber.text = cardNumber + // 闅愯棌NFC璇诲崱鐣岄潰 + binding.nfcContainer.visibility = View.GONE + binding.centerScroll.visibility = View.VISIBLE + binding.newCardRegistBtn.visibility = View.VISIBLE + } else { + // 瀵嗙爜淇敼澶辫触锛屽鐞嗛敊璇儏鍐� + Toast.makeText( + this@NewCardActivity, + "鍗$墖鍒濆鍖栧け璐ワ細$msg", + Toast.LENGTH_LONG + ).show() + } + } + } catch (e: Exception) { + // 澶勭悊寮傚父鎯呭喌 + CrashReport.postCatchedException(e) + e.printStackTrace() + } + } else { + Toast.makeText( + this@NewCardActivity, + "鑾峰彇鍗″彿澶辫触", + Toast.LENGTH_SHORT + ).show() + } + } else { + Toast.makeText( + this@NewCardActivity, + "褰撳墠宸茶鍗★紝涓嶅彲鍐嶆璇诲崱", + Toast.LENGTH_SHORT + ).show() + } + + } + + override fun onDestroy() { + super.onDestroy() + // 娓呯悊NFC宸ュ叿绫讳腑鐨凴xJava璁㈤槄锛岄槻姝㈠唴瀛樻硠婕� + try { + NfcReadHelper.getInstance(intent, this).clearDisposables() + NfcWreatHelper.getInstance(intent, this).clearDisposables() + // 纭繚鍋滄鍔ㄧ敾锛岄伩鍏嶅唴瀛樻硠婕� + binding.nfcProgressWheel.stopSpinning() + } catch (e: Exception) { + e.printStackTrace() + } + } + + override fun onActivityResult(requestCode: Int, resultCode: Int, data: Intent?) { + super.onActivityResult(requestCode, resultCode, data) + if (requestCode == REQUEST_CODE_NFC_WRITE && resultCode == RESULT_OK) { + // 鍐欏崱鎴愬姛锛屽叧闂綋鍓岮ctivity + 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 fbe415c..ab3ae13 100644 --- a/generallibrary/src/main/java/com/dayu/general/activity/NfcWreatActivity.kt +++ b/generallibrary/src/main/java/com/dayu/general/activity/NfcWreatActivity.kt @@ -14,6 +14,7 @@ import com.dayu.general.bean.card.DebugCard import com.dayu.general.bean.card.UserCard import com.dayu.general.bean.net.CardInfoResult +import com.dayu.general.bean.net.ClientInfo import com.dayu.general.dao.BaseDaoSingleton import com.dayu.general.databinding.ActivityNfcWriteGeBinding import com.dayu.general.net.ApiManager @@ -100,6 +101,8 @@ private var projectNumber: String = "" private var cardInfo: CardInfoResult? = null + + private var clientInfo: ClientInfo? = null override fun onCreate(savedInstanceState: Bundle?) { super.onCreate(savedInstanceState) @@ -120,6 +123,7 @@ orderNumber = intent?.getStringExtra("orderNumber") ?: "" operationType = CardOperationType.fromCode(operationTypeCode) cardInfo = intent?.getSerializableExtra("cardInfo") as? CardInfoResult + clientInfo = intent?.getSerializableExtra("clientInfo") as? ClientInfo // 鑾峰彇鍏呭�肩浉鍏抽噾棰� rechargeAmount = intent?.getDoubleExtra("rechargeAmount", 0.0) ?: 0.0 @@ -681,6 +685,10 @@ putExtra("cardInfo", it) } + // 浼犻�掑鎴蜂俊鎭璞� + clientInfo?.let { + putExtra("clientInfo", it) + } startActivity(this) } diff --git a/generallibrary/src/main/java/com/dayu/general/activity/SearchUserListActivity.kt b/generallibrary/src/main/java/com/dayu/general/activity/SearchUserListActivity.kt index a4282a2..b47b11b 100644 --- a/generallibrary/src/main/java/com/dayu/general/activity/SearchUserListActivity.kt +++ b/generallibrary/src/main/java/com/dayu/general/activity/SearchUserListActivity.kt @@ -91,7 +91,7 @@ userAdapter?.setOnItemClickListener { user -> // 澶勭悊鐢ㄦ埛鐐瑰嚮浜嬩欢 // 浼犻�掔敤鎴蜂俊鎭埌寮�鍗$晫闈� - val intent = Intent(this, NewCard2Activity::class.java) + val intent = Intent(this, NewCardActivity::class.java) intent.putExtra("clientId", user.clientId) startActivity(intent) } diff --git a/generallibrary/src/main/java/com/dayu/general/bean/net/NewCardInfo.kt b/generallibrary/src/main/java/com/dayu/general/bean/net/NewCardInfo.kt index 6ceaf69..30f37a4 100644 --- a/generallibrary/src/main/java/com/dayu/general/bean/net/NewCardInfo.kt +++ b/generallibrary/src/main/java/com/dayu/general/bean/net/NewCardInfo.kt @@ -1,5 +1,7 @@ package com.dayu.general.bean.net +import java.io.Serializable + // 鏀粯鏂瑰紡鏁版嵁绫� data class PaymentMethod( val id: String, @@ -30,7 +32,7 @@ } // 鐢ㄦ埛淇℃伅鏁版嵁绫� -data class ClientInfo( +data class ClientInfo ( val clientId: String, val clientNum: String, val name: String, @@ -41,4 +43,4 @@ val address: String, val cardCount: Int, val operateDt: String -) +) : Serializable -- Gitblit v1.8.0