From feb7add1979c830e0d940286242a7c489f2f8f96 Mon Sep 17 00:00:00 2001
From: zuoxiao <470321431@qq.com>
Date: 星期五, 27 九月 2024 09:23:34 +0800
Subject: [PATCH] 优化NFC模块架构,将一些方法抽调到父类中。

---
 qihealonelibrary/src/main/java/com/dayu/qihealonelibrary/activity/ReadCardAcitivy.java |  299 ++++++++++++++++++++++++++++++++++++-----------------------
 1 files changed, 184 insertions(+), 115 deletions(-)

diff --git a/qihealonelibrary/src/main/java/com/dayu/qihealonelibrary/activity/ReadCardAcitivy.java b/qihealonelibrary/src/main/java/com/dayu/qihealonelibrary/activity/ReadCardAcitivy.java
index bc359e9..258c817 100644
--- a/qihealonelibrary/src/main/java/com/dayu/qihealonelibrary/activity/ReadCardAcitivy.java
+++ b/qihealonelibrary/src/main/java/com/dayu/qihealonelibrary/activity/ReadCardAcitivy.java
@@ -3,19 +3,26 @@
 import android.content.Intent;
 import android.nfc.NfcAdapter;
 import android.os.Bundle;
+import android.text.TextUtils;
 import android.view.LayoutInflater;
 import android.view.View;
 
 import com.dayu.baselibrary.tools.HexUtil;
 import com.dayu.baselibrary.utils.MornyUtil;
 import com.dayu.baselibrary.utils.TipUtil;
+import com.dayu.baselibrary.view.ConfirmDialog;
 import com.dayu.qihealonelibrary.card.BlackCard;
 import com.dayu.qihealonelibrary.card.ConfigurationPowerCard;
 import com.dayu.qihealonelibrary.card.DomainCard;
 import com.dayu.qihealonelibrary.card.ElectricPriceCard;
+import com.dayu.qihealonelibrary.card.ManageCard;
+import com.dayu.qihealonelibrary.card.ManagerToUserCard;
 import com.dayu.qihealonelibrary.card.RegionCard;
 import com.dayu.qihealonelibrary.card.UserCard;
 import com.dayu.qihealonelibrary.databinding.ActivityRedCardQhaBinding;
+import com.dayu.qihealonelibrary.dbBean.AdminDataBean;
+import com.dayu.qihealonelibrary.dbBean.UserCardBean;
+import com.dayu.qihealonelibrary.tools.NFCWriteHelper;
 import com.dayu.qihealonelibrary.tools.NfcReadHelper;
 import com.dayu.qihealonelibrary.utils.CardCommon;
 import com.dayu.qihealonelibrary.view.ProgressDialog;
@@ -29,14 +36,17 @@
  * Date: 2023-11-10 19:52
  * Description: 璇诲崱鐣岄潰
  */
