From 80eb39909e0d5c181dc8d6e282a292146ec51e21 Mon Sep 17 00:00:00 2001 From: zuoxiao <lf_zuo@163.com> Date: 星期三, 25 六月 2025 14:36:04 +0800 Subject: [PATCH] refactor(card): 重构卡片制作流程并添加项目号支持 --- generallibrary/src/main/java/com/dayu/general/model/CardInfoModel.kt | 26 generallibrary/src/main/java/com/dayu/general/tool/NfcWreatHelper.kt | 14 generallibrary/src/main/java/com/dayu/general/activity/MainActivity.kt | 112 ++++ generallibrary/src/main/java/com/dayu/general/tool/BaseCommon.kt | 2 generallibrary/src/main/java/com/dayu/general/activity/CardWriteSuccessActivity.kt | 2 generallibrary/src/main/java/com/dayu/general/activity/ManagerReadActivity.kt | 293 ++++++++--- generallibrary/src/main/java/com/dayu/general/BaseApplication.kt | 7 generallibrary/src/main/java/com/dayu/general/activity/CardReplaceActivity.kt | 94 --- generallibrary/src/main/java/com/dayu/general/activity/NfcWreatActivity.kt | 634 +++++++++++++++++-------- generallibrary/src/main/java/com/dayu/general/tool/CardOperationType.kt | 35 + README.md | 2 generallibrary/src/main/java/com/dayu/general/activity/NewCard2Activity.kt | 5 generallibrary/src/main/res/layout/activity_manager_read.xml | 28 + generallibrary/src/main/java/com/dayu/general/activity/RechargeDetailActivity.kt | 21 generallibrary/src/main/java/com/dayu/general/bean/net/NewCardInfo.kt | 4 generallibrary/src/main/res/layout/activity_card_replace.xml | 153 ++--- generallibrary/src/main/java/com/dayu/general/activity/ManageListActivity.kt | 8 generallibrary/src/main/java/com/dayu/general/activity/CardReturnActivity.kt | 2 18 files changed, 935 insertions(+), 507 deletions(-) diff --git a/README.md b/README.md index 0e4714c..2666be9 100644 --- a/README.md +++ b/README.md @@ -592,7 +592,7 @@ private fun getPaymentMethods() { ApiManager.getInstance().requestGetLoading( this, - "sell/paymentmethod/get", + "terminal/paymentmethod/get", PaymentMethodResponse::class.java, null, object : SubscriberListener<BaseResponse<PaymentMethodResponse>>() { diff --git a/generallibrary/src/main/java/com/dayu/general/BaseApplication.kt b/generallibrary/src/main/java/com/dayu/general/BaseApplication.kt index dd81a63..62bd69b 100644 --- a/generallibrary/src/main/java/com/dayu/general/BaseApplication.kt +++ b/generallibrary/src/main/java/com/dayu/general/BaseApplication.kt @@ -55,6 +55,13 @@ } /** + * 鑾峰彇MainActivity瀹炰緥 + */ + fun getMainActivity(): com.dayu.general.activity.MainActivity? { + return mainActivityInstance + } + + /** * 璇锋眰鑾峰彇姘翠环锛屽鏋滀负绌哄垯璋冪敤MainActivity鐨勮幏鍙栨柟娉� */ fun requestWaterPrice(): Double { diff --git a/generallibrary/src/main/java/com/dayu/general/activity/CardReplaceActivity.kt b/generallibrary/src/main/java/com/dayu/general/activity/CardReplaceActivity.kt index e20cec0..a2a3283 100644 --- a/generallibrary/src/main/java/com/dayu/general/activity/CardReplaceActivity.kt +++ b/generallibrary/src/main/java/com/dayu/general/activity/CardReplaceActivity.kt @@ -66,8 +66,6 @@ cardNum = intent.getStringExtra("cardNum") initView() - // 鑾峰彇鏀粯鏂瑰紡 - getPaymentMethods() // 鏃犺鏄惁鏈塩lientNum锛岄兘鍏堟樉绀鸿鍗$晫闈紝绛夊緟鐢ㄦ埛鍒锋柊鍗� resetToReadingState() @@ -85,100 +83,8 @@ } } - /** - * 鑾峰彇鏀粯鏂瑰紡鍒楄〃 - */ - private fun getPaymentMethods() { - ApiManager.getInstance().requestGetLoading( - this, - "sell/paymentmethod/get", - PaymentMethodResponse::class.java, - null, - object : SubscriberListener<BaseResponse<PaymentMethodResponse>>() { - override fun onNext(response: BaseResponse<PaymentMethodResponse>) { - if (response.success) { - // 鑾峰彇鏀粯鏂瑰紡鍒楄〃 - val paymentMethods = response.content?.obj ?: listOf() - if (paymentMethods.isNotEmpty()) { - paymentMethodList = paymentMethods - // 鏇存柊鏀粯鏂瑰紡鏄剧ず - updatePaymentMethodRadioGroup() - } - } else { - Toast.makeText( - this@CardReplaceActivity, - "鑾峰彇鏀粯鏂瑰紡澶辫触: ${response.msg}", - Toast.LENGTH_SHORT - ).show() - } - } - override fun onError(e: Throwable?) { - super.onError(e) - Toast.makeText( - this@CardReplaceActivity, - "鑾峰彇鏀粯鏂瑰紡澶辫触: ${e?.message ?: "缃戠粶寮傚父"}", - Toast.LENGTH_SHORT - ).show() - } - } - ) - } - /** - * 鏇存柊鏀粯鏂瑰紡RadioGroup - */ - private fun updatePaymentMethodRadioGroup() { - // 娓呯┖鍘熸湁RadioButton - binding.paymentMethodGroup.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.paymentMethodGroup.addView(radioButton) - - // 榛樿閫変腑绗竴涓� - if (index == 0) { - radioButton.isChecked = true - paymentMethod = method.name - paymentId = method.id - } - } - - // 璁剧疆鏀粯鏂瑰紡閫夋嫨鐩戝惉 - binding.paymentMethodGroup.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 - } - } - } - } /** * 閲嶇疆鍒拌鍗$姸鎬� diff --git a/generallibrary/src/main/java/com/dayu/general/activity/CardReturnActivity.kt b/generallibrary/src/main/java/com/dayu/general/activity/CardReturnActivity.kt index 708154a..2da04cd 100644 --- a/generallibrary/src/main/java/com/dayu/general/activity/CardReturnActivity.kt +++ b/generallibrary/src/main/java/com/dayu/general/activity/CardReturnActivity.kt @@ -381,7 +381,7 @@ val intent = Intent(this, NfcWreatActivity::class.java).apply { putExtra("cardAddr", cardNumber) - putExtra("operationTypeCode", CardOperationType.ReturnCard.code) // 浣跨敤杩旇繕绫诲瀷杩涜鍐欏崱 + putExtra("operationTypeCode", CardOperationType.SUPPLEMENT.code) // 浣跨敤杩旇繕绫诲瀷杩涜鍐欏崱 putExtra("orderNumber", returnResult.orderNo) putExtra("returnAmount", returnAmount) putExtra("userCard", updatedUserCard as java.io.Serializable) 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 3dbd8ca..c191a4e 100644 --- a/generallibrary/src/main/java/com/dayu/general/activity/CardWriteSuccessActivity.kt +++ b/generallibrary/src/main/java/com/dayu/general/activity/CardWriteSuccessActivity.kt @@ -53,7 +53,7 @@ binding.successMessage.text = message } - CardOperationType.ReturnCard -> { + CardOperationType.SUPPLEMENT -> { // 璁剧疆鏍囬 binding.titleBar.setCenterText("杩旇繕鎴愬姛") diff --git a/generallibrary/src/main/java/com/dayu/general/activity/MainActivity.kt b/generallibrary/src/main/java/com/dayu/general/activity/MainActivity.kt index 81b20a0..ef6d869 100644 --- a/generallibrary/src/main/java/com/dayu/general/activity/MainActivity.kt +++ b/generallibrary/src/main/java/com/dayu/general/activity/MainActivity.kt @@ -9,6 +9,7 @@ import android.widget.Toast import androidx.core.content.ContextCompat import androidx.fragment.app.Fragment +import androidx.lifecycle.lifecycleScope import com.dayu.baselibrary.net.subscribers.SubscriberListener import com.dayu.baselibrary.utils.ToastUtil import com.dayu.general.BaseApplication @@ -16,9 +17,13 @@ import com.dayu.general.adapter.TabAdapter import com.dayu.general.bean.net.UserInfoResult import com.dayu.general.bean.net.WaterPriceResult +import com.dayu.general.dao.BaseDaoSingleton import com.dayu.general.databinding.ActivityMainBinding import com.dayu.general.net.ApiManager import com.dayu.general.net.BaseResponse +import com.dayu.general.tool.CardOperationType +import com.tencent.bugly.crashreport.CrashReport +import kotlinx.coroutines.launch class MainActivity : BaseNfcActivity() { @@ -232,4 +237,111 @@ } return super.onKeyDown(keyCode, event) } + + /** + * 鍚戞湇鍔″櫒涓婃姤鍐欏崱鎿嶄綔缁撴灉 + * 鍐欏崱鎴愬姛鍚庤皟鐢ㄦ鏂规硶閫氱煡鏈嶅姟鍣ㄦ搷浣滃畬鎴愶紝鎴愬姛鍚庢洿鏂版湰鍦版暟鎹簱isReported涓簍rue + * + * @param cardAddr 鍗″湴鍧�/鍗″彿 + * @param operationTypeCode 鎿嶄綔绫诲瀷浠g爜 + * @param orderNumber 璁㈠崟鍙� + * @param regionNumber 鍖哄煙鍙� + * @param projectNumber 椤圭洰鍙� + */ + fun postCardData( + cardAddr: String, + operationTypeCode: Int, + orderNumber: String = "", + regionNumber: String = "", + projectNumber: String = "" + ) { + val map = mutableMapOf<String, Any>() + + // 娣诲姞鍗″湴鍧�鍙傛暟 + if (cardAddr.isNotEmpty()) { + map["cardAddr"] = cardAddr + } + + // 娣诲姞鎿嶄綔绫诲瀷鍙傛暟 + // 鍒ゆ柇鏄惁涓虹鐞嗗崱鍒朵綔鎿嶄綔绫诲瀷锛�100-108锛夛紝濡傛灉鏄垯浼犻�扢ANAGEMENT_CARD_WRITE鐨勫�硷紙7锛� + val operateTypeToSend = if (operationTypeCode in 100..108) { + CardOperationType.MANAGEMENT_CARD_WRITE.code + } else { + operationTypeCode + } + map["operateType"] = operateTypeToSend + + // 娣诲姞璁㈠崟鍙峰弬鏁帮紙濡傛灉瀛樺湪锛� + if (orderNumber.isNotEmpty()) { + map["orderNumber"] = orderNumber + } + + // 娣诲姞鍖哄煙鍙峰拰椤圭洰鍙峰弬鏁� + if (regionNumber.isNotEmpty()) { + map["regionNumber"] = regionNumber + } + if (projectNumber.isNotEmpty()) { + map["projectNumber"] = projectNumber + } + + // 璋冪敤鏈嶅姟鍣ㄦ帴鍙d笂鎶ユ搷浣滅粨鏋� + ApiManager.getInstance().requestPostHideLoading( + this, + "terminal/card/termCallBack", // 缁堢鍐欏崱鍥炶皟鎺ュ彛 + String::class.java, + map, + object : SubscriberListener<BaseResponse<String>>() { + override fun onNext(t: BaseResponse<String>) { + if (t.success) { + // 涓婃姤鎴愬姛锛屾洿鏂版湰鍦版暟鎹簱isReported涓簍rue + updateCardReportedStatus(cardAddr, orderNumber) + } else { + // 涓婃姤澶辫触锛岃褰曢敊璇絾涓嶅奖鍝嶇敤鎴锋搷浣� + CrashReport.postCatchedException(Exception("涓婃姤鍐欏崱缁撴灉澶辫触: ${t.msg}")) + } + } + + override fun onError(e: Throwable?) { + super.onError(e) + // 缃戠粶閿欒锛岃褰曢敊璇絾涓嶅奖鍝嶇敤鎴锋搷浣� + CrashReport.postCatchedException(e ?: Exception("涓婃姤鍐欏崱缁撴灉缃戠粶閿欒")) + } + } + ) + } + + /** + * 鏇存柊鏈湴鏁版嵁搴撲腑鐨勪笂鎶ョ姸鎬� + * 灏咰ardRegistrationBean涓殑isReported鐘舵�佽缃负true + * + * @param cardNumber 鍗″彿 + * @param orderNumber 璁㈠崟鍙� + */ + private fun updateCardReportedStatus(cardNumber: String, orderNumber: String = "") { + lifecycleScope.launch { + try { + val cardRegistrationDao = BaseDaoSingleton.getInstance(this@MainActivity) + .cardRegistrationDao() + + // 鏍规嵁璁㈠崟鍙锋煡鎵綜ardRegistrationBean璁板綍 + val cardRegistration = if (orderNumber.isNotEmpty()) { + cardRegistrationDao.getByOrderId(orderNumber) + } else { + // 濡傛灉娌℃湁璁㈠崟鍙凤紝鍒欓�氳繃鍗″彿鏌ユ壘 + cardRegistrationDao.getByCardNumber(cardNumber) + } + + if (cardRegistration != null) { + // 鍒涘缓鏇存柊鍚庣殑CardRegistrationBean瀵硅薄锛屽皢isReported璁剧疆涓簍rue + val updatedCardRegistration = cardRegistration.copy(isReported = true) + // 鏇存柊鏁版嵁搴撹褰� + cardRegistrationDao.update(updatedCardRegistration) + } + } catch (e: Exception) { + // 璁板綍寮傚父淇℃伅锛屼絾涓嶅奖鍝嶇敤鎴锋搷浣� + CrashReport.postCatchedException(e) + e.printStackTrace() + } + } + } } \ No newline at end of file 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 1663bd6..d32eab1 100644 --- a/generallibrary/src/main/java/com/dayu/general/activity/ManageListActivity.kt +++ b/generallibrary/src/main/java/com/dayu/general/activity/ManageListActivity.kt @@ -24,7 +24,7 @@ binding?.tvAreaCard?.setOnClickListener { var intent = Intent(this, ManagerReadActivity::class.java).apply { putExtra("cardType", CardCommon.REGION_CARD) - putExtra("operationTypeCode", CardOperationType.RegionCard.code) + putExtra("operationTypeCode", CardOperationType.RegionCardMake.code) } startActivity(intent) } @@ -33,7 +33,7 @@ binding?.tvCheckCard?.setOnClickListener { var intent = Intent(this, ManagerReadActivity::class.java).apply { putExtra("cardType", CardCommon.CHECK_CARD) - putExtra("operationTypeCode", CardOperationType.CheckCard.code) + putExtra("operationTypeCode", CardOperationType.CheckCardMake.code) } startActivity(intent) } @@ -42,7 +42,7 @@ binding?.tvDebugCard?.setOnClickListener { var intent = Intent(this, ManagerReadActivity::class.java).apply { putExtra("cardType", CardCommon.DEBUG_CARD) - putExtra("operationTypeCode", CardOperationType.DebugCard.code) + putExtra("operationTypeCode", CardOperationType.DebugCardMake.code) } startActivity(intent) } @@ -51,7 +51,7 @@ binding?.tvCleanCard?.setOnClickListener { var intent = Intent(this, ManagerReadActivity::class.java).apply { putExtra("cardType", CardCommon.CLEAN_CARD_TYPE) - putExtra("operationTypeCode", CardOperationType.CleanCard.code) + putExtra("operationTypeCode", CardOperationType.CleanCardMake.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 a90feb8..a58bf9a 100644 --- a/generallibrary/src/main/java/com/dayu/general/activity/ManagerReadActivity.kt +++ b/generallibrary/src/main/java/com/dayu/general/activity/ManagerReadActivity.kt @@ -15,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.BaseCommon.Companion.protocol import com.dayu.general.tool.CardCommon import com.dayu.general.tool.NfcReadHelper @@ -48,18 +49,34 @@ 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.projectNumberLayout.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 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) { @@ -68,35 +85,96 @@ } } }) + + // 涓洪」鐩彿杈撳叆妗嗘坊鍔犺緭鍏ラ獙璇侊紙鑼冨洿1-255锛� + binding.projectNumberEt.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.isNotEmpty()) { + try { + val number = text.toInt() + if (number > 255) { + binding.projectNumberEt.setText("255") + binding.projectNumberEt.setSelection(3) + } else if (number < 1 && text.length > 1) { + binding.projectNumberEt.setText("1") + binding.projectNumberEt.setSelection(1) + } + } catch (e: NumberFormatException) { + // 濡傛灉杈撳叆鐨勪笉鏄暟瀛楋紝娓呯┖ + binding.projectNumberEt.setText("") + } + } + } + }) } + CardCommon.CHECK_CARD, CardCommon.DEBUG_CARD, CardCommon.CLEAN_CARD_TYPE -> { - // 妫�鏌ュ崱銆佽皟璇曞崱銆佹竻闆跺崱锛氶殣钘忓尯鍩熷彿杈撳叆妗嗭紝鍙樉绀哄崱鍦板潃鍜屽娉� + // 妫�鏌ュ崱銆佽皟璇曞崱銆佹竻闆跺崱锛氶殣钘忓尯鍩熷彿鍜岄」鐩彿杈撳叆妗嗭紝鍙樉绀哄崱鍦板潃鍜屽娉� binding.regionNumberLayout.visibility = View.GONE + binding.projectNumberLayout.visibility = View.GONE } + else -> { - // 鍏朵粬鍗$被鍨嬶細闅愯棌鍖哄煙鍙疯緭鍏ユ + // 鍏朵粬鍗$被鍨嬶細闅愯棌鍖哄煙鍙峰拰椤圭洰鍙疯緭鍏ユ binding.regionNumberLayout.visibility = View.GONE + binding.projectNumberLayout.visibility = View.GONE } } - + binding.btnNext.setOnClickListener { - if (viewModel.cardNumber.value.isNullOrEmpty()) { + if (viewModel.cardNumber.get().isNullOrEmpty()) { ToastUtil.show("璇峰厛璇诲彇鍗″彿") } else if (cardType == CardCommon.REGION_CARD) { - // 鍖哄煙琛ㄥ彿鍗¢渶瑕侀獙璇佸尯鍩熷彿 - val regionNumber = viewModel.regionNumber.value + // 鍖哄煙琛ㄥ彿鍗¢渶瑕侀獙璇佸尯鍩熷彿鍜岄」鐩彿 + val regionNumber = viewModel.regionNumber.get() + val projectNumber = viewModel.projectNumber.get() + if (regionNumber.isNullOrEmpty()) { ToastUtil.show("璇疯緭鍏ュ尯鍩熷彿") } else if (regionNumber.length != 12) { ToastUtil.show("鍖哄煙鍙峰繀椤讳负12浣嶆暟瀛�") + } else if (projectNumber.isNullOrEmpty()) { + ToastUtil.show("璇疯緭鍏ラ」鐩彿") } else { - postCardData(cardType, viewModel.cardNumber.value!!, getRemark(), regionNumber) + try { + val projectNum = projectNumber.toInt() + if (projectNum < 1 || projectNum > 255) { + ToastUtil.show("椤圭洰鍙峰繀椤诲湪1-255鑼冨洿鍐�") + } else { + postCardData( + cardType, + viewModel.cardNumber.get()!!, + getRemark(), + regionNumber, + projectNumber + ) + } + } catch (e: NumberFormatException) { + ToastUtil.show("椤圭洰鍙峰繀椤讳负鏁板瓧") + } } } else { - // 鍏朵粬鍗$被鍨嬶紙鍖呮嫭璋冭瘯鍗°�佹鏌ュ崱銆佹竻闆跺崱锛変笉闇�瑕佸尯鍩熷彿 - postCardData(cardType, viewModel.cardNumber.value!!, getRemark()) + // 鍏朵粬鍗$被鍨嬶紙鍖呮嫭璋冭瘯鍗°�佹鏌ュ崱銆佹竻闆跺崱锛変笉闇�瑕佸尯鍩熷彿鍜岄」鐩彿 + postCardData(cardType, viewModel.cardNumber.get()!!, getRemark()) } } } @@ -115,7 +193,7 @@ /** * 鑾峰彇澶囨敞淇℃伅 */ - fun getRemark(): String = viewModel.remark.value ?: "" + fun getRemark(): String = viewModel.remark.get() ?: "" override fun onNfcBack(intent: Intent) { // 澶勭悊NFC璇诲彇缁撴灉 @@ -132,81 +210,134 @@ } -private fun bytesToHexString(bytes: ByteArray?): String? { - if (bytes == null || bytes.isEmpty()) return null - val sb = StringBuilder() - for (b in bytes) { - sb.append(String.format("%02X", b)) - } - return sb.toString() -} - - -/** - * 鎻愪氦鏁版嵁 - 涓嶅甫鍖哄煙鍙风殑鐗堟湰 - */ -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>() - - if (cardAddr.isNotEmpty()) { - map["cardAddr"] = cardAddr + private fun bytesToHexString(bytes: ByteArray?): String? { + if (bytes == null || bytes.isEmpty()) return null + val sb = StringBuilder() + for (b in bytes) { + sb.append(String.format("%02X", b)) + } + return sb.toString() } - if (cardType.isNotEmpty()) { -// map["cardType"] = cardType - map["cardType"] = "5" + + /** + * 鎻愪氦鏁版嵁 - 涓嶅甫鍖哄煙鍙风殑鐗堟湰 + */ + fun postCardData(cardType: String, cardAddr: String, remark: String) { + postCardData(cardType, cardAddr, remark, null, null) } - if (remark.isNotEmpty()) { - map["remarks"] = remark + + /** + * 鎻愪氦鏁版嵁 - 甯﹀尯鍩熷彿鐨勭増鏈� + */ + fun postCardData(cardType: String, cardAddr: String, remark: String, regionNumber: String?) { + postCardData(cardType, cardAddr, remark, regionNumber, null) } - - // 濡傛灉鏄尯鍩熻〃鍙峰崱骞朵笖鏈夊尯鍩熷彿锛屾坊鍔犲埌璇锋眰鍙傛暟涓� - if (cardType == CardCommon.REGION_CARD && !regionNumber.isNullOrEmpty()) { - map["regionNumber"] = regionNumber - } - - // 浣跨敤姝g‘鐨勭被鍨嬪弬鏁� - ApiManager.getInstance().requestPostLoading( - this, - "/sell/card/create_manager_card", - String::class.java, - map, - object : SubscriberListener<BaseResponse<String>>() { - override fun onNext(t: BaseResponse<String>) { - if (t.success) { - var intent = Intent(this@ManagerReadActivity, NfcWreatActivity::class.java).apply { - putExtra("cardAddr", cardAddr) - putExtra("orderId", t.content) - putExtra("cardType", cardType) - if (cardType == CardCommon.REGION_CARD && !regionNumber.isNullOrEmpty()) { - putExtra("regionNumber", regionNumber) - } + + /** + * 鎻愪氦鏁版嵁 - 瀹屾暣鐗堟湰锛屾敮鎸佸尯鍩熷彿鍜岄」鐩彿 + */ + fun postCardData( + cardType: String, + cardAddr: String, + remark: String, + regionNumber: String?, + projectNumber: String? + ) { + + val map = mutableMapOf<String, Any>() + + if (cardAddr.isNotEmpty()) { + map["cardAddr"] = cardAddr + } + + if (cardType.isNotEmpty()) { + // 鏍规嵁鍗$被鍨嬭缃搴旂殑鏁板瓧缂栧彿 + val cardTypeNumber = when (cardType) { + CardCommon.REGION_CARD -> "2" // 璁剧疆鍖哄煙琛ㄥ彿鍗� + CardCommon.ELECTRIC_PRICE_CARD -> "3" // 鍙栨暟鍗� + CardCommon.CHECK_CARD -> "4" // 妫�鏌ュ崱 + CardCommon.DEBUG_CARD -> "5" // 娴嬭瘯鍗� + CardCommon.CLEAN_CARD_TYPE -> "6" // 娓呴浂鍗� + CardCommon.IP_CARD -> "7" // IP璁剧疆鍗� + CardCommon.AREA_CARD -> "8" // 鍩熷悕璁剧疆鍗★紙鍖哄煙璁剧疆鍗★級 + CardCommon.GPS_CARD -> "9" // GPS鍗� + CardCommon.VALVE_TIME_CARD -> "10" // 鏃堕棿閰嶇疆鍗★紙閰嶇疆寮�鍏抽榾鏃堕棿锛� + else -> "5" // 榛樿鍊� + } + map["cardType"] = cardTypeNumber + } + if (remark.isNotEmpty()) { + map["remarks"] = remark + } + + // 濡傛灉鏄尯鍩熻〃鍙峰崱骞朵笖鏈夊尯鍩熷彿锛屾坊鍔犲埌璇锋眰鍙傛暟涓� + if (cardType == CardCommon.REGION_CARD && !regionNumber.isNullOrEmpty()) { + map["regionNumber"] = regionNumber + } + + // 濡傛灉鏄尯鍩熻〃鍙峰崱骞朵笖鏈夐」鐩彿锛屾坊鍔犲埌璇锋眰鍙傛暟涓� + if (cardType == CardCommon.REGION_CARD && !projectNumber.isNullOrEmpty()) { + map["projectNumber"] = projectNumber + } + map["protocol"] = protocol + map["securityCode"]="A0B1C289" + + // 浣跨敤姝g‘鐨勭被鍨嬪弬鏁� + ApiManager.getInstance().requestPostLoading( + this, + "terminal/card/createManagementCard", + String::class.java, + map, + object : SubscriberListener<BaseResponse<String>>() { + override fun onNext(t: BaseResponse<String>) { + if (t.success) { + var intent = + Intent(this@ManagerReadActivity, NfcWreatActivity::class.java).apply { + putExtra("cardAddr", cardAddr) + putExtra("orderNumber", t.content) + putExtra("cardType", cardType) + + // 鏍规嵁鍗$被鍨嬭缃搷浣滅被鍨嬩唬鐮� + val operationTypeCode = when (cardType) { + CardCommon.REGION_CARD -> 100 // 鍖哄煙琛ㄥ彿鍗℃搷浣滅被鍨� + CardCommon.CHECK_CARD -> 101 // 妫�鏌ュ崱鎿嶄綔绫诲瀷 + CardCommon.DEBUG_CARD -> 102 // 璋冭瘯鍗℃搷浣滅被鍨� + CardCommon.CLEAN_CARD_TYPE -> 103 // 娓呴浂鍗℃搷浣滅被鍨� + CardCommon.IP_CARD -> 104 // IP璁剧疆鍗℃搷浣滅被鍨� + CardCommon.AREA_CARD -> 105 // 鍩熷悕璁剧疆鍗℃搷浣滅被鍨� + CardCommon.GPS_CARD -> 106 // GPS鍗℃搷浣滅被鍨� + CardCommon.VALVE_TIME_CARD -> 107 // 鏃堕棿閰嶇疆鍗℃搷浣滅被鍨� + CardCommon.ELECTRIC_PRICE_CARD -> 108 // 鍙栨暟鍗℃搷浣滅被鍨� + else -> -1 + } + putExtra("operationTypeCode", operationTypeCode) + + // 浼犻�掑尯鍩熷彿鍜岄」鐩彿锛堜粎褰撴槸鍖哄煙琛ㄥ彿鍗℃椂锛� + if (cardType == CardCommon.REGION_CARD && !regionNumber.isNullOrEmpty()) { + putExtra("regionNumber", regionNumber) + } + if (cardType == CardCommon.REGION_CARD && !projectNumber.isNullOrEmpty()) { + putExtra("projectNumber", projectNumber) + } + } + this@ManagerReadActivity.finish() + startActivity(intent) + } else { + // 澶勭悊鎼滅储澶辫触鐨勬儏鍐� + ToastUtil.show(t.msg) } - this@ManagerReadActivity.finish() - startActivity(intent) - } else { - // 澶勭悊鎼滅储澶辫触鐨勬儏鍐� - ToastUtil.show(t.msg) + } + + override fun onError(e: Throwable?) { + super.onError(e) + ToastUtil.show("鎺ュ彛璋冨彇澶辫触: ${e?.message ?: "鏈煡閿欒"}") } } - - override fun onError(e: Throwable?) { - super.onError(e) - ToastUtil.show("鎼滅储澶辫触: ${e?.message ?: "鏈煡閿欒"}") - } - } - ) + ) -} + } } \ No newline at end of file diff --git a/generallibrary/src/main/java/com/dayu/general/activity/NewCard2Activity.kt b/generallibrary/src/main/java/com/dayu/general/activity/NewCard2Activity.kt index 2eb3f4c..7d370bd 100644 --- a/generallibrary/src/main/java/com/dayu/general/activity/NewCard2Activity.kt +++ b/generallibrary/src/main/java/com/dayu/general/activity/NewCard2Activity.kt @@ -24,6 +24,7 @@ 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 @@ -170,7 +171,7 @@ private fun getPaymentMethods() { ApiManager.getInstance().requestGetLoading( this, - "sell/paymentmethod/get", + "terminal/paymentmethod/get", PaymentMethodResponse::class.java, null, object : SubscriberListener<BaseResponse<PaymentMethodResponse>>() { @@ -323,7 +324,7 @@ params["amount"] = rechargeAmount // 鍏呭�奸噾棰�(鍏�) params["paymentId"] = paymentId // 鏀粯鏂瑰紡ID params["remarks"] = remark // 澶囨敞 - params["protocol"] = "p206V1_0_1" // 鍗忚 + params["protocol"] = protocol // 鍗忚 params["operator"] = BaseApplication.userId // 鎿嶄綔浜篒D // 鎵ц鍗$墖婵�娲籄PI璇锋眰 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 b8bd087..8539f83 100644 --- a/generallibrary/src/main/java/com/dayu/general/activity/NfcWreatActivity.kt +++ b/generallibrary/src/main/java/com/dayu/general/activity/NfcWreatActivity.kt @@ -7,7 +7,11 @@ import com.dayu.baselibrary.tools.nfc.NFCCallBack import com.dayu.baselibrary.utils.MornyUtil import com.dayu.baselibrary.utils.ToastUtil +import com.dayu.general.BaseApplication +import com.dayu.general.bean.card.AreaCard +import com.dayu.general.bean.card.CheckCard import com.dayu.general.bean.card.ClearCard +import com.dayu.general.bean.card.DebugCard import com.dayu.general.bean.card.UserCard import com.dayu.general.dao.BaseDaoSingleton import com.dayu.general.databinding.ActivityNfcWriteGeBinding @@ -20,39 +24,79 @@ import kotlinx.coroutines.launch /** + * NFC鍐欏崱鎿嶄綔鐣岄潰 + * + * 鍔熻兘璇存槑锛� + * 1. 鏀寔澶氱鍗$被鍨嬬殑鍐欏崱鎿嶄綔锛堝紑鍗°�佸厖鍊笺�侀攢鍗°�佽繑杩樸�佽ˉ鎵c�佽ˉ鍗°�佹鏌ュ崱銆佸尯鍩熻〃鍙峰崱銆佽皟璇曞崱绛夛級 + * 2. 閫氳繃NFC鎶�鏈皢鏁版嵁鍐欏叆IC鍗� + * 3. 鍐欏崱鎴愬姛鍚庡悜鏈嶅姟鍣ㄤ笂鎶ユ搷浣滅粨鏋� + * 4. 鏇存柊鏈湴鏁版嵁搴撲腑鐨勫啓鍗$姸鎬� + * * @author: zuo * @date: 2021/3/30 - * @description:鍐欏崱鐣岄潰 + * @description: 鍐欏崱鐣岄潰 */ class NfcWreatActivity : BaseNfcActivity() { + + /** 鏁版嵁缁戝畾瀵硅薄 */ var binding: ActivityNfcWriteGeBinding? = null + + /** 鍗$被鍨嬫爣璇� */ var cardType = "" + + /** 鍗″湴鍧�/鍗″彿 */ var cardAddr = "" + + /** 鍗″伐鏈垂锛堝垎涓哄崟浣嶏級 */ var cardFee = 0 - // 鍏呭�肩浉鍏抽噾棰� + // ==================== 鍏呭�肩浉鍏抽噾棰� ==================== + /** 鍏呭�奸噾棰濓紙鍏冿級 */ private var rechargeAmount = 0.0 + + /** 璧犻�侀噾棰濓紙鍏冿級 */ private var bonusAmount = 0.0 - // 閿�鍗$浉鍏充俊鎭� + // ==================== 閿�鍗$浉鍏充俊鎭� ==================== + /** 閫�娆鹃噾棰濓紙鍏冿級 */ private var refundAmount = 0.0 + + /** 鍗″唴浣欓锛堝厓锛� */ private var cardBalance = 0.0 - // 杩旇繕鐩稿叧淇℃伅 + // ==================== 杩旇繕鐩稿叧淇℃伅 ==================== + /** 杩旇繕閲戦锛堝厓锛� */ private var returnAmount = 0.0 - // 琛ユ墸鐩稿叧淇℃伅 + // ==================== 琛ユ墸鐩稿叧淇℃伅 ==================== + /** 琛ユ墸閲戦锛堝厓锛� */ private var deductAmount = 0.0 - // 琛ュ崱鐩稿叧淇℃伅 + // ==================== 琛ュ崱鐩稿叧淇℃伅 ==================== + /** 琛ュ崱宸ユ湰璐癸紙鍏冿級 */ private var cardCost = 0.0 + + /** 琛ュ崱閲戦锛堝厓锛� */ private var reissueAmount = 0.0 - //璁㈠崟缂栧彿 + /** 璁㈠崟缂栧彿 */ var orderNumber = "" + + /** 鐢ㄦ埛鍗″璞★紝鍖呭惈瑕佸啓鍏ュ崱鍐呯殑鎵�鏈夋暟鎹� */ private lateinit var userCard: UserCard - private var operationTypeCode = -1; + + /** 鎿嶄綔绫诲瀷浠g爜 */ + private var operationTypeCode = -1 + + /** 鎿嶄綔绫诲瀷鏋氫妇 */ private var operationType: CardOperationType? = null + + // ==================== 绠$悊鍗″埗浣滅浉鍏冲弬鏁� ==================== + /** 鍖哄煙鍙凤紙12浣嶆暟瀛楋級 */ + private var regionNumber: String = "" + + /** 椤圭洰鍙凤紙1-255锛� */ + private var projectNumber: String = "" override fun onCreate(savedInstanceState: Bundle?) { super.onCreate(savedInstanceState) @@ -62,9 +106,11 @@ } /** - * 鑾峰彇鏁版嵁 + * 鑾峰彇浼犲叆鐨勫垵濮嬪寲鏁版嵁 + * 浠嶪ntent涓彁鍙栧啓鍗℃墍闇�鐨勫悇绉嶅弬鏁� */ private fun getInitData() { + // 鑾峰彇鍩烘湰鍗′俊鎭� cardType = intent?.getStringExtra("cardType") ?: "" cardAddr = intent?.getStringExtra("cardAddr") ?: "" operationTypeCode = intent?.getIntExtra("operationTypeCode", -1) ?: -1 @@ -89,185 +135,282 @@ cardCost = intent?.getDoubleExtra("cardCost", 0.0) ?: 0.0 reissueAmount = intent?.getDoubleExtra("reissueAmount", 0.0) ?: 0.0 + // 鑾峰彇鍗″伐鏈垂 if (intent?.hasExtra("cardFee") == true) { cardFee = intent?.getIntExtra("cardFee", 0) ?: 0 } + + // 鑾峰彇鐢ㄦ埛鍗″璞★紙鍏煎涓嶅悓Android鐗堟湰锛� if (intent?.hasExtra("userCard") == true) { if (android.os.Build.VERSION.SDK_INT >= android.os.Build.VERSION_CODES.TIRAMISU) { userCard = intent?.getSerializableExtra("userCard", UserCard::class.java)!! } else { userCard = (intent?.getSerializableExtra("userCard") as? UserCard)!! } - } + + // 鑾峰彇鍖哄煙鍙峰拰椤圭洰鍙� + regionNumber = intent?.getStringExtra("regionNumber") ?: "" + projectNumber = intent?.getStringExtra("projectNumber") ?: "" + + // 楠岃瘉orderNumber涓嶈兘涓虹┖ + if (orderNumber.isEmpty()) { + ToastUtil.show("璁㈠崟鍙蜂笉鑳戒负绌猴紝璇烽噸鏂版搷浣�") + finish() + return + } + + // 鏍规嵁鎿嶄綔绫诲瀷璁剧疆鐣岄潰鏄剧ず鍐呭 if (operationTypeCode != -1) { - when (operationType) { - CardOperationType.CleanCard -> { - 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 -> { - var textData = StringBuilder() - textData.append("鐢ㄦ埛寮�鍗n") - if (cardFee != 0) { - textData.append("宸ユ湰璐癸細" + cardFee + "鍏僜n") - } - if (userCard.balance != 0) { - textData.append("鍏呭�奸噾棰濓細" + MornyUtil.changeF2Y(userCard.balance) + "鍏�") - } - - binding?.cardData?.text = textData.toString() - } - - CardOperationType.Recharge -> { - var textData = StringBuilder() - textData.append("鐢ㄦ埛鍏呭�糪n") - - // 鏄剧ず鍏呭�奸噾棰� - if (rechargeAmount > 0) { - textData.append( - "鍏呭�奸噾棰濓細" + String.format( - "%.2f", - rechargeAmount - ) + "鍏僜n" - ) - } - - // 鏄剧ず璧犻�侀噾棰� - if (bonusAmount > 0) { - textData.append("璧犻�侀噾棰濓細" + String.format("%.2f", bonusAmount) + "鍏僜n") - } - - // 鏄剧ず鎬婚噾棰濓紙鍐欏叆鍗″唴鐨勬�讳綑棰濓級 - if (userCard.balance != 0) { - val totalBalanceInYuan = userCard.balance / 100.0 // 杞崲涓哄厓 - textData.append( - "鍏呭�煎悗浣欓锛�" + MornyUtil.changeF2Y(userCard.balance)+ "鍏�" - ) - } - - binding?.cardData?.text = textData.toString() - } - - CardOperationType.CancelCard -> { - var textData = StringBuilder() - textData.append("閿�鍗n") - textData.append("鍗″唴浣欓锛�" + MornyUtil.changeF2Y(userCard.balance) + "鍏僜n") - textData.append("閫�娆鹃噾棰濓細" + refundAmount + "鍏�") - binding?.cardData?.text = textData.toString() - } - - CardOperationType.ReturnCard -> { - var textData = StringBuilder() - textData.append("杩旇繕\n") - textData.append("鍗″唴浣欓锛�" + MornyUtil.changeF2Y(userCard.balance) + "鍏僜n") - textData.append("杩旇繕閲戦锛�" + returnAmount + "鍏�") - binding?.cardData?.text = textData.toString() - } - - CardOperationType.DeductCard -> { - var textData = StringBuilder() - textData.append("琛ユ墸\n") - textData.append("鍗″唴浣欓锛�" + MornyUtil.changeF2Y(userCard.balance) + "鍏僜n") - textData.append("琛ユ墸閲戦锛�" + deductAmount + "鍏�") - binding?.cardData?.text = textData.toString() - } - - CardOperationType.ReplaceCard -> { - var textData = StringBuilder() - textData.append("琛ュ崱\n") - textData.append("鍗″唴浣欓锛�" + MornyUtil.changeF2Y(userCard.balance) + "鍏僜n") - if (cardCost > 0) { - textData.append("宸ユ湰璐癸細" + String.format("%.2f", cardCost) + "鍏僜n") - } - if (reissueAmount > 0) { - textData.append("琛ュ崱閲戦锛�" + String.format("%.2f", reissueAmount) + "鍏�") - } - binding?.cardData?.text = textData.toString() - } - - 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() - } + setupUIForOperationType() } - } + /** + * 鏍规嵁鎿嶄綔绫诲瀷璁剧疆鐣岄潰鏄剧ず鍐呭 + * 涓轰笉鍚岀殑鍗℃搷浣滅被鍨嬫樉绀虹浉搴旂殑鎻愮ず淇℃伅 + */ + private fun setupUIForOperationType() { + when (operationType) { + CardOperationType.CleanCardMake -> { + 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 -> { + // 寮�鍗℃搷浣滄樉绀轰俊鎭� + var textData = StringBuilder() + textData.append("鐢ㄦ埛寮�鍗n") + if (cardFee != 0) { + textData.append("宸ユ湰璐癸細" + cardFee + "鍏僜n") + } + if (userCard.balance != 0) { + textData.append("鍏呭�奸噾棰濓細" + MornyUtil.changeF2Y(userCard.balance) + "鍏�") + } + + binding?.cardData?.text = textData.toString() + } + + CardOperationType.Recharge -> { + // 鍏呭�兼搷浣滄樉绀轰俊鎭� + var textData = StringBuilder() + textData.append("鐢ㄦ埛鍏呭�糪n") + + // 鏄剧ず鍏呭�奸噾棰� + if (rechargeAmount > 0) { + textData.append( + "鍏呭�奸噾棰濓細" + String.format( + "%.2f", + rechargeAmount + ) + "鍏僜n" + ) + } + + // 鏄剧ず璧犻�侀噾棰� + if (bonusAmount > 0) { + textData.append("璧犻�侀噾棰濓細" + String.format("%.2f", bonusAmount) + "鍏僜n") + } + + // 鏄剧ず鎬婚噾棰濓紙鍐欏叆鍗″唴鐨勬�讳綑棰濓級 + if (userCard.balance != 0) { + val totalBalanceInYuan = userCard.balance / 100.0 // 杞崲涓哄厓 + textData.append( + "鍏呭�煎悗浣欓锛�" + MornyUtil.changeF2Y(userCard.balance) + "鍏�" + ) + } + + binding?.cardData?.text = textData.toString() + } + + CardOperationType.CancelCard -> { + // 閿�鍗℃搷浣滄樉绀轰俊鎭� + var textData = StringBuilder() + textData.append("閿�鍗n") + textData.append("鍗″唴浣欓锛�" + MornyUtil.changeF2Y(userCard.balance) + "鍏僜n") + textData.append("閫�娆鹃噾棰濓細" + refundAmount + "鍏�") + binding?.cardData?.text = textData.toString() + } + + CardOperationType.SUPPLEMENT -> { + // 杩旇繕鎿嶄綔鏄剧ず淇℃伅 + var textData = StringBuilder() + textData.append("杩旇繕\n") + textData.append("鍗″唴浣欓锛�" + MornyUtil.changeF2Y(userCard.balance) + "鍏僜n") + textData.append("杩旇繕閲戦锛�" + returnAmount + "鍏�") + binding?.cardData?.text = textData.toString() + } + + CardOperationType.DeductCard -> { + // 琛ユ墸鎿嶄綔鏄剧ず淇℃伅 + var textData = StringBuilder() + textData.append("琛ユ墸\n") + textData.append("鍗″唴浣欓锛�" + MornyUtil.changeF2Y(userCard.balance) + "鍏僜n") + textData.append("琛ユ墸閲戦锛�" + deductAmount + "鍏�") + binding?.cardData?.text = textData.toString() + } + + CardOperationType.ReplaceCard -> { + // 琛ュ崱鎿嶄綔鏄剧ず淇℃伅 + var textData = StringBuilder() + textData.append("琛ュ崱\n") + textData.append("鍗″唴浣欓锛�" + MornyUtil.changeF2Y(userCard.balance) + "鍏僜n") + if (cardCost > 0) { + textData.append("宸ユ湰璐癸細" + String.format("%.2f", cardCost) + "鍏僜n") + } + if (reissueAmount > 0) { + textData.append("琛ュ崱閲戦锛�" + String.format("%.2f", reissueAmount) + "鍏�") + } + binding?.cardData?.text = textData.toString() + } + + CardOperationType.CheckCardMake -> { + // 妫�鏌ュ崱鍒朵綔鏄剧ず淇℃伅 + var textData = StringBuilder() + textData.append("妫�鏌ュ崱鍒朵綔") + binding?.cardData?.text = textData.toString() + } + + CardOperationType.RegionCardMake -> { + // 鍖哄煙琛ㄥ彿鍗″埗浣滄樉绀轰俊鎭� + var textData = StringBuilder() + textData.append("鍖哄煙琛ㄥ彿鍗″埗浣淺n") + if (regionNumber.isNotEmpty()) { + textData.append("鍖哄煙鍙凤細$regionNumber\n") + } + if (projectNumber.isNotEmpty()) { + textData.append("椤圭洰鍙凤細$projectNumber") + } + binding?.cardData?.text = textData.toString() + } + + CardOperationType.DebugCardMake -> { + // 璋冭瘯鍗″埗浣滄樉绀轰俊鎭� + var textData = StringBuilder() + textData.append("璋冭瘯鍗″埗浣�") + binding?.cardData?.text = textData.toString() + } + + + CardOperationType.CheckCardMake -> { + var textData = StringBuilder() + textData.append("鍒朵綔妫�鏌ュ崱") + binding?.cardData?.text = textData.toString() + } + + CardOperationType.DebugCardMake -> { + var textData = StringBuilder() + textData.append("鍒朵綔璋冭瘯鍗�") + binding?.cardData?.text = textData.toString() + } + + CardOperationType.CleanCardMake -> { + var textData = StringBuilder() + textData.append("鍒朵綔娓呴浂鍗�") + binding?.cardData?.text = textData.toString() + } + + CardOperationType.IpCardMake -> { + var textData = StringBuilder() + textData.append("鍒朵綔IP璁剧疆鍗�") + binding?.cardData?.text = textData.toString() + } + + CardOperationType.AreaCardMake -> { + var textData = StringBuilder() + textData.append("鍒朵綔鍩熷悕璁剧疆鍗�") + binding?.cardData?.text = textData.toString() + } + + CardOperationType.GpsCardMake -> { + var textData = StringBuilder() + textData.append("鍒朵綔GPS鍗�") + binding?.cardData?.text = textData.toString() + } + + CardOperationType.ValveTimeCardMake -> { + var textData = StringBuilder() + textData.append("鍒朵綔鏃堕棿閰嶇疆鍗�") + binding?.cardData?.text = textData.toString() + } + + CardOperationType.ElectricPriceCardMake -> { + var textData = StringBuilder() + textData.append("鍒朵綔鍙栨暟鍗�") + binding?.cardData?.text = textData.toString() + } + + null -> TODO() + CardOperationType.MANAGEMENT_CARD_WRITE -> TODO() + } + } + + /** + * NFC鍒峰崱鍥炶皟澶勭悊 + * 褰撶敤鎴峰皢鍗$墖璐磋繎璁惧鏃惰Е鍙戞鏂规硶 + * + * @param intent NFC鎰忓浘锛屽寘鍚崱鐗囦俊鎭� + */ override fun onNfcBack(intent: Intent) { + // 璇诲彇鍗″彿 val nfcReadHelper = NfcReadHelper.getInstance(intent, this) // 浣跨敤姝e父鐨刧etCardNumber()鏂规硶锛屽畠浼氳嚜鍔ㄥ叧闂繛鎺� val cardNumber = nfcReadHelper.getCardNumber() + // 楠岃瘉鍗″彿鏄惁涓庨鏈熶竴鑷� if (cardNumber.isNotEmpty() && cardNumber == cardAddr) { val nfcWreatHelper = NfcWreatHelper.getInstance(intent, this) + + // 鏍规嵁鎿嶄綔绫诲瀷鎵ц鐩稿簲鐨勫啓鍗℃搷浣� when (operationType) { - CardOperationType.CleanCard -> { - - + CardOperationType.CleanCardMake -> { + // 娓呴浂鍗℃搷浣滐紙鏆傛湭瀹炵幇鍏蜂綋閫昏緫锛� } CardOperationType.OpenCard -> { + // 寮�鍗℃搷浣滐細灏嗙敤鎴蜂俊鎭啓鍏ュ崱鐗� nfcWreatHelper.writeUserDataAsync(userCard, object : NFCCallBack { override fun isSusses(flag: Boolean, msg: String?) { // 纭繚Toast鍦ㄤ富绾跨▼涓皟鐢� runOnUiThread { if (flag) { - postCardData(cardAddr) - + // 鍐欏崱鎴愬姛锛屾洿鏂板啓鍗$姸鎬� + updateCardWrittenStatus(cardAddr) } else { ToastUtil.show("鍐欏崱澶辫触: ${msg ?: "鏈煡閿欒"}") } } } }) - } CardOperationType.Recharge -> { + // 鍏呭�兼搷浣滐細鏇存柊鍗″唴浣欓 nfcWreatHelper.writeUserDataAsync(userCard, object : NFCCallBack { override fun isSusses(flag: Boolean, msg: String?) { // 纭繚Toast鍦ㄤ富绾跨▼涓皟鐢� runOnUiThread { if (flag) { - postCardData(cardAddr) + // 鍏呭�煎啓鍗℃垚鍔燂紝鏇存柊鍐欏崱鐘舵�� + updateCardWrittenStatus(cardAddr) } else { ToastUtil.show("鍏呭�煎啓鍗″け璐�: ${msg ?: "鏈煡閿欒"}") } @@ -277,14 +420,16 @@ } CardOperationType.CancelCard -> { + // 閿�鍗℃搷浣滐細灏嗗崱绫诲瀷璁剧疆涓烘棤鏁� var userCard = UserCard() - userCard.cardType = "00"; + userCard.cardType = "00" // 璁剧疆涓烘棤鏁堝崱绫诲瀷 nfcWreatHelper.writeUserDataAsync(userCard, object : NFCCallBack { override fun isSusses(flag: Boolean, msg: String?) { // 纭繚Toast鍦ㄤ富绾跨▼涓皟鐢� runOnUiThread { if (flag) { - postCardData(cardAddr) + // 閿�鍗″啓鍗℃垚鍔燂紝鏇存柊鍐欏崱鐘舵�� + updateCardWrittenStatus(cardAddr) } else { ToastUtil.show("閿�鍗″啓鍗″け璐�: ${msg ?: "鏈煡閿欒"}") } @@ -293,13 +438,15 @@ }) } - CardOperationType.ReturnCard -> { + CardOperationType.SUPPLEMENT -> { + // 杩旇繕鎿嶄綔锛氭洿鏂板崱鍐呬綑棰� nfcWreatHelper.writeUserDataAsync(userCard, object : NFCCallBack { override fun isSusses(flag: Boolean, msg: String?) { // 纭繚Toast鍦ㄤ富绾跨▼涓皟鐢� runOnUiThread { if (flag) { - postCardData(cardAddr) + // 杩旇繕鍐欏崱鎴愬姛锛屾洿鏂板啓鍗$姸鎬� + updateCardWrittenStatus(cardAddr) } else { ToastUtil.show("杩旇繕鍐欏崱澶辫触: ${msg ?: "鏈煡閿欒"}") } @@ -309,12 +456,14 @@ } CardOperationType.DeductCard -> { + // 琛ユ墸鎿嶄綔锛氭洿鏂板崱鍐呬綑棰� nfcWreatHelper.writeUserDataAsync(userCard, object : NFCCallBack { override fun isSusses(flag: Boolean, msg: String?) { // 纭繚Toast鍦ㄤ富绾跨▼涓皟鐢� runOnUiThread { if (flag) { - postCardData(cardAddr) + // 琛ユ墸鍐欏崱鎴愬姛锛屾洿鏂板啓鍗$姸鎬� + updateCardWrittenStatus(cardAddr) } else { ToastUtil.show("琛ユ墸鍐欏崱澶辫触: ${msg ?: "鏈煡閿欒"}") } @@ -324,12 +473,14 @@ } CardOperationType.ReplaceCard -> { + // 琛ュ崱鎿嶄綔锛氬皢鍘熷崱鏁版嵁鍐欏叆鏂板崱 nfcWreatHelper.writeUserDataAsync(userCard, object : NFCCallBack { override fun isSusses(flag: Boolean, msg: String?) { // 纭繚Toast鍦ㄤ富绾跨▼涓皟鐢� runOnUiThread { if (flag) { - postCardData(cardAddr) + // 琛ュ崱鍐欏崱鎴愬姛锛屾洿鏂板啓鍗$姸鎬� + updateCardWrittenStatus(cardAddr) } else { ToastUtil.show("琛ュ崱鍐欏崱澶辫触: ${msg ?: "鏈煡閿欒"}") } @@ -338,33 +489,115 @@ }) } - CardOperationType.CheckCard -> { - // 妫�鏌ュ崱鍐欏崱閫昏緫 - ToastUtil.show("妫�鏌ュ崱鍐欏崱鎴愬姛!") - postCardData(cardAddr) + CardOperationType.CheckCardMake -> { + // 妫�鏌ュ崱鍐欏崱閫昏緫锛堝姛鑳藉崱锛屾棤闇�鍐欏叆鐢ㄦ埛鏁版嵁锛� + var checkCard = CheckCard() + nfcWreatHelper.writeDataAsync( + checkCard.getZeroBytes(), + 7, + 0, + object : NFCCallBack { + override fun isSusses(flag: Boolean, msg: String?) { + // 纭繚Toast鍦ㄤ富绾跨▼涓皟鐢� + runOnUiThread { + if (flag) { + // 妫�鏌ュ崱鍐欏崱鎴愬姛锛屾洿鏂板啓鍗$姸鎬� + updateCardWrittenStatus(cardAddr) + } else { + ToastUtil.show("妫�鏌ュ崱鍐欏崱澶辫触: ${msg ?: "鏈煡閿欒"}") + } + } + } + }) } - - CardOperationType.RegionCard -> { - // 鍖哄煙琛ㄥ彿鍗″啓鍗¢�昏緫 - ToastUtil.show("鍖哄煙琛ㄥ彿鍗″啓鍗℃垚鍔�!") - postCardData(cardAddr) + + CardOperationType.RegionCardMake -> { + // 鍖哄煙琛ㄥ彿鍗″啓鍗¢�昏緫锛堝姛鑳藉崱锛屾棤闇�鍐欏叆鐢ㄦ埛鏁版嵁锛� + var areaCard = AreaCard() + areaCard.areaNumber = regionNumber.toInt() + areaCard.projectCode = projectNumber.toInt() + nfcWreatHelper.writeDataAsync( + areaCard.getZeroBytes(), + 7, + 0, + object : NFCCallBack { + override fun isSusses(flag: Boolean, msg: String?) { + // 纭繚Toast鍦ㄤ富绾跨▼涓皟鐢� + runOnUiThread { + if (flag) { + // 鍖哄煙琛ㄥ彿鍗″啓鍗℃垚鍔燂紝鏇存柊鍐欏崱鐘舵�� + updateCardWrittenStatus(cardAddr) + } else { + ToastUtil.show("鍖哄煙琛ㄥ彿鍗″啓鍗″け璐�: ${msg ?: "鏈煡閿欒"}") + } + } + } + }) } - - CardOperationType.DebugCard -> { - // 璋冭瘯鍗″啓鍗¢�昏緫 - ToastUtil.show("璋冭瘯鍗″啓鍗℃垚鍔�!") - postCardData(cardAddr) + + + CardOperationType.DebugCardMake -> { + // 璋冭瘯鍗″啓鍗¢�昏緫锛堝姛鑳藉崱锛屾棤闇�鍐欏叆鐢ㄦ埛鏁版嵁锛� + var debugCard = DebugCard() + nfcWreatHelper.writeDataAsync( + debugCard.getZeroBytes(), + 7, + 0, + object : NFCCallBack { + override fun isSusses(flag: Boolean, msg: String?) { + // 纭繚Toast鍦ㄤ富绾跨▼涓皟鐢� + runOnUiThread { + if (flag) { + // 璋冭瘯鍗″啓鍗℃垚鍔燂紝鏇存柊鍐欏崱鐘舵�� + updateCardWrittenStatus(cardAddr) + } else { + ToastUtil.show("璋冭瘯鍗″啓鍗″け璐�: ${msg ?: "鏈煡閿欒"}") + } + } + } + }) } - + // 鏂扮殑绠$悊鍗″埗浣滄搷浣滅被鍨嬪鐞� + CardOperationType.RegionCardMake, + CardOperationType.CheckCardMake, + CardOperationType.CleanCardMake, + CardOperationType.IpCardMake, + CardOperationType.AreaCardMake, + CardOperationType.GpsCardMake, + CardOperationType.ValveTimeCardMake, + CardOperationType.ElectricPriceCardMake -> { + // 绠$悊鍗″啓鍗¢�昏緫锛堝姛鑳藉崱锛屾棤闇�鍐欏叆鐢ㄦ埛鏁版嵁锛� + val operationName = when (operationType) { + CardOperationType.RegionCardMake -> "鍖哄煙琛ㄥ彿鍗�" + CardOperationType.CheckCardMake -> "妫�鏌ュ崱" + CardOperationType.DebugCardMake -> "璋冭瘯鍗�" + CardOperationType.CleanCardMake -> "娓呴浂鍗�" + CardOperationType.IpCardMake -> "IP璁剧疆鍗�" + CardOperationType.AreaCardMake -> "鍩熷悕璁剧疆鍗�" + CardOperationType.GpsCardMake -> "GPS鍗�" + CardOperationType.ValveTimeCardMake -> "鏃堕棿閰嶇疆鍗�" + CardOperationType.ElectricPriceCardMake -> "鍙栨暟鍗�" + else -> "绠$悊鍗�" + } + ToastUtil.show("${operationName}鍐欏崱鎴愬姛!") + updateCardWrittenStatus(cardAddr) + } + null -> TODO() + CardOperationType.MANAGEMENT_CARD_WRITE -> TODO() } } else { + // 鍗″彿涓嶅尮閰嶏紝鎻愮ず鐢ㄦ埛 ToastUtil.show("鍗$墖閿欒锛屽綋鍓嶅埛鐨勫崱涓庡垰鍒氱殑鍗′笉涓�鑷�") } } /** - * 鏇存柊CardRegistrationBean涓殑isCardWritten鐘舵�佷负true + * 鏇存柊鏈湴鏁版嵁搴撲腑鐨勫啓鍗$姸鎬� + * 灏咰ardRegistrationBean涓殑isCardWritten鐘舵�佽缃负true + * 鐒跺悗璺宠浆鍒板啓鍗℃垚鍔熺晫闈紝骞堕�氱煡MainActivity璋冪敤postCardData + * + * @param cardNumber 鍗″彿 */ private fun updateCardWrittenStatus(cardNumber: String) { lifecycleScope.launch { @@ -372,27 +605,36 @@ val cardRegistrationDao = BaseDaoSingleton.getInstance(this@NfcWreatActivity) .cardRegistrationDao() - // 鏍规嵁鍗″彿鏌ユ壘CardRegistrationBean璁板綍 - val cardRegistration = cardRegistrationDao.getByCardNumber(cardNumber) + // 鏍规嵁璁㈠崟鍙锋煡鎵綜ardRegistrationBean璁板綍 + val cardRegistration = cardRegistrationDao.getByOrderId(orderNumber) + if (cardRegistration != null) { // 鍒涘缓鏇存柊鍚庣殑CardRegistrationBean瀵硅薄锛屽皢isCardWritten璁剧疆涓簍rue val updatedCardRegistration = cardRegistration.copy(isCardWritten = true) // 鏇存柊鏁版嵁搴撹褰� cardRegistrationDao.update(updatedCardRegistration) - // 鍦ㄤ富绾跨▼涓叧闂瑼ctivity + // 鍦ㄤ富绾跨▼涓叧闂瑼ctivity骞惰烦杞埌鎴愬姛椤甸潰 runOnUiThread { setResult(RESULT_OK) finish() + + // 璺宠浆鍒板啓鍗℃垚鍔熺晫闈� Intent(this@NfcWreatActivity, CardWriteSuccessActivity::class.java).apply { putExtra("cardNumber", cardNumber) - putExtra("userCard", userCard) + if (::userCard.isInitialized) { + putExtra("userCard", userCard) + } putExtra("operationTypeCode", operationTypeCode) startActivity(this) } + + // 閫氱煡MainActivity璋冪敤postCardData + notifyMainActivityToPostCardData(cardNumber) } } } catch (e: Exception) { + // 璁板綍寮傚父淇℃伅 CrashReport.postCatchedException(e) e.printStackTrace() runOnUiThread { @@ -402,40 +644,28 @@ } } - fun postCardData(cardAddr: String) { - - val map = mutableMapOf<String, Any>() - - if (cardAddr.isNotEmpty()) { - map["cardAddr"] = cardAddr - } - - map["operateType"] = operationTypeCode - if (orderNumber.isNotEmpty()) { - map["orderNumber"] = orderNumber - } - // 浣跨敤姝g‘鐨勭被鍨嬪弬鏁� - ApiManager.getInstance().requestPostLoading( - this, - "terminal/card/termCallBack", - String::class.java, - map, - object : SubscriberListener<BaseResponse<String>>() { - override fun onNext(t: BaseResponse<String>) { - if (t.success) { - updateCardWrittenStatus(cardAddr) - } else { - // 澶勭悊鎼滅储澶辫触鐨勬儏鍐� - ToastUtil.show(t.msg) - } - } - - override fun onError(e: Throwable?) { - super.onError(e) - ToastUtil.show("涓婃姤澶辫触: ${e?.message ?: "鏈煡閿欒"}") - } + /** + * 閫氱煡MainActivity璋冪敤postCardData涓婃姤鍐欏崱缁撴灉 + * + * @param cardNumber 鍗″彿 + */ + private fun notifyMainActivityToPostCardData(cardNumber: String) { + try { + val mainActivity = BaseApplication.getMainActivity() + if (mainActivity != null) { + // 璋冪敤MainActivity鐨刾ostCardData鏂规硶 + mainActivity.postCardData( + cardAddr = cardNumber, + operationTypeCode = operationTypeCode, + orderNumber = orderNumber, + regionNumber = regionNumber, + projectNumber = projectNumber + ) } - ) + } catch (e: Exception) { + e.printStackTrace() + CrashReport.postCatchedException(e) + } } diff --git a/generallibrary/src/main/java/com/dayu/general/activity/RechargeDetailActivity.kt b/generallibrary/src/main/java/com/dayu/general/activity/RechargeDetailActivity.kt index 65a9a42..97ad182 100644 --- a/generallibrary/src/main/java/com/dayu/general/activity/RechargeDetailActivity.kt +++ b/generallibrary/src/main/java/com/dayu/general/activity/RechargeDetailActivity.kt @@ -154,7 +154,7 @@ private fun getPaymentMethods() { ApiManager.getInstance().requestGetLoading( this, - "sell/paymentmethod/get", + "terminal/paymentmethod/get", PaymentMethodResponse::class.java, null, object : SubscriberListener<BaseResponse<PaymentMethodResponse>>() { @@ -322,6 +322,25 @@ 0.0 } + // 鑾峰彇褰撳墠浣欓锛堣浆鎹负鍏冿級 + val currentBalance = userCard?.let { + // 灏嗗垎杞崲涓哄厓 + it.balance / 100.0 + } ?: run { + // 濡傛灉鐢ㄦ埛鍗′负绌猴紝鍒欎娇鐢ㄦ湇鍔″櫒杩斿洖鐨勪綑棰� + cardInfo?.balance ?: 0.0 + } + + // 璁$畻鍏呭�煎悗鐨勬�讳綑棰� + val totalAmountAfterRecharge = currentBalance + rechargeAmount + bonusAmount + + // 妫�鏌ユ槸鍚﹁秴杩囨渶澶т綑棰濋檺鍒�9999.99鍏� + if (totalAmountAfterRecharge > 9999.99) { + val maxRechargeAmount = 9999.99 - currentBalance + ToastUtil.show("鍏呭�煎け璐ワ細鍏呭�煎悗浣欓涓嶈兘瓒呰繃9999.99鍏僜n褰撳墠浣欓锛�${String.format("%.2f", currentBalance)}鍏僜n鏈�澶氬彲鍏呭�硷細${String.format("%.2f", maxRechargeAmount)}鍏�") + return + } + // 璋冪敤鍏呭�兼帴鍙� callRechargeApi(rechargeAmount, bonusAmount) } 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 1d486fc..dd85942 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 @@ -3,9 +3,7 @@ // 鏀粯鏂瑰紡鏁版嵁绫� data class PaymentMethod( val id: Long, - val name: String, - val remarks: String, - val deleted: Int + val name: String ) // 鏀粯鏂瑰紡鎺ュ彛杩斿洖鏁版嵁绫� 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 f089095..48beaf6 100644 --- a/generallibrary/src/main/java/com/dayu/general/model/CardInfoModel.kt +++ b/generallibrary/src/main/java/com/dayu/general/model/CardInfoModel.kt @@ -1,28 +1,34 @@ package com.dayu.general.model -import androidx.lifecycle.MutableLiveData +import androidx.databinding.ObservableField import androidx.lifecycle.ViewModel class CardInfoModel : ViewModel() { - val cardNumber = MutableLiveData<String>() - val remark = MutableLiveData<String>() - val regionNumber = MutableLiveData<String>() + val cardNumber = ObservableField<String>() + val remark = ObservableField<String>() + val regionNumber = ObservableField<String>() + val projectNumber = ObservableField<String>() init { - cardNumber.value = "" - remark.value = "" - regionNumber.value = "" + cardNumber.set("") + remark.set("") + regionNumber.set("") + projectNumber.set("") } fun setCardNumber(number: String) { - cardNumber.value = number + cardNumber.set(number) } fun setRemark(remarkText: String) { - remark.value = remarkText + remark.set(remarkText) } fun setRegionNumber(regionNum: String) { - regionNumber.value = regionNum + regionNumber.set(regionNum) + } + + fun setProjectNumber(projectNum: String) { + projectNumber.set(projectNum) } } \ No newline at end of file diff --git a/generallibrary/src/main/java/com/dayu/general/tool/BaseCommon.kt b/generallibrary/src/main/java/com/dayu/general/tool/BaseCommon.kt index f4a4337..a52ba2e 100644 --- a/generallibrary/src/main/java/com/dayu/general/tool/BaseCommon.kt +++ b/generallibrary/src/main/java/com/dayu/general/tool/BaseCommon.kt @@ -10,7 +10,7 @@ val YuanMo: Int = 1 val QiHe: Int = 2 - + val protocol:String="p206V1_0_1" } 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 63525a7..cfe0689 100644 --- a/generallibrary/src/main/java/com/dayu/general/tool/CardOperationType.kt +++ b/generallibrary/src/main/java/com/dayu/general/tool/CardOperationType.kt @@ -10,11 +10,19 @@ object CancelCard : CardOperationType(3, "閿�鍗�") object ReplaceCard : CardOperationType(4, "琛ュ崱") object DeductCard : CardOperationType(5, "琛ユ墸") - object CleanCard : CardOperationType(6, "娓呴浂鍗�") - object CheckCard : CardOperationType(7, "妫�鏌ュ崱") - object ReturnCard : CardOperationType(8, "杩旇繕") - object RegionCard : CardOperationType(9, "鍖哄煙琛ㄥ彿鍗�") - object DebugCard : CardOperationType(10, "璋冭瘯鍗�") + object SUPPLEMENT : CardOperationType(6, "杩旇繕") + object MANAGEMENT_CARD_WRITE : CardOperationType(7, "绠$悊绫诲瀷鍗″啓鍗�") + + // 绠$悊鍗″埗浣滄搷浣滅被鍨嬶紙浣跨敤100+鐨勪唬鐮侊級 + object RegionCardMake : CardOperationType(100, "鍒朵綔鍖哄煙琛ㄥ彿鍗�") + object CheckCardMake : CardOperationType(101, "鍒朵綔妫�鏌ュ崱") + object DebugCardMake : CardOperationType(102, "鍒朵綔璋冭瘯鍗�") + object CleanCardMake : CardOperationType(103, "鍒朵綔娓呴浂鍗�") + object IpCardMake : CardOperationType(104, "鍒朵綔IP璁剧疆鍗�") + object AreaCardMake : CardOperationType(105, "鍒朵綔鍩熷悕璁剧疆鍗�") + object GpsCardMake : CardOperationType(106, "鍒朵綔GPS鍗�") + object ValveTimeCardMake : CardOperationType(107, "鍒朵綔鏃堕棿閰嶇疆鍗�") + object ElectricPriceCardMake : CardOperationType(108, "鍒朵綔鍙栨暟鍗�") companion object { fun fromCode(code: Int): CardOperationType? { @@ -24,11 +32,18 @@ 3 -> CancelCard 4 -> ReplaceCard 5 -> DeductCard - 6 -> CleanCard - 7 -> CheckCard - 8 -> ReturnCard - 9 -> RegionCard - 10 -> DebugCard + 6 -> SUPPLEMENT + 7 -> MANAGEMENT_CARD_WRITE + // 绠$悊鍗″埗浣滄搷浣滅被鍨� + 100 -> RegionCardMake + 101 -> CheckCardMake + 102 -> DebugCardMake + 103 -> CleanCardMake + 104 -> IpCardMake + 105 -> AreaCardMake + 106 -> GpsCardMake + 107 -> ValveTimeCardMake + 108 -> ElectricPriceCardMake else -> null } } diff --git a/generallibrary/src/main/java/com/dayu/general/tool/NfcWreatHelper.kt b/generallibrary/src/main/java/com/dayu/general/tool/NfcWreatHelper.kt index b80183e..c4ad095 100644 --- a/generallibrary/src/main/java/com/dayu/general/tool/NfcWreatHelper.kt +++ b/generallibrary/src/main/java/com/dayu/general/tool/NfcWreatHelper.kt @@ -78,24 +78,20 @@ * @param b 涔﹀啓鐨勫潡(浠�0寮�濮嬫暟) * @param callback 鎿嶄綔缁撴灉鍥炶皟 */ - fun writeDataAsync(str: ByteArray?, a: Int, b: Int, callback: (Boolean) -> Unit): Disposable { + fun writeDataAsync(str: ByteArray?, a: Int, b: Int, callback: NFCCallBack): Disposable { showLoading() val disposable = Observable.fromCallable { - writeData(str, a, b, object : NFCCallBack { - override fun isSusses(flag: Boolean, msg: String?) { - // 杩欎釜鍥炶皟鍦↖O绾跨▼涓紝涓嶅鐞哢I鐩稿叧鎿嶄綔 - } - }) + writeData(str, a, b, callback) } .subscribeOn(Schedulers.io()) .observeOn(AndroidSchedulers.mainThread()) .subscribe({ result -> hideLoading() - callback(result) + callback.isSusses(result, if (result) "鍐欏崱鎴愬姛" else "鍐欏崱澶辫触") }, { error -> hideLoading() error.printStackTrace() - callback(false) + callback.isSusses(false, "鍐欏崱寮傚父: ${error.message}") }) compositeDisposable.add(disposable) @@ -112,7 +108,7 @@ */ fun writeData(str: ByteArray?, a: Int, b: Int, callBack: NFCCallBack): Boolean { try { - return adapter.writeData(str, a, b, false, callBack) + return adapter.writeData(str, a, b, true, callBack) } catch (e: Exception) { e.printStackTrace() } diff --git a/generallibrary/src/main/res/layout/activity_card_replace.xml b/generallibrary/src/main/res/layout/activity_card_replace.xml index 25c864b..8ae18e2 100644 --- a/generallibrary/src/main/res/layout/activity_card_replace.xml +++ b/generallibrary/src/main/res/layout/activity_card_replace.xml @@ -107,7 +107,7 @@ android:layout_above="@+id/bottom_button_container" android:layout_below="@+id/titleBar" android:orientation="vertical" - android:visibility="gone"> + android:visibility="visible"> <ScrollView android:layout_width="match_parent" @@ -125,40 +125,40 @@ <androidx.cardview.widget.CardView android:layout_width="match_parent" android:layout_height="wrap_content" - app:cardCornerRadius="6dp" - app:cardElevation="1dp"> + app:cardCornerRadius="8dp" + app:cardElevation="3dp"> <LinearLayout android:layout_width="match_parent" android:layout_height="wrap_content" android:orientation="vertical" - android:padding="14dp"> + android:padding="20dp"> <TextView android:layout_width="match_parent" android:layout_height="wrap_content" - android:layout_marginBottom="10dp" + android:layout_marginBottom="16dp" android:text="鍗$墖淇℃伅" android:textColor="@color/base_blue_bg" - android:textSize="17sp" + android:textSize="20sp" android:textStyle="bold" /> <!-- 鏂板崱鍗″湴鍧� --> <LinearLayout android:layout_width="match_parent" android:layout_height="wrap_content" - android:layout_marginBottom="1dp" + android:layout_marginBottom="2dp" android:background="#F8F9FA" android:gravity="center_vertical" android:orientation="horizontal" - android:padding="8dp"> + android:padding="12dp"> <TextView android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="鏂板崱鍗″湴鍧�锛�" android:textColor="#333333" - android:textSize="15sp" + android:textSize="17sp" android:textStyle="bold" /> <TextView @@ -167,26 +167,29 @@ android:layout_height="wrap_content" android:layout_weight="1" android:background="#F5F5F5" - android:padding="8dp" + android:padding="12dp" android:text="--" android:textColor="#333333" - android:textSize="15sp" + android:textSize="17sp" android:textIsSelectable="true" /> </LinearLayout> + <View android:layout_width="match_parent" - android:layout_height="1dp" - android:layout_marginTop="2dp" + android:layout_height="2dp" + android:layout_marginTop="4dp" + android:layout_marginBottom="4dp" android:background="@color/base_blue_bg" /> + <!-- 鎸佸崱浜哄拰鍗$墖鐘舵�� - 鍚屼竴琛屾樉绀� --> <LinearLayout android:layout_width="match_parent" android:layout_height="wrap_content" - android:layout_marginTop="2dp" - android:layout_marginBottom="1dp" + android:layout_marginTop="4dp" + android:layout_marginBottom="2dp" android:background="#FFFFFF" android:orientation="horizontal" - android:padding="10dp"> + android:padding="12dp"> <!-- 鎸佸崱浜� --> <LinearLayout @@ -200,17 +203,17 @@ android:layout_height="wrap_content" android:text="鎸佸崱浜�" android:textColor="#333333" - android:textSize="13sp" + android:textSize="15sp" android:textStyle="bold" /> <TextView android:id="@+id/tv_user_name" android:layout_width="wrap_content" android:layout_height="wrap_content" - android:layout_marginTop="3dp" + android:layout_marginTop="6dp" android:text="--" android:textColor="#666666" - android:textSize="15sp" /> + android:textSize="17sp" /> </LinearLayout> <!-- 鍗$墖鐘舵�� --> @@ -225,17 +228,18 @@ android:layout_height="wrap_content" android:text="鍗$墖鐘舵��" android:textColor="#333333" - android:textSize="13sp" + android:textSize="15sp" android:textStyle="bold" /> <TextView android:id="@+id/tv_card_status" android:layout_width="wrap_content" android:layout_height="wrap_content" - android:layout_marginTop="3dp" + android:layout_marginTop="6dp" android:text="姝e父" android:textColor="#4CAF50" - android:textSize="15sp" /> + android:textSize="17sp" + android:textStyle="bold" /> </LinearLayout> </LinearLayout> @@ -243,18 +247,18 @@ <LinearLayout android:layout_width="match_parent" android:layout_height="wrap_content" - android:layout_marginBottom="1dp" + android:layout_marginBottom="2dp" android:background="#F8F9FA" android:gravity="center_vertical" android:orientation="horizontal" - android:padding="8dp"> + android:padding="12dp"> <TextView - android:layout_width="80dp" + android:layout_width="90dp" android:layout_height="wrap_content" android:text="鍗″彿锛�" android:textColor="#333333" - android:textSize="14sp" + android:textSize="16sp" android:textStyle="bold" /> <TextView @@ -264,25 +268,25 @@ android:layout_weight="1" android:text="--" android:textColor="#666666" - android:textSize="14sp" /> + android:textSize="16sp" /> </LinearLayout> <!-- 瀹㈡埛缂栧彿 --> <LinearLayout android:layout_width="match_parent" android:layout_height="wrap_content" - android:layout_marginBottom="1dp" + android:layout_marginBottom="2dp" android:background="#FFFFFF" android:gravity="center_vertical" android:orientation="horizontal" - android:padding="8dp"> + android:padding="12dp"> <TextView - android:layout_width="80dp" + android:layout_width="90dp" android:layout_height="wrap_content" android:text="瀹㈡埛缂栧彿锛�" android:textColor="#333333" - android:textSize="14sp" + android:textSize="16sp" android:textStyle="bold" /> <TextView @@ -292,24 +296,25 @@ android:layout_weight="1" android:text="--" android:textColor="#666666" - android:textSize="14sp" /> + android:textSize="16sp" /> </LinearLayout> <!-- 鎵嬫満鍙� --> <LinearLayout android:layout_width="match_parent" android:layout_height="wrap_content" - android:background="#FFFFFF" + android:layout_marginBottom="2dp" + android:background="#F8F9FA" android:gravity="center_vertical" android:orientation="horizontal" - android:padding="8dp"> + android:padding="12dp"> <TextView - android:layout_width="80dp" + android:layout_width="90dp" android:layout_height="wrap_content" android:text="鎵嬫満鍙凤細" android:textColor="#333333" - android:textSize="14sp" + android:textSize="16sp" android:textStyle="bold" /> <TextView @@ -319,24 +324,25 @@ android:layout_weight="1" android:text="--" android:textColor="#666666" - android:textSize="14sp" /> + android:textSize="16sp" /> </LinearLayout> + <!-- 鍗″唴浣欓 --> <LinearLayout android:layout_width="match_parent" android:layout_height="wrap_content" - android:layout_marginBottom="1dp" - android:background="#F8F9FA" + android:layout_marginBottom="2dp" + android:background="#FFFFFF" android:gravity="center_vertical" android:orientation="horizontal" - android:padding="8dp"> + android:padding="12dp"> <TextView - android:layout_width="80dp" + android:layout_width="90dp" android:layout_height="wrap_content" android:text="鍗″唴浣欓锛�" android:textColor="#333333" - android:textSize="14sp" + android:textSize="16sp" android:textStyle="bold" /> <TextView @@ -346,7 +352,7 @@ android:layout_weight="1" android:text="0.00鍏�" android:textColor="#FF6B35" - android:textSize="14sp" + android:textSize="18sp" android:textStyle="bold" /> </LinearLayout> @@ -366,70 +372,44 @@ android:background="#FFFFFF" android:elevation="4dp" android:orientation="vertical" - android:padding="16dp" - android:visibility="gone"> - - <!-- 鏀粯鏂瑰紡閫夋嫨鍖哄煙 --> - <LinearLayout - android:layout_width="match_parent" - android:layout_height="wrap_content" - android:orientation="vertical" - android:layout_marginBottom="16dp"> - - <TextView - android:layout_width="wrap_content" - android:layout_height="wrap_content" - android:layout_marginBottom="8dp" - android:text="鏀粯鏂瑰紡" - android:textColor="#333333" - android:textSize="16sp" - android:textStyle="bold" /> - - <RadioGroup - android:id="@+id/payment_method_group" - android:layout_width="match_parent" - android:layout_height="wrap_content" - android:orientation="horizontal"> - <!-- 鏀粯鏂瑰紡RadioButton灏嗗姩鎬佹坊鍔� --> - </RadioGroup> - - </LinearLayout> + android:padding="20dp" + android:visibility="visible"> <!-- 宸ユ湰璐瑰拰杩斿洖閲戦杈撳叆鍖哄煙 --> <LinearLayout android:layout_width="match_parent" android:layout_height="wrap_content" android:orientation="horizontal" - android:layout_marginBottom="16dp"> + android:layout_marginBottom="20dp"> <!-- 杩斿洖閲戦杈撳叆 --> <LinearLayout android:layout_width="0dp" android:layout_height="wrap_content" android:layout_weight="1" - android:layout_marginEnd="8dp" + android:layout_marginEnd="12dp" android:orientation="vertical"> <TextView android:layout_width="wrap_content" android:layout_height="wrap_content" - android:layout_marginBottom="6dp" + android:layout_marginBottom="8dp" android:text="杩斿洖閲戦锛堝厓锛�" android:textColor="#333333" - android:textSize="14sp" + android:textSize="16sp" android:textStyle="bold" /> <EditText android:id="@+id/et_return_amount" android:layout_width="match_parent" - android:layout_height="48dp" + android:layout_height="56dp" android:background="@drawable/edit_text_bg" android:hint="杩斿洖閲戦" android:inputType="numberDecimal" - android:padding="12dp" + android:padding="16dp" android:text="" android:textColor="#333333" android:textColorHint="#999999" - android:textSize="16sp" /> + android:textSize="18sp" /> </LinearLayout> <!-- 宸ユ湰璐硅緭鍏� --> @@ -437,32 +417,31 @@ android:layout_width="0dp" android:layout_height="wrap_content" android:layout_weight="1" - android:layout_marginEnd="8dp" + android:layout_marginStart="12dp" android:orientation="vertical"> <TextView android:layout_width="wrap_content" android:layout_height="wrap_content" - android:layout_marginBottom="6dp" + android:layout_marginBottom="8dp" android:text="宸ユ湰璐癸紙鍏冿級" android:textColor="#333333" - android:textSize="14sp" + android:textSize="16sp" android:textStyle="bold" /> <EditText android:id="@+id/et_card_cost" android:layout_width="match_parent" - android:layout_height="48dp" + android:layout_height="56dp" android:background="@drawable/edit_text_bg" android:hint="宸ユ湰璐�" android:inputType="numberDecimal" - android:padding="12dp" + android:padding="16dp" android:text="" android:textColor="#333333" android:textColorHint="#999999" - android:textSize="16sp" /> + android:textSize="18sp" /> </LinearLayout> - </LinearLayout> @@ -470,11 +449,11 @@ <Button android:id="@+id/btn_replace" android:layout_width="match_parent" - android:layout_height="48dp" + android:layout_height="56dp" android:background="@drawable/button_blue_bg" android:text="纭琛ュ崱" android:textColor="#FFFFFF" - android:textSize="@dimen/big_text_size" + android:textSize="20sp" android:textStyle="bold" /> </LinearLayout> diff --git a/generallibrary/src/main/res/layout/activity_manager_read.xml b/generallibrary/src/main/res/layout/activity_manager_read.xml index a202f03..20ba03c 100644 --- a/generallibrary/src/main/res/layout/activity_manager_read.xml +++ b/generallibrary/src/main/res/layout/activity_manager_read.xml @@ -87,6 +87,34 @@ android:textSize="16sp" /> </LinearLayout> + <!-- 椤圭洰鍙疯緭鍏ユ - 浠呭湪鍖哄煙琛ㄥ彿鍗℃椂鏄剧ず --> + <LinearLayout + android:id="@+id/project_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/project_number_et" + android:layout_width="match_parent" + android:layout_height="wrap_content" + android:background="@null" + android:hint="璇疯緭鍏ラ」鐩彿(1-255)" + android:inputType="number" + android:maxLength="3" + android:text="@={viewModel.projectNumber}" + android:textSize="16sp" /> + </LinearLayout> + <LinearLayout android:layout_width="match_parent" android:layout_height="wrap_content" -- Gitblit v1.8.0