From fc1ec55e6ad56dc92737657750bcca7ed49f53eb Mon Sep 17 00:00:00 2001
From: zuoxiao <470321431@qq.com>
Date: 星期一, 29 七月 2024 14:44:35 +0800
Subject: [PATCH] 齐河联网版程序和通讯相关工具

---
 qiheonlinelibrary/build.gradle                                                                         |   91 
 qiheonlinelibrary/src/main/java/com/dayu/qiheonlinelibrary/dao/DomainPortDao.java                      |   35 
 qiheonlinelibrary/src/main/java/com/dayu/qiheonlinelibrary/dao/DeviceNumberDao.java                    |   32 
 qiheonlinelibrary/src/main/java/com/dayu/qiheonlinelibrary/net/MyCallBack.java                         |   28 
 qiheonlinelibrary/src/main/res/layout/activity_red_card_qhl.xml                                        |  197 
 qiheonlinelibrary/src/main/res/layout/activity_admin_setup_qhl.xml                                     |  172 
 qiheonlinelibrary/src/main/java/com/dayu/qiheonlinelibrary/card/TestCard.java                          |   41 
 qiheonlinelibrary/src/main/java/com/dayu/qiheonlinelibrary/adapter/ManagerCardAdapter.java             |   98 
 qiheonlinelibrary/src/main/java/com/dayu/qiheonlinelibrary/net/subscribers/ProgressSubscriber.java     |  131 
 qiheonlinelibrary/src/main/java/com/dayu/qiheonlinelibrary/dbBean/RegionBean.java                      |   37 
 qiheonlinelibrary/src/main/java/com/dayu/qiheonlinelibrary/utils/DeviceNumberUtils.java                |   38 
 qiheonlinelibrary/src/main/res/layout/activity_newcard_list_qhl.xml                                    |   49 
 qiheonlinelibrary/src/main/res/layout/activity_patch_qhl.xml                                           |  192 
 qiheonlinelibrary/src/main/res/layout/activity_recharge_qhl.xml                                        |  253 +
 qiheonlinelibrary/src/main/res/layout/qihe_line_item_replacements.xml                                  |   82 
 qiheonlinelibrary/src/main/java/com/dayu/qiheonlinelibrary/dbBean/CardData.java                        |   43 
 qiheonlinelibrary/src/main/java/com/dayu/qiheonlinelibrary/dao/PassWordCardDao.java                    |   32 
 qiheonlinelibrary/src/main/java/com/dayu/qiheonlinelibrary/utils/ExcelUtil.java                        |  190 
 qiheonlinelibrary/src/main/res/layout/activity_region_qhl.xml                                          |   96 
 qiheonlinelibrary/src/main/java/com/dayu/qiheonlinelibrary/net/progress/ProgressCancelListener.java    |    9 
 qiheonlinelibrary/src/main/java/com/dayu/qiheonlinelibrary/tools/NFCWriteHelper.java                   |  254 +
 qiheonlinelibrary/src/main/java/com/dayu/qiheonlinelibrary/net/RSAUtile.java                           |   32 
 qiheonlinelibrary/src/main/res/layout/activity_new_card_qhl.xml                                        |  168 
 henanlibrary/src/main/res/layout/activity_admin_hn.xml                                                 |   16 
 qiheonlinelibrary/src/main/java/com/dayu/qiheonlinelibrary/utils/ToastUtil.java                        |   49 
 qiheonlinelibrary/src/main/res/layout/activity_water_num_qhl.xml                                       |  211 
 qiheonlinelibrary/src/main/java/com/dayu/qiheonlinelibrary/activity/PasswordCardActivity.java          |   94 
 qiheonlinelibrary/src/main/java/com/dayu/qiheonlinelibrary/card/RegionCard.java                        |   94 
 qiheonlinelibrary/src/main/res/layout/activity_identyfying_qhl.xml                                     |   90 
 qiheonlinelibrary/src/main/res/layout/activity_power_qhl.xml                                           |   62 
 app/src/main/res/layout/activity_login.xml                                                             |   23 
 baselibrary/src/main/res/layout/library_dialog.xml                                                     |   20 
 pickerviewlibrary/src/main/java/com/example/pickerviewlibrary/picker/util/AddressSqLite_DB_Utile.java  |    4 
 qiheonlinelibrary/src/main/java/com/dayu/qiheonlinelibrary/activity/RechargeListActivity.java          |  187 
 qiheonlinelibrary/src/main/res/layout/activity_write_text_qhl.xml                                      |   56 
 qiheonlinelibrary/src/main/java/com/dayu/qiheonlinelibrary/net/RetrofitClient.java                     |   69 
 qiheonlinelibrary/src/main/java/com/dayu/qiheonlinelibrary/activity/ManagerListActivity.java           |  152 
 qiheonlinelibrary/src/main/java/com/dayu/qiheonlinelibrary/dao/AdminDataDao.java                       |   32 
 qiheonlinelibrary/src/main/java/com/dayu/qiheonlinelibrary/adapter/BaseRecyclerAdapter.java            |   65 
 qiheonlinelibrary/src/main/java/com/dayu/qiheonlinelibrary/utils/MyJsonParser.java                     |  604 ++
 qihealonelibrary/src/main/res/layout/activity_parameter_qha.xml                                        |   12 
 qiheonlinelibrary/src/main/java/com/dayu/qiheonlinelibrary/adapter/NewCardAdapter.java                 |  100 
 qiheonlinelibrary/src/main/java/com/dayu/qiheonlinelibrary/adapter/RechargeAdapter.java                |  102 
 app/src/main/java/com/dayu/recharge/activity/LoginActivity.java                                        |   29 
 qiheonlinelibrary/src/main/res/layout/activity_my_qhl.xml                                              |  203 
 qiheonlinelibrary/src/main/res/layout/activity_electric_meter_qhl.xml                                  |   58 
 qiheonlinelibrary/src/main/java/com/dayu/qiheonlinelibrary/activity/RegionActivity.java                |   69 
 qiheonlinelibrary/src/main/java/com/dayu/qiheonlinelibrary/dao/UserCardDao.java                        |   49 
 qihealonelibrary/src/main/res/layout/activity_home_qha.xml                                             |   12 
 qiheonlinelibrary/src/main/java/com/dayu/qiheonlinelibrary/activity/SysActivity.java                   |   98 
 qiheonlinelibrary/src/main/java/com/dayu/qiheonlinelibrary/net/ApiManager.java                         |  160 
 qihealonelibrary/src/main/res/layout/activity_my_qha.xml                                               |   24 
 qiheonlinelibrary/src/main/java/com/dayu/qiheonlinelibrary/card/ElectricPriceCard.java                 |   83 
 qihealonelibrary/src/main/res/layout/activity_admin_qha.xml                                            |   12 
 qiheonlinelibrary/.gitignore                                                                           |    1 
 qiheonlinelibrary/src/main/java/com/dayu/qiheonlinelibrary/activity/NewCardActivity.java               |  310 +
 qiheonlinelibrary/src/main/java/com/dayu/qiheonlinelibrary/dao/PowerDao.java                           |   32 
 qiheonlinelibrary/src/main/java/com/dayu/qiheonlinelibrary/net/ApiService.java                         |   54 
 qiheonlinelibrary/src/main/java/com/dayu/qiheonlinelibrary/net/subscribers/SubscriberListener.java     |   24 
 qiheonlinelibrary/src/main/java/com/dayu/qiheonlinelibrary/activity/PowerActivity.java                 |   59 
 qiheonlinelibrary/src/main/java/com/dayu/qiheonlinelibrary/card/CleanUserCard.java                     |   36 
 qiheonlinelibrary/src/main/java/com/dayu/qiheonlinelibrary/dao/ElectricPriceDao.java                   |   32 
 qiheonlinelibrary/src/main/res/layout/net_loding.xml                                                   |   17 
 qiheonlinelibrary/src/main/res/layout/activity_domain_qhl.xml                                          |   83 
 qiheonlinelibrary/src/main/java/com/dayu/qiheonlinelibrary/dao/IpDao.java                              |   32 
 qiheonlinelibrary/src/main/java/com/dayu/qiheonlinelibrary/activity/NFCWreatActivity.java              |  633 ++
 qiheonlinelibrary/src/main/java/com/dayu/qiheonlinelibrary/view/ProgressDialog.java                    |   26 
 app/src/main/java/com/dayu/recharge/MyApplication.java                                                 |    3 
 qiheonlinelibrary/src/main/java/com/dayu/qiheonlinelibrary/net/progress/ProgressDialogHandler.java     |   84 
 qiheonlinelibrary/src/main/java/com/dayu/qiheonlinelibrary/card/ManageCard.java                        |   99 
 qiheonlinelibrary/src/main/java/com/dayu/qiheonlinelibrary/activity/BaseActivity.java                  |   83 
 qiheonlinelibrary/src/main/res/layout/activity_patch_list_qhl.xml                                      |   26 
 qiheonlinelibrary/src/main/cpp/qiheonline-native-lib.cpp                                               |   70 
 qiheonlinelibrary/src/main/java/com/dayu/qiheonlinelibrary/card/CleanCard.java                         |   40 
 baselibrary/src/main/java/com/dayu/baselibrary/utils/BaseCommon.java                                   |    2 
 local.properties                                                                                       |    4 
 qiheonlinelibrary/src/main/java/com/dayu/qiheonlinelibrary/activity/BaseNfcActivity.java               |  106 
 qiheonlinelibrary/src/main/java/com/dayu/qiheonlinelibrary/activity/ManageSetUpActivity.java           |   17 
 qiheonlinelibrary/src/main/java/com/dayu/qiheonlinelibrary/card/BaseCard.java                          |   56 
 qiheonlinelibrary/src/main/java/com/dayu/qiheonlinelibrary/tools/BaseNFCHelper.java                    |   80 
 qiheonlinelibrary/src/main/java/com/dayu/qiheonlinelibrary/dao/RegionDao.java                          |   37 
 qiheonlinelibrary/src/main/java/com/dayu/qiheonlinelibrary/dao/IdentityDao.java                        |   34 
 qiheonlinelibrary/src/main/java/com/dayu/qiheonlinelibrary/dao/BaseDaoSingleton.java                   |   47 
 qiheonlinelibrary/src/main/res/values/colors.xml                                                       |   10 
 qiheonlinelibrary/src/main/java/com/dayu/qiheonlinelibrary/utils/SharedPreferencesHelper.java          |  184 
 qiheonlinelibrary/src/main/java/com/dayu/qiheonlinelibrary/card/ConfigurationPowerCard.java            |   78 
 qiheonlinelibrary/src/main/java/com/dayu/qiheonlinelibrary/dbBean/RechargeBean.java                    |  119 
 qiheonlinelibrary/src/main/res/layout/activity_password_card_qhl.xml                                   |   62 
 qiheonlinelibrary/src/main/java/com/dayu/qiheonlinelibrary/activity/NewCardListActivity.java           |  190 
 pickerviewlibrary/src/main/java/com/example/pickerviewlibrary/picker/TeaPickerView.java                |    2 
 qiheonlinelibrary/src/main/AndroidManifest.xml                                                         |   92 
 qiheonlinelibrary/src/main/java/com/dayu/qiheonlinelibrary/activity/PassWordActivity.java              |   65 
 henanlibrary/src/main/res/layout/activity_home_hn.xml                                                  |   12 
 qiheonlinelibrary/src/main/java/com/dayu/qiheonlinelibrary/dbBean/PowerBean.java                       |   26 
 qiheonlinelibrary/src/main/res/layout/activity_manager_list_qhl.xml                                    |   37 
 qiheonlinelibrary/src/main/java/com/dayu/qiheonlinelibrary/dbBean/PassWordCardBean.java                |   36 
 qiheonlinelibrary/src/main/java/com/dayu/qiheonlinelibrary/activity/ParameterActivity.java             |   59 
 qiheonlinelibrary/src/main/java/com/dayu/qiheonlinelibrary/dbBean/DomainBean.java                      |   46 
 qiheonlinelibrary/src/main/res/layout/qihe_line_item_recharge.xml                                      |   83 
 qiheonlinelibrary/src/main/java/com/dayu/qiheonlinelibrary/activity/ReadCardAcitivy.java               |  289 +
 qiheonlinelibrary/src/main/java/com/dayu/qiheonlinelibrary/card/PassWordCard.java                      |   71 
 qiheonlinelibrary/src/main/java/com/dayu/qiheonlinelibrary/dao/RechargeDao.java                        |   45 
 qiheonlinelibrary/src/main/res/layout/activity_location_qhl.xml                                        |   33 
 qiheonlinelibrary/src/main/java/com/dayu/qiheonlinelibrary/net/BaseResponse.java                       |   63 
 app/build.gradle                                                                                       |   11 
 qiheonlinelibrary/src/main/java/com/dayu/qiheonlinelibrary/dbBean/UserCardBean.java                    |  122 
 qiheonlinelibrary/src/main/java/com/dayu/qiheonlinelibrary/net/Constants.java                          |   25 
 qiheonlinelibrary/src/main/java/com/dayu/qiheonlinelibrary/net/ApiCallback.java                        |   13 
 qiheonlinelibrary/src/androidTest/java/com/dayu/qiheonlinelibrary/ExampleInstrumentedTest.java         |   26 
 qiheonlinelibrary/src/main/java/com/dayu/qiheonlinelibrary/dbBean/IpBean.java                          |   42 
 qiheonlinelibrary/src/main/java/com/dayu/qiheonlinelibrary/card/RegisteredCard.java                    |   40 
 henanlibrary/src/main/res/layout/activity_parameter_hn.xml                                             |   10 
 qiheonlinelibrary/proguard-rules.pro                                                                   |   25 
 qiheonlinelibrary/src/main/res/layout/activity_manager_read_qhl.xml                                    |  196 
 qiheonlinelibrary/src/main/java/com/dayu/qiheonlinelibrary/activity/DomainActivity.java                |   74 
 qiheonlinelibrary/src/main/java/com/dayu/qiheonlinelibrary/bean/BaseNetBean.java                       |   10 
 qiheonlinelibrary/src/test/java/com/dayu/qiheonlinelibrary/ExampleUnitTest.java                        |   17 
 henanlibrary/src/main/res/layout/activity_my_hn.xml                                                    |   18 
 baselibrary/src/main/res/values/colors.xml                                                             |    3 
 qiheonlinelibrary/src/main/java/com/dayu/qiheonlinelibrary/activity/MyActivity.java                    |  313 +
 qiheonlinelibrary/src/main/java/com/dayu/qiheonlinelibrary/card/BlackCard.java                         |   69 
 qiheonlinelibrary/src/main/java/com/dayu/qiheonlinelibrary/dao/QHOnLineAppDatabase.java                |   58 
 qiheonlinelibrary/src/main/java/com/dayu/qiheonlinelibrary/card/DomainCard.java                        |  181 
 baselibrary/src/main/java/com/dayu/baselibrary/view/LibraryDialog.java                                 |   13 
 qiheonlinelibrary/src/main/java/com/dayu/qiheonlinelibrary/activity/AdminSetupActivity.java            |  179 
 qiheonlinelibrary/src/main/java/com/dayu/qiheonlinelibrary/activity/ElectricPriceActivity.java         |   95 
 pickerviewlibrary/src/main/assets/address_2023.db                                                      |    0 
 qiheonlinelibrary/src/main/java/com/dayu/qiheonlinelibrary/net/progress/NetLoadingDialog.java          |   68 
 qiheonlinelibrary/src/main/java/com/dayu/qiheonlinelibrary/net/subscribers/BaseProgressSubscriber.java |   65 
 qiheonlinelibrary/src/main/res/layout/activity_ip_qhl.xml                                              |   71 
 qiheonlinelibrary/src/main/res/layout/qihe_line_item_new_card.xml                                      |   74 
 qiheonlinelibrary/src/main/java/com/dayu/qiheonlinelibrary/tools/NfcReadHelper.java                    |  522 ++
 qiheonlinelibrary/src/main/res/layout/activity_electricty_price_qhl.xml                                |  211 
 qiheonlinelibrary/src/main/res/layout/activity_psw_qhl.xml                                             |   58 
 qiheonlinelibrary/src/main/java/com/dayu/qiheonlinelibrary/card/UserCard.java                          |  331 +
 qiheonlinelibrary/src/main/res/layout/activity_parameter_qhl.xml                                       |   85 
 qiheonlinelibrary/src/main/java/com/dayu/qiheonlinelibrary/dbBean/AdminDataBean.java                   |  126 
 qiheonlinelibrary/src/main/java/com/dayu/qiheonlinelibrary/activity/RechargeDetailActivity.java        |   90 
 qiheonlinelibrary/src/main/res/layout/activity_electric_price_qhl.xml                                  |   61 
 qiheonlinelibrary/src/main/java/com/dayu/qiheonlinelibrary/activity/IdentifyingActivity.java           |  165 
 qiheonlinelibrary/src/main/res/layout/activity_recharge_list_qhl.xml                                   |   47 
 qiheonlinelibrary/CMakeLists.txt                                                                       |   44 
 qiheonlinelibrary/src/main/java/com/dayu/qiheonlinelibrary/card/ConfigureDeviceRegistrationCrad.java   |   43 
 qiheonlinelibrary/src/main/java/com/dayu/qiheonlinelibrary/net/MyIntercepterApplication.java           |   92 
 qiheonlinelibrary/src/main/res/layout/activity_recharge_ext_qhl.xml                                    |  135 
 qiheonlinelibrary/src/main/java/com/dayu/qiheonlinelibrary/view/AdminCardDialog.java                   |  114 
 qiheonlinelibrary/src/main/res/layout/activity_main_qhl.xml                                            |   27 
 qiheonlinelibrary/src/main/java/com/dayu/qiheonlinelibrary/card/ManagerToUserCard.java                 |  104 
 qiheonlinelibrary/src/main/java/com/dayu/qiheonlinelibrary/tools/WriteCardUtils.java                   |   24 
 qiheonlinelibrary/src/main/res/layout/activity_admin_qhl.xml                                           |  102 
 qiheonlinelibrary/src/main/java/com/dayu/qiheonlinelibrary/dao/CardDataDao.java                        |   31 
 settings.gradle                                                                                        |    2 
 baselibrary/src/main/res/color/text_selecter_color.xml                                                 |    8 
 qiheonlinelibrary/src/main/java/com/dayu/qiheonlinelibrary/activity/ManagerReadActivity.java           |   63 
 qiheonlinelibrary/src/main/java/com/dayu/qiheonlinelibrary/QHOnLineApplication.java                    |   37 
 henanlibrary/src/main/java/com/dayu/henanlibrary/activity/ReadCardAcitivy.java                         |    2 
 qiheonlinelibrary/src/main/java/com/dayu/qiheonlinelibrary/dbBean/DeviceNumber.java                    |   29 
 qiheonlinelibrary/src/main/java/com/dayu/qiheonlinelibrary/utils/CardCommon.java                       |  127 
 qiheonlinelibrary/src/main/java/com/dayu/qiheonlinelibrary/dbBean/IdentityBean.java                    |   34 
 qiheonlinelibrary/src/main/res/layout/activity_recharge_detail_qhl.xml                                 |  106 
 qiheonlinelibrary/src/main/res/layout/admincard_line_dialog.xml                                        |  104 
 /dev/null                                                                                              |    0 
 qiheonlinelibrary/src/main/res/layout/qihe_line_item_patch.xml                                         |   74 
 qiheonlinelibrary/src/main/java/com/dayu/qiheonlinelibrary/dbBean/ElectricPriceBean.java               |   25 
 qiheonlinelibrary/src/main/res/layout/activity_replacement_qhl.xml                                     |   37 
 qiheonlinelibrary/src/main/res/layout/activity_water_meter_qhl.xml                                     |   58 
 qiheonlinelibrary/src/main/java/com/dayu/qiheonlinelibrary/activity/RechargeActivity.java              |  267 +
 qiheonlinelibrary/src/main/res/layout/activity_home_qhl.xml                                            |   93 
 qiheonlinelibrary/src/main/java/com/dayu/qiheonlinelibrary/activity/HomeActivity.java                  |  121 
 qiheonlinelibrary/src/main/res/layout/activity_read_text_qhl.xml                                       |   34 
 170 files changed, 14,236 insertions(+), 83 deletions(-)

diff --git a/app/build.gradle b/app/build.gradle
index ed99b59..c32469c 100644
--- a/app/build.gradle
+++ b/app/build.gradle
@@ -10,14 +10,14 @@
         }
     }
     namespace 'com.dayu.recharge'
-    compileSdk 33
+    compileSdk 34
 
     defaultConfig {
         applicationId "com.dayu.recharge"
         minSdk 23
         targetSdk 26
-        versionCode 253
-        versionName "2.5.3"
+        versionCode 256
+        versionName "2.5.6"
         testInstrumentationRunner "androidx.test.runner.AndroidJUnitRunner"
 
         ndk {
@@ -72,6 +72,7 @@
     implementation project(':henanlibrary')
     implementation project(':baselibrary')
     implementation project(':qihealonelibrary')
+    implementation project(':qiheonlinelibrary')
 
     implementation 'com.tencent.bugly:crashreport:4.1.9.3'
 //    澶勭悊鍥剧墖
@@ -88,5 +89,5 @@
 
     implementation 'io.reactivex.rxjava3:rxandroid:3.0.0'
 
-
-}
\ No newline at end of file
+    implementation 'com.google.code.gson:gson:2.10.1'
+}
diff --git a/app/libs/gson-2.7.jar b/app/libs/gson-2.7.jar
deleted file mode 100644
index be5b59b..0000000
--- a/app/libs/gson-2.7.jar
+++ /dev/null
Binary files differ
diff --git a/app/src/main/java/com/dayu/recharge/MyApplication.java b/app/src/main/java/com/dayu/recharge/MyApplication.java
index a70b71f..f145459 100644
--- a/app/src/main/java/com/dayu/recharge/MyApplication.java
+++ b/app/src/main/java/com/dayu/recharge/MyApplication.java
@@ -11,6 +11,7 @@
 import com.dayu.henanlibrary.dao.HNBaseDaoSingleton;
 import com.dayu.henanlibrary.dbBean.AdminDataBean;
 import com.dayu.qihealonelibrary.QHAloneApplication;
+import com.dayu.qiheonlinelibrary.QHOnLineApplication;
 import com.tencent.bugly.crashreport.CrashReport;
 
 import java.io.File;
@@ -57,6 +58,8 @@
                     case BaseCommon.QHAloneLibrary:
                         QHAloneApplication.getInstance().application = this;
                         break;
+                    case BaseCommon.QHOnLineLibrary:
+                        QHOnLineApplication.getInstance().application = this;
                 }
             }
         } catch (Exception e) {
diff --git a/app/src/main/java/com/dayu/recharge/activity/LoginActivity.java b/app/src/main/java/com/dayu/recharge/activity/LoginActivity.java
index 3ab6edb..230959b 100644
--- a/app/src/main/java/com/dayu/recharge/activity/LoginActivity.java
+++ b/app/src/main/java/com/dayu/recharge/activity/LoginActivity.java
@@ -5,6 +5,7 @@
 import android.content.pm.PackageManager;
 import android.os.Bundle;
 import android.text.TextUtils;
+import android.util.Log;
 import android.view.LayoutInflater;
 import android.widget.Toast;
 
@@ -51,6 +52,10 @@
         setContentView(binding.getRoot());
         getPermission();
         initView();
+        if (MyApplication.myApplication.libraryType == BaseCommon.NoLibrary) {
+            choesLibrary();
+            //娌℃湁閫夋嫨鐗堟湰鍏堥�夋嫨鐗堟湰
+        }
     }
 
     private void initView() {
@@ -69,12 +74,9 @@
             }
             if ((passWordBean == null && psStr.equals("123456"))
                     || passWordBean != null && passWordBean.getPassWord().equalsIgnoreCase(WSMD5.getMD5Str(psStr))) {
-                if (MyApplication.myApplication.libraryType == BaseCommon.NoLibrary) {
-                    choesLibrary();
-                    //娌℃湁閫夋嫨鐗堟湰鍏堥�夋嫨鐗堟湰
-                } else {
+
                     startToHomeActivity();
-                }
+
             } else {
                 Toast.makeText(LoginActivity.this, "瀵嗙爜閿欒", Toast.LENGTH_SHORT).show();
             }
@@ -87,6 +89,16 @@
         }
     }
 
+
+
+
+    @Override
+    protected void onResume() {
+        super.onResume();
+        Log.i("LoginActivity","onResume");
+
+    }
+
     /**
      * 閫夋嫨鐗堟湰
      */
@@ -95,11 +107,10 @@
         LibraryDialog dialog = new LibraryDialog(this, type -> {
             if (type == BaseCommon.HeNanLibrary) {
                 getHNPermission();
-            } else if (type == BaseCommon.QHAloneLibrary) {
-
+            } else if (type == BaseCommon.QHOnLineLibrary) {
+                getHNPermission();
             }
             MyApplication.myApplication.initApplication();
-            startToHomeActivity();
         });
         dialog.show();
     }
@@ -109,6 +120,8 @@
             startActivity(new Intent(LoginActivity.this, com.dayu.henanlibrary.activity.HomeActivity.class));
         } else if (MyApplication.myApplication.libraryType == BaseCommon.QHAloneLibrary) {
             startActivity(new Intent(LoginActivity.this, HomeActivity.class));
+        }else if (MyApplication.myApplication.libraryType==BaseCommon.QHOnLineLibrary){
+            startActivity(new Intent(LoginActivity.this, com.dayu.qiheonlinelibrary.activity.HomeActivity.class));
         }
         LoginActivity.this.finish();
     }
diff --git a/app/src/main/res/layout/activity_login.xml b/app/src/main/res/layout/activity_login.xml
index 61e7c81..749d485 100644
--- a/app/src/main/res/layout/activity_login.xml
+++ b/app/src/main/res/layout/activity_login.xml
@@ -12,7 +12,7 @@
         android:layout_height="0dp"
         android:layout_marginLeft="20dp"
         android:layout_marginRight="20dp"
-        android:layout_weight="1.5"
+        android:layout_weight="1.3"
         android:gravity="center"
         android:text="@string/login_title"
         android:textSize="30sp"
@@ -23,7 +23,28 @@
         android:layout_height="0dp"
         android:layout_weight="1"
         android:orientation="vertical">
+        <LinearLayout
+            android:id="@+id/nameLL"
+            android:layout_width="match_parent"
+            android:layout_height="wrap_content"
+            android:layout_marginLeft="20dp"
+            android:layout_marginTop="20dp"
+            android:visibility="gone"
+            android:layout_marginRight="20dp">
 
+            <TextView
+                android:layout_width="wrap_content"
+                android:layout_height="wrap_content"
+                android:text="璐﹀彿锛�"
+                android:textSize="@dimen/text_size" />
+
+            <EditText
+                android:id="@+id/login_name"
+                android:layout_width="match_parent"
+                android:layout_height="wrap_content"
+                android:hint="璇疯緭鍏ヨ处鍙�"
+                android:text="" />
+        </LinearLayout>
         <LinearLayout
             android:layout_width="match_parent"
             android:layout_height="wrap_content"
diff --git a/baselibrary/libs/gson-2.7.jar b/baselibrary/libs/gson-2.7.jar
deleted file mode 100644
index be5b59b..0000000
--- a/baselibrary/libs/gson-2.7.jar
+++ /dev/null
Binary files differ
diff --git a/baselibrary/src/main/java/com/dayu/baselibrary/utils/BaseCommon.java b/baselibrary/src/main/java/com/dayu/baselibrary/utils/BaseCommon.java
index 8d2eae5..10ec380 100644
--- a/baselibrary/src/main/java/com/dayu/baselibrary/utils/BaseCommon.java
+++ b/baselibrary/src/main/java/com/dayu/baselibrary/utils/BaseCommon.java
@@ -15,6 +15,8 @@
     public final static int HeNanLibrary = 0;
     public final static int QHAloneLibrary = 1;
 
+    public final static int QHOnLineLibrary=2;
+
     /**
      * 褰撳墠鍗″瘑鐮侀敊璇紝涓嶆槸鏈叕鍙稿崱
      */
diff --git a/baselibrary/src/main/java/com/dayu/baselibrary/view/LibraryDialog.java b/baselibrary/src/main/java/com/dayu/baselibrary/view/LibraryDialog.java
index d593f50..8f9984f 100644
--- a/baselibrary/src/main/java/com/dayu/baselibrary/view/LibraryDialog.java
+++ b/baselibrary/src/main/java/com/dayu/baselibrary/view/LibraryDialog.java
@@ -2,6 +2,10 @@
 
 import static android.view.Gravity.CENTER;
 
+import static com.dayu.baselibrary.utils.BaseCommon.HeNanLibrary;
+import static com.dayu.baselibrary.utils.BaseCommon.QHAloneLibrary;
+import static com.dayu.baselibrary.utils.BaseCommon.QHOnLineLibrary;
+
 import android.app.Activity;
 import android.app.Dialog;
 import android.view.Gravity;
@@ -46,6 +50,7 @@
         getWindow().setGravity(CENTER);
         setContentView(R.layout.library_dialog);
         setCanceledOnTouchOutside(false);
+        setCancelable(false);
         RadioGroup radioGroup = findViewById(R.id.radioLibrary);
         libraryDao = BaseDaoSingleton.getInstance(mContext).libraryDao();
         if (libraryDao != null) {
@@ -58,13 +63,17 @@
                 ischose = true;
                 // 褰撻�変腑鐨凴adioButton鍙戠敓鍙樺寲鏃惰皟鐢�
                 if (checkedId == R.id.henanLibrary) {
-                    type = 0;
+                    type = HeNanLibrary;
                     libraryBean.setType(type);
                     data = "纭閫夋嫨娌冲崡鐗堟湰鍚楋紵";
                 } else if (checkedId == R.id.qhAloneLibrary) {// 澶勭悊閫変腑Option 2鐨勯�昏緫
-                    type = 1;
+                    type = QHAloneLibrary;
                     libraryBean.setType(type);
                     data = "纭閫夋嫨榻愭渤鍗曟満鐗堟湰鍚楋紵";
+                } else if (checkedId == R.id.qhOnLineLibrary) {// 澶勭悊閫変腑Option 2鐨勯�昏緫
+                    type = QHOnLineLibrary;
+                    libraryBean.setType(type);
+                    data = "纭閫夋嫨榻愭渤鑱旂綉鐗堟湰鍚楋紵";
                 }
             });
             TextView okBtn = findViewById(R.id.ok);
diff --git a/baselibrary/src/main/res/color/text_selecter_color.xml b/baselibrary/src/main/res/color/text_selecter_color.xml
new file mode 100644
index 0000000..0b6edfe
--- /dev/null
+++ b/baselibrary/src/main/res/color/text_selecter_color.xml
@@ -0,0 +1,8 @@
+<?xml version="1.0" encoding="utf-8"?>
+<selector xmlns:android="http://schemas.android.com/apk/res/android">
+	<item android:state_selected="true" android:color="@color/button_select_text_color"/>
+	<item android:state_pressed="true" android:color="@color/button_select_text_color"/>
+	<item android:state_checked="true" android:color="@color/button_select_text_color"/>
+	<item android:state_focused="true" android:color="@color/button_select_text_color"/>
+	<item android:color="@color/button_text_color"/>
+</selector> 
\ No newline at end of file
diff --git a/baselibrary/src/main/res/layout/library_dialog.xml b/baselibrary/src/main/res/layout/library_dialog.xml
index 8b86cc5..1be8315 100644
--- a/baselibrary/src/main/res/layout/library_dialog.xml
+++ b/baselibrary/src/main/res/layout/library_dialog.xml
@@ -50,9 +50,8 @@
                 android:text="娌冲崡鐗堟湰"
                 android:textColor="@drawable/radio_text_select"
                 android:textSize="20sp" />
-
             <RadioButton
-                android:id="@+id/qhAloneLibrary"
+                android:id="@+id/qhOnLineLibrary"
                 android:layout_width="match_parent"
                 android:layout_height="wrap_content"
                 android:layout_marginLeft="50dp"
@@ -62,9 +61,26 @@
                 android:button="@null"
                 android:gravity="center"
                 android:padding="6dp"
+                android:text="榻愭渤鑱旂綉鐗�"
+                android:textColor="@drawable/radio_text_select"
+                android:textSize="20sp" />
+            <RadioButton
+                android:id="@+id/qhAloneLibrary"
+                android:layout_width="match_parent"
+                android:layout_height="wrap_content"
+                android:layout_marginLeft="50dp"
+                android:layout_marginTop="25dp"
+                android:layout_marginRight="50dp"
+                android:layout_marginBottom="5dp"
+                android:background="@drawable/radio_select"
+                android:button="@null"
+                android:gravity="center"
+                android:padding="6dp"
                 android:text="榻愭渤鍗曟満鐗�"
                 android:textColor="@drawable/radio_text_select"
                 android:textSize="20sp" />
+
+
         </RadioGroup>
 
         <View
diff --git a/baselibrary/src/main/res/values/colors.xml b/baselibrary/src/main/res/values/colors.xml
index fc1b123..948f6bd 100644
--- a/baselibrary/src/main/res/values/colors.xml
+++ b/baselibrary/src/main/res/values/colors.xml
@@ -37,4 +37,7 @@
     <color name="text_color">#696969</color>
 
     <color name="text_on">#BEBEBE</color>
+
+    <color name="button_text_color">#555</color>
+    <color name="button_select_text_color">#0aa666</color>
 </resources>
\ No newline at end of file
diff --git a/henanlibrary/src/main/java/com/dayu/henanlibrary/activity/ReadCardAcitivy.java b/henanlibrary/src/main/java/com/dayu/henanlibrary/activity/ReadCardAcitivy.java
index ee8176a..d2417f5 100644
--- a/henanlibrary/src/main/java/com/dayu/henanlibrary/activity/ReadCardAcitivy.java
+++ b/henanlibrary/src/main/java/com/dayu/henanlibrary/activity/ReadCardAcitivy.java
@@ -165,7 +165,7 @@
                                     stopAnim();
                                     break;
                                 default:
-                                    TipUtil.show(ReadCardAcitivy.this, "鍗$墖鏃犳硶璇嗗埆");
+                                    TipUtil.show(ReadCardAcitivy.this, "褰撳墠鍗$墖涓虹櫧鍗★紝璇峰埗鍗″悗璇诲彇");
                                     stopAnim();
                                     break;
                             }
diff --git a/henanlibrary/src/main/res/layout/activity_admin_hn.xml b/henanlibrary/src/main/res/layout/activity_admin_hn.xml
index 4864313..5cce5b7 100644
--- a/henanlibrary/src/main/res/layout/activity_admin_hn.xml
+++ b/henanlibrary/src/main/res/layout/activity_admin_hn.xml
@@ -31,7 +31,7 @@
                 android:layout_marginTop="20dp"
                 android:padding="5dp"
                 android:text="鍒朵綔绠$悊鍗�"
-                android:textColor="@color/text_selecter"
+                android:textColor="@color/text_selecter_color"
                 android:textSize="@dimen/text_size" />
 
             <TextView
@@ -42,7 +42,7 @@
                 android:layout_marginTop="20dp"
                 android:padding="5dp"
                 android:text="鍒朵綔娓呴浂鍗�"
-                android:textColor="@color/text_selecter"
+                android:textColor="@color/text_selecter_color"
                 android:textSize="@dimen/text_size" />
 
             <TextView
@@ -53,7 +53,7 @@
                 android:layout_marginTop="20dp"
                 android:padding="5dp"
                 android:text="鍒朵綔閲嶆柊娉ㄥ唽璁惧鍗�"
-                android:textColor="@color/text_selecter"
+                android:textColor="@color/text_selecter_color"
                 android:textSize="@dimen/text_size" />
 
             <TextView
@@ -64,7 +64,7 @@
                 android:layout_marginTop="20dp"
                 android:padding="5dp"
                 android:text="鍒朵綔鍒犻櫎鍏ㄩ儴鐢ㄦ埛鍗�"
-                android:textColor="@color/text_selecter"
+                android:textColor="@color/text_selecter_color"
                 android:textSize="@dimen/text_size" />
 
             <TextView
@@ -75,7 +75,7 @@
                 android:layout_marginTop="20dp"
                 android:padding="5dp"
                 android:text="鍒朵綔璁剧疆鍩熷悕鍗�"
-                android:textColor="@color/text_selecter"
+                android:textColor="@color/text_selecter_color"
                 android:textSize="@dimen/text_size" />
 
 
@@ -87,7 +87,7 @@
                 android:layout_marginTop="20dp"
                 android:padding="5dp"
                 android:text="鍒朵綔娴嬭瘯鍗�"
-                android:textColor="@color/text_selecter"
+                android:textColor="@color/text_selecter_color"
                 android:textSize="@dimen/text_size" />
 
             <TextView
@@ -98,7 +98,7 @@
                 android:layout_marginTop="20dp"
                 android:padding="5dp"
                 android:text="鍒朵綔閰嶇疆璁惧淇℃伅鍗�"
-                android:textColor="@color/text_selecter"
+                android:textColor="@color/text_selecter_color"
                 android:textSize="@dimen/text_size" />
 
             <TextView
@@ -109,7 +109,7 @@
                 android:layout_marginTop="20dp"
                 android:padding="5dp"
                 android:text="鍒朵綔閰嶇疆姘存车鍔熺巼鍗�"
-                android:textColor="@color/text_selecter"
+                android:textColor="@color/text_selecter_color"
                 android:textSize="@dimen/text_size" />
         </LinearLayout>
 
diff --git a/henanlibrary/src/main/res/layout/activity_home_hn.xml b/henanlibrary/src/main/res/layout/activity_home_hn.xml
index 9f99a4c..e82a6d2 100644
--- a/henanlibrary/src/main/res/layout/activity_home_hn.xml
+++ b/henanlibrary/src/main/res/layout/activity_home_hn.xml
@@ -26,7 +26,7 @@
             android:layout_weight="1"
             android:gravity="center"
             android:text="鏂板崱寮�鎴�"
-            android:textColor="@color/text_selecter"
+            android:textColor="@color/text_selecter_color"
             android:textSize="@dimen/home_text_size" />
 
         <TextView
@@ -36,7 +36,7 @@
             android:layout_weight="1"
             android:gravity="center"
             android:text="鍏呭��"
-            android:textColor="@color/text_selecter"
+            android:textColor="@color/text_selecter_color"
             android:textSize="@dimen/home_text_size" />
 
         <TextView
@@ -46,7 +46,7 @@
             android:layout_weight="1"
             android:gravity="center"
             android:text="璇诲彇鍗$墖"
-            android:textColor="@color/text_selecter"
+            android:textColor="@color/text_selecter_color"
             android:textSize="@dimen/home_text_size" />
     </LinearLayout>
 
@@ -64,7 +64,7 @@
             android:layout_weight="1"
             android:gravity="center"
             android:text="绠$悊绯荤粺"
-            android:textColor="@color/text_selecter"
+            android:textColor="@color/text_selecter_color"
             android:textSize="@dimen/home_text_size" />
 
         <TextView
@@ -74,7 +74,7 @@
             android:layout_weight="1"
             android:gravity="center"
             android:text="鍙傛暟璁剧疆"
-            android:textColor="@color/text_selecter"
+            android:textColor="@color/text_selecter_color"
             android:textSize="@dimen/home_text_size" />
 
         <TextView
@@ -84,7 +84,7 @@
             android:layout_weight="1"
             android:gravity="center"
             android:text="涓汉涓績"
-            android:textColor="@color/text_selecter"
+            android:textColor="@color/text_selecter_color"
             android:textSize="@dimen/home_text_size" />
     </LinearLayout>
 
diff --git a/henanlibrary/src/main/res/layout/activity_my_hn.xml b/henanlibrary/src/main/res/layout/activity_my_hn.xml
index 8d6c624..783c6d9 100644
--- a/henanlibrary/src/main/res/layout/activity_my_hn.xml
+++ b/henanlibrary/src/main/res/layout/activity_my_hn.xml
@@ -59,14 +59,14 @@
                     android:layout_width="wrap_content"
                     android:layout_height="wrap_content"
                     android:text="鍦板潃淇℃伅锛�"
-                    android:textColor="@color/text_selecter"
+                    android:textColor="@color/text_selecter_color"
                     android:textSize="@dimen/text_size" />
 
                 <TextView
                     android:id="@+id/my_adminName"
                     android:layout_width="match_parent"
                     android:layout_height="wrap_content"
-                    android:textColor="@color/text_selecter"
+                    android:textColor="@color/text_selecter_color"
                     android:textSize="@dimen/text_size" />
 
             </LinearLayout>
@@ -85,7 +85,7 @@
                     android:layout_height="wrap_content"
                     android:layout_toStartOf="@+id/my_newCardOut"
                     android:text="寮�鎴疯褰�"
-                    android:textColor="@color/text_selecter"
+                    android:textColor="@color/text_selecter_color"
                     android:textSize="@dimen/text_size" />
 
                 <TextView
@@ -94,7 +94,7 @@
                     android:layout_height="wrap_content"
                     android:layout_alignParentRight="true"
                     android:text="瀵煎嚭璁板綍"
-                    android:textColor="@color/text_selecter"
+                    android:textColor="@color/text_selecter_color"
                     android:textSize="@dimen/text_size" />
             </RelativeLayout>
 
@@ -110,7 +110,7 @@
                     android:layout_height="wrap_content"
                     android:layout_toStartOf="@+id/my_rechargeOut"
                     android:text="鍏呭�艰褰�"
-                    android:textColor="@color/text_selecter"
+                    android:textColor="@color/text_selecter_color"
                     android:textSize="@dimen/text_size" />
 
                 <TextView
@@ -119,7 +119,7 @@
                     android:layout_height="wrap_content"
                     android:layout_alignParentRight="true"
                     android:text="瀵煎嚭璁板綍"
-                    android:textColor="@color/text_selecter"
+                    android:textColor="@color/text_selecter_color"
                     android:textSize="@dimen/text_size" />
 
             </RelativeLayout>
@@ -131,7 +131,7 @@
                 android:layout_height="wrap_content"
                 android:layout_marginTop="15dp"
                 android:text="鐢ㄦ埛琛ュ崱"
-                android:textColor="@color/text_selecter"
+                android:textColor="@color/text_selecter_color"
                 android:textSize="@dimen/text_size" />
 
 
@@ -141,7 +141,7 @@
                 android:layout_height="wrap_content"
                 android:layout_marginTop="15dp"
                 android:text="鐧诲綍瀵嗙爜璁剧疆"
-                android:textColor="@color/text_selecter"
+                android:textColor="@color/text_selecter_color"
                 android:textSize="@dimen/text_size" />
 
             <TextView
@@ -150,7 +150,7 @@
                 android:layout_height="wrap_content"
                 android:layout_marginTop="15dp"
                 android:text="鏈繛鎺ユ暟鎹腑蹇�"
-                android:textColor="@color/text_selecter"
+                android:textColor="@color/text_selecter_color"
                 android:textSize="@dimen/text_size" />
         </LinearLayout>
 
diff --git a/henanlibrary/src/main/res/layout/activity_parameter_hn.xml b/henanlibrary/src/main/res/layout/activity_parameter_hn.xml
index 0c42b6d..c4d9d2e 100644
--- a/henanlibrary/src/main/res/layout/activity_parameter_hn.xml
+++ b/henanlibrary/src/main/res/layout/activity_parameter_hn.xml
@@ -21,7 +21,7 @@
         android:text="IP璁剧疆"
         android:padding="5dp"
         android:layout_marginLeft="20dp"
-        android:textColor="@color/text_selecter"
+        android:textColor="@color/text_selecter_color"
         android:textSize="@dimen/text_size" />
 
     <TextView
@@ -32,7 +32,7 @@
         android:layout_marginTop="20dp"
         android:padding="5dp"
         android:text="鍩熷悕鍗¤缃�"
-        android:textColor="@color/text_selecter"
+        android:textColor="@color/text_selecter_color"
         android:textSize="@dimen/text_size" />
 
     <TextView
@@ -43,7 +43,7 @@
         android:layout_marginTop="20dp"
         android:padding="5dp"
         android:text="姘存车鍔熺巼鍗¤缃�"
-        android:textColor="@color/text_selecter"
+        android:textColor="@color/text_selecter_color"
         android:textSize="@dimen/text_size" />
 
 
@@ -55,7 +55,7 @@
         android:layout_marginTop="20dp"
         android:padding="5dp"
         android:text="鐢甸噺鍗曚环璁剧疆"
-        android:textColor="@color/text_selecter"
+        android:textColor="@color/text_selecter_color"
         android:textSize="@dimen/text_size" />
 
     <TextView
@@ -66,7 +66,7 @@
         android:layout_marginTop="20dp"
         android:padding="5dp"
         android:text="鍗℃爣璇嗙爜璁剧疆"
-        android:textColor="@color/text_selecter"
+        android:textColor="@color/text_selecter_color"
         android:textSize="@dimen/text_size" />
 
 </LinearLayout>
\ No newline at end of file
diff --git a/local.properties b/local.properties
index 9cd06d1..4f584e7 100644
--- a/local.properties
+++ b/local.properties
@@ -4,5 +4,5 @@
 # Location of the SDK. This is only used by Gradle.
 # For customization when using a Version Control System, please read the
 # header note.
-#Sat Jul 13 14:35:23 CST 2024
-sdk.dir=D\:\\AndroidStudio\\sdk
+#Fri Jul 19 15:11:21 CST 2024
+sdk.dir=D\:\\android\\sdk
diff --git a/pickerviewlibrary/src/main/assets/address.db b/pickerviewlibrary/src/main/assets/address_2023.db
similarity index 96%
rename from pickerviewlibrary/src/main/assets/address.db
rename to pickerviewlibrary/src/main/assets/address_2023.db
index 8f46d15..0ca056f 100644
--- a/pickerviewlibrary/src/main/assets/address.db
+++ b/pickerviewlibrary/src/main/assets/address_2023.db
Binary files differ
diff --git a/pickerviewlibrary/src/main/java/com/example/pickerviewlibrary/picker/TeaPickerView.java b/pickerviewlibrary/src/main/java/com/example/pickerviewlibrary/picker/TeaPickerView.java
index 7388caa..5e1f0a5 100644
--- a/pickerviewlibrary/src/main/java/com/example/pickerviewlibrary/picker/TeaPickerView.java
+++ b/pickerviewlibrary/src/main/java/com/example/pickerviewlibrary/picker/TeaPickerView.java
@@ -80,7 +80,7 @@
      * 鍒濆鍖栧湴鍧�鏁版嵁
      */
     public void initAddressData() {
-        List<AddressBean> first = AddressSqLite_DB_Utile.getInit(context).addressDao().findByPcode("41");
+        List<AddressBean> first = AddressSqLite_DB_Utile.getInit(context).addressDao().findByPcode("410000000000");
         pickerData.setFirstDatas(first);
     }
 
diff --git a/pickerviewlibrary/src/main/java/com/example/pickerviewlibrary/picker/util/AddressSqLite_DB_Utile.java b/pickerviewlibrary/src/main/java/com/example/pickerviewlibrary/picker/util/AddressSqLite_DB_Utile.java
index 0e74829..5c3e760 100644
--- a/pickerviewlibrary/src/main/java/com/example/pickerviewlibrary/picker/util/AddressSqLite_DB_Utile.java
+++ b/pickerviewlibrary/src/main/java/com/example/pickerviewlibrary/picker/util/AddressSqLite_DB_Utile.java
@@ -27,8 +27,8 @@
 
     public AddressSqLite_DB_Utile(Context context) {
         this.context = context;
-        String fileName = FileUtil.copyFileFromAssets(context, "address.db", "sqlite", "address.db");
-        historyDB = Room.databaseBuilder(context, AddressDataBase.class, fileName + File.separator + "address.db").allowMainThreadQueries().build();
+        String fileName = FileUtil.copyFileFromAssets(context, "address_2023.db", "sqlite", "address_2023.db");
+        historyDB = Room.databaseBuilder(context, AddressDataBase.class, fileName + File.separator + "address_2023.db").allowMainThreadQueries().build();
     }
 
     /**
diff --git a/qihealonelibrary/src/main/res/layout/activity_admin_qha.xml b/qihealonelibrary/src/main/res/layout/activity_admin_qha.xml
index 3327791..149320a 100644
--- a/qihealonelibrary/src/main/res/layout/activity_admin_qha.xml
+++ b/qihealonelibrary/src/main/res/layout/activity_admin_qha.xml
@@ -31,7 +31,7 @@
                 android:layout_marginTop="20dp"
                 android:padding="5dp"
                 android:text="鍒朵綔绠$悊鍗�"
-                android:textColor="@color/text_selecter"
+                android:textColor="@color/text_selecter_color"
                 android:textSize="@dimen/text_size" />
 
             <TextView
@@ -43,7 +43,7 @@
                 android:padding="5dp"
                 android:text="鍒朵綔娓呴浂鍗�"
                 android:visibility="gone"
-                android:textColor="@color/text_selecter"
+                android:textColor="@color/text_selecter_color"
                 android:textSize="@dimen/text_size" />
 
 
@@ -56,7 +56,7 @@
                 android:layout_marginTop="20dp"
                 android:padding="5dp"
                 android:text="鍒朵綔瀵嗙爜鍗�"
-                android:textColor="@color/text_selecter"
+                android:textColor="@color/text_selecter_color"
                 android:textSize="@dimen/text_size" />
 
 
@@ -68,7 +68,7 @@
                 android:layout_marginTop="20dp"
                 android:padding="5dp"
                 android:text="鍒朵綔榛戝崱"
-                android:textColor="@color/text_selecter"
+                android:textColor="@color/text_selecter_color"
                 android:textSize="@dimen/text_size"
                 android:visibility="gone" />
 
@@ -80,7 +80,7 @@
                 android:layout_marginTop="20dp"
                 android:padding="5dp"
                 android:text="鍒朵綔鍖哄煙琛ㄥ彿鍗�"
-                android:textColor="@color/text_selecter"
+                android:textColor="@color/text_selecter_color"
                 android:textSize="@dimen/text_size" />
 
             <TextView
@@ -91,7 +91,7 @@
                 android:layout_marginTop="20dp"
                 android:padding="5dp"
                 android:text="鍒朵綔鐢ㄦ埛鐢甸噺鍗曚环鍗�"
-                android:textColor="@color/text_selecter"
+                android:textColor="@color/text_selecter_color"
                 android:textSize="@dimen/text_size" />
         </LinearLayout>
 
diff --git a/qihealonelibrary/src/main/res/layout/activity_home_qha.xml b/qihealonelibrary/src/main/res/layout/activity_home_qha.xml
index 3517f7d..c1e9ca4 100644
--- a/qihealonelibrary/src/main/res/layout/activity_home_qha.xml
+++ b/qihealonelibrary/src/main/res/layout/activity_home_qha.xml
@@ -26,7 +26,7 @@
             android:layout_weight="1"
             android:gravity="center"
             android:text="鏂板崱寮�鎴�"
-            android:textColor="@color/text_selecter"
+            android:textColor="@color/text_selecter_color"
             android:textSize="@dimen/home_text_size" />
 
         <TextView
@@ -36,7 +36,7 @@
             android:layout_weight="1"
             android:gravity="center"
             android:text="鍏呭��"
-            android:textColor="@color/text_selecter"
+            android:textColor="@color/text_selecter_color"
             android:textSize="@dimen/home_text_size" />
 
         <TextView
@@ -46,7 +46,7 @@
             android:layout_weight="1"
             android:gravity="center"
             android:text="璇诲彇鍗$墖"
-            android:textColor="@color/text_selecter"
+            android:textColor="@color/text_selecter_color"
             android:textSize="@dimen/home_text_size" />
     </LinearLayout>
 
@@ -64,7 +64,7 @@
             android:layout_weight="1"
             android:gravity="center"
             android:text="绠$悊绯荤粺"
-            android:textColor="@color/text_selecter"
+            android:textColor="@color/text_selecter_color"
             android:textSize="@dimen/home_text_size" />
 
         <TextView
@@ -74,7 +74,7 @@
             android:layout_weight="1"
             android:gravity="center"
             android:text="鍙傛暟璁剧疆"
-            android:textColor="@color/text_selecter"
+            android:textColor="@color/text_selecter_color"
             android:textSize="@dimen/home_text_size" />
 
         <TextView
@@ -84,7 +84,7 @@
             android:layout_weight="1"
             android:gravity="center"
             android:text="涓汉涓績"
-            android:textColor="@color/text_selecter"
+            android:textColor="@color/text_selecter_color"
             android:textSize="@dimen/home_text_size" />
     </LinearLayout>
 
diff --git a/qihealonelibrary/src/main/res/layout/activity_my_qha.xml b/qihealonelibrary/src/main/res/layout/activity_my_qha.xml
index 1bee96d..f933594 100644
--- a/qihealonelibrary/src/main/res/layout/activity_my_qha.xml
+++ b/qihealonelibrary/src/main/res/layout/activity_my_qha.xml
@@ -58,14 +58,14 @@
                     android:layout_width="wrap_content"
                     android:layout_height="wrap_content"
                     android:text="鍖哄煙鍙凤細"
-                    android:textColor="@color/text_selecter"
+                    android:textColor="@color/text_selecter_color"
                     android:textSize="@dimen/text_size" />
 
                 <TextView
                     android:id="@+id/my_adminName"
                     android:layout_width="match_parent"
                     android:layout_height="wrap_content"
-                    android:textColor="@color/text_selecter"
+                    android:textColor="@color/text_selecter_color"
                     android:textSize="@dimen/text_size" />
 
             </LinearLayout>
@@ -81,14 +81,14 @@
                     android:layout_width="wrap_content"
                     android:layout_height="wrap_content"
                     android:text="鐢靛崟浠�(鍏�/搴�)锛�"
-                    android:textColor="@color/text_selecter"
+                    android:textColor="@color/text_selecter_color"
                     android:textSize="@dimen/text_size" />
 
                 <TextView
                     android:id="@+id/my_waterPrice"
                     android:layout_width="match_parent"
                     android:layout_height="wrap_content"
-                    android:textColor="@color/text_selecter"
+                    android:textColor="@color/text_selecter_color"
                     android:textSize="@dimen/text_size" />
 
             </LinearLayout>
@@ -106,7 +106,7 @@
                     android:layout_height="wrap_content"
                     android:layout_toStartOf="@+id/my_newCardOut"
                     android:text="寮�鎴疯褰�"
-                    android:textColor="@color/text_selecter"
+                    android:textColor="@color/text_selecter_color"
                     android:textSize="@dimen/text_size" />
 
                 <TextView
@@ -115,7 +115,7 @@
                     android:layout_height="wrap_content"
                     android:layout_alignParentRight="true"
                     android:text="瀵煎嚭璁板綍"
-                    android:textColor="@color/text_selecter"
+                    android:textColor="@color/text_selecter_color"
                     android:textSize="@dimen/text_size" />
             </RelativeLayout>
 
@@ -131,7 +131,7 @@
                     android:layout_height="wrap_content"
                     android:layout_toStartOf="@+id/my_rechargeOut"
                     android:text="鍏呭�艰褰�"
-                    android:textColor="@color/text_selecter"
+                    android:textColor="@color/text_selecter_color"
                     android:textSize="@dimen/text_size" />
 
                 <TextView
@@ -140,7 +140,7 @@
                     android:layout_height="wrap_content"
                     android:layout_alignParentRight="true"
                     android:text="瀵煎嚭璁板綍"
-                    android:textColor="@color/text_selecter"
+                    android:textColor="@color/text_selecter_color"
                     android:textSize="@dimen/text_size" />
 
             </RelativeLayout>
@@ -152,7 +152,7 @@
                 android:layout_height="wrap_content"
                 android:layout_marginTop="15dp"
                 android:text="IP璁剧疆"
-                android:textColor="@color/text_selecter"
+                android:textColor="@color/text_selecter_color"
                 android:textSize="@dimen/text_size"
                 android:visibility="gone" />
 
@@ -162,7 +162,7 @@
                 android:layout_height="wrap_content"
                 android:layout_marginTop="15dp"
                 android:text="鐢ㄦ埛琛ュ崱"
-                android:textColor="@color/text_selecter"
+                android:textColor="@color/text_selecter_color"
                 android:textSize="@dimen/text_size"
                 android:visibility="gone" />
 
@@ -173,7 +173,7 @@
                 android:layout_height="wrap_content"
                 android:layout_marginTop="15dp"
                 android:text="鐧诲綍瀵嗙爜璁剧疆"
-                android:textColor="@color/text_selecter"
+                android:textColor="@color/text_selecter_color"
                 android:textSize="@dimen/text_size" />
 
             <TextView
@@ -182,7 +182,7 @@
                 android:layout_height="wrap_content"
                 android:layout_marginTop="15dp"
                 android:text="鏈繛鎺ユ暟鎹腑蹇�"
-                android:textColor="@color/text_selecter"
+                android:textColor="@color/text_selecter_color"
                 android:textSize="@dimen/text_size"
                 android:visibility="gone" />
         </LinearLayout>
diff --git a/qihealonelibrary/src/main/res/layout/activity_parameter_qha.xml b/qihealonelibrary/src/main/res/layout/activity_parameter_qha.xml
index d5a27f5..1ad2e1c 100644
--- a/qihealonelibrary/src/main/res/layout/activity_parameter_qha.xml
+++ b/qihealonelibrary/src/main/res/layout/activity_parameter_qha.xml
@@ -22,7 +22,7 @@
         android:padding="5dp"
         android:visibility="gone"
         android:text="鍩熷悕鍗¤缃�"
-        android:textColor="@color/text_selecter"
+        android:textColor="@color/text_selecter_color"
         android:textSize="@dimen/text_size" />
 
     <TextView
@@ -34,7 +34,7 @@
         android:padding="5dp"
         android:visibility="gone"
         android:text="姘存车鍔熺巼鍗¤缃�"
-        android:textColor="@color/text_selecter"
+        android:textColor="@color/text_selecter_color"
         android:textSize="@dimen/text_size" />
 
 
@@ -46,7 +46,7 @@
         android:layout_marginTop="20dp"
         android:padding="5dp"
         android:text="鐢甸噺鍗曚环璁剧疆"
-        android:textColor="@color/text_selecter"
+        android:textColor="@color/text_selecter_color"
         android:textSize="@dimen/text_size" />
     <TextView
         android:id="@+id/parameter_PassWordCard"
@@ -57,7 +57,7 @@
         android:padding="5dp"
         android:text="鍗″瘑鐮佽缃�"
         android:visibility="gone"
-        android:textColor="@color/text_selecter"
+        android:textColor="@color/text_selecter_color"
         android:textSize="@dimen/text_size" />
     <TextView
         android:id="@+id/parameter_region"
@@ -68,7 +68,7 @@
         android:padding="5dp"
         android:visibility="gone"
         android:text="鍖哄煙琛ㄥ彿璁剧疆"
-        android:textColor="@color/text_selecter"
+        android:textColor="@color/text_selecter_color"
         android:textSize="@dimen/text_size" />
     <TextView
         android:id="@+id/parameter_cardIdentifying"
@@ -79,7 +79,7 @@
         android:padding="5dp"
         android:text="鍗℃爣璇嗙爜璁剧疆"
         android:visibility="gone"
-        android:textColor="@color/text_selecter"
+        android:textColor="@color/text_selecter_color"
         android:textSize="@dimen/text_size" />
 
 </LinearLayout>
\ No newline at end of file
diff --git a/qiheonlinelibrary/.gitignore b/qiheonlinelibrary/.gitignore
new file mode 100644
index 0000000..42afabf
--- /dev/null
+++ b/qiheonlinelibrary/.gitignore
@@ -0,0 +1 @@
+/build
\ No newline at end of file
diff --git a/qiheonlinelibrary/CMakeLists.txt b/qiheonlinelibrary/CMakeLists.txt
new file mode 100644
index 0000000..050cc18
--- /dev/null
+++ b/qiheonlinelibrary/CMakeLists.txt
@@ -0,0 +1,44 @@
+# For more information about using CMake with Android Studio, read the
+# documentation: https://d.android.com/studio/projects/add-native-code.html
+
+# Sets the minimum version of CMake required to build the native library.
+
+cmake_minimum_required(VERSION 3.4.1)
+
+# Creates and names a library, sets it as either STATIC
+# or SHARED, and provides the relative paths to its source code.
+# You can define multiple libraries, and CMake builds them for you.
+# Gradle automatically packages shared libraries with your APK.
+
+add_library( # Sets the name of the library.
+        qiheonline-native-lib
+
+             # Sets the library as a shared library.
+             SHARED
+
+             # Provides a relative path to your source file(s).
+             src/main/cpp/qiheonline-native-lib.cpp )
+
+# Searches for a specified prebuilt library and stores the path as a
+# variable. Because CMake includes system libraries in the search path by
+# default, you only need to specify the name of the public NDK library
+# you want to add. CMake verifies that the library exists before
+# completing its build.
+
+find_library( # Sets the name of the path variable.
+              log-lib
+
+              # Specifies the name of the NDK library that
+              # you want CMake to locate.
+              log )
+
+# Specifies libraries CMake should link to your target library. You
+# can link multiple libraries, such as libraries you define in this
+# build script, prebuilt third-party libraries, or system libraries.
+
+target_link_libraries( # Specifies the target library.
+        qiheonline-native-lib
+
+                       # Links the target library to the log library
+                       # included in the NDK.
+                       ${log-lib} )
\ No newline at end of file
diff --git a/qiheonlinelibrary/build.gradle b/qiheonlinelibrary/build.gradle
new file mode 100644
index 0000000..3aacde8
--- /dev/null
+++ b/qiheonlinelibrary/build.gradle
@@ -0,0 +1,91 @@
+apply plugin: 'com.android.library'
+android {
+    namespace 'com.dayu.qiheonlinelibrary'
+    compileSdk 33
+    ndkPath 'D:\\android\\sdk\\ndk\\android-ndk-r21'
+    defaultConfig {
+        minSdk 23
+        targetSdk 33
+        versionCode 1
+        versionName "1.0"
+
+        testInstrumentationRunner "androidx.test.runner.AndroidJUnitRunner"
+    }
+
+    buildTypes {
+        release {
+            minifyEnabled false
+            proguardFiles getDefaultProguardFile('proguard-android-optimize.txt'), 'proguard-rules.pro'
+        }
+    }
+    compileOptions {
+        sourceCompatibility JavaVersion.VERSION_1_8
+        targetCompatibility JavaVersion.VERSION_1_8
+    }
+    dataBinding {
+        enabled = true;
+    }
+    viewBinding {
+        enabled = true;
+    }
+    externalNativeBuild {
+        cmake {
+            path "CMakeLists.txt"
+        }
+    }
+}
+
+dependencies {
+
+//    implementation 'androidx.appcompat:appcompat:1.7.0'
+    implementation 'com.google.android.material:material:1.12.0'
+    implementation 'androidx.constraintlayout:constraintlayout:2.1.4'
+    testImplementation 'junit:junit:4.13.2'
+    androidTestImplementation 'androidx.test.ext:junit:1.2.1'
+    androidTestImplementation 'androidx.test.espresso:espresso-core:3.6.1'
+
+
+    compileOnly 'com.android.support:appcompat-v7:28.0.0'
+    compileOnly 'com.android.support.constraint:constraint-layout:1.1.3'
+    compileOnly 'androidx.core:core-ktx:1.8.0'
+    compileOnly 'androidx.appcompat:appcompat:1.5.0'
+
+    compileOnly 'com.tencent.bugly:crashreport:4.1.9.3'
+
+    implementation project(':ocridcardlibrary')
+    implementation project(':baselibrary')
+    //鏁版嵁搴�
+    implementation "androidx.room:room-runtime:2.3.0"
+    implementation "androidx.room:room-ktx:2.3.0"
+    runtimeOnly("androidx.room:room-common:2.3.0")
+    annotationProcessor "androidx.room:room-compiler:2.3.0"
+    //鏉冮檺鐢宠
+    compileOnly 'com.github.getActivity:XXPermissions:18.5'
+
+    //閫氫俊
+    implementation 'com.squareup.retrofit2:retrofit:2.9.0'
+    implementation('com.squareup.retrofit2:converter-gson:2.9.0') {
+        exclude group: 'com.google.code.gson';
+    }
+    implementation 'com.squareup.retrofit2:adapter-rxjava3:2.9.0'
+    implementation 'io.reactivex.rxjava3:rxandroid:3.0.0'
+    implementation 'com.squareup.okhttp3:logging-interceptor:4.11.0'
+    compileOnly 'com.google.code.gson:gson:2.10.1'
+    //loding
+    implementation 'com.pnikosis:materialish-progress:1.7'
+
+    //鍒楄〃
+    compileOnly 'io.github.scwang90:refresh-layout-kernel:2.0.5'
+    compileOnly 'io.github.scwang90:refresh-header-classics:2.0.5'
+    compileOnly 'androidx.recyclerview:recyclerview:1.2.0'//缁忓吀鍒锋柊澶�
+
+    compileOnly 'com.wang.avi:library:2.1.3'
+    compileOnly group: 'net.sourceforge.jexcelapi', name: 'jxl', version: '2.6.12'
+}
+
+configurations.all {
+    resolutionStrategy {
+        force 'androidx.recyclerview:recyclerview:1.2.0'
+        force 'com.google.code.gson:gson:2.10.1'
+    }
+}
\ No newline at end of file
diff --git a/qiheonlinelibrary/proguard-rules.pro b/qiheonlinelibrary/proguard-rules.pro
new file mode 100644
index 0000000..4731eef
--- /dev/null
+++ b/qiheonlinelibrary/proguard-rules.pro
@@ -0,0 +1,25 @@
+# Add project specific ProGuard rules here.
+# You can control the set of applied configuration files using the
+# proguardFiles setting in build.gradle.
+#
+# For more details, see
+#   http://developer.android.com/guide/developing/tools/proguard.html
+
+# If your project uses WebView with JS, uncomment the following
+# and specify the fully qualified class name to the JavaScript interface
+# class:
+#-keepclassmembers class fqcn.of.javascript.interface.for.webview {
+#   public *;
+#}
+
+# Uncomment this to preserve the line number information for
+# debugging stack traces.
+#-keepattributes SourceFile,LineNumberTable
+
+# If you keep the line number information, uncomment this to
+# hide the original source file name.
+#-renamesourcefileattribute SourceFile
+
+-keep class androidx.room.** { *; }
+-keep @androidx.room.** class *
+-keep interface androidx.room.** { *; }
\ No newline at end of file
diff --git a/qiheonlinelibrary/src/androidTest/java/com/dayu/qiheonlinelibrary/ExampleInstrumentedTest.java b/qiheonlinelibrary/src/androidTest/java/com/dayu/qiheonlinelibrary/ExampleInstrumentedTest.java
new file mode 100644
index 0000000..febaca8
--- /dev/null
+++ b/qiheonlinelibrary/src/androidTest/java/com/dayu/qiheonlinelibrary/ExampleInstrumentedTest.java
@@ -0,0 +1,26 @@
+package com.dayu.qiheonlinelibrary;
+
+import android.content.Context;
+
+import androidx.test.platform.app.InstrumentationRegistry;
+import androidx.test.ext.junit.runners.AndroidJUnit4;
+
+import org.junit.Test;
+import org.junit.runner.RunWith;
+
+import static org.junit.Assert.*;
+
+/**
+ * Instrumented test, which will execute on an Android device.
+ *
+ * @see <a href="http://d.android.com/tools/testing">Testing documentation</a>
+ */
+@RunWith(AndroidJUnit4.class)
+public class ExampleInstrumentedTest {
+    @Test
+    public void useAppContext() {
+        // Context of the app under test.
+        Context appContext = InstrumentationRegistry.getInstrumentation().getTargetContext();
+        assertEquals("com.dayu.qiheonlinelibrary", appContext.getPackageName());
+    }
+}
\ No newline at end of file
diff --git a/qiheonlinelibrary/src/main/AndroidManifest.xml b/qiheonlinelibrary/src/main/AndroidManifest.xml
new file mode 100644
index 0000000..6e0f9f4
--- /dev/null
+++ b/qiheonlinelibrary/src/main/AndroidManifest.xml
@@ -0,0 +1,92 @@
+<?xml version="1.0" encoding="utf-8"?>
+<manifest xmlns:android="http://schemas.android.com/apk/res/android"  package="com.dayu.qiheonlinelibrary">
+    <!--鍏佽璁块棶缃戠粶锛屽繀閫夋潈闄�-->
+    <uses-permission android:name="android.permission.INTERNET" />
+    <application
+        android:allowBackup="true"
+        android:label="@string/app_name"
+        android:roundIcon="@mipmap/ic_launcher_round"
+        android:supportsRtl="true"
+     >
+        <activity
+            android:name="com.dayu.qiheonlinelibrary.activity.AdminSetupActivity"
+            android:exported="true">
+
+        </activity>
+
+        <activity
+            android:name="com.dayu.qiheonlinelibrary.activity.HomeActivity"
+            android:exported="true">
+
+        </activity>
+        <activity
+            android:name="com.dayu.qiheonlinelibrary.activity.NewCardActivity"
+            android:exported="true"
+            android:launchMode="singleTop"
+            android:screenOrientation="portrait">
+            <intent-filter>
+                <action android:name="android.nfc.action.TAG_DISCOVERED" />
+                <data android:mimeType="text/plain" />
+            </intent-filter>
+        </activity>
+        <activity
+            android:name="com.dayu.qiheonlinelibrary.activity.SysActivity"
+            android:exported="true">
+
+        </activity>
+
+        <activity android:name="com.dayu.qiheonlinelibrary.activity.PassWordActivity" />
+        <activity android:name="com.dayu.qiheonlinelibrary.activity.MyActivity" />
+        <activity
+            android:name="com.dayu.qiheonlinelibrary.activity.RechargeActivity"
+            android:exported="true"
+            android:launchMode="singleTop">
+            <intent-filter>
+                <action android:name="android.nfc.action.TAG_DISCOVERED" />
+                <data android:mimeType="text/plain" />
+            </intent-filter>
+        </activity>
+
+        <activity
+            android:name="com.dayu.qiheonlinelibrary.activity.ReadCardAcitivy"
+            android:exported="true"
+            android:launchMode="singleTop">
+            <intent-filter>
+                <action android:name="android.nfc.action.ACTION_NDEF_DISCOVERED" />
+                <category android:name="android.intent.category.DEFAULT" />
+                <data android:mimeType="text/plain" />
+            </intent-filter>
+        </activity>
+        <activity
+            android:name="com.dayu.qiheonlinelibrary.activity.NFCWreatActivity"
+            android:exported="true"
+            android:launchMode="singleTop">
+            <intent-filter>
+                <action android:name="android.nfc.action.TAG_DISCOVERED" />
+                <data android:mimeType="text/plain" />
+            </intent-filter>
+        </activity>
+        <activity android:name="com.dayu.qiheonlinelibrary.activity.RechargeListActivity" />
+        <activity android:name="com.dayu.qiheonlinelibrary.activity.NewCardListActivity" />
+        <activity android:name="com.dayu.qiheonlinelibrary.activity.ParameterActivity" />
+        <activity android:name="com.dayu.qiheonlinelibrary.activity.PowerActivity" />
+        <activity android:name="com.dayu.qiheonlinelibrary.activity.DomainActivity" />
+        <activity android:name="com.dayu.qiheonlinelibrary.activity.ElectricPriceActivity" />
+        <activity android:name="com.dayu.qiheonlinelibrary.activity.IdentifyingActivity" />
+        <activity android:name="com.dayu.qiheonlinelibrary.activity.RechargeDetailActivity" />
+        <activity android:name="com.dayu.qiheonlinelibrary.activity.PasswordCardActivity" />
+        <activity android:name="com.dayu.qiheonlinelibrary.activity.RegionActivity" />
+        <activity android:name="com.dayu.qiheonlinelibrary.activity.ManagerListActivity" />
+        <activity
+            android:name="com.dayu.qiheonlinelibrary.activity.ManagerReadActivity"
+            android:exported="true"
+            android:launchMode="singleTop">
+            <intent-filter>
+                <action android:name="android.nfc.action.ACTION_NDEF_DISCOVERED" />
+                <category android:name="android.intent.category.DEFAULT" />
+                <data android:mimeType="text/plain" />
+            </intent-filter>
+        </activity>
+    </application>
+
+</manifest>
\ No newline at end of file
diff --git a/qiheonlinelibrary/src/main/cpp/qiheonline-native-lib.cpp b/qiheonlinelibrary/src/main/cpp/qiheonline-native-lib.cpp
new file mode 100644
index 0000000..352e938
--- /dev/null
+++ b/qiheonlinelibrary/src/main/cpp/qiheonline-native-lib.cpp
@@ -0,0 +1,70 @@
+#include <jni.h>
+#include <string>
+#include <android/log.h>
+#include <string.h>
+#include <jni.h>
+
+static jclass contextClass;
+static jclass signatureClass;
+static jclass packageNameClass;
+static jclass packageInfoClass;
+
+const char* RELEASE_SIGN = "308202b8308201a0020101300d06092a864886f70d01010b05003022310f300d06035504030c06e5a4a7e7a6b9310f300d06035504070c06e5a4a9e6b4a5301e170d3233313132303035333131325a170d3438313131333035333131325a3022310f300d06035504030c06e5a4a7e7a6b9310f300d06035504070c06e5a4a9e6b4a530820122300d06092a864886f70d01010105000382010f003082010a0282010100a0924f3d618e4a622def691e16e54ce5bdfd035bd73e7cb947d2bf3bd0c00afa26e52963e0299fc06d76d153be696c5285d630577e1dcb2b740a72b6d904482217de308fb91c8435441ed05e844ced1e5c3446d82cb8f38751049df26a42adcfc33f1f12c2ce03f676e5d148aad800ace89670b87835e2c02a8570a0b6740d9c0669d4cb3c597d0b2dd49fc0904e885773b6d3a87d9f1e73eb526e0d1a9e9e3c48d986938286cd824151b5a6214faf89d3e699524511b23c86d3b110a7f0bb56a6d2436f69816538a62a38cb1fee6eb685d267cc200df8af51b936bd280beaa2023f75678d77a11ac6de734b30af63d394c8b63bccf2115a47ea15c9212c740d0203010001300d06092a864886f70d01010b05000382010100307cafa9b14be91ba6424cfcc6aed75b069a1c4d6eb646eab0de93f372f236f5f0a6097499df99391075d6ced18d419a2b15adb041890e2b56a3bfbd6be40efee99c5c713ba8ea1d45da09b67916106116e96eb735271c4d53e0739f753145cbc42e149ad3d9507d422ec1c6f1a7f792a4542f9a64f0de3d4f4af69f0fb3390ef3577dcf8844cf744426d173b0934d879148062c5ca64022dc99af370dbfeaf2b5d4a279b20c54a361bca12c25bf185c2885519bbbc36e46ddb083080f0cc5b1f2eafe964ebce5071b0ae7d92a34a9193861b996d2c0299b1993f41063a27038199365a6e3cb27a02ffa9facdc48a63713eb5fbf90e9fd73056aba16b28e5fee";
+const char *AUTH_KEY = "8b989c546f9ae3eb48ae977b4d4f11c99ae43217436200a0f6d0c4517150e0e6";
+
+//extern "C" JNIEXPORT jstring
+//
+//JNICALL
+//Java_com_yglx_testjni_MainActivity_getKey(
+//        JNIEnv *env,
+//        jobject /* this */) {
+//    return env->NewStringUTF(AUTH_KEY);
+//}
+
+JNIEXPORT jint JNICALL JNI_OnLoad (JavaVM* vm,void* reserved){
+
+    JNIEnv* env = NULL;
+    jint result=-1;
+    if(vm->GetEnv((void**)&env, JNI_VERSION_1_4) != JNI_OK)
+        return result;
+
+    contextClass = (jclass)env->NewGlobalRef((env)->FindClass("android/content/Context"));
+    signatureClass = (jclass)env->NewGlobalRef((env)->FindClass("android/content/pm/Signature"));
+    packageNameClass = (jclass)env->NewGlobalRef((env)->FindClass("android/content/pm/PackageManager"));
+    packageInfoClass = (jclass)env->NewGlobalRef((env)->FindClass("android/content/pm/PackageInfo"));
+
+    __android_log_print(ANDROID_LOG_DEBUG, "jw", "sss");
+    return JNI_VERSION_1_4;
+}
+
+
+
+extern "C"
+JNIEXPORT jstring
+Java_com_dayu_qihealonelibrary_tools_BaseNFCHelper_getSafeKey(JNIEnv *env, jobject instance,jobject contextObject) {
+    jmethodID getPackageManagerId = (env)->GetMethodID(contextClass, "getPackageManager","()Landroid/content/pm/PackageManager;");
+    jmethodID getPackageNameId = (env)->GetMethodID(contextClass, "getPackageName","()Ljava/lang/String;");
+    jmethodID signToStringId = (env)->GetMethodID(signatureClass, "toCharsString","()Ljava/lang/String;");
+    jmethodID getPackageInfoId = (env)->GetMethodID(packageNameClass, "getPackageInfo","(Ljava/lang/String;I)Landroid/content/pm/PackageInfo;");
+    jobject packageManagerObject =  (env)->CallObjectMethod(contextObject, getPackageManagerId);
+    jstring packNameString =  (jstring)(env)->CallObjectMethod(contextObject, getPackageNameId);
+    jobject packageInfoObject = (env)->CallObjectMethod(packageManagerObject, getPackageInfoId,packNameString, 64);
+    jfieldID signaturefieldID =(env)->GetFieldID(packageInfoClass,"signatures", "[Landroid/content/pm/Signature;");
+    jobjectArray signatureArray = (jobjectArray)(env)->GetObjectField(packageInfoObject, signaturefieldID);
+    jobject signatureObject =  (env)->GetObjectArrayElement(signatureArray,0);
+
+    const char* signStrng =  (env)->GetStringUTFChars((jstring)(env)->CallObjectMethod(signatureObject, signToStringId),0);
+    __android_log_print(ANDROID_LOG_DEBUG, "jw_sign","%s",signStrng);
+    __android_log_print(ANDROID_LOG_DEBUG, "jw_sign2","%s",signStrng+1023);
+
+    __android_log_print(ANDROID_LOG_DEBUG,"jw_rels","%s",RELEASE_SIGN);
+    __android_log_print(ANDROID_LOG_DEBUG,"jw_","sdf:%zd,sfs:%zd",strlen(signStrng),strlen(RELEASE_SIGN));
+
+    if(strcmp(signStrng,RELEASE_SIGN)==0)//绛惧悕涓�鑷�  杩斿洖鍚堟硶鐨� api key锛屽惁鍒欒繑鍥為敊璇�
+    {
+        return (env)->NewStringUTF(AUTH_KEY);
+    }else
+    {
+        return (env)->NewStringUTF("error");
+    }
+}
\ No newline at end of file
diff --git a/qiheonlinelibrary/src/main/java/com/dayu/qiheonlinelibrary/QHOnLineApplication.java b/qiheonlinelibrary/src/main/java/com/dayu/qiheonlinelibrary/QHOnLineApplication.java
new file mode 100644
index 0000000..ed69735
--- /dev/null
+++ b/qiheonlinelibrary/src/main/java/com/dayu/qiheonlinelibrary/QHOnLineApplication.java
@@ -0,0 +1,37 @@
+package com.dayu.qiheonlinelibrary;
+
+import android.app.Application;
+
+import com.dayu.qiheonlinelibrary.net.ApiManager;
+import com.dayu.qiheonlinelibrary.net.BaseResponse;
+import com.dayu.qiheonlinelibrary.net.subscribers.SubscriberListener;
+
+/**
+ * author: zuo
+ * Date: 2024-04-23
+ * Time: 17:39
+ * 澶囨敞锛�
+ */
+public class QHOnLineApplication {
+    public static QHOnLineApplication qhAloneApplication;
+    public Application application;
+
+    public static QHOnLineApplication getInstance() {
+        if (qhAloneApplication == null) {
+            qhAloneApplication = new QHOnLineApplication();
+        }
+        return qhAloneApplication;
+    }
+
+
+    private void getPublicKey(){
+        ApiManager.getInstance().requestPost(application, "/login/getPubKey", String.class, null, new SubscriberListener<BaseResponse<String>>() {
+            @Override
+            public void onNext(BaseResponse<String> t) {
+
+            }
+        });
+    }
+
+
+}
diff --git a/qiheonlinelibrary/src/main/java/com/dayu/qiheonlinelibrary/activity/AdminSetupActivity.java b/qiheonlinelibrary/src/main/java/com/dayu/qiheonlinelibrary/activity/AdminSetupActivity.java
new file mode 100644
index 0000000..89b459b
--- /dev/null
+++ b/qiheonlinelibrary/src/main/java/com/dayu/qiheonlinelibrary/activity/AdminSetupActivity.java
@@ -0,0 +1,179 @@
+package com.dayu.qiheonlinelibrary.activity;
+
+import android.os.Bundle;
+import android.text.Editable;
+import android.text.TextUtils;
+import android.text.TextWatcher;
+import android.view.LayoutInflater;
+import android.widget.EditText;
+
+import com.dayu.baselibrary.utils.MornyUtil;
+import com.dayu.baselibrary.utils.TipUtil;
+
+import com.dayu.qiheonlinelibrary.databinding.ActivityAdminSetupQhlBinding;
+import com.dayu.qiheonlinelibrary.dbBean.AdminDataBean;
+import com.dayu.qiheonlinelibrary.dbBean.ElectricPriceBean;
+import com.tencent.bugly.crashreport.CrashReport;
+
+/**
+ * Copyright (C), 2023,
+ * Author: zuo
+ * Date: 2023-11-10 19:52
+ * Description: 绠$悊鍛樹俊鎭缃�
+ */
+public class AdminSetupActivity extends BaseActivity {
+
+    ActivityAdminSetupQhlBinding adminBinding;
+
+    public static AdminSetupActivity adminSetupActivity;
+    AdminDataBean adminData = new AdminDataBean();
+    ElectricPriceBean electricPriceBean;
+
+    @Override
+    protected void onCreate(Bundle savedInstanceState) {
+        super.onCreate(savedInstanceState);
+        try {
+            adminBinding = ActivityAdminSetupQhlBinding.inflate(LayoutInflater.from(this));
+            setContentView(adminBinding.getRoot());
+            adminSetupActivity = this;
+            setViewData();
+            initView();
+        } catch (Exception e) {
+            CrashReport.postCatchedException(e);
+            e.printStackTrace();
+        }
+    }
+
+    private void initView() {
+        adminBinding.setupOk.setOnClickListener(v -> {
+            String strSerial = adminBinding.adminAddressCode.getText().toString();
+            String strAddressCode = adminBinding.adminAddressCode.getText().toString();
+            String strElectricPrice = adminBinding.electricNewNum.getText().toString();
+            if (!TextUtils.isEmpty(strAddressCode)
+                    && !TextUtils.isEmpty(strSerial) && !TextUtils.isEmpty(strElectricPrice)) {
+                int electricPrice = MornyUtil.changeY2L(strElectricPrice);
+                if (Integer.valueOf(electricPrice) > 0) {
+                    if (Integer.valueOf(strAddressCode) <= 65535) {
+                        adminData.setAddressCode(strAddressCode);
+                        adminData.setSerial(strSerial);
+//                        adminData.setWaterPrice(wtaterPrice);
+                        baseDao.adminDao().insert(adminData);
+                        electricPriceBean.setPrice(Float.parseFloat(strElectricPrice));
+                        baseDao.electricPriceDao().insert(electricPriceBean);
+                        TipUtil.show(AdminSetupActivity.this, "璁剧疆鎴愬姛", new TipUtil.TipListener() {
+                            @Override
+                            public void onCancle() {
+                                AdminSetupActivity.this.finish();
+                            }
+                        });
+                    } else {
+                        TipUtil.show(AdminSetupActivity.this, "杈撳叆鐨勫尯鍩熷彿涓嶈兘瓒呰繃65535");
+                    }
+
+                } else {
+                    TipUtil.show(AdminSetupActivity.this, "鍗曚环涓嶈兘涓�0");
+                }
+            } else {
+                TipUtil.show(AdminSetupActivity.this, "璇疯緭鍏ュ畬鏁村唴瀹�");
+            }
+        });
+
+//        setPricePoint(adminBinding.adminWaterPrice);
+        //淇濈暀涓変綅灏忔暟
+        adminBinding.electricNewNum.addTextChangedListener(new TextWatcher() {
+            @Override
+            public void beforeTextChanged(CharSequence s, int start, int count, int after) {
+
+            }
+
+            @Override
+            public void onTextChanged(CharSequence s, int start, int before, int count) {
+
+            }
+
+            @Override
+            public void afterTextChanged(Editable s) {
+                // 鍒犻櫎棰濆鐨勫皬鏁颁綅
+                String text = s.toString();
+                if (text.contains(".")) {
+                    int decimalIndex = text.indexOf(".");
+                    int decimalCount = text.length() - decimalIndex - 1;
+                    if (decimalCount > 3) {
+                        s.delete(decimalIndex + 4, s.length());
+                    }
+                }
+            }
+        });
+    }
+
+
+    private void setViewData() {
+        try {
+            AdminDataBean adminData = baseDao.adminDao().findFirst();
+            if (adminData != null) {
+                this.adminData = adminData;
+                adminBinding.adminSerial.setText(adminData.getSerial());
+                adminBinding.adminAddressCode.setText(adminData.getAddressCode());
+                adminBinding.adminWaterPrice.setText(MornyUtil.changeF2Y(adminData.getWaterPrice()));
+            }
+            ElectricPriceBean priceBean = baseDao.electricPriceDao().findFirst();
+            if (priceBean != null) {
+                electricPriceBean = priceBean;
+                adminBinding.electricNewNum.setText(priceBean.getPrice()+"" );
+            } else {
+                electricPriceBean = new ElectricPriceBean();
+                adminBinding.electricNewNum.setText("1.000");
+            }
+
+        } catch (Exception e) {
+            CrashReport.postCatchedException(e);
+            e.printStackTrace();
+        }
+    }
+
+    //姘村崟浠锋牎楠�
+    public static void setPricePoint(final EditText editText) {
+        editText.addTextChangedListener(new TextWatcher() {
+            @Override
+            public void onTextChanged(CharSequence s, int start, int before,
+                                      int count) {
+                if (s.toString().contains(".")) {
+                    if (s.length() - 1 - s.toString().indexOf(".") > 2) {
+                        s = s.toString().subSequence(0,
+                                s.toString().indexOf(".") + 3);
+                        editText.setText(s);
+                        editText.setSelection(s.length());
+                    }
+                }
+                if (s.toString().trim().substring(0).equals(".")) {
+                    s = "0" + s;
+                    editText.setText(s);
+                    editText.setSelection(2);
+                }
+
+                if (s.toString().startsWith("0")
+                        && s.toString().trim().length() > 1) {
+                    if (!s.toString().substring(1, 2).equals(".")) {
+                        editText.setText(s.subSequence(0, 1));
+                        editText.setSelection(1);
+                    }
+                }
+            }
+
+            @Override
+            public void beforeTextChanged(CharSequence s, int start, int count,
+                                          int after) {
+
+            }
+
+            @Override
+            public void afterTextChanged(Editable s) {
+                // TODO Auto-generated method stub
+
+            }
+
+        });
+
+    }
+
+}
diff --git a/qiheonlinelibrary/src/main/java/com/dayu/qiheonlinelibrary/activity/BaseActivity.java b/qiheonlinelibrary/src/main/java/com/dayu/qiheonlinelibrary/activity/BaseActivity.java
new file mode 100644
index 0000000..d9bca5a
--- /dev/null
+++ b/qiheonlinelibrary/src/main/java/com/dayu/qiheonlinelibrary/activity/BaseActivity.java
@@ -0,0 +1,83 @@
+package com.dayu.qiheonlinelibrary.activity;
+
+import android.content.pm.PackageInfo;
+import android.content.pm.PackageManager;
+import android.content.pm.Signature;
+import android.os.Bundle;
+import android.util.Log;
+import android.view.View;
+
+import com.dayu.baselibrary.view.TitleBar;
+import com.dayu.qiheonlinelibrary.R;
+import com.dayu.qiheonlinelibrary.dao.BaseDaoSingleton;
+import com.dayu.qiheonlinelibrary.dao.QHOnLineAppDatabase;
+
+
+/**
+ * Created by zuoxiao on 2018/12/20.
+ */
+
+public class BaseActivity extends com.dayu.baselibrary.activity.BaseActivity {
+    private final String TAG = "BaseActivity";
+
+    public TitleBar titleBar = null;
+    //z涓荤嚎绋嬫煡璇�
+    public QHOnLineAppDatabase baseDao;
+    //寮傛绾跨▼鏌ヨ
+    public QHOnLineAppDatabase asynchBaseDao;
+    public final String SIGN = "308202b8308201a0020101300d06092a864886f70d01010b05003022310f300d06035504030c06e5a4a7e7a6b9310f300d06035504070c06e5a4a9e6b4a5301e170d3233313132303035333131325a170d3438313131333035333131325a3022310f300d06035504030c06e5a4a7e7a6b9310f300d06035504070c06e5a4a9e6b4a530820122300d06092a864886f70d01010105000382010f003082010a0282010100a0924f3d618e4a622def691e16e54ce5bdfd035bd73e7cb947d2bf3bd0c00afa26e52963e0299fc06d76d153be696c5285d630577e1dcb2b740a72b6d904482217de308fb91c8435441ed05e844ced1e5c3446d82cb8f38751049df26a42adcfc33f1f12c2ce03f676e5d148aad800ace89670b87835e2c02a8570a0b6740d9c0669d4cb3c597d0b2dd49fc0904e885773b6d3a87d9f1e73eb526e0d1a9e9e3c48d986938286cd824151b5a6214faf89d3e699524511b23c86d3b110a7f0bb56a6d2436f69816538a62a38cb1fee6eb685d267cc200df8af51b936bd280beaa2023f75678d77a11ac6de734b30af63d394c8b63bccf2115a47ea15c9212c740d0203010001300d06092a864886f70d01010b05000382010100307cafa9b14be91ba6424cfcc6aed75b069a1c4d6eb646eab0de93f372f236f5f0a6097499df99391075d6ced18d419a2b15adb041890e2b56a3bfbd6be40efee99c5c713ba8ea1d45da09b67916106116e96eb735271c4d53e0739f753145cbc42e149ad3d9507d422ec1c6f1a7f792a4542f9a64f0de3d4f4af69f0fb3390ef3577dcf8844cf744426d173b0934d879148062c5ca64022dc99af370dbfeaf2b5d4a279b20c54a361bca12c25bf185c2885519bbbc36e46ddb083080f0cc5b1f2eafe964ebce5071b0ae7d92a34a9193861b996d2c0299b1993f41063a27038199365a6e3cb27a02ffa9facdc48a63713eb5fbf90e9fd73056aba16b28e5fee";
+
+    @Override
+    protected void onCreate(Bundle savedInstanceState) {
+        super.onCreate(savedInstanceState);
+        baseDao = BaseDaoSingleton.getInstance(this);
+        asynchBaseDao = BaseDaoSingleton.getAsynchInstance(this);
+        Log.i(TAG, SIGN);
+        if (!isMyApp()) {
+            Log.i(TAG, "isMyApp");
+            this.finish();
+        }
+    }
+
+
+    @Override
+    public void setContentView(View layoutResID) {
+        super.setContentView(layoutResID);
+        try {
+            View view = findViewById(R.id.titleBar);
+
+            if (view != null && view instanceof TitleBar) {
+                titleBar = (TitleBar) view;
+                titleBar.setOnItemclickListner(TitleBar.ClickType_LEFT_IMAGE, new View.OnClickListener() {
+                    @Override
+                    public void onClick(View v) {
+                        finish();
+                    }
+                });
+            }
+        } catch (Exception e) {
+            e.printStackTrace();
+        }
+    }
+
+    public boolean isMyApp() {
+        String signStr = getSign();
+        return SIGN.equals(signStr);
+    }
+
+    public String getSign() {
+
+        try {
+            PackageInfo packageInfo = this.getPackageManager().getPackageInfo(this.getPackageName(), PackageManager.GET_SIGNATURES);
+            Signature[] signatures = packageInfo.signatures;
+            StringBuilder builder = new StringBuilder();
+            for (Signature signature : signatures) {
+                builder.append(signature.toCharsString());
+            }
+            return builder.toString();
+        } catch (PackageManager.NameNotFoundException e) {
+            e.printStackTrace();
+        }
+        return "";
+    }
+}
diff --git a/qiheonlinelibrary/src/main/java/com/dayu/qiheonlinelibrary/activity/BaseNfcActivity.java b/qiheonlinelibrary/src/main/java/com/dayu/qiheonlinelibrary/activity/BaseNfcActivity.java
new file mode 100644
index 0000000..1b49e94
--- /dev/null
+++ b/qiheonlinelibrary/src/main/java/com/dayu/qiheonlinelibrary/activity/BaseNfcActivity.java
@@ -0,0 +1,106 @@
+package com.dayu.qiheonlinelibrary.activity;
+import android.app.Activity;
+import android.app.PendingIntent;
+import android.content.Intent;
+import android.nfc.NfcAdapter;
+
+import com.dayu.baselibrary.utils.TipUtil;
+import com.dayu.qiheonlinelibrary.card.UserCard;
+
+
+/**
+ * Author:Createdby zuo on 2018/12/2.
+ * Email:584182977@qq.com
+ * Description:
+ * 瀛愮被鍦╫nNewIntent鏂规硶涓繘琛孨FC鏍囩鐩稿叧鎿嶄綔銆�
+ * launchMode璁剧疆涓簊ingleTop鎴杝ingelTask锛屼繚璇丄ctivity鐨勯噸鐢ㄥ敮涓�
+ * 鍦╫nNewIntent鏂规硶涓墽琛宨ntent浼犻�掕繃鏉ョ殑Tag鏁版嵁
+ * 灏哊FC鏍囩鍗¢潬杩戞墜鏈哄悗閮紙NFC鏍囩鍗″彲缃戜笂鑷璐拱锛�
+ */
+public class BaseNfcActivity extends BaseActivity {
+
+
+    protected NfcAdapter mNfcAdapter;
+    private PendingIntent mPendingIntent;
+
+    volatile UserCard userCard;
+
+    /**
+     * onCreat->onStart->onResume->onPause->onStop->onDestroy
+     * 鍚姩Activity锛岀晫闈㈠彲瑙佹椂.
+     */
+
+
+
+    public static int READER_FLAGS =
+            NfcAdapter.FLAG_READER_NFC_A | NfcAdapter.FLAG_READER_SKIP_NDEF_CHECK;
+
+    @Override
+    protected void onStart() {
+        super.onStart();
+        //姝ゅadapter闇�瑕侀噸鏂拌幏鍙栵紝鍚﹀垯鏃犳硶鑾峰彇message
+        mNfcAdapter = NfcAdapter.getDefaultAdapter(this);
+        Intent intent = new Intent(this, getClass());
+
+        //涓�鏃︽埅鑾種FC娑堟伅锛屽氨浼氶�氳繃PendingIntent璋冪敤绐楀彛
+        mPendingIntent = PendingIntent.getActivity(this, 0, intent, 0);
+
+//        mLoyaltyCardReader = new LoyaltyCardReader(this);
+//        if (mNfcAdapter != null) {
+//            mNfcAdapter.enableReaderMode(this, mLoyaltyCardReader, READER_FLAGS, null);
+//        }
+
+    }
+
+    /**
+     * 鑾峰緱鐒︾偣锛屾寜閽彲浠ョ偣鍑�
+     */
+    @Override
+    public void onResume() {
+        super.onResume();
+        if (!ifNFCUse(this)) {
+        }
+        //璁剧疆澶勭悊浼樹簬鎵�鏈夊叾浠朜FC鐨勫鐞�
+        if (mNfcAdapter != null)
+            mNfcAdapter.enableForegroundDispatch(this, mPendingIntent, null, null);
+    }
+
+    /**
+     * 鏆傚仠Activity锛岀晫闈㈣幏鍙栫劍鐐癸紝鎸夐挳鍙互鐐瑰嚮
+     */
+    @Override
+    public void onPause() {
+        super.onPause();
+        //鎭㈠榛樿鐘舵��
+        if (mNfcAdapter != null)
+            mNfcAdapter.disableForegroundDispatch(this);
+//            mNfcAdapter.disableReaderMode(this);
+
+    }
+
+
+
+    /**
+     * 妫�娴嬪伐浣�,鍒ゆ柇璁惧鐨凬FC鏀寔鎯呭喌
+     *
+     * @return
+     */
+    protected Boolean ifNFCUse(Activity context) {
+        if (mNfcAdapter == null) {
+            TipUtil.show(context, "璁惧涓嶆敮鎸丯FC锛�", new TipUtil.TipListener() {
+                @Override
+                public void onCancle() {
+                    BaseNfcActivity.this.finish();
+                }
+            });
+            return false;
+        }
+        if (mNfcAdapter != null && !mNfcAdapter.isEnabled()) {
+            TipUtil.show(context, "璇峰湪绯荤粺璁剧疆涓厛鍚敤NFC鍔熻兘锛�");
+            return false;
+        }
+        return true;
+    }
+
+
+}
diff --git a/qiheonlinelibrary/src/main/java/com/dayu/qiheonlinelibrary/activity/DomainActivity.java b/qiheonlinelibrary/src/main/java/com/dayu/qiheonlinelibrary/activity/DomainActivity.java
new file mode 100644
index 0000000..f87d5a5
--- /dev/null
+++ b/qiheonlinelibrary/src/main/java/com/dayu/qiheonlinelibrary/activity/DomainActivity.java
@@ -0,0 +1,74 @@
+package com.dayu.qiheonlinelibrary.activity;
+
+import android.os.Bundle;
+import android.text.TextUtils;
+import android.view.LayoutInflater;
+
+import com.dayu.baselibrary.utils.TipUtil;
+import com.dayu.qiheonlinelibrary.databinding.ActivityDomainQhlBinding;
+import com.dayu.qiheonlinelibrary.dbBean.DomainBean;
+
+
+/**
+ * Created by Android Studio.
+ * author: zuo
+ * Date: 2023-11-14
+ * Time: 10:19
+ * 澶囨敞锛� 璁剧疆鍗″煙鍚嶅拰ip
+ */
+public class DomainActivity extends BaseActivity {
+    ActivityDomainQhlBinding binding;
+    DomainBean domainBean;
+
+    @Override
+    protected void onCreate(Bundle savedInstanceState) {
+        super.onCreate(savedInstanceState);
+        binding = ActivityDomainQhlBinding.inflate(LayoutInflater.from(this));
+        setContentView(binding.getRoot());
+        initData();
+        binding.electricOk.setOnClickListener(v -> {
+            String domainNumber = binding.domainNumber.getText().toString();
+            String domain = binding.domain.getText().toString();
+            String port = binding.port.getText().toString();
+            int portInt = 0;
+            if (TextUtils.isEmpty(domainNumber)) {
+                TipUtil.show("璇疯緭鍏ユ纭殑鍩熷悕搴忓彿");
+                return;
+            }
+            if (TextUtils.isEmpty(port)) {
+                TipUtil.show("璇疯緭鍏ユ纭殑绔彛鍙�");
+                return;
+            } else {
+                portInt = Integer.valueOf(port);
+            }
+            if (TextUtils.isEmpty(domain)) {
+                TipUtil.show("璇疯緭鍏ュ煙鍚�");
+                return;
+            } else if (portInt <= 0 || portInt > 65535) {
+                TipUtil.show("璇疯緭鍏ユ纭殑绔彛鍙�");
+                return;
+            }
+            domainBean.setDomainNumber(domainNumber);
+            domainBean.setDomain(domain);
+            domainBean.setPort(portInt);
+            baseDao.domainPortDao().insert(domainBean);
+            TipUtil.show("淇濆瓨鎴愬姛");
+            initData();
+        });
+        initData();
+    }
+
+    private void initData() {
+        domainBean = baseDao.domainPortDao().findFirst();
+        if (domainBean != null) {
+            binding.domainOldTV.setText("搴忓彿锛�" + domainBean.getDomainNumber() + "\n" + "鍩熷悕锛�" + domainBean.getDomain() + "\n" + "绔彛鍙凤細" + domainBean.getPort());
+        } else {
+            domainBean = new DomainBean();
+            binding.domainOldTV.setText("璇疯缃柊鐨勫煙鍚嶅崱淇℃伅");
+        }
+
+    }
+}
+
+
+
diff --git a/qiheonlinelibrary/src/main/java/com/dayu/qiheonlinelibrary/activity/ElectricPriceActivity.java b/qiheonlinelibrary/src/main/java/com/dayu/qiheonlinelibrary/activity/ElectricPriceActivity.java
new file mode 100644
index 0000000..cb4a22c
--- /dev/null
+++ b/qiheonlinelibrary/src/main/java/com/dayu/qiheonlinelibrary/activity/ElectricPriceActivity.java
@@ -0,0 +1,95 @@
+package com.dayu.qiheonlinelibrary.activity;
+
+import android.os.Bundle;
+import android.text.Editable;
+import android.text.TextUtils;
+import android.text.TextWatcher;
+import android.view.LayoutInflater;
+import android.view.View;
+
+import com.dayu.baselibrary.utils.TipUtil;
+import com.dayu.qiheonlinelibrary.databinding.ActivityElectricPriceQhlBinding;
+import com.dayu.qiheonlinelibrary.dbBean.ElectricPriceBean;
+
+
+/**
+ * Copyright (C), 2023,
+ * Author: zuo
+ * Date: 2023-11-10 10:18
+ * Description: 鐢甸噺鍗曚环璁剧疆
+ */
+public class ElectricPriceActivity extends BaseActivity {
+
+    ActivityElectricPriceQhlBinding electricPriceBinding;
+    ElectricPriceBean electricPriceBean;
+
+    @Override
+    protected void onCreate(Bundle savedInstanceState) {
+        super.onCreate(savedInstanceState);
+        electricPriceBinding = ActivityElectricPriceQhlBinding.inflate(LayoutInflater.from(this));
+        setContentView(electricPriceBinding.getRoot());
+        initData();
+
+
+        initView();
+
+
+
+    }
+
+    private void initView() {
+
+        //淇濈暀涓変綅灏忔暟
+        electricPriceBinding.electricNewNum.addTextChangedListener(new TextWatcher() {
+            @Override
+            public void beforeTextChanged(CharSequence s, int start, int count, int after) {
+
+            }
+
+            @Override
+            public void onTextChanged(CharSequence s, int start, int before, int count) {
+
+            }
+
+            @Override
+            public void afterTextChanged(Editable s) {
+                // 鍒犻櫎棰濆鐨勫皬鏁颁綅
+                String text = s.toString();
+                if (text.contains(".")) {
+                    int decimalIndex = text.indexOf(".");
+                    int decimalCount = text.length() - decimalIndex - 1;
+                    if (decimalCount > 3) {
+                        s.delete(decimalIndex + 4, s.length());
+                    }
+                }
+            }
+        });
+
+        electricPriceBinding.electricOk.setOnClickListener(new View.OnClickListener() {
+            @Override
+            public void onClick(View v) {
+                if (!TextUtils.isEmpty(electricPriceBinding.electricNewNum.getText())) {
+                    electricPriceBean.setPrice(Float.parseFloat(electricPriceBinding.electricNewNum.getText().toString()));
+                    baseDao.electricPriceDao().insert(electricPriceBean);
+                    TipUtil.show("淇濆瓨鎴愬姛");
+                    initData();
+                } else {
+                    TipUtil.show("璇疯緭鍏ユ纭噾棰�");
+                }
+            }
+        });
+    }
+
+    private void initData() {
+        ElectricPriceBean priceBean = baseDao.electricPriceDao().findFirst();
+        if (priceBean != null) {
+            electricPriceBean = priceBean;
+            electricPriceBinding.electricOldNumber.setText(priceBean.getPrice() + "鍏�");
+        } else {
+            electricPriceBean = new ElectricPriceBean();
+            electricPriceBinding.electricOldNumber.setText("1.000鍏�");
+        }
+    }
+
+
+}
diff --git a/qiheonlinelibrary/src/main/java/com/dayu/qiheonlinelibrary/activity/HomeActivity.java b/qiheonlinelibrary/src/main/java/com/dayu/qiheonlinelibrary/activity/HomeActivity.java
new file mode 100644
index 0000000..9cef0ff
--- /dev/null
+++ b/qiheonlinelibrary/src/main/java/com/dayu/qiheonlinelibrary/activity/HomeActivity.java
@@ -0,0 +1,121 @@
+package com.dayu.qiheonlinelibrary.activity;
+
+import android.content.Intent;
+import android.os.Bundle;
+import android.view.KeyEvent;
+import android.view.LayoutInflater;
+import android.view.View;
+import android.widget.Toast;
+
+import com.dayu.baselibrary.utils.TipUtil;
+import com.dayu.baselibrary.view.PassWordDialog;
+import com.dayu.qiheonlinelibrary.databinding.ActivityHomeQhlBinding;
+import com.dayu.qiheonlinelibrary.dbBean.AdminDataBean;
+
+
+/**
+ * Copyright (C), 2023,
+ * Author: zuo
+ * Date: 2023-11-6 19:52
+ * Description: 涓荤晫闈�
+ */
+public class HomeActivity extends BaseActivity {
+
+    public static HomeActivity homeActivity;
+    ActivityHomeQhlBinding homeBinding;
+
+    @Override
+    protected void onCreate(Bundle savedInstanceState) {
+        super.onCreate(savedInstanceState);
+        homeActivity = this;
+        homeBinding = ActivityHomeQhlBinding.inflate(LayoutInflater.from(this));
+        setContentView(homeBinding.getRoot());
+        initView();
+
+    }
+
+
+    private void initView() {
+        homeBinding.homeNewCard.setOnClickListener(new View.OnClickListener() {
+            @Override
+            public void onClick(View v) {
+                AdminDataBean adminData = baseDao.adminDao().findFirst();
+                if (adminData != null) {
+                    startActivity(new Intent(HomeActivity.this, NewCardActivity.class));
+                } else {
+                    TipUtil.show(HomeActivity.this, "璇峰厛鍦ㄤ釜浜轰腑蹇冨唴璁剧疆鍖哄煙鍙�");
+                }
+
+            }
+        });
+        homeBinding.homeRecharge.setOnClickListener(new View.OnClickListener() {
+            @Override
+            public void onClick(View v) {
+                AdminDataBean adminData = baseDao.adminDao().findFirst();
+                if (adminData != null) {
+//                    if (adminData.getWaterPrice() != 0) {
+                        startActivity(new Intent(HomeActivity.this, RechargeActivity.class));
+//                    } else {
+//                        TipUtil.show(HomeActivity.this, "璇峰厛鍦ㄤ釜浜轰腑蹇冨唴璁剧疆姘翠环");
+//                    }
+                } else {
+                    TipUtil.show("璇峰厛鍦ㄤ釜浜轰腑蹇冨唴璁剧疆鍖哄煙鍙�");
+                }
+
+            }
+        });
+        homeBinding.homeRedCard.setOnClickListener(new View.OnClickListener() {
+            @Override
+            public void onClick(View v) {
+                startActivity(new Intent(HomeActivity.this, ReadCardAcitivy.class));
+            }
+        });
+        //绠$悊绯荤粺鐣岄潰
+        homeBinding.homeAdmin.setOnClickListener(new View.OnClickListener() {
+            @Override
+            public void onClick(View v) {
+                PassWordDialog passWordDialog = new PassWordDialog(HomeActivity.this, new Intent(HomeActivity.this, SysActivity.class));
+                passWordDialog.show();
+            }
+        });
+        //鍙傛暟璁剧疆
+        homeBinding.homeParameter.setOnClickListener(new View.OnClickListener() {
+            @Override
+            public void onClick(View v) {
+                PassWordDialog passWordDialog = new PassWordDialog(HomeActivity.this, new Intent(HomeActivity.this, ParameterActivity.class));
+                passWordDialog.show();
+            }
+        });
+        homeBinding.homeMy.setOnClickListener(new View.OnClickListener() {
+            @Override
+            public void onClick(View v) {
+                startActivity(new Intent(HomeActivity.this, MyActivity.class));
+
+            }
+        });
+    }
+
+    @Override
+    protected void onDestroy() {
+        super.onDestroy();
+        homeActivity = null;
+    }
+
+
+    long mExitTime;
+
+    //鐐瑰嚮涓ゆ閫�鍑虹▼搴� 鏈夋椂闂撮棿闅� 闂撮殧鍐呯偣鍑诲垯閫�鍑虹▼搴� 鍚﹀垯 鍒欐彁绀�
+    @Override
+    public boolean onKeyDown(int keyCode, KeyEvent event) {
+        if (keyCode == KeyEvent.KEYCODE_BACK) {
+            if ((System.currentTimeMillis() - mExitTime) > 2000) {
+                Toast.makeText(HomeActivity.this, "鍐嶆寜涓�娆¢��鍑虹▼搴�", Toast.LENGTH_SHORT).show();
+                mExitTime = System.currentTimeMillis();
+            } else {
+                HomeActivity.this.finish();
+            }
+            return true;
+        }
+        return super.onKeyDown(keyCode, event);
+    }
+}
diff --git a/qiheonlinelibrary/src/main/java/com/dayu/qiheonlinelibrary/activity/IdentifyingActivity.java b/qiheonlinelibrary/src/main/java/com/dayu/qiheonlinelibrary/activity/IdentifyingActivity.java
new file mode 100644
index 0000000..909f5c4
--- /dev/null
+++ b/qiheonlinelibrary/src/main/java/com/dayu/qiheonlinelibrary/activity/IdentifyingActivity.java
@@ -0,0 +1,165 @@
+package com.dayu.qiheonlinelibrary.activity;
+
+import android.os.Bundle;
+import android.text.TextUtils;
+import android.view.LayoutInflater;
+import android.view.View;
+
+import com.dayu.baselibrary.utils.TipUtil;
+import com.dayu.baselibrary.view.ChooseView;
+import com.dayu.qiheonlinelibrary.card.CleanCard;
+import com.dayu.qiheonlinelibrary.card.ConfigurationPowerCard;
+import com.dayu.qiheonlinelibrary.card.ConfigureDeviceRegistrationCrad;
+import com.dayu.qiheonlinelibrary.card.ManageCard;
+import com.dayu.qiheonlinelibrary.card.RegisteredCard;
+import com.dayu.qiheonlinelibrary.card.TestCard;
+import com.dayu.qiheonlinelibrary.databinding.ActivityIdentyfyingQhlBinding;
+import com.dayu.qiheonlinelibrary.dbBean.CardData;
+import com.dayu.qiheonlinelibrary.dbBean.IdentityBean;
+import com.dayu.qiheonlinelibrary.utils.CardCommon;
+
+
+import java.util.Arrays;
+
+/**
+ * Created by Android Studio.
+ * author: zuo
+ * Date: 2023-11-20
+ * Time: 10:21
+ * 澶囨敞锛氬崱鏍囪瘑璁剧疆
+ */
+public class IdentifyingActivity extends BaseActivity {
+
+    ActivityIdentyfyingQhlBinding binding;
+
+
+    String[] nianfen = {"绠$悊鍗�", "娓呴浂鍗�", "閲嶆柊娉ㄥ唽璁惧鍗�", "鍒犻櫎鍏ㄩ儴鐢ㄦ埛鍗�", "娴嬭瘯鍗�", "璁惧淇℃伅鍗�", "姘存车鍔熺巼鍗�"};
+
+    /**
+     * 褰撳墠閫変腑鐨勫崱绫诲瀷
+     */
+    String cardType;
+    CardData cardData;
+
+    @Override
+    protected void onCreate(Bundle savedInstanceState) {
+        super.onCreate(savedInstanceState);
+        binding = ActivityIdentyfyingQhlBinding.inflate(LayoutInflater.from(this));
+        setContentView(binding.getRoot());
+        binding.chooseCardType.setOnClickListener(new View.OnClickListener() {
+            @Override
+            public void onClick(View v) {
+                ChooseView.getIntence(IdentifyingActivity.this, Arrays.asList(nianfen.clone()), new ChooseView.ChooseCallBack() {
+                    @Override
+                    public void onOptionsSelect(int options1) {
+                        chooseData(nianfen[options1]);
+                        binding.chooseCardTypeText.setText(nianfen[options1]);
+                    }
+                }).show();
+            }
+        });
+
+
+        IdentityBean identityBean = baseDao.identityDao().findFirst();
+
+        binding.electricOk.setOnClickListener(new View.OnClickListener() {
+            @Override
+            public void onClick(View v) {
+                if (TextUtils.isEmpty(cardType)) {
+                    TipUtil.show("璇烽�夋嫨鍗$被鍨�");
+                    return;
+                }
+                String data = binding.electricOldNumber.getText().toString();
+                if (!TextUtils.isEmpty(data)) {
+                    if (cardData == null) {
+                        cardData = new CardData();
+                        cardData.setCardType(cardType);
+                    }
+                    cardData.setCardIdentifying(data);
+                    baseDao.cardDataDao().insert(cardData);
+                    TipUtil.show("淇濆瓨鎴愬姛");
+                } else {
+                    TipUtil.show("璇疯緭鍏ュ崱鏍囪瘑");
+                }
+            }
+        });
+    }
+
+
+    private void chooseData(String data) {
+
+        switch (data) {
+            case "绠$悊鍗�":
+                cardType = CardCommon.MANAGE_CRAD;
+                cardData = baseDao.cardDataDao().findFirst(CardCommon.MANAGE_CRAD);
+                if (cardData != null) {
+                    setData(cardData);
+                } else {
+                    binding.electricOldNumber.setText(new ManageCard().getCardData());
+                }
+                break;
+            case "娓呴浂鍗�":
+                cardType = CardCommon.CLEAN_CARD_TYPE;
+                cardData = baseDao.cardDataDao().findFirst(CardCommon.CLEAN_CARD_TYPE);
+                if (cardData != null) {
+                    setData(cardData);
+                } else {
+                    binding.electricOldNumber.setText(new CleanCard().getCardData());
+                }
+                break;
+            case "閲嶆柊娉ㄥ唽璁惧鍗�":
+                cardType = CardCommon.REGISTERED_CARD_TYPE;
+                cardData = baseDao.cardDataDao().findFirst(CardCommon.REGISTERED_CARD_TYPE);
+                if (cardData != null) {
+                    setData(cardData);
+                } else {
+                    binding.electricOldNumber.setText(new RegisteredCard().getCardData());
+                }
+                break;
+            case "鍒犻櫎鍏ㄩ儴鐢ㄦ埛鍗�":
+                cardType = CardCommon.CLEAN_ALL_USER_CARD_TYPE;
+                cardData = baseDao.cardDataDao().findFirst(CardCommon.CLEAN_ALL_USER_CARD_TYPE);
+                if (cardData != null) {
+                    setData(cardData);
+                } else {
+                    binding.electricOldNumber.setText(new RegisteredCard().getCardData());
+                }
+                break;
+            case "娴嬭瘯鍗�":
+                cardType = CardCommon.TEST_CARD_TYPE;
+                cardData = baseDao.cardDataDao().findFirst(CardCommon.TEST_CARD_TYPE);
+                if (cardData != null) {
+                    setData(cardData);
+                } else {
+                    binding.electricOldNumber.setText(new TestCard().getCardData());
+                }
+                break;
+            case "璁惧淇℃伅鍗�":
+                cardType = CardCommon.CONFIGURATION_CARD_TYPE;
+                cardData = baseDao.cardDataDao().findFirst(CardCommon.CONFIGURATION_CARD_TYPE);
+                if (cardData != null) {
+                    setData(cardData);
+                } else {
+                    binding.electricOldNumber.setText(new ConfigureDeviceRegistrationCrad().getCardData());
+                }
+                break;
+            case "姘存车鍔熺巼鍗�":
+                cardType = CardCommon.CONFIGURATION_POWER_CARD_TYPE;
+                cardData = baseDao.cardDataDao().findFirst(CardCommon.CONFIGURATION_POWER_CARD_TYPE);
+                if (cardData != null) {
+                    setData(cardData);
+                } else {
+                    binding.electricOldNumber.setText(new ConfigurationPowerCard().getCardData());
+                }
+                break;
+        }
+    }
+
+    private void setData(CardData cardData) {
+        if (cardData != null) {
+            String Identifying = cardData.getCardIdentifying();
+            binding.electricOldNumber.setText(Identifying);
+        }
+    }
+
+}
diff --git a/qiheonlinelibrary/src/main/java/com/dayu/qiheonlinelibrary/activity/ManageSetUpActivity.java b/qiheonlinelibrary/src/main/java/com/dayu/qiheonlinelibrary/activity/ManageSetUpActivity.java
new file mode 100644
index 0000000..5e01d41
--- /dev/null
+++ b/qiheonlinelibrary/src/main/java/com/dayu/qiheonlinelibrary/activity/ManageSetUpActivity.java
@@ -0,0 +1,17 @@
+package com.dayu.qiheonlinelibrary.activity;
+
+import android.os.Bundle;
+
+/**
+ * Copyright (C), 2023,
+ * Author: zuo
+ * Date: 2023-11-08 16:52
+ * Description:绠$悊鍗¤缃晫闈�
+ */
+public class ManageSetUpActivity extends BaseActivity {
+    @Override
+    protected void onCreate(Bundle savedInstanceState) {
+        super.onCreate(savedInstanceState);
+
+    }
+}
diff --git a/qiheonlinelibrary/src/main/java/com/dayu/qiheonlinelibrary/activity/ManagerListActivity.java b/qiheonlinelibrary/src/main/java/com/dayu/qiheonlinelibrary/activity/ManagerListActivity.java
new file mode 100644
index 0000000..fed7242
--- /dev/null
+++ b/qiheonlinelibrary/src/main/java/com/dayu/qiheonlinelibrary/activity/ManagerListActivity.java
@@ -0,0 +1,152 @@
+package com.dayu.qiheonlinelibrary.activity;
+
+import static com.dayu.baselibrary.view.TitleBar.ClickType_RIGHT_TEXT;
+
+import android.content.Intent;
+import android.os.Bundle;
+import android.view.LayoutInflater;
+import android.view.View;
+
+
+import androidx.recyclerview.widget.LinearLayoutManager;
+
+import com.dayu.baselibrary.tools.HexUtil;
+import com.dayu.baselibrary.utils.TipUtil;
+import com.dayu.baselibrary.view.EdtDialog;
+import com.dayu.qiheonlinelibrary.adapter.ManagerCardAdapter;
+import com.dayu.qiheonlinelibrary.card.ManageCard;
+import com.dayu.qiheonlinelibrary.databinding.ActivityManagerListQhlBinding;
+import com.dayu.qiheonlinelibrary.dbBean.UserCardBean;
+import com.scwang.smart.refresh.footer.ClassicsFooter;
+import com.scwang.smart.refresh.layout.api.RefreshLayout;
+import com.scwang.smart.refresh.layout.listener.OnLoadMoreListener;
+
+
+import java.util.ArrayList;
+import java.util.List;
+
+import io.reactivex.rxjava3.android.schedulers.AndroidSchedulers;
+import io.reactivex.rxjava3.core.Observable;
+import io.reactivex.rxjava3.schedulers.Schedulers;
+
+/**
+ * author: zuo
+ * Date: 2024-05-09
+ * Time: 11:20
+ * 澶囨敞锛氱鐞嗗崱閫夋嫨鏈湴鐢ㄦ埛鐣岄潰
+ */
+public class ManagerListActivity extends BaseActivity {
+
+    ActivityManagerListQhlBinding binding;
+    List<UserCardBean> userCardBeanList = new ArrayList<>();
+    ManagerCardAdapter adapter;
+    int page = 0;
+
+    //姣忛〉鏁版嵁鏉℃暟
+    int limit = 30;
+    RefreshLayout myRefreshLayout;
+    EdtDialog edtDialog;
+    String cardNumber;
+
+    @Override
+    protected void onCreate(Bundle savedInstanceState) {
+        super.onCreate(savedInstanceState);
+        binding = ActivityManagerListQhlBinding.inflate(LayoutInflater.from(this));
+        setContentView(binding.getRoot());
+        cardNumber = this.getIntent().getStringExtra("cardNumber");
+        initList();
+        getList();
+        setRightButton();
+    }
+
+    public void itemClick(View view) {
+        UserCardBean userCardBean = userCardBeanList.get((int) view.getTag());
+        ManageCard manageCard = new ManageCard();
+        String hex = userCardBean.getCardNumber();
+        hex = HexUtil.spaceHex(hex);
+        hex = HexUtil.HighLowHex(hex);
+        manageCard.setUserCard(hex);
+        Intent intent = new Intent(ManagerListActivity.this, NFCWreatActivity.class);
+        intent.putExtra("manageCard", manageCard);
+//        intent.putExtra("cardNumber", cardNumber);
+        intent.putExtra("userCardBean_manager", userCardBean);
+        startActivity(intent);
+        this.finish();
+    }
+
+    private void initList() {
+        myRefreshLayout = (RefreshLayout) binding.refreshLayout;
+        myRefreshLayout.setEnableRefresh(false);
+        myRefreshLayout.setRefreshFooter(new ClassicsFooter(this));
+        myRefreshLayout.setOnLoadMoreListener(new OnLoadMoreListener() {
+            @Override
+            public void onLoadMore(RefreshLayout refreshlayout) {
+                page = page + 1;
+                getList();
+            }
+        });
+        adapter = new ManagerCardAdapter(this, userCardBeanList);
+        LinearLayoutManager layoutManager = new LinearLayoutManager(this);
+        binding.recyclerView.setLayoutManager(layoutManager);
+        binding.recyclerView.setAdapter(adapter);
+    }
+
+
+    private void getList() {
+        // 鍒涘缓涓�涓� Observable
+        Observable<List<UserCardBean>> observable = Observable.create(emitter -> {
+            // 鍦ㄨ繖閲屾墽琛屽紓姝ユ搷浣�
+            List<UserCardBean> beanList;
+            beanList = asynchBaseDao.userCardDao().findAll(page * limit, limit);
+            // 灏嗙粨鏋滃彂閫佺粰瑙傚療鑰�
+            emitter.onNext(beanList);
+            emitter.onComplete();
+        });
+        // 璁㈤槄瑙傚療鑰�
+        observable.subscribeOn(Schedulers.io()) // 鎸囧畾鍦� IO 绾跨▼鎵ц
+                .observeOn(AndroidSchedulers.mainThread()) // 鎸囧畾鍦ㄥ崟涓�绾跨▼瑙傚療缁撴灉
+                .subscribe(
+                        result -> {
+                            // 鍦ㄨ繖閲屽鐞嗙粨鏋滐紝杩欓噷鏄湪涓荤嚎绋嬩腑
+//                            System.out.println("Result: " + result);
+                            if (result.size() < limit) {
+                                myRefreshLayout.finishLoadMoreWithNoMoreData();
+                            }
+                            if (result != null && result.size() > 0) {
+                                userCardBeanList.addAll(result);
+                            }
+                            adapter.notifyDataSetChanged();
+                        },
+                        error -> {
+                            // 澶勭悊閿欒
+                            System.err.println("Error: " + error.getMessage());
+                        }
+                );
+    }
+
+    private void setRightButton() {
+        titleBar.setOnItemclickListner(ClickType_RIGHT_TEXT, v -> {
+            edtDialog = new EdtDialog(ManagerListActivity.this, "鍙緭鍏ュ鍚嶃�佽韩浠借瘉鍙枫�佹墜鏈哄彿鎼滅储", new EdtDialog.DialogBack() {
+                @Override
+                public void onOk(String data) {
+                    List<UserCardBean> beans = baseDao.userCardDao().findByData(data);
+                    if (beans != null && beans.size() > 0) {
+                        userCardBeanList.clear();
+                        userCardBeanList.addAll(beans);
+                        adapter.notifyDataSetChanged();
+                    } else {
+                        TipUtil.show("鏈壘鍒拌鐢ㄦ埛");
+                    }
+                    edtDialog.dismiss();
+                }
+
+                @Override
+                public void onCancel() {
+                    edtDialog.dismiss();
+                }
+            });
+            edtDialog.show();
+        });
+    }
+
+}
diff --git a/qiheonlinelibrary/src/main/java/com/dayu/qiheonlinelibrary/activity/ManagerReadActivity.java b/qiheonlinelibrary/src/main/java/com/dayu/qiheonlinelibrary/activity/ManagerReadActivity.java
new file mode 100644
index 0000000..30eae44
--- /dev/null
+++ b/qiheonlinelibrary/src/main/java/com/dayu/qiheonlinelibrary/activity/ManagerReadActivity.java
@@ -0,0 +1,63 @@
+package com.dayu.qiheonlinelibrary.activity;
+
+import android.content.Intent;
+import android.nfc.NfcAdapter;
+import android.os.Bundle;
+import android.text.TextUtils;
+import android.view.LayoutInflater;
+
+import com.dayu.baselibrary.utils.TipUtil;
+import com.dayu.qiheonlinelibrary.databinding.ActivityManagerReadQhlBinding;
+import com.dayu.qiheonlinelibrary.tools.NfcReadHelper;
+import com.dayu.qiheonlinelibrary.view.ProgressDialog;
+
+
+/**
+ * author: zuo
+ * Date: 2024-05-09
+ * Time: 11:05
+ * 澶囨敞锛�
+ */
+public class ManagerReadActivity extends BaseNfcActivity {
+
+    ActivityManagerReadQhlBinding binding;
+    Intent intent;
+
+    @Override
+    protected void onCreate(Bundle savedInstanceState) {
+        super.onCreate(savedInstanceState);
+        binding = ActivityManagerReadQhlBinding.inflate(LayoutInflater.from(this));
+        setContentView(binding.getRoot());
+
+    }
+
+    @Override
+    public void onNewIntent(Intent intent) {
+        this.intent = intent;
+        ProgressDialog.show(this);
+        if (NfcAdapter.ACTION_TAG_DISCOVERED.equals(intent.getAction())) {
+            getCardNumber();
+        }
+        super.onNewIntent(intent);
+    }
+
+
+    private void getCardNumber() {
+        String cardNumber = NfcReadHelper.getInstence(intent, this).getCardNumber();
+        if (!TextUtils.isEmpty(cardNumber)) {
+            TipUtil.show(this, "璇诲崱鎴愬姛锛屾帴涓嬫潵浼氳烦杞埌鐢ㄦ埛鍒楄〃閫夋嫨琛ュ崱鐨勭敤鎴枫��", new TipUtil.TipListener() {
+                @Override
+                public void onCancle() {
+                    Intent intent = new Intent(ManagerReadActivity.this, ManagerListActivity.class);
+                    intent.putExtra("cardNumber", cardNumber);
+                    startActivity(intent);
+                    ManagerReadActivity.this.finish();
+                }
+            });
+
+
+        } else {
+            TipUtil.show(this, "鏈鍙栧埌鏂板崱鍗″彿锛岃閲嶆柊璐村崱");
+        }
+    }
+}
diff --git a/qiheonlinelibrary/src/main/java/com/dayu/qiheonlinelibrary/activity/MyActivity.java b/qiheonlinelibrary/src/main/java/com/dayu/qiheonlinelibrary/activity/MyActivity.java
new file mode 100644
index 0000000..2574be7
--- /dev/null
+++ b/qiheonlinelibrary/src/main/java/com/dayu/qiheonlinelibrary/activity/MyActivity.java
@@ -0,0 +1,313 @@
+package com.dayu.qiheonlinelibrary.activity;
+
+import android.Manifest;
+import android.app.Activity;
+import android.content.Intent;
+import android.content.pm.PackageManager;
+import android.os.Build;
+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 androidx.annotation.NonNull;
+
+import com.dayu.baselibrary.utils.TipUtil;
+import com.dayu.baselibrary.view.PassWordDialog;
+import com.dayu.baselibrary.view.datepicker.CustomDatePicker;
+import com.dayu.baselibrary.view.datepicker.DateFormatUtils;
+import com.dayu.qiheonlinelibrary.databinding.ActivityMyQhlBinding;
+import com.dayu.qiheonlinelibrary.dbBean.AdminDataBean;
+import com.dayu.qiheonlinelibrary.dbBean.ElectricPriceBean;
+import com.dayu.qiheonlinelibrary.utils.DeviceNumberUtils;
+import com.dayu.qiheonlinelibrary.utils.ExcelUtil;
+
+import java.io.File;
+import java.util.ArrayList;
+import java.util.List;
+
+
+/**
+ * Copyright (C), 2023,
+ * Author: zuo
+ * Date: 2023-11-10 19:52
+ * Description: 涓汉涓績
+ */
+public class MyActivity extends BaseActivity {
+
+
+    private CustomDatePicker beginDatePicker;
+    private CustomDatePicker endDatePicker;
+    long beginTime;
+    long endTime;
+
+    boolean isRechargeList = false;
+    ActivityMyQhlBinding myBinding;
+
+    @Override
+    protected void onCreate(Bundle savedInstanceState) {
+        super.onCreate(savedInstanceState);
+        myBinding = ActivityMyQhlBinding.inflate(LayoutInflater.from(this));
+        setContentView(myBinding.getRoot());
+        getVersion(this);
+        setData();
+        initDatePicker();
+        initView();
+    }
+
+    private void initView() {
+
+        myBinding.myAdmin.setOnClickListener(new View.OnClickListener() {
+            @Override
+            public void onClick(View v) {
+                PassWordDialog passWordDialog = new PassWordDialog(MyActivity.this, new Intent(MyActivity.this, AdminSetupActivity.class));
+                passWordDialog.show();
+//                startActivity(new Intent(MyActivity.this, AdminSetupActivity.class));
+            }
+        });
+        myBinding.myWaterPriceLL.setOnClickListener(new View.OnClickListener() {
+            @Override
+            public void onClick(View v) {
+                PassWordDialog passWordDialog = new PassWordDialog(MyActivity.this, new Intent(MyActivity.this, AdminSetupActivity.class));
+                passWordDialog.show();
+            }
+        });
+        myBinding.myPsw.setOnClickListener(new View.OnClickListener() {
+            @Override
+            public void onClick(View v) {
+                startActivity(new Intent(MyActivity.this, PassWordActivity.class));
+            }
+        });
+        myBinding.myRechargeListLl.setOnClickListener(new View.OnClickListener() {
+            @Override
+            public void onClick(View v) {
+                startActivity(new Intent(MyActivity.this, RechargeListActivity.class));
+            }
+        });
+        myBinding.myNewCardListLl.setOnClickListener(new View.OnClickListener() {
+            @Override
+            public void onClick(View v) {
+                startActivity(new Intent(MyActivity.this, NewCardListActivity.class));
+            }
+        });
+        myBinding.myNewCardOut.setOnClickListener(new View.OnClickListener() {
+            @Override
+            public void onClick(View v) {
+                isRechargeList = false;
+                beginDatePicker.show(System.currentTimeMillis());
+            }
+        });
+        myBinding.myRechargeOut.setOnClickListener(new View.OnClickListener() {
+            @Override
+            public void onClick(View v) {
+                isRechargeList = true;
+                beginDatePicker.show(System.currentTimeMillis());
+            }
+        });
+
+
+    }
+
+
+    Handler handler = new Handler(new Handler.Callback() {
+        @Override
+        public boolean handleMessage(@NonNull Message msg) {
+            switch (msg.what) {
+                case 1:
+                    TipUtil.show(MyActivity.this, "瀵煎嚭鎴愬姛!");
+                    break;
+                case 3:
+                    TipUtil.show(MyActivity.this, "璁板綍涓虹┖!");
+                    break;
+                default:
+                    TipUtil.show(MyActivity.this, "瀵煎嚭澶辫触!");
+                    break;
+            }
+            stopAnim();
+            return false;
+        }
+    });
+
+    /**
+     * 瀵煎嚭鎴怑xcel
+     */
+    private void outExcl() {
+        startAnim();
+        new Thread(new Runnable() {
+            @Override
+            public void run() {
+                {
+                    try {
+                        File file = new File(ExcelUtil.outPath);
+                        //鏂囦欢澶规槸鍚﹀凡缁忓瓨鍦�
+                        if (!file.exists()) {
+                            file.mkdirs();
+                        }
+                        List listData = new ArrayList();
+                        try {
+                            if (isRechargeList) {
+                                listData = asynchBaseDao.rechargeDao().ansyFindByTime(beginTime, endTime);
+                            } else {
+                                listData = asynchBaseDao.userCardDao().findByTime(beginTime, endTime);
+                            }
+                            if (listData == null || listData.size() == 0) {
+                                handler.sendEmptyMessage(2);
+                                return;
+                            }
+                        } catch (Exception e) {
+                            e.printStackTrace();
+                        }
+                        String[] title;
+                        String fileName;
+                        if (listData == null || listData.size() == 0) {
+                            TipUtil.show(MyActivity.this, "璁板綍涓虹┖");
+                            return;
+                        }
+                        if (isRechargeList) {
+                            title = new String[]{"璁惧搴忓垪鍙�", "鐢ㄦ埛鍚�", "鍗″彿", "鍏呭�兼棩鏈�", "鍏呭�奸噾棰濓紙鍏冿級", "鍓╀綑閲戦锛堝厓锛�"};
+                            fileName = file.toString() + "/" + ExcelUtil.outRechargePathName;
+                        } else {
+                            title = new String[]{"璁惧搴忓垪鍙�", "鐢ㄦ埛鍚�", "韬唤璇佸彿", "鍗″彿", "娉ㄥ唽鏃ユ湡", "鐢佃瘽"};
+                            fileName = file.toString() + "/" + ExcelUtil.outUserPathName;
+                        }
+                        ExcelUtil.initExcel(fileName, title);
+                        ExcelUtil.writeObjListToExcel(listData, fileName, MyActivity.this);
+                        handler.sendEmptyMessage(1);
+                    } catch (Exception e) {
+                        handler.sendEmptyMessage(2);
+                        e.printStackTrace();
+                    }
+                }
+            }
+        }).start();
+
+
+    }
+
+    void getVersion(Activity context) {
+        int REQUEST_CODE_PERMISSION_STORAGE = 100;
+        if (Build.VERSION.SDK_INT >= 23) {
+            String[] permissions = {
+                    Manifest.permission.READ_EXTERNAL_STORAGE,
+                    Manifest.permission.WRITE_EXTERNAL_STORAGE
+            };
+
+            for (String str : permissions) {
+                if (context.checkSelfPermission(str) != PackageManager.PERMISSION_GRANTED) {
+                    context.requestPermissions(permissions, REQUEST_CODE_PERMISSION_STORAGE);
+                    return;
+                }
+            }
+        }
+    }
+
+    private void setData() {
+        AdminDataBean adminData;
+        try {
+            adminData = baseDao.adminDao().findFirst();
+            if (adminData != null) {
+                myBinding.myAdminName.setText(adminData.getAddressCode());
+                myBinding.myVillageNum.setText(adminData.getSerial());
+//                myBinding.myWaterPrice.setText(MornyUtil.changeF2Y(adminData.getWaterPrice()));
+            } else {
+                myBinding.myAdminName.setText("璇风偣鍑诲尯鍩熷彿杩涜璁剧疆");
+                myBinding.myVillageNum.setText("璇风偣鍑诲尯鍩熷彿杩涜璁剧疆");
+//                myBinding.myWaterPrice.setText("璇风偣鍑诲尯鍩熷彿杩涜璁剧疆");
+            }
+            StringBuilder msgData = new StringBuilder();
+
+            String initCode = DeviceNumberUtils.getDeviceNumber();
+            if (TextUtils.isEmpty(initCode)) {
+                msgData.append("璁惧鏈敞鍐�");
+            } else {
+                msgData.append("璁惧娉ㄥ唽鍙凤細" + initCode);
+            }
+            myBinding.myTestConnect.setText(msgData);
+            ElectricPriceBean priceBean = baseDao.electricPriceDao().findFirst();
+            if (priceBean != null) {
+                myBinding.myWaterPrice.setText(priceBean.getPrice() + "鍏�");
+            } else {
+                myBinding.myWaterPrice.setText("1.000鍏�");
+            }
+        } catch (Exception e) {
+            e.printStackTrace();
+        }
+    }
+
+
+    @Override
+    protected void onStart() {
+        super.onStart();
+        setData();
+    }
+
+
+    private void initDatePicker() {
+        long beginTimestamp = DateFormatUtils.str2Long("2009-05-01", false);
+        final long endTimestamp = System.currentTimeMillis();
+
+        // 閫氳繃鏃堕棿鎴冲垵濮嬪寲鏃ユ湡锛屾绉掔骇鍒�
+        beginDatePicker = new CustomDatePicker(this, "閫夋嫨寮�濮嬫椂闂�", new CustomDatePicker.Callback() {
+            @Override
+            public void onTimeSelected(long timestamp) {
+                beginTime = timestamp;
+                endDatePicker.show(timestamp);
+            }
+        }, beginTimestamp, endTimestamp);
+        // 涓嶅厑璁哥偣鍑诲睆骞曟垨鐗╃悊杩斿洖閿叧闂�
+        beginDatePicker.setCancelable(false);
+        // 涓嶆樉绀烘椂鍜屽垎
+        beginDatePicker.setCanShowPreciseTime(false);
+        // 涓嶅厑璁稿惊鐜粴鍔�
+        beginDatePicker.setScrollLoop(false);
+        // 涓嶅厑璁告粴鍔ㄥ姩鐢�
+        beginDatePicker.setCanShowAnim(false);
+
+        endDatePicker = new CustomDatePicker(this, "閫夋嫨缁撴潫鏃堕棿", new CustomDatePicker.Callback() {
+            @Override
+            public void onTimeSelected(long timestamp) {
+                endTime = timestamp;
+                if ((endTime < beginTime) && endTime != beginTime) {
+                    TipUtil.show(MyActivity.this, "缁撴潫鏃堕棿涓嶈兘鏅氫簬寮�濮嬫椂闂�");
+                } else {
+                    try {
+                        endTime = endTime + (1000 * 60 * 60 * 24) - 1;
+                        outExcl();
+                    } catch (Exception e) {
+                        e.printStackTrace();
+                    }
+                }
+            }
+        }, beginTimestamp, endTimestamp);
+        // 涓嶅厑璁哥偣鍑诲睆骞曟垨鐗╃悊杩斿洖閿叧闂�
+        endDatePicker.setCancelable(false);
+        // 涓嶆樉绀烘椂鍜屽垎
+        endDatePicker.setCanShowPreciseTime(false);
+        // 涓嶅厑璁稿惊鐜粴鍔�
+        endDatePicker.setScrollLoop(false);
+        // 涓嶅厑璁告粴鍔ㄥ姩鐢�
+        endDatePicker.setCanShowAnim(false);
+    }
+
+    @Override
+    protected void onDestroy() {
+        super.onDestroy();
+        endDatePicker.onDestroy();
+        beginDatePicker.onDestroy();
+    }
+
+    void startAnim() {
+        myBinding.avi.setVisibility(View.VISIBLE);
+        myBinding.avi.show();
+        // or avi.smoothToShow();
+    }
+
+    void stopAnim() {
+        myBinding.avi.hide();
+        // or avi.smoothToHide();
+    }
+
+
+}
diff --git a/qiheonlinelibrary/src/main/java/com/dayu/qiheonlinelibrary/activity/NFCWreatActivity.java b/qiheonlinelibrary/src/main/java/com/dayu/qiheonlinelibrary/activity/NFCWreatActivity.java
new file mode 100644
index 0000000..e6c6868
--- /dev/null
+++ b/qiheonlinelibrary/src/main/java/com/dayu/qiheonlinelibrary/activity/NFCWreatActivity.java
@@ -0,0 +1,633 @@
+package com.dayu.qiheonlinelibrary.activity;
+
+import android.content.Intent;
+import android.os.Bundle;
+import android.text.TextUtils;
+import android.util.Log;
+import android.view.KeyEvent;
+import android.view.LayoutInflater;
+import android.view.View;
+
+import com.dayu.baselibrary.tools.HexUtil;
+import com.dayu.baselibrary.utils.AidlUtil;
+import com.dayu.baselibrary.utils.BaseCommon;
+import com.dayu.baselibrary.utils.DateUtil;
+import com.dayu.baselibrary.utils.MornyUtil;
+import com.dayu.baselibrary.utils.TipUtil;
+import com.dayu.baselibrary.view.ConfirmDialog;
+import com.dayu.baselibrary.view.TitleBar;
+
+import com.dayu.qiheonlinelibrary.QHOnLineApplication;
+import com.dayu.qiheonlinelibrary.card.CleanCard;
+import com.dayu.qiheonlinelibrary.card.CleanUserCard;
+import com.dayu.qiheonlinelibrary.card.ConfigurationPowerCard;
+import com.dayu.qiheonlinelibrary.card.ConfigureDeviceRegistrationCrad;
+import com.dayu.qiheonlinelibrary.card.DomainCard;
+import com.dayu.qiheonlinelibrary.card.ElectricPriceCard;
+import com.dayu.qiheonlinelibrary.card.ManageCard;
+import com.dayu.qiheonlinelibrary.card.PassWordCard;
+import com.dayu.qiheonlinelibrary.card.RegionCard;
+import com.dayu.qiheonlinelibrary.card.RegisteredCard;
+import com.dayu.qiheonlinelibrary.card.TestCard;
+import com.dayu.qiheonlinelibrary.card.UserCard;
+import com.dayu.qiheonlinelibrary.databinding.ActivityWriteTextQhlBinding;
+import com.dayu.qiheonlinelibrary.dbBean.AdminDataBean;
+import com.dayu.qiheonlinelibrary.dbBean.RechargeBean;
+import com.dayu.qiheonlinelibrary.dbBean.UserCardBean;
+import com.dayu.qiheonlinelibrary.tools.NFCWriteHelper;
+import com.dayu.qiheonlinelibrary.tools.NfcReadHelper;
+import com.dayu.qiheonlinelibrary.tools.WriteCardUtils;
+import com.dayu.qiheonlinelibrary.utils.CardCommon;
+import com.tencent.bugly.crashreport.CrashReport;
+
+import java.util.Calendar;
+
+/**
+ * Copyright (C), 2023,
+ * Author: zuo
+ * Date: 2023-11-08 21:19
+ * Description: nfc鍐欏崱鐣岄潰
+ */
+public class NFCWreatActivity extends BaseNfcActivity {
+
+    RegisteredCard registeredCard;
+    CleanUserCard cleanUserCard;
+    ManageCard manageCard;
+    DomainCard domainCard;
+
+    CleanCard cleanCard;
+    ConfigureDeviceRegistrationCrad configureDeviceRegistrationCrad;
+    TestCard testCard;
+    //鍖哄煙琛ㄥ彿鍗�
+    RegionCard regionCard;
+    ConfigurationPowerCard configurationPowerCard;
+    //瀵嗙爜鍗�
+    PassWordCard passWordCard;
+    //鐢ㄦ埛鐢甸噺鍗曚环鍗�
+    ElectricPriceCard electricPriceCard;
+    UserCardBean userCardBeanByManager;
+    boolean electricPriceFlag = false;
+    boolean passwordFlag = false;
+    boolean cleanFlag = false;
+    boolean regionFlag = false;
+    boolean userFlag = false;
+    boolean manageCardFlag = false;
+    boolean registeredFlag = false;
+    boolean administrativeCardFlag = false;
+    boolean cleanUserCardFlag = false;
+
+    boolean domainCrdFlag = false;
+
+    boolean testCardFlag = false;
+
+    boolean configDeviceRegiestFlag = false;
+
+    boolean configPowerFlag = false;
+
+    UserCardBean userCardBean;
+    UserCard olduserCard;
+
+    String morny;
+    String rechageWater;//鍏呭�肩殑姘撮噺
+    String userName;
+    AdminDataBean adminData;
+    RechargeBean rechargeBean;
+    Intent intent;
+
+
+    //鎵撳嵃
+    QHOnLineApplication baseApp;
+
+    public static NFCWreatActivity nfcWreatActivity;
+    /**
+     * 鏄惁鏄敤鎴峰崱锛屽亣濡傛槸鐢ㄦ埛鍗$殑璇濋渶瑕佹娴嬪崱鐗囨槸鍚﹀凡缁忓紑杩囨埛锛屽亣濡傚凡寮�鎴峰垯鎶ラ敊涓嶈兘鍐嶅啓鍗�
+     */
+    boolean isUser = false;//
+
+    //鏄惁鏄厖鍊艰繃绋�
+    boolean isRecharge = false;
+
+    ActivityWriteTextQhlBinding binding;
+
+    //褰撳墠鍗$殑鐗╃悊鍗″彿
+    String cardNumber;
+    ConfirmDialog confirmDialog;
+
+    @Override
+    protected void onCreate(Bundle savedInstanceState) {
+        super.onCreate(savedInstanceState);
+        try {
+            binding = ActivityWriteTextQhlBinding.inflate(LayoutInflater.from(this));
+            setContentView(binding.getRoot());
+            nfcWreatActivity = this;
+            getData();
+            titleBack();
+            baseApp = QHOnLineApplication.getInstance();
+        } catch (Exception e) {
+            e.printStackTrace();
+            CrashReport.postCatchedException(e);
+        }
+    }
+
+
+    private void getData() {
+        try {
+            if (this.getIntent().hasExtra("userCard")) {
+                userCard = (UserCard) this.getIntent().getSerializableExtra("userCard");
+            }
+            if (this.getIntent().hasExtra("electricPriceCard")) {
+                electricPriceCard = (ElectricPriceCard) this.getIntent().getSerializableExtra("electricPriceCard");
+
+                binding.cardData.setText("鍒朵綔鐢ㄦ埛鐢甸噺鍗曚环鍗n褰撳墠鍗曚环锛�" + electricPriceCard.getElectricPrice().toString() + " 鍏�");
+            }
+            if (this.getIntent().hasExtra("passWordCard")) {
+                passWordCard = (PassWordCard) this.getIntent().getSerializableExtra("passWordCard");
+                binding.cardData.setText("鍒朵綔瀵嗙爜鍗�");
+            }
+            if (this.getIntent().hasExtra("cleanCard")) {
+                cleanCard = (CleanCard) this.getIntent().getSerializableExtra("cleanCard");
+                binding.cardData.setText("鍒朵綔娓呴浂鍗�");
+            }
+            if (this.getIntent().hasExtra("manageCard")) {
+                cardNumber = this.getIntent().getStringExtra("cardNumber");
+                manageCard = (ManageCard) this.getIntent().getSerializableExtra("manageCard");
+                if (this.getIntent().hasExtra("userCardBean_manager")) {
+                    userCardBeanByManager = (UserCardBean) this.getIntent().getSerializableExtra("userCardBean_manager");
+                }
+                //鏄剧ず鐨勬椂鍊欒鍙嶈繃鏉�
+                String hex = HexUtil.spaceHex(manageCard.getUserCard());
+                hex = HexUtil.HighLowHex(hex);
+                binding.cardData.setText("鍒朵綔绠$悊鍗�(璇峰皢绠$悊鍗¤创鍦ㄨ澶囦笂)\n鐢ㄦ埛鍗″彿锛�" + hex);
+            }
+            if (this.getIntent().hasExtra("registeredCard")) {
+                registeredCard = (RegisteredCard) this.getIntent().getSerializableExtra("registeredCard");
+                binding.cardData.setText("鍒朵綔閲嶆柊娉ㄥ唽璁惧鍗�");
+            }
+            if (this.getIntent().hasExtra("dbUserCard")) {
+                userCardBean = (UserCardBean) this.getIntent().getSerializableExtra("dbUserCard");
+                isUser = true;
+            }
+            if (this.getIntent().hasExtra("cleanUserCard")) {
+                cleanUserCard = (CleanUserCard) this.getIntent().getSerializableExtra("cleanUserCard");
+                binding.cardData.setText("鍒朵綔鍒犻櫎鍏ㄩ儴鐢ㄦ埛鍗�");
+            }
+            if (this.getIntent().hasExtra("domainCard")) {
+                domainCard = (DomainCard) this.getIntent().getSerializableExtra("domainCard");
+                binding.cardData.setText("鍒朵綔璁剧疆鍩熷悕鍗�");
+            }
+            if (this.getIntent().hasExtra("testCard")) {
+                testCard = (TestCard) this.getIntent().getSerializableExtra("testCard");
+                binding.cardData.setText("鍒朵綔娴嬭瘯鍗�");
+            }
+            if (this.getIntent().hasExtra("configureDeviceRegistrationCrad")) {
+                configureDeviceRegistrationCrad = (ConfigureDeviceRegistrationCrad) this.getIntent().getSerializableExtra("configureDeviceRegistrationCrad");
+                binding.cardData.setText("鍒朵綔閰嶇疆璁惧娉ㄥ唽淇℃伅鍗�");
+            }
+            if (this.getIntent().hasExtra("configurationPowerCard")) {
+                configurationPowerCard = (ConfigurationPowerCard) this.getIntent().getSerializableExtra("configurationPowerCard");
+                binding.cardData.setText("鍒朵綔閰嶇疆姘存车鍔熺巼鍗�");
+            }
+            if (this.getIntent().hasExtra("regionCard")) {
+                regionCard = (RegionCard) this.getIntent().getSerializableExtra("regionCard");
+                binding.cardData.setText("鍒朵綔鍖哄煙琛ㄥ彿鍗�");
+            }
+            if (this.getIntent().hasExtra("morny")) {
+                // 鍏呭�奸�昏緫
+                isRecharge = true;
+                morny = this.getIntent().getStringExtra("morny");
+                userName = this.getIntent().getStringExtra("userName");
+                cardNumber = this.getIntent().getStringExtra("cardNumber");
+                userCardBean = (UserCardBean) this.getIntent().getSerializableExtra("userCardBean");
+//                rechageWater = this.getIntent().getStringExtra("rechageWater");
+                binding.cardData.setText("鍏呭�奸噾棰濓細" + morny + " 鍏�");
+            }
+
+            try {
+                adminData = baseDao.adminDao().findFirst();
+            } catch (Exception e) {
+                e.printStackTrace();
+                CrashReport.postCatchedException(e);
+            }
+        } catch (Exception e) {
+            e.printStackTrace();
+            CrashReport.postCatchedException(e);
+        }
+    }
+
+    /**
+     * 妫�娴嬫槸鍚︽槸鐢ㄦ埛鍗★紝鍋囧鏄敤鎴峰崱鐨勮瘽闇�瑕佹娴嬪崱鐗囨槸鍚﹀凡缁忓紑杩囨埛锛屽亣濡傚凡寮�鎴峰垯鎶ラ敊涓嶈兘鍐嶅啓鍗″亣濡傛槸鐢ㄦ埛鍗¢渶瑕�
+     */
+    private void checkHasUser() {
+
+        try {
+            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];
+            }
+            Log.i("NFCWreatActivity", "cardType=" + cardType);
+            if (cardType.equals(CardCommon.USER_CARD_TYPE_1) ||
+                    cardType.equals(CardCommon.USER_CARD_TYPE_2) ||
+                    cardType.equals(CardCommon.USER_CARD_TYPE_3)
+            ) {
+                binding.textView.setText("璇ュ崱宸茬粡鍐欏叆鐢ㄦ埛淇℃伅锛岃鏇存崲鍗$墖");
+                binding.textView.setTextColor(getResources().getColor(com.dayu.baselibrary.R.color.red));
+            } else if (cardType.equals(BaseCommon.CARD_TYPE_ERROR1)) {
+                TipUtil.show(NFCWreatActivity.this, "璇峰嬁绉诲姩鍗$墖锛岃鍗″け璐ヨ閲嶈瘯锛侊紒");
+            } else if (cardType.equals(BaseCommon.CARD_TYPE_ERROR2)) {
+                TipUtil.show(NFCWreatActivity.this, "鍗$墖鏈兘璇嗗埆锛岃妫�鏌ュ崱鐗囨槸鍚︽槸鏈叕鍙稿崱鐗�");
+            } else {
+                Log.i("NFCWreatActivity", "olduserCard!=null  saveData");
+                userCardBean.setCardNumber(cardNumber);
+                baseDao.userCardDao().insert(userCardBean);
+                saveData();
+            }
+        } catch (Exception e) {
+            e.printStackTrace();
+        }
+
+        stopAnim();
+    }
+
+
+    private void saveData() {
+        try {
+            startAnim();
+            if (userCard != null || cleanCard != null || manageCard != null
+                    || registeredCard != null || cleanUserCard != null
+                    || domainCard != null || testCard != null
+                    || configureDeviceRegistrationCrad != null
+                    || configurationPowerCard != null || regionCard != null || passWordCard != null || electricPriceCard != null) {
+                if (userCard != null && TextUtils.isEmpty(morny)) {
+                    userFlag = WriteCardUtils.setUser(intent, userCard, this);
+                }
+                if (electricPriceCard != null) {
+                    setElectricPriceCard(intent, electricPriceCard);
+                }
+                if (passWordCard != null) {
+                    setPassWordCard(intent, passWordCard);
+                }
+                if (regionCard != null) {
+                    setRegionCard(intent, regionCard);
+                }
+                if (cleanCard != null) {
+                    setClean(intent, cleanCard);
+                }
+                if (manageCard != null) {
+                    setmanageCard(intent, manageCard);
+//                    if (manageCardFlag && userCardBeanByManager != null) {
+//                        //淇敼鐢ㄦ埛琛ㄤ俊鎭慨鏀规垚鏂板崱鍗″彿
+//                        userCardBeanByManager.setCardNumber(cardNumber);
+//                        baseDao.userCardDao().update(userCardBeanByManager);
+//                    }
+                }
+                if (registeredCard != null) {
+                    setRegisteredCard(intent, registeredCard);
+                }
+                if (cleanUserCard != null) {
+                    setCleanUserCard(intent, cleanUserCard);
+                }
+                if (domainCard != null) {
+                    setDomainCard(intent, domainCard);
+                }
+                if (testCard != null) {
+                    setTestCard(intent, testCard);
+                }
+                if (configureDeviceRegistrationCrad != null) {
+                    setConfigDeviceRegiest(intent, configureDeviceRegistrationCrad);
+                }
+                if (configurationPowerCard != null) {
+                    setConfigurationPower(intent, configurationPowerCard);
+                }
+                if (electricPriceFlag || passwordFlag || regionFlag || configPowerFlag || configDeviceRegiestFlag || testCardFlag || domainCrdFlag || userFlag || cleanFlag || manageCardFlag || registeredFlag || administrativeCardFlag || cleanUserCardFlag) {
+                    try {
+                        if (userFlag && userCardBean != null) {
+                            //鐢ㄦ埛鍗�
+                            startDetailActivity(userCardBean.getUserName(), "缁堢鍐欏崱");
+                        } else if (!TextUtils.isEmpty(morny)) {
+                            TipUtil.show(NFCWreatActivity.this, "鍏呭�兼垚鍔�", () -> NFCWreatActivity.this.finish());
+                        } else {
+                            TipUtil.show(NFCWreatActivity.this, "鍐欏崱鎴愬姛", () -> NFCWreatActivity.this.finish());
+                        }
+
+                    } catch (Exception e) {
+                        e.printStackTrace();
+                        CrashReport.postCatchedException(e);
+                    }
+                } else {
+                    TipUtil.show(NFCWreatActivity.this, "鍐欏崱澶辫触");
+                }
+                stopAnim();
+            } else if (userCard == null && userCardBean != null) {
+                //琛ュ崱閫昏緫
+
+            } else {
+                stopAnim();
+                TipUtil.show(this, "鍙傛暟閿欒");
+            }
+        } catch (Exception e) {
+            e.printStackTrace();
+            CrashReport.postCatchedException(e);
+        }
+    }
+
+    @Override
+    public void onNewIntent(Intent intent) {
+        super.onNewIntent(intent);
+        try {
+            this.intent = intent;
+//            startAnim();
+            Log.i("NFCWreatActivity", "isUser:" + isUser);
+            if (isUser) {
+                //鏂板崱娉ㄥ唽閫昏緫
+                checkHasUser();
+            } else if (isRecharge) {
+                //鍏呭�奸�昏緫
+                rechargeWreatCard();
+            } else {
+                //鍏朵粬绠$悊鍗¢�昏緫
+                saveData();
+            }
+        } catch (Exception e) {
+            e.printStackTrace();
+            CrashReport.postCatchedException(e);
+        }
+    }
+
+
+    /**
+     * 鎵撳嵃鏈虹浉鍏充俊鎭�
+     *
+     * @param rechargeBean
+     */
+    private void setPrinterData(RechargeBean rechargeBean) {
+        try {
+            StringBuffer data = new StringBuffer();
+            if (rechargeBean != null) {
+                data.append("*****************************" + "\n");
+                data.append("璁惧搴忓垪鍙凤細" + rechargeBean.getSerial() + "\n");
+                data.append("鐢ㄦ埛鍚嶏細" + rechargeBean.getUserName() + "\n");
+                data.append("鍗�  鍙凤細" + rechargeBean.getCardNumber() + "\n");
+                data.append("鍏呭�奸噾棰濓細" + rechargeBean.getMorny() + " 鍏�" + "\n");
+                data.append("鍗″唴浣欓锛�" + rechargeBean.getBalance() + " 鍏�" + "\n");
+//                data.append("鍏呭�兼按閲忥細" + rechargeBean.getRechargeWater() + " 鍚�" + "\n");
+//                data.append("鍓╀綑姘撮噺锛�" + rechargeBean.getSurplusWater() + " 鍚�" + "\n");
+                data.append("鏃�  鏈燂細" + DateUtil.dateToStamp(rechargeBean.getDate(), DateUtil.type2) + "\n\n");
+                data.append("*****************************");
+            }
+            float size = 26;
+
+            try {
+                AidlUtil.getInstance().printText(data.toString(), size, true, false);
+                AidlUtil.getInstance().print3Line();
+            } catch (Exception e) {
+                e.printStackTrace();
+            }
+
+        } catch (Exception e) {
+            e.printStackTrace();
+            CrashReport.postCatchedException(e);
+        }
+    }
+
+    void startAnim() {
+        binding.avi.show();
+        // or avi.smoothToShow();
+    }
+
+    void stopAnim() {
+        binding.avi.hide();
+        // or avi.smoothToHide();
+    }
+
+
+    //寰�鍗″唴鍐欏厖鍊煎悗鐨勬暟鎹�
+    private void rechargeWreatCard() {
+        try {
+            String cardNumberThis = NfcReadHelper.getInstence(intent, this).getCardNumber();
+            cardNumberThis = HexUtil.spaceHex(cardNumberThis);
+            cardNumberThis = HexUtil.HighLowHex(cardNumberThis);
+            //鍒ゆ柇鏄惁鍏呭�肩殑鏄竴涓崱
+            if (cardNumberThis.equalsIgnoreCase(cardNumber)) {
+                //浣欓
+                int balance = userCard.getBalance() + MornyUtil.changeY2F(morny);
+                userCard.setBalance(balance);
+                //鍓╀綑姘撮噺
+//                int surplusWater = userCard.getSurplusWater() + MornyUtil.changeY2F(rechageWater);
+//                userCard.setSurplusWater(surplusWater);
+
+                int rechageTims = userCard.getRechargeTimes() + 1;
+                if (rechageTims == 256) {
+                    rechageTims = 0;
+                }
+                userCard.setRechargeTimes((short) rechageTims);
+                userCard.setRechargeDate(Calendar.getInstance());
+                userFlag = WriteCardUtils.setUser(intent, userCard, this);
+                if (userFlag) {
+                    rechargeBean = new RechargeBean();
+                    rechargeBean.setUserName(userName);
+                    rechargeBean.setSerial(userCardBean.getSerial());
+                    rechargeBean.setUserId(userCardBean.getUserID());
+                    rechargeBean.setDate(System.currentTimeMillis());
+                    rechargeBean.setMorny(morny);
+                    rechargeBean.setBalance(MornyUtil.changeF2Y(balance));
+                    rechargeBean.setCardNumber(cardNumber);
+                    rechargeBean.setSurplusWater(MornyUtil.changeF2Y(0));
+                    rechargeBean.setRechargeWater(rechageWater);
+                    try {
+                        baseDao.rechargeDao().insert(rechargeBean);
+                    } catch (Exception e) {
+                        e.printStackTrace();
+                    }
+                    //   鎵撳嵃鐩稿叧
+                    setPrinterData(rechargeBean);
+                    startDetailActivity(userName, "缁堢鍐欏崱");
+                } else {
+                    TipUtil.show(NFCWreatActivity.this, "鍐欏崱澶辫触锛岃閲嶆柊鍐嶈瘯");
+                }
+            } else {
+                TipUtil.show(NFCWreatActivity.this, "璇诲彇鐨勫崱鍜屽厖鍊肩殑鍗′笉涓�鑷�");
+            }
+        } catch (Exception e) {
+            TipUtil.show(NFCWreatActivity.this, "璇诲彇閿欒锛岃閲嶈瘯");
+        }
+    }
+
+    private void setmanageCard(Intent intent, final ManageCard manageCard) {
+        manageCardFlag = NFCWriteHelper.getInstence(intent, this).writeData(manageCard.toByte(baseDao), 1, 0);
+    }
+
+    /**
+     * 鍒朵綔娓呴浂鍗�
+     *
+     * @param intent
+     * @param clearOrInitCard
+     */
+    private void setClean(Intent intent, CleanCard clearOrInitCard) {
+        cleanFlag = NFCWriteHelper.getInstence(intent, this).writeData(clearOrInitCard.toByte(baseDao), 1, 0);
+    }
+
+    /**
+     * 淇濆瓨鍖哄煙琛ㄥ彿鍗�
+     *
+     * @param intent
+     * @param regionCard
+     */
+    private void setRegionCard(Intent intent, RegionCard regionCard) {
+        regionFlag = NFCWriteHelper.getInstence(intent, this).writeData(regionCard.toByte(), 1, 0);
+    }
+
+    /**
+     * 瀵嗙爜鍗�
+     *
+     * @param intent
+     * @param passWordCard
+     */
+    private void setPassWordCard(Intent intent, PassWordCard passWordCard) {
+        passwordFlag = NFCWriteHelper.getInstence(intent, this).writeData(passWordCard.toByte(baseDao), 1, 0);
+    }
+
+    /**
+     * 鐢ㄦ埛鐢甸噺鍗曚环
+     *
+     * @param intent
+     * @param electricPriceCard
+     */
+    private void setElectricPriceCard(Intent intent, ElectricPriceCard electricPriceCard) {
+        electricPriceFlag = NFCWriteHelper.getInstence(intent, this).writeData(electricPriceCard.toByte(baseDao), 1, 0);
+    }
+
+    /**
+     * 閲嶆柊娉ㄥ唽璁惧鍗�
+     *
+     * @param intent
+     * @param registeredCard
+     */
+    private void setRegisteredCard(Intent intent, RegisteredCard registeredCard) {
+        registeredFlag = NFCWriteHelper.getInstence(intent, this).writeData(registeredCard.toByte(baseDao), 1, 0);
+    }
+
+    /**
+     * 鍒犻櫎鍏ㄩ儴鐢ㄦ埛鍗�
+     *
+     * @param intent
+     * @param cleanUserCard
+     */
+    private void setCleanUserCard(Intent intent, CleanUserCard cleanUserCard) {
+        cleanUserCardFlag = NFCWriteHelper.getInstence(intent, this).writeData(cleanUserCard.toByte(baseDao), 1, 0);
+    }
+
+    /**
+     * 璁剧疆鍩熷悕鍗�
+     *
+     * @param intent
+     * @param domainCard
+     */
+    private void setDomainCard(Intent intent, DomainCard domainCard) {
+        try {
+            domainCrdFlag = NFCWriteHelper.getInstence(intent, this).writeData(domainCard.getZeroByte(), 1, 0);
+            if (!domainCrdFlag) {
+                return;
+            }
+            domainCrdFlag = NFCWriteHelper.getInstence(intent, this).writeData(domainCard.getOneByte(), 1, 1);
+            if (!domainCrdFlag) {
+                return;
+            }
+            domainCrdFlag = NFCWriteHelper.getInstence(intent, this).writeData(domainCard.getTwoByte(), 1, 2);
+        } catch (Exception e) {
+            domainCrdFlag = false;
+            throw new RuntimeException(e);
+        }
+    }
+
+    private void setTestCard(Intent intent, TestCard testCard) {
+        testCardFlag = NFCWriteHelper.getInstence(intent, this).writeData(testCard.toByte(baseDao), 1, 0);
+    }
+
+
+    private void setConfigDeviceRegiest(Intent intent, ConfigureDeviceRegistrationCrad configureDeviceRegistrationCrad) {
+        configDeviceRegiestFlag = NFCWriteHelper.getInstence(intent, this).writeData(configureDeviceRegistrationCrad.toByte(baseDao), 1, 0);
+    }
+
+    private void setConfigurationPower(Intent intent, ConfigurationPowerCard configurationPowerCard) {
+        try {
+            configPowerFlag = NFCWriteHelper.getInstence(intent, this).writeData(configurationPowerCard.toByte(baseDao), 1, 0);
+        } catch (Exception e) {
+            configPowerFlag = false;
+            throw new RuntimeException(e);
+        }
+    }
+
+
+    private void startDetailActivity(String userName, String statu) {
+        Intent detail = new Intent(this, RechargeDetailActivity.class);
+        detail.putExtra("userName", userName);
+        detail.putExtra("statu", statu);
+        detail.putExtra("userCard", userCard);
+        if (!TextUtils.isEmpty(morny)) {
+            detail.putExtra("morny", morny);
+            detail.putExtra("rechageWater", rechageWater);
+        }
+        if (!TextUtils.isEmpty(cardNumber)) {
+            detail.putExtra("cardNumber", cardNumber);
+        }
+
+        startActivity(detail);
+        if (NewCardActivity.newCardActivity != null) {
+            NewCardActivity.newCardActivity.finish();
+        }
+        if (RechargeActivity.rechargeActivity != null) {
+            RechargeActivity.rechargeActivity.finish();
+        }
+        NFCWreatActivity.nfcWreatActivity.finish();
+    }
+
+
+    protected void onDestroy() {
+        super.onDestroy();
+        nfcWreatActivity = null;
+    }
+
+    /**
+     * 鐐瑰嚮杩斿洖鏃舵彁绀虹敤鎴疯繕鏈啓鍗�
+     *
+     * @param keyCode
+     * @param event
+     * @return
+     */
+    @Override
+    public boolean onKeyDown(int keyCode, KeyEvent event) {
+        if (keyCode == KeyEvent.KEYCODE_BACK) {
+            back();
+            return true;
+        }
+        return super.onKeyDown(keyCode, event);
+    }
+
+    private void back() {
+        confirmDialog = new ConfirmDialog(NFCWreatActivity.this, v -> {
+            confirmDialog.dismiss();
+            if (NewCardActivity.newCardActivity != null) {
+                NewCardActivity.newCardActivity.finish();
+            }
+            if (RechargeActivity.rechargeActivity != null) {
+                RechargeActivity.rechargeActivity.finish();
+            }
+            NFCWreatActivity.nfcWreatActivity.finish();
+        });
+        confirmDialog.show();
+    }
+
+    private void titleBack() {
+        titleBar.setOnItemclickListner(TitleBar.ClickType_LEFT_IMAGE, new View.OnClickListener() {
+            @Override
+            public void onClick(View v) {
+                back();
+            }
+        });
+    }
+}
\ No newline at end of file
diff --git a/qiheonlinelibrary/src/main/java/com/dayu/qiheonlinelibrary/activity/NewCardActivity.java b/qiheonlinelibrary/src/main/java/com/dayu/qiheonlinelibrary/activity/NewCardActivity.java
new file mode 100644
index 0000000..7165c03
--- /dev/null
+++ b/qiheonlinelibrary/src/main/java/com/dayu/qiheonlinelibrary/activity/NewCardActivity.java
@@ -0,0 +1,310 @@
+package com.dayu.qiheonlinelibrary.activity;
+
+import android.content.Intent;
+import android.os.Bundle;
+import android.text.InputFilter;
+import android.text.Spanned;
+import android.text.TextUtils;
+import android.view.LayoutInflater;
+import android.view.View;
+
+import androidx.annotation.NonNull;
+
+import com.dayu.baselibrary.tools.Utils;
+import com.dayu.baselibrary.utils.TipUtil;
+import com.dayu.baselibrary.utils.ToastUtil;
+
+import com.dayu.qiheonlinelibrary.card.UserCard;
+import com.dayu.qiheonlinelibrary.databinding.ActivityNewCardQhlBinding;
+import com.dayu.qiheonlinelibrary.dbBean.AdminDataBean;
+import com.dayu.qiheonlinelibrary.dbBean.UserCardBean;
+import com.hjq.permissions.OnPermissionCallback;
+import com.hjq.permissions.Permission;
+import com.hjq.permissions.XXPermissions;
+import com.kernal.passportreader.sdk.CardsCameraActivity;
+import com.kernal.passportreader.sdk.utils.DefaultPicSavePath;
+
+import java.util.Calendar;
+import java.util.List;
+import java.util.regex.Matcher;
+import java.util.regex.Pattern;
+
+import kernal.idcard.android.ResultMessage;
+import kernal.idcard.camera.CardOcrRecogConfigure;
+import kernal.idcard.camera.SharedPreferencesHelper;
+
+/**
+ * Copyright (C), 2023,
+ * Author: zuo
+ * Date: 2023-11-10 19:52
+ * Description: 鏂板崱娉ㄥ唽
+ */
+public class NewCardActivity extends BaseActivity {
+
+    public static final int SCAN_IDCARD_REQUEST = 1;
+    UserCardBean userCardBean;
+
+    ActivityNewCardQhlBinding newCardBinding;
+    AdminDataBean adminData;
+
+    static NewCardActivity newCardActivity;
+    private int defValueMainId = 2;
+    private int defValueSubId = 0;
+
+
+    @Override
+    protected void onCreate(Bundle savedInstanceState) {
+        super.onCreate(savedInstanceState);
+        newCardActivity = this;
+        newCardBinding = ActivityNewCardQhlBinding.inflate(LayoutInflater.from(this));
+        setContentView(newCardBinding.getRoot());
+        setData();
+        initView();
+    }
+
+    private void initView() {
+        newCardBinding.newCardName.setFilters(new InputFilter[]{new ChineseInputFilter()});
+        newCardBinding.newCardId.setFilters(new InputFilter[]{new AlphaNumericXFilter(), new InputFilter.LengthFilter(18)});
+        //韬唤璇佽瘑鍒�
+        newCardBinding.newCardScanBtn.setOnClickListener(new View.OnClickListener() {
+            @Override
+            public void onClick(View v) {
+                rxPermission();
+            }
+        });
+        //寮�鎴�
+        newCardBinding.newCardRegistBtn.setOnClickListener(v -> {
+
+            String userName = newCardBinding.newCardName.getText().toString();
+            long date = System.currentTimeMillis();
+            String phone = newCardBinding.newCardPhone.getText().toString();
+            String userID = newCardBinding.newCardId.getText().toString().toUpperCase();
+
+
+            if (!TextUtils.isEmpty(userName)
+                    && !TextUtils.isEmpty(phone) && !TextUtils.isEmpty(userID)
+            ) {
+                if (userName.length() <= 1 || !validateName(userName)) {
+                    TipUtil.show(NewCardActivity.this, "璇疯緭鍏ユ纭鍚�");
+                } else if (phone.length() < 11 || !isValidPhoneNumber(phone)) {
+                    TipUtil.show(NewCardActivity.this, "璇疯緭鍏ユ纭墜鏈哄彿");
+                } else if (!Utils.check(userID)) {
+                    TipUtil.show(NewCardActivity.this, "璇疯緭鍏ユ纭韩浠借瘉鍙�");
+                } else {
+                    userCardBean = new UserCardBean();
+                    userCardBean.setUserName(userName);
+                    userCardBean.setDate(date);
+                    userCardBean.setSerial(adminData.getSerial());
+                    userCardBean.setPhone(phone);
+                    userCardBean.setUserID(userID);
+
+
+                    UserCard userCard = new UserCard();
+                    userCard.setArerNumber(Integer.valueOf(adminData.getSerial()));
+                    userCard.setDeviceNumberl(Integer.valueOf(adminData.getAddressCode()));
+                    userCard.setRechargeTimes((byte) 0);
+                    userCard.setTotalWater(0);
+                    userCard.setTotalElectric(0);
+                    userCard.setBalance(0);
+                    userCard.setSurplusWater(0);
+                    userCard.setRechargeDate(Calendar.getInstance());
+
+                    Intent intent = new Intent(NewCardActivity.this, NFCWreatActivity.class);
+                    intent.putExtra("userCard", userCard);
+                    intent.putExtra("dbUserCard", userCardBean);
+                    startActivity(intent);
+                }
+
+            } else {
+                TipUtil.show(NewCardActivity.this, "璇疯緭鍏ュ畬鏁村唴瀹�");
+            }
+        });
+    }
+
+    private boolean isValidPhoneNumber(String phoneNumber) {
+        // 瀹氫箟鎵嬫満鍙风殑姝e垯琛ㄨ揪寮忥紝纭繚鏁板瓧閮ㄥ垎娌℃湁杩炵画6浣嶇浉鍚岀殑鏁板瓧
+        String phoneRegex = "^1[0-9]{10}$";
+
+        // 鍒涘缓 Pattern 瀵硅薄
+        Pattern pattern = Pattern.compile(phoneRegex);
+
+        // 鍒涘缓 matcher 瀵硅薄
+        Matcher matcher = pattern.matcher(phoneNumber);
+
+        // 鍒ゆ柇鎵嬫満鍙锋槸鍚﹀尮閰嶆鍒欒〃杈惧紡
+        return matcher.matches() && !hasSixConsecutiveSameDigits(phoneNumber);
+    }
+
+    /**
+     * 鍒ゆ柇鏄惁鏈�6涓浉鍚岀殑杩炵画鏁板瓧
+     *
+     * @param input
+     * @return
+     */
+    public static boolean hasSixConsecutiveSameDigits(String input) {
+        char[] digits = input.toCharArray();
+
+        for (int i = 0; i <= digits.length - 6; i++) {
+            boolean consecutiveSame = true;
+            for (int j = 1; j < 6; j++) {
+                if (digits[i + j] != digits[i + j - 1]) {
+                    consecutiveSame = false;
+                    break;
+                }
+            }
+            if (consecutiveSame) {
+                return true;
+            }
+        }
+        return false;
+    }
+
+    private void rxPermission() {
+        XXPermissions.with(this)
+                // 鐢宠鍗曚釜鏉冮檺
+//                    .permission(Permission.RECORD_AUDIO)
+                // 鐢宠澶氫釜鏉冮檺
+                .permission(Permission.CAMERA)
+                .request(new OnPermissionCallback() {
+
+                    @Override
+                    public void onGranted(@NonNull List<String> permissions, boolean allGranted) {
+                        if (allGranted) {//鎵�鏈夌敵璇风殑鏉冮檺閮藉凡閫氳繃
+                            startCamera();
+                        }
+                    }
+
+                    @Override
+                    public void onDenied(@NonNull List<String> permissions, boolean doNotAskAgain) {
+                        if (doNotAskAgain) {
+                            // 濡傛灉鏄姘镐箙鎷掔粷灏辫烦杞埌搴旂敤鏉冮檺绯荤粺璁剧疆椤甸潰
+                        } else {
+//                                toast("鑾峰彇褰曢煶鍜屾棩鍘嗘潈闄愬け璐�");
+                        }
+                    }
+                });
+    }
+
+
+    @Override
+    protected void onActivityResult(int requestCode, int resultCode, Intent data) {
+        super.onActivityResult(requestCode, resultCode, data);
+        if (resultCode == RESULT_OK) {
+            switch (requestCode) {
+                case SCAN_IDCARD_REQUEST:
+                    try {
+                        //璺宠浆鎵弿鐣岄潰璇嗗埆瀹屾垚涔嬪悗锛屾暟鎹洖浼�
+                        if (data != null) {
+                            //鏁版嵁鍥炰紶鐨勮幏鍙�
+                            Bundle bundle = data.getBundleExtra("resultbundle");
+                            //bundle涓嶄负null锛屼唬琛ㄨ繖璇嗗埆鎴愬姛
+                            if (bundle != null) {
+                                ResultMessage resultMessage = (ResultMessage) bundle.getSerializable("resultMessage");
+                                newCardBinding.newCardName.setText(resultMessage.GetRecogResult[1]);
+                                newCardBinding.newCardId.setText(resultMessage.GetRecogResult[6]);
+                                newCardBinding.newCardIdTip.setVisibility(View.VISIBLE);
+                            } else {
+                                String error = data.getStringExtra("error");
+                                String StrPath = data.getStringExtra("strpicpath");
+                                ToastUtil.show(error);
+                            }
+
+                        }
+                    } catch (Exception e) {
+                        e.printStackTrace();
+                    }
+
+                    break;
+            }
+        }
+
+    }
+
+    private void startCamera() {
+        CardOcrRecogConfigure.getInstance()
+                .initLanguage(getApplicationContext())
+                .setSaveCut(true)
+                .setOpenIDCopyFuction(true)
+                .setnMainId(getSharedPreferencesStoreMainId())
+                .setnSubID(getSharedPreferencesStoreSubId())
+                .setFlag(0)
+                .setnCropType(0)
+                .setSavePath(new DefaultPicSavePath(this, true));
+        Intent intent = new Intent(this, CardsCameraActivity.class);
+        startActivityForResult(intent, SCAN_IDCARD_REQUEST);
+    }
+
+    public int getSharedPreferencesStoreMainId() {
+        return SharedPreferencesHelper.getInt(
+                getApplicationContext(), "nMainId", defValueMainId);
+    }
+
+    public int getSharedPreferencesStoreSubId() {
+        return SharedPreferencesHelper.getInt(
+                getApplicationContext(), "nSubID", defValueSubId);
+    }
+
+
+    private void setData() {
+
+        try {
+            adminData = baseDao.adminDao().findFirst();
+            newCardBinding.newCardVillageNum.setText(adminData.getSerial());
+        } catch (Exception e) {
+            e.printStackTrace();
+        }
+
+    }
+
+
+    public boolean validateName(String name) {
+        // 浣跨敤姝e垯琛ㄨ揪寮忓尮閰嶅鍚�
+        String regex = "^[\\u4e00-\\u9fa5]+$"; // 鍙厑璁镐腑鏂囧瓧绗�
+        return name.matches(regex);
+    }
+
+    private static class AlphaNumericXFilter implements InputFilter {
+        // 姝e垯琛ㄨ揪寮忓畾涔夊彧鑳借緭鍏ユ暟瀛楀拰瀛楁瘝 "X"锛堝ぇ鍐欐垨灏忓啓锛�
+        private final String regex = "[0-9Xx]*";
+
+        @Override
+        public CharSequence filter(CharSequence source, int start, int end, Spanned dest, int dstart, int dend) {
+            // 妫�鏌ユ瘡涓緭鍏ュ瓧绗︽槸鍚︾鍚堟鍒欒〃杈惧紡
+            for (int i = start; i < end; i++) {
+                if (!String.valueOf(source.charAt(i)).matches(regex)) {
+                    return ""; // 涓嶇鍚堣瀹氱殑瀛楃琚繃婊ゆ帀
+                }
+            }
+            return null; // 鍏佽杈撳叆瀛楃
+        }
+    }
+
+    public class ChineseInputFilter implements InputFilter {
+        @Override
+        public CharSequence filter(CharSequence source, int start, int end, Spanned dest, int dstart, int dend) {
+            StringBuilder builder = new StringBuilder();
+            for (int i = start; i < end; i++) {
+                char currentChar = source.charAt(i);
+                // 鍙厑璁告眽瀛�
+                if (isChineseCharacter(currentChar)) {
+                    builder.append(currentChar);
+                }
+            }
+            return builder.toString();
+        }
+
+        private boolean isChineseCharacter(char c) {
+            // 杩欓噷浣跨敤Unicode鑼冨洿鍒ゆ柇鏄惁涓烘眽瀛�
+            // 姹夊瓧鐨刄nicode鑼冨洿鏄細0x4e00 - 0x9fa5
+            return (c >= 0x4e00 && c <= 0x9fa5);
+        }
+
+    }
+
+    @Override
+    protected void onDestroy() {
+        super.onDestroy();
+        newCardActivity = null;
+    }
+
+}
diff --git a/qiheonlinelibrary/src/main/java/com/dayu/qiheonlinelibrary/activity/NewCardListActivity.java b/qiheonlinelibrary/src/main/java/com/dayu/qiheonlinelibrary/activity/NewCardListActivity.java
new file mode 100644
index 0000000..26da207
--- /dev/null
+++ b/qiheonlinelibrary/src/main/java/com/dayu/qiheonlinelibrary/activity/NewCardListActivity.java
@@ -0,0 +1,190 @@
+package com.dayu.qiheonlinelibrary.activity;
+
+import static com.dayu.baselibrary.view.TitleBar.ClickType_RIGHT_TEXT;
+
+import android.os.Bundle;
+import android.view.LayoutInflater;
+import android.view.View;
+
+
+import androidx.recyclerview.widget.LinearLayoutManager;
+
+import com.dayu.baselibrary.utils.TipUtil;
+import com.dayu.baselibrary.view.datepicker.CustomDatePicker;
+import com.dayu.baselibrary.view.datepicker.DateFormatUtils;
+
+import com.dayu.qiheonlinelibrary.adapter.NewCardAdapter;
+import com.dayu.qiheonlinelibrary.databinding.ActivityNewcardListQhlBinding;
+import com.dayu.qiheonlinelibrary.dbBean.UserCardBean;
+import com.scwang.smart.refresh.footer.ClassicsFooter;
+import com.scwang.smart.refresh.layout.api.RefreshLayout;
+import com.scwang.smart.refresh.layout.listener.OnLoadMoreListener;
+
+import java.util.ArrayList;
+import java.util.List;
+
+import io.reactivex.rxjava3.android.schedulers.AndroidSchedulers;
+import io.reactivex.rxjava3.core.Observable;
+import io.reactivex.rxjava3.schedulers.Schedulers;
+
+/**
+ * Copyright (C), 2023,
+ * Author: zuo
+ * Date: 2023-11-10 19:52
+ * Description: 鏂板崱娉ㄥ唽鍒楄〃鐣岄潰
+ */
+
+public class NewCardListActivity extends BaseActivity {
+
+
+    ActivityNewcardListQhlBinding newcardListBinding;
+    List<UserCardBean> userCardBeanList = new ArrayList<>();
+    NewCardAdapter adapter;
+    private CustomDatePicker beginDatePicker;
+    private CustomDatePicker endDatePicker;
+    long beginTime;
+    long endTime;
+
+    int page = 0;
+
+    //姣忛〉鏁版嵁鏉℃暟
+    int limit = 30;
+    RefreshLayout myRefreshLayout;
+
+    @Override
+    protected void onCreate(Bundle savedInstanceState) {
+        super.onCreate(savedInstanceState);
+        newcardListBinding = ActivityNewcardListQhlBinding.inflate(LayoutInflater.from(this));
+        setContentView(newcardListBinding.getRoot());
+        setRightButton();
+        initDatePicker();
+        initList();
+        getList();
+    }
+
+    private void initList() {
+        myRefreshLayout = (RefreshLayout) newcardListBinding.refreshLayout;
+        myRefreshLayout.setEnableRefresh(false);
+        myRefreshLayout.setRefreshFooter(new ClassicsFooter(this));
+        myRefreshLayout.setOnLoadMoreListener(new OnLoadMoreListener() {
+            @Override
+            public void onLoadMore(RefreshLayout refreshlayout) {
+                page = page + 1;
+                getList();
+            }
+        });
+        adapter = new NewCardAdapter(this, userCardBeanList);
+        LinearLayoutManager layoutManager = new LinearLayoutManager(this);
+        newcardListBinding.recyclerView.setLayoutManager(layoutManager);
+        newcardListBinding.recyclerView.setAdapter(adapter);
+        int totale = baseDao.userCardDao().getUserTotale();
+        newcardListBinding.userTotal.setText("寮�鎴锋暟锛�" + totale + "");
+    }
+
+
+    private void getList() {
+        // 鍒涘缓涓�涓� Observable
+        Observable<List<UserCardBean>> observable = Observable.create(emitter -> {
+            // 鍦ㄨ繖閲屾墽琛屽紓姝ユ搷浣�
+            List<UserCardBean> beanList;
+            if (beginTime == 0 && endTime == 0) {
+                beanList = asynchBaseDao.userCardDao().findAll(page * limit, limit);
+            } else {
+                beanList = asynchBaseDao.userCardDao().findByTime(beginTime, endTime);
+            }
+            // 灏嗙粨鏋滃彂閫佺粰瑙傚療鑰�
+            emitter.onNext(beanList);
+            emitter.onComplete();
+        });
+        // 璁㈤槄瑙傚療鑰�
+        observable.subscribeOn(Schedulers.io()) // 鎸囧畾鍦� IO 绾跨▼鎵ц
+                .observeOn(AndroidSchedulers.mainThread()) // 鎸囧畾鍦ㄥ崟涓�绾跨▼瑙傚療缁撴灉
+                .subscribe(
+                        result -> {
+                            // 鍦ㄨ繖閲屽鐞嗙粨鏋滐紝杩欓噷鏄湪涓荤嚎绋嬩腑
+//                            System.out.println("Result: " + result);
+                            if (result.size() < limit) {
+                                myRefreshLayout.finishLoadMoreWithNoMoreData();
+                            }
+                            if (result != null && result.size() > 0) {
+                                userCardBeanList.addAll(result);
+                            }
+                            adapter.notifyDataSetChanged();
+                        },
+                        error -> {
+                            // 澶勭悊閿欒
+                            System.err.println("Error: " + error.getMessage());
+                        }
+                );
+    }
+
+
+    private void setRightButton() {
+        titleBar.setOnItemclickListner(ClickType_RIGHT_TEXT, new View.OnClickListener() {
+            @Override
+            public void onClick(View v) {
+                beginDatePicker.show(System.currentTimeMillis());
+            }
+        });
+    }
+
+    private void initDatePicker() {
+        long beginTimestamp = DateFormatUtils.str2Long("2009-05-01", false);
+        final long endTimestamp = System.currentTimeMillis();
+
+        // 閫氳繃鏃堕棿鎴冲垵濮嬪寲鏃ユ湡锛屾绉掔骇鍒�
+        beginDatePicker = new CustomDatePicker(this, "閫夋嫨寮�濮嬫椂闂�", new CustomDatePicker.Callback() {
+            @Override
+            public void onTimeSelected(long timestamp) {
+                beginTime = timestamp;
+                endDatePicker.show(timestamp);
+            }
+        }, beginTimestamp, endTimestamp);
+        // 涓嶅厑璁哥偣鍑诲睆骞曟垨鐗╃悊杩斿洖閿叧闂�
+        beginDatePicker.setCancelable(false);
+        // 涓嶆樉绀烘椂鍜屽垎
+        beginDatePicker.setCanShowPreciseTime(false);
+        // 涓嶅厑璁稿惊鐜粴鍔�
+        beginDatePicker.setScrollLoop(false);
+        // 涓嶅厑璁告粴鍔ㄥ姩鐢�
+        beginDatePicker.setCanShowAnim(false);
+
+        endDatePicker = new CustomDatePicker(this, "閫夋嫨缁撴潫鏃堕棿", new CustomDatePicker.Callback() {
+            @Override
+            public void onTimeSelected(long timestamp) {
+                endTime = timestamp;
+                if ((endTime < beginTime) && endTime != beginTime) {
+                    TipUtil.show(NewCardListActivity.this, "缁撴潫鏃堕棿涓嶈兘鏅氫簬寮�濮嬫椂闂�");
+                } else {
+//                    try {
+//                        endTime = endTime + (1000 * 60 * 60 * 24) - 1;
+//                        List<UserCardBean> userList = baseDao.userCardDao().findByTime(beginTime, endTime);
+//                        userCardBeanList.clear();
+//                        userCardBeanList.addAll(userList);
+//                        adapter.notifyDataSetChanged();
+//                    } catch (Exception e) {
+//                        e.printStackTrace();
+//                    }
+                    endTime = endTime + (1000 * 60 * 60 * 24) - 1;
+                    userCardBeanList.clear();
+                    getList();
+                }
+            }
+        }, beginTimestamp, endTimestamp);
+        // 涓嶅厑璁哥偣鍑诲睆骞曟垨鐗╃悊杩斿洖閿叧闂�
+        endDatePicker.setCancelable(false);
+        // 涓嶆樉绀烘椂鍜屽垎
+        endDatePicker.setCanShowPreciseTime(false);
+        // 涓嶅厑璁稿惊鐜粴鍔�
+        endDatePicker.setScrollLoop(false);
+        // 涓嶅厑璁告粴鍔ㄥ姩鐢�
+        endDatePicker.setCanShowAnim(false);
+    }
+
+    @Override
+    protected void onDestroy() {
+        super.onDestroy();
+        endDatePicker.onDestroy();
+        beginDatePicker.onDestroy();
+    }
+}
diff --git a/qiheonlinelibrary/src/main/java/com/dayu/qiheonlinelibrary/activity/ParameterActivity.java b/qiheonlinelibrary/src/main/java/com/dayu/qiheonlinelibrary/activity/ParameterActivity.java
new file mode 100644
index 0000000..028a4e4
--- /dev/null
+++ b/qiheonlinelibrary/src/main/java/com/dayu/qiheonlinelibrary/activity/ParameterActivity.java
@@ -0,0 +1,59 @@
+package com.dayu.qiheonlinelibrary.activity;
+
+import android.content.Intent;
+import android.os.Bundle;
+import android.view.LayoutInflater;
+
+import com.dayu.qiheonlinelibrary.databinding.ActivityParameterQhlBinding;
+
+
+/**
+ * Copyright (C), 2023,
+ * Author: zuo
+ * Date: 2023-11-06 11:47
+ * Description: 鍙傛暟璁剧疆鐣岄潰
+ */
+public class ParameterActivity extends BaseActivity {
+    ActivityParameterQhlBinding binding;
+
+    @Override
+    protected void onCreate(Bundle savedInstanceState) {
+        super.onCreate(savedInstanceState);
+        binding = ActivityParameterQhlBinding.inflate(LayoutInflater.from(this));
+        setContentView(binding.getRoot());
+        initView();
+    }
+
+    private void initView() {
+        //璁剧疆鍩熷悕鍗�
+        binding.parameterDomain.setOnClickListener(v -> {
+            Intent intent = new Intent(ParameterActivity.this, DomainActivity.class);
+            startActivity(intent);
+        });
+//       姘存车鍔熺巼璁剧疆
+        binding.parameterPower.setOnClickListener(v -> {
+            Intent intent = new Intent(ParameterActivity.this, PowerActivity.class);
+            startActivity(intent);
+        });
+        //鐢甸噺鍗曚环璁剧疆
+        binding.parameterElectricPrice.setOnClickListener(v -> {
+            Intent intent = new Intent(ParameterActivity.this, ElectricPriceActivity.class);
+            startActivity(intent);
+        });
+        //鍗℃爣璇嗚缃�
+        binding.parameterCardIdentifying.setOnClickListener(v -> {
+            Intent intent = new Intent(ParameterActivity.this, IdentifyingActivity.class);
+            startActivity(intent);
+        });
+        //瀵嗙爜鍗¤缃瘑鐮�
+        binding.parameterPassWordCard.setOnClickListener(v -> {
+            Intent intent = new Intent(ParameterActivity.this, PasswordCardActivity.class);
+            startActivity(intent);
+        });
+        //鍖哄煙琛ㄥ彿鍗�
+//        binding.parameterRegion.setOnClickListener(v -> {
+//            Intent intent = new Intent(ParameterActivity.this, RegionActivity.class);
+//            startActivity(intent);
+//        });
+    }
+}
diff --git a/qiheonlinelibrary/src/main/java/com/dayu/qiheonlinelibrary/activity/PassWordActivity.java b/qiheonlinelibrary/src/main/java/com/dayu/qiheonlinelibrary/activity/PassWordActivity.java
new file mode 100644
index 0000000..d5901ae
--- /dev/null
+++ b/qiheonlinelibrary/src/main/java/com/dayu/qiheonlinelibrary/activity/PassWordActivity.java
@@ -0,0 +1,65 @@
+package com.dayu.qiheonlinelibrary.activity;
+
+import android.os.Bundle;
+import android.text.TextUtils;
+import android.view.LayoutInflater;
+
+import com.dayu.baselibrary.dbbean.PassWordBean;
+import com.dayu.baselibrary.utils.TipUtil;
+import com.dayu.baselibrary.utils.WSMD5;
+import com.dayu.qiheonlinelibrary.databinding.ActivityPswQhlBinding;
+
+
+/**
+ * Copyright (C), 2023,
+ * Author: zuo
+ * Date: 2023-11-10 19:52
+ * Description: 淇敼瀵嗙爜鐣岄潰
+ */
+public class PassWordActivity extends BaseActivity {
+
+    ActivityPswQhlBinding pswBinding;
+
+    PassWordBean passWordBean;
+
+    @Override
+    protected void onCreate(Bundle savedInstanceState) {
+        super.onCreate(savedInstanceState);
+        pswBinding = ActivityPswQhlBinding.inflate(LayoutInflater.from(this));
+        setContentView(pswBinding.getRoot());
+        pswBinding.waterOk.setOnClickListener(v -> {
+            try {
+                passWordBean = baseBaseDao.loginPsDao().findFirst();
+
+                if (!TextUtils.isEmpty(pswBinding.pswNew.getText().toString()) && !TextUtils.isEmpty(pswBinding.pswOld.getText().toString()) && !TextUtils.isEmpty(pswBinding.pswNewAgin.getText().toString())) {
+                    if  ((passWordBean != null
+                            && (passWordBean.getPassWord().equalsIgnoreCase(WSMD5.getMD5Str(pswBinding.pswOld.getText().toString()))))
+                            || (WSMD5.getMD5Str(pswBinding.pswOld.getText().toString()).equals("e10adc3949ba59abbe56e057f20f883e") && passWordBean == null)) {
+                        if (passWordBean == null) {
+                            passWordBean = new PassWordBean();
+                        }
+                        if (pswBinding.pswNew.getText().toString().equals(pswBinding.pswNewAgin.getText().toString())) {
+                            passWordBean.setPassWord(pswBinding.pswNewAgin.getText().toString());
+                            baseBaseDao.loginPsDao().insert(passWordBean);
+                            TipUtil.show(PassWordActivity.this, "瀵嗙爜淇敼瀹屾垚", () -> {
+                                PassWordActivity.this.finish();
+                            });
+
+                        } else {
+                            TipUtil.show(PassWordActivity.this, "涓ゆ杈撳叆鐨勫瘑鐮佷笉涓�鑷�");
+                        }
+                    } else {
+                        TipUtil.show(PassWordActivity.this, "鏃у瘑鐮佽緭鍏ラ敊璇�");
+                    }
+                } else {
+                    TipUtil.show(PassWordActivity.this, "璇疯緭瀹屽唴瀹�");
+                }
+
+
+            } catch (Exception e) {
+                e.printStackTrace();
+            }
+        });
+    }
+
+}
diff --git a/qiheonlinelibrary/src/main/java/com/dayu/qiheonlinelibrary/activity/PasswordCardActivity.java b/qiheonlinelibrary/src/main/java/com/dayu/qiheonlinelibrary/activity/PasswordCardActivity.java
new file mode 100644
index 0000000..2b02863
--- /dev/null
+++ b/qiheonlinelibrary/src/main/java/com/dayu/qiheonlinelibrary/activity/PasswordCardActivity.java
@@ -0,0 +1,94 @@
+package com.dayu.qiheonlinelibrary.activity;
+
+import android.os.Bundle;
+import android.text.Editable;
+import android.text.TextUtils;
+import android.text.TextWatcher;
+import android.view.LayoutInflater;
+import android.view.View;
+
+import com.dayu.baselibrary.utils.TipUtil;
+import com.dayu.qiheonlinelibrary.databinding.ActivityPasswordCardQhlBinding;
+import com.dayu.qiheonlinelibrary.dbBean.PassWordCardBean;
+
+
+/**
+ * author: zuo
+ * Date: 2024-03-01
+ * Time: 16:21
+ * 澶囨敞锛氬瘑鐮佸崱璁剧疆鐣岄潰
+ */
+public class PasswordCardActivity extends BaseActivity {
+
+    ActivityPasswordCardQhlBinding binding;
+
+    PassWordCardBean cardBean;
+
+    @Override
+    protected void onCreate(Bundle savedInstanceState) {
+        super.onCreate(savedInstanceState);
+        binding = ActivityPasswordCardQhlBinding.inflate(LayoutInflater.from(this));
+        setContentView(binding.getRoot());
+        initView();
+        initData();
+    }
+
+
+    private void initData() {
+        PassWordCardBean powerBean = baseDao.passWordCardDao().findFirst();
+        if (powerBean != null) {
+            this.cardBean = powerBean;
+            binding.villageOldNumber.setText(powerBean.getPassWord());
+        } else {
+            cardBean = new PassWordCardBean();
+            binding.villageOldNumber.setText("褰撳墠杩樻湭璁剧疆");
+        }
+    }
+
+    private void initView() {
+        binding.villageOk.setOnClickListener(new View.OnClickListener() {
+            @Override
+            public void onClick(View v) {
+                String data = binding.villageNewNum.getText().toString();
+                if (!TextUtils.isEmpty(data)) {
+                    if (data.length() == 12) {
+                        cardBean.setPassWord(data);
+                        baseDao.passWordCardDao().insert(cardBean);
+                        TipUtil.show(PasswordCardActivity.this, "淇濆瓨鎴愬姛");
+                        initData();
+                    } else {
+                        TipUtil.show("璇疯緭鍏ユ纭殑12浣嶅瓧绗︾殑16杩涘埗鍗″瘑鐮�");
+                    }
+
+                } else {
+                    TipUtil.show("璇疯緭鍏ヨ璁剧疆鐨勫崱瀵嗙爜");
+                }
+            }
+        });
+        // 璁剧疆杈撳叆杩囨护鍣�
+        binding.villageNewNum.addTextChangedListener(new TextWatcher() {
+            @Override
+            public void beforeTextChanged(CharSequence s, int start, int count, int after) {
+
+            }
+
+            @Override
+            public void onTextChanged(CharSequence s, int start, int before, int count) {
+            }
+
+            @Override
+            public void afterTextChanged(Editable s) {
+                if (!isValidInput(s.toString())) {
+                    // 濡傛灉杈撳叆鐨勫瓧绗︿笉绗﹀悎瑕佹眰锛屽垯灏� EditText 鐨勫唴瀹硅缃负鏈�鍚庝竴娆″悎娉曠殑杈撳叆
+                    binding.villageNewNum.setText(s.subSequence(0, s.length() - 1).toString().toUpperCase());
+                    binding.villageNewNum.setSelection(binding.villageNewNum.getText().length()); // 灏嗗厜鏍囩Щ鍔ㄥ埌鏈熬
+                }
+            }
+        });
+    }
+
+    // 妫�鏌ヨ緭鍏ョ殑瀛楃鏄惁绗﹀悎瑕佹眰
+    private boolean isValidInput(String input) {
+        return input.matches("[0-9a-fA-F]*"); // 鍖呭惈 0-9 鍜� a-f 鐨勫瓧绗�
+    }
+}
\ No newline at end of file
diff --git a/qiheonlinelibrary/src/main/java/com/dayu/qiheonlinelibrary/activity/PowerActivity.java b/qiheonlinelibrary/src/main/java/com/dayu/qiheonlinelibrary/activity/PowerActivity.java
new file mode 100644
index 0000000..2dbb4a7
--- /dev/null
+++ b/qiheonlinelibrary/src/main/java/com/dayu/qiheonlinelibrary/activity/PowerActivity.java
@@ -0,0 +1,59 @@
+package com.dayu.qiheonlinelibrary.activity;
+
+import android.os.Bundle;
+import android.text.TextUtils;
+import android.view.LayoutInflater;
+import android.view.View;
+
+import com.dayu.baselibrary.utils.TipUtil;
+import com.dayu.qiheonlinelibrary.databinding.ActivityPowerQhlBinding;
+import com.dayu.qiheonlinelibrary.dbBean.PowerBean;
+
+
+/**
+ * Copyright (C), 2023,
+ * Author: zuo
+ * Date: 2023-11-08 21:19
+ * Description: 鍔熺巼璁剧疆
+ */
+public class PowerActivity extends BaseActivity {
+    ActivityPowerQhlBinding powerBinding;
+    PowerBean powerBean = new PowerBean();
+
+    @Override
+    protected void onCreate(Bundle savedInstanceState) {
+        super.onCreate(savedInstanceState);
+        powerBinding = ActivityPowerQhlBinding.inflate(LayoutInflater.from(this));
+        setContentView(powerBinding.getRoot());
+        initData();
+        initView();
+    }
+
+    private void initData() {
+        PowerBean powerBean = baseDao.powerDao().findFirst();
+        if (powerBean != null) {
+            this.powerBean = powerBean;
+            powerBinding.villageOldNumber.setText(powerBean.getPower());
+        }
+    }
+
+    private void initView() {
+        powerBinding.villageOk.setOnClickListener(new View.OnClickListener() {
+            @Override
+            public void onClick(View v) {
+                String data = powerBinding.villageNewNum.getText().toString();
+                if (!TextUtils.isEmpty(data)) {
+                    powerBean.setPower(data);
+                    baseDao.powerDao().insert(powerBean);
+                    TipUtil.show("淇濆瓨鎴愬姛");
+//                    PowerActivity.this.finish();
+                    initData();
+                } else {
+                    TipUtil.show("璇疯緭鍏ユ按娉靛姛鐜�");
+                }
+            }
+        });
+    }
+
+
+}
diff --git a/qiheonlinelibrary/src/main/java/com/dayu/qiheonlinelibrary/activity/ReadCardAcitivy.java b/qiheonlinelibrary/src/main/java/com/dayu/qiheonlinelibrary/activity/ReadCardAcitivy.java
new file mode 100644
index 0000000..1bc1a04
--- /dev/null
+++ b/qiheonlinelibrary/src/main/java/com/dayu/qiheonlinelibrary/activity/ReadCardAcitivy.java
@@ -0,0 +1,289 @@
+package com.dayu.qiheonlinelibrary.activity;
+
+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.qiheonlinelibrary.card.BlackCard;
+import com.dayu.qiheonlinelibrary.card.ConfigurationPowerCard;
+import com.dayu.qiheonlinelibrary.card.DomainCard;
+import com.dayu.qiheonlinelibrary.card.ElectricPriceCard;
+import com.dayu.qiheonlinelibrary.card.ManageCard;
+import com.dayu.qiheonlinelibrary.card.ManagerToUserCard;
+import com.dayu.qiheonlinelibrary.card.RegionCard;
+import com.dayu.qiheonlinelibrary.card.UserCard;
+import com.dayu.qiheonlinelibrary.databinding.ActivityRedCardQhlBinding;
+import com.dayu.qiheonlinelibrary.dbBean.AdminDataBean;
+import com.dayu.qiheonlinelibrary.dbBean.UserCardBean;
+import com.dayu.qiheonlinelibrary.tools.NFCWriteHelper;
+import com.dayu.qiheonlinelibrary.tools.NfcReadHelper;
+import com.dayu.qiheonlinelibrary.utils.CardCommon;
+import com.dayu.qiheonlinelibrary.view.ProgressDialog;
+
+
+import java.util.Calendar;
+import java.util.List;
+
+/**
+ * Copyright (C), 2023,
+ * Author: zuo
+ * Date: 2023-11-10 19:52
+ * Description: 璇诲崱鐣岄潰
+ */
+public class ReadCardAcitivy extends BaseNfcActivity {
+
+    volatile UserCard userCard;
+    ActivityRedCardQhlBinding redCardBinding;
+
+
+    Intent intent;
+    ConfirmDialog confirmDialog;
+    AdminDataBean adminData;
+    String cardNumber;
+    String userCardStr;
+    @Override
+    protected void onCreate(Bundle savedInstanceState) {
+        super.onCreate(savedInstanceState);
+        redCardBinding = ActivityRedCardQhlBinding.inflate(LayoutInflater.from(this));
+        setContentView(redCardBinding.getRoot());
+    }
+
+
+    private void setUserData(String userName, String statu, String cardNumber) {
+        viweGone(true);
+        redCardBinding.redName.setText("鐢ㄦ埛濮撳悕锛�" + userName);
+        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);
+                redCardBinding.redRechargeDate.setText("鏈崱鏈�鍚庤喘姘存棩鏈燂細" + year + "骞�" + month + "鏈�" + day + "鏃�");
+            } else {
+                redCardBinding.redRechargeDate.setText("鏈崱鏈�鍚庤喘姘存棩鏈燂細鏃�");
+            }
+            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) {
+        this.intent = intent;
+        ProgressDialog.show(this);
+        if (NfcAdapter.ACTION_TAG_DISCOVERED.equals(intent.getAction())) {
+            readAllData(intent);
+        }
+        super.onNewIntent(intent);
+    }
+
+    /**
+     * 璇诲彇鍏ㄩ儴鏁版嵁
+     */
+
+    public void readAllData(Intent intent) {
+
+
+        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 = 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 {
+                            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();
+
+    }
+
+
+    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 stopAnim() {
+        ProgressDialog.dismiss();
+        // or avi.smoothToHide();
+    }
+
+
+}
diff --git a/qiheonlinelibrary/src/main/java/com/dayu/qiheonlinelibrary/activity/RechargeActivity.java b/qiheonlinelibrary/src/main/java/com/dayu/qiheonlinelibrary/activity/RechargeActivity.java
new file mode 100644
index 0000000..b95f18c
--- /dev/null
+++ b/qiheonlinelibrary/src/main/java/com/dayu/qiheonlinelibrary/activity/RechargeActivity.java
@@ -0,0 +1,267 @@
+package com.dayu.qiheonlinelibrary.activity;
+
+import android.annotation.SuppressLint;
+import android.content.Intent;
+import android.os.Bundle;
+import android.text.Editable;
+import android.text.TextUtils;
+import android.text.TextWatcher;
+import android.view.LayoutInflater;
+import android.view.View;
+import android.widget.EditText;
+
+import com.dayu.baselibrary.tools.HexUtil;
+import com.dayu.baselibrary.utils.MornyUtil;
+import com.dayu.baselibrary.utils.TipUtil;
+
+
+import com.dayu.qiheonlinelibrary.R;
+import com.dayu.qiheonlinelibrary.card.UserCard;
+import com.dayu.qiheonlinelibrary.databinding.ActivityRechargeQhlBinding;
+import com.dayu.qiheonlinelibrary.dbBean.AdminDataBean;
+import com.dayu.qiheonlinelibrary.dbBean.ElectricPriceBean;
+import com.dayu.qiheonlinelibrary.dbBean.UserCardBean;
+import com.dayu.qiheonlinelibrary.tools.NfcReadHelper;
+import com.dayu.qiheonlinelibrary.utils.CardCommon;
+import com.tencent.bugly.crashreport.CrashReport;
+
+import java.util.Calendar;
+import java.util.List;
+
+
+/**
+ * Copyright (C), 2023,
+ * Author: zuo
+ * Date: 2023-11-5 09:52
+ * Description: 鍏呭�肩晫闈�
+ */
+public class RechargeActivity extends BaseNfcActivity {
+
+    Intent intent;
+
+    ActivityRechargeQhlBinding binding;
+    public static RechargeActivity rechargeActivity;
+
+    AdminDataBean adminData;
+    String userName;
+    String cardNumber = null;
+    UserCardBean userCardBean;
+    int waterPrice;
+    String rechageWater;//鍏呭�肩殑姘撮噺
+    ElectricPriceBean priceBean;
+
+    @Override
+    protected void onCreate(Bundle savedInstanceState) {
+        super.onCreate(savedInstanceState);
+        try {
+            binding = ActivityRechargeQhlBinding.inflate(LayoutInflater.from(this));
+            setContentView(binding.getRoot());
+            setPricePoint(binding.rechargeWater);
+            rechargeActivity = this;
+            waterPrice = baseDao.adminDao().findFirst().getWaterPrice();
+            initView();
+        } catch (Exception e) {
+            e.printStackTrace();
+            CrashReport.postCatchedException(e);
+        }
+    }
+
+    public void onNewIntent(Intent intent) {
+        this.intent = intent;
+        try {
+            readAllData();
+        } catch (Exception e) {
+            e.printStackTrace();
+            CrashReport.postCatchedException(e);
+        }
+        super.onNewIntent(intent);
+    }
+
+
+    private void readAllData() {
+        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();
+
+        if (!data.isEmpty()) {
+            if (!TextUtils.isEmpty(cardNumber)) {
+                setUserData(cardType, cardNumber, data);
+                if(priceBean!=null){
+                    binding.redRechargeElectric.setText("鐢甸噺鍗曚环锛�"+priceBean.getPrice()+"鍏�/搴�");
+                }
+            } else {
+                TipUtil.show(this, "璇诲彇鍗$墖澶辫触锛岃閲嶆柊璐村崱");
+            }
+        } else {
+            TipUtil.show(this, "鍗$墖璇嗗埆閿欒,璇烽噸璇曪紒");
+        }
+    }
+
+
+    @SuppressLint("ResourceAsColor")
+    private void setUserData(String cardType, String cardNumber, List<byte[]> data) {
+
+
+        String state = "";
+        if (cardType.equalsIgnoreCase(CardCommon.USER_CARD_TYPE_1)) {
+            state = "缁堢鍐欏崱";
+            binding.rechargeLL.setVisibility(View.VISIBLE);
+            binding.rechargeRegistBtn.setVisibility(View.VISIBLE);
+            binding.redStatu.setTextColor(R.color.black);
+        } else if (cardType.equalsIgnoreCase(CardCommon.USER_CARD_TYPE_2)) {
+            state = "鏈埛鍗″叧娉�,褰撳墠涓嶅彲鍏呭��";
+            binding.rechargeLL.setVisibility(View.GONE);
+            binding.rechargeRegistBtn.setVisibility(View.GONE);
+            binding.redStatu.setTextColor(com.dayu.baselibrary.R.color.red);
+        } else if (cardType.equalsIgnoreCase(CardCommon.USER_CARD_TYPE_3)) {
+            state = "鍙犲姞鍏呭��";
+            binding.rechargeLL.setVisibility(View.GONE);
+            binding.rechargeRegistBtn.setVisibility(View.GONE);
+        } else {
+            TipUtil.show(this, "闈炵敤鎴峰崱锛屼笉鑳藉厖鍊�");
+            return;
+        }
+
+
+        userCard = UserCard.getBean(data);
+        List<UserCardBean> userCardBeans = baseDao.userCardDao().findUserName(cardNumber);
+        AdminDataBean adminDataBean = baseDao.adminDao().findFirst();
+
+
+        if (Integer.valueOf(adminDataBean.getAddressCode()) == userCard.getArerNumber()) {
+            if (!userCardBeans.isEmpty()) {
+                userCardBean = userCardBeans.get(0);
+                this.userName = userCardBean.getUserName();
+            } else {
+                userCardBean = new UserCardBean();
+                userCardBean.setCardNumber(cardNumber);
+                userCardBean.setUserName("鏈煡鐢ㄦ埛");
+                userCardBean.setPhone("鏈煡");
+                userCardBean.setUserID("鏈煡");
+                userCardBean.setAddressCode(String.valueOf(userCard.getArerNumber()));
+                userCardBean.setSerial(String.valueOf(userCard.getArerNumber()));
+                this.userName = "鏈煡鐢ㄦ埛";
+            }
+            binding.rechargeReadLL.setVisibility(View.GONE);
+            binding.rechargeTextLL.setVisibility(View.VISIBLE);
+            binding.userName.setText(userName);
+            binding.redStatu.setText(state);
+            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);
+                    binding.redRechargeDate.setText("鏈崱鏈�鍚庤喘姘存棩鏈燂細" + year + "骞�" + month + "鏈�" + day + "鏃�");
+                } else {
+                    binding.redRechargeDate.setText("鏈崱鏈�鍚庤喘姘存棩鏈燂細鏃�");
+                }
+                binding.redInitCode.setText(cardNumber);
+//                binding.redRechargeNumber.setText("鏈崱鍏呭�兼鏁帮細" + userCard.getRechargeTimes() + " 娆�");
+//                binding.redTotalWater.setText("鎬荤敤姘撮噺锛�" + MornyUtil.changeF2Y(userCard.getTotalWater()) + " 鍚�");
+//                binding.redTotalPower.setText("鎬荤敤鐢甸噺锛�" + MornyUtil.changeF2Y(userCard.getTotalElectric()) + " 搴�");
+                binding.redRemainderBlance.setText(MornyUtil.changeF2Y(userCard.getBalance()) + " 鍏�");
+                binding.redRemainderWater.setText("鍓╀綑姘撮噺锛�" + MornyUtil.changeF2Y(userCard.getSurplusWater()) + " 鍚�");
+//                binding.redWaterPrice.setText("姣忕珛鏂圭背姘翠环鏍硷細" + MornyUtil.changeF2Y(adminData.getWaterPrice()) + " 鍏�");
+            }
+
+        } else {
+            TipUtil.show(this, "闈炴湰鍖哄煙鍗n涓嶈兘鍏呭�硷紒锛侊紒");
+        }
+
+
+    }
+
+
+    private void initView() {
+        try {
+            adminData = baseDao.adminDao().findFirst();
+            priceBean = baseDao.electricPriceDao().findFirst();
+        } catch (Exception e) {
+            e.printStackTrace();
+            CrashReport.postCatchedException(e);
+        }
+        binding.rechargeRegistBtn.setOnClickListener(v -> {
+            String morny = binding.rechargeWater.getText().toString();
+            if (!TextUtils.isEmpty(morny)) {
+                Intent intent = new Intent(RechargeActivity.this, NFCWreatActivity.class);
+                //褰撳墠閲戦鍗曚綅涓哄厓
+                intent.putExtra("morny", morny);
+                intent.putExtra("userName", userName);
+                intent.putExtra("cardNumber", cardNumber);
+                intent.putExtra("userCard", userCard);
+                intent.putExtra("userCardBean", userCardBean);
+//                intent.putExtra("rechageWater", rechageWater);
+                startActivity(intent);
+            } else {
+                TipUtil.show(RechargeActivity.this, "璇疯緭鍏ュ厖鍊奸噾棰濓紙鍏冿級");
+            }
+        });
+    }
+
+
+    //鏍¢獙閲戦
+    public void setPricePoint(final EditText editText) {
+        editText.addTextChangedListener(new TextWatcher() {
+            @Override
+            public void onTextChanged(CharSequence s, int start, int before,
+                                      int count) {
+                if (s.toString().contains(".")) {
+                    if (s.length() - 1 - s.toString().indexOf(".") > 2) {
+                        s = s.toString().subSequence(0,
+                                s.toString().indexOf(".") + 3);
+                        editText.setText(s);
+                        editText.setSelection(s.length());
+                    }
+                }
+                if (s.toString().trim().substring(0).equals(".")) {
+                    s = "0" + s;
+                    editText.setText(s);
+                    editText.setSelection(2);
+                }
+
+                if (s.toString().startsWith("0")
+                        && s.toString().trim().length() > 1) {
+                    if (!s.toString().substring(1, 2).equals(".")) {
+                        editText.setText(s.subSequence(0, 1));
+                        editText.setSelection(1);
+                    }
+                }
+                String morny = editText.getText().toString();
+                if (!TextUtils.isEmpty(morny)) {
+                    rechageWater = MornyUtil.intDiv(MornyUtil.changeY2F(editText.getText().toString()), waterPrice);
+//                    binding.redRechargeWater.setText("鍏呭�兼按閲忥細" + rechageWater + " 绔嬫柟绫�(鍚�)");
+                }
+
+
+            }
+
+            @Override
+            public void beforeTextChanged(CharSequence s, int start, int count,
+                                          int after) {
+
+            }
+
+            @Override
+            public void afterTextChanged(Editable s) {
+                // TODO Auto-generated method stub
+
+            }
+
+        });
+
+    }
+
+
+    protected void onDestroy() {
+        super.onDestroy();
+        rechargeActivity = null;
+    }
+}
diff --git a/qiheonlinelibrary/src/main/java/com/dayu/qiheonlinelibrary/activity/RechargeDetailActivity.java b/qiheonlinelibrary/src/main/java/com/dayu/qiheonlinelibrary/activity/RechargeDetailActivity.java
new file mode 100644
index 0000000..9db5b53
--- /dev/null
+++ b/qiheonlinelibrary/src/main/java/com/dayu/qiheonlinelibrary/activity/RechargeDetailActivity.java
@@ -0,0 +1,90 @@
+package com.dayu.qiheonlinelibrary.activity;
+
+import android.os.Bundle;
+import android.text.TextUtils;
+import android.view.LayoutInflater;
+import android.view.View;
+
+import com.dayu.baselibrary.utils.MornyUtil;
+import com.dayu.qiheonlinelibrary.card.UserCard;
+import com.dayu.qiheonlinelibrary.databinding.ActivityRechargeDetailQhlBinding;
+
+
+import java.util.Calendar;
+
+/**
+ * Created by Android Studio.
+ * author: zuo
+ * Date: 2023-11-21
+ * Time: 15:01
+ * 澶囨敞锛氬啓鍗″悗鐨勮鎯呴〉
+ */
+public class RechargeDetailActivity extends BaseActivity {
+
+    ActivityRechargeDetailQhlBinding binding;
+    UserCard userCard;
+    String statu;
+    String userName;
+    String morny;
+    String rechageWater;
+    String cardNumber;
+
+    @Override
+    protected void onCreate(Bundle savedInstanceState) {
+        super.onCreate(savedInstanceState);
+
+        binding = ActivityRechargeDetailQhlBinding.inflate(LayoutInflater.from(this));
+        setContentView(binding.getRoot());
+
+        try {
+            userCard = (UserCard) getIntent().getSerializableExtra("userCard");
+            statu = getIntent().getStringExtra("statu");
+            userName = getIntent().getStringExtra("userName");
+            if (getIntent().hasExtra("morny")) {
+                morny = getIntent().getStringExtra("morny");
+                rechageWater = getIntent().getStringExtra("rechageWater");
+            }
+            if (getIntent().hasExtra("cardNumber")) {
+                cardNumber = getIntent().getStringExtra("cardNumber");
+            }
+            setUserData(userName, statu);
+        } catch (Exception e) {
+            throw new RuntimeException(e);
+        }
+
+    }
+
+    private void setUserData(String userName, String statu) {
+        int balance = userCard.getBalance();
+        if (!TextUtils.isEmpty(morny)) {
+            binding.tip.setText("鍏呭�兼垚鍔燂紒");
+            balance = userCard.getBalance();
+            binding.redRemainderMorny.setText("鍏呭�奸噾棰濓細" + morny + " 鍏�");
+            binding.redRechargeWater.setText("鍓╀綑閲戦锛�" + MornyUtil.changeF2Y(balance) + " 鍏�");
+        } else {
+            binding.tip.setText("寮�鍗℃垚鍔燂紒");
+            balance = userCard.getBalance();
+            binding.redRemainderMorny.setVisibility(View.GONE);
+            binding.redRechargeWater.setVisibility(View.GONE);
+        }
+        binding.redName.setText("鐢ㄦ埛濮撳悕锛�" + userName);
+//        binding.redRemainderBlance.setText("鍓╀綑閲戦锛�" + MornyUtil.changeF2Y(balance) + " 鍏�");
+        binding.redSurplusWater.setText("鍓╀綑姘撮噺锛�" + MornyUtil.changeF2Y(userCard.getSurplusWater()) + " 鍚�");
+        binding.redStatu.setText("鍗$姸鎬侊細" + statu);
+        if (userCard != null) {
+            binding.redInitCode.setText("褰撳墠鍗″彿锛�" + cardNumber);
+            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);
+
+                binding.redRechargeDate.setText("鏈崱鏈�鍚庤喘姘存棩鏈燂細" + year + month + day);
+            } else {
+                binding.redRechargeDate.setText("鏈崱鏈�鍚庤喘姘存棩鏈燂細鏃�");
+            }
+
+//            binding.redRechargeNumber.setText("鏈崱鍏呭�兼鏁帮細" + userCard.getRechargeTimes() + "");
+        }
+    }
+}
diff --git a/qiheonlinelibrary/src/main/java/com/dayu/qiheonlinelibrary/activity/RechargeListActivity.java b/qiheonlinelibrary/src/main/java/com/dayu/qiheonlinelibrary/activity/RechargeListActivity.java
new file mode 100644
index 0000000..f1b3245
--- /dev/null
+++ b/qiheonlinelibrary/src/main/java/com/dayu/qiheonlinelibrary/activity/RechargeListActivity.java
@@ -0,0 +1,187 @@
+package com.dayu.qiheonlinelibrary.activity;
+
+
+import static com.dayu.baselibrary.view.TitleBar.ClickType_RIGHT_TEXT;
+
+import android.os.Bundle;
+import android.view.LayoutInflater;
+import android.view.View;
+
+
+import androidx.recyclerview.widget.LinearLayoutManager;
+
+import com.dayu.baselibrary.utils.ArithUtil;
+import com.dayu.baselibrary.utils.TipUtil;
+import com.dayu.baselibrary.view.datepicker.CustomDatePicker;
+import com.dayu.baselibrary.view.datepicker.DateFormatUtils;
+
+import com.dayu.qiheonlinelibrary.adapter.RechargeAdapter;
+import com.dayu.qiheonlinelibrary.databinding.ActivityRechargeListQhlBinding;
+import com.dayu.qiheonlinelibrary.dbBean.RechargeBean;
+import com.scwang.smart.refresh.footer.ClassicsFooter;
+import com.scwang.smart.refresh.layout.api.RefreshLayout;
+import com.scwang.smart.refresh.layout.listener.OnLoadMoreListener;
+
+import java.util.ArrayList;
+import java.util.List;
+
+import io.reactivex.rxjava3.android.schedulers.AndroidSchedulers;
+import io.reactivex.rxjava3.core.Observable;
+import io.reactivex.rxjava3.schedulers.Schedulers;
+
+/**
+ * Copyright (C), 2023,
+ * Author: zuo
+ * Date: 2023-11-5 09:52
+ * Description: 鍏呭�艰褰�
+ */
+public class RechargeListActivity extends BaseActivity {
+
+    ActivityRechargeListQhlBinding rechargeListBinding;
+    RechargeAdapter adapter;
+    List<RechargeBean> rechargeList = new ArrayList<>();
+
+    private CustomDatePicker beginDatePicker;
+    private CustomDatePicker endDatePicker;
+    long beginTime;
+    long endTime;
+
+    int page = 0;
+
+    //姣忛〉鏁版嵁鏉℃暟
+    int limit = 30;
+    RefreshLayout myRefreshLayout;
+
+    @Override
+    protected void onCreate(Bundle savedInstanceState) {
+        super.onCreate(savedInstanceState);
+        rechargeListBinding = ActivityRechargeListQhlBinding.inflate(LayoutInflater.from(this));
+        setContentView(rechargeListBinding.getRoot());
+        setRightButton();
+        initDatePicker();
+        initList();
+        getList();
+    }
+
+    private void initList() {
+        myRefreshLayout = (RefreshLayout) rechargeListBinding.refreshLayout;
+        myRefreshLayout.setEnableRefresh(false);
+        myRefreshLayout.setRefreshFooter(new ClassicsFooter(this));
+        myRefreshLayout.setOnLoadMoreListener(new OnLoadMoreListener() {
+            @Override
+            public void onLoadMore(RefreshLayout refreshlayout) {
+                page = page + 1;
+                getList();
+            }
+        });
+        adapter = new RechargeAdapter(this, rechargeList);
+        LinearLayoutManager layoutManager = new LinearLayoutManager(this);
+        rechargeListBinding.recyclerView.setLayoutManager(layoutManager);
+        rechargeListBinding.recyclerView.setAdapter(adapter);
+    }
+
+    private void getTotal() {
+        if (rechargeList != null) {
+            double total = 0;
+            for (int i = 0; i < rechargeList.size(); i++) {
+                double b = Double.parseDouble(rechargeList.get(i).getMorny());
+                total = ArithUtil.add(total, b);
+            }
+            rechargeListBinding.rechargeTotal.setText("宸插姞杞芥暟鎹疮璁″厖鍊硷細" + String.valueOf(total) + "鍏�");
+        }
+
+    }
+
+    private void getList() {
+        // 鍒涘缓涓�涓� Observable
+        Observable<List<RechargeBean>> observable = Observable.create(emitter -> {
+            // 鍦ㄨ繖閲屾墽琛屽紓姝ユ搷浣�
+            List<RechargeBean> beanList;
+            if (beginTime == 0 && endTime == 0) {
+                beanList = asynchBaseDao.rechargeDao().findAll(page * limit, limit);
+            } else {
+                beanList = asynchBaseDao.rechargeDao().ansyFindByTime(beginTime, endTime);
+            }
+            // 灏嗙粨鏋滃彂閫佺粰瑙傚療鑰�
+            emitter.onNext(beanList);
+            emitter.onComplete();
+        });
+        // 璁㈤槄瑙傚療鑰�
+        observable.subscribeOn(Schedulers.io()) // 鎸囧畾鍦� IO 绾跨▼鎵ц
+                .observeOn(AndroidSchedulers.mainThread()) // 鎸囧畾鍦ㄥ崟涓�绾跨▼瑙傚療缁撴灉
+                .subscribe(
+                        result -> {
+                            // 鍦ㄨ繖閲屽鐞嗙粨鏋滐紝杩欓噷鏄湪涓荤嚎绋嬩腑
+//                            System.out.println("Result: " + result);
+                            if (result.size() < limit) {
+                                myRefreshLayout.finishLoadMoreWithNoMoreData();
+                            }
+                            if (result != null && result.size() > 0) {
+                                rechargeList.addAll(result);
+                            }
+                            adapter.notifyDataSetChanged();
+                            getTotal();
+                        },
+                        error -> {
+                            // 澶勭悊閿欒
+                            System.err.println("Error: " + error.getMessage());
+                        }
+                );
+    }
+
+
+    private void setRightButton() {
+        titleBar.setOnItemclickListner(ClickType_RIGHT_TEXT, new View.OnClickListener() {
+            @Override
+            public void onClick(View v) {
+                beginDatePicker.show(System.currentTimeMillis());
+            }
+        });
+    }
+
+    private void initDatePicker() {
+        long beginTimestamp = DateFormatUtils.str2Long("2009-05-01", false);
+        final long endTimestamp = System.currentTimeMillis();
+
+        // 閫氳繃鏃堕棿鎴冲垵濮嬪寲鏃ユ湡锛屾绉掔骇鍒�
+        beginDatePicker = new CustomDatePicker(this, "閫夋嫨寮�濮嬫椂闂�", new CustomDatePicker.Callback() {
+            @Override
+            public void onTimeSelected(long timestamp) {
+                beginTime = timestamp;
+                endDatePicker.show(timestamp);
+            }
+        }, beginTimestamp, endTimestamp);
+        // 涓嶅厑璁哥偣鍑诲睆骞曟垨鐗╃悊杩斿洖閿叧闂�
+        beginDatePicker.setCancelable(false);
+        // 涓嶆樉绀烘椂鍜屽垎
+        beginDatePicker.setCanShowPreciseTime(false);
+        // 涓嶅厑璁稿惊鐜粴鍔�
+        beginDatePicker.setScrollLoop(false);
+        // 涓嶅厑璁告粴鍔ㄥ姩鐢�
+        beginDatePicker.setCanShowAnim(false);
+
+        endDatePicker = new CustomDatePicker(this, "閫夋嫨缁撴潫鏃堕棿", new CustomDatePicker.Callback() {
+            @Override
+            public void onTimeSelected(long timestamp) {
+                endTime = timestamp;
+                if ((endTime < beginTime) && endTime != beginTime) {
+                    TipUtil.show(RechargeListActivity.this, "缁撴潫鏃堕棿涓嶈兘鏅氫簬寮�濮嬫椂闂�");
+                } else {
+                    endTime = endTime + (1000 * 60 * 60 * 24) - 1;
+                    rechargeList.clear();
+                    getList();
+                }
+            }
+        }, beginTimestamp, endTimestamp);
+        // 涓嶅厑璁哥偣鍑诲睆骞曟垨鐗╃悊杩斿洖閿叧闂�
+        endDatePicker.setCancelable(false);
+        // 涓嶆樉绀烘椂鍜屽垎
+        endDatePicker.setCanShowPreciseTime(false);
+        // 涓嶅厑璁稿惊鐜粴鍔�
+        endDatePicker.setScrollLoop(false);
+        // 涓嶅厑璁告粴鍔ㄥ姩鐢�
+        endDatePicker.setCanShowAnim(false);
+    }
+
+
+}
diff --git a/qiheonlinelibrary/src/main/java/com/dayu/qiheonlinelibrary/activity/RegionActivity.java b/qiheonlinelibrary/src/main/java/com/dayu/qiheonlinelibrary/activity/RegionActivity.java
new file mode 100644
index 0000000..b5ea799
--- /dev/null
+++ b/qiheonlinelibrary/src/main/java/com/dayu/qiheonlinelibrary/activity/RegionActivity.java
@@ -0,0 +1,69 @@
+package com.dayu.qiheonlinelibrary.activity;
+
+import android.os.Bundle;
+import android.text.TextUtils;
+import android.view.LayoutInflater;
+import android.view.View;
+
+import com.dayu.baselibrary.utils.TipUtil;
+import com.dayu.qiheonlinelibrary.databinding.ActivityRegionQhlBinding;
+import com.dayu.qiheonlinelibrary.dbBean.RegionBean;
+
+
+/**
+ * author: zuo
+ * Date: 2024-03-06
+ * Time: 17:28
+ * 澶囨敞锛氬尯鍩熸爣鍙峰崱璁剧疆鐣岄潰
+ */
+public class RegionActivity extends BaseActivity {
+
+
+    ActivityRegionQhlBinding binding;
+
+    @Override
+    protected void onCreate(Bundle savedInstanceState) {
+        super.onCreate(savedInstanceState);
+        binding = ActivityRegionQhlBinding.inflate(LayoutInflater.from(this));
+        setContentView(binding.getRoot());
+        initView();
+        initData();
+    }
+
+    private void initData() {
+        RegionBean regionBean = baseDao.regionDao().findFirst();
+        if (regionBean!=null){
+            binding.controllerOldText.setText(regionBean.getControllerCodel());
+            binding.regionOldText.setText(regionBean.getRegion());
+        }else {
+            binding.controllerOldText.setText("褰撳墠涓洪粯璁ゅ��");
+            binding.regionOldText.setText("褰撳墠涓洪粯璁ゅ��");
+        }
+    }
+
+    private void initView() {
+
+
+        binding.electricOk.setOnClickListener(new View.OnClickListener() {
+            @Override
+            public void onClick(View v) {
+                String region = binding.regionNewET.getText().toString();
+                String controller = binding.controllerNewET.getText().toString();
+                if (TextUtils.isEmpty(region)) {
+                    TipUtil.show("璇疯緭鍏ユ柊鍖哄煙鍦板潃");
+                    return;
+                }
+                if (TextUtils.isEmpty(controller)) {
+                    TipUtil.show("璇疯緭鍏ユ柊鎺у埗鍣ㄧ紪鍙�");
+                    return;
+                }
+                RegionBean regionBean=new RegionBean();
+                regionBean.setRegion(region);
+                regionBean.setControllerCodel(controller);
+                baseDao.regionDao().insert(regionBean);
+                TipUtil.show("淇濆瓨鎴愬姛");
+                initData();
+            }
+        });
+    }
+}
diff --git a/qiheonlinelibrary/src/main/java/com/dayu/qiheonlinelibrary/activity/SysActivity.java b/qiheonlinelibrary/src/main/java/com/dayu/qiheonlinelibrary/activity/SysActivity.java
new file mode 100644
index 0000000..87f98e8
--- /dev/null
+++ b/qiheonlinelibrary/src/main/java/com/dayu/qiheonlinelibrary/activity/SysActivity.java
@@ -0,0 +1,98 @@
+package com.dayu.qiheonlinelibrary.activity;
+
+import android.content.Intent;
+import android.os.Bundle;
+import android.view.LayoutInflater;
+
+import com.dayu.baselibrary.utils.TipUtil;
+import com.dayu.qiheonlinelibrary.card.CleanCard;
+import com.dayu.qiheonlinelibrary.card.ElectricPriceCard;
+import com.dayu.qiheonlinelibrary.card.PassWordCard;
+import com.dayu.qiheonlinelibrary.card.RegionCard;
+import com.dayu.qiheonlinelibrary.databinding.ActivityAdminQhlBinding;
+import com.dayu.qiheonlinelibrary.dbBean.AdminDataBean;
+import com.dayu.qiheonlinelibrary.dbBean.ElectricPriceBean;
+import com.dayu.qiheonlinelibrary.dbBean.PassWordCardBean;
+import com.dayu.qiheonlinelibrary.view.AdminCardDialog;
+
+
+/**
+ * Copyright (C), 2023,
+ * Author: zuo
+ * Date: 2023-11-5 09:52
+ * Description: 绠$悊绯荤粺
+ */
+public class SysActivity extends BaseActivity {
+
+    ActivityAdminQhlBinding adminBinding;
+
+    @Override
+    protected void onCreate(Bundle savedInstanceState) {
+        super.onCreate(savedInstanceState);
+        adminBinding = ActivityAdminQhlBinding.inflate(LayoutInflater.from(this));
+        setContentView(adminBinding.getRoot());
+
+        initView();
+    }
+
+
+    private void initView() {
+
+        //鍒朵綔绠$悊鍗�
+        adminBinding.adminAdmin.setOnClickListener(v -> {
+
+            AdminCardDialog dialog=new AdminCardDialog(this);
+            dialog.show();
+
+        });
+        //鍒朵綔娓呴浂鍗�
+        adminBinding.adminCleanZero.setOnClickListener(v -> {
+            Intent intent = new Intent(SysActivity.this, NFCWreatActivity.class);
+            CleanCard cleanCard = new CleanCard();
+            intent.putExtra("cleanCard", cleanCard);
+            startActivity(intent);
+        });
+        //鍒朵綔瀵嗙爜鍗�
+        adminBinding.adminPassWordCard.setOnClickListener(v -> {
+            PassWordCardBean powerBean = baseDao.passWordCardDao().findFirst();
+            if (powerBean != null) {
+                Intent intent = new Intent(SysActivity.this, NFCWreatActivity.class);
+                PassWordCard passWordCard = new PassWordCard();
+                passWordCard.setPassWord(powerBean.getPassWord());
+                intent.putExtra("passWordCard", passWordCard);
+                startActivity(intent);
+            } else {
+                TipUtil.show(this, "璇峰厛鍦ㄥ弬鏁拌缃唴璁剧疆鍗″瘑鐮�");
+            }
+        });
+
+        //鍒朵綔鍖哄煙琛ㄥ彿鍗�
+        adminBinding.adminRegionCard.setOnClickListener(v -> {
+
+            Intent intent = new Intent(SysActivity.this, NFCWreatActivity.class);
+            RegionCard regionCard = new RegionCard();
+            AdminDataBean adminDataBean = baseDao.adminDao().findFirst();
+            regionCard.setRegion(Integer.valueOf(adminDataBean.getAddressCode()));
+            regionCard.setControllerCodel(Integer.valueOf(adminDataBean.getAddressCode()));
+            intent.putExtra("regionCard", regionCard);
+            startActivity(intent);
+        });
+        //鍒朵綔璁剧疆鐢ㄦ埛鐢甸噺鍗曚环鍗�
+        adminBinding.adminElectricCard.setOnClickListener(v -> {
+            Intent intent = new Intent(SysActivity.this, NFCWreatActivity.class);
+            ElectricPriceBean electricPriceBean = baseDao.electricPriceDao().findFirst();
+            if (electricPriceBean != null) {
+                ElectricPriceCard electricPriceCard = new ElectricPriceCard();
+                electricPriceCard.setElectricPrice(electricPriceBean.getPrice());
+                intent.putExtra("electricPriceCard", electricPriceCard);
+                startActivity(intent);
+            } else {
+                TipUtil.show(this, "璇峰厛鍦ㄥ弬鏁拌缃唴璁剧疆鐢甸噺鍗曚环");
+            }
+
+        });
+
+    }
+
+
+}
diff --git a/qiheonlinelibrary/src/main/java/com/dayu/qiheonlinelibrary/adapter/BaseRecyclerAdapter.java b/qiheonlinelibrary/src/main/java/com/dayu/qiheonlinelibrary/adapter/BaseRecyclerAdapter.java
new file mode 100644
index 0000000..fd159f1
--- /dev/null
+++ b/qiheonlinelibrary/src/main/java/com/dayu/qiheonlinelibrary/adapter/BaseRecyclerAdapter.java
@@ -0,0 +1,65 @@
+package com.dayu.qiheonlinelibrary.adapter;
+
+import android.view.ViewGroup;
+
+import androidx.annotation.NonNull;
+import androidx.recyclerview.widget.RecyclerView;
+
+import com.dayu.baselibrary.databinding.ItemNoMoreBinding;
+
+
+/**
+ * Copyright (C), 2023,
+ * Author: zuo
+ * Date: 2023-04-20 8:48
+ * Description:
+ */
+public class BaseRecyclerAdapter<T extends RecyclerView.ViewHolder> extends RecyclerView.Adapter<T> {
+
+    /**
+     * viewType--鍒嗗埆涓篿tem浠ュ強绌簐iew
+     */
+    public static final int VIEW_TYPE_ITEM = 1;
+    public static final int VIEW_TYPE_EMPTY = 0;
+
+    public int myiewType;
+
+
+    @NonNull
+    @Override
+    public T onCreateViewHolder(@NonNull ViewGroup parent, int viewType) {
+        return null;
+    }
+
+    @Override
+    public void onBindViewHolder(@NonNull T holder, int position) {
+
+    }
+
+    @Override
+    public int getItemCount() {
+        return 0;
+    }
+
+
+
+
+    static class ViewHolderEmpty extends RecyclerView.ViewHolder {
+        ItemNoMoreBinding mBinding;
+        public ItemNoMoreBinding getBinding() {
+            return mBinding;
+        }
+
+        public void setBinding(ItemNoMoreBinding binding) {
+            this.mBinding = binding;
+        }
+
+        public ViewHolderEmpty(ItemNoMoreBinding itemView) {
+            super(itemView.getRoot());
+            this.mBinding = itemView;
+
+        }
+    }
+
+
+}
diff --git a/qiheonlinelibrary/src/main/java/com/dayu/qiheonlinelibrary/adapter/ManagerCardAdapter.java b/qiheonlinelibrary/src/main/java/com/dayu/qiheonlinelibrary/adapter/ManagerCardAdapter.java
new file mode 100644
index 0000000..0f4bb53
--- /dev/null
+++ b/qiheonlinelibrary/src/main/java/com/dayu/qiheonlinelibrary/adapter/ManagerCardAdapter.java
@@ -0,0 +1,98 @@
+package com.dayu.qiheonlinelibrary.adapter;
+
+import android.content.Context;
+import android.view.LayoutInflater;
+import android.view.ViewGroup;
+
+import androidx.annotation.NonNull;
+import androidx.databinding.DataBindingUtil;
+import androidx.recyclerview.widget.RecyclerView;
+
+
+import com.dayu.baselibrary.databinding.ItemNoMoreBinding;
+import com.dayu.baselibrary.utils.DateUtil;
+import com.dayu.qiheonlinelibrary.R;
+import com.dayu.qiheonlinelibrary.activity.ManagerListActivity;
+import com.dayu.qiheonlinelibrary.databinding.QiheLineItemReplacementsBinding;
+import com.dayu.qiheonlinelibrary.dbBean.UserCardBean;
+
+
+import java.util.List;
+
+public class ManagerCardAdapter extends BaseRecyclerAdapter<RecyclerView.ViewHolder> {
+
+    List<UserCardBean> rechargeList;
+    ManagerListActivity mContext;
+
+    public ManagerCardAdapter(ManagerListActivity context, List<UserCardBean> rechargeList) {
+        mContext = context;
+        this.rechargeList = rechargeList;
+    }
+
+
+    @NonNull
+    @Override
+    public RecyclerView.ViewHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) {
+        if (viewType == VIEW_TYPE_EMPTY) {
+            ItemNoMoreBinding emptyView = DataBindingUtil.inflate((LayoutInflater) mContext.getSystemService(Context.LAYOUT_INFLATER_SERVICE), com.dayu.baselibrary.R.layout.item_no_more, parent, false);
+            return new ViewHolderEmpty(emptyView);
+        } else {
+            QiheLineItemReplacementsBinding binding = DataBindingUtil.inflate((LayoutInflater) mContext.getSystemService(Context.LAYOUT_INFLATER_SERVICE), R.layout.qihe_line_item_replacements, parent, false);
+            return new ViewHolder(binding);
+        }
+
+    }
+
+    @Override
+    public void onBindViewHolder(@NonNull RecyclerView.ViewHolder holder, int position) {
+        if (holder instanceof ViewHolder) {
+            if (rechargeList.size() > 0) {
+                ((ViewHolder) holder).getBinding().userName.setText("濮撳悕:" + rechargeList.get(position).getUserName());
+                ((ViewHolder) holder).getBinding().userNo.setText("韬唤璇佸彿:" + rechargeList.get(position).getUserID());
+                ((ViewHolder) holder).getBinding().cardNumber.setText("鍗″彿:" + rechargeList.get(position).getCardNumber());
+                ((ViewHolder) holder).getBinding().water.setText("鐢佃瘽:" + rechargeList.get(position).getPhone());
+                ((ViewHolder) holder).getBinding().date.setText("鏃ユ湡:" + DateUtil.dateToStamp(rechargeList.get(position).getDate(), DateUtil.type1));
+                ((ViewHolder) holder).getBinding().item.setTag(position);
+                ((ViewHolder) holder).getBinding().setActivity(mContext);
+            }
+        }
+    }
+
+    @Override
+    public int getItemCount() {
+        //鍚屾椂杩欓噷涔熼渶瑕佹坊鍔犲垽鏂紝濡傛灉mData.size()涓�0鐨勮瘽锛屽彧寮曞叆涓�涓竷灞�锛屽氨鏄痚mptyView
+        // 閭d箞锛岃繖涓猺ecyclerView鐨刬temCount涓�1
+        if (rechargeList.size() == 0) {
+            return 1;
+        }
+        return rechargeList.size();
+    }
+
+    @Override
+    public int getItemViewType(int position) {
+        if (rechargeList.size() == 0) {
+            return VIEW_TYPE_EMPTY;
+        } else {
+            return VIEW_TYPE_ITEM;
+        }
+    }
+
+
+    static class ViewHolder extends RecyclerView.ViewHolder {
+        QiheLineItemReplacementsBinding mBinding;
+
+        public QiheLineItemReplacementsBinding getBinding() {
+            return mBinding;
+        }
+
+        public void setBinding(QiheLineItemReplacementsBinding binding) {
+            this.mBinding = binding;
+        }
+
+        public ViewHolder(QiheLineItemReplacementsBinding itemView) {
+            super(itemView.getRoot());
+            this.mBinding = itemView;
+
+        }
+    }
+}
\ No newline at end of file
diff --git a/qiheonlinelibrary/src/main/java/com/dayu/qiheonlinelibrary/adapter/NewCardAdapter.java b/qiheonlinelibrary/src/main/java/com/dayu/qiheonlinelibrary/adapter/NewCardAdapter.java
new file mode 100644
index 0000000..55a79d2
--- /dev/null
+++ b/qiheonlinelibrary/src/main/java/com/dayu/qiheonlinelibrary/adapter/NewCardAdapter.java
@@ -0,0 +1,100 @@
+package com.dayu.qiheonlinelibrary.adapter;
+
+import android.content.Context;
+import android.view.LayoutInflater;
+import android.view.ViewGroup;
+
+import androidx.annotation.NonNull;
+import androidx.databinding.DataBindingUtil;
+import androidx.recyclerview.widget.RecyclerView;
+
+
+import com.dayu.baselibrary.databinding.ItemNoMoreBinding;
+import com.dayu.baselibrary.utils.DateUtil;
+import com.dayu.qiheonlinelibrary.R;
+import com.dayu.qiheonlinelibrary.databinding.QiheLineItemNewCardBinding;
+import com.dayu.qiheonlinelibrary.dbBean.UserCardBean;
+
+import java.util.List;
+
+/**
+ * Created by zuoxiao on 2018/12/24.
+ */
+
+public class NewCardAdapter extends BaseRecyclerAdapter<RecyclerView.ViewHolder> {
+
+    List<UserCardBean> rechargeList;
+    Context mContext;
+
+    public NewCardAdapter(Context context, List<UserCardBean> rechargeList) {
+        mContext = context;
+        this.rechargeList = rechargeList;
+    }
+
+
+    @NonNull
+    @Override
+    public RecyclerView.ViewHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) {
+        if (viewType == VIEW_TYPE_EMPTY) {
+            ItemNoMoreBinding emptyView = DataBindingUtil.inflate((LayoutInflater) mContext.getSystemService(Context.LAYOUT_INFLATER_SERVICE), com.dayu.baselibrary.R.layout.item_no_more, parent, false);
+            return new ViewHolderEmpty(emptyView);
+        } else {
+            QiheLineItemNewCardBinding binding = DataBindingUtil.inflate((LayoutInflater) mContext.getSystemService(Context.LAYOUT_INFLATER_SERVICE), R.layout.qihe_line_item_new_card, parent, false);
+            return new ViewHolder(binding);
+        }
+
+    }
+
+    @Override
+    public void onBindViewHolder(@NonNull RecyclerView.ViewHolder holder, int position) {
+        if (holder instanceof ViewHolder) {
+            if (rechargeList.size() > 0) {
+                ((ViewHolder) holder).getBinding().userName.setText("鐢ㄦ埛鍚�:" + rechargeList.get(position).getUserName());
+//                ((ViewHolder) holder).getBinding().cardNumber.setText("鍗″彿:" + rechargeList.get(position).getCardNumber());
+                ((ViewHolder) holder).getBinding().userNo.setText("韬唤璇佸彿:" + rechargeList.get(position).getUserID());
+//                ((ViewHolder) holder).getBinding().water.setText("鐢佃瘽:" + rechargeList.get(position).getPhone());
+                ((ViewHolder) holder).getBinding().date.setText("鏃ユ湡:" + DateUtil.dateToStamp(rechargeList.get(position).getDate(), DateUtil.type1));
+            }
+        }
+    }
+
+    @Override
+    public int getItemCount() {
+        //鍚屾椂杩欓噷涔熼渶瑕佹坊鍔犲垽鏂紝濡傛灉mData.size()涓�0鐨勮瘽锛屽彧寮曞叆涓�涓竷灞�锛屽氨鏄痚mptyView
+        // 閭d箞锛岃繖涓猺ecyclerView鐨刬temCount涓�1
+        if (rechargeList.size() == 0) {
+            return 1;
+        }
+        return rechargeList.size();
+    }
+
+    @Override
+    public int getItemViewType(int position) {
+        if (rechargeList.size() == 0) {
+            return VIEW_TYPE_EMPTY;
+        } else {
+            return VIEW_TYPE_ITEM;
+        }
+    }
+
+
+    static class ViewHolder extends RecyclerView.ViewHolder {
+        QiheLineItemNewCardBinding mBinding;
+
+        public QiheLineItemNewCardBinding getBinding() {
+            return mBinding;
+        }
+
+        public void setBinding(QiheLineItemNewCardBinding binding) {
+            this.mBinding = binding;
+        }
+
+        public ViewHolder(QiheLineItemNewCardBinding itemView) {
+            super(itemView.getRoot());
+            this.mBinding = itemView;
+
+        }
+    }
+
+
+}
diff --git a/qiheonlinelibrary/src/main/java/com/dayu/qiheonlinelibrary/adapter/RechargeAdapter.java b/qiheonlinelibrary/src/main/java/com/dayu/qiheonlinelibrary/adapter/RechargeAdapter.java
new file mode 100644
index 0000000..070d9c7
--- /dev/null
+++ b/qiheonlinelibrary/src/main/java/com/dayu/qiheonlinelibrary/adapter/RechargeAdapter.java
@@ -0,0 +1,102 @@
+package com.dayu.qiheonlinelibrary.adapter;
+
+import android.content.Context;
+import android.view.LayoutInflater;
+import android.view.ViewGroup;
+
+import androidx.annotation.NonNull;
+import androidx.databinding.DataBindingUtil;
+import androidx.recyclerview.widget.RecyclerView;
+
+
+import com.dayu.baselibrary.databinding.ItemNoMoreBinding;
+import com.dayu.baselibrary.utils.DateUtil;
+import com.dayu.qiheonlinelibrary.R;
+import com.dayu.qiheonlinelibrary.databinding.QiheLineItemRechargeBinding;
+import com.dayu.qiheonlinelibrary.dbBean.RechargeBean;
+
+import java.util.List;
+
+/**
+ * Created by zuoxiao on 2018/12/24.
+ */
+
+public class RechargeAdapter extends BaseRecyclerAdapter<RecyclerView.ViewHolder> {
+
+    List<RechargeBean> rechargeList;
+    Context mContext;
+
+    public RechargeAdapter(Context context, List<RechargeBean> rechargeList) {
+        mContext = context;
+        this.rechargeList = rechargeList;
+    }
+
+
+    @NonNull
+    @Override
+    public RecyclerView.ViewHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) {
+        if (viewType == VIEW_TYPE_EMPTY) {
+            ItemNoMoreBinding emptyView = DataBindingUtil.inflate((LayoutInflater) mContext.getSystemService(Context.LAYOUT_INFLATER_SERVICE), com.dayu.baselibrary.R.layout.item_no_more, parent, false);
+            return new ViewHolderEmpty(emptyView);
+        } else {
+            QiheLineItemRechargeBinding binding = DataBindingUtil.inflate((LayoutInflater) mContext.getSystemService(Context.LAYOUT_INFLATER_SERVICE), R.layout.qihe_line_item_recharge, parent, false);
+            return new ViewHolder(binding);
+        }
+
+    }
+
+    @Override
+    public void onBindViewHolder(@NonNull RecyclerView.ViewHolder holder, int position) {
+        if (holder instanceof ViewHolder) {
+            if (rechargeList.size() > 0) {
+                ((ViewHolder) holder).getBinding().userName.setText("濮撳悕:" + rechargeList.get(position).getUserName());
+                ((ViewHolder) holder).getBinding().userNo.setText("鍗″彿:" + rechargeList.get(position).getCardNumber());
+                ((ViewHolder) holder).getBinding().morny.setText("鍏呭�奸噾棰�:" + rechargeList.get(position).getMorny() + " 鍏�");
+//                ((ViewHolder) holder).getBinding().rachagerWater.setText("鍏呭�兼按閲�:" + rechargeList.get(position).getRechargeWater() + " 鍚�");
+                ((ViewHolder) holder).getBinding().balance.setText("鍏呭�兼椂浣欓:" + rechargeList.get(position).getBalance() + " 鍏�");
+//                ((ViewHolder) holder).getBinding().surplusWater.setText("鍓╀綑姘撮噺:" + rechargeList.get(position).getSurplusWater()  + " 鍚�");
+                ((ViewHolder) holder).getBinding().date.setText("鏃ユ湡:" + DateUtil.dateToStamp(rechargeList.get(position).getDate(), DateUtil.type1));
+            }
+        }
+    }
+
+    @Override
+    public int getItemCount() {
+        //鍚屾椂杩欓噷涔熼渶瑕佹坊鍔犲垽鏂紝濡傛灉mData.size()涓�0鐨勮瘽锛屽彧寮曞叆涓�涓竷灞�锛屽氨鏄痚mptyView
+        // 閭d箞锛岃繖涓猺ecyclerView鐨刬temCount涓�1
+        if (rechargeList.size() == 0) {
+            return 1;
+        }
+        return rechargeList.size();
+    }
+
+    @Override
+    public int getItemViewType(int position) {
+        if (rechargeList.size() == 0) {
+            return VIEW_TYPE_EMPTY;
+        } else {
+            return VIEW_TYPE_ITEM;
+        }
+    }
+
+
+    static class ViewHolder extends RecyclerView.ViewHolder {
+        QiheLineItemRechargeBinding mBinding;
+
+        public QiheLineItemRechargeBinding getBinding() {
+            return mBinding;
+        }
+
+        public void setBinding(QiheLineItemRechargeBinding binding) {
+            this.mBinding = binding;
+        }
+
+        public ViewHolder(QiheLineItemRechargeBinding itemView) {
+            super(itemView.getRoot());
+            this.mBinding = itemView;
+
+        }
+    }
+
+
+}
diff --git a/qiheonlinelibrary/src/main/java/com/dayu/qiheonlinelibrary/bean/BaseNetBean.java b/qiheonlinelibrary/src/main/java/com/dayu/qiheonlinelibrary/bean/BaseNetBean.java
new file mode 100644
index 0000000..893f1c2
--- /dev/null
+++ b/qiheonlinelibrary/src/main/java/com/dayu/qiheonlinelibrary/bean/BaseNetBean.java
@@ -0,0 +1,10 @@
+package com.dayu.qiheonlinelibrary.bean;
+
+/**
+ * author: zuo
+ * Date: 2024-07-29
+ * Time: 14:01
+ * 澶囨敞锛�
+ */
+public class BaseNetBean {
+}
diff --git a/qiheonlinelibrary/src/main/java/com/dayu/qiheonlinelibrary/card/BaseCard.java b/qiheonlinelibrary/src/main/java/com/dayu/qiheonlinelibrary/card/BaseCard.java
new file mode 100644
index 0000000..4d4fb8b
--- /dev/null
+++ b/qiheonlinelibrary/src/main/java/com/dayu/qiheonlinelibrary/card/BaseCard.java
@@ -0,0 +1,56 @@
+package com.dayu.qiheonlinelibrary.card;
+
+import com.dayu.baselibrary.tools.HexUtil;
+
+import com.dayu.qiheonlinelibrary.dao.QHOnLineAppDatabase;
+import com.dayu.qiheonlinelibrary.dbBean.CardData;
+import com.dayu.qiheonlinelibrary.utils.CardCommon;
+import com.tencent.bugly.crashreport.CrashReport;
+
+import java.io.Serializable;
+
+/**
+ * Copyright (C), 2023,
+ * Author: zuo
+ * Date: 2023-11-07 20:52
+ * Description:鎵�鏈夊崱缁撴瀯鐨勭埗绫�
+ */
+public class BaseCard implements Serializable {
+    public String cardData;//鏍囪瘑鐮�
+
+    public void setCardData(QHOnLineAppDatabase baseDao, String cardType) {
+        try {
+            CardData cardDataBean = baseDao.cardDataDao().findFirst(cardType);
+            if (cardDataBean != null) {
+                cardData = cardDataBean.getCardIdentifying();
+            } else {
+                cardData= CardCommon.getDefaultCardData(cardType);
+            }
+        } catch (Exception e) {
+            CrashReport.postCatchedException(e);
+        }
+    }
+
+
+    /**
+     * 鍓�15涓瓧鑺傜畻鏈疮鍔犲拰 涓嶅惈杩涗綅
+     *
+     * @param data 婧愭暟鎹�
+     * @return 16杩涘埗
+     */
+    public byte getByteSum(byte[] data) {
+        if (data != null) {
+            int sum = 0;
+            for (byte b : data) {
+                sum += b & 0xFF; // & 0xFF 鍙互灏嗗瓧鑺傛墿灞曚负姝f暣鏁帮紝閬垮厤绗﹀彿浣嶇殑褰卞搷
+            }
+            String hex = HexUtil.get10to16CompleteHex(sum);
+            hex = HexUtil.spaceHex(hex);
+            String[] hexArr = hex.split(" ");
+            return HexUtil.hexToByte(hexArr[hexArr.length - 1]);
+        }
+        return 0;
+    }
+
+
+}
diff --git a/qiheonlinelibrary/src/main/java/com/dayu/qiheonlinelibrary/card/BlackCard.java b/qiheonlinelibrary/src/main/java/com/dayu/qiheonlinelibrary/card/BlackCard.java
new file mode 100644
index 0000000..0b763c0
--- /dev/null
+++ b/qiheonlinelibrary/src/main/java/com/dayu/qiheonlinelibrary/card/BlackCard.java
@@ -0,0 +1,69 @@
+package com.dayu.qiheonlinelibrary.card;
+
+import com.dayu.baselibrary.tools.HexUtil;
+import com.dayu.qiheonlinelibrary.dao.QHOnLineAppDatabase;
+import com.dayu.qiheonlinelibrary.utils.CardCommon;
+
+
+import java.io.Serializable;
+import java.util.List;
+
+/**
+ * author: zuo
+ * Date: 2024-02-29
+ * Time: 17:17
+ * 澶囨敞锛氶厤缃粦鍗�  褰撶敤鎴蜂涪澶卞崱鏃讹紝闇�瑕佸湪瀵瑰簲鐨勬帶鍒跺櫒鎶婃鐢ㄦ埛閰嶇疆涓洪粦鎴凤紝闃叉闈炴硶鐢ㄦ按
+ */
+public class BlackCard extends BaseCard implements Serializable {
+
+    public String cardType = CardCommon.BLACK;
+
+    public String blackCard;//榛戞埛鍗″彿
+
+    public String getBlackCard() {
+        return blackCard;
+    }
+
+    public void setBlackCard(String blackCard) {
+        this.blackCard = blackCard;
+    }
+
+    public byte[] toByte(QHOnLineAppDatabase QHOnLineAppDatabase) {
+        setCardData(QHOnLineAppDatabase, cardType);
+        Zero zero = new Zero();
+        return zero.toByte();
+    }
+
+
+    public static BlackCard getBean(List<byte[]> data) {
+        BlackCard blackCard = new BlackCard();
+        if (data != null) {
+            byte[] zero = data.get(0);
+            byte[] cardDataByte = new byte[4];
+            System.arraycopy(zero, 1, cardDataByte, 0, cardDataByte.length);
+            blackCard.cardData = HexUtil.bytesToHex(cardDataByte);
+
+            byte[] blackCardByte = new byte[4];
+            System.arraycopy(zero, 5, blackCardByte, 0, blackCardByte.length);
+            blackCard.blackCard = HexUtil.bytesToHex(blackCardByte);
+        }
+
+        return blackCard;
+    }
+
+    public class Zero {
+        public byte[] toByte() {
+            byte[] data = new byte[16];
+            data[0] = HexUtil.hexToByte(cardType);
+            byte[] cardDatas = HexUtil.hexToByteArray(cardData);
+            System.arraycopy(cardDatas, 0, data, 1, cardDatas.length);
+            byte[] blackCardByte = HexUtil.hexToByteArray(blackCard);
+            System.arraycopy(blackCardByte, 0, data, 5, blackCardByte.length);
+            data[15] = getByteSum(data);
+            return data;
+        }
+
+    }
+
+
+}
diff --git a/qiheonlinelibrary/src/main/java/com/dayu/qiheonlinelibrary/card/CleanCard.java b/qiheonlinelibrary/src/main/java/com/dayu/qiheonlinelibrary/card/CleanCard.java
new file mode 100644
index 0000000..ab5ceb4
--- /dev/null
+++ b/qiheonlinelibrary/src/main/java/com/dayu/qiheonlinelibrary/card/CleanCard.java
@@ -0,0 +1,40 @@
+package com.dayu.qiheonlinelibrary.card;
+
+import com.dayu.baselibrary.tools.HexUtil;
+import com.dayu.qiheonlinelibrary.dao.QHOnLineAppDatabase;
+import com.dayu.qiheonlinelibrary.utils.CardCommon;
+
+import java.io.Serializable;
+
+/**
+ * Copyright (C), 2023,
+ * Author: zuo
+ * Date: 2023-11-08 10:57
+ * Description:娓呴浂鍗�
+ */
+public class CleanCard extends BaseCard implements Serializable {
+    public String cardType = CardCommon.CLEAN_CARD_TYPE;//鍗$被鍨�
+
+    public String getCardData() {
+        return cardData;
+    }
+
+
+    public byte[] toByte(QHOnLineAppDatabase QHOnLineAppDatabase) {
+        setCardData(QHOnLineAppDatabase, cardType);
+        Zero zero = new Zero();
+        return zero.toByte();
+    }
+
+    public class Zero {
+        public byte[] toByte() {
+            byte[] data = new byte[16];
+            data[0] = HexUtil.hexToByte(cardType);
+            byte[] cardDatas = HexUtil.hexToByteArray(cardData);
+            System.arraycopy(cardDatas, 0, data, 1, cardDatas.length);
+            data[15] = getByteSum(data);
+            return data;
+        }
+
+    }
+}
diff --git a/qiheonlinelibrary/src/main/java/com/dayu/qiheonlinelibrary/card/CleanUserCard.java b/qiheonlinelibrary/src/main/java/com/dayu/qiheonlinelibrary/card/CleanUserCard.java
new file mode 100644
index 0000000..bcedd0a
--- /dev/null
+++ b/qiheonlinelibrary/src/main/java/com/dayu/qiheonlinelibrary/card/CleanUserCard.java
@@ -0,0 +1,36 @@
+package com.dayu.qiheonlinelibrary.card;
+
+import com.dayu.baselibrary.tools.HexUtil;
+import com.dayu.qiheonlinelibrary.dao.QHOnLineAppDatabase;
+import com.dayu.qiheonlinelibrary.utils.CardCommon;
+
+
+import java.io.Serializable;
+
+/**
+ * Copyright (C), 2023,
+ * Author: zuo
+ * Date: 2023-11-08 11:39
+ * Description:鍒犻櫎鍏ㄩ儴鐢ㄦ埛鍗�
+ */
+public class CleanUserCard extends BaseCard implements Serializable {
+    public String cardType = CardCommon.CLEAN_ALL_USER_CARD_TYPE;//鍗$被鍨�
+
+    public byte[] toByte(QHOnLineAppDatabase QHOnLineAppDatabase) {
+        setCardData(QHOnLineAppDatabase, cardType);
+        Zero zero = new Zero();
+        return zero.toByte();
+    }
+
+    public class Zero {
+        public byte[] toByte() {
+            byte[] data = new byte[16];
+            data[0] = HexUtil.hexToByte(cardType);
+            byte[] cardDatas = HexUtil.hexToByteArray(cardData);
+            System.arraycopy(cardDatas, 0, data, 1, cardDatas.length);
+            data[15] = getByteSum(data);
+            return data;
+        }
+
+    }
+}
diff --git a/qiheonlinelibrary/src/main/java/com/dayu/qiheonlinelibrary/card/ConfigurationPowerCard.java b/qiheonlinelibrary/src/main/java/com/dayu/qiheonlinelibrary/card/ConfigurationPowerCard.java
new file mode 100644
index 0000000..2de4078
--- /dev/null
+++ b/qiheonlinelibrary/src/main/java/com/dayu/qiheonlinelibrary/card/ConfigurationPowerCard.java
@@ -0,0 +1,78 @@
+package com.dayu.qiheonlinelibrary.card;
+
+import com.dayu.baselibrary.tools.HexUtil;
+
+import com.dayu.qiheonlinelibrary.dao.QHOnLineAppDatabase;
+import com.dayu.qiheonlinelibrary.utils.CardCommon;
+import com.tencent.bugly.crashreport.CrashReport;
+
+import java.io.Serializable;
+
+/**
+ * Copyright (C), 2023,
+ * Author: zuo
+ * Date: 2023-11-08 13:26
+ * Description: 閰嶇疆姘存车鍔熺巼鍗★細
+ * <p>
+ * 涓烘柟渚跨幇鍦烘洿鎹㈣澶囨椂閲嶆柊娉ㄥ唽鐨勯棶棰橈紝閰嶇疆璁惧淇℃伅鍗★紝棣栧厛鍒峰崱锛屾妸鍘熻澶囩殑娉ㄥ唽鍙峰拰ID鍙疯鍒板崱鍐咃紝
+ * 鍚屾椂鍗$姸鎬佸垯00淇敼涓篎F锛屽啀鏂拌澶囦笂鍒锋鍗℃椂锛屾敞鍐屽彿鍜孖D鍙疯嚜鍔ㄥ啓鍒版帶鍒跺櫒鍐咃紝鍙互鐩存帴鍒峰崱浣跨敤
+ */
+public class ConfigurationPowerCard extends BaseCard implements Serializable {
+
+
+    public String cardType = CardCommon.CONFIGURATION_POWER_CARD_TYPE;//鍗$被鍨�
+
+    public String getCardData() {
+        return cardData;
+    }
+
+    public String power;//鍔熺巼
+
+    public String getPower() {
+        return power;
+    }
+
+    public void setPower(String power) {
+        this.power = power;
+    }
+
+
+    public static ConfigurationPowerCard toBean(byte[] data) {
+        try {
+            ConfigurationPowerCard powerCard = new ConfigurationPowerCard();
+            int intPower = HexUtil.get16to10(HexUtil.byteToHex(data[5]));
+            powerCard.setPower(String.valueOf(intPower));
+            return powerCard;
+        } catch (Exception e) {
+            e.printStackTrace();
+            CrashReport.postCatchedException(e);
+            return null;
+        }
+    }
+
+    public byte[] toByte(QHOnLineAppDatabase QHOnLineAppDatabase) {
+        setCardData(QHOnLineAppDatabase,cardType);
+        Zero zero = new Zero();
+        return zero.toByte();
+    }
+
+    public class Zero  {
+        public byte[] toByte() {
+            byte[] data = new byte[16];
+            data[0] = HexUtil.hexToByte(cardType);
+            byte[] cardDatas = HexUtil.hexToByteArray(cardData);
+                System.arraycopy(cardDatas, 0, data, 1, cardDatas.length);
+            if (power != null) {
+                float floatPower = Float.parseFloat(power);
+                int intPower = (int) Math.ceil(floatPower); // 灏嗘诞鐐规暟鍚戜笂鍙栨暣骞惰浆鎹负鏁存暟
+                String hexPower = HexUtil.get10to16(intPower);
+                byte bytePower = HexUtil.hexToByte(hexPower);
+                data[5] = bytePower;
+            }
+
+            data[15] = getByteSum(data);
+            return data;
+        }
+
+    }
+}
diff --git a/qiheonlinelibrary/src/main/java/com/dayu/qiheonlinelibrary/card/ConfigureDeviceRegistrationCrad.java b/qiheonlinelibrary/src/main/java/com/dayu/qiheonlinelibrary/card/ConfigureDeviceRegistrationCrad.java
new file mode 100644
index 0000000..e371e52
--- /dev/null
+++ b/qiheonlinelibrary/src/main/java/com/dayu/qiheonlinelibrary/card/ConfigureDeviceRegistrationCrad.java
@@ -0,0 +1,43 @@
+package com.dayu.qiheonlinelibrary.card;
+
+import com.dayu.baselibrary.tools.HexUtil;
+import com.dayu.qiheonlinelibrary.dao.QHOnLineAppDatabase;
+import com.dayu.qiheonlinelibrary.utils.CardCommon;
+
+import java.io.Serializable;
+
+/**
+ * Created by Android Studio.
+ * author: zuo
+ * Date: 2023-11-13
+ * Time: 18:11
+ * 澶囨敞锛氶厤缃澶囨敞鍐屼俊鎭崱
+ * <p>
+ * 涓烘柟渚跨幇鍦烘洿鎹㈣澶囨椂閲嶆柊娉ㄥ唽鐨勯棶棰橈紝閰嶇疆璁惧淇℃伅鍗★紝棣栧厛鍒峰崱锛屾妸鍘熻澶囩殑娉ㄥ唽鍙峰拰ID鍙疯鍒板崱鍐咃紝鍚屾椂鍗$姸鎬佸垯00淇敼涓篎F锛屽啀鏂拌澶囦笂鍒锋鍗℃椂锛屾敞鍐屽彿鍜孖D鍙疯嚜鍔ㄥ啓鍒版帶鍒跺櫒鍐咃紝鍙互鐩存帴鍒峰崱浣跨敤
+ */
+public class ConfigureDeviceRegistrationCrad extends BaseCard implements Serializable {
+    public String cardType = CardCommon.CONFIGURATION_CARD_TYPE;//鍗$被鍨�
+    public String cardData = "A0B1C289";//鏍囪瘑鐮�
+
+    public String getCardData() {
+        return cardData;
+    }
+
+    public byte[] toByte(QHOnLineAppDatabase QHOnLineAppDatabase) {
+        setCardData(QHOnLineAppDatabase, cardType);
+        Zero zero = new Zero();
+        return zero.toByte();
+    }
+
+    public class Zero  {
+        public byte[] toByte() {
+            byte[] data = new byte[16];
+            data[0] = HexUtil.hexToByte(cardType);
+            byte[] cardDatas = HexUtil.hexToByteArray(cardData);
+                System.arraycopy(cardDatas, 0, data, 1, cardDatas.length);
+            data[15] = getByteSum(data);
+            return data;
+        }
+
+    }
+}
diff --git a/qiheonlinelibrary/src/main/java/com/dayu/qiheonlinelibrary/card/DomainCard.java b/qiheonlinelibrary/src/main/java/com/dayu/qiheonlinelibrary/card/DomainCard.java
new file mode 100644
index 0000000..2c6cad5
--- /dev/null
+++ b/qiheonlinelibrary/src/main/java/com/dayu/qiheonlinelibrary/card/DomainCard.java
@@ -0,0 +1,181 @@
+package com.dayu.qiheonlinelibrary.card;
+
+
+import com.dayu.baselibrary.tools.BcdUtil;
+import com.dayu.baselibrary.tools.HexUtil;
+
+import com.dayu.qiheonlinelibrary.utils.CardCommon;
+import com.tencent.bugly.crashreport.CrashReport;
+
+import java.io.Serializable;
+import java.net.IDN;
+import java.nio.charset.StandardCharsets;
+import java.util.List;
+
+/**
+ * Copyright (C), 2023,
+ * Author: zuo
+ * Date: 2023-11-08 11:47
+ * Description:璁剧疆鍩熷悕鍗★細
+ */
+public class DomainCard implements Serializable {
+
+
+    public String cardType = CardCommon.DOMAIN_CARD_TYPE;//鍗$被鍨�
+    public String domainNumber;//鍩熷悕搴忓彿 (BCD鏍煎紡)
+    public int domainLength;//鍩熷悕闀垮害
+
+    //绔彛鍙蜂负5涓瓧鑺傦紝涓嶈冻5浣嶉珮浣嶈ˉ0銆傜鍙e彿涓庡煙鍚嶄箣闂寸敤鈥�,鈥濋殧寮�銆傜鍙e彿鏈�鍚庝互鈥�#鈥濈粨鏉�
+    public String domainName;//鍩熷悕
+    public int port;//绔彛
+
+    public String getDomainName() {
+        return domainName;
+    }
+
+    public void setDomainName(String domainName) {
+        this.domainName = domainName;
+    }
+
+    public String getDomainNumber() {
+        return domainNumber;
+    }
+
+    public void setDomainNumber(String domainNumber) {
+        this.domainNumber = domainNumber;
+    }
+
+    public int getPort() {
+        return port;
+    }
+
+    public void setPort(int port) {
+        this.port = port;
+    }
+
+    private byte[] asciiByte;//褰撳墠鍩熷悕鍜岀鍙e彿鏁扮粍
+
+    public byte[] getZeroByte() {
+        Zero zero = new Zero();
+        return zero.toByte();
+    }
+
+    public byte[] getOneByte() {
+        One one = new One();
+        return one.toBytes();
+    }
+
+    public byte[] getTwoByte() {
+        Two two = new Two();
+        return two.toBytes();
+    }
+
+
+    public static DomainCard toBean(List<byte[]> data) {
+        try {
+            DomainCard domainCard = new DomainCard();
+            String domainNumber = BcdUtil.bcdToStr(data.get(0)[1]);
+            domainCard.domainNumber = domainNumber;
+            int domainLength = HexUtil.get16to10(HexUtil.byteToHex(data.get(0)[2]));
+            byte[] domainData = new byte[domainLength + 7];
+            int index = 0;
+            for (int i = 0; i < 3; i++) {
+                int jIndex;
+                if (i == 0) {
+                    jIndex = 3;
+                } else {
+                    jIndex = 0;
+                }
+                for (int j = jIndex; j < 15; j++) {
+                    if (index < domainData.length) {
+                        domainData[index] = data.get(i)[j];
+                        index++;
+                    }
+
+                }
+            }
+            String domainStr = new String(domainData, StandardCharsets.US_ASCII);
+            String domainName = domainStr.split(",")[0];
+            String port = domainStr.split(",")[1].replace("#", "");
+            domainCard.setDomainName(domainName);
+            domainCard.setPort(Integer.valueOf(port));
+
+            return domainCard;
+        } catch (Exception e) {
+            e.printStackTrace();
+            CrashReport.postCatchedException(e);
+        }
+        return null;
+    }
+
+
+    /**
+     * 鐢ㄦ埛鍗�0鍧�
+     */
+    public class Zero extends BaseCard {
+        public byte[] toByte() {
+            byte[] data = new byte[16];
+            data[0] = HexUtil.hexToByte(cardType);
+            if (domainNumber != null) {
+                byte[] domainNumbers = BcdUtil.strToBcd(domainNumber);
+                data[1] = domainNumbers[0];
+            }
+            domainLength = domainName.length();
+            data[2] = HexUtil.hexToByte(HexUtil.get10to16(domainLength));
+            String portStr = String.valueOf(port);
+            int lenght = portStr.length();
+            for (int i = 0; i < 5 - lenght; i++) {
+                portStr = "0" + portStr;
+            }
+            String ascii = IDN.toASCII(domainName + "," + portStr + "#");
+            asciiByte = ascii.getBytes();
+            if (asciiByte.length < 12) {
+                System.arraycopy(asciiByte, 0, data, 3, asciiByte.length);
+            } else {
+                System.arraycopy(asciiByte, 0, data, 3, 12);
+            }
+            data[15] = getByteSum(data);
+            return data;
+        }
+
+    }
+
+    /**
+     * 鐢ㄦ埛鍗�1鍧�
+     */
+    public class One extends BaseCard {
+
+        public byte[] toBytes() {
+            byte[] data = new byte[16];
+            if (asciiByte.length > 12) {
+                if (asciiByte.length - 12 < 15) {
+                    System.arraycopy(asciiByte, 12, data, 0, asciiByte.length - 12);
+                } else {
+                    System.arraycopy(asciiByte, 12, data, 0, 15);
+                }
+            }
+            data[15] = getByteSum(data);
+            return data;
+        }
+
+
+    }
+
+    /**
+     * 鐢ㄦ埛鍗�2鍧�
+     */
+    public class Two extends BaseCard {
+        public byte[] toBytes() {
+            byte[] data = new byte[16];
+            if (asciiByte.length > (12 + 15)) {
+                if (asciiByte.length - (12 + 15) < 15) {
+                    System.arraycopy(asciiByte, 12, data, 0, asciiByte.length - (12 + 15));
+                } else {
+                    System.arraycopy(asciiByte, 12, data, 0, 15);
+                }
+            }
+            data[15] = getByteSum(data);
+            return data;
+        }
+    }
+}
diff --git a/qiheonlinelibrary/src/main/java/com/dayu/qiheonlinelibrary/card/ElectricPriceCard.java b/qiheonlinelibrary/src/main/java/com/dayu/qiheonlinelibrary/card/ElectricPriceCard.java
new file mode 100644
index 0000000..cf2d377
--- /dev/null
+++ b/qiheonlinelibrary/src/main/java/com/dayu/qiheonlinelibrary/card/ElectricPriceCard.java
@@ -0,0 +1,83 @@
+package com.dayu.qiheonlinelibrary.card;
+
+import com.dayu.baselibrary.tools.HexUtil;
+import com.dayu.qiheonlinelibrary.dao.QHOnLineAppDatabase;
+import com.dayu.qiheonlinelibrary.utils.CardCommon;
+
+import java.io.Serializable;
+import java.util.List;
+
+/**
+ * author: zuo
+ * Date: 2024-02-29
+ * Time: 16:59
+ * 澶囨敞锛氱數閲忓崟浠峰崱
+ */
+public class ElectricPriceCard extends BaseCard implements Serializable {
+    public String cardType = CardCommon.ELECTRIC_PRICE;
+    public Float electricPrice;// 鐢甸噺鍗曚环(浣�)鍗曚綅鏄厓锛�3浣嶅皬鏁扮偣
+
+    public Float getElectricPrice() {
+        return electricPrice;
+    }
+
+    public void setElectricPrice(Float electricPrice) {
+        this.electricPrice = electricPrice;
+    }
+
+    public byte[] toByte(QHOnLineAppDatabase QHOnLineAppDatabase) {
+        setCardData(QHOnLineAppDatabase, cardType);
+        Zero zero = new Zero();
+        return zero.toByte();
+    }
+
+
+    public static ElectricPriceCard getBean(List<byte[]> data) {
+        ElectricPriceCard regionCard = new ElectricPriceCard();
+        byte[] zero = data.get(0);
+        regionCard.cardType = HexUtil.byteToHex(zero[0]);
+
+        byte[] cardDataByte = new byte[4];
+        System.arraycopy(zero, 1, cardDataByte, 0, cardDataByte.length);
+        regionCard.cardData = HexUtil.bytesToHex(cardDataByte);
+
+
+        byte[] electricPriceByte = new byte[4];
+        System.arraycopy(zero, 5, electricPriceByte, 0, electricPriceByte.length);
+        regionCard.electricPrice = HexUtil.hexToFloatLowHigh(electricPriceByte);
+
+
+        return regionCard;
+    }
+
+
+    /**
+     * 绗�1鎵囧尯0鍧� 瀛樺偍鐨勬暟鎹�
+     */
+    public class Zero {
+        public byte[] toByte() {
+            byte[] data = new byte[16];
+            data[0] = HexUtil.hexToByte(cardType);
+
+            byte[] regionBytes = new byte[4];
+            byte[] regionDatas = HexUtil.hexToByteArray(cardData);
+            System.arraycopy(regionDatas, 0, regionBytes, 0, regionDatas.length);
+            if (regionBytes != null) {
+                System.arraycopy(regionBytes, 0, data, 1, regionBytes.length);
+            }
+
+            byte[] controllerCodelBytes = new byte[4];
+            byte[] controllerCodelDatas = HexUtil.hexToByteArray(HexUtil.floatToHexLowHigh(electricPrice));
+            System.arraycopy(controllerCodelDatas, 0, controllerCodelBytes, 0, controllerCodelDatas.length);
+            if (controllerCodelBytes != null) {
+                System.arraycopy(controllerCodelBytes, 0, data, 5, controllerCodelBytes.length);
+            }
+
+            data[15] = getByteSum(data);
+            return data;
+        }
+
+    }
+
+
+}
diff --git a/qiheonlinelibrary/src/main/java/com/dayu/qiheonlinelibrary/card/ManageCard.java b/qiheonlinelibrary/src/main/java/com/dayu/qiheonlinelibrary/card/ManageCard.java
new file mode 100644
index 0000000..c560862
--- /dev/null
+++ b/qiheonlinelibrary/src/main/java/com/dayu/qiheonlinelibrary/card/ManageCard.java
@@ -0,0 +1,99 @@
+package com.dayu.qiheonlinelibrary.card;
+
+import com.dayu.baselibrary.tools.HexUtil;
+import com.dayu.qiheonlinelibrary.dao.QHOnLineAppDatabase;
+import com.dayu.qiheonlinelibrary.utils.CardCommon;
+
+
+import java.io.Serializable;
+import java.util.List;
+
+/**
+ * Copyright (C), 2023,
+ * Author: zuo
+ * Date: 2023-11-08 10:19
+ * Description: 绠$悊鍗�  绗�1鎵囧尯 0鍧�
+ */
+public class ManageCard extends BaseCard implements Serializable {
+    public String cardType = CardCommon.MANAGE_CRAD;//鍗$被鍨�
+
+    public String getCardData() {
+        return cardData;
+    }
+
+    /**
+     * M1鍗$殑0鎵囧尯0鍧楅�氬父鐢ㄤ簬瀛樺偍涓�浜涘熀鏈殑鍗$墖淇℃伅
+     * 0-4瀛楄妭鏄崱鍙�
+     */
+    public String userCard; //鐢ㄦ埛鍗″彿
+
+    public byte type;//褰撳墠鐘舵�� 00锛氬厖鍊肩鐞嗘満鍐� 01:鎺у埗鍣ㄥ弽鍐欑殑  褰�01鏃跺皢1鎵囧尯0鍧楀師绠$悊鍗′俊鎭敼鎴愮敤鎴峰崱鍐呭
+
+    public int totalElectric;//鎬荤敤鐢甸噺浣� 搴曚綅鍦ㄥ墠锛岄珮浣嶅湪鍚�  1浣嶅皬鏁扮偣  鍚�1浣嶅皬鏁扮偣鐨勬暣鏁�
+
+    public int getTotalElectric() {
+        return totalElectric;
+    }
+
+    public byte getType() {
+        return type;
+    }
+
+    public void setType(byte type) {
+        this.type = type;
+    }
+
+    public String getUserCard() {
+        return userCard;
+    }
+
+    public void setUserCard(String userCard) {
+        this.userCard = userCard;
+    }
+
+
+    public static ManageCard getBean(List<byte[]> data) {
+
+        if (data != null) {
+            ManageCard manageCard = new ManageCard();
+
+            byte[] zero = data.get(0);
+            byte[] passWordByte = new byte[4];
+            System.arraycopy(zero, 5, passWordByte, 0, passWordByte.length);
+            manageCard.setUserCard(HexUtil.bytesToHex(passWordByte));
+            manageCard.setType(zero[9]);
+            byte[] totalElectricByte = new byte[4];
+            System.arraycopy(zero, 10, totalElectricByte, 0, totalElectricByte.length);
+            manageCard.totalElectric = HexUtil.get16To10LowHightByBytes(totalElectricByte);
+            return manageCard;
+        }
+        return null;
+    }
+
+
+    public byte[] toByte(QHOnLineAppDatabase QHOnLineAppDatabase) {
+        setCardData(QHOnLineAppDatabase, cardType);
+        Zero zero = new Zero();
+        return zero.toByte();
+    }
+
+    public class Zero {
+        public byte[] toByte() {
+            byte[] data = new byte[16];
+            data[0] = HexUtil.hexToByte(cardType);
+
+            byte[] cardDataByte = HexUtil.hexToByteArray(cardData);
+            System.arraycopy(cardDataByte, 0, data, 1, cardDataByte.length);
+
+            byte[] userCardByts = HexUtil.hexToByteArray(userCard);
+            if (userCard != null) {
+                System.arraycopy(userCardByts, 0, data, 5, userCardByts.length);
+            }
+
+            data[15] = getByteSum(data);
+            return data;
+        }
+
+    }
+
+}
diff --git a/qiheonlinelibrary/src/main/java/com/dayu/qiheonlinelibrary/card/ManagerToUserCard.java b/qiheonlinelibrary/src/main/java/com/dayu/qiheonlinelibrary/card/ManagerToUserCard.java
new file mode 100644
index 0000000..eba18b0
--- /dev/null
+++ b/qiheonlinelibrary/src/main/java/com/dayu/qiheonlinelibrary/card/ManagerToUserCard.java
@@ -0,0 +1,104 @@
+package com.dayu.qiheonlinelibrary.card;
+
+import com.dayu.baselibrary.tools.HexUtil;
+import com.dayu.qiheonlinelibrary.utils.CardCommon;
+
+import java.io.Serializable;
+
+/**
+ * Created by Android Studio.
+ * author: zuo
+ * Date: 2024-07-13
+ * Time: 15:47
+ * 澶囨敞锛�
+ */
+public class ManagerToUserCard extends BaseCard implements Serializable {
+
+    public String cardType = CardCommon.USER_CARD_TYPE_1;//鍐欏崱鏍囧織 A1鍒峰崱寮�娉靛墠 A8鍒峰崱寮�娉靛悗  A2鍙犲姞鍏呭��
+
+    public int arerNumber;//鍖哄煙鍙�(搴曚綅鍦ㄥ墠楂樹綅鍦ㄥ悗)
+
+    public int deviceNumberl;//璁惧缂栧彿(搴曚綅鍦ㄥ墠楂樹綅鍦ㄥ悗)
+    public short rechargeTimes;//鍏呭�兼鏁�
+
+    public int totalWater;//鐢ㄦ埛鎬荤敤姘撮噺  搴曚綅鍦ㄥ墠锛岄珮浣嶅湪鍚�2浣嶅皬鏁扮偣  鍚袱涓皬鏁扮偣鐨勬暣鏁�
+
+    public int totalElectric;//鎬荤敤鐢甸噺浣� 搴曚綅鍦ㄥ墠锛岄珮浣嶅湪鍚�  1浣嶅皬鏁扮偣  鍚�1浣嶅皬鏁扮偣鐨勬暣鏁�
+
+
+
+    /**
+     * 鐢ㄦ埛鍗�0鍧�
+     */
+    public class Zero extends BaseCard {
+        public byte[] toByte() {
+            try {
+                byte[] data = new byte[16];
+                data[0] = HexUtil.hexToByte(cardType);
+                //鍖哄煙鍙�
+                byte[] arerNumberBytes = new byte[2];
+                byte[] arerNumberDatas = HexUtil.hexToByteArray(HexUtil.get10To16LowHigh(arerNumber));
+                System.arraycopy(arerNumberDatas, 0, arerNumberBytes, 0, arerNumberDatas.length);
+                if (arerNumberBytes != null) {
+                    System.arraycopy(arerNumberBytes, 0, data, 1, arerNumberBytes.length);
+                }
+                //璁惧缂栧彿
+                byte[] deviceNumberlBytes = new byte[2];
+                byte[] deviceNumberlDatas = HexUtil.hexToByteArray(HexUtil.get10To16LowHigh(deviceNumberl));
+                System.arraycopy(deviceNumberlDatas, 0, deviceNumberlBytes, 0, deviceNumberlDatas.length);
+                if (deviceNumberlBytes != null) {
+                    System.arraycopy(deviceNumberlBytes, 0, data, 3, deviceNumberlBytes.length);
+                }
+                //鍏呭�兼鏁�
+                byte rechargeTimesByte = HexUtil.hexToByte(HexUtil.get10to16(rechargeTimes));
+                data[5] = rechargeTimesByte;
+
+                //鐢ㄦ埛鎬荤敤姘撮噺
+                byte[] totalWaterBytes = new byte[4];
+                byte[] totalWaterDatas = HexUtil.hexToByteArray(HexUtil.get10To16LowHigh(totalWater));
+                System.arraycopy(totalWaterDatas, 0, totalWaterBytes, 0, totalWaterDatas.length);
+                if (totalWaterBytes != null) {
+                    System.arraycopy(totalWaterBytes, 0, data, 6, totalWaterBytes.length);
+                }
+                //鎬荤敤鐢甸噺浣�
+                byte[] totalElectricBytes = new byte[4];
+                byte[] totalElectricDatas = HexUtil.hexToByteArray(HexUtil.get10To16LowHigh(totalElectric));
+                System.arraycopy(totalElectricDatas, 0, totalElectricBytes, 0, totalElectricDatas.length);
+                if (totalElectricBytes != null) {
+                    System.arraycopy(totalElectricBytes, 0, data, 10, totalElectricBytes.length);
+                }
+                data[15] = getByteSum(data);
+                return data;
+            } catch (Exception e) {
+                e.printStackTrace();
+            }
+
+            return null;
+        }
+
+    }
+
+    public void setArerNumber(int arerNumber) {
+        this.arerNumber = arerNumber;
+    }
+
+    public void setDeviceNumberl(int deviceNumberl) {
+        this.deviceNumberl = deviceNumberl;
+    }
+
+    public void setRechargeTimes(short rechargeTimes) {
+        this.rechargeTimes = rechargeTimes;
+    }
+
+    public void setTotalWater(int totalWater) {
+        this.totalWater = totalWater;
+    }
+
+    public void setTotalElectric(int totalElectric) {
+        this.totalElectric = totalElectric;
+    }
+    public byte[] getZeroBytes() {
+        Zero zero = new Zero();
+        return zero.toByte();
+    }
+}
diff --git a/qiheonlinelibrary/src/main/java/com/dayu/qiheonlinelibrary/card/PassWordCard.java b/qiheonlinelibrary/src/main/java/com/dayu/qiheonlinelibrary/card/PassWordCard.java
new file mode 100644
index 0000000..7c6ab6b
--- /dev/null
+++ b/qiheonlinelibrary/src/main/java/com/dayu/qiheonlinelibrary/card/PassWordCard.java
@@ -0,0 +1,71 @@
+package com.dayu.qiheonlinelibrary.card;
+
+import com.dayu.baselibrary.tools.HexUtil;
+import com.dayu.qiheonlinelibrary.dao.QHOnLineAppDatabase;
+import com.dayu.qiheonlinelibrary.utils.CardCommon;
+
+
+import java.io.Serializable;
+import java.util.List;
+
+/**
+ * Copyright (C), 2024,
+ * Author: zuo
+ * Date: 2024-3-04 11:22
+ * Description:瀵嗙爜鍗�
+ */
+public class PassWordCard extends BaseCard implements Serializable {
+    public String cardType = CardCommon.PASS_WORD_CRAD_TYPE;//鍗$被鍨�
+
+    public String passWord;//鍏綅鐨勫瘑鐮�
+
+    public String getPassWord() {
+        return passWord;
+    }
+
+    public void setPassWord(String passWord) {
+        this.passWord = passWord;
+    }
+
+    public static PassWordCard getBean(List<byte[]> data) {
+
+        if (data != null) {
+            PassWordCard passWordCard = new PassWordCard();
+
+            byte[] zero = data.get(0);
+            byte[] passWordByte = new byte[6];
+            System.arraycopy(zero, 5, passWordByte, 0, passWordByte.length);
+            passWordCard.passWord = HexUtil.bytesToHex(passWordByte);
+            return passWordCard;
+        }
+        return null;
+    }
+
+
+    public byte[] toByte(QHOnLineAppDatabase QHOnLineAppDatabase) {
+        setCardData(QHOnLineAppDatabase, cardType);
+        Zero zero = new Zero();
+        return zero.toByte();
+    }
+
+
+    public class Zero  {
+        public byte[] toByte() {
+            byte[] data = new byte[16];
+            data[0] = HexUtil.hexToByte(cardType);
+            byte[] cardDatas = HexUtil.hexToByteArray(cardData);
+            if (cardDatas != null) {
+                System.arraycopy(cardDatas, 0, data, 1, cardDatas.length);
+            }
+
+            byte[] passWordBytes = HexUtil.hexToByteArray(passWord);
+            if (passWordBytes != null) {
+                System.arraycopy(passWordBytes, 0, data, 5, passWordBytes.length);
+            }
+
+            data[15] = getByteSum(data);
+            return data;
+        }
+
+    }
+}
diff --git a/qiheonlinelibrary/src/main/java/com/dayu/qiheonlinelibrary/card/RegionCard.java b/qiheonlinelibrary/src/main/java/com/dayu/qiheonlinelibrary/card/RegionCard.java
new file mode 100644
index 0000000..3285855
--- /dev/null
+++ b/qiheonlinelibrary/src/main/java/com/dayu/qiheonlinelibrary/card/RegionCard.java
@@ -0,0 +1,94 @@
+package com.dayu.qiheonlinelibrary.card;
+
+import com.dayu.baselibrary.tools.HexUtil;
+import com.dayu.qiheonlinelibrary.utils.CardCommon;
+
+
+import java.io.Serializable;
+import java.util.List;
+
+/**
+ * author: zuo
+ * Date: 2024-02-29
+ * Time: 16:29
+ * 澶囨敞锛氬尯鍩熻〃鍙峰崱
+ */
+public class RegionCard extends BaseCard implements Serializable {
+
+    public String cardType = CardCommon.REGION;//鍗″懡浠�
+
+    public int region;//鍖哄煙鍦板潃(浣庡墠楂樺悗) 鍙互璇嗗埆鏌愬幙闀囨潙
+
+    public int controllerCodel;// 鎺у埗鍣ㄧ紪鍙�(浣庡墠楂樺悗) 鏈尯鍩熷唴鎺у埗鍣ㄧ紪鍙�
+
+
+    public int getRegion() {
+        return region;
+    }
+
+    public void setRegion(int region) {
+        this.region = region;
+    }
+
+    public int getControllerCodel() {
+        return controllerCodel;
+    }
+
+    public void setControllerCodel(int controllerCodel) {
+        this.controllerCodel = controllerCodel;
+    }
+
+    public byte[] toByte() {
+        Zero zero = new Zero();
+        return zero.toByte();
+    }
+
+
+    public static RegionCard getBean(List<byte[]> data) {
+        RegionCard regionCard = new RegionCard();
+        byte[] zero = data.get(0);
+        regionCard.cardType = HexUtil.byteToHex(zero[0]);
+
+        byte[] regionByte = new byte[2];
+        System.arraycopy(zero, 1, regionByte, 0, regionByte.length);
+        regionCard.region = HexUtil.get16To10LowHightByBytes(regionByte);
+
+
+        byte[] controllerCodelByte = new byte[2];
+        System.arraycopy(zero, 3, controllerCodelByte, 0, controllerCodelByte.length);
+        regionCard.controllerCodel = HexUtil.get16To10LowHightByBytes(controllerCodelByte);
+
+
+        return regionCard;
+    }
+
+
+    /**
+     * 绗�1鎵囧尯0鍧� 瀛樺偍鐨勬暟鎹�
+     */
+    public class Zero {
+        public byte[] toByte() {
+            byte[] data = new byte[16];
+            data[0] = HexUtil.hexToByte(cardType);
+            byte[] regionBytes = new byte[2];
+            byte[] regionDatas = HexUtil.hexToByteArray(HexUtil.get10To16LowHigh(region));
+            System.arraycopy(regionDatas, 0, regionBytes, 0, regionDatas.length);
+            if (regionBytes != null) {
+                System.arraycopy(regionBytes, 0, data, 1, regionBytes.length);
+            }
+            byte[] controllerCodelBytes = new byte[2];
+            byte[] controllerCodelDatas = HexUtil.hexToByteArray(HexUtil.get10To16LowHigh(controllerCodel));
+            System.arraycopy(controllerCodelDatas, 0, controllerCodelBytes, 0, controllerCodelDatas.length);
+            if (controllerCodelBytes != null) {
+                System.arraycopy(controllerCodelBytes, 0, data, 3, controllerCodelBytes.length);
+            }
+
+
+            data[15] = getByteSum(data);
+            return data;
+        }
+
+    }
+
+
+}
diff --git a/qiheonlinelibrary/src/main/java/com/dayu/qiheonlinelibrary/card/RegisteredCard.java b/qiheonlinelibrary/src/main/java/com/dayu/qiheonlinelibrary/card/RegisteredCard.java
new file mode 100644
index 0000000..a34dd0a
--- /dev/null
+++ b/qiheonlinelibrary/src/main/java/com/dayu/qiheonlinelibrary/card/RegisteredCard.java
@@ -0,0 +1,40 @@
+package com.dayu.qiheonlinelibrary.card;
+
+import com.dayu.baselibrary.tools.HexUtil;
+import com.dayu.qiheonlinelibrary.dao.QHOnLineAppDatabase;
+import com.dayu.qiheonlinelibrary.utils.CardCommon;
+
+
+import java.io.Serializable;
+
+/**
+ * Copyright (C), 2023,
+ * Author: zuo
+ * Date: 2023-11-08 11:36
+ * Description:閲嶆柊娉ㄥ唽璁惧鍗★細鐢ㄤ簬鍐欑敤鎴锋敞鍐屽彿
+ */
+public class RegisteredCard extends BaseCard implements Serializable {
+    public String cardType = CardCommon.REGISTERED_CARD_TYPE;//鍗$被鍨�
+
+    public String getCardData() {
+        return cardData;
+    }
+
+    public byte[] toByte(QHOnLineAppDatabase QHOnLineAppDatabase) {
+        setCardData(QHOnLineAppDatabase, cardType);
+        Zero zero = new Zero();
+        return zero.toByte();
+    }
+
+    public class Zero {
+        public byte[] toByte() {
+            byte[] data = new byte[16];
+            data[0] = HexUtil.hexToByte(cardType);
+            byte[] cardDatas = HexUtil.hexToByteArray(cardData);
+            System.arraycopy(cardDatas, 0, data, 1, cardDatas.length);
+            data[15] = getByteSum(data);
+            return data;
+        }
+
+    }
+}
diff --git a/qiheonlinelibrary/src/main/java/com/dayu/qiheonlinelibrary/card/TestCard.java b/qiheonlinelibrary/src/main/java/com/dayu/qiheonlinelibrary/card/TestCard.java
new file mode 100644
index 0000000..23164bd
--- /dev/null
+++ b/qiheonlinelibrary/src/main/java/com/dayu/qiheonlinelibrary/card/TestCard.java
@@ -0,0 +1,41 @@
+package com.dayu.qiheonlinelibrary.card;
+
+import com.dayu.baselibrary.tools.HexUtil;
+import com.dayu.qiheonlinelibrary.dao.QHOnLineAppDatabase;
+import com.dayu.qiheonlinelibrary.utils.CardCommon;
+
+
+import java.io.Serializable;
+
+/**
+ * Copyright (C), 2023,
+ * Author: zuo
+ * Date: 2023-11-08 13:23
+ * Description: 娴嬭瘯鍗�
+ */
+public class TestCard extends BaseCard implements Serializable {
+    public String cardType = CardCommon.TEST_CARD_TYPE;//鍗$被鍨�
+
+    public String getCardData() {
+        return cardData;
+    }
+
+    public byte[] toByte(QHOnLineAppDatabase QHOnLineAppDatabase) {
+        setCardData(QHOnLineAppDatabase, cardType);
+        Zero zero = new Zero();
+        return zero.toByte();
+    }
+
+    public class Zero {
+        public byte[] toByte() {
+            byte[] data = new byte[16];
+            data[0] = HexUtil.hexToByte(cardType);
+            byte[] cardDatas = HexUtil.hexToByteArray(cardData);
+            System.arraycopy(cardDatas, 0, data, 1, cardDatas.length);
+            data[15] = getByteSum(data);
+            return data;
+        }
+
+    }
+}
+
diff --git a/qiheonlinelibrary/src/main/java/com/dayu/qiheonlinelibrary/card/UserCard.java b/qiheonlinelibrary/src/main/java/com/dayu/qiheonlinelibrary/card/UserCard.java
new file mode 100644
index 0000000..b26f931
--- /dev/null
+++ b/qiheonlinelibrary/src/main/java/com/dayu/qiheonlinelibrary/card/UserCard.java
@@ -0,0 +1,331 @@
+package com.dayu.qiheonlinelibrary.card;
+
+import com.dayu.baselibrary.tools.HexUtil;
+
+import com.dayu.qiheonlinelibrary.utils.CardCommon;
+import com.tencent.bugly.crashreport.CrashReport;
+
+import java.io.Serializable;
+import java.util.Calendar;
+import java.util.List;
+
+/**
+ * Copyright (C), 2023,
+ * Author: zuo
+ * Date: 2023-11-07 9:37
+ * Description: 榻愭渤椤圭洰鐢ㄦ埛鍗$粨鏋�
+ */
+public class UserCard implements Serializable {
+    public String cardType = CardCommon.USER_CARD_TYPE_1;//鍐欏崱鏍囧織 A1鍒峰崱寮�娉靛墠 A8鍒峰崱寮�娉靛悗  A2鍙犲姞鍏呭��
+
+    public int arerNumber;//鍖哄煙鍙�(搴曚綅鍦ㄥ墠楂樹綅鍦ㄥ悗)
+
+    public int deviceNumberl;//璁惧缂栧彿(搴曚綅鍦ㄥ墠楂樹綅鍦ㄥ悗)
+    public short rechargeTimes;//鍏呭�兼鏁�
+
+    public int totalWater;//鐢ㄦ埛鎬荤敤姘撮噺  搴曚綅鍦ㄥ墠锛岄珮浣嶅湪鍚�2浣嶅皬鏁扮偣  鍚袱涓皬鏁扮偣鐨勬暣鏁�
+
+    public int totalElectric;//鎬荤敤鐢甸噺浣� 搴曚綅鍦ㄥ墠锛岄珮浣嶅湪鍚�  1浣嶅皬鏁扮偣  鍚�1浣嶅皬鏁扮偣鐨勬暣鏁�
+
+    public int balance;//鍓╀綑閲戦 搴曚綅鍦ㄥ墠  2浣嶅皬鏁扮偣锛屽崟浣嶅垎
+
+    public int surplusWater;//鍓╀綑姘撮噺 搴曚綅鍦ㄥ墠  2浣嶅皬鏁扮偣銆�鍗曚綅绔嬫柟绫� (璺熶环鏍间竴鏍峰厛涔樹互100)
+
+    public Calendar rechargeDate;// 璐按鏃堕棿 BCD
+
+
+    /**
+     * 閫氳繃byte杞琤ean
+     *
+     * @param data
+     */
+    public static UserCard getBean(List<byte[]> data) {
+        try {
+            UserCard userCard = new UserCard();
+            //绗�0鍧楄В鏋�
+            byte[] zero = data.get(0);
+
+            userCard.cardType = HexUtil.byteToHex(zero[0]);
+
+            byte[] arerNumberByte = new byte[2];
+            System.arraycopy(zero, 1, arerNumberByte, 0, arerNumberByte.length);
+            userCard.arerNumber =  HexUtil.get16To10LowHightByBytes(arerNumberByte);
+
+            byte[] deviceNumberlByte = new byte[2];
+            System.arraycopy(zero, 3, deviceNumberlByte, 0, deviceNumberlByte.length);
+            userCard.deviceNumberl =  HexUtil.get16To10LowHightByBytes(deviceNumberlByte);
+
+            userCard.rechargeTimes = HexUtil.hexToByte(HexUtil.byteToHex(zero[5]));
+
+            byte[] totalWaterByte = new byte[4];
+            System.arraycopy(zero, 6, totalWaterByte, 0, totalWaterByte.length);
+            userCard.totalWater = HexUtil.get16To10LowHightByBytes(totalWaterByte);
+
+            byte[] totalElectricByte = new byte[4];
+            System.arraycopy(zero, 10, totalElectricByte, 0, totalElectricByte.length);
+            userCard.totalElectric = HexUtil.get16To10LowHightByBytes(totalElectricByte);
+
+            //绗�1鍧楄В鏋�
+            byte[] one = data.get(1);
+            byte[] balanceByte = new byte[4];
+            System.arraycopy(one, 0, balanceByte, 0, balanceByte.length);
+            userCard.balance =HexUtil.get16To10LowHightByBytes(balanceByte);
+
+            byte[] surplusWaterByte = new byte[4];
+            System.arraycopy(one, 4, surplusWaterByte, 0, surplusWaterByte.length);
+            userCard.surplusWater = HexUtil.get16To10LowHightByBytes(surplusWaterByte);
+
+            byte[] rechargeDateByte = new byte[3];
+            System.arraycopy(one, 12, rechargeDateByte, 0, rechargeDateByte.length);
+
+            int year = HexUtil.getBcdToInt(one[12]);
+            int month = HexUtil.getBcdToInt(one[13]);
+            int day = HexUtil.getBcdToInt(one[14]);
+
+            Calendar calendar = Calendar.getInstance();
+            calendar.set(2000 + year, month, day, 0, 0, 0);
+            userCard.rechargeDate = calendar;
+
+            return userCard;
+
+        } catch (Exception e) {
+            e.printStackTrace();
+            return null;
+        }
+
+    }
+
+
+    /**
+     * 鐢ㄦ埛鍗�0鍧�
+     */
+    public class Zero extends BaseCard {
+        public byte[] toByte() {
+            try {
+                byte[] data = new byte[16];
+                data[0] = HexUtil.hexToByte(cardType);
+                //鍖哄煙鍙�
+                byte[] arerNumberBytes = new byte[2];
+                byte[] arerNumberDatas = HexUtil.hexToByteArray(HexUtil.get10To16LowHigh(arerNumber));
+                System.arraycopy(arerNumberDatas, 0, arerNumberBytes, 0, arerNumberDatas.length);
+                if (arerNumberBytes != null) {
+                    System.arraycopy(arerNumberBytes, 0, data, 1, arerNumberBytes.length);
+                }
+                //璁惧缂栧彿
+                byte[] deviceNumberlBytes = new byte[2];
+                byte[] deviceNumberlDatas = HexUtil.hexToByteArray(HexUtil.get10To16LowHigh(deviceNumberl));
+                System.arraycopy(deviceNumberlDatas, 0, deviceNumberlBytes, 0, deviceNumberlDatas.length);
+                if (deviceNumberlBytes != null) {
+                    System.arraycopy(deviceNumberlBytes, 0, data, 3, deviceNumberlBytes.length);
+                }
+                //鍏呭�兼鏁�
+                byte rechargeTimesByte = HexUtil.hexToByte(HexUtil.get10to16(rechargeTimes));
+                data[5] = rechargeTimesByte;
+
+                //鐢ㄦ埛鎬荤敤姘撮噺
+                byte[] totalWaterBytes = new byte[4];
+                byte[] totalWaterDatas = HexUtil.hexToByteArray(HexUtil.get10To16LowHigh(totalWater));
+                System.arraycopy(totalWaterDatas, 0, totalWaterBytes, 0, totalWaterDatas.length);
+                if (totalWaterBytes != null) {
+                    System.arraycopy(totalWaterBytes, 0, data, 6, totalWaterBytes.length);
+                }
+                //鎬荤敤鐢甸噺浣�
+                byte[] totalElectricBytes = new byte[4];
+                byte[] totalElectricDatas = HexUtil.hexToByteArray(HexUtil.get10To16LowHigh(totalElectric));
+                System.arraycopy(totalElectricDatas, 0, totalElectricBytes, 0, totalElectricDatas.length);
+                if (totalElectricBytes != null) {
+                    System.arraycopy(totalElectricBytes, 0, data, 10, totalElectricBytes.length);
+                }
+                data[15] = getByteSum(data);
+                return data;
+            } catch (Exception e) {
+                e.printStackTrace();
+            }
+
+            return null;
+        }
+
+    }
+
+    /**
+     * 鐢ㄦ埛鍗�1鍧�
+     */
+    public class One extends BaseCard {
+
+        public byte[] toBytes() {
+            byte[] data = new byte[16];
+
+
+            try {
+                byte[] balanceBytes = new byte[4];
+                byte[] balanceDatas = HexUtil.hexToByteArray(HexUtil.get10To16LowHigh(balance));
+                System.arraycopy(balanceDatas, 0, balanceBytes, 0, balanceDatas.length);
+                if (balanceBytes != null) {
+                    System.arraycopy(balanceBytes, 0, data, 0, balanceBytes.length);
+                }
+
+                byte[] surplusWaterBytes = new byte[4];
+                byte[] surplusWaterDatas = HexUtil.hexToByteArray(HexUtil.get10To16LowHigh(surplusWater));
+                System.arraycopy(surplusWaterDatas, 0, surplusWaterBytes, 0, surplusWaterDatas.length);
+                if (surplusWaterBytes != null) {
+                    System.arraycopy(surplusWaterBytes, 0, data, 4, surplusWaterBytes.length);
+                }
+
+                if (rechargeDate != null) {
+                    // 鑾峰彇骞淬�佹湀銆佹棩銆佹椂銆佸垎銆佺
+                    int year = (rechargeDate.get(Calendar.YEAR)) % 1000;
+                    int month = rechargeDate.get(Calendar.MONTH) + 1; // 鏈堜唤浠�0寮�濮嬶紝鎵�浠ラ渶瑕佸姞1
+                    int day = rechargeDate.get(Calendar.DAY_OF_MONTH);
+                    byte bcdYear = HexUtil.getIntToBCD(year)[0];
+                    byte bcdMonth = HexUtil.getIntToBCD(month)[0];
+                    byte bcdDay = HexUtil.getIntToBCD(day)[0];
+                    data[12] = bcdYear;
+                    data[13] = bcdMonth;
+                    data[14] = bcdDay;
+                }
+
+                data[15] = getByteSum(data);
+            } catch (Exception e) {
+                e.printStackTrace();
+                CrashReport.postCatchedException(e);
+            }
+            return data;
+        }
+
+
+    }
+
+    /**
+     * 鐢ㄦ埛鍗�2鍧�
+     */
+    public class Two extends BaseCard {
+        public byte[] toBytes() {
+            byte[] data = new byte[16];
+
+            try {
+                byte[] balanceBytes = new byte[4];
+                byte[] balanceDatas = HexUtil.hexToByteArray(HexUtil.get10To16LowHigh(balance));
+                System.arraycopy(balanceDatas, 0, balanceBytes, 0, balanceDatas.length);
+                if (balanceBytes != null) {
+                    System.arraycopy(balanceBytes, 0, data, 0, balanceBytes.length);
+                }
+
+                byte[] surplusWaterBytes = new byte[4];
+                byte[] surplusWaterDatas = HexUtil.hexToByteArray(HexUtil.get10To16LowHigh(surplusWater));
+                System.arraycopy(surplusWaterDatas, 0, surplusWaterBytes, 0, surplusWaterDatas.length);
+                if (surplusWaterBytes != null) {
+                    System.arraycopy(surplusWaterBytes, 0, data, 4, surplusWaterBytes.length);
+                }
+
+                if (rechargeDate != null) {
+                    // 鑾峰彇骞淬�佹湀銆佹棩銆佹椂銆佸垎銆佺
+                    int year = (rechargeDate.get(Calendar.YEAR)) % 1000;
+                    int month = rechargeDate.get(Calendar.MONTH) + 1; // 鏈堜唤浠�0寮�濮嬶紝鎵�浠ラ渶瑕佸姞1
+                    int day = rechargeDate.get(Calendar.DAY_OF_MONTH);
+                    byte bcdYear = HexUtil.getIntToBCD(year)[0];
+                    byte bcdMonth = HexUtil.getIntToBCD(month)[0];
+                    byte bcdDay = HexUtil.getIntToBCD(day)[0];
+                    data[12] = bcdYear;
+                    data[13] = bcdMonth;
+                    data[14] = bcdDay;
+                }
+
+                data[15] = getByteSum(data);
+            } catch (Exception e) {
+                e.printStackTrace();
+                CrashReport.postCatchedException(e);
+            }
+            return data;
+        }
+    }
+
+    public byte[] getZeroBytes() {
+        Zero zero = new Zero();
+        return zero.toByte();
+    }
+
+    public byte[] getOneBytes() {
+        One zero = new One();
+        return zero.toBytes();
+    }
+
+    public byte[] getTwoBytes() {
+        Two zero = new Two();
+        return zero.toBytes();
+    }
+
+
+    public String getCardType() {
+        return cardType;
+    }
+
+    public void setCardType(String cardType) {
+        this.cardType = cardType;
+    }
+
+    public int getArerNumber() {
+        return arerNumber;
+    }
+
+    public void setArerNumber(int arerNumber) {
+        this.arerNumber = arerNumber;
+    }
+
+    public int getDeviceNumberl() {
+        return deviceNumberl;
+    }
+
+    public void setDeviceNumberl(int deviceNumberl) {
+        this.deviceNumberl = deviceNumberl;
+    }
+
+    public short getRechargeTimes() {
+        return rechargeTimes;
+    }
+
+    public void setRechargeTimes(short rechargeTimes) {
+        this.rechargeTimes = rechargeTimes;
+    }
+
+    public int getTotalWater() {
+        return totalWater;
+    }
+
+    public void setTotalWater(int totalWater) {
+        this.totalWater = totalWater;
+    }
+
+    public int getTotalElectric() {
+        return totalElectric;
+    }
+
+    public void setTotalElectric(int totalElectric) {
+        this.totalElectric = totalElectric;
+    }
+
+    public int getBalance() {
+        return balance;
+    }
+
+    public void setBalance(int balance) {
+        this.balance = balance;
+    }
+
+    public int getSurplusWater() {
+        return surplusWater;
+    }
+
+    public void setSurplusWater(int surplusWater) {
+        this.surplusWater = surplusWater;
+    }
+
+    public Calendar getRechargeDate() {
+        return rechargeDate;
+    }
+
+    public void setRechargeDate(Calendar rechargeDate) {
+        this.rechargeDate = rechargeDate;
+    }
+
+
+}
diff --git a/qiheonlinelibrary/src/main/java/com/dayu/qiheonlinelibrary/dao/AdminDataDao.java b/qiheonlinelibrary/src/main/java/com/dayu/qiheonlinelibrary/dao/AdminDataDao.java
new file mode 100644
index 0000000..dd4b3ca
--- /dev/null
+++ b/qiheonlinelibrary/src/main/java/com/dayu/qiheonlinelibrary/dao/AdminDataDao.java
@@ -0,0 +1,32 @@
+package com.dayu.qiheonlinelibrary.dao;
+
+import androidx.room.Dao;
+import androidx.room.Delete;
+import androidx.room.Insert;
+import androidx.room.OnConflictStrategy;
+import androidx.room.Query;
+import androidx.room.Update;
+
+import com.dayu.qiheonlinelibrary.dbBean.AdminDataBean;
+
+
+/**
+ * Copyright (C), 2023,
+ * Author: zuo
+ * Date: 2023-11-06 11:41
+ * Description:
+ */
+@Dao
+public interface AdminDataDao {
+    @Insert(onConflict = OnConflictStrategy.REPLACE)
+    void insert(AdminDataBean adminData);
+
+    @Update
+    void update(AdminDataBean adminData);
+
+    @Delete
+    void delete(AdminDataBean adminData);
+
+    @Query("select  * from AdminDataBean limit 1")
+    AdminDataBean findFirst();
+}
diff --git a/qiheonlinelibrary/src/main/java/com/dayu/qiheonlinelibrary/dao/BaseDaoSingleton.java b/qiheonlinelibrary/src/main/java/com/dayu/qiheonlinelibrary/dao/BaseDaoSingleton.java
new file mode 100644
index 0000000..776fb80
--- /dev/null
+++ b/qiheonlinelibrary/src/main/java/com/dayu/qiheonlinelibrary/dao/BaseDaoSingleton.java
@@ -0,0 +1,47 @@
+package com.dayu.qiheonlinelibrary.dao;
+
+import android.content.Context;
+import android.os.Environment;
+
+import androidx.room.Room;
+
+import java.io.File;
+
+/**
+ * Copyright (C), 2023,
+ * Author: zuo
+ * Date: 2023-11-06 16:58
+ * Description: 鍒涘缓鏁版嵁搴撳疄渚�
+ */
+public class BaseDaoSingleton {
+    public static QHOnLineAppDatabase baseDao;
+    public static QHOnLineAppDatabase AsynchBaseDao;
+    public static String SqlitePath = Environment.getExternalStorageDirectory().getAbsolutePath() + File.separator + ".dayu" + File.separator + "data" + File.separator;
+
+    //MyFileUtil.SqlitePath +
+    public static QHOnLineAppDatabase getInstance(Context context) {
+        if (baseDao == null) {
+            baseDao = Room.databaseBuilder(
+                    context,
+                    QHOnLineAppDatabase.class,
+                    SqlitePath + "ConfigurationData_qiheOnLine"
+            ).allowMainThreadQueries().build();
+        }
+        return baseDao;
+    }
+
+    public static QHOnLineAppDatabase getAsynchInstance(Context context) {
+
+        if (AsynchBaseDao == null) {
+            AsynchBaseDao = Room.databaseBuilder(
+                    context,
+                    QHOnLineAppDatabase.class,
+                    SqlitePath + "ConfigurationData_qiheOnLine"
+            ).build();
+        }
+        return AsynchBaseDao;
+
+    }
+
+
+}
diff --git a/qiheonlinelibrary/src/main/java/com/dayu/qiheonlinelibrary/dao/CardDataDao.java b/qiheonlinelibrary/src/main/java/com/dayu/qiheonlinelibrary/dao/CardDataDao.java
new file mode 100644
index 0000000..ac77e89
--- /dev/null
+++ b/qiheonlinelibrary/src/main/java/com/dayu/qiheonlinelibrary/dao/CardDataDao.java
@@ -0,0 +1,31 @@
+package com.dayu.qiheonlinelibrary.dao;
+
+import androidx.room.Dao;
+import androidx.room.Insert;
+import androidx.room.OnConflictStrategy;
+import androidx.room.Query;
+import androidx.room.Update;
+
+import com.dayu.qiheonlinelibrary.dbBean.CardData;
+
+
+/**
+ * Created by Android Studio.
+ * author: zuo
+ * Date: 2023-12-14
+ * Time: 10:08
+ * 澶囨敞锛�
+ */
+@Dao
+public interface CardDataDao {
+    @Insert(onConflict = OnConflictStrategy.REPLACE)
+    void insert(CardData cardData);
+
+    @Update
+    void update(CardData cardData);
+
+    @Query("select  * from CardData where cardType=:cardType limit 1")
+    CardData findFirst(String cardType);
+
+
+}
diff --git a/qiheonlinelibrary/src/main/java/com/dayu/qiheonlinelibrary/dao/DeviceNumberDao.java b/qiheonlinelibrary/src/main/java/com/dayu/qiheonlinelibrary/dao/DeviceNumberDao.java
new file mode 100644
index 0000000..0db3482
--- /dev/null
+++ b/qiheonlinelibrary/src/main/java/com/dayu/qiheonlinelibrary/dao/DeviceNumberDao.java
@@ -0,0 +1,32 @@
+package com.dayu.qiheonlinelibrary.dao;
+
+import androidx.room.Dao;
+import androidx.room.Delete;
+import androidx.room.Insert;
+import androidx.room.OnConflictStrategy;
+import androidx.room.Query;
+import androidx.room.Update;
+
+import com.dayu.qiheonlinelibrary.dbBean.DeviceNumber;
+
+
+/**
+ * Copyright (C), 2023,
+ * Author: zuo
+ * Date: 2023-11-11 0:55
+ * Description:鍚庡彴杩斿洖鐨勮澶囩爜
+ */
+@Dao
+public interface DeviceNumberDao {
+    @Insert(onConflict = OnConflictStrategy.REPLACE)
+    void insert(DeviceNumber deviceNumber);
+
+    @Update
+    void update(DeviceNumber IpBean);
+
+    @Delete
+    void delete(DeviceNumber IpBean);
+
+    @Query("select  * from DeviceNumber limit 1")
+    DeviceNumber findFirst();
+}
diff --git a/qiheonlinelibrary/src/main/java/com/dayu/qiheonlinelibrary/dao/DomainPortDao.java b/qiheonlinelibrary/src/main/java/com/dayu/qiheonlinelibrary/dao/DomainPortDao.java
new file mode 100644
index 0000000..b11a7b3
--- /dev/null
+++ b/qiheonlinelibrary/src/main/java/com/dayu/qiheonlinelibrary/dao/DomainPortDao.java
@@ -0,0 +1,35 @@
+package com.dayu.qiheonlinelibrary.dao;
+
+import androidx.room.Dao;
+import androidx.room.Delete;
+import androidx.room.Insert;
+import androidx.room.OnConflictStrategy;
+import androidx.room.Query;
+import androidx.room.Update;
+
+import com.dayu.qiheonlinelibrary.dbBean.DomainBean;
+
+
+/**
+ * Copyright (C), 2023,
+ * Author: zuo
+ * Date: 2023-11-11 0:55
+ * Description:淇濆瓨鐨勫煙鍚嶅拰绔彛鍙�
+ */
+@Dao
+public interface DomainPortDao {
+
+    @Insert(onConflict = OnConflictStrategy.REPLACE)
+    void insert(DomainBean DomainBean);
+
+    @Update
+    void update(DomainBean DomainBean);
+
+    @Delete
+    void delete(DomainBean DomainBean);
+
+    @Query("select  * from DomainBean limit 1")
+    DomainBean findFirst();
+
+
+}
diff --git a/qiheonlinelibrary/src/main/java/com/dayu/qiheonlinelibrary/dao/ElectricPriceDao.java b/qiheonlinelibrary/src/main/java/com/dayu/qiheonlinelibrary/dao/ElectricPriceDao.java
new file mode 100644
index 0000000..1dc5844
--- /dev/null
+++ b/qiheonlinelibrary/src/main/java/com/dayu/qiheonlinelibrary/dao/ElectricPriceDao.java
@@ -0,0 +1,32 @@
+package com.dayu.qiheonlinelibrary.dao;
+
+import androidx.room.Dao;
+import androidx.room.Delete;
+import androidx.room.Insert;
+import androidx.room.OnConflictStrategy;
+import androidx.room.Query;
+import androidx.room.Update;
+
+import com.dayu.qiheonlinelibrary.dbBean.ElectricPriceBean;
+
+
+/**
+ * Copyright (C), 2023,
+ * Author: zuo
+ * Date: 2023-11-10 10:26
+ * Description:
+ */
+@Dao
+public interface ElectricPriceDao {
+    @Insert(onConflict = OnConflictStrategy.REPLACE)
+    void insert(ElectricPriceBean ElectricPriceBean);
+
+    @Update
+    void update(ElectricPriceBean ElectricPriceBean);
+
+    @Delete
+    void delete(ElectricPriceBean ElectricPriceBean);
+
+    @Query("select  * from ElectricPriceBean limit 1")
+    ElectricPriceBean findFirst();
+}
diff --git a/qiheonlinelibrary/src/main/java/com/dayu/qiheonlinelibrary/dao/IdentityDao.java b/qiheonlinelibrary/src/main/java/com/dayu/qiheonlinelibrary/dao/IdentityDao.java
new file mode 100644
index 0000000..0100936
--- /dev/null
+++ b/qiheonlinelibrary/src/main/java/com/dayu/qiheonlinelibrary/dao/IdentityDao.java
@@ -0,0 +1,34 @@
+package com.dayu.qiheonlinelibrary.dao;
+
+import androidx.room.Dao;
+import androidx.room.Delete;
+import androidx.room.Insert;
+import androidx.room.OnConflictStrategy;
+import androidx.room.Query;
+import androidx.room.Update;
+
+import com.dayu.qiheonlinelibrary.dbBean.IdentityBean;
+
+
+/**
+ * Created by Android Studio.
+ * author: zuo
+ * Date: 2023-11-20
+ * Time: 10:42
+ * 澶囨敞锛�
+ */
+@Dao
+public interface IdentityDao {
+
+    @Insert(onConflict = OnConflictStrategy.REPLACE)
+    void insert(IdentityBean identityBean);
+
+    @Update
+    void update(IdentityBean identityBean);
+
+    @Delete
+    void delete(IdentityBean identityBean);
+
+    @Query("select  * from IdentityBean limit 1")
+    IdentityBean findFirst();
+}
diff --git a/qiheonlinelibrary/src/main/java/com/dayu/qiheonlinelibrary/dao/IpDao.java b/qiheonlinelibrary/src/main/java/com/dayu/qiheonlinelibrary/dao/IpDao.java
new file mode 100644
index 0000000..a41b422
--- /dev/null
+++ b/qiheonlinelibrary/src/main/java/com/dayu/qiheonlinelibrary/dao/IpDao.java
@@ -0,0 +1,32 @@
+package com.dayu.qiheonlinelibrary.dao;
+
+import androidx.room.Dao;
+import androidx.room.Delete;
+import androidx.room.Insert;
+import androidx.room.OnConflictStrategy;
+import androidx.room.Query;
+import androidx.room.Update;
+
+import com.dayu.qiheonlinelibrary.dbBean.IpBean;
+
+
+/**
+ * Copyright (C), 2023,
+ * Author: zuo
+ * Date: 2023-11-09 11:57
+ * Description:
+ */
+@Dao
+public interface IpDao {
+    @Insert(onConflict = OnConflictStrategy.REPLACE)
+    void insert(IpBean IpBean);
+
+    @Update
+    void update(IpBean IpBean);
+
+    @Delete
+    void delete(IpBean IpBean);
+
+    @Query("select  * from IpBean limit 1")
+    IpBean findFirst();
+}
diff --git a/qiheonlinelibrary/src/main/java/com/dayu/qiheonlinelibrary/dao/PassWordCardDao.java b/qiheonlinelibrary/src/main/java/com/dayu/qiheonlinelibrary/dao/PassWordCardDao.java
new file mode 100644
index 0000000..4f1ddca
--- /dev/null
+++ b/qiheonlinelibrary/src/main/java/com/dayu/qiheonlinelibrary/dao/PassWordCardDao.java
@@ -0,0 +1,32 @@
+package com.dayu.qiheonlinelibrary.dao;
+
+import androidx.room.Dao;
+import androidx.room.Delete;
+import androidx.room.Insert;
+import androidx.room.OnConflictStrategy;
+import androidx.room.Query;
+import androidx.room.Update;
+
+import com.dayu.qiheonlinelibrary.dbBean.PassWordCardBean;
+
+
+/**
+ * Copyright (C), 2023,
+ * Author: zuo
+ * Date: 2023-11-08 21:27
+ * Description: 瀵嗙爜鍗�
+ */
+@Dao
+public interface PassWordCardDao {
+    @Insert(onConflict = OnConflictStrategy.REPLACE)
+    void insert(PassWordCardBean passWordBean);
+
+    @Update
+    void update(PassWordCardBean passWordBean);
+
+    @Delete
+    void delete(PassWordCardBean passWordBean);
+
+    @Query("select  * from PassWordCardBean limit 1")
+    PassWordCardBean findFirst();
+}
diff --git a/qiheonlinelibrary/src/main/java/com/dayu/qiheonlinelibrary/dao/PowerDao.java b/qiheonlinelibrary/src/main/java/com/dayu/qiheonlinelibrary/dao/PowerDao.java
new file mode 100644
index 0000000..694577c
--- /dev/null
+++ b/qiheonlinelibrary/src/main/java/com/dayu/qiheonlinelibrary/dao/PowerDao.java
@@ -0,0 +1,32 @@
+package com.dayu.qiheonlinelibrary.dao;
+
+import androidx.room.Dao;
+import androidx.room.Delete;
+import androidx.room.Insert;
+import androidx.room.OnConflictStrategy;
+import androidx.room.Query;
+import androidx.room.Update;
+
+import com.dayu.qiheonlinelibrary.dbBean.PowerBean;
+
+
+/**
+ * Copyright (C), 2023,
+ * Author: zuo
+ * Date: 2023-11-08 21:27
+ * Description:
+ */
+@Dao
+public interface PowerDao {
+    @Insert(onConflict = OnConflictStrategy.REPLACE)
+    void insert(PowerBean adminData);
+
+    @Update
+    void update(PowerBean adminData);
+
+    @Delete
+    void delete(PowerBean adminData);
+
+    @Query("select  * from PowerBean limit 1")
+    PowerBean findFirst();
+}
diff --git a/qiheonlinelibrary/src/main/java/com/dayu/qiheonlinelibrary/dao/QHOnLineAppDatabase.java b/qiheonlinelibrary/src/main/java/com/dayu/qiheonlinelibrary/dao/QHOnLineAppDatabase.java
new file mode 100644
index 0000000..76e7f9e
--- /dev/null
+++ b/qiheonlinelibrary/src/main/java/com/dayu/qiheonlinelibrary/dao/QHOnLineAppDatabase.java
@@ -0,0 +1,58 @@
+package com.dayu.qiheonlinelibrary.dao;
+
+import androidx.room.Database;
+import androidx.room.RoomDatabase;
+
+import com.dayu.qiheonlinelibrary.dbBean.AdminDataBean;
+import com.dayu.qiheonlinelibrary.dbBean.CardData;
+import com.dayu.qiheonlinelibrary.dbBean.DeviceNumber;
+import com.dayu.qiheonlinelibrary.dbBean.DomainBean;
+import com.dayu.qiheonlinelibrary.dbBean.ElectricPriceBean;
+import com.dayu.qiheonlinelibrary.dbBean.IdentityBean;
+import com.dayu.qiheonlinelibrary.dbBean.IpBean;
+import com.dayu.qiheonlinelibrary.dbBean.PassWordCardBean;
+import com.dayu.qiheonlinelibrary.dbBean.PowerBean;
+import com.dayu.qiheonlinelibrary.dbBean.RechargeBean;
+import com.dayu.qiheonlinelibrary.dbBean.RegionBean;
+import com.dayu.qiheonlinelibrary.dbBean.UserCardBean;
+
+
+/**
+ * Copyright (C), 2023,
+ * Author: zuo
+ * Date: 2023-11-05 16:23
+ * Description:
+ */
+@Database(entities = {RegionBean.class, PassWordCardBean.class, CardData.class, DeviceNumber.class, IdentityBean.class, DomainBean.class, ElectricPriceBean.class, IpBean.class, AdminDataBean.class,  UserCardBean.class, RechargeBean.class, PowerBean.class}, version = 1, exportSchema = false)
+public abstract class QHOnLineAppDatabase extends RoomDatabase {
+
+
+    public abstract AdminDataDao adminDao();
+
+
+
+    public abstract UserCardDao userCardDao();
+
+    public abstract RechargeDao rechargeDao();
+
+    public abstract PowerDao powerDao();
+
+    public abstract IpDao ipDao();
+
+    public abstract ElectricPriceDao electricPriceDao();
+
+    public abstract DomainPortDao domainPortDao();
+
+    public abstract IdentityDao identityDao();
+
+    public abstract DeviceNumberDao deviceNumberDao();
+
+    public abstract CardDataDao cardDataDao();
+
+    public abstract PassWordCardDao passWordCardDao();
+
+    public abstract RegionDao regionDao();
+
+
+
+}
diff --git a/qiheonlinelibrary/src/main/java/com/dayu/qiheonlinelibrary/dao/RechargeDao.java b/qiheonlinelibrary/src/main/java/com/dayu/qiheonlinelibrary/dao/RechargeDao.java
new file mode 100644
index 0000000..483fae9
--- /dev/null
+++ b/qiheonlinelibrary/src/main/java/com/dayu/qiheonlinelibrary/dao/RechargeDao.java
@@ -0,0 +1,45 @@
+package com.dayu.qiheonlinelibrary.dao;
+
+
+import androidx.lifecycle.LiveData;
+import androidx.room.Dao;
+import androidx.room.Delete;
+import androidx.room.Insert;
+import androidx.room.OnConflictStrategy;
+import androidx.room.Query;
+import androidx.room.Update;
+
+import com.dayu.qiheonlinelibrary.dbBean.RechargeBean;
+
+import java.util.List;
+
+
+/**
+ * Copyright (C), 2023,
+ * Author: zuo
+ * Date: 2023-11-06 22:32
+ * Description: 鍏呭��
+ */
+@Dao
+public interface RechargeDao {
+    @Insert(onConflict = OnConflictStrategy.REPLACE)
+    void insert(RechargeBean passWord);
+
+    @Update
+    void update(RechargeBean passWord);
+
+    @Delete
+    void delete(RechargeBean passWord);
+
+    @Query("select  * from RechargeBean order by date desc")
+    LiveData<List<RechargeBean>> findAll();
+
+    @Query("select  * from RechargeBean where date>=:beginTime and date<=:endTime")
+    LiveData<List<RechargeBean>> findByTime(long beginTime, long endTime);
+
+    @Query("select  * from RechargeBean where date>=:beginTime and date<=:endTime")
+    List<RechargeBean> ansyFindByTime(long beginTime, long endTime);
+
+    @Query("select  * from RechargeBean order by date desc LIMIT :limit OFFSET :offset")
+    List<RechargeBean> findAll(int offset,int limit);
+}
diff --git a/qiheonlinelibrary/src/main/java/com/dayu/qiheonlinelibrary/dao/RegionDao.java b/qiheonlinelibrary/src/main/java/com/dayu/qiheonlinelibrary/dao/RegionDao.java
new file mode 100644
index 0000000..f0ecc38
--- /dev/null
+++ b/qiheonlinelibrary/src/main/java/com/dayu/qiheonlinelibrary/dao/RegionDao.java
@@ -0,0 +1,37 @@
+package com.dayu.qiheonlinelibrary.dao;
+
+import androidx.room.Dao;
+import androidx.room.Delete;
+import androidx.room.Insert;
+import androidx.room.OnConflictStrategy;
+import androidx.room.Query;
+import androidx.room.Update;
+
+import com.dayu.qiheonlinelibrary.dbBean.RegionBean;
+
+
+/**
+ * author: zuo
+ * Date: 2024-03-07
+ * Time: 14:17
+ * 澶囨敞锛氬尯鍩熻〃鍙蜂繚瀛�
+ */
+
+@Dao
+public interface RegionDao {
+
+
+    @Insert(onConflict = OnConflictStrategy.REPLACE)
+    void insert(RegionBean adminData);
+
+    @Update
+    void update(RegionBean adminData);
+
+    @Delete
+    void delete(RegionBean adminData);
+
+    @Query("select  * from RegionBean limit 1")
+    RegionBean findFirst();
+
+
+}
diff --git a/qiheonlinelibrary/src/main/java/com/dayu/qiheonlinelibrary/dao/UserCardDao.java b/qiheonlinelibrary/src/main/java/com/dayu/qiheonlinelibrary/dao/UserCardDao.java
new file mode 100644
index 0000000..2eb8572
--- /dev/null
+++ b/qiheonlinelibrary/src/main/java/com/dayu/qiheonlinelibrary/dao/UserCardDao.java
@@ -0,0 +1,49 @@
+package com.dayu.qiheonlinelibrary.dao;
+
+import androidx.room.Dao;
+import androidx.room.Delete;
+import androidx.room.Insert;
+import androidx.room.OnConflictStrategy;
+import androidx.room.Query;
+import androidx.room.Update;
+
+
+import com.dayu.qiheonlinelibrary.dbBean.UserCardBean;
+
+import java.util.List;
+
+/**
+ * Copyright (C), 2023,
+ * Author: zuo
+ * Date: 2023-11-06 21:43
+ * Description:
+ */
+@Dao
+public interface UserCardDao {
+    @Insert(onConflict = OnConflictStrategy.REPLACE)
+    void insert(UserCardBean passWord);
+
+    @Update
+    void update(UserCardBean passWord);
+
+    @Delete
+    void delete(UserCardBean passWord);
+
+    @Query("select  * from UserCardBean order by date desc")
+    List<UserCardBean> findAll();
+
+    @Query("select  * from UserCardBean where date>=:beginTime and date<=:endTime")
+    List<UserCardBean> findByTime(long beginTime, long endTime);
+
+    @Query("select  * from UserCardBean where userName like :data or userID like :data or  phone like :data")
+    List<UserCardBean> findByData(String data);
+
+    @Query("select  * from UserCardBean order by date desc LIMIT :limit OFFSET :offset")
+    List<UserCardBean> findAll(int offset, int limit);
+
+    @Query("select COUNT(*) from UserCardBean")
+    int getUserTotale();
+
+    @Query("select  * from UserCardBean where cardNumber =:data order by date desc")
+    List<UserCardBean> findUserName(String data);
+}
diff --git a/qiheonlinelibrary/src/main/java/com/dayu/qiheonlinelibrary/dbBean/AdminDataBean.java b/qiheonlinelibrary/src/main/java/com/dayu/qiheonlinelibrary/dbBean/AdminDataBean.java
new file mode 100644
index 0000000..127be1d
--- /dev/null
+++ b/qiheonlinelibrary/src/main/java/com/dayu/qiheonlinelibrary/dbBean/AdminDataBean.java
@@ -0,0 +1,126 @@
+package com.dayu.qiheonlinelibrary.dbBean;
+
+import androidx.room.Entity;
+import androidx.room.PrimaryKey;
+
+
+/**
+ * 绠$悊鍛樹俊鎭�
+ */
+@Entity
+public class AdminDataBean {
+
+    @PrimaryKey(autoGenerate = true)
+    public long id;
+
+    public String serial;//搴忓垪鍙�(璁惧缂栧彿)
+
+    public String name;
+
+    public String phone;
+
+
+    public String sheng;
+
+    public String shi;
+
+    public String xian;
+
+    public String zhen;
+
+    public String cun;
+    //鐘舵�� 0鏈笂浼� 1鎴愬姛涓婁紶
+    public int state;
+
+    public String addressCode;//鍖哄煙鍙�
+
+    public int waterPrice;//姘翠环(淇濆瓨鐨勬椂鍊欎箻浠�100鏄剧ず鐨勬椂鍊欓櫎浠�100璺熶綑棰濅竴鏍峰鐞�)
+
+    public int getWaterPrice() {
+        return waterPrice;
+    }
+
+    public void setWaterPrice(int waterPrice) {
+        this.waterPrice = waterPrice;
+    }
+
+    public int getState() {
+        return state;
+    }
+
+    public void setState(int state) {
+        this.state = state;
+    }
+
+    public String getSheng() {
+        return sheng;
+    }
+
+    public void setSheng(String sheng) {
+        this.sheng = sheng;
+    }
+
+    public String getShi() {
+        return shi;
+    }
+
+    public void setShi(String shi) {
+        this.shi = shi;
+    }
+
+    public String getXian() {
+        return xian;
+    }
+
+    public void setXian(String xian) {
+        this.xian = xian;
+    }
+
+    public String getZhen() {
+        return zhen;
+    }
+
+    public void setZhen(String zhen) {
+        this.zhen = zhen;
+    }
+
+    public String getCun() {
+        return cun;
+    }
+
+    public void setCun(String cun) {
+        this.cun = cun;
+    }
+
+    public String getName() {
+        return name;
+    }
+
+    public void setName(String name) {
+        this.name = name;
+    }
+
+    public String getPhone() {
+        return phone;
+    }
+
+    public String getSerial() {
+        return serial;
+    }
+
+    public void setSerial(String serial) {
+        this.serial = serial;
+    }
+
+    public void setPhone(String phone) {
+        this.phone = phone;
+    }
+
+    public String getAddressCode() {
+        return addressCode;
+    }
+
+    public void setAddressCode(String addressCode) {
+        this.addressCode = addressCode;
+    }
+}
diff --git a/qiheonlinelibrary/src/main/java/com/dayu/qiheonlinelibrary/dbBean/CardData.java b/qiheonlinelibrary/src/main/java/com/dayu/qiheonlinelibrary/dbBean/CardData.java
new file mode 100644
index 0000000..6e19749
--- /dev/null
+++ b/qiheonlinelibrary/src/main/java/com/dayu/qiheonlinelibrary/dbBean/CardData.java
@@ -0,0 +1,43 @@
+package com.dayu.qiheonlinelibrary.dbBean;
+
+import androidx.room.Entity;
+import androidx.room.PrimaryKey;
+
+/**
+ * Created by Android Studio.
+ * author: zuo
+ * Date: 2023-12-14
+ * Time: 10:05
+ * 澶囨敞锛� 鍗$浉鍏充俊鎭�
+ */
+@Entity
+public class CardData {
+    @PrimaryKey(autoGenerate = true)
+    public long id;
+
+    /**
+     * 鍗$墖绫诲瀷
+     */
+    public String cardType;
+
+    /**
+     * 鍗℃爣璇�
+     */
+    public String cardIdentifying;
+
+    public String getCardIdentifying() {
+        return cardIdentifying;
+    }
+
+    public void setCardIdentifying(String cardIdentifying) {
+        this.cardIdentifying = cardIdentifying;
+    }
+
+    public String getCardType() {
+        return cardType;
+    }
+
+    public void setCardType(String cardType) {
+        this.cardType = cardType;
+    }
+}
diff --git a/qiheonlinelibrary/src/main/java/com/dayu/qiheonlinelibrary/dbBean/DeviceNumber.java b/qiheonlinelibrary/src/main/java/com/dayu/qiheonlinelibrary/dbBean/DeviceNumber.java
new file mode 100644
index 0000000..72ab7d3
--- /dev/null
+++ b/qiheonlinelibrary/src/main/java/com/dayu/qiheonlinelibrary/dbBean/DeviceNumber.java
@@ -0,0 +1,29 @@
+package com.dayu.qiheonlinelibrary.dbBean;
+
+import androidx.room.Entity;
+import androidx.room.PrimaryKey;
+
+/**
+ * Copyright (C), 2023,
+ * Author: zuo
+ * Date: 2023-11-10 23:22
+ * Description: 璁惧娉ㄥ唽鍙�
+ */
+@Entity
+public class DeviceNumber {
+    @PrimaryKey(autoGenerate = true)
+    public long id;
+    /**
+     * 璁惧娉ㄥ唽鍙�
+     */
+    private String deviceRegistrationNumber;//璁惧娉ㄥ唽鍙�
+
+
+    public String getDeviceRegistrationNumber() {
+        return deviceRegistrationNumber;
+    }
+
+    public void setDeviceRegistrationNumber(String deviceRegistrationNumber) {
+        this.deviceRegistrationNumber = deviceRegistrationNumber;
+    }
+}
diff --git a/qiheonlinelibrary/src/main/java/com/dayu/qiheonlinelibrary/dbBean/DomainBean.java b/qiheonlinelibrary/src/main/java/com/dayu/qiheonlinelibrary/dbBean/DomainBean.java
new file mode 100644
index 0000000..14838b2
--- /dev/null
+++ b/qiheonlinelibrary/src/main/java/com/dayu/qiheonlinelibrary/dbBean/DomainBean.java
@@ -0,0 +1,46 @@
+package com.dayu.qiheonlinelibrary.dbBean;
+
+import androidx.room.Entity;
+import androidx.room.PrimaryKey;
+
+/**
+ * Created by Android Studio.
+ * author: zuo
+ * Date: 2023-11-14
+ * Time: 10:29
+ * 澶囨敞锛� 鍩熷悕鍜岀鍙e彿鐩稿叧
+ */
+@Entity
+public class DomainBean {
+    @PrimaryKey(autoGenerate = true)
+    public long id;
+
+    private String domainNumber;
+    private int port;
+    private String domain = "";
+
+
+    public String getDomainNumber() {
+        return domainNumber;
+    }
+
+    public void setDomainNumber(String domainNumber) {
+        this.domainNumber = domainNumber;
+    }
+
+    public int getPort() {
+        return port;
+    }
+
+    public void setPort(int port) {
+        this.port = port;
+    }
+
+    public String getDomain() {
+        return domain;
+    }
+
+    public void setDomain(String domain) {
+        this.domain = domain;
+    }
+}
diff --git a/qiheonlinelibrary/src/main/java/com/dayu/qiheonlinelibrary/dbBean/ElectricPriceBean.java b/qiheonlinelibrary/src/main/java/com/dayu/qiheonlinelibrary/dbBean/ElectricPriceBean.java
new file mode 100644
index 0000000..ad01332
--- /dev/null
+++ b/qiheonlinelibrary/src/main/java/com/dayu/qiheonlinelibrary/dbBean/ElectricPriceBean.java
@@ -0,0 +1,25 @@
+package com.dayu.qiheonlinelibrary.dbBean;
+
+import androidx.room.Entity;
+import androidx.room.PrimaryKey;
+
+/**
+ * Copyright (C), 2023,
+ * Author: zuo
+ * Date: 2023-11-10 10:20
+ * Description:鐢甸噺鍗曚环
+ */
+@Entity
+public class ElectricPriceBean {
+    @PrimaryKey(autoGenerate = true)
+    public long id;
+    public float price;//鐢甸噺鍗曚环
+
+    public float getPrice() {
+        return price;
+    }
+
+    public void setPrice(float price) {
+        this.price = price;
+    }
+}
diff --git a/qiheonlinelibrary/src/main/java/com/dayu/qiheonlinelibrary/dbBean/IdentityBean.java b/qiheonlinelibrary/src/main/java/com/dayu/qiheonlinelibrary/dbBean/IdentityBean.java
new file mode 100644
index 0000000..c473c68
--- /dev/null
+++ b/qiheonlinelibrary/src/main/java/com/dayu/qiheonlinelibrary/dbBean/IdentityBean.java
@@ -0,0 +1,34 @@
+package com.dayu.qiheonlinelibrary.dbBean;
+
+import androidx.room.Entity;
+import androidx.room.PrimaryKey;
+
+/**
+ * Created by Android Studio.
+ * author: zuo
+ * Date: 2023-11-20
+ * Time: 10:35
+ * 澶囨敞锛氬崱鏍囪瘑
+ */
+@Entity
+public class IdentityBean {
+    @PrimaryKey(autoGenerate = true)
+    public long id;
+    private String identity = "";
+
+    public long getId() {
+        return id;
+    }
+
+    public void setId(long id) {
+        this.id = id;
+    }
+
+    public String getIdentity() {
+        return identity;
+    }
+
+    public void setIdentity(String identity) {
+        this.identity = identity;
+    }
+}
diff --git a/qiheonlinelibrary/src/main/java/com/dayu/qiheonlinelibrary/dbBean/IpBean.java b/qiheonlinelibrary/src/main/java/com/dayu/qiheonlinelibrary/dbBean/IpBean.java
new file mode 100644
index 0000000..9fa9df4
--- /dev/null
+++ b/qiheonlinelibrary/src/main/java/com/dayu/qiheonlinelibrary/dbBean/IpBean.java
@@ -0,0 +1,42 @@
+package com.dayu.qiheonlinelibrary.dbBean;
+
+import androidx.room.Entity;
+import androidx.room.PrimaryKey;
+
+/**
+ * Copyright (C), 2023,
+ * Author: zuo
+ * Date: 2023-11-09 11:45
+ * Description:
+ */
+@Entity
+public class IpBean {
+    @PrimaryKey(autoGenerate = true)
+    public long id;
+    private int port;
+    private String ip = "";
+
+    public long getId() {
+        return id;
+    }
+
+    public void setId(long id) {
+        this.id = id;
+    }
+
+    public int getPort() {
+        return port;
+    }
+
+    public void setPort(int port) {
+        this.port = port;
+    }
+
+    public String getIp() {
+        return ip;
+    }
+
+    public void setIp(String ip) {
+        this.ip = ip;
+    }
+}
diff --git a/qiheonlinelibrary/src/main/java/com/dayu/qiheonlinelibrary/dbBean/PassWordCardBean.java b/qiheonlinelibrary/src/main/java/com/dayu/qiheonlinelibrary/dbBean/PassWordCardBean.java
new file mode 100644
index 0000000..707ca37
--- /dev/null
+++ b/qiheonlinelibrary/src/main/java/com/dayu/qiheonlinelibrary/dbBean/PassWordCardBean.java
@@ -0,0 +1,36 @@
+package com.dayu.qiheonlinelibrary.dbBean;
+
+import androidx.room.Entity;
+import androidx.room.PrimaryKey;
+
+/**
+ * author: zuo
+ * Date: 2024-03-01
+ * Time: 17:56
+ * 澶囨敞锛氬瘑鐮佸崱瀵嗙爜
+ */
+@Entity
+public class PassWordCardBean {
+
+    @PrimaryKey(autoGenerate = true)
+    public long id;
+    private String passWord = "";
+
+    public long getId() {
+        return id;
+    }
+
+    public void setId(long id) {
+        this.id = id;
+    }
+
+    public String getPassWord() {
+        return passWord;
+    }
+
+    public void setPassWord(String passWord) {
+        this.passWord = passWord;
+    }
+
+
+}
diff --git a/qiheonlinelibrary/src/main/java/com/dayu/qiheonlinelibrary/dbBean/PowerBean.java b/qiheonlinelibrary/src/main/java/com/dayu/qiheonlinelibrary/dbBean/PowerBean.java
new file mode 100644
index 0000000..f55fbeb
--- /dev/null
+++ b/qiheonlinelibrary/src/main/java/com/dayu/qiheonlinelibrary/dbBean/PowerBean.java
@@ -0,0 +1,26 @@
+package com.dayu.qiheonlinelibrary.dbBean;
+
+import androidx.room.Entity;
+import androidx.room.PrimaryKey;
+
+/**
+ * Copyright (C), 2023,
+ * Author: zuo
+ * Date: 2023-11-08 21:26
+ * Description: 閰嶇疆姘存车鍔熺巼
+ */
+@Entity
+public class PowerBean {
+    @PrimaryKey(autoGenerate = true)
+    public long id;
+
+    public String power;//閰嶇疆姘存车鍔熺巼
+
+    public String getPower() {
+        return power;
+    }
+
+    public void setPower(String power) {
+        this.power = power;
+    }
+}
diff --git a/qiheonlinelibrary/src/main/java/com/dayu/qiheonlinelibrary/dbBean/RechargeBean.java b/qiheonlinelibrary/src/main/java/com/dayu/qiheonlinelibrary/dbBean/RechargeBean.java
new file mode 100644
index 0000000..a5740d1
--- /dev/null
+++ b/qiheonlinelibrary/src/main/java/com/dayu/qiheonlinelibrary/dbBean/RechargeBean.java
@@ -0,0 +1,119 @@
+package com.dayu.qiheonlinelibrary.dbBean;
+
+import androidx.room.Entity;
+import androidx.room.PrimaryKey;
+
+/**
+ * Copyright (C), 2023,
+ * Author: zuo
+ * Date: 2023-11-10 19:52
+ * Description: 鍏呭�煎疄浣撶被
+ */
+@Entity
+public class RechargeBean {
+
+    @PrimaryKey(autoGenerate = true)
+    public long id;
+    private String serial;//璁惧搴忓垪鍙�
+    public String userName;
+    public String userId;//鐢ㄦ埛韬唤璇佸彿
+    public long date;
+    public String morny;//鍏呭�奸噾棰� 鍗曚綅鍏�
+    public String rechargeWater;//鍏呭�兼按閲�
+    public String balance;//浣欓 鍗曚綅鍏�
+    public String total_morn;//鎬诲厖鍊奸噾棰�
+    //鐘舵�� 0鏈笂浼� 1鎴愬姛涓婁紶
+    public int state = 0;
+
+    public String cardNumber;//鍗″彿
+    public String surplusWater;//鍓╀綑姘撮噺 搴曚綅鍦ㄥ墠  2浣嶅皬鏁扮偣銆�鍗曚綅鍏�/绔嬫柟绫� ()
+
+    public String getRechargeWater() {
+        return rechargeWater;
+    }
+
+    public void setRechargeWater(String rechargeWater) {
+        this.rechargeWater = rechargeWater;
+    }
+
+    public String getSurplusWater() {
+        return surplusWater;
+    }
+
+    public void setSurplusWater(String surplusWater) {
+        this.surplusWater = surplusWater;
+    }
+
+    public String getCardNumber() {
+        return cardNumber;
+    }
+
+    public void setCardNumber(String cardNumber) {
+        this.cardNumber = cardNumber;
+    }
+
+    public String getTotal_morn() {
+        return total_morn;
+    }
+
+    public String getUserId() {
+        return userId;
+    }
+
+    public void setUserId(String userId) {
+        this.userId = userId;
+    }
+
+    public void setTotal_morn(String total_morn) {
+        this.total_morn = total_morn;
+    }
+
+    public int getState() {
+        return state;
+    }
+
+    public void setState(int state) {
+        this.state = state;
+    }
+
+    public String getSerial() {
+        return serial;
+    }
+
+    public void setSerial(String serial) {
+        this.serial = serial;
+    }
+
+    public String getUserName() {
+        return userName;
+    }
+
+    public void setUserName(String userName) {
+        this.userName = userName;
+    }
+
+
+    public long getDate() {
+        return date;
+    }
+
+    public void setDate(long date) {
+        this.date = date;
+    }
+
+    public String getMorny() {
+        return morny;
+    }
+
+    public void setMorny(String morny) {
+        this.morny = morny;
+    }
+
+    public String getBalance() {
+        return balance;
+    }
+
+    public void setBalance(String balance) {
+        this.balance = balance;
+    }
+}
diff --git a/qiheonlinelibrary/src/main/java/com/dayu/qiheonlinelibrary/dbBean/RegionBean.java b/qiheonlinelibrary/src/main/java/com/dayu/qiheonlinelibrary/dbBean/RegionBean.java
new file mode 100644
index 0000000..1ace1ff
--- /dev/null
+++ b/qiheonlinelibrary/src/main/java/com/dayu/qiheonlinelibrary/dbBean/RegionBean.java
@@ -0,0 +1,37 @@
+package com.dayu.qiheonlinelibrary.dbBean;
+
+import androidx.room.Entity;
+import androidx.room.PrimaryKey;
+
+/**
+ * author: zuo
+ * Date: 2024-03-07
+ * Time: 12:05
+ * 澶囨敞锛�
+ */
+@Entity
+public class RegionBean {
+    @PrimaryKey(autoGenerate = true)
+    public long id;
+
+    public String region;//鍖哄煙鍦板潃
+
+    public String controllerCodel;//鎺у埗鍣ㄧ紪鍙�(浣庡墠楂樺悗) 鏈尯鍩熷唴鎺у埗鍣ㄧ紪鍙�
+
+
+    public String getRegion() {
+        return region;
+    }
+
+    public void setRegion(String region) {
+        this.region = region;
+    }
+
+    public String getControllerCodel() {
+        return controllerCodel;
+    }
+
+    public void setControllerCodel(String controllerCodel) {
+        this.controllerCodel = controllerCodel;
+    }
+}
diff --git a/qiheonlinelibrary/src/main/java/com/dayu/qiheonlinelibrary/dbBean/UserCardBean.java b/qiheonlinelibrary/src/main/java/com/dayu/qiheonlinelibrary/dbBean/UserCardBean.java
new file mode 100644
index 0000000..c017d6b
--- /dev/null
+++ b/qiheonlinelibrary/src/main/java/com/dayu/qiheonlinelibrary/dbBean/UserCardBean.java
@@ -0,0 +1,122 @@
+package com.dayu.qiheonlinelibrary.dbBean;
+
+import androidx.room.Entity;
+import androidx.room.PrimaryKey;
+
+import java.io.Serializable;
+
+
+
+
+
+@Entity
+public class UserCardBean implements Serializable {
+    @PrimaryKey(autoGenerate = true)
+    public long id;
+    private String serial ;//璁惧搴忓垪鍙凤紙涔熸槸璁惧缂栧彿锛�
+
+    private String userName ;//鐢ㄦ埛鍚嶇О
+    private String userID ;//韬唤璇佸彿
+
+    private String cardNumber;//鍗″彿
+
+    private long date;
+    private String phone;
+    //鐘舵�� 0绌洪棽 1浣跨敤
+    private int St = 0;
+    //鏈嶅姟鍣ㄨ繑鍥炵殑鍐滄埛娉ㄥ唽缂栧彿
+    private String initPeasantCode;
+    //鐘舵�� 0鏈笂浼� 1鎴愬姛涓婁紶
+    private int state = 0;
+
+    private String addressCode;//鍖哄煙鍙�
+
+    public String getCardNumber() {
+        return cardNumber;
+    }
+
+    public void setCardNumber(String cardNumber) {
+        this.cardNumber = cardNumber;
+    }
+
+    public String getAddressCode() {
+        return addressCode;
+    }
+
+    public void setAddressCode(String addressCode) {
+        this.addressCode = addressCode;
+    }
+
+    public String getSerial() {
+        return serial;
+    }
+
+    public void setSerial(String serial) {
+        this.serial = serial;
+    }
+
+    public String getInitPeasantCode() {
+        return initPeasantCode;
+    }
+
+    public void setInitPeasantCode(String initPeasantCode) {
+        this.initPeasantCode = initPeasantCode;
+    }
+
+    public int getSt() {
+        return St;
+    }
+
+    public void setSt(int st) {
+        St = st;
+    }
+
+
+
+    public String getPhone() {
+        return phone;
+    }
+
+    public void setPhone(String phone) {
+        this.phone = phone;
+    }
+
+
+
+    public int getState() {
+        return state;
+    }
+
+    public void setState(int state) {
+        this.state = state;
+    }
+
+
+
+    public String getUserName() {
+        return userName;
+    }
+
+    public void setUserName(String userName) {
+        this.userName = userName;
+    }
+
+
+    public long getDate() {
+        return date;
+    }
+
+    public void setDate(long date) {
+        this.date = date;
+    }
+
+
+
+    public String getUserID() {
+        return userID;
+    }
+
+    public void setUserID(String userID) {
+        this.userID = userID;
+    }
+}
diff --git a/qiheonlinelibrary/src/main/java/com/dayu/qiheonlinelibrary/net/ApiCallback.java b/qiheonlinelibrary/src/main/java/com/dayu/qiheonlinelibrary/net/ApiCallback.java
new file mode 100644
index 0000000..51d7b59
--- /dev/null
+++ b/qiheonlinelibrary/src/main/java/com/dayu/qiheonlinelibrary/net/ApiCallback.java
@@ -0,0 +1,13 @@
+package com.dayu.qiheonlinelibrary.net;
+
+/**
+ * Copyright (C), 2023,
+ * Author: zuo
+ * Date: 2023-03-27 14:59
+ * Description:
+ */
+public interface ApiCallback<T> {
+    void onSuccess(T data);
+    void onFailure(String message);
+}
+
diff --git a/qiheonlinelibrary/src/main/java/com/dayu/qiheonlinelibrary/net/ApiManager.java b/qiheonlinelibrary/src/main/java/com/dayu/qiheonlinelibrary/net/ApiManager.java
new file mode 100644
index 0000000..846b7b0
--- /dev/null
+++ b/qiheonlinelibrary/src/main/java/com/dayu/qiheonlinelibrary/net/ApiManager.java
@@ -0,0 +1,160 @@
+package com.dayu.qiheonlinelibrary.net;
+
+import android.content.Context;
+
+
+import com.dayu.qiheonlinelibrary.net.subscribers.BaseProgressSubscriber;
+import com.dayu.qiheonlinelibrary.net.subscribers.ProgressSubscriber;
+import com.dayu.qiheonlinelibrary.net.subscribers.SubscriberListener;
+import com.dayu.qiheonlinelibrary.utils.MyJsonParser;
+
+import java.io.File;
+import java.io.FileNotFoundException;
+import java.io.FileOutputStream;
+import java.io.IOException;
+import java.io.InputStream;
+import java.util.List;
+import java.util.Map;
+import java.util.Objects;
+
+import io.reactivex.rxjava3.android.schedulers.AndroidSchedulers;
+import io.reactivex.rxjava3.annotations.NonNull;
+import io.reactivex.rxjava3.core.Observable;
+import io.reactivex.rxjava3.core.Observer;
+import io.reactivex.rxjava3.disposables.Disposable;
+import io.reactivex.rxjava3.functions.Function;
+import io.reactivex.rxjava3.schedulers.Schedulers;
+import okhttp3.MediaType;
+import okhttp3.MultipartBody;
+import okhttp3.RequestBody;
+import okhttp3.ResponseBody;
+import retrofit2.Call;
+import retrofit2.Callback;
+import retrofit2.Response;
+
+
+/**
+ * Copyright (C), 2023,
+ * Author: zuot
+ * Date: 2023-04-12 9:11
+ * Description:
+ */
+public class ApiManager {
+
+    static ApiManager apiManager;
+    //鏂囦欢涓婁紶澶辫触閲嶅娆℃暟
+    int uplodFilerepeatSize = 3;
+
+    ApiService apiService;
+
+    public static void init() {
+        if (apiManager == null) {
+            apiManager = new ApiManager();
+        }
+    }
+
+    public ApiManager() {
+        apiService = RetrofitClient.getInstance().getApiService();
+    }
+
+    public static ApiManager getInstance() {
+        return apiManager;
+    }
+
+
+    public <T> void requestPostLoading(final Context context, final String path, final Class<T> tClass, final Map<String, Object> params, final SubscriberListener listener) {
+        request(context, false, path, false, tClass, params, listener);
+    }
+
+    public <T> void requestPostHideLoading(final Context context, final String path, final Class<T> tClass, final Map<String, Object> params, final SubscriberListener listener) {
+        request(context, true, path, false, tClass, params, listener);
+    }
+
+    public <T> void requestPost(final Context context, final String path, final Class<T> tClass, final Map<String, Object> params, final SubscriberListener listener) {
+        request(context, false, path, false, tClass, params, listener);
+    }
+
+    /**
+     * 鍙戦�佽姹�
+     *
+     * @param context
+     * @param hideLoading 鏄惁鏄剧ず鍔犺浇妗�  false锛氭樉绀�  true锛氶殣钘�
+     * @param path        璇锋眰璺緞锛屽湪UrlConfig涓畾涔�
+     * @param isGet       鏄惁鏄疓et璇锋眰 true锛歡et 璇锋眰
+     * @param tClass      瀵瑰簲鐨勬暟鎹被鍨�
+     * @param params      Post璇锋眰鏃讹紝瀵瑰簲鐨勫弬鏁�
+     * @param listener    鍥炶皟璇锋眰
+     * @param <T>
+     */
+    public <T> void request(final Context context, final boolean hideLoading, final String path, final boolean isGet, final Class<T> tClass, final Map<String, Object> params, final SubscriberListener listener) {
+        Observable observable;
+        BaseProgressSubscriber<?> mySubscriber;
+
+
+        if (isGet) {
+            if (params == null) {
+                observable = apiService.requestGet(path);
+            } else {
+
+                observable = apiService.requestGet(path, params);
+            }
+        } else {
+            observable = apiService.requestPost(path, params);
+        }
+
+        mySubscriber = new ProgressSubscriber(context, hideLoading, listener);
+        observable.subscribeOn(Schedulers.io()).
+                map(new Function<Object, BaseResponse<T>>() {
+                    @Override
+                    public BaseResponse<T> apply(Object o) {
+                        if (o instanceof BaseResponse) {
+                            BaseResponse tem = (BaseResponse) o;
+                            BaseResponse<T> response = new BaseResponse<>();
+                            response.setCode(tem.getCode());
+                            response.setMsg(tem.getMsg());
+
+                            if (tClass != null && tem.getData() instanceof Map) {
+                                try {
+//                                    response.setData(MyJsonParser.getBeanFromMap((Map<String, Object>) tem.getData(), tClass));
+                                    String jsonData = MyJsonParser.getJsontoMap((Map) tem.getData());
+                                    response.setData(MyJsonParser.getBeanFromJson(jsonData, tClass));
+                                } catch (Exception e) {
+                                    e.printStackTrace();
+                                }
+                            } else if (tClass != null && tem.getData() instanceof List) {
+                                try {
+                                    response.setData((T) MyJsonParser.getListByJson(MyJsonParser.getJsonbyList((List) tem.getData()), tClass));
+                                } catch (Exception e) {
+                                    e.printStackTrace();
+                                }
+                            } else if (tClass != null && tem.getData() instanceof Integer) {
+                                response.setData((T) tem.getData());
+                            }
+                            if (tClass != null && tClass.getName() instanceof String && tem.getData() instanceof String) {
+                                try {
+                                    response.setData((T) tem.getData());
+                                } catch (Exception e) {
+                                    e.printStackTrace();
+                                }
+                            }
+                            return response;
+
+
+                        }
+
+                        return null;
+                    }
+                })
+                .unsubscribeOn(Schedulers.newThread())
+                .observeOn(AndroidSchedulers.mainThread())
+                .subscribe(mySubscriber);
+
+    }
+
+
+
+
+
+
+
+}
\ No newline at end of file
diff --git a/qiheonlinelibrary/src/main/java/com/dayu/qiheonlinelibrary/net/ApiService.java b/qiheonlinelibrary/src/main/java/com/dayu/qiheonlinelibrary/net/ApiService.java
new file mode 100644
index 0000000..988dbc7
--- /dev/null
+++ b/qiheonlinelibrary/src/main/java/com/dayu/qiheonlinelibrary/net/ApiService.java
@@ -0,0 +1,54 @@
+package com.dayu.qiheonlinelibrary.net;
+
+
+import java.util.Map;
+
+import io.reactivex.rxjava3.core.Observable;
+import okhttp3.MultipartBody;
+import okhttp3.RequestBody;
+import okhttp3.ResponseBody;
+import retrofit2.Call;
+import retrofit2.http.Body;
+import retrofit2.http.GET;
+import retrofit2.http.Multipart;
+import retrofit2.http.POST;
+import retrofit2.http.Part;
+import retrofit2.http.PartMap;
+import retrofit2.http.Path;
+import retrofit2.http.QueryMap;
+import retrofit2.http.Streaming;
+import retrofit2.http.Url;
+
+/**
+ * Copyright (C), 2023,
+ * Author: zuo
+ * Date: 2023-03-27 14:56
+ * Description:
+ */
+public interface ApiService {
+
+
+
+    //    @FormUrlEncoded
+    @POST()
+    Observable<BaseResponse> requestPost(@Url String url, @Body Map<String, Object> params);
+
+    @GET("{url}")
+    Observable<BaseResponse> requestGet(@Path("url") String url, @QueryMap Map<String, Object> params);
+
+    @GET("{url}")
+    Observable<BaseResponse> requestGet(@Path("url") String url);
+
+    @Streaming
+    @GET()
+    Observable<ResponseBody> requestGetCall(@Url String url);
+
+    @Multipart
+    @POST("file/upload")
+    Call<BaseResponse> uploadFiles(@PartMap Map<String, RequestBody> map);
+
+    @Multipart
+    @POST(Constants.BASE_URL + "file/upload")
+    Call<BaseResponse> uploadFile(@Part("description") RequestBody description, @Part MultipartBody.Part file);
+
+}
diff --git a/qiheonlinelibrary/src/main/java/com/dayu/qiheonlinelibrary/net/BaseResponse.java b/qiheonlinelibrary/src/main/java/com/dayu/qiheonlinelibrary/net/BaseResponse.java
new file mode 100644
index 0000000..374110d
--- /dev/null
+++ b/qiheonlinelibrary/src/main/java/com/dayu/qiheonlinelibrary/net/BaseResponse.java
@@ -0,0 +1,63 @@
+package com.dayu.qiheonlinelibrary.net;
+
+
+/**
+ * Copyright (C), 2023,
+ * Author: zuo
+ * Date: 2023-03-27 15:17
+ * Description:
+ */
+public class BaseResponse<T> {
+    private int code;
+    private String msg;
+    private T data;
+    private String stackErrorInfo;//鍫嗘爤閿欒鎻忚堪
+
+
+    public int getCode() {
+        return code;
+    }
+
+    public void setCode(int code) {
+        this.code = code;
+    }
+
+    public String getMsg() {
+        return msg;
+    }
+
+    public void setMsg(String msg) {
+        this.msg = msg;
+    }
+
+    /**
+     * 鍒ゆ柇鐘舵�佺爜鏄惁鏄紓甯稿��
+     *
+     * @return
+     */
+    public boolean isCodeInvalid() {
+        return code != Constants.SUCCESS;
+    }
+
+    public boolean isSuccess() {
+        return code == Constants.SUCCESS;
+    }
+
+
+    public String getStackErrorInfo() {
+        return stackErrorInfo;
+    }
+
+    public void setStackErrorInfo(String stackErrorInfo) {
+        this.stackErrorInfo = stackErrorInfo;
+    }
+
+    public T getData() {
+        return data;
+    }
+
+    public void setData(T data) {
+        this.data = data;
+    }
+
+}
diff --git a/qiheonlinelibrary/src/main/java/com/dayu/qiheonlinelibrary/net/Constants.java b/qiheonlinelibrary/src/main/java/com/dayu/qiheonlinelibrary/net/Constants.java
new file mode 100644
index 0000000..40e742d
--- /dev/null
+++ b/qiheonlinelibrary/src/main/java/com/dayu/qiheonlinelibrary/net/Constants.java
@@ -0,0 +1,25 @@
+package com.dayu.qiheonlinelibrary.net;
+
+/**
+ * Copyright (C), 2023,
+ * Author: zuo
+ * Date: 2023-03-27 15:18
+ * Description:
+ */
+public class Constants {
+    public static final String BASE_URL = "http://yzgb.yunguangai.cn/api/";
+
+    /**
+     * 浠h〃璇锋眰鎴愬姛
+     */
+    public static final int SUCCESS = 0;
+    //浠h〃token杩囨湡鐨刢ode鍊�
+    public static final int TOKEN_INVALID = -10001;
+
+    /**
+     * 鏇存柊涓嬭浇鐨勬枃浠跺悕绉�
+     */
+    public static final String DOWN_LOAD_FILE_NAME = "downName";
+
+    public final static int RESULT_OK = 101;
+}
diff --git a/qiheonlinelibrary/src/main/java/com/dayu/qiheonlinelibrary/net/MyCallBack.java b/qiheonlinelibrary/src/main/java/com/dayu/qiheonlinelibrary/net/MyCallBack.java
new file mode 100644
index 0000000..38742ba
--- /dev/null
+++ b/qiheonlinelibrary/src/main/java/com/dayu/qiheonlinelibrary/net/MyCallBack.java
@@ -0,0 +1,28 @@
+package com.dayu.qiheonlinelibrary.net;
+
+
+import retrofit2.Call;
+import retrofit2.Callback;
+import retrofit2.Response;
+
+public abstract class MyCallBack<T> implements Callback<T> {
+
+
+    @Override
+    public void onResponse(Call<T> call, Response<T> response) {
+        onSucces(response);
+        onFinally();
+    }
+
+    @Override
+    public void onFailure(Call<T> call, Throwable t) {
+        onFailure(t);
+        onFinally();
+    }
+
+    public abstract void onSucces(Response<T> response);
+
+    public abstract void onFailure(Throwable t);
+
+    public abstract void onFinally();
+}
diff --git a/qiheonlinelibrary/src/main/java/com/dayu/qiheonlinelibrary/net/MyIntercepterApplication.java b/qiheonlinelibrary/src/main/java/com/dayu/qiheonlinelibrary/net/MyIntercepterApplication.java
new file mode 100644
index 0000000..717fea2
--- /dev/null
+++ b/qiheonlinelibrary/src/main/java/com/dayu/qiheonlinelibrary/net/MyIntercepterApplication.java
@@ -0,0 +1,92 @@
+package com.dayu.qiheonlinelibrary.net;
+
+import com.dayu.qiheonlinelibrary.QHOnLineApplication;
+import com.dayu.qiheonlinelibrary.utils.SharedPreferencesHelper;
+import com.dayu.qiheonlinelibrary.utils.ToastUtil;
+import com.tencent.bugly.crashreport.CrashReport;
+
+
+import java.io.IOException;
+import java.util.HashMap;
+import java.util.Map;
+
+import okhttp3.FormBody;
+import okhttp3.Interceptor;
+import okhttp3.MediaType;
+import okhttp3.Protocol;
+import okhttp3.Request;
+import okhttp3.RequestBody;
+import okhttp3.Response;
+import okhttp3.ResponseBody;
+
+/**
+ * Copyright (C), 2023,
+ * Author: zuo
+ * Date: 2023-05-10 10:12
+ * Description:
+ */
+public class MyIntercepterApplication implements Interceptor {
+    @Override
+    public Response intercept(Chain chain) throws IOException {
+        Request request = chain.request();
+        try {
+
+            Request myRequest = createRequest(chain.request());
+            if (myRequest != null) {
+                Response response = chain.proceed(myRequest);
+                return response;
+            } else {
+                ToastUtil.showToastLong(QHOnLineApplication.qhAloneApplication.application, "璇锋鏌ョ綉缁滆繛鎺�!!");
+            }
+        } catch (Exception e) {
+            e.printStackTrace();
+            CrashReport.postCatchedException(e);
+        }
+        return getNullResponse(request);
+    }
+
+    protected Request createRequest(Request request) {
+        try {
+            Request.Builder builder = request.newBuilder();
+            Map params = new HashMap();
+            if (request.method().equals("GET")) {
+                builder.url(request.url().toString());
+            } else {
+
+                RequestBody body = request.body();
+                if (body instanceof FormBody) {
+                    FormBody oldFormBody = (FormBody) body;
+                    if (oldFormBody != null && oldFormBody.size() > 0) {
+                        //澶勭悊body
+                    }
+                }
+                builder.addHeader("os", "app");
+                builder.addHeader("Authorization", SharedPreferencesHelper.getInstance(QHOnLineApplication.qhAloneApplication.application).get("token", ""));
+            }
+            return builder.build();
+        } catch (Exception e) {
+            e.printStackTrace();
+            CrashReport.postCatchedException(e);
+        }
+        return null;
+
+    }
+
+    /**
+     * 缃戠粶閿欒鏃剁殑寮傚父澶勭悊
+     *
+     * @param request
+     * @return
+     */
+    public Response getNullResponse(Request request) {
+        int code = 20010;
+        String message = "鍜︼紝璇锋鏌ョ綉缁�";
+        String errJson = "{\"code\":" + code + ",\"message\":\"" + message + "\"}";
+        Response.Builder builder = new Response.Builder().body(ResponseBody.create(MediaType.parse("application/json"), errJson));
+        builder.request(request);
+        builder.protocol(Protocol.HTTP_1_1);
+        builder.code(200);
+        builder.message(message);
+        return builder.build();
+    }
+}
diff --git a/qiheonlinelibrary/src/main/java/com/dayu/qiheonlinelibrary/net/RSAUtile.java b/qiheonlinelibrary/src/main/java/com/dayu/qiheonlinelibrary/net/RSAUtile.java
new file mode 100644
index 0000000..c2f1654
--- /dev/null
+++ b/qiheonlinelibrary/src/main/java/com/dayu/qiheonlinelibrary/net/RSAUtile.java
@@ -0,0 +1,32 @@
+package com.dayu.qiheonlinelibrary.net;
+
+import java.nio.charset.StandardCharsets;
+import java.security.KeyFactory;
+import java.security.PublicKey;
+import java.security.spec.X509EncodedKeySpec;
+
+import javax.crypto.Cipher;
+
+/**
+ * author: zuo
+ * Date: 2024-07-29
+ * Time: 14:38
+ * 澶囨敞锛歊SA鍔犲瘑宸ュ叿绫�
+ */
+public class RSAUtile {
+
+ public static byte[] encryptByPublicKey(String data, String publicKey) throws Exception {
+  // 寰楀埌鍏挜
+  X509EncodedKeySpec keySpec = new X509EncodedKeySpec(publicKey.getBytes(StandardCharsets.UTF_8));
+  KeyFactory kf = KeyFactory.getInstance("RSA");
+  PublicKey keyPublic = kf.generatePublic(keySpec);
+
+  // 鍔犲瘑鏁版嵁
+  Cipher cp = Cipher.getInstance("RSA/ECB/PKCS1Padding");
+  cp.init(Cipher.ENCRYPT_MODE, keyPublic);
+  return cp.doFinal(data.getBytes(StandardCharsets.UTF_8));
+ }
+
+
+
+}
diff --git a/qiheonlinelibrary/src/main/java/com/dayu/qiheonlinelibrary/net/RetrofitClient.java b/qiheonlinelibrary/src/main/java/com/dayu/qiheonlinelibrary/net/RetrofitClient.java
new file mode 100644
index 0000000..2f3e431
--- /dev/null
+++ b/qiheonlinelibrary/src/main/java/com/dayu/qiheonlinelibrary/net/RetrofitClient.java
@@ -0,0 +1,69 @@
+package com.dayu.qiheonlinelibrary.net;
+
+
+
+import com.dayu.baselibrary.BuildConfig;
+
+import java.util.concurrent.TimeUnit;
+
+import okhttp3.OkHttpClient;
+import okhttp3.logging.HttpLoggingInterceptor;
+import retrofit2.Retrofit;
+import retrofit2.adapter.rxjava3.RxJava3CallAdapterFactory;
+import retrofit2.converter.gson.GsonConverterFactory;
+
+/**
+ * Copyright (C), 2023,
+ * Author: zuo
+ * Date: 2023-03-27 14:56
+ * Description:
+ */
+public class RetrofitClient {
+
+//    private static final String BASE_URL = " http://114.116.229.87/api/";
+
+    private static RetrofitClient mInstance;
+    private Retrofit retrofit;
+    private static final int READ_TIME_OUT = 10;
+    private static final int CONNECT_TIME_OUT = 10;
+
+    private RetrofitClient() {
+        HttpLoggingInterceptor loggingInterceptor = new HttpLoggingInterceptor();
+        // 鍖呭惈header銆乥ody鏁版嵁
+        loggingInterceptor.setLevel(HttpLoggingInterceptor.Level.BODY);
+//        loggingInterceptor.setLevel(HttpLoggingInterceptor.Level.HEADERS);
+        OkHttpClient.Builder builder = new OkHttpClient().newBuilder();
+        //璁剧疆杩炴帴鍜岃鍙栨椂闂�
+        builder.readTimeout(READ_TIME_OUT, TimeUnit.SECONDS);
+        builder.connectTimeout(CONNECT_TIME_OUT, TimeUnit.SECONDS);
+        builder.writeTimeout(CONNECT_TIME_OUT, TimeUnit.SECONDS);
+        //娣诲姞缁熶竴鐨刪eader
+        builder.addInterceptor(new MyIntercepterApplication());
+        //娣诲姞鏃ュ織鎷︽埅鍣�
+        //娣诲姞鏁版嵁璇锋眰缁熶竴澶勭悊鎷︽埅鍣�
+        if (BuildConfig.DEBUG) {
+            builder.addInterceptor(loggingInterceptor);
+        }
+
+        OkHttpClient client = builder.build();
+
+        retrofit = new Retrofit.Builder()
+                .baseUrl(Constants.BASE_URL)
+                .addConverterFactory(GsonConverterFactory.create())
+                .addCallAdapterFactory(RxJava3CallAdapterFactory.create())
+                .client(client).build();
+    }
+
+    public static synchronized RetrofitClient getInstance() {
+        if (mInstance == null) {
+            mInstance = new RetrofitClient();
+        }
+        return mInstance;
+    }
+
+    public ApiService getApiService() {
+        return retrofit.create(ApiService.class);
+    }
+
+
+}
diff --git a/qiheonlinelibrary/src/main/java/com/dayu/qiheonlinelibrary/net/progress/NetLoadingDialog.java b/qiheonlinelibrary/src/main/java/com/dayu/qiheonlinelibrary/net/progress/NetLoadingDialog.java
new file mode 100644
index 0000000..9072ac8
--- /dev/null
+++ b/qiheonlinelibrary/src/main/java/com/dayu/qiheonlinelibrary/net/progress/NetLoadingDialog.java
@@ -0,0 +1,68 @@
+package com.dayu.qiheonlinelibrary.net.progress;
+
+import android.app.Dialog;
+import android.content.Context;
+import android.graphics.drawable.AnimationDrawable;
+import android.view.Gravity;
+
+import com.dayu.qiheonlinelibrary.R;
+import com.pnikosis.materialishprogress.ProgressWheel;
+
+
+/**
+ * Copyright (C), 2023,
+ * Author: zuo
+ * Date: 2023-04-12 9:32
+ * Description:
+ */
+public class NetLoadingDialog extends Dialog {
+
+    //private TextView mMessage;
+    private AnimationDrawable mAnimationDrawable;
+
+
+    public NetLoadingDialog(Context context) {
+        super(context, com.dayu.baselibrary.R.style.ws_pay_showSelfDialog);
+        init();
+    }
+
+    private void init() {
+        try {
+            int ws_pay_net_loading, iv_net_loading_anim;
+
+            getWindow().setGravity(Gravity.CENTER);
+            setContentView(R.layout.net_loding);
+
+            setCanceledOnTouchOutside(false);
+            ProgressWheel wheel = findViewById(R.id.progress_wheel);
+        } catch (Exception e) {
+            e.printStackTrace();
+        }
+    }
+
+
+    public void startAnim() {
+        try {
+            this.show();
+//            mHandler.postDelayed(new Runnable() {
+//                @Override
+//                public void run() {
+//                    mAnimationDrawable.start();
+//                }
+//            }, 100);
+        } catch (Exception e) {
+
+        }
+    }
+
+    public void stopAnim() {
+        try {
+//            mAnimationDrawable.stop();
+            this.dismiss();
+        } catch (Exception e) {
+
+        }
+    }
+
+
+}
diff --git a/qiheonlinelibrary/src/main/java/com/dayu/qiheonlinelibrary/net/progress/ProgressCancelListener.java b/qiheonlinelibrary/src/main/java/com/dayu/qiheonlinelibrary/net/progress/ProgressCancelListener.java
new file mode 100644
index 0000000..827b242
--- /dev/null
+++ b/qiheonlinelibrary/src/main/java/com/dayu/qiheonlinelibrary/net/progress/ProgressCancelListener.java
@@ -0,0 +1,9 @@
+package com.dayu.qiheonlinelibrary.net.progress;
+
+/**
+ * Created by qwy on 16/3/10.
+ * 鍙栨秷杩涘害妗嗙洃鍚�
+ */
+public interface ProgressCancelListener {
+    void onCancelProgress();
+}
diff --git a/qiheonlinelibrary/src/main/java/com/dayu/qiheonlinelibrary/net/progress/ProgressDialogHandler.java b/qiheonlinelibrary/src/main/java/com/dayu/qiheonlinelibrary/net/progress/ProgressDialogHandler.java
new file mode 100644
index 0000000..bd6cb13
--- /dev/null
+++ b/qiheonlinelibrary/src/main/java/com/dayu/qiheonlinelibrary/net/progress/ProgressDialogHandler.java
@@ -0,0 +1,84 @@
+package com.dayu.qiheonlinelibrary.net.progress;
+
+import android.content.Context;
+import android.content.DialogInterface;
+import android.os.Handler;
+import android.os.Message;
+
+
+/**
+ * Created by qwy on 16/3/10.
+ * 灞曠ず杩涘害瀵硅瘽妗�
+ */
+public class ProgressDialogHandler extends Handler {
+
+    public static final int SHOW_PROGRESS_DIALOG = 1;
+    public static final int DISMISS_PROGRESS_DIALOG = 2;
+
+    private NetLoadingDialog pd;
+
+    private Context context;
+    private boolean cancelable;
+    private ProgressCancelListener mProgressCancelListener;
+
+
+    public ProgressDialogHandler(Context context, ProgressCancelListener mProgressCancelListener,
+                                 boolean cancelable) {
+        super();
+        this.context = context;
+        this.mProgressCancelListener = mProgressCancelListener;
+        this.cancelable = cancelable;
+    }
+
+    private void initProgressDialog() {
+        try {
+            if (pd == null) {
+                pd = new NetLoadingDialog(context);
+                pd.setCancelable(cancelable);
+
+                if (cancelable) {
+                    pd.setOnCancelListener(new DialogInterface.OnCancelListener() {
+                        @Override
+                        public void onCancel(DialogInterface dialogInterface) {
+                            if (mProgressCancelListener != null)
+                            mProgressCancelListener.onCancelProgress();
+                        }
+                    });
+                }
+
+                if (!pd.isShowing()) {
+                    pd.startAnim();
+                }
+            }
+        } catch (Exception e) {
+            e.printStackTrace();
+        }
+    }
+
+    private void dismissProgressDialog() {
+        if (pd != null) {
+            try {
+                if (pd.isShowing()) {
+                    pd.dismiss();
+                }
+                pd.stopAnim();
+                pd = null;
+            } catch (Exception e) {
+                e.printStackTrace();
+            }
+        }
+    }
+
+    @Override
+    public void handleMessage(Message msg) {
+        switch (msg.what) {
+            case SHOW_PROGRESS_DIALOG:
+                initProgressDialog();
+                break;
+            case DISMISS_PROGRESS_DIALOG:
+                dismissProgressDialog();
+                break;
+        }
+    }
+
+}
diff --git a/qiheonlinelibrary/src/main/java/com/dayu/qiheonlinelibrary/net/subscribers/BaseProgressSubscriber.java b/qiheonlinelibrary/src/main/java/com/dayu/qiheonlinelibrary/net/subscribers/BaseProgressSubscriber.java
new file mode 100644
index 0000000..df2ef7f
--- /dev/null
+++ b/qiheonlinelibrary/src/main/java/com/dayu/qiheonlinelibrary/net/subscribers/BaseProgressSubscriber.java
@@ -0,0 +1,65 @@
+package com.dayu.qiheonlinelibrary.net.subscribers;
+
+import android.content.Context;
+
+import androidx.annotation.NonNull;
+
+import io.reactivex.rxjava3.core.Observer;
+import io.reactivex.rxjava3.disposables.Disposable;
+
+
+/**
+ * Created by zuoxiao on 2017/8/11.
+ */
+
+public abstract class BaseProgressSubscriber<T> implements Observer<T> {
+
+
+    public BaseProgressSubscriber() {
+
+    }
+
+
+    @Override
+    public void onSubscribe(@NonNull Disposable d) {
+        onMyStart(d);
+    }
+
+//    @Override
+//    public void onSubscribe() {
+//
+//    }
+
+    @Override
+    public void onComplete() {
+        onMyCompleted();
+        onCloose();
+    }
+
+    @Override
+    public void onError(Throwable e) {
+        onMyError(e);
+        onCloose();
+    }
+
+    @Override
+    public void onNext(T t) {
+        onMyNext(t);
+    }
+
+    public abstract void onMyCompleted();
+
+    public abstract void onMyError(Throwable e);
+
+    public abstract void onMyNext(T t);
+
+    public abstract void onMyStart(Disposable d);
+
+    public abstract void onCloose();
+
+    public abstract BaseProgressSubscriber iniData(Context context, boolean hideLoading, SubscriberListener<T> mSubscriberListener);
+
+    public BaseProgressSubscriber initProgressSubscriber(Context context, boolean hideLoading, SubscriberListener<T> mSubscriberListener) {
+        return iniData(context, hideLoading, mSubscriberListener);
+    }
+}
diff --git a/qiheonlinelibrary/src/main/java/com/dayu/qiheonlinelibrary/net/subscribers/ProgressSubscriber.java b/qiheonlinelibrary/src/main/java/com/dayu/qiheonlinelibrary/net/subscribers/ProgressSubscriber.java
new file mode 100644
index 0000000..ee80fc2
--- /dev/null
+++ b/qiheonlinelibrary/src/main/java/com/dayu/qiheonlinelibrary/net/subscribers/ProgressSubscriber.java
@@ -0,0 +1,131 @@
+package com.dayu.qiheonlinelibrary.net.subscribers;
+
+import android.content.Context;
+
+
+import com.dayu.qiheonlinelibrary.net.progress.ProgressCancelListener;
+import com.dayu.qiheonlinelibrary.net.progress.ProgressDialogHandler;
+
+import io.reactivex.rxjava3.disposables.Disposable;
+
+
+/**
+ * Created by qwy on 16/3/10.
+ * 鐢ㄤ簬鍦℉ttp璇锋眰寮�濮嬫椂锛岃嚜鍔ㄦ樉绀轰竴涓狿rogressDialog
+ * 鍦℉ttp璇锋眰缁撴潫鏄紝鍏抽棴ProgressDialog
+ * 璋冪敤鑰呰嚜宸卞璇锋眰鏁版嵁杩涜澶勭悊
+ */
+public class ProgressSubscriber<T> extends BaseProgressSubscriber<T> implements ProgressCancelListener {
+
+    private SubscriberListener mSubscriberListener;
+    private ProgressDialogHandler mProgressDialogHandler;
+    private boolean hideLoading = false;// 鏄惁闅愯棌鍔犺浇妗嗭紝榛樿灞曠ず
+    Disposable disposable;
+    private Context context;
+
+    public ProgressSubscriber() {
+    }
+
+    public ProgressSubscriber(Context context, SubscriberListener<T> mSubscriberListener) {
+        this.mSubscriberListener = mSubscriberListener;
+        this.context = context;
+        try {
+            mProgressDialogHandler = new ProgressDialogHandler(context, this, true);
+        } catch (Exception e) {
+        }
+    }
+
+    public ProgressSubscriber(Context context, boolean hideLoading, SubscriberListener<T> mSubscriberListener) {
+        this(context, mSubscriberListener);
+        this.hideLoading = hideLoading;
+    }
+
+    @Override
+    public ProgressSubscriber iniData(Context context, boolean hideLoading, SubscriberListener<T> mSubscriberListener) {
+        return new ProgressSubscriber(context, hideLoading, mSubscriberListener);
+    }
+
+    private void showProgressDialog() {
+        if (mProgressDialogHandler != null && !hideLoading) {
+            mProgressDialogHandler.obtainMessage(ProgressDialogHandler.SHOW_PROGRESS_DIALOG).sendToTarget();
+        }
+    }
+
+    public void dismissProgressDialog() {
+        try {
+            if (mProgressDialogHandler != null) {
+                mProgressDialogHandler.obtainMessage(ProgressDialogHandler.DISMISS_PROGRESS_DIALOG).sendToTarget();
+                mProgressDialogHandler = null;
+            }
+        } catch (Exception e) {
+            e.printStackTrace();
+        }
+    }
+
+    /**
+     * 璁㈤槄寮�濮嬫椂璋冪敤
+     * 鏄剧ずProgressDialog
+     */
+    @Override
+    public void onMyStart(Disposable d) {
+        if (mSubscriberListener != null) {
+            mSubscriberListener.onStart();
+        }
+        disposable=d;
+        showProgressDialog();
+    }
+
+
+    @Override
+    public void onCloose() {
+        mSubscriberListener.onCloose();
+    }
+
+    /**
+     * 瀹屾垚锛岄殣钘廝rogressDialog
+     */
+    @Override
+    public void onMyCompleted() {
+        if (mSubscriberListener != null) {
+            mSubscriberListener.onCompleted();
+        }
+        dismissProgressDialog();
+    }
+
+    /**
+     * 瀵归敊璇繘琛岀粺涓�澶勭悊
+     * 闅愯棌ProgressDialog
+     *
+     * @param e
+     */
+    @Override
+    public void onMyError(Throwable e) {
+        if (mSubscriberListener != null) {
+            mSubscriberListener.onError(e);
+        }
+        dismissProgressDialog();
+
+    }
+
+    /**
+     * 灏唎nNext鏂规硶涓殑杩斿洖缁撴灉浜ょ粰Activity鎴朏ragment鑷繁澶勭悊
+     *
+     * @param t 鍒涘缓Subscriber鏃剁殑娉涘瀷绫诲瀷
+     */
+    @Override
+    public void onMyNext(T t) {
+        if (mSubscriberListener != null) {
+            mSubscriberListener.onNext(t);
+        }
+    }
+
+    /**
+     * 鍙栨秷ProgressDialog鐨勬椂鍊欙紝鍙栨秷瀵筼bservable鐨勮闃咃紝鍚屾椂涔熷彇娑堜簡http璇锋眰
+     */
+    @Override
+    public void onCancelProgress() {
+        if (!disposable.isDisposed()) {
+            disposable.dispose();
+        }
+    }
+}
\ No newline at end of file
diff --git a/qiheonlinelibrary/src/main/java/com/dayu/qiheonlinelibrary/net/subscribers/SubscriberListener.java b/qiheonlinelibrary/src/main/java/com/dayu/qiheonlinelibrary/net/subscribers/SubscriberListener.java
new file mode 100644
index 0000000..b2f469f
--- /dev/null
+++ b/qiheonlinelibrary/src/main/java/com/dayu/qiheonlinelibrary/net/subscribers/SubscriberListener.java
@@ -0,0 +1,24 @@
+package com.dayu.qiheonlinelibrary.net.subscribers;
+
+/**
+ * Created by qwy on 16/3/10.
+ * 鐩戝惉鍣�
+ */
+public abstract class SubscriberListener<BaseResponse> {
+    public abstract void onNext(BaseResponse t);
+
+    public void onCompleted() {
+    }
+
+
+    public void onStart() {
+    }
+
+
+    public void onError(Throwable e) {
+    }
+
+    public void onCloose(){
+
+    }
+}
diff --git a/qiheonlinelibrary/src/main/java/com/dayu/qiheonlinelibrary/tools/BaseNFCHelper.java b/qiheonlinelibrary/src/main/java/com/dayu/qiheonlinelibrary/tools/BaseNFCHelper.java
new file mode 100644
index 0000000..318e271
--- /dev/null
+++ b/qiheonlinelibrary/src/main/java/com/dayu/qiheonlinelibrary/tools/BaseNFCHelper.java
@@ -0,0 +1,80 @@
+package com.dayu.qiheonlinelibrary.tools;
+
+import android.app.Activity;
+import android.util.Base64;
+
+import com.dayu.baselibrary.tools.HexUtil;
+
+import java.nio.charset.StandardCharsets;
+import java.security.InvalidKeyException;
+import java.security.NoSuchAlgorithmException;
+
+import javax.crypto.BadPaddingException;
+import javax.crypto.Cipher;
+import javax.crypto.IllegalBlockSizeException;
+import javax.crypto.NoSuchPaddingException;
+import javax.crypto.spec.SecretKeySpec;
+
+/**
+ * Copyright (C), 2023,
+ * Author: zuo
+ * Date: 2023-11-09 11:52
+ * Description:
+ */
+public class BaseNFCHelper {
+    /**
+     * 榛樿瀵嗙爜锛堢櫧鍗″瘑鐮侊級ffffffffffff
+     */
+    public byte[] defauleKey;
+
+    /**
+     * 鍏徃瀵嗙爜
+     */
+    public byte[] companyKey;
+    //瀵嗙爜a鍖�
+    String companyKeyA;
+    //瀵嗙爜B鍖�
+    String companyKeyB;
+
+
+    static {
+        System.loadLibrary("qihealone-native-lib");
+    }
+
+    public native String getSafeKey(Object object);
+
+    public BaseNFCHelper(Activity activity) {
+        // 瑙e瘑瀛楃涓�
+        try {
+            //鍒濆瀵嗙爜
+            byte[] encryptedBytes = Base64.decode("orDiGzvueQqPpU+VQ3NEzQ==", Base64.DEFAULT);
+            Cipher cipher = Cipher.getInstance("AES/ECB/PKCS5Padding");
+            String data = getSafeKey(activity);
+            byte[] encodedKey = HexUtil.hexToByteArray(data);
+//            byte[] encodedKey = {-117, -104, -100, 84, 111, -102, -29, -21, 72, -82, -105, 123, 77, 79, 17, -55, -102, -28, 50, 23, 67, 98, 0, -96, -10, -48, -60, 81, 113, 80, -32, -26};
+            cipher.init(Cipher.DECRYPT_MODE, new SecretKeySpec(encodedKey, "AES"));
+            byte[] decryptedBytes = cipher.doFinal(encryptedBytes);
+            String decryptedText = new String(decryptedBytes, StandardCharsets.UTF_8);
+            defauleKey = HexUtil.hexToByteArray(decryptedText);
+            //鍒濆瀵嗙爜
+//             byte[] encryptedBytes2 = Base64.decode("aYC9feYEOFOQHuzflLIXSw==", Base64.DEFAULT);
+            //010203:qeg4DUWf0ni9JfRWtD2krA==
+            byte[] encryptedBytes2 = Base64.decode("Zro4j8QP6yjYEA6HtSSNOw==", Base64.DEFAULT);
+            byte[] decryptedBytes2 = cipher.doFinal(encryptedBytes2);
+            //decryptedBytes2 瀵瑰簲010203040506
+            companyKeyA = new String(decryptedBytes2, StandardCharsets.UTF_8);
+            companyKey = HexUtil.hexToByteArray(companyKeyA);
+
+            //淇敼鍚庣殑瀵嗙爜
+            byte[] encryptedBytes3 = Base64.decode("n+SSZFb4DHsreVav/Z5ftg==", Base64.DEFAULT);
+            byte[] decryptedBytes3 = cipher.doFinal(encryptedBytes3);
+            //decryptedBytes3 瀵瑰簲202311202048
+            companyKeyB = new String(decryptedBytes2, StandardCharsets.UTF_8);
+
+
+        } catch (NoSuchAlgorithmException | NoSuchPaddingException | InvalidKeyException |
+                 BadPaddingException | IllegalBlockSizeException e) {
+            e.printStackTrace();
+        }
+    }
+}
diff --git a/qiheonlinelibrary/src/main/java/com/dayu/qiheonlinelibrary/tools/NFCWriteHelper.java b/qiheonlinelibrary/src/main/java/com/dayu/qiheonlinelibrary/tools/NFCWriteHelper.java
new file mode 100644
index 0000000..4abdceb
--- /dev/null
+++ b/qiheonlinelibrary/src/main/java/com/dayu/qiheonlinelibrary/tools/NFCWriteHelper.java
@@ -0,0 +1,254 @@
+package com.dayu.qiheonlinelibrary.tools;
+
+import android.app.Activity;
+import android.content.Intent;
+import android.nfc.NfcAdapter;
+import android.nfc.Tag;
+import android.nfc.tech.MifareClassic;
+import android.util.Log;
+
+import com.dayu.baselibrary.tools.HexUtil;
+import com.dayu.qiheonlinelibrary.card.UserCard;
+
+import java.io.IOException;
+
+/**
+ * @author zx
+ * @date 2018/4/25 8:08
+ * email 1058083107@qq.com
+ * description
+ */
+public class NFCWriteHelper extends BaseNFCHelper {
+
+    private Tag tag;
+
+    private static NFCWriteHelper helper;
+    private static int PASSWORD_LENTH = 12;
+
+    public NFCWriteHelper(Intent intent, Activity activity) {
+        super(activity);
+        this.tag = intent.getParcelableExtra(NfcAdapter.EXTRA_TAG);
+    }
+
+    /**
+     * 鍗曚緥鍒濆鍖�
+     *
+     * @param intent
+     * @return
+     */
+    public static NFCWriteHelper getInstence(Intent intent, Activity activity) {
+        if (helper == null) {
+            helper = new NFCWriteHelper(intent, activity);
+        }
+        return helper;
+    }
+
+    /**
+     * 璁剧疆NFC鍗$殑璇诲彇瀵嗙爜
+     *
+     * @param str
+     * @return
+     */
+    public NFCWriteHelper setReadPassword(String str) {
+        if (null != str && (str.length() <= PASSWORD_LENTH)) {
+            for (int i = 0; i < str.length(); i++) {
+                defauleKey[i] = (byte) str.charAt(i);
+            }
+        }
+        return helper;
+    }
+
+
+    /**
+     * 鍐欏崱
+     *
+     * @param userCard 鐢ㄦ埛鍗″唴瀹�
+     * @param
+     */
+    public boolean writeUserData(UserCard userCard) {
+        if (userCard != null) {
+            int a = 1;
+            try {
+                MifareClassic mfc = MifareClassic.get(tag);
+                if (null != mfc) {
+                    try {
+                        //杩炴帴NFC
+                        mfc.connect();
+                        //楠岃瘉鎵囧尯瀵嗙爜
+                        boolean isOpen = mfc.authenticateSectorWithKeyA(a, defauleKey);
+                        if (!isOpen) {
+                            isOpen = mfc.authenticateSectorWithKeyA(a, companyKey);
+                        } else {
+                            //鍐欏崱鏃朵慨鏀规墍鏈夊瘑鐮�
+                            changePasword(a, mfc);
+                        }
+                        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);
+                            }
+                            return true;
+                        }
+                        return false;
+                    } catch (Exception e) {
+                        e.printStackTrace();
+                        return false;
+                    } finally {
+                        try {
+                            mfc.close();
+                        } catch (IOException e) {
+                            e.printStackTrace();
+                        }
+                    }
+                }
+            } catch (Exception e) {
+                e.printStackTrace();
+                return false;
+            }
+        }
+        return false;
+    }
+
+
+    /**
+     * 鍐欏崱
+     *
+     * @param str 涔﹀啓鍐呭锛�16涓瓧鑺�
+     * @param a   涔﹀啓鐨勬墖鍖� (浠�0寮�濮嬫暟)
+     * @param b   涔﹀啓鐨勫潡(浠�0寮�濮嬫暟)
+     * @param
+     */
+    public boolean writeData(byte[] str, int a, int b) {
+        Log.i("NFCWreatActivity", "writeData: a=" + a + " b=" + b);
+        if (str.length <= 16) {
+            try {
+                MifareClassic mfc = MifareClassic.get(tag);
+                if (null != mfc) {
+                    try {
+                        //杩炴帴NFC
+                        mfc.connect();
+                        //鑾峰彇鎵囧尯鏁伴噺
+                        int count = mfc.getSectorCount();
+                        //濡傛灉浼犺繘鏉ョ殑鎵囧尯澶т簡鎴栬�呭皬浜嗙洿鎺ラ��鍑烘柟娉�
+                        if (a > count - 1 || a < 0) {
+                            return false;
+                        }
+                        //鑾峰彇鍐欑殑鎵囧尯鐨勫潡鐨勬暟閲�
+                        int bCount = mfc.getBlockCountInSector(a);
+                        //濡傛灉杈撳叆鐨勫潡澶т簡鎴栬�呭皬浜嗕篃鏄洿鎺ラ��鍑�
+                        if (b > bCount - 1 || b < 0) {
+                            return false;
+                        }
+                        //楠岃瘉鎵囧尯瀵嗙爜
+                        boolean isOpen = mfc.authenticateSectorWithKeyA(a, defauleKey);
+                        if (!isOpen) {
+                            isOpen = mfc.authenticateSectorWithKeyA(a, companyKey);
+                        } else {
+                            //鍐欏崱鏃朵慨鏀规墍鏈夊瘑鐮�
+                            changePasword(a, mfc);
+                        }
+                        if (isOpen) {
+                            int bIndex = mfc.sectorToBlock(a);
+                            //鍐欏崱
+                            mfc.writeBlock(bIndex + b, str);
+                            return true;
+                        }
+                        return false;
+                    } catch (Exception e) {
+                        e.printStackTrace();
+                        return false;
+                    } finally {
+                        try {
+                            mfc.close();
+                        } catch (IOException e) {
+                            e.printStackTrace();
+                        }
+                    }
+                }
+            } catch (Exception e) {
+                e.printStackTrace();
+                return false;
+            }
+        }
+        return false;
+    }
+
+
+    /**
+     * 淇敼瀵嗙爜
+     *
+     * @param a 涔﹀啓鐨勬墖鍖�
+     *          //     * @param callback 杩斿洖鐩戝惉
+     */
+    public boolean changePasword(int a, MifareClassic mfc) {
+//        MifareClassic mfc = MifareClassic.get(tag);
+        byte[] data = new byte[16];
+        if (null != mfc) {
+            try {
+//                mfc.connect();
+//                int count = mfc.getSectorCount();
+//                boolean isOpen = mfc.authenticateSectorWithKeyA(a, defauleKey);
+//                //楠岃瘉鏄惁鏄粯璁ゅ瘑鐮侊紝褰撻粯璁ゅ瘑鐮佹椂淇敼瀵嗙爜
+//                if (isOpen) {
+                //灏嗗瘑鐮佽浆鎹负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
+                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);
+//                    byte[] dataa = mfc.readBlock(bIndex + bCount - 1);
+//                    // 淇敼瀵嗙爜 A
+//                    mfc.writeBlock(mfc.sectorToBlock(a) + 3, dataA);
+//                    // 淇敼瀵嗙爜 B
+//                    mfc.writeBlock(mfc.sectorToBlock(a) + 7, dataB);
+//                }
+                return true;
+            } catch (Exception e) {
+                e.printStackTrace();
+                return false;
+//                callback.isSusses(false);
+            } finally {
+//                try {
+//                    mfc.close();
+//                } catch (IOException e) {
+//                    e.printStackTrace();
+//                }
+            }
+        }
+        return false;
+    }
+
+    /**
+     * 杩斿洖鐩戝惉绫�
+     */
+    public interface NFCCallback {
+        /**
+         * 杩斿洖鏄惁鎴愬姛
+         *
+         * @param flag
+         */
+        void isSusses(boolean flag);
+    }
+}
diff --git a/qiheonlinelibrary/src/main/java/com/dayu/qiheonlinelibrary/tools/NfcReadHelper.java b/qiheonlinelibrary/src/main/java/com/dayu/qiheonlinelibrary/tools/NfcReadHelper.java
new file mode 100644
index 0000000..5d89eeb
--- /dev/null
+++ b/qiheonlinelibrary/src/main/java/com/dayu/qiheonlinelibrary/tools/NfcReadHelper.java
@@ -0,0 +1,522 @@
+package com.dayu.qiheonlinelibrary.tools;
+
+import android.app.Activity;
+import android.content.Intent;
+import android.nfc.NfcAdapter;
+import android.nfc.Tag;
+import android.nfc.tech.MifareClassic;
+import android.util.Log;
+
+import com.dayu.baselibrary.tools.HexUtil;
+import com.dayu.baselibrary.utils.BaseCommon;
+import com.dayu.qiheonlinelibrary.card.UserCard;
+import com.dayu.qiheonlinelibrary.utils.CardCommon;
+
+
+import java.io.IOException;
+import java.util.ArrayList;
+import java.util.Arrays;
+import java.util.HashMap;
+import java.util.List;
+import java.util.Map;
+
+/**
+ * @author zx
+ * @date 2018/4/23 14:31
+ * email 1058083107@qq.com
+ * description nfc璇诲彇宸ュ叿绫�
+ */
+public class NfcReadHelper extends BaseNFCHelper {
+
+    private Tag tag;
+    //    private NFCCallback callback;
+    private static NfcReadHelper helper;
+
+
+    public NfcReadHelper(Intent intent, Activity activity) {
+        super(activity);
+        this.tag = intent.getParcelableExtra(NfcAdapter.EXTRA_TAG);
+    }
+
+    /**
+     * 鍗曚緥鍒濆鍖�
+     *
+     * @param intent
+     * @return
+     */
+    public static NfcReadHelper getInstence(Intent intent, Activity activity) {
+        if (helper == null) {
+            helper = new NfcReadHelper(intent, activity);
+        }
+        return helper;
+    }
+
+    /**
+     * 鑾峰彇鐢ㄦ埛鍗′俊鎭�
+     *
+     * @return
+     */
+    public UserCard getUserCardData() {
+        UserCard userCard = null;
+        Map<String, List<byte[]>> map = new HashMap<>();
+        MifareClassic mfc = MifareClassic.get(tag);
+        if (null != mfc) {
+            try {
+                //閾炬帴NFC
+                mfc.connect();
+                //鑾峰彇鎵囧尯鏁伴噺
+                int count = mfc.getSectorCount();
+                //瀛樺偍绌洪棿
+                int size = mfc.getSize();
+                //鐢ㄤ簬鍒ゆ柇鏃跺�欐湁鍐呭璇诲彇鍑烘潵
+                boolean flag = false;
+                List<byte[]> list = new ArrayList<>();
+                //楠岃瘉鎵囧尯瀵嗙爜锛屽惁鍒欎細鎶ラ敊锛堥摼鎺ュけ璐ラ敊璇級
+                boolean isOpen = mfc.authenticateSectorWithKeyA(1, defauleKey);
+                if (!isOpen) {
+                    isOpen = mfc.authenticateSectorWithKeyA(1, companyKey);
+                }
+                if (isOpen) {
+                    //鑾峰彇鎵囧尯閲岄潰鍧楃殑鏁伴噺
+                    int bCount = mfc.getBlockCountInSector(1);
+                    //鑾峰彇鎵囧尯绗竴涓潡瀵瑰簲鑺墖瀛樺偍鍣ㄧ殑浣嶇疆锛堟垜鏄繖鏍风悊瑙g殑锛屽洜涓虹0鎵囧尯鐨勮繖涓�兼槸4鑰屼笉鏄�0锛�
+                    int bIndex = mfc.sectorToBlock(1);
+                    //String data1 = "";
+                    for (int j = 0; j < bCount; j++) {
+                        //璇诲彇鏁版嵁
+                        byte[] data = null;
+                        try {
+                            data = mfc.readBlock(bIndex);
+                            bIndex++;
+                            list.add(data);
+                        } catch (Exception e) {
+                            e.printStackTrace();
+                        }
+                    }
+                    flag = true;
+                }
+
+                if (flag) {
+                    userCard = UserCard.getBean(list);
+                    return userCard;
+                }
+            } catch (IOException e) {
+                e.printStackTrace();
+            } catch (Exception e) {
+                e.printStackTrace();
+            } finally {
+                try {
+                    mfc.close();
+                } catch (Exception e) {
+                    e.printStackTrace();
+                }
+            }
+        }
+        return null;
+    }
+
+    /**
+     * 鑾峰彇鍗″彿
+     *
+     * @return
+     */
+    public String getCardNumber() {
+        MifareClassic mfc = MifareClassic.get(tag);
+        if (null != mfc) {
+            try {
+                mfc.connect();
+                //鑾峰彇褰撳墠鍗″彿
+                boolean isOpen = mfc.authenticateSectorWithKeyA(0, defauleKey);
+                if (!isOpen) {
+                    isOpen = mfc.authenticateSectorWithKeyA(0, companyKey);
+                }
+                if (isOpen) {
+                    int bIndex = mfc.sectorToBlock(0);
+                    byte[] data = mfc.readBlock(bIndex + 0);
+                    if (data != null && data.length > 0) {
+                        String hex = HexUtil.bytesToHex(Arrays.copyOfRange(data, 0, 4));
+//                        hex = HexUtil.spaceHex(hex);
+//                        hex = HexUtil.HighLowHex(hex);
+                        Log.i("NFCWreatActivity", "hex===" + hex);
+                        return hex.toUpperCase();
+                    }
+                }
+
+            } catch (IOException e) {
+                return BaseCommon.CARD_TYPE_ERROR1;
+            } finally {
+                try {
+                    mfc.close();
+                } catch (IOException e) {
+                    e.printStackTrace();
+                }
+            }
+        }
+        return "";
+    }
+
+
+    /**
+     * 鑾峰彇鍗$墖绫诲瀷鍜屽崱鍙�
+     *
+     * @return
+     */
+    public String getCradTypeAndCardNumber() {
+
+        MifareClassic mfc = MifareClassic.get(tag);
+        if (null != mfc) {
+            try {
+                mfc.connect();
+                StringBuilder strData = new StringBuilder();
+                //鑾峰彇褰撳墠鍗″彿
+                boolean isOpen = mfc.authenticateSectorWithKeyA(0, defauleKey);
+                if (!isOpen) {
+                    isOpen = mfc.authenticateSectorWithKeyA(0, companyKey);
+                }
+                if (isOpen) {
+                    int bIndex = mfc.sectorToBlock(0);
+                    byte[] data = mfc.readBlock(bIndex + 0);
+                    if (data != null && data.length > 0) {
+                        String hex = HexUtil.bytesToHex(Arrays.copyOfRange(data, 0, 4));
+                        strData.append(hex);
+                        strData.append(",");
+                        Log.i("NFCWreatActivity", "hex===" + hex);
+                    }
+                }
+                //鑾峰彇鍗$墖绫诲瀷
+                isOpen = mfc.authenticateSectorWithKeyA(1, defauleKey);
+                if (!isOpen) {
+                    isOpen = mfc.authenticateSectorWithKeyA(1, companyKey);
+                }
+                if (isOpen) {
+                    int bIndex = mfc.sectorToBlock(1);
+                    byte[] data = mfc.readBlock(bIndex + 0);
+                    if (data != null && data.length > 0) {
+                        String hex = HexUtil.byteToHex(data[0]);
+                        strData.append(hex);
+                        Log.i("NFCWreatActivity", "hex===" + hex);
+                        return strData.toString().toUpperCase();
+                    }
+                } else {
+                    Log.i("NFCWreatActivity", "isOpen===" + isOpen);
+                    return BaseCommon.CARD_TYPE_ERROR2;
+                }
+            } catch (IOException e) {
+                return BaseCommon.CARD_TYPE_ERROR1;
+            } finally {
+                try {
+                    mfc.close();
+                } catch (IOException e) {
+                    e.printStackTrace();
+                }
+            }
+        }
+        return "";
+    }
+
+    /**
+     * 璇诲彇NFC鍗$殑鍏ㄩ儴淇℃伅
+     *
+     * @param callback
+     */
+    public void getAllData(final NFCCallMapback callback) {
+        Map<String, List<byte[]>> map = new HashMap<>();
+        MifareClassic mfc = MifareClassic.get(tag);
+        if (null != mfc) {
+            try {
+                //閾炬帴NFC
+                mfc.connect();
+                //鑾峰彇鎵囧尯鏁伴噺
+                int count = mfc.getSectorCount();
+                //瀛樺偍绌洪棿
+                int size = mfc.getSize();
+                //鐢ㄤ簬鍒ゆ柇鏃跺�欐湁鍐呭璇诲彇鍑烘潵
+                boolean flag = false;
+                for (int i = 0; i < count; i++) {
+                    List<byte[]> list = new ArrayList<>();
+                    //楠岃瘉鎵囧尯瀵嗙爜锛屽惁鍒欎細鎶ラ敊锛堥摼鎺ュけ璐ラ敊璇級
+                    boolean isOpen = mfc.authenticateSectorWithKeyA(i, defauleKey);
+                    if (!isOpen) {
+                        isOpen = mfc.authenticateSectorWithKeyA(i, companyKey);
+                    }
+                    if (isOpen) {
+                        //鑾峰彇鎵囧尯閲岄潰鍧楃殑鏁伴噺
+                        int bCount = mfc.getBlockCountInSector(i);
+                        //鑾峰彇鎵囧尯绗竴涓潡瀵瑰簲鑺墖瀛樺偍鍣ㄧ殑浣嶇疆锛堟垜鏄繖鏍风悊瑙g殑锛屽洜涓虹0鎵囧尯鐨勮繖涓�兼槸4鑰屼笉鏄�0锛�
+                        int bIndex = mfc.sectorToBlock(i);
+                        //String data1 = "";
+                        for (int j = 0; j < bCount; j++) {
+                            //璇诲彇鏁版嵁
+                            byte[] data = null;
+                            try {
+                                data = mfc.readBlock(bIndex);
+                                bIndex++;
+                                list.add(data);
+                            } catch (Exception e) {
+                                e.printStackTrace();
+                            }
+                        }
+                        flag = true;
+                    }
+                    map.put(i + "", list);
+                }
+                if (flag) {
+                    callback.callBack(map);
+                } else {
+                    callback.error(CardCommon.ERROR);
+                }
+            } catch (IOException e) {
+                callback.error(CardCommon.ERROR_MOVE);
+                e.printStackTrace();
+            } catch (Exception e) {
+                callback.error(CardCommon.ERROR);
+                e.printStackTrace();
+            } finally {
+                try {
+                    mfc.close();
+                } catch (Exception e) {
+                    e.printStackTrace();
+                }
+            }
+        }
+    }
+
+
+    public List<byte[]> getOnesectorData() {
+        MifareClassic mfc = null;
+        try {
+            mfc = MifareClassic.get(tag);
+        } catch (Exception e) {
+            e.printStackTrace();
+        }
+        List<byte[]> list = new ArrayList<>();
+        if (null != mfc) {
+            try {
+                //閾炬帴NFC
+                mfc.connect();
+                //鐢ㄤ簬鍒ゆ柇鏃跺�欐湁鍐呭璇诲彇鍑烘潵
+                boolean flag = false;
+
+                //楠岃瘉鎵囧尯瀵嗙爜锛屽惁鍒欎細鎶ラ敊锛堥摼鎺ュけ璐ラ敊璇級
+                boolean isOpen = mfc.authenticateSectorWithKeyA(1, companyKey);
+                if (!isOpen) {
+                    isOpen = mfc.authenticateSectorWithKeyA(1, defauleKey);
+                }
+                if (isOpen) {
+                    //鑾峰彇鎵囧尯閲岄潰鍧楃殑鏁伴噺
+                    int bCount = mfc.getBlockCountInSector(1);
+                    //鑾峰彇鎵囧尯绗竴涓潡瀵瑰簲鑺墖瀛樺偍鍣ㄧ殑浣嶇疆锛堟垜鏄繖鏍风悊瑙g殑锛屽洜涓虹0鎵囧尯鐨勮繖涓�兼槸4鑰屼笉鏄�0锛�
+                    int bIndex = mfc.sectorToBlock(1);
+                    //String data1 = "";
+                    for (int j = 0; j < bCount; j++) {
+                        //璇诲彇鏁版嵁
+                        byte[] data = null;
+                        try {
+                            data = mfc.readBlock(bIndex);
+                            bIndex++;
+                            list.add(data);
+                        } catch (Exception e) {
+                            e.printStackTrace();
+                        }
+                    }
+                }
+
+            } catch (IOException e) {
+                e.printStackTrace();
+            } catch (Exception e) {
+                e.printStackTrace();
+            } finally {
+                try {
+                    mfc.close();
+                    return list;
+                } catch (Exception e) {
+                    e.printStackTrace();
+                }
+            }
+        }
+        return null;
+    }
+
+    /**
+     * 鑾峰彇1鎵囧尯淇℃伅
+     *
+     * @param callback
+     */
+    public void getOneSectorData(NFCCallListback callback) {
+
+
+        MifareClassic mfc = null;
+        try {
+            mfc = MifareClassic.get(tag);
+        } catch (Exception e) {
+            e.printStackTrace();
+        }
+        if (null != mfc) {
+            try {
+                //閾炬帴NFC
+                mfc.connect();
+                //鐢ㄤ簬鍒ゆ柇鏃跺�欐湁鍐呭璇诲彇鍑烘潵
+                boolean flag = false;
+                List<byte[]> list = new ArrayList<>();
+                //楠岃瘉鎵囧尯瀵嗙爜锛屽惁鍒欎細鎶ラ敊锛堥摼鎺ュけ璐ラ敊璇級
+                boolean isOpen = mfc.authenticateSectorWithKeyA(1, companyKey);
+                if (!isOpen) {
+                    isOpen = mfc.authenticateSectorWithKeyA(1, defauleKey);
+                }
+                if (isOpen) {
+                    //鑾峰彇鎵囧尯閲岄潰鍧楃殑鏁伴噺
+                    int bCount = mfc.getBlockCountInSector(1);
+                    //鑾峰彇鎵囧尯绗竴涓潡瀵瑰簲鑺墖瀛樺偍鍣ㄧ殑浣嶇疆锛堟垜鏄繖鏍风悊瑙g殑锛屽洜涓虹0鎵囧尯鐨勮繖涓�兼槸4鑰屼笉鏄�0锛�
+                    int bIndex = mfc.sectorToBlock(1);
+                    //String data1 = "";
+                    for (int j = 0; j < bCount; j++) {
+                        //璇诲彇鏁版嵁
+                        byte[] data = null;
+                        try {
+                            data = mfc.readBlock(bIndex);
+                            bIndex++;
+                            list.add(data);
+                        } catch (Exception e) {
+                            e.printStackTrace();
+                        }
+                    }
+                    flag = true;
+                }
+                if (flag) {
+                    callback.callBack(list);
+                } else {
+                    callback.error(CardCommon.ERROR);
+                }
+            } catch (IOException e) {
+                callback.error(CardCommon.ERROR_MOVE);
+                e.printStackTrace();
+            } catch (Exception e) {
+                callback.error(CardCommon.ERROR);
+                e.printStackTrace();
+            } finally {
+
+                try {
+                    mfc.close();
+                } catch (Exception e) {
+                    e.printStackTrace();
+                }
+            }
+        }
+    }
+
+
+    /**
+     * 璇诲彇NFC鍗$殑鐗瑰畾鎵囧尯淇℃伅
+     *
+     * @param a        鎵囧尯
+     * @param b        鍧�
+     * @param callback
+     */
+    public void getData(final int a, final int b, final NFCCallByteback callback) {
+        new Thread(new Runnable() {
+            @Override
+            public void run() {
+                Map<String, List<String>> map = new HashMap<>();
+                MifareClassic mfc = MifareClassic.get(tag);
+                if (null != mfc) {
+                    try {
+                        mfc.connect();
+                        int count = mfc.getSectorCount();
+                        if (a < 0 || a > count - 1) {
+                            callback.error(CardCommon.ERROR);
+                            return;
+                        }
+                        int bCount = mfc.getBlockCountInSector(a);
+                        if (b < 0 || b > bCount - 1) {
+                            callback.error(CardCommon.ERROR);
+                            return;
+                        }
+
+                        int type = mfc.getType();//鑾峰彇TAG鐨勭被鍨�
+                        String typeS = "";
+                        switch (type) {
+                            case MifareClassic.TYPE_CLASSIC:
+                                typeS = "TYPE_CLASSIC";
+                                break;
+                            case MifareClassic.TYPE_PLUS:
+                                typeS = "TYPE_PLUS";
+                                break;
+                            case MifareClassic.TYPE_PRO:
+                                typeS = "TYPE_PRO";
+                                break;
+                            case MifareClassic.TYPE_UNKNOWN:
+                                typeS = "TYPE_UNKNOWN";
+                                break;
+                        }
+                        boolean isOpen = mfc.authenticateSectorWithKeyA(a, defauleKey);
+                        if (!isOpen) {
+                            isOpen = mfc.authenticateSectorWithKeyA(a, companyKey);
+                        }
+                        if (isOpen) {
+                            int bIndex = mfc.sectorToBlock(a);
+                            byte[] data = mfc.readBlock(bIndex + b);
+                            callback.callBack(data);
+                        } else {
+                            callback.error(CardCommon.ERROR);
+                        }
+                    } catch (IOException e) {
+                        callback.error(CardCommon.ERROR_MOVE);
+                        e.printStackTrace();
+                    } catch (Exception e) {
+                        callback.error(CardCommon.ERROR);
+                    } finally {
+                        try {
+                            mfc.close();
+                        } catch (IOException e) {
+                            e.printStackTrace();
+                        }
+                    }
+                }
+            }
+        }).start();
+    }
+
+    /**
+     * 杩斿洖鐩戝惉绫�
+     */
+    public interface NFCCallMapback {
+        /**
+         * 杩斿洖璇诲彇nfc鍗$殑鍏ㄩ儴淇℃伅
+         *
+         * @param data 鍓嶉潰浠h〃鎵囧尯 鍥涗釜鍧楃殑鏁版嵁鐢�#鍙烽殧寮�
+         */
+        void callBack(Map<String, List<byte[]>> data);
+
+
+        void error(int code);
+    }
+
+    /**
+     * 杩斿洖鐩戝惉绫�
+     */
+    public interface NFCCallListback {
+        /**
+         * 杩斿洖璇诲彇nfc鍗$殑鍏ㄩ儴淇℃伅
+         *
+         * @param data 鍓嶉潰浠h〃鎵囧尯 鍥涗釜鍧楃殑鏁版嵁鐢�#鍙烽殧寮�
+         */
+        void callBack(List<byte[]> data);
+
+
+        void error(int code);
+    }
+
+
+    public interface NFCCallByteback {
+        /**
+         * 杩斿洖璇诲彇nfc鍗$殑鍏ㄩ儴淇℃伅
+         *
+         * @param data 鍓嶉潰浠h〃鎵囧尯 鍥涗釜鍧楃殑鏁版嵁鐢�#鍙烽殧寮�
+         */
+
+        void callBack(byte[] data);
+
+        void error(int code);
+    }
+
+}
diff --git a/qiheonlinelibrary/src/main/java/com/dayu/qiheonlinelibrary/tools/WriteCardUtils.java b/qiheonlinelibrary/src/main/java/com/dayu/qiheonlinelibrary/tools/WriteCardUtils.java
new file mode 100644
index 0000000..36c3851
--- /dev/null
+++ b/qiheonlinelibrary/src/main/java/com/dayu/qiheonlinelibrary/tools/WriteCardUtils.java
@@ -0,0 +1,24 @@
+package com.dayu.qiheonlinelibrary.tools;
+
+import android.app.Activity;
+import android.content.Intent;
+
+import com.dayu.qiheonlinelibrary.card.UserCard;
+
+
+/**
+ * Created by Android Studio.
+ * author: zuo
+ * Date: 2023-11-21
+ * Time: 14:46
+ * 澶囨敞锛�
+ */
+public class WriteCardUtils {
+    static boolean userFlag = false;
+
+    //鍚戝崱鍐欏叆鐢ㄦ埛淇℃伅
+    public static boolean setUser(Intent intent, UserCard userCard, Activity activity) {
+        userFlag = NFCWriteHelper.getInstence(intent, activity).writeUserData(userCard);
+        return userFlag;
+    }
+}
diff --git a/qiheonlinelibrary/src/main/java/com/dayu/qiheonlinelibrary/utils/CardCommon.java b/qiheonlinelibrary/src/main/java/com/dayu/qiheonlinelibrary/utils/CardCommon.java
new file mode 100644
index 0000000..503e043
--- /dev/null
+++ b/qiheonlinelibrary/src/main/java/com/dayu/qiheonlinelibrary/utils/CardCommon.java
@@ -0,0 +1,127 @@
+package com.dayu.qiheonlinelibrary.utils;
+
+/**
+ * Copyright (C), 2023,
+ * Author: zuo
+ * Date: 2023-11-06 20:22
+ * Description:鍗$被鍨�
+ */
+public class CardCommon {
+
+    public static final int ERROR = -1;
+    //杩炴帴涓柇 鎻愮ず鐢ㄦ埛閲嶆柊杩炴帴鎴栨彁绀虹敤鎴烽噸鏂伴潬杩戝崱鐗�
+    public static final int ERROR_MOVE = -2;
+
+    /**
+     * 鐢ㄦ埛鍒峰崱寮�娉靛墠
+     */
+    public static final String USER_CARD_TYPE_1 = "A1";
+    /**
+     * 鐢ㄦ埛鍒峰崱寮�娉靛悗
+     */
+    public static final String USER_CARD_TYPE_2 = "A8";
+    /**
+     * 鐢ㄦ埛鍙犲姞鍏呭��
+     */
+    public static final String USER_CARD_TYPE_3 = "A2";
+
+
+    /**
+     * 璁剧疆鍖哄煙琛ㄥ彿鍗�
+     */
+    public static final String REGION = "B0";
+
+
+    /**
+     * 璁剧疆鐢ㄦ埛鐢甸噺鍗曚环鍗�
+     */
+    public static final String ELECTRIC_PRICE = "B1";
+
+
+    /**
+     * 绠$悊鍗�
+     */
+    public static final String MANAGE_CRAD = "B2";
+
+
+    /**
+     * 娓呴浂鍗�
+     */
+    public static final String CLEAN_CARD_TYPE = "C8";
+
+
+    /**
+     * 瀵嗙爜鍗�
+     */
+    public static final String PASS_WORD_CRAD_TYPE = "B3";
+
+
+    /**
+     * 閰嶇疆榛戝崱  褰撶敤鎴蜂涪澶卞崱鏃讹紝闇�瑕佸湪瀵瑰簲鐨勬帶鍒跺櫒鎶婃鐢ㄦ埛閰嶇疆涓洪粦鎴凤紝闃叉闈炴硶鐢ㄦ按
+     */
+    public static final String BLACK = "B4";
+
+
+    /**
+     * 浠ヤ笅鏈敤鍒�
+     * *****************************************************************************************************************************************
+     */
+
+
+    /**
+     * 閲嶆柊娉ㄥ唽璁惧鍗�
+     */
+    public static final String REGISTERED_CARD_TYPE = "BA";
+    /**
+     * 鍒犻櫎鍏ㄩ儴鐢ㄦ埛鍗�
+     */
+    public static final String CLEAN_ALL_USER_CARD_TYPE = "BB";
+
+    /**
+     * 璁剧疆鍩熷悕鍗�
+     */
+    public static final String DOMAIN_CARD_TYPE = "C1";
+
+    /**
+     * 娴嬭瘯鍗�
+     */
+    public static final String TEST_CARD_TYPE = "A4";
+
+    /**
+     * 閰嶇疆璁惧娉ㄥ唽淇℃伅鍗�
+     */
+    public static final String CONFIGURATION_CARD_TYPE = "BC";
+
+    /**
+     * 閰嶇疆姘存车鍔熺巼鍗�
+     */
+    public static final String CONFIGURATION_POWER_CARD_TYPE = "BD";
+
+    /**
+     * 鑾峰彇榛樿鐨勫崱鏍囪瘑
+     *
+     * @param cardType 鍗$墖绫诲瀷
+     * @return 鍗″唴瀹�
+     */
+    public static String getDefaultCardData(String cardType) {
+        String cardData = "";
+        switch (cardType) {
+            case CLEAN_CARD_TYPE:
+                cardData = "3668F7A30119";
+                break;
+            case MANAGE_CRAD:
+            case REGISTERED_CARD_TYPE:
+            case CLEAN_ALL_USER_CARD_TYPE:
+            case TEST_CARD_TYPE:
+            case CONFIGURATION_CARD_TYPE:
+            case CONFIGURATION_POWER_CARD_TYPE:
+            case PASS_WORD_CRAD_TYPE:
+            case BLACK:
+            case ELECTRIC_PRICE:
+                cardData = "A0B1C289";
+                break;
+        }
+        return cardData;
+    }
+
+}
diff --git a/qiheonlinelibrary/src/main/java/com/dayu/qiheonlinelibrary/utils/DeviceNumberUtils.java b/qiheonlinelibrary/src/main/java/com/dayu/qiheonlinelibrary/utils/DeviceNumberUtils.java
new file mode 100644
index 0000000..ad6a362
--- /dev/null
+++ b/qiheonlinelibrary/src/main/java/com/dayu/qiheonlinelibrary/utils/DeviceNumberUtils.java
@@ -0,0 +1,38 @@
+package com.dayu.qiheonlinelibrary.utils;
+
+
+import com.dayu.qiheonlinelibrary.QHOnLineApplication;
+import com.dayu.qiheonlinelibrary.dao.BaseDaoSingleton;
+import com.dayu.qiheonlinelibrary.dbBean.DeviceNumber;
+
+/**
+ * Created by Android Studio.
+ * author: zuo
+ * Date: 2023-11-20
+ * Time: 16:33
+ * 澶囨敞锛� 鑾峰彇鏈嶅姟鍣ㄨ繑鍥炵殑璁惧鍙风殑宸ュ叿绫�
+ */
+public class DeviceNumberUtils {
+
+    //   鑾峰彇鍏呭�兼満璁惧搴忓垪鍙�
+    public static String getDeviceNumber() {
+        DeviceNumber deviceNumber = BaseDaoSingleton.getInstance(QHOnLineApplication.getInstance().application).deviceNumberDao().findFirst();
+        if (deviceNumber != null) {
+            return deviceNumber.getDeviceRegistrationNumber();
+        } else {
+            return "";
+        }
+    }
+
+    //    璁剧疆鍏呭�兼満璁惧搴忓垪鍙�
+    public static void setDeviceNumber(String deviceRegistrationNumber) {
+        DeviceNumber deviceNumber = BaseDaoSingleton.getInstance(QHOnLineApplication.getInstance().application).deviceNumberDao().findFirst();
+        if (deviceNumber != null) {
+            deviceNumber.setDeviceRegistrationNumber(deviceRegistrationNumber);
+        } else {
+            deviceNumber = new DeviceNumber();
+            deviceNumber.setDeviceRegistrationNumber(deviceRegistrationNumber);
+        }
+        BaseDaoSingleton.getInstance(QHOnLineApplication.getInstance().application).deviceNumberDao().insert(deviceNumber);
+    }
+}
diff --git a/qiheonlinelibrary/src/main/java/com/dayu/qiheonlinelibrary/utils/ExcelUtil.java b/qiheonlinelibrary/src/main/java/com/dayu/qiheonlinelibrary/utils/ExcelUtil.java
new file mode 100644
index 0000000..f63a5f3
--- /dev/null
+++ b/qiheonlinelibrary/src/main/java/com/dayu/qiheonlinelibrary/utils/ExcelUtil.java
@@ -0,0 +1,190 @@
+package com.dayu.qiheonlinelibrary.utils;
+
+import android.content.Context;
+import android.widget.Toast;
+
+import com.dayu.baselibrary.utils.DateUtil;
+import com.dayu.baselibrary.utils.MyFileUtil;
+import com.dayu.qiheonlinelibrary.dbBean.RechargeBean;
+import com.dayu.qiheonlinelibrary.dbBean.UserCardBean;
+
+
+import java.io.File;
+import java.io.FileInputStream;
+import java.io.IOException;
+import java.io.InputStream;
+import java.util.ArrayList;
+import java.util.List;
+
+import jxl.Workbook;
+import jxl.WorkbookSettings;
+import jxl.format.Colour;
+import jxl.write.Label;
+import jxl.write.WritableCell;
+import jxl.write.WritableCellFormat;
+import jxl.write.WritableFont;
+import jxl.write.WritableSheet;
+import jxl.write.WritableWorkbook;
+import jxl.write.WriteException;
+
+/**
+ * Created by zuoxiao on 2018/12/31.
+ */
+
+public class ExcelUtil {
+
+    private static WritableCellFormat arial14format = null;
+    private static WritableCellFormat arial10format = null;
+    private static WritableFont arial12font = null;
+    private static WritableCellFormat arial12format = null;
+    private final static String UTF8_ENCODING = "UTF-8";
+
+    public static String outPath = MyFileUtil.getSDPath() + "/" + "澶х鑺傛按鍏呭�兼満璁板綍";
+    public static String outRechargePathName = "鍏呭�艰褰�.xls";
+    public static String outUserPathName = "寮�鎴疯褰�.xls";
+
+    /**
+     * 鍗曞厓鏍肩殑鏍煎紡璁剧疆 瀛椾綋澶у皬 棰滆壊 瀵归綈鏂瑰紡銆佽儗鏅鑹茬瓑...
+     */
+    private static void format() {
+        try {
+            WritableFont arial14font = new WritableFont(WritableFont.ARIAL, 14, WritableFont.BOLD);
+            arial14font.setColour(Colour.LIGHT_BLUE);
+            arial14format = new WritableCellFormat(arial14font);
+            arial14format.setAlignment(jxl.format.Alignment.CENTRE);
+            arial14format.setBorder(jxl.format.Border.ALL, jxl.format.BorderLineStyle.THIN);
+            arial14format.setBackground(Colour.VERY_LIGHT_YELLOW);
+
+            WritableFont arial10font = new WritableFont(WritableFont.ARIAL, 10, WritableFont.BOLD);
+            arial10format = new WritableCellFormat(arial10font);
+            arial10format.setAlignment(jxl.format.Alignment.CENTRE);
+            arial10format.setBorder(jxl.format.Border.ALL, jxl.format.BorderLineStyle.THIN);
+            arial10format.setBackground(Colour.GRAY_25);
+
+            arial12font = new WritableFont(WritableFont.ARIAL, 10);
+            arial12format = new WritableCellFormat(arial12font);
+            //瀵归綈鏍煎紡
+            arial10format.setAlignment(jxl.format.Alignment.CENTRE);
+            //璁剧疆杈规
+            arial12format.setBorder(jxl.format.Border.ALL, jxl.format.BorderLineStyle.THIN);
+
+        } catch (WriteException e) {
+            e.printStackTrace();
+        }
+    }
+
+    /**
+     * 鍒濆鍖朎xcel
+     *
+     * @param fileName 瀵煎嚭excel瀛樻斁鐨勫湴鍧�锛堢洰褰曪級
+     * @param colName  excel涓寘鍚殑鍒楀悕锛堝彲浠ユ湁澶氫釜锛�
+     */
+    public static void initExcel(String fileName, String[] colName) {
+        format();
+        WritableWorkbook workbook = null;
+        try {
+            File file = new File(fileName);
+            if (!file.exists()) {
+                file.createNewFile();
+            }
+            workbook = Workbook.createWorkbook(file);
+            //璁剧疆琛ㄦ牸鐨勫悕瀛�
+            WritableSheet sheet = workbook.createSheet("璁板綍", 0);
+            //鍒涘缓鏍囬鏍�
+            sheet.addCell((WritableCell) new Label(0, 0, fileName, arial14format));
+            for (int col = 0; col < colName.length; col++) {
+                sheet.addCell(new Label(col, 0, colName[col], arial10format));
+            }
+            //璁剧疆琛岄珮
+            sheet.setRowView(0, 340);
+            workbook.write();
+        } catch (Exception e) {
+            e.printStackTrace();
+        } finally {
+            if (workbook != null) {
+                try {
+                    workbook.close();
+                } catch (Exception e) {
+                    e.printStackTrace();
+                }
+            }
+        }
+    }
+
+    @SuppressWarnings("unchecked")
+    public static <T> void writeObjListToExcel(List<T> objList, String fileName, Context c) {
+
+
+        if (objList != null && objList.size() > 0) {
+            WritableWorkbook writebook = null;
+            InputStream in = null;
+            try {
+                WorkbookSettings setEncode = new WorkbookSettings();
+                setEncode.setEncoding(UTF8_ENCODING);
+                in = new FileInputStream(new File(fileName));
+                Workbook workbook = Workbook.getWorkbook(in);
+                writebook = Workbook.createWorkbook(new File(fileName), workbook);
+                WritableSheet sheet = writebook.getSheet(0);
+
+                for (int j = 0; j < objList.size(); j++) {
+                    List<String> list = new ArrayList<>();
+                    if (objList.get(j) instanceof RechargeBean) {
+                        RechargeBean projectBean = (RechargeBean) objList.get(j);
+                        list.add(projectBean.getSerial());
+                        list.add(projectBean.getUserName());
+                        list.add(projectBean.getCardNumber());
+                        list.add(DateUtil.dateToStamp(projectBean.getDate(), DateUtil.type2));
+                        list.add(projectBean.getMorny());
+                        list.add(projectBean.getBalance());
+                    } else {
+                        UserCardBean userCardBean = (UserCardBean) objList.get(j);
+                        list.add(userCardBean.getSerial());
+                        list.add(userCardBean.getUserName());
+                        list.add(userCardBean.getUserID());
+                        list.add(userCardBean.getCardNumber());
+                        list.add(DateUtil.dateToStamp(userCardBean.getDate(), DateUtil.type2));
+                        list.add(userCardBean.getPhone());
+                    }
+
+                    for (int i = 0; i < list.size(); i++) {
+                        sheet.addCell(new Label(i, j + 1, list.get(i), arial12format));
+                        if (list.get(i).length() <= 4) {
+                            //璁剧疆鍒楀
+                            sheet.setColumnView(i, list.get(i).length() + 8);
+                        } else {
+                            //璁剧疆鍒楀
+                            sheet.setColumnView(i, list.get(i).length() + 5);
+                        }
+                    }
+                    //璁剧疆琛岄珮
+                    sheet.setRowView(j + 1, 350);
+                }
+
+                writebook.write();
+                Toast.makeText(c, "瀵煎嚭Excel鎴愬姛", Toast.LENGTH_SHORT).show();
+            } catch (Exception e) {
+                e.printStackTrace();
+            } finally {
+                if (writebook != null) {
+                    try {
+                        writebook.close();
+                    } catch (Exception e) {
+                        e.printStackTrace();
+                    }
+
+                }
+                if (in != null) {
+                    try {
+                        in.close();
+                    } catch (IOException e) {
+                        e.printStackTrace();
+                    }
+                }
+            }
+
+        }
+    }
+}
+
+
+
diff --git a/qiheonlinelibrary/src/main/java/com/dayu/qiheonlinelibrary/utils/MyJsonParser.java b/qiheonlinelibrary/src/main/java/com/dayu/qiheonlinelibrary/utils/MyJsonParser.java
new file mode 100644
index 0000000..a04f647
--- /dev/null
+++ b/qiheonlinelibrary/src/main/java/com/dayu/qiheonlinelibrary/utils/MyJsonParser.java
@@ -0,0 +1,604 @@
+/**
+ * Company: ImanSoft( http://www.imansoft.cn/ )
+ */
+package com.dayu.qiheonlinelibrary.utils;
+
+import android.text.TextUtils;
+
+import com.google.gson.Gson;
+import com.google.gson.GsonBuilder;
+import com.google.gson.JsonArray;
+import com.google.gson.JsonElement;
+import com.google.gson.JsonParser;
+import com.google.gson.LongSerializationPolicy;
+
+import org.json.JSONArray;
+import org.json.JSONException;
+import org.json.JSONObject;
+
+import java.lang.reflect.ParameterizedType;
+import java.lang.reflect.Type;
+import java.util.ArrayList;
+import java.util.HashMap;
+import java.util.Iterator;
+import java.util.LinkedHashMap;
+import java.util.List;
+import java.util.Map;
+import java.util.Map.Entry;
+import java.util.Set;
+
+
+/**
+ * @author cuiyaosheng 涓昏鍔熻兘: 鍒涘缓鏃ユ湡:2014骞�2鏈�13鏃� 淇敼浜�,淇敼鏃ユ湡,淇敼鍐呭
+ * @com.iman.hom.commons.calls.@JsonParser
+ */
+public class MyJsonParser {
+
+    /**
+     * 鏋勯�犲嚱鏁�
+     */
+    public MyJsonParser() {
+    }
+
+    /**
+     * 鑾峰彇Json瀛楃涓蹭腑鐨勫睘鎬у��
+     *
+     * @param json     Json瀛楃涓�
+     * @param attrName 灞炴�у悕绉�
+     * @return 灞炴�у��
+     * @throws JSONException
+     */
+    public static Object getPropertyFromJson(String json, String attrName) throws JSONException {
+        JSONObject jsonObject;
+        try {
+            jsonObject = new JSONObject(json);
+            return jsonObject.get(attrName);
+        } catch (JSONException e) {
+        }
+        return null;
+    }
+
+    /**
+     * 灏嗗璞′紶鎹㈡垚Json绐�
+     *
+     * @param t
+     * @return
+     */
+    public static <T> String bean2Json(T t) {
+        try {
+            if (t == null && !TextUtils.isEmpty(t.toString()))
+                return "";
+            Gson gson = new Gson();
+            return gson.toJson(t);
+        } catch (Exception e) {
+            e.printStackTrace();
+        }
+        return "";
+    }
+
+    /***
+     * 杞崲涓篢绫诲瀷
+     *
+     * @param json
+     * @param tClass
+     * @param <T>
+     * @return
+     */
+    public static <T> T json2Bean(String json, Class<T> tClass) {
+        try {
+            if (!TextUtils.isEmpty(json)) {
+                Gson gson = new Gson();
+                return gson.fromJson(json, tClass);
+            }
+
+        } catch (Exception e) {
+            e.printStackTrace();
+        }
+        return null;
+
+
+    }
+
+    /**
+     * 灏咼son 鐩存帴搴忓垪鍖� 涓篖ist
+     *
+     * @param json 鐩爣json 瀛楃涓�
+     * @param type 绫诲瀷锛岀敤gson 鐨凾ypeKoken 鍖呰鐨勭被鍨嬶紝濡傦細new TypeToken<List<ShowItemDetailInfo.DetailItemImage>>(){}.getType()
+     * @return
+     */
+    public static <T> List<T> json2List(String json, Type type) {
+        try {
+            if (!TextUtils.isEmpty(json)) {
+                Gson gson = new Gson();
+                return gson.fromJson(json, type);
+            }
+
+        } catch (Exception e) {
+            e.printStackTrace();
+        }
+        return null;
+
+    }
+
+    /****
+     * 灏唈son杞寲鎴愬搴旂殑JavaBean
+     *
+     * @param json
+     * @return
+     */
+    public static <T> T getBeanFromJson(String json, Class<T> cl) {
+        try {
+            Gson gson = buildGson();
+            return (T) gson.fromJson(json, cl);
+        } catch (Exception e) {
+            e.printStackTrace();
+        }
+        return null;
+
+    }
+
+    /****
+     * 灏唈son杞寲鎴愬搴旂殑JavaBean
+     *
+     * @param json
+     * @return
+     */
+    public static <T> T getBeanFromJson(String json, Type cl) {
+        try {
+            Gson gson = buildGson();
+            return (T) gson.fromJson(json, cl);
+        } catch (Exception e) {
+            e.printStackTrace();
+        }
+        return null;
+
+    }
+
+    private static Gson buildGson() {
+        GsonBuilder gsonBuilder = new GsonBuilder();
+//        gsonBuilder.registerTypeAdapterFactory(GsonTypeAdapter.FACTORY);
+        return gsonBuilder.create();
+    }
+
+//    /****
+//     * 灏唈son杞寲鎴愬搴旂殑JavaBean
+//     *
+//     * @param json
+//     * @return
+//     */
+//    public static <T> List<T> getListBeanFromJson(String json, final List<T> cl) {
+//        try {
+//            List<T> list = new ArrayList<>();
+//            Gson gson = new Gson();
+//            Type listType = new TypeToken<cl>() {
+//            }.getType();
+//            return list = gson.fromJson(json, listType);
+//
+//        } catch (Exception e) {
+//            e.printStackTrace();
+//        }
+//        return null;
+//
+//    }
+
+    /****
+     * 灏唈son杞寲鎴愬搴旂殑JavaBean
+     *
+     * @return
+     */
+    public static <T> T getBeanFromMap(Map<String, Object> map, Class<T> cl) {
+        return getBeanFromJson(getJsonFromMap(map), cl);
+
+    }
+
+
+    public static <T> T getJsonForList(List listData, Class<T> cl) {
+        List list = new ArrayList();
+        for (int i = 0; i < listData.size(); i++) {
+            list.add(getBeanFromMap((Map<String, Object>) listData.get(i), cl));
+        }
+        return (T) list;
+    }
+
+    /***
+     * 灏哅ap<String, String>瀵硅薄杞崲涓篔SON瀛楃涓�
+     *
+     * @param params 鍙傛暟
+     * @return Json瀛楃涓�
+     */
+
+    public static String getJsonFromMap(Map<String, Object> params) {
+        if (params == null || params.size() <= 0) {
+            return "";
+        }
+        return getJSONObjectFromMap(params).toString();
+    }
+
+    public static String getJsontoMap(Map<String, Object> params) {
+        GsonBuilder gsonBuilder = new GsonBuilder();
+        gsonBuilder.setLongSerializationPolicy( LongSerializationPolicy.STRING );
+        gsonBuilder.serializeSpecialFloatingPointValues();
+        Gson gson = gsonBuilder.create();
+        String jsonStr = gson.toJson(params);
+        return jsonStr;
+    }
+
+    public static <T> String getJsonbyList(List<T> params) {
+
+        Gson gson = new Gson();
+        return gson.toJson(params);
+    }
+
+
+    /***
+     * 灏哅ap<String, String>瀵硅薄杞崲涓篔SONObject瀛楃涓�
+     *
+     * @param params
+     * @return
+     */
+    @SuppressWarnings("unchecked")
+    private static JSONObject getJSONObjectFromMap(Map<String, Object> params) {
+        Set<Entry<String, Object>> entrySet = params.entrySet();
+        JSONObject object = new JSONObject();
+        for (Entry<String, Object> entry : entrySet) {
+            try {
+                Object ob = entry.getValue();
+                if (ob instanceof List) {
+                    List list = (List) ob;
+                    if (list == null || list.size() == 0) {
+                        continue;
+                    }
+                    JSONArray array = new JSONArray();
+                    for (Object o : list) {
+                        if (o instanceof Map) {
+                            array.put(getJSONObjectFromMap((Map<String, Object>) o));
+                        } else if (o instanceof List) {
+                            JSONArray array1 = new JSONArray();
+                            array1.put(getListFromJson(o.toString()));
+                            array.put(array1);
+                        } else {
+                            array.put(o);
+                        }
+                    }
+                    object.put(entry.getKey(), array);
+                } else if (ob instanceof Map) {
+                    object.put(entry.getKey(), getJSONObjectFromMap((Map<String, Object>) ob));
+                } else {
+                    object.put(entry.getKey(), entry.getValue());
+                }
+            } catch (JSONException e) {
+                e.printStackTrace();
+            }
+        }
+        return object;
+    }
+
+
+    public static String getJsonFromStringMap(Map<String, String> params) {
+        Set<Entry<String, String>> entrySet = params.entrySet();
+        JSONObject object = new JSONObject();
+        for (Entry<String, String> entry : entrySet) {
+            try {
+                object.put(entry.getKey(), entry.getValue());
+            } catch (JSONException e) {
+                e.printStackTrace();
+            }
+        }
+        return object.toString();
+    }
+
+
+    /**
+     * 灏唈son杞寲涓篐ashMap
+     *
+     * @param jsonStr 瀛楃涓�
+     * @return
+     */
+    public static HashMap<String, Object> getMapFromJson(String jsonStr) {
+        HashMap<String, Object> valueMap = new LinkedHashMap<String, Object>();
+        if (jsonStr == null || "".equals(jsonStr)) {
+            return valueMap;
+        }
+
+        try {
+            JSONObject jsonObject = new JSONObject(jsonStr);
+            valueMap = getMapFromJsonObject(jsonObject);
+        } catch (Exception e) {
+            e.printStackTrace();
+        }
+        return valueMap;
+    }
+
+
+    /**
+     * 杞崲JsonArray涓篖ist<HashMap<String,Object>>.
+     *
+     * @param jsonArray JsonArray
+     * @return
+     */
+    public static List<Object> getListFromJsonArray(JSONArray jsonArray) {
+        List<Object> list = new ArrayList<Object>();
+        int len = jsonArray.length();
+        try {
+            for (int i = 0; i < len; i++) {
+                Object obj = jsonArray.get(i);
+                if (obj instanceof JSONObject) {
+                    list.add(getMapFromJsonObject((JSONObject) obj));
+                } else if (obj instanceof JSONArray) {
+                    list.add(getListFromJsonArray(jsonArray));
+                } else {
+
+                    if (obj != null && !TextUtils.isEmpty(obj.toString()) && !"null".equals(obj.toString()))
+                        list.add(obj);
+                }
+            }
+        } catch (JSONException e) {
+            e.printStackTrace();
+        }
+        return list;
+    }
+
+    /**
+     * 杞崲JSONObject涓篐ashMap<String,Object>. 娉細濡傛灉json瀵硅薄鐨勫�间负null,鍒欓粯璁よ浆鎹负"".
+     *
+     * @param jsonObj
+     * @return
+     */
+    public static HashMap<String, Object> getMapFromJsonObject(JSONObject jsonObj) {
+        HashMap<String, Object> map = new LinkedHashMap<String, Object>();
+        Iterator<String> iters = jsonObj.keys();
+        try {
+            while (iters.hasNext()) {
+                String key = iters.next();
+                Object obj = jsonObj.get(key);
+                if (obj instanceof JSONArray) {
+                    map.put(key, getListFromJsonArray((JSONArray) obj));
+                } else if (obj instanceof JSONObject) {
+                    map.put(key, getMapFromJsonObject((JSONObject) obj));
+                } else if (obj instanceof Number) {
+                    map.put(key, String.valueOf(obj));
+                } else if (jsonObj.isNull(key)) {
+                    map.put(key, "");
+                } else {
+                    if (obj != null && !TextUtils.isEmpty(obj.toString()) && !"null".equals(obj.toString()))
+                        map.put(key, obj);
+                }
+            }
+        } catch (JSONException e) {
+            e.printStackTrace();
+        }
+        return map;
+    }
+
+    /**
+     * @param str
+     * @param clazz
+     * @param <T>
+     * @return
+     */
+    public static <T> List<T> getListFromJson(String str, Class<T> clazz) {
+        try {
+            Type type = new ParameterizedTypeImpl(clazz);
+            List<T> list = new Gson().fromJson(str, type);
+            return list;
+        } catch (Exception e) {
+            e.printStackTrace();
+        }
+        return null;
+    }
+
+
+    /**
+     * @param str
+     * @param <T>
+     * @return
+     */
+    public static <T> List<T> getListFromJson(String str, Type type) {
+        try {
+            List<T> list = new Gson().fromJson(str, type);
+            return list;
+        } catch (Exception e) {
+            e.printStackTrace();
+        }
+        return null;
+    }
+
+    private static class ParameterizedTypeImpl implements ParameterizedType {
+        Class clazz;
+
+        public ParameterizedTypeImpl(Class clz) {
+            clazz = clz;
+        }
+
+        @Override
+        public Type[] getActualTypeArguments() {
+            return new Type[]{clazz};
+        }
+
+        @Override
+        public Type getRawType() {
+            return List.class;
+        }
+
+        @Override
+        public Type getOwnerType() {
+            return null;
+        }
+
+    }
+
+    public static List<Object> getListFromJson(String json) {
+        try {
+            JSONArray jsonObject = new JSONArray(json);
+            return getListFromJsonArray(jsonObject);
+
+        } catch (Exception e) {
+            e.printStackTrace();
+        }
+        return null;
+    }
+
+    /***
+     * 鍦ㄤ竴涓狧ashMap涓煡鎵緆eyName瀵瑰簲鐨勬暟鎹璞★紝鏌ュ埌鐨勭涓�涓氨鐩存帴杩斿洖浜�
+     *
+     * @param users
+     * @param keyName
+     * @return
+     */
+    @SuppressWarnings("unchecked")
+    public static Object getObjectFromJSONMap(Map<String, Object> users, String keyName) {
+        if (users == null || users.size() <= 0)
+            return null;
+        try {
+            Set<Entry<String, Object>> set = users.entrySet();
+            for (Entry<String, Object> entry : set) {
+                String key = entry.getKey();
+                Object value = entry.getValue();
+                if (key.equalsIgnoreCase(keyName))
+                    return value;
+
+                HashMap<String, Object> map = null;
+                if (value instanceof Map) {
+                    map = (HashMap<String, Object>) value;
+                    Object object = getObjectFromJSONMap(map, keyName);
+                    if (object != null)
+                        return object;
+                }
+            }
+        } catch (Exception e) {
+            e.printStackTrace();
+        }
+        return null;
+    }
+
+    /**
+     * 灏唈son 鏁扮粍杞崲涓篗ap 瀵硅薄
+     *
+     * @param jsonString
+     * @return
+     */
+
+    public static Map<String, Object> getMapForJson(String jsonString) {
+
+        JSONObject jsonObject;
+        try {
+            jsonObject = new JSONObject(jsonString);
+            @SuppressWarnings("unchecked")
+            Iterator<String> keyIter = jsonObject.keys();
+            String key;
+            Object value;
+            Map<String, Object> valueMap = new HashMap<String, Object>();
+            while (keyIter.hasNext()) {
+                key = (String) keyIter.next();
+                value = jsonObject.get(key);
+                valueMap.put(key, value);
+            }
+
+            return valueMap;
+        } catch (JSONException e) {
+            e.printStackTrace();
+        } catch (Exception e) {
+            e.printStackTrace();
+        }
+        return null;
+
+    }
+
+
+    /**
+     * 鎶妀son 杞崲涓篈rrayList 褰㈠紡
+     *
+     * @return
+     */
+
+    public static List<Map<String, Object>> getList(String jsonString) {
+        List<Map<String, Object>> list = null;
+        try {
+            JSONArray jsonArray = new JSONArray(jsonString);
+            JSONObject jsonObject;
+
+
+            list = new ArrayList<Map<String, Object>>();
+            for (int i = 0; i < jsonArray.length(); i++) {
+                if (jsonArray.get(i) instanceof String) {
+                    String data = jsonArray.getString(i);
+                    list.add(getMapForJson(data));
+                } else {
+                    jsonObject = jsonArray.getJSONObject(i);
+                    list.add(getMapForJson(jsonObject.toString()));
+                }
+
+
+            }
+        } catch (Exception e) {
+            e.printStackTrace();
+        }
+        return list;
+
+    }
+
+//    /**
+//     * @param str
+//     * @param clazz
+//     * @param <T>
+//     * @return
+//     */
+//    public static <T> List<T> getListByJson(String str, Class<T> clazz) {
+//        try {
+//            JSONArray jsonArray = new JSONArray(str);
+//            List<T> list = new ArrayList<>();
+//            for (int i = 0; i < jsonArray.length(); i++) {
+//                list.add(json2Bean(jsonArray.get(i).toString(), clazz));
+//            }
+//            return list;
+//        } catch (Exception e) {
+//            e.printStackTrace();
+//        }
+//        return null;
+//    }
+
+//    /**
+//     * @param str
+//     * @param clazz
+//     * @param <T>
+//     * @return
+//     */
+//    public static <T> List<T> getListByJson(String str, Class<T> clazz) {
+//        try {
+//            List<T> list = new ArrayList<>();
+//            Gson gson = new Gson();
+//            list = gson.fromJson(str, new TypeToken<List<T>>() {
+//            }.getType());
+//            return list;
+//        } catch (Exception e) {
+//            e.printStackTrace();
+//        }
+//        return null;
+//    }
+
+    /**
+     * 杞垚list
+     * 瑙e喅娉涘瀷闂
+     *
+     * @param json
+     * @param cls
+     * @param <T>
+     * @return
+     */
+    public static <T> List<T> getListByJson(String json, Class<T> cls) {
+        Gson gson = new Gson();
+        List<T> list = new ArrayList<T>();
+        JsonArray array = new JsonParser().parse(json).getAsJsonArray();
+        for (final JsonElement elem : array) {
+            list.add(gson.fromJson(elem, cls));
+        }
+        return list;
+    }
+
+
+//    public static<T> Map<String,Object> getMapFormBean(Class<T> clazz){
+//        JSONObject.parseObject(JSON.toJSONString(object),Map.class);
+//        new JSONObject()
+//    }
+
+}
diff --git a/qiheonlinelibrary/src/main/java/com/dayu/qiheonlinelibrary/utils/SharedPreferencesHelper.java b/qiheonlinelibrary/src/main/java/com/dayu/qiheonlinelibrary/utils/SharedPreferencesHelper.java
new file mode 100644
index 0000000..e4c5619
--- /dev/null
+++ b/qiheonlinelibrary/src/main/java/com/dayu/qiheonlinelibrary/utils/SharedPreferencesHelper.java
@@ -0,0 +1,184 @@
+/**
+ * Copyright (C), 2014-2017, Zhengzhou IMAN Technology Development. Co., Ltd
+ * Company: ImanSoft( http://www.imansoft.cn/ )
+ */
+package com.dayu.qiheonlinelibrary.utils;
+
+import android.content.Context;
+import android.content.SharedPreferences;
+import android.content.SharedPreferences.Editor;
+import android.text.TextUtils;
+import android.util.Base64;
+
+import java.util.Map;
+import java.util.Set;
+
+public class SharedPreferencesHelper {
+    /**
+     *
+     */
+    private SharedPreferences sharedPreferences;
+
+    //
+    public static final String name_file = "wsGameSDK_helper";
+
+    /**
+     * 鏋勯�犲嚱鏁�
+     *
+     * @param context
+     */
+    private SharedPreferencesHelper(Context context, String name, int mode) {
+        super();
+        this.sharedPreferences = context.getSharedPreferences(name, mode);
+    }
+
+    public static SharedPreferencesHelper getInstance(Context context) {
+        return new SharedPreferencesHelper(context, name_file, Context.MODE_PRIVATE);
+    }
+
+    /**
+     * 鑾峰彇鍏变韩寮曠敤瀹炰緥
+     *
+     * @param context activity鐨刢ontext
+     * @param name    鏂囦欢鍚嶇О
+     * @param mode    鏉冮檺鏍囪瘑
+     * @return
+     */
+    public static SharedPreferencesHelper getInstance(Context context, String name, int mode) {
+        return new SharedPreferencesHelper(context, name, mode);
+    }
+
+    /**
+     * 娣诲姞瀛楁
+     *
+     * @param key   瀛楁鍚嶇О
+     * @param value 瀛楁鍊�
+     */
+    public void put(String key, Object value) {
+        try {
+            if (key == null)
+                return;
+            Editor editor = this.sharedPreferences.edit();// 鑾峰彇缂栬緫鍣�
+            if (value == null) {
+                value = "";
+            }
+            if (value != null) {
+                String type = value.getClass().getSimpleName();
+                if ("String".equals(type)) {
+                    String str = (String) value;
+                    // 鍔犲瘑
+                    str = Base64.encodeToString(str.getBytes(), Base64.URL_SAFE | Base64.NO_WRAP);
+                    editor.putString(key, str);
+                } else if ("Integer".equals(type)) {
+                    editor.putInt(key, (Integer) value);
+                } else if ("Boolean".equals(type)) {
+                    editor.putBoolean(key, (Boolean) value);
+                } else if ("Float".equals(type)) {
+                    editor.putFloat(key, (Float) value);
+                } else if ("Long".equals(type)) {
+                    editor.putLong(key, (Long) value);
+                } else {
+                    String str = MyJsonParser.bean2Json(value);
+                    str = Base64.encodeToString(str.getBytes(), Base64.URL_SAFE | Base64.NO_WRAP);
+                    editor.putString(key, str);
+                }
+            }
+            editor.commit();// 鎻愪氦淇敼
+        } catch (Exception e) {
+            e.printStackTrace();
+        }
+    }
+
+    /**
+     * 淇濆瓨鏁版嵁鐨勬柟娉曪紝
+     *
+     * @param headers
+     */
+    public void put(Map<String, String> headers) {
+        try {
+            Editor editor = this.sharedPreferences.edit();// 鑾峰彇缂栬緫鍣�
+            if (headers != null) {
+                Set<String> keys = headers.keySet();
+                for (String key : keys) {
+                    Object value = headers.get(key);
+                    put(key, value);
+                }
+            }
+            editor.commit();
+        } catch (Exception e) {
+            e.printStackTrace();
+        }
+    }
+
+    /**
+     * 鏍规嵁瀛楁鍚嶇О鑾峰彇瀛楁鍊�
+     *
+     * @param <T>
+     * @param key 瀛楁鍚嶇О
+     *            榛樿鍊�
+     * @return
+     */
+    public <T> T get(String key, T defaultValue) {
+        if (defaultValue == null) {
+            return (T) get(key, String.class, defaultValue);
+        } else {
+            return (T) get(key, defaultValue.getClass(), defaultValue);
+        }
+    }
+
+    /**
+     * 鏍规嵁瀛楁鍚嶇О鑾峰彇瀛楁鍊�
+     *
+     * @param key          瀛楁鍚嶇О
+     * @param valueType    瀛楁鍊肩被鍨�
+     * @param defaultValue 榛樿瀛楁鍊�
+     * @return 瀛楁鍊� 濡傛灉杩斿洖鍊肩被鍨嬩笉鍦▄String,Integer,Boolean,Float,Long}涓紝榛樿杩斿洖null.
+     */
+    private <T> Object get(String key, Class<?> valueType, T defaultValue) {
+        String type = valueType.getSimpleName();
+        if ("String".equals(type)) {
+            String value = this.sharedPreferences.getString(key, "");
+            if (TextUtils.isEmpty(value)) {
+                return defaultValue;
+            } else {
+                // 瑙e瘑
+                byte[] bt = Base64.decode(value, Base64.URL_SAFE | Base64.NO_WRAP);
+                String strvalue = new String(bt);
+                return strvalue;
+            }
+
+        } else if ("Integer".equals(type)) {
+            return this.sharedPreferences.getInt(key, (Integer) defaultValue);
+        } else if ("Boolean".equals(type)) {
+            return sharedPreferences.getBoolean(key, (Boolean) defaultValue);
+        } else if ("Float".equals(type)) {
+            return sharedPreferences.getFloat(key, (Float) defaultValue);
+        } else if ("Long".equals(type)) {
+            return sharedPreferences.getLong(key, (Long) defaultValue);
+        }
+        return null;
+    }
+
+    /**
+     * 鏍规嵁瀛楁鍚嶇О鍒犻櫎瀛楁
+     *
+     * @param key 瀛楁鍚嶇О
+     */
+    public void delete(String key) {
+        Editor editor = this.sharedPreferences.edit();
+        editor.remove(key);
+        editor.commit();
+    }
+
+    /**
+     * 娓呯┖鎵�鏈夊瓧娈靛悕绉�
+     *
+     *
+     */
+    public void deleteAll() throws Exception {
+        Editor editor = this.sharedPreferences.edit();
+        editor.clear();
+        editor.commit();
+    }
+
+}
diff --git a/qiheonlinelibrary/src/main/java/com/dayu/qiheonlinelibrary/utils/ToastUtil.java b/qiheonlinelibrary/src/main/java/com/dayu/qiheonlinelibrary/utils/ToastUtil.java
new file mode 100644
index 0000000..a76ed57
--- /dev/null
+++ b/qiheonlinelibrary/src/main/java/com/dayu/qiheonlinelibrary/utils/ToastUtil.java
@@ -0,0 +1,49 @@
+package com.dayu.qiheonlinelibrary.utils;
+
+import android.content.Context;
+import android.text.TextUtils;
+import android.widget.Toast;
+
+/**
+ * Toast宸ュ叿绫�
+ */
+public class ToastUtil {
+
+
+    private static Toast makeText(Context context, CharSequence text, int duration) {
+        return Toast.makeText(context, text, duration);
+    }
+
+    public static void showToastShort(Context context, String s) {
+        if (s != null) {
+            if (!TextUtils.isEmpty(s))
+                makeText(context, s, Toast.LENGTH_SHORT).show();
+        }
+    }
+
+    public static void showToastLong(Context context, String s) {
+        if (!TextUtils.isEmpty(s)) {
+            makeText(context, s, Toast.LENGTH_LONG).show();
+        }
+    }
+
+    public static void showToast(Context context, String s) {
+        if (s != null) {
+            makeText(context, s, Toast.LENGTH_LONG).show();
+        }
+    }
+
+    public static void showToast(Context context, int resId) {
+        showToastLong(context, context.getString(resId));
+    }
+
+    public static void showToastShort(Context context, int resId) {
+        showToastShort(context, context.getString(resId));
+    }
+
+    public static void showToastLong(Context context, int resId) {
+        showToastLong(context, context.getString(resId));
+    }
+
+
+}
diff --git a/qiheonlinelibrary/src/main/java/com/dayu/qiheonlinelibrary/view/AdminCardDialog.java b/qiheonlinelibrary/src/main/java/com/dayu/qiheonlinelibrary/view/AdminCardDialog.java
new file mode 100644
index 0000000..c87ee82
--- /dev/null
+++ b/qiheonlinelibrary/src/main/java/com/dayu/qiheonlinelibrary/view/AdminCardDialog.java
@@ -0,0 +1,114 @@
+package com.dayu.qiheonlinelibrary.view;
+
+import static android.view.Gravity.CENTER;
+
+import android.app.Dialog;
+import android.content.Intent;
+import android.text.TextUtils;
+import android.view.ViewGroup;
+import android.view.WindowManager;
+import android.widget.RadioGroup;
+import android.widget.TextView;
+
+import com.dayu.baselibrary.utils.TipUtil;
+import com.dayu.baselibrary.view.EdtDialog;
+import com.dayu.qiheonlinelibrary.R;
+import com.dayu.qiheonlinelibrary.activity.BaseActivity;
+import com.dayu.qiheonlinelibrary.activity.ManagerListActivity;
+import com.dayu.qiheonlinelibrary.activity.NFCWreatActivity;
+import com.dayu.qiheonlinelibrary.card.ManageCard;
+
+
+/**
+ * author: zuo
+ * Date: 2024-05-08
+ * Time: 17:53
+ * 澶囨敞锛氬埗浣滅鐞嗗崱鏃堕�夋嫨鏈満鐢ㄦ埛杩樻槸鎵嬪姩杈撳叆
+ */
+public class AdminCardDialog extends Dialog {
+
+    BaseActivity mContext;
+    boolean ischose = false;
+
+    int type;
+
+    EdtDialog edtDialog;
+
+    public AdminCardDialog(BaseActivity context) {
+        super(context, com.dayu.baselibrary.R.style.ws_pay_showSelfDialog);
+        mContext = context;
+        initView();
+    }
+
+    private void initView() {
+        getWindow().setGravity(CENTER);
+        setContentView(R.layout.admincard_line_dialog);
+        setCanceledOnTouchOutside(false);
+        RadioGroup radioGroup = findViewById(com.dayu.baselibrary.R.id.radioLibrary);
+
+        radioGroup.setOnCheckedChangeListener((group, checkedId) -> {
+            ischose = true;
+            // 褰撻�変腑鐨凴adioButton鍙戠敓鍙樺寲鏃惰皟鐢�
+            if (checkedId == R.id.local) {
+                type = 0;
+            } else if (checkedId == R.id.input) {// 澶勭悊閫変腑Option 2鐨勯�昏緫
+                type = 1;
+            }
+        });
+        TextView okBtn = findViewById(com.dayu.baselibrary.R.id.ok);
+        okBtn.setOnClickListener(v -> {
+            if (ischose) {
+                if (type == 0) {
+                    Intent intent = new Intent(mContext, ManagerListActivity.class);
+//                    intent.putExtra("cardNumber", cardNumber);
+                    mContext.startActivity(intent);
+                    AdminCardDialog.this.dismiss();
+                } else {
+                    edtDialog = new EdtDialog(mContext, "璇疯緭鍏�8涓瓧绗︾殑16杩涘埗鐨勭敤鎴峰崱鍙�", new EdtDialog.DialogBack() {
+                        @Override
+                        public void onOk(String data) {
+                            if (!TextUtils.isEmpty(data) && data.length() == 8) {
+                                Intent intent = new Intent(mContext, NFCWreatActivity.class);
+                                ManageCard manageCard = new ManageCard();
+                                manageCard.setUserCard(data);
+                                intent.putExtra("manageCard", manageCard);
+                                mContext.startActivity(intent);
+                                mContext.finish();
+                            } else {
+                                TipUtil.show("璇疯緭鍏�8瀛楃鐨勫崱鍙�");
+                            }
+                        }
+
+                        @Override
+                        public void onCancel() {
+                            edtDialog.dismiss();
+                        }
+                    });
+                    edtDialog.show();
+                }
+            }
+        });
+
+
+    }
+
+    @Override
+    public void show() {
+
+        super.show();
+        /**
+         * 璁剧疆瀹藉害鍏ㄥ睆锛岃璁剧疆鍦╯how鐨勫悗闈�
+         */
+        WindowManager.LayoutParams layoutParams = getWindow().getAttributes();
+        layoutParams.gravity = CENTER;
+        layoutParams.width = ViewGroup.LayoutParams.MATCH_PARENT;
+        layoutParams.height = ViewGroup.LayoutParams.MATCH_PARENT;
+        getWindow().getDecorView().setPadding(0, 0, 0, 0);
+        getWindow().setAttributes(layoutParams);
+    }
+
+
+    public interface libraryBack {
+        void listener(int type);
+    }
+}
\ No newline at end of file
diff --git a/qiheonlinelibrary/src/main/java/com/dayu/qiheonlinelibrary/view/ProgressDialog.java b/qiheonlinelibrary/src/main/java/com/dayu/qiheonlinelibrary/view/ProgressDialog.java
new file mode 100644
index 0000000..a759966
--- /dev/null
+++ b/qiheonlinelibrary/src/main/java/com/dayu/qiheonlinelibrary/view/ProgressDialog.java
@@ -0,0 +1,26 @@
+package com.dayu.qiheonlinelibrary.view;
+
+import android.app.Activity;
+import android.app.Dialog;
+
+/**
+ * Created by Android Studio.
+ * author: zuo
+ * Date: 2023-11-22
+ * Time: 13:33
+ * 澶囨敞锛�
+ */
+public class ProgressDialog {
+    static Dialog dialog;
+
+    public static void show(Activity activity) {
+        dialog = android.app.ProgressDialog.show(activity, "", "姝e湪璇诲彇璇风◢鍚�", true, true);
+    }
+
+    public static void dismiss() {
+        if (dialog != null) {
+            dialog.dismiss();
+            dialog = null;
+        }
+    }
+}
diff --git a/qiheonlinelibrary/src/main/res/layout/activity_admin_qhl.xml b/qiheonlinelibrary/src/main/res/layout/activity_admin_qhl.xml
new file mode 100644
index 0000000..149320a
--- /dev/null
+++ b/qiheonlinelibrary/src/main/res/layout/activity_admin_qhl.xml
@@ -0,0 +1,102 @@
+<?xml version="1.0" encoding="utf-8"?>
+<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
+    xmlns:app="http://schemas.android.com/apk/res-auto"
+    android:layout_width="match_parent"
+    android:layout_height="match_parent"
+    android:orientation="vertical">
+
+    <com.dayu.baselibrary.view.TitleBar
+        android:id="@+id/titleBar"
+        android:layout_width="match_parent"
+        android:layout_height="@dimen/dimen_title_height"
+        android:background="@color/title_bar_bg"
+        app:centerText="绠$悊绯荤粺"
+        app:leftImage="@mipmap/icon_back" />
+
+
+    <ScrollView
+        android:layout_width="match_parent"
+        android:layout_height="match_parent">
+
+        <LinearLayout
+            android:layout_width="match_parent"
+            android:layout_height="match_parent"
+            android:orientation="vertical">
+
+            <TextView
+                android:id="@+id/admin_admin"
+                android:layout_width="match_parent"
+                android:layout_height="wrap_content"
+                android:layout_marginLeft="20dp"
+                android:layout_marginTop="20dp"
+                android:padding="5dp"
+                android:text="鍒朵綔绠$悊鍗�"
+                android:textColor="@color/text_selecter_color"
+                android:textSize="@dimen/text_size" />
+
+            <TextView
+                android:id="@+id/admin_cleanZero"
+                android:layout_width="match_parent"
+                android:layout_height="wrap_content"
+                android:layout_marginLeft="20dp"
+                android:layout_marginTop="20dp"
+                android:padding="5dp"
+                android:text="鍒朵綔娓呴浂鍗�"
+                android:visibility="gone"
+                android:textColor="@color/text_selecter_color"
+                android:textSize="@dimen/text_size" />
+
+
+            <TextView
+                android:id="@+id/admin_passWordCard"
+                android:layout_width="match_parent"
+                android:layout_height="wrap_content"
+                android:layout_marginLeft="20dp"
+                android:visibility="gone"
+                android:layout_marginTop="20dp"
+                android:padding="5dp"
+                android:text="鍒朵綔瀵嗙爜鍗�"
+                android:textColor="@color/text_selecter_color"
+                android:textSize="@dimen/text_size" />
+
+
+            <TextView
+                android:id="@+id/admin_blackCard"
+                android:layout_width="match_parent"
+                android:layout_height="wrap_content"
+                android:layout_marginLeft="20dp"
+                android:layout_marginTop="20dp"
+                android:padding="5dp"
+                android:text="鍒朵綔榛戝崱"
+                android:textColor="@color/text_selecter_color"
+                android:textSize="@dimen/text_size"
+                android:visibility="gone" />
+
+            <TextView
+                android:id="@+id/admin_regionCard"
+                android:layout_width="match_parent"
+                android:layout_height="wrap_content"
+                android:layout_marginLeft="20dp"
+                android:layout_marginTop="20dp"
+                android:padding="5dp"
+                android:text="鍒朵綔鍖哄煙琛ㄥ彿鍗�"
+                android:textColor="@color/text_selecter_color"
+                android:textSize="@dimen/text_size" />
+
+            <TextView
+                android:id="@+id/admin_electricCard"
+                android:layout_width="match_parent"
+                android:layout_height="wrap_content"
+                android:layout_marginLeft="20dp"
+                android:layout_marginTop="20dp"
+                android:padding="5dp"
+                android:text="鍒朵綔鐢ㄦ埛鐢甸噺鍗曚环鍗�"
+                android:textColor="@color/text_selecter_color"
+                android:textSize="@dimen/text_size" />
+        </LinearLayout>
+
+
+    </ScrollView>
+
+
+</LinearLayout>
\ No newline at end of file
diff --git a/qiheonlinelibrary/src/main/res/layout/activity_admin_setup_qhl.xml b/qiheonlinelibrary/src/main/res/layout/activity_admin_setup_qhl.xml
new file mode 100644
index 0000000..bc37b1d
--- /dev/null
+++ b/qiheonlinelibrary/src/main/res/layout/activity_admin_setup_qhl.xml
@@ -0,0 +1,172 @@
+<?xml version="1.0" encoding="utf-8"?>
+<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
+    xmlns:app="http://schemas.android.com/apk/res-auto"
+    android:layout_width="match_parent"
+    android:layout_height="match_parent"
+    android:orientation="vertical">
+
+    <com.dayu.baselibrary.view.TitleBar
+        android:id="@+id/titleBar"
+        android:layout_width="match_parent"
+        android:layout_height="@dimen/dimen_title_height"
+        android:background="@color/title_bar_bg"
+        app:centerText="绠$悊鍛樿缃�"
+        app:leftImage="@mipmap/icon_back" />
+
+    <ScrollView
+        android:layout_width="match_parent"
+        android:layout_height="match_parent"
+        android:layout_above="@+id/setup_ok"
+        android:layout_below="@+id/titleBar">
+
+        <LinearLayout
+            android:layout_width="match_parent"
+            android:layout_height="match_parent"
+            android:layout_marginTop="20dp"
+            android:orientation="vertical">
+
+            <LinearLayout
+                style="@style/newCardLL"
+                android:layout_width="match_parent"
+                android:layout_height="wrap_content"
+                android:visibility="gone">
+
+                <TextView
+                    android:layout_width="0dp"
+                    android:layout_height="wrap_content"
+                    android:layout_weight="1"
+                    android:text="@string/eq_no"
+                    android:textSize="@dimen/new_card_size" />
+
+                <EditText
+                    android:id="@+id/admin_serial"
+                    android:layout_width="0dp"
+                    android:layout_height="@dimen/edt_height"
+                    android:layout_weight="2"
+                    android:background="@drawable/editbg"
+                    android:inputType="number"
+                    android:lines="1"
+                    android:maxLength="5"
+                    android:paddingLeft="10dp"
+                    android:textSize="@dimen/new_card_size" />
+
+
+            </LinearLayout>
+
+
+            <LinearLayout
+                android:id="@+id/chose_address_code"
+                style="@style/newCardLL"
+                android:layout_width="match_parent"
+                android:layout_height="wrap_content">
+
+                <TextView
+                    android:layout_width="0dp"
+                    android:layout_height="wrap_content"
+                    android:layout_weight="1"
+                    android:text="@string/address_code"
+                    android:textSize="@dimen/new_card_size" />
+
+                <EditText
+                    android:id="@+id/admin_address_code"
+                    android:layout_width="0dp"
+                    android:layout_height="@dimen/edt_height"
+                    android:layout_weight="2"
+                    android:background="@drawable/editbg"
+                    android:inputType="number"
+                    android:lines="1"
+                    android:maxLength="5"
+                    android:paddingLeft="10dp"
+                    android:textSize="@dimen/new_card_size" />
+            </LinearLayout>
+
+            <LinearLayout
+                style="@style/newCardLL"
+                android:layout_width="match_parent"
+                android:layout_height="wrap_content"
+                android:visibility="gone">
+
+                <TextView
+                    android:layout_width="0dp"
+                    android:layout_height="wrap_content"
+                    android:layout_weight="1.5"
+                    android:text="姘村崟浠�(鍏�/鍚�)"
+                    android:textSize="@dimen/new_card_size" />
+
+                <EditText
+                    android:id="@+id/admin_waterPrice"
+                    android:layout_width="0dp"
+                    android:layout_height="@dimen/edt_height"
+                    android:layout_weight="2"
+                    android:background="@drawable/editbg"
+                    android:inputType="numberDecimal"
+                    android:lines="1"
+                    android:paddingLeft="10dp"
+                    android:textSize="@dimen/new_card_size" />
+
+
+            </LinearLayout>
+            <LinearLayout
+                style="@style/newCardLL"
+                android:layout_width="match_parent"
+                android:layout_height="wrap_content"
+                android:visibility="visible">
+
+                <TextView
+                    android:layout_width="0dp"
+                    android:layout_height="wrap_content"
+                    android:layout_weight="1.5"
+                    android:text="鐢靛崟浠�(鍏�/搴�)"
+                    android:textSize="@dimen/new_card_size" />
+
+                <EditText
+                    android:id="@+id/electric_newNum"
+                    android:layout_width="0dp"
+                    android:layout_height="@dimen/edt_height"
+                    android:layout_weight="2"
+                    android:background="@drawable/editbg"
+                    android:inputType="numberDecimal"
+                    android:lines="1"
+                    android:paddingLeft="10dp"
+                    android:textSize="@dimen/new_card_size" />
+
+
+            </LinearLayout>
+            <LinearLayout
+                android:id="@+id/chose_address"
+                style="@style/newCardLL"
+                android:layout_width="match_parent"
+                android:layout_height="wrap_content"
+                android:visibility="gone">
+
+                <TextView
+                    android:layout_width="wrap_content"
+                    android:layout_height="wrap_content"
+                    android:text="鍦板潃锛�"
+                    android:textSize="@dimen/new_card_size" />
+
+                <TextView
+                    android:id="@+id/admin_address"
+                    android:layout_width="match_parent"
+                    android:layout_height="wrap_content"
+                    android:hint="璇风偣鍑婚�夋嫨"
+                    android:textSize="@dimen/new_card_size" />
+            </LinearLayout>
+        </LinearLayout>
+
+
+    </ScrollView>
+
+
+    <TextView
+        android:id="@+id/setup_ok"
+        android:layout_width="match_parent"
+        android:layout_height="50dp"
+        android:layout_alignParentBottom="true"
+        android:background="@color/title_bg"
+        android:gravity="center"
+        android:text="纭�  瀹�"
+        android:textSize="@dimen/text_size" />
+
+
+</RelativeLayout>
\ No newline at end of file
diff --git a/qiheonlinelibrary/src/main/res/layout/activity_domain_qhl.xml b/qiheonlinelibrary/src/main/res/layout/activity_domain_qhl.xml
new file mode 100644
index 0000000..df470ab
--- /dev/null
+++ b/qiheonlinelibrary/src/main/res/layout/activity_domain_qhl.xml
@@ -0,0 +1,83 @@
+<?xml version="1.0" encoding="utf-8"?>
+<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
+    xmlns:app="http://schemas.android.com/apk/res-auto"
+    android:layout_width="match_parent"
+    android:layout_height="match_parent"
+    android:orientation="vertical">
+
+    <com.dayu.baselibrary.view.TitleBar
+        android:id="@+id/titleBar"
+        android:layout_width="match_parent"
+        android:layout_height="@dimen/dimen_title_height"
+        android:background="@color/title_bar_bg"
+        app:centerText="鍩熷悕璁剧疆"
+        app:leftImage="@mipmap/icon_back" />
+
+    <LinearLayout
+        android:id="@+id/domain_ll"
+        android:layout_width="match_parent"
+        android:layout_height="wrap_content"
+        android:layout_below="@id/titleBar"
+        android:layout_marginStart="20dp"
+        android:layout_marginTop="20dp"
+        android:layout_marginEnd="20dp"
+        android:layout_marginBottom="20dp"
+        android:orientation="vertical">
+
+
+        <TextView
+            android:id="@+id/domain_oldTV"
+            android:layout_width="wrap_content"
+            android:layout_height="match_parent"
+            android:layout_marginTop="10dp"
+            android:textSize="@dimen/text_size" />
+
+    </LinearLayout>
+
+    <EditText
+        android:id="@+id/domainNumber"
+        android:layout_width="match_parent"
+        android:layout_height="wrap_content"
+        android:layout_below="@+id/domain_ll"
+        android:layout_alignParentStart="true"
+        android:layout_marginStart="20dp"
+        android:layout_marginTop="20dp"
+        android:layout_marginEnd="20dp"
+        android:hint="璇疯緭鍏ユ柊鐨勫煙鍚嶅簭鍙�"
+        android:inputType="number" />
+    <EditText
+        android:id="@+id/domain"
+        android:layout_width="match_parent"
+        android:layout_height="wrap_content"
+        android:layout_below="@+id/domainNumber"
+        android:layout_alignParentStart="true"
+        android:layout_marginStart="20dp"
+        android:layout_marginTop="20dp"
+        android:layout_marginEnd="20dp"
+        android:layout_marginBottom="20dp"
+        android:maxLength="38"
+        android:hint="璇疯緭鍏ユ柊鐨勫煙鍚�"
+        android:inputType="textUri" />
+
+    <EditText
+        android:id="@+id/port"
+        android:layout_width="match_parent"
+        android:layout_height="wrap_content"
+        android:layout_below="@+id/domain"
+        android:layout_alignParentStart="true"
+        android:layout_marginStart="20dp"
+        android:layout_marginEnd="20dp"
+        android:layout_marginBottom="20dp"
+        android:hint="璇疯緭鍏ユ柊鐨勭鍙�"
+        android:inputType="number" />
+
+    <TextView
+        android:id="@+id/electric_ok"
+        android:layout_width="match_parent"
+        android:layout_height="50dp"
+        android:layout_alignParentBottom="true"
+        android:background="@color/title_bg"
+        android:gravity="center"
+        android:text="纭�  瀹�"
+        android:textSize="@dimen/text_size" />
+</RelativeLayout>
\ No newline at end of file
diff --git a/qiheonlinelibrary/src/main/res/layout/activity_electric_meter_qhl.xml b/qiheonlinelibrary/src/main/res/layout/activity_electric_meter_qhl.xml
new file mode 100644
index 0000000..6ce3c3e
--- /dev/null
+++ b/qiheonlinelibrary/src/main/res/layout/activity_electric_meter_qhl.xml
@@ -0,0 +1,58 @@
+<?xml version="1.0" encoding="utf-8"?>
+<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
+    xmlns:app="http://schemas.android.com/apk/res-auto"
+    android:layout_width="match_parent"
+    android:layout_height="match_parent"
+    android:orientation="vertical">
+
+    <com.dayu.baselibrary.view.TitleBar
+        android:id="@+id/titleBar"
+        android:layout_width="match_parent"
+        android:layout_height="@dimen/dimen_title_height"
+        android:background="@color/title_bar_bg"
+        app:centerText="姘磋〃鑴夊啿璁剧疆"
+        app:leftImage="@mipmap/icon_back" />
+
+    <LinearLayout
+        android:id="@+id/electric_ll"
+        android:layout_width="match_parent"
+        android:layout_height="wrap_content"
+        android:layout_below="@id/titleBar"
+        android:layout_margin="20dp"
+        android:orientation="horizontal">
+
+        <TextView
+            android:layout_width="wrap_content"
+            android:layout_height="wrap_content"
+            android:text="褰撳墠鐢佃〃鑴夊啿锛�"
+            android:textSize="@dimen/text_size" />
+
+        <TextView
+            android:id="@+id/electric_oldNumber"
+            android:layout_width="wrap_content"
+            android:layout_height="match_parent"
+            android:textSize="@dimen/text_size" />
+
+    </LinearLayout>
+
+
+    <EditText
+        android:id="@+id/electric_newNum"
+        android:layout_width="match_parent"
+        android:layout_height="wrap_content"
+        android:layout_below="@+id/electric_ll"
+        android:layout_alignParentStart="true"
+        android:layout_margin="20dp"
+        android:inputType="number"
+        android:hint="璇疯緭鍏ユ柊璁剧疆鑴夊啿鍊�" />
+
+    <TextView
+        android:id="@+id/electric_ok"
+        android:layout_width="match_parent"
+        android:layout_height="50dp"
+        android:layout_alignParentBottom="true"
+        android:background="@color/title_bg"
+        android:gravity="center"
+        android:text="纭�  瀹�"
+        android:textSize="@dimen/text_size" />
+</RelativeLayout>
\ No newline at end of file
diff --git a/qiheonlinelibrary/src/main/res/layout/activity_electric_price_qhl.xml b/qiheonlinelibrary/src/main/res/layout/activity_electric_price_qhl.xml
new file mode 100644
index 0000000..635192b
--- /dev/null
+++ b/qiheonlinelibrary/src/main/res/layout/activity_electric_price_qhl.xml
@@ -0,0 +1,61 @@
+<?xml version="1.0" encoding="utf-8"?>
+<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
+    xmlns:app="http://schemas.android.com/apk/res-auto"
+    android:layout_width="match_parent"
+    android:layout_height="match_parent"
+    android:orientation="vertical">
+
+    <com.dayu.baselibrary.view.TitleBar
+        android:id="@+id/titleBar"
+        android:layout_width="match_parent"
+        android:layout_height="@dimen/dimen_title_height"
+        android:background="@color/title_bar_bg"
+        app:centerText="鐢典环璁剧疆"
+        app:leftImage="@mipmap/icon_back" />
+
+    <LinearLayout
+        android:id="@+id/electric_ll"
+        android:layout_width="match_parent"
+        android:layout_height="wrap_content"
+        android:layout_below="@id/titleBar"
+        android:layout_margin="20dp"
+        android:orientation="horizontal">
+
+        <TextView
+            android:layout_width="wrap_content"
+            android:layout_height="wrap_content"
+            android:text="褰撳墠鐢典环锛�"
+            android:textSize="@dimen/text_size" />
+
+        <TextView
+            android:id="@+id/electric_oldNumber"
+            android:layout_width="wrap_content"
+            android:layout_height="match_parent"
+            android:textSize="@dimen/text_size" />
+
+    </LinearLayout>
+
+
+    <EditText
+        android:id="@+id/electric_newNum"
+        android:layout_width="match_parent"
+        android:layout_height="wrap_content"
+        android:layout_below="@+id/electric_ll"
+        android:layout_alignParentStart="true"
+        android:layout_marginStart="20dp"
+        android:layout_marginTop="20dp"
+        android:layout_marginEnd="20dp"
+        android:layout_marginBottom="20dp"
+        android:hint="璇疯緭鍏ユ柊鐢典环"
+        android:inputType="numberDecimal" />
+
+    <TextView
+        android:id="@+id/electric_ok"
+        android:layout_width="match_parent"
+        android:layout_height="50dp"
+        android:layout_alignParentBottom="true"
+        android:background="@color/title_bg"
+        android:gravity="center"
+        android:text="纭�  瀹�"
+        android:textSize="@dimen/text_size" />
+</RelativeLayout>
\ No newline at end of file
diff --git a/qiheonlinelibrary/src/main/res/layout/activity_electricty_price_qhl.xml b/qiheonlinelibrary/src/main/res/layout/activity_electricty_price_qhl.xml
new file mode 100644
index 0000000..1588e77
--- /dev/null
+++ b/qiheonlinelibrary/src/main/res/layout/activity_electricty_price_qhl.xml
@@ -0,0 +1,211 @@
+<?xml version="1.0" encoding="utf-8"?>
+<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
+    xmlns:app="http://schemas.android.com/apk/res-auto"
+    android:layout_width="match_parent"
+    android:layout_height="match_parent"
+    android:orientation="vertical">
+
+    <com.dayu.baselibrary.view.TitleBar
+        android:id="@+id/titleBar"
+        android:layout_width="match_parent"
+        android:layout_height="@dimen/dimen_title_height"
+        android:background="@color/title_bar_bg"
+        app:centerText="姘撮噺鍗曚环璁剧疆"
+        app:leftImage="@mipmap/icon_back" />
+
+    <LinearLayout
+        android:layout_width="match_parent"
+        android:layout_height="wrap_content"
+        android:layout_below="@id/titleBar"
+        android:orientation="vertical">
+
+        <LinearLayout
+            android:id="@+id/water_ll"
+            android:layout_width="match_parent"
+            android:layout_height="wrap_content"
+            android:layout_marginLeft="20dp"
+            android:layout_marginTop="10dp"
+            android:layout_marginRight="20dp"
+            android:orientation="horizontal">
+
+            <TextView
+                android:layout_width="wrap_content"
+                android:layout_height="wrap_content"
+                android:text="绗竴闃舵姘翠环锛�"
+                android:textSize="@dimen/text_size" />
+
+            <!--        <TextView-->
+            <!--            android:id="@+id/water_oldNumber"-->
+            <!--            android:layout_width="wrap_content"-->
+            <!--            android:layout_height="match_parent"-->
+            <!--            android:textSize="@dimen/text_size" />-->
+            <EditText
+                android:id="@+id/water_newNum"
+                android:layout_width="match_parent"
+                android:layout_height="wrap_content"
+                android:layout_below="@+id/water_ll"
+                android:layout_alignParentStart="true"
+                android:hint="璇疯緭鍏ユ柊璁剧疆鐨勫崟浠�"
+                android:inputType="numberDecimal" />
+        </LinearLayout>
+
+        <LinearLayout
+            android:layout_width="wrap_content"
+            android:layout_height="wrap_content"
+            android:layout_marginLeft="20dp"
+            android:layout_marginTop="10dp"
+            android:layout_marginRight="20dp"
+            android:orientation="horizontal">
+
+            <TextView
+                android:layout_width="wrap_content"
+                android:layout_height="wrap_content"
+                android:text="姘撮噺锛堟柟锛夛細"
+                android:textSize="@dimen/text_size" />
+
+            <!--        <TextView-->
+            <!--            android:id="@+id/water_oldNumber"-->
+            <!--            android:layout_width="wrap_content"-->
+            <!--            android:layout_height="match_parent"-->
+            <!--            android:textSize="@dimen/text_size" />-->
+            <EditText
+
+                android:layout_width="match_parent"
+                android:layout_height="wrap_content"
+                android:layout_below="@+id/water_ll"
+                android:layout_alignParentStart="true"
+                android:hint="璇疯緭鍏ョ涓�闃舵姘撮噺锛堟柟锛�"
+                android:inputType="numberDecimal" />
+
+        </LinearLayout>
+        <LinearLayout
+
+            android:layout_width="match_parent"
+            android:layout_height="wrap_content"
+            android:layout_marginLeft="20dp"
+            android:layout_marginTop="10dp"
+            android:layout_marginRight="20dp"
+            android:orientation="horizontal">
+
+            <TextView
+                android:layout_width="wrap_content"
+                android:layout_height="wrap_content"
+                android:text="绗簩闃舵姘翠环锛�"
+                android:textSize="@dimen/text_size" />
+
+            <!--        <TextView-->
+            <!--            android:id="@+id/water_oldNumber"-->
+            <!--            android:layout_width="wrap_content"-->
+            <!--            android:layout_height="match_parent"-->
+            <!--            android:textSize="@dimen/text_size" />-->
+            <EditText
+
+                android:layout_width="match_parent"
+                android:layout_height="wrap_content"
+                android:layout_below="@+id/water_ll"
+                android:layout_alignParentStart="true"
+                android:hint="璇疯緭鍏ユ柊璁剧疆鐨勫崟浠�"
+                android:inputType="numberDecimal" />
+        </LinearLayout>
+
+        <LinearLayout
+            android:layout_width="wrap_content"
+            android:layout_height="wrap_content"
+            android:layout_marginLeft="20dp"
+            android:layout_marginTop="10dp"
+            android:layout_marginRight="20dp"
+            android:orientation="horizontal">
+
+            <TextView
+                android:layout_width="wrap_content"
+                android:layout_height="wrap_content"
+                android:text="姘撮噺锛堟柟锛夛細"
+                android:textSize="@dimen/text_size" />
+
+            <!--        <TextView-->
+            <!--            android:id="@+id/water_oldNumber"-->
+            <!--            android:layout_width="wrap_content"-->
+            <!--            android:layout_height="match_parent"-->
+            <!--            android:textSize="@dimen/text_size" />-->
+            <EditText
+
+                android:layout_width="match_parent"
+                android:layout_height="wrap_content"
+                android:layout_below="@+id/water_ll"
+                android:layout_alignParentStart="true"
+                android:hint="璇疯緭鍏ョ浜岄樁姊按閲忥紙鏂癸級"
+                android:inputType="numberDecimal" />
+
+        </LinearLayout>
+        <LinearLayout
+
+            android:layout_width="match_parent"
+            android:layout_height="wrap_content"
+            android:layout_marginLeft="20dp"
+            android:layout_marginTop="10dp"
+            android:layout_marginRight="20dp"
+            android:orientation="horizontal">
+
+            <TextView
+                android:layout_width="wrap_content"
+                android:layout_height="wrap_content"
+                android:text="绗笁闃舵姘翠环锛�"
+                android:textSize="@dimen/text_size" />
+
+            <!--        <TextView-->
+            <!--            android:id="@+id/water_oldNumber"-->
+            <!--            android:layout_width="wrap_content"-->
+            <!--            android:layout_height="match_parent"-->
+            <!--            android:textSize="@dimen/text_size" />-->
+            <EditText
+
+                android:layout_width="match_parent"
+                android:layout_height="wrap_content"
+                android:layout_below="@+id/water_ll"
+                android:layout_alignParentStart="true"
+                android:hint="璇疯緭鍏ユ柊璁剧疆鐨勫崟浠�"
+                android:inputType="numberDecimal" />
+        </LinearLayout>
+
+        <LinearLayout
+            android:layout_width="wrap_content"
+            android:layout_height="wrap_content"
+            android:layout_marginLeft="20dp"
+            android:layout_marginTop="10dp"
+            android:layout_marginRight="20dp"
+            android:orientation="horizontal">
+
+            <TextView
+                android:layout_width="wrap_content"
+                android:layout_height="wrap_content"
+                android:text="姘撮噺锛堟柟锛夛細"
+                android:textSize="@dimen/text_size" />
+
+            <!--        <TextView-->
+            <!--            android:id="@+id/water_oldNumber"-->
+            <!--            android:layout_width="wrap_content"-->
+            <!--            android:layout_height="match_parent"-->
+            <!--            android:textSize="@dimen/text_size" />-->
+            <EditText
+
+                android:layout_width="match_parent"
+                android:layout_height="wrap_content"
+                android:layout_below="@+id/water_ll"
+                android:layout_alignParentStart="true"
+                android:hint="璇疯緭鍏ョ涓夐樁姊按閲忥紙鏂癸級"
+                android:inputType="numberDecimal" />
+
+        </LinearLayout>
+    </LinearLayout>
+
+
+    <TextView
+        android:id="@+id/water_ok"
+        android:layout_width="match_parent"
+        android:layout_height="50dp"
+        android:layout_alignParentBottom="true"
+        android:background="@color/title_bg"
+        android:gravity="center"
+        android:text="纭�  瀹�"
+        android:textSize="@dimen/text_size" />
+</RelativeLayout>
\ No newline at end of file
diff --git a/qiheonlinelibrary/src/main/res/layout/activity_home_qhl.xml b/qiheonlinelibrary/src/main/res/layout/activity_home_qhl.xml
new file mode 100644
index 0000000..7fadb46
--- /dev/null
+++ b/qiheonlinelibrary/src/main/res/layout/activity_home_qhl.xml
@@ -0,0 +1,93 @@
+<?xml version="1.0" encoding="utf-8"?>
+<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
+    xmlns:app="http://schemas.android.com/apk/res-auto"
+    android:layout_width="match_parent"
+    android:layout_height="match_parent"
+    android:orientation="vertical">
+
+    <com.dayu.baselibrary.view.TitleBar
+        android:id="@+id/titleBar"
+        android:layout_width="match_parent"
+        android:layout_height="@dimen/dimen_title_height"
+        android:background="@color/title_bar_bg"
+        app:centerText="榻愭渤鑱旂綉鐗堥椤�" />
+
+    <LinearLayout
+        android:layout_width="match_parent"
+        android:layout_height="50dp"
+        android:layout_gravity="center"
+        android:layout_marginTop="30dp"
+        android:orientation="horizontal">
+
+        <TextView
+            android:id="@+id/home_newCard"
+            android:layout_width="0dp"
+            android:layout_height="match_parent"
+            android:layout_weight="1"
+            android:gravity="center"
+            android:text="鏂板崱寮�鎴�"
+            android:textColor="@color/text_selecter_color"
+            android:textSize="@dimen/home_text_size" />
+
+        <TextView
+            android:id="@+id/home_recharge"
+            android:layout_width="0dp"
+            android:layout_height="match_parent"
+            android:layout_weight="1"
+            android:gravity="center"
+            android:text="鍏呭��"
+            android:textColor="@color/text_selecter_color"
+            android:textSize="@dimen/home_text_size" />
+
+        <TextView
+            android:id="@+id/home_redCard"
+            android:layout_width="0dp"
+            android:layout_height="match_parent"
+            android:layout_weight="1"
+            android:gravity="center"
+            android:text="璇诲彇鍗$墖"
+            android:textColor="@color/text_selecter_color"
+            android:textSize="@dimen/home_text_size" />
+    </LinearLayout>
+
+    <LinearLayout
+        android:layout_width="match_parent"
+        android:layout_height="50dp"
+        android:layout_gravity="center"
+        android:layout_marginTop="30dp"
+        android:orientation="horizontal">
+
+        <TextView
+            android:id="@+id/home_admin"
+            android:layout_width="0dp"
+            android:layout_height="match_parent"
+            android:layout_weight="1"
+            android:gravity="center"
+            android:text="绠$悊绯荤粺"
+            android:textColor="@color/text_selecter_color"
+            android:textSize="@dimen/home_text_size" />
+
+        <TextView
+            android:id="@+id/home_parameter"
+            android:layout_width="0dp"
+            android:layout_height="match_parent"
+            android:layout_weight="1"
+            android:gravity="center"
+            android:text="鍙傛暟璁剧疆"
+            android:textColor="@color/text_selecter_color"
+            android:textSize="@dimen/home_text_size" />
+
+        <TextView
+            android:id="@+id/home_my"
+            android:layout_width="0dp"
+            android:layout_height="match_parent"
+            android:layout_weight="1"
+            android:gravity="center"
+            android:text="涓汉涓績"
+            android:textColor="@color/text_selecter_color"
+            android:textSize="@dimen/home_text_size" />
+    </LinearLayout>
+
+
+
+</LinearLayout>
\ No newline at end of file
diff --git a/qiheonlinelibrary/src/main/res/layout/activity_identyfying_qhl.xml b/qiheonlinelibrary/src/main/res/layout/activity_identyfying_qhl.xml
new file mode 100644
index 0000000..66068dd
--- /dev/null
+++ b/qiheonlinelibrary/src/main/res/layout/activity_identyfying_qhl.xml
@@ -0,0 +1,90 @@
+<?xml version="1.0" encoding="utf-8"?>
+<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
+    xmlns:app="http://schemas.android.com/apk/res-auto"
+    android:layout_width="match_parent"
+    android:layout_height="match_parent"
+    android:orientation="vertical">
+
+    <com.dayu.baselibrary.view.TitleBar
+        android:id="@+id/titleBar"
+        android:layout_width="match_parent"
+        android:layout_height="@dimen/dimen_title_height"
+        android:background="@color/title_bar_bg"
+        app:centerText="鍗℃爣璇嗙爜璁剧疆"
+        app:leftImage="@mipmap/icon_back" />
+
+
+    <RelativeLayout
+        android:id="@+id/chooseCardType"
+        android:layout_width="match_parent"
+        android:layout_height="45dp"
+        android:layout_below="@id/titleBar"
+        android:layout_marginLeft="20dp"
+        android:layout_marginTop="20dp"
+        android:layout_marginRight="20dp"
+        android:background="@drawable/ic_choose_gray_edge">
+
+        <TextView
+            android:id="@+id/chooseCardTypeText"
+            android:layout_width="wrap_content"
+            android:layout_height="wrap_content"
+            android:layout_centerVertical="true"
+            android:layout_marginLeft="10dp"
+            android:hint="璇烽�夋嫨鍗$被鍨�"
+            android:textColor="#000000"
+            android:textSize="18sp" />
+
+        <ImageView
+            android:layout_width="15dp"
+            android:layout_height="15dp"
+            android:layout_alignParentRight="true"
+            android:layout_centerVertical="true"
+            android:layout_marginRight="8dp"
+            android:src="@mipmap/icon_bottom" />
+    </RelativeLayout>
+
+    <LinearLayout
+        android:id="@+id/electric_ll"
+        android:layout_width="match_parent"
+        android:layout_height="wrap_content"
+        android:layout_below="@id/chooseCardType"
+        android:layout_margin="20dp"
+
+        android:orientation="horizontal">
+
+        <TextView
+            android:layout_width="wrap_content"
+            android:layout_height="wrap_content"
+            android:textColor="#000000"
+            android:text="褰撳墠鍗℃爣璇嗭細"
+            android:textSize="@dimen/text_size" />
+
+        <TextView
+            android:id="@+id/electric_oldNumber"
+            android:layout_width="wrap_content"
+            android:layout_height="match_parent"
+            android:textSize="@dimen/text_size" />
+
+    </LinearLayout>
+
+
+    <EditText
+        android:id="@+id/electric_newNum"
+        android:layout_width="match_parent"
+        android:layout_height="wrap_content"
+        android:layout_below="@+id/electric_ll"
+        android:layout_alignParentStart="true"
+        android:layout_margin="20dp"
+        android:hint="璇疯緭鍏ユ柊鐨勫崱鏍囪瘑"
+        android:inputType="number" />
+
+    <TextView
+        android:id="@+id/electric_ok"
+        android:layout_width="match_parent"
+        android:layout_height="50dp"
+        android:layout_alignParentBottom="true"
+        android:background="@color/title_bg"
+        android:gravity="center"
+        android:text="纭�  瀹�"
+        android:textSize="@dimen/text_size" />
+</RelativeLayout>
\ No newline at end of file
diff --git a/qiheonlinelibrary/src/main/res/layout/activity_ip_qhl.xml b/qiheonlinelibrary/src/main/res/layout/activity_ip_qhl.xml
new file mode 100644
index 0000000..bf9ff90
--- /dev/null
+++ b/qiheonlinelibrary/src/main/res/layout/activity_ip_qhl.xml
@@ -0,0 +1,71 @@
+<?xml version="1.0" encoding="utf-8"?>
+<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
+    xmlns:app="http://schemas.android.com/apk/res-auto"
+    android:layout_width="match_parent"
+    android:layout_height="match_parent"
+    android:orientation="vertical">
+
+    <com.dayu.baselibrary.view.TitleBar
+        android:id="@+id/titleBar"
+        android:layout_width="match_parent"
+        android:layout_height="@dimen/dimen_title_height"
+        android:background="@color/title_bar_bg"
+        app:centerText="IP璁剧疆"
+        app:leftImage="@mipmap/icon_back" />
+
+    <LinearLayout
+        android:layout_width="match_parent"
+        android:layout_height="wrap_content"
+        android:layout_margin="20dp"
+        android:orientation="horizontal">
+
+        <TextView
+            android:layout_width="wrap_content"
+            android:layout_height="wrap_content"
+            android:text="IP锛�"
+            android:textSize="@dimen/text_size" />
+
+        <EditText
+            android:id="@+id/ip"
+            android:layout_width="match_parent"
+            android:layout_height="wrap_content"
+            android:hint="socket閫氫俊IP"
+            android:text="dayuyanjiuyuan.top" />
+
+
+    </LinearLayout>
+
+    <LinearLayout
+        android:layout_width="match_parent"
+        android:layout_height="wrap_content"
+        android:layout_margin="20dp"
+        android:orientation="horizontal">
+
+        <TextView
+            android:layout_width="wrap_content"
+            android:layout_height="wrap_content"
+            android:text="绔彛锛�"
+            android:textSize="@dimen/text_size" />
+
+        <EditText
+            android:id="@+id/port"
+            android:layout_width="match_parent"
+            android:layout_height="wrap_content"
+            android:hint="socket閫氫俊绔彛"
+            android:inputType="number"
+            android:text="08888" />
+    </LinearLayout>
+
+
+    <TextView
+        android:id="@+id/ip_ok"
+        android:layout_width="match_parent"
+        android:layout_height="wrap_content"
+        android:layout_margin="20dp"
+        android:background="@color/title_bg"
+        android:gravity="center"
+        android:padding="10dp"
+        android:text="淇濆瓨"
+        android:textColor="#ffffff"
+        android:textSize="@dimen/text_size" />
+</LinearLayout>
\ No newline at end of file
diff --git a/qiheonlinelibrary/src/main/res/layout/activity_location_qhl.xml b/qiheonlinelibrary/src/main/res/layout/activity_location_qhl.xml
new file mode 100644
index 0000000..427ebce
--- /dev/null
+++ b/qiheonlinelibrary/src/main/res/layout/activity_location_qhl.xml
@@ -0,0 +1,33 @@
+<?xml version="1.0" encoding="utf-8"?>
+<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
+    xmlns:app="http://schemas.android.com/apk/res-auto"
+    android:layout_width="match_parent"
+    android:layout_height="match_parent"
+    android:orientation="vertical">
+
+    <com.dayu.baselibrary.view.TitleBar
+        android:id="@+id/titleBar"
+        android:layout_width="match_parent"
+        android:layout_height="@dimen/dimen_title_height"
+        android:background="@color/title_bar_bg"
+        app:centerText="鍒朵綔缁忕含搴﹀崱"
+        app:leftImage="@mipmap/icon_back" />
+
+    <LinearLayout
+        android:layout_width="match_parent"
+        android:layout_height="match_parent"
+        android:gravity="center"
+        android:orientation="vertical">
+
+        <TextView
+            android:id="@+id/startLocation"
+            android:layout_width="wrap_content"
+            android:layout_height="wrap_content"
+            android:text="寮�濮嬪畾浣�"
+            android:textSize="@dimen/text_size" />
+
+
+    </LinearLayout>
+
+
+</LinearLayout>
\ No newline at end of file
diff --git a/qiheonlinelibrary/src/main/res/layout/activity_main_qhl.xml b/qiheonlinelibrary/src/main/res/layout/activity_main_qhl.xml
new file mode 100644
index 0000000..d0fd0d5
--- /dev/null
+++ b/qiheonlinelibrary/src/main/res/layout/activity_main_qhl.xml
@@ -0,0 +1,27 @@
+<?xml version="1.0" encoding="utf-8"?>
+<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
+    xmlns:tools="http://schemas.android.com/tools"
+    android:layout_width="match_parent"
+    android:layout_height="match_parent"
+    android:gravity="center"
+    android:orientation="vertical"
+    android:paddingBottom="@dimen/activity_vertical_margin"
+    android:paddingLeft="@dimen/activity_horizontal_margin"
+    android:paddingRight="@dimen/activity_horizontal_margin"
+    android:paddingTop="@dimen/activity_vertical_margin"
+    tools:context="com.dayu.qihealonelibrary.activity.MainActivity">
+
+    <TextView
+        android:id="@+id/write"
+        android:layout_width="wrap_content"
+        android:layout_height="wrap_content"
+        android:text="鍐欐暟鎹�" />
+
+    <TextView
+        android:id="@+id/read"
+        android:layout_width="wrap_content"
+        android:layout_height="wrap_content"
+        android:layout_marginTop="50dp"
+        android:text="璇绘暟鎹�" />
+
+</LinearLayout>
diff --git a/qiheonlinelibrary/src/main/res/layout/activity_manager_list_qhl.xml b/qiheonlinelibrary/src/main/res/layout/activity_manager_list_qhl.xml
new file mode 100644
index 0000000..5e2ac56
--- /dev/null
+++ b/qiheonlinelibrary/src/main/res/layout/activity_manager_list_qhl.xml
@@ -0,0 +1,37 @@
+<?xml version="1.0" encoding="utf-8"?>
+<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
+    xmlns:app="http://schemas.android.com/apk/res-auto"
+    android:layout_width="match_parent"
+    android:layout_height="match_parent"
+    android:orientation="vertical">
+
+    <com.dayu.baselibrary.view.TitleBar
+        android:id="@+id/titleBar"
+        android:layout_width="match_parent"
+        android:layout_height="@dimen/dimen_title_height"
+        android:background="@color/title_bar_bg"
+        app:centerText="閫夋嫨鏈満鐢ㄦ埛"
+        app:leftImage="@mipmap/icon_back"
+        app:rightText="绛涢��" />
+
+    <com.scwang.smart.refresh.layout.SmartRefreshLayout
+        android:id="@+id/refreshLayout"
+        android:layout_width="match_parent"
+        android:layout_height="match_parent"
+        android:layout_below="@+id/titleBar">
+
+        <androidx.recyclerview.widget.RecyclerView
+            android:id="@+id/recyclerView"
+            android:layout_width="match_parent"
+            android:layout_height="match_parent"
+            android:background="#ffffff"
+            android:overScrollMode="never"
+            android:padding="10dp" />
+
+        <com.scwang.smart.refresh.footer.ClassicsFooter
+            android:layout_width="match_parent"
+            android:layout_height="wrap_content" />
+    </com.scwang.smart.refresh.layout.SmartRefreshLayout>
+
+
+</RelativeLayout>
\ No newline at end of file
diff --git a/qiheonlinelibrary/src/main/res/layout/activity_manager_read_qhl.xml b/qiheonlinelibrary/src/main/res/layout/activity_manager_read_qhl.xml
new file mode 100644
index 0000000..513ae23
--- /dev/null
+++ b/qiheonlinelibrary/src/main/res/layout/activity_manager_read_qhl.xml
@@ -0,0 +1,196 @@
+<?xml version="1.0" encoding="utf-8"?>
+<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
+    xmlns:app="http://schemas.android.com/apk/res-auto"
+    android:layout_width="match_parent"
+    android:layout_height="match_parent"
+    android:orientation="vertical">
+
+    <com.dayu.baselibrary.view.TitleBar
+        android:id="@+id/titleBar"
+        android:layout_width="match_parent"
+        android:layout_height="@dimen/dimen_title_height"
+        android:background="@color/title_bar_bg"
+        app:centerText="璇诲彇鍗$墖"
+        app:leftImage="@mipmap/icon_back" />
+
+    <ScrollView
+        android:id="@+id/read_userLL"
+        android:layout_width="match_parent"
+        android:layout_height="match_parent"
+        android:layout_below="@id/titleBar"
+        android:visibility="gone">
+
+        <LinearLayout
+            android:layout_width="match_parent"
+            android:layout_height="match_parent"
+            android:layout_margin="20dp"
+            android:orientation="vertical">
+
+            <TextView
+                android:id="@+id/red_name"
+                android:layout_width="match_parent"
+                android:layout_height="wrap_content"
+                android:layout_marginTop="15dp"
+                android:text="濮撳悕锛�"
+                android:textSize="@dimen/text_size" />
+
+            <LinearLayout
+                android:layout_width="match_parent"
+                android:layout_height="wrap_content"
+                android:layout_marginTop="15dp"
+                android:orientation="horizontal">
+
+                <TextView
+                    android:layout_width="wrap_content"
+                    android:layout_height="wrap_content"
+                    android:text="鍗″彿锛�"
+                    android:textSize="@dimen/text_size" />
+
+                <TextView
+                    android:id="@+id/red_initCode"
+                    android:layout_width="match_parent"
+                    android:layout_height="wrap_content"
+                    android:text=""
+                    android:textSize="@dimen/text_size" />
+            </LinearLayout>
+
+
+            <TextView
+                android:id="@+id/red_remainder_blance"
+                android:layout_width="match_parent"
+                android:layout_height="wrap_content"
+                android:layout_marginTop="15dp"
+                android:text="鍓╀綑閲戦锛�"
+                android:textSize="@dimen/text_size" />
+
+            <TextView
+                android:id="@+id/red_remainder_water"
+                android:layout_width="match_parent"
+                android:layout_height="wrap_content"
+                android:layout_marginTop="15dp"
+                android:text="鍓╀綑姘撮噺锛�"
+                android:textSize="@dimen/text_size" />
+
+            <TextView
+                android:id="@+id/red_rechargeDate"
+                android:layout_width="match_parent"
+                android:layout_height="wrap_content"
+                android:layout_marginTop="15dp"
+                android:text="鏈�鍚庤喘姘存棩鏈燂細"
+                android:textSize="@dimen/text_size"
+                android:visibility="visible" />
+
+            <TextView
+                android:id="@+id/red_rechargeNumber"
+                android:layout_width="match_parent"
+                android:layout_height="wrap_content"
+                android:layout_marginTop="15dp"
+                android:text="鍏呭�兼鏁帮細"
+                android:textSize="@dimen/text_size"
+                android:visibility="visible" />
+
+            <TextView
+                android:id="@+id/red_total_water"
+                android:layout_width="match_parent"
+                android:layout_height="wrap_content"
+                android:layout_marginTop="15dp"
+                android:text="鎬荤敤姘撮噺锛�"
+                android:textSize="@dimen/text_size"
+                android:visibility="visible" />
+
+            <TextView
+                android:id="@+id/red_total_power"
+                android:layout_width="match_parent"
+                android:layout_height="wrap_content"
+                android:layout_marginTop="15dp"
+                android:text="鎬荤敤鐢甸噺锛�"
+                android:textSize="@dimen/text_size"
+                android:visibility="visible" />
+
+            <TextView
+                android:id="@+id/red_statu"
+                android:layout_width="match_parent"
+                android:layout_height="wrap_content"
+                android:layout_marginTop="15dp"
+                android:text="鍗$姸鎬侊細"
+                android:textSize="@dimen/text_size" />
+
+        </LinearLayout>
+
+    </ScrollView>
+
+
+    <LinearLayout
+        android:id="@+id/read_cardTypeLL"
+        android:layout_width="match_parent"
+        android:layout_height="match_parent"
+        android:layout_below="@id/titleBar"
+        android:gravity="center"
+        android:orientation="vertical"
+        android:visibility="visible">
+
+        <TextView
+            android:id="@+id/read_cardTypeTV"
+            android:layout_width="wrap_content"
+            android:layout_height="wrap_content"
+            android:layout_centerHorizontal="true"
+            android:layout_centerVertical="true"
+            android:layout_gravity="center"
+            android:gravity="center"
+            android:textSize="30sp"
+            android:textStyle="bold" />
+
+        <TextView
+            android:id="@+id/read_cardDataTV"
+            android:layout_width="wrap_content"
+            android:layout_height="wrap_content"
+            android:layout_centerHorizontal="true"
+            android:layout_centerVertical="true"
+            android:layout_gravity="center"
+            android:layout_marginTop="20dp"
+            android:gravity="left"
+            android:textSize="20sp"
+            android:textStyle="bold" />
+    </LinearLayout>
+
+
+    <LinearLayout
+        android:id="@+id/read_imgLL"
+        android:layout_width="match_parent"
+        android:layout_height="match_parent"
+        android:layout_below="@id/titleBar"
+        android:background="#ffffff"
+        android:orientation="vertical"
+        android:visibility="visible">
+
+        <TextView
+            android:layout_width="match_parent"
+            android:layout_height="wrap_content"
+            android:layout_below="@id/titleBar"
+            android:layout_marginTop="40dp"
+            android:gravity="center"
+            android:text="璇峰皢鐢ㄦ埛鏂板崱璐村湪璁惧涓婅繘琛岃鍗�"
+            android:textColor="@color/red"
+            android:textSize="@dimen/big_text_size" />
+
+
+        <ImageView
+            android:layout_width="match_parent"
+            android:layout_height="match_parent"
+            android:layout_below="@id/textView"
+            android:scaleType="fitCenter"
+            android:src="@mipmap/nfc_write" />
+    </LinearLayout>
+
+    <com.wang.avi.AVLoadingIndicatorView
+        android:id="@+id/avi"
+        style="@style/AVLoadingIndicatorView"
+        android:layout_width="80dp"
+        android:layout_height="80dp"
+        android:layout_centerHorizontal="true"
+        android:layout_centerVertical="true"
+        android:visibility="gone"
+        app:indicatorColor="@color/title_bg"
+        app:indicatorName="BallClipRotatePulseIndicator" />
+
+</RelativeLayout>
\ No newline at end of file
diff --git a/qiheonlinelibrary/src/main/res/layout/activity_my_qhl.xml b/qiheonlinelibrary/src/main/res/layout/activity_my_qhl.xml
new file mode 100644
index 0000000..f933594
--- /dev/null
+++ b/qiheonlinelibrary/src/main/res/layout/activity_my_qhl.xml
@@ -0,0 +1,203 @@
+<?xml version="1.0" encoding="utf-8"?>
+<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
+    xmlns:app="http://schemas.android.com/apk/res-auto"
+    android:layout_width="match_parent"
+    android:layout_height="match_parent"
+    android:orientation="vertical">
+
+    <com.dayu.baselibrary.view.TitleBar
+        android:id="@+id/titleBar"
+        android:layout_width="match_parent"
+        android:layout_height="@dimen/dimen_title_height"
+        android:layout_below="@+id/titleBar"
+        android:background="@color/title_bar_bg"
+        app:centerText="涓汉涓績"
+        app:leftImage="@mipmap/icon_back" />
+
+    <ScrollView
+        android:layout_width="match_parent"
+        android:layout_height="match_parent">
+
+        <LinearLayout
+            android:layout_width="match_parent"
+            android:layout_height="match_parent"
+            android:layout_margin="20dp"
+            android:orientation="vertical">
+
+            <LinearLayout
+                android:id="@+id/my_village"
+                android:layout_width="match_parent"
+                android:layout_height="wrap_content"
+                android:orientation="horizontal"
+                android:visibility="gone">
+
+                <TextView
+
+                    android:layout_width="wrap_content"
+                    android:layout_height="wrap_content"
+                    android:text="璁惧缂栧彿锛�"
+                    android:textSize="@dimen/text_size" />
+
+                <TextView
+                    android:id="@+id/my_villageNum"
+                    android:layout_width="match_parent"
+                    android:layout_height="wrap_content"
+                    android:textSize="@dimen/text_size" />
+
+            </LinearLayout>
+
+
+            <LinearLayout
+                android:id="@+id/my_admin"
+                android:layout_width="match_parent"
+                android:layout_height="wrap_content"
+                android:layout_marginTop="15dp"
+                android:orientation="horizontal">
+
+                <TextView
+                    android:layout_width="wrap_content"
+                    android:layout_height="wrap_content"
+                    android:text="鍖哄煙鍙凤細"
+                    android:textColor="@color/text_selecter_color"
+                    android:textSize="@dimen/text_size" />
+
+                <TextView
+                    android:id="@+id/my_adminName"
+                    android:layout_width="match_parent"
+                    android:layout_height="wrap_content"
+                    android:textColor="@color/text_selecter_color"
+                    android:textSize="@dimen/text_size" />
+
+            </LinearLayout>
+
+            <LinearLayout
+                android:id="@+id/my_waterPriceLL"
+                android:layout_width="match_parent"
+                android:layout_height="wrap_content"
+                android:layout_marginTop="15dp"
+                android:orientation="horizontal">
+
+                <TextView
+                    android:layout_width="wrap_content"
+                    android:layout_height="wrap_content"
+                    android:text="鐢靛崟浠�(鍏�/搴�)锛�"
+                    android:textColor="@color/text_selecter_color"
+                    android:textSize="@dimen/text_size" />
+
+                <TextView
+                    android:id="@+id/my_waterPrice"
+                    android:layout_width="match_parent"
+                    android:layout_height="wrap_content"
+                    android:textColor="@color/text_selecter_color"
+                    android:textSize="@dimen/text_size" />
+
+            </LinearLayout>
+
+            <RelativeLayout
+
+                android:layout_width="match_parent"
+                android:layout_height="wrap_content"
+                android:layout_marginTop="15dp"
+                android:visibility="visible">
+
+                <TextView
+                    android:id="@+id/my_newCardList_ll"
+                    android:layout_width="match_parent"
+                    android:layout_height="wrap_content"
+                    android:layout_toStartOf="@+id/my_newCardOut"
+                    android:text="寮�鎴疯褰�"
+                    android:textColor="@color/text_selecter_color"
+                    android:textSize="@dimen/text_size" />
+
+                <TextView
+                    android:id="@+id/my_newCardOut"
+                    android:layout_width="wrap_content"
+                    android:layout_height="wrap_content"
+                    android:layout_alignParentRight="true"
+                    android:text="瀵煎嚭璁板綍"
+                    android:textColor="@color/text_selecter_color"
+                    android:textSize="@dimen/text_size" />
+            </RelativeLayout>
+
+            <RelativeLayout
+
+                android:layout_width="match_parent"
+                android:layout_height="wrap_content"
+                android:layout_marginTop="15dp">
+
+                <TextView
+                    android:id="@+id/my_rechargeList_ll"
+                    android:layout_width="match_parent"
+                    android:layout_height="wrap_content"
+                    android:layout_toStartOf="@+id/my_rechargeOut"
+                    android:text="鍏呭�艰褰�"
+                    android:textColor="@color/text_selecter_color"
+                    android:textSize="@dimen/text_size" />
+
+                <TextView
+                    android:id="@+id/my_rechargeOut"
+                    android:layout_width="wrap_content"
+                    android:layout_height="wrap_content"
+                    android:layout_alignParentRight="true"
+                    android:text="瀵煎嚭璁板綍"
+                    android:textColor="@color/text_selecter_color"
+                    android:textSize="@dimen/text_size" />
+
+            </RelativeLayout>
+
+
+            <TextView
+                android:id="@+id/sys_ip"
+                android:layout_width="match_parent"
+                android:layout_height="wrap_content"
+                android:layout_marginTop="15dp"
+                android:text="IP璁剧疆"
+                android:textColor="@color/text_selecter_color"
+                android:textSize="@dimen/text_size"
+                android:visibility="gone" />
+
+            <TextView
+                android:id="@+id/card_replacement"
+                android:layout_width="match_parent"
+                android:layout_height="wrap_content"
+                android:layout_marginTop="15dp"
+                android:text="鐢ㄦ埛琛ュ崱"
+                android:textColor="@color/text_selecter_color"
+                android:textSize="@dimen/text_size"
+                android:visibility="gone" />
+
+
+            <TextView
+                android:id="@+id/my_psw"
+                android:layout_width="match_parent"
+                android:layout_height="wrap_content"
+                android:layout_marginTop="15dp"
+                android:text="鐧诲綍瀵嗙爜璁剧疆"
+                android:textColor="@color/text_selecter_color"
+                android:textSize="@dimen/text_size" />
+
+            <TextView
+                android:id="@+id/my_testConnect"
+                android:layout_width="match_parent"
+                android:layout_height="wrap_content"
+                android:layout_marginTop="15dp"
+                android:text="鏈繛鎺ユ暟鎹腑蹇�"
+                android:textColor="@color/text_selecter_color"
+                android:textSize="@dimen/text_size"
+                android:visibility="gone" />
+        </LinearLayout>
+
+    </ScrollView>
+
+    <com.wang.avi.AVLoadingIndicatorView
+        android:id="@+id/avi"
+        style="@style/AVLoadingIndicatorView"
+        android:layout_width="80dp"
+        android:layout_height="80dp"
+        android:layout_centerHorizontal="true"
+        android:layout_centerVertical="true"
+        android:visibility="gone"
+        app:indicatorColor="@color/title_bg"
+        app:indicatorName="BallClipRotatePulseIndicator" />
+
+</LinearLayout>
\ No newline at end of file
diff --git a/qiheonlinelibrary/src/main/res/layout/activity_new_card_qhl.xml b/qiheonlinelibrary/src/main/res/layout/activity_new_card_qhl.xml
new file mode 100644
index 0000000..58933f4
--- /dev/null
+++ b/qiheonlinelibrary/src/main/res/layout/activity_new_card_qhl.xml
@@ -0,0 +1,168 @@
+<?xml version="1.0" encoding="utf-8"?>
+<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
+    xmlns:app="http://schemas.android.com/apk/res-auto"
+    android:layout_width="match_parent"
+    android:layout_height="match_parent">
+
+    <com.dayu.baselibrary.view.TitleBar
+        android:id="@+id/titleBar"
+        android:layout_width="match_parent"
+        android:layout_height="@dimen/dimen_title_height"
+        android:background="@color/title_bar_bg"
+        app:centerText="鏂板崱寮�鎴�"
+        app:leftImage="@mipmap/icon_back" />
+
+    <ScrollView
+        android:layout_width="match_parent"
+        android:layout_height="match_parent"
+        android:layout_above="@+id/newCard_registBtn"
+        android:layout_below="@+id/titleBar">
+
+        <LinearLayout
+            android:layout_width="match_parent"
+            android:layout_height="match_parent"
+            android:orientation="vertical">
+
+            <LinearLayout
+                style="@style/newCardLL"
+                android:layout_width="match_parent"
+                android:layout_height="wrap_content">
+
+                <TextView
+                    android:layout_width="wrap_content"
+                    android:layout_height="wrap_content"
+                    android:text="@string/eq_no"
+                    android:textSize="@dimen/new_card_size" />
+
+                <TextView
+                    android:id="@+id/newCard_villageNum"
+                    android:layout_width="match_parent"
+                    android:layout_height="wrap_content"
+                    android:inputType="number"
+                    android:textSize="@dimen/new_card_size" />
+
+
+            </LinearLayout>
+
+            <LinearLayout
+                style="@style/newCardLL"
+                android:layout_width="match_parent"
+                android:layout_height="wrap_content"
+                android:orientation="horizontal">
+
+                <TextView
+                    android:layout_width="wrap_content"
+                    android:layout_height="wrap_content"
+                    android:text="濮� 鍚嶏細"
+                    android:textSize="@dimen/new_card_size" />
+
+                <EditText
+                    android:id="@+id/newCard_name"
+                    android:layout_width="0dp"
+                    android:layout_height="wrap_content"
+                    android:layout_weight="1"
+                    android:textSize="@dimen/new_card_size" />
+
+                <ImageView
+                    android:id="@+id/newCard_scanBtn"
+                    android:layout_width="45dp"
+                    android:layout_height="45dp"
+                    android:padding="10dp"
+                    android:src="@mipmap/icon_scan" />
+
+            </LinearLayout>
+
+            <LinearLayout
+                style="@style/newCardLL"
+                android:layout_width="match_parent"
+                android:layout_height="wrap_content">
+
+                <TextView
+                    android:layout_width="wrap_content"
+                    android:layout_height="wrap_content"
+                    android:text="韬唤璇佸彿锛�"
+                    android:textSize="@dimen/new_card_size" />
+
+                <EditText
+                    android:id="@+id/newCard_id"
+                    android:layout_width="match_parent"
+                    android:layout_height="wrap_content"
+                    android:digits="0123456789Xx"
+                    android:inputType="text"
+                    android:maxLength="18"
+                    android:textSize="@dimen/new_card_size" />
+
+
+            </LinearLayout>
+
+            <TextView
+                android:id="@+id/newCard_idTip"
+                style="@style/newCardLL"
+                android:layout_width="wrap_content"
+                android:layout_height="wrap_content"
+                android:text="鎵弿鍚庤鏍稿韬唤淇℃伅鏃犺"
+                android:textColor="#FF4500"
+                android:visibility="gone" />
+
+
+            <LinearLayout
+                style="@style/newCardLL"
+                android:layout_width="match_parent"
+                android:layout_height="wrap_content"
+                android:visibility="gone">
+
+                <TextView
+                    android:layout_width="wrap_content"
+                    android:layout_height="wrap_content"
+                    android:text="姘存潈鍐呮按閲忥細"
+                    android:textSize="@dimen/new_card_size" />
+
+                <EditText
+                    android:id="@+id/newCard_water"
+                    android:layout_width="match_parent"
+                    android:layout_height="wrap_content"
+                    android:inputType="number"
+                    android:maxLength="5"
+
+                    android:textSize="@dimen/new_card_size" />
+
+
+            </LinearLayout>
+
+            <LinearLayout
+                style="@style/newCardLL"
+                android:layout_width="match_parent"
+                android:layout_height="wrap_content">
+
+                <TextView
+                    android:layout_width="wrap_content"
+                    android:layout_height="wrap_content"
+                    android:text="鐢�  璇濓細"
+                    android:textSize="@dimen/new_card_size" />
+
+                <EditText
+                    android:id="@+id/newCard_phone"
+                    android:layout_width="match_parent"
+                    android:layout_height="wrap_content"
+                    android:inputType="number"
+                    android:maxLength="11"
+                    android:textSize="@dimen/new_card_size" />
+            </LinearLayout>
+
+
+        </LinearLayout>
+
+
+    </ScrollView>
+
+    <TextView
+        android:id="@+id/newCard_registBtn"
+        android:layout_width="match_parent"
+        android:layout_height="50dp"
+        android:layout_alignParentBottom="true"
+        android:background="@color/title_bg"
+        android:gravity="center"
+        android:text="寮�鎴�"
+        android:textColor="#000000"
+        android:textSize="@dimen/new_card_size" />
+</RelativeLayout>
\ No newline at end of file
diff --git a/qiheonlinelibrary/src/main/res/layout/activity_newcard_list_qhl.xml b/qiheonlinelibrary/src/main/res/layout/activity_newcard_list_qhl.xml
new file mode 100644
index 0000000..08244d6
--- /dev/null
+++ b/qiheonlinelibrary/src/main/res/layout/activity_newcard_list_qhl.xml
@@ -0,0 +1,49 @@
+<?xml version="1.0" encoding="utf-8"?>
+<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
+    xmlns:app="http://schemas.android.com/apk/res-auto"
+    android:layout_width="match_parent"
+    android:layout_height="match_parent"
+    android:orientation="vertical">
+
+    <com.dayu.baselibrary.view.TitleBar
+        android:id="@+id/titleBar"
+        android:layout_width="match_parent"
+        android:layout_height="@dimen/dimen_title_height"
+        android:background="@color/title_bar_bg"
+        app:centerText="寮�鎴疯褰�"
+        app:leftImage="@mipmap/icon_back"
+        app:rightText="绛涢��" />
+
+
+    <com.scwang.smart.refresh.layout.SmartRefreshLayout
+        android:id="@+id/refreshLayout"
+        android:layout_width="match_parent"
+        android:layout_height="match_parent"
+        android:layout_above="@id/user_total"
+        android:layout_below="@+id/titleBar">
+
+        <androidx.recyclerview.widget.RecyclerView
+            android:id="@+id/recyclerView"
+            android:layout_width="match_parent"
+            android:layout_height="match_parent"
+            android:background="#ffffff"
+            android:overScrollMode="never"
+            android:padding="10dp" />
+
+        <com.scwang.smart.refresh.footer.ClassicsFooter
+            android:layout_width="match_parent"
+            android:layout_height="wrap_content" />
+    </com.scwang.smart.refresh.layout.SmartRefreshLayout>
+
+
+    <TextView
+        android:id="@+id/user_total"
+        android:layout_width="match_parent"
+        android:layout_height="50dp"
+        android:layout_alignParentBottom="true"
+        android:background="@color/title_bg"
+        android:gravity="center"
+        android:text="宸插垱寤虹敤鎴凤細"
+        android:textSize="@dimen/text_size" />
+
+</RelativeLayout>
\ No newline at end of file
diff --git a/qiheonlinelibrary/src/main/res/layout/activity_parameter_qhl.xml b/qiheonlinelibrary/src/main/res/layout/activity_parameter_qhl.xml
new file mode 100644
index 0000000..1ad2e1c
--- /dev/null
+++ b/qiheonlinelibrary/src/main/res/layout/activity_parameter_qhl.xml
@@ -0,0 +1,85 @@
+<?xml version="1.0" encoding="utf-8"?>
+<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
+    xmlns:app="http://schemas.android.com/apk/res-auto"
+    android:layout_width="match_parent"
+    android:layout_height="match_parent"
+    android:orientation="vertical">
+
+    <com.dayu.baselibrary.view.TitleBar
+        android:id="@+id/titleBar"
+        android:layout_width="match_parent"
+        android:layout_height="@dimen/dimen_title_height"
+        android:background="@color/title_bar_bg"
+        app:centerText="鍙傛暟璁剧疆"
+        app:leftImage="@mipmap/icon_back" />
+
+    <TextView
+        android:id="@+id/parameter_domain"
+        android:layout_width="match_parent"
+        android:layout_height="wrap_content"
+        android:layout_marginLeft="20dp"
+        android:layout_marginTop="20dp"
+        android:padding="5dp"
+        android:visibility="gone"
+        android:text="鍩熷悕鍗¤缃�"
+        android:textColor="@color/text_selecter_color"
+        android:textSize="@dimen/text_size" />
+
+    <TextView
+        android:id="@+id/parameter_power"
+        android:layout_width="match_parent"
+        android:layout_height="wrap_content"
+        android:layout_marginLeft="20dp"
+        android:layout_marginTop="20dp"
+        android:padding="5dp"
+        android:visibility="gone"
+        android:text="姘存车鍔熺巼鍗¤缃�"
+        android:textColor="@color/text_selecter_color"
+        android:textSize="@dimen/text_size" />
+
+
+    <TextView
+        android:id="@+id/parameter_electricPrice"
+        android:layout_width="match_parent"
+        android:layout_height="wrap_content"
+        android:layout_marginLeft="20dp"
+        android:layout_marginTop="20dp"
+        android:padding="5dp"
+        android:text="鐢甸噺鍗曚环璁剧疆"
+        android:textColor="@color/text_selecter_color"
+        android:textSize="@dimen/text_size" />
+    <TextView
+        android:id="@+id/parameter_PassWordCard"
+        android:layout_width="match_parent"
+        android:layout_height="wrap_content"
+        android:layout_marginLeft="20dp"
+        android:layout_marginTop="20dp"
+        android:padding="5dp"
+        android:text="鍗″瘑鐮佽缃�"
+        android:visibility="gone"
+        android:textColor="@color/text_selecter_color"
+        android:textSize="@dimen/text_size" />
+    <TextView
+        android:id="@+id/parameter_region"
+        android:layout_width="match_parent"
+        android:layout_height="wrap_content"
+        android:layout_marginLeft="20dp"
+        android:layout_marginTop="20dp"
+        android:padding="5dp"
+        android:visibility="gone"
+        android:text="鍖哄煙琛ㄥ彿璁剧疆"
+        android:textColor="@color/text_selecter_color"
+        android:textSize="@dimen/text_size" />
+    <TextView
+        android:id="@+id/parameter_cardIdentifying"
+        android:layout_width="match_parent"
+        android:layout_height="wrap_content"
+        android:layout_marginLeft="20dp"
+        android:layout_marginTop="20dp"
+        android:padding="5dp"
+        android:text="鍗℃爣璇嗙爜璁剧疆"
+        android:visibility="gone"
+        android:textColor="@color/text_selecter_color"
+        android:textSize="@dimen/text_size" />
+
+</LinearLayout>
\ No newline at end of file
diff --git a/qiheonlinelibrary/src/main/res/layout/activity_password_card_qhl.xml b/qiheonlinelibrary/src/main/res/layout/activity_password_card_qhl.xml
new file mode 100644
index 0000000..ae03793
--- /dev/null
+++ b/qiheonlinelibrary/src/main/res/layout/activity_password_card_qhl.xml
@@ -0,0 +1,62 @@
+<?xml version="1.0" encoding="utf-8"?>
+<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
+    xmlns:app="http://schemas.android.com/apk/res-auto"
+    android:layout_width="match_parent"
+    android:layout_height="match_parent"
+    android:orientation="vertical">
+
+    <com.dayu.baselibrary.view.TitleBar
+        android:id="@+id/titleBar"
+        android:layout_width="match_parent"
+        android:layout_height="@dimen/dimen_title_height"
+        android:background="@color/title_bar_bg"
+        app:centerText="閰嶇疆鍗″瘑鐮�"
+        app:leftImage="@mipmap/icon_back" />
+
+    <LinearLayout
+        android:id="@+id/village_ll"
+        android:layout_width="match_parent"
+        android:layout_height="wrap_content"
+        android:layout_below="@id/titleBar"
+        android:layout_margin="20dp"
+        android:orientation="horizontal">
+
+        <TextView
+            android:layout_width="wrap_content"
+            android:layout_height="wrap_content"
+            android:text="褰撳墠瀵嗙爜锛�"
+            android:textSize="@dimen/text_size" />
+
+        <TextView
+            android:id="@+id/village_oldNumber"
+            android:layout_width="wrap_content"
+            android:layout_height="match_parent"
+            android:textSize="@dimen/text_size" />
+
+    </LinearLayout>
+
+
+    <EditText
+        android:id="@+id/village_newNum"
+        android:layout_width="match_parent"
+        android:layout_height="wrap_content"
+        android:layout_below="@+id/village_ll"
+        android:layout_alignParentStart="true"
+        android:layout_marginStart="20dp"
+        android:layout_marginTop="20dp"
+        android:layout_marginEnd="20dp"
+        android:layout_marginBottom="20dp"
+        android:hint="璇疯緭鍏ユ柊璁剧疆鐨�12浣�16杩涘埗鍗″瘑鐮�"
+        android:lines="1"
+        android:maxLength="12" />
+
+    <TextView
+        android:id="@+id/village_ok"
+        android:layout_width="match_parent"
+        android:layout_height="50dp"
+        android:layout_alignParentBottom="true"
+        android:background="@color/title_bg"
+        android:gravity="center"
+        android:text="纭�  瀹�"
+        android:textSize="@dimen/text_size" />
+</RelativeLayout>
\ No newline at end of file
diff --git a/qiheonlinelibrary/src/main/res/layout/activity_patch_list_qhl.xml b/qiheonlinelibrary/src/main/res/layout/activity_patch_list_qhl.xml
new file mode 100644
index 0000000..9834779
--- /dev/null
+++ b/qiheonlinelibrary/src/main/res/layout/activity_patch_list_qhl.xml
@@ -0,0 +1,26 @@
+<?xml version="1.0" encoding="utf-8"?>
+<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
+    xmlns:app="http://schemas.android.com/apk/res-auto"
+    android:layout_width="match_parent"
+    android:layout_height="match_parent"
+    android:orientation="vertical">
+
+    <com.dayu.baselibrary.view.TitleBar
+        android:id="@+id/titleBar"
+        android:layout_width="match_parent"
+        android:layout_height="@dimen/dimen_title_height"
+        android:background="@color/title_bar_bg"
+        app:centerText="琛ュ崱璁板綍"
+        app:leftImage="@mipmap/icon_back"
+        app:rightText="绛涢��" />
+
+    <ListView
+        android:id="@+id/newCard_listView"
+        android:layout_width="match_parent"
+        android:layout_height="match_parent"
+        android:cacheColorHint="#ffffff"
+        android:divider="@null"
+        android:dividerHeight="0dp" />
+
+
+</LinearLayout>
\ No newline at end of file
diff --git a/qiheonlinelibrary/src/main/res/layout/activity_patch_qhl.xml b/qiheonlinelibrary/src/main/res/layout/activity_patch_qhl.xml
new file mode 100644
index 0000000..78d94c8
--- /dev/null
+++ b/qiheonlinelibrary/src/main/res/layout/activity_patch_qhl.xml
@@ -0,0 +1,192 @@
+<?xml version="1.0" encoding="utf-8"?>
+<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
+    xmlns:app="http://schemas.android.com/apk/res-auto"
+    android:layout_width="match_parent"
+    android:layout_height="match_parent">
+
+    <com.dayu.baselibrary.view.TitleBar
+        android:id="@+id/titleBar"
+        android:layout_width="match_parent"
+        android:layout_height="@dimen/dimen_title_height"
+        android:background="@color/title_bar_bg"
+        app:centerText="鏂板崱娉ㄥ唽"
+        app:leftImage="@mipmap/icon_back" />
+
+    <ScrollView
+        android:layout_width="match_parent"
+        android:layout_height="match_parent"
+        android:layout_above="@+id/newCard_registBtn"
+        android:layout_below="@+id/titleBar">
+
+        <LinearLayout
+            android:layout_width="match_parent"
+            android:layout_height="match_parent"
+            android:orientation="vertical">
+
+            <LinearLayout
+                style="@style/newCardLL"
+                android:layout_width="match_parent"
+                android:layout_height="wrap_content">
+
+                <TextView
+                    android:layout_width="wrap_content"
+                    android:layout_height="wrap_content"
+                    android:text="鏉�  鍙凤細"
+                    android:textSize="@dimen/new_card_size" />
+
+                <TextView
+                    android:id="@+id/newCard_villageNum"
+                    android:layout_width="match_parent"
+                    android:layout_height="wrap_content"
+                    android:inputType="number"
+                    android:maxLength="5"
+                    android:textSize="@dimen/new_card_size" />
+
+
+            </LinearLayout>
+
+            <LinearLayout
+                style="@style/newCardLL"
+                android:layout_width="match_parent"
+                android:layout_height="wrap_content">
+
+                <TextView
+                    android:layout_width="wrap_content"
+                    android:layout_height="wrap_content"
+                    android:text="鐢ㄦ埛鍚嶏細"
+                    android:textSize="@dimen/new_card_size" />
+
+                <EditText
+                    android:id="@+id/newCard_name"
+                    android:layout_width="match_parent"
+                    android:layout_height="wrap_content"
+                    android:textSize="@dimen/new_card_size" />
+
+
+            </LinearLayout>
+
+            <LinearLayout
+                style="@style/newCardLL"
+                android:layout_width="match_parent"
+                android:layout_height="wrap_content">
+
+                <TextView
+                    android:layout_width="wrap_content"
+                    android:layout_height="wrap_content"
+                    android:text="鐢ㄦ埛鍙凤細"
+                    android:textSize="@dimen/new_card_size" />
+
+                <EditText
+                    android:id="@+id/newCard_userNum"
+                    android:layout_width="match_parent"
+                    android:layout_height="wrap_content"
+                    android:inputType="number"
+                    android:maxLength="5"
+                    android:textSize="@dimen/new_card_size" />
+
+
+            </LinearLayout>
+
+            <LinearLayout
+                style="@style/newCardLL"
+                android:layout_width="match_parent"
+                android:layout_height="wrap_content">
+
+                <TextView
+                    android:layout_width="wrap_content"
+                    android:layout_height="wrap_content"
+                    android:text="姘存潈鍐呮按閲忥細"
+                    android:textSize="@dimen/new_card_size" />
+
+                <EditText
+                    android:id="@+id/newCard_water"
+                    android:layout_width="match_parent"
+                    android:layout_height="wrap_content"
+                    android:inputType="number"
+                    android:maxLength="5"
+                    android:textSize="@dimen/new_card_size" />
+
+
+            </LinearLayout>
+
+            <LinearLayout
+                style="@style/newCardLL"
+                android:layout_width="match_parent"
+                android:layout_height="wrap_content">
+
+                <TextView
+                    android:layout_width="wrap_content"
+                    android:layout_height="wrap_content"
+                    android:text="鐢�  璇濓細"
+                    android:textSize="@dimen/new_card_size" />
+
+                <EditText
+                    android:id="@+id/newCard_phone"
+                    android:layout_width="match_parent"
+                    android:layout_height="wrap_content"
+                    android:inputType="number"
+                    android:maxLength="11"
+                    android:textSize="@dimen/new_card_size" />
+
+
+            </LinearLayout>
+
+            <LinearLayout
+                style="@style/newCardLL"
+                android:layout_width="match_parent"
+                android:layout_height="wrap_content">
+
+                <TextView
+                    android:layout_width="wrap_content"
+                    android:layout_height="wrap_content"
+                    android:text="浜�  鏁帮細"
+                    android:textSize="@dimen/new_card_size" />
+
+                <EditText
+                    android:id="@+id/newCard_mushu"
+                    android:layout_width="match_parent"
+                    android:layout_height="wrap_content"
+                    android:inputType="number"
+                    android:textSize="@dimen/new_card_size" />
+
+
+            </LinearLayout>
+
+
+            <LinearLayout
+                style="@style/newCardLL"
+                android:layout_width="match_parent"
+                android:layout_height="wrap_content">
+
+                <TextView
+                    android:layout_width="wrap_content"
+                    android:layout_height="wrap_content"
+                    android:text="閲�  棰濓細"
+                    android:textSize="@dimen/new_card_size" />
+
+                <EditText
+                    android:id="@+id/newCard_morny"
+                    android:layout_width="match_parent"
+                    android:layout_height="wrap_content"
+                    android:inputType="numberDecimal"
+                    android:textSize="@dimen/new_card_size" />
+
+
+            </LinearLayout>
+
+        </LinearLayout>
+
+
+    </ScrollView>
+
+    <TextView
+        android:id="@+id/newCard_registBtn"
+        android:layout_width="match_parent"
+        android:layout_height="50dp"
+        android:layout_alignParentBottom="true"
+        android:background="@color/title_bg"
+        android:gravity="center"
+        android:text="琛ュ崱"
+        android:textColor="#000000"
+        android:textSize="@dimen/new_card_size" />
+</RelativeLayout>
\ No newline at end of file
diff --git a/qiheonlinelibrary/src/main/res/layout/activity_power_qhl.xml b/qiheonlinelibrary/src/main/res/layout/activity_power_qhl.xml
new file mode 100644
index 0000000..999c225
--- /dev/null
+++ b/qiheonlinelibrary/src/main/res/layout/activity_power_qhl.xml
@@ -0,0 +1,62 @@
+<?xml version="1.0" encoding="utf-8"?>
+<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
+    xmlns:app="http://schemas.android.com/apk/res-auto"
+    android:layout_width="match_parent"
+    android:layout_height="match_parent"
+    android:orientation="vertical">
+
+    <com.dayu.baselibrary.view.TitleBar
+        android:id="@+id/titleBar"
+        android:layout_width="match_parent"
+        android:layout_height="@dimen/dimen_title_height"
+        android:background="@color/title_bar_bg"
+        app:centerText="閰嶇疆姘存车鍔熺巼"
+        app:leftImage="@mipmap/icon_back" />
+
+    <LinearLayout
+        android:id="@+id/village_ll"
+        android:layout_width="match_parent"
+        android:layout_height="wrap_content"
+        android:layout_below="@id/titleBar"
+        android:layout_margin="20dp"
+        android:orientation="horizontal">
+
+        <TextView
+            android:layout_width="wrap_content"
+            android:layout_height="wrap_content"
+            android:text="褰撳墠鍔熺巼锛堝崟浣岾W锛夛細"
+            android:textSize="@dimen/text_size" />
+
+        <TextView
+            android:id="@+id/village_oldNumber"
+            android:layout_width="wrap_content"
+            android:layout_height="match_parent"
+            android:textSize="@dimen/text_size" />
+
+    </LinearLayout>
+
+
+    <EditText
+        android:id="@+id/village_newNum"
+        android:layout_width="match_parent"
+        android:layout_height="wrap_content"
+        android:layout_below="@+id/village_ll"
+        android:layout_alignParentStart="true"
+        android:layout_marginStart="20dp"
+        android:layout_marginTop="20dp"
+        android:layout_marginEnd="20dp"
+        android:layout_marginBottom="20dp"
+        android:hint="璇疯緭鍏ユ柊璁剧疆鐨勬按娉靛姛鐜�"
+        android:inputType="number|numberDecimal"
+        android:digits="0123456789." />
+
+    <TextView
+        android:id="@+id/village_ok"
+        android:layout_width="match_parent"
+        android:layout_height="50dp"
+        android:layout_alignParentBottom="true"
+        android:background="@color/title_bg"
+        android:gravity="center"
+        android:text="纭�  瀹�"
+        android:textSize="@dimen/text_size" />
+</RelativeLayout>
\ No newline at end of file
diff --git a/qiheonlinelibrary/src/main/res/layout/activity_psw_qhl.xml b/qiheonlinelibrary/src/main/res/layout/activity_psw_qhl.xml
new file mode 100644
index 0000000..472c70d
--- /dev/null
+++ b/qiheonlinelibrary/src/main/res/layout/activity_psw_qhl.xml
@@ -0,0 +1,58 @@
+<?xml version="1.0" encoding="utf-8"?>
+<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
+    xmlns:app="http://schemas.android.com/apk/res-auto"
+    android:layout_width="match_parent"
+    android:layout_height="match_parent"
+    android:orientation="vertical">
+
+    <com.dayu.baselibrary.view.TitleBar
+        android:id="@+id/titleBar"
+        android:layout_width="match_parent"
+        android:layout_height="@dimen/dimen_title_height"
+        android:background="@color/title_bar_bg"
+        app:centerText="瀵嗙爜淇敼"
+        app:leftImage="@mipmap/icon_back" />
+
+    <EditText
+        android:id="@+id/psw_old"
+        android:layout_width="match_parent"
+        android:layout_height="wrap_content"
+        android:layout_below="@+id/titleBar"
+
+        android:layout_alignParentStart="true"
+        android:layout_margin="20dp"
+        android:hint="璇疯緭鍏ュ師瀵嗙爜"
+        android:inputType="textPassword" />
+
+    <EditText
+        android:id="@+id/psw_new"
+        android:layout_width="match_parent"
+        android:layout_height="wrap_content"
+        android:layout_below="@+id/psw_old"
+        android:layout_alignParentStart="true"
+        android:layout_margin="20dp"
+        android:hint="璇疯緭鍏ユ柊瀵嗙爜"
+        android:inputType="textPassword" />
+
+    <EditText
+        android:id="@+id/psw_newAgin"
+        android:layout_width="match_parent"
+        android:layout_height="wrap_content"
+        android:layout_below="@+id/psw_new"
+        android:layout_alignParentStart="true"
+        android:layout_margin="20dp"
+        android:hint="璇峰啀娆¤緭鍏ユ柊瀵嗙爜"
+        android:inputType="textPassword" />
+
+    <TextView
+        android:id="@+id/water_ok"
+        android:layout_width="match_parent"
+        android:layout_height="50dp"
+        android:layout_alignParentBottom="true"
+        android:background="@color/title_bg"
+        android:gravity="center"
+
+        android:text="纭�  瀹�"
+        android:textSize="@dimen/text_size" />
+
+</RelativeLayout>
\ No newline at end of file
diff --git a/qiheonlinelibrary/src/main/res/layout/activity_read_text_qhl.xml b/qiheonlinelibrary/src/main/res/layout/activity_read_text_qhl.xml
new file mode 100644
index 0000000..c23c750
--- /dev/null
+++ b/qiheonlinelibrary/src/main/res/layout/activity_read_text_qhl.xml
@@ -0,0 +1,34 @@
+<?xml version="1.0" encoding="utf-8"?>
+<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
+    android:id="@+id/activity_main"
+    android:layout_width="match_parent"
+    android:layout_height="match_parent"
+    android:paddingBottom="@dimen/activity_vertical_margin"
+    android:paddingLeft="@dimen/activity_horizontal_margin"
+    android:paddingRight="@dimen/activity_horizontal_margin"
+    android:paddingTop="@dimen/activity_vertical_margin"
+    android:background="@color/colorBackground">
+
+    <TextView
+        android:id="@+id/textView"
+        android:gravity="center"
+        android:layout_width="match_parent"
+        android:layout_height="wrap_content"
+        android:text="璇峰皢NFC鏍囩鎴栬�呰创绾搁潬杩戞墜鏈鸿儗闈�"/>
+
+    <TextView
+        android:id="@+id/tv_nfctext"
+        android:layout_width="match_parent"
+        android:layout_height="wrap_content"
+        android:layout_below="@+id/textView"
+        android:layout_alignParentLeft="true"
+        android:layout_alignParentStart="true"
+        android:layout_marginTop="10dp"/>
+
+    <ImageView
+        android:layout_width="wrap_content"
+        android:layout_height="wrap_content"
+        android:layout_below="@id/tv_nfctext"
+       />
+
+</RelativeLayout>
diff --git a/qiheonlinelibrary/src/main/res/layout/activity_recharge_detail_qhl.xml b/qiheonlinelibrary/src/main/res/layout/activity_recharge_detail_qhl.xml
new file mode 100644
index 0000000..4799161
--- /dev/null
+++ b/qiheonlinelibrary/src/main/res/layout/activity_recharge_detail_qhl.xml
@@ -0,0 +1,106 @@
+<?xml version="1.0" encoding="utf-8"?>
+<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
+    xmlns:app="http://schemas.android.com/apk/res-auto"
+    android:layout_width="match_parent"
+    android:layout_height="match_parent"
+    android:orientation="vertical">
+
+    <com.dayu.baselibrary.view.TitleBar
+        android:id="@+id/titleBar"
+        android:layout_width="match_parent"
+        android:layout_height="@dimen/dimen_title_height"
+        android:background="@color/title_bar_bg"
+        app:centerText="鍐欏崱璇︽儏椤�"
+        app:leftImage="@mipmap/icon_back" />
+
+    <LinearLayout
+        android:layout_width="match_parent"
+        android:layout_height="match_parent"
+        android:orientation="vertical"
+        android:padding="30dp">
+
+        <TextView
+            android:id="@+id/red_name"
+            android:layout_width="match_parent"
+            android:layout_height="wrap_content"
+
+            android:text="鐢ㄦ埛濮撳悕锛�"
+            android:textSize="@dimen/text_size" />
+
+
+        <TextView
+            android:id="@+id/red_initCode"
+            android:layout_width="match_parent"
+            android:layout_height="wrap_content"
+            android:layout_marginTop="15dp"
+            android:text="褰撳墠鍗″彿锛�"
+            android:textSize="@dimen/text_size" />
+
+        <TextView
+            android:id="@+id/red_remainder_morny"
+            android:layout_width="match_parent"
+            android:layout_height="wrap_content"
+            android:layout_marginTop="15dp"
+            android:text="鍏呭�奸噾棰濓細"
+            android:textSize="@dimen/text_size" />
+        <TextView
+            android:id="@+id/red_recharge_water"
+            android:layout_width="match_parent"
+            android:layout_height="wrap_content"
+            android:layout_marginTop="15dp"
+            android:text="鍏呭�兼按閲忥細"
+            android:textSize="@dimen/text_size" />
+        <TextView
+            android:id="@+id/red_remainder_blance"
+            android:layout_width="match_parent"
+            android:layout_height="wrap_content"
+            android:layout_marginTop="15dp"
+            android:text="鍓╀綑閲戦锛�"
+            android:visibility="gone"
+            android:textSize="@dimen/text_size" />
+        <TextView
+            android:id="@+id/red_surplusWater"
+            android:layout_width="match_parent"
+            android:layout_height="wrap_content"
+            android:layout_marginTop="15dp"
+            android:text="鍓╀綑姘撮噺锛�"
+            android:visibility="gone"
+            android:textSize="@dimen/text_size" />
+        <TextView
+            android:id="@+id/red_rechargeDate"
+            android:layout_width="match_parent"
+            android:layout_height="wrap_content"
+            android:layout_marginTop="15dp"
+            android:text="鏈崱鏈�鍚庤喘姘存棩鏈燂細"
+            android:textSize="@dimen/text_size"
+            android:visibility="gone" />
+
+        <TextView
+            android:id="@+id/red_rechargeNumber"
+            android:layout_width="match_parent"
+            android:layout_height="wrap_content"
+            android:layout_marginTop="15dp"
+            android:text="鏈崱鍏呭�兼鏁帮細"
+            android:textSize="@dimen/text_size"
+            android:visibility="gone" />
+
+        <TextView
+            android:id="@+id/red_statu"
+            android:layout_width="match_parent"
+            android:layout_height="wrap_content"
+            android:layout_marginTop="15dp"
+            android:text="鍗$姸鎬侊細"
+            android:textSize="@dimen/text_size" />
+
+        <TextView
+            android:id="@+id/tip"
+            android:layout_width="match_parent"
+            android:layout_height="wrap_content"
+            android:layout_marginTop="20dp"
+            android:gravity="center"
+            android:text="鍏呭�兼垚鍔燂紒"
+            android:textColor="@color/red"
+            android:textSize="@dimen/text_size" />
+    </LinearLayout>
+
+</LinearLayout>
\ No newline at end of file
diff --git a/qiheonlinelibrary/src/main/res/layout/activity_recharge_ext_qhl.xml b/qiheonlinelibrary/src/main/res/layout/activity_recharge_ext_qhl.xml
new file mode 100644
index 0000000..33ea1ea
--- /dev/null
+++ b/qiheonlinelibrary/src/main/res/layout/activity_recharge_ext_qhl.xml
@@ -0,0 +1,135 @@
+<?xml version="1.0" encoding="utf-8"?>
+<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
+    xmlns:app="http://schemas.android.com/apk/res-auto"
+    android:layout_width="match_parent"
+    android:layout_height="match_parent">
+
+    <com.dayu.baselibrary.view.TitleBar
+        android:id="@+id/titleBar"
+        android:layout_width="match_parent"
+        android:layout_height="@dimen/dimen_title_height"
+        android:background="@color/title_bar_bg"
+        app:centerText="鍏呭��"
+        app:leftImage="@mipmap/icon_back" />
+
+    <ScrollView
+        android:layout_width="match_parent"
+        android:layout_height="match_parent"
+        android:layout_below="@+id/titleBar">
+
+        <LinearLayout
+            android:layout_width="match_parent"
+            android:layout_height="match_parent"
+            android:orientation="vertical">
+
+            <LinearLayout
+                style="@style/newCardLL"
+                android:layout_width="match_parent"
+                android:layout_height="wrap_content">
+
+                <TextView
+                    android:layout_width="wrap_content"
+                    android:layout_height="wrap_content"
+                    android:text="璁惧搴忓垪鍙凤細"
+                    android:textSize="@dimen/new_card_size" />
+
+                <TextView
+                    android:id="@+id/recharge_villageNum"
+                    android:layout_width="match_parent"
+                    android:layout_height="wrap_content"
+                    android:textSize="@dimen/new_card_size" />
+
+
+            </LinearLayout>
+
+            <LinearLayout
+                style="@style/newCardLL"
+                android:layout_width="match_parent"
+                android:layout_height="wrap_content">
+
+                <TextView
+                    android:layout_width="wrap_content"
+                    android:layout_height="wrap_content"
+                    android:text="鐢ㄦ埛鍚嶏細"
+                    android:textSize="@dimen/new_card_size" />
+
+                <TextView
+                    android:id="@+id/recharge_name"
+                    android:layout_width="match_parent"
+                    android:layout_height="wrap_content"
+                    android:textSize="@dimen/new_card_size" />
+
+
+            </LinearLayout>
+
+            <LinearLayout
+                style="@style/newCardLL"
+                android:layout_width="match_parent"
+                android:layout_height="wrap_content">
+
+                <TextView
+                    android:layout_width="wrap_content"
+                    android:layout_height="wrap_content"
+                    android:text="鐢ㄦ埛鍙凤細"
+                    android:textSize="@dimen/new_card_size" />
+
+                <TextView
+                    android:id="@+id/recharge_userNum"
+                    android:layout_width="match_parent"
+                    android:layout_height="wrap_content"
+                    android:inputType="number"
+                    android:textSize="@dimen/new_card_size" />
+
+
+            </LinearLayout>
+
+            <LinearLayout
+                style="@style/newCardLL"
+                android:layout_width="match_parent"
+                android:layout_height="wrap_content">
+
+                <TextView
+                    android:id="@+id/textView2"
+                    android:layout_width="wrap_content"
+                    android:layout_height="wrap_content"
+                    android:text="鏃ユ湡锛�"
+                    android:textSize="@dimen/new_card_size" />
+
+                <TextView
+                    android:id="@+id/recharge_date"
+                    android:layout_width="match_parent"
+                    android:layout_height="wrap_content"
+                    android:textSize="@dimen/new_card_size" />
+
+
+            </LinearLayout>
+
+            <LinearLayout
+                style="@style/newCardLL"
+                android:layout_width="match_parent"
+                android:layout_height="wrap_content">
+
+                <TextView
+                    android:layout_width="wrap_content"
+                    android:layout_height="wrap_content"
+                    android:text="鍏呭�奸噾棰濓細"
+                    android:textSize="@dimen/new_card_size" />
+
+                <TextView
+                    android:id="@+id/recharge_water"
+                    android:layout_width="match_parent"
+                    android:layout_height="wrap_content"
+                    android:inputType="number"
+                    android:textSize="@dimen/new_card_size" />
+
+
+            </LinearLayout>
+
+
+        </LinearLayout>
+
+
+    </ScrollView>
+
+
+</RelativeLayout>
\ No newline at end of file
diff --git a/qiheonlinelibrary/src/main/res/layout/activity_recharge_list_qhl.xml b/qiheonlinelibrary/src/main/res/layout/activity_recharge_list_qhl.xml
new file mode 100644
index 0000000..4dce4bc
--- /dev/null
+++ b/qiheonlinelibrary/src/main/res/layout/activity_recharge_list_qhl.xml
@@ -0,0 +1,47 @@
+<?xml version="1.0" encoding="utf-8"?>
+<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
+    xmlns:app="http://schemas.android.com/apk/res-auto"
+    android:layout_width="match_parent"
+    android:layout_height="match_parent"
+    android:orientation="vertical">
+
+    <com.dayu.baselibrary.view.TitleBar
+        android:id="@+id/titleBar"
+        android:layout_width="match_parent"
+        android:layout_height="@dimen/dimen_title_height"
+        android:background="@color/title_bar_bg"
+        app:centerText="鍏呭�艰褰�"
+        app:leftImage="@mipmap/icon_back"
+        app:rightText="绛涢��" />
+
+    <com.scwang.smart.refresh.layout.SmartRefreshLayout
+        android:id="@+id/refreshLayout"
+        android:layout_width="match_parent"
+        android:layout_height="match_parent"
+        android:layout_above="@id/recharge_total"
+        android:layout_below="@+id/titleBar">
+
+        <androidx.recyclerview.widget.RecyclerView
+            android:id="@+id/recyclerView"
+            android:layout_width="match_parent"
+            android:layout_height="match_parent"
+            android:background="#ffffff"
+            android:overScrollMode="never"
+            android:padding="10dp" />
+
+        <com.scwang.smart.refresh.footer.ClassicsFooter
+            android:layout_width="match_parent"
+            android:layout_height="wrap_content" />
+    </com.scwang.smart.refresh.layout.SmartRefreshLayout>
+
+    <TextView
+        android:id="@+id/recharge_total"
+        android:layout_width="match_parent"
+        android:layout_height="50dp"
+        android:layout_alignParentBottom="true"
+        android:background="@color/title_bg"
+        android:gravity="center"
+        android:text="宸插姞杞芥暟鎹疮璁″厖鍊硷細"
+        android:textSize="@dimen/text_size" />
+
+</RelativeLayout>
\ No newline at end of file
diff --git a/qiheonlinelibrary/src/main/res/layout/activity_recharge_qhl.xml b/qiheonlinelibrary/src/main/res/layout/activity_recharge_qhl.xml
new file mode 100644
index 0000000..825e865
--- /dev/null
+++ b/qiheonlinelibrary/src/main/res/layout/activity_recharge_qhl.xml
@@ -0,0 +1,253 @@
+<?xml version="1.0" encoding="utf-8"?>
+<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
+    xmlns:app="http://schemas.android.com/apk/res-auto"
+    android:layout_width="match_parent"
+    android:layout_height="match_parent">
+
+    <com.dayu.baselibrary.view.TitleBar
+        android:id="@+id/titleBar"
+        android:layout_width="match_parent"
+        android:layout_height="@dimen/dimen_title_height"
+        android:background="@color/title_bar_bg"
+        app:centerText="鍏呭��"
+        app:leftImage="@mipmap/icon_back" />
+
+    <LinearLayout
+        android:id="@+id/recharge_read_LL"
+        android:layout_width="match_parent"
+        android:layout_height="match_parent"
+        android:layout_below="@+id/titleBar"
+        android:orientation="vertical"
+        android:visibility="visible">
+
+        <TextView
+            android:layout_width="match_parent"
+            android:layout_height="wrap_content"
+            android:layout_marginTop="20dp"
+            android:gravity="center"
+            android:text="璇峰皢鍗¤创鍦ㄨ澶囦笂杩涜璇诲崱"
+            android:textSize="@dimen/text_size" />
+
+        <ImageView
+            android:layout_width="match_parent"
+            android:layout_height="match_parent"
+            android:layout_below="@id/textView"
+            android:scaleType="center"
+            android:src="@mipmap/nfc_write" />
+
+
+    </LinearLayout>
+
+
+    <LinearLayout
+        android:id="@+id/recharge_text_LL"
+        android:layout_width="match_parent"
+        android:layout_height="match_parent"
+        android:layout_below="@+id/titleBar"
+        android:orientation="vertical"
+        android:padding="20dp"
+        android:visibility="gone">
+
+        <LinearLayout
+            android:layout_width="match_parent"
+            android:layout_height="wrap_content"
+            android:layout_marginTop="15dp"
+            android:orientation="horizontal">
+
+            <TextView
+                android:layout_width="wrap_content"
+                android:layout_height="wrap_content"
+                android:text="鍗$姸鎬侊細"
+                android:textSize="@dimen/text_size" />
+
+            <TextView
+                android:id="@+id/red_statu"
+                android:layout_width="match_parent"
+                android:layout_height="wrap_content"
+                android:textColor="@color/red"
+                android:textSize="@dimen/new_card_size" />
+
+        </LinearLayout>
+
+        <LinearLayout
+            android:layout_width="match_parent"
+            android:layout_height="wrap_content"
+            android:layout_marginTop="15dp"
+            android:orientation="horizontal">
+
+            <TextView
+                android:layout_width="wrap_content"
+                android:layout_height="wrap_content"
+                android:text="濮撳悕锛�"
+                android:textSize="@dimen/new_card_size" />
+
+            <TextView
+                android:id="@+id/userName"
+                android:layout_width="match_parent"
+                android:layout_height="wrap_content"
+                android:textSize="@dimen/new_card_size" />
+
+        </LinearLayout>
+
+        <LinearLayout
+            android:layout_width="match_parent"
+            android:layout_height="wrap_content"
+            android:layout_marginTop="15dp"
+            android:orientation="horizontal">
+
+            <TextView
+                android:layout_width="wrap_content"
+                android:layout_height="wrap_content"
+                android:text="鍗″彿锛�"
+                android:textSize="@dimen/text_size" />
+
+            <TextView
+                android:id="@+id/red_initCode"
+                android:layout_width="match_parent"
+                android:layout_height="wrap_content"
+                android:text=""
+                android:textSize="@dimen/new_card_size" />
+
+        </LinearLayout>
+
+        <LinearLayout
+            android:layout_width="match_parent"
+            android:layout_height="wrap_content"
+            android:layout_marginTop="15dp"
+            android:orientation="horizontal"
+            android:visibility="visible">
+
+            <TextView
+
+                android:layout_width="wrap_content"
+                android:layout_height="wrap_content"
+                android:text="鍓╀綑閲戦锛�"
+                android:textSize="@dimen/text_size" />
+
+            <TextView
+                android:id="@+id/red_remainder_blance"
+                android:layout_width="match_parent"
+                android:layout_height="wrap_content"
+                android:textSize="@dimen/new_card_size" />
+
+        </LinearLayout>
+
+        <TextView
+            android:id="@+id/red_remainder_water"
+            android:layout_width="match_parent"
+            android:layout_height="wrap_content"
+            android:layout_marginTop="15dp"
+            android:text="鍓╀綑姘撮噺锛�"
+            android:visibility="gone"
+            android:textSize="@dimen/text_size" />
+
+        <TextView
+            android:id="@+id/red_rechargeDate"
+            android:layout_width="match_parent"
+            android:layout_height="wrap_content"
+            android:layout_marginTop="15dp"
+            android:text="鏈�鍚庤喘姘存棩鏈燂細"
+            android:textSize="@dimen/text_size"
+            android:visibility="visible" />
+        <TextView
+            android:id="@+id/red_rechargeElectric"
+            android:layout_width="match_parent"
+            android:layout_height="wrap_content"
+            android:layout_marginTop="15dp"
+            android:text="鐢甸噺鍗曚环锛�"
+            android:textSize="@dimen/text_size"
+            android:visibility="visible" />
+        <TextView
+            android:id="@+id/red_rechargeNumber"
+            android:layout_width="match_parent"
+            android:layout_height="wrap_content"
+            android:layout_marginTop="15dp"
+            android:text="鍏呭�兼鏁帮細"
+            android:textSize="@dimen/text_size"
+            android:visibility="gone" />
+
+        <TextView
+            android:id="@+id/red_total_water"
+            android:layout_width="match_parent"
+            android:layout_height="wrap_content"
+            android:layout_marginTop="15dp"
+            android:text="鎬荤敤姘撮噺锛�"
+            android:textSize="@dimen/text_size"
+            android:visibility="gone" />
+
+        <TextView
+            android:id="@+id/red_total_power"
+            android:layout_width="match_parent"
+            android:layout_height="wrap_content"
+            android:layout_marginTop="15dp"
+            android:text="鎬荤敤鐢甸噺锛�"
+            android:textSize="@dimen/text_size"
+            android:visibility="gone" />
+
+
+        <TextView
+            android:id="@+id/red_waterPrice"
+            android:layout_width="match_parent"
+            android:layout_height="wrap_content"
+            android:layout_marginTop="15dp"
+            android:text="姣忕珛鏂圭背姘翠环鏍硷細"
+            android:textSize="@dimen/text_size"
+            android:visibility="gone" />
+
+        <LinearLayout
+            android:id="@+id/recharge_LL"
+            android:layout_width="match_parent"
+            android:layout_height="wrap_content"
+            android:layout_marginTop="15dp"
+            android:orientation="vertical">
+
+            <TextView
+                android:id="@+id/red_recharge_water"
+                android:layout_width="match_parent"
+                android:layout_height="wrap_content"
+                android:layout_marginTop="15dp"
+                android:text="鍏呭�兼按閲忥細"
+                android:textSize="@dimen/text_size"
+                android:visibility="gone" />
+
+            <LinearLayout
+                android:layout_width="wrap_content"
+                android:layout_height="match_parent"
+                android:orientation="horizontal">
+
+
+                <TextView
+                    android:id="@+id/recharge_tx"
+                    android:layout_width="wrap_content"
+                    android:layout_height="wrap_content"
+                    android:text="閲戦锛堝厓锛夛細"
+                    android:textColor="@color/red"
+                    android:textSize="@dimen/new_card_size" />
+
+                <EditText
+                    android:id="@+id/recharge_water"
+                    android:layout_width="match_parent"
+                    android:layout_height="wrap_content"
+                    android:hint="璇疯緭鍏ュ厖鍊肩殑閲戦"
+                    android:inputType="numberDecimal"
+                    android:textSize="@dimen/new_card_size" />
+
+            </LinearLayout>
+
+
+        </LinearLayout>
+    </LinearLayout>
+
+
+    <TextView
+        android:id="@+id/recharge_registBtn"
+        android:layout_width="match_parent"
+        android:layout_height="50dp"
+        android:layout_alignParentBottom="true"
+        android:background="@color/title_bg"
+        android:gravity="center"
+        android:text="鍏呭��"
+        android:textColor="#000000"
+        android:textSize="@dimen/new_card_size"
+        android:visibility="gone" />
+</RelativeLayout>
\ No newline at end of file
diff --git a/qiheonlinelibrary/src/main/res/layout/activity_red_card_qhl.xml b/qiheonlinelibrary/src/main/res/layout/activity_red_card_qhl.xml
new file mode 100644
index 0000000..b6094af
--- /dev/null
+++ b/qiheonlinelibrary/src/main/res/layout/activity_red_card_qhl.xml
@@ -0,0 +1,197 @@
+<?xml version="1.0" encoding="utf-8"?>
+<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
+    xmlns:app="http://schemas.android.com/apk/res-auto"
+    android:layout_width="match_parent"
+    android:layout_height="match_parent"
+    android:orientation="vertical">
+
+    <com.dayu.baselibrary.view.TitleBar
+        android:id="@+id/titleBar"
+        android:layout_width="match_parent"
+        android:layout_height="@dimen/dimen_title_height"
+        android:background="@color/title_bar_bg"
+        app:centerText="璇诲彇鍗$墖"
+        app:leftImage="@mipmap/icon_back" />
+
+    <ScrollView
+        android:id="@+id/read_userLL"
+        android:layout_width="match_parent"
+        android:layout_height="match_parent"
+        android:layout_below="@id/titleBar"
+        android:visibility="gone">
+
+        <LinearLayout
+            android:layout_width="match_parent"
+            android:layout_height="match_parent"
+            android:layout_margin="20dp"
+            android:orientation="vertical">
+
+            <TextView
+                android:id="@+id/red_name"
+                android:layout_width="match_parent"
+                android:layout_height="wrap_content"
+                android:layout_marginTop="15dp"
+                android:text="濮撳悕锛�"
+                android:textSize="@dimen/text_size" />
+
+            <LinearLayout
+                android:layout_width="match_parent"
+                android:layout_height="wrap_content"
+                android:layout_marginTop="15dp"
+                android:orientation="horizontal">
+
+                <TextView
+                    android:layout_width="wrap_content"
+                    android:layout_height="wrap_content"
+                    android:text="鍗″彿锛�"
+                    android:textSize="@dimen/text_size" />
+
+                <TextView
+                    android:id="@+id/red_initCode"
+                    android:layout_width="match_parent"
+                    android:layout_height="wrap_content"
+                    android:text=""
+                    android:textSize="@dimen/text_size" />
+            </LinearLayout>
+
+
+            <TextView
+                android:id="@+id/red_remainder_blance"
+                android:layout_width="match_parent"
+                android:layout_height="wrap_content"
+                android:layout_marginTop="15dp"
+                android:text="鍓╀綑閲戦锛�"
+                android:textSize="@dimen/text_size"
+                android:visibility="visible" />
+
+            <TextView
+                android:id="@+id/red_remainder_water"
+                android:layout_width="match_parent"
+                android:layout_height="wrap_content"
+                android:layout_marginTop="15dp"
+                android:text="鍓╀綑姘撮噺锛�"
+                android:textSize="@dimen/text_size"
+                android:visibility="gone"/>
+
+            <TextView
+                android:id="@+id/red_rechargeDate"
+                android:layout_width="match_parent"
+                android:layout_height="wrap_content"
+                android:layout_marginTop="15dp"
+                android:text="鏈�鍚庤喘姘存棩鏈燂細"
+                android:textSize="@dimen/text_size"
+                android:visibility="visible" />
+
+            <TextView
+                android:id="@+id/red_rechargeNumber"
+                android:layout_width="match_parent"
+                android:layout_height="wrap_content"
+                android:layout_marginTop="15dp"
+                android:text="鍏呭�兼鏁帮細"
+                android:textSize="@dimen/text_size"
+                android:visibility="gone" />
+
+            <TextView
+                android:id="@+id/red_total_water"
+                android:layout_width="match_parent"
+                android:layout_height="wrap_content"
+                android:layout_marginTop="15dp"
+                android:text="鎬荤敤姘撮噺锛�"
+                android:textSize="@dimen/text_size"
+                android:visibility="gone" />
+
+            <TextView
+                android:id="@+id/red_total_power"
+                android:layout_width="match_parent"
+                android:layout_height="wrap_content"
+                android:layout_marginTop="15dp"
+                android:text="鎬荤敤鐢甸噺锛�"
+                android:textSize="@dimen/text_size"
+                android:visibility="gone" />
+
+            <TextView
+                android:id="@+id/red_statu"
+                android:layout_width="match_parent"
+                android:layout_height="wrap_content"
+                android:layout_marginTop="15dp"
+                android:text="鍗$姸鎬侊細"
+                android:textSize="@dimen/text_size" />
+
+        </LinearLayout>
+
+    </ScrollView>
+
+
+    <LinearLayout
+        android:id="@+id/read_cardTypeLL"
+        android:layout_width="match_parent"
+        android:layout_height="match_parent"
+        android:layout_below="@id/titleBar"
+        android:gravity="center"
+        android:orientation="vertical"
+        android:visibility="visible">
+
+        <TextView
+            android:id="@+id/read_cardTypeTV"
+            android:layout_width="wrap_content"
+            android:layout_height="wrap_content"
+            android:layout_centerHorizontal="true"
+            android:layout_centerVertical="true"
+            android:layout_gravity="center"
+            android:gravity="center"
+            android:textSize="30sp"
+            android:textStyle="bold" />
+
+        <TextView
+            android:id="@+id/read_cardDataTV"
+            android:layout_width="wrap_content"
+            android:layout_height="wrap_content"
+            android:layout_centerHorizontal="true"
+            android:layout_centerVertical="true"
+            android:layout_gravity="center"
+            android:layout_marginTop="20dp"
+            android:gravity="left"
+            android:textSize="20sp"
+            android:textStyle="bold" />
+    </LinearLayout>
+
+
+    <LinearLayout
+        android:id="@+id/read_imgLL"
+        android:layout_width="match_parent"
+        android:layout_height="match_parent"
+        android:layout_below="@id/titleBar"
+        android:background="#ffffff"
+        android:orientation="vertical"
+        android:visibility="visible">
+
+        <TextView
+            android:layout_width="match_parent"
+            android:layout_height="wrap_content"
+            android:layout_below="@id/titleBar"
+            android:layout_marginTop="20dp"
+            android:gravity="center"
+            android:text="璇峰皢鍗¤创鍦ㄨ澶囦笂杩涜璇诲崱"
+            android:textSize="@dimen/text_size" />
+
+
+        <ImageView
+            android:layout_width="match_parent"
+            android:layout_height="match_parent"
+            android:layout_below="@id/textView"
+            android:scaleType="fitCenter"
+            android:src="@mipmap/nfc_write" />
+    </LinearLayout>
+
+    <com.wang.avi.AVLoadingIndicatorView
+        android:id="@+id/avi"
+        style="@style/AVLoadingIndicatorView"
+        android:layout_width="80dp"
+        android:layout_height="80dp"
+        android:layout_centerHorizontal="true"
+        android:layout_centerVertical="true"
+        android:visibility="gone"
+        app:indicatorColor="@color/title_bg"
+        app:indicatorName="BallClipRotatePulseIndicator" />
+
+</RelativeLayout>
\ No newline at end of file
diff --git a/qiheonlinelibrary/src/main/res/layout/activity_region_qhl.xml b/qiheonlinelibrary/src/main/res/layout/activity_region_qhl.xml
new file mode 100644
index 0000000..d64eb85
--- /dev/null
+++ b/qiheonlinelibrary/src/main/res/layout/activity_region_qhl.xml
@@ -0,0 +1,96 @@
+<?xml version="1.0" encoding="utf-8"?>
+<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
+    xmlns:app="http://schemas.android.com/apk/res-auto"
+    android:layout_width="match_parent"
+    android:layout_height="match_parent"
+    android:orientation="vertical">
+
+    <com.dayu.baselibrary.view.TitleBar
+        android:id="@+id/titleBar"
+        android:layout_width="match_parent"
+        android:layout_height="@dimen/dimen_title_height"
+        android:background="@color/title_bar_bg"
+        app:centerText="鐢典环璁剧疆"
+        app:leftImage="@mipmap/icon_back" />
+
+    <LinearLayout
+        android:id="@+id/region_ll"
+        android:layout_width="match_parent"
+        android:layout_height="wrap_content"
+        android:layout_below="@id/titleBar"
+        android:layout_margin="20dp"
+        android:orientation="horizontal">
+
+        <TextView
+            android:layout_width="wrap_content"
+            android:layout_height="wrap_content"
+            android:text="褰撳墠鍖哄煙鍦板潃锛�"
+            android:textSize="@dimen/text_size" />
+
+        <TextView
+            android:id="@+id/region_oldText"
+            android:layout_width="wrap_content"
+            android:layout_height="match_parent"
+            android:textSize="@dimen/text_size" />
+
+    </LinearLayout>
+    <LinearLayout
+        android:id="@+id/controller_ll"
+        android:layout_width="match_parent"
+        android:layout_height="wrap_content"
+        android:layout_below="@id/region_ll"
+        android:layout_margin="20dp"
+        android:orientation="horizontal">
+
+        <TextView
+            android:layout_width="wrap_content"
+            android:layout_height="wrap_content"
+            android:text="褰撳墠鎺у埗鍣ㄧ紪鍙凤細"
+            android:textSize="@dimen/text_size" />
+
+        <TextView
+            android:id="@+id/controller_oldText"
+            android:layout_width="wrap_content"
+            android:layout_height="match_parent"
+            android:textSize="@dimen/text_size" />
+
+    </LinearLayout>
+
+    <EditText
+        android:id="@+id/region_newET"
+        android:layout_width="match_parent"
+        android:layout_height="wrap_content"
+        android:layout_below="@+id/controller_ll"
+        android:layout_alignParentStart="true"
+        android:layout_marginStart="20dp"
+        android:layout_marginTop="20dp"
+        android:layout_marginEnd="20dp"
+        android:layout_marginBottom="20dp"
+        android:hint="璇疯緭鍏ユ柊鍖哄煙鍦板潃锛堜袱浣�16杩涘埗瀛楃锛�"
+        android:maxLength="4"
+        android:inputType="numberDecimal" />
+
+    <EditText
+        android:id="@+id/controller_newET"
+        android:layout_width="match_parent"
+        android:layout_height="wrap_content"
+        android:layout_below="@+id/region_newET"
+        android:layout_alignParentStart="true"
+        android:layout_marginStart="20dp"
+        android:maxLength="4"
+        android:layout_marginTop="20dp"
+        android:layout_marginEnd="20dp"
+        android:layout_marginBottom="20dp"
+        android:hint="璇疯緭鍏ユ柊鎺у埗鍣ㄧ紪鍙凤紙涓や綅16杩涘埗瀛楃锛�"
+        android:inputType="numberDecimal" />
+
+    <TextView
+        android:id="@+id/electric_ok"
+        android:layout_width="match_parent"
+        android:layout_height="50dp"
+        android:layout_alignParentBottom="true"
+        android:background="@color/title_bg"
+        android:gravity="center"
+        android:text="纭�  瀹�"
+        android:textSize="@dimen/text_size" />
+</RelativeLayout>
\ No newline at end of file
diff --git a/qiheonlinelibrary/src/main/res/layout/activity_replacement_qhl.xml b/qiheonlinelibrary/src/main/res/layout/activity_replacement_qhl.xml
new file mode 100644
index 0000000..d3f3565
--- /dev/null
+++ b/qiheonlinelibrary/src/main/res/layout/activity_replacement_qhl.xml
@@ -0,0 +1,37 @@
+<?xml version="1.0" encoding="utf-8"?>
+<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
+    xmlns:app="http://schemas.android.com/apk/res-auto"
+    android:layout_width="match_parent"
+    android:layout_height="match_parent"
+    android:orientation="vertical">
+
+    <com.dayu.baselibrary.view.TitleBar
+        android:id="@+id/titleBar"
+        android:layout_width="match_parent"
+        android:layout_height="@dimen/dimen_title_height"
+        android:background="@color/title_bar_bg"
+        app:centerText="鐢ㄦ埛鍒楄〃"
+        app:leftImage="@mipmap/icon_back"
+        app:rightText="绛涢��" />
+
+    <com.scwang.smart.refresh.layout.SmartRefreshLayout
+        android:id="@+id/refreshLayout"
+        android:layout_width="match_parent"
+        android:layout_height="match_parent"
+        android:layout_above="@id/user_total"
+        android:layout_below="@+id/titleBar">
+
+        <androidx.recyclerview.widget.RecyclerView
+            android:id="@+id/recyclerView"
+            android:layout_width="match_parent"
+            android:layout_height="match_parent"
+            android:background="#fff"
+            android:overScrollMode="never"
+            android:padding="10dp" />
+
+        <com.scwang.smart.refresh.footer.ClassicsFooter
+            android:layout_width="match_parent"
+            android:layout_height="wrap_content" />
+    </com.scwang.smart.refresh.layout.SmartRefreshLayout>
+
+</LinearLayout>
\ No newline at end of file
diff --git a/qiheonlinelibrary/src/main/res/layout/activity_water_meter_qhl.xml b/qiheonlinelibrary/src/main/res/layout/activity_water_meter_qhl.xml
new file mode 100644
index 0000000..eee9735
--- /dev/null
+++ b/qiheonlinelibrary/src/main/res/layout/activity_water_meter_qhl.xml
@@ -0,0 +1,58 @@
+<?xml version="1.0" encoding="utf-8"?>
+<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
+    xmlns:app="http://schemas.android.com/apk/res-auto"
+    android:layout_width="match_parent"
+    android:layout_height="match_parent"
+    android:orientation="vertical">
+
+    <com.dayu.baselibrary.view.TitleBar
+        android:id="@+id/titleBar"
+        android:layout_width="match_parent"
+        android:layout_height="@dimen/dimen_title_height"
+        android:background="@color/title_bar_bg"
+        app:centerText="姘磋〃鑴夊啿璁剧疆"
+        app:leftImage="@mipmap/icon_back" />
+
+    <LinearLayout
+        android:id="@+id/water_ll"
+        android:layout_width="match_parent"
+        android:layout_height="wrap_content"
+        android:layout_below="@id/titleBar"
+        android:layout_margin="20dp"
+        android:orientation="horizontal">
+
+        <TextView
+            android:layout_width="wrap_content"
+            android:layout_height="wrap_content"
+            android:text="褰撳墠姘磋〃鑴夊啿锛�"
+            android:textSize="@dimen/text_size" />
+
+        <TextView
+            android:id="@+id/water_oldNumber"
+            android:layout_width="wrap_content"
+            android:layout_height="match_parent"
+            android:textSize="@dimen/text_size" />
+
+    </LinearLayout>
+
+
+    <EditText
+        android:id="@+id/water_newNum"
+        android:layout_width="match_parent"
+        android:layout_height="wrap_content"
+        android:layout_below="@+id/water_ll"
+        android:layout_alignParentStart="true"
+        android:layout_margin="20dp"
+        android:hint="璇疯緭鍏ユ柊璁剧疆鐨勮剦鍐插��"
+        android:inputType="number" />
+
+    <TextView
+        android:id="@+id/water_ok"
+        android:layout_width="match_parent"
+        android:layout_height="50dp"
+        android:layout_alignParentBottom="true"
+        android:background="@color/title_bg"
+        android:gravity="center"
+        android:text="纭�  瀹�"
+        android:textSize="@dimen/text_size" />
+</RelativeLayout>
\ No newline at end of file
diff --git a/qiheonlinelibrary/src/main/res/layout/activity_water_num_qhl.xml b/qiheonlinelibrary/src/main/res/layout/activity_water_num_qhl.xml
new file mode 100644
index 0000000..1588e77
--- /dev/null
+++ b/qiheonlinelibrary/src/main/res/layout/activity_water_num_qhl.xml
@@ -0,0 +1,211 @@
+<?xml version="1.0" encoding="utf-8"?>
+<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
+    xmlns:app="http://schemas.android.com/apk/res-auto"
+    android:layout_width="match_parent"
+    android:layout_height="match_parent"
+    android:orientation="vertical">
+
+    <com.dayu.baselibrary.view.TitleBar
+        android:id="@+id/titleBar"
+        android:layout_width="match_parent"
+        android:layout_height="@dimen/dimen_title_height"
+        android:background="@color/title_bar_bg"
+        app:centerText="姘撮噺鍗曚环璁剧疆"
+        app:leftImage="@mipmap/icon_back" />
+
+    <LinearLayout
+        android:layout_width="match_parent"
+        android:layout_height="wrap_content"
+        android:layout_below="@id/titleBar"
+        android:orientation="vertical">
+
+        <LinearLayout
+            android:id="@+id/water_ll"
+            android:layout_width="match_parent"
+            android:layout_height="wrap_content"
+            android:layout_marginLeft="20dp"
+            android:layout_marginTop="10dp"
+            android:layout_marginRight="20dp"
+            android:orientation="horizontal">
+
+            <TextView
+                android:layout_width="wrap_content"
+                android:layout_height="wrap_content"
+                android:text="绗竴闃舵姘翠环锛�"
+                android:textSize="@dimen/text_size" />
+
+            <!--        <TextView-->
+            <!--            android:id="@+id/water_oldNumber"-->
+            <!--            android:layout_width="wrap_content"-->
+            <!--            android:layout_height="match_parent"-->
+            <!--            android:textSize="@dimen/text_size" />-->
+            <EditText
+                android:id="@+id/water_newNum"
+                android:layout_width="match_parent"
+                android:layout_height="wrap_content"
+                android:layout_below="@+id/water_ll"
+                android:layout_alignParentStart="true"
+                android:hint="璇疯緭鍏ユ柊璁剧疆鐨勫崟浠�"
+                android:inputType="numberDecimal" />
+        </LinearLayout>
+
+        <LinearLayout
+            android:layout_width="wrap_content"
+            android:layout_height="wrap_content"
+            android:layout_marginLeft="20dp"
+            android:layout_marginTop="10dp"
+            android:layout_marginRight="20dp"
+            android:orientation="horizontal">
+
+            <TextView
+                android:layout_width="wrap_content"
+                android:layout_height="wrap_content"
+                android:text="姘撮噺锛堟柟锛夛細"
+                android:textSize="@dimen/text_size" />
+
+            <!--        <TextView-->
+            <!--            android:id="@+id/water_oldNumber"-->
+            <!--            android:layout_width="wrap_content"-->
+            <!--            android:layout_height="match_parent"-->
+            <!--            android:textSize="@dimen/text_size" />-->
+            <EditText
+
+                android:layout_width="match_parent"
+                android:layout_height="wrap_content"
+                android:layout_below="@+id/water_ll"
+                android:layout_alignParentStart="true"
+                android:hint="璇疯緭鍏ョ涓�闃舵姘撮噺锛堟柟锛�"
+                android:inputType="numberDecimal" />
+
+        </LinearLayout>
+        <LinearLayout
+
+            android:layout_width="match_parent"
+            android:layout_height="wrap_content"
+            android:layout_marginLeft="20dp"
+            android:layout_marginTop="10dp"
+            android:layout_marginRight="20dp"
+            android:orientation="horizontal">
+
+            <TextView
+                android:layout_width="wrap_content"
+                android:layout_height="wrap_content"
+                android:text="绗簩闃舵姘翠环锛�"
+                android:textSize="@dimen/text_size" />
+
+            <!--        <TextView-->
+            <!--            android:id="@+id/water_oldNumber"-->
+            <!--            android:layout_width="wrap_content"-->
+            <!--            android:layout_height="match_parent"-->
+            <!--            android:textSize="@dimen/text_size" />-->
+            <EditText
+
+                android:layout_width="match_parent"
+                android:layout_height="wrap_content"
+                android:layout_below="@+id/water_ll"
+                android:layout_alignParentStart="true"
+                android:hint="璇疯緭鍏ユ柊璁剧疆鐨勫崟浠�"
+                android:inputType="numberDecimal" />
+        </LinearLayout>
+
+        <LinearLayout
+            android:layout_width="wrap_content"
+            android:layout_height="wrap_content"
+            android:layout_marginLeft="20dp"
+            android:layout_marginTop="10dp"
+            android:layout_marginRight="20dp"
+            android:orientation="horizontal">
+
+            <TextView
+                android:layout_width="wrap_content"
+                android:layout_height="wrap_content"
+                android:text="姘撮噺锛堟柟锛夛細"
+                android:textSize="@dimen/text_size" />
+
+            <!--        <TextView-->
+            <!--            android:id="@+id/water_oldNumber"-->
+            <!--            android:layout_width="wrap_content"-->
+            <!--            android:layout_height="match_parent"-->
+            <!--            android:textSize="@dimen/text_size" />-->
+            <EditText
+
+                android:layout_width="match_parent"
+                android:layout_height="wrap_content"
+                android:layout_below="@+id/water_ll"
+                android:layout_alignParentStart="true"
+                android:hint="璇疯緭鍏ョ浜岄樁姊按閲忥紙鏂癸級"
+                android:inputType="numberDecimal" />
+
+        </LinearLayout>
+        <LinearLayout
+
+            android:layout_width="match_parent"
+            android:layout_height="wrap_content"
+            android:layout_marginLeft="20dp"
+            android:layout_marginTop="10dp"
+            android:layout_marginRight="20dp"
+            android:orientation="horizontal">
+
+            <TextView
+                android:layout_width="wrap_content"
+                android:layout_height="wrap_content"
+                android:text="绗笁闃舵姘翠环锛�"
+                android:textSize="@dimen/text_size" />
+
+            <!--        <TextView-->
+            <!--            android:id="@+id/water_oldNumber"-->
+            <!--            android:layout_width="wrap_content"-->
+            <!--            android:layout_height="match_parent"-->
+            <!--            android:textSize="@dimen/text_size" />-->
+            <EditText
+
+                android:layout_width="match_parent"
+                android:layout_height="wrap_content"
+                android:layout_below="@+id/water_ll"
+                android:layout_alignParentStart="true"
+                android:hint="璇疯緭鍏ユ柊璁剧疆鐨勫崟浠�"
+                android:inputType="numberDecimal" />
+        </LinearLayout>
+
+        <LinearLayout
+            android:layout_width="wrap_content"
+            android:layout_height="wrap_content"
+            android:layout_marginLeft="20dp"
+            android:layout_marginTop="10dp"
+            android:layout_marginRight="20dp"
+            android:orientation="horizontal">
+
+            <TextView
+                android:layout_width="wrap_content"
+                android:layout_height="wrap_content"
+                android:text="姘撮噺锛堟柟锛夛細"
+                android:textSize="@dimen/text_size" />
+
+            <!--        <TextView-->
+            <!--            android:id="@+id/water_oldNumber"-->
+            <!--            android:layout_width="wrap_content"-->
+            <!--            android:layout_height="match_parent"-->
+            <!--            android:textSize="@dimen/text_size" />-->
+            <EditText
+
+                android:layout_width="match_parent"
+                android:layout_height="wrap_content"
+                android:layout_below="@+id/water_ll"
+                android:layout_alignParentStart="true"
+                android:hint="璇疯緭鍏ョ涓夐樁姊按閲忥紙鏂癸級"
+                android:inputType="numberDecimal" />
+
+        </LinearLayout>
+    </LinearLayout>
+
+
+    <TextView
+        android:id="@+id/water_ok"
+        android:layout_width="match_parent"
+        android:layout_height="50dp"
+        android:layout_alignParentBottom="true"
+        android:background="@color/title_bg"
+        android:gravity="center"
+        android:text="纭�  瀹�"
+        android:textSize="@dimen/text_size" />
+</RelativeLayout>
\ No newline at end of file
diff --git a/qiheonlinelibrary/src/main/res/layout/activity_write_text_qhl.xml b/qiheonlinelibrary/src/main/res/layout/activity_write_text_qhl.xml
new file mode 100644
index 0000000..39d5150
--- /dev/null
+++ b/qiheonlinelibrary/src/main/res/layout/activity_write_text_qhl.xml
@@ -0,0 +1,56 @@
+<?xml version="1.0" encoding="utf-8"?>
+<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
+    xmlns:app="http://schemas.android.com/apk/res-auto"
+    android:id="@+id/activity_main"
+    android:layout_width="match_parent"
+    android:layout_height="match_parent"
+    android:background="@color/colorBackground">
+
+    <com.dayu.baselibrary.view.TitleBar
+        android:id="@+id/titleBar"
+        android:layout_width="match_parent"
+        android:layout_height="@dimen/dimen_title_height"
+        android:background="@color/title_bar_bg"
+        app:centerText="鍐欏崱"
+        app:leftImage="@mipmap/icon_back" />
+
+
+    <TextView
+        android:id="@+id/cardData"
+        android:layout_width="match_parent"
+        android:layout_height="wrap_content"
+        android:layout_below="@id/titleBar"
+        android:gravity="center"
+        android:layout_marginTop="20dp"
+        android:textSize="@dimen/text_size" />
+
+
+    <TextView
+        android:id="@+id/textView"
+        android:layout_width="match_parent"
+        android:layout_height="wrap_content"
+        android:layout_below="@id/cardData"
+        android:layout_marginTop="20dp"
+        android:gravity="center"
+        android:text="璇峰皢鍗¤创鍦ㄨ澶囦笂杩涜鍐欏崱"
+        android:textSize="@dimen/text_size" />
+
+
+    <ImageView
+        android:layout_width="match_parent"
+        android:layout_height="match_parent"
+        android:layout_below="@id/textView"
+        android:scaleType="center"
+        android:src="@mipmap/nfc_write" />
+
+    <com.wang.avi.AVLoadingIndicatorView
+        android:id="@+id/avi"
+        style="@style/AVLoadingIndicatorView"
+        android:layout_width="80dp"
+        android:layout_height="80dp"
+        android:layout_centerHorizontal="true"
+        android:layout_centerVertical="true"
+        android:visibility="gone"
+        app:indicatorColor="@color/title_bg"
+        app:indicatorName="BallClipRotatePulseIndicator" />
+</RelativeLayout>
diff --git a/qiheonlinelibrary/src/main/res/layout/admincard_line_dialog.xml b/qiheonlinelibrary/src/main/res/layout/admincard_line_dialog.xml
new file mode 100644
index 0000000..745573f
--- /dev/null
+++ b/qiheonlinelibrary/src/main/res/layout/admincard_line_dialog.xml
@@ -0,0 +1,104 @@
+<?xml version="1.0" encoding="utf-8"?>
+<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
+    android:layout_width="match_parent"
+    android:layout_height="match_parent"
+    android:background="#00ffffff"
+    android:gravity="center"
+    android:orientation="vertical">
+
+    <LinearLayout
+        android:layout_width="match_parent"
+        android:layout_height="wrap_content"
+        android:layout_margin="@dimen/dialog_bg_margin"
+        android:background="@drawable/base_bg_dialog_top_stroke"
+        android:gravity="center"
+        android:orientation="vertical">
+
+        <TextView
+            android:layout_width="300dp"
+            android:layout_height="wrap_content"
+            android:layout_marginTop="20dp"
+            android:gravity="center"
+            android:text="閫夋嫨琛ュ崱鏂瑰紡"
+            android:textColor="@color/dialog_btn"
+            android:textSize="23sp"
+            android:textStyle="bold" />
+
+        <View
+            android:layout_width="match_parent"
+            android:layout_height="2px"
+            android:layout_marginTop="20dp"
+            android:background="@color/line_bg" />
+
+        <RadioGroup
+            android:id="@+id/radioLibrary"
+            android:layout_width="match_parent"
+            android:layout_height="wrap_content">
+
+
+            <RadioButton
+                android:id="@+id/local"
+                android:layout_width="match_parent"
+                android:layout_height="wrap_content"
+                android:layout_marginLeft="50dp"
+                android:layout_marginTop="25dp"
+                android:layout_marginRight="50dp"
+                android:background="@drawable/radio_select"
+                android:button="@null"
+                android:gravity="center"
+                android:padding="6dp"
+                android:text="閫夋嫨鏈満鐢ㄦ埛"
+                android:textColor="@drawable/radio_text_select"
+                android:textSize="20sp" />
+
+            <RadioButton
+                android:id="@+id/input"
+                android:layout_width="match_parent"
+                android:layout_height="wrap_content"
+                android:layout_marginLeft="50dp"
+                android:layout_marginTop="25dp"
+                android:layout_marginRight="50dp"
+                android:background="@drawable/radio_select"
+                android:button="@null"
+                android:gravity="center"
+                android:padding="6dp"
+                android:text="鍗曠嫭杈撳叆鍗″彿"
+                android:textColor="@drawable/radio_text_select"
+                android:textSize="20sp" />
+        </RadioGroup>
+
+        <View
+            android:layout_width="match_parent"
+            android:layout_height="2px"
+            android:layout_marginTop="35dp"
+            android:background="@color/line_bg" />
+
+        <LinearLayout
+            android:layout_width="match_parent"
+            android:layout_height="wrap_content"
+            android:gravity="center_horizontal"
+            android:orientation="horizontal"
+            android:padding="5dp">
+
+            <TextView
+                android:id="@+id/ok"
+                android:layout_width="match_parent"
+                android:layout_height="@dimen/dialog_btn_height"
+                android:background="@drawable/textview_select_bg"
+                android:gravity="center"
+                android:paddingLeft="15dp"
+                android:paddingTop="5dp"
+                android:paddingRight="15dp"
+                android:paddingBottom="5dp"
+                android:text="纭�      璁�"
+                android:textColor="@color/dialog_btn"
+                android:textSize="20sp" />
+
+
+        </LinearLayout>
+
+
+    </LinearLayout>
+
+</LinearLayout>
+
diff --git a/qiheonlinelibrary/src/main/res/layout/net_loding.xml b/qiheonlinelibrary/src/main/res/layout/net_loding.xml
new file mode 100644
index 0000000..2730c18
--- /dev/null
+++ b/qiheonlinelibrary/src/main/res/layout/net_loding.xml
@@ -0,0 +1,17 @@
+<?xml version="1.0" encoding="utf-8"?>
+<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
+    xmlns:app="http://schemas.android.com/apk/res-auto"
+    android:layout_width="match_parent"
+    android:layout_height="match_parent"
+    android:gravity="center"
+    android:orientation="vertical">
+
+    <com.pnikosis.materialishprogress.ProgressWheel
+        android:id="@+id/progress_wheel"
+        android:layout_width="80dp"
+        android:layout_height="80dp"
+        android:layout_centerHorizontal="true"
+        android:layout_centerVertical="true"
+        app:matProg_barColor="@color/title_bg"
+        app:matProg_progressIndeterminate="true" />
+</LinearLayout>
\ No newline at end of file
diff --git a/qiheonlinelibrary/src/main/res/layout/qihe_line_item_new_card.xml b/qiheonlinelibrary/src/main/res/layout/qihe_line_item_new_card.xml
new file mode 100644
index 0000000..f57e4d1
--- /dev/null
+++ b/qiheonlinelibrary/src/main/res/layout/qihe_line_item_new_card.xml
@@ -0,0 +1,74 @@
+<?xml version="1.0" encoding="utf-8"?>
+
+
+<layout xmlns:android="http://schemas.android.com/apk/res/android">
+
+
+    <LinearLayout
+        android:layout_width="match_parent"
+        android:layout_height="wrap_content"
+        android:orientation="vertical">
+
+        <LinearLayout
+            android:layout_width="match_parent"
+            android:layout_height="wrap_content"
+            android:layout_marginLeft="15dp"
+            android:layout_marginTop="10dp"
+
+            android:layout_marginRight="15dp"
+            android:orientation="vertical">
+
+            <TextView
+                android:id="@+id/userName"
+                android:layout_width="match_parent"
+                android:layout_height="wrap_content"
+                android:layout_weight="1"
+                android:text="鐢ㄦ埛鍚�"
+                android:textSize="14sp" />
+
+            <TextView
+                android:id="@+id/cardNumber"
+                android:layout_width="match_parent"
+                android:layout_height="wrap_content"
+                android:layout_weight="1"
+                android:text="鍗″彿锛�" />
+
+            <TextView
+                android:id="@+id/userNo"
+                android:layout_width="match_parent"
+                android:layout_height="wrap_content"
+                android:layout_weight="1"
+                android:text="韬唤璇佸彿锛�123123"
+                android:textSize="14sp" />
+
+            <TextView
+                android:id="@+id/water"
+                android:layout_width="match_parent"
+                android:layout_height="wrap_content"
+                android:layout_weight="1"
+                android:text="鐢佃瘽锛�123123"
+                android:textSize="14sp" />
+
+            <TextView
+                android:id="@+id/date"
+                android:layout_width="match_parent"
+                android:layout_height="wrap_content"
+                android:layout_weight="1"
+                android:text="鏃ユ湡"
+                android:textSize="14sp" />
+
+
+        </LinearLayout>
+
+
+        <View
+            android:layout_width="match_parent"
+            android:layout_height="1px"
+            android:layout_marginTop="15dp"
+            android:background="#000000" />
+
+    </LinearLayout>
+
+
+</layout>
+
diff --git a/qiheonlinelibrary/src/main/res/layout/qihe_line_item_patch.xml b/qiheonlinelibrary/src/main/res/layout/qihe_line_item_patch.xml
new file mode 100644
index 0000000..b81006f
--- /dev/null
+++ b/qiheonlinelibrary/src/main/res/layout/qihe_line_item_patch.xml
@@ -0,0 +1,74 @@
+<?xml version="1.0" encoding="utf-8"?>
+<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
+    android:layout_width="match_parent"
+    android:layout_height="match_parent"
+    android:orientation="vertical">
+
+    <LinearLayout
+        android:layout_width="match_parent"
+        android:layout_height="wrap_content"
+        android:layout_marginLeft="15dp"
+        android:layout_marginTop="10dp"
+        android:layout_marginRight="15dp"
+        android:orientation="horizontal">
+
+        <TextView
+            android:id="@+id/userName"
+            android:layout_width="0dp"
+            android:layout_height="wrap_content"
+            android:layout_weight="1"
+            android:text="鐢ㄦ埛鍚�"
+            android:textSize="14sp" />
+
+        <TextView
+            android:id="@+id/userNo"
+            android:layout_width="0dp"
+            android:layout_height="wrap_content"
+            android:layout_weight="1"
+            android:text="鎴峰彿锛�123123"
+            android:textSize="14sp" />
+
+        <TextView
+            android:id="@+id/water"
+            android:layout_width="0dp"
+            android:layout_height="wrap_content"
+            android:layout_weight="1"
+            android:text="姘撮噺锛�123123"
+            android:textSize="14sp" />
+
+    </LinearLayout>
+
+    <LinearLayout
+        android:layout_width="match_parent"
+        android:layout_height="wrap_content"
+        android:layout_marginLeft="15dp"
+        android:layout_marginTop="5dp"
+        android:layout_marginRight="15dp"
+        android:orientation="horizontal">
+
+        <TextView
+            android:id="@+id/morny"
+            android:layout_width="0dp"
+            android:layout_height="wrap_content"
+            android:layout_weight="1"
+            android:text="姘撮噺锛�123123"
+            android:textSize="14sp" />
+
+        <TextView
+            android:id="@+id/date"
+            android:layout_width="0dp"
+            android:layout_height="wrap_content"
+            android:layout_weight="2"
+            android:text="鏃ユ湡"
+            android:textSize="14sp" />
+
+
+    </LinearLayout>
+
+    <View
+        android:layout_width="match_parent"
+        android:layout_height="1px"
+        android:layout_marginTop="15dp"
+        android:background="#000000" />
+
+</LinearLayout>
\ No newline at end of file
diff --git a/qiheonlinelibrary/src/main/res/layout/qihe_line_item_recharge.xml b/qiheonlinelibrary/src/main/res/layout/qihe_line_item_recharge.xml
new file mode 100644
index 0000000..198d4c8
--- /dev/null
+++ b/qiheonlinelibrary/src/main/res/layout/qihe_line_item_recharge.xml
@@ -0,0 +1,83 @@
+<?xml version="1.0" encoding="utf-8"?>
+<layout xmlns:android="http://schemas.android.com/apk/res/android">
+
+
+    <LinearLayout
+        android:layout_width="match_parent"
+        android:layout_height="wrap_content"
+        android:orientation="vertical">
+
+        <LinearLayout
+            android:layout_width="match_parent"
+            android:layout_height="wrap_content"
+            android:layout_marginLeft="15dp"
+            android:layout_marginTop="10dp"
+            android:layout_marginRight="15dp"
+            android:orientation="vertical">
+
+            <TextView
+                android:id="@+id/userName"
+                android:layout_width="match_parent"
+                android:layout_height="wrap_content"
+                android:layout_weight="1"
+                android:text="鐢ㄦ埛鍚�"
+                android:textSize="14sp" />
+
+            <TextView
+                android:id="@+id/userNo"
+                android:layout_width="match_parent"
+                android:layout_height="wrap_content"
+                android:layout_weight="1"
+                android:text="鐢ㄦ埛缂栧彿"
+                android:textSize="14sp" />
+
+            <TextView
+                android:id="@+id/morny"
+                android:layout_width="match_parent"
+                android:layout_height="wrap_content"
+                android:layout_weight="1"
+                android:text="鍏呭�奸噾棰濓細"
+                android:textSize="14sp" />
+            <TextView
+                android:id="@+id/balance"
+                android:layout_width="match_parent"
+                android:layout_height="wrap_content"
+                android:layout_weight="1"
+                android:text="鍓╀綑閲戦锛�"
+                android:textSize="14sp" />
+
+<!--            <TextView-->
+<!--                android:id="@+id/balance"-->
+<!--                android:layout_width="match_parent"-->
+<!--                android:layout_height="wrap_content"-->
+<!--                android:layout_weight="1"-->
+<!--                android:text="浣欓锛�"-->
+<!--                android:textSize="14sp" />-->
+            <TextView
+                android:id="@+id/surplusWater"
+                android:layout_width="match_parent"
+                android:layout_height="wrap_content"
+                android:layout_weight="1"
+                android:text="鍓╀綑姘撮噺锛�"
+                android:visibility="gone"
+                android:textSize="14sp" />
+
+            <TextView
+                android:id="@+id/date"
+                android:layout_width="match_parent"
+                android:layout_height="wrap_content"
+                android:layout_weight="1"
+                android:text="鏃ユ湡"
+                android:textSize="14sp" />
+        </LinearLayout>
+
+
+        <View
+            android:layout_width="match_parent"
+            android:layout_height="1px"
+            android:layout_marginTop="15dp"
+            android:background="#000000" />
+
+    </LinearLayout>
+</layout>
+
diff --git a/qiheonlinelibrary/src/main/res/layout/qihe_line_item_replacements.xml b/qiheonlinelibrary/src/main/res/layout/qihe_line_item_replacements.xml
new file mode 100644
index 0000000..4910c47
--- /dev/null
+++ b/qiheonlinelibrary/src/main/res/layout/qihe_line_item_replacements.xml
@@ -0,0 +1,82 @@
+<?xml version="1.0" encoding="utf-8"?>
+
+
+<layout xmlns:android="http://schemas.android.com/apk/res/android">
+
+    <data>
+
+        <variable
+            name="activity"
+            type="com.dayu.qiheonlinelibrary.activity.ManagerListActivity" />
+
+    </data>
+
+    <LinearLayout
+        android:layout_width="match_parent"
+        android:layout_height="wrap_content"
+        android:orientation="vertical">
+
+        <LinearLayout
+            android:id="@+id/item"
+            android:layout_width="match_parent"
+            android:layout_height="wrap_content"
+            android:layout_marginLeft="15dp"
+            android:layout_marginTop="10dp"
+            android:layout_marginRight="15dp"
+            android:onClick="@{ activity::itemClick}"
+            android:orientation="vertical">
+
+            <TextView
+                android:id="@+id/userName"
+                android:layout_width="match_parent"
+                android:layout_height="wrap_content"
+                android:layout_weight="1"
+                android:text="鐢ㄦ埛鍚�"
+                android:textSize="14sp" />
+
+            <TextView
+                android:id="@+id/cardNumber"
+                android:layout_width="match_parent"
+                android:layout_height="wrap_content"
+                android:layout_weight="1"
+                android:text="鍗″彿锛�" />
+
+            <TextView
+                android:id="@+id/userNo"
+                android:layout_width="match_parent"
+                android:layout_height="wrap_content"
+                android:layout_weight="1"
+                android:text="韬唤璇佸彿锛�123123"
+                android:textSize="14sp" />
+
+            <TextView
+                android:id="@+id/water"
+                android:layout_width="match_parent"
+                android:layout_height="wrap_content"
+                android:layout_weight="1"
+                android:text="鐢佃瘽锛�123123"
+                android:textSize="14sp" />
+
+            <TextView
+                android:id="@+id/date"
+                android:layout_width="match_parent"
+                android:layout_height="wrap_content"
+                android:layout_weight="1"
+                android:text="鏃ユ湡"
+                android:textSize="14sp" />
+
+
+        </LinearLayout>
+
+
+        <View
+            android:layout_width="match_parent"
+            android:layout_height="1px"
+            android:layout_marginTop="15dp"
+            android:background="#000000" />
+
+    </LinearLayout>
+
+
+</layout>
+
diff --git a/qiheonlinelibrary/src/main/res/values/colors.xml b/qiheonlinelibrary/src/main/res/values/colors.xml
new file mode 100644
index 0000000..f8c6127
--- /dev/null
+++ b/qiheonlinelibrary/src/main/res/values/colors.xml
@@ -0,0 +1,10 @@
+<?xml version="1.0" encoding="utf-8"?>
+<resources>
+    <color name="purple_200">#FFBB86FC</color>
+    <color name="purple_500">#FF6200EE</color>
+    <color name="purple_700">#FF3700B3</color>
+    <color name="teal_200">#FF03DAC5</color>
+    <color name="teal_700">#FF018786</color>
+    <color name="black">#FF000000</color>
+    <color name="white">#FFFFFFFF</color>
+</resources>
\ No newline at end of file
diff --git a/qiheonlinelibrary/src/test/java/com/dayu/qiheonlinelibrary/ExampleUnitTest.java b/qiheonlinelibrary/src/test/java/com/dayu/qiheonlinelibrary/ExampleUnitTest.java
new file mode 100644
index 0000000..be4df62
--- /dev/null
+++ b/qiheonlinelibrary/src/test/java/com/dayu/qiheonlinelibrary/ExampleUnitTest.java
@@ -0,0 +1,17 @@
+package com.dayu.qiheonlinelibrary;
+
+import org.junit.Test;
+
+import static org.junit.Assert.*;
+
+/**
+ * Example local unit test, which will execute on the development machine (host).
+ *
+ * @see <a href="http://d.android.com/tools/testing">Testing documentation</a>
+ */
+public class ExampleUnitTest {
+    @Test
+    public void addition_isCorrect() {
+        assertEquals(4, 2 + 2);
+    }
+}
\ No newline at end of file
diff --git a/settings.gradle b/settings.gradle
index 3d8da21..c1985e5 100644
--- a/settings.gradle
+++ b/settings.gradle
@@ -19,5 +19,5 @@
 include ':ocridcardlibrary'
 include ':baselibrary'
 include ':henanlibrary'
-
 include ':qihealonelibrary'
+include ':qiheonlinelibrary'

--
Gitblit v1.8.0