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