-public class ReadCardAcitivy extends BaseNfcActivityQHAlone {
+public class ReadCardAcitivy extends QHAloneBaseNfcActivity {
 
     volatile UserCard userCard;
     ActivityRedCardQhaBinding redCardBinding;
 
 
     Intent intent;
-
+    ConfirmDialog confirmDialog;
+    AdminDataBean adminData;
+    String cardNumber;
+    String userCardStr;
     @Override
     protected void onCreate(Bundle savedInstanceState) {
         super.onCreate(savedInstanceState);
@@ -45,39 +55,38 @@
     }
 
 
-    private void setUserData(String userName, int blance, String statu) {
+    private void setUserData(String userName, String statu, String cardNumber) {
         viweGone(true);
         redCardBinding.redName.setText("鐢ㄦ埛濮撳悕锛�" + userName);
-        redCardBinding.redRemainderBlance.setText("鍓╀綑閲戦锛�" + MornyUtil.changeF2Y(blance) + "鍏�");
         redCardBinding.redStatu.setText("鍗$姸鎬侊細" + statu);
         if (userCard != null) {
-
             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);
+                redCardBinding.redRechargeDate.setText("鏈崱鏈�鍚庤喘姘存棩鏈燂細" + year + "骞�" + month + "鏈�" + day + "鏃�");
             } else {
                 redCardBinding.redRechargeDate.setText("鏈崱鏈�鍚庤喘姘存棩鏈燂細鏃�");
             }
-
-            redCardBinding.redRechargeNumber.setText("鏈崱鍏呭�兼鏁帮細" + userCard.getRechargeTimes() + "");
+            redCardBinding.redInitCode.setText(cardNumber);
+            redCardBinding.redRechargeNumber.setText("鏈崱鍏呭�兼鏁帮細" + userCard.getRechargeTimes() + " 娆�");
+//            redCardBinding.redTotalWater.setText("鎬荤敤姘撮噺锛�" + MornyUtil.changeF2Y(userCard.getTotalWater()) + " 鍚�");
+//            redCardBinding.redTotalPower.setText("鎬荤敤鐢甸噺锛�" + MornyUtil.changeF2Y(userCard.getTotalElectric()) + " 搴�");
+            redCardBinding.redRemainderBlance.setText("鍓╀綑閲戦锛�" + MornyUtil.changeF2Y(userCard.getBalance()) + " 鍏�");
+//            redCardBinding.redRemainderWater.setText("鍓╀綑姘撮噺锛�" + MornyUtil.changeF2Y(userCard.getSurplusWater()) + " 鍚�");
         }
     }
 
 
+
     @Override
-    public void onNewIntent(Intent intent) {
+    public void onNfcBack(Intent intent) {
         this.intent = intent;
         ProgressDialog.show(this);
         if (NfcAdapter.ACTION_TAG_DISCOVERED.equals(intent.getAction())) {
             readAllData(intent);
         }
-        super.onNewIntent(intent);
     }
 
     /**
@@ -85,115 +94,175 @@
      */
 
     public void readAllData(Intent intent) {
-        NfcReadHelper.getInstence(intent, this)
-                .getOneSectorData(new NfcReadHelper.NFCCallListback() {
-                    @Override
-                    public void callBack(List<byte[]> data) {
-                        //鑾峰彇1鎵囧尯鏁版嵁
-                        if (data != null && data.size() > 0) {
-                            byte cardType = data.get(0)[0];
-                            String cardTypeStr = HexUtil.byteToHex(cardType);
-                            switch (cardTypeStr) {
-                                case CardCommon.USER_CARD_TYPE_1:
-                                case CardCommon.USER_CARD_TYPE_2:
-                                case CardCommon.USER_CARD_TYPE_3:
-                                    userCard = UserCard.getBean(data);
-                                    break;
-                                case CardCommon.MANAGE_CRAD:
-                                    viweGone(false);
-                                    redCardBinding.readCardTypeTV.setText("褰撳墠涓虹鐞嗗崱");
-                                    stopAnim();
-                                    break;
-                                case CardCommon.CLEAN_CARD_TYPE:
-                                    viweGone(false);
-                                    redCardBinding.readCardTypeTV.setText("褰撳墠涓烘竻闆跺崱");
-                                    stopAnim();
-                                    break;
-                                case CardCommon.REGISTERED_CARD_TYPE:
-                                    viweGone(false);
-                                    redCardBinding.readCardTypeTV.setText("褰撳墠涓洪噸鏂版敞鍐岃澶囧崱");
-                                    stopAnim();
 
-                                    break;
-                                case CardCommon.CLEAN_ALL_USER_CARD_TYPE:
-                                    viweGone(false);
-                                    redCardBinding.readCardTypeTV.setText("褰撳墠涓哄垹闄ゅ叏閮ㄧ敤鎴峰崱");
-                                    stopAnim();
-                                    break;
-                                case CardCommon.DOMAIN_CARD_TYPE:
-                                    viweGone(false);
-                                    redCardBinding.readCardTypeTV.setText("褰撳墠涓鸿缃煙鍚嶅崱");
-                                    DomainCard domainCard = DomainCard.toBean(data);
-                                    assert domainCard != null;
-                                    redCardBinding.readCardDataTV.setText("搴忓彿锛�" + domainCard.getDomainNumber() + "\n" + "鍩熷悕锛�" + domainCard.getDomainName() + "\n" + "绔彛鍙凤細" + domainCard.getPort());
-                                    stopAnim();
-                                    break;
-                                case CardCommon.TEST_CARD_TYPE:
-                                    viweGone(false);
-                                    redCardBinding.readCardTypeTV.setText("褰撳墠涓烘祴璇曞崱");
-                                    stopAnim();
-                                    break;
-                                case CardCommon.CONFIGURATION_CARD_TYPE:
-                                    viweGone(false);
-                                    redCardBinding.readCardTypeTV.setText("褰撳墠涓洪厤缃澶囨敞鍐屼俊鎭崱");
-                                    stopAnim();
-                                    break;
-                                case CardCommon.CONFIGURATION_POWER_CARD_TYPE:
-                                    viweGone(false);
-                                    redCardBinding.readCardTypeTV.setText("褰撳墠閰嶇疆姘存车鍔熺巼鍗�");
-                                    ConfigurationPowerCard powerCard = ConfigurationPowerCard.toBean(data.get(0));
-                                    redCardBinding.readCardDataTV.setText(powerCard.getPower());
-                                    stopAnim();
-                                    break;
-                                case CardCommon.BLACK:
-                                    viweGone(false);
-                                    redCardBinding.readCardTypeTV.setText("褰撳墠涓洪粦鍗�");
-                                    BlackCard blackCard = BlackCard.getBean(data);
-                                    redCardBinding.readCardDataTV.setText("褰撳墠榛戝崱鐢ㄦ埛鍙蜂负锛�" + blackCard.getBlackCard());
-                                    break;
-                                case CardCommon.REGION:
-                                    viweGone(false);
-                                    redCardBinding.readCardTypeTV.setText("褰撳墠涓哄尯鍩熻〃鍙峰崱");
-                                    RegionCard regionCard = RegionCard.getBean(data);
-                                    StringBuilder stringBuilder = new StringBuilder();
-                                    stringBuilder.append("鍖哄煙鍦板潃锛�").append(regionCard.getRegion()).append("\n");
-                                    stringBuilder.append("鎺у埗鍣ㄧ紪鍙凤細").append(regionCard.getControllerCodel()).append("\n");
-                                    redCardBinding.readCardDataTV.setText(stringBuilder.toString());
-                                    break;
-                                case CardCommon.ELECTRIC_PRICE:
-                                    viweGone(false);
-                                    redCardBinding.readCardTypeTV.setText("褰撳墠涓虹數閲忓崟浠峰崱");
-                                    ElectricPriceCard electricPriceCard = ElectricPriceCard.getBean(data);
-                                    StringBuilder electricPriceBuilder = new StringBuilder();
-                                    electricPriceBuilder.append("鐢甸噺鍗曚环锛�").append(electricPriceCard.getElectricPrice()).append("\n");
-                                    redCardBinding.readCardDataTV.setText(electricPriceBuilder.toString());
-                                    break;
-                                default:
-                                    TipUtil.show(ReadCardAcitivy.this, "鍗$墖鏃犳硶璇嗗埆");
-                                    stopAnim();
-                                    break;
-                            }
 
+        String cardType = NfcReadHelper.getInstence(intent, this).getCradTypeAndCardNumber();
+
+        String[] cardTypes = cardType.split(",");
+        if (cardTypes != null && cardTypes.length == 2) {
+            cardNumber = cardType.split(",")[0];
+            cardNumber = HexUtil.spaceHex(cardNumber);
+            cardNumber = HexUtil.HighLowHex(cardNumber);
+            cardType = cardType.split(",")[1];
+        }
+        List<byte[]> data = NfcReadHelper.getInstence(intent, this).getOnesectorData();
+        String state = "";
+        if (cardType.equalsIgnoreCase(CardCommon.USER_CARD_TYPE_1)) {
+            state = "缁堢鍐欏崱";
+        } else if (cardType.equalsIgnoreCase(CardCommon.USER_CARD_TYPE_2)) {
+            state = "鍒峰崱寮�娉靛悗";
+        } else if (cardType.equalsIgnoreCase(CardCommon.USER_CARD_TYPE_3)) {
+            state = "鍙犲姞鍏呭��";
+        }
+        switch (cardType) {
+            case CardCommon.USER_CARD_TYPE_1:
+            case CardCommon.USER_CARD_TYPE_2:
+            case CardCommon.USER_CARD_TYPE_3:
+
+                if (!data.isEmpty()) {
+                    if (!TextUtils.isEmpty(cardNumber)) {
+                        userCard = new UserCard().getBean(data);
+                        List<UserCardBean> userCardBeans = baseDao.userCardDao().findUserName(cardNumber);
+                        if (userCardBeans != null && !userCardBeans.isEmpty()) {
+                            UserCardBean userName = userCardBeans.get(0);
+                            setUserData(userName.getUserName(), state, cardNumber);
                         } else {
-                            TipUtil.show(ReadCardAcitivy.this, "鍗$墖鏃犳硶璇嗗埆");
+                            setUserData("鏈煡璇㈠埌鐢ㄦ埛鍚�", state, cardNumber);
+                        }
+                    } else {
+
+                    }
+                } else {
+                    TipUtil.show("鍗$墖璇嗗埆閿欒,璇烽噸璇曪紒");
+                }
+
+                break;
+            case CardCommon.MANAGE_CRAD://绠$悊鍗�
+                ManageCard manageCard = ManageCard.getBean(data);
+                viweGone(false);
+                 userCardStr = manageCard.getUserCard().toUpperCase();
+                userCardStr = HexUtil.spaceHex(userCardStr);
+                userCardStr = HexUtil.HighLowHex(userCardStr);
+                redCardBinding.readCardTypeTV.setText("褰撳墠涓虹鐞嗗崱" + "\n\n"
+                        + "鍘熷鍗″彿锛�" + userCardStr);
+                if (manageCard.getType()==(byte) 1){
+                    //褰�01鏃跺皢1鎵囧尯0鍧楀師绠$悊鍗′俊鎭敼鎴愮敤鎴峰崱鍐呭
+                     confirmDialog=new ConfirmDialog(this, "鏄惁纭琛ュ崱锛岃鍗″皢鎴愪负鏂扮敤鎴峰崱锛熷苟涓斾笉瑕佺Щ鍔ㄥ崱鐗�", new View.OnClickListener() {
+                        @Override
+                        public void onClick(View v) {
+                            ProgressDialog.show(ReadCardAcitivy.this);
+                            try {
+                                confirmDialog.dismiss();
+
+                                List<UserCardBean> userCardBeans = baseDao.userCardDao().findUserName(userCardStr);
+                                if (userCardBeans != null && !userCardBeans.isEmpty()) {
+                                    UserCardBean userName = userCardBeans.get(0);
+                                    userName.setCardNumber(cardNumber);
+                                    baseDao.userCardDao().update(userName);
+                                }
+
+                                NFCWriteHelper nfcWriteHelper=   NFCWriteHelper.getInstence(intent,ReadCardAcitivy.this);
+                                adminData = baseDao.adminDao().findFirst();
+                                ManagerToUserCard managerToUserCard=new ManagerToUserCard();
+                                managerToUserCard.setArerNumber(Integer.valueOf(adminData.getSerial()));
+                                managerToUserCard.setDeviceNumberl(Integer.valueOf(adminData.getAddressCode()));
+                                managerToUserCard.setTotalElectric(manageCard.getTotalElectric());
+                                if (nfcWriteHelper.writeData(managerToUserCard.getZeroBytes(),1,0)){
+                                    TipUtil.show(ReadCardAcitivy.this, "琛ュ崱鎴愬姛", () -> ReadCardAcitivy.this.finish());
+                                }else {
+                                    TipUtil.show(ReadCardAcitivy.this, "琛ュ崱澶辫触锛岃閲嶆柊鍒峰崱", () -> ReadCardAcitivy.this.finish());
+                                }
+
+
+                            } catch (Exception e) {
+                               e.printStackTrace();
+                            }
                             stopAnim();
                         }
+                    });
+                    confirmDialog.show();
+                }
+                break;
+            case CardCommon.CLEAN_CARD_TYPE:
+                viweGone(false);
+                redCardBinding.readCardTypeTV.setText("褰撳墠涓烘竻闆跺崱");
+                break;
+            case CardCommon.REGISTERED_CARD_TYPE:
+                viweGone(false);
+                redCardBinding.readCardTypeTV.setText("褰撳墠涓洪噸鏂版敞鍐岃澶囧崱");
+                break;
+            case CardCommon.CLEAN_ALL_USER_CARD_TYPE:
+                viweGone(false);
+                redCardBinding.readCardTypeTV.setText("褰撳墠涓哄垹闄ゅ叏閮ㄧ敤鎴峰崱");
+                break;
+            case CardCommon.DOMAIN_CARD_TYPE:
+                viweGone(false);
+                redCardBinding.readCardTypeTV.setText("褰撳墠涓鸿缃煙鍚嶅崱");
+                if (!data.isEmpty()) {
+                    DomainCard domainCard = DomainCard.toBean(data);
+                    assert domainCard != null;
+                    redCardBinding.readCardDataTV.setText("搴忓彿锛�" + domainCard.getDomainNumber() + "\n" + "鍩熷悕锛�" + domainCard.getDomainName() + "\n" + "绔彛鍙凤細" + domainCard.getPort());
+                } else {
+                    TipUtil.show("鍗$墖璇嗗埆閿欒,璇烽噸璇曪紒");
+                }
+                break;
+            case CardCommon.TEST_CARD_TYPE:
+                viweGone(false);
+                redCardBinding.readCardTypeTV.setText("褰撳墠涓烘祴璇曞崱");
+                break;
+            case CardCommon.CONFIGURATION_CARD_TYPE:
+                viweGone(false);
+                redCardBinding.readCardTypeTV.setText("褰撳墠涓洪厤缃澶囨敞鍐屼俊鎭崱");
+                break;
+            case CardCommon.CONFIGURATION_POWER_CARD_TYPE:
+                viweGone(false);
+                redCardBinding.readCardTypeTV.setText("褰撳墠閰嶇疆姘存车鍔熺巼鍗�");
+                if (!data.isEmpty()) {
+                    ConfigurationPowerCard powerCard = ConfigurationPowerCard.toBean(data.get(0));
+                    redCardBinding.readCardDataTV.setText(powerCard.getPower());
+                } else {
+                    TipUtil.show("鍗$墖璇嗗埆閿欒,璇烽噸璇曪紒");
+                }
+                break;
+            case CardCommon.BLACK:
+                viweGone(false);
+                redCardBinding.readCardTypeTV.setText("褰撳墠涓洪粦鍗�");
+                BlackCard blackCard = BlackCard.getBean(data);
+                redCardBinding.readCardDataTV.setText("褰撳墠榛戝崱鐢ㄦ埛鍙蜂负锛�" + blackCard.getBlackCard());
+                break;
+            case CardCommon.REGION:
+                viweGone(false);
+                redCardBinding.readCardTypeTV.setText("褰撳墠涓哄尯鍩熻〃鍙峰崱");
+                if (!data.isEmpty()) {
+                    RegionCard regionCard = RegionCard.getBean(data);
+                    StringBuilder stringBuilder = new StringBuilder();
+                    stringBuilder.append("鍖哄煙鍦板潃锛�").append(regionCard.getRegion()).append("\n");
+                    stringBuilder.append("鎺у埗鍣ㄧ紪鍙凤細").append(regionCard.getControllerCodel()).append("\n");
+                    redCardBinding.readCardDataTV.setText(stringBuilder.toString());
+                } else {
+                    TipUtil.show("鍗$墖璇嗗埆閿欒,璇烽噸璇曪紒");
+                }
 
-                    }
+                break;
+            case CardCommon.ELECTRIC_PRICE:
+                viweGone(false);
+                redCardBinding.readCardTypeTV.setText("褰撳墠涓虹數閲忓崟浠峰崱");
+                if (!data.isEmpty()) {
+                    ElectricPriceCard electricPriceCard = ElectricPriceCard.getBean(data);
+                    StringBuilder electricPriceBuilder = new StringBuilder();
+                    electricPriceBuilder.append("鐢甸噺鍗曚环锛�").append(electricPriceCard.getElectricPrice());
+                    electricPriceBuilder.append("鍏�");
+                    redCardBinding.readCardDataTV.setText(electricPriceBuilder.toString());
+                } else {
+                    TipUtil.show("鍗$墖璇嗗埆閿欒,璇烽噸璇曪紒");
+                }
+                break;
+            default:
+                TipUtil.show(ReadCardAcitivy.this, "鍗$墖鏃犳硶璇嗗埆");
+                break;
+        }
+        stopAnim();
 
-                    @Override
-                    public void error(int code) {
-                        switch (code) {
-                            case CardCommon.ERROR_MOVE:
-                                stopAnim();
-                                TipUtil.show("杩炴帴涓柇锛岃閲嶆柊璐村悎鍗$墖");
-                                break;
-                            default:
-                                stopAnim();
-                                TipUtil.show("鍗$墖璇嗗埆閿欒,璇烽噸璇曪紒");
-                        }
-                    }
-                });
     }
 
 

--
Gitblit v1.8.0