From 8e3719a37a6be0c9e244a0160b5f2f3331ca3122 Mon Sep 17 00:00:00 2001 From: zuoxiao <470321431@qq.com> Date: 星期四, 30 十一月 2023 15:11:38 +0800 Subject: [PATCH] 支持虚拟卡读取 --- app/src/main/java/com/dayu/recharge/activity/ReadCardAcitivy.java | 296 +++++++++++++++++++++++++++++++++------------------------- 1 files changed, 168 insertions(+), 128 deletions(-) diff --git a/app/src/main/java/com/dayu/recharge/activity/ReadCardAcitivy.java b/app/src/main/java/com/dayu/recharge/activity/ReadCardAcitivy.java index c524104..b3db5ac 100644 --- a/app/src/main/java/com/dayu/recharge/activity/ReadCardAcitivy.java +++ b/app/src/main/java/com/dayu/recharge/activity/ReadCardAcitivy.java @@ -2,18 +2,16 @@ import android.content.Intent; import android.nfc.NfcAdapter; +import android.nfc.Tag; import android.os.Bundle; -import android.os.Handler; import android.os.Message; -import android.text.TextUtils; import android.view.LayoutInflater; import android.view.View; - +import com.dayu.recharge.card.ConfigurationPowerCard; +import com.dayu.recharge.card.DomainCard; import com.dayu.recharge.card.UserCard; import com.dayu.recharge.databinding.ActivityRedCardBinding; -import com.dayu.recharge.dbBean.RechargeBean; -import com.dayu.recharge.dbBean.UserCardBean; import com.dayu.recharge.net.SocketCallBack; import com.dayu.recharge.net.SocketData; import com.dayu.recharge.net.SocketNet; @@ -21,13 +19,17 @@ import com.dayu.recharge.tools.BcdUtil; import com.dayu.recharge.tools.HexUtil; import com.dayu.recharge.tools.NfcReadHelper; +import com.dayu.recharge.tools.WriteCardUtils; import com.dayu.recharge.utils.CRC8; +import com.dayu.recharge.utils.DeviceNumberUtils; import com.dayu.recharge.utils.MornyUtil; +import com.dayu.recharge.utils.MyCommon; import com.dayu.recharge.utils.SocketUtil; -import com.dayu.recharge.utils.ToastUtil; -import com.dayu.recharge.utils.WSHelper; +import com.dayu.recharge.utils.TipUtil; +import com.dayu.recharge.view.ProgressDialog; import java.util.Arrays; +import java.util.Calendar; import java.util.List; import java.util.Map; @@ -41,14 +43,23 @@ private static final int USER_CRAD = 1; private static final int MANAGE_CRAD = 2; + private static final int CLEAN_CARD = 3; + private static final int REGISTERED_CARD = 4; + private static final int CLEAN_ALL_USER = 5; + private static final int DOMAIN_CARD = 6; + private static final int TEST_CARD = 7; + + private static final int CONFIGURATION_CARD = 8; + + private static final int CONFIGURATION_POWER_CARD = 9; + private static final int PASS_WORD_CRAD = 10; - private static final int ERROR = -1; - UserCard userCard; - UserCardBean waterCard; - RechargeBean rechargeBean; - // 鍐滄埛娉ㄥ唽缂栧彿 + volatile UserCard userCard; ActivityRedCardBinding redCardBinding; + + // Intent intent; + Tag mTag; @Override protected void onCreate(Bundle savedInstanceState) { @@ -57,134 +68,157 @@ setContentView(redCardBinding.getRoot()); } - private void setData(String statu) { - String initCode = WSHelper.getInstance(this).get("initCode", ""); - if (TextUtils.isEmpty(initCode)) { - ToastUtil.show(this, "璁惧娉ㄥ唽鍙蜂负绌猴紝璇峰厛璁剧疆IP鍜岀鐞嗗憳鍦板潃"); - return; + + private void setUserData(String userName, int blance, String statu) { + viweGone(true); + redCardBinding.redName.setText("鐢ㄦ埛濮撳悕锛�" + userName); + redCardBinding.redRemainderBlance.setText("鍓╀綑閲戦锛�" + MornyUtil.changeF2Y(blance) + "鍏�"); + redCardBinding.redStatu.setText("鍗$姸鎬侊細" + statu); + if (userCard != null) { + redCardBinding.redInitCode.setText(userCard.getInitPeasantCode()); + Calendar calendar = userCard.getRechargeDate(); + if (calendar != null) { + int year = calendar.get(Calendar.YEAR); + int month = calendar.get(Calendar.MONTH); // 鏈堜唤浠�0寮�濮嬶紝鎵�浠ラ渶瑕佸姞1 + int day = calendar.get(Calendar.DAY_OF_MONTH); + int hour = calendar.get(Calendar.HOUR_OF_DAY); + int minute = calendar.get(Calendar.MINUTE); + int second = calendar.get(Calendar.SECOND); + redCardBinding.redRechargeDate.setText("鏈崱鏈�鍚庤喘姘存棩鏈燂細" + year + month + day + " " + hour + ":" + minute + ":" + second); + } else { + redCardBinding.redRechargeDate.setText("鏈崱鏈�鍚庤喘姘存棩鏈燂細鏃�"); + } + + redCardBinding.redRechargeNumber.setText("鏈崱鍏呭�兼鏁帮細" + userCard.getRechargeTimes() + ""); } -// redCardBinding.redVillageNum.setText("璁惧搴忓垪鍙凤細" + initS.getANo() + ""); - redCardBinding.redName.setText("鐢� 鎴� 鍚嶏細" + rechargeBean.getUserName()); - redCardBinding.redRemainderMorny.setText("鍓╀綑閲戦锛�" + rechargeBean.getBalance() + "" + "鍏�"); - redCardBinding.redStatu.setText("鐘� 鎬侊細" + statu); + } + + @Override + public void physicalCardDoing(Tag tag) { + super.physicalCardDoing(tag); + mTag = tag; + ProgressDialog.show(this); + + readAllData(tag); } - @Override public void onNewIntent(Intent intent) { - startAnim(); - if (NfcAdapter.ACTION_TAG_DISCOVERED.equals(intent.getAction())) { - readAllData(intent); - } +// this.intent = intent; + + super.onNewIntent(intent); } /** * 璇诲彇鍏ㄩ儴鏁版嵁 */ - private void readAllData(Intent intent) { + + public void readAllData(Tag intent) { NfcReadHelper.getInstence(intent) - .getAllData(new NfcReadHelper.NFCCallListback() { + .getOneSectorData(new NfcReadHelper.NFCCallListback() { @Override - public void callBack(Map<String, List<byte[]>> data) { - Message message = new Message(); + public void callBack(List<byte[]> data) { //鑾峰彇1鎵囧尯鏁版嵁 - List<byte[]> oneSector = data.get("1"); - if (oneSector != null && oneSector.size() > 0) { - byte cardType = oneSector.get(0)[0]; + if (data != null && data.size() > 0) { + byte cardType = data.get(0)[0]; String cardTypeStr = HexUtil.byteToHex(cardType); -// switch (cardTypeStr){ -// case -// } - userCard = UserCard.getBean(oneSector); - message.what = USER_CRAD; + switch (cardTypeStr) { + case MyCommon.USER_CARD_TYPE_1: + case MyCommon.USER_CARD_TYPE_2: + case MyCommon.USER_CARD_TYPE_3: + userCard = UserCard.getBean(data); + selectBalance(userCard.getInitPeasantCode()); + break; + case MyCommon.MANAGE_CRAD: + viweGone(false); + redCardBinding.readCardTypeTV.setText("褰撳墠涓虹鐞嗗崱"); + stopAnim(); + break; + case MyCommon.CLEAN_CARD_TYPE: + viweGone(false); + redCardBinding.readCardTypeTV.setText("褰撳墠涓烘竻闆跺崱"); + stopAnim(); + break; + case MyCommon.REGISTERED_CARD_TYPE: + viweGone(false); + redCardBinding.readCardTypeTV.setText("褰撳墠涓洪噸鏂版敞鍐岃澶囧崱"); + stopAnim(); + + break; + case MyCommon.CLEAN_ALL_USER_CARD_TYPE: + viweGone(false); + redCardBinding.readCardTypeTV.setText("褰撳墠涓哄垹闄ゅ叏閮ㄧ敤鎴峰崱"); + stopAnim(); + break; + case MyCommon.DOMAIN_CARD_TYPE: + viweGone(false); + redCardBinding.readCardTypeTV.setText("褰撳墠涓鸿缃煙鍚嶅崱"); + DomainCard domainCard = DomainCard.toBean(data); + redCardBinding.readCardDataTV.setText("搴忓彿锛�" + domainCard.getDomainNumber() + "\n" + "鍩熷悕锛�" + domainCard.getDomainName() + "\n" + "绔彛鍙凤細" + domainCard.getPort()); + stopAnim(); + break; + case MyCommon.TEST_CARD_TYPE: + viweGone(false); + redCardBinding.readCardTypeTV.setText("褰撳墠涓烘祴璇曞崱"); + stopAnim(); + break; + case MyCommon.CONFIGURATION_CARD_TYPE: + viweGone(false); + redCardBinding.readCardTypeTV.setText("褰撳墠涓洪厤缃澶囨敞鍐屼俊鎭崱"); + stopAnim(); + break; + case MyCommon.CONFIGURATION_POWER_CARD_TYPE: + viweGone(false); + redCardBinding.readCardTypeTV.setText("褰撳墠閰嶇疆姘存车鍔熺巼鍗�"); + ConfigurationPowerCard powerCard = ConfigurationPowerCard.toBean(data.get(0)); + redCardBinding.readCardDataTV.setText(powerCard.getPower()); + stopAnim(); + break; + default: + TipUtil.show(ReadCardAcitivy.this, "鍗$墖鏃犳硶璇嗗埆"); + stopAnim(); + break; + } + } else { - message.what = ERROR; + TipUtil.show(ReadCardAcitivy.this, "鍗$墖鏃犳硶璇嗗埆"); + stopAnim(); } - handler.sendMessage(message); + } - @Override - public void error() { - Message message = new Message(); - message.what = ERROR; - handler.sendMessage(message); + public void error(int code) { + switch (code) { + case MyCommon.ERROR_MOVE: + stopAnim(); + TipUtil.show("杩炴帴涓柇锛岃閲嶆柊璐村悎鍗$墖"); + break; + default: + stopAnim(); + TipUtil.show("鍗$墖璇嗗埆閿欒,璇烽噸璇曪紒"); + } } }); } - Handler handler = new Handler(new Handler.Callback() { - @Override - public boolean handleMessage(Message msg) { - switch (msg.what) { - case USER_CRAD: - redCardBinding.readImgLL.setVisibility(View.GONE); - redCardBinding.readUserLL.setVisibility(View.VISIBLE); - redCardBinding.readSysLL.setVisibility(View.GONE); - redCardBinding.readCleanLL.setVisibility(View.GONE); - redCardBinding.readInitLL.setVisibility(View.GONE); -// selectBalance(newUserCard.getPeasantCode()); - break; - case MANAGE_CRAD: - redCardBinding.readImgLL.setVisibility(View.GONE); - redCardBinding.readUserLL.setVisibility(View.GONE); - redCardBinding.readSysLL.setVisibility(View.VISIBLE); - redCardBinding.readCleanLL.setVisibility(View.GONE); - redCardBinding.readInitLL.setVisibility(View.GONE); - stopAnim(); - break; - case 3: - redCardBinding.readImgLL.setVisibility(View.GONE); - redCardBinding.readUserLL.setVisibility(View.GONE); - redCardBinding.readSysLL.setVisibility(View.GONE); - redCardBinding.readCleanLL.setVisibility(View.VISIBLE); - redCardBinding.readInitLL.setVisibility(View.GONE); - stopAnim(); - break; - case 4: - redCardBinding.readImgLL.setVisibility(View.GONE); - redCardBinding.readUserLL.setVisibility(View.GONE); - redCardBinding.readSysLL.setVisibility(View.GONE); - redCardBinding.readCleanLL.setVisibility(View.GONE); - redCardBinding.readInitLL.setVisibility(View.VISIBLE); - stopAnim(); - break; - case 5: - redCardBinding.readImgLL.setVisibility(View.GONE); - redCardBinding.readUserLL.setVisibility(View.GONE); - redCardBinding.readSysLL.setVisibility(View.GONE); - redCardBinding.readCleanLL.setVisibility(View.GONE); - redCardBinding.readInitLL.setVisibility(View.VISIBLE); - redCardBinding.readInitLL.setText("褰撳墠涓鸿鏀垮尯鍩熷崱"); - stopAnim(); - break; - case 6: - redCardBinding.readImgLL.setVisibility(View.GONE); - redCardBinding.readUserLL.setVisibility(View.GONE); - redCardBinding.readSysLL.setVisibility(View.GONE); - redCardBinding.readCleanLL.setVisibility(View.GONE); - redCardBinding.readInitLL.setVisibility(View.VISIBLE); - redCardBinding.readInitLL.setText("褰撳墠涓鸿澶囧簭鍙峰崱"); - stopAnim(); - break; - default: - ToastUtil.show(ReadCardAcitivy.this, "鍗$墖鏈敞鍐�"); - stopAnim(); - } - return false; + private void viweGone(boolean isUSerCard) { + redCardBinding.readImgLL.setVisibility(View.GONE); + if (isUSerCard) { + redCardBinding.readCardTypeLL.setVisibility(View.GONE); + redCardBinding.readUserLL.setVisibility(View.VISIBLE); + } else { + redCardBinding.readCardTypeLL.setVisibility(View.VISIBLE); + redCardBinding.readUserLL.setVisibility(View.GONE); } - }); - void startAnim() { - redCardBinding.avi.setVisibility(View.VISIBLE); - redCardBinding.avi.show(); - // or avi.smoothToShow(); } + void stopAnim() { - redCardBinding.avi.hide(); + ProgressDialog.dismiss(); // or avi.smoothToHide(); } @@ -192,11 +226,10 @@ * @param initPeasantCode 鍐滄埛娉ㄥ唽缂栧彿 */ private void selectBalance(String initPeasantCode) { - BalanceSelecteRequestBean requestBean = new BalanceSelecteRequestBean(); requestBean.setAFN("94"); requestBean.setControl("01"); - String initCode = WSHelper.getInstance(this).get("initCode", ""); + String initCode = DeviceNumberUtils.getDeviceNumber(); requestBean.setInitCode(initCode); requestBean.setInitPeasantCode(initPeasantCode); requestBean.setXuLie(SocketUtil.getXuLie(this)); @@ -209,11 +242,30 @@ try { stateText = new StringBuffer(); -// stateText.append("鐘� 鎬侊細"); + int balance = 0; + String name = null; + try { + //閲戦 + byte[] blanceByte = Arrays.copyOfRange(readData.getBodyBytes(), 3, 7); + balance = SocketUtil.get16to10LowHigh(blanceByte); + //濮撳悕 + byte[] nameByte = Arrays.copyOfRange(readData.getBodyBytes(), 7, 19); + name = SocketUtil.fromHexString(SocketUtil.bytesToHexClean0(nameByte)); + } catch (Exception e) { + e.printStackTrace(); + } + String state = BcdUtil.bcdToStr(readData.getBodyBytes()[2]); //BCD鐮�00鍚敤 01绂佺敤 02闅跺睘淇℃伅涓嶇 03鏃犳鍗′俊鎭� 04鍏跺畠s if ("00".equals(state)) { + userCard.setBalance(balance); + userCard.setState("00"); + + WriteCardUtils.setUser(mTag, userCard); stateText.append("鍚敤"); } else if ("01".equals(state)) { + userCard.setBalance(balance); + userCard.setState("01"); + WriteCardUtils.setUser(mTag, userCard); stateText.append("绂佺敤"); } else if ("02".equals(state)) { stateText.append("闅跺睘淇℃伅涓嶇"); @@ -222,34 +274,22 @@ } else if ("04".equals(state)) { stateText.append("鍏跺畠"); } - //閲戦 - byte[] blanceByte = Arrays.copyOfRange(readData.getBodyBytes(), 3, 7); - int balance = SocketUtil.get16to10LowHigh(blanceByte); - //濮撳悕 - byte[] nameByte = Arrays.copyOfRange(readData.getBodyBytes(), 7, 19); - String name = SocketUtil.fromHexString(SocketUtil.bytesToHexClean0(nameByte)); - - rechargeBean = new RechargeBean(); - rechargeBean.setDate(System.currentTimeMillis()); - rechargeBean.setUserName(name); - rechargeBean.setBalance(MornyUtil.changeF2Y(balance) + ""); -// rechargeBean.setTotal_morn(ArithUtil.changeF2Y(userCard.getValue() + "")); - setData(stateText.toString()); + setUserData(name, balance, stateText.toString()); stopAnim(); } catch (Exception e) { e.printStackTrace(); } } else { //鏍¢獙CRC閿欒 - ToastUtil.show(ReadCardAcitivy.this, "寮�鍗℃姤鏂囨牎楠孋RC閿欒"); + TipUtil.show(ReadCardAcitivy.this, "寮�鍗℃姤鏂囨牎楠孋RC閿欒"); } stopAnim(); } @Override public void onSocketError(int code, String msg) { - ToastUtil.show(ReadCardAcitivy.this, msg); + TipUtil.show(ReadCardAcitivy.this, msg); } }); -- Gitblit v1.8.0