From dd0f9e5f533d868d68c5fc343a44356b537b3988 Mon Sep 17 00:00:00 2001 From: zuojincheng <lf_zuo@163.com> Date: 星期五, 06 六月 2025 15:36:45 +0800 Subject: [PATCH] feat(nfc): 新增用户卡写入功能并优化开卡流程 --- generallibrary/src/main/java/com/dayu/general/activity/NewCard2Activity.kt | 88 ++++++------ generallibrary/src/main/java/com/dayu/general/tool/NfcWreatHelper.kt | 42 ++++++ generallibrary/src/main/java/com/dayu/general/utils/DateUtils.kt | 30 ++++ generallibrary/src/main/java/com/dayu/general/bean/net/NewCardInfo.kt | 32 ++++ generallibrary/src/main/java/com/dayu/general/bean/card/UserCard.kt | 4 generallibrary/src/main/java/com/dayu/general/activity/NfcWreatActivity.kt | 16 ++ generallibrary/src/main/java/com/dayu/general/bean/net/NewCardResult.kt | 10 + baselibrary/src/main/java/com/dayu/baselibrary/tools/nfc/NativeNfcWriteHelper.java | 137 +++++++++++++++---- generallibrary/src/main/java/com/dayu/general/bean/db/CardRegistrationBean.kt | 2 baselibrary/src/main/java/com/dayu/baselibrary/tools/nfc/NfcWriteAdapter.java | 26 +++ 10 files changed, 304 insertions(+), 83 deletions(-) diff --git a/baselibrary/src/main/java/com/dayu/baselibrary/tools/nfc/NativeNfcWriteHelper.java b/baselibrary/src/main/java/com/dayu/baselibrary/tools/nfc/NativeNfcWriteHelper.java index ba9a494..1d89f03 100644 --- a/baselibrary/src/main/java/com/dayu/baselibrary/tools/nfc/NativeNfcWriteHelper.java +++ b/baselibrary/src/main/java/com/dayu/baselibrary/tools/nfc/NativeNfcWriteHelper.java @@ -25,7 +25,6 @@ private static NativeNfcWriteHelper helper; - public void setIntent(Intent intent) { this.tag = intent.getParcelableExtra(NfcAdapter.EXTRA_TAG); } @@ -44,7 +43,6 @@ return helper; } - /** * 鍐欏崱 * @@ -59,15 +57,15 @@ MifareClassic mfc = MifareClassic.get(tag); if (null != mfc) { try { - //杩炴帴NFC + // 杩炴帴NFC mfc.connect(); - //楠岃瘉鎵囧尯瀵嗙爜 + // 楠岃瘉鎵囧尯瀵嗙爜 boolean isOpen = false; for (int i = 0; i < listKeyA.size(); i++) { if (mfc.authenticateSectorWithKeyA(a, listKeyA.get(i))) { isOpen = true; if (listKeyA.get(i).equals(defauleKey)) { - //褰撳墠涓洪粯璁ょ櫧鍗″瘑鐮佹椂鍐欏崱鏃朵慨鏀瑰瘑鐮� + // 褰撳墠涓洪粯璁ょ櫧鍗″瘑鐮佹椂鍐欏崱鏃朵慨鏀瑰瘑鐮� changePasword(a, mfc); } break; @@ -84,7 +82,7 @@ data = userCard.getTwoBytes(); } int bIndex = mfc.sectorToBlock(a); - //鍐欏崱 + // 鍐欏崱 mfc.writeBlock(bIndex + b, data); } return true; @@ -109,6 +107,85 @@ return false; } + /** + * 鍐欏崱锛堝甫鍥炶皟锛� + * + * @param userCard 鐢ㄦ埛鍗″唴瀹� + * @param sector 鎵囧尯 + * @param callBack 鍥炶皟鎺ュ彛 + */ + public boolean writeUserData(BaseUserCardCard userCard, int sector, NFCCallBack callBack) { + if (userCard != null) { + int a = sector; + try { + MifareClassic mfc = MifareClassic.get(tag); + if (null != mfc) { + try { + // 杩炴帴NFC + mfc.connect(); + // 楠岃瘉鎵囧尯瀵嗙爜 + boolean isOpen = false; + for (int i = 0; i < listKeyA.size(); i++) { + if (mfc.authenticateSectorWithKeyA(a, listKeyA.get(i))) { + isOpen = true; + if (listKeyA.get(i).equals(defauleKey)) { + // 褰撳墠涓洪粯璁ょ櫧鍗″瘑鐮佹椂鍐欏崱鏃朵慨鏀瑰瘑鐮� + changePasword(a, mfc); + } + break; + } + } + if (isOpen) { + for (int b = 0; b < 3; b++) { + byte[] data; + if (b == 0) { + data = userCard.getZeroBytes(); + } else if (b == 1) { + data = userCard.getOneBytes(); + } else { + data = userCard.getTwoBytes(); + } + int bIndex = mfc.sectorToBlock(a); + // 鍐欏崱 + mfc.writeBlock(bIndex + b, data); + } + if (callBack != null) { + callBack.isSusses(true, "鐢ㄦ埛鏁版嵁鍐欏叆鎴愬姛"); + } + return true; + } + if (callBack != null) { + callBack.isSusses(false, "鎵囧尯" + a + "瀵嗙爜楠岃瘉澶辫触"); + } + return false; + } catch (Exception e) { + e.printStackTrace(); + if (callBack != null) { + callBack.isSusses(false, "鎵囧尯" + a + "鍐欏崱寮傚父: " + e.getMessage()); + } + return false; + } finally { + try { + mfc.close(); + } catch (IOException e) { + e.printStackTrace(); + } + } + } + } catch (Exception e) { + e.printStackTrace(); + if (callBack != null) { + callBack.isSusses(false, "鍐欏崱寮傚父: " + e.getMessage()); + } + return false; + } + } else { + if (callBack != null) { + callBack.isSusses(false, "鐢ㄦ埛鍗℃暟鎹负绌�"); + } + } + return false; + } /** * 鍐欏崱 @@ -136,36 +213,36 @@ MifareClassic mfc = MifareClassic.get(tag); if (null != mfc) { try { - //杩炴帴NFC + // 杩炴帴NFC if (isConnect) { mfc.connect(); } - //鑾峰彇鎵囧尯鏁伴噺 + // 鑾峰彇鎵囧尯鏁伴噺 int count = mfc.getSectorCount(); - //濡傛灉浼犺繘鏉ョ殑鎵囧尯澶т簡鎴栬�呭皬浜嗙洿鎺ラ��鍑烘柟娉� + // 濡傛灉浼犺繘鏉ョ殑鎵囧尯澶т簡鎴栬�呭皬浜嗙洿鎺ラ��鍑烘柟娉� if (a > count - 1 || a < 0) { if (callBack != null) { callBack.isSusses(false, "鎵囧尯閿欒--" + a); } return false; } - //鑾峰彇鍐欑殑鎵囧尯鐨勫潡鐨勬暟閲� + // 鑾峰彇鍐欑殑鎵囧尯鐨勫潡鐨勬暟閲� int bCount = mfc.getBlockCountInSector(a); - //濡傛灉杈撳叆鐨勫潡澶т簡鎴栬�呭皬浜嗕篃鏄洿鎺ラ��鍑� + // 濡傛灉杈撳叆鐨勫潡澶т簡鎴栬�呭皬浜嗕篃鏄洿鎺ラ��鍑� if (b > bCount - 1 || b < 0) { if (callBack != null) { callBack.isSusses(false, "鍧楀尯閿欒--" + b); } return false; } - //楠岃瘉鎵囧尯瀵嗙爜 + // 楠岃瘉鎵囧尯瀵嗙爜 boolean isOpen = false; if (listKeyA.size() != 0) { for (int i = 0; i < listKeyA.size(); i++) { if (mfc.authenticateSectorWithKeyA(0, listKeyA.get(i))) { isOpen = true; if (listKeyA.get(i).equals(defauleKey)) { - //褰撳墠涓洪粯璁ょ櫧鍗″瘑鐮佹椂鍐欏崱鏃朵慨鏀瑰瘑鐮� + // 褰撳墠涓洪粯璁ょ櫧鍗″瘑鐮佹椂鍐欏崱鏃朵慨鏀瑰瘑鐮� changePasword(a, mfc); } break; @@ -181,7 +258,7 @@ } if (isOpen) { int bIndex = mfc.sectorToBlock(a); - //鍐欏崱 + // 鍐欏崱 mfc.writeBlock(bIndex + b, str); // 鏍¢獙鍐欏叆鏁版嵁鏄惁姝g‘ boolean isVerified = true; @@ -246,16 +323,15 @@ return false; } - /** * 淇敼瀵嗙爜 * - * @param 涔﹀啓鐨勬墖鍖� + * @param 涔﹀啓鐨勬墖鍖� * @param passWord 瀵嗙爜 * @return */ - public boolean changePasword( List<byte[]> passWord, boolean isConnect, boolean isClose, NFCCallBack callBack) { - if (passWord == null || passWord.size()!=16) { + public boolean changePasword(List<byte[]> passWord, boolean isConnect, boolean isClose, NFCCallBack callBack) { + if (passWord == null || passWord.size() != 16) { if (callBack != null) { callBack.isSusses(false, "瀵嗙爜鏁扮粍涓虹┖鎴栭暱搴︿笉涓�16"); } @@ -276,7 +352,7 @@ mfc.connect(); } for (int i = 0; i < passWord.size(); i++) { - byte [] passWordItem = passWord.get(i); + byte[] passWordItem = passWord.get(i); // 楠岃瘉鎵囧尯瀵嗙爜 boolean isAuthenticated = false; @@ -358,7 +434,7 @@ /** * 淇敼瀵嗙爜 * - * @param a 鎵囧尯 + * @param a 鎵囧尯 * @param mfc MifareClassic瀹炰緥 * @return */ @@ -367,24 +443,24 @@ byte[] data = new byte[16]; if (null != mfc) { try { - //灏嗗瘑鐮佽浆鎹负keyA + // 灏嗗瘑鐮佽浆鎹负keyA byte[] dataA = HexUtil.hexToByteArray(companyKeyA); for (int i = 0; i < dataA.length; i++) { data[i] = dataA[i]; } - //杈撳叆鎺у埗浣� + // 杈撳叆鎺у埗浣� data[6] = (byte) 0xFF; data[7] = (byte) 0x07; data[8] = (byte) 0x80; data[9] = (byte) 0x69; byte[] dataB = HexUtil.hexToByteArray(companyKeyB); - //灏嗗瘑鐮佽浆鎹负KeyB + // 灏嗗瘑鐮佽浆鎹负KeyB for (int i = 0; i < dataB.length; i++) { data[i + 10] = dataB[i]; } int bIndex = mfc.sectorToBlock(a); int bCount = mfc.getBlockCountInSector(a); - //鍐欏埌鎵囧尯鐨勬渶鍚庝竴涓潡 + // 鍐欏埌鎵囧尯鐨勬渶鍚庝竴涓潡 mfc.writeBlock(bIndex + bCount - 1, data); return true; @@ -399,8 +475,6 @@ return false; } - - /** * 鍒濆鍖栧崱 * @@ -412,15 +486,15 @@ MifareClassic mfc = MifareClassic.get(tag); if (null != mfc) { try { - //杩炴帴NFC + // 杩炴帴NFC mfc.connect(); - //鑾峰彇鎵囧尯鏁伴噺 + // 鑾峰彇鎵囧尯鏁伴噺 int count = mfc.getSectorCount(); byte[] data = new byte[16]; String initData = "FFFFFFFFFFFFFF078069FFFFFFFFFFFF"; byte[] initDataBytes = HexUtil.hexToByteArray(initData); for (int sector = 0; sector < count; sector++) { - //楠岃瘉鎵囧尯瀵嗙爜 + // 楠岃瘉鎵囧尯瀵嗙爜 boolean isOpen = false; for (int i = 0; i < listKeyA.size(); i++) { if (mfc.authenticateSectorWithKeyA(sector, listKeyA.get(i))) { @@ -429,7 +503,7 @@ } } if (isOpen) { - //鑾峰彇鍐欑殑鎵囧尯鐨勫潡鐨勬暟閲� + // 鑾峰彇鍐欑殑鎵囧尯鐨勫潡鐨勬暟閲� int blockCount = mfc.getBlockCountInSector(sector); int blockIndex = mfc.sectorToBlock(sector); for (int block = 0; block < blockCount; block++) { @@ -444,7 +518,7 @@ } else { mfc.writeBlock(blockIndex, initDataBytes); } - //鍐欏崱 + // 鍐欏崱 blockIndex++; } } @@ -467,6 +541,5 @@ } return false; } - } diff --git a/baselibrary/src/main/java/com/dayu/baselibrary/tools/nfc/NfcWriteAdapter.java b/baselibrary/src/main/java/com/dayu/baselibrary/tools/nfc/NfcWriteAdapter.java index 14e1e19..afee1df 100644 --- a/baselibrary/src/main/java/com/dayu/baselibrary/tools/nfc/NfcWriteAdapter.java +++ b/baselibrary/src/main/java/com/dayu/baselibrary/tools/nfc/NfcWriteAdapter.java @@ -33,11 +33,27 @@ } @Override - public boolean writeUserData(BaseUserCardCard userCard,int sector) { + public boolean writeUserData(BaseUserCardCard userCard, int sector) { switch (BaseNfcActivity.adapterType) { case ModelUtils.defaultType: return nativeNfcWriteHelper.writeUserData(userCard, sector); + } + return false; + } + + /** + * 鍐欑敤鎴锋暟鎹紙甯﹀洖璋冿級 + * + * @param userCard 鐢ㄦ埛鍗℃暟鎹� + * @param sector 鎵囧尯 + * @param callBack 鍥炶皟鎺ュ彛 + * @return 鏄惁鎴愬姛 + */ + public boolean writeUserData(BaseUserCardCard userCard, int sector, NFCCallBack callBack) { + switch (BaseNfcActivity.adapterType) { + case ModelUtils.defaultType: + return nativeNfcWriteHelper.writeUserData(userCard, sector, callBack); } return false; } @@ -56,7 +72,7 @@ public boolean writeData(byte[] str, int a, int b, NFCCallBack callBack) { switch (BaseNfcActivity.adapterType) { case ModelUtils.defaultType: - return nativeNfcWriteHelper.writeData(str, a, b,callBack); + return nativeNfcWriteHelper.writeData(str, a, b, callBack); } return false; @@ -66,7 +82,7 @@ public boolean writeData(byte[] str, int a, int b, boolean isConnect, NFCCallBack callBack) { switch (BaseNfcActivity.adapterType) { case ModelUtils.defaultType: - return nativeNfcWriteHelper.writeData(str, a, b,isConnect,callBack); + return nativeNfcWriteHelper.writeData(str, a, b, isConnect, callBack); } return false; @@ -82,10 +98,10 @@ return false; } - public boolean changePasword( List<byte[]> passWord, boolean isConnect, boolean isClose, NFCCallBack callBack) { + public boolean changePasword(List<byte[]> passWord, boolean isConnect, boolean isClose, NFCCallBack callBack) { switch (BaseNfcActivity.adapterType) { case ModelUtils.defaultType: - return nativeNfcWriteHelper.changePasword(passWord,isConnect, isClose,callBack); + return nativeNfcWriteHelper.changePasword(passWord, isConnect, isClose, callBack); } return false; } 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 57e331a..8fe770b 100644 --- a/generallibrary/src/main/java/com/dayu/general/activity/NewCard2Activity.kt +++ b/generallibrary/src/main/java/com/dayu/general/activity/NewCard2Activity.kt @@ -13,15 +13,23 @@ 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.CardCommon.Companion.USER_CARD_TYPE_1 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: 鐢ㄦ埛寮�鍗$晫闈�(鍚屾淇敼鐧藉崱瀵嗙爜) @@ -50,43 +58,17 @@ // 瀹㈡埛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" } - // 鏀粯鏂瑰紡鏁版嵁绫� - data class PaymentMethod( - val id: Long, - val name: String, - val remarks: String, - val deleted: Int - ) - - // 鏀粯鏂瑰紡鎺ュ彛杩斿洖鏁版嵁绫� - data class PaymentMethodResponse( - val itemTotal: Any?, - val obj: List<PaymentMethod>, - val pageCurr: Any?, - val pageSize: Any?, - val pageTotal: Any? - ) - - // 鐢ㄦ埛淇℃伅鏁版嵁绫� - data class ClientInfo( - val clientId: String, - val clientNum: String, - val name: String, - val districtNum: String, - val phone: String, - val idCard: String, - val villageName: String, - val address: String, - val cardCount: Int, - val operateDt: String - ) override fun onCreate(savedInstanceState: Bundle?) { super.onCreate(savedInstanceState) @@ -134,7 +116,7 @@ object : SubscriberListener<BaseResponse<ClientInfo>>() { override fun onNext(response: BaseResponse<ClientInfo>) { if (response.success) { - val clientInfo = response.content + clientInfo = response.content!! if (clientInfo != null) { // 鏄剧ず瀹㈡埛淇℃伅鍒扮晫闈� displayClientInfo(clientInfo) @@ -337,47 +319,69 @@ // 鏋勫缓璇锋眰鍙傛暟 val params = HashMap<String, Any>() params["cardAddr"] = cardPhysicalId // 姘村崱鍦板潃锛堢墿鐞咺D锛� - params["clientNum"] = binding.newCardFarmerCode.text.toString() // 鍐滄埛缂栧彿 - params["cardCost"] = (cardFee * 100).toInt() // 璐崱閲戦锛堝伐鏈垂锛夎浆涓哄垎 - params["amount"] = (rechargeAmount * 100).toInt() // 鍏呭�奸噾棰濊浆涓哄垎 + params["clientId"] = clientId // 鍐滄埛ID + params["cardCost"] = cardFee // 璐崱閲戦锛堝伐鏈垂锛�(鍏�) + params["amount"] = rechargeAmount // 鍏呭�奸噾棰�(鍏�) params["paymentId"] = paymentId // 鏀粯鏂瑰紡ID params["remarks"] = remark // 澶囨敞 + params["protocol"] = "p206V1_0_1" // 鍗忚 params["operator"] = BaseApplication.userId // 鎿嶄綔浜篒D // 鎵ц鍗$墖婵�娲籄PI璇锋眰 ApiManager.getInstance().requestPostLoading( this, - "sell/card/active", - String::class.java, + "terminal/card/termActiveCard", + NewCardDataResult::class.java, params, - object : SubscriberListener<BaseResponse<String>>() { - override fun onNext(response: BaseResponse<String>) { + 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(), - farmerCode = binding.newCardFarmerCode.text.toString(), + clientId = clientId, cardFee = cardFee, remark = binding.newCardRemark.text.toString(), paymentMethod = paymentId.toInt(), isReported = true, - isCardWritten = true - ) + isCardWritten = true, + operatorId = orderId, + + ) // 浣跨敤鍗忕▼鍦ㄥ悗鍙扮嚎绋嬩腑淇濆瓨鏁版嵁 lifecycleScope.launch { try { BaseDaoSingleton.getInstance(this@NewCard2Activity) .cardRegistrationDao().insert(cardRegistration) + Toast.makeText( this@NewCard2Activity, "寮�鍗℃垚鍔�", Toast.LENGTH_SHORT ).show() setResult(RESULT_OK) - finish() + Intent(this@NewCard2Activity, NfcWreatActivity::class.java).apply { + putExtra("cardType", USER_CARD_TYPE_1) + putExtra("orderId", orderId) + putExtra("cardAddr", cardPhysicalId) + var userCard = UserCard() + userCard.areaNumber =clientInfo.districtNum + userCard.userCode =clientInfo.clientNum + userCard.phoneNumber =clientInfo.phone + userCard.userCodeNumber = response.content?.cardNum?.toInt()!! + userCard.projectCode = response.content?.projectNo?.toInt()!! + userCard.balance = response.content?.balance?.toInt()!! +// userCard.surplusWater = response.content?.surplusWater?.toInt()!! + userCard.waterPrice = response.content?.waterPrice?.toFloat()!! +// userCard.electricPrice = response.content?.electricPrice?.toFloat()!! + userCard.rechargeDate = DateUtils.parseStringToCalendar(response.content?.time) + putExtra("userCard", userCard) + startActivity(this) + } } catch (e: Exception) { CrashReport.postCatchedException(e) Toast.makeText( 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 8b61caa..f8f55a4 100644 --- a/generallibrary/src/main/java/com/dayu/general/activity/NfcWreatActivity.kt +++ b/generallibrary/src/main/java/com/dayu/general/activity/NfcWreatActivity.kt @@ -1,10 +1,11 @@ - package com.dayu.general.activity +package com.dayu.general.activity import android.content.Intent import android.os.Bundle import com.dayu.baselibrary.net.subscribers.SubscriberListener import com.dayu.baselibrary.utils.ToastUtil import com.dayu.general.bean.card.ClearCard +import com.dayu.general.bean.card.UserCard import com.dayu.general.tool.CardCommon import com.dayu.general.databinding.ActivityNfcWriteGeBinding import com.dayu.general.net.ApiManager @@ -22,6 +23,7 @@ var cardType = "" var orderId = "" var cardAddr = "" + private lateinit var userCard: UserCard override fun onCreate(savedInstanceState: Bundle?) { super.onCreate(savedInstanceState) @@ -37,6 +39,12 @@ cardType = intent?.getStringExtra("cardType") ?: "" orderId = intent?.getStringExtra("orderId") ?: "" cardAddr = intent?.getStringExtra("cardAddr") ?: "" + 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)!! + } + if (cardType.isNotEmpty()) { when (cardType) { CardCommon.CLEAN_CARD_TYPE -> { @@ -68,6 +76,12 @@ } } } + + CardCommon.USER_CARD_TYPE_1 -> { + binding?.cardData?.text = "鍐欑敤鎴峰崱" + nfcWreatHelper.writeUserData(userCard) + + } } } else { ToastUtil.show("鍗$墖閿欒锛屽綋鍓嶅埛鐨勫崱涓庡垰鍒氱殑鍗′笉涓�鑷�") diff --git a/generallibrary/src/main/java/com/dayu/general/bean/card/UserCard.kt b/generallibrary/src/main/java/com/dayu/general/bean/card/UserCard.kt index 9436dd7..7d16b06 100644 --- a/generallibrary/src/main/java/com/dayu/general/bean/card/UserCard.kt +++ b/generallibrary/src/main/java/com/dayu/general/bean/card/UserCard.kt @@ -12,7 +12,7 @@ */ class UserCard : BaseUserCardCard(), Serializable { var cardType: String = USER_CARD_TYPE_1 // 鍗$被鍨嬶細A1缁堢鍐欏崱 A8鍒峰崱寮�娉靛悗鍊� A2鍙犲姞鍏呭�� - var areaNumber: Int = 0 // 鍥藉琛屾斂鍖哄煙鍙�(12浣岯CD,绮剧‘鍒版潙) + var areaNumber: String = "" // 鍥藉琛屾斂鍖哄煙鍙�(12浣岯CD,绮剧‘鍒版潙) var userCode: String = "" // 鐢ㄦ埛缂栧彿BCD var userCodeNumber: Int = 0 // 鐢ㄦ埛鍗$紪鍙�(HEX) var phoneNumber: String = "" // 鎵嬫満鍙�(BCD) @@ -55,7 +55,7 @@ userCard.apply { // 瑙f瀽鍥藉琛屾斂鍖哄煙鍙�(0-5浣�) val areaCodeBytes = zero.copyOfRange(0, 6) - areaNumber = BcdUtil.bcdToStr(areaCodeBytes).toInt() + areaNumber = BcdUtil.bcdToStr(areaCodeBytes) // 瑙f瀽鐢ㄦ埛鍗$紪鍙�(6-7浣�) val userCodeNumberBytes = zero.copyOfRange(6, 8) diff --git a/generallibrary/src/main/java/com/dayu/general/bean/db/CardRegistrationBean.kt b/generallibrary/src/main/java/com/dayu/general/bean/db/CardRegistrationBean.kt index 7e2f26f..9cfdc91 100644 --- a/generallibrary/src/main/java/com/dayu/general/bean/db/CardRegistrationBean.kt +++ b/generallibrary/src/main/java/com/dayu/general/bean/db/CardRegistrationBean.kt @@ -10,7 +10,7 @@ val cardNumber: String, // IC鍗″崱鍙� val userName: String, // 濮撳悕 val idCard: String, // 韬唤璇佸彿 - val farmerCode: String, // 鍐滄埛缂栧彿 + val clientId: String, // 鍐滄埛Id val cardFee: Double, // 宸ユ湰璐� val remark: String, // 澶囨敞 val paymentMethod: Int, // 鏀粯鏂瑰紡 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 new file mode 100644 index 0000000..1d486fc --- /dev/null +++ b/generallibrary/src/main/java/com/dayu/general/bean/net/NewCardInfo.kt @@ -0,0 +1,32 @@ +package com.dayu.general.bean.net + +// 鏀粯鏂瑰紡鏁版嵁绫� +data class PaymentMethod( + val id: Long, + val name: String, + val remarks: String, + val deleted: Int +) + +// 鏀粯鏂瑰紡鎺ュ彛杩斿洖鏁版嵁绫� +data class PaymentMethodResponse( + val itemTotal: Any?, + val obj: List<PaymentMethod>, + val pageCurr: Any?, + val pageSize: Any?, + val pageTotal: Any? +) + +// 鐢ㄦ埛淇℃伅鏁版嵁绫� +data class ClientInfo( + val clientId: String, + val clientNum: String, + val name: String, + val districtNum: String, + val phone: String, + val idCard: String, + val villageName: String, + val address: String, + val cardCount: Int, + val operateDt: String +) diff --git a/generallibrary/src/main/java/com/dayu/general/bean/net/NewCardResult.kt b/generallibrary/src/main/java/com/dayu/general/bean/net/NewCardResult.kt new file mode 100644 index 0000000..8b36f14 --- /dev/null +++ b/generallibrary/src/main/java/com/dayu/general/bean/net/NewCardResult.kt @@ -0,0 +1,10 @@ +package com.dayu.general.bean.net + +data class NewCardDataResult( + var projectNo: String, + var cardNum: String, + var balance: String, + var waterPrice: String, + var time: String, + var orderNo: String +) \ No newline at end of file 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 65fd920..d224bbf 100644 --- a/generallibrary/src/main/java/com/dayu/general/tool/NfcWreatHelper.kt +++ b/generallibrary/src/main/java/com/dayu/general/tool/NfcWreatHelper.kt @@ -146,6 +146,32 @@ } /** + * 鍐欏崱(寮傛) + * + * @param userCard 鐢ㄦ埛鍗″唴瀹� + * @param callBack 鎿嶄綔缁撴灉鍜屾秷鎭洖璋� + */ + fun writeUserDataAsync(userCard: UserCard, callBack: NFCCallBack): Disposable { + showLoading() + val disposable = Observable.fromCallable { + writeUserData(userCard, callBack) + } + .subscribeOn(Schedulers.io()) + .observeOn(AndroidSchedulers.mainThread()) + .subscribe({ result -> + hideLoading() + // 缁撴灉宸茬粡鍦╳riteUserData涓�氳繃callBack鍥炶皟浜� + }, { error -> + hideLoading() + error.printStackTrace() + callBack.isSusses(false, "寮傛鍐欏崱寮傚父: ${error.message}") + }) + + compositeDisposable.add(disposable) + return disposable + } + + /** * 鍐欏崱 * * @param userCard 鐢ㄦ埛鍗″唴瀹� @@ -161,6 +187,22 @@ } /** + * 鍐欏崱 + * + * @param userCard 鐢ㄦ埛鍗″唴瀹� + * @param callBack 鍥炶皟鎺ュ彛 + */ + fun writeUserData(userCard: UserCard, callBack: NFCCallBack): Boolean { + try { + return adapter.writeUserData(userCard, 7, callBack) + } catch (e: java.lang.Exception) { + e.printStackTrace() + callBack.isSusses(false, "鍐欏崱寮傚父: ${e.message}") + } + return false + } + + /** * 淇敼瀵嗙爜(寮傛) * * @param ps 瀵嗙爜鍒楄〃 diff --git a/generallibrary/src/main/java/com/dayu/general/utils/DateUtils.kt b/generallibrary/src/main/java/com/dayu/general/utils/DateUtils.kt new file mode 100644 index 0000000..7360c9b --- /dev/null +++ b/generallibrary/src/main/java/com/dayu/general/utils/DateUtils.kt @@ -0,0 +1,30 @@ +package com.dayu.general.utils + +import java.text.SimpleDateFormat +import java.util.Calendar +import java.util.Locale + +object DateUtils { + + private const val DATE_PATTERN = "yyyy-MM-dd HH:mm:ss" + private val sdf by lazy { SimpleDateFormat(DATE_PATTERN, Locale.getDefault()) } + + /** + * 灏嗗瓧绗︿覆杞崲涓� Calendar 瀵硅薄 + * @param dateStr 鏃堕棿瀛楃涓诧紝鏍煎紡锛歽yyy-MM-dd HH:mm:ss + * @return 瑙f瀽鍚庣殑 Calendar 瀵硅薄锛屽け璐ヨ繑鍥� null + */ + fun parseStringToCalendar(dateStr: String?): Calendar? { + if (dateStr.isNullOrEmpty()) return null + return try { + val date = sdf.parse(dateStr) + val calendar = Calendar.getInstance() + calendar.time = date ?: return null + calendar + } catch (e: Exception) { + e.printStackTrace() + null + } + } + +} \ No newline at end of file -- Gitblit v1.8.0