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