diff --git a/app/build.gradle b/app/build.gradle
index 298f687..e142ec1 100644
--- a/app/build.gradle
+++ b/app/build.gradle
@@ -3,6 +3,7 @@
apply plugin: 'com.android.application'
apply plugin: 'kotlin-android'
apply plugin: 'kotlin-android-extensions'
+apply plugin: 'org.greenrobot.greendao'
android {
signingConfigs {
@@ -57,6 +58,12 @@
outputFileName = "XZJL_" + getBuildDate() + "_Beta.apk"
}
}
+
+ greendao {
+ schemaVersion 1//数据库版本号
+ targetGenDir 'src/main/java'//设置DaoMaster、DaoSession、Dao目录
+ daoPackage 'com.casic.xz.meterage.greendao'//设置DaoMaster、DaoSession、Dao包名
+ }
}
static def getBuildDate() {
@@ -67,7 +74,7 @@
dependencies {
//基础依赖库
implementation 'com.github.AndroidCoderPeng:Kotlin-lite-lib:1.0.4'
- implementation 'androidx.appcompat:appcompat:1.5.1'
+ implementation 'androidx.appcompat:appcompat:1.6.1'
implementation 'androidx.core:core-ktx:1.9.0'
//Google官方授权框架
implementation 'pub.devrel:easypermissions:3.0.0'
@@ -113,4 +120,6 @@
implementation 'com.github.tiann:FreeReflection:3.1.0'
//单项/数字、二三级联动、日期/时间等滚轮选择器
implementation 'com.github.gzu-liyujiang.AndroidPicker:WheelPicker:4.1.8'
+ //数据库框架
+ implementation 'org.greenrobot:greendao:3.3.0'
}
\ No newline at end of file
diff --git a/app/build.gradle b/app/build.gradle
index 298f687..e142ec1 100644
--- a/app/build.gradle
+++ b/app/build.gradle
@@ -3,6 +3,7 @@
apply plugin: 'com.android.application'
apply plugin: 'kotlin-android'
apply plugin: 'kotlin-android-extensions'
+apply plugin: 'org.greenrobot.greendao'
android {
signingConfigs {
@@ -57,6 +58,12 @@
outputFileName = "XZJL_" + getBuildDate() + "_Beta.apk"
}
}
+
+ greendao {
+ schemaVersion 1//数据库版本号
+ targetGenDir 'src/main/java'//设置DaoMaster、DaoSession、Dao目录
+ daoPackage 'com.casic.xz.meterage.greendao'//设置DaoMaster、DaoSession、Dao包名
+ }
}
static def getBuildDate() {
@@ -67,7 +74,7 @@
dependencies {
//基础依赖库
implementation 'com.github.AndroidCoderPeng:Kotlin-lite-lib:1.0.4'
- implementation 'androidx.appcompat:appcompat:1.5.1'
+ implementation 'androidx.appcompat:appcompat:1.6.1'
implementation 'androidx.core:core-ktx:1.9.0'
//Google官方授权框架
implementation 'pub.devrel:easypermissions:3.0.0'
@@ -113,4 +120,6 @@
implementation 'com.github.tiann:FreeReflection:3.1.0'
//单项/数字、二三级联动、日期/时间等滚轮选择器
implementation 'com.github.gzu-liyujiang.AndroidPicker:WheelPicker:4.1.8'
+ //数据库框架
+ implementation 'org.greenrobot:greendao:3.3.0'
}
\ No newline at end of file
diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml
index 972eff9..5b6f9b2 100644
--- a/app/src/main/AndroidManifest.xml
+++ b/app/src/main/AndroidManifest.xml
@@ -69,6 +69,8 @@
+
+
diff --git a/app/build.gradle b/app/build.gradle
index 298f687..e142ec1 100644
--- a/app/build.gradle
+++ b/app/build.gradle
@@ -3,6 +3,7 @@
apply plugin: 'com.android.application'
apply plugin: 'kotlin-android'
apply plugin: 'kotlin-android-extensions'
+apply plugin: 'org.greenrobot.greendao'
android {
signingConfigs {
@@ -57,6 +58,12 @@
outputFileName = "XZJL_" + getBuildDate() + "_Beta.apk"
}
}
+
+ greendao {
+ schemaVersion 1//数据库版本号
+ targetGenDir 'src/main/java'//设置DaoMaster、DaoSession、Dao目录
+ daoPackage 'com.casic.xz.meterage.greendao'//设置DaoMaster、DaoSession、Dao包名
+ }
}
static def getBuildDate() {
@@ -67,7 +74,7 @@
dependencies {
//基础依赖库
implementation 'com.github.AndroidCoderPeng:Kotlin-lite-lib:1.0.4'
- implementation 'androidx.appcompat:appcompat:1.5.1'
+ implementation 'androidx.appcompat:appcompat:1.6.1'
implementation 'androidx.core:core-ktx:1.9.0'
//Google官方授权框架
implementation 'pub.devrel:easypermissions:3.0.0'
@@ -113,4 +120,6 @@
implementation 'com.github.tiann:FreeReflection:3.1.0'
//单项/数字、二三级联动、日期/时间等滚轮选择器
implementation 'com.github.gzu-liyujiang.AndroidPicker:WheelPicker:4.1.8'
+ //数据库框架
+ implementation 'org.greenrobot:greendao:3.3.0'
}
\ No newline at end of file
diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml
index 972eff9..5b6f9b2 100644
--- a/app/src/main/AndroidManifest.xml
+++ b/app/src/main/AndroidManifest.xml
@@ -69,6 +69,8 @@
+
+
diff --git a/app/src/main/java/com/casic/xz/meterage/base/BaseApplication.kt b/app/src/main/java/com/casic/xz/meterage/base/BaseApplication.kt
index 14a604d..1684c23 100644
--- a/app/src/main/java/com/casic/xz/meterage/base/BaseApplication.kt
+++ b/app/src/main/java/com/casic/xz/meterage/base/BaseApplication.kt
@@ -2,6 +2,8 @@
import android.app.Application
import android.content.Context
+import com.casic.xz.meterage.greendao.DaoMaster
+import com.casic.xz.meterage.greendao.DaoSession
import com.pengxh.kt.lite.utils.SaveKeyValues
import me.weishu.reflection.Reflection
import kotlin.properties.Delegates
@@ -12,12 +14,22 @@
private var application: BaseApplication by Delegates.notNull()
fun get() = application
+
+ private lateinit var daoSession: DaoSession
}
override fun onCreate() {
super.onCreate()
application = this
SaveKeyValues.initSharedPreferences(this)
+
+ val devOpenHelper = DaoMaster.DevOpenHelper(this, "Meterage.db", null)
+ val daoMaster = DaoMaster(devOpenHelper.writableDatabase)
+ daoSession = daoMaster.newSession()
+ }
+
+ fun getDaoSession(): DaoSession {
+ return daoSession
}
//绕过Android 11以上反射限制
diff --git a/app/build.gradle b/app/build.gradle
index 298f687..e142ec1 100644
--- a/app/build.gradle
+++ b/app/build.gradle
@@ -3,6 +3,7 @@
apply plugin: 'com.android.application'
apply plugin: 'kotlin-android'
apply plugin: 'kotlin-android-extensions'
+apply plugin: 'org.greenrobot.greendao'
android {
signingConfigs {
@@ -57,6 +58,12 @@
outputFileName = "XZJL_" + getBuildDate() + "_Beta.apk"
}
}
+
+ greendao {
+ schemaVersion 1//数据库版本号
+ targetGenDir 'src/main/java'//设置DaoMaster、DaoSession、Dao目录
+ daoPackage 'com.casic.xz.meterage.greendao'//设置DaoMaster、DaoSession、Dao包名
+ }
}
static def getBuildDate() {
@@ -67,7 +74,7 @@
dependencies {
//基础依赖库
implementation 'com.github.AndroidCoderPeng:Kotlin-lite-lib:1.0.4'
- implementation 'androidx.appcompat:appcompat:1.5.1'
+ implementation 'androidx.appcompat:appcompat:1.6.1'
implementation 'androidx.core:core-ktx:1.9.0'
//Google官方授权框架
implementation 'pub.devrel:easypermissions:3.0.0'
@@ -113,4 +120,6 @@
implementation 'com.github.tiann:FreeReflection:3.1.0'
//单项/数字、二三级联动、日期/时间等滚轮选择器
implementation 'com.github.gzu-liyujiang.AndroidPicker:WheelPicker:4.1.8'
+ //数据库框架
+ implementation 'org.greenrobot:greendao:3.3.0'
}
\ No newline at end of file
diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml
index 972eff9..5b6f9b2 100644
--- a/app/src/main/AndroidManifest.xml
+++ b/app/src/main/AndroidManifest.xml
@@ -69,6 +69,8 @@
+
+
diff --git a/app/src/main/java/com/casic/xz/meterage/base/BaseApplication.kt b/app/src/main/java/com/casic/xz/meterage/base/BaseApplication.kt
index 14a604d..1684c23 100644
--- a/app/src/main/java/com/casic/xz/meterage/base/BaseApplication.kt
+++ b/app/src/main/java/com/casic/xz/meterage/base/BaseApplication.kt
@@ -2,6 +2,8 @@
import android.app.Application
import android.content.Context
+import com.casic.xz.meterage.greendao.DaoMaster
+import com.casic.xz.meterage.greendao.DaoSession
import com.pengxh.kt.lite.utils.SaveKeyValues
import me.weishu.reflection.Reflection
import kotlin.properties.Delegates
@@ -12,12 +14,22 @@
private var application: BaseApplication by Delegates.notNull()
fun get() = application
+
+ private lateinit var daoSession: DaoSession
}
override fun onCreate() {
super.onCreate()
application = this
SaveKeyValues.initSharedPreferences(this)
+
+ val devOpenHelper = DaoMaster.DevOpenHelper(this, "Meterage.db", null)
+ val daoMaster = DaoMaster(devOpenHelper.writableDatabase)
+ daoSession = daoMaster.newSession()
+ }
+
+ fun getDaoSession(): DaoSession {
+ return daoSession
}
//绕过Android 11以上反射限制
diff --git a/app/src/main/java/com/casic/xz/meterage/bean/SearchHistoryBean.java b/app/src/main/java/com/casic/xz/meterage/bean/SearchHistoryBean.java
new file mode 100644
index 0000000..6a46a3a
--- /dev/null
+++ b/app/src/main/java/com/casic/xz/meterage/bean/SearchHistoryBean.java
@@ -0,0 +1,82 @@
+package com.casic.xz.meterage.bean;
+
+import org.greenrobot.greendao.annotation.Entity;
+import org.greenrobot.greendao.annotation.Generated;
+import org.greenrobot.greendao.annotation.Id;
+import org.greenrobot.greendao.annotation.Unique;
+
+@Entity
+public class SearchHistoryBean {
+ @Id(autoincrement = true)
+ private Long id;//主键自增
+
+ @Unique
+ private String uuid;
+ private String keywords;//查询条件-关键字
+ private String searchType;//查询类型
+ private String userId;//用户Id
+ private String searchTime;//查询的时间
+
+ @Generated(hash = 2130561778)
+ public SearchHistoryBean(Long id, String uuid, String keywords,
+ String searchType, String userId, String searchTime) {
+ this.id = id;
+ this.uuid = uuid;
+ this.keywords = keywords;
+ this.searchType = searchType;
+ this.userId = userId;
+ this.searchTime = searchTime;
+ }
+
+ @Generated(hash = 1570282321)
+ public SearchHistoryBean() {
+ }
+
+ public Long getId() {
+ return this.id;
+ }
+
+ public void setId(Long id) {
+ this.id = id;
+ }
+
+ public String getUuid() {
+ return this.uuid;
+ }
+
+ public void setUuid(String uuid) {
+ this.uuid = uuid;
+ }
+
+ public String getKeywords() {
+ return this.keywords;
+ }
+
+ public void setKeywords(String keywords) {
+ this.keywords = keywords;
+ }
+
+ public String getSearchType() {
+ return this.searchType;
+ }
+
+ public void setSearchType(String searchType) {
+ this.searchType = searchType;
+ }
+
+ public String getUserId() {
+ return this.userId;
+ }
+
+ public void setUserId(String userId) {
+ this.userId = userId;
+ }
+
+ public String getSearchTime() {
+ return this.searchTime;
+ }
+
+ public void setSearchTime(String searchTime) {
+ this.searchTime = searchTime;
+ }
+}
diff --git a/app/build.gradle b/app/build.gradle
index 298f687..e142ec1 100644
--- a/app/build.gradle
+++ b/app/build.gradle
@@ -3,6 +3,7 @@
apply plugin: 'com.android.application'
apply plugin: 'kotlin-android'
apply plugin: 'kotlin-android-extensions'
+apply plugin: 'org.greenrobot.greendao'
android {
signingConfigs {
@@ -57,6 +58,12 @@
outputFileName = "XZJL_" + getBuildDate() + "_Beta.apk"
}
}
+
+ greendao {
+ schemaVersion 1//数据库版本号
+ targetGenDir 'src/main/java'//设置DaoMaster、DaoSession、Dao目录
+ daoPackage 'com.casic.xz.meterage.greendao'//设置DaoMaster、DaoSession、Dao包名
+ }
}
static def getBuildDate() {
@@ -67,7 +74,7 @@
dependencies {
//基础依赖库
implementation 'com.github.AndroidCoderPeng:Kotlin-lite-lib:1.0.4'
- implementation 'androidx.appcompat:appcompat:1.5.1'
+ implementation 'androidx.appcompat:appcompat:1.6.1'
implementation 'androidx.core:core-ktx:1.9.0'
//Google官方授权框架
implementation 'pub.devrel:easypermissions:3.0.0'
@@ -113,4 +120,6 @@
implementation 'com.github.tiann:FreeReflection:3.1.0'
//单项/数字、二三级联动、日期/时间等滚轮选择器
implementation 'com.github.gzu-liyujiang.AndroidPicker:WheelPicker:4.1.8'
+ //数据库框架
+ implementation 'org.greenrobot:greendao:3.3.0'
}
\ No newline at end of file
diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml
index 972eff9..5b6f9b2 100644
--- a/app/src/main/AndroidManifest.xml
+++ b/app/src/main/AndroidManifest.xml
@@ -69,6 +69,8 @@
+
+
diff --git a/app/src/main/java/com/casic/xz/meterage/base/BaseApplication.kt b/app/src/main/java/com/casic/xz/meterage/base/BaseApplication.kt
index 14a604d..1684c23 100644
--- a/app/src/main/java/com/casic/xz/meterage/base/BaseApplication.kt
+++ b/app/src/main/java/com/casic/xz/meterage/base/BaseApplication.kt
@@ -2,6 +2,8 @@
import android.app.Application
import android.content.Context
+import com.casic.xz.meterage.greendao.DaoMaster
+import com.casic.xz.meterage.greendao.DaoSession
import com.pengxh.kt.lite.utils.SaveKeyValues
import me.weishu.reflection.Reflection
import kotlin.properties.Delegates
@@ -12,12 +14,22 @@
private var application: BaseApplication by Delegates.notNull()
fun get() = application
+
+ private lateinit var daoSession: DaoSession
}
override fun onCreate() {
super.onCreate()
application = this
SaveKeyValues.initSharedPreferences(this)
+
+ val devOpenHelper = DaoMaster.DevOpenHelper(this, "Meterage.db", null)
+ val daoMaster = DaoMaster(devOpenHelper.writableDatabase)
+ daoSession = daoMaster.newSession()
+ }
+
+ fun getDaoSession(): DaoSession {
+ return daoSession
}
//绕过Android 11以上反射限制
diff --git a/app/src/main/java/com/casic/xz/meterage/bean/SearchHistoryBean.java b/app/src/main/java/com/casic/xz/meterage/bean/SearchHistoryBean.java
new file mode 100644
index 0000000..6a46a3a
--- /dev/null
+++ b/app/src/main/java/com/casic/xz/meterage/bean/SearchHistoryBean.java
@@ -0,0 +1,82 @@
+package com.casic.xz.meterage.bean;
+
+import org.greenrobot.greendao.annotation.Entity;
+import org.greenrobot.greendao.annotation.Generated;
+import org.greenrobot.greendao.annotation.Id;
+import org.greenrobot.greendao.annotation.Unique;
+
+@Entity
+public class SearchHistoryBean {
+ @Id(autoincrement = true)
+ private Long id;//主键自增
+
+ @Unique
+ private String uuid;
+ private String keywords;//查询条件-关键字
+ private String searchType;//查询类型
+ private String userId;//用户Id
+ private String searchTime;//查询的时间
+
+ @Generated(hash = 2130561778)
+ public SearchHistoryBean(Long id, String uuid, String keywords,
+ String searchType, String userId, String searchTime) {
+ this.id = id;
+ this.uuid = uuid;
+ this.keywords = keywords;
+ this.searchType = searchType;
+ this.userId = userId;
+ this.searchTime = searchTime;
+ }
+
+ @Generated(hash = 1570282321)
+ public SearchHistoryBean() {
+ }
+
+ public Long getId() {
+ return this.id;
+ }
+
+ public void setId(Long id) {
+ this.id = id;
+ }
+
+ public String getUuid() {
+ return this.uuid;
+ }
+
+ public void setUuid(String uuid) {
+ this.uuid = uuid;
+ }
+
+ public String getKeywords() {
+ return this.keywords;
+ }
+
+ public void setKeywords(String keywords) {
+ this.keywords = keywords;
+ }
+
+ public String getSearchType() {
+ return this.searchType;
+ }
+
+ public void setSearchType(String searchType) {
+ this.searchType = searchType;
+ }
+
+ public String getUserId() {
+ return this.userId;
+ }
+
+ public void setUserId(String userId) {
+ this.userId = userId;
+ }
+
+ public String getSearchTime() {
+ return this.searchTime;
+ }
+
+ public void setSearchTime(String searchTime) {
+ this.searchTime = searchTime;
+ }
+}
diff --git a/app/src/main/java/com/casic/xz/meterage/fragment/HomePageFragment.kt b/app/src/main/java/com/casic/xz/meterage/fragment/HomePageFragment.kt
index 151f951..ae7f5e4 100644
--- a/app/src/main/java/com/casic/xz/meterage/fragment/HomePageFragment.kt
+++ b/app/src/main/java/com/casic/xz/meterage/fragment/HomePageFragment.kt
@@ -15,22 +15,20 @@
import com.casic.xz.meterage.extensions.showEmptyPage
import com.casic.xz.meterage.model.NoticeListModel
import com.casic.xz.meterage.model.RemindListModel
-import com.casic.xz.meterage.model.UserInfoModel
import com.casic.xz.meterage.utils.LoadingDialogHub
import com.casic.xz.meterage.utils.LocaleConstant
import com.casic.xz.meterage.utils.QrConfigCreator
import com.casic.xz.meterage.view.home.*
import com.casic.xz.meterage.view.notice.NoticeListActivity
+import com.casic.xz.meterage.view.search.SearchAllActivity
import com.casic.xz.meterage.vm.MeterageTrainViewModel
import com.casic.xz.meterage.vm.NoticeViewModel
-import com.casic.xz.meterage.vm.UserViewModel
import com.pengxh.kt.lite.adapter.NormalRecyclerAdapter
import com.pengxh.kt.lite.adapter.ViewHolder
import com.pengxh.kt.lite.base.KotlinBaseFragment
import com.pengxh.kt.lite.extensions.convertColor
import com.pengxh.kt.lite.extensions.navigatePageTo
import com.pengxh.kt.lite.extensions.show
-import com.pengxh.kt.lite.utils.SaveKeyValues
import com.pengxh.kt.lite.utils.WeakReferenceHandler
import com.pengxh.kt.lite.vm.LoadState
import com.pengxh.kt.lite.widget.dialog.AlertControlDialog
@@ -39,13 +37,12 @@
import kotlinx.android.synthetic.main.include_empty_view.*
import java.util.*
-class HomePageFragment : KotlinBaseFragment() {
+class HomePageFragment(private val userId: String) : KotlinBaseFragment() {
private val timer = object : Timer() {}
private lateinit var weakReferenceHandler: WeakReferenceHandler
private lateinit var meterageTrainViewModel: MeterageTrainViewModel
private lateinit var noticeViewModel: NoticeViewModel
- private lateinit var userData: UserInfoModel.DataModel
private lateinit var remindAdapter: NormalRecyclerAdapter
private var dataBeans: MutableList = ArrayList()
private var noticeBeans: MutableList = ArrayList()
@@ -170,14 +167,6 @@
true
}
- val userViewModel = ViewModelProvider(this)[UserViewModel::class.java]
- userViewModel.getUserInfo(SaveKeyValues.getValue(LocaleConstant.ACCOUNT, "") as String)
- userViewModel.userInfo.observe(this) {
- if (it.code == 200) {
- userData = it.data
- }
- }
-
meterageTrainViewModel = ViewModelProvider(this)[MeterageTrainViewModel::class.java]
meterageTrainViewModel.signInResult.observe(this) {
if (it.code == 200) {
@@ -296,10 +285,14 @@
}
override fun initEvent() {
+ searchBar.setOnClickListener {
+ requireContext().navigatePageTo()
+ }
+
scanCodeView.setOnClickListener {
qrManager.startScan(requireActivity()) { result ->
if (result.content.isDigitsOnly()) {
- meterageTrainViewModel.signIn(userData.id, result.content)
+ meterageTrainViewModel.signIn(userId, result.content)
} else {
"签到二维码错误,请重新扫描".show(requireContext())
}
diff --git a/app/build.gradle b/app/build.gradle
index 298f687..e142ec1 100644
--- a/app/build.gradle
+++ b/app/build.gradle
@@ -3,6 +3,7 @@
apply plugin: 'com.android.application'
apply plugin: 'kotlin-android'
apply plugin: 'kotlin-android-extensions'
+apply plugin: 'org.greenrobot.greendao'
android {
signingConfigs {
@@ -57,6 +58,12 @@
outputFileName = "XZJL_" + getBuildDate() + "_Beta.apk"
}
}
+
+ greendao {
+ schemaVersion 1//数据库版本号
+ targetGenDir 'src/main/java'//设置DaoMaster、DaoSession、Dao目录
+ daoPackage 'com.casic.xz.meterage.greendao'//设置DaoMaster、DaoSession、Dao包名
+ }
}
static def getBuildDate() {
@@ -67,7 +74,7 @@
dependencies {
//基础依赖库
implementation 'com.github.AndroidCoderPeng:Kotlin-lite-lib:1.0.4'
- implementation 'androidx.appcompat:appcompat:1.5.1'
+ implementation 'androidx.appcompat:appcompat:1.6.1'
implementation 'androidx.core:core-ktx:1.9.0'
//Google官方授权框架
implementation 'pub.devrel:easypermissions:3.0.0'
@@ -113,4 +120,6 @@
implementation 'com.github.tiann:FreeReflection:3.1.0'
//单项/数字、二三级联动、日期/时间等滚轮选择器
implementation 'com.github.gzu-liyujiang.AndroidPicker:WheelPicker:4.1.8'
+ //数据库框架
+ implementation 'org.greenrobot:greendao:3.3.0'
}
\ No newline at end of file
diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml
index 972eff9..5b6f9b2 100644
--- a/app/src/main/AndroidManifest.xml
+++ b/app/src/main/AndroidManifest.xml
@@ -69,6 +69,8 @@
+
+
diff --git a/app/src/main/java/com/casic/xz/meterage/base/BaseApplication.kt b/app/src/main/java/com/casic/xz/meterage/base/BaseApplication.kt
index 14a604d..1684c23 100644
--- a/app/src/main/java/com/casic/xz/meterage/base/BaseApplication.kt
+++ b/app/src/main/java/com/casic/xz/meterage/base/BaseApplication.kt
@@ -2,6 +2,8 @@
import android.app.Application
import android.content.Context
+import com.casic.xz.meterage.greendao.DaoMaster
+import com.casic.xz.meterage.greendao.DaoSession
import com.pengxh.kt.lite.utils.SaveKeyValues
import me.weishu.reflection.Reflection
import kotlin.properties.Delegates
@@ -12,12 +14,22 @@
private var application: BaseApplication by Delegates.notNull()
fun get() = application
+
+ private lateinit var daoSession: DaoSession
}
override fun onCreate() {
super.onCreate()
application = this
SaveKeyValues.initSharedPreferences(this)
+
+ val devOpenHelper = DaoMaster.DevOpenHelper(this, "Meterage.db", null)
+ val daoMaster = DaoMaster(devOpenHelper.writableDatabase)
+ daoSession = daoMaster.newSession()
+ }
+
+ fun getDaoSession(): DaoSession {
+ return daoSession
}
//绕过Android 11以上反射限制
diff --git a/app/src/main/java/com/casic/xz/meterage/bean/SearchHistoryBean.java b/app/src/main/java/com/casic/xz/meterage/bean/SearchHistoryBean.java
new file mode 100644
index 0000000..6a46a3a
--- /dev/null
+++ b/app/src/main/java/com/casic/xz/meterage/bean/SearchHistoryBean.java
@@ -0,0 +1,82 @@
+package com.casic.xz.meterage.bean;
+
+import org.greenrobot.greendao.annotation.Entity;
+import org.greenrobot.greendao.annotation.Generated;
+import org.greenrobot.greendao.annotation.Id;
+import org.greenrobot.greendao.annotation.Unique;
+
+@Entity
+public class SearchHistoryBean {
+ @Id(autoincrement = true)
+ private Long id;//主键自增
+
+ @Unique
+ private String uuid;
+ private String keywords;//查询条件-关键字
+ private String searchType;//查询类型
+ private String userId;//用户Id
+ private String searchTime;//查询的时间
+
+ @Generated(hash = 2130561778)
+ public SearchHistoryBean(Long id, String uuid, String keywords,
+ String searchType, String userId, String searchTime) {
+ this.id = id;
+ this.uuid = uuid;
+ this.keywords = keywords;
+ this.searchType = searchType;
+ this.userId = userId;
+ this.searchTime = searchTime;
+ }
+
+ @Generated(hash = 1570282321)
+ public SearchHistoryBean() {
+ }
+
+ public Long getId() {
+ return this.id;
+ }
+
+ public void setId(Long id) {
+ this.id = id;
+ }
+
+ public String getUuid() {
+ return this.uuid;
+ }
+
+ public void setUuid(String uuid) {
+ this.uuid = uuid;
+ }
+
+ public String getKeywords() {
+ return this.keywords;
+ }
+
+ public void setKeywords(String keywords) {
+ this.keywords = keywords;
+ }
+
+ public String getSearchType() {
+ return this.searchType;
+ }
+
+ public void setSearchType(String searchType) {
+ this.searchType = searchType;
+ }
+
+ public String getUserId() {
+ return this.userId;
+ }
+
+ public void setUserId(String userId) {
+ this.userId = userId;
+ }
+
+ public String getSearchTime() {
+ return this.searchTime;
+ }
+
+ public void setSearchTime(String searchTime) {
+ this.searchTime = searchTime;
+ }
+}
diff --git a/app/src/main/java/com/casic/xz/meterage/fragment/HomePageFragment.kt b/app/src/main/java/com/casic/xz/meterage/fragment/HomePageFragment.kt
index 151f951..ae7f5e4 100644
--- a/app/src/main/java/com/casic/xz/meterage/fragment/HomePageFragment.kt
+++ b/app/src/main/java/com/casic/xz/meterage/fragment/HomePageFragment.kt
@@ -15,22 +15,20 @@
import com.casic.xz.meterage.extensions.showEmptyPage
import com.casic.xz.meterage.model.NoticeListModel
import com.casic.xz.meterage.model.RemindListModel
-import com.casic.xz.meterage.model.UserInfoModel
import com.casic.xz.meterage.utils.LoadingDialogHub
import com.casic.xz.meterage.utils.LocaleConstant
import com.casic.xz.meterage.utils.QrConfigCreator
import com.casic.xz.meterage.view.home.*
import com.casic.xz.meterage.view.notice.NoticeListActivity
+import com.casic.xz.meterage.view.search.SearchAllActivity
import com.casic.xz.meterage.vm.MeterageTrainViewModel
import com.casic.xz.meterage.vm.NoticeViewModel
-import com.casic.xz.meterage.vm.UserViewModel
import com.pengxh.kt.lite.adapter.NormalRecyclerAdapter
import com.pengxh.kt.lite.adapter.ViewHolder
import com.pengxh.kt.lite.base.KotlinBaseFragment
import com.pengxh.kt.lite.extensions.convertColor
import com.pengxh.kt.lite.extensions.navigatePageTo
import com.pengxh.kt.lite.extensions.show
-import com.pengxh.kt.lite.utils.SaveKeyValues
import com.pengxh.kt.lite.utils.WeakReferenceHandler
import com.pengxh.kt.lite.vm.LoadState
import com.pengxh.kt.lite.widget.dialog.AlertControlDialog
@@ -39,13 +37,12 @@
import kotlinx.android.synthetic.main.include_empty_view.*
import java.util.*
-class HomePageFragment : KotlinBaseFragment() {
+class HomePageFragment(private val userId: String) : KotlinBaseFragment() {
private val timer = object : Timer() {}
private lateinit var weakReferenceHandler: WeakReferenceHandler
private lateinit var meterageTrainViewModel: MeterageTrainViewModel
private lateinit var noticeViewModel: NoticeViewModel
- private lateinit var userData: UserInfoModel.DataModel
private lateinit var remindAdapter: NormalRecyclerAdapter
private var dataBeans: MutableList = ArrayList()
private var noticeBeans: MutableList = ArrayList()
@@ -170,14 +167,6 @@
true
}
- val userViewModel = ViewModelProvider(this)[UserViewModel::class.java]
- userViewModel.getUserInfo(SaveKeyValues.getValue(LocaleConstant.ACCOUNT, "") as String)
- userViewModel.userInfo.observe(this) {
- if (it.code == 200) {
- userData = it.data
- }
- }
-
meterageTrainViewModel = ViewModelProvider(this)[MeterageTrainViewModel::class.java]
meterageTrainViewModel.signInResult.observe(this) {
if (it.code == 200) {
@@ -296,10 +285,14 @@
}
override fun initEvent() {
+ searchBar.setOnClickListener {
+ requireContext().navigatePageTo()
+ }
+
scanCodeView.setOnClickListener {
qrManager.startScan(requireActivity()) { result ->
if (result.content.isDigitsOnly()) {
- meterageTrainViewModel.signIn(userData.id, result.content)
+ meterageTrainViewModel.signIn(userId, result.content)
} else {
"签到二维码错误,请重新扫描".show(requireContext())
}
diff --git a/app/src/main/java/com/casic/xz/meterage/greendao/DaoMaster.java b/app/src/main/java/com/casic/xz/meterage/greendao/DaoMaster.java
new file mode 100644
index 0000000..d714ce2
--- /dev/null
+++ b/app/src/main/java/com/casic/xz/meterage/greendao/DaoMaster.java
@@ -0,0 +1,96 @@
+package com.casic.xz.meterage.greendao;
+
+import android.content.Context;
+import android.database.sqlite.SQLiteDatabase;
+import android.database.sqlite.SQLiteDatabase.CursorFactory;
+import android.util.Log;
+
+import org.greenrobot.greendao.AbstractDaoMaster;
+import org.greenrobot.greendao.database.Database;
+import org.greenrobot.greendao.database.DatabaseOpenHelper;
+import org.greenrobot.greendao.database.StandardDatabase;
+import org.greenrobot.greendao.identityscope.IdentityScopeType;
+
+
+// THIS CODE IS GENERATED BY greenDAO, DO NOT EDIT.
+/**
+ * Master of DAO (schema version 1): knows all DAOs.
+ */
+public class DaoMaster extends AbstractDaoMaster {
+ public static final int SCHEMA_VERSION = 1;
+
+ /** Creates underlying database table using DAOs. */
+ public static void createAllTables(Database db, boolean ifNotExists) {
+ SearchHistoryBeanDao.createTable(db, ifNotExists);
+ }
+
+ /** Drops underlying database table using DAOs. */
+ public static void dropAllTables(Database db, boolean ifExists) {
+ SearchHistoryBeanDao.dropTable(db, ifExists);
+ }
+
+ /**
+ * WARNING: Drops all table on Upgrade! Use only during development.
+ * Convenience method using a {@link DevOpenHelper}.
+ */
+ public static DaoSession newDevSession(Context context, String name) {
+ Database db = new DevOpenHelper(context, name).getWritableDb();
+ DaoMaster daoMaster = new DaoMaster(db);
+ return daoMaster.newSession();
+ }
+
+ public DaoMaster(SQLiteDatabase db) {
+ this(new StandardDatabase(db));
+ }
+
+ public DaoMaster(Database db) {
+ super(db, SCHEMA_VERSION);
+ registerDaoClass(SearchHistoryBeanDao.class);
+ }
+
+ public DaoSession newSession() {
+ return new DaoSession(db, IdentityScopeType.Session, daoConfigMap);
+ }
+
+ public DaoSession newSession(IdentityScopeType type) {
+ return new DaoSession(db, type, daoConfigMap);
+ }
+
+ /**
+ * Calls {@link #createAllTables(Database, boolean)} in {@link #onCreate(Database)} -
+ */
+ public static abstract class OpenHelper extends DatabaseOpenHelper {
+ public OpenHelper(Context context, String name) {
+ super(context, name, SCHEMA_VERSION);
+ }
+
+ public OpenHelper(Context context, String name, CursorFactory factory) {
+ super(context, name, factory, SCHEMA_VERSION);
+ }
+
+ @Override
+ public void onCreate(Database db) {
+ Log.i("greenDAO", "Creating tables for schema version " + SCHEMA_VERSION);
+ createAllTables(db, false);
+ }
+ }
+
+ /** WARNING: Drops all table on Upgrade! Use only during development. */
+ public static class DevOpenHelper extends OpenHelper {
+ public DevOpenHelper(Context context, String name) {
+ super(context, name);
+ }
+
+ public DevOpenHelper(Context context, String name, CursorFactory factory) {
+ super(context, name, factory);
+ }
+
+ @Override
+ public void onUpgrade(Database db, int oldVersion, int newVersion) {
+ Log.i("greenDAO", "Upgrading schema from version " + oldVersion + " to " + newVersion + " by dropping all tables");
+ dropAllTables(db, true);
+ onCreate(db);
+ }
+ }
+
+}
diff --git a/app/build.gradle b/app/build.gradle
index 298f687..e142ec1 100644
--- a/app/build.gradle
+++ b/app/build.gradle
@@ -3,6 +3,7 @@
apply plugin: 'com.android.application'
apply plugin: 'kotlin-android'
apply plugin: 'kotlin-android-extensions'
+apply plugin: 'org.greenrobot.greendao'
android {
signingConfigs {
@@ -57,6 +58,12 @@
outputFileName = "XZJL_" + getBuildDate() + "_Beta.apk"
}
}
+
+ greendao {
+ schemaVersion 1//数据库版本号
+ targetGenDir 'src/main/java'//设置DaoMaster、DaoSession、Dao目录
+ daoPackage 'com.casic.xz.meterage.greendao'//设置DaoMaster、DaoSession、Dao包名
+ }
}
static def getBuildDate() {
@@ -67,7 +74,7 @@
dependencies {
//基础依赖库
implementation 'com.github.AndroidCoderPeng:Kotlin-lite-lib:1.0.4'
- implementation 'androidx.appcompat:appcompat:1.5.1'
+ implementation 'androidx.appcompat:appcompat:1.6.1'
implementation 'androidx.core:core-ktx:1.9.0'
//Google官方授权框架
implementation 'pub.devrel:easypermissions:3.0.0'
@@ -113,4 +120,6 @@
implementation 'com.github.tiann:FreeReflection:3.1.0'
//单项/数字、二三级联动、日期/时间等滚轮选择器
implementation 'com.github.gzu-liyujiang.AndroidPicker:WheelPicker:4.1.8'
+ //数据库框架
+ implementation 'org.greenrobot:greendao:3.3.0'
}
\ No newline at end of file
diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml
index 972eff9..5b6f9b2 100644
--- a/app/src/main/AndroidManifest.xml
+++ b/app/src/main/AndroidManifest.xml
@@ -69,6 +69,8 @@
+
+
diff --git a/app/src/main/java/com/casic/xz/meterage/base/BaseApplication.kt b/app/src/main/java/com/casic/xz/meterage/base/BaseApplication.kt
index 14a604d..1684c23 100644
--- a/app/src/main/java/com/casic/xz/meterage/base/BaseApplication.kt
+++ b/app/src/main/java/com/casic/xz/meterage/base/BaseApplication.kt
@@ -2,6 +2,8 @@
import android.app.Application
import android.content.Context
+import com.casic.xz.meterage.greendao.DaoMaster
+import com.casic.xz.meterage.greendao.DaoSession
import com.pengxh.kt.lite.utils.SaveKeyValues
import me.weishu.reflection.Reflection
import kotlin.properties.Delegates
@@ -12,12 +14,22 @@
private var application: BaseApplication by Delegates.notNull()
fun get() = application
+
+ private lateinit var daoSession: DaoSession
}
override fun onCreate() {
super.onCreate()
application = this
SaveKeyValues.initSharedPreferences(this)
+
+ val devOpenHelper = DaoMaster.DevOpenHelper(this, "Meterage.db", null)
+ val daoMaster = DaoMaster(devOpenHelper.writableDatabase)
+ daoSession = daoMaster.newSession()
+ }
+
+ fun getDaoSession(): DaoSession {
+ return daoSession
}
//绕过Android 11以上反射限制
diff --git a/app/src/main/java/com/casic/xz/meterage/bean/SearchHistoryBean.java b/app/src/main/java/com/casic/xz/meterage/bean/SearchHistoryBean.java
new file mode 100644
index 0000000..6a46a3a
--- /dev/null
+++ b/app/src/main/java/com/casic/xz/meterage/bean/SearchHistoryBean.java
@@ -0,0 +1,82 @@
+package com.casic.xz.meterage.bean;
+
+import org.greenrobot.greendao.annotation.Entity;
+import org.greenrobot.greendao.annotation.Generated;
+import org.greenrobot.greendao.annotation.Id;
+import org.greenrobot.greendao.annotation.Unique;
+
+@Entity
+public class SearchHistoryBean {
+ @Id(autoincrement = true)
+ private Long id;//主键自增
+
+ @Unique
+ private String uuid;
+ private String keywords;//查询条件-关键字
+ private String searchType;//查询类型
+ private String userId;//用户Id
+ private String searchTime;//查询的时间
+
+ @Generated(hash = 2130561778)
+ public SearchHistoryBean(Long id, String uuid, String keywords,
+ String searchType, String userId, String searchTime) {
+ this.id = id;
+ this.uuid = uuid;
+ this.keywords = keywords;
+ this.searchType = searchType;
+ this.userId = userId;
+ this.searchTime = searchTime;
+ }
+
+ @Generated(hash = 1570282321)
+ public SearchHistoryBean() {
+ }
+
+ public Long getId() {
+ return this.id;
+ }
+
+ public void setId(Long id) {
+ this.id = id;
+ }
+
+ public String getUuid() {
+ return this.uuid;
+ }
+
+ public void setUuid(String uuid) {
+ this.uuid = uuid;
+ }
+
+ public String getKeywords() {
+ return this.keywords;
+ }
+
+ public void setKeywords(String keywords) {
+ this.keywords = keywords;
+ }
+
+ public String getSearchType() {
+ return this.searchType;
+ }
+
+ public void setSearchType(String searchType) {
+ this.searchType = searchType;
+ }
+
+ public String getUserId() {
+ return this.userId;
+ }
+
+ public void setUserId(String userId) {
+ this.userId = userId;
+ }
+
+ public String getSearchTime() {
+ return this.searchTime;
+ }
+
+ public void setSearchTime(String searchTime) {
+ this.searchTime = searchTime;
+ }
+}
diff --git a/app/src/main/java/com/casic/xz/meterage/fragment/HomePageFragment.kt b/app/src/main/java/com/casic/xz/meterage/fragment/HomePageFragment.kt
index 151f951..ae7f5e4 100644
--- a/app/src/main/java/com/casic/xz/meterage/fragment/HomePageFragment.kt
+++ b/app/src/main/java/com/casic/xz/meterage/fragment/HomePageFragment.kt
@@ -15,22 +15,20 @@
import com.casic.xz.meterage.extensions.showEmptyPage
import com.casic.xz.meterage.model.NoticeListModel
import com.casic.xz.meterage.model.RemindListModel
-import com.casic.xz.meterage.model.UserInfoModel
import com.casic.xz.meterage.utils.LoadingDialogHub
import com.casic.xz.meterage.utils.LocaleConstant
import com.casic.xz.meterage.utils.QrConfigCreator
import com.casic.xz.meterage.view.home.*
import com.casic.xz.meterage.view.notice.NoticeListActivity
+import com.casic.xz.meterage.view.search.SearchAllActivity
import com.casic.xz.meterage.vm.MeterageTrainViewModel
import com.casic.xz.meterage.vm.NoticeViewModel
-import com.casic.xz.meterage.vm.UserViewModel
import com.pengxh.kt.lite.adapter.NormalRecyclerAdapter
import com.pengxh.kt.lite.adapter.ViewHolder
import com.pengxh.kt.lite.base.KotlinBaseFragment
import com.pengxh.kt.lite.extensions.convertColor
import com.pengxh.kt.lite.extensions.navigatePageTo
import com.pengxh.kt.lite.extensions.show
-import com.pengxh.kt.lite.utils.SaveKeyValues
import com.pengxh.kt.lite.utils.WeakReferenceHandler
import com.pengxh.kt.lite.vm.LoadState
import com.pengxh.kt.lite.widget.dialog.AlertControlDialog
@@ -39,13 +37,12 @@
import kotlinx.android.synthetic.main.include_empty_view.*
import java.util.*
-class HomePageFragment : KotlinBaseFragment() {
+class HomePageFragment(private val userId: String) : KotlinBaseFragment() {
private val timer = object : Timer() {}
private lateinit var weakReferenceHandler: WeakReferenceHandler
private lateinit var meterageTrainViewModel: MeterageTrainViewModel
private lateinit var noticeViewModel: NoticeViewModel
- private lateinit var userData: UserInfoModel.DataModel
private lateinit var remindAdapter: NormalRecyclerAdapter
private var dataBeans: MutableList = ArrayList()
private var noticeBeans: MutableList = ArrayList()
@@ -170,14 +167,6 @@
true
}
- val userViewModel = ViewModelProvider(this)[UserViewModel::class.java]
- userViewModel.getUserInfo(SaveKeyValues.getValue(LocaleConstant.ACCOUNT, "") as String)
- userViewModel.userInfo.observe(this) {
- if (it.code == 200) {
- userData = it.data
- }
- }
-
meterageTrainViewModel = ViewModelProvider(this)[MeterageTrainViewModel::class.java]
meterageTrainViewModel.signInResult.observe(this) {
if (it.code == 200) {
@@ -296,10 +285,14 @@
}
override fun initEvent() {
+ searchBar.setOnClickListener {
+ requireContext().navigatePageTo()
+ }
+
scanCodeView.setOnClickListener {
qrManager.startScan(requireActivity()) { result ->
if (result.content.isDigitsOnly()) {
- meterageTrainViewModel.signIn(userData.id, result.content)
+ meterageTrainViewModel.signIn(userId, result.content)
} else {
"签到二维码错误,请重新扫描".show(requireContext())
}
diff --git a/app/src/main/java/com/casic/xz/meterage/greendao/DaoMaster.java b/app/src/main/java/com/casic/xz/meterage/greendao/DaoMaster.java
new file mode 100644
index 0000000..d714ce2
--- /dev/null
+++ b/app/src/main/java/com/casic/xz/meterage/greendao/DaoMaster.java
@@ -0,0 +1,96 @@
+package com.casic.xz.meterage.greendao;
+
+import android.content.Context;
+import android.database.sqlite.SQLiteDatabase;
+import android.database.sqlite.SQLiteDatabase.CursorFactory;
+import android.util.Log;
+
+import org.greenrobot.greendao.AbstractDaoMaster;
+import org.greenrobot.greendao.database.Database;
+import org.greenrobot.greendao.database.DatabaseOpenHelper;
+import org.greenrobot.greendao.database.StandardDatabase;
+import org.greenrobot.greendao.identityscope.IdentityScopeType;
+
+
+// THIS CODE IS GENERATED BY greenDAO, DO NOT EDIT.
+/**
+ * Master of DAO (schema version 1): knows all DAOs.
+ */
+public class DaoMaster extends AbstractDaoMaster {
+ public static final int SCHEMA_VERSION = 1;
+
+ /** Creates underlying database table using DAOs. */
+ public static void createAllTables(Database db, boolean ifNotExists) {
+ SearchHistoryBeanDao.createTable(db, ifNotExists);
+ }
+
+ /** Drops underlying database table using DAOs. */
+ public static void dropAllTables(Database db, boolean ifExists) {
+ SearchHistoryBeanDao.dropTable(db, ifExists);
+ }
+
+ /**
+ * WARNING: Drops all table on Upgrade! Use only during development.
+ * Convenience method using a {@link DevOpenHelper}.
+ */
+ public static DaoSession newDevSession(Context context, String name) {
+ Database db = new DevOpenHelper(context, name).getWritableDb();
+ DaoMaster daoMaster = new DaoMaster(db);
+ return daoMaster.newSession();
+ }
+
+ public DaoMaster(SQLiteDatabase db) {
+ this(new StandardDatabase(db));
+ }
+
+ public DaoMaster(Database db) {
+ super(db, SCHEMA_VERSION);
+ registerDaoClass(SearchHistoryBeanDao.class);
+ }
+
+ public DaoSession newSession() {
+ return new DaoSession(db, IdentityScopeType.Session, daoConfigMap);
+ }
+
+ public DaoSession newSession(IdentityScopeType type) {
+ return new DaoSession(db, type, daoConfigMap);
+ }
+
+ /**
+ * Calls {@link #createAllTables(Database, boolean)} in {@link #onCreate(Database)} -
+ */
+ public static abstract class OpenHelper extends DatabaseOpenHelper {
+ public OpenHelper(Context context, String name) {
+ super(context, name, SCHEMA_VERSION);
+ }
+
+ public OpenHelper(Context context, String name, CursorFactory factory) {
+ super(context, name, factory, SCHEMA_VERSION);
+ }
+
+ @Override
+ public void onCreate(Database db) {
+ Log.i("greenDAO", "Creating tables for schema version " + SCHEMA_VERSION);
+ createAllTables(db, false);
+ }
+ }
+
+ /** WARNING: Drops all table on Upgrade! Use only during development. */
+ public static class DevOpenHelper extends OpenHelper {
+ public DevOpenHelper(Context context, String name) {
+ super(context, name);
+ }
+
+ public DevOpenHelper(Context context, String name, CursorFactory factory) {
+ super(context, name, factory);
+ }
+
+ @Override
+ public void onUpgrade(Database db, int oldVersion, int newVersion) {
+ Log.i("greenDAO", "Upgrading schema from version " + oldVersion + " to " + newVersion + " by dropping all tables");
+ dropAllTables(db, true);
+ onCreate(db);
+ }
+ }
+
+}
diff --git a/app/src/main/java/com/casic/xz/meterage/greendao/DaoSession.java b/app/src/main/java/com/casic/xz/meterage/greendao/DaoSession.java
new file mode 100644
index 0000000..0e80024
--- /dev/null
+++ b/app/src/main/java/com/casic/xz/meterage/greendao/DaoSession.java
@@ -0,0 +1,46 @@
+package com.casic.xz.meterage.greendao;
+
+import com.casic.xz.meterage.bean.SearchHistoryBean;
+
+import org.greenrobot.greendao.AbstractDao;
+import org.greenrobot.greendao.AbstractDaoSession;
+import org.greenrobot.greendao.database.Database;
+import org.greenrobot.greendao.identityscope.IdentityScopeType;
+import org.greenrobot.greendao.internal.DaoConfig;
+
+import java.util.Map;
+
+// THIS CODE IS GENERATED BY greenDAO, DO NOT EDIT.
+
+/**
+ * {@inheritDoc}
+ *
+ * @see org.greenrobot.greendao.AbstractDaoSession
+ */
+public class DaoSession extends AbstractDaoSession {
+
+ private final DaoConfig searchHistoryBeanDaoConfig;
+
+ private final SearchHistoryBeanDao searchHistoryBeanDao;
+
+ public DaoSession(Database db, IdentityScopeType type, Map>, DaoConfig>
+ daoConfigMap) {
+ super(db);
+
+ searchHistoryBeanDaoConfig = daoConfigMap.get(SearchHistoryBeanDao.class).clone();
+ searchHistoryBeanDaoConfig.initIdentityScope(type);
+
+ searchHistoryBeanDao = new SearchHistoryBeanDao(searchHistoryBeanDaoConfig, this);
+
+ registerDao(SearchHistoryBean.class, searchHistoryBeanDao);
+ }
+
+ public void clear() {
+ searchHistoryBeanDaoConfig.clearIdentityScope();
+ }
+
+ public SearchHistoryBeanDao getSearchHistoryBeanDao() {
+ return searchHistoryBeanDao;
+ }
+
+}
diff --git a/app/build.gradle b/app/build.gradle
index 298f687..e142ec1 100644
--- a/app/build.gradle
+++ b/app/build.gradle
@@ -3,6 +3,7 @@
apply plugin: 'com.android.application'
apply plugin: 'kotlin-android'
apply plugin: 'kotlin-android-extensions'
+apply plugin: 'org.greenrobot.greendao'
android {
signingConfigs {
@@ -57,6 +58,12 @@
outputFileName = "XZJL_" + getBuildDate() + "_Beta.apk"
}
}
+
+ greendao {
+ schemaVersion 1//数据库版本号
+ targetGenDir 'src/main/java'//设置DaoMaster、DaoSession、Dao目录
+ daoPackage 'com.casic.xz.meterage.greendao'//设置DaoMaster、DaoSession、Dao包名
+ }
}
static def getBuildDate() {
@@ -67,7 +74,7 @@
dependencies {
//基础依赖库
implementation 'com.github.AndroidCoderPeng:Kotlin-lite-lib:1.0.4'
- implementation 'androidx.appcompat:appcompat:1.5.1'
+ implementation 'androidx.appcompat:appcompat:1.6.1'
implementation 'androidx.core:core-ktx:1.9.0'
//Google官方授权框架
implementation 'pub.devrel:easypermissions:3.0.0'
@@ -113,4 +120,6 @@
implementation 'com.github.tiann:FreeReflection:3.1.0'
//单项/数字、二三级联动、日期/时间等滚轮选择器
implementation 'com.github.gzu-liyujiang.AndroidPicker:WheelPicker:4.1.8'
+ //数据库框架
+ implementation 'org.greenrobot:greendao:3.3.0'
}
\ No newline at end of file
diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml
index 972eff9..5b6f9b2 100644
--- a/app/src/main/AndroidManifest.xml
+++ b/app/src/main/AndroidManifest.xml
@@ -69,6 +69,8 @@
+
+
diff --git a/app/src/main/java/com/casic/xz/meterage/base/BaseApplication.kt b/app/src/main/java/com/casic/xz/meterage/base/BaseApplication.kt
index 14a604d..1684c23 100644
--- a/app/src/main/java/com/casic/xz/meterage/base/BaseApplication.kt
+++ b/app/src/main/java/com/casic/xz/meterage/base/BaseApplication.kt
@@ -2,6 +2,8 @@
import android.app.Application
import android.content.Context
+import com.casic.xz.meterage.greendao.DaoMaster
+import com.casic.xz.meterage.greendao.DaoSession
import com.pengxh.kt.lite.utils.SaveKeyValues
import me.weishu.reflection.Reflection
import kotlin.properties.Delegates
@@ -12,12 +14,22 @@
private var application: BaseApplication by Delegates.notNull()
fun get() = application
+
+ private lateinit var daoSession: DaoSession
}
override fun onCreate() {
super.onCreate()
application = this
SaveKeyValues.initSharedPreferences(this)
+
+ val devOpenHelper = DaoMaster.DevOpenHelper(this, "Meterage.db", null)
+ val daoMaster = DaoMaster(devOpenHelper.writableDatabase)
+ daoSession = daoMaster.newSession()
+ }
+
+ fun getDaoSession(): DaoSession {
+ return daoSession
}
//绕过Android 11以上反射限制
diff --git a/app/src/main/java/com/casic/xz/meterage/bean/SearchHistoryBean.java b/app/src/main/java/com/casic/xz/meterage/bean/SearchHistoryBean.java
new file mode 100644
index 0000000..6a46a3a
--- /dev/null
+++ b/app/src/main/java/com/casic/xz/meterage/bean/SearchHistoryBean.java
@@ -0,0 +1,82 @@
+package com.casic.xz.meterage.bean;
+
+import org.greenrobot.greendao.annotation.Entity;
+import org.greenrobot.greendao.annotation.Generated;
+import org.greenrobot.greendao.annotation.Id;
+import org.greenrobot.greendao.annotation.Unique;
+
+@Entity
+public class SearchHistoryBean {
+ @Id(autoincrement = true)
+ private Long id;//主键自增
+
+ @Unique
+ private String uuid;
+ private String keywords;//查询条件-关键字
+ private String searchType;//查询类型
+ private String userId;//用户Id
+ private String searchTime;//查询的时间
+
+ @Generated(hash = 2130561778)
+ public SearchHistoryBean(Long id, String uuid, String keywords,
+ String searchType, String userId, String searchTime) {
+ this.id = id;
+ this.uuid = uuid;
+ this.keywords = keywords;
+ this.searchType = searchType;
+ this.userId = userId;
+ this.searchTime = searchTime;
+ }
+
+ @Generated(hash = 1570282321)
+ public SearchHistoryBean() {
+ }
+
+ public Long getId() {
+ return this.id;
+ }
+
+ public void setId(Long id) {
+ this.id = id;
+ }
+
+ public String getUuid() {
+ return this.uuid;
+ }
+
+ public void setUuid(String uuid) {
+ this.uuid = uuid;
+ }
+
+ public String getKeywords() {
+ return this.keywords;
+ }
+
+ public void setKeywords(String keywords) {
+ this.keywords = keywords;
+ }
+
+ public String getSearchType() {
+ return this.searchType;
+ }
+
+ public void setSearchType(String searchType) {
+ this.searchType = searchType;
+ }
+
+ public String getUserId() {
+ return this.userId;
+ }
+
+ public void setUserId(String userId) {
+ this.userId = userId;
+ }
+
+ public String getSearchTime() {
+ return this.searchTime;
+ }
+
+ public void setSearchTime(String searchTime) {
+ this.searchTime = searchTime;
+ }
+}
diff --git a/app/src/main/java/com/casic/xz/meterage/fragment/HomePageFragment.kt b/app/src/main/java/com/casic/xz/meterage/fragment/HomePageFragment.kt
index 151f951..ae7f5e4 100644
--- a/app/src/main/java/com/casic/xz/meterage/fragment/HomePageFragment.kt
+++ b/app/src/main/java/com/casic/xz/meterage/fragment/HomePageFragment.kt
@@ -15,22 +15,20 @@
import com.casic.xz.meterage.extensions.showEmptyPage
import com.casic.xz.meterage.model.NoticeListModel
import com.casic.xz.meterage.model.RemindListModel
-import com.casic.xz.meterage.model.UserInfoModel
import com.casic.xz.meterage.utils.LoadingDialogHub
import com.casic.xz.meterage.utils.LocaleConstant
import com.casic.xz.meterage.utils.QrConfigCreator
import com.casic.xz.meterage.view.home.*
import com.casic.xz.meterage.view.notice.NoticeListActivity
+import com.casic.xz.meterage.view.search.SearchAllActivity
import com.casic.xz.meterage.vm.MeterageTrainViewModel
import com.casic.xz.meterage.vm.NoticeViewModel
-import com.casic.xz.meterage.vm.UserViewModel
import com.pengxh.kt.lite.adapter.NormalRecyclerAdapter
import com.pengxh.kt.lite.adapter.ViewHolder
import com.pengxh.kt.lite.base.KotlinBaseFragment
import com.pengxh.kt.lite.extensions.convertColor
import com.pengxh.kt.lite.extensions.navigatePageTo
import com.pengxh.kt.lite.extensions.show
-import com.pengxh.kt.lite.utils.SaveKeyValues
import com.pengxh.kt.lite.utils.WeakReferenceHandler
import com.pengxh.kt.lite.vm.LoadState
import com.pengxh.kt.lite.widget.dialog.AlertControlDialog
@@ -39,13 +37,12 @@
import kotlinx.android.synthetic.main.include_empty_view.*
import java.util.*
-class HomePageFragment : KotlinBaseFragment() {
+class HomePageFragment(private val userId: String) : KotlinBaseFragment() {
private val timer = object : Timer() {}
private lateinit var weakReferenceHandler: WeakReferenceHandler
private lateinit var meterageTrainViewModel: MeterageTrainViewModel
private lateinit var noticeViewModel: NoticeViewModel
- private lateinit var userData: UserInfoModel.DataModel
private lateinit var remindAdapter: NormalRecyclerAdapter
private var dataBeans: MutableList = ArrayList()
private var noticeBeans: MutableList = ArrayList()
@@ -170,14 +167,6 @@
true
}
- val userViewModel = ViewModelProvider(this)[UserViewModel::class.java]
- userViewModel.getUserInfo(SaveKeyValues.getValue(LocaleConstant.ACCOUNT, "") as String)
- userViewModel.userInfo.observe(this) {
- if (it.code == 200) {
- userData = it.data
- }
- }
-
meterageTrainViewModel = ViewModelProvider(this)[MeterageTrainViewModel::class.java]
meterageTrainViewModel.signInResult.observe(this) {
if (it.code == 200) {
@@ -296,10 +285,14 @@
}
override fun initEvent() {
+ searchBar.setOnClickListener {
+ requireContext().navigatePageTo()
+ }
+
scanCodeView.setOnClickListener {
qrManager.startScan(requireActivity()) { result ->
if (result.content.isDigitsOnly()) {
- meterageTrainViewModel.signIn(userData.id, result.content)
+ meterageTrainViewModel.signIn(userId, result.content)
} else {
"签到二维码错误,请重新扫描".show(requireContext())
}
diff --git a/app/src/main/java/com/casic/xz/meterage/greendao/DaoMaster.java b/app/src/main/java/com/casic/xz/meterage/greendao/DaoMaster.java
new file mode 100644
index 0000000..d714ce2
--- /dev/null
+++ b/app/src/main/java/com/casic/xz/meterage/greendao/DaoMaster.java
@@ -0,0 +1,96 @@
+package com.casic.xz.meterage.greendao;
+
+import android.content.Context;
+import android.database.sqlite.SQLiteDatabase;
+import android.database.sqlite.SQLiteDatabase.CursorFactory;
+import android.util.Log;
+
+import org.greenrobot.greendao.AbstractDaoMaster;
+import org.greenrobot.greendao.database.Database;
+import org.greenrobot.greendao.database.DatabaseOpenHelper;
+import org.greenrobot.greendao.database.StandardDatabase;
+import org.greenrobot.greendao.identityscope.IdentityScopeType;
+
+
+// THIS CODE IS GENERATED BY greenDAO, DO NOT EDIT.
+/**
+ * Master of DAO (schema version 1): knows all DAOs.
+ */
+public class DaoMaster extends AbstractDaoMaster {
+ public static final int SCHEMA_VERSION = 1;
+
+ /** Creates underlying database table using DAOs. */
+ public static void createAllTables(Database db, boolean ifNotExists) {
+ SearchHistoryBeanDao.createTable(db, ifNotExists);
+ }
+
+ /** Drops underlying database table using DAOs. */
+ public static void dropAllTables(Database db, boolean ifExists) {
+ SearchHistoryBeanDao.dropTable(db, ifExists);
+ }
+
+ /**
+ * WARNING: Drops all table on Upgrade! Use only during development.
+ * Convenience method using a {@link DevOpenHelper}.
+ */
+ public static DaoSession newDevSession(Context context, String name) {
+ Database db = new DevOpenHelper(context, name).getWritableDb();
+ DaoMaster daoMaster = new DaoMaster(db);
+ return daoMaster.newSession();
+ }
+
+ public DaoMaster(SQLiteDatabase db) {
+ this(new StandardDatabase(db));
+ }
+
+ public DaoMaster(Database db) {
+ super(db, SCHEMA_VERSION);
+ registerDaoClass(SearchHistoryBeanDao.class);
+ }
+
+ public DaoSession newSession() {
+ return new DaoSession(db, IdentityScopeType.Session, daoConfigMap);
+ }
+
+ public DaoSession newSession(IdentityScopeType type) {
+ return new DaoSession(db, type, daoConfigMap);
+ }
+
+ /**
+ * Calls {@link #createAllTables(Database, boolean)} in {@link #onCreate(Database)} -
+ */
+ public static abstract class OpenHelper extends DatabaseOpenHelper {
+ public OpenHelper(Context context, String name) {
+ super(context, name, SCHEMA_VERSION);
+ }
+
+ public OpenHelper(Context context, String name, CursorFactory factory) {
+ super(context, name, factory, SCHEMA_VERSION);
+ }
+
+ @Override
+ public void onCreate(Database db) {
+ Log.i("greenDAO", "Creating tables for schema version " + SCHEMA_VERSION);
+ createAllTables(db, false);
+ }
+ }
+
+ /** WARNING: Drops all table on Upgrade! Use only during development. */
+ public static class DevOpenHelper extends OpenHelper {
+ public DevOpenHelper(Context context, String name) {
+ super(context, name);
+ }
+
+ public DevOpenHelper(Context context, String name, CursorFactory factory) {
+ super(context, name, factory);
+ }
+
+ @Override
+ public void onUpgrade(Database db, int oldVersion, int newVersion) {
+ Log.i("greenDAO", "Upgrading schema from version " + oldVersion + " to " + newVersion + " by dropping all tables");
+ dropAllTables(db, true);
+ onCreate(db);
+ }
+ }
+
+}
diff --git a/app/src/main/java/com/casic/xz/meterage/greendao/DaoSession.java b/app/src/main/java/com/casic/xz/meterage/greendao/DaoSession.java
new file mode 100644
index 0000000..0e80024
--- /dev/null
+++ b/app/src/main/java/com/casic/xz/meterage/greendao/DaoSession.java
@@ -0,0 +1,46 @@
+package com.casic.xz.meterage.greendao;
+
+import com.casic.xz.meterage.bean.SearchHistoryBean;
+
+import org.greenrobot.greendao.AbstractDao;
+import org.greenrobot.greendao.AbstractDaoSession;
+import org.greenrobot.greendao.database.Database;
+import org.greenrobot.greendao.identityscope.IdentityScopeType;
+import org.greenrobot.greendao.internal.DaoConfig;
+
+import java.util.Map;
+
+// THIS CODE IS GENERATED BY greenDAO, DO NOT EDIT.
+
+/**
+ * {@inheritDoc}
+ *
+ * @see org.greenrobot.greendao.AbstractDaoSession
+ */
+public class DaoSession extends AbstractDaoSession {
+
+ private final DaoConfig searchHistoryBeanDaoConfig;
+
+ private final SearchHistoryBeanDao searchHistoryBeanDao;
+
+ public DaoSession(Database db, IdentityScopeType type, Map>, DaoConfig>
+ daoConfigMap) {
+ super(db);
+
+ searchHistoryBeanDaoConfig = daoConfigMap.get(SearchHistoryBeanDao.class).clone();
+ searchHistoryBeanDaoConfig.initIdentityScope(type);
+
+ searchHistoryBeanDao = new SearchHistoryBeanDao(searchHistoryBeanDaoConfig, this);
+
+ registerDao(SearchHistoryBean.class, searchHistoryBeanDao);
+ }
+
+ public void clear() {
+ searchHistoryBeanDaoConfig.clearIdentityScope();
+ }
+
+ public SearchHistoryBeanDao getSearchHistoryBeanDao() {
+ return searchHistoryBeanDao;
+ }
+
+}
diff --git a/app/src/main/java/com/casic/xz/meterage/greendao/SearchHistoryBeanDao.java b/app/src/main/java/com/casic/xz/meterage/greendao/SearchHistoryBeanDao.java
new file mode 100644
index 0000000..5923d02
--- /dev/null
+++ b/app/src/main/java/com/casic/xz/meterage/greendao/SearchHistoryBeanDao.java
@@ -0,0 +1,185 @@
+package com.casic.xz.meterage.greendao;
+
+import android.database.Cursor;
+import android.database.sqlite.SQLiteStatement;
+
+import com.casic.xz.meterage.bean.SearchHistoryBean;
+
+import org.greenrobot.greendao.AbstractDao;
+import org.greenrobot.greendao.Property;
+import org.greenrobot.greendao.database.Database;
+import org.greenrobot.greendao.database.DatabaseStatement;
+import org.greenrobot.greendao.internal.DaoConfig;
+
+// THIS CODE IS GENERATED BY greenDAO, DO NOT EDIT.
+/**
+ * DAO for table "SEARCH_HISTORY_BEAN".
+*/
+public class SearchHistoryBeanDao extends AbstractDao {
+
+ public static final String TABLENAME = "SEARCH_HISTORY_BEAN";
+
+ /**
+ * Properties of entity SearchHistoryBean.
+ * Can be used for QueryBuilder and for referencing column names.
+ */
+ public static class Properties {
+ public final static Property Id = new Property(0, Long.class, "id", true, "_id");
+ public final static Property Uuid = new Property(1, String.class, "uuid", false, "UUID");
+ public final static Property Keywords = new Property(2, String.class, "keywords", false, "KEYWORDS");
+ public final static Property SearchType = new Property(3, String.class, "searchType", false, "SEARCH_TYPE");
+ public final static Property UserId = new Property(4, String.class, "userId", false, "USER_ID");
+ public final static Property SearchTime = new Property(5, String.class, "searchTime", false, "SEARCH_TIME");
+ }
+
+
+ public SearchHistoryBeanDao(DaoConfig config) {
+ super(config);
+ }
+
+ public SearchHistoryBeanDao(DaoConfig config, DaoSession daoSession) {
+ super(config, daoSession);
+ }
+
+ /** Creates the underlying database table. */
+ public static void createTable(Database db, boolean ifNotExists) {
+ String constraint = ifNotExists? "IF NOT EXISTS ": "";
+ db.execSQL("CREATE TABLE " + constraint + "\"SEARCH_HISTORY_BEAN\" (" + //
+ "\"_id\" INTEGER PRIMARY KEY AUTOINCREMENT ," + // 0: id
+ "\"UUID\" TEXT UNIQUE ," + // 1: uuid
+ "\"KEYWORDS\" TEXT," + // 2: keywords
+ "\"SEARCH_TYPE\" TEXT," + // 3: searchType
+ "\"USER_ID\" TEXT," + // 4: userId
+ "\"SEARCH_TIME\" TEXT);"); // 5: searchTime
+ }
+
+ /** Drops the underlying database table. */
+ public static void dropTable(Database db, boolean ifExists) {
+ String sql = "DROP TABLE " + (ifExists ? "IF EXISTS " : "") + "\"SEARCH_HISTORY_BEAN\"";
+ db.execSQL(sql);
+ }
+
+ @Override
+ protected final void bindValues(DatabaseStatement stmt, SearchHistoryBean entity) {
+ stmt.clearBindings();
+
+ Long id = entity.getId();
+ if (id != null) {
+ stmt.bindLong(1, id);
+ }
+
+ String uuid = entity.getUuid();
+ if (uuid != null) {
+ stmt.bindString(2, uuid);
+ }
+
+ String keywords = entity.getKeywords();
+ if (keywords != null) {
+ stmt.bindString(3, keywords);
+ }
+
+ String searchType = entity.getSearchType();
+ if (searchType != null) {
+ stmt.bindString(4, searchType);
+ }
+
+ String userId = entity.getUserId();
+ if (userId != null) {
+ stmt.bindString(5, userId);
+ }
+
+ String searchTime = entity.getSearchTime();
+ if (searchTime != null) {
+ stmt.bindString(6, searchTime);
+ }
+ }
+
+ @Override
+ protected final void bindValues(SQLiteStatement stmt, SearchHistoryBean entity) {
+ stmt.clearBindings();
+
+ Long id = entity.getId();
+ if (id != null) {
+ stmt.bindLong(1, id);
+ }
+
+ String uuid = entity.getUuid();
+ if (uuid != null) {
+ stmt.bindString(2, uuid);
+ }
+
+ String keywords = entity.getKeywords();
+ if (keywords != null) {
+ stmt.bindString(3, keywords);
+ }
+
+ String searchType = entity.getSearchType();
+ if (searchType != null) {
+ stmt.bindString(4, searchType);
+ }
+
+ String userId = entity.getUserId();
+ if (userId != null) {
+ stmt.bindString(5, userId);
+ }
+
+ String searchTime = entity.getSearchTime();
+ if (searchTime != null) {
+ stmt.bindString(6, searchTime);
+ }
+ }
+
+ @Override
+ public Long readKey(Cursor cursor, int offset) {
+ return cursor.isNull(offset + 0) ? null : cursor.getLong(offset + 0);
+ }
+
+ @Override
+ public SearchHistoryBean readEntity(Cursor cursor, int offset) {
+ SearchHistoryBean entity = new SearchHistoryBean( //
+ cursor.isNull(offset + 0) ? null : cursor.getLong(offset + 0), // id
+ cursor.isNull(offset + 1) ? null : cursor.getString(offset + 1), // uuid
+ cursor.isNull(offset + 2) ? null : cursor.getString(offset + 2), // keywords
+ cursor.isNull(offset + 3) ? null : cursor.getString(offset + 3), // searchType
+ cursor.isNull(offset + 4) ? null : cursor.getString(offset + 4), // userId
+ cursor.isNull(offset + 5) ? null : cursor.getString(offset + 5) // searchTime
+ );
+ return entity;
+ }
+
+ @Override
+ public void readEntity(Cursor cursor, SearchHistoryBean entity, int offset) {
+ entity.setId(cursor.isNull(offset + 0) ? null : cursor.getLong(offset + 0));
+ entity.setUuid(cursor.isNull(offset + 1) ? null : cursor.getString(offset + 1));
+ entity.setKeywords(cursor.isNull(offset + 2) ? null : cursor.getString(offset + 2));
+ entity.setSearchType(cursor.isNull(offset + 3) ? null : cursor.getString(offset + 3));
+ entity.setUserId(cursor.isNull(offset + 4) ? null : cursor.getString(offset + 4));
+ entity.setSearchTime(cursor.isNull(offset + 5) ? null : cursor.getString(offset + 5));
+ }
+
+ @Override
+ protected final Long updateKeyAfterInsert(SearchHistoryBean entity, long rowId) {
+ entity.setId(rowId);
+ return rowId;
+ }
+
+ @Override
+ public Long getKey(SearchHistoryBean entity) {
+ if(entity != null) {
+ return entity.getId();
+ } else {
+ return null;
+ }
+ }
+
+ @Override
+ public boolean hasKey(SearchHistoryBean entity) {
+ return entity.getId() != null;
+ }
+
+ @Override
+ protected final boolean isEntityUpdateable() {
+ return true;
+ }
+
+}
diff --git a/app/build.gradle b/app/build.gradle
index 298f687..e142ec1 100644
--- a/app/build.gradle
+++ b/app/build.gradle
@@ -3,6 +3,7 @@
apply plugin: 'com.android.application'
apply plugin: 'kotlin-android'
apply plugin: 'kotlin-android-extensions'
+apply plugin: 'org.greenrobot.greendao'
android {
signingConfigs {
@@ -57,6 +58,12 @@
outputFileName = "XZJL_" + getBuildDate() + "_Beta.apk"
}
}
+
+ greendao {
+ schemaVersion 1//数据库版本号
+ targetGenDir 'src/main/java'//设置DaoMaster、DaoSession、Dao目录
+ daoPackage 'com.casic.xz.meterage.greendao'//设置DaoMaster、DaoSession、Dao包名
+ }
}
static def getBuildDate() {
@@ -67,7 +74,7 @@
dependencies {
//基础依赖库
implementation 'com.github.AndroidCoderPeng:Kotlin-lite-lib:1.0.4'
- implementation 'androidx.appcompat:appcompat:1.5.1'
+ implementation 'androidx.appcompat:appcompat:1.6.1'
implementation 'androidx.core:core-ktx:1.9.0'
//Google官方授权框架
implementation 'pub.devrel:easypermissions:3.0.0'
@@ -113,4 +120,6 @@
implementation 'com.github.tiann:FreeReflection:3.1.0'
//单项/数字、二三级联动、日期/时间等滚轮选择器
implementation 'com.github.gzu-liyujiang.AndroidPicker:WheelPicker:4.1.8'
+ //数据库框架
+ implementation 'org.greenrobot:greendao:3.3.0'
}
\ No newline at end of file
diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml
index 972eff9..5b6f9b2 100644
--- a/app/src/main/AndroidManifest.xml
+++ b/app/src/main/AndroidManifest.xml
@@ -69,6 +69,8 @@
+
+
diff --git a/app/src/main/java/com/casic/xz/meterage/base/BaseApplication.kt b/app/src/main/java/com/casic/xz/meterage/base/BaseApplication.kt
index 14a604d..1684c23 100644
--- a/app/src/main/java/com/casic/xz/meterage/base/BaseApplication.kt
+++ b/app/src/main/java/com/casic/xz/meterage/base/BaseApplication.kt
@@ -2,6 +2,8 @@
import android.app.Application
import android.content.Context
+import com.casic.xz.meterage.greendao.DaoMaster
+import com.casic.xz.meterage.greendao.DaoSession
import com.pengxh.kt.lite.utils.SaveKeyValues
import me.weishu.reflection.Reflection
import kotlin.properties.Delegates
@@ -12,12 +14,22 @@
private var application: BaseApplication by Delegates.notNull()
fun get() = application
+
+ private lateinit var daoSession: DaoSession
}
override fun onCreate() {
super.onCreate()
application = this
SaveKeyValues.initSharedPreferences(this)
+
+ val devOpenHelper = DaoMaster.DevOpenHelper(this, "Meterage.db", null)
+ val daoMaster = DaoMaster(devOpenHelper.writableDatabase)
+ daoSession = daoMaster.newSession()
+ }
+
+ fun getDaoSession(): DaoSession {
+ return daoSession
}
//绕过Android 11以上反射限制
diff --git a/app/src/main/java/com/casic/xz/meterage/bean/SearchHistoryBean.java b/app/src/main/java/com/casic/xz/meterage/bean/SearchHistoryBean.java
new file mode 100644
index 0000000..6a46a3a
--- /dev/null
+++ b/app/src/main/java/com/casic/xz/meterage/bean/SearchHistoryBean.java
@@ -0,0 +1,82 @@
+package com.casic.xz.meterage.bean;
+
+import org.greenrobot.greendao.annotation.Entity;
+import org.greenrobot.greendao.annotation.Generated;
+import org.greenrobot.greendao.annotation.Id;
+import org.greenrobot.greendao.annotation.Unique;
+
+@Entity
+public class SearchHistoryBean {
+ @Id(autoincrement = true)
+ private Long id;//主键自增
+
+ @Unique
+ private String uuid;
+ private String keywords;//查询条件-关键字
+ private String searchType;//查询类型
+ private String userId;//用户Id
+ private String searchTime;//查询的时间
+
+ @Generated(hash = 2130561778)
+ public SearchHistoryBean(Long id, String uuid, String keywords,
+ String searchType, String userId, String searchTime) {
+ this.id = id;
+ this.uuid = uuid;
+ this.keywords = keywords;
+ this.searchType = searchType;
+ this.userId = userId;
+ this.searchTime = searchTime;
+ }
+
+ @Generated(hash = 1570282321)
+ public SearchHistoryBean() {
+ }
+
+ public Long getId() {
+ return this.id;
+ }
+
+ public void setId(Long id) {
+ this.id = id;
+ }
+
+ public String getUuid() {
+ return this.uuid;
+ }
+
+ public void setUuid(String uuid) {
+ this.uuid = uuid;
+ }
+
+ public String getKeywords() {
+ return this.keywords;
+ }
+
+ public void setKeywords(String keywords) {
+ this.keywords = keywords;
+ }
+
+ public String getSearchType() {
+ return this.searchType;
+ }
+
+ public void setSearchType(String searchType) {
+ this.searchType = searchType;
+ }
+
+ public String getUserId() {
+ return this.userId;
+ }
+
+ public void setUserId(String userId) {
+ this.userId = userId;
+ }
+
+ public String getSearchTime() {
+ return this.searchTime;
+ }
+
+ public void setSearchTime(String searchTime) {
+ this.searchTime = searchTime;
+ }
+}
diff --git a/app/src/main/java/com/casic/xz/meterage/fragment/HomePageFragment.kt b/app/src/main/java/com/casic/xz/meterage/fragment/HomePageFragment.kt
index 151f951..ae7f5e4 100644
--- a/app/src/main/java/com/casic/xz/meterage/fragment/HomePageFragment.kt
+++ b/app/src/main/java/com/casic/xz/meterage/fragment/HomePageFragment.kt
@@ -15,22 +15,20 @@
import com.casic.xz.meterage.extensions.showEmptyPage
import com.casic.xz.meterage.model.NoticeListModel
import com.casic.xz.meterage.model.RemindListModel
-import com.casic.xz.meterage.model.UserInfoModel
import com.casic.xz.meterage.utils.LoadingDialogHub
import com.casic.xz.meterage.utils.LocaleConstant
import com.casic.xz.meterage.utils.QrConfigCreator
import com.casic.xz.meterage.view.home.*
import com.casic.xz.meterage.view.notice.NoticeListActivity
+import com.casic.xz.meterage.view.search.SearchAllActivity
import com.casic.xz.meterage.vm.MeterageTrainViewModel
import com.casic.xz.meterage.vm.NoticeViewModel
-import com.casic.xz.meterage.vm.UserViewModel
import com.pengxh.kt.lite.adapter.NormalRecyclerAdapter
import com.pengxh.kt.lite.adapter.ViewHolder
import com.pengxh.kt.lite.base.KotlinBaseFragment
import com.pengxh.kt.lite.extensions.convertColor
import com.pengxh.kt.lite.extensions.navigatePageTo
import com.pengxh.kt.lite.extensions.show
-import com.pengxh.kt.lite.utils.SaveKeyValues
import com.pengxh.kt.lite.utils.WeakReferenceHandler
import com.pengxh.kt.lite.vm.LoadState
import com.pengxh.kt.lite.widget.dialog.AlertControlDialog
@@ -39,13 +37,12 @@
import kotlinx.android.synthetic.main.include_empty_view.*
import java.util.*
-class HomePageFragment : KotlinBaseFragment() {
+class HomePageFragment(private val userId: String) : KotlinBaseFragment() {
private val timer = object : Timer() {}
private lateinit var weakReferenceHandler: WeakReferenceHandler
private lateinit var meterageTrainViewModel: MeterageTrainViewModel
private lateinit var noticeViewModel: NoticeViewModel
- private lateinit var userData: UserInfoModel.DataModel
private lateinit var remindAdapter: NormalRecyclerAdapter
private var dataBeans: MutableList = ArrayList()
private var noticeBeans: MutableList = ArrayList()
@@ -170,14 +167,6 @@
true
}
- val userViewModel = ViewModelProvider(this)[UserViewModel::class.java]
- userViewModel.getUserInfo(SaveKeyValues.getValue(LocaleConstant.ACCOUNT, "") as String)
- userViewModel.userInfo.observe(this) {
- if (it.code == 200) {
- userData = it.data
- }
- }
-
meterageTrainViewModel = ViewModelProvider(this)[MeterageTrainViewModel::class.java]
meterageTrainViewModel.signInResult.observe(this) {
if (it.code == 200) {
@@ -296,10 +285,14 @@
}
override fun initEvent() {
+ searchBar.setOnClickListener {
+ requireContext().navigatePageTo()
+ }
+
scanCodeView.setOnClickListener {
qrManager.startScan(requireActivity()) { result ->
if (result.content.isDigitsOnly()) {
- meterageTrainViewModel.signIn(userData.id, result.content)
+ meterageTrainViewModel.signIn(userId, result.content)
} else {
"签到二维码错误,请重新扫描".show(requireContext())
}
diff --git a/app/src/main/java/com/casic/xz/meterage/greendao/DaoMaster.java b/app/src/main/java/com/casic/xz/meterage/greendao/DaoMaster.java
new file mode 100644
index 0000000..d714ce2
--- /dev/null
+++ b/app/src/main/java/com/casic/xz/meterage/greendao/DaoMaster.java
@@ -0,0 +1,96 @@
+package com.casic.xz.meterage.greendao;
+
+import android.content.Context;
+import android.database.sqlite.SQLiteDatabase;
+import android.database.sqlite.SQLiteDatabase.CursorFactory;
+import android.util.Log;
+
+import org.greenrobot.greendao.AbstractDaoMaster;
+import org.greenrobot.greendao.database.Database;
+import org.greenrobot.greendao.database.DatabaseOpenHelper;
+import org.greenrobot.greendao.database.StandardDatabase;
+import org.greenrobot.greendao.identityscope.IdentityScopeType;
+
+
+// THIS CODE IS GENERATED BY greenDAO, DO NOT EDIT.
+/**
+ * Master of DAO (schema version 1): knows all DAOs.
+ */
+public class DaoMaster extends AbstractDaoMaster {
+ public static final int SCHEMA_VERSION = 1;
+
+ /** Creates underlying database table using DAOs. */
+ public static void createAllTables(Database db, boolean ifNotExists) {
+ SearchHistoryBeanDao.createTable(db, ifNotExists);
+ }
+
+ /** Drops underlying database table using DAOs. */
+ public static void dropAllTables(Database db, boolean ifExists) {
+ SearchHistoryBeanDao.dropTable(db, ifExists);
+ }
+
+ /**
+ * WARNING: Drops all table on Upgrade! Use only during development.
+ * Convenience method using a {@link DevOpenHelper}.
+ */
+ public static DaoSession newDevSession(Context context, String name) {
+ Database db = new DevOpenHelper(context, name).getWritableDb();
+ DaoMaster daoMaster = new DaoMaster(db);
+ return daoMaster.newSession();
+ }
+
+ public DaoMaster(SQLiteDatabase db) {
+ this(new StandardDatabase(db));
+ }
+
+ public DaoMaster(Database db) {
+ super(db, SCHEMA_VERSION);
+ registerDaoClass(SearchHistoryBeanDao.class);
+ }
+
+ public DaoSession newSession() {
+ return new DaoSession(db, IdentityScopeType.Session, daoConfigMap);
+ }
+
+ public DaoSession newSession(IdentityScopeType type) {
+ return new DaoSession(db, type, daoConfigMap);
+ }
+
+ /**
+ * Calls {@link #createAllTables(Database, boolean)} in {@link #onCreate(Database)} -
+ */
+ public static abstract class OpenHelper extends DatabaseOpenHelper {
+ public OpenHelper(Context context, String name) {
+ super(context, name, SCHEMA_VERSION);
+ }
+
+ public OpenHelper(Context context, String name, CursorFactory factory) {
+ super(context, name, factory, SCHEMA_VERSION);
+ }
+
+ @Override
+ public void onCreate(Database db) {
+ Log.i("greenDAO", "Creating tables for schema version " + SCHEMA_VERSION);
+ createAllTables(db, false);
+ }
+ }
+
+ /** WARNING: Drops all table on Upgrade! Use only during development. */
+ public static class DevOpenHelper extends OpenHelper {
+ public DevOpenHelper(Context context, String name) {
+ super(context, name);
+ }
+
+ public DevOpenHelper(Context context, String name, CursorFactory factory) {
+ super(context, name, factory);
+ }
+
+ @Override
+ public void onUpgrade(Database db, int oldVersion, int newVersion) {
+ Log.i("greenDAO", "Upgrading schema from version " + oldVersion + " to " + newVersion + " by dropping all tables");
+ dropAllTables(db, true);
+ onCreate(db);
+ }
+ }
+
+}
diff --git a/app/src/main/java/com/casic/xz/meterage/greendao/DaoSession.java b/app/src/main/java/com/casic/xz/meterage/greendao/DaoSession.java
new file mode 100644
index 0000000..0e80024
--- /dev/null
+++ b/app/src/main/java/com/casic/xz/meterage/greendao/DaoSession.java
@@ -0,0 +1,46 @@
+package com.casic.xz.meterage.greendao;
+
+import com.casic.xz.meterage.bean.SearchHistoryBean;
+
+import org.greenrobot.greendao.AbstractDao;
+import org.greenrobot.greendao.AbstractDaoSession;
+import org.greenrobot.greendao.database.Database;
+import org.greenrobot.greendao.identityscope.IdentityScopeType;
+import org.greenrobot.greendao.internal.DaoConfig;
+
+import java.util.Map;
+
+// THIS CODE IS GENERATED BY greenDAO, DO NOT EDIT.
+
+/**
+ * {@inheritDoc}
+ *
+ * @see org.greenrobot.greendao.AbstractDaoSession
+ */
+public class DaoSession extends AbstractDaoSession {
+
+ private final DaoConfig searchHistoryBeanDaoConfig;
+
+ private final SearchHistoryBeanDao searchHistoryBeanDao;
+
+ public DaoSession(Database db, IdentityScopeType type, Map>, DaoConfig>
+ daoConfigMap) {
+ super(db);
+
+ searchHistoryBeanDaoConfig = daoConfigMap.get(SearchHistoryBeanDao.class).clone();
+ searchHistoryBeanDaoConfig.initIdentityScope(type);
+
+ searchHistoryBeanDao = new SearchHistoryBeanDao(searchHistoryBeanDaoConfig, this);
+
+ registerDao(SearchHistoryBean.class, searchHistoryBeanDao);
+ }
+
+ public void clear() {
+ searchHistoryBeanDaoConfig.clearIdentityScope();
+ }
+
+ public SearchHistoryBeanDao getSearchHistoryBeanDao() {
+ return searchHistoryBeanDao;
+ }
+
+}
diff --git a/app/src/main/java/com/casic/xz/meterage/greendao/SearchHistoryBeanDao.java b/app/src/main/java/com/casic/xz/meterage/greendao/SearchHistoryBeanDao.java
new file mode 100644
index 0000000..5923d02
--- /dev/null
+++ b/app/src/main/java/com/casic/xz/meterage/greendao/SearchHistoryBeanDao.java
@@ -0,0 +1,185 @@
+package com.casic.xz.meterage.greendao;
+
+import android.database.Cursor;
+import android.database.sqlite.SQLiteStatement;
+
+import com.casic.xz.meterage.bean.SearchHistoryBean;
+
+import org.greenrobot.greendao.AbstractDao;
+import org.greenrobot.greendao.Property;
+import org.greenrobot.greendao.database.Database;
+import org.greenrobot.greendao.database.DatabaseStatement;
+import org.greenrobot.greendao.internal.DaoConfig;
+
+// THIS CODE IS GENERATED BY greenDAO, DO NOT EDIT.
+/**
+ * DAO for table "SEARCH_HISTORY_BEAN".
+*/
+public class SearchHistoryBeanDao extends AbstractDao {
+
+ public static final String TABLENAME = "SEARCH_HISTORY_BEAN";
+
+ /**
+ * Properties of entity SearchHistoryBean.
+ * Can be used for QueryBuilder and for referencing column names.
+ */
+ public static class Properties {
+ public final static Property Id = new Property(0, Long.class, "id", true, "_id");
+ public final static Property Uuid = new Property(1, String.class, "uuid", false, "UUID");
+ public final static Property Keywords = new Property(2, String.class, "keywords", false, "KEYWORDS");
+ public final static Property SearchType = new Property(3, String.class, "searchType", false, "SEARCH_TYPE");
+ public final static Property UserId = new Property(4, String.class, "userId", false, "USER_ID");
+ public final static Property SearchTime = new Property(5, String.class, "searchTime", false, "SEARCH_TIME");
+ }
+
+
+ public SearchHistoryBeanDao(DaoConfig config) {
+ super(config);
+ }
+
+ public SearchHistoryBeanDao(DaoConfig config, DaoSession daoSession) {
+ super(config, daoSession);
+ }
+
+ /** Creates the underlying database table. */
+ public static void createTable(Database db, boolean ifNotExists) {
+ String constraint = ifNotExists? "IF NOT EXISTS ": "";
+ db.execSQL("CREATE TABLE " + constraint + "\"SEARCH_HISTORY_BEAN\" (" + //
+ "\"_id\" INTEGER PRIMARY KEY AUTOINCREMENT ," + // 0: id
+ "\"UUID\" TEXT UNIQUE ," + // 1: uuid
+ "\"KEYWORDS\" TEXT," + // 2: keywords
+ "\"SEARCH_TYPE\" TEXT," + // 3: searchType
+ "\"USER_ID\" TEXT," + // 4: userId
+ "\"SEARCH_TIME\" TEXT);"); // 5: searchTime
+ }
+
+ /** Drops the underlying database table. */
+ public static void dropTable(Database db, boolean ifExists) {
+ String sql = "DROP TABLE " + (ifExists ? "IF EXISTS " : "") + "\"SEARCH_HISTORY_BEAN\"";
+ db.execSQL(sql);
+ }
+
+ @Override
+ protected final void bindValues(DatabaseStatement stmt, SearchHistoryBean entity) {
+ stmt.clearBindings();
+
+ Long id = entity.getId();
+ if (id != null) {
+ stmt.bindLong(1, id);
+ }
+
+ String uuid = entity.getUuid();
+ if (uuid != null) {
+ stmt.bindString(2, uuid);
+ }
+
+ String keywords = entity.getKeywords();
+ if (keywords != null) {
+ stmt.bindString(3, keywords);
+ }
+
+ String searchType = entity.getSearchType();
+ if (searchType != null) {
+ stmt.bindString(4, searchType);
+ }
+
+ String userId = entity.getUserId();
+ if (userId != null) {
+ stmt.bindString(5, userId);
+ }
+
+ String searchTime = entity.getSearchTime();
+ if (searchTime != null) {
+ stmt.bindString(6, searchTime);
+ }
+ }
+
+ @Override
+ protected final void bindValues(SQLiteStatement stmt, SearchHistoryBean entity) {
+ stmt.clearBindings();
+
+ Long id = entity.getId();
+ if (id != null) {
+ stmt.bindLong(1, id);
+ }
+
+ String uuid = entity.getUuid();
+ if (uuid != null) {
+ stmt.bindString(2, uuid);
+ }
+
+ String keywords = entity.getKeywords();
+ if (keywords != null) {
+ stmt.bindString(3, keywords);
+ }
+
+ String searchType = entity.getSearchType();
+ if (searchType != null) {
+ stmt.bindString(4, searchType);
+ }
+
+ String userId = entity.getUserId();
+ if (userId != null) {
+ stmt.bindString(5, userId);
+ }
+
+ String searchTime = entity.getSearchTime();
+ if (searchTime != null) {
+ stmt.bindString(6, searchTime);
+ }
+ }
+
+ @Override
+ public Long readKey(Cursor cursor, int offset) {
+ return cursor.isNull(offset + 0) ? null : cursor.getLong(offset + 0);
+ }
+
+ @Override
+ public SearchHistoryBean readEntity(Cursor cursor, int offset) {
+ SearchHistoryBean entity = new SearchHistoryBean( //
+ cursor.isNull(offset + 0) ? null : cursor.getLong(offset + 0), // id
+ cursor.isNull(offset + 1) ? null : cursor.getString(offset + 1), // uuid
+ cursor.isNull(offset + 2) ? null : cursor.getString(offset + 2), // keywords
+ cursor.isNull(offset + 3) ? null : cursor.getString(offset + 3), // searchType
+ cursor.isNull(offset + 4) ? null : cursor.getString(offset + 4), // userId
+ cursor.isNull(offset + 5) ? null : cursor.getString(offset + 5) // searchTime
+ );
+ return entity;
+ }
+
+ @Override
+ public void readEntity(Cursor cursor, SearchHistoryBean entity, int offset) {
+ entity.setId(cursor.isNull(offset + 0) ? null : cursor.getLong(offset + 0));
+ entity.setUuid(cursor.isNull(offset + 1) ? null : cursor.getString(offset + 1));
+ entity.setKeywords(cursor.isNull(offset + 2) ? null : cursor.getString(offset + 2));
+ entity.setSearchType(cursor.isNull(offset + 3) ? null : cursor.getString(offset + 3));
+ entity.setUserId(cursor.isNull(offset + 4) ? null : cursor.getString(offset + 4));
+ entity.setSearchTime(cursor.isNull(offset + 5) ? null : cursor.getString(offset + 5));
+ }
+
+ @Override
+ protected final Long updateKeyAfterInsert(SearchHistoryBean entity, long rowId) {
+ entity.setId(rowId);
+ return rowId;
+ }
+
+ @Override
+ public Long getKey(SearchHistoryBean entity) {
+ if(entity != null) {
+ return entity.getId();
+ } else {
+ return null;
+ }
+ }
+
+ @Override
+ public boolean hasKey(SearchHistoryBean entity) {
+ return entity.getId() != null;
+ }
+
+ @Override
+ protected final boolean isEntityUpdateable() {
+ return true;
+ }
+
+}
diff --git a/app/src/main/java/com/casic/xz/meterage/utils/DataBaseManager.kt b/app/src/main/java/com/casic/xz/meterage/utils/DataBaseManager.kt
new file mode 100644
index 0000000..52fe032
--- /dev/null
+++ b/app/src/main/java/com/casic/xz/meterage/utils/DataBaseManager.kt
@@ -0,0 +1,45 @@
+package com.casic.xz.meterage.utils
+
+import com.casic.xz.meterage.base.BaseApplication
+import com.casic.xz.meterage.bean.SearchHistoryBean
+import com.casic.xz.meterage.greendao.SearchHistoryBeanDao
+import com.pengxh.kt.lite.extensions.timestampToCompleteDate
+import com.pengxh.kt.lite.utils.SaveKeyValues
+import java.util.*
+
+class DataBaseManager private constructor() {
+
+ companion object {
+ //Kotlin委托模式双重锁单例
+ val get: DataBaseManager by lazy(mode = LazyThreadSafetyMode.SYNCHRONIZED) {
+ DataBaseManager()
+ }
+ }
+
+ private val searchBeanDao by lazy { BaseApplication.get().getDaoSession().searchHistoryBeanDao }
+ private val userId by lazy { SaveKeyValues.getValue(LocaleConstant.USER_ID, "") }
+
+ fun addSearchHistory(keywords: String, searchType: String) {
+ val bean = SearchHistoryBean()
+ bean.uuid = UUID.randomUUID().toString()
+ bean.keywords = keywords
+ bean.searchType = searchType
+ bean.userId = userId.toString()
+ bean.searchTime = System.currentTimeMillis().timestampToCompleteDate()
+ searchBeanDao.insert(bean)
+ }
+
+ fun queryHistoryByType(searchType: String): MutableList {
+ return searchBeanDao.queryBuilder().where(
+ SearchHistoryBeanDao.Properties.UserId.eq(userId),
+ SearchHistoryBeanDao.Properties.SearchType.eq(searchType)
+ ).list()
+ }
+
+ fun deleteHistoryByType(searchType: String) {
+ val list = queryHistoryByType(searchType)
+ list.forEach {
+ searchBeanDao.delete(it)
+ }
+ }
+}
\ No newline at end of file
diff --git a/app/build.gradle b/app/build.gradle
index 298f687..e142ec1 100644
--- a/app/build.gradle
+++ b/app/build.gradle
@@ -3,6 +3,7 @@
apply plugin: 'com.android.application'
apply plugin: 'kotlin-android'
apply plugin: 'kotlin-android-extensions'
+apply plugin: 'org.greenrobot.greendao'
android {
signingConfigs {
@@ -57,6 +58,12 @@
outputFileName = "XZJL_" + getBuildDate() + "_Beta.apk"
}
}
+
+ greendao {
+ schemaVersion 1//数据库版本号
+ targetGenDir 'src/main/java'//设置DaoMaster、DaoSession、Dao目录
+ daoPackage 'com.casic.xz.meterage.greendao'//设置DaoMaster、DaoSession、Dao包名
+ }
}
static def getBuildDate() {
@@ -67,7 +74,7 @@
dependencies {
//基础依赖库
implementation 'com.github.AndroidCoderPeng:Kotlin-lite-lib:1.0.4'
- implementation 'androidx.appcompat:appcompat:1.5.1'
+ implementation 'androidx.appcompat:appcompat:1.6.1'
implementation 'androidx.core:core-ktx:1.9.0'
//Google官方授权框架
implementation 'pub.devrel:easypermissions:3.0.0'
@@ -113,4 +120,6 @@
implementation 'com.github.tiann:FreeReflection:3.1.0'
//单项/数字、二三级联动、日期/时间等滚轮选择器
implementation 'com.github.gzu-liyujiang.AndroidPicker:WheelPicker:4.1.8'
+ //数据库框架
+ implementation 'org.greenrobot:greendao:3.3.0'
}
\ No newline at end of file
diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml
index 972eff9..5b6f9b2 100644
--- a/app/src/main/AndroidManifest.xml
+++ b/app/src/main/AndroidManifest.xml
@@ -69,6 +69,8 @@
+
+
diff --git a/app/src/main/java/com/casic/xz/meterage/base/BaseApplication.kt b/app/src/main/java/com/casic/xz/meterage/base/BaseApplication.kt
index 14a604d..1684c23 100644
--- a/app/src/main/java/com/casic/xz/meterage/base/BaseApplication.kt
+++ b/app/src/main/java/com/casic/xz/meterage/base/BaseApplication.kt
@@ -2,6 +2,8 @@
import android.app.Application
import android.content.Context
+import com.casic.xz.meterage.greendao.DaoMaster
+import com.casic.xz.meterage.greendao.DaoSession
import com.pengxh.kt.lite.utils.SaveKeyValues
import me.weishu.reflection.Reflection
import kotlin.properties.Delegates
@@ -12,12 +14,22 @@
private var application: BaseApplication by Delegates.notNull()
fun get() = application
+
+ private lateinit var daoSession: DaoSession
}
override fun onCreate() {
super.onCreate()
application = this
SaveKeyValues.initSharedPreferences(this)
+
+ val devOpenHelper = DaoMaster.DevOpenHelper(this, "Meterage.db", null)
+ val daoMaster = DaoMaster(devOpenHelper.writableDatabase)
+ daoSession = daoMaster.newSession()
+ }
+
+ fun getDaoSession(): DaoSession {
+ return daoSession
}
//绕过Android 11以上反射限制
diff --git a/app/src/main/java/com/casic/xz/meterage/bean/SearchHistoryBean.java b/app/src/main/java/com/casic/xz/meterage/bean/SearchHistoryBean.java
new file mode 100644
index 0000000..6a46a3a
--- /dev/null
+++ b/app/src/main/java/com/casic/xz/meterage/bean/SearchHistoryBean.java
@@ -0,0 +1,82 @@
+package com.casic.xz.meterage.bean;
+
+import org.greenrobot.greendao.annotation.Entity;
+import org.greenrobot.greendao.annotation.Generated;
+import org.greenrobot.greendao.annotation.Id;
+import org.greenrobot.greendao.annotation.Unique;
+
+@Entity
+public class SearchHistoryBean {
+ @Id(autoincrement = true)
+ private Long id;//主键自增
+
+ @Unique
+ private String uuid;
+ private String keywords;//查询条件-关键字
+ private String searchType;//查询类型
+ private String userId;//用户Id
+ private String searchTime;//查询的时间
+
+ @Generated(hash = 2130561778)
+ public SearchHistoryBean(Long id, String uuid, String keywords,
+ String searchType, String userId, String searchTime) {
+ this.id = id;
+ this.uuid = uuid;
+ this.keywords = keywords;
+ this.searchType = searchType;
+ this.userId = userId;
+ this.searchTime = searchTime;
+ }
+
+ @Generated(hash = 1570282321)
+ public SearchHistoryBean() {
+ }
+
+ public Long getId() {
+ return this.id;
+ }
+
+ public void setId(Long id) {
+ this.id = id;
+ }
+
+ public String getUuid() {
+ return this.uuid;
+ }
+
+ public void setUuid(String uuid) {
+ this.uuid = uuid;
+ }
+
+ public String getKeywords() {
+ return this.keywords;
+ }
+
+ public void setKeywords(String keywords) {
+ this.keywords = keywords;
+ }
+
+ public String getSearchType() {
+ return this.searchType;
+ }
+
+ public void setSearchType(String searchType) {
+ this.searchType = searchType;
+ }
+
+ public String getUserId() {
+ return this.userId;
+ }
+
+ public void setUserId(String userId) {
+ this.userId = userId;
+ }
+
+ public String getSearchTime() {
+ return this.searchTime;
+ }
+
+ public void setSearchTime(String searchTime) {
+ this.searchTime = searchTime;
+ }
+}
diff --git a/app/src/main/java/com/casic/xz/meterage/fragment/HomePageFragment.kt b/app/src/main/java/com/casic/xz/meterage/fragment/HomePageFragment.kt
index 151f951..ae7f5e4 100644
--- a/app/src/main/java/com/casic/xz/meterage/fragment/HomePageFragment.kt
+++ b/app/src/main/java/com/casic/xz/meterage/fragment/HomePageFragment.kt
@@ -15,22 +15,20 @@
import com.casic.xz.meterage.extensions.showEmptyPage
import com.casic.xz.meterage.model.NoticeListModel
import com.casic.xz.meterage.model.RemindListModel
-import com.casic.xz.meterage.model.UserInfoModel
import com.casic.xz.meterage.utils.LoadingDialogHub
import com.casic.xz.meterage.utils.LocaleConstant
import com.casic.xz.meterage.utils.QrConfigCreator
import com.casic.xz.meterage.view.home.*
import com.casic.xz.meterage.view.notice.NoticeListActivity
+import com.casic.xz.meterage.view.search.SearchAllActivity
import com.casic.xz.meterage.vm.MeterageTrainViewModel
import com.casic.xz.meterage.vm.NoticeViewModel
-import com.casic.xz.meterage.vm.UserViewModel
import com.pengxh.kt.lite.adapter.NormalRecyclerAdapter
import com.pengxh.kt.lite.adapter.ViewHolder
import com.pengxh.kt.lite.base.KotlinBaseFragment
import com.pengxh.kt.lite.extensions.convertColor
import com.pengxh.kt.lite.extensions.navigatePageTo
import com.pengxh.kt.lite.extensions.show
-import com.pengxh.kt.lite.utils.SaveKeyValues
import com.pengxh.kt.lite.utils.WeakReferenceHandler
import com.pengxh.kt.lite.vm.LoadState
import com.pengxh.kt.lite.widget.dialog.AlertControlDialog
@@ -39,13 +37,12 @@
import kotlinx.android.synthetic.main.include_empty_view.*
import java.util.*
-class HomePageFragment : KotlinBaseFragment() {
+class HomePageFragment(private val userId: String) : KotlinBaseFragment() {
private val timer = object : Timer() {}
private lateinit var weakReferenceHandler: WeakReferenceHandler
private lateinit var meterageTrainViewModel: MeterageTrainViewModel
private lateinit var noticeViewModel: NoticeViewModel
- private lateinit var userData: UserInfoModel.DataModel
private lateinit var remindAdapter: NormalRecyclerAdapter
private var dataBeans: MutableList = ArrayList()
private var noticeBeans: MutableList = ArrayList()
@@ -170,14 +167,6 @@
true
}
- val userViewModel = ViewModelProvider(this)[UserViewModel::class.java]
- userViewModel.getUserInfo(SaveKeyValues.getValue(LocaleConstant.ACCOUNT, "") as String)
- userViewModel.userInfo.observe(this) {
- if (it.code == 200) {
- userData = it.data
- }
- }
-
meterageTrainViewModel = ViewModelProvider(this)[MeterageTrainViewModel::class.java]
meterageTrainViewModel.signInResult.observe(this) {
if (it.code == 200) {
@@ -296,10 +285,14 @@
}
override fun initEvent() {
+ searchBar.setOnClickListener {
+ requireContext().navigatePageTo()
+ }
+
scanCodeView.setOnClickListener {
qrManager.startScan(requireActivity()) { result ->
if (result.content.isDigitsOnly()) {
- meterageTrainViewModel.signIn(userData.id, result.content)
+ meterageTrainViewModel.signIn(userId, result.content)
} else {
"签到二维码错误,请重新扫描".show(requireContext())
}
diff --git a/app/src/main/java/com/casic/xz/meterage/greendao/DaoMaster.java b/app/src/main/java/com/casic/xz/meterage/greendao/DaoMaster.java
new file mode 100644
index 0000000..d714ce2
--- /dev/null
+++ b/app/src/main/java/com/casic/xz/meterage/greendao/DaoMaster.java
@@ -0,0 +1,96 @@
+package com.casic.xz.meterage.greendao;
+
+import android.content.Context;
+import android.database.sqlite.SQLiteDatabase;
+import android.database.sqlite.SQLiteDatabase.CursorFactory;
+import android.util.Log;
+
+import org.greenrobot.greendao.AbstractDaoMaster;
+import org.greenrobot.greendao.database.Database;
+import org.greenrobot.greendao.database.DatabaseOpenHelper;
+import org.greenrobot.greendao.database.StandardDatabase;
+import org.greenrobot.greendao.identityscope.IdentityScopeType;
+
+
+// THIS CODE IS GENERATED BY greenDAO, DO NOT EDIT.
+/**
+ * Master of DAO (schema version 1): knows all DAOs.
+ */
+public class DaoMaster extends AbstractDaoMaster {
+ public static final int SCHEMA_VERSION = 1;
+
+ /** Creates underlying database table using DAOs. */
+ public static void createAllTables(Database db, boolean ifNotExists) {
+ SearchHistoryBeanDao.createTable(db, ifNotExists);
+ }
+
+ /** Drops underlying database table using DAOs. */
+ public static void dropAllTables(Database db, boolean ifExists) {
+ SearchHistoryBeanDao.dropTable(db, ifExists);
+ }
+
+ /**
+ * WARNING: Drops all table on Upgrade! Use only during development.
+ * Convenience method using a {@link DevOpenHelper}.
+ */
+ public static DaoSession newDevSession(Context context, String name) {
+ Database db = new DevOpenHelper(context, name).getWritableDb();
+ DaoMaster daoMaster = new DaoMaster(db);
+ return daoMaster.newSession();
+ }
+
+ public DaoMaster(SQLiteDatabase db) {
+ this(new StandardDatabase(db));
+ }
+
+ public DaoMaster(Database db) {
+ super(db, SCHEMA_VERSION);
+ registerDaoClass(SearchHistoryBeanDao.class);
+ }
+
+ public DaoSession newSession() {
+ return new DaoSession(db, IdentityScopeType.Session, daoConfigMap);
+ }
+
+ public DaoSession newSession(IdentityScopeType type) {
+ return new DaoSession(db, type, daoConfigMap);
+ }
+
+ /**
+ * Calls {@link #createAllTables(Database, boolean)} in {@link #onCreate(Database)} -
+ */
+ public static abstract class OpenHelper extends DatabaseOpenHelper {
+ public OpenHelper(Context context, String name) {
+ super(context, name, SCHEMA_VERSION);
+ }
+
+ public OpenHelper(Context context, String name, CursorFactory factory) {
+ super(context, name, factory, SCHEMA_VERSION);
+ }
+
+ @Override
+ public void onCreate(Database db) {
+ Log.i("greenDAO", "Creating tables for schema version " + SCHEMA_VERSION);
+ createAllTables(db, false);
+ }
+ }
+
+ /** WARNING: Drops all table on Upgrade! Use only during development. */
+ public static class DevOpenHelper extends OpenHelper {
+ public DevOpenHelper(Context context, String name) {
+ super(context, name);
+ }
+
+ public DevOpenHelper(Context context, String name, CursorFactory factory) {
+ super(context, name, factory);
+ }
+
+ @Override
+ public void onUpgrade(Database db, int oldVersion, int newVersion) {
+ Log.i("greenDAO", "Upgrading schema from version " + oldVersion + " to " + newVersion + " by dropping all tables");
+ dropAllTables(db, true);
+ onCreate(db);
+ }
+ }
+
+}
diff --git a/app/src/main/java/com/casic/xz/meterage/greendao/DaoSession.java b/app/src/main/java/com/casic/xz/meterage/greendao/DaoSession.java
new file mode 100644
index 0000000..0e80024
--- /dev/null
+++ b/app/src/main/java/com/casic/xz/meterage/greendao/DaoSession.java
@@ -0,0 +1,46 @@
+package com.casic.xz.meterage.greendao;
+
+import com.casic.xz.meterage.bean.SearchHistoryBean;
+
+import org.greenrobot.greendao.AbstractDao;
+import org.greenrobot.greendao.AbstractDaoSession;
+import org.greenrobot.greendao.database.Database;
+import org.greenrobot.greendao.identityscope.IdentityScopeType;
+import org.greenrobot.greendao.internal.DaoConfig;
+
+import java.util.Map;
+
+// THIS CODE IS GENERATED BY greenDAO, DO NOT EDIT.
+
+/**
+ * {@inheritDoc}
+ *
+ * @see org.greenrobot.greendao.AbstractDaoSession
+ */
+public class DaoSession extends AbstractDaoSession {
+
+ private final DaoConfig searchHistoryBeanDaoConfig;
+
+ private final SearchHistoryBeanDao searchHistoryBeanDao;
+
+ public DaoSession(Database db, IdentityScopeType type, Map>, DaoConfig>
+ daoConfigMap) {
+ super(db);
+
+ searchHistoryBeanDaoConfig = daoConfigMap.get(SearchHistoryBeanDao.class).clone();
+ searchHistoryBeanDaoConfig.initIdentityScope(type);
+
+ searchHistoryBeanDao = new SearchHistoryBeanDao(searchHistoryBeanDaoConfig, this);
+
+ registerDao(SearchHistoryBean.class, searchHistoryBeanDao);
+ }
+
+ public void clear() {
+ searchHistoryBeanDaoConfig.clearIdentityScope();
+ }
+
+ public SearchHistoryBeanDao getSearchHistoryBeanDao() {
+ return searchHistoryBeanDao;
+ }
+
+}
diff --git a/app/src/main/java/com/casic/xz/meterage/greendao/SearchHistoryBeanDao.java b/app/src/main/java/com/casic/xz/meterage/greendao/SearchHistoryBeanDao.java
new file mode 100644
index 0000000..5923d02
--- /dev/null
+++ b/app/src/main/java/com/casic/xz/meterage/greendao/SearchHistoryBeanDao.java
@@ -0,0 +1,185 @@
+package com.casic.xz.meterage.greendao;
+
+import android.database.Cursor;
+import android.database.sqlite.SQLiteStatement;
+
+import com.casic.xz.meterage.bean.SearchHistoryBean;
+
+import org.greenrobot.greendao.AbstractDao;
+import org.greenrobot.greendao.Property;
+import org.greenrobot.greendao.database.Database;
+import org.greenrobot.greendao.database.DatabaseStatement;
+import org.greenrobot.greendao.internal.DaoConfig;
+
+// THIS CODE IS GENERATED BY greenDAO, DO NOT EDIT.
+/**
+ * DAO for table "SEARCH_HISTORY_BEAN".
+*/
+public class SearchHistoryBeanDao extends AbstractDao {
+
+ public static final String TABLENAME = "SEARCH_HISTORY_BEAN";
+
+ /**
+ * Properties of entity SearchHistoryBean.
+ * Can be used for QueryBuilder and for referencing column names.
+ */
+ public static class Properties {
+ public final static Property Id = new Property(0, Long.class, "id", true, "_id");
+ public final static Property Uuid = new Property(1, String.class, "uuid", false, "UUID");
+ public final static Property Keywords = new Property(2, String.class, "keywords", false, "KEYWORDS");
+ public final static Property SearchType = new Property(3, String.class, "searchType", false, "SEARCH_TYPE");
+ public final static Property UserId = new Property(4, String.class, "userId", false, "USER_ID");
+ public final static Property SearchTime = new Property(5, String.class, "searchTime", false, "SEARCH_TIME");
+ }
+
+
+ public SearchHistoryBeanDao(DaoConfig config) {
+ super(config);
+ }
+
+ public SearchHistoryBeanDao(DaoConfig config, DaoSession daoSession) {
+ super(config, daoSession);
+ }
+
+ /** Creates the underlying database table. */
+ public static void createTable(Database db, boolean ifNotExists) {
+ String constraint = ifNotExists? "IF NOT EXISTS ": "";
+ db.execSQL("CREATE TABLE " + constraint + "\"SEARCH_HISTORY_BEAN\" (" + //
+ "\"_id\" INTEGER PRIMARY KEY AUTOINCREMENT ," + // 0: id
+ "\"UUID\" TEXT UNIQUE ," + // 1: uuid
+ "\"KEYWORDS\" TEXT," + // 2: keywords
+ "\"SEARCH_TYPE\" TEXT," + // 3: searchType
+ "\"USER_ID\" TEXT," + // 4: userId
+ "\"SEARCH_TIME\" TEXT);"); // 5: searchTime
+ }
+
+ /** Drops the underlying database table. */
+ public static void dropTable(Database db, boolean ifExists) {
+ String sql = "DROP TABLE " + (ifExists ? "IF EXISTS " : "") + "\"SEARCH_HISTORY_BEAN\"";
+ db.execSQL(sql);
+ }
+
+ @Override
+ protected final void bindValues(DatabaseStatement stmt, SearchHistoryBean entity) {
+ stmt.clearBindings();
+
+ Long id = entity.getId();
+ if (id != null) {
+ stmt.bindLong(1, id);
+ }
+
+ String uuid = entity.getUuid();
+ if (uuid != null) {
+ stmt.bindString(2, uuid);
+ }
+
+ String keywords = entity.getKeywords();
+ if (keywords != null) {
+ stmt.bindString(3, keywords);
+ }
+
+ String searchType = entity.getSearchType();
+ if (searchType != null) {
+ stmt.bindString(4, searchType);
+ }
+
+ String userId = entity.getUserId();
+ if (userId != null) {
+ stmt.bindString(5, userId);
+ }
+
+ String searchTime = entity.getSearchTime();
+ if (searchTime != null) {
+ stmt.bindString(6, searchTime);
+ }
+ }
+
+ @Override
+ protected final void bindValues(SQLiteStatement stmt, SearchHistoryBean entity) {
+ stmt.clearBindings();
+
+ Long id = entity.getId();
+ if (id != null) {
+ stmt.bindLong(1, id);
+ }
+
+ String uuid = entity.getUuid();
+ if (uuid != null) {
+ stmt.bindString(2, uuid);
+ }
+
+ String keywords = entity.getKeywords();
+ if (keywords != null) {
+ stmt.bindString(3, keywords);
+ }
+
+ String searchType = entity.getSearchType();
+ if (searchType != null) {
+ stmt.bindString(4, searchType);
+ }
+
+ String userId = entity.getUserId();
+ if (userId != null) {
+ stmt.bindString(5, userId);
+ }
+
+ String searchTime = entity.getSearchTime();
+ if (searchTime != null) {
+ stmt.bindString(6, searchTime);
+ }
+ }
+
+ @Override
+ public Long readKey(Cursor cursor, int offset) {
+ return cursor.isNull(offset + 0) ? null : cursor.getLong(offset + 0);
+ }
+
+ @Override
+ public SearchHistoryBean readEntity(Cursor cursor, int offset) {
+ SearchHistoryBean entity = new SearchHistoryBean( //
+ cursor.isNull(offset + 0) ? null : cursor.getLong(offset + 0), // id
+ cursor.isNull(offset + 1) ? null : cursor.getString(offset + 1), // uuid
+ cursor.isNull(offset + 2) ? null : cursor.getString(offset + 2), // keywords
+ cursor.isNull(offset + 3) ? null : cursor.getString(offset + 3), // searchType
+ cursor.isNull(offset + 4) ? null : cursor.getString(offset + 4), // userId
+ cursor.isNull(offset + 5) ? null : cursor.getString(offset + 5) // searchTime
+ );
+ return entity;
+ }
+
+ @Override
+ public void readEntity(Cursor cursor, SearchHistoryBean entity, int offset) {
+ entity.setId(cursor.isNull(offset + 0) ? null : cursor.getLong(offset + 0));
+ entity.setUuid(cursor.isNull(offset + 1) ? null : cursor.getString(offset + 1));
+ entity.setKeywords(cursor.isNull(offset + 2) ? null : cursor.getString(offset + 2));
+ entity.setSearchType(cursor.isNull(offset + 3) ? null : cursor.getString(offset + 3));
+ entity.setUserId(cursor.isNull(offset + 4) ? null : cursor.getString(offset + 4));
+ entity.setSearchTime(cursor.isNull(offset + 5) ? null : cursor.getString(offset + 5));
+ }
+
+ @Override
+ protected final Long updateKeyAfterInsert(SearchHistoryBean entity, long rowId) {
+ entity.setId(rowId);
+ return rowId;
+ }
+
+ @Override
+ public Long getKey(SearchHistoryBean entity) {
+ if(entity != null) {
+ return entity.getId();
+ } else {
+ return null;
+ }
+ }
+
+ @Override
+ public boolean hasKey(SearchHistoryBean entity) {
+ return entity.getId() != null;
+ }
+
+ @Override
+ protected final boolean isEntityUpdateable() {
+ return true;
+ }
+
+}
diff --git a/app/src/main/java/com/casic/xz/meterage/utils/DataBaseManager.kt b/app/src/main/java/com/casic/xz/meterage/utils/DataBaseManager.kt
new file mode 100644
index 0000000..52fe032
--- /dev/null
+++ b/app/src/main/java/com/casic/xz/meterage/utils/DataBaseManager.kt
@@ -0,0 +1,45 @@
+package com.casic.xz.meterage.utils
+
+import com.casic.xz.meterage.base.BaseApplication
+import com.casic.xz.meterage.bean.SearchHistoryBean
+import com.casic.xz.meterage.greendao.SearchHistoryBeanDao
+import com.pengxh.kt.lite.extensions.timestampToCompleteDate
+import com.pengxh.kt.lite.utils.SaveKeyValues
+import java.util.*
+
+class DataBaseManager private constructor() {
+
+ companion object {
+ //Kotlin委托模式双重锁单例
+ val get: DataBaseManager by lazy(mode = LazyThreadSafetyMode.SYNCHRONIZED) {
+ DataBaseManager()
+ }
+ }
+
+ private val searchBeanDao by lazy { BaseApplication.get().getDaoSession().searchHistoryBeanDao }
+ private val userId by lazy { SaveKeyValues.getValue(LocaleConstant.USER_ID, "") }
+
+ fun addSearchHistory(keywords: String, searchType: String) {
+ val bean = SearchHistoryBean()
+ bean.uuid = UUID.randomUUID().toString()
+ bean.keywords = keywords
+ bean.searchType = searchType
+ bean.userId = userId.toString()
+ bean.searchTime = System.currentTimeMillis().timestampToCompleteDate()
+ searchBeanDao.insert(bean)
+ }
+
+ fun queryHistoryByType(searchType: String): MutableList {
+ return searchBeanDao.queryBuilder().where(
+ SearchHistoryBeanDao.Properties.UserId.eq(userId),
+ SearchHistoryBeanDao.Properties.SearchType.eq(searchType)
+ ).list()
+ }
+
+ fun deleteHistoryByType(searchType: String) {
+ val list = queryHistoryByType(searchType)
+ list.forEach {
+ searchBeanDao.delete(it)
+ }
+ }
+}
\ No newline at end of file
diff --git a/app/src/main/java/com/casic/xz/meterage/utils/LocaleConstant.kt b/app/src/main/java/com/casic/xz/meterage/utils/LocaleConstant.kt
index cc2848b..2ea47a0 100644
--- a/app/src/main/java/com/casic/xz/meterage/utils/LocaleConstant.kt
+++ b/app/src/main/java/com/casic/xz/meterage/utils/LocaleConstant.kt
@@ -62,4 +62,5 @@
const val File_SERVER_URL = "http://111.198.10.15:21408"
const val ACCOUNT = "account"
const val PASSWORD = "password"
+ const val USER_ID = "userId"
}
\ No newline at end of file
diff --git a/app/build.gradle b/app/build.gradle
index 298f687..e142ec1 100644
--- a/app/build.gradle
+++ b/app/build.gradle
@@ -3,6 +3,7 @@
apply plugin: 'com.android.application'
apply plugin: 'kotlin-android'
apply plugin: 'kotlin-android-extensions'
+apply plugin: 'org.greenrobot.greendao'
android {
signingConfigs {
@@ -57,6 +58,12 @@
outputFileName = "XZJL_" + getBuildDate() + "_Beta.apk"
}
}
+
+ greendao {
+ schemaVersion 1//数据库版本号
+ targetGenDir 'src/main/java'//设置DaoMaster、DaoSession、Dao目录
+ daoPackage 'com.casic.xz.meterage.greendao'//设置DaoMaster、DaoSession、Dao包名
+ }
}
static def getBuildDate() {
@@ -67,7 +74,7 @@
dependencies {
//基础依赖库
implementation 'com.github.AndroidCoderPeng:Kotlin-lite-lib:1.0.4'
- implementation 'androidx.appcompat:appcompat:1.5.1'
+ implementation 'androidx.appcompat:appcompat:1.6.1'
implementation 'androidx.core:core-ktx:1.9.0'
//Google官方授权框架
implementation 'pub.devrel:easypermissions:3.0.0'
@@ -113,4 +120,6 @@
implementation 'com.github.tiann:FreeReflection:3.1.0'
//单项/数字、二三级联动、日期/时间等滚轮选择器
implementation 'com.github.gzu-liyujiang.AndroidPicker:WheelPicker:4.1.8'
+ //数据库框架
+ implementation 'org.greenrobot:greendao:3.3.0'
}
\ No newline at end of file
diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml
index 972eff9..5b6f9b2 100644
--- a/app/src/main/AndroidManifest.xml
+++ b/app/src/main/AndroidManifest.xml
@@ -69,6 +69,8 @@
+
+
diff --git a/app/src/main/java/com/casic/xz/meterage/base/BaseApplication.kt b/app/src/main/java/com/casic/xz/meterage/base/BaseApplication.kt
index 14a604d..1684c23 100644
--- a/app/src/main/java/com/casic/xz/meterage/base/BaseApplication.kt
+++ b/app/src/main/java/com/casic/xz/meterage/base/BaseApplication.kt
@@ -2,6 +2,8 @@
import android.app.Application
import android.content.Context
+import com.casic.xz.meterage.greendao.DaoMaster
+import com.casic.xz.meterage.greendao.DaoSession
import com.pengxh.kt.lite.utils.SaveKeyValues
import me.weishu.reflection.Reflection
import kotlin.properties.Delegates
@@ -12,12 +14,22 @@
private var application: BaseApplication by Delegates.notNull()
fun get() = application
+
+ private lateinit var daoSession: DaoSession
}
override fun onCreate() {
super.onCreate()
application = this
SaveKeyValues.initSharedPreferences(this)
+
+ val devOpenHelper = DaoMaster.DevOpenHelper(this, "Meterage.db", null)
+ val daoMaster = DaoMaster(devOpenHelper.writableDatabase)
+ daoSession = daoMaster.newSession()
+ }
+
+ fun getDaoSession(): DaoSession {
+ return daoSession
}
//绕过Android 11以上反射限制
diff --git a/app/src/main/java/com/casic/xz/meterage/bean/SearchHistoryBean.java b/app/src/main/java/com/casic/xz/meterage/bean/SearchHistoryBean.java
new file mode 100644
index 0000000..6a46a3a
--- /dev/null
+++ b/app/src/main/java/com/casic/xz/meterage/bean/SearchHistoryBean.java
@@ -0,0 +1,82 @@
+package com.casic.xz.meterage.bean;
+
+import org.greenrobot.greendao.annotation.Entity;
+import org.greenrobot.greendao.annotation.Generated;
+import org.greenrobot.greendao.annotation.Id;
+import org.greenrobot.greendao.annotation.Unique;
+
+@Entity
+public class SearchHistoryBean {
+ @Id(autoincrement = true)
+ private Long id;//主键自增
+
+ @Unique
+ private String uuid;
+ private String keywords;//查询条件-关键字
+ private String searchType;//查询类型
+ private String userId;//用户Id
+ private String searchTime;//查询的时间
+
+ @Generated(hash = 2130561778)
+ public SearchHistoryBean(Long id, String uuid, String keywords,
+ String searchType, String userId, String searchTime) {
+ this.id = id;
+ this.uuid = uuid;
+ this.keywords = keywords;
+ this.searchType = searchType;
+ this.userId = userId;
+ this.searchTime = searchTime;
+ }
+
+ @Generated(hash = 1570282321)
+ public SearchHistoryBean() {
+ }
+
+ public Long getId() {
+ return this.id;
+ }
+
+ public void setId(Long id) {
+ this.id = id;
+ }
+
+ public String getUuid() {
+ return this.uuid;
+ }
+
+ public void setUuid(String uuid) {
+ this.uuid = uuid;
+ }
+
+ public String getKeywords() {
+ return this.keywords;
+ }
+
+ public void setKeywords(String keywords) {
+ this.keywords = keywords;
+ }
+
+ public String getSearchType() {
+ return this.searchType;
+ }
+
+ public void setSearchType(String searchType) {
+ this.searchType = searchType;
+ }
+
+ public String getUserId() {
+ return this.userId;
+ }
+
+ public void setUserId(String userId) {
+ this.userId = userId;
+ }
+
+ public String getSearchTime() {
+ return this.searchTime;
+ }
+
+ public void setSearchTime(String searchTime) {
+ this.searchTime = searchTime;
+ }
+}
diff --git a/app/src/main/java/com/casic/xz/meterage/fragment/HomePageFragment.kt b/app/src/main/java/com/casic/xz/meterage/fragment/HomePageFragment.kt
index 151f951..ae7f5e4 100644
--- a/app/src/main/java/com/casic/xz/meterage/fragment/HomePageFragment.kt
+++ b/app/src/main/java/com/casic/xz/meterage/fragment/HomePageFragment.kt
@@ -15,22 +15,20 @@
import com.casic.xz.meterage.extensions.showEmptyPage
import com.casic.xz.meterage.model.NoticeListModel
import com.casic.xz.meterage.model.RemindListModel
-import com.casic.xz.meterage.model.UserInfoModel
import com.casic.xz.meterage.utils.LoadingDialogHub
import com.casic.xz.meterage.utils.LocaleConstant
import com.casic.xz.meterage.utils.QrConfigCreator
import com.casic.xz.meterage.view.home.*
import com.casic.xz.meterage.view.notice.NoticeListActivity
+import com.casic.xz.meterage.view.search.SearchAllActivity
import com.casic.xz.meterage.vm.MeterageTrainViewModel
import com.casic.xz.meterage.vm.NoticeViewModel
-import com.casic.xz.meterage.vm.UserViewModel
import com.pengxh.kt.lite.adapter.NormalRecyclerAdapter
import com.pengxh.kt.lite.adapter.ViewHolder
import com.pengxh.kt.lite.base.KotlinBaseFragment
import com.pengxh.kt.lite.extensions.convertColor
import com.pengxh.kt.lite.extensions.navigatePageTo
import com.pengxh.kt.lite.extensions.show
-import com.pengxh.kt.lite.utils.SaveKeyValues
import com.pengxh.kt.lite.utils.WeakReferenceHandler
import com.pengxh.kt.lite.vm.LoadState
import com.pengxh.kt.lite.widget.dialog.AlertControlDialog
@@ -39,13 +37,12 @@
import kotlinx.android.synthetic.main.include_empty_view.*
import java.util.*
-class HomePageFragment : KotlinBaseFragment() {
+class HomePageFragment(private val userId: String) : KotlinBaseFragment() {
private val timer = object : Timer() {}
private lateinit var weakReferenceHandler: WeakReferenceHandler
private lateinit var meterageTrainViewModel: MeterageTrainViewModel
private lateinit var noticeViewModel: NoticeViewModel
- private lateinit var userData: UserInfoModel.DataModel
private lateinit var remindAdapter: NormalRecyclerAdapter
private var dataBeans: MutableList = ArrayList()
private var noticeBeans: MutableList = ArrayList()
@@ -170,14 +167,6 @@
true
}
- val userViewModel = ViewModelProvider(this)[UserViewModel::class.java]
- userViewModel.getUserInfo(SaveKeyValues.getValue(LocaleConstant.ACCOUNT, "") as String)
- userViewModel.userInfo.observe(this) {
- if (it.code == 200) {
- userData = it.data
- }
- }
-
meterageTrainViewModel = ViewModelProvider(this)[MeterageTrainViewModel::class.java]
meterageTrainViewModel.signInResult.observe(this) {
if (it.code == 200) {
@@ -296,10 +285,14 @@
}
override fun initEvent() {
+ searchBar.setOnClickListener {
+ requireContext().navigatePageTo()
+ }
+
scanCodeView.setOnClickListener {
qrManager.startScan(requireActivity()) { result ->
if (result.content.isDigitsOnly()) {
- meterageTrainViewModel.signIn(userData.id, result.content)
+ meterageTrainViewModel.signIn(userId, result.content)
} else {
"签到二维码错误,请重新扫描".show(requireContext())
}
diff --git a/app/src/main/java/com/casic/xz/meterage/greendao/DaoMaster.java b/app/src/main/java/com/casic/xz/meterage/greendao/DaoMaster.java
new file mode 100644
index 0000000..d714ce2
--- /dev/null
+++ b/app/src/main/java/com/casic/xz/meterage/greendao/DaoMaster.java
@@ -0,0 +1,96 @@
+package com.casic.xz.meterage.greendao;
+
+import android.content.Context;
+import android.database.sqlite.SQLiteDatabase;
+import android.database.sqlite.SQLiteDatabase.CursorFactory;
+import android.util.Log;
+
+import org.greenrobot.greendao.AbstractDaoMaster;
+import org.greenrobot.greendao.database.Database;
+import org.greenrobot.greendao.database.DatabaseOpenHelper;
+import org.greenrobot.greendao.database.StandardDatabase;
+import org.greenrobot.greendao.identityscope.IdentityScopeType;
+
+
+// THIS CODE IS GENERATED BY greenDAO, DO NOT EDIT.
+/**
+ * Master of DAO (schema version 1): knows all DAOs.
+ */
+public class DaoMaster extends AbstractDaoMaster {
+ public static final int SCHEMA_VERSION = 1;
+
+ /** Creates underlying database table using DAOs. */
+ public static void createAllTables(Database db, boolean ifNotExists) {
+ SearchHistoryBeanDao.createTable(db, ifNotExists);
+ }
+
+ /** Drops underlying database table using DAOs. */
+ public static void dropAllTables(Database db, boolean ifExists) {
+ SearchHistoryBeanDao.dropTable(db, ifExists);
+ }
+
+ /**
+ * WARNING: Drops all table on Upgrade! Use only during development.
+ * Convenience method using a {@link DevOpenHelper}.
+ */
+ public static DaoSession newDevSession(Context context, String name) {
+ Database db = new DevOpenHelper(context, name).getWritableDb();
+ DaoMaster daoMaster = new DaoMaster(db);
+ return daoMaster.newSession();
+ }
+
+ public DaoMaster(SQLiteDatabase db) {
+ this(new StandardDatabase(db));
+ }
+
+ public DaoMaster(Database db) {
+ super(db, SCHEMA_VERSION);
+ registerDaoClass(SearchHistoryBeanDao.class);
+ }
+
+ public DaoSession newSession() {
+ return new DaoSession(db, IdentityScopeType.Session, daoConfigMap);
+ }
+
+ public DaoSession newSession(IdentityScopeType type) {
+ return new DaoSession(db, type, daoConfigMap);
+ }
+
+ /**
+ * Calls {@link #createAllTables(Database, boolean)} in {@link #onCreate(Database)} -
+ */
+ public static abstract class OpenHelper extends DatabaseOpenHelper {
+ public OpenHelper(Context context, String name) {
+ super(context, name, SCHEMA_VERSION);
+ }
+
+ public OpenHelper(Context context, String name, CursorFactory factory) {
+ super(context, name, factory, SCHEMA_VERSION);
+ }
+
+ @Override
+ public void onCreate(Database db) {
+ Log.i("greenDAO", "Creating tables for schema version " + SCHEMA_VERSION);
+ createAllTables(db, false);
+ }
+ }
+
+ /** WARNING: Drops all table on Upgrade! Use only during development. */
+ public static class DevOpenHelper extends OpenHelper {
+ public DevOpenHelper(Context context, String name) {
+ super(context, name);
+ }
+
+ public DevOpenHelper(Context context, String name, CursorFactory factory) {
+ super(context, name, factory);
+ }
+
+ @Override
+ public void onUpgrade(Database db, int oldVersion, int newVersion) {
+ Log.i("greenDAO", "Upgrading schema from version " + oldVersion + " to " + newVersion + " by dropping all tables");
+ dropAllTables(db, true);
+ onCreate(db);
+ }
+ }
+
+}
diff --git a/app/src/main/java/com/casic/xz/meterage/greendao/DaoSession.java b/app/src/main/java/com/casic/xz/meterage/greendao/DaoSession.java
new file mode 100644
index 0000000..0e80024
--- /dev/null
+++ b/app/src/main/java/com/casic/xz/meterage/greendao/DaoSession.java
@@ -0,0 +1,46 @@
+package com.casic.xz.meterage.greendao;
+
+import com.casic.xz.meterage.bean.SearchHistoryBean;
+
+import org.greenrobot.greendao.AbstractDao;
+import org.greenrobot.greendao.AbstractDaoSession;
+import org.greenrobot.greendao.database.Database;
+import org.greenrobot.greendao.identityscope.IdentityScopeType;
+import org.greenrobot.greendao.internal.DaoConfig;
+
+import java.util.Map;
+
+// THIS CODE IS GENERATED BY greenDAO, DO NOT EDIT.
+
+/**
+ * {@inheritDoc}
+ *
+ * @see org.greenrobot.greendao.AbstractDaoSession
+ */
+public class DaoSession extends AbstractDaoSession {
+
+ private final DaoConfig searchHistoryBeanDaoConfig;
+
+ private final SearchHistoryBeanDao searchHistoryBeanDao;
+
+ public DaoSession(Database db, IdentityScopeType type, Map>, DaoConfig>
+ daoConfigMap) {
+ super(db);
+
+ searchHistoryBeanDaoConfig = daoConfigMap.get(SearchHistoryBeanDao.class).clone();
+ searchHistoryBeanDaoConfig.initIdentityScope(type);
+
+ searchHistoryBeanDao = new SearchHistoryBeanDao(searchHistoryBeanDaoConfig, this);
+
+ registerDao(SearchHistoryBean.class, searchHistoryBeanDao);
+ }
+
+ public void clear() {
+ searchHistoryBeanDaoConfig.clearIdentityScope();
+ }
+
+ public SearchHistoryBeanDao getSearchHistoryBeanDao() {
+ return searchHistoryBeanDao;
+ }
+
+}
diff --git a/app/src/main/java/com/casic/xz/meterage/greendao/SearchHistoryBeanDao.java b/app/src/main/java/com/casic/xz/meterage/greendao/SearchHistoryBeanDao.java
new file mode 100644
index 0000000..5923d02
--- /dev/null
+++ b/app/src/main/java/com/casic/xz/meterage/greendao/SearchHistoryBeanDao.java
@@ -0,0 +1,185 @@
+package com.casic.xz.meterage.greendao;
+
+import android.database.Cursor;
+import android.database.sqlite.SQLiteStatement;
+
+import com.casic.xz.meterage.bean.SearchHistoryBean;
+
+import org.greenrobot.greendao.AbstractDao;
+import org.greenrobot.greendao.Property;
+import org.greenrobot.greendao.database.Database;
+import org.greenrobot.greendao.database.DatabaseStatement;
+import org.greenrobot.greendao.internal.DaoConfig;
+
+// THIS CODE IS GENERATED BY greenDAO, DO NOT EDIT.
+/**
+ * DAO for table "SEARCH_HISTORY_BEAN".
+*/
+public class SearchHistoryBeanDao extends AbstractDao {
+
+ public static final String TABLENAME = "SEARCH_HISTORY_BEAN";
+
+ /**
+ * Properties of entity SearchHistoryBean.
+ * Can be used for QueryBuilder and for referencing column names.
+ */
+ public static class Properties {
+ public final static Property Id = new Property(0, Long.class, "id", true, "_id");
+ public final static Property Uuid = new Property(1, String.class, "uuid", false, "UUID");
+ public final static Property Keywords = new Property(2, String.class, "keywords", false, "KEYWORDS");
+ public final static Property SearchType = new Property(3, String.class, "searchType", false, "SEARCH_TYPE");
+ public final static Property UserId = new Property(4, String.class, "userId", false, "USER_ID");
+ public final static Property SearchTime = new Property(5, String.class, "searchTime", false, "SEARCH_TIME");
+ }
+
+
+ public SearchHistoryBeanDao(DaoConfig config) {
+ super(config);
+ }
+
+ public SearchHistoryBeanDao(DaoConfig config, DaoSession daoSession) {
+ super(config, daoSession);
+ }
+
+ /** Creates the underlying database table. */
+ public static void createTable(Database db, boolean ifNotExists) {
+ String constraint = ifNotExists? "IF NOT EXISTS ": "";
+ db.execSQL("CREATE TABLE " + constraint + "\"SEARCH_HISTORY_BEAN\" (" + //
+ "\"_id\" INTEGER PRIMARY KEY AUTOINCREMENT ," + // 0: id
+ "\"UUID\" TEXT UNIQUE ," + // 1: uuid
+ "\"KEYWORDS\" TEXT," + // 2: keywords
+ "\"SEARCH_TYPE\" TEXT," + // 3: searchType
+ "\"USER_ID\" TEXT," + // 4: userId
+ "\"SEARCH_TIME\" TEXT);"); // 5: searchTime
+ }
+
+ /** Drops the underlying database table. */
+ public static void dropTable(Database db, boolean ifExists) {
+ String sql = "DROP TABLE " + (ifExists ? "IF EXISTS " : "") + "\"SEARCH_HISTORY_BEAN\"";
+ db.execSQL(sql);
+ }
+
+ @Override
+ protected final void bindValues(DatabaseStatement stmt, SearchHistoryBean entity) {
+ stmt.clearBindings();
+
+ Long id = entity.getId();
+ if (id != null) {
+ stmt.bindLong(1, id);
+ }
+
+ String uuid = entity.getUuid();
+ if (uuid != null) {
+ stmt.bindString(2, uuid);
+ }
+
+ String keywords = entity.getKeywords();
+ if (keywords != null) {
+ stmt.bindString(3, keywords);
+ }
+
+ String searchType = entity.getSearchType();
+ if (searchType != null) {
+ stmt.bindString(4, searchType);
+ }
+
+ String userId = entity.getUserId();
+ if (userId != null) {
+ stmt.bindString(5, userId);
+ }
+
+ String searchTime = entity.getSearchTime();
+ if (searchTime != null) {
+ stmt.bindString(6, searchTime);
+ }
+ }
+
+ @Override
+ protected final void bindValues(SQLiteStatement stmt, SearchHistoryBean entity) {
+ stmt.clearBindings();
+
+ Long id = entity.getId();
+ if (id != null) {
+ stmt.bindLong(1, id);
+ }
+
+ String uuid = entity.getUuid();
+ if (uuid != null) {
+ stmt.bindString(2, uuid);
+ }
+
+ String keywords = entity.getKeywords();
+ if (keywords != null) {
+ stmt.bindString(3, keywords);
+ }
+
+ String searchType = entity.getSearchType();
+ if (searchType != null) {
+ stmt.bindString(4, searchType);
+ }
+
+ String userId = entity.getUserId();
+ if (userId != null) {
+ stmt.bindString(5, userId);
+ }
+
+ String searchTime = entity.getSearchTime();
+ if (searchTime != null) {
+ stmt.bindString(6, searchTime);
+ }
+ }
+
+ @Override
+ public Long readKey(Cursor cursor, int offset) {
+ return cursor.isNull(offset + 0) ? null : cursor.getLong(offset + 0);
+ }
+
+ @Override
+ public SearchHistoryBean readEntity(Cursor cursor, int offset) {
+ SearchHistoryBean entity = new SearchHistoryBean( //
+ cursor.isNull(offset + 0) ? null : cursor.getLong(offset + 0), // id
+ cursor.isNull(offset + 1) ? null : cursor.getString(offset + 1), // uuid
+ cursor.isNull(offset + 2) ? null : cursor.getString(offset + 2), // keywords
+ cursor.isNull(offset + 3) ? null : cursor.getString(offset + 3), // searchType
+ cursor.isNull(offset + 4) ? null : cursor.getString(offset + 4), // userId
+ cursor.isNull(offset + 5) ? null : cursor.getString(offset + 5) // searchTime
+ );
+ return entity;
+ }
+
+ @Override
+ public void readEntity(Cursor cursor, SearchHistoryBean entity, int offset) {
+ entity.setId(cursor.isNull(offset + 0) ? null : cursor.getLong(offset + 0));
+ entity.setUuid(cursor.isNull(offset + 1) ? null : cursor.getString(offset + 1));
+ entity.setKeywords(cursor.isNull(offset + 2) ? null : cursor.getString(offset + 2));
+ entity.setSearchType(cursor.isNull(offset + 3) ? null : cursor.getString(offset + 3));
+ entity.setUserId(cursor.isNull(offset + 4) ? null : cursor.getString(offset + 4));
+ entity.setSearchTime(cursor.isNull(offset + 5) ? null : cursor.getString(offset + 5));
+ }
+
+ @Override
+ protected final Long updateKeyAfterInsert(SearchHistoryBean entity, long rowId) {
+ entity.setId(rowId);
+ return rowId;
+ }
+
+ @Override
+ public Long getKey(SearchHistoryBean entity) {
+ if(entity != null) {
+ return entity.getId();
+ } else {
+ return null;
+ }
+ }
+
+ @Override
+ public boolean hasKey(SearchHistoryBean entity) {
+ return entity.getId() != null;
+ }
+
+ @Override
+ protected final boolean isEntityUpdateable() {
+ return true;
+ }
+
+}
diff --git a/app/src/main/java/com/casic/xz/meterage/utils/DataBaseManager.kt b/app/src/main/java/com/casic/xz/meterage/utils/DataBaseManager.kt
new file mode 100644
index 0000000..52fe032
--- /dev/null
+++ b/app/src/main/java/com/casic/xz/meterage/utils/DataBaseManager.kt
@@ -0,0 +1,45 @@
+package com.casic.xz.meterage.utils
+
+import com.casic.xz.meterage.base.BaseApplication
+import com.casic.xz.meterage.bean.SearchHistoryBean
+import com.casic.xz.meterage.greendao.SearchHistoryBeanDao
+import com.pengxh.kt.lite.extensions.timestampToCompleteDate
+import com.pengxh.kt.lite.utils.SaveKeyValues
+import java.util.*
+
+class DataBaseManager private constructor() {
+
+ companion object {
+ //Kotlin委托模式双重锁单例
+ val get: DataBaseManager by lazy(mode = LazyThreadSafetyMode.SYNCHRONIZED) {
+ DataBaseManager()
+ }
+ }
+
+ private val searchBeanDao by lazy { BaseApplication.get().getDaoSession().searchHistoryBeanDao }
+ private val userId by lazy { SaveKeyValues.getValue(LocaleConstant.USER_ID, "") }
+
+ fun addSearchHistory(keywords: String, searchType: String) {
+ val bean = SearchHistoryBean()
+ bean.uuid = UUID.randomUUID().toString()
+ bean.keywords = keywords
+ bean.searchType = searchType
+ bean.userId = userId.toString()
+ bean.searchTime = System.currentTimeMillis().timestampToCompleteDate()
+ searchBeanDao.insert(bean)
+ }
+
+ fun queryHistoryByType(searchType: String): MutableList {
+ return searchBeanDao.queryBuilder().where(
+ SearchHistoryBeanDao.Properties.UserId.eq(userId),
+ SearchHistoryBeanDao.Properties.SearchType.eq(searchType)
+ ).list()
+ }
+
+ fun deleteHistoryByType(searchType: String) {
+ val list = queryHistoryByType(searchType)
+ list.forEach {
+ searchBeanDao.delete(it)
+ }
+ }
+}
\ No newline at end of file
diff --git a/app/src/main/java/com/casic/xz/meterage/utils/LocaleConstant.kt b/app/src/main/java/com/casic/xz/meterage/utils/LocaleConstant.kt
index cc2848b..2ea47a0 100644
--- a/app/src/main/java/com/casic/xz/meterage/utils/LocaleConstant.kt
+++ b/app/src/main/java/com/casic/xz/meterage/utils/LocaleConstant.kt
@@ -62,4 +62,5 @@
const val File_SERVER_URL = "http://111.198.10.15:21408"
const val ACCOUNT = "account"
const val PASSWORD = "password"
+ const val USER_ID = "userId"
}
\ No newline at end of file
diff --git a/app/src/main/java/com/casic/xz/meterage/utils/SearchType.kt b/app/src/main/java/com/casic/xz/meterage/utils/SearchType.kt
new file mode 100644
index 0000000..5f5253e
--- /dev/null
+++ b/app/src/main/java/com/casic/xz/meterage/utils/SearchType.kt
@@ -0,0 +1,8 @@
+package com.casic.xz.meterage.utils
+
+object SearchType {
+ /**
+ * 搜索仪器设备
+ * */
+ const val Equipment = "0"
+}
diff --git a/app/build.gradle b/app/build.gradle
index 298f687..e142ec1 100644
--- a/app/build.gradle
+++ b/app/build.gradle
@@ -3,6 +3,7 @@
apply plugin: 'com.android.application'
apply plugin: 'kotlin-android'
apply plugin: 'kotlin-android-extensions'
+apply plugin: 'org.greenrobot.greendao'
android {
signingConfigs {
@@ -57,6 +58,12 @@
outputFileName = "XZJL_" + getBuildDate() + "_Beta.apk"
}
}
+
+ greendao {
+ schemaVersion 1//数据库版本号
+ targetGenDir 'src/main/java'//设置DaoMaster、DaoSession、Dao目录
+ daoPackage 'com.casic.xz.meterage.greendao'//设置DaoMaster、DaoSession、Dao包名
+ }
}
static def getBuildDate() {
@@ -67,7 +74,7 @@
dependencies {
//基础依赖库
implementation 'com.github.AndroidCoderPeng:Kotlin-lite-lib:1.0.4'
- implementation 'androidx.appcompat:appcompat:1.5.1'
+ implementation 'androidx.appcompat:appcompat:1.6.1'
implementation 'androidx.core:core-ktx:1.9.0'
//Google官方授权框架
implementation 'pub.devrel:easypermissions:3.0.0'
@@ -113,4 +120,6 @@
implementation 'com.github.tiann:FreeReflection:3.1.0'
//单项/数字、二三级联动、日期/时间等滚轮选择器
implementation 'com.github.gzu-liyujiang.AndroidPicker:WheelPicker:4.1.8'
+ //数据库框架
+ implementation 'org.greenrobot:greendao:3.3.0'
}
\ No newline at end of file
diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml
index 972eff9..5b6f9b2 100644
--- a/app/src/main/AndroidManifest.xml
+++ b/app/src/main/AndroidManifest.xml
@@ -69,6 +69,8 @@
+
+
diff --git a/app/src/main/java/com/casic/xz/meterage/base/BaseApplication.kt b/app/src/main/java/com/casic/xz/meterage/base/BaseApplication.kt
index 14a604d..1684c23 100644
--- a/app/src/main/java/com/casic/xz/meterage/base/BaseApplication.kt
+++ b/app/src/main/java/com/casic/xz/meterage/base/BaseApplication.kt
@@ -2,6 +2,8 @@
import android.app.Application
import android.content.Context
+import com.casic.xz.meterage.greendao.DaoMaster
+import com.casic.xz.meterage.greendao.DaoSession
import com.pengxh.kt.lite.utils.SaveKeyValues
import me.weishu.reflection.Reflection
import kotlin.properties.Delegates
@@ -12,12 +14,22 @@
private var application: BaseApplication by Delegates.notNull()
fun get() = application
+
+ private lateinit var daoSession: DaoSession
}
override fun onCreate() {
super.onCreate()
application = this
SaveKeyValues.initSharedPreferences(this)
+
+ val devOpenHelper = DaoMaster.DevOpenHelper(this, "Meterage.db", null)
+ val daoMaster = DaoMaster(devOpenHelper.writableDatabase)
+ daoSession = daoMaster.newSession()
+ }
+
+ fun getDaoSession(): DaoSession {
+ return daoSession
}
//绕过Android 11以上反射限制
diff --git a/app/src/main/java/com/casic/xz/meterage/bean/SearchHistoryBean.java b/app/src/main/java/com/casic/xz/meterage/bean/SearchHistoryBean.java
new file mode 100644
index 0000000..6a46a3a
--- /dev/null
+++ b/app/src/main/java/com/casic/xz/meterage/bean/SearchHistoryBean.java
@@ -0,0 +1,82 @@
+package com.casic.xz.meterage.bean;
+
+import org.greenrobot.greendao.annotation.Entity;
+import org.greenrobot.greendao.annotation.Generated;
+import org.greenrobot.greendao.annotation.Id;
+import org.greenrobot.greendao.annotation.Unique;
+
+@Entity
+public class SearchHistoryBean {
+ @Id(autoincrement = true)
+ private Long id;//主键自增
+
+ @Unique
+ private String uuid;
+ private String keywords;//查询条件-关键字
+ private String searchType;//查询类型
+ private String userId;//用户Id
+ private String searchTime;//查询的时间
+
+ @Generated(hash = 2130561778)
+ public SearchHistoryBean(Long id, String uuid, String keywords,
+ String searchType, String userId, String searchTime) {
+ this.id = id;
+ this.uuid = uuid;
+ this.keywords = keywords;
+ this.searchType = searchType;
+ this.userId = userId;
+ this.searchTime = searchTime;
+ }
+
+ @Generated(hash = 1570282321)
+ public SearchHistoryBean() {
+ }
+
+ public Long getId() {
+ return this.id;
+ }
+
+ public void setId(Long id) {
+ this.id = id;
+ }
+
+ public String getUuid() {
+ return this.uuid;
+ }
+
+ public void setUuid(String uuid) {
+ this.uuid = uuid;
+ }
+
+ public String getKeywords() {
+ return this.keywords;
+ }
+
+ public void setKeywords(String keywords) {
+ this.keywords = keywords;
+ }
+
+ public String getSearchType() {
+ return this.searchType;
+ }
+
+ public void setSearchType(String searchType) {
+ this.searchType = searchType;
+ }
+
+ public String getUserId() {
+ return this.userId;
+ }
+
+ public void setUserId(String userId) {
+ this.userId = userId;
+ }
+
+ public String getSearchTime() {
+ return this.searchTime;
+ }
+
+ public void setSearchTime(String searchTime) {
+ this.searchTime = searchTime;
+ }
+}
diff --git a/app/src/main/java/com/casic/xz/meterage/fragment/HomePageFragment.kt b/app/src/main/java/com/casic/xz/meterage/fragment/HomePageFragment.kt
index 151f951..ae7f5e4 100644
--- a/app/src/main/java/com/casic/xz/meterage/fragment/HomePageFragment.kt
+++ b/app/src/main/java/com/casic/xz/meterage/fragment/HomePageFragment.kt
@@ -15,22 +15,20 @@
import com.casic.xz.meterage.extensions.showEmptyPage
import com.casic.xz.meterage.model.NoticeListModel
import com.casic.xz.meterage.model.RemindListModel
-import com.casic.xz.meterage.model.UserInfoModel
import com.casic.xz.meterage.utils.LoadingDialogHub
import com.casic.xz.meterage.utils.LocaleConstant
import com.casic.xz.meterage.utils.QrConfigCreator
import com.casic.xz.meterage.view.home.*
import com.casic.xz.meterage.view.notice.NoticeListActivity
+import com.casic.xz.meterage.view.search.SearchAllActivity
import com.casic.xz.meterage.vm.MeterageTrainViewModel
import com.casic.xz.meterage.vm.NoticeViewModel
-import com.casic.xz.meterage.vm.UserViewModel
import com.pengxh.kt.lite.adapter.NormalRecyclerAdapter
import com.pengxh.kt.lite.adapter.ViewHolder
import com.pengxh.kt.lite.base.KotlinBaseFragment
import com.pengxh.kt.lite.extensions.convertColor
import com.pengxh.kt.lite.extensions.navigatePageTo
import com.pengxh.kt.lite.extensions.show
-import com.pengxh.kt.lite.utils.SaveKeyValues
import com.pengxh.kt.lite.utils.WeakReferenceHandler
import com.pengxh.kt.lite.vm.LoadState
import com.pengxh.kt.lite.widget.dialog.AlertControlDialog
@@ -39,13 +37,12 @@
import kotlinx.android.synthetic.main.include_empty_view.*
import java.util.*
-class HomePageFragment : KotlinBaseFragment() {
+class HomePageFragment(private val userId: String) : KotlinBaseFragment() {
private val timer = object : Timer() {}
private lateinit var weakReferenceHandler: WeakReferenceHandler
private lateinit var meterageTrainViewModel: MeterageTrainViewModel
private lateinit var noticeViewModel: NoticeViewModel
- private lateinit var userData: UserInfoModel.DataModel
private lateinit var remindAdapter: NormalRecyclerAdapter
private var dataBeans: MutableList = ArrayList()
private var noticeBeans: MutableList = ArrayList()
@@ -170,14 +167,6 @@
true
}
- val userViewModel = ViewModelProvider(this)[UserViewModel::class.java]
- userViewModel.getUserInfo(SaveKeyValues.getValue(LocaleConstant.ACCOUNT, "") as String)
- userViewModel.userInfo.observe(this) {
- if (it.code == 200) {
- userData = it.data
- }
- }
-
meterageTrainViewModel = ViewModelProvider(this)[MeterageTrainViewModel::class.java]
meterageTrainViewModel.signInResult.observe(this) {
if (it.code == 200) {
@@ -296,10 +285,14 @@
}
override fun initEvent() {
+ searchBar.setOnClickListener {
+ requireContext().navigatePageTo()
+ }
+
scanCodeView.setOnClickListener {
qrManager.startScan(requireActivity()) { result ->
if (result.content.isDigitsOnly()) {
- meterageTrainViewModel.signIn(userData.id, result.content)
+ meterageTrainViewModel.signIn(userId, result.content)
} else {
"签到二维码错误,请重新扫描".show(requireContext())
}
diff --git a/app/src/main/java/com/casic/xz/meterage/greendao/DaoMaster.java b/app/src/main/java/com/casic/xz/meterage/greendao/DaoMaster.java
new file mode 100644
index 0000000..d714ce2
--- /dev/null
+++ b/app/src/main/java/com/casic/xz/meterage/greendao/DaoMaster.java
@@ -0,0 +1,96 @@
+package com.casic.xz.meterage.greendao;
+
+import android.content.Context;
+import android.database.sqlite.SQLiteDatabase;
+import android.database.sqlite.SQLiteDatabase.CursorFactory;
+import android.util.Log;
+
+import org.greenrobot.greendao.AbstractDaoMaster;
+import org.greenrobot.greendao.database.Database;
+import org.greenrobot.greendao.database.DatabaseOpenHelper;
+import org.greenrobot.greendao.database.StandardDatabase;
+import org.greenrobot.greendao.identityscope.IdentityScopeType;
+
+
+// THIS CODE IS GENERATED BY greenDAO, DO NOT EDIT.
+/**
+ * Master of DAO (schema version 1): knows all DAOs.
+ */
+public class DaoMaster extends AbstractDaoMaster {
+ public static final int SCHEMA_VERSION = 1;
+
+ /** Creates underlying database table using DAOs. */
+ public static void createAllTables(Database db, boolean ifNotExists) {
+ SearchHistoryBeanDao.createTable(db, ifNotExists);
+ }
+
+ /** Drops underlying database table using DAOs. */
+ public static void dropAllTables(Database db, boolean ifExists) {
+ SearchHistoryBeanDao.dropTable(db, ifExists);
+ }
+
+ /**
+ * WARNING: Drops all table on Upgrade! Use only during development.
+ * Convenience method using a {@link DevOpenHelper}.
+ */
+ public static DaoSession newDevSession(Context context, String name) {
+ Database db = new DevOpenHelper(context, name).getWritableDb();
+ DaoMaster daoMaster = new DaoMaster(db);
+ return daoMaster.newSession();
+ }
+
+ public DaoMaster(SQLiteDatabase db) {
+ this(new StandardDatabase(db));
+ }
+
+ public DaoMaster(Database db) {
+ super(db, SCHEMA_VERSION);
+ registerDaoClass(SearchHistoryBeanDao.class);
+ }
+
+ public DaoSession newSession() {
+ return new DaoSession(db, IdentityScopeType.Session, daoConfigMap);
+ }
+
+ public DaoSession newSession(IdentityScopeType type) {
+ return new DaoSession(db, type, daoConfigMap);
+ }
+
+ /**
+ * Calls {@link #createAllTables(Database, boolean)} in {@link #onCreate(Database)} -
+ */
+ public static abstract class OpenHelper extends DatabaseOpenHelper {
+ public OpenHelper(Context context, String name) {
+ super(context, name, SCHEMA_VERSION);
+ }
+
+ public OpenHelper(Context context, String name, CursorFactory factory) {
+ super(context, name, factory, SCHEMA_VERSION);
+ }
+
+ @Override
+ public void onCreate(Database db) {
+ Log.i("greenDAO", "Creating tables for schema version " + SCHEMA_VERSION);
+ createAllTables(db, false);
+ }
+ }
+
+ /** WARNING: Drops all table on Upgrade! Use only during development. */
+ public static class DevOpenHelper extends OpenHelper {
+ public DevOpenHelper(Context context, String name) {
+ super(context, name);
+ }
+
+ public DevOpenHelper(Context context, String name, CursorFactory factory) {
+ super(context, name, factory);
+ }
+
+ @Override
+ public void onUpgrade(Database db, int oldVersion, int newVersion) {
+ Log.i("greenDAO", "Upgrading schema from version " + oldVersion + " to " + newVersion + " by dropping all tables");
+ dropAllTables(db, true);
+ onCreate(db);
+ }
+ }
+
+}
diff --git a/app/src/main/java/com/casic/xz/meterage/greendao/DaoSession.java b/app/src/main/java/com/casic/xz/meterage/greendao/DaoSession.java
new file mode 100644
index 0000000..0e80024
--- /dev/null
+++ b/app/src/main/java/com/casic/xz/meterage/greendao/DaoSession.java
@@ -0,0 +1,46 @@
+package com.casic.xz.meterage.greendao;
+
+import com.casic.xz.meterage.bean.SearchHistoryBean;
+
+import org.greenrobot.greendao.AbstractDao;
+import org.greenrobot.greendao.AbstractDaoSession;
+import org.greenrobot.greendao.database.Database;
+import org.greenrobot.greendao.identityscope.IdentityScopeType;
+import org.greenrobot.greendao.internal.DaoConfig;
+
+import java.util.Map;
+
+// THIS CODE IS GENERATED BY greenDAO, DO NOT EDIT.
+
+/**
+ * {@inheritDoc}
+ *
+ * @see org.greenrobot.greendao.AbstractDaoSession
+ */
+public class DaoSession extends AbstractDaoSession {
+
+ private final DaoConfig searchHistoryBeanDaoConfig;
+
+ private final SearchHistoryBeanDao searchHistoryBeanDao;
+
+ public DaoSession(Database db, IdentityScopeType type, Map>, DaoConfig>
+ daoConfigMap) {
+ super(db);
+
+ searchHistoryBeanDaoConfig = daoConfigMap.get(SearchHistoryBeanDao.class).clone();
+ searchHistoryBeanDaoConfig.initIdentityScope(type);
+
+ searchHistoryBeanDao = new SearchHistoryBeanDao(searchHistoryBeanDaoConfig, this);
+
+ registerDao(SearchHistoryBean.class, searchHistoryBeanDao);
+ }
+
+ public void clear() {
+ searchHistoryBeanDaoConfig.clearIdentityScope();
+ }
+
+ public SearchHistoryBeanDao getSearchHistoryBeanDao() {
+ return searchHistoryBeanDao;
+ }
+
+}
diff --git a/app/src/main/java/com/casic/xz/meterage/greendao/SearchHistoryBeanDao.java b/app/src/main/java/com/casic/xz/meterage/greendao/SearchHistoryBeanDao.java
new file mode 100644
index 0000000..5923d02
--- /dev/null
+++ b/app/src/main/java/com/casic/xz/meterage/greendao/SearchHistoryBeanDao.java
@@ -0,0 +1,185 @@
+package com.casic.xz.meterage.greendao;
+
+import android.database.Cursor;
+import android.database.sqlite.SQLiteStatement;
+
+import com.casic.xz.meterage.bean.SearchHistoryBean;
+
+import org.greenrobot.greendao.AbstractDao;
+import org.greenrobot.greendao.Property;
+import org.greenrobot.greendao.database.Database;
+import org.greenrobot.greendao.database.DatabaseStatement;
+import org.greenrobot.greendao.internal.DaoConfig;
+
+// THIS CODE IS GENERATED BY greenDAO, DO NOT EDIT.
+/**
+ * DAO for table "SEARCH_HISTORY_BEAN".
+*/
+public class SearchHistoryBeanDao extends AbstractDao {
+
+ public static final String TABLENAME = "SEARCH_HISTORY_BEAN";
+
+ /**
+ * Properties of entity SearchHistoryBean.
+ * Can be used for QueryBuilder and for referencing column names.
+ */
+ public static class Properties {
+ public final static Property Id = new Property(0, Long.class, "id", true, "_id");
+ public final static Property Uuid = new Property(1, String.class, "uuid", false, "UUID");
+ public final static Property Keywords = new Property(2, String.class, "keywords", false, "KEYWORDS");
+ public final static Property SearchType = new Property(3, String.class, "searchType", false, "SEARCH_TYPE");
+ public final static Property UserId = new Property(4, String.class, "userId", false, "USER_ID");
+ public final static Property SearchTime = new Property(5, String.class, "searchTime", false, "SEARCH_TIME");
+ }
+
+
+ public SearchHistoryBeanDao(DaoConfig config) {
+ super(config);
+ }
+
+ public SearchHistoryBeanDao(DaoConfig config, DaoSession daoSession) {
+ super(config, daoSession);
+ }
+
+ /** Creates the underlying database table. */
+ public static void createTable(Database db, boolean ifNotExists) {
+ String constraint = ifNotExists? "IF NOT EXISTS ": "";
+ db.execSQL("CREATE TABLE " + constraint + "\"SEARCH_HISTORY_BEAN\" (" + //
+ "\"_id\" INTEGER PRIMARY KEY AUTOINCREMENT ," + // 0: id
+ "\"UUID\" TEXT UNIQUE ," + // 1: uuid
+ "\"KEYWORDS\" TEXT," + // 2: keywords
+ "\"SEARCH_TYPE\" TEXT," + // 3: searchType
+ "\"USER_ID\" TEXT," + // 4: userId
+ "\"SEARCH_TIME\" TEXT);"); // 5: searchTime
+ }
+
+ /** Drops the underlying database table. */
+ public static void dropTable(Database db, boolean ifExists) {
+ String sql = "DROP TABLE " + (ifExists ? "IF EXISTS " : "") + "\"SEARCH_HISTORY_BEAN\"";
+ db.execSQL(sql);
+ }
+
+ @Override
+ protected final void bindValues(DatabaseStatement stmt, SearchHistoryBean entity) {
+ stmt.clearBindings();
+
+ Long id = entity.getId();
+ if (id != null) {
+ stmt.bindLong(1, id);
+ }
+
+ String uuid = entity.getUuid();
+ if (uuid != null) {
+ stmt.bindString(2, uuid);
+ }
+
+ String keywords = entity.getKeywords();
+ if (keywords != null) {
+ stmt.bindString(3, keywords);
+ }
+
+ String searchType = entity.getSearchType();
+ if (searchType != null) {
+ stmt.bindString(4, searchType);
+ }
+
+ String userId = entity.getUserId();
+ if (userId != null) {
+ stmt.bindString(5, userId);
+ }
+
+ String searchTime = entity.getSearchTime();
+ if (searchTime != null) {
+ stmt.bindString(6, searchTime);
+ }
+ }
+
+ @Override
+ protected final void bindValues(SQLiteStatement stmt, SearchHistoryBean entity) {
+ stmt.clearBindings();
+
+ Long id = entity.getId();
+ if (id != null) {
+ stmt.bindLong(1, id);
+ }
+
+ String uuid = entity.getUuid();
+ if (uuid != null) {
+ stmt.bindString(2, uuid);
+ }
+
+ String keywords = entity.getKeywords();
+ if (keywords != null) {
+ stmt.bindString(3, keywords);
+ }
+
+ String searchType = entity.getSearchType();
+ if (searchType != null) {
+ stmt.bindString(4, searchType);
+ }
+
+ String userId = entity.getUserId();
+ if (userId != null) {
+ stmt.bindString(5, userId);
+ }
+
+ String searchTime = entity.getSearchTime();
+ if (searchTime != null) {
+ stmt.bindString(6, searchTime);
+ }
+ }
+
+ @Override
+ public Long readKey(Cursor cursor, int offset) {
+ return cursor.isNull(offset + 0) ? null : cursor.getLong(offset + 0);
+ }
+
+ @Override
+ public SearchHistoryBean readEntity(Cursor cursor, int offset) {
+ SearchHistoryBean entity = new SearchHistoryBean( //
+ cursor.isNull(offset + 0) ? null : cursor.getLong(offset + 0), // id
+ cursor.isNull(offset + 1) ? null : cursor.getString(offset + 1), // uuid
+ cursor.isNull(offset + 2) ? null : cursor.getString(offset + 2), // keywords
+ cursor.isNull(offset + 3) ? null : cursor.getString(offset + 3), // searchType
+ cursor.isNull(offset + 4) ? null : cursor.getString(offset + 4), // userId
+ cursor.isNull(offset + 5) ? null : cursor.getString(offset + 5) // searchTime
+ );
+ return entity;
+ }
+
+ @Override
+ public void readEntity(Cursor cursor, SearchHistoryBean entity, int offset) {
+ entity.setId(cursor.isNull(offset + 0) ? null : cursor.getLong(offset + 0));
+ entity.setUuid(cursor.isNull(offset + 1) ? null : cursor.getString(offset + 1));
+ entity.setKeywords(cursor.isNull(offset + 2) ? null : cursor.getString(offset + 2));
+ entity.setSearchType(cursor.isNull(offset + 3) ? null : cursor.getString(offset + 3));
+ entity.setUserId(cursor.isNull(offset + 4) ? null : cursor.getString(offset + 4));
+ entity.setSearchTime(cursor.isNull(offset + 5) ? null : cursor.getString(offset + 5));
+ }
+
+ @Override
+ protected final Long updateKeyAfterInsert(SearchHistoryBean entity, long rowId) {
+ entity.setId(rowId);
+ return rowId;
+ }
+
+ @Override
+ public Long getKey(SearchHistoryBean entity) {
+ if(entity != null) {
+ return entity.getId();
+ } else {
+ return null;
+ }
+ }
+
+ @Override
+ public boolean hasKey(SearchHistoryBean entity) {
+ return entity.getId() != null;
+ }
+
+ @Override
+ protected final boolean isEntityUpdateable() {
+ return true;
+ }
+
+}
diff --git a/app/src/main/java/com/casic/xz/meterage/utils/DataBaseManager.kt b/app/src/main/java/com/casic/xz/meterage/utils/DataBaseManager.kt
new file mode 100644
index 0000000..52fe032
--- /dev/null
+++ b/app/src/main/java/com/casic/xz/meterage/utils/DataBaseManager.kt
@@ -0,0 +1,45 @@
+package com.casic.xz.meterage.utils
+
+import com.casic.xz.meterage.base.BaseApplication
+import com.casic.xz.meterage.bean.SearchHistoryBean
+import com.casic.xz.meterage.greendao.SearchHistoryBeanDao
+import com.pengxh.kt.lite.extensions.timestampToCompleteDate
+import com.pengxh.kt.lite.utils.SaveKeyValues
+import java.util.*
+
+class DataBaseManager private constructor() {
+
+ companion object {
+ //Kotlin委托模式双重锁单例
+ val get: DataBaseManager by lazy(mode = LazyThreadSafetyMode.SYNCHRONIZED) {
+ DataBaseManager()
+ }
+ }
+
+ private val searchBeanDao by lazy { BaseApplication.get().getDaoSession().searchHistoryBeanDao }
+ private val userId by lazy { SaveKeyValues.getValue(LocaleConstant.USER_ID, "") }
+
+ fun addSearchHistory(keywords: String, searchType: String) {
+ val bean = SearchHistoryBean()
+ bean.uuid = UUID.randomUUID().toString()
+ bean.keywords = keywords
+ bean.searchType = searchType
+ bean.userId = userId.toString()
+ bean.searchTime = System.currentTimeMillis().timestampToCompleteDate()
+ searchBeanDao.insert(bean)
+ }
+
+ fun queryHistoryByType(searchType: String): MutableList {
+ return searchBeanDao.queryBuilder().where(
+ SearchHistoryBeanDao.Properties.UserId.eq(userId),
+ SearchHistoryBeanDao.Properties.SearchType.eq(searchType)
+ ).list()
+ }
+
+ fun deleteHistoryByType(searchType: String) {
+ val list = queryHistoryByType(searchType)
+ list.forEach {
+ searchBeanDao.delete(it)
+ }
+ }
+}
\ No newline at end of file
diff --git a/app/src/main/java/com/casic/xz/meterage/utils/LocaleConstant.kt b/app/src/main/java/com/casic/xz/meterage/utils/LocaleConstant.kt
index cc2848b..2ea47a0 100644
--- a/app/src/main/java/com/casic/xz/meterage/utils/LocaleConstant.kt
+++ b/app/src/main/java/com/casic/xz/meterage/utils/LocaleConstant.kt
@@ -62,4 +62,5 @@
const val File_SERVER_URL = "http://111.198.10.15:21408"
const val ACCOUNT = "account"
const val PASSWORD = "password"
+ const val USER_ID = "userId"
}
\ No newline at end of file
diff --git a/app/src/main/java/com/casic/xz/meterage/utils/SearchType.kt b/app/src/main/java/com/casic/xz/meterage/utils/SearchType.kt
new file mode 100644
index 0000000..5f5253e
--- /dev/null
+++ b/app/src/main/java/com/casic/xz/meterage/utils/SearchType.kt
@@ -0,0 +1,8 @@
+package com.casic.xz.meterage.utils
+
+object SearchType {
+ /**
+ * 搜索仪器设备
+ * */
+ const val Equipment = "0"
+}
diff --git a/app/src/main/java/com/casic/xz/meterage/view/MainActivity.kt b/app/src/main/java/com/casic/xz/meterage/view/MainActivity.kt
index 28836e0..8fb0793 100644
--- a/app/src/main/java/com/casic/xz/meterage/view/MainActivity.kt
+++ b/app/src/main/java/com/casic/xz/meterage/view/MainActivity.kt
@@ -3,15 +3,19 @@
import android.view.KeyEvent
import android.view.MenuItem
import androidx.fragment.app.Fragment
+import androidx.lifecycle.ViewModelProvider
import androidx.viewpager.widget.ViewPager
import com.casic.xz.meterage.R
import com.casic.xz.meterage.adapter.ViewPagerAdapter
import com.casic.xz.meterage.fragment.HomePageFragment
import com.casic.xz.meterage.fragment.MinePageFragment
import com.casic.xz.meterage.fragment.SamplePageFragment
+import com.casic.xz.meterage.utils.LocaleConstant
+import com.casic.xz.meterage.vm.UserViewModel
import com.gyf.immersionbar.ImmersionBar
import com.pengxh.kt.lite.base.KotlinBaseActivity
import com.pengxh.kt.lite.extensions.show
+import com.pengxh.kt.lite.utils.SaveKeyValues
import kotlinx.android.synthetic.main.activity_main.*
class MainActivity : KotlinBaseActivity() {
@@ -20,53 +24,59 @@
private var fragmentPages: ArrayList = ArrayList()
private var clickTime: Long = 0
- init {
- fragmentPages.add(HomePageFragment())
- fragmentPages.add(SamplePageFragment())
- fragmentPages.add(MinePageFragment())
- }
-
override fun initData() {
- bottomNavigation.itemIconTintList = null
- bottomNavigation.setOnNavigationItemSelectedListener { menuItem ->
- when (menuItem.itemId) {
- R.id.nav_home -> {
- mainViewPager.currentItem = 0
+ val userViewModel = ViewModelProvider(this)[UserViewModel::class.java]
+ userViewModel.getUserInfo(SaveKeyValues.getValue(LocaleConstant.ACCOUNT, "") as String)
+ userViewModel.userInfo.observe(this) {
+ if (it.code == 200) {
+ SaveKeyValues.putValue(LocaleConstant.USER_ID, it.data.id)
+
+ fragmentPages.add(HomePageFragment(it.data.id))
+ fragmentPages.add(SamplePageFragment())
+ fragmentPages.add(MinePageFragment())
+
+ bottomNavigation.itemIconTintList = null
+ bottomNavigation.setOnNavigationItemSelectedListener { menuItem ->
+ when (menuItem.itemId) {
+ R.id.nav_home -> {
+ mainViewPager.currentItem = 0
+ }
+ R.id.nav_sample -> {
+ mainViewPager.currentItem = 1
+ }
+ R.id.nav_mine -> {
+ mainViewPager.currentItem = 2
+ }
+ }
+ false
}
- R.id.nav_sample -> {
- mainViewPager.currentItem = 1
- }
- R.id.nav_mine -> {
- mainViewPager.currentItem = 2
- }
+ mainViewPager.adapter = ViewPagerAdapter(fragmentPages, supportFragmentManager)
+ mainViewPager.offscreenPageLimit = fragmentPages.size //缓存页数
+ mainViewPager.addOnPageChangeListener(object : ViewPager.OnPageChangeListener {
+ override fun onPageScrollStateChanged(state: Int) {
+
+ }
+
+ override fun onPageScrolled(
+ position: Int,
+ positionOffset: Float,
+ positionOffsetPixels: Int
+ ) {
+
+ }
+
+ override fun onPageSelected(position: Int) {
+ if (menuItem != null) {
+ menuItem!!.isChecked = false
+ } else {
+ bottomNavigation.menu.getItem(0).isChecked = false
+ }
+ menuItem = bottomNavigation.menu.getItem(position)
+ menuItem!!.isChecked = true
+ }
+ })
}
- false
}
- mainViewPager.adapter = ViewPagerAdapter(fragmentPages, supportFragmentManager)
- mainViewPager.offscreenPageLimit = fragmentPages.size //缓存页数
- mainViewPager.addOnPageChangeListener(object : ViewPager.OnPageChangeListener {
- override fun onPageScrollStateChanged(state: Int) {
-
- }
-
- override fun onPageScrolled(
- position: Int,
- positionOffset: Float,
- positionOffsetPixels: Int
- ) {
-
- }
-
- override fun onPageSelected(position: Int) {
- if (menuItem != null) {
- menuItem!!.isChecked = false
- } else {
- bottomNavigation.menu.getItem(0).isChecked = false
- }
- menuItem = bottomNavigation.menu.getItem(position)
- menuItem!!.isChecked = true
- }
- })
}
override fun initEvent() {
diff --git a/app/build.gradle b/app/build.gradle
index 298f687..e142ec1 100644
--- a/app/build.gradle
+++ b/app/build.gradle
@@ -3,6 +3,7 @@
apply plugin: 'com.android.application'
apply plugin: 'kotlin-android'
apply plugin: 'kotlin-android-extensions'
+apply plugin: 'org.greenrobot.greendao'
android {
signingConfigs {
@@ -57,6 +58,12 @@
outputFileName = "XZJL_" + getBuildDate() + "_Beta.apk"
}
}
+
+ greendao {
+ schemaVersion 1//数据库版本号
+ targetGenDir 'src/main/java'//设置DaoMaster、DaoSession、Dao目录
+ daoPackage 'com.casic.xz.meterage.greendao'//设置DaoMaster、DaoSession、Dao包名
+ }
}
static def getBuildDate() {
@@ -67,7 +74,7 @@
dependencies {
//基础依赖库
implementation 'com.github.AndroidCoderPeng:Kotlin-lite-lib:1.0.4'
- implementation 'androidx.appcompat:appcompat:1.5.1'
+ implementation 'androidx.appcompat:appcompat:1.6.1'
implementation 'androidx.core:core-ktx:1.9.0'
//Google官方授权框架
implementation 'pub.devrel:easypermissions:3.0.0'
@@ -113,4 +120,6 @@
implementation 'com.github.tiann:FreeReflection:3.1.0'
//单项/数字、二三级联动、日期/时间等滚轮选择器
implementation 'com.github.gzu-liyujiang.AndroidPicker:WheelPicker:4.1.8'
+ //数据库框架
+ implementation 'org.greenrobot:greendao:3.3.0'
}
\ No newline at end of file
diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml
index 972eff9..5b6f9b2 100644
--- a/app/src/main/AndroidManifest.xml
+++ b/app/src/main/AndroidManifest.xml
@@ -69,6 +69,8 @@
+
+
diff --git a/app/src/main/java/com/casic/xz/meterage/base/BaseApplication.kt b/app/src/main/java/com/casic/xz/meterage/base/BaseApplication.kt
index 14a604d..1684c23 100644
--- a/app/src/main/java/com/casic/xz/meterage/base/BaseApplication.kt
+++ b/app/src/main/java/com/casic/xz/meterage/base/BaseApplication.kt
@@ -2,6 +2,8 @@
import android.app.Application
import android.content.Context
+import com.casic.xz.meterage.greendao.DaoMaster
+import com.casic.xz.meterage.greendao.DaoSession
import com.pengxh.kt.lite.utils.SaveKeyValues
import me.weishu.reflection.Reflection
import kotlin.properties.Delegates
@@ -12,12 +14,22 @@
private var application: BaseApplication by Delegates.notNull()
fun get() = application
+
+ private lateinit var daoSession: DaoSession
}
override fun onCreate() {
super.onCreate()
application = this
SaveKeyValues.initSharedPreferences(this)
+
+ val devOpenHelper = DaoMaster.DevOpenHelper(this, "Meterage.db", null)
+ val daoMaster = DaoMaster(devOpenHelper.writableDatabase)
+ daoSession = daoMaster.newSession()
+ }
+
+ fun getDaoSession(): DaoSession {
+ return daoSession
}
//绕过Android 11以上反射限制
diff --git a/app/src/main/java/com/casic/xz/meterage/bean/SearchHistoryBean.java b/app/src/main/java/com/casic/xz/meterage/bean/SearchHistoryBean.java
new file mode 100644
index 0000000..6a46a3a
--- /dev/null
+++ b/app/src/main/java/com/casic/xz/meterage/bean/SearchHistoryBean.java
@@ -0,0 +1,82 @@
+package com.casic.xz.meterage.bean;
+
+import org.greenrobot.greendao.annotation.Entity;
+import org.greenrobot.greendao.annotation.Generated;
+import org.greenrobot.greendao.annotation.Id;
+import org.greenrobot.greendao.annotation.Unique;
+
+@Entity
+public class SearchHistoryBean {
+ @Id(autoincrement = true)
+ private Long id;//主键自增
+
+ @Unique
+ private String uuid;
+ private String keywords;//查询条件-关键字
+ private String searchType;//查询类型
+ private String userId;//用户Id
+ private String searchTime;//查询的时间
+
+ @Generated(hash = 2130561778)
+ public SearchHistoryBean(Long id, String uuid, String keywords,
+ String searchType, String userId, String searchTime) {
+ this.id = id;
+ this.uuid = uuid;
+ this.keywords = keywords;
+ this.searchType = searchType;
+ this.userId = userId;
+ this.searchTime = searchTime;
+ }
+
+ @Generated(hash = 1570282321)
+ public SearchHistoryBean() {
+ }
+
+ public Long getId() {
+ return this.id;
+ }
+
+ public void setId(Long id) {
+ this.id = id;
+ }
+
+ public String getUuid() {
+ return this.uuid;
+ }
+
+ public void setUuid(String uuid) {
+ this.uuid = uuid;
+ }
+
+ public String getKeywords() {
+ return this.keywords;
+ }
+
+ public void setKeywords(String keywords) {
+ this.keywords = keywords;
+ }
+
+ public String getSearchType() {
+ return this.searchType;
+ }
+
+ public void setSearchType(String searchType) {
+ this.searchType = searchType;
+ }
+
+ public String getUserId() {
+ return this.userId;
+ }
+
+ public void setUserId(String userId) {
+ this.userId = userId;
+ }
+
+ public String getSearchTime() {
+ return this.searchTime;
+ }
+
+ public void setSearchTime(String searchTime) {
+ this.searchTime = searchTime;
+ }
+}
diff --git a/app/src/main/java/com/casic/xz/meterage/fragment/HomePageFragment.kt b/app/src/main/java/com/casic/xz/meterage/fragment/HomePageFragment.kt
index 151f951..ae7f5e4 100644
--- a/app/src/main/java/com/casic/xz/meterage/fragment/HomePageFragment.kt
+++ b/app/src/main/java/com/casic/xz/meterage/fragment/HomePageFragment.kt
@@ -15,22 +15,20 @@
import com.casic.xz.meterage.extensions.showEmptyPage
import com.casic.xz.meterage.model.NoticeListModel
import com.casic.xz.meterage.model.RemindListModel
-import com.casic.xz.meterage.model.UserInfoModel
import com.casic.xz.meterage.utils.LoadingDialogHub
import com.casic.xz.meterage.utils.LocaleConstant
import com.casic.xz.meterage.utils.QrConfigCreator
import com.casic.xz.meterage.view.home.*
import com.casic.xz.meterage.view.notice.NoticeListActivity
+import com.casic.xz.meterage.view.search.SearchAllActivity
import com.casic.xz.meterage.vm.MeterageTrainViewModel
import com.casic.xz.meterage.vm.NoticeViewModel
-import com.casic.xz.meterage.vm.UserViewModel
import com.pengxh.kt.lite.adapter.NormalRecyclerAdapter
import com.pengxh.kt.lite.adapter.ViewHolder
import com.pengxh.kt.lite.base.KotlinBaseFragment
import com.pengxh.kt.lite.extensions.convertColor
import com.pengxh.kt.lite.extensions.navigatePageTo
import com.pengxh.kt.lite.extensions.show
-import com.pengxh.kt.lite.utils.SaveKeyValues
import com.pengxh.kt.lite.utils.WeakReferenceHandler
import com.pengxh.kt.lite.vm.LoadState
import com.pengxh.kt.lite.widget.dialog.AlertControlDialog
@@ -39,13 +37,12 @@
import kotlinx.android.synthetic.main.include_empty_view.*
import java.util.*
-class HomePageFragment : KotlinBaseFragment() {
+class HomePageFragment(private val userId: String) : KotlinBaseFragment() {
private val timer = object : Timer() {}
private lateinit var weakReferenceHandler: WeakReferenceHandler
private lateinit var meterageTrainViewModel: MeterageTrainViewModel
private lateinit var noticeViewModel: NoticeViewModel
- private lateinit var userData: UserInfoModel.DataModel
private lateinit var remindAdapter: NormalRecyclerAdapter
private var dataBeans: MutableList = ArrayList()
private var noticeBeans: MutableList = ArrayList()
@@ -170,14 +167,6 @@
true
}
- val userViewModel = ViewModelProvider(this)[UserViewModel::class.java]
- userViewModel.getUserInfo(SaveKeyValues.getValue(LocaleConstant.ACCOUNT, "") as String)
- userViewModel.userInfo.observe(this) {
- if (it.code == 200) {
- userData = it.data
- }
- }
-
meterageTrainViewModel = ViewModelProvider(this)[MeterageTrainViewModel::class.java]
meterageTrainViewModel.signInResult.observe(this) {
if (it.code == 200) {
@@ -296,10 +285,14 @@
}
override fun initEvent() {
+ searchBar.setOnClickListener {
+ requireContext().navigatePageTo()
+ }
+
scanCodeView.setOnClickListener {
qrManager.startScan(requireActivity()) { result ->
if (result.content.isDigitsOnly()) {
- meterageTrainViewModel.signIn(userData.id, result.content)
+ meterageTrainViewModel.signIn(userId, result.content)
} else {
"签到二维码错误,请重新扫描".show(requireContext())
}
diff --git a/app/src/main/java/com/casic/xz/meterage/greendao/DaoMaster.java b/app/src/main/java/com/casic/xz/meterage/greendao/DaoMaster.java
new file mode 100644
index 0000000..d714ce2
--- /dev/null
+++ b/app/src/main/java/com/casic/xz/meterage/greendao/DaoMaster.java
@@ -0,0 +1,96 @@
+package com.casic.xz.meterage.greendao;
+
+import android.content.Context;
+import android.database.sqlite.SQLiteDatabase;
+import android.database.sqlite.SQLiteDatabase.CursorFactory;
+import android.util.Log;
+
+import org.greenrobot.greendao.AbstractDaoMaster;
+import org.greenrobot.greendao.database.Database;
+import org.greenrobot.greendao.database.DatabaseOpenHelper;
+import org.greenrobot.greendao.database.StandardDatabase;
+import org.greenrobot.greendao.identityscope.IdentityScopeType;
+
+
+// THIS CODE IS GENERATED BY greenDAO, DO NOT EDIT.
+/**
+ * Master of DAO (schema version 1): knows all DAOs.
+ */
+public class DaoMaster extends AbstractDaoMaster {
+ public static final int SCHEMA_VERSION = 1;
+
+ /** Creates underlying database table using DAOs. */
+ public static void createAllTables(Database db, boolean ifNotExists) {
+ SearchHistoryBeanDao.createTable(db, ifNotExists);
+ }
+
+ /** Drops underlying database table using DAOs. */
+ public static void dropAllTables(Database db, boolean ifExists) {
+ SearchHistoryBeanDao.dropTable(db, ifExists);
+ }
+
+ /**
+ * WARNING: Drops all table on Upgrade! Use only during development.
+ * Convenience method using a {@link DevOpenHelper}.
+ */
+ public static DaoSession newDevSession(Context context, String name) {
+ Database db = new DevOpenHelper(context, name).getWritableDb();
+ DaoMaster daoMaster = new DaoMaster(db);
+ return daoMaster.newSession();
+ }
+
+ public DaoMaster(SQLiteDatabase db) {
+ this(new StandardDatabase(db));
+ }
+
+ public DaoMaster(Database db) {
+ super(db, SCHEMA_VERSION);
+ registerDaoClass(SearchHistoryBeanDao.class);
+ }
+
+ public DaoSession newSession() {
+ return new DaoSession(db, IdentityScopeType.Session, daoConfigMap);
+ }
+
+ public DaoSession newSession(IdentityScopeType type) {
+ return new DaoSession(db, type, daoConfigMap);
+ }
+
+ /**
+ * Calls {@link #createAllTables(Database, boolean)} in {@link #onCreate(Database)} -
+ */
+ public static abstract class OpenHelper extends DatabaseOpenHelper {
+ public OpenHelper(Context context, String name) {
+ super(context, name, SCHEMA_VERSION);
+ }
+
+ public OpenHelper(Context context, String name, CursorFactory factory) {
+ super(context, name, factory, SCHEMA_VERSION);
+ }
+
+ @Override
+ public void onCreate(Database db) {
+ Log.i("greenDAO", "Creating tables for schema version " + SCHEMA_VERSION);
+ createAllTables(db, false);
+ }
+ }
+
+ /** WARNING: Drops all table on Upgrade! Use only during development. */
+ public static class DevOpenHelper extends OpenHelper {
+ public DevOpenHelper(Context context, String name) {
+ super(context, name);
+ }
+
+ public DevOpenHelper(Context context, String name, CursorFactory factory) {
+ super(context, name, factory);
+ }
+
+ @Override
+ public void onUpgrade(Database db, int oldVersion, int newVersion) {
+ Log.i("greenDAO", "Upgrading schema from version " + oldVersion + " to " + newVersion + " by dropping all tables");
+ dropAllTables(db, true);
+ onCreate(db);
+ }
+ }
+
+}
diff --git a/app/src/main/java/com/casic/xz/meterage/greendao/DaoSession.java b/app/src/main/java/com/casic/xz/meterage/greendao/DaoSession.java
new file mode 100644
index 0000000..0e80024
--- /dev/null
+++ b/app/src/main/java/com/casic/xz/meterage/greendao/DaoSession.java
@@ -0,0 +1,46 @@
+package com.casic.xz.meterage.greendao;
+
+import com.casic.xz.meterage.bean.SearchHistoryBean;
+
+import org.greenrobot.greendao.AbstractDao;
+import org.greenrobot.greendao.AbstractDaoSession;
+import org.greenrobot.greendao.database.Database;
+import org.greenrobot.greendao.identityscope.IdentityScopeType;
+import org.greenrobot.greendao.internal.DaoConfig;
+
+import java.util.Map;
+
+// THIS CODE IS GENERATED BY greenDAO, DO NOT EDIT.
+
+/**
+ * {@inheritDoc}
+ *
+ * @see org.greenrobot.greendao.AbstractDaoSession
+ */
+public class DaoSession extends AbstractDaoSession {
+
+ private final DaoConfig searchHistoryBeanDaoConfig;
+
+ private final SearchHistoryBeanDao searchHistoryBeanDao;
+
+ public DaoSession(Database db, IdentityScopeType type, Map>, DaoConfig>
+ daoConfigMap) {
+ super(db);
+
+ searchHistoryBeanDaoConfig = daoConfigMap.get(SearchHistoryBeanDao.class).clone();
+ searchHistoryBeanDaoConfig.initIdentityScope(type);
+
+ searchHistoryBeanDao = new SearchHistoryBeanDao(searchHistoryBeanDaoConfig, this);
+
+ registerDao(SearchHistoryBean.class, searchHistoryBeanDao);
+ }
+
+ public void clear() {
+ searchHistoryBeanDaoConfig.clearIdentityScope();
+ }
+
+ public SearchHistoryBeanDao getSearchHistoryBeanDao() {
+ return searchHistoryBeanDao;
+ }
+
+}
diff --git a/app/src/main/java/com/casic/xz/meterage/greendao/SearchHistoryBeanDao.java b/app/src/main/java/com/casic/xz/meterage/greendao/SearchHistoryBeanDao.java
new file mode 100644
index 0000000..5923d02
--- /dev/null
+++ b/app/src/main/java/com/casic/xz/meterage/greendao/SearchHistoryBeanDao.java
@@ -0,0 +1,185 @@
+package com.casic.xz.meterage.greendao;
+
+import android.database.Cursor;
+import android.database.sqlite.SQLiteStatement;
+
+import com.casic.xz.meterage.bean.SearchHistoryBean;
+
+import org.greenrobot.greendao.AbstractDao;
+import org.greenrobot.greendao.Property;
+import org.greenrobot.greendao.database.Database;
+import org.greenrobot.greendao.database.DatabaseStatement;
+import org.greenrobot.greendao.internal.DaoConfig;
+
+// THIS CODE IS GENERATED BY greenDAO, DO NOT EDIT.
+/**
+ * DAO for table "SEARCH_HISTORY_BEAN".
+*/
+public class SearchHistoryBeanDao extends AbstractDao {
+
+ public static final String TABLENAME = "SEARCH_HISTORY_BEAN";
+
+ /**
+ * Properties of entity SearchHistoryBean.
+ * Can be used for QueryBuilder and for referencing column names.
+ */
+ public static class Properties {
+ public final static Property Id = new Property(0, Long.class, "id", true, "_id");
+ public final static Property Uuid = new Property(1, String.class, "uuid", false, "UUID");
+ public final static Property Keywords = new Property(2, String.class, "keywords", false, "KEYWORDS");
+ public final static Property SearchType = new Property(3, String.class, "searchType", false, "SEARCH_TYPE");
+ public final static Property UserId = new Property(4, String.class, "userId", false, "USER_ID");
+ public final static Property SearchTime = new Property(5, String.class, "searchTime", false, "SEARCH_TIME");
+ }
+
+
+ public SearchHistoryBeanDao(DaoConfig config) {
+ super(config);
+ }
+
+ public SearchHistoryBeanDao(DaoConfig config, DaoSession daoSession) {
+ super(config, daoSession);
+ }
+
+ /** Creates the underlying database table. */
+ public static void createTable(Database db, boolean ifNotExists) {
+ String constraint = ifNotExists? "IF NOT EXISTS ": "";
+ db.execSQL("CREATE TABLE " + constraint + "\"SEARCH_HISTORY_BEAN\" (" + //
+ "\"_id\" INTEGER PRIMARY KEY AUTOINCREMENT ," + // 0: id
+ "\"UUID\" TEXT UNIQUE ," + // 1: uuid
+ "\"KEYWORDS\" TEXT," + // 2: keywords
+ "\"SEARCH_TYPE\" TEXT," + // 3: searchType
+ "\"USER_ID\" TEXT," + // 4: userId
+ "\"SEARCH_TIME\" TEXT);"); // 5: searchTime
+ }
+
+ /** Drops the underlying database table. */
+ public static void dropTable(Database db, boolean ifExists) {
+ String sql = "DROP TABLE " + (ifExists ? "IF EXISTS " : "") + "\"SEARCH_HISTORY_BEAN\"";
+ db.execSQL(sql);
+ }
+
+ @Override
+ protected final void bindValues(DatabaseStatement stmt, SearchHistoryBean entity) {
+ stmt.clearBindings();
+
+ Long id = entity.getId();
+ if (id != null) {
+ stmt.bindLong(1, id);
+ }
+
+ String uuid = entity.getUuid();
+ if (uuid != null) {
+ stmt.bindString(2, uuid);
+ }
+
+ String keywords = entity.getKeywords();
+ if (keywords != null) {
+ stmt.bindString(3, keywords);
+ }
+
+ String searchType = entity.getSearchType();
+ if (searchType != null) {
+ stmt.bindString(4, searchType);
+ }
+
+ String userId = entity.getUserId();
+ if (userId != null) {
+ stmt.bindString(5, userId);
+ }
+
+ String searchTime = entity.getSearchTime();
+ if (searchTime != null) {
+ stmt.bindString(6, searchTime);
+ }
+ }
+
+ @Override
+ protected final void bindValues(SQLiteStatement stmt, SearchHistoryBean entity) {
+ stmt.clearBindings();
+
+ Long id = entity.getId();
+ if (id != null) {
+ stmt.bindLong(1, id);
+ }
+
+ String uuid = entity.getUuid();
+ if (uuid != null) {
+ stmt.bindString(2, uuid);
+ }
+
+ String keywords = entity.getKeywords();
+ if (keywords != null) {
+ stmt.bindString(3, keywords);
+ }
+
+ String searchType = entity.getSearchType();
+ if (searchType != null) {
+ stmt.bindString(4, searchType);
+ }
+
+ String userId = entity.getUserId();
+ if (userId != null) {
+ stmt.bindString(5, userId);
+ }
+
+ String searchTime = entity.getSearchTime();
+ if (searchTime != null) {
+ stmt.bindString(6, searchTime);
+ }
+ }
+
+ @Override
+ public Long readKey(Cursor cursor, int offset) {
+ return cursor.isNull(offset + 0) ? null : cursor.getLong(offset + 0);
+ }
+
+ @Override
+ public SearchHistoryBean readEntity(Cursor cursor, int offset) {
+ SearchHistoryBean entity = new SearchHistoryBean( //
+ cursor.isNull(offset + 0) ? null : cursor.getLong(offset + 0), // id
+ cursor.isNull(offset + 1) ? null : cursor.getString(offset + 1), // uuid
+ cursor.isNull(offset + 2) ? null : cursor.getString(offset + 2), // keywords
+ cursor.isNull(offset + 3) ? null : cursor.getString(offset + 3), // searchType
+ cursor.isNull(offset + 4) ? null : cursor.getString(offset + 4), // userId
+ cursor.isNull(offset + 5) ? null : cursor.getString(offset + 5) // searchTime
+ );
+ return entity;
+ }
+
+ @Override
+ public void readEntity(Cursor cursor, SearchHistoryBean entity, int offset) {
+ entity.setId(cursor.isNull(offset + 0) ? null : cursor.getLong(offset + 0));
+ entity.setUuid(cursor.isNull(offset + 1) ? null : cursor.getString(offset + 1));
+ entity.setKeywords(cursor.isNull(offset + 2) ? null : cursor.getString(offset + 2));
+ entity.setSearchType(cursor.isNull(offset + 3) ? null : cursor.getString(offset + 3));
+ entity.setUserId(cursor.isNull(offset + 4) ? null : cursor.getString(offset + 4));
+ entity.setSearchTime(cursor.isNull(offset + 5) ? null : cursor.getString(offset + 5));
+ }
+
+ @Override
+ protected final Long updateKeyAfterInsert(SearchHistoryBean entity, long rowId) {
+ entity.setId(rowId);
+ return rowId;
+ }
+
+ @Override
+ public Long getKey(SearchHistoryBean entity) {
+ if(entity != null) {
+ return entity.getId();
+ } else {
+ return null;
+ }
+ }
+
+ @Override
+ public boolean hasKey(SearchHistoryBean entity) {
+ return entity.getId() != null;
+ }
+
+ @Override
+ protected final boolean isEntityUpdateable() {
+ return true;
+ }
+
+}
diff --git a/app/src/main/java/com/casic/xz/meterage/utils/DataBaseManager.kt b/app/src/main/java/com/casic/xz/meterage/utils/DataBaseManager.kt
new file mode 100644
index 0000000..52fe032
--- /dev/null
+++ b/app/src/main/java/com/casic/xz/meterage/utils/DataBaseManager.kt
@@ -0,0 +1,45 @@
+package com.casic.xz.meterage.utils
+
+import com.casic.xz.meterage.base.BaseApplication
+import com.casic.xz.meterage.bean.SearchHistoryBean
+import com.casic.xz.meterage.greendao.SearchHistoryBeanDao
+import com.pengxh.kt.lite.extensions.timestampToCompleteDate
+import com.pengxh.kt.lite.utils.SaveKeyValues
+import java.util.*
+
+class DataBaseManager private constructor() {
+
+ companion object {
+ //Kotlin委托模式双重锁单例
+ val get: DataBaseManager by lazy(mode = LazyThreadSafetyMode.SYNCHRONIZED) {
+ DataBaseManager()
+ }
+ }
+
+ private val searchBeanDao by lazy { BaseApplication.get().getDaoSession().searchHistoryBeanDao }
+ private val userId by lazy { SaveKeyValues.getValue(LocaleConstant.USER_ID, "") }
+
+ fun addSearchHistory(keywords: String, searchType: String) {
+ val bean = SearchHistoryBean()
+ bean.uuid = UUID.randomUUID().toString()
+ bean.keywords = keywords
+ bean.searchType = searchType
+ bean.userId = userId.toString()
+ bean.searchTime = System.currentTimeMillis().timestampToCompleteDate()
+ searchBeanDao.insert(bean)
+ }
+
+ fun queryHistoryByType(searchType: String): MutableList {
+ return searchBeanDao.queryBuilder().where(
+ SearchHistoryBeanDao.Properties.UserId.eq(userId),
+ SearchHistoryBeanDao.Properties.SearchType.eq(searchType)
+ ).list()
+ }
+
+ fun deleteHistoryByType(searchType: String) {
+ val list = queryHistoryByType(searchType)
+ list.forEach {
+ searchBeanDao.delete(it)
+ }
+ }
+}
\ No newline at end of file
diff --git a/app/src/main/java/com/casic/xz/meterage/utils/LocaleConstant.kt b/app/src/main/java/com/casic/xz/meterage/utils/LocaleConstant.kt
index cc2848b..2ea47a0 100644
--- a/app/src/main/java/com/casic/xz/meterage/utils/LocaleConstant.kt
+++ b/app/src/main/java/com/casic/xz/meterage/utils/LocaleConstant.kt
@@ -62,4 +62,5 @@
const val File_SERVER_URL = "http://111.198.10.15:21408"
const val ACCOUNT = "account"
const val PASSWORD = "password"
+ const val USER_ID = "userId"
}
\ No newline at end of file
diff --git a/app/src/main/java/com/casic/xz/meterage/utils/SearchType.kt b/app/src/main/java/com/casic/xz/meterage/utils/SearchType.kt
new file mode 100644
index 0000000..5f5253e
--- /dev/null
+++ b/app/src/main/java/com/casic/xz/meterage/utils/SearchType.kt
@@ -0,0 +1,8 @@
+package com.casic.xz.meterage.utils
+
+object SearchType {
+ /**
+ * 搜索仪器设备
+ * */
+ const val Equipment = "0"
+}
diff --git a/app/src/main/java/com/casic/xz/meterage/view/MainActivity.kt b/app/src/main/java/com/casic/xz/meterage/view/MainActivity.kt
index 28836e0..8fb0793 100644
--- a/app/src/main/java/com/casic/xz/meterage/view/MainActivity.kt
+++ b/app/src/main/java/com/casic/xz/meterage/view/MainActivity.kt
@@ -3,15 +3,19 @@
import android.view.KeyEvent
import android.view.MenuItem
import androidx.fragment.app.Fragment
+import androidx.lifecycle.ViewModelProvider
import androidx.viewpager.widget.ViewPager
import com.casic.xz.meterage.R
import com.casic.xz.meterage.adapter.ViewPagerAdapter
import com.casic.xz.meterage.fragment.HomePageFragment
import com.casic.xz.meterage.fragment.MinePageFragment
import com.casic.xz.meterage.fragment.SamplePageFragment
+import com.casic.xz.meterage.utils.LocaleConstant
+import com.casic.xz.meterage.vm.UserViewModel
import com.gyf.immersionbar.ImmersionBar
import com.pengxh.kt.lite.base.KotlinBaseActivity
import com.pengxh.kt.lite.extensions.show
+import com.pengxh.kt.lite.utils.SaveKeyValues
import kotlinx.android.synthetic.main.activity_main.*
class MainActivity : KotlinBaseActivity() {
@@ -20,53 +24,59 @@
private var fragmentPages: ArrayList = ArrayList()
private var clickTime: Long = 0
- init {
- fragmentPages.add(HomePageFragment())
- fragmentPages.add(SamplePageFragment())
- fragmentPages.add(MinePageFragment())
- }
-
override fun initData() {
- bottomNavigation.itemIconTintList = null
- bottomNavigation.setOnNavigationItemSelectedListener { menuItem ->
- when (menuItem.itemId) {
- R.id.nav_home -> {
- mainViewPager.currentItem = 0
+ val userViewModel = ViewModelProvider(this)[UserViewModel::class.java]
+ userViewModel.getUserInfo(SaveKeyValues.getValue(LocaleConstant.ACCOUNT, "") as String)
+ userViewModel.userInfo.observe(this) {
+ if (it.code == 200) {
+ SaveKeyValues.putValue(LocaleConstant.USER_ID, it.data.id)
+
+ fragmentPages.add(HomePageFragment(it.data.id))
+ fragmentPages.add(SamplePageFragment())
+ fragmentPages.add(MinePageFragment())
+
+ bottomNavigation.itemIconTintList = null
+ bottomNavigation.setOnNavigationItemSelectedListener { menuItem ->
+ when (menuItem.itemId) {
+ R.id.nav_home -> {
+ mainViewPager.currentItem = 0
+ }
+ R.id.nav_sample -> {
+ mainViewPager.currentItem = 1
+ }
+ R.id.nav_mine -> {
+ mainViewPager.currentItem = 2
+ }
+ }
+ false
}
- R.id.nav_sample -> {
- mainViewPager.currentItem = 1
- }
- R.id.nav_mine -> {
- mainViewPager.currentItem = 2
- }
+ mainViewPager.adapter = ViewPagerAdapter(fragmentPages, supportFragmentManager)
+ mainViewPager.offscreenPageLimit = fragmentPages.size //缓存页数
+ mainViewPager.addOnPageChangeListener(object : ViewPager.OnPageChangeListener {
+ override fun onPageScrollStateChanged(state: Int) {
+
+ }
+
+ override fun onPageScrolled(
+ position: Int,
+ positionOffset: Float,
+ positionOffsetPixels: Int
+ ) {
+
+ }
+
+ override fun onPageSelected(position: Int) {
+ if (menuItem != null) {
+ menuItem!!.isChecked = false
+ } else {
+ bottomNavigation.menu.getItem(0).isChecked = false
+ }
+ menuItem = bottomNavigation.menu.getItem(position)
+ menuItem!!.isChecked = true
+ }
+ })
}
- false
}
- mainViewPager.adapter = ViewPagerAdapter(fragmentPages, supportFragmentManager)
- mainViewPager.offscreenPageLimit = fragmentPages.size //缓存页数
- mainViewPager.addOnPageChangeListener(object : ViewPager.OnPageChangeListener {
- override fun onPageScrollStateChanged(state: Int) {
-
- }
-
- override fun onPageScrolled(
- position: Int,
- positionOffset: Float,
- positionOffsetPixels: Int
- ) {
-
- }
-
- override fun onPageSelected(position: Int) {
- if (menuItem != null) {
- menuItem!!.isChecked = false
- } else {
- bottomNavigation.menu.getItem(0).isChecked = false
- }
- menuItem = bottomNavigation.menu.getItem(position)
- menuItem!!.isChecked = true
- }
- })
}
override fun initEvent() {
diff --git a/app/src/main/java/com/casic/xz/meterage/view/search/SearchAllActivity.kt b/app/src/main/java/com/casic/xz/meterage/view/search/SearchAllActivity.kt
new file mode 100644
index 0000000..ecc8fd7
--- /dev/null
+++ b/app/src/main/java/com/casic/xz/meterage/view/search/SearchAllActivity.kt
@@ -0,0 +1,40 @@
+package com.casic.xz.meterage.view.search
+
+import com.casic.xz.meterage.R
+import com.casic.xz.meterage.extensions.initLayoutImmersionBar
+import com.gyf.immersionbar.ImmersionBar
+import com.pengxh.kt.lite.base.KotlinBaseActivity
+import com.pengxh.kt.lite.extensions.navigatePageTo
+import kotlinx.android.synthetic.main.activity_search_all.*
+import kotlinx.android.synthetic.main.include_search_input_title.*
+
+class SearchAllActivity : KotlinBaseActivity() {
+
+ override fun initData() {
+
+ }
+
+ override fun initEvent() {
+ leftBackView.setOnClickListener { finish() }
+ searchTextView.setOnClickListener {
+ navigatePageTo(inputView.text.toString())
+ }
+ }
+
+ override fun initLayoutView(): Int = R.layout.activity_search_all
+
+ override fun observeRequestState() {
+
+ }
+
+ override fun setupTopBarLayout() {
+ ImmersionBar.with(this).statusBarDarkFont(true).init()
+ initLayoutImmersionBar(rootView)
+ inputView.hint = "查询样品、业务"
+ }
+
+ override fun onResume() {
+ super.onResume()
+ //TODO 流式布局显示查询记录Tag?
+ }
+}
\ No newline at end of file
diff --git a/app/build.gradle b/app/build.gradle
index 298f687..e142ec1 100644
--- a/app/build.gradle
+++ b/app/build.gradle
@@ -3,6 +3,7 @@
apply plugin: 'com.android.application'
apply plugin: 'kotlin-android'
apply plugin: 'kotlin-android-extensions'
+apply plugin: 'org.greenrobot.greendao'
android {
signingConfigs {
@@ -57,6 +58,12 @@
outputFileName = "XZJL_" + getBuildDate() + "_Beta.apk"
}
}
+
+ greendao {
+ schemaVersion 1//数据库版本号
+ targetGenDir 'src/main/java'//设置DaoMaster、DaoSession、Dao目录
+ daoPackage 'com.casic.xz.meterage.greendao'//设置DaoMaster、DaoSession、Dao包名
+ }
}
static def getBuildDate() {
@@ -67,7 +74,7 @@
dependencies {
//基础依赖库
implementation 'com.github.AndroidCoderPeng:Kotlin-lite-lib:1.0.4'
- implementation 'androidx.appcompat:appcompat:1.5.1'
+ implementation 'androidx.appcompat:appcompat:1.6.1'
implementation 'androidx.core:core-ktx:1.9.0'
//Google官方授权框架
implementation 'pub.devrel:easypermissions:3.0.0'
@@ -113,4 +120,6 @@
implementation 'com.github.tiann:FreeReflection:3.1.0'
//单项/数字、二三级联动、日期/时间等滚轮选择器
implementation 'com.github.gzu-liyujiang.AndroidPicker:WheelPicker:4.1.8'
+ //数据库框架
+ implementation 'org.greenrobot:greendao:3.3.0'
}
\ No newline at end of file
diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml
index 972eff9..5b6f9b2 100644
--- a/app/src/main/AndroidManifest.xml
+++ b/app/src/main/AndroidManifest.xml
@@ -69,6 +69,8 @@
+
+
diff --git a/app/src/main/java/com/casic/xz/meterage/base/BaseApplication.kt b/app/src/main/java/com/casic/xz/meterage/base/BaseApplication.kt
index 14a604d..1684c23 100644
--- a/app/src/main/java/com/casic/xz/meterage/base/BaseApplication.kt
+++ b/app/src/main/java/com/casic/xz/meterage/base/BaseApplication.kt
@@ -2,6 +2,8 @@
import android.app.Application
import android.content.Context
+import com.casic.xz.meterage.greendao.DaoMaster
+import com.casic.xz.meterage.greendao.DaoSession
import com.pengxh.kt.lite.utils.SaveKeyValues
import me.weishu.reflection.Reflection
import kotlin.properties.Delegates
@@ -12,12 +14,22 @@
private var application: BaseApplication by Delegates.notNull()
fun get() = application
+
+ private lateinit var daoSession: DaoSession
}
override fun onCreate() {
super.onCreate()
application = this
SaveKeyValues.initSharedPreferences(this)
+
+ val devOpenHelper = DaoMaster.DevOpenHelper(this, "Meterage.db", null)
+ val daoMaster = DaoMaster(devOpenHelper.writableDatabase)
+ daoSession = daoMaster.newSession()
+ }
+
+ fun getDaoSession(): DaoSession {
+ return daoSession
}
//绕过Android 11以上反射限制
diff --git a/app/src/main/java/com/casic/xz/meterage/bean/SearchHistoryBean.java b/app/src/main/java/com/casic/xz/meterage/bean/SearchHistoryBean.java
new file mode 100644
index 0000000..6a46a3a
--- /dev/null
+++ b/app/src/main/java/com/casic/xz/meterage/bean/SearchHistoryBean.java
@@ -0,0 +1,82 @@
+package com.casic.xz.meterage.bean;
+
+import org.greenrobot.greendao.annotation.Entity;
+import org.greenrobot.greendao.annotation.Generated;
+import org.greenrobot.greendao.annotation.Id;
+import org.greenrobot.greendao.annotation.Unique;
+
+@Entity
+public class SearchHistoryBean {
+ @Id(autoincrement = true)
+ private Long id;//主键自增
+
+ @Unique
+ private String uuid;
+ private String keywords;//查询条件-关键字
+ private String searchType;//查询类型
+ private String userId;//用户Id
+ private String searchTime;//查询的时间
+
+ @Generated(hash = 2130561778)
+ public SearchHistoryBean(Long id, String uuid, String keywords,
+ String searchType, String userId, String searchTime) {
+ this.id = id;
+ this.uuid = uuid;
+ this.keywords = keywords;
+ this.searchType = searchType;
+ this.userId = userId;
+ this.searchTime = searchTime;
+ }
+
+ @Generated(hash = 1570282321)
+ public SearchHistoryBean() {
+ }
+
+ public Long getId() {
+ return this.id;
+ }
+
+ public void setId(Long id) {
+ this.id = id;
+ }
+
+ public String getUuid() {
+ return this.uuid;
+ }
+
+ public void setUuid(String uuid) {
+ this.uuid = uuid;
+ }
+
+ public String getKeywords() {
+ return this.keywords;
+ }
+
+ public void setKeywords(String keywords) {
+ this.keywords = keywords;
+ }
+
+ public String getSearchType() {
+ return this.searchType;
+ }
+
+ public void setSearchType(String searchType) {
+ this.searchType = searchType;
+ }
+
+ public String getUserId() {
+ return this.userId;
+ }
+
+ public void setUserId(String userId) {
+ this.userId = userId;
+ }
+
+ public String getSearchTime() {
+ return this.searchTime;
+ }
+
+ public void setSearchTime(String searchTime) {
+ this.searchTime = searchTime;
+ }
+}
diff --git a/app/src/main/java/com/casic/xz/meterage/fragment/HomePageFragment.kt b/app/src/main/java/com/casic/xz/meterage/fragment/HomePageFragment.kt
index 151f951..ae7f5e4 100644
--- a/app/src/main/java/com/casic/xz/meterage/fragment/HomePageFragment.kt
+++ b/app/src/main/java/com/casic/xz/meterage/fragment/HomePageFragment.kt
@@ -15,22 +15,20 @@
import com.casic.xz.meterage.extensions.showEmptyPage
import com.casic.xz.meterage.model.NoticeListModel
import com.casic.xz.meterage.model.RemindListModel
-import com.casic.xz.meterage.model.UserInfoModel
import com.casic.xz.meterage.utils.LoadingDialogHub
import com.casic.xz.meterage.utils.LocaleConstant
import com.casic.xz.meterage.utils.QrConfigCreator
import com.casic.xz.meterage.view.home.*
import com.casic.xz.meterage.view.notice.NoticeListActivity
+import com.casic.xz.meterage.view.search.SearchAllActivity
import com.casic.xz.meterage.vm.MeterageTrainViewModel
import com.casic.xz.meterage.vm.NoticeViewModel
-import com.casic.xz.meterage.vm.UserViewModel
import com.pengxh.kt.lite.adapter.NormalRecyclerAdapter
import com.pengxh.kt.lite.adapter.ViewHolder
import com.pengxh.kt.lite.base.KotlinBaseFragment
import com.pengxh.kt.lite.extensions.convertColor
import com.pengxh.kt.lite.extensions.navigatePageTo
import com.pengxh.kt.lite.extensions.show
-import com.pengxh.kt.lite.utils.SaveKeyValues
import com.pengxh.kt.lite.utils.WeakReferenceHandler
import com.pengxh.kt.lite.vm.LoadState
import com.pengxh.kt.lite.widget.dialog.AlertControlDialog
@@ -39,13 +37,12 @@
import kotlinx.android.synthetic.main.include_empty_view.*
import java.util.*
-class HomePageFragment : KotlinBaseFragment() {
+class HomePageFragment(private val userId: String) : KotlinBaseFragment() {
private val timer = object : Timer() {}
private lateinit var weakReferenceHandler: WeakReferenceHandler
private lateinit var meterageTrainViewModel: MeterageTrainViewModel
private lateinit var noticeViewModel: NoticeViewModel
- private lateinit var userData: UserInfoModel.DataModel
private lateinit var remindAdapter: NormalRecyclerAdapter
private var dataBeans: MutableList = ArrayList()
private var noticeBeans: MutableList = ArrayList()
@@ -170,14 +167,6 @@
true
}
- val userViewModel = ViewModelProvider(this)[UserViewModel::class.java]
- userViewModel.getUserInfo(SaveKeyValues.getValue(LocaleConstant.ACCOUNT, "") as String)
- userViewModel.userInfo.observe(this) {
- if (it.code == 200) {
- userData = it.data
- }
- }
-
meterageTrainViewModel = ViewModelProvider(this)[MeterageTrainViewModel::class.java]
meterageTrainViewModel.signInResult.observe(this) {
if (it.code == 200) {
@@ -296,10 +285,14 @@
}
override fun initEvent() {
+ searchBar.setOnClickListener {
+ requireContext().navigatePageTo()
+ }
+
scanCodeView.setOnClickListener {
qrManager.startScan(requireActivity()) { result ->
if (result.content.isDigitsOnly()) {
- meterageTrainViewModel.signIn(userData.id, result.content)
+ meterageTrainViewModel.signIn(userId, result.content)
} else {
"签到二维码错误,请重新扫描".show(requireContext())
}
diff --git a/app/src/main/java/com/casic/xz/meterage/greendao/DaoMaster.java b/app/src/main/java/com/casic/xz/meterage/greendao/DaoMaster.java
new file mode 100644
index 0000000..d714ce2
--- /dev/null
+++ b/app/src/main/java/com/casic/xz/meterage/greendao/DaoMaster.java
@@ -0,0 +1,96 @@
+package com.casic.xz.meterage.greendao;
+
+import android.content.Context;
+import android.database.sqlite.SQLiteDatabase;
+import android.database.sqlite.SQLiteDatabase.CursorFactory;
+import android.util.Log;
+
+import org.greenrobot.greendao.AbstractDaoMaster;
+import org.greenrobot.greendao.database.Database;
+import org.greenrobot.greendao.database.DatabaseOpenHelper;
+import org.greenrobot.greendao.database.StandardDatabase;
+import org.greenrobot.greendao.identityscope.IdentityScopeType;
+
+
+// THIS CODE IS GENERATED BY greenDAO, DO NOT EDIT.
+/**
+ * Master of DAO (schema version 1): knows all DAOs.
+ */
+public class DaoMaster extends AbstractDaoMaster {
+ public static final int SCHEMA_VERSION = 1;
+
+ /** Creates underlying database table using DAOs. */
+ public static void createAllTables(Database db, boolean ifNotExists) {
+ SearchHistoryBeanDao.createTable(db, ifNotExists);
+ }
+
+ /** Drops underlying database table using DAOs. */
+ public static void dropAllTables(Database db, boolean ifExists) {
+ SearchHistoryBeanDao.dropTable(db, ifExists);
+ }
+
+ /**
+ * WARNING: Drops all table on Upgrade! Use only during development.
+ * Convenience method using a {@link DevOpenHelper}.
+ */
+ public static DaoSession newDevSession(Context context, String name) {
+ Database db = new DevOpenHelper(context, name).getWritableDb();
+ DaoMaster daoMaster = new DaoMaster(db);
+ return daoMaster.newSession();
+ }
+
+ public DaoMaster(SQLiteDatabase db) {
+ this(new StandardDatabase(db));
+ }
+
+ public DaoMaster(Database db) {
+ super(db, SCHEMA_VERSION);
+ registerDaoClass(SearchHistoryBeanDao.class);
+ }
+
+ public DaoSession newSession() {
+ return new DaoSession(db, IdentityScopeType.Session, daoConfigMap);
+ }
+
+ public DaoSession newSession(IdentityScopeType type) {
+ return new DaoSession(db, type, daoConfigMap);
+ }
+
+ /**
+ * Calls {@link #createAllTables(Database, boolean)} in {@link #onCreate(Database)} -
+ */
+ public static abstract class OpenHelper extends DatabaseOpenHelper {
+ public OpenHelper(Context context, String name) {
+ super(context, name, SCHEMA_VERSION);
+ }
+
+ public OpenHelper(Context context, String name, CursorFactory factory) {
+ super(context, name, factory, SCHEMA_VERSION);
+ }
+
+ @Override
+ public void onCreate(Database db) {
+ Log.i("greenDAO", "Creating tables for schema version " + SCHEMA_VERSION);
+ createAllTables(db, false);
+ }
+ }
+
+ /** WARNING: Drops all table on Upgrade! Use only during development. */
+ public static class DevOpenHelper extends OpenHelper {
+ public DevOpenHelper(Context context, String name) {
+ super(context, name);
+ }
+
+ public DevOpenHelper(Context context, String name, CursorFactory factory) {
+ super(context, name, factory);
+ }
+
+ @Override
+ public void onUpgrade(Database db, int oldVersion, int newVersion) {
+ Log.i("greenDAO", "Upgrading schema from version " + oldVersion + " to " + newVersion + " by dropping all tables");
+ dropAllTables(db, true);
+ onCreate(db);
+ }
+ }
+
+}
diff --git a/app/src/main/java/com/casic/xz/meterage/greendao/DaoSession.java b/app/src/main/java/com/casic/xz/meterage/greendao/DaoSession.java
new file mode 100644
index 0000000..0e80024
--- /dev/null
+++ b/app/src/main/java/com/casic/xz/meterage/greendao/DaoSession.java
@@ -0,0 +1,46 @@
+package com.casic.xz.meterage.greendao;
+
+import com.casic.xz.meterage.bean.SearchHistoryBean;
+
+import org.greenrobot.greendao.AbstractDao;
+import org.greenrobot.greendao.AbstractDaoSession;
+import org.greenrobot.greendao.database.Database;
+import org.greenrobot.greendao.identityscope.IdentityScopeType;
+import org.greenrobot.greendao.internal.DaoConfig;
+
+import java.util.Map;
+
+// THIS CODE IS GENERATED BY greenDAO, DO NOT EDIT.
+
+/**
+ * {@inheritDoc}
+ *
+ * @see org.greenrobot.greendao.AbstractDaoSession
+ */
+public class DaoSession extends AbstractDaoSession {
+
+ private final DaoConfig searchHistoryBeanDaoConfig;
+
+ private final SearchHistoryBeanDao searchHistoryBeanDao;
+
+ public DaoSession(Database db, IdentityScopeType type, Map>, DaoConfig>
+ daoConfigMap) {
+ super(db);
+
+ searchHistoryBeanDaoConfig = daoConfigMap.get(SearchHistoryBeanDao.class).clone();
+ searchHistoryBeanDaoConfig.initIdentityScope(type);
+
+ searchHistoryBeanDao = new SearchHistoryBeanDao(searchHistoryBeanDaoConfig, this);
+
+ registerDao(SearchHistoryBean.class, searchHistoryBeanDao);
+ }
+
+ public void clear() {
+ searchHistoryBeanDaoConfig.clearIdentityScope();
+ }
+
+ public SearchHistoryBeanDao getSearchHistoryBeanDao() {
+ return searchHistoryBeanDao;
+ }
+
+}
diff --git a/app/src/main/java/com/casic/xz/meterage/greendao/SearchHistoryBeanDao.java b/app/src/main/java/com/casic/xz/meterage/greendao/SearchHistoryBeanDao.java
new file mode 100644
index 0000000..5923d02
--- /dev/null
+++ b/app/src/main/java/com/casic/xz/meterage/greendao/SearchHistoryBeanDao.java
@@ -0,0 +1,185 @@
+package com.casic.xz.meterage.greendao;
+
+import android.database.Cursor;
+import android.database.sqlite.SQLiteStatement;
+
+import com.casic.xz.meterage.bean.SearchHistoryBean;
+
+import org.greenrobot.greendao.AbstractDao;
+import org.greenrobot.greendao.Property;
+import org.greenrobot.greendao.database.Database;
+import org.greenrobot.greendao.database.DatabaseStatement;
+import org.greenrobot.greendao.internal.DaoConfig;
+
+// THIS CODE IS GENERATED BY greenDAO, DO NOT EDIT.
+/**
+ * DAO for table "SEARCH_HISTORY_BEAN".
+*/
+public class SearchHistoryBeanDao extends AbstractDao {
+
+ public static final String TABLENAME = "SEARCH_HISTORY_BEAN";
+
+ /**
+ * Properties of entity SearchHistoryBean.
+ * Can be used for QueryBuilder and for referencing column names.
+ */
+ public static class Properties {
+ public final static Property Id = new Property(0, Long.class, "id", true, "_id");
+ public final static Property Uuid = new Property(1, String.class, "uuid", false, "UUID");
+ public final static Property Keywords = new Property(2, String.class, "keywords", false, "KEYWORDS");
+ public final static Property SearchType = new Property(3, String.class, "searchType", false, "SEARCH_TYPE");
+ public final static Property UserId = new Property(4, String.class, "userId", false, "USER_ID");
+ public final static Property SearchTime = new Property(5, String.class, "searchTime", false, "SEARCH_TIME");
+ }
+
+
+ public SearchHistoryBeanDao(DaoConfig config) {
+ super(config);
+ }
+
+ public SearchHistoryBeanDao(DaoConfig config, DaoSession daoSession) {
+ super(config, daoSession);
+ }
+
+ /** Creates the underlying database table. */
+ public static void createTable(Database db, boolean ifNotExists) {
+ String constraint = ifNotExists? "IF NOT EXISTS ": "";
+ db.execSQL("CREATE TABLE " + constraint + "\"SEARCH_HISTORY_BEAN\" (" + //
+ "\"_id\" INTEGER PRIMARY KEY AUTOINCREMENT ," + // 0: id
+ "\"UUID\" TEXT UNIQUE ," + // 1: uuid
+ "\"KEYWORDS\" TEXT," + // 2: keywords
+ "\"SEARCH_TYPE\" TEXT," + // 3: searchType
+ "\"USER_ID\" TEXT," + // 4: userId
+ "\"SEARCH_TIME\" TEXT);"); // 5: searchTime
+ }
+
+ /** Drops the underlying database table. */
+ public static void dropTable(Database db, boolean ifExists) {
+ String sql = "DROP TABLE " + (ifExists ? "IF EXISTS " : "") + "\"SEARCH_HISTORY_BEAN\"";
+ db.execSQL(sql);
+ }
+
+ @Override
+ protected final void bindValues(DatabaseStatement stmt, SearchHistoryBean entity) {
+ stmt.clearBindings();
+
+ Long id = entity.getId();
+ if (id != null) {
+ stmt.bindLong(1, id);
+ }
+
+ String uuid = entity.getUuid();
+ if (uuid != null) {
+ stmt.bindString(2, uuid);
+ }
+
+ String keywords = entity.getKeywords();
+ if (keywords != null) {
+ stmt.bindString(3, keywords);
+ }
+
+ String searchType = entity.getSearchType();
+ if (searchType != null) {
+ stmt.bindString(4, searchType);
+ }
+
+ String userId = entity.getUserId();
+ if (userId != null) {
+ stmt.bindString(5, userId);
+ }
+
+ String searchTime = entity.getSearchTime();
+ if (searchTime != null) {
+ stmt.bindString(6, searchTime);
+ }
+ }
+
+ @Override
+ protected final void bindValues(SQLiteStatement stmt, SearchHistoryBean entity) {
+ stmt.clearBindings();
+
+ Long id = entity.getId();
+ if (id != null) {
+ stmt.bindLong(1, id);
+ }
+
+ String uuid = entity.getUuid();
+ if (uuid != null) {
+ stmt.bindString(2, uuid);
+ }
+
+ String keywords = entity.getKeywords();
+ if (keywords != null) {
+ stmt.bindString(3, keywords);
+ }
+
+ String searchType = entity.getSearchType();
+ if (searchType != null) {
+ stmt.bindString(4, searchType);
+ }
+
+ String userId = entity.getUserId();
+ if (userId != null) {
+ stmt.bindString(5, userId);
+ }
+
+ String searchTime = entity.getSearchTime();
+ if (searchTime != null) {
+ stmt.bindString(6, searchTime);
+ }
+ }
+
+ @Override
+ public Long readKey(Cursor cursor, int offset) {
+ return cursor.isNull(offset + 0) ? null : cursor.getLong(offset + 0);
+ }
+
+ @Override
+ public SearchHistoryBean readEntity(Cursor cursor, int offset) {
+ SearchHistoryBean entity = new SearchHistoryBean( //
+ cursor.isNull(offset + 0) ? null : cursor.getLong(offset + 0), // id
+ cursor.isNull(offset + 1) ? null : cursor.getString(offset + 1), // uuid
+ cursor.isNull(offset + 2) ? null : cursor.getString(offset + 2), // keywords
+ cursor.isNull(offset + 3) ? null : cursor.getString(offset + 3), // searchType
+ cursor.isNull(offset + 4) ? null : cursor.getString(offset + 4), // userId
+ cursor.isNull(offset + 5) ? null : cursor.getString(offset + 5) // searchTime
+ );
+ return entity;
+ }
+
+ @Override
+ public void readEntity(Cursor cursor, SearchHistoryBean entity, int offset) {
+ entity.setId(cursor.isNull(offset + 0) ? null : cursor.getLong(offset + 0));
+ entity.setUuid(cursor.isNull(offset + 1) ? null : cursor.getString(offset + 1));
+ entity.setKeywords(cursor.isNull(offset + 2) ? null : cursor.getString(offset + 2));
+ entity.setSearchType(cursor.isNull(offset + 3) ? null : cursor.getString(offset + 3));
+ entity.setUserId(cursor.isNull(offset + 4) ? null : cursor.getString(offset + 4));
+ entity.setSearchTime(cursor.isNull(offset + 5) ? null : cursor.getString(offset + 5));
+ }
+
+ @Override
+ protected final Long updateKeyAfterInsert(SearchHistoryBean entity, long rowId) {
+ entity.setId(rowId);
+ return rowId;
+ }
+
+ @Override
+ public Long getKey(SearchHistoryBean entity) {
+ if(entity != null) {
+ return entity.getId();
+ } else {
+ return null;
+ }
+ }
+
+ @Override
+ public boolean hasKey(SearchHistoryBean entity) {
+ return entity.getId() != null;
+ }
+
+ @Override
+ protected final boolean isEntityUpdateable() {
+ return true;
+ }
+
+}
diff --git a/app/src/main/java/com/casic/xz/meterage/utils/DataBaseManager.kt b/app/src/main/java/com/casic/xz/meterage/utils/DataBaseManager.kt
new file mode 100644
index 0000000..52fe032
--- /dev/null
+++ b/app/src/main/java/com/casic/xz/meterage/utils/DataBaseManager.kt
@@ -0,0 +1,45 @@
+package com.casic.xz.meterage.utils
+
+import com.casic.xz.meterage.base.BaseApplication
+import com.casic.xz.meterage.bean.SearchHistoryBean
+import com.casic.xz.meterage.greendao.SearchHistoryBeanDao
+import com.pengxh.kt.lite.extensions.timestampToCompleteDate
+import com.pengxh.kt.lite.utils.SaveKeyValues
+import java.util.*
+
+class DataBaseManager private constructor() {
+
+ companion object {
+ //Kotlin委托模式双重锁单例
+ val get: DataBaseManager by lazy(mode = LazyThreadSafetyMode.SYNCHRONIZED) {
+ DataBaseManager()
+ }
+ }
+
+ private val searchBeanDao by lazy { BaseApplication.get().getDaoSession().searchHistoryBeanDao }
+ private val userId by lazy { SaveKeyValues.getValue(LocaleConstant.USER_ID, "") }
+
+ fun addSearchHistory(keywords: String, searchType: String) {
+ val bean = SearchHistoryBean()
+ bean.uuid = UUID.randomUUID().toString()
+ bean.keywords = keywords
+ bean.searchType = searchType
+ bean.userId = userId.toString()
+ bean.searchTime = System.currentTimeMillis().timestampToCompleteDate()
+ searchBeanDao.insert(bean)
+ }
+
+ fun queryHistoryByType(searchType: String): MutableList {
+ return searchBeanDao.queryBuilder().where(
+ SearchHistoryBeanDao.Properties.UserId.eq(userId),
+ SearchHistoryBeanDao.Properties.SearchType.eq(searchType)
+ ).list()
+ }
+
+ fun deleteHistoryByType(searchType: String) {
+ val list = queryHistoryByType(searchType)
+ list.forEach {
+ searchBeanDao.delete(it)
+ }
+ }
+}
\ No newline at end of file
diff --git a/app/src/main/java/com/casic/xz/meterage/utils/LocaleConstant.kt b/app/src/main/java/com/casic/xz/meterage/utils/LocaleConstant.kt
index cc2848b..2ea47a0 100644
--- a/app/src/main/java/com/casic/xz/meterage/utils/LocaleConstant.kt
+++ b/app/src/main/java/com/casic/xz/meterage/utils/LocaleConstant.kt
@@ -62,4 +62,5 @@
const val File_SERVER_URL = "http://111.198.10.15:21408"
const val ACCOUNT = "account"
const val PASSWORD = "password"
+ const val USER_ID = "userId"
}
\ No newline at end of file
diff --git a/app/src/main/java/com/casic/xz/meterage/utils/SearchType.kt b/app/src/main/java/com/casic/xz/meterage/utils/SearchType.kt
new file mode 100644
index 0000000..5f5253e
--- /dev/null
+++ b/app/src/main/java/com/casic/xz/meterage/utils/SearchType.kt
@@ -0,0 +1,8 @@
+package com.casic.xz.meterage.utils
+
+object SearchType {
+ /**
+ * 搜索仪器设备
+ * */
+ const val Equipment = "0"
+}
diff --git a/app/src/main/java/com/casic/xz/meterage/view/MainActivity.kt b/app/src/main/java/com/casic/xz/meterage/view/MainActivity.kt
index 28836e0..8fb0793 100644
--- a/app/src/main/java/com/casic/xz/meterage/view/MainActivity.kt
+++ b/app/src/main/java/com/casic/xz/meterage/view/MainActivity.kt
@@ -3,15 +3,19 @@
import android.view.KeyEvent
import android.view.MenuItem
import androidx.fragment.app.Fragment
+import androidx.lifecycle.ViewModelProvider
import androidx.viewpager.widget.ViewPager
import com.casic.xz.meterage.R
import com.casic.xz.meterage.adapter.ViewPagerAdapter
import com.casic.xz.meterage.fragment.HomePageFragment
import com.casic.xz.meterage.fragment.MinePageFragment
import com.casic.xz.meterage.fragment.SamplePageFragment
+import com.casic.xz.meterage.utils.LocaleConstant
+import com.casic.xz.meterage.vm.UserViewModel
import com.gyf.immersionbar.ImmersionBar
import com.pengxh.kt.lite.base.KotlinBaseActivity
import com.pengxh.kt.lite.extensions.show
+import com.pengxh.kt.lite.utils.SaveKeyValues
import kotlinx.android.synthetic.main.activity_main.*
class MainActivity : KotlinBaseActivity() {
@@ -20,53 +24,59 @@
private var fragmentPages: ArrayList = ArrayList()
private var clickTime: Long = 0
- init {
- fragmentPages.add(HomePageFragment())
- fragmentPages.add(SamplePageFragment())
- fragmentPages.add(MinePageFragment())
- }
-
override fun initData() {
- bottomNavigation.itemIconTintList = null
- bottomNavigation.setOnNavigationItemSelectedListener { menuItem ->
- when (menuItem.itemId) {
- R.id.nav_home -> {
- mainViewPager.currentItem = 0
+ val userViewModel = ViewModelProvider(this)[UserViewModel::class.java]
+ userViewModel.getUserInfo(SaveKeyValues.getValue(LocaleConstant.ACCOUNT, "") as String)
+ userViewModel.userInfo.observe(this) {
+ if (it.code == 200) {
+ SaveKeyValues.putValue(LocaleConstant.USER_ID, it.data.id)
+
+ fragmentPages.add(HomePageFragment(it.data.id))
+ fragmentPages.add(SamplePageFragment())
+ fragmentPages.add(MinePageFragment())
+
+ bottomNavigation.itemIconTintList = null
+ bottomNavigation.setOnNavigationItemSelectedListener { menuItem ->
+ when (menuItem.itemId) {
+ R.id.nav_home -> {
+ mainViewPager.currentItem = 0
+ }
+ R.id.nav_sample -> {
+ mainViewPager.currentItem = 1
+ }
+ R.id.nav_mine -> {
+ mainViewPager.currentItem = 2
+ }
+ }
+ false
}
- R.id.nav_sample -> {
- mainViewPager.currentItem = 1
- }
- R.id.nav_mine -> {
- mainViewPager.currentItem = 2
- }
+ mainViewPager.adapter = ViewPagerAdapter(fragmentPages, supportFragmentManager)
+ mainViewPager.offscreenPageLimit = fragmentPages.size //缓存页数
+ mainViewPager.addOnPageChangeListener(object : ViewPager.OnPageChangeListener {
+ override fun onPageScrollStateChanged(state: Int) {
+
+ }
+
+ override fun onPageScrolled(
+ position: Int,
+ positionOffset: Float,
+ positionOffsetPixels: Int
+ ) {
+
+ }
+
+ override fun onPageSelected(position: Int) {
+ if (menuItem != null) {
+ menuItem!!.isChecked = false
+ } else {
+ bottomNavigation.menu.getItem(0).isChecked = false
+ }
+ menuItem = bottomNavigation.menu.getItem(position)
+ menuItem!!.isChecked = true
+ }
+ })
}
- false
}
- mainViewPager.adapter = ViewPagerAdapter(fragmentPages, supportFragmentManager)
- mainViewPager.offscreenPageLimit = fragmentPages.size //缓存页数
- mainViewPager.addOnPageChangeListener(object : ViewPager.OnPageChangeListener {
- override fun onPageScrollStateChanged(state: Int) {
-
- }
-
- override fun onPageScrolled(
- position: Int,
- positionOffset: Float,
- positionOffsetPixels: Int
- ) {
-
- }
-
- override fun onPageSelected(position: Int) {
- if (menuItem != null) {
- menuItem!!.isChecked = false
- } else {
- bottomNavigation.menu.getItem(0).isChecked = false
- }
- menuItem = bottomNavigation.menu.getItem(position)
- menuItem!!.isChecked = true
- }
- })
}
override fun initEvent() {
diff --git a/app/src/main/java/com/casic/xz/meterage/view/search/SearchAllActivity.kt b/app/src/main/java/com/casic/xz/meterage/view/search/SearchAllActivity.kt
new file mode 100644
index 0000000..ecc8fd7
--- /dev/null
+++ b/app/src/main/java/com/casic/xz/meterage/view/search/SearchAllActivity.kt
@@ -0,0 +1,40 @@
+package com.casic.xz.meterage.view.search
+
+import com.casic.xz.meterage.R
+import com.casic.xz.meterage.extensions.initLayoutImmersionBar
+import com.gyf.immersionbar.ImmersionBar
+import com.pengxh.kt.lite.base.KotlinBaseActivity
+import com.pengxh.kt.lite.extensions.navigatePageTo
+import kotlinx.android.synthetic.main.activity_search_all.*
+import kotlinx.android.synthetic.main.include_search_input_title.*
+
+class SearchAllActivity : KotlinBaseActivity() {
+
+ override fun initData() {
+
+ }
+
+ override fun initEvent() {
+ leftBackView.setOnClickListener { finish() }
+ searchTextView.setOnClickListener {
+ navigatePageTo(inputView.text.toString())
+ }
+ }
+
+ override fun initLayoutView(): Int = R.layout.activity_search_all
+
+ override fun observeRequestState() {
+
+ }
+
+ override fun setupTopBarLayout() {
+ ImmersionBar.with(this).statusBarDarkFont(true).init()
+ initLayoutImmersionBar(rootView)
+ inputView.hint = "查询样品、业务"
+ }
+
+ override fun onResume() {
+ super.onResume()
+ //TODO 流式布局显示查询记录Tag?
+ }
+}
\ No newline at end of file
diff --git a/app/src/main/java/com/casic/xz/meterage/view/search/SearchAllResultActivity.kt b/app/src/main/java/com/casic/xz/meterage/view/search/SearchAllResultActivity.kt
new file mode 100644
index 0000000..adbb570
--- /dev/null
+++ b/app/src/main/java/com/casic/xz/meterage/view/search/SearchAllResultActivity.kt
@@ -0,0 +1,34 @@
+package com.casic.xz.meterage.view.search
+
+import com.casic.xz.meterage.R
+import com.casic.xz.meterage.extensions.initLayoutImmersionBar
+import com.gyf.immersionbar.ImmersionBar
+import com.pengxh.kt.lite.base.KotlinBaseActivity
+import com.pengxh.kt.lite.utils.Constant
+import kotlinx.android.synthetic.main.activity_search_all_reasult.*
+import kotlinx.android.synthetic.main.include_search_title.*
+
+class SearchAllResultActivity : KotlinBaseActivity() {
+
+ private lateinit var param: String
+
+ override fun initData() {
+ param = intent.getStringExtra(Constant.INTENT_PARAM)!!
+ }
+
+ override fun initEvent() {
+ leftBackView.setOnClickListener { finish() }
+ }
+
+ override fun initLayoutView(): Int = R.layout.activity_search_all_reasult
+
+ override fun observeRequestState() {
+
+ }
+
+ override fun setupTopBarLayout() {
+ ImmersionBar.with(this).statusBarDarkFont(true).init()
+ initLayoutImmersionBar(rootView)
+ titleView.text = "查询结果"
+ }
+}
\ No newline at end of file
diff --git a/app/build.gradle b/app/build.gradle
index 298f687..e142ec1 100644
--- a/app/build.gradle
+++ b/app/build.gradle
@@ -3,6 +3,7 @@
apply plugin: 'com.android.application'
apply plugin: 'kotlin-android'
apply plugin: 'kotlin-android-extensions'
+apply plugin: 'org.greenrobot.greendao'
android {
signingConfigs {
@@ -57,6 +58,12 @@
outputFileName = "XZJL_" + getBuildDate() + "_Beta.apk"
}
}
+
+ greendao {
+ schemaVersion 1//数据库版本号
+ targetGenDir 'src/main/java'//设置DaoMaster、DaoSession、Dao目录
+ daoPackage 'com.casic.xz.meterage.greendao'//设置DaoMaster、DaoSession、Dao包名
+ }
}
static def getBuildDate() {
@@ -67,7 +74,7 @@
dependencies {
//基础依赖库
implementation 'com.github.AndroidCoderPeng:Kotlin-lite-lib:1.0.4'
- implementation 'androidx.appcompat:appcompat:1.5.1'
+ implementation 'androidx.appcompat:appcompat:1.6.1'
implementation 'androidx.core:core-ktx:1.9.0'
//Google官方授权框架
implementation 'pub.devrel:easypermissions:3.0.0'
@@ -113,4 +120,6 @@
implementation 'com.github.tiann:FreeReflection:3.1.0'
//单项/数字、二三级联动、日期/时间等滚轮选择器
implementation 'com.github.gzu-liyujiang.AndroidPicker:WheelPicker:4.1.8'
+ //数据库框架
+ implementation 'org.greenrobot:greendao:3.3.0'
}
\ No newline at end of file
diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml
index 972eff9..5b6f9b2 100644
--- a/app/src/main/AndroidManifest.xml
+++ b/app/src/main/AndroidManifest.xml
@@ -69,6 +69,8 @@
+
+
diff --git a/app/src/main/java/com/casic/xz/meterage/base/BaseApplication.kt b/app/src/main/java/com/casic/xz/meterage/base/BaseApplication.kt
index 14a604d..1684c23 100644
--- a/app/src/main/java/com/casic/xz/meterage/base/BaseApplication.kt
+++ b/app/src/main/java/com/casic/xz/meterage/base/BaseApplication.kt
@@ -2,6 +2,8 @@
import android.app.Application
import android.content.Context
+import com.casic.xz.meterage.greendao.DaoMaster
+import com.casic.xz.meterage.greendao.DaoSession
import com.pengxh.kt.lite.utils.SaveKeyValues
import me.weishu.reflection.Reflection
import kotlin.properties.Delegates
@@ -12,12 +14,22 @@
private var application: BaseApplication by Delegates.notNull()
fun get() = application
+
+ private lateinit var daoSession: DaoSession
}
override fun onCreate() {
super.onCreate()
application = this
SaveKeyValues.initSharedPreferences(this)
+
+ val devOpenHelper = DaoMaster.DevOpenHelper(this, "Meterage.db", null)
+ val daoMaster = DaoMaster(devOpenHelper.writableDatabase)
+ daoSession = daoMaster.newSession()
+ }
+
+ fun getDaoSession(): DaoSession {
+ return daoSession
}
//绕过Android 11以上反射限制
diff --git a/app/src/main/java/com/casic/xz/meterage/bean/SearchHistoryBean.java b/app/src/main/java/com/casic/xz/meterage/bean/SearchHistoryBean.java
new file mode 100644
index 0000000..6a46a3a
--- /dev/null
+++ b/app/src/main/java/com/casic/xz/meterage/bean/SearchHistoryBean.java
@@ -0,0 +1,82 @@
+package com.casic.xz.meterage.bean;
+
+import org.greenrobot.greendao.annotation.Entity;
+import org.greenrobot.greendao.annotation.Generated;
+import org.greenrobot.greendao.annotation.Id;
+import org.greenrobot.greendao.annotation.Unique;
+
+@Entity
+public class SearchHistoryBean {
+ @Id(autoincrement = true)
+ private Long id;//主键自增
+
+ @Unique
+ private String uuid;
+ private String keywords;//查询条件-关键字
+ private String searchType;//查询类型
+ private String userId;//用户Id
+ private String searchTime;//查询的时间
+
+ @Generated(hash = 2130561778)
+ public SearchHistoryBean(Long id, String uuid, String keywords,
+ String searchType, String userId, String searchTime) {
+ this.id = id;
+ this.uuid = uuid;
+ this.keywords = keywords;
+ this.searchType = searchType;
+ this.userId = userId;
+ this.searchTime = searchTime;
+ }
+
+ @Generated(hash = 1570282321)
+ public SearchHistoryBean() {
+ }
+
+ public Long getId() {
+ return this.id;
+ }
+
+ public void setId(Long id) {
+ this.id = id;
+ }
+
+ public String getUuid() {
+ return this.uuid;
+ }
+
+ public void setUuid(String uuid) {
+ this.uuid = uuid;
+ }
+
+ public String getKeywords() {
+ return this.keywords;
+ }
+
+ public void setKeywords(String keywords) {
+ this.keywords = keywords;
+ }
+
+ public String getSearchType() {
+ return this.searchType;
+ }
+
+ public void setSearchType(String searchType) {
+ this.searchType = searchType;
+ }
+
+ public String getUserId() {
+ return this.userId;
+ }
+
+ public void setUserId(String userId) {
+ this.userId = userId;
+ }
+
+ public String getSearchTime() {
+ return this.searchTime;
+ }
+
+ public void setSearchTime(String searchTime) {
+ this.searchTime = searchTime;
+ }
+}
diff --git a/app/src/main/java/com/casic/xz/meterage/fragment/HomePageFragment.kt b/app/src/main/java/com/casic/xz/meterage/fragment/HomePageFragment.kt
index 151f951..ae7f5e4 100644
--- a/app/src/main/java/com/casic/xz/meterage/fragment/HomePageFragment.kt
+++ b/app/src/main/java/com/casic/xz/meterage/fragment/HomePageFragment.kt
@@ -15,22 +15,20 @@
import com.casic.xz.meterage.extensions.showEmptyPage
import com.casic.xz.meterage.model.NoticeListModel
import com.casic.xz.meterage.model.RemindListModel
-import com.casic.xz.meterage.model.UserInfoModel
import com.casic.xz.meterage.utils.LoadingDialogHub
import com.casic.xz.meterage.utils.LocaleConstant
import com.casic.xz.meterage.utils.QrConfigCreator
import com.casic.xz.meterage.view.home.*
import com.casic.xz.meterage.view.notice.NoticeListActivity
+import com.casic.xz.meterage.view.search.SearchAllActivity
import com.casic.xz.meterage.vm.MeterageTrainViewModel
import com.casic.xz.meterage.vm.NoticeViewModel
-import com.casic.xz.meterage.vm.UserViewModel
import com.pengxh.kt.lite.adapter.NormalRecyclerAdapter
import com.pengxh.kt.lite.adapter.ViewHolder
import com.pengxh.kt.lite.base.KotlinBaseFragment
import com.pengxh.kt.lite.extensions.convertColor
import com.pengxh.kt.lite.extensions.navigatePageTo
import com.pengxh.kt.lite.extensions.show
-import com.pengxh.kt.lite.utils.SaveKeyValues
import com.pengxh.kt.lite.utils.WeakReferenceHandler
import com.pengxh.kt.lite.vm.LoadState
import com.pengxh.kt.lite.widget.dialog.AlertControlDialog
@@ -39,13 +37,12 @@
import kotlinx.android.synthetic.main.include_empty_view.*
import java.util.*
-class HomePageFragment : KotlinBaseFragment() {
+class HomePageFragment(private val userId: String) : KotlinBaseFragment() {
private val timer = object : Timer() {}
private lateinit var weakReferenceHandler: WeakReferenceHandler
private lateinit var meterageTrainViewModel: MeterageTrainViewModel
private lateinit var noticeViewModel: NoticeViewModel
- private lateinit var userData: UserInfoModel.DataModel
private lateinit var remindAdapter: NormalRecyclerAdapter
private var dataBeans: MutableList = ArrayList()
private var noticeBeans: MutableList = ArrayList()
@@ -170,14 +167,6 @@
true
}
- val userViewModel = ViewModelProvider(this)[UserViewModel::class.java]
- userViewModel.getUserInfo(SaveKeyValues.getValue(LocaleConstant.ACCOUNT, "") as String)
- userViewModel.userInfo.observe(this) {
- if (it.code == 200) {
- userData = it.data
- }
- }
-
meterageTrainViewModel = ViewModelProvider(this)[MeterageTrainViewModel::class.java]
meterageTrainViewModel.signInResult.observe(this) {
if (it.code == 200) {
@@ -296,10 +285,14 @@
}
override fun initEvent() {
+ searchBar.setOnClickListener {
+ requireContext().navigatePageTo()
+ }
+
scanCodeView.setOnClickListener {
qrManager.startScan(requireActivity()) { result ->
if (result.content.isDigitsOnly()) {
- meterageTrainViewModel.signIn(userData.id, result.content)
+ meterageTrainViewModel.signIn(userId, result.content)
} else {
"签到二维码错误,请重新扫描".show(requireContext())
}
diff --git a/app/src/main/java/com/casic/xz/meterage/greendao/DaoMaster.java b/app/src/main/java/com/casic/xz/meterage/greendao/DaoMaster.java
new file mode 100644
index 0000000..d714ce2
--- /dev/null
+++ b/app/src/main/java/com/casic/xz/meterage/greendao/DaoMaster.java
@@ -0,0 +1,96 @@
+package com.casic.xz.meterage.greendao;
+
+import android.content.Context;
+import android.database.sqlite.SQLiteDatabase;
+import android.database.sqlite.SQLiteDatabase.CursorFactory;
+import android.util.Log;
+
+import org.greenrobot.greendao.AbstractDaoMaster;
+import org.greenrobot.greendao.database.Database;
+import org.greenrobot.greendao.database.DatabaseOpenHelper;
+import org.greenrobot.greendao.database.StandardDatabase;
+import org.greenrobot.greendao.identityscope.IdentityScopeType;
+
+
+// THIS CODE IS GENERATED BY greenDAO, DO NOT EDIT.
+/**
+ * Master of DAO (schema version 1): knows all DAOs.
+ */
+public class DaoMaster extends AbstractDaoMaster {
+ public static final int SCHEMA_VERSION = 1;
+
+ /** Creates underlying database table using DAOs. */
+ public static void createAllTables(Database db, boolean ifNotExists) {
+ SearchHistoryBeanDao.createTable(db, ifNotExists);
+ }
+
+ /** Drops underlying database table using DAOs. */
+ public static void dropAllTables(Database db, boolean ifExists) {
+ SearchHistoryBeanDao.dropTable(db, ifExists);
+ }
+
+ /**
+ * WARNING: Drops all table on Upgrade! Use only during development.
+ * Convenience method using a {@link DevOpenHelper}.
+ */
+ public static DaoSession newDevSession(Context context, String name) {
+ Database db = new DevOpenHelper(context, name).getWritableDb();
+ DaoMaster daoMaster = new DaoMaster(db);
+ return daoMaster.newSession();
+ }
+
+ public DaoMaster(SQLiteDatabase db) {
+ this(new StandardDatabase(db));
+ }
+
+ public DaoMaster(Database db) {
+ super(db, SCHEMA_VERSION);
+ registerDaoClass(SearchHistoryBeanDao.class);
+ }
+
+ public DaoSession newSession() {
+ return new DaoSession(db, IdentityScopeType.Session, daoConfigMap);
+ }
+
+ public DaoSession newSession(IdentityScopeType type) {
+ return new DaoSession(db, type, daoConfigMap);
+ }
+
+ /**
+ * Calls {@link #createAllTables(Database, boolean)} in {@link #onCreate(Database)} -
+ */
+ public static abstract class OpenHelper extends DatabaseOpenHelper {
+ public OpenHelper(Context context, String name) {
+ super(context, name, SCHEMA_VERSION);
+ }
+
+ public OpenHelper(Context context, String name, CursorFactory factory) {
+ super(context, name, factory, SCHEMA_VERSION);
+ }
+
+ @Override
+ public void onCreate(Database db) {
+ Log.i("greenDAO", "Creating tables for schema version " + SCHEMA_VERSION);
+ createAllTables(db, false);
+ }
+ }
+
+ /** WARNING: Drops all table on Upgrade! Use only during development. */
+ public static class DevOpenHelper extends OpenHelper {
+ public DevOpenHelper(Context context, String name) {
+ super(context, name);
+ }
+
+ public DevOpenHelper(Context context, String name, CursorFactory factory) {
+ super(context, name, factory);
+ }
+
+ @Override
+ public void onUpgrade(Database db, int oldVersion, int newVersion) {
+ Log.i("greenDAO", "Upgrading schema from version " + oldVersion + " to " + newVersion + " by dropping all tables");
+ dropAllTables(db, true);
+ onCreate(db);
+ }
+ }
+
+}
diff --git a/app/src/main/java/com/casic/xz/meterage/greendao/DaoSession.java b/app/src/main/java/com/casic/xz/meterage/greendao/DaoSession.java
new file mode 100644
index 0000000..0e80024
--- /dev/null
+++ b/app/src/main/java/com/casic/xz/meterage/greendao/DaoSession.java
@@ -0,0 +1,46 @@
+package com.casic.xz.meterage.greendao;
+
+import com.casic.xz.meterage.bean.SearchHistoryBean;
+
+import org.greenrobot.greendao.AbstractDao;
+import org.greenrobot.greendao.AbstractDaoSession;
+import org.greenrobot.greendao.database.Database;
+import org.greenrobot.greendao.identityscope.IdentityScopeType;
+import org.greenrobot.greendao.internal.DaoConfig;
+
+import java.util.Map;
+
+// THIS CODE IS GENERATED BY greenDAO, DO NOT EDIT.
+
+/**
+ * {@inheritDoc}
+ *
+ * @see org.greenrobot.greendao.AbstractDaoSession
+ */
+public class DaoSession extends AbstractDaoSession {
+
+ private final DaoConfig searchHistoryBeanDaoConfig;
+
+ private final SearchHistoryBeanDao searchHistoryBeanDao;
+
+ public DaoSession(Database db, IdentityScopeType type, Map>, DaoConfig>
+ daoConfigMap) {
+ super(db);
+
+ searchHistoryBeanDaoConfig = daoConfigMap.get(SearchHistoryBeanDao.class).clone();
+ searchHistoryBeanDaoConfig.initIdentityScope(type);
+
+ searchHistoryBeanDao = new SearchHistoryBeanDao(searchHistoryBeanDaoConfig, this);
+
+ registerDao(SearchHistoryBean.class, searchHistoryBeanDao);
+ }
+
+ public void clear() {
+ searchHistoryBeanDaoConfig.clearIdentityScope();
+ }
+
+ public SearchHistoryBeanDao getSearchHistoryBeanDao() {
+ return searchHistoryBeanDao;
+ }
+
+}
diff --git a/app/src/main/java/com/casic/xz/meterage/greendao/SearchHistoryBeanDao.java b/app/src/main/java/com/casic/xz/meterage/greendao/SearchHistoryBeanDao.java
new file mode 100644
index 0000000..5923d02
--- /dev/null
+++ b/app/src/main/java/com/casic/xz/meterage/greendao/SearchHistoryBeanDao.java
@@ -0,0 +1,185 @@
+package com.casic.xz.meterage.greendao;
+
+import android.database.Cursor;
+import android.database.sqlite.SQLiteStatement;
+
+import com.casic.xz.meterage.bean.SearchHistoryBean;
+
+import org.greenrobot.greendao.AbstractDao;
+import org.greenrobot.greendao.Property;
+import org.greenrobot.greendao.database.Database;
+import org.greenrobot.greendao.database.DatabaseStatement;
+import org.greenrobot.greendao.internal.DaoConfig;
+
+// THIS CODE IS GENERATED BY greenDAO, DO NOT EDIT.
+/**
+ * DAO for table "SEARCH_HISTORY_BEAN".
+*/
+public class SearchHistoryBeanDao extends AbstractDao {
+
+ public static final String TABLENAME = "SEARCH_HISTORY_BEAN";
+
+ /**
+ * Properties of entity SearchHistoryBean.
+ * Can be used for QueryBuilder and for referencing column names.
+ */
+ public static class Properties {
+ public final static Property Id = new Property(0, Long.class, "id", true, "_id");
+ public final static Property Uuid = new Property(1, String.class, "uuid", false, "UUID");
+ public final static Property Keywords = new Property(2, String.class, "keywords", false, "KEYWORDS");
+ public final static Property SearchType = new Property(3, String.class, "searchType", false, "SEARCH_TYPE");
+ public final static Property UserId = new Property(4, String.class, "userId", false, "USER_ID");
+ public final static Property SearchTime = new Property(5, String.class, "searchTime", false, "SEARCH_TIME");
+ }
+
+
+ public SearchHistoryBeanDao(DaoConfig config) {
+ super(config);
+ }
+
+ public SearchHistoryBeanDao(DaoConfig config, DaoSession daoSession) {
+ super(config, daoSession);
+ }
+
+ /** Creates the underlying database table. */
+ public static void createTable(Database db, boolean ifNotExists) {
+ String constraint = ifNotExists? "IF NOT EXISTS ": "";
+ db.execSQL("CREATE TABLE " + constraint + "\"SEARCH_HISTORY_BEAN\" (" + //
+ "\"_id\" INTEGER PRIMARY KEY AUTOINCREMENT ," + // 0: id
+ "\"UUID\" TEXT UNIQUE ," + // 1: uuid
+ "\"KEYWORDS\" TEXT," + // 2: keywords
+ "\"SEARCH_TYPE\" TEXT," + // 3: searchType
+ "\"USER_ID\" TEXT," + // 4: userId
+ "\"SEARCH_TIME\" TEXT);"); // 5: searchTime
+ }
+
+ /** Drops the underlying database table. */
+ public static void dropTable(Database db, boolean ifExists) {
+ String sql = "DROP TABLE " + (ifExists ? "IF EXISTS " : "") + "\"SEARCH_HISTORY_BEAN\"";
+ db.execSQL(sql);
+ }
+
+ @Override
+ protected final void bindValues(DatabaseStatement stmt, SearchHistoryBean entity) {
+ stmt.clearBindings();
+
+ Long id = entity.getId();
+ if (id != null) {
+ stmt.bindLong(1, id);
+ }
+
+ String uuid = entity.getUuid();
+ if (uuid != null) {
+ stmt.bindString(2, uuid);
+ }
+
+ String keywords = entity.getKeywords();
+ if (keywords != null) {
+ stmt.bindString(3, keywords);
+ }
+
+ String searchType = entity.getSearchType();
+ if (searchType != null) {
+ stmt.bindString(4, searchType);
+ }
+
+ String userId = entity.getUserId();
+ if (userId != null) {
+ stmt.bindString(5, userId);
+ }
+
+ String searchTime = entity.getSearchTime();
+ if (searchTime != null) {
+ stmt.bindString(6, searchTime);
+ }
+ }
+
+ @Override
+ protected final void bindValues(SQLiteStatement stmt, SearchHistoryBean entity) {
+ stmt.clearBindings();
+
+ Long id = entity.getId();
+ if (id != null) {
+ stmt.bindLong(1, id);
+ }
+
+ String uuid = entity.getUuid();
+ if (uuid != null) {
+ stmt.bindString(2, uuid);
+ }
+
+ String keywords = entity.getKeywords();
+ if (keywords != null) {
+ stmt.bindString(3, keywords);
+ }
+
+ String searchType = entity.getSearchType();
+ if (searchType != null) {
+ stmt.bindString(4, searchType);
+ }
+
+ String userId = entity.getUserId();
+ if (userId != null) {
+ stmt.bindString(5, userId);
+ }
+
+ String searchTime = entity.getSearchTime();
+ if (searchTime != null) {
+ stmt.bindString(6, searchTime);
+ }
+ }
+
+ @Override
+ public Long readKey(Cursor cursor, int offset) {
+ return cursor.isNull(offset + 0) ? null : cursor.getLong(offset + 0);
+ }
+
+ @Override
+ public SearchHistoryBean readEntity(Cursor cursor, int offset) {
+ SearchHistoryBean entity = new SearchHistoryBean( //
+ cursor.isNull(offset + 0) ? null : cursor.getLong(offset + 0), // id
+ cursor.isNull(offset + 1) ? null : cursor.getString(offset + 1), // uuid
+ cursor.isNull(offset + 2) ? null : cursor.getString(offset + 2), // keywords
+ cursor.isNull(offset + 3) ? null : cursor.getString(offset + 3), // searchType
+ cursor.isNull(offset + 4) ? null : cursor.getString(offset + 4), // userId
+ cursor.isNull(offset + 5) ? null : cursor.getString(offset + 5) // searchTime
+ );
+ return entity;
+ }
+
+ @Override
+ public void readEntity(Cursor cursor, SearchHistoryBean entity, int offset) {
+ entity.setId(cursor.isNull(offset + 0) ? null : cursor.getLong(offset + 0));
+ entity.setUuid(cursor.isNull(offset + 1) ? null : cursor.getString(offset + 1));
+ entity.setKeywords(cursor.isNull(offset + 2) ? null : cursor.getString(offset + 2));
+ entity.setSearchType(cursor.isNull(offset + 3) ? null : cursor.getString(offset + 3));
+ entity.setUserId(cursor.isNull(offset + 4) ? null : cursor.getString(offset + 4));
+ entity.setSearchTime(cursor.isNull(offset + 5) ? null : cursor.getString(offset + 5));
+ }
+
+ @Override
+ protected final Long updateKeyAfterInsert(SearchHistoryBean entity, long rowId) {
+ entity.setId(rowId);
+ return rowId;
+ }
+
+ @Override
+ public Long getKey(SearchHistoryBean entity) {
+ if(entity != null) {
+ return entity.getId();
+ } else {
+ return null;
+ }
+ }
+
+ @Override
+ public boolean hasKey(SearchHistoryBean entity) {
+ return entity.getId() != null;
+ }
+
+ @Override
+ protected final boolean isEntityUpdateable() {
+ return true;
+ }
+
+}
diff --git a/app/src/main/java/com/casic/xz/meterage/utils/DataBaseManager.kt b/app/src/main/java/com/casic/xz/meterage/utils/DataBaseManager.kt
new file mode 100644
index 0000000..52fe032
--- /dev/null
+++ b/app/src/main/java/com/casic/xz/meterage/utils/DataBaseManager.kt
@@ -0,0 +1,45 @@
+package com.casic.xz.meterage.utils
+
+import com.casic.xz.meterage.base.BaseApplication
+import com.casic.xz.meterage.bean.SearchHistoryBean
+import com.casic.xz.meterage.greendao.SearchHistoryBeanDao
+import com.pengxh.kt.lite.extensions.timestampToCompleteDate
+import com.pengxh.kt.lite.utils.SaveKeyValues
+import java.util.*
+
+class DataBaseManager private constructor() {
+
+ companion object {
+ //Kotlin委托模式双重锁单例
+ val get: DataBaseManager by lazy(mode = LazyThreadSafetyMode.SYNCHRONIZED) {
+ DataBaseManager()
+ }
+ }
+
+ private val searchBeanDao by lazy { BaseApplication.get().getDaoSession().searchHistoryBeanDao }
+ private val userId by lazy { SaveKeyValues.getValue(LocaleConstant.USER_ID, "") }
+
+ fun addSearchHistory(keywords: String, searchType: String) {
+ val bean = SearchHistoryBean()
+ bean.uuid = UUID.randomUUID().toString()
+ bean.keywords = keywords
+ bean.searchType = searchType
+ bean.userId = userId.toString()
+ bean.searchTime = System.currentTimeMillis().timestampToCompleteDate()
+ searchBeanDao.insert(bean)
+ }
+
+ fun queryHistoryByType(searchType: String): MutableList {
+ return searchBeanDao.queryBuilder().where(
+ SearchHistoryBeanDao.Properties.UserId.eq(userId),
+ SearchHistoryBeanDao.Properties.SearchType.eq(searchType)
+ ).list()
+ }
+
+ fun deleteHistoryByType(searchType: String) {
+ val list = queryHistoryByType(searchType)
+ list.forEach {
+ searchBeanDao.delete(it)
+ }
+ }
+}
\ No newline at end of file
diff --git a/app/src/main/java/com/casic/xz/meterage/utils/LocaleConstant.kt b/app/src/main/java/com/casic/xz/meterage/utils/LocaleConstant.kt
index cc2848b..2ea47a0 100644
--- a/app/src/main/java/com/casic/xz/meterage/utils/LocaleConstant.kt
+++ b/app/src/main/java/com/casic/xz/meterage/utils/LocaleConstant.kt
@@ -62,4 +62,5 @@
const val File_SERVER_URL = "http://111.198.10.15:21408"
const val ACCOUNT = "account"
const val PASSWORD = "password"
+ const val USER_ID = "userId"
}
\ No newline at end of file
diff --git a/app/src/main/java/com/casic/xz/meterage/utils/SearchType.kt b/app/src/main/java/com/casic/xz/meterage/utils/SearchType.kt
new file mode 100644
index 0000000..5f5253e
--- /dev/null
+++ b/app/src/main/java/com/casic/xz/meterage/utils/SearchType.kt
@@ -0,0 +1,8 @@
+package com.casic.xz.meterage.utils
+
+object SearchType {
+ /**
+ * 搜索仪器设备
+ * */
+ const val Equipment = "0"
+}
diff --git a/app/src/main/java/com/casic/xz/meterage/view/MainActivity.kt b/app/src/main/java/com/casic/xz/meterage/view/MainActivity.kt
index 28836e0..8fb0793 100644
--- a/app/src/main/java/com/casic/xz/meterage/view/MainActivity.kt
+++ b/app/src/main/java/com/casic/xz/meterage/view/MainActivity.kt
@@ -3,15 +3,19 @@
import android.view.KeyEvent
import android.view.MenuItem
import androidx.fragment.app.Fragment
+import androidx.lifecycle.ViewModelProvider
import androidx.viewpager.widget.ViewPager
import com.casic.xz.meterage.R
import com.casic.xz.meterage.adapter.ViewPagerAdapter
import com.casic.xz.meterage.fragment.HomePageFragment
import com.casic.xz.meterage.fragment.MinePageFragment
import com.casic.xz.meterage.fragment.SamplePageFragment
+import com.casic.xz.meterage.utils.LocaleConstant
+import com.casic.xz.meterage.vm.UserViewModel
import com.gyf.immersionbar.ImmersionBar
import com.pengxh.kt.lite.base.KotlinBaseActivity
import com.pengxh.kt.lite.extensions.show
+import com.pengxh.kt.lite.utils.SaveKeyValues
import kotlinx.android.synthetic.main.activity_main.*
class MainActivity : KotlinBaseActivity() {
@@ -20,53 +24,59 @@
private var fragmentPages: ArrayList = ArrayList()
private var clickTime: Long = 0
- init {
- fragmentPages.add(HomePageFragment())
- fragmentPages.add(SamplePageFragment())
- fragmentPages.add(MinePageFragment())
- }
-
override fun initData() {
- bottomNavigation.itemIconTintList = null
- bottomNavigation.setOnNavigationItemSelectedListener { menuItem ->
- when (menuItem.itemId) {
- R.id.nav_home -> {
- mainViewPager.currentItem = 0
+ val userViewModel = ViewModelProvider(this)[UserViewModel::class.java]
+ userViewModel.getUserInfo(SaveKeyValues.getValue(LocaleConstant.ACCOUNT, "") as String)
+ userViewModel.userInfo.observe(this) {
+ if (it.code == 200) {
+ SaveKeyValues.putValue(LocaleConstant.USER_ID, it.data.id)
+
+ fragmentPages.add(HomePageFragment(it.data.id))
+ fragmentPages.add(SamplePageFragment())
+ fragmentPages.add(MinePageFragment())
+
+ bottomNavigation.itemIconTintList = null
+ bottomNavigation.setOnNavigationItemSelectedListener { menuItem ->
+ when (menuItem.itemId) {
+ R.id.nav_home -> {
+ mainViewPager.currentItem = 0
+ }
+ R.id.nav_sample -> {
+ mainViewPager.currentItem = 1
+ }
+ R.id.nav_mine -> {
+ mainViewPager.currentItem = 2
+ }
+ }
+ false
}
- R.id.nav_sample -> {
- mainViewPager.currentItem = 1
- }
- R.id.nav_mine -> {
- mainViewPager.currentItem = 2
- }
+ mainViewPager.adapter = ViewPagerAdapter(fragmentPages, supportFragmentManager)
+ mainViewPager.offscreenPageLimit = fragmentPages.size //缓存页数
+ mainViewPager.addOnPageChangeListener(object : ViewPager.OnPageChangeListener {
+ override fun onPageScrollStateChanged(state: Int) {
+
+ }
+
+ override fun onPageScrolled(
+ position: Int,
+ positionOffset: Float,
+ positionOffsetPixels: Int
+ ) {
+
+ }
+
+ override fun onPageSelected(position: Int) {
+ if (menuItem != null) {
+ menuItem!!.isChecked = false
+ } else {
+ bottomNavigation.menu.getItem(0).isChecked = false
+ }
+ menuItem = bottomNavigation.menu.getItem(position)
+ menuItem!!.isChecked = true
+ }
+ })
}
- false
}
- mainViewPager.adapter = ViewPagerAdapter(fragmentPages, supportFragmentManager)
- mainViewPager.offscreenPageLimit = fragmentPages.size //缓存页数
- mainViewPager.addOnPageChangeListener(object : ViewPager.OnPageChangeListener {
- override fun onPageScrollStateChanged(state: Int) {
-
- }
-
- override fun onPageScrolled(
- position: Int,
- positionOffset: Float,
- positionOffsetPixels: Int
- ) {
-
- }
-
- override fun onPageSelected(position: Int) {
- if (menuItem != null) {
- menuItem!!.isChecked = false
- } else {
- bottomNavigation.menu.getItem(0).isChecked = false
- }
- menuItem = bottomNavigation.menu.getItem(position)
- menuItem!!.isChecked = true
- }
- })
}
override fun initEvent() {
diff --git a/app/src/main/java/com/casic/xz/meterage/view/search/SearchAllActivity.kt b/app/src/main/java/com/casic/xz/meterage/view/search/SearchAllActivity.kt
new file mode 100644
index 0000000..ecc8fd7
--- /dev/null
+++ b/app/src/main/java/com/casic/xz/meterage/view/search/SearchAllActivity.kt
@@ -0,0 +1,40 @@
+package com.casic.xz.meterage.view.search
+
+import com.casic.xz.meterage.R
+import com.casic.xz.meterage.extensions.initLayoutImmersionBar
+import com.gyf.immersionbar.ImmersionBar
+import com.pengxh.kt.lite.base.KotlinBaseActivity
+import com.pengxh.kt.lite.extensions.navigatePageTo
+import kotlinx.android.synthetic.main.activity_search_all.*
+import kotlinx.android.synthetic.main.include_search_input_title.*
+
+class SearchAllActivity : KotlinBaseActivity() {
+
+ override fun initData() {
+
+ }
+
+ override fun initEvent() {
+ leftBackView.setOnClickListener { finish() }
+ searchTextView.setOnClickListener {
+ navigatePageTo(inputView.text.toString())
+ }
+ }
+
+ override fun initLayoutView(): Int = R.layout.activity_search_all
+
+ override fun observeRequestState() {
+
+ }
+
+ override fun setupTopBarLayout() {
+ ImmersionBar.with(this).statusBarDarkFont(true).init()
+ initLayoutImmersionBar(rootView)
+ inputView.hint = "查询样品、业务"
+ }
+
+ override fun onResume() {
+ super.onResume()
+ //TODO 流式布局显示查询记录Tag?
+ }
+}
\ No newline at end of file
diff --git a/app/src/main/java/com/casic/xz/meterage/view/search/SearchAllResultActivity.kt b/app/src/main/java/com/casic/xz/meterage/view/search/SearchAllResultActivity.kt
new file mode 100644
index 0000000..adbb570
--- /dev/null
+++ b/app/src/main/java/com/casic/xz/meterage/view/search/SearchAllResultActivity.kt
@@ -0,0 +1,34 @@
+package com.casic.xz.meterage.view.search
+
+import com.casic.xz.meterage.R
+import com.casic.xz.meterage.extensions.initLayoutImmersionBar
+import com.gyf.immersionbar.ImmersionBar
+import com.pengxh.kt.lite.base.KotlinBaseActivity
+import com.pengxh.kt.lite.utils.Constant
+import kotlinx.android.synthetic.main.activity_search_all_reasult.*
+import kotlinx.android.synthetic.main.include_search_title.*
+
+class SearchAllResultActivity : KotlinBaseActivity() {
+
+ private lateinit var param: String
+
+ override fun initData() {
+ param = intent.getStringExtra(Constant.INTENT_PARAM)!!
+ }
+
+ override fun initEvent() {
+ leftBackView.setOnClickListener { finish() }
+ }
+
+ override fun initLayoutView(): Int = R.layout.activity_search_all_reasult
+
+ override fun observeRequestState() {
+
+ }
+
+ override fun setupTopBarLayout() {
+ ImmersionBar.with(this).statusBarDarkFont(true).init()
+ initLayoutImmersionBar(rootView)
+ titleView.text = "查询结果"
+ }
+}
\ No newline at end of file
diff --git a/app/src/main/java/com/casic/xz/meterage/view/search/SearchEquipmentActivity.kt b/app/src/main/java/com/casic/xz/meterage/view/search/SearchEquipmentActivity.kt
index f5c98d6..3551790 100644
--- a/app/src/main/java/com/casic/xz/meterage/view/search/SearchEquipmentActivity.kt
+++ b/app/src/main/java/com/casic/xz/meterage/view/search/SearchEquipmentActivity.kt
@@ -1,27 +1,98 @@
package com.casic.xz.meterage.view.search
import com.casic.xz.meterage.R
+import com.casic.xz.meterage.bean.SearchHistoryBean
import com.casic.xz.meterage.extensions.initLayoutImmersionBar
+import com.casic.xz.meterage.utils.DataBaseManager
+import com.casic.xz.meterage.utils.SearchType
import com.gyf.immersionbar.ImmersionBar
+import com.pengxh.kt.lite.adapter.NormalRecyclerAdapter
+import com.pengxh.kt.lite.adapter.ViewHolder
import com.pengxh.kt.lite.base.KotlinBaseActivity
import com.pengxh.kt.lite.extensions.navigatePageTo
+import com.pengxh.kt.lite.utils.WeakReferenceHandler
+import com.pengxh.kt.lite.widget.dialog.AlertControlDialog
import kotlinx.android.synthetic.main.activity_search_equipment.*
import kotlinx.android.synthetic.main.include_search_input_title.*
+
/**
* 搜索仪器设备
* */
class SearchEquipmentActivity : KotlinBaseActivity() {
- override fun initData() {
+ private lateinit var weakReferenceHandler: WeakReferenceHandler
+ private lateinit var historyAdapter: NormalRecyclerAdapter
+ private var dataBeans: MutableList = ArrayList()
+ private var isRefresh = false
+ override fun initData() {
+ weakReferenceHandler = WeakReferenceHandler {
+ if (it.what == 2023031001) {
+ if (isRefresh) {
+ historyAdapter.notifyDataSetChanged()
+ } else {
+ historyAdapter = object :
+ NormalRecyclerAdapter(
+ R.layout.item_search_rv_l, dataBeans
+ ) {
+ override fun convertView(
+ viewHolder: ViewHolder, position: Int, item: SearchHistoryBean
+ ) {
+ viewHolder.setText(R.id.searchTagView, item.keywords)
+ }
+ }
+ historyRecyclerView.adapter = historyAdapter
+ historyAdapter.setOnItemClickedListener(object :
+ NormalRecyclerAdapter.OnItemClickedListener {
+ override fun onItemClicked(position: Int, t: SearchHistoryBean) {
+ navigatePageTo(t.keywords)
+ }
+ })
+ }
+ }
+ true
+ }
+ }
+
+ override fun onResume() {
+ super.onResume()
+ dataBeans = DataBaseManager.get.queryHistoryByType(SearchType.Equipment)
+ weakReferenceHandler.sendEmptyMessage(2023031001)
}
override fun initEvent() {
leftBackView.setOnClickListener { finish() }
searchTextView.setOnClickListener {
+ if (!inputView.text.isNullOrBlank()) {
+ DataBaseManager.get.addSearchHistory(
+ inputView.text.toString(), SearchType.Equipment
+ )
+ }
+
navigatePageTo(inputView.text.toString())
}
+
+ deleteHistoryView.setOnClickListener {
+ AlertControlDialog.Builder()
+ .setContext(this)
+ .setTitle("提示")
+ .setMessage("确定将所有搜索记录删除?")
+ .setNegativeButton("取消")
+ .setPositiveButton("确定")
+ .setOnDialogButtonClickListener(object :
+ AlertControlDialog.OnDialogButtonClickListener {
+ override fun onCancelClick() {
+
+ }
+
+ override fun onConfirmClick() {
+ DataBaseManager.get.deleteHistoryByType(SearchType.Equipment)
+ dataBeans.clear()
+ historyAdapter.notifyDataSetChanged()
+ }
+ }).build().show()
+ }
}
override fun initLayoutView(): Int = R.layout.activity_search_equipment
@@ -35,9 +106,4 @@
initLayoutImmersionBar(rootView)
inputView.hint = "查询设备名称、编号"
}
-
- override fun onResume() {
- super.onResume()
- //TODO 流式布局显示查询记录Tag?
- }
}
\ No newline at end of file
diff --git a/app/build.gradle b/app/build.gradle
index 298f687..e142ec1 100644
--- a/app/build.gradle
+++ b/app/build.gradle
@@ -3,6 +3,7 @@
apply plugin: 'com.android.application'
apply plugin: 'kotlin-android'
apply plugin: 'kotlin-android-extensions'
+apply plugin: 'org.greenrobot.greendao'
android {
signingConfigs {
@@ -57,6 +58,12 @@
outputFileName = "XZJL_" + getBuildDate() + "_Beta.apk"
}
}
+
+ greendao {
+ schemaVersion 1//数据库版本号
+ targetGenDir 'src/main/java'//设置DaoMaster、DaoSession、Dao目录
+ daoPackage 'com.casic.xz.meterage.greendao'//设置DaoMaster、DaoSession、Dao包名
+ }
}
static def getBuildDate() {
@@ -67,7 +74,7 @@
dependencies {
//基础依赖库
implementation 'com.github.AndroidCoderPeng:Kotlin-lite-lib:1.0.4'
- implementation 'androidx.appcompat:appcompat:1.5.1'
+ implementation 'androidx.appcompat:appcompat:1.6.1'
implementation 'androidx.core:core-ktx:1.9.0'
//Google官方授权框架
implementation 'pub.devrel:easypermissions:3.0.0'
@@ -113,4 +120,6 @@
implementation 'com.github.tiann:FreeReflection:3.1.0'
//单项/数字、二三级联动、日期/时间等滚轮选择器
implementation 'com.github.gzu-liyujiang.AndroidPicker:WheelPicker:4.1.8'
+ //数据库框架
+ implementation 'org.greenrobot:greendao:3.3.0'
}
\ No newline at end of file
diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml
index 972eff9..5b6f9b2 100644
--- a/app/src/main/AndroidManifest.xml
+++ b/app/src/main/AndroidManifest.xml
@@ -69,6 +69,8 @@
+
+
diff --git a/app/src/main/java/com/casic/xz/meterage/base/BaseApplication.kt b/app/src/main/java/com/casic/xz/meterage/base/BaseApplication.kt
index 14a604d..1684c23 100644
--- a/app/src/main/java/com/casic/xz/meterage/base/BaseApplication.kt
+++ b/app/src/main/java/com/casic/xz/meterage/base/BaseApplication.kt
@@ -2,6 +2,8 @@
import android.app.Application
import android.content.Context
+import com.casic.xz.meterage.greendao.DaoMaster
+import com.casic.xz.meterage.greendao.DaoSession
import com.pengxh.kt.lite.utils.SaveKeyValues
import me.weishu.reflection.Reflection
import kotlin.properties.Delegates
@@ -12,12 +14,22 @@
private var application: BaseApplication by Delegates.notNull()
fun get() = application
+
+ private lateinit var daoSession: DaoSession
}
override fun onCreate() {
super.onCreate()
application = this
SaveKeyValues.initSharedPreferences(this)
+
+ val devOpenHelper = DaoMaster.DevOpenHelper(this, "Meterage.db", null)
+ val daoMaster = DaoMaster(devOpenHelper.writableDatabase)
+ daoSession = daoMaster.newSession()
+ }
+
+ fun getDaoSession(): DaoSession {
+ return daoSession
}
//绕过Android 11以上反射限制
diff --git a/app/src/main/java/com/casic/xz/meterage/bean/SearchHistoryBean.java b/app/src/main/java/com/casic/xz/meterage/bean/SearchHistoryBean.java
new file mode 100644
index 0000000..6a46a3a
--- /dev/null
+++ b/app/src/main/java/com/casic/xz/meterage/bean/SearchHistoryBean.java
@@ -0,0 +1,82 @@
+package com.casic.xz.meterage.bean;
+
+import org.greenrobot.greendao.annotation.Entity;
+import org.greenrobot.greendao.annotation.Generated;
+import org.greenrobot.greendao.annotation.Id;
+import org.greenrobot.greendao.annotation.Unique;
+
+@Entity
+public class SearchHistoryBean {
+ @Id(autoincrement = true)
+ private Long id;//主键自增
+
+ @Unique
+ private String uuid;
+ private String keywords;//查询条件-关键字
+ private String searchType;//查询类型
+ private String userId;//用户Id
+ private String searchTime;//查询的时间
+
+ @Generated(hash = 2130561778)
+ public SearchHistoryBean(Long id, String uuid, String keywords,
+ String searchType, String userId, String searchTime) {
+ this.id = id;
+ this.uuid = uuid;
+ this.keywords = keywords;
+ this.searchType = searchType;
+ this.userId = userId;
+ this.searchTime = searchTime;
+ }
+
+ @Generated(hash = 1570282321)
+ public SearchHistoryBean() {
+ }
+
+ public Long getId() {
+ return this.id;
+ }
+
+ public void setId(Long id) {
+ this.id = id;
+ }
+
+ public String getUuid() {
+ return this.uuid;
+ }
+
+ public void setUuid(String uuid) {
+ this.uuid = uuid;
+ }
+
+ public String getKeywords() {
+ return this.keywords;
+ }
+
+ public void setKeywords(String keywords) {
+ this.keywords = keywords;
+ }
+
+ public String getSearchType() {
+ return this.searchType;
+ }
+
+ public void setSearchType(String searchType) {
+ this.searchType = searchType;
+ }
+
+ public String getUserId() {
+ return this.userId;
+ }
+
+ public void setUserId(String userId) {
+ this.userId = userId;
+ }
+
+ public String getSearchTime() {
+ return this.searchTime;
+ }
+
+ public void setSearchTime(String searchTime) {
+ this.searchTime = searchTime;
+ }
+}
diff --git a/app/src/main/java/com/casic/xz/meterage/fragment/HomePageFragment.kt b/app/src/main/java/com/casic/xz/meterage/fragment/HomePageFragment.kt
index 151f951..ae7f5e4 100644
--- a/app/src/main/java/com/casic/xz/meterage/fragment/HomePageFragment.kt
+++ b/app/src/main/java/com/casic/xz/meterage/fragment/HomePageFragment.kt
@@ -15,22 +15,20 @@
import com.casic.xz.meterage.extensions.showEmptyPage
import com.casic.xz.meterage.model.NoticeListModel
import com.casic.xz.meterage.model.RemindListModel
-import com.casic.xz.meterage.model.UserInfoModel
import com.casic.xz.meterage.utils.LoadingDialogHub
import com.casic.xz.meterage.utils.LocaleConstant
import com.casic.xz.meterage.utils.QrConfigCreator
import com.casic.xz.meterage.view.home.*
import com.casic.xz.meterage.view.notice.NoticeListActivity
+import com.casic.xz.meterage.view.search.SearchAllActivity
import com.casic.xz.meterage.vm.MeterageTrainViewModel
import com.casic.xz.meterage.vm.NoticeViewModel
-import com.casic.xz.meterage.vm.UserViewModel
import com.pengxh.kt.lite.adapter.NormalRecyclerAdapter
import com.pengxh.kt.lite.adapter.ViewHolder
import com.pengxh.kt.lite.base.KotlinBaseFragment
import com.pengxh.kt.lite.extensions.convertColor
import com.pengxh.kt.lite.extensions.navigatePageTo
import com.pengxh.kt.lite.extensions.show
-import com.pengxh.kt.lite.utils.SaveKeyValues
import com.pengxh.kt.lite.utils.WeakReferenceHandler
import com.pengxh.kt.lite.vm.LoadState
import com.pengxh.kt.lite.widget.dialog.AlertControlDialog
@@ -39,13 +37,12 @@
import kotlinx.android.synthetic.main.include_empty_view.*
import java.util.*
-class HomePageFragment : KotlinBaseFragment() {
+class HomePageFragment(private val userId: String) : KotlinBaseFragment() {
private val timer = object : Timer() {}
private lateinit var weakReferenceHandler: WeakReferenceHandler
private lateinit var meterageTrainViewModel: MeterageTrainViewModel
private lateinit var noticeViewModel: NoticeViewModel
- private lateinit var userData: UserInfoModel.DataModel
private lateinit var remindAdapter: NormalRecyclerAdapter
private var dataBeans: MutableList = ArrayList()
private var noticeBeans: MutableList = ArrayList()
@@ -170,14 +167,6 @@
true
}
- val userViewModel = ViewModelProvider(this)[UserViewModel::class.java]
- userViewModel.getUserInfo(SaveKeyValues.getValue(LocaleConstant.ACCOUNT, "") as String)
- userViewModel.userInfo.observe(this) {
- if (it.code == 200) {
- userData = it.data
- }
- }
-
meterageTrainViewModel = ViewModelProvider(this)[MeterageTrainViewModel::class.java]
meterageTrainViewModel.signInResult.observe(this) {
if (it.code == 200) {
@@ -296,10 +285,14 @@
}
override fun initEvent() {
+ searchBar.setOnClickListener {
+ requireContext().navigatePageTo()
+ }
+
scanCodeView.setOnClickListener {
qrManager.startScan(requireActivity()) { result ->
if (result.content.isDigitsOnly()) {
- meterageTrainViewModel.signIn(userData.id, result.content)
+ meterageTrainViewModel.signIn(userId, result.content)
} else {
"签到二维码错误,请重新扫描".show(requireContext())
}
diff --git a/app/src/main/java/com/casic/xz/meterage/greendao/DaoMaster.java b/app/src/main/java/com/casic/xz/meterage/greendao/DaoMaster.java
new file mode 100644
index 0000000..d714ce2
--- /dev/null
+++ b/app/src/main/java/com/casic/xz/meterage/greendao/DaoMaster.java
@@ -0,0 +1,96 @@
+package com.casic.xz.meterage.greendao;
+
+import android.content.Context;
+import android.database.sqlite.SQLiteDatabase;
+import android.database.sqlite.SQLiteDatabase.CursorFactory;
+import android.util.Log;
+
+import org.greenrobot.greendao.AbstractDaoMaster;
+import org.greenrobot.greendao.database.Database;
+import org.greenrobot.greendao.database.DatabaseOpenHelper;
+import org.greenrobot.greendao.database.StandardDatabase;
+import org.greenrobot.greendao.identityscope.IdentityScopeType;
+
+
+// THIS CODE IS GENERATED BY greenDAO, DO NOT EDIT.
+/**
+ * Master of DAO (schema version 1): knows all DAOs.
+ */
+public class DaoMaster extends AbstractDaoMaster {
+ public static final int SCHEMA_VERSION = 1;
+
+ /** Creates underlying database table using DAOs. */
+ public static void createAllTables(Database db, boolean ifNotExists) {
+ SearchHistoryBeanDao.createTable(db, ifNotExists);
+ }
+
+ /** Drops underlying database table using DAOs. */
+ public static void dropAllTables(Database db, boolean ifExists) {
+ SearchHistoryBeanDao.dropTable(db, ifExists);
+ }
+
+ /**
+ * WARNING: Drops all table on Upgrade! Use only during development.
+ * Convenience method using a {@link DevOpenHelper}.
+ */
+ public static DaoSession newDevSession(Context context, String name) {
+ Database db = new DevOpenHelper(context, name).getWritableDb();
+ DaoMaster daoMaster = new DaoMaster(db);
+ return daoMaster.newSession();
+ }
+
+ public DaoMaster(SQLiteDatabase db) {
+ this(new StandardDatabase(db));
+ }
+
+ public DaoMaster(Database db) {
+ super(db, SCHEMA_VERSION);
+ registerDaoClass(SearchHistoryBeanDao.class);
+ }
+
+ public DaoSession newSession() {
+ return new DaoSession(db, IdentityScopeType.Session, daoConfigMap);
+ }
+
+ public DaoSession newSession(IdentityScopeType type) {
+ return new DaoSession(db, type, daoConfigMap);
+ }
+
+ /**
+ * Calls {@link #createAllTables(Database, boolean)} in {@link #onCreate(Database)} -
+ */
+ public static abstract class OpenHelper extends DatabaseOpenHelper {
+ public OpenHelper(Context context, String name) {
+ super(context, name, SCHEMA_VERSION);
+ }
+
+ public OpenHelper(Context context, String name, CursorFactory factory) {
+ super(context, name, factory, SCHEMA_VERSION);
+ }
+
+ @Override
+ public void onCreate(Database db) {
+ Log.i("greenDAO", "Creating tables for schema version " + SCHEMA_VERSION);
+ createAllTables(db, false);
+ }
+ }
+
+ /** WARNING: Drops all table on Upgrade! Use only during development. */
+ public static class DevOpenHelper extends OpenHelper {
+ public DevOpenHelper(Context context, String name) {
+ super(context, name);
+ }
+
+ public DevOpenHelper(Context context, String name, CursorFactory factory) {
+ super(context, name, factory);
+ }
+
+ @Override
+ public void onUpgrade(Database db, int oldVersion, int newVersion) {
+ Log.i("greenDAO", "Upgrading schema from version " + oldVersion + " to " + newVersion + " by dropping all tables");
+ dropAllTables(db, true);
+ onCreate(db);
+ }
+ }
+
+}
diff --git a/app/src/main/java/com/casic/xz/meterage/greendao/DaoSession.java b/app/src/main/java/com/casic/xz/meterage/greendao/DaoSession.java
new file mode 100644
index 0000000..0e80024
--- /dev/null
+++ b/app/src/main/java/com/casic/xz/meterage/greendao/DaoSession.java
@@ -0,0 +1,46 @@
+package com.casic.xz.meterage.greendao;
+
+import com.casic.xz.meterage.bean.SearchHistoryBean;
+
+import org.greenrobot.greendao.AbstractDao;
+import org.greenrobot.greendao.AbstractDaoSession;
+import org.greenrobot.greendao.database.Database;
+import org.greenrobot.greendao.identityscope.IdentityScopeType;
+import org.greenrobot.greendao.internal.DaoConfig;
+
+import java.util.Map;
+
+// THIS CODE IS GENERATED BY greenDAO, DO NOT EDIT.
+
+/**
+ * {@inheritDoc}
+ *
+ * @see org.greenrobot.greendao.AbstractDaoSession
+ */
+public class DaoSession extends AbstractDaoSession {
+
+ private final DaoConfig searchHistoryBeanDaoConfig;
+
+ private final SearchHistoryBeanDao searchHistoryBeanDao;
+
+ public DaoSession(Database db, IdentityScopeType type, Map>, DaoConfig>
+ daoConfigMap) {
+ super(db);
+
+ searchHistoryBeanDaoConfig = daoConfigMap.get(SearchHistoryBeanDao.class).clone();
+ searchHistoryBeanDaoConfig.initIdentityScope(type);
+
+ searchHistoryBeanDao = new SearchHistoryBeanDao(searchHistoryBeanDaoConfig, this);
+
+ registerDao(SearchHistoryBean.class, searchHistoryBeanDao);
+ }
+
+ public void clear() {
+ searchHistoryBeanDaoConfig.clearIdentityScope();
+ }
+
+ public SearchHistoryBeanDao getSearchHistoryBeanDao() {
+ return searchHistoryBeanDao;
+ }
+
+}
diff --git a/app/src/main/java/com/casic/xz/meterage/greendao/SearchHistoryBeanDao.java b/app/src/main/java/com/casic/xz/meterage/greendao/SearchHistoryBeanDao.java
new file mode 100644
index 0000000..5923d02
--- /dev/null
+++ b/app/src/main/java/com/casic/xz/meterage/greendao/SearchHistoryBeanDao.java
@@ -0,0 +1,185 @@
+package com.casic.xz.meterage.greendao;
+
+import android.database.Cursor;
+import android.database.sqlite.SQLiteStatement;
+
+import com.casic.xz.meterage.bean.SearchHistoryBean;
+
+import org.greenrobot.greendao.AbstractDao;
+import org.greenrobot.greendao.Property;
+import org.greenrobot.greendao.database.Database;
+import org.greenrobot.greendao.database.DatabaseStatement;
+import org.greenrobot.greendao.internal.DaoConfig;
+
+// THIS CODE IS GENERATED BY greenDAO, DO NOT EDIT.
+/**
+ * DAO for table "SEARCH_HISTORY_BEAN".
+*/
+public class SearchHistoryBeanDao extends AbstractDao {
+
+ public static final String TABLENAME = "SEARCH_HISTORY_BEAN";
+
+ /**
+ * Properties of entity SearchHistoryBean.
+ * Can be used for QueryBuilder and for referencing column names.
+ */
+ public static class Properties {
+ public final static Property Id = new Property(0, Long.class, "id", true, "_id");
+ public final static Property Uuid = new Property(1, String.class, "uuid", false, "UUID");
+ public final static Property Keywords = new Property(2, String.class, "keywords", false, "KEYWORDS");
+ public final static Property SearchType = new Property(3, String.class, "searchType", false, "SEARCH_TYPE");
+ public final static Property UserId = new Property(4, String.class, "userId", false, "USER_ID");
+ public final static Property SearchTime = new Property(5, String.class, "searchTime", false, "SEARCH_TIME");
+ }
+
+
+ public SearchHistoryBeanDao(DaoConfig config) {
+ super(config);
+ }
+
+ public SearchHistoryBeanDao(DaoConfig config, DaoSession daoSession) {
+ super(config, daoSession);
+ }
+
+ /** Creates the underlying database table. */
+ public static void createTable(Database db, boolean ifNotExists) {
+ String constraint = ifNotExists? "IF NOT EXISTS ": "";
+ db.execSQL("CREATE TABLE " + constraint + "\"SEARCH_HISTORY_BEAN\" (" + //
+ "\"_id\" INTEGER PRIMARY KEY AUTOINCREMENT ," + // 0: id
+ "\"UUID\" TEXT UNIQUE ," + // 1: uuid
+ "\"KEYWORDS\" TEXT," + // 2: keywords
+ "\"SEARCH_TYPE\" TEXT," + // 3: searchType
+ "\"USER_ID\" TEXT," + // 4: userId
+ "\"SEARCH_TIME\" TEXT);"); // 5: searchTime
+ }
+
+ /** Drops the underlying database table. */
+ public static void dropTable(Database db, boolean ifExists) {
+ String sql = "DROP TABLE " + (ifExists ? "IF EXISTS " : "") + "\"SEARCH_HISTORY_BEAN\"";
+ db.execSQL(sql);
+ }
+
+ @Override
+ protected final void bindValues(DatabaseStatement stmt, SearchHistoryBean entity) {
+ stmt.clearBindings();
+
+ Long id = entity.getId();
+ if (id != null) {
+ stmt.bindLong(1, id);
+ }
+
+ String uuid = entity.getUuid();
+ if (uuid != null) {
+ stmt.bindString(2, uuid);
+ }
+
+ String keywords = entity.getKeywords();
+ if (keywords != null) {
+ stmt.bindString(3, keywords);
+ }
+
+ String searchType = entity.getSearchType();
+ if (searchType != null) {
+ stmt.bindString(4, searchType);
+ }
+
+ String userId = entity.getUserId();
+ if (userId != null) {
+ stmt.bindString(5, userId);
+ }
+
+ String searchTime = entity.getSearchTime();
+ if (searchTime != null) {
+ stmt.bindString(6, searchTime);
+ }
+ }
+
+ @Override
+ protected final void bindValues(SQLiteStatement stmt, SearchHistoryBean entity) {
+ stmt.clearBindings();
+
+ Long id = entity.getId();
+ if (id != null) {
+ stmt.bindLong(1, id);
+ }
+
+ String uuid = entity.getUuid();
+ if (uuid != null) {
+ stmt.bindString(2, uuid);
+ }
+
+ String keywords = entity.getKeywords();
+ if (keywords != null) {
+ stmt.bindString(3, keywords);
+ }
+
+ String searchType = entity.getSearchType();
+ if (searchType != null) {
+ stmt.bindString(4, searchType);
+ }
+
+ String userId = entity.getUserId();
+ if (userId != null) {
+ stmt.bindString(5, userId);
+ }
+
+ String searchTime = entity.getSearchTime();
+ if (searchTime != null) {
+ stmt.bindString(6, searchTime);
+ }
+ }
+
+ @Override
+ public Long readKey(Cursor cursor, int offset) {
+ return cursor.isNull(offset + 0) ? null : cursor.getLong(offset + 0);
+ }
+
+ @Override
+ public SearchHistoryBean readEntity(Cursor cursor, int offset) {
+ SearchHistoryBean entity = new SearchHistoryBean( //
+ cursor.isNull(offset + 0) ? null : cursor.getLong(offset + 0), // id
+ cursor.isNull(offset + 1) ? null : cursor.getString(offset + 1), // uuid
+ cursor.isNull(offset + 2) ? null : cursor.getString(offset + 2), // keywords
+ cursor.isNull(offset + 3) ? null : cursor.getString(offset + 3), // searchType
+ cursor.isNull(offset + 4) ? null : cursor.getString(offset + 4), // userId
+ cursor.isNull(offset + 5) ? null : cursor.getString(offset + 5) // searchTime
+ );
+ return entity;
+ }
+
+ @Override
+ public void readEntity(Cursor cursor, SearchHistoryBean entity, int offset) {
+ entity.setId(cursor.isNull(offset + 0) ? null : cursor.getLong(offset + 0));
+ entity.setUuid(cursor.isNull(offset + 1) ? null : cursor.getString(offset + 1));
+ entity.setKeywords(cursor.isNull(offset + 2) ? null : cursor.getString(offset + 2));
+ entity.setSearchType(cursor.isNull(offset + 3) ? null : cursor.getString(offset + 3));
+ entity.setUserId(cursor.isNull(offset + 4) ? null : cursor.getString(offset + 4));
+ entity.setSearchTime(cursor.isNull(offset + 5) ? null : cursor.getString(offset + 5));
+ }
+
+ @Override
+ protected final Long updateKeyAfterInsert(SearchHistoryBean entity, long rowId) {
+ entity.setId(rowId);
+ return rowId;
+ }
+
+ @Override
+ public Long getKey(SearchHistoryBean entity) {
+ if(entity != null) {
+ return entity.getId();
+ } else {
+ return null;
+ }
+ }
+
+ @Override
+ public boolean hasKey(SearchHistoryBean entity) {
+ return entity.getId() != null;
+ }
+
+ @Override
+ protected final boolean isEntityUpdateable() {
+ return true;
+ }
+
+}
diff --git a/app/src/main/java/com/casic/xz/meterage/utils/DataBaseManager.kt b/app/src/main/java/com/casic/xz/meterage/utils/DataBaseManager.kt
new file mode 100644
index 0000000..52fe032
--- /dev/null
+++ b/app/src/main/java/com/casic/xz/meterage/utils/DataBaseManager.kt
@@ -0,0 +1,45 @@
+package com.casic.xz.meterage.utils
+
+import com.casic.xz.meterage.base.BaseApplication
+import com.casic.xz.meterage.bean.SearchHistoryBean
+import com.casic.xz.meterage.greendao.SearchHistoryBeanDao
+import com.pengxh.kt.lite.extensions.timestampToCompleteDate
+import com.pengxh.kt.lite.utils.SaveKeyValues
+import java.util.*
+
+class DataBaseManager private constructor() {
+
+ companion object {
+ //Kotlin委托模式双重锁单例
+ val get: DataBaseManager by lazy(mode = LazyThreadSafetyMode.SYNCHRONIZED) {
+ DataBaseManager()
+ }
+ }
+
+ private val searchBeanDao by lazy { BaseApplication.get().getDaoSession().searchHistoryBeanDao }
+ private val userId by lazy { SaveKeyValues.getValue(LocaleConstant.USER_ID, "") }
+
+ fun addSearchHistory(keywords: String, searchType: String) {
+ val bean = SearchHistoryBean()
+ bean.uuid = UUID.randomUUID().toString()
+ bean.keywords = keywords
+ bean.searchType = searchType
+ bean.userId = userId.toString()
+ bean.searchTime = System.currentTimeMillis().timestampToCompleteDate()
+ searchBeanDao.insert(bean)
+ }
+
+ fun queryHistoryByType(searchType: String): MutableList {
+ return searchBeanDao.queryBuilder().where(
+ SearchHistoryBeanDao.Properties.UserId.eq(userId),
+ SearchHistoryBeanDao.Properties.SearchType.eq(searchType)
+ ).list()
+ }
+
+ fun deleteHistoryByType(searchType: String) {
+ val list = queryHistoryByType(searchType)
+ list.forEach {
+ searchBeanDao.delete(it)
+ }
+ }
+}
\ No newline at end of file
diff --git a/app/src/main/java/com/casic/xz/meterage/utils/LocaleConstant.kt b/app/src/main/java/com/casic/xz/meterage/utils/LocaleConstant.kt
index cc2848b..2ea47a0 100644
--- a/app/src/main/java/com/casic/xz/meterage/utils/LocaleConstant.kt
+++ b/app/src/main/java/com/casic/xz/meterage/utils/LocaleConstant.kt
@@ -62,4 +62,5 @@
const val File_SERVER_URL = "http://111.198.10.15:21408"
const val ACCOUNT = "account"
const val PASSWORD = "password"
+ const val USER_ID = "userId"
}
\ No newline at end of file
diff --git a/app/src/main/java/com/casic/xz/meterage/utils/SearchType.kt b/app/src/main/java/com/casic/xz/meterage/utils/SearchType.kt
new file mode 100644
index 0000000..5f5253e
--- /dev/null
+++ b/app/src/main/java/com/casic/xz/meterage/utils/SearchType.kt
@@ -0,0 +1,8 @@
+package com.casic.xz.meterage.utils
+
+object SearchType {
+ /**
+ * 搜索仪器设备
+ * */
+ const val Equipment = "0"
+}
diff --git a/app/src/main/java/com/casic/xz/meterage/view/MainActivity.kt b/app/src/main/java/com/casic/xz/meterage/view/MainActivity.kt
index 28836e0..8fb0793 100644
--- a/app/src/main/java/com/casic/xz/meterage/view/MainActivity.kt
+++ b/app/src/main/java/com/casic/xz/meterage/view/MainActivity.kt
@@ -3,15 +3,19 @@
import android.view.KeyEvent
import android.view.MenuItem
import androidx.fragment.app.Fragment
+import androidx.lifecycle.ViewModelProvider
import androidx.viewpager.widget.ViewPager
import com.casic.xz.meterage.R
import com.casic.xz.meterage.adapter.ViewPagerAdapter
import com.casic.xz.meterage.fragment.HomePageFragment
import com.casic.xz.meterage.fragment.MinePageFragment
import com.casic.xz.meterage.fragment.SamplePageFragment
+import com.casic.xz.meterage.utils.LocaleConstant
+import com.casic.xz.meterage.vm.UserViewModel
import com.gyf.immersionbar.ImmersionBar
import com.pengxh.kt.lite.base.KotlinBaseActivity
import com.pengxh.kt.lite.extensions.show
+import com.pengxh.kt.lite.utils.SaveKeyValues
import kotlinx.android.synthetic.main.activity_main.*
class MainActivity : KotlinBaseActivity() {
@@ -20,53 +24,59 @@
private var fragmentPages: ArrayList = ArrayList()
private var clickTime: Long = 0
- init {
- fragmentPages.add(HomePageFragment())
- fragmentPages.add(SamplePageFragment())
- fragmentPages.add(MinePageFragment())
- }
-
override fun initData() {
- bottomNavigation.itemIconTintList = null
- bottomNavigation.setOnNavigationItemSelectedListener { menuItem ->
- when (menuItem.itemId) {
- R.id.nav_home -> {
- mainViewPager.currentItem = 0
+ val userViewModel = ViewModelProvider(this)[UserViewModel::class.java]
+ userViewModel.getUserInfo(SaveKeyValues.getValue(LocaleConstant.ACCOUNT, "") as String)
+ userViewModel.userInfo.observe(this) {
+ if (it.code == 200) {
+ SaveKeyValues.putValue(LocaleConstant.USER_ID, it.data.id)
+
+ fragmentPages.add(HomePageFragment(it.data.id))
+ fragmentPages.add(SamplePageFragment())
+ fragmentPages.add(MinePageFragment())
+
+ bottomNavigation.itemIconTintList = null
+ bottomNavigation.setOnNavigationItemSelectedListener { menuItem ->
+ when (menuItem.itemId) {
+ R.id.nav_home -> {
+ mainViewPager.currentItem = 0
+ }
+ R.id.nav_sample -> {
+ mainViewPager.currentItem = 1
+ }
+ R.id.nav_mine -> {
+ mainViewPager.currentItem = 2
+ }
+ }
+ false
}
- R.id.nav_sample -> {
- mainViewPager.currentItem = 1
- }
- R.id.nav_mine -> {
- mainViewPager.currentItem = 2
- }
+ mainViewPager.adapter = ViewPagerAdapter(fragmentPages, supportFragmentManager)
+ mainViewPager.offscreenPageLimit = fragmentPages.size //缓存页数
+ mainViewPager.addOnPageChangeListener(object : ViewPager.OnPageChangeListener {
+ override fun onPageScrollStateChanged(state: Int) {
+
+ }
+
+ override fun onPageScrolled(
+ position: Int,
+ positionOffset: Float,
+ positionOffsetPixels: Int
+ ) {
+
+ }
+
+ override fun onPageSelected(position: Int) {
+ if (menuItem != null) {
+ menuItem!!.isChecked = false
+ } else {
+ bottomNavigation.menu.getItem(0).isChecked = false
+ }
+ menuItem = bottomNavigation.menu.getItem(position)
+ menuItem!!.isChecked = true
+ }
+ })
}
- false
}
- mainViewPager.adapter = ViewPagerAdapter(fragmentPages, supportFragmentManager)
- mainViewPager.offscreenPageLimit = fragmentPages.size //缓存页数
- mainViewPager.addOnPageChangeListener(object : ViewPager.OnPageChangeListener {
- override fun onPageScrollStateChanged(state: Int) {
-
- }
-
- override fun onPageScrolled(
- position: Int,
- positionOffset: Float,
- positionOffsetPixels: Int
- ) {
-
- }
-
- override fun onPageSelected(position: Int) {
- if (menuItem != null) {
- menuItem!!.isChecked = false
- } else {
- bottomNavigation.menu.getItem(0).isChecked = false
- }
- menuItem = bottomNavigation.menu.getItem(position)
- menuItem!!.isChecked = true
- }
- })
}
override fun initEvent() {
diff --git a/app/src/main/java/com/casic/xz/meterage/view/search/SearchAllActivity.kt b/app/src/main/java/com/casic/xz/meterage/view/search/SearchAllActivity.kt
new file mode 100644
index 0000000..ecc8fd7
--- /dev/null
+++ b/app/src/main/java/com/casic/xz/meterage/view/search/SearchAllActivity.kt
@@ -0,0 +1,40 @@
+package com.casic.xz.meterage.view.search
+
+import com.casic.xz.meterage.R
+import com.casic.xz.meterage.extensions.initLayoutImmersionBar
+import com.gyf.immersionbar.ImmersionBar
+import com.pengxh.kt.lite.base.KotlinBaseActivity
+import com.pengxh.kt.lite.extensions.navigatePageTo
+import kotlinx.android.synthetic.main.activity_search_all.*
+import kotlinx.android.synthetic.main.include_search_input_title.*
+
+class SearchAllActivity : KotlinBaseActivity() {
+
+ override fun initData() {
+
+ }
+
+ override fun initEvent() {
+ leftBackView.setOnClickListener { finish() }
+ searchTextView.setOnClickListener {
+ navigatePageTo(inputView.text.toString())
+ }
+ }
+
+ override fun initLayoutView(): Int = R.layout.activity_search_all
+
+ override fun observeRequestState() {
+
+ }
+
+ override fun setupTopBarLayout() {
+ ImmersionBar.with(this).statusBarDarkFont(true).init()
+ initLayoutImmersionBar(rootView)
+ inputView.hint = "查询样品、业务"
+ }
+
+ override fun onResume() {
+ super.onResume()
+ //TODO 流式布局显示查询记录Tag?
+ }
+}
\ No newline at end of file
diff --git a/app/src/main/java/com/casic/xz/meterage/view/search/SearchAllResultActivity.kt b/app/src/main/java/com/casic/xz/meterage/view/search/SearchAllResultActivity.kt
new file mode 100644
index 0000000..adbb570
--- /dev/null
+++ b/app/src/main/java/com/casic/xz/meterage/view/search/SearchAllResultActivity.kt
@@ -0,0 +1,34 @@
+package com.casic.xz.meterage.view.search
+
+import com.casic.xz.meterage.R
+import com.casic.xz.meterage.extensions.initLayoutImmersionBar
+import com.gyf.immersionbar.ImmersionBar
+import com.pengxh.kt.lite.base.KotlinBaseActivity
+import com.pengxh.kt.lite.utils.Constant
+import kotlinx.android.synthetic.main.activity_search_all_reasult.*
+import kotlinx.android.synthetic.main.include_search_title.*
+
+class SearchAllResultActivity : KotlinBaseActivity() {
+
+ private lateinit var param: String
+
+ override fun initData() {
+ param = intent.getStringExtra(Constant.INTENT_PARAM)!!
+ }
+
+ override fun initEvent() {
+ leftBackView.setOnClickListener { finish() }
+ }
+
+ override fun initLayoutView(): Int = R.layout.activity_search_all_reasult
+
+ override fun observeRequestState() {
+
+ }
+
+ override fun setupTopBarLayout() {
+ ImmersionBar.with(this).statusBarDarkFont(true).init()
+ initLayoutImmersionBar(rootView)
+ titleView.text = "查询结果"
+ }
+}
\ No newline at end of file
diff --git a/app/src/main/java/com/casic/xz/meterage/view/search/SearchEquipmentActivity.kt b/app/src/main/java/com/casic/xz/meterage/view/search/SearchEquipmentActivity.kt
index f5c98d6..3551790 100644
--- a/app/src/main/java/com/casic/xz/meterage/view/search/SearchEquipmentActivity.kt
+++ b/app/src/main/java/com/casic/xz/meterage/view/search/SearchEquipmentActivity.kt
@@ -1,27 +1,98 @@
package com.casic.xz.meterage.view.search
import com.casic.xz.meterage.R
+import com.casic.xz.meterage.bean.SearchHistoryBean
import com.casic.xz.meterage.extensions.initLayoutImmersionBar
+import com.casic.xz.meterage.utils.DataBaseManager
+import com.casic.xz.meterage.utils.SearchType
import com.gyf.immersionbar.ImmersionBar
+import com.pengxh.kt.lite.adapter.NormalRecyclerAdapter
+import com.pengxh.kt.lite.adapter.ViewHolder
import com.pengxh.kt.lite.base.KotlinBaseActivity
import com.pengxh.kt.lite.extensions.navigatePageTo
+import com.pengxh.kt.lite.utils.WeakReferenceHandler
+import com.pengxh.kt.lite.widget.dialog.AlertControlDialog
import kotlinx.android.synthetic.main.activity_search_equipment.*
import kotlinx.android.synthetic.main.include_search_input_title.*
+
/**
* 搜索仪器设备
* */
class SearchEquipmentActivity : KotlinBaseActivity() {
- override fun initData() {
+ private lateinit var weakReferenceHandler: WeakReferenceHandler
+ private lateinit var historyAdapter: NormalRecyclerAdapter
+ private var dataBeans: MutableList = ArrayList()
+ private var isRefresh = false
+ override fun initData() {
+ weakReferenceHandler = WeakReferenceHandler {
+ if (it.what == 2023031001) {
+ if (isRefresh) {
+ historyAdapter.notifyDataSetChanged()
+ } else {
+ historyAdapter = object :
+ NormalRecyclerAdapter(
+ R.layout.item_search_rv_l, dataBeans
+ ) {
+ override fun convertView(
+ viewHolder: ViewHolder, position: Int, item: SearchHistoryBean
+ ) {
+ viewHolder.setText(R.id.searchTagView, item.keywords)
+ }
+ }
+ historyRecyclerView.adapter = historyAdapter
+ historyAdapter.setOnItemClickedListener(object :
+ NormalRecyclerAdapter.OnItemClickedListener {
+ override fun onItemClicked(position: Int, t: SearchHistoryBean) {
+ navigatePageTo(t.keywords)
+ }
+ })
+ }
+ }
+ true
+ }
+ }
+
+ override fun onResume() {
+ super.onResume()
+ dataBeans = DataBaseManager.get.queryHistoryByType(SearchType.Equipment)
+ weakReferenceHandler.sendEmptyMessage(2023031001)
}
override fun initEvent() {
leftBackView.setOnClickListener { finish() }
searchTextView.setOnClickListener {
+ if (!inputView.text.isNullOrBlank()) {
+ DataBaseManager.get.addSearchHistory(
+ inputView.text.toString(), SearchType.Equipment
+ )
+ }
+
navigatePageTo(inputView.text.toString())
}
+
+ deleteHistoryView.setOnClickListener {
+ AlertControlDialog.Builder()
+ .setContext(this)
+ .setTitle("提示")
+ .setMessage("确定将所有搜索记录删除?")
+ .setNegativeButton("取消")
+ .setPositiveButton("确定")
+ .setOnDialogButtonClickListener(object :
+ AlertControlDialog.OnDialogButtonClickListener {
+ override fun onCancelClick() {
+
+ }
+
+ override fun onConfirmClick() {
+ DataBaseManager.get.deleteHistoryByType(SearchType.Equipment)
+ dataBeans.clear()
+ historyAdapter.notifyDataSetChanged()
+ }
+ }).build().show()
+ }
}
override fun initLayoutView(): Int = R.layout.activity_search_equipment
@@ -35,9 +106,4 @@
initLayoutImmersionBar(rootView)
inputView.hint = "查询设备名称、编号"
}
-
- override fun onResume() {
- super.onResume()
- //TODO 流式布局显示查询记录Tag?
- }
}
\ No newline at end of file
diff --git a/app/src/main/res/drawable/ic_delete.xml b/app/src/main/res/drawable/ic_delete.xml
new file mode 100644
index 0000000..1810342
--- /dev/null
+++ b/app/src/main/res/drawable/ic_delete.xml
@@ -0,0 +1,9 @@
+
+
+
diff --git a/app/build.gradle b/app/build.gradle
index 298f687..e142ec1 100644
--- a/app/build.gradle
+++ b/app/build.gradle
@@ -3,6 +3,7 @@
apply plugin: 'com.android.application'
apply plugin: 'kotlin-android'
apply plugin: 'kotlin-android-extensions'
+apply plugin: 'org.greenrobot.greendao'
android {
signingConfigs {
@@ -57,6 +58,12 @@
outputFileName = "XZJL_" + getBuildDate() + "_Beta.apk"
}
}
+
+ greendao {
+ schemaVersion 1//数据库版本号
+ targetGenDir 'src/main/java'//设置DaoMaster、DaoSession、Dao目录
+ daoPackage 'com.casic.xz.meterage.greendao'//设置DaoMaster、DaoSession、Dao包名
+ }
}
static def getBuildDate() {
@@ -67,7 +74,7 @@
dependencies {
//基础依赖库
implementation 'com.github.AndroidCoderPeng:Kotlin-lite-lib:1.0.4'
- implementation 'androidx.appcompat:appcompat:1.5.1'
+ implementation 'androidx.appcompat:appcompat:1.6.1'
implementation 'androidx.core:core-ktx:1.9.0'
//Google官方授权框架
implementation 'pub.devrel:easypermissions:3.0.0'
@@ -113,4 +120,6 @@
implementation 'com.github.tiann:FreeReflection:3.1.0'
//单项/数字、二三级联动、日期/时间等滚轮选择器
implementation 'com.github.gzu-liyujiang.AndroidPicker:WheelPicker:4.1.8'
+ //数据库框架
+ implementation 'org.greenrobot:greendao:3.3.0'
}
\ No newline at end of file
diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml
index 972eff9..5b6f9b2 100644
--- a/app/src/main/AndroidManifest.xml
+++ b/app/src/main/AndroidManifest.xml
@@ -69,6 +69,8 @@
+
+
diff --git a/app/src/main/java/com/casic/xz/meterage/base/BaseApplication.kt b/app/src/main/java/com/casic/xz/meterage/base/BaseApplication.kt
index 14a604d..1684c23 100644
--- a/app/src/main/java/com/casic/xz/meterage/base/BaseApplication.kt
+++ b/app/src/main/java/com/casic/xz/meterage/base/BaseApplication.kt
@@ -2,6 +2,8 @@
import android.app.Application
import android.content.Context
+import com.casic.xz.meterage.greendao.DaoMaster
+import com.casic.xz.meterage.greendao.DaoSession
import com.pengxh.kt.lite.utils.SaveKeyValues
import me.weishu.reflection.Reflection
import kotlin.properties.Delegates
@@ -12,12 +14,22 @@
private var application: BaseApplication by Delegates.notNull()
fun get() = application
+
+ private lateinit var daoSession: DaoSession
}
override fun onCreate() {
super.onCreate()
application = this
SaveKeyValues.initSharedPreferences(this)
+
+ val devOpenHelper = DaoMaster.DevOpenHelper(this, "Meterage.db", null)
+ val daoMaster = DaoMaster(devOpenHelper.writableDatabase)
+ daoSession = daoMaster.newSession()
+ }
+
+ fun getDaoSession(): DaoSession {
+ return daoSession
}
//绕过Android 11以上反射限制
diff --git a/app/src/main/java/com/casic/xz/meterage/bean/SearchHistoryBean.java b/app/src/main/java/com/casic/xz/meterage/bean/SearchHistoryBean.java
new file mode 100644
index 0000000..6a46a3a
--- /dev/null
+++ b/app/src/main/java/com/casic/xz/meterage/bean/SearchHistoryBean.java
@@ -0,0 +1,82 @@
+package com.casic.xz.meterage.bean;
+
+import org.greenrobot.greendao.annotation.Entity;
+import org.greenrobot.greendao.annotation.Generated;
+import org.greenrobot.greendao.annotation.Id;
+import org.greenrobot.greendao.annotation.Unique;
+
+@Entity
+public class SearchHistoryBean {
+ @Id(autoincrement = true)
+ private Long id;//主键自增
+
+ @Unique
+ private String uuid;
+ private String keywords;//查询条件-关键字
+ private String searchType;//查询类型
+ private String userId;//用户Id
+ private String searchTime;//查询的时间
+
+ @Generated(hash = 2130561778)
+ public SearchHistoryBean(Long id, String uuid, String keywords,
+ String searchType, String userId, String searchTime) {
+ this.id = id;
+ this.uuid = uuid;
+ this.keywords = keywords;
+ this.searchType = searchType;
+ this.userId = userId;
+ this.searchTime = searchTime;
+ }
+
+ @Generated(hash = 1570282321)
+ public SearchHistoryBean() {
+ }
+
+ public Long getId() {
+ return this.id;
+ }
+
+ public void setId(Long id) {
+ this.id = id;
+ }
+
+ public String getUuid() {
+ return this.uuid;
+ }
+
+ public void setUuid(String uuid) {
+ this.uuid = uuid;
+ }
+
+ public String getKeywords() {
+ return this.keywords;
+ }
+
+ public void setKeywords(String keywords) {
+ this.keywords = keywords;
+ }
+
+ public String getSearchType() {
+ return this.searchType;
+ }
+
+ public void setSearchType(String searchType) {
+ this.searchType = searchType;
+ }
+
+ public String getUserId() {
+ return this.userId;
+ }
+
+ public void setUserId(String userId) {
+ this.userId = userId;
+ }
+
+ public String getSearchTime() {
+ return this.searchTime;
+ }
+
+ public void setSearchTime(String searchTime) {
+ this.searchTime = searchTime;
+ }
+}
diff --git a/app/src/main/java/com/casic/xz/meterage/fragment/HomePageFragment.kt b/app/src/main/java/com/casic/xz/meterage/fragment/HomePageFragment.kt
index 151f951..ae7f5e4 100644
--- a/app/src/main/java/com/casic/xz/meterage/fragment/HomePageFragment.kt
+++ b/app/src/main/java/com/casic/xz/meterage/fragment/HomePageFragment.kt
@@ -15,22 +15,20 @@
import com.casic.xz.meterage.extensions.showEmptyPage
import com.casic.xz.meterage.model.NoticeListModel
import com.casic.xz.meterage.model.RemindListModel
-import com.casic.xz.meterage.model.UserInfoModel
import com.casic.xz.meterage.utils.LoadingDialogHub
import com.casic.xz.meterage.utils.LocaleConstant
import com.casic.xz.meterage.utils.QrConfigCreator
import com.casic.xz.meterage.view.home.*
import com.casic.xz.meterage.view.notice.NoticeListActivity
+import com.casic.xz.meterage.view.search.SearchAllActivity
import com.casic.xz.meterage.vm.MeterageTrainViewModel
import com.casic.xz.meterage.vm.NoticeViewModel
-import com.casic.xz.meterage.vm.UserViewModel
import com.pengxh.kt.lite.adapter.NormalRecyclerAdapter
import com.pengxh.kt.lite.adapter.ViewHolder
import com.pengxh.kt.lite.base.KotlinBaseFragment
import com.pengxh.kt.lite.extensions.convertColor
import com.pengxh.kt.lite.extensions.navigatePageTo
import com.pengxh.kt.lite.extensions.show
-import com.pengxh.kt.lite.utils.SaveKeyValues
import com.pengxh.kt.lite.utils.WeakReferenceHandler
import com.pengxh.kt.lite.vm.LoadState
import com.pengxh.kt.lite.widget.dialog.AlertControlDialog
@@ -39,13 +37,12 @@
import kotlinx.android.synthetic.main.include_empty_view.*
import java.util.*
-class HomePageFragment : KotlinBaseFragment() {
+class HomePageFragment(private val userId: String) : KotlinBaseFragment() {
private val timer = object : Timer() {}
private lateinit var weakReferenceHandler: WeakReferenceHandler
private lateinit var meterageTrainViewModel: MeterageTrainViewModel
private lateinit var noticeViewModel: NoticeViewModel
- private lateinit var userData: UserInfoModel.DataModel
private lateinit var remindAdapter: NormalRecyclerAdapter
private var dataBeans: MutableList = ArrayList()
private var noticeBeans: MutableList = ArrayList()
@@ -170,14 +167,6 @@
true
}
- val userViewModel = ViewModelProvider(this)[UserViewModel::class.java]
- userViewModel.getUserInfo(SaveKeyValues.getValue(LocaleConstant.ACCOUNT, "") as String)
- userViewModel.userInfo.observe(this) {
- if (it.code == 200) {
- userData = it.data
- }
- }
-
meterageTrainViewModel = ViewModelProvider(this)[MeterageTrainViewModel::class.java]
meterageTrainViewModel.signInResult.observe(this) {
if (it.code == 200) {
@@ -296,10 +285,14 @@
}
override fun initEvent() {
+ searchBar.setOnClickListener {
+ requireContext().navigatePageTo()
+ }
+
scanCodeView.setOnClickListener {
qrManager.startScan(requireActivity()) { result ->
if (result.content.isDigitsOnly()) {
- meterageTrainViewModel.signIn(userData.id, result.content)
+ meterageTrainViewModel.signIn(userId, result.content)
} else {
"签到二维码错误,请重新扫描".show(requireContext())
}
diff --git a/app/src/main/java/com/casic/xz/meterage/greendao/DaoMaster.java b/app/src/main/java/com/casic/xz/meterage/greendao/DaoMaster.java
new file mode 100644
index 0000000..d714ce2
--- /dev/null
+++ b/app/src/main/java/com/casic/xz/meterage/greendao/DaoMaster.java
@@ -0,0 +1,96 @@
+package com.casic.xz.meterage.greendao;
+
+import android.content.Context;
+import android.database.sqlite.SQLiteDatabase;
+import android.database.sqlite.SQLiteDatabase.CursorFactory;
+import android.util.Log;
+
+import org.greenrobot.greendao.AbstractDaoMaster;
+import org.greenrobot.greendao.database.Database;
+import org.greenrobot.greendao.database.DatabaseOpenHelper;
+import org.greenrobot.greendao.database.StandardDatabase;
+import org.greenrobot.greendao.identityscope.IdentityScopeType;
+
+
+// THIS CODE IS GENERATED BY greenDAO, DO NOT EDIT.
+/**
+ * Master of DAO (schema version 1): knows all DAOs.
+ */
+public class DaoMaster extends AbstractDaoMaster {
+ public static final int SCHEMA_VERSION = 1;
+
+ /** Creates underlying database table using DAOs. */
+ public static void createAllTables(Database db, boolean ifNotExists) {
+ SearchHistoryBeanDao.createTable(db, ifNotExists);
+ }
+
+ /** Drops underlying database table using DAOs. */
+ public static void dropAllTables(Database db, boolean ifExists) {
+ SearchHistoryBeanDao.dropTable(db, ifExists);
+ }
+
+ /**
+ * WARNING: Drops all table on Upgrade! Use only during development.
+ * Convenience method using a {@link DevOpenHelper}.
+ */
+ public static DaoSession newDevSession(Context context, String name) {
+ Database db = new DevOpenHelper(context, name).getWritableDb();
+ DaoMaster daoMaster = new DaoMaster(db);
+ return daoMaster.newSession();
+ }
+
+ public DaoMaster(SQLiteDatabase db) {
+ this(new StandardDatabase(db));
+ }
+
+ public DaoMaster(Database db) {
+ super(db, SCHEMA_VERSION);
+ registerDaoClass(SearchHistoryBeanDao.class);
+ }
+
+ public DaoSession newSession() {
+ return new DaoSession(db, IdentityScopeType.Session, daoConfigMap);
+ }
+
+ public DaoSession newSession(IdentityScopeType type) {
+ return new DaoSession(db, type, daoConfigMap);
+ }
+
+ /**
+ * Calls {@link #createAllTables(Database, boolean)} in {@link #onCreate(Database)} -
+ */
+ public static abstract class OpenHelper extends DatabaseOpenHelper {
+ public OpenHelper(Context context, String name) {
+ super(context, name, SCHEMA_VERSION);
+ }
+
+ public OpenHelper(Context context, String name, CursorFactory factory) {
+ super(context, name, factory, SCHEMA_VERSION);
+ }
+
+ @Override
+ public void onCreate(Database db) {
+ Log.i("greenDAO", "Creating tables for schema version " + SCHEMA_VERSION);
+ createAllTables(db, false);
+ }
+ }
+
+ /** WARNING: Drops all table on Upgrade! Use only during development. */
+ public static class DevOpenHelper extends OpenHelper {
+ public DevOpenHelper(Context context, String name) {
+ super(context, name);
+ }
+
+ public DevOpenHelper(Context context, String name, CursorFactory factory) {
+ super(context, name, factory);
+ }
+
+ @Override
+ public void onUpgrade(Database db, int oldVersion, int newVersion) {
+ Log.i("greenDAO", "Upgrading schema from version " + oldVersion + " to " + newVersion + " by dropping all tables");
+ dropAllTables(db, true);
+ onCreate(db);
+ }
+ }
+
+}
diff --git a/app/src/main/java/com/casic/xz/meterage/greendao/DaoSession.java b/app/src/main/java/com/casic/xz/meterage/greendao/DaoSession.java
new file mode 100644
index 0000000..0e80024
--- /dev/null
+++ b/app/src/main/java/com/casic/xz/meterage/greendao/DaoSession.java
@@ -0,0 +1,46 @@
+package com.casic.xz.meterage.greendao;
+
+import com.casic.xz.meterage.bean.SearchHistoryBean;
+
+import org.greenrobot.greendao.AbstractDao;
+import org.greenrobot.greendao.AbstractDaoSession;
+import org.greenrobot.greendao.database.Database;
+import org.greenrobot.greendao.identityscope.IdentityScopeType;
+import org.greenrobot.greendao.internal.DaoConfig;
+
+import java.util.Map;
+
+// THIS CODE IS GENERATED BY greenDAO, DO NOT EDIT.
+
+/**
+ * {@inheritDoc}
+ *
+ * @see org.greenrobot.greendao.AbstractDaoSession
+ */
+public class DaoSession extends AbstractDaoSession {
+
+ private final DaoConfig searchHistoryBeanDaoConfig;
+
+ private final SearchHistoryBeanDao searchHistoryBeanDao;
+
+ public DaoSession(Database db, IdentityScopeType type, Map>, DaoConfig>
+ daoConfigMap) {
+ super(db);
+
+ searchHistoryBeanDaoConfig = daoConfigMap.get(SearchHistoryBeanDao.class).clone();
+ searchHistoryBeanDaoConfig.initIdentityScope(type);
+
+ searchHistoryBeanDao = new SearchHistoryBeanDao(searchHistoryBeanDaoConfig, this);
+
+ registerDao(SearchHistoryBean.class, searchHistoryBeanDao);
+ }
+
+ public void clear() {
+ searchHistoryBeanDaoConfig.clearIdentityScope();
+ }
+
+ public SearchHistoryBeanDao getSearchHistoryBeanDao() {
+ return searchHistoryBeanDao;
+ }
+
+}
diff --git a/app/src/main/java/com/casic/xz/meterage/greendao/SearchHistoryBeanDao.java b/app/src/main/java/com/casic/xz/meterage/greendao/SearchHistoryBeanDao.java
new file mode 100644
index 0000000..5923d02
--- /dev/null
+++ b/app/src/main/java/com/casic/xz/meterage/greendao/SearchHistoryBeanDao.java
@@ -0,0 +1,185 @@
+package com.casic.xz.meterage.greendao;
+
+import android.database.Cursor;
+import android.database.sqlite.SQLiteStatement;
+
+import com.casic.xz.meterage.bean.SearchHistoryBean;
+
+import org.greenrobot.greendao.AbstractDao;
+import org.greenrobot.greendao.Property;
+import org.greenrobot.greendao.database.Database;
+import org.greenrobot.greendao.database.DatabaseStatement;
+import org.greenrobot.greendao.internal.DaoConfig;
+
+// THIS CODE IS GENERATED BY greenDAO, DO NOT EDIT.
+/**
+ * DAO for table "SEARCH_HISTORY_BEAN".
+*/
+public class SearchHistoryBeanDao extends AbstractDao {
+
+ public static final String TABLENAME = "SEARCH_HISTORY_BEAN";
+
+ /**
+ * Properties of entity SearchHistoryBean.
+ * Can be used for QueryBuilder and for referencing column names.
+ */
+ public static class Properties {
+ public final static Property Id = new Property(0, Long.class, "id", true, "_id");
+ public final static Property Uuid = new Property(1, String.class, "uuid", false, "UUID");
+ public final static Property Keywords = new Property(2, String.class, "keywords", false, "KEYWORDS");
+ public final static Property SearchType = new Property(3, String.class, "searchType", false, "SEARCH_TYPE");
+ public final static Property UserId = new Property(4, String.class, "userId", false, "USER_ID");
+ public final static Property SearchTime = new Property(5, String.class, "searchTime", false, "SEARCH_TIME");
+ }
+
+
+ public SearchHistoryBeanDao(DaoConfig config) {
+ super(config);
+ }
+
+ public SearchHistoryBeanDao(DaoConfig config, DaoSession daoSession) {
+ super(config, daoSession);
+ }
+
+ /** Creates the underlying database table. */
+ public static void createTable(Database db, boolean ifNotExists) {
+ String constraint = ifNotExists? "IF NOT EXISTS ": "";
+ db.execSQL("CREATE TABLE " + constraint + "\"SEARCH_HISTORY_BEAN\" (" + //
+ "\"_id\" INTEGER PRIMARY KEY AUTOINCREMENT ," + // 0: id
+ "\"UUID\" TEXT UNIQUE ," + // 1: uuid
+ "\"KEYWORDS\" TEXT," + // 2: keywords
+ "\"SEARCH_TYPE\" TEXT," + // 3: searchType
+ "\"USER_ID\" TEXT," + // 4: userId
+ "\"SEARCH_TIME\" TEXT);"); // 5: searchTime
+ }
+
+ /** Drops the underlying database table. */
+ public static void dropTable(Database db, boolean ifExists) {
+ String sql = "DROP TABLE " + (ifExists ? "IF EXISTS " : "") + "\"SEARCH_HISTORY_BEAN\"";
+ db.execSQL(sql);
+ }
+
+ @Override
+ protected final void bindValues(DatabaseStatement stmt, SearchHistoryBean entity) {
+ stmt.clearBindings();
+
+ Long id = entity.getId();
+ if (id != null) {
+ stmt.bindLong(1, id);
+ }
+
+ String uuid = entity.getUuid();
+ if (uuid != null) {
+ stmt.bindString(2, uuid);
+ }
+
+ String keywords = entity.getKeywords();
+ if (keywords != null) {
+ stmt.bindString(3, keywords);
+ }
+
+ String searchType = entity.getSearchType();
+ if (searchType != null) {
+ stmt.bindString(4, searchType);
+ }
+
+ String userId = entity.getUserId();
+ if (userId != null) {
+ stmt.bindString(5, userId);
+ }
+
+ String searchTime = entity.getSearchTime();
+ if (searchTime != null) {
+ stmt.bindString(6, searchTime);
+ }
+ }
+
+ @Override
+ protected final void bindValues(SQLiteStatement stmt, SearchHistoryBean entity) {
+ stmt.clearBindings();
+
+ Long id = entity.getId();
+ if (id != null) {
+ stmt.bindLong(1, id);
+ }
+
+ String uuid = entity.getUuid();
+ if (uuid != null) {
+ stmt.bindString(2, uuid);
+ }
+
+ String keywords = entity.getKeywords();
+ if (keywords != null) {
+ stmt.bindString(3, keywords);
+ }
+
+ String searchType = entity.getSearchType();
+ if (searchType != null) {
+ stmt.bindString(4, searchType);
+ }
+
+ String userId = entity.getUserId();
+ if (userId != null) {
+ stmt.bindString(5, userId);
+ }
+
+ String searchTime = entity.getSearchTime();
+ if (searchTime != null) {
+ stmt.bindString(6, searchTime);
+ }
+ }
+
+ @Override
+ public Long readKey(Cursor cursor, int offset) {
+ return cursor.isNull(offset + 0) ? null : cursor.getLong(offset + 0);
+ }
+
+ @Override
+ public SearchHistoryBean readEntity(Cursor cursor, int offset) {
+ SearchHistoryBean entity = new SearchHistoryBean( //
+ cursor.isNull(offset + 0) ? null : cursor.getLong(offset + 0), // id
+ cursor.isNull(offset + 1) ? null : cursor.getString(offset + 1), // uuid
+ cursor.isNull(offset + 2) ? null : cursor.getString(offset + 2), // keywords
+ cursor.isNull(offset + 3) ? null : cursor.getString(offset + 3), // searchType
+ cursor.isNull(offset + 4) ? null : cursor.getString(offset + 4), // userId
+ cursor.isNull(offset + 5) ? null : cursor.getString(offset + 5) // searchTime
+ );
+ return entity;
+ }
+
+ @Override
+ public void readEntity(Cursor cursor, SearchHistoryBean entity, int offset) {
+ entity.setId(cursor.isNull(offset + 0) ? null : cursor.getLong(offset + 0));
+ entity.setUuid(cursor.isNull(offset + 1) ? null : cursor.getString(offset + 1));
+ entity.setKeywords(cursor.isNull(offset + 2) ? null : cursor.getString(offset + 2));
+ entity.setSearchType(cursor.isNull(offset + 3) ? null : cursor.getString(offset + 3));
+ entity.setUserId(cursor.isNull(offset + 4) ? null : cursor.getString(offset + 4));
+ entity.setSearchTime(cursor.isNull(offset + 5) ? null : cursor.getString(offset + 5));
+ }
+
+ @Override
+ protected final Long updateKeyAfterInsert(SearchHistoryBean entity, long rowId) {
+ entity.setId(rowId);
+ return rowId;
+ }
+
+ @Override
+ public Long getKey(SearchHistoryBean entity) {
+ if(entity != null) {
+ return entity.getId();
+ } else {
+ return null;
+ }
+ }
+
+ @Override
+ public boolean hasKey(SearchHistoryBean entity) {
+ return entity.getId() != null;
+ }
+
+ @Override
+ protected final boolean isEntityUpdateable() {
+ return true;
+ }
+
+}
diff --git a/app/src/main/java/com/casic/xz/meterage/utils/DataBaseManager.kt b/app/src/main/java/com/casic/xz/meterage/utils/DataBaseManager.kt
new file mode 100644
index 0000000..52fe032
--- /dev/null
+++ b/app/src/main/java/com/casic/xz/meterage/utils/DataBaseManager.kt
@@ -0,0 +1,45 @@
+package com.casic.xz.meterage.utils
+
+import com.casic.xz.meterage.base.BaseApplication
+import com.casic.xz.meterage.bean.SearchHistoryBean
+import com.casic.xz.meterage.greendao.SearchHistoryBeanDao
+import com.pengxh.kt.lite.extensions.timestampToCompleteDate
+import com.pengxh.kt.lite.utils.SaveKeyValues
+import java.util.*
+
+class DataBaseManager private constructor() {
+
+ companion object {
+ //Kotlin委托模式双重锁单例
+ val get: DataBaseManager by lazy(mode = LazyThreadSafetyMode.SYNCHRONIZED) {
+ DataBaseManager()
+ }
+ }
+
+ private val searchBeanDao by lazy { BaseApplication.get().getDaoSession().searchHistoryBeanDao }
+ private val userId by lazy { SaveKeyValues.getValue(LocaleConstant.USER_ID, "") }
+
+ fun addSearchHistory(keywords: String, searchType: String) {
+ val bean = SearchHistoryBean()
+ bean.uuid = UUID.randomUUID().toString()
+ bean.keywords = keywords
+ bean.searchType = searchType
+ bean.userId = userId.toString()
+ bean.searchTime = System.currentTimeMillis().timestampToCompleteDate()
+ searchBeanDao.insert(bean)
+ }
+
+ fun queryHistoryByType(searchType: String): MutableList {
+ return searchBeanDao.queryBuilder().where(
+ SearchHistoryBeanDao.Properties.UserId.eq(userId),
+ SearchHistoryBeanDao.Properties.SearchType.eq(searchType)
+ ).list()
+ }
+
+ fun deleteHistoryByType(searchType: String) {
+ val list = queryHistoryByType(searchType)
+ list.forEach {
+ searchBeanDao.delete(it)
+ }
+ }
+}
\ No newline at end of file
diff --git a/app/src/main/java/com/casic/xz/meterage/utils/LocaleConstant.kt b/app/src/main/java/com/casic/xz/meterage/utils/LocaleConstant.kt
index cc2848b..2ea47a0 100644
--- a/app/src/main/java/com/casic/xz/meterage/utils/LocaleConstant.kt
+++ b/app/src/main/java/com/casic/xz/meterage/utils/LocaleConstant.kt
@@ -62,4 +62,5 @@
const val File_SERVER_URL = "http://111.198.10.15:21408"
const val ACCOUNT = "account"
const val PASSWORD = "password"
+ const val USER_ID = "userId"
}
\ No newline at end of file
diff --git a/app/src/main/java/com/casic/xz/meterage/utils/SearchType.kt b/app/src/main/java/com/casic/xz/meterage/utils/SearchType.kt
new file mode 100644
index 0000000..5f5253e
--- /dev/null
+++ b/app/src/main/java/com/casic/xz/meterage/utils/SearchType.kt
@@ -0,0 +1,8 @@
+package com.casic.xz.meterage.utils
+
+object SearchType {
+ /**
+ * 搜索仪器设备
+ * */
+ const val Equipment = "0"
+}
diff --git a/app/src/main/java/com/casic/xz/meterage/view/MainActivity.kt b/app/src/main/java/com/casic/xz/meterage/view/MainActivity.kt
index 28836e0..8fb0793 100644
--- a/app/src/main/java/com/casic/xz/meterage/view/MainActivity.kt
+++ b/app/src/main/java/com/casic/xz/meterage/view/MainActivity.kt
@@ -3,15 +3,19 @@
import android.view.KeyEvent
import android.view.MenuItem
import androidx.fragment.app.Fragment
+import androidx.lifecycle.ViewModelProvider
import androidx.viewpager.widget.ViewPager
import com.casic.xz.meterage.R
import com.casic.xz.meterage.adapter.ViewPagerAdapter
import com.casic.xz.meterage.fragment.HomePageFragment
import com.casic.xz.meterage.fragment.MinePageFragment
import com.casic.xz.meterage.fragment.SamplePageFragment
+import com.casic.xz.meterage.utils.LocaleConstant
+import com.casic.xz.meterage.vm.UserViewModel
import com.gyf.immersionbar.ImmersionBar
import com.pengxh.kt.lite.base.KotlinBaseActivity
import com.pengxh.kt.lite.extensions.show
+import com.pengxh.kt.lite.utils.SaveKeyValues
import kotlinx.android.synthetic.main.activity_main.*
class MainActivity : KotlinBaseActivity() {
@@ -20,53 +24,59 @@
private var fragmentPages: ArrayList = ArrayList()
private var clickTime: Long = 0
- init {
- fragmentPages.add(HomePageFragment())
- fragmentPages.add(SamplePageFragment())
- fragmentPages.add(MinePageFragment())
- }
-
override fun initData() {
- bottomNavigation.itemIconTintList = null
- bottomNavigation.setOnNavigationItemSelectedListener { menuItem ->
- when (menuItem.itemId) {
- R.id.nav_home -> {
- mainViewPager.currentItem = 0
+ val userViewModel = ViewModelProvider(this)[UserViewModel::class.java]
+ userViewModel.getUserInfo(SaveKeyValues.getValue(LocaleConstant.ACCOUNT, "") as String)
+ userViewModel.userInfo.observe(this) {
+ if (it.code == 200) {
+ SaveKeyValues.putValue(LocaleConstant.USER_ID, it.data.id)
+
+ fragmentPages.add(HomePageFragment(it.data.id))
+ fragmentPages.add(SamplePageFragment())
+ fragmentPages.add(MinePageFragment())
+
+ bottomNavigation.itemIconTintList = null
+ bottomNavigation.setOnNavigationItemSelectedListener { menuItem ->
+ when (menuItem.itemId) {
+ R.id.nav_home -> {
+ mainViewPager.currentItem = 0
+ }
+ R.id.nav_sample -> {
+ mainViewPager.currentItem = 1
+ }
+ R.id.nav_mine -> {
+ mainViewPager.currentItem = 2
+ }
+ }
+ false
}
- R.id.nav_sample -> {
- mainViewPager.currentItem = 1
- }
- R.id.nav_mine -> {
- mainViewPager.currentItem = 2
- }
+ mainViewPager.adapter = ViewPagerAdapter(fragmentPages, supportFragmentManager)
+ mainViewPager.offscreenPageLimit = fragmentPages.size //缓存页数
+ mainViewPager.addOnPageChangeListener(object : ViewPager.OnPageChangeListener {
+ override fun onPageScrollStateChanged(state: Int) {
+
+ }
+
+ override fun onPageScrolled(
+ position: Int,
+ positionOffset: Float,
+ positionOffsetPixels: Int
+ ) {
+
+ }
+
+ override fun onPageSelected(position: Int) {
+ if (menuItem != null) {
+ menuItem!!.isChecked = false
+ } else {
+ bottomNavigation.menu.getItem(0).isChecked = false
+ }
+ menuItem = bottomNavigation.menu.getItem(position)
+ menuItem!!.isChecked = true
+ }
+ })
}
- false
}
- mainViewPager.adapter = ViewPagerAdapter(fragmentPages, supportFragmentManager)
- mainViewPager.offscreenPageLimit = fragmentPages.size //缓存页数
- mainViewPager.addOnPageChangeListener(object : ViewPager.OnPageChangeListener {
- override fun onPageScrollStateChanged(state: Int) {
-
- }
-
- override fun onPageScrolled(
- position: Int,
- positionOffset: Float,
- positionOffsetPixels: Int
- ) {
-
- }
-
- override fun onPageSelected(position: Int) {
- if (menuItem != null) {
- menuItem!!.isChecked = false
- } else {
- bottomNavigation.menu.getItem(0).isChecked = false
- }
- menuItem = bottomNavigation.menu.getItem(position)
- menuItem!!.isChecked = true
- }
- })
}
override fun initEvent() {
diff --git a/app/src/main/java/com/casic/xz/meterage/view/search/SearchAllActivity.kt b/app/src/main/java/com/casic/xz/meterage/view/search/SearchAllActivity.kt
new file mode 100644
index 0000000..ecc8fd7
--- /dev/null
+++ b/app/src/main/java/com/casic/xz/meterage/view/search/SearchAllActivity.kt
@@ -0,0 +1,40 @@
+package com.casic.xz.meterage.view.search
+
+import com.casic.xz.meterage.R
+import com.casic.xz.meterage.extensions.initLayoutImmersionBar
+import com.gyf.immersionbar.ImmersionBar
+import com.pengxh.kt.lite.base.KotlinBaseActivity
+import com.pengxh.kt.lite.extensions.navigatePageTo
+import kotlinx.android.synthetic.main.activity_search_all.*
+import kotlinx.android.synthetic.main.include_search_input_title.*
+
+class SearchAllActivity : KotlinBaseActivity() {
+
+ override fun initData() {
+
+ }
+
+ override fun initEvent() {
+ leftBackView.setOnClickListener { finish() }
+ searchTextView.setOnClickListener {
+ navigatePageTo(inputView.text.toString())
+ }
+ }
+
+ override fun initLayoutView(): Int = R.layout.activity_search_all
+
+ override fun observeRequestState() {
+
+ }
+
+ override fun setupTopBarLayout() {
+ ImmersionBar.with(this).statusBarDarkFont(true).init()
+ initLayoutImmersionBar(rootView)
+ inputView.hint = "查询样品、业务"
+ }
+
+ override fun onResume() {
+ super.onResume()
+ //TODO 流式布局显示查询记录Tag?
+ }
+}
\ No newline at end of file
diff --git a/app/src/main/java/com/casic/xz/meterage/view/search/SearchAllResultActivity.kt b/app/src/main/java/com/casic/xz/meterage/view/search/SearchAllResultActivity.kt
new file mode 100644
index 0000000..adbb570
--- /dev/null
+++ b/app/src/main/java/com/casic/xz/meterage/view/search/SearchAllResultActivity.kt
@@ -0,0 +1,34 @@
+package com.casic.xz.meterage.view.search
+
+import com.casic.xz.meterage.R
+import com.casic.xz.meterage.extensions.initLayoutImmersionBar
+import com.gyf.immersionbar.ImmersionBar
+import com.pengxh.kt.lite.base.KotlinBaseActivity
+import com.pengxh.kt.lite.utils.Constant
+import kotlinx.android.synthetic.main.activity_search_all_reasult.*
+import kotlinx.android.synthetic.main.include_search_title.*
+
+class SearchAllResultActivity : KotlinBaseActivity() {
+
+ private lateinit var param: String
+
+ override fun initData() {
+ param = intent.getStringExtra(Constant.INTENT_PARAM)!!
+ }
+
+ override fun initEvent() {
+ leftBackView.setOnClickListener { finish() }
+ }
+
+ override fun initLayoutView(): Int = R.layout.activity_search_all_reasult
+
+ override fun observeRequestState() {
+
+ }
+
+ override fun setupTopBarLayout() {
+ ImmersionBar.with(this).statusBarDarkFont(true).init()
+ initLayoutImmersionBar(rootView)
+ titleView.text = "查询结果"
+ }
+}
\ No newline at end of file
diff --git a/app/src/main/java/com/casic/xz/meterage/view/search/SearchEquipmentActivity.kt b/app/src/main/java/com/casic/xz/meterage/view/search/SearchEquipmentActivity.kt
index f5c98d6..3551790 100644
--- a/app/src/main/java/com/casic/xz/meterage/view/search/SearchEquipmentActivity.kt
+++ b/app/src/main/java/com/casic/xz/meterage/view/search/SearchEquipmentActivity.kt
@@ -1,27 +1,98 @@
package com.casic.xz.meterage.view.search
import com.casic.xz.meterage.R
+import com.casic.xz.meterage.bean.SearchHistoryBean
import com.casic.xz.meterage.extensions.initLayoutImmersionBar
+import com.casic.xz.meterage.utils.DataBaseManager
+import com.casic.xz.meterage.utils.SearchType
import com.gyf.immersionbar.ImmersionBar
+import com.pengxh.kt.lite.adapter.NormalRecyclerAdapter
+import com.pengxh.kt.lite.adapter.ViewHolder
import com.pengxh.kt.lite.base.KotlinBaseActivity
import com.pengxh.kt.lite.extensions.navigatePageTo
+import com.pengxh.kt.lite.utils.WeakReferenceHandler
+import com.pengxh.kt.lite.widget.dialog.AlertControlDialog
import kotlinx.android.synthetic.main.activity_search_equipment.*
import kotlinx.android.synthetic.main.include_search_input_title.*
+
/**
* 搜索仪器设备
* */
class SearchEquipmentActivity : KotlinBaseActivity() {
- override fun initData() {
+ private lateinit var weakReferenceHandler: WeakReferenceHandler
+ private lateinit var historyAdapter: NormalRecyclerAdapter
+ private var dataBeans: MutableList = ArrayList()
+ private var isRefresh = false
+ override fun initData() {
+ weakReferenceHandler = WeakReferenceHandler {
+ if (it.what == 2023031001) {
+ if (isRefresh) {
+ historyAdapter.notifyDataSetChanged()
+ } else {
+ historyAdapter = object :
+ NormalRecyclerAdapter(
+ R.layout.item_search_rv_l, dataBeans
+ ) {
+ override fun convertView(
+ viewHolder: ViewHolder, position: Int, item: SearchHistoryBean
+ ) {
+ viewHolder.setText(R.id.searchTagView, item.keywords)
+ }
+ }
+ historyRecyclerView.adapter = historyAdapter
+ historyAdapter.setOnItemClickedListener(object :
+ NormalRecyclerAdapter.OnItemClickedListener {
+ override fun onItemClicked(position: Int, t: SearchHistoryBean) {
+ navigatePageTo(t.keywords)
+ }
+ })
+ }
+ }
+ true
+ }
+ }
+
+ override fun onResume() {
+ super.onResume()
+ dataBeans = DataBaseManager.get.queryHistoryByType(SearchType.Equipment)
+ weakReferenceHandler.sendEmptyMessage(2023031001)
}
override fun initEvent() {
leftBackView.setOnClickListener { finish() }
searchTextView.setOnClickListener {
+ if (!inputView.text.isNullOrBlank()) {
+ DataBaseManager.get.addSearchHistory(
+ inputView.text.toString(), SearchType.Equipment
+ )
+ }
+
navigatePageTo(inputView.text.toString())
}
+
+ deleteHistoryView.setOnClickListener {
+ AlertControlDialog.Builder()
+ .setContext(this)
+ .setTitle("提示")
+ .setMessage("确定将所有搜索记录删除?")
+ .setNegativeButton("取消")
+ .setPositiveButton("确定")
+ .setOnDialogButtonClickListener(object :
+ AlertControlDialog.OnDialogButtonClickListener {
+ override fun onCancelClick() {
+
+ }
+
+ override fun onConfirmClick() {
+ DataBaseManager.get.deleteHistoryByType(SearchType.Equipment)
+ dataBeans.clear()
+ historyAdapter.notifyDataSetChanged()
+ }
+ }).build().show()
+ }
}
override fun initLayoutView(): Int = R.layout.activity_search_equipment
@@ -35,9 +106,4 @@
initLayoutImmersionBar(rootView)
inputView.hint = "查询设备名称、编号"
}
-
- override fun onResume() {
- super.onResume()
- //TODO 流式布局显示查询记录Tag?
- }
}
\ No newline at end of file
diff --git a/app/src/main/res/drawable/ic_delete.xml b/app/src/main/res/drawable/ic_delete.xml
new file mode 100644
index 0000000..1810342
--- /dev/null
+++ b/app/src/main/res/drawable/ic_delete.xml
@@ -0,0 +1,9 @@
+
+
+
diff --git a/app/src/main/res/layout/activity_search_all.xml b/app/src/main/res/layout/activity_search_all.xml
new file mode 100644
index 0000000..45694fb
--- /dev/null
+++ b/app/src/main/res/layout/activity_search_all.xml
@@ -0,0 +1,17 @@
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/app/build.gradle b/app/build.gradle
index 298f687..e142ec1 100644
--- a/app/build.gradle
+++ b/app/build.gradle
@@ -3,6 +3,7 @@
apply plugin: 'com.android.application'
apply plugin: 'kotlin-android'
apply plugin: 'kotlin-android-extensions'
+apply plugin: 'org.greenrobot.greendao'
android {
signingConfigs {
@@ -57,6 +58,12 @@
outputFileName = "XZJL_" + getBuildDate() + "_Beta.apk"
}
}
+
+ greendao {
+ schemaVersion 1//数据库版本号
+ targetGenDir 'src/main/java'//设置DaoMaster、DaoSession、Dao目录
+ daoPackage 'com.casic.xz.meterage.greendao'//设置DaoMaster、DaoSession、Dao包名
+ }
}
static def getBuildDate() {
@@ -67,7 +74,7 @@
dependencies {
//基础依赖库
implementation 'com.github.AndroidCoderPeng:Kotlin-lite-lib:1.0.4'
- implementation 'androidx.appcompat:appcompat:1.5.1'
+ implementation 'androidx.appcompat:appcompat:1.6.1'
implementation 'androidx.core:core-ktx:1.9.0'
//Google官方授权框架
implementation 'pub.devrel:easypermissions:3.0.0'
@@ -113,4 +120,6 @@
implementation 'com.github.tiann:FreeReflection:3.1.0'
//单项/数字、二三级联动、日期/时间等滚轮选择器
implementation 'com.github.gzu-liyujiang.AndroidPicker:WheelPicker:4.1.8'
+ //数据库框架
+ implementation 'org.greenrobot:greendao:3.3.0'
}
\ No newline at end of file
diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml
index 972eff9..5b6f9b2 100644
--- a/app/src/main/AndroidManifest.xml
+++ b/app/src/main/AndroidManifest.xml
@@ -69,6 +69,8 @@
+
+
diff --git a/app/src/main/java/com/casic/xz/meterage/base/BaseApplication.kt b/app/src/main/java/com/casic/xz/meterage/base/BaseApplication.kt
index 14a604d..1684c23 100644
--- a/app/src/main/java/com/casic/xz/meterage/base/BaseApplication.kt
+++ b/app/src/main/java/com/casic/xz/meterage/base/BaseApplication.kt
@@ -2,6 +2,8 @@
import android.app.Application
import android.content.Context
+import com.casic.xz.meterage.greendao.DaoMaster
+import com.casic.xz.meterage.greendao.DaoSession
import com.pengxh.kt.lite.utils.SaveKeyValues
import me.weishu.reflection.Reflection
import kotlin.properties.Delegates
@@ -12,12 +14,22 @@
private var application: BaseApplication by Delegates.notNull()
fun get() = application
+
+ private lateinit var daoSession: DaoSession
}
override fun onCreate() {
super.onCreate()
application = this
SaveKeyValues.initSharedPreferences(this)
+
+ val devOpenHelper = DaoMaster.DevOpenHelper(this, "Meterage.db", null)
+ val daoMaster = DaoMaster(devOpenHelper.writableDatabase)
+ daoSession = daoMaster.newSession()
+ }
+
+ fun getDaoSession(): DaoSession {
+ return daoSession
}
//绕过Android 11以上反射限制
diff --git a/app/src/main/java/com/casic/xz/meterage/bean/SearchHistoryBean.java b/app/src/main/java/com/casic/xz/meterage/bean/SearchHistoryBean.java
new file mode 100644
index 0000000..6a46a3a
--- /dev/null
+++ b/app/src/main/java/com/casic/xz/meterage/bean/SearchHistoryBean.java
@@ -0,0 +1,82 @@
+package com.casic.xz.meterage.bean;
+
+import org.greenrobot.greendao.annotation.Entity;
+import org.greenrobot.greendao.annotation.Generated;
+import org.greenrobot.greendao.annotation.Id;
+import org.greenrobot.greendao.annotation.Unique;
+
+@Entity
+public class SearchHistoryBean {
+ @Id(autoincrement = true)
+ private Long id;//主键自增
+
+ @Unique
+ private String uuid;
+ private String keywords;//查询条件-关键字
+ private String searchType;//查询类型
+ private String userId;//用户Id
+ private String searchTime;//查询的时间
+
+ @Generated(hash = 2130561778)
+ public SearchHistoryBean(Long id, String uuid, String keywords,
+ String searchType, String userId, String searchTime) {
+ this.id = id;
+ this.uuid = uuid;
+ this.keywords = keywords;
+ this.searchType = searchType;
+ this.userId = userId;
+ this.searchTime = searchTime;
+ }
+
+ @Generated(hash = 1570282321)
+ public SearchHistoryBean() {
+ }
+
+ public Long getId() {
+ return this.id;
+ }
+
+ public void setId(Long id) {
+ this.id = id;
+ }
+
+ public String getUuid() {
+ return this.uuid;
+ }
+
+ public void setUuid(String uuid) {
+ this.uuid = uuid;
+ }
+
+ public String getKeywords() {
+ return this.keywords;
+ }
+
+ public void setKeywords(String keywords) {
+ this.keywords = keywords;
+ }
+
+ public String getSearchType() {
+ return this.searchType;
+ }
+
+ public void setSearchType(String searchType) {
+ this.searchType = searchType;
+ }
+
+ public String getUserId() {
+ return this.userId;
+ }
+
+ public void setUserId(String userId) {
+ this.userId = userId;
+ }
+
+ public String getSearchTime() {
+ return this.searchTime;
+ }
+
+ public void setSearchTime(String searchTime) {
+ this.searchTime = searchTime;
+ }
+}
diff --git a/app/src/main/java/com/casic/xz/meterage/fragment/HomePageFragment.kt b/app/src/main/java/com/casic/xz/meterage/fragment/HomePageFragment.kt
index 151f951..ae7f5e4 100644
--- a/app/src/main/java/com/casic/xz/meterage/fragment/HomePageFragment.kt
+++ b/app/src/main/java/com/casic/xz/meterage/fragment/HomePageFragment.kt
@@ -15,22 +15,20 @@
import com.casic.xz.meterage.extensions.showEmptyPage
import com.casic.xz.meterage.model.NoticeListModel
import com.casic.xz.meterage.model.RemindListModel
-import com.casic.xz.meterage.model.UserInfoModel
import com.casic.xz.meterage.utils.LoadingDialogHub
import com.casic.xz.meterage.utils.LocaleConstant
import com.casic.xz.meterage.utils.QrConfigCreator
import com.casic.xz.meterage.view.home.*
import com.casic.xz.meterage.view.notice.NoticeListActivity
+import com.casic.xz.meterage.view.search.SearchAllActivity
import com.casic.xz.meterage.vm.MeterageTrainViewModel
import com.casic.xz.meterage.vm.NoticeViewModel
-import com.casic.xz.meterage.vm.UserViewModel
import com.pengxh.kt.lite.adapter.NormalRecyclerAdapter
import com.pengxh.kt.lite.adapter.ViewHolder
import com.pengxh.kt.lite.base.KotlinBaseFragment
import com.pengxh.kt.lite.extensions.convertColor
import com.pengxh.kt.lite.extensions.navigatePageTo
import com.pengxh.kt.lite.extensions.show
-import com.pengxh.kt.lite.utils.SaveKeyValues
import com.pengxh.kt.lite.utils.WeakReferenceHandler
import com.pengxh.kt.lite.vm.LoadState
import com.pengxh.kt.lite.widget.dialog.AlertControlDialog
@@ -39,13 +37,12 @@
import kotlinx.android.synthetic.main.include_empty_view.*
import java.util.*
-class HomePageFragment : KotlinBaseFragment() {
+class HomePageFragment(private val userId: String) : KotlinBaseFragment() {
private val timer = object : Timer() {}
private lateinit var weakReferenceHandler: WeakReferenceHandler
private lateinit var meterageTrainViewModel: MeterageTrainViewModel
private lateinit var noticeViewModel: NoticeViewModel
- private lateinit var userData: UserInfoModel.DataModel
private lateinit var remindAdapter: NormalRecyclerAdapter
private var dataBeans: MutableList = ArrayList()
private var noticeBeans: MutableList = ArrayList()
@@ -170,14 +167,6 @@
true
}
- val userViewModel = ViewModelProvider(this)[UserViewModel::class.java]
- userViewModel.getUserInfo(SaveKeyValues.getValue(LocaleConstant.ACCOUNT, "") as String)
- userViewModel.userInfo.observe(this) {
- if (it.code == 200) {
- userData = it.data
- }
- }
-
meterageTrainViewModel = ViewModelProvider(this)[MeterageTrainViewModel::class.java]
meterageTrainViewModel.signInResult.observe(this) {
if (it.code == 200) {
@@ -296,10 +285,14 @@
}
override fun initEvent() {
+ searchBar.setOnClickListener {
+ requireContext().navigatePageTo()
+ }
+
scanCodeView.setOnClickListener {
qrManager.startScan(requireActivity()) { result ->
if (result.content.isDigitsOnly()) {
- meterageTrainViewModel.signIn(userData.id, result.content)
+ meterageTrainViewModel.signIn(userId, result.content)
} else {
"签到二维码错误,请重新扫描".show(requireContext())
}
diff --git a/app/src/main/java/com/casic/xz/meterage/greendao/DaoMaster.java b/app/src/main/java/com/casic/xz/meterage/greendao/DaoMaster.java
new file mode 100644
index 0000000..d714ce2
--- /dev/null
+++ b/app/src/main/java/com/casic/xz/meterage/greendao/DaoMaster.java
@@ -0,0 +1,96 @@
+package com.casic.xz.meterage.greendao;
+
+import android.content.Context;
+import android.database.sqlite.SQLiteDatabase;
+import android.database.sqlite.SQLiteDatabase.CursorFactory;
+import android.util.Log;
+
+import org.greenrobot.greendao.AbstractDaoMaster;
+import org.greenrobot.greendao.database.Database;
+import org.greenrobot.greendao.database.DatabaseOpenHelper;
+import org.greenrobot.greendao.database.StandardDatabase;
+import org.greenrobot.greendao.identityscope.IdentityScopeType;
+
+
+// THIS CODE IS GENERATED BY greenDAO, DO NOT EDIT.
+/**
+ * Master of DAO (schema version 1): knows all DAOs.
+ */
+public class DaoMaster extends AbstractDaoMaster {
+ public static final int SCHEMA_VERSION = 1;
+
+ /** Creates underlying database table using DAOs. */
+ public static void createAllTables(Database db, boolean ifNotExists) {
+ SearchHistoryBeanDao.createTable(db, ifNotExists);
+ }
+
+ /** Drops underlying database table using DAOs. */
+ public static void dropAllTables(Database db, boolean ifExists) {
+ SearchHistoryBeanDao.dropTable(db, ifExists);
+ }
+
+ /**
+ * WARNING: Drops all table on Upgrade! Use only during development.
+ * Convenience method using a {@link DevOpenHelper}.
+ */
+ public static DaoSession newDevSession(Context context, String name) {
+ Database db = new DevOpenHelper(context, name).getWritableDb();
+ DaoMaster daoMaster = new DaoMaster(db);
+ return daoMaster.newSession();
+ }
+
+ public DaoMaster(SQLiteDatabase db) {
+ this(new StandardDatabase(db));
+ }
+
+ public DaoMaster(Database db) {
+ super(db, SCHEMA_VERSION);
+ registerDaoClass(SearchHistoryBeanDao.class);
+ }
+
+ public DaoSession newSession() {
+ return new DaoSession(db, IdentityScopeType.Session, daoConfigMap);
+ }
+
+ public DaoSession newSession(IdentityScopeType type) {
+ return new DaoSession(db, type, daoConfigMap);
+ }
+
+ /**
+ * Calls {@link #createAllTables(Database, boolean)} in {@link #onCreate(Database)} -
+ */
+ public static abstract class OpenHelper extends DatabaseOpenHelper {
+ public OpenHelper(Context context, String name) {
+ super(context, name, SCHEMA_VERSION);
+ }
+
+ public OpenHelper(Context context, String name, CursorFactory factory) {
+ super(context, name, factory, SCHEMA_VERSION);
+ }
+
+ @Override
+ public void onCreate(Database db) {
+ Log.i("greenDAO", "Creating tables for schema version " + SCHEMA_VERSION);
+ createAllTables(db, false);
+ }
+ }
+
+ /** WARNING: Drops all table on Upgrade! Use only during development. */
+ public static class DevOpenHelper extends OpenHelper {
+ public DevOpenHelper(Context context, String name) {
+ super(context, name);
+ }
+
+ public DevOpenHelper(Context context, String name, CursorFactory factory) {
+ super(context, name, factory);
+ }
+
+ @Override
+ public void onUpgrade(Database db, int oldVersion, int newVersion) {
+ Log.i("greenDAO", "Upgrading schema from version " + oldVersion + " to " + newVersion + " by dropping all tables");
+ dropAllTables(db, true);
+ onCreate(db);
+ }
+ }
+
+}
diff --git a/app/src/main/java/com/casic/xz/meterage/greendao/DaoSession.java b/app/src/main/java/com/casic/xz/meterage/greendao/DaoSession.java
new file mode 100644
index 0000000..0e80024
--- /dev/null
+++ b/app/src/main/java/com/casic/xz/meterage/greendao/DaoSession.java
@@ -0,0 +1,46 @@
+package com.casic.xz.meterage.greendao;
+
+import com.casic.xz.meterage.bean.SearchHistoryBean;
+
+import org.greenrobot.greendao.AbstractDao;
+import org.greenrobot.greendao.AbstractDaoSession;
+import org.greenrobot.greendao.database.Database;
+import org.greenrobot.greendao.identityscope.IdentityScopeType;
+import org.greenrobot.greendao.internal.DaoConfig;
+
+import java.util.Map;
+
+// THIS CODE IS GENERATED BY greenDAO, DO NOT EDIT.
+
+/**
+ * {@inheritDoc}
+ *
+ * @see org.greenrobot.greendao.AbstractDaoSession
+ */
+public class DaoSession extends AbstractDaoSession {
+
+ private final DaoConfig searchHistoryBeanDaoConfig;
+
+ private final SearchHistoryBeanDao searchHistoryBeanDao;
+
+ public DaoSession(Database db, IdentityScopeType type, Map>, DaoConfig>
+ daoConfigMap) {
+ super(db);
+
+ searchHistoryBeanDaoConfig = daoConfigMap.get(SearchHistoryBeanDao.class).clone();
+ searchHistoryBeanDaoConfig.initIdentityScope(type);
+
+ searchHistoryBeanDao = new SearchHistoryBeanDao(searchHistoryBeanDaoConfig, this);
+
+ registerDao(SearchHistoryBean.class, searchHistoryBeanDao);
+ }
+
+ public void clear() {
+ searchHistoryBeanDaoConfig.clearIdentityScope();
+ }
+
+ public SearchHistoryBeanDao getSearchHistoryBeanDao() {
+ return searchHistoryBeanDao;
+ }
+
+}
diff --git a/app/src/main/java/com/casic/xz/meterage/greendao/SearchHistoryBeanDao.java b/app/src/main/java/com/casic/xz/meterage/greendao/SearchHistoryBeanDao.java
new file mode 100644
index 0000000..5923d02
--- /dev/null
+++ b/app/src/main/java/com/casic/xz/meterage/greendao/SearchHistoryBeanDao.java
@@ -0,0 +1,185 @@
+package com.casic.xz.meterage.greendao;
+
+import android.database.Cursor;
+import android.database.sqlite.SQLiteStatement;
+
+import com.casic.xz.meterage.bean.SearchHistoryBean;
+
+import org.greenrobot.greendao.AbstractDao;
+import org.greenrobot.greendao.Property;
+import org.greenrobot.greendao.database.Database;
+import org.greenrobot.greendao.database.DatabaseStatement;
+import org.greenrobot.greendao.internal.DaoConfig;
+
+// THIS CODE IS GENERATED BY greenDAO, DO NOT EDIT.
+/**
+ * DAO for table "SEARCH_HISTORY_BEAN".
+*/
+public class SearchHistoryBeanDao extends AbstractDao {
+
+ public static final String TABLENAME = "SEARCH_HISTORY_BEAN";
+
+ /**
+ * Properties of entity SearchHistoryBean.
+ * Can be used for QueryBuilder and for referencing column names.
+ */
+ public static class Properties {
+ public final static Property Id = new Property(0, Long.class, "id", true, "_id");
+ public final static Property Uuid = new Property(1, String.class, "uuid", false, "UUID");
+ public final static Property Keywords = new Property(2, String.class, "keywords", false, "KEYWORDS");
+ public final static Property SearchType = new Property(3, String.class, "searchType", false, "SEARCH_TYPE");
+ public final static Property UserId = new Property(4, String.class, "userId", false, "USER_ID");
+ public final static Property SearchTime = new Property(5, String.class, "searchTime", false, "SEARCH_TIME");
+ }
+
+
+ public SearchHistoryBeanDao(DaoConfig config) {
+ super(config);
+ }
+
+ public SearchHistoryBeanDao(DaoConfig config, DaoSession daoSession) {
+ super(config, daoSession);
+ }
+
+ /** Creates the underlying database table. */
+ public static void createTable(Database db, boolean ifNotExists) {
+ String constraint = ifNotExists? "IF NOT EXISTS ": "";
+ db.execSQL("CREATE TABLE " + constraint + "\"SEARCH_HISTORY_BEAN\" (" + //
+ "\"_id\" INTEGER PRIMARY KEY AUTOINCREMENT ," + // 0: id
+ "\"UUID\" TEXT UNIQUE ," + // 1: uuid
+ "\"KEYWORDS\" TEXT," + // 2: keywords
+ "\"SEARCH_TYPE\" TEXT," + // 3: searchType
+ "\"USER_ID\" TEXT," + // 4: userId
+ "\"SEARCH_TIME\" TEXT);"); // 5: searchTime
+ }
+
+ /** Drops the underlying database table. */
+ public static void dropTable(Database db, boolean ifExists) {
+ String sql = "DROP TABLE " + (ifExists ? "IF EXISTS " : "") + "\"SEARCH_HISTORY_BEAN\"";
+ db.execSQL(sql);
+ }
+
+ @Override
+ protected final void bindValues(DatabaseStatement stmt, SearchHistoryBean entity) {
+ stmt.clearBindings();
+
+ Long id = entity.getId();
+ if (id != null) {
+ stmt.bindLong(1, id);
+ }
+
+ String uuid = entity.getUuid();
+ if (uuid != null) {
+ stmt.bindString(2, uuid);
+ }
+
+ String keywords = entity.getKeywords();
+ if (keywords != null) {
+ stmt.bindString(3, keywords);
+ }
+
+ String searchType = entity.getSearchType();
+ if (searchType != null) {
+ stmt.bindString(4, searchType);
+ }
+
+ String userId = entity.getUserId();
+ if (userId != null) {
+ stmt.bindString(5, userId);
+ }
+
+ String searchTime = entity.getSearchTime();
+ if (searchTime != null) {
+ stmt.bindString(6, searchTime);
+ }
+ }
+
+ @Override
+ protected final void bindValues(SQLiteStatement stmt, SearchHistoryBean entity) {
+ stmt.clearBindings();
+
+ Long id = entity.getId();
+ if (id != null) {
+ stmt.bindLong(1, id);
+ }
+
+ String uuid = entity.getUuid();
+ if (uuid != null) {
+ stmt.bindString(2, uuid);
+ }
+
+ String keywords = entity.getKeywords();
+ if (keywords != null) {
+ stmt.bindString(3, keywords);
+ }
+
+ String searchType = entity.getSearchType();
+ if (searchType != null) {
+ stmt.bindString(4, searchType);
+ }
+
+ String userId = entity.getUserId();
+ if (userId != null) {
+ stmt.bindString(5, userId);
+ }
+
+ String searchTime = entity.getSearchTime();
+ if (searchTime != null) {
+ stmt.bindString(6, searchTime);
+ }
+ }
+
+ @Override
+ public Long readKey(Cursor cursor, int offset) {
+ return cursor.isNull(offset + 0) ? null : cursor.getLong(offset + 0);
+ }
+
+ @Override
+ public SearchHistoryBean readEntity(Cursor cursor, int offset) {
+ SearchHistoryBean entity = new SearchHistoryBean( //
+ cursor.isNull(offset + 0) ? null : cursor.getLong(offset + 0), // id
+ cursor.isNull(offset + 1) ? null : cursor.getString(offset + 1), // uuid
+ cursor.isNull(offset + 2) ? null : cursor.getString(offset + 2), // keywords
+ cursor.isNull(offset + 3) ? null : cursor.getString(offset + 3), // searchType
+ cursor.isNull(offset + 4) ? null : cursor.getString(offset + 4), // userId
+ cursor.isNull(offset + 5) ? null : cursor.getString(offset + 5) // searchTime
+ );
+ return entity;
+ }
+
+ @Override
+ public void readEntity(Cursor cursor, SearchHistoryBean entity, int offset) {
+ entity.setId(cursor.isNull(offset + 0) ? null : cursor.getLong(offset + 0));
+ entity.setUuid(cursor.isNull(offset + 1) ? null : cursor.getString(offset + 1));
+ entity.setKeywords(cursor.isNull(offset + 2) ? null : cursor.getString(offset + 2));
+ entity.setSearchType(cursor.isNull(offset + 3) ? null : cursor.getString(offset + 3));
+ entity.setUserId(cursor.isNull(offset + 4) ? null : cursor.getString(offset + 4));
+ entity.setSearchTime(cursor.isNull(offset + 5) ? null : cursor.getString(offset + 5));
+ }
+
+ @Override
+ protected final Long updateKeyAfterInsert(SearchHistoryBean entity, long rowId) {
+ entity.setId(rowId);
+ return rowId;
+ }
+
+ @Override
+ public Long getKey(SearchHistoryBean entity) {
+ if(entity != null) {
+ return entity.getId();
+ } else {
+ return null;
+ }
+ }
+
+ @Override
+ public boolean hasKey(SearchHistoryBean entity) {
+ return entity.getId() != null;
+ }
+
+ @Override
+ protected final boolean isEntityUpdateable() {
+ return true;
+ }
+
+}
diff --git a/app/src/main/java/com/casic/xz/meterage/utils/DataBaseManager.kt b/app/src/main/java/com/casic/xz/meterage/utils/DataBaseManager.kt
new file mode 100644
index 0000000..52fe032
--- /dev/null
+++ b/app/src/main/java/com/casic/xz/meterage/utils/DataBaseManager.kt
@@ -0,0 +1,45 @@
+package com.casic.xz.meterage.utils
+
+import com.casic.xz.meterage.base.BaseApplication
+import com.casic.xz.meterage.bean.SearchHistoryBean
+import com.casic.xz.meterage.greendao.SearchHistoryBeanDao
+import com.pengxh.kt.lite.extensions.timestampToCompleteDate
+import com.pengxh.kt.lite.utils.SaveKeyValues
+import java.util.*
+
+class DataBaseManager private constructor() {
+
+ companion object {
+ //Kotlin委托模式双重锁单例
+ val get: DataBaseManager by lazy(mode = LazyThreadSafetyMode.SYNCHRONIZED) {
+ DataBaseManager()
+ }
+ }
+
+ private val searchBeanDao by lazy { BaseApplication.get().getDaoSession().searchHistoryBeanDao }
+ private val userId by lazy { SaveKeyValues.getValue(LocaleConstant.USER_ID, "") }
+
+ fun addSearchHistory(keywords: String, searchType: String) {
+ val bean = SearchHistoryBean()
+ bean.uuid = UUID.randomUUID().toString()
+ bean.keywords = keywords
+ bean.searchType = searchType
+ bean.userId = userId.toString()
+ bean.searchTime = System.currentTimeMillis().timestampToCompleteDate()
+ searchBeanDao.insert(bean)
+ }
+
+ fun queryHistoryByType(searchType: String): MutableList {
+ return searchBeanDao.queryBuilder().where(
+ SearchHistoryBeanDao.Properties.UserId.eq(userId),
+ SearchHistoryBeanDao.Properties.SearchType.eq(searchType)
+ ).list()
+ }
+
+ fun deleteHistoryByType(searchType: String) {
+ val list = queryHistoryByType(searchType)
+ list.forEach {
+ searchBeanDao.delete(it)
+ }
+ }
+}
\ No newline at end of file
diff --git a/app/src/main/java/com/casic/xz/meterage/utils/LocaleConstant.kt b/app/src/main/java/com/casic/xz/meterage/utils/LocaleConstant.kt
index cc2848b..2ea47a0 100644
--- a/app/src/main/java/com/casic/xz/meterage/utils/LocaleConstant.kt
+++ b/app/src/main/java/com/casic/xz/meterage/utils/LocaleConstant.kt
@@ -62,4 +62,5 @@
const val File_SERVER_URL = "http://111.198.10.15:21408"
const val ACCOUNT = "account"
const val PASSWORD = "password"
+ const val USER_ID = "userId"
}
\ No newline at end of file
diff --git a/app/src/main/java/com/casic/xz/meterage/utils/SearchType.kt b/app/src/main/java/com/casic/xz/meterage/utils/SearchType.kt
new file mode 100644
index 0000000..5f5253e
--- /dev/null
+++ b/app/src/main/java/com/casic/xz/meterage/utils/SearchType.kt
@@ -0,0 +1,8 @@
+package com.casic.xz.meterage.utils
+
+object SearchType {
+ /**
+ * 搜索仪器设备
+ * */
+ const val Equipment = "0"
+}
diff --git a/app/src/main/java/com/casic/xz/meterage/view/MainActivity.kt b/app/src/main/java/com/casic/xz/meterage/view/MainActivity.kt
index 28836e0..8fb0793 100644
--- a/app/src/main/java/com/casic/xz/meterage/view/MainActivity.kt
+++ b/app/src/main/java/com/casic/xz/meterage/view/MainActivity.kt
@@ -3,15 +3,19 @@
import android.view.KeyEvent
import android.view.MenuItem
import androidx.fragment.app.Fragment
+import androidx.lifecycle.ViewModelProvider
import androidx.viewpager.widget.ViewPager
import com.casic.xz.meterage.R
import com.casic.xz.meterage.adapter.ViewPagerAdapter
import com.casic.xz.meterage.fragment.HomePageFragment
import com.casic.xz.meterage.fragment.MinePageFragment
import com.casic.xz.meterage.fragment.SamplePageFragment
+import com.casic.xz.meterage.utils.LocaleConstant
+import com.casic.xz.meterage.vm.UserViewModel
import com.gyf.immersionbar.ImmersionBar
import com.pengxh.kt.lite.base.KotlinBaseActivity
import com.pengxh.kt.lite.extensions.show
+import com.pengxh.kt.lite.utils.SaveKeyValues
import kotlinx.android.synthetic.main.activity_main.*
class MainActivity : KotlinBaseActivity() {
@@ -20,53 +24,59 @@
private var fragmentPages: ArrayList = ArrayList()
private var clickTime: Long = 0
- init {
- fragmentPages.add(HomePageFragment())
- fragmentPages.add(SamplePageFragment())
- fragmentPages.add(MinePageFragment())
- }
-
override fun initData() {
- bottomNavigation.itemIconTintList = null
- bottomNavigation.setOnNavigationItemSelectedListener { menuItem ->
- when (menuItem.itemId) {
- R.id.nav_home -> {
- mainViewPager.currentItem = 0
+ val userViewModel = ViewModelProvider(this)[UserViewModel::class.java]
+ userViewModel.getUserInfo(SaveKeyValues.getValue(LocaleConstant.ACCOUNT, "") as String)
+ userViewModel.userInfo.observe(this) {
+ if (it.code == 200) {
+ SaveKeyValues.putValue(LocaleConstant.USER_ID, it.data.id)
+
+ fragmentPages.add(HomePageFragment(it.data.id))
+ fragmentPages.add(SamplePageFragment())
+ fragmentPages.add(MinePageFragment())
+
+ bottomNavigation.itemIconTintList = null
+ bottomNavigation.setOnNavigationItemSelectedListener { menuItem ->
+ when (menuItem.itemId) {
+ R.id.nav_home -> {
+ mainViewPager.currentItem = 0
+ }
+ R.id.nav_sample -> {
+ mainViewPager.currentItem = 1
+ }
+ R.id.nav_mine -> {
+ mainViewPager.currentItem = 2
+ }
+ }
+ false
}
- R.id.nav_sample -> {
- mainViewPager.currentItem = 1
- }
- R.id.nav_mine -> {
- mainViewPager.currentItem = 2
- }
+ mainViewPager.adapter = ViewPagerAdapter(fragmentPages, supportFragmentManager)
+ mainViewPager.offscreenPageLimit = fragmentPages.size //缓存页数
+ mainViewPager.addOnPageChangeListener(object : ViewPager.OnPageChangeListener {
+ override fun onPageScrollStateChanged(state: Int) {
+
+ }
+
+ override fun onPageScrolled(
+ position: Int,
+ positionOffset: Float,
+ positionOffsetPixels: Int
+ ) {
+
+ }
+
+ override fun onPageSelected(position: Int) {
+ if (menuItem != null) {
+ menuItem!!.isChecked = false
+ } else {
+ bottomNavigation.menu.getItem(0).isChecked = false
+ }
+ menuItem = bottomNavigation.menu.getItem(position)
+ menuItem!!.isChecked = true
+ }
+ })
}
- false
}
- mainViewPager.adapter = ViewPagerAdapter(fragmentPages, supportFragmentManager)
- mainViewPager.offscreenPageLimit = fragmentPages.size //缓存页数
- mainViewPager.addOnPageChangeListener(object : ViewPager.OnPageChangeListener {
- override fun onPageScrollStateChanged(state: Int) {
-
- }
-
- override fun onPageScrolled(
- position: Int,
- positionOffset: Float,
- positionOffsetPixels: Int
- ) {
-
- }
-
- override fun onPageSelected(position: Int) {
- if (menuItem != null) {
- menuItem!!.isChecked = false
- } else {
- bottomNavigation.menu.getItem(0).isChecked = false
- }
- menuItem = bottomNavigation.menu.getItem(position)
- menuItem!!.isChecked = true
- }
- })
}
override fun initEvent() {
diff --git a/app/src/main/java/com/casic/xz/meterage/view/search/SearchAllActivity.kt b/app/src/main/java/com/casic/xz/meterage/view/search/SearchAllActivity.kt
new file mode 100644
index 0000000..ecc8fd7
--- /dev/null
+++ b/app/src/main/java/com/casic/xz/meterage/view/search/SearchAllActivity.kt
@@ -0,0 +1,40 @@
+package com.casic.xz.meterage.view.search
+
+import com.casic.xz.meterage.R
+import com.casic.xz.meterage.extensions.initLayoutImmersionBar
+import com.gyf.immersionbar.ImmersionBar
+import com.pengxh.kt.lite.base.KotlinBaseActivity
+import com.pengxh.kt.lite.extensions.navigatePageTo
+import kotlinx.android.synthetic.main.activity_search_all.*
+import kotlinx.android.synthetic.main.include_search_input_title.*
+
+class SearchAllActivity : KotlinBaseActivity() {
+
+ override fun initData() {
+
+ }
+
+ override fun initEvent() {
+ leftBackView.setOnClickListener { finish() }
+ searchTextView.setOnClickListener {
+ navigatePageTo(inputView.text.toString())
+ }
+ }
+
+ override fun initLayoutView(): Int = R.layout.activity_search_all
+
+ override fun observeRequestState() {
+
+ }
+
+ override fun setupTopBarLayout() {
+ ImmersionBar.with(this).statusBarDarkFont(true).init()
+ initLayoutImmersionBar(rootView)
+ inputView.hint = "查询样品、业务"
+ }
+
+ override fun onResume() {
+ super.onResume()
+ //TODO 流式布局显示查询记录Tag?
+ }
+}
\ No newline at end of file
diff --git a/app/src/main/java/com/casic/xz/meterage/view/search/SearchAllResultActivity.kt b/app/src/main/java/com/casic/xz/meterage/view/search/SearchAllResultActivity.kt
new file mode 100644
index 0000000..adbb570
--- /dev/null
+++ b/app/src/main/java/com/casic/xz/meterage/view/search/SearchAllResultActivity.kt
@@ -0,0 +1,34 @@
+package com.casic.xz.meterage.view.search
+
+import com.casic.xz.meterage.R
+import com.casic.xz.meterage.extensions.initLayoutImmersionBar
+import com.gyf.immersionbar.ImmersionBar
+import com.pengxh.kt.lite.base.KotlinBaseActivity
+import com.pengxh.kt.lite.utils.Constant
+import kotlinx.android.synthetic.main.activity_search_all_reasult.*
+import kotlinx.android.synthetic.main.include_search_title.*
+
+class SearchAllResultActivity : KotlinBaseActivity() {
+
+ private lateinit var param: String
+
+ override fun initData() {
+ param = intent.getStringExtra(Constant.INTENT_PARAM)!!
+ }
+
+ override fun initEvent() {
+ leftBackView.setOnClickListener { finish() }
+ }
+
+ override fun initLayoutView(): Int = R.layout.activity_search_all_reasult
+
+ override fun observeRequestState() {
+
+ }
+
+ override fun setupTopBarLayout() {
+ ImmersionBar.with(this).statusBarDarkFont(true).init()
+ initLayoutImmersionBar(rootView)
+ titleView.text = "查询结果"
+ }
+}
\ No newline at end of file
diff --git a/app/src/main/java/com/casic/xz/meterage/view/search/SearchEquipmentActivity.kt b/app/src/main/java/com/casic/xz/meterage/view/search/SearchEquipmentActivity.kt
index f5c98d6..3551790 100644
--- a/app/src/main/java/com/casic/xz/meterage/view/search/SearchEquipmentActivity.kt
+++ b/app/src/main/java/com/casic/xz/meterage/view/search/SearchEquipmentActivity.kt
@@ -1,27 +1,98 @@
package com.casic.xz.meterage.view.search
import com.casic.xz.meterage.R
+import com.casic.xz.meterage.bean.SearchHistoryBean
import com.casic.xz.meterage.extensions.initLayoutImmersionBar
+import com.casic.xz.meterage.utils.DataBaseManager
+import com.casic.xz.meterage.utils.SearchType
import com.gyf.immersionbar.ImmersionBar
+import com.pengxh.kt.lite.adapter.NormalRecyclerAdapter
+import com.pengxh.kt.lite.adapter.ViewHolder
import com.pengxh.kt.lite.base.KotlinBaseActivity
import com.pengxh.kt.lite.extensions.navigatePageTo
+import com.pengxh.kt.lite.utils.WeakReferenceHandler
+import com.pengxh.kt.lite.widget.dialog.AlertControlDialog
import kotlinx.android.synthetic.main.activity_search_equipment.*
import kotlinx.android.synthetic.main.include_search_input_title.*
+
/**
* 搜索仪器设备
* */
class SearchEquipmentActivity : KotlinBaseActivity() {
- override fun initData() {
+ private lateinit var weakReferenceHandler: WeakReferenceHandler
+ private lateinit var historyAdapter: NormalRecyclerAdapter
+ private var dataBeans: MutableList = ArrayList()
+ private var isRefresh = false
+ override fun initData() {
+ weakReferenceHandler = WeakReferenceHandler {
+ if (it.what == 2023031001) {
+ if (isRefresh) {
+ historyAdapter.notifyDataSetChanged()
+ } else {
+ historyAdapter = object :
+ NormalRecyclerAdapter(
+ R.layout.item_search_rv_l, dataBeans
+ ) {
+ override fun convertView(
+ viewHolder: ViewHolder, position: Int, item: SearchHistoryBean
+ ) {
+ viewHolder.setText(R.id.searchTagView, item.keywords)
+ }
+ }
+ historyRecyclerView.adapter = historyAdapter
+ historyAdapter.setOnItemClickedListener(object :
+ NormalRecyclerAdapter.OnItemClickedListener {
+ override fun onItemClicked(position: Int, t: SearchHistoryBean) {
+ navigatePageTo(t.keywords)
+ }
+ })
+ }
+ }
+ true
+ }
+ }
+
+ override fun onResume() {
+ super.onResume()
+ dataBeans = DataBaseManager.get.queryHistoryByType(SearchType.Equipment)
+ weakReferenceHandler.sendEmptyMessage(2023031001)
}
override fun initEvent() {
leftBackView.setOnClickListener { finish() }
searchTextView.setOnClickListener {
+ if (!inputView.text.isNullOrBlank()) {
+ DataBaseManager.get.addSearchHistory(
+ inputView.text.toString(), SearchType.Equipment
+ )
+ }
+
navigatePageTo(inputView.text.toString())
}
+
+ deleteHistoryView.setOnClickListener {
+ AlertControlDialog.Builder()
+ .setContext(this)
+ .setTitle("提示")
+ .setMessage("确定将所有搜索记录删除?")
+ .setNegativeButton("取消")
+ .setPositiveButton("确定")
+ .setOnDialogButtonClickListener(object :
+ AlertControlDialog.OnDialogButtonClickListener {
+ override fun onCancelClick() {
+
+ }
+
+ override fun onConfirmClick() {
+ DataBaseManager.get.deleteHistoryByType(SearchType.Equipment)
+ dataBeans.clear()
+ historyAdapter.notifyDataSetChanged()
+ }
+ }).build().show()
+ }
}
override fun initLayoutView(): Int = R.layout.activity_search_equipment
@@ -35,9 +106,4 @@
initLayoutImmersionBar(rootView)
inputView.hint = "查询设备名称、编号"
}
-
- override fun onResume() {
- super.onResume()
- //TODO 流式布局显示查询记录Tag?
- }
}
\ No newline at end of file
diff --git a/app/src/main/res/drawable/ic_delete.xml b/app/src/main/res/drawable/ic_delete.xml
new file mode 100644
index 0000000..1810342
--- /dev/null
+++ b/app/src/main/res/drawable/ic_delete.xml
@@ -0,0 +1,9 @@
+
+
+
diff --git a/app/src/main/res/layout/activity_search_all.xml b/app/src/main/res/layout/activity_search_all.xml
new file mode 100644
index 0000000..45694fb
--- /dev/null
+++ b/app/src/main/res/layout/activity_search_all.xml
@@ -0,0 +1,17 @@
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/app/src/main/res/layout/activity_search_all_reasult.xml b/app/src/main/res/layout/activity_search_all_reasult.xml
new file mode 100644
index 0000000..7e90433
--- /dev/null
+++ b/app/src/main/res/layout/activity_search_all_reasult.xml
@@ -0,0 +1,51 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/app/build.gradle b/app/build.gradle
index 298f687..e142ec1 100644
--- a/app/build.gradle
+++ b/app/build.gradle
@@ -3,6 +3,7 @@
apply plugin: 'com.android.application'
apply plugin: 'kotlin-android'
apply plugin: 'kotlin-android-extensions'
+apply plugin: 'org.greenrobot.greendao'
android {
signingConfigs {
@@ -57,6 +58,12 @@
outputFileName = "XZJL_" + getBuildDate() + "_Beta.apk"
}
}
+
+ greendao {
+ schemaVersion 1//数据库版本号
+ targetGenDir 'src/main/java'//设置DaoMaster、DaoSession、Dao目录
+ daoPackage 'com.casic.xz.meterage.greendao'//设置DaoMaster、DaoSession、Dao包名
+ }
}
static def getBuildDate() {
@@ -67,7 +74,7 @@
dependencies {
//基础依赖库
implementation 'com.github.AndroidCoderPeng:Kotlin-lite-lib:1.0.4'
- implementation 'androidx.appcompat:appcompat:1.5.1'
+ implementation 'androidx.appcompat:appcompat:1.6.1'
implementation 'androidx.core:core-ktx:1.9.0'
//Google官方授权框架
implementation 'pub.devrel:easypermissions:3.0.0'
@@ -113,4 +120,6 @@
implementation 'com.github.tiann:FreeReflection:3.1.0'
//单项/数字、二三级联动、日期/时间等滚轮选择器
implementation 'com.github.gzu-liyujiang.AndroidPicker:WheelPicker:4.1.8'
+ //数据库框架
+ implementation 'org.greenrobot:greendao:3.3.0'
}
\ No newline at end of file
diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml
index 972eff9..5b6f9b2 100644
--- a/app/src/main/AndroidManifest.xml
+++ b/app/src/main/AndroidManifest.xml
@@ -69,6 +69,8 @@
+
+
diff --git a/app/src/main/java/com/casic/xz/meterage/base/BaseApplication.kt b/app/src/main/java/com/casic/xz/meterage/base/BaseApplication.kt
index 14a604d..1684c23 100644
--- a/app/src/main/java/com/casic/xz/meterage/base/BaseApplication.kt
+++ b/app/src/main/java/com/casic/xz/meterage/base/BaseApplication.kt
@@ -2,6 +2,8 @@
import android.app.Application
import android.content.Context
+import com.casic.xz.meterage.greendao.DaoMaster
+import com.casic.xz.meterage.greendao.DaoSession
import com.pengxh.kt.lite.utils.SaveKeyValues
import me.weishu.reflection.Reflection
import kotlin.properties.Delegates
@@ -12,12 +14,22 @@
private var application: BaseApplication by Delegates.notNull()
fun get() = application
+
+ private lateinit var daoSession: DaoSession
}
override fun onCreate() {
super.onCreate()
application = this
SaveKeyValues.initSharedPreferences(this)
+
+ val devOpenHelper = DaoMaster.DevOpenHelper(this, "Meterage.db", null)
+ val daoMaster = DaoMaster(devOpenHelper.writableDatabase)
+ daoSession = daoMaster.newSession()
+ }
+
+ fun getDaoSession(): DaoSession {
+ return daoSession
}
//绕过Android 11以上反射限制
diff --git a/app/src/main/java/com/casic/xz/meterage/bean/SearchHistoryBean.java b/app/src/main/java/com/casic/xz/meterage/bean/SearchHistoryBean.java
new file mode 100644
index 0000000..6a46a3a
--- /dev/null
+++ b/app/src/main/java/com/casic/xz/meterage/bean/SearchHistoryBean.java
@@ -0,0 +1,82 @@
+package com.casic.xz.meterage.bean;
+
+import org.greenrobot.greendao.annotation.Entity;
+import org.greenrobot.greendao.annotation.Generated;
+import org.greenrobot.greendao.annotation.Id;
+import org.greenrobot.greendao.annotation.Unique;
+
+@Entity
+public class SearchHistoryBean {
+ @Id(autoincrement = true)
+ private Long id;//主键自增
+
+ @Unique
+ private String uuid;
+ private String keywords;//查询条件-关键字
+ private String searchType;//查询类型
+ private String userId;//用户Id
+ private String searchTime;//查询的时间
+
+ @Generated(hash = 2130561778)
+ public SearchHistoryBean(Long id, String uuid, String keywords,
+ String searchType, String userId, String searchTime) {
+ this.id = id;
+ this.uuid = uuid;
+ this.keywords = keywords;
+ this.searchType = searchType;
+ this.userId = userId;
+ this.searchTime = searchTime;
+ }
+
+ @Generated(hash = 1570282321)
+ public SearchHistoryBean() {
+ }
+
+ public Long getId() {
+ return this.id;
+ }
+
+ public void setId(Long id) {
+ this.id = id;
+ }
+
+ public String getUuid() {
+ return this.uuid;
+ }
+
+ public void setUuid(String uuid) {
+ this.uuid = uuid;
+ }
+
+ public String getKeywords() {
+ return this.keywords;
+ }
+
+ public void setKeywords(String keywords) {
+ this.keywords = keywords;
+ }
+
+ public String getSearchType() {
+ return this.searchType;
+ }
+
+ public void setSearchType(String searchType) {
+ this.searchType = searchType;
+ }
+
+ public String getUserId() {
+ return this.userId;
+ }
+
+ public void setUserId(String userId) {
+ this.userId = userId;
+ }
+
+ public String getSearchTime() {
+ return this.searchTime;
+ }
+
+ public void setSearchTime(String searchTime) {
+ this.searchTime = searchTime;
+ }
+}
diff --git a/app/src/main/java/com/casic/xz/meterage/fragment/HomePageFragment.kt b/app/src/main/java/com/casic/xz/meterage/fragment/HomePageFragment.kt
index 151f951..ae7f5e4 100644
--- a/app/src/main/java/com/casic/xz/meterage/fragment/HomePageFragment.kt
+++ b/app/src/main/java/com/casic/xz/meterage/fragment/HomePageFragment.kt
@@ -15,22 +15,20 @@
import com.casic.xz.meterage.extensions.showEmptyPage
import com.casic.xz.meterage.model.NoticeListModel
import com.casic.xz.meterage.model.RemindListModel
-import com.casic.xz.meterage.model.UserInfoModel
import com.casic.xz.meterage.utils.LoadingDialogHub
import com.casic.xz.meterage.utils.LocaleConstant
import com.casic.xz.meterage.utils.QrConfigCreator
import com.casic.xz.meterage.view.home.*
import com.casic.xz.meterage.view.notice.NoticeListActivity
+import com.casic.xz.meterage.view.search.SearchAllActivity
import com.casic.xz.meterage.vm.MeterageTrainViewModel
import com.casic.xz.meterage.vm.NoticeViewModel
-import com.casic.xz.meterage.vm.UserViewModel
import com.pengxh.kt.lite.adapter.NormalRecyclerAdapter
import com.pengxh.kt.lite.adapter.ViewHolder
import com.pengxh.kt.lite.base.KotlinBaseFragment
import com.pengxh.kt.lite.extensions.convertColor
import com.pengxh.kt.lite.extensions.navigatePageTo
import com.pengxh.kt.lite.extensions.show
-import com.pengxh.kt.lite.utils.SaveKeyValues
import com.pengxh.kt.lite.utils.WeakReferenceHandler
import com.pengxh.kt.lite.vm.LoadState
import com.pengxh.kt.lite.widget.dialog.AlertControlDialog
@@ -39,13 +37,12 @@
import kotlinx.android.synthetic.main.include_empty_view.*
import java.util.*
-class HomePageFragment : KotlinBaseFragment() {
+class HomePageFragment(private val userId: String) : KotlinBaseFragment() {
private val timer = object : Timer() {}
private lateinit var weakReferenceHandler: WeakReferenceHandler
private lateinit var meterageTrainViewModel: MeterageTrainViewModel
private lateinit var noticeViewModel: NoticeViewModel
- private lateinit var userData: UserInfoModel.DataModel
private lateinit var remindAdapter: NormalRecyclerAdapter
private var dataBeans: MutableList = ArrayList()
private var noticeBeans: MutableList = ArrayList()
@@ -170,14 +167,6 @@
true
}
- val userViewModel = ViewModelProvider(this)[UserViewModel::class.java]
- userViewModel.getUserInfo(SaveKeyValues.getValue(LocaleConstant.ACCOUNT, "") as String)
- userViewModel.userInfo.observe(this) {
- if (it.code == 200) {
- userData = it.data
- }
- }
-
meterageTrainViewModel = ViewModelProvider(this)[MeterageTrainViewModel::class.java]
meterageTrainViewModel.signInResult.observe(this) {
if (it.code == 200) {
@@ -296,10 +285,14 @@
}
override fun initEvent() {
+ searchBar.setOnClickListener {
+ requireContext().navigatePageTo()
+ }
+
scanCodeView.setOnClickListener {
qrManager.startScan(requireActivity()) { result ->
if (result.content.isDigitsOnly()) {
- meterageTrainViewModel.signIn(userData.id, result.content)
+ meterageTrainViewModel.signIn(userId, result.content)
} else {
"签到二维码错误,请重新扫描".show(requireContext())
}
diff --git a/app/src/main/java/com/casic/xz/meterage/greendao/DaoMaster.java b/app/src/main/java/com/casic/xz/meterage/greendao/DaoMaster.java
new file mode 100644
index 0000000..d714ce2
--- /dev/null
+++ b/app/src/main/java/com/casic/xz/meterage/greendao/DaoMaster.java
@@ -0,0 +1,96 @@
+package com.casic.xz.meterage.greendao;
+
+import android.content.Context;
+import android.database.sqlite.SQLiteDatabase;
+import android.database.sqlite.SQLiteDatabase.CursorFactory;
+import android.util.Log;
+
+import org.greenrobot.greendao.AbstractDaoMaster;
+import org.greenrobot.greendao.database.Database;
+import org.greenrobot.greendao.database.DatabaseOpenHelper;
+import org.greenrobot.greendao.database.StandardDatabase;
+import org.greenrobot.greendao.identityscope.IdentityScopeType;
+
+
+// THIS CODE IS GENERATED BY greenDAO, DO NOT EDIT.
+/**
+ * Master of DAO (schema version 1): knows all DAOs.
+ */
+public class DaoMaster extends AbstractDaoMaster {
+ public static final int SCHEMA_VERSION = 1;
+
+ /** Creates underlying database table using DAOs. */
+ public static void createAllTables(Database db, boolean ifNotExists) {
+ SearchHistoryBeanDao.createTable(db, ifNotExists);
+ }
+
+ /** Drops underlying database table using DAOs. */
+ public static void dropAllTables(Database db, boolean ifExists) {
+ SearchHistoryBeanDao.dropTable(db, ifExists);
+ }
+
+ /**
+ * WARNING: Drops all table on Upgrade! Use only during development.
+ * Convenience method using a {@link DevOpenHelper}.
+ */
+ public static DaoSession newDevSession(Context context, String name) {
+ Database db = new DevOpenHelper(context, name).getWritableDb();
+ DaoMaster daoMaster = new DaoMaster(db);
+ return daoMaster.newSession();
+ }
+
+ public DaoMaster(SQLiteDatabase db) {
+ this(new StandardDatabase(db));
+ }
+
+ public DaoMaster(Database db) {
+ super(db, SCHEMA_VERSION);
+ registerDaoClass(SearchHistoryBeanDao.class);
+ }
+
+ public DaoSession newSession() {
+ return new DaoSession(db, IdentityScopeType.Session, daoConfigMap);
+ }
+
+ public DaoSession newSession(IdentityScopeType type) {
+ return new DaoSession(db, type, daoConfigMap);
+ }
+
+ /**
+ * Calls {@link #createAllTables(Database, boolean)} in {@link #onCreate(Database)} -
+ */
+ public static abstract class OpenHelper extends DatabaseOpenHelper {
+ public OpenHelper(Context context, String name) {
+ super(context, name, SCHEMA_VERSION);
+ }
+
+ public OpenHelper(Context context, String name, CursorFactory factory) {
+ super(context, name, factory, SCHEMA_VERSION);
+ }
+
+ @Override
+ public void onCreate(Database db) {
+ Log.i("greenDAO", "Creating tables for schema version " + SCHEMA_VERSION);
+ createAllTables(db, false);
+ }
+ }
+
+ /** WARNING: Drops all table on Upgrade! Use only during development. */
+ public static class DevOpenHelper extends OpenHelper {
+ public DevOpenHelper(Context context, String name) {
+ super(context, name);
+ }
+
+ public DevOpenHelper(Context context, String name, CursorFactory factory) {
+ super(context, name, factory);
+ }
+
+ @Override
+ public void onUpgrade(Database db, int oldVersion, int newVersion) {
+ Log.i("greenDAO", "Upgrading schema from version " + oldVersion + " to " + newVersion + " by dropping all tables");
+ dropAllTables(db, true);
+ onCreate(db);
+ }
+ }
+
+}
diff --git a/app/src/main/java/com/casic/xz/meterage/greendao/DaoSession.java b/app/src/main/java/com/casic/xz/meterage/greendao/DaoSession.java
new file mode 100644
index 0000000..0e80024
--- /dev/null
+++ b/app/src/main/java/com/casic/xz/meterage/greendao/DaoSession.java
@@ -0,0 +1,46 @@
+package com.casic.xz.meterage.greendao;
+
+import com.casic.xz.meterage.bean.SearchHistoryBean;
+
+import org.greenrobot.greendao.AbstractDao;
+import org.greenrobot.greendao.AbstractDaoSession;
+import org.greenrobot.greendao.database.Database;
+import org.greenrobot.greendao.identityscope.IdentityScopeType;
+import org.greenrobot.greendao.internal.DaoConfig;
+
+import java.util.Map;
+
+// THIS CODE IS GENERATED BY greenDAO, DO NOT EDIT.
+
+/**
+ * {@inheritDoc}
+ *
+ * @see org.greenrobot.greendao.AbstractDaoSession
+ */
+public class DaoSession extends AbstractDaoSession {
+
+ private final DaoConfig searchHistoryBeanDaoConfig;
+
+ private final SearchHistoryBeanDao searchHistoryBeanDao;
+
+ public DaoSession(Database db, IdentityScopeType type, Map>, DaoConfig>
+ daoConfigMap) {
+ super(db);
+
+ searchHistoryBeanDaoConfig = daoConfigMap.get(SearchHistoryBeanDao.class).clone();
+ searchHistoryBeanDaoConfig.initIdentityScope(type);
+
+ searchHistoryBeanDao = new SearchHistoryBeanDao(searchHistoryBeanDaoConfig, this);
+
+ registerDao(SearchHistoryBean.class, searchHistoryBeanDao);
+ }
+
+ public void clear() {
+ searchHistoryBeanDaoConfig.clearIdentityScope();
+ }
+
+ public SearchHistoryBeanDao getSearchHistoryBeanDao() {
+ return searchHistoryBeanDao;
+ }
+
+}
diff --git a/app/src/main/java/com/casic/xz/meterage/greendao/SearchHistoryBeanDao.java b/app/src/main/java/com/casic/xz/meterage/greendao/SearchHistoryBeanDao.java
new file mode 100644
index 0000000..5923d02
--- /dev/null
+++ b/app/src/main/java/com/casic/xz/meterage/greendao/SearchHistoryBeanDao.java
@@ -0,0 +1,185 @@
+package com.casic.xz.meterage.greendao;
+
+import android.database.Cursor;
+import android.database.sqlite.SQLiteStatement;
+
+import com.casic.xz.meterage.bean.SearchHistoryBean;
+
+import org.greenrobot.greendao.AbstractDao;
+import org.greenrobot.greendao.Property;
+import org.greenrobot.greendao.database.Database;
+import org.greenrobot.greendao.database.DatabaseStatement;
+import org.greenrobot.greendao.internal.DaoConfig;
+
+// THIS CODE IS GENERATED BY greenDAO, DO NOT EDIT.
+/**
+ * DAO for table "SEARCH_HISTORY_BEAN".
+*/
+public class SearchHistoryBeanDao extends AbstractDao {
+
+ public static final String TABLENAME = "SEARCH_HISTORY_BEAN";
+
+ /**
+ * Properties of entity SearchHistoryBean.
+ * Can be used for QueryBuilder and for referencing column names.
+ */
+ public static class Properties {
+ public final static Property Id = new Property(0, Long.class, "id", true, "_id");
+ public final static Property Uuid = new Property(1, String.class, "uuid", false, "UUID");
+ public final static Property Keywords = new Property(2, String.class, "keywords", false, "KEYWORDS");
+ public final static Property SearchType = new Property(3, String.class, "searchType", false, "SEARCH_TYPE");
+ public final static Property UserId = new Property(4, String.class, "userId", false, "USER_ID");
+ public final static Property SearchTime = new Property(5, String.class, "searchTime", false, "SEARCH_TIME");
+ }
+
+
+ public SearchHistoryBeanDao(DaoConfig config) {
+ super(config);
+ }
+
+ public SearchHistoryBeanDao(DaoConfig config, DaoSession daoSession) {
+ super(config, daoSession);
+ }
+
+ /** Creates the underlying database table. */
+ public static void createTable(Database db, boolean ifNotExists) {
+ String constraint = ifNotExists? "IF NOT EXISTS ": "";
+ db.execSQL("CREATE TABLE " + constraint + "\"SEARCH_HISTORY_BEAN\" (" + //
+ "\"_id\" INTEGER PRIMARY KEY AUTOINCREMENT ," + // 0: id
+ "\"UUID\" TEXT UNIQUE ," + // 1: uuid
+ "\"KEYWORDS\" TEXT," + // 2: keywords
+ "\"SEARCH_TYPE\" TEXT," + // 3: searchType
+ "\"USER_ID\" TEXT," + // 4: userId
+ "\"SEARCH_TIME\" TEXT);"); // 5: searchTime
+ }
+
+ /** Drops the underlying database table. */
+ public static void dropTable(Database db, boolean ifExists) {
+ String sql = "DROP TABLE " + (ifExists ? "IF EXISTS " : "") + "\"SEARCH_HISTORY_BEAN\"";
+ db.execSQL(sql);
+ }
+
+ @Override
+ protected final void bindValues(DatabaseStatement stmt, SearchHistoryBean entity) {
+ stmt.clearBindings();
+
+ Long id = entity.getId();
+ if (id != null) {
+ stmt.bindLong(1, id);
+ }
+
+ String uuid = entity.getUuid();
+ if (uuid != null) {
+ stmt.bindString(2, uuid);
+ }
+
+ String keywords = entity.getKeywords();
+ if (keywords != null) {
+ stmt.bindString(3, keywords);
+ }
+
+ String searchType = entity.getSearchType();
+ if (searchType != null) {
+ stmt.bindString(4, searchType);
+ }
+
+ String userId = entity.getUserId();
+ if (userId != null) {
+ stmt.bindString(5, userId);
+ }
+
+ String searchTime = entity.getSearchTime();
+ if (searchTime != null) {
+ stmt.bindString(6, searchTime);
+ }
+ }
+
+ @Override
+ protected final void bindValues(SQLiteStatement stmt, SearchHistoryBean entity) {
+ stmt.clearBindings();
+
+ Long id = entity.getId();
+ if (id != null) {
+ stmt.bindLong(1, id);
+ }
+
+ String uuid = entity.getUuid();
+ if (uuid != null) {
+ stmt.bindString(2, uuid);
+ }
+
+ String keywords = entity.getKeywords();
+ if (keywords != null) {
+ stmt.bindString(3, keywords);
+ }
+
+ String searchType = entity.getSearchType();
+ if (searchType != null) {
+ stmt.bindString(4, searchType);
+ }
+
+ String userId = entity.getUserId();
+ if (userId != null) {
+ stmt.bindString(5, userId);
+ }
+
+ String searchTime = entity.getSearchTime();
+ if (searchTime != null) {
+ stmt.bindString(6, searchTime);
+ }
+ }
+
+ @Override
+ public Long readKey(Cursor cursor, int offset) {
+ return cursor.isNull(offset + 0) ? null : cursor.getLong(offset + 0);
+ }
+
+ @Override
+ public SearchHistoryBean readEntity(Cursor cursor, int offset) {
+ SearchHistoryBean entity = new SearchHistoryBean( //
+ cursor.isNull(offset + 0) ? null : cursor.getLong(offset + 0), // id
+ cursor.isNull(offset + 1) ? null : cursor.getString(offset + 1), // uuid
+ cursor.isNull(offset + 2) ? null : cursor.getString(offset + 2), // keywords
+ cursor.isNull(offset + 3) ? null : cursor.getString(offset + 3), // searchType
+ cursor.isNull(offset + 4) ? null : cursor.getString(offset + 4), // userId
+ cursor.isNull(offset + 5) ? null : cursor.getString(offset + 5) // searchTime
+ );
+ return entity;
+ }
+
+ @Override
+ public void readEntity(Cursor cursor, SearchHistoryBean entity, int offset) {
+ entity.setId(cursor.isNull(offset + 0) ? null : cursor.getLong(offset + 0));
+ entity.setUuid(cursor.isNull(offset + 1) ? null : cursor.getString(offset + 1));
+ entity.setKeywords(cursor.isNull(offset + 2) ? null : cursor.getString(offset + 2));
+ entity.setSearchType(cursor.isNull(offset + 3) ? null : cursor.getString(offset + 3));
+ entity.setUserId(cursor.isNull(offset + 4) ? null : cursor.getString(offset + 4));
+ entity.setSearchTime(cursor.isNull(offset + 5) ? null : cursor.getString(offset + 5));
+ }
+
+ @Override
+ protected final Long updateKeyAfterInsert(SearchHistoryBean entity, long rowId) {
+ entity.setId(rowId);
+ return rowId;
+ }
+
+ @Override
+ public Long getKey(SearchHistoryBean entity) {
+ if(entity != null) {
+ return entity.getId();
+ } else {
+ return null;
+ }
+ }
+
+ @Override
+ public boolean hasKey(SearchHistoryBean entity) {
+ return entity.getId() != null;
+ }
+
+ @Override
+ protected final boolean isEntityUpdateable() {
+ return true;
+ }
+
+}
diff --git a/app/src/main/java/com/casic/xz/meterage/utils/DataBaseManager.kt b/app/src/main/java/com/casic/xz/meterage/utils/DataBaseManager.kt
new file mode 100644
index 0000000..52fe032
--- /dev/null
+++ b/app/src/main/java/com/casic/xz/meterage/utils/DataBaseManager.kt
@@ -0,0 +1,45 @@
+package com.casic.xz.meterage.utils
+
+import com.casic.xz.meterage.base.BaseApplication
+import com.casic.xz.meterage.bean.SearchHistoryBean
+import com.casic.xz.meterage.greendao.SearchHistoryBeanDao
+import com.pengxh.kt.lite.extensions.timestampToCompleteDate
+import com.pengxh.kt.lite.utils.SaveKeyValues
+import java.util.*
+
+class DataBaseManager private constructor() {
+
+ companion object {
+ //Kotlin委托模式双重锁单例
+ val get: DataBaseManager by lazy(mode = LazyThreadSafetyMode.SYNCHRONIZED) {
+ DataBaseManager()
+ }
+ }
+
+ private val searchBeanDao by lazy { BaseApplication.get().getDaoSession().searchHistoryBeanDao }
+ private val userId by lazy { SaveKeyValues.getValue(LocaleConstant.USER_ID, "") }
+
+ fun addSearchHistory(keywords: String, searchType: String) {
+ val bean = SearchHistoryBean()
+ bean.uuid = UUID.randomUUID().toString()
+ bean.keywords = keywords
+ bean.searchType = searchType
+ bean.userId = userId.toString()
+ bean.searchTime = System.currentTimeMillis().timestampToCompleteDate()
+ searchBeanDao.insert(bean)
+ }
+
+ fun queryHistoryByType(searchType: String): MutableList {
+ return searchBeanDao.queryBuilder().where(
+ SearchHistoryBeanDao.Properties.UserId.eq(userId),
+ SearchHistoryBeanDao.Properties.SearchType.eq(searchType)
+ ).list()
+ }
+
+ fun deleteHistoryByType(searchType: String) {
+ val list = queryHistoryByType(searchType)
+ list.forEach {
+ searchBeanDao.delete(it)
+ }
+ }
+}
\ No newline at end of file
diff --git a/app/src/main/java/com/casic/xz/meterage/utils/LocaleConstant.kt b/app/src/main/java/com/casic/xz/meterage/utils/LocaleConstant.kt
index cc2848b..2ea47a0 100644
--- a/app/src/main/java/com/casic/xz/meterage/utils/LocaleConstant.kt
+++ b/app/src/main/java/com/casic/xz/meterage/utils/LocaleConstant.kt
@@ -62,4 +62,5 @@
const val File_SERVER_URL = "http://111.198.10.15:21408"
const val ACCOUNT = "account"
const val PASSWORD = "password"
+ const val USER_ID = "userId"
}
\ No newline at end of file
diff --git a/app/src/main/java/com/casic/xz/meterage/utils/SearchType.kt b/app/src/main/java/com/casic/xz/meterage/utils/SearchType.kt
new file mode 100644
index 0000000..5f5253e
--- /dev/null
+++ b/app/src/main/java/com/casic/xz/meterage/utils/SearchType.kt
@@ -0,0 +1,8 @@
+package com.casic.xz.meterage.utils
+
+object SearchType {
+ /**
+ * 搜索仪器设备
+ * */
+ const val Equipment = "0"
+}
diff --git a/app/src/main/java/com/casic/xz/meterage/view/MainActivity.kt b/app/src/main/java/com/casic/xz/meterage/view/MainActivity.kt
index 28836e0..8fb0793 100644
--- a/app/src/main/java/com/casic/xz/meterage/view/MainActivity.kt
+++ b/app/src/main/java/com/casic/xz/meterage/view/MainActivity.kt
@@ -3,15 +3,19 @@
import android.view.KeyEvent
import android.view.MenuItem
import androidx.fragment.app.Fragment
+import androidx.lifecycle.ViewModelProvider
import androidx.viewpager.widget.ViewPager
import com.casic.xz.meterage.R
import com.casic.xz.meterage.adapter.ViewPagerAdapter
import com.casic.xz.meterage.fragment.HomePageFragment
import com.casic.xz.meterage.fragment.MinePageFragment
import com.casic.xz.meterage.fragment.SamplePageFragment
+import com.casic.xz.meterage.utils.LocaleConstant
+import com.casic.xz.meterage.vm.UserViewModel
import com.gyf.immersionbar.ImmersionBar
import com.pengxh.kt.lite.base.KotlinBaseActivity
import com.pengxh.kt.lite.extensions.show
+import com.pengxh.kt.lite.utils.SaveKeyValues
import kotlinx.android.synthetic.main.activity_main.*
class MainActivity : KotlinBaseActivity() {
@@ -20,53 +24,59 @@
private var fragmentPages: ArrayList = ArrayList()
private var clickTime: Long = 0
- init {
- fragmentPages.add(HomePageFragment())
- fragmentPages.add(SamplePageFragment())
- fragmentPages.add(MinePageFragment())
- }
-
override fun initData() {
- bottomNavigation.itemIconTintList = null
- bottomNavigation.setOnNavigationItemSelectedListener { menuItem ->
- when (menuItem.itemId) {
- R.id.nav_home -> {
- mainViewPager.currentItem = 0
+ val userViewModel = ViewModelProvider(this)[UserViewModel::class.java]
+ userViewModel.getUserInfo(SaveKeyValues.getValue(LocaleConstant.ACCOUNT, "") as String)
+ userViewModel.userInfo.observe(this) {
+ if (it.code == 200) {
+ SaveKeyValues.putValue(LocaleConstant.USER_ID, it.data.id)
+
+ fragmentPages.add(HomePageFragment(it.data.id))
+ fragmentPages.add(SamplePageFragment())
+ fragmentPages.add(MinePageFragment())
+
+ bottomNavigation.itemIconTintList = null
+ bottomNavigation.setOnNavigationItemSelectedListener { menuItem ->
+ when (menuItem.itemId) {
+ R.id.nav_home -> {
+ mainViewPager.currentItem = 0
+ }
+ R.id.nav_sample -> {
+ mainViewPager.currentItem = 1
+ }
+ R.id.nav_mine -> {
+ mainViewPager.currentItem = 2
+ }
+ }
+ false
}
- R.id.nav_sample -> {
- mainViewPager.currentItem = 1
- }
- R.id.nav_mine -> {
- mainViewPager.currentItem = 2
- }
+ mainViewPager.adapter = ViewPagerAdapter(fragmentPages, supportFragmentManager)
+ mainViewPager.offscreenPageLimit = fragmentPages.size //缓存页数
+ mainViewPager.addOnPageChangeListener(object : ViewPager.OnPageChangeListener {
+ override fun onPageScrollStateChanged(state: Int) {
+
+ }
+
+ override fun onPageScrolled(
+ position: Int,
+ positionOffset: Float,
+ positionOffsetPixels: Int
+ ) {
+
+ }
+
+ override fun onPageSelected(position: Int) {
+ if (menuItem != null) {
+ menuItem!!.isChecked = false
+ } else {
+ bottomNavigation.menu.getItem(0).isChecked = false
+ }
+ menuItem = bottomNavigation.menu.getItem(position)
+ menuItem!!.isChecked = true
+ }
+ })
}
- false
}
- mainViewPager.adapter = ViewPagerAdapter(fragmentPages, supportFragmentManager)
- mainViewPager.offscreenPageLimit = fragmentPages.size //缓存页数
- mainViewPager.addOnPageChangeListener(object : ViewPager.OnPageChangeListener {
- override fun onPageScrollStateChanged(state: Int) {
-
- }
-
- override fun onPageScrolled(
- position: Int,
- positionOffset: Float,
- positionOffsetPixels: Int
- ) {
-
- }
-
- override fun onPageSelected(position: Int) {
- if (menuItem != null) {
- menuItem!!.isChecked = false
- } else {
- bottomNavigation.menu.getItem(0).isChecked = false
- }
- menuItem = bottomNavigation.menu.getItem(position)
- menuItem!!.isChecked = true
- }
- })
}
override fun initEvent() {
diff --git a/app/src/main/java/com/casic/xz/meterage/view/search/SearchAllActivity.kt b/app/src/main/java/com/casic/xz/meterage/view/search/SearchAllActivity.kt
new file mode 100644
index 0000000..ecc8fd7
--- /dev/null
+++ b/app/src/main/java/com/casic/xz/meterage/view/search/SearchAllActivity.kt
@@ -0,0 +1,40 @@
+package com.casic.xz.meterage.view.search
+
+import com.casic.xz.meterage.R
+import com.casic.xz.meterage.extensions.initLayoutImmersionBar
+import com.gyf.immersionbar.ImmersionBar
+import com.pengxh.kt.lite.base.KotlinBaseActivity
+import com.pengxh.kt.lite.extensions.navigatePageTo
+import kotlinx.android.synthetic.main.activity_search_all.*
+import kotlinx.android.synthetic.main.include_search_input_title.*
+
+class SearchAllActivity : KotlinBaseActivity() {
+
+ override fun initData() {
+
+ }
+
+ override fun initEvent() {
+ leftBackView.setOnClickListener { finish() }
+ searchTextView.setOnClickListener {
+ navigatePageTo(inputView.text.toString())
+ }
+ }
+
+ override fun initLayoutView(): Int = R.layout.activity_search_all
+
+ override fun observeRequestState() {
+
+ }
+
+ override fun setupTopBarLayout() {
+ ImmersionBar.with(this).statusBarDarkFont(true).init()
+ initLayoutImmersionBar(rootView)
+ inputView.hint = "查询样品、业务"
+ }
+
+ override fun onResume() {
+ super.onResume()
+ //TODO 流式布局显示查询记录Tag?
+ }
+}
\ No newline at end of file
diff --git a/app/src/main/java/com/casic/xz/meterage/view/search/SearchAllResultActivity.kt b/app/src/main/java/com/casic/xz/meterage/view/search/SearchAllResultActivity.kt
new file mode 100644
index 0000000..adbb570
--- /dev/null
+++ b/app/src/main/java/com/casic/xz/meterage/view/search/SearchAllResultActivity.kt
@@ -0,0 +1,34 @@
+package com.casic.xz.meterage.view.search
+
+import com.casic.xz.meterage.R
+import com.casic.xz.meterage.extensions.initLayoutImmersionBar
+import com.gyf.immersionbar.ImmersionBar
+import com.pengxh.kt.lite.base.KotlinBaseActivity
+import com.pengxh.kt.lite.utils.Constant
+import kotlinx.android.synthetic.main.activity_search_all_reasult.*
+import kotlinx.android.synthetic.main.include_search_title.*
+
+class SearchAllResultActivity : KotlinBaseActivity() {
+
+ private lateinit var param: String
+
+ override fun initData() {
+ param = intent.getStringExtra(Constant.INTENT_PARAM)!!
+ }
+
+ override fun initEvent() {
+ leftBackView.setOnClickListener { finish() }
+ }
+
+ override fun initLayoutView(): Int = R.layout.activity_search_all_reasult
+
+ override fun observeRequestState() {
+
+ }
+
+ override fun setupTopBarLayout() {
+ ImmersionBar.with(this).statusBarDarkFont(true).init()
+ initLayoutImmersionBar(rootView)
+ titleView.text = "查询结果"
+ }
+}
\ No newline at end of file
diff --git a/app/src/main/java/com/casic/xz/meterage/view/search/SearchEquipmentActivity.kt b/app/src/main/java/com/casic/xz/meterage/view/search/SearchEquipmentActivity.kt
index f5c98d6..3551790 100644
--- a/app/src/main/java/com/casic/xz/meterage/view/search/SearchEquipmentActivity.kt
+++ b/app/src/main/java/com/casic/xz/meterage/view/search/SearchEquipmentActivity.kt
@@ -1,27 +1,98 @@
package com.casic.xz.meterage.view.search
import com.casic.xz.meterage.R
+import com.casic.xz.meterage.bean.SearchHistoryBean
import com.casic.xz.meterage.extensions.initLayoutImmersionBar
+import com.casic.xz.meterage.utils.DataBaseManager
+import com.casic.xz.meterage.utils.SearchType
import com.gyf.immersionbar.ImmersionBar
+import com.pengxh.kt.lite.adapter.NormalRecyclerAdapter
+import com.pengxh.kt.lite.adapter.ViewHolder
import com.pengxh.kt.lite.base.KotlinBaseActivity
import com.pengxh.kt.lite.extensions.navigatePageTo
+import com.pengxh.kt.lite.utils.WeakReferenceHandler
+import com.pengxh.kt.lite.widget.dialog.AlertControlDialog
import kotlinx.android.synthetic.main.activity_search_equipment.*
import kotlinx.android.synthetic.main.include_search_input_title.*
+
/**
* 搜索仪器设备
* */
class SearchEquipmentActivity : KotlinBaseActivity() {
- override fun initData() {
+ private lateinit var weakReferenceHandler: WeakReferenceHandler
+ private lateinit var historyAdapter: NormalRecyclerAdapter
+ private var dataBeans: MutableList = ArrayList()
+ private var isRefresh = false
+ override fun initData() {
+ weakReferenceHandler = WeakReferenceHandler {
+ if (it.what == 2023031001) {
+ if (isRefresh) {
+ historyAdapter.notifyDataSetChanged()
+ } else {
+ historyAdapter = object :
+ NormalRecyclerAdapter(
+ R.layout.item_search_rv_l, dataBeans
+ ) {
+ override fun convertView(
+ viewHolder: ViewHolder, position: Int, item: SearchHistoryBean
+ ) {
+ viewHolder.setText(R.id.searchTagView, item.keywords)
+ }
+ }
+ historyRecyclerView.adapter = historyAdapter
+ historyAdapter.setOnItemClickedListener(object :
+ NormalRecyclerAdapter.OnItemClickedListener {
+ override fun onItemClicked(position: Int, t: SearchHistoryBean) {
+ navigatePageTo(t.keywords)
+ }
+ })
+ }
+ }
+ true
+ }
+ }
+
+ override fun onResume() {
+ super.onResume()
+ dataBeans = DataBaseManager.get.queryHistoryByType(SearchType.Equipment)
+ weakReferenceHandler.sendEmptyMessage(2023031001)
}
override fun initEvent() {
leftBackView.setOnClickListener { finish() }
searchTextView.setOnClickListener {
+ if (!inputView.text.isNullOrBlank()) {
+ DataBaseManager.get.addSearchHistory(
+ inputView.text.toString(), SearchType.Equipment
+ )
+ }
+
navigatePageTo(inputView.text.toString())
}
+
+ deleteHistoryView.setOnClickListener {
+ AlertControlDialog.Builder()
+ .setContext(this)
+ .setTitle("提示")
+ .setMessage("确定将所有搜索记录删除?")
+ .setNegativeButton("取消")
+ .setPositiveButton("确定")
+ .setOnDialogButtonClickListener(object :
+ AlertControlDialog.OnDialogButtonClickListener {
+ override fun onCancelClick() {
+
+ }
+
+ override fun onConfirmClick() {
+ DataBaseManager.get.deleteHistoryByType(SearchType.Equipment)
+ dataBeans.clear()
+ historyAdapter.notifyDataSetChanged()
+ }
+ }).build().show()
+ }
}
override fun initLayoutView(): Int = R.layout.activity_search_equipment
@@ -35,9 +106,4 @@
initLayoutImmersionBar(rootView)
inputView.hint = "查询设备名称、编号"
}
-
- override fun onResume() {
- super.onResume()
- //TODO 流式布局显示查询记录Tag?
- }
}
\ No newline at end of file
diff --git a/app/src/main/res/drawable/ic_delete.xml b/app/src/main/res/drawable/ic_delete.xml
new file mode 100644
index 0000000..1810342
--- /dev/null
+++ b/app/src/main/res/drawable/ic_delete.xml
@@ -0,0 +1,9 @@
+
+
+
diff --git a/app/src/main/res/layout/activity_search_all.xml b/app/src/main/res/layout/activity_search_all.xml
new file mode 100644
index 0000000..45694fb
--- /dev/null
+++ b/app/src/main/res/layout/activity_search_all.xml
@@ -0,0 +1,17 @@
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/app/src/main/res/layout/activity_search_all_reasult.xml b/app/src/main/res/layout/activity_search_all_reasult.xml
new file mode 100644
index 0000000..7e90433
--- /dev/null
+++ b/app/src/main/res/layout/activity_search_all_reasult.xml
@@ -0,0 +1,51 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/app/src/main/res/layout/activity_search_equipment.xml b/app/src/main/res/layout/activity_search_equipment.xml
index 45694fb..f637b70 100644
--- a/app/src/main/res/layout/activity_search_equipment.xml
+++ b/app/src/main/res/layout/activity_search_equipment.xml
@@ -1,5 +1,6 @@
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/app/build.gradle b/app/build.gradle
index 298f687..e142ec1 100644
--- a/app/build.gradle
+++ b/app/build.gradle
@@ -3,6 +3,7 @@
apply plugin: 'com.android.application'
apply plugin: 'kotlin-android'
apply plugin: 'kotlin-android-extensions'
+apply plugin: 'org.greenrobot.greendao'
android {
signingConfigs {
@@ -57,6 +58,12 @@
outputFileName = "XZJL_" + getBuildDate() + "_Beta.apk"
}
}
+
+ greendao {
+ schemaVersion 1//数据库版本号
+ targetGenDir 'src/main/java'//设置DaoMaster、DaoSession、Dao目录
+ daoPackage 'com.casic.xz.meterage.greendao'//设置DaoMaster、DaoSession、Dao包名
+ }
}
static def getBuildDate() {
@@ -67,7 +74,7 @@
dependencies {
//基础依赖库
implementation 'com.github.AndroidCoderPeng:Kotlin-lite-lib:1.0.4'
- implementation 'androidx.appcompat:appcompat:1.5.1'
+ implementation 'androidx.appcompat:appcompat:1.6.1'
implementation 'androidx.core:core-ktx:1.9.0'
//Google官方授权框架
implementation 'pub.devrel:easypermissions:3.0.0'
@@ -113,4 +120,6 @@
implementation 'com.github.tiann:FreeReflection:3.1.0'
//单项/数字、二三级联动、日期/时间等滚轮选择器
implementation 'com.github.gzu-liyujiang.AndroidPicker:WheelPicker:4.1.8'
+ //数据库框架
+ implementation 'org.greenrobot:greendao:3.3.0'
}
\ No newline at end of file
diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml
index 972eff9..5b6f9b2 100644
--- a/app/src/main/AndroidManifest.xml
+++ b/app/src/main/AndroidManifest.xml
@@ -69,6 +69,8 @@
+
+
diff --git a/app/src/main/java/com/casic/xz/meterage/base/BaseApplication.kt b/app/src/main/java/com/casic/xz/meterage/base/BaseApplication.kt
index 14a604d..1684c23 100644
--- a/app/src/main/java/com/casic/xz/meterage/base/BaseApplication.kt
+++ b/app/src/main/java/com/casic/xz/meterage/base/BaseApplication.kt
@@ -2,6 +2,8 @@
import android.app.Application
import android.content.Context
+import com.casic.xz.meterage.greendao.DaoMaster
+import com.casic.xz.meterage.greendao.DaoSession
import com.pengxh.kt.lite.utils.SaveKeyValues
import me.weishu.reflection.Reflection
import kotlin.properties.Delegates
@@ -12,12 +14,22 @@
private var application: BaseApplication by Delegates.notNull()
fun get() = application
+
+ private lateinit var daoSession: DaoSession
}
override fun onCreate() {
super.onCreate()
application = this
SaveKeyValues.initSharedPreferences(this)
+
+ val devOpenHelper = DaoMaster.DevOpenHelper(this, "Meterage.db", null)
+ val daoMaster = DaoMaster(devOpenHelper.writableDatabase)
+ daoSession = daoMaster.newSession()
+ }
+
+ fun getDaoSession(): DaoSession {
+ return daoSession
}
//绕过Android 11以上反射限制
diff --git a/app/src/main/java/com/casic/xz/meterage/bean/SearchHistoryBean.java b/app/src/main/java/com/casic/xz/meterage/bean/SearchHistoryBean.java
new file mode 100644
index 0000000..6a46a3a
--- /dev/null
+++ b/app/src/main/java/com/casic/xz/meterage/bean/SearchHistoryBean.java
@@ -0,0 +1,82 @@
+package com.casic.xz.meterage.bean;
+
+import org.greenrobot.greendao.annotation.Entity;
+import org.greenrobot.greendao.annotation.Generated;
+import org.greenrobot.greendao.annotation.Id;
+import org.greenrobot.greendao.annotation.Unique;
+
+@Entity
+public class SearchHistoryBean {
+ @Id(autoincrement = true)
+ private Long id;//主键自增
+
+ @Unique
+ private String uuid;
+ private String keywords;//查询条件-关键字
+ private String searchType;//查询类型
+ private String userId;//用户Id
+ private String searchTime;//查询的时间
+
+ @Generated(hash = 2130561778)
+ public SearchHistoryBean(Long id, String uuid, String keywords,
+ String searchType, String userId, String searchTime) {
+ this.id = id;
+ this.uuid = uuid;
+ this.keywords = keywords;
+ this.searchType = searchType;
+ this.userId = userId;
+ this.searchTime = searchTime;
+ }
+
+ @Generated(hash = 1570282321)
+ public SearchHistoryBean() {
+ }
+
+ public Long getId() {
+ return this.id;
+ }
+
+ public void setId(Long id) {
+ this.id = id;
+ }
+
+ public String getUuid() {
+ return this.uuid;
+ }
+
+ public void setUuid(String uuid) {
+ this.uuid = uuid;
+ }
+
+ public String getKeywords() {
+ return this.keywords;
+ }
+
+ public void setKeywords(String keywords) {
+ this.keywords = keywords;
+ }
+
+ public String getSearchType() {
+ return this.searchType;
+ }
+
+ public void setSearchType(String searchType) {
+ this.searchType = searchType;
+ }
+
+ public String getUserId() {
+ return this.userId;
+ }
+
+ public void setUserId(String userId) {
+ this.userId = userId;
+ }
+
+ public String getSearchTime() {
+ return this.searchTime;
+ }
+
+ public void setSearchTime(String searchTime) {
+ this.searchTime = searchTime;
+ }
+}
diff --git a/app/src/main/java/com/casic/xz/meterage/fragment/HomePageFragment.kt b/app/src/main/java/com/casic/xz/meterage/fragment/HomePageFragment.kt
index 151f951..ae7f5e4 100644
--- a/app/src/main/java/com/casic/xz/meterage/fragment/HomePageFragment.kt
+++ b/app/src/main/java/com/casic/xz/meterage/fragment/HomePageFragment.kt
@@ -15,22 +15,20 @@
import com.casic.xz.meterage.extensions.showEmptyPage
import com.casic.xz.meterage.model.NoticeListModel
import com.casic.xz.meterage.model.RemindListModel
-import com.casic.xz.meterage.model.UserInfoModel
import com.casic.xz.meterage.utils.LoadingDialogHub
import com.casic.xz.meterage.utils.LocaleConstant
import com.casic.xz.meterage.utils.QrConfigCreator
import com.casic.xz.meterage.view.home.*
import com.casic.xz.meterage.view.notice.NoticeListActivity
+import com.casic.xz.meterage.view.search.SearchAllActivity
import com.casic.xz.meterage.vm.MeterageTrainViewModel
import com.casic.xz.meterage.vm.NoticeViewModel
-import com.casic.xz.meterage.vm.UserViewModel
import com.pengxh.kt.lite.adapter.NormalRecyclerAdapter
import com.pengxh.kt.lite.adapter.ViewHolder
import com.pengxh.kt.lite.base.KotlinBaseFragment
import com.pengxh.kt.lite.extensions.convertColor
import com.pengxh.kt.lite.extensions.navigatePageTo
import com.pengxh.kt.lite.extensions.show
-import com.pengxh.kt.lite.utils.SaveKeyValues
import com.pengxh.kt.lite.utils.WeakReferenceHandler
import com.pengxh.kt.lite.vm.LoadState
import com.pengxh.kt.lite.widget.dialog.AlertControlDialog
@@ -39,13 +37,12 @@
import kotlinx.android.synthetic.main.include_empty_view.*
import java.util.*
-class HomePageFragment : KotlinBaseFragment() {
+class HomePageFragment(private val userId: String) : KotlinBaseFragment() {
private val timer = object : Timer() {}
private lateinit var weakReferenceHandler: WeakReferenceHandler
private lateinit var meterageTrainViewModel: MeterageTrainViewModel
private lateinit var noticeViewModel: NoticeViewModel
- private lateinit var userData: UserInfoModel.DataModel
private lateinit var remindAdapter: NormalRecyclerAdapter
private var dataBeans: MutableList = ArrayList()
private var noticeBeans: MutableList = ArrayList()
@@ -170,14 +167,6 @@
true
}
- val userViewModel = ViewModelProvider(this)[UserViewModel::class.java]
- userViewModel.getUserInfo(SaveKeyValues.getValue(LocaleConstant.ACCOUNT, "") as String)
- userViewModel.userInfo.observe(this) {
- if (it.code == 200) {
- userData = it.data
- }
- }
-
meterageTrainViewModel = ViewModelProvider(this)[MeterageTrainViewModel::class.java]
meterageTrainViewModel.signInResult.observe(this) {
if (it.code == 200) {
@@ -296,10 +285,14 @@
}
override fun initEvent() {
+ searchBar.setOnClickListener {
+ requireContext().navigatePageTo()
+ }
+
scanCodeView.setOnClickListener {
qrManager.startScan(requireActivity()) { result ->
if (result.content.isDigitsOnly()) {
- meterageTrainViewModel.signIn(userData.id, result.content)
+ meterageTrainViewModel.signIn(userId, result.content)
} else {
"签到二维码错误,请重新扫描".show(requireContext())
}
diff --git a/app/src/main/java/com/casic/xz/meterage/greendao/DaoMaster.java b/app/src/main/java/com/casic/xz/meterage/greendao/DaoMaster.java
new file mode 100644
index 0000000..d714ce2
--- /dev/null
+++ b/app/src/main/java/com/casic/xz/meterage/greendao/DaoMaster.java
@@ -0,0 +1,96 @@
+package com.casic.xz.meterage.greendao;
+
+import android.content.Context;
+import android.database.sqlite.SQLiteDatabase;
+import android.database.sqlite.SQLiteDatabase.CursorFactory;
+import android.util.Log;
+
+import org.greenrobot.greendao.AbstractDaoMaster;
+import org.greenrobot.greendao.database.Database;
+import org.greenrobot.greendao.database.DatabaseOpenHelper;
+import org.greenrobot.greendao.database.StandardDatabase;
+import org.greenrobot.greendao.identityscope.IdentityScopeType;
+
+
+// THIS CODE IS GENERATED BY greenDAO, DO NOT EDIT.
+/**
+ * Master of DAO (schema version 1): knows all DAOs.
+ */
+public class DaoMaster extends AbstractDaoMaster {
+ public static final int SCHEMA_VERSION = 1;
+
+ /** Creates underlying database table using DAOs. */
+ public static void createAllTables(Database db, boolean ifNotExists) {
+ SearchHistoryBeanDao.createTable(db, ifNotExists);
+ }
+
+ /** Drops underlying database table using DAOs. */
+ public static void dropAllTables(Database db, boolean ifExists) {
+ SearchHistoryBeanDao.dropTable(db, ifExists);
+ }
+
+ /**
+ * WARNING: Drops all table on Upgrade! Use only during development.
+ * Convenience method using a {@link DevOpenHelper}.
+ */
+ public static DaoSession newDevSession(Context context, String name) {
+ Database db = new DevOpenHelper(context, name).getWritableDb();
+ DaoMaster daoMaster = new DaoMaster(db);
+ return daoMaster.newSession();
+ }
+
+ public DaoMaster(SQLiteDatabase db) {
+ this(new StandardDatabase(db));
+ }
+
+ public DaoMaster(Database db) {
+ super(db, SCHEMA_VERSION);
+ registerDaoClass(SearchHistoryBeanDao.class);
+ }
+
+ public DaoSession newSession() {
+ return new DaoSession(db, IdentityScopeType.Session, daoConfigMap);
+ }
+
+ public DaoSession newSession(IdentityScopeType type) {
+ return new DaoSession(db, type, daoConfigMap);
+ }
+
+ /**
+ * Calls {@link #createAllTables(Database, boolean)} in {@link #onCreate(Database)} -
+ */
+ public static abstract class OpenHelper extends DatabaseOpenHelper {
+ public OpenHelper(Context context, String name) {
+ super(context, name, SCHEMA_VERSION);
+ }
+
+ public OpenHelper(Context context, String name, CursorFactory factory) {
+ super(context, name, factory, SCHEMA_VERSION);
+ }
+
+ @Override
+ public void onCreate(Database db) {
+ Log.i("greenDAO", "Creating tables for schema version " + SCHEMA_VERSION);
+ createAllTables(db, false);
+ }
+ }
+
+ /** WARNING: Drops all table on Upgrade! Use only during development. */
+ public static class DevOpenHelper extends OpenHelper {
+ public DevOpenHelper(Context context, String name) {
+ super(context, name);
+ }
+
+ public DevOpenHelper(Context context, String name, CursorFactory factory) {
+ super(context, name, factory);
+ }
+
+ @Override
+ public void onUpgrade(Database db, int oldVersion, int newVersion) {
+ Log.i("greenDAO", "Upgrading schema from version " + oldVersion + " to " + newVersion + " by dropping all tables");
+ dropAllTables(db, true);
+ onCreate(db);
+ }
+ }
+
+}
diff --git a/app/src/main/java/com/casic/xz/meterage/greendao/DaoSession.java b/app/src/main/java/com/casic/xz/meterage/greendao/DaoSession.java
new file mode 100644
index 0000000..0e80024
--- /dev/null
+++ b/app/src/main/java/com/casic/xz/meterage/greendao/DaoSession.java
@@ -0,0 +1,46 @@
+package com.casic.xz.meterage.greendao;
+
+import com.casic.xz.meterage.bean.SearchHistoryBean;
+
+import org.greenrobot.greendao.AbstractDao;
+import org.greenrobot.greendao.AbstractDaoSession;
+import org.greenrobot.greendao.database.Database;
+import org.greenrobot.greendao.identityscope.IdentityScopeType;
+import org.greenrobot.greendao.internal.DaoConfig;
+
+import java.util.Map;
+
+// THIS CODE IS GENERATED BY greenDAO, DO NOT EDIT.
+
+/**
+ * {@inheritDoc}
+ *
+ * @see org.greenrobot.greendao.AbstractDaoSession
+ */
+public class DaoSession extends AbstractDaoSession {
+
+ private final DaoConfig searchHistoryBeanDaoConfig;
+
+ private final SearchHistoryBeanDao searchHistoryBeanDao;
+
+ public DaoSession(Database db, IdentityScopeType type, Map>, DaoConfig>
+ daoConfigMap) {
+ super(db);
+
+ searchHistoryBeanDaoConfig = daoConfigMap.get(SearchHistoryBeanDao.class).clone();
+ searchHistoryBeanDaoConfig.initIdentityScope(type);
+
+ searchHistoryBeanDao = new SearchHistoryBeanDao(searchHistoryBeanDaoConfig, this);
+
+ registerDao(SearchHistoryBean.class, searchHistoryBeanDao);
+ }
+
+ public void clear() {
+ searchHistoryBeanDaoConfig.clearIdentityScope();
+ }
+
+ public SearchHistoryBeanDao getSearchHistoryBeanDao() {
+ return searchHistoryBeanDao;
+ }
+
+}
diff --git a/app/src/main/java/com/casic/xz/meterage/greendao/SearchHistoryBeanDao.java b/app/src/main/java/com/casic/xz/meterage/greendao/SearchHistoryBeanDao.java
new file mode 100644
index 0000000..5923d02
--- /dev/null
+++ b/app/src/main/java/com/casic/xz/meterage/greendao/SearchHistoryBeanDao.java
@@ -0,0 +1,185 @@
+package com.casic.xz.meterage.greendao;
+
+import android.database.Cursor;
+import android.database.sqlite.SQLiteStatement;
+
+import com.casic.xz.meterage.bean.SearchHistoryBean;
+
+import org.greenrobot.greendao.AbstractDao;
+import org.greenrobot.greendao.Property;
+import org.greenrobot.greendao.database.Database;
+import org.greenrobot.greendao.database.DatabaseStatement;
+import org.greenrobot.greendao.internal.DaoConfig;
+
+// THIS CODE IS GENERATED BY greenDAO, DO NOT EDIT.
+/**
+ * DAO for table "SEARCH_HISTORY_BEAN".
+*/
+public class SearchHistoryBeanDao extends AbstractDao {
+
+ public static final String TABLENAME = "SEARCH_HISTORY_BEAN";
+
+ /**
+ * Properties of entity SearchHistoryBean.
+ * Can be used for QueryBuilder and for referencing column names.
+ */
+ public static class Properties {
+ public final static Property Id = new Property(0, Long.class, "id", true, "_id");
+ public final static Property Uuid = new Property(1, String.class, "uuid", false, "UUID");
+ public final static Property Keywords = new Property(2, String.class, "keywords", false, "KEYWORDS");
+ public final static Property SearchType = new Property(3, String.class, "searchType", false, "SEARCH_TYPE");
+ public final static Property UserId = new Property(4, String.class, "userId", false, "USER_ID");
+ public final static Property SearchTime = new Property(5, String.class, "searchTime", false, "SEARCH_TIME");
+ }
+
+
+ public SearchHistoryBeanDao(DaoConfig config) {
+ super(config);
+ }
+
+ public SearchHistoryBeanDao(DaoConfig config, DaoSession daoSession) {
+ super(config, daoSession);
+ }
+
+ /** Creates the underlying database table. */
+ public static void createTable(Database db, boolean ifNotExists) {
+ String constraint = ifNotExists? "IF NOT EXISTS ": "";
+ db.execSQL("CREATE TABLE " + constraint + "\"SEARCH_HISTORY_BEAN\" (" + //
+ "\"_id\" INTEGER PRIMARY KEY AUTOINCREMENT ," + // 0: id
+ "\"UUID\" TEXT UNIQUE ," + // 1: uuid
+ "\"KEYWORDS\" TEXT," + // 2: keywords
+ "\"SEARCH_TYPE\" TEXT," + // 3: searchType
+ "\"USER_ID\" TEXT," + // 4: userId
+ "\"SEARCH_TIME\" TEXT);"); // 5: searchTime
+ }
+
+ /** Drops the underlying database table. */
+ public static void dropTable(Database db, boolean ifExists) {
+ String sql = "DROP TABLE " + (ifExists ? "IF EXISTS " : "") + "\"SEARCH_HISTORY_BEAN\"";
+ db.execSQL(sql);
+ }
+
+ @Override
+ protected final void bindValues(DatabaseStatement stmt, SearchHistoryBean entity) {
+ stmt.clearBindings();
+
+ Long id = entity.getId();
+ if (id != null) {
+ stmt.bindLong(1, id);
+ }
+
+ String uuid = entity.getUuid();
+ if (uuid != null) {
+ stmt.bindString(2, uuid);
+ }
+
+ String keywords = entity.getKeywords();
+ if (keywords != null) {
+ stmt.bindString(3, keywords);
+ }
+
+ String searchType = entity.getSearchType();
+ if (searchType != null) {
+ stmt.bindString(4, searchType);
+ }
+
+ String userId = entity.getUserId();
+ if (userId != null) {
+ stmt.bindString(5, userId);
+ }
+
+ String searchTime = entity.getSearchTime();
+ if (searchTime != null) {
+ stmt.bindString(6, searchTime);
+ }
+ }
+
+ @Override
+ protected final void bindValues(SQLiteStatement stmt, SearchHistoryBean entity) {
+ stmt.clearBindings();
+
+ Long id = entity.getId();
+ if (id != null) {
+ stmt.bindLong(1, id);
+ }
+
+ String uuid = entity.getUuid();
+ if (uuid != null) {
+ stmt.bindString(2, uuid);
+ }
+
+ String keywords = entity.getKeywords();
+ if (keywords != null) {
+ stmt.bindString(3, keywords);
+ }
+
+ String searchType = entity.getSearchType();
+ if (searchType != null) {
+ stmt.bindString(4, searchType);
+ }
+
+ String userId = entity.getUserId();
+ if (userId != null) {
+ stmt.bindString(5, userId);
+ }
+
+ String searchTime = entity.getSearchTime();
+ if (searchTime != null) {
+ stmt.bindString(6, searchTime);
+ }
+ }
+
+ @Override
+ public Long readKey(Cursor cursor, int offset) {
+ return cursor.isNull(offset + 0) ? null : cursor.getLong(offset + 0);
+ }
+
+ @Override
+ public SearchHistoryBean readEntity(Cursor cursor, int offset) {
+ SearchHistoryBean entity = new SearchHistoryBean( //
+ cursor.isNull(offset + 0) ? null : cursor.getLong(offset + 0), // id
+ cursor.isNull(offset + 1) ? null : cursor.getString(offset + 1), // uuid
+ cursor.isNull(offset + 2) ? null : cursor.getString(offset + 2), // keywords
+ cursor.isNull(offset + 3) ? null : cursor.getString(offset + 3), // searchType
+ cursor.isNull(offset + 4) ? null : cursor.getString(offset + 4), // userId
+ cursor.isNull(offset + 5) ? null : cursor.getString(offset + 5) // searchTime
+ );
+ return entity;
+ }
+
+ @Override
+ public void readEntity(Cursor cursor, SearchHistoryBean entity, int offset) {
+ entity.setId(cursor.isNull(offset + 0) ? null : cursor.getLong(offset + 0));
+ entity.setUuid(cursor.isNull(offset + 1) ? null : cursor.getString(offset + 1));
+ entity.setKeywords(cursor.isNull(offset + 2) ? null : cursor.getString(offset + 2));
+ entity.setSearchType(cursor.isNull(offset + 3) ? null : cursor.getString(offset + 3));
+ entity.setUserId(cursor.isNull(offset + 4) ? null : cursor.getString(offset + 4));
+ entity.setSearchTime(cursor.isNull(offset + 5) ? null : cursor.getString(offset + 5));
+ }
+
+ @Override
+ protected final Long updateKeyAfterInsert(SearchHistoryBean entity, long rowId) {
+ entity.setId(rowId);
+ return rowId;
+ }
+
+ @Override
+ public Long getKey(SearchHistoryBean entity) {
+ if(entity != null) {
+ return entity.getId();
+ } else {
+ return null;
+ }
+ }
+
+ @Override
+ public boolean hasKey(SearchHistoryBean entity) {
+ return entity.getId() != null;
+ }
+
+ @Override
+ protected final boolean isEntityUpdateable() {
+ return true;
+ }
+
+}
diff --git a/app/src/main/java/com/casic/xz/meterage/utils/DataBaseManager.kt b/app/src/main/java/com/casic/xz/meterage/utils/DataBaseManager.kt
new file mode 100644
index 0000000..52fe032
--- /dev/null
+++ b/app/src/main/java/com/casic/xz/meterage/utils/DataBaseManager.kt
@@ -0,0 +1,45 @@
+package com.casic.xz.meterage.utils
+
+import com.casic.xz.meterage.base.BaseApplication
+import com.casic.xz.meterage.bean.SearchHistoryBean
+import com.casic.xz.meterage.greendao.SearchHistoryBeanDao
+import com.pengxh.kt.lite.extensions.timestampToCompleteDate
+import com.pengxh.kt.lite.utils.SaveKeyValues
+import java.util.*
+
+class DataBaseManager private constructor() {
+
+ companion object {
+ //Kotlin委托模式双重锁单例
+ val get: DataBaseManager by lazy(mode = LazyThreadSafetyMode.SYNCHRONIZED) {
+ DataBaseManager()
+ }
+ }
+
+ private val searchBeanDao by lazy { BaseApplication.get().getDaoSession().searchHistoryBeanDao }
+ private val userId by lazy { SaveKeyValues.getValue(LocaleConstant.USER_ID, "") }
+
+ fun addSearchHistory(keywords: String, searchType: String) {
+ val bean = SearchHistoryBean()
+ bean.uuid = UUID.randomUUID().toString()
+ bean.keywords = keywords
+ bean.searchType = searchType
+ bean.userId = userId.toString()
+ bean.searchTime = System.currentTimeMillis().timestampToCompleteDate()
+ searchBeanDao.insert(bean)
+ }
+
+ fun queryHistoryByType(searchType: String): MutableList {
+ return searchBeanDao.queryBuilder().where(
+ SearchHistoryBeanDao.Properties.UserId.eq(userId),
+ SearchHistoryBeanDao.Properties.SearchType.eq(searchType)
+ ).list()
+ }
+
+ fun deleteHistoryByType(searchType: String) {
+ val list = queryHistoryByType(searchType)
+ list.forEach {
+ searchBeanDao.delete(it)
+ }
+ }
+}
\ No newline at end of file
diff --git a/app/src/main/java/com/casic/xz/meterage/utils/LocaleConstant.kt b/app/src/main/java/com/casic/xz/meterage/utils/LocaleConstant.kt
index cc2848b..2ea47a0 100644
--- a/app/src/main/java/com/casic/xz/meterage/utils/LocaleConstant.kt
+++ b/app/src/main/java/com/casic/xz/meterage/utils/LocaleConstant.kt
@@ -62,4 +62,5 @@
const val File_SERVER_URL = "http://111.198.10.15:21408"
const val ACCOUNT = "account"
const val PASSWORD = "password"
+ const val USER_ID = "userId"
}
\ No newline at end of file
diff --git a/app/src/main/java/com/casic/xz/meterage/utils/SearchType.kt b/app/src/main/java/com/casic/xz/meterage/utils/SearchType.kt
new file mode 100644
index 0000000..5f5253e
--- /dev/null
+++ b/app/src/main/java/com/casic/xz/meterage/utils/SearchType.kt
@@ -0,0 +1,8 @@
+package com.casic.xz.meterage.utils
+
+object SearchType {
+ /**
+ * 搜索仪器设备
+ * */
+ const val Equipment = "0"
+}
diff --git a/app/src/main/java/com/casic/xz/meterage/view/MainActivity.kt b/app/src/main/java/com/casic/xz/meterage/view/MainActivity.kt
index 28836e0..8fb0793 100644
--- a/app/src/main/java/com/casic/xz/meterage/view/MainActivity.kt
+++ b/app/src/main/java/com/casic/xz/meterage/view/MainActivity.kt
@@ -3,15 +3,19 @@
import android.view.KeyEvent
import android.view.MenuItem
import androidx.fragment.app.Fragment
+import androidx.lifecycle.ViewModelProvider
import androidx.viewpager.widget.ViewPager
import com.casic.xz.meterage.R
import com.casic.xz.meterage.adapter.ViewPagerAdapter
import com.casic.xz.meterage.fragment.HomePageFragment
import com.casic.xz.meterage.fragment.MinePageFragment
import com.casic.xz.meterage.fragment.SamplePageFragment
+import com.casic.xz.meterage.utils.LocaleConstant
+import com.casic.xz.meterage.vm.UserViewModel
import com.gyf.immersionbar.ImmersionBar
import com.pengxh.kt.lite.base.KotlinBaseActivity
import com.pengxh.kt.lite.extensions.show
+import com.pengxh.kt.lite.utils.SaveKeyValues
import kotlinx.android.synthetic.main.activity_main.*
class MainActivity : KotlinBaseActivity() {
@@ -20,53 +24,59 @@
private var fragmentPages: ArrayList = ArrayList()
private var clickTime: Long = 0
- init {
- fragmentPages.add(HomePageFragment())
- fragmentPages.add(SamplePageFragment())
- fragmentPages.add(MinePageFragment())
- }
-
override fun initData() {
- bottomNavigation.itemIconTintList = null
- bottomNavigation.setOnNavigationItemSelectedListener { menuItem ->
- when (menuItem.itemId) {
- R.id.nav_home -> {
- mainViewPager.currentItem = 0
+ val userViewModel = ViewModelProvider(this)[UserViewModel::class.java]
+ userViewModel.getUserInfo(SaveKeyValues.getValue(LocaleConstant.ACCOUNT, "") as String)
+ userViewModel.userInfo.observe(this) {
+ if (it.code == 200) {
+ SaveKeyValues.putValue(LocaleConstant.USER_ID, it.data.id)
+
+ fragmentPages.add(HomePageFragment(it.data.id))
+ fragmentPages.add(SamplePageFragment())
+ fragmentPages.add(MinePageFragment())
+
+ bottomNavigation.itemIconTintList = null
+ bottomNavigation.setOnNavigationItemSelectedListener { menuItem ->
+ when (menuItem.itemId) {
+ R.id.nav_home -> {
+ mainViewPager.currentItem = 0
+ }
+ R.id.nav_sample -> {
+ mainViewPager.currentItem = 1
+ }
+ R.id.nav_mine -> {
+ mainViewPager.currentItem = 2
+ }
+ }
+ false
}
- R.id.nav_sample -> {
- mainViewPager.currentItem = 1
- }
- R.id.nav_mine -> {
- mainViewPager.currentItem = 2
- }
+ mainViewPager.adapter = ViewPagerAdapter(fragmentPages, supportFragmentManager)
+ mainViewPager.offscreenPageLimit = fragmentPages.size //缓存页数
+ mainViewPager.addOnPageChangeListener(object : ViewPager.OnPageChangeListener {
+ override fun onPageScrollStateChanged(state: Int) {
+
+ }
+
+ override fun onPageScrolled(
+ position: Int,
+ positionOffset: Float,
+ positionOffsetPixels: Int
+ ) {
+
+ }
+
+ override fun onPageSelected(position: Int) {
+ if (menuItem != null) {
+ menuItem!!.isChecked = false
+ } else {
+ bottomNavigation.menu.getItem(0).isChecked = false
+ }
+ menuItem = bottomNavigation.menu.getItem(position)
+ menuItem!!.isChecked = true
+ }
+ })
}
- false
}
- mainViewPager.adapter = ViewPagerAdapter(fragmentPages, supportFragmentManager)
- mainViewPager.offscreenPageLimit = fragmentPages.size //缓存页数
- mainViewPager.addOnPageChangeListener(object : ViewPager.OnPageChangeListener {
- override fun onPageScrollStateChanged(state: Int) {
-
- }
-
- override fun onPageScrolled(
- position: Int,
- positionOffset: Float,
- positionOffsetPixels: Int
- ) {
-
- }
-
- override fun onPageSelected(position: Int) {
- if (menuItem != null) {
- menuItem!!.isChecked = false
- } else {
- bottomNavigation.menu.getItem(0).isChecked = false
- }
- menuItem = bottomNavigation.menu.getItem(position)
- menuItem!!.isChecked = true
- }
- })
}
override fun initEvent() {
diff --git a/app/src/main/java/com/casic/xz/meterage/view/search/SearchAllActivity.kt b/app/src/main/java/com/casic/xz/meterage/view/search/SearchAllActivity.kt
new file mode 100644
index 0000000..ecc8fd7
--- /dev/null
+++ b/app/src/main/java/com/casic/xz/meterage/view/search/SearchAllActivity.kt
@@ -0,0 +1,40 @@
+package com.casic.xz.meterage.view.search
+
+import com.casic.xz.meterage.R
+import com.casic.xz.meterage.extensions.initLayoutImmersionBar
+import com.gyf.immersionbar.ImmersionBar
+import com.pengxh.kt.lite.base.KotlinBaseActivity
+import com.pengxh.kt.lite.extensions.navigatePageTo
+import kotlinx.android.synthetic.main.activity_search_all.*
+import kotlinx.android.synthetic.main.include_search_input_title.*
+
+class SearchAllActivity : KotlinBaseActivity() {
+
+ override fun initData() {
+
+ }
+
+ override fun initEvent() {
+ leftBackView.setOnClickListener { finish() }
+ searchTextView.setOnClickListener {
+ navigatePageTo(inputView.text.toString())
+ }
+ }
+
+ override fun initLayoutView(): Int = R.layout.activity_search_all
+
+ override fun observeRequestState() {
+
+ }
+
+ override fun setupTopBarLayout() {
+ ImmersionBar.with(this).statusBarDarkFont(true).init()
+ initLayoutImmersionBar(rootView)
+ inputView.hint = "查询样品、业务"
+ }
+
+ override fun onResume() {
+ super.onResume()
+ //TODO 流式布局显示查询记录Tag?
+ }
+}
\ No newline at end of file
diff --git a/app/src/main/java/com/casic/xz/meterage/view/search/SearchAllResultActivity.kt b/app/src/main/java/com/casic/xz/meterage/view/search/SearchAllResultActivity.kt
new file mode 100644
index 0000000..adbb570
--- /dev/null
+++ b/app/src/main/java/com/casic/xz/meterage/view/search/SearchAllResultActivity.kt
@@ -0,0 +1,34 @@
+package com.casic.xz.meterage.view.search
+
+import com.casic.xz.meterage.R
+import com.casic.xz.meterage.extensions.initLayoutImmersionBar
+import com.gyf.immersionbar.ImmersionBar
+import com.pengxh.kt.lite.base.KotlinBaseActivity
+import com.pengxh.kt.lite.utils.Constant
+import kotlinx.android.synthetic.main.activity_search_all_reasult.*
+import kotlinx.android.synthetic.main.include_search_title.*
+
+class SearchAllResultActivity : KotlinBaseActivity() {
+
+ private lateinit var param: String
+
+ override fun initData() {
+ param = intent.getStringExtra(Constant.INTENT_PARAM)!!
+ }
+
+ override fun initEvent() {
+ leftBackView.setOnClickListener { finish() }
+ }
+
+ override fun initLayoutView(): Int = R.layout.activity_search_all_reasult
+
+ override fun observeRequestState() {
+
+ }
+
+ override fun setupTopBarLayout() {
+ ImmersionBar.with(this).statusBarDarkFont(true).init()
+ initLayoutImmersionBar(rootView)
+ titleView.text = "查询结果"
+ }
+}
\ No newline at end of file
diff --git a/app/src/main/java/com/casic/xz/meterage/view/search/SearchEquipmentActivity.kt b/app/src/main/java/com/casic/xz/meterage/view/search/SearchEquipmentActivity.kt
index f5c98d6..3551790 100644
--- a/app/src/main/java/com/casic/xz/meterage/view/search/SearchEquipmentActivity.kt
+++ b/app/src/main/java/com/casic/xz/meterage/view/search/SearchEquipmentActivity.kt
@@ -1,27 +1,98 @@
package com.casic.xz.meterage.view.search
import com.casic.xz.meterage.R
+import com.casic.xz.meterage.bean.SearchHistoryBean
import com.casic.xz.meterage.extensions.initLayoutImmersionBar
+import com.casic.xz.meterage.utils.DataBaseManager
+import com.casic.xz.meterage.utils.SearchType
import com.gyf.immersionbar.ImmersionBar
+import com.pengxh.kt.lite.adapter.NormalRecyclerAdapter
+import com.pengxh.kt.lite.adapter.ViewHolder
import com.pengxh.kt.lite.base.KotlinBaseActivity
import com.pengxh.kt.lite.extensions.navigatePageTo
+import com.pengxh.kt.lite.utils.WeakReferenceHandler
+import com.pengxh.kt.lite.widget.dialog.AlertControlDialog
import kotlinx.android.synthetic.main.activity_search_equipment.*
import kotlinx.android.synthetic.main.include_search_input_title.*
+
/**
* 搜索仪器设备
* */
class SearchEquipmentActivity : KotlinBaseActivity() {
- override fun initData() {
+ private lateinit var weakReferenceHandler: WeakReferenceHandler
+ private lateinit var historyAdapter: NormalRecyclerAdapter
+ private var dataBeans: MutableList = ArrayList()
+ private var isRefresh = false
+ override fun initData() {
+ weakReferenceHandler = WeakReferenceHandler {
+ if (it.what == 2023031001) {
+ if (isRefresh) {
+ historyAdapter.notifyDataSetChanged()
+ } else {
+ historyAdapter = object :
+ NormalRecyclerAdapter(
+ R.layout.item_search_rv_l, dataBeans
+ ) {
+ override fun convertView(
+ viewHolder: ViewHolder, position: Int, item: SearchHistoryBean
+ ) {
+ viewHolder.setText(R.id.searchTagView, item.keywords)
+ }
+ }
+ historyRecyclerView.adapter = historyAdapter
+ historyAdapter.setOnItemClickedListener(object :
+ NormalRecyclerAdapter.OnItemClickedListener {
+ override fun onItemClicked(position: Int, t: SearchHistoryBean) {
+ navigatePageTo(t.keywords)
+ }
+ })
+ }
+ }
+ true
+ }
+ }
+
+ override fun onResume() {
+ super.onResume()
+ dataBeans = DataBaseManager.get.queryHistoryByType(SearchType.Equipment)
+ weakReferenceHandler.sendEmptyMessage(2023031001)
}
override fun initEvent() {
leftBackView.setOnClickListener { finish() }
searchTextView.setOnClickListener {
+ if (!inputView.text.isNullOrBlank()) {
+ DataBaseManager.get.addSearchHistory(
+ inputView.text.toString(), SearchType.Equipment
+ )
+ }
+
navigatePageTo(inputView.text.toString())
}
+
+ deleteHistoryView.setOnClickListener {
+ AlertControlDialog.Builder()
+ .setContext(this)
+ .setTitle("提示")
+ .setMessage("确定将所有搜索记录删除?")
+ .setNegativeButton("取消")
+ .setPositiveButton("确定")
+ .setOnDialogButtonClickListener(object :
+ AlertControlDialog.OnDialogButtonClickListener {
+ override fun onCancelClick() {
+
+ }
+
+ override fun onConfirmClick() {
+ DataBaseManager.get.deleteHistoryByType(SearchType.Equipment)
+ dataBeans.clear()
+ historyAdapter.notifyDataSetChanged()
+ }
+ }).build().show()
+ }
}
override fun initLayoutView(): Int = R.layout.activity_search_equipment
@@ -35,9 +106,4 @@
initLayoutImmersionBar(rootView)
inputView.hint = "查询设备名称、编号"
}
-
- override fun onResume() {
- super.onResume()
- //TODO 流式布局显示查询记录Tag?
- }
}
\ No newline at end of file
diff --git a/app/src/main/res/drawable/ic_delete.xml b/app/src/main/res/drawable/ic_delete.xml
new file mode 100644
index 0000000..1810342
--- /dev/null
+++ b/app/src/main/res/drawable/ic_delete.xml
@@ -0,0 +1,9 @@
+
+
+
diff --git a/app/src/main/res/layout/activity_search_all.xml b/app/src/main/res/layout/activity_search_all.xml
new file mode 100644
index 0000000..45694fb
--- /dev/null
+++ b/app/src/main/res/layout/activity_search_all.xml
@@ -0,0 +1,17 @@
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/app/src/main/res/layout/activity_search_all_reasult.xml b/app/src/main/res/layout/activity_search_all_reasult.xml
new file mode 100644
index 0000000..7e90433
--- /dev/null
+++ b/app/src/main/res/layout/activity_search_all_reasult.xml
@@ -0,0 +1,51 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/app/src/main/res/layout/activity_search_equipment.xml b/app/src/main/res/layout/activity_search_equipment.xml
index 45694fb..f637b70 100644
--- a/app/src/main/res/layout/activity_search_equipment.xml
+++ b/app/src/main/res/layout/activity_search_equipment.xml
@@ -1,5 +1,6 @@
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/app/src/main/res/layout/fragment_home.xml b/app/src/main/res/layout/fragment_home.xml
index 154d157..e525b93 100644
--- a/app/src/main/res/layout/fragment_home.xml
+++ b/app/src/main/res/layout/fragment_home.xml
@@ -33,12 +33,16 @@
android:layout_marginHorizontal="@dimen/dp_5"
android:src="@drawable/ic_search" />
-
+
+
diff --git a/app/src/main/java/com/casic/xz/meterage/base/BaseApplication.kt b/app/src/main/java/com/casic/xz/meterage/base/BaseApplication.kt
index 14a604d..1684c23 100644
--- a/app/src/main/java/com/casic/xz/meterage/base/BaseApplication.kt
+++ b/app/src/main/java/com/casic/xz/meterage/base/BaseApplication.kt
@@ -2,6 +2,8 @@
import android.app.Application
import android.content.Context
+import com.casic.xz.meterage.greendao.DaoMaster
+import com.casic.xz.meterage.greendao.DaoSession
import com.pengxh.kt.lite.utils.SaveKeyValues
import me.weishu.reflection.Reflection
import kotlin.properties.Delegates
@@ -12,12 +14,22 @@
private var application: BaseApplication by Delegates.notNull()
fun get() = application
+
+ private lateinit var daoSession: DaoSession
}
override fun onCreate() {
super.onCreate()
application = this
SaveKeyValues.initSharedPreferences(this)
+
+ val devOpenHelper = DaoMaster.DevOpenHelper(this, "Meterage.db", null)
+ val daoMaster = DaoMaster(devOpenHelper.writableDatabase)
+ daoSession = daoMaster.newSession()
+ }
+
+ fun getDaoSession(): DaoSession {
+ return daoSession
}
//绕过Android 11以上反射限制
diff --git a/app/src/main/java/com/casic/xz/meterage/bean/SearchHistoryBean.java b/app/src/main/java/com/casic/xz/meterage/bean/SearchHistoryBean.java
new file mode 100644
index 0000000..6a46a3a
--- /dev/null
+++ b/app/src/main/java/com/casic/xz/meterage/bean/SearchHistoryBean.java
@@ -0,0 +1,82 @@
+package com.casic.xz.meterage.bean;
+
+import org.greenrobot.greendao.annotation.Entity;
+import org.greenrobot.greendao.annotation.Generated;
+import org.greenrobot.greendao.annotation.Id;
+import org.greenrobot.greendao.annotation.Unique;
+
+@Entity
+public class SearchHistoryBean {
+ @Id(autoincrement = true)
+ private Long id;//主键自增
+
+ @Unique
+ private String uuid;
+ private String keywords;//查询条件-关键字
+ private String searchType;//查询类型
+ private String userId;//用户Id
+ private String searchTime;//查询的时间
+
+ @Generated(hash = 2130561778)
+ public SearchHistoryBean(Long id, String uuid, String keywords,
+ String searchType, String userId, String searchTime) {
+ this.id = id;
+ this.uuid = uuid;
+ this.keywords = keywords;
+ this.searchType = searchType;
+ this.userId = userId;
+ this.searchTime = searchTime;
+ }
+
+ @Generated(hash = 1570282321)
+ public SearchHistoryBean() {
+ }
+
+ public Long getId() {
+ return this.id;
+ }
+
+ public void setId(Long id) {
+ this.id = id;
+ }
+
+ public String getUuid() {
+ return this.uuid;
+ }
+
+ public void setUuid(String uuid) {
+ this.uuid = uuid;
+ }
+
+ public String getKeywords() {
+ return this.keywords;
+ }
+
+ public void setKeywords(String keywords) {
+ this.keywords = keywords;
+ }
+
+ public String getSearchType() {
+ return this.searchType;
+ }
+
+ public void setSearchType(String searchType) {
+ this.searchType = searchType;
+ }
+
+ public String getUserId() {
+ return this.userId;
+ }
+
+ public void setUserId(String userId) {
+ this.userId = userId;
+ }
+
+ public String getSearchTime() {
+ return this.searchTime;
+ }
+
+ public void setSearchTime(String searchTime) {
+ this.searchTime = searchTime;
+ }
+}
diff --git a/app/src/main/java/com/casic/xz/meterage/fragment/HomePageFragment.kt b/app/src/main/java/com/casic/xz/meterage/fragment/HomePageFragment.kt
index 151f951..ae7f5e4 100644
--- a/app/src/main/java/com/casic/xz/meterage/fragment/HomePageFragment.kt
+++ b/app/src/main/java/com/casic/xz/meterage/fragment/HomePageFragment.kt
@@ -15,22 +15,20 @@
import com.casic.xz.meterage.extensions.showEmptyPage
import com.casic.xz.meterage.model.NoticeListModel
import com.casic.xz.meterage.model.RemindListModel
-import com.casic.xz.meterage.model.UserInfoModel
import com.casic.xz.meterage.utils.LoadingDialogHub
import com.casic.xz.meterage.utils.LocaleConstant
import com.casic.xz.meterage.utils.QrConfigCreator
import com.casic.xz.meterage.view.home.*
import com.casic.xz.meterage.view.notice.NoticeListActivity
+import com.casic.xz.meterage.view.search.SearchAllActivity
import com.casic.xz.meterage.vm.MeterageTrainViewModel
import com.casic.xz.meterage.vm.NoticeViewModel
-import com.casic.xz.meterage.vm.UserViewModel
import com.pengxh.kt.lite.adapter.NormalRecyclerAdapter
import com.pengxh.kt.lite.adapter.ViewHolder
import com.pengxh.kt.lite.base.KotlinBaseFragment
import com.pengxh.kt.lite.extensions.convertColor
import com.pengxh.kt.lite.extensions.navigatePageTo
import com.pengxh.kt.lite.extensions.show
-import com.pengxh.kt.lite.utils.SaveKeyValues
import com.pengxh.kt.lite.utils.WeakReferenceHandler
import com.pengxh.kt.lite.vm.LoadState
import com.pengxh.kt.lite.widget.dialog.AlertControlDialog
@@ -39,13 +37,12 @@
import kotlinx.android.synthetic.main.include_empty_view.*
import java.util.*
-class HomePageFragment : KotlinBaseFragment() {
+class HomePageFragment(private val userId: String) : KotlinBaseFragment() {
private val timer = object : Timer() {}
private lateinit var weakReferenceHandler: WeakReferenceHandler
private lateinit var meterageTrainViewModel: MeterageTrainViewModel
private lateinit var noticeViewModel: NoticeViewModel
- private lateinit var userData: UserInfoModel.DataModel
private lateinit var remindAdapter: NormalRecyclerAdapter
private var dataBeans: MutableList = ArrayList()
private var noticeBeans: MutableList = ArrayList()
@@ -170,14 +167,6 @@
true
}
- val userViewModel = ViewModelProvider(this)[UserViewModel::class.java]
- userViewModel.getUserInfo(SaveKeyValues.getValue(LocaleConstant.ACCOUNT, "") as String)
- userViewModel.userInfo.observe(this) {
- if (it.code == 200) {
- userData = it.data
- }
- }
-
meterageTrainViewModel = ViewModelProvider(this)[MeterageTrainViewModel::class.java]
meterageTrainViewModel.signInResult.observe(this) {
if (it.code == 200) {
@@ -296,10 +285,14 @@
}
override fun initEvent() {
+ searchBar.setOnClickListener {
+ requireContext().navigatePageTo()
+ }
+
scanCodeView.setOnClickListener {
qrManager.startScan(requireActivity()) { result ->
if (result.content.isDigitsOnly()) {
- meterageTrainViewModel.signIn(userData.id, result.content)
+ meterageTrainViewModel.signIn(userId, result.content)
} else {
"签到二维码错误,请重新扫描".show(requireContext())
}
diff --git a/app/src/main/java/com/casic/xz/meterage/greendao/DaoMaster.java b/app/src/main/java/com/casic/xz/meterage/greendao/DaoMaster.java
new file mode 100644
index 0000000..d714ce2
--- /dev/null
+++ b/app/src/main/java/com/casic/xz/meterage/greendao/DaoMaster.java
@@ -0,0 +1,96 @@
+package com.casic.xz.meterage.greendao;
+
+import android.content.Context;
+import android.database.sqlite.SQLiteDatabase;
+import android.database.sqlite.SQLiteDatabase.CursorFactory;
+import android.util.Log;
+
+import org.greenrobot.greendao.AbstractDaoMaster;
+import org.greenrobot.greendao.database.Database;
+import org.greenrobot.greendao.database.DatabaseOpenHelper;
+import org.greenrobot.greendao.database.StandardDatabase;
+import org.greenrobot.greendao.identityscope.IdentityScopeType;
+
+
+// THIS CODE IS GENERATED BY greenDAO, DO NOT EDIT.
+/**
+ * Master of DAO (schema version 1): knows all DAOs.
+ */
+public class DaoMaster extends AbstractDaoMaster {
+ public static final int SCHEMA_VERSION = 1;
+
+ /** Creates underlying database table using DAOs. */
+ public static void createAllTables(Database db, boolean ifNotExists) {
+ SearchHistoryBeanDao.createTable(db, ifNotExists);
+ }
+
+ /** Drops underlying database table using DAOs. */
+ public static void dropAllTables(Database db, boolean ifExists) {
+ SearchHistoryBeanDao.dropTable(db, ifExists);
+ }
+
+ /**
+ * WARNING: Drops all table on Upgrade! Use only during development.
+ * Convenience method using a {@link DevOpenHelper}.
+ */
+ public static DaoSession newDevSession(Context context, String name) {
+ Database db = new DevOpenHelper(context, name).getWritableDb();
+ DaoMaster daoMaster = new DaoMaster(db);
+ return daoMaster.newSession();
+ }
+
+ public DaoMaster(SQLiteDatabase db) {
+ this(new StandardDatabase(db));
+ }
+
+ public DaoMaster(Database db) {
+ super(db, SCHEMA_VERSION);
+ registerDaoClass(SearchHistoryBeanDao.class);
+ }
+
+ public DaoSession newSession() {
+ return new DaoSession(db, IdentityScopeType.Session, daoConfigMap);
+ }
+
+ public DaoSession newSession(IdentityScopeType type) {
+ return new DaoSession(db, type, daoConfigMap);
+ }
+
+ /**
+ * Calls {@link #createAllTables(Database, boolean)} in {@link #onCreate(Database)} -
+ */
+ public static abstract class OpenHelper extends DatabaseOpenHelper {
+ public OpenHelper(Context context, String name) {
+ super(context, name, SCHEMA_VERSION);
+ }
+
+ public OpenHelper(Context context, String name, CursorFactory factory) {
+ super(context, name, factory, SCHEMA_VERSION);
+ }
+
+ @Override
+ public void onCreate(Database db) {
+ Log.i("greenDAO", "Creating tables for schema version " + SCHEMA_VERSION);
+ createAllTables(db, false);
+ }
+ }
+
+ /** WARNING: Drops all table on Upgrade! Use only during development. */
+ public static class DevOpenHelper extends OpenHelper {
+ public DevOpenHelper(Context context, String name) {
+ super(context, name);
+ }
+
+ public DevOpenHelper(Context context, String name, CursorFactory factory) {
+ super(context, name, factory);
+ }
+
+ @Override
+ public void onUpgrade(Database db, int oldVersion, int newVersion) {
+ Log.i("greenDAO", "Upgrading schema from version " + oldVersion + " to " + newVersion + " by dropping all tables");
+ dropAllTables(db, true);
+ onCreate(db);
+ }
+ }
+
+}
diff --git a/app/src/main/java/com/casic/xz/meterage/greendao/DaoSession.java b/app/src/main/java/com/casic/xz/meterage/greendao/DaoSession.java
new file mode 100644
index 0000000..0e80024
--- /dev/null
+++ b/app/src/main/java/com/casic/xz/meterage/greendao/DaoSession.java
@@ -0,0 +1,46 @@
+package com.casic.xz.meterage.greendao;
+
+import com.casic.xz.meterage.bean.SearchHistoryBean;
+
+import org.greenrobot.greendao.AbstractDao;
+import org.greenrobot.greendao.AbstractDaoSession;
+import org.greenrobot.greendao.database.Database;
+import org.greenrobot.greendao.identityscope.IdentityScopeType;
+import org.greenrobot.greendao.internal.DaoConfig;
+
+import java.util.Map;
+
+// THIS CODE IS GENERATED BY greenDAO, DO NOT EDIT.
+
+/**
+ * {@inheritDoc}
+ *
+ * @see org.greenrobot.greendao.AbstractDaoSession
+ */
+public class DaoSession extends AbstractDaoSession {
+
+ private final DaoConfig searchHistoryBeanDaoConfig;
+
+ private final SearchHistoryBeanDao searchHistoryBeanDao;
+
+ public DaoSession(Database db, IdentityScopeType type, Map>, DaoConfig>
+ daoConfigMap) {
+ super(db);
+
+ searchHistoryBeanDaoConfig = daoConfigMap.get(SearchHistoryBeanDao.class).clone();
+ searchHistoryBeanDaoConfig.initIdentityScope(type);
+
+ searchHistoryBeanDao = new SearchHistoryBeanDao(searchHistoryBeanDaoConfig, this);
+
+ registerDao(SearchHistoryBean.class, searchHistoryBeanDao);
+ }
+
+ public void clear() {
+ searchHistoryBeanDaoConfig.clearIdentityScope();
+ }
+
+ public SearchHistoryBeanDao getSearchHistoryBeanDao() {
+ return searchHistoryBeanDao;
+ }
+
+}
diff --git a/app/src/main/java/com/casic/xz/meterage/greendao/SearchHistoryBeanDao.java b/app/src/main/java/com/casic/xz/meterage/greendao/SearchHistoryBeanDao.java
new file mode 100644
index 0000000..5923d02
--- /dev/null
+++ b/app/src/main/java/com/casic/xz/meterage/greendao/SearchHistoryBeanDao.java
@@ -0,0 +1,185 @@
+package com.casic.xz.meterage.greendao;
+
+import android.database.Cursor;
+import android.database.sqlite.SQLiteStatement;
+
+import com.casic.xz.meterage.bean.SearchHistoryBean;
+
+import org.greenrobot.greendao.AbstractDao;
+import org.greenrobot.greendao.Property;
+import org.greenrobot.greendao.database.Database;
+import org.greenrobot.greendao.database.DatabaseStatement;
+import org.greenrobot.greendao.internal.DaoConfig;
+
+// THIS CODE IS GENERATED BY greenDAO, DO NOT EDIT.
+/**
+ * DAO for table "SEARCH_HISTORY_BEAN".
+*/
+public class SearchHistoryBeanDao extends AbstractDao {
+
+ public static final String TABLENAME = "SEARCH_HISTORY_BEAN";
+
+ /**
+ * Properties of entity SearchHistoryBean.
+ * Can be used for QueryBuilder and for referencing column names.
+ */
+ public static class Properties {
+ public final static Property Id = new Property(0, Long.class, "id", true, "_id");
+ public final static Property Uuid = new Property(1, String.class, "uuid", false, "UUID");
+ public final static Property Keywords = new Property(2, String.class, "keywords", false, "KEYWORDS");
+ public final static Property SearchType = new Property(3, String.class, "searchType", false, "SEARCH_TYPE");
+ public final static Property UserId = new Property(4, String.class, "userId", false, "USER_ID");
+ public final static Property SearchTime = new Property(5, String.class, "searchTime", false, "SEARCH_TIME");
+ }
+
+
+ public SearchHistoryBeanDao(DaoConfig config) {
+ super(config);
+ }
+
+ public SearchHistoryBeanDao(DaoConfig config, DaoSession daoSession) {
+ super(config, daoSession);
+ }
+
+ /** Creates the underlying database table. */
+ public static void createTable(Database db, boolean ifNotExists) {
+ String constraint = ifNotExists? "IF NOT EXISTS ": "";
+ db.execSQL("CREATE TABLE " + constraint + "\"SEARCH_HISTORY_BEAN\" (" + //
+ "\"_id\" INTEGER PRIMARY KEY AUTOINCREMENT ," + // 0: id
+ "\"UUID\" TEXT UNIQUE ," + // 1: uuid
+ "\"KEYWORDS\" TEXT," + // 2: keywords
+ "\"SEARCH_TYPE\" TEXT," + // 3: searchType
+ "\"USER_ID\" TEXT," + // 4: userId
+ "\"SEARCH_TIME\" TEXT);"); // 5: searchTime
+ }
+
+ /** Drops the underlying database table. */
+ public static void dropTable(Database db, boolean ifExists) {
+ String sql = "DROP TABLE " + (ifExists ? "IF EXISTS " : "") + "\"SEARCH_HISTORY_BEAN\"";
+ db.execSQL(sql);
+ }
+
+ @Override
+ protected final void bindValues(DatabaseStatement stmt, SearchHistoryBean entity) {
+ stmt.clearBindings();
+
+ Long id = entity.getId();
+ if (id != null) {
+ stmt.bindLong(1, id);
+ }
+
+ String uuid = entity.getUuid();
+ if (uuid != null) {
+ stmt.bindString(2, uuid);
+ }
+
+ String keywords = entity.getKeywords();
+ if (keywords != null) {
+ stmt.bindString(3, keywords);
+ }
+
+ String searchType = entity.getSearchType();
+ if (searchType != null) {
+ stmt.bindString(4, searchType);
+ }
+
+ String userId = entity.getUserId();
+ if (userId != null) {
+ stmt.bindString(5, userId);
+ }
+
+ String searchTime = entity.getSearchTime();
+ if (searchTime != null) {
+ stmt.bindString(6, searchTime);
+ }
+ }
+
+ @Override
+ protected final void bindValues(SQLiteStatement stmt, SearchHistoryBean entity) {
+ stmt.clearBindings();
+
+ Long id = entity.getId();
+ if (id != null) {
+ stmt.bindLong(1, id);
+ }
+
+ String uuid = entity.getUuid();
+ if (uuid != null) {
+ stmt.bindString(2, uuid);
+ }
+
+ String keywords = entity.getKeywords();
+ if (keywords != null) {
+ stmt.bindString(3, keywords);
+ }
+
+ String searchType = entity.getSearchType();
+ if (searchType != null) {
+ stmt.bindString(4, searchType);
+ }
+
+ String userId = entity.getUserId();
+ if (userId != null) {
+ stmt.bindString(5, userId);
+ }
+
+ String searchTime = entity.getSearchTime();
+ if (searchTime != null) {
+ stmt.bindString(6, searchTime);
+ }
+ }
+
+ @Override
+ public Long readKey(Cursor cursor, int offset) {
+ return cursor.isNull(offset + 0) ? null : cursor.getLong(offset + 0);
+ }
+
+ @Override
+ public SearchHistoryBean readEntity(Cursor cursor, int offset) {
+ SearchHistoryBean entity = new SearchHistoryBean( //
+ cursor.isNull(offset + 0) ? null : cursor.getLong(offset + 0), // id
+ cursor.isNull(offset + 1) ? null : cursor.getString(offset + 1), // uuid
+ cursor.isNull(offset + 2) ? null : cursor.getString(offset + 2), // keywords
+ cursor.isNull(offset + 3) ? null : cursor.getString(offset + 3), // searchType
+ cursor.isNull(offset + 4) ? null : cursor.getString(offset + 4), // userId
+ cursor.isNull(offset + 5) ? null : cursor.getString(offset + 5) // searchTime
+ );
+ return entity;
+ }
+
+ @Override
+ public void readEntity(Cursor cursor, SearchHistoryBean entity, int offset) {
+ entity.setId(cursor.isNull(offset + 0) ? null : cursor.getLong(offset + 0));
+ entity.setUuid(cursor.isNull(offset + 1) ? null : cursor.getString(offset + 1));
+ entity.setKeywords(cursor.isNull(offset + 2) ? null : cursor.getString(offset + 2));
+ entity.setSearchType(cursor.isNull(offset + 3) ? null : cursor.getString(offset + 3));
+ entity.setUserId(cursor.isNull(offset + 4) ? null : cursor.getString(offset + 4));
+ entity.setSearchTime(cursor.isNull(offset + 5) ? null : cursor.getString(offset + 5));
+ }
+
+ @Override
+ protected final Long updateKeyAfterInsert(SearchHistoryBean entity, long rowId) {
+ entity.setId(rowId);
+ return rowId;
+ }
+
+ @Override
+ public Long getKey(SearchHistoryBean entity) {
+ if(entity != null) {
+ return entity.getId();
+ } else {
+ return null;
+ }
+ }
+
+ @Override
+ public boolean hasKey(SearchHistoryBean entity) {
+ return entity.getId() != null;
+ }
+
+ @Override
+ protected final boolean isEntityUpdateable() {
+ return true;
+ }
+
+}
diff --git a/app/src/main/java/com/casic/xz/meterage/utils/DataBaseManager.kt b/app/src/main/java/com/casic/xz/meterage/utils/DataBaseManager.kt
new file mode 100644
index 0000000..52fe032
--- /dev/null
+++ b/app/src/main/java/com/casic/xz/meterage/utils/DataBaseManager.kt
@@ -0,0 +1,45 @@
+package com.casic.xz.meterage.utils
+
+import com.casic.xz.meterage.base.BaseApplication
+import com.casic.xz.meterage.bean.SearchHistoryBean
+import com.casic.xz.meterage.greendao.SearchHistoryBeanDao
+import com.pengxh.kt.lite.extensions.timestampToCompleteDate
+import com.pengxh.kt.lite.utils.SaveKeyValues
+import java.util.*
+
+class DataBaseManager private constructor() {
+
+ companion object {
+ //Kotlin委托模式双重锁单例
+ val get: DataBaseManager by lazy(mode = LazyThreadSafetyMode.SYNCHRONIZED) {
+ DataBaseManager()
+ }
+ }
+
+ private val searchBeanDao by lazy { BaseApplication.get().getDaoSession().searchHistoryBeanDao }
+ private val userId by lazy { SaveKeyValues.getValue(LocaleConstant.USER_ID, "") }
+
+ fun addSearchHistory(keywords: String, searchType: String) {
+ val bean = SearchHistoryBean()
+ bean.uuid = UUID.randomUUID().toString()
+ bean.keywords = keywords
+ bean.searchType = searchType
+ bean.userId = userId.toString()
+ bean.searchTime = System.currentTimeMillis().timestampToCompleteDate()
+ searchBeanDao.insert(bean)
+ }
+
+ fun queryHistoryByType(searchType: String): MutableList {
+ return searchBeanDao.queryBuilder().where(
+ SearchHistoryBeanDao.Properties.UserId.eq(userId),
+ SearchHistoryBeanDao.Properties.SearchType.eq(searchType)
+ ).list()
+ }
+
+ fun deleteHistoryByType(searchType: String) {
+ val list = queryHistoryByType(searchType)
+ list.forEach {
+ searchBeanDao.delete(it)
+ }
+ }
+}
\ No newline at end of file
diff --git a/app/src/main/java/com/casic/xz/meterage/utils/LocaleConstant.kt b/app/src/main/java/com/casic/xz/meterage/utils/LocaleConstant.kt
index cc2848b..2ea47a0 100644
--- a/app/src/main/java/com/casic/xz/meterage/utils/LocaleConstant.kt
+++ b/app/src/main/java/com/casic/xz/meterage/utils/LocaleConstant.kt
@@ -62,4 +62,5 @@
const val File_SERVER_URL = "http://111.198.10.15:21408"
const val ACCOUNT = "account"
const val PASSWORD = "password"
+ const val USER_ID = "userId"
}
\ No newline at end of file
diff --git a/app/src/main/java/com/casic/xz/meterage/utils/SearchType.kt b/app/src/main/java/com/casic/xz/meterage/utils/SearchType.kt
new file mode 100644
index 0000000..5f5253e
--- /dev/null
+++ b/app/src/main/java/com/casic/xz/meterage/utils/SearchType.kt
@@ -0,0 +1,8 @@
+package com.casic.xz.meterage.utils
+
+object SearchType {
+ /**
+ * 搜索仪器设备
+ * */
+ const val Equipment = "0"
+}
diff --git a/app/src/main/java/com/casic/xz/meterage/view/MainActivity.kt b/app/src/main/java/com/casic/xz/meterage/view/MainActivity.kt
index 28836e0..8fb0793 100644
--- a/app/src/main/java/com/casic/xz/meterage/view/MainActivity.kt
+++ b/app/src/main/java/com/casic/xz/meterage/view/MainActivity.kt
@@ -3,15 +3,19 @@
import android.view.KeyEvent
import android.view.MenuItem
import androidx.fragment.app.Fragment
+import androidx.lifecycle.ViewModelProvider
import androidx.viewpager.widget.ViewPager
import com.casic.xz.meterage.R
import com.casic.xz.meterage.adapter.ViewPagerAdapter
import com.casic.xz.meterage.fragment.HomePageFragment
import com.casic.xz.meterage.fragment.MinePageFragment
import com.casic.xz.meterage.fragment.SamplePageFragment
+import com.casic.xz.meterage.utils.LocaleConstant
+import com.casic.xz.meterage.vm.UserViewModel
import com.gyf.immersionbar.ImmersionBar
import com.pengxh.kt.lite.base.KotlinBaseActivity
import com.pengxh.kt.lite.extensions.show
+import com.pengxh.kt.lite.utils.SaveKeyValues
import kotlinx.android.synthetic.main.activity_main.*
class MainActivity : KotlinBaseActivity() {
@@ -20,53 +24,59 @@
private var fragmentPages: ArrayList = ArrayList()
private var clickTime: Long = 0
- init {
- fragmentPages.add(HomePageFragment())
- fragmentPages.add(SamplePageFragment())
- fragmentPages.add(MinePageFragment())
- }
-
override fun initData() {
- bottomNavigation.itemIconTintList = null
- bottomNavigation.setOnNavigationItemSelectedListener { menuItem ->
- when (menuItem.itemId) {
- R.id.nav_home -> {
- mainViewPager.currentItem = 0
+ val userViewModel = ViewModelProvider(this)[UserViewModel::class.java]
+ userViewModel.getUserInfo(SaveKeyValues.getValue(LocaleConstant.ACCOUNT, "") as String)
+ userViewModel.userInfo.observe(this) {
+ if (it.code == 200) {
+ SaveKeyValues.putValue(LocaleConstant.USER_ID, it.data.id)
+
+ fragmentPages.add(HomePageFragment(it.data.id))
+ fragmentPages.add(SamplePageFragment())
+ fragmentPages.add(MinePageFragment())
+
+ bottomNavigation.itemIconTintList = null
+ bottomNavigation.setOnNavigationItemSelectedListener { menuItem ->
+ when (menuItem.itemId) {
+ R.id.nav_home -> {
+ mainViewPager.currentItem = 0
+ }
+ R.id.nav_sample -> {
+ mainViewPager.currentItem = 1
+ }
+ R.id.nav_mine -> {
+ mainViewPager.currentItem = 2
+ }
+ }
+ false
}
- R.id.nav_sample -> {
- mainViewPager.currentItem = 1
- }
- R.id.nav_mine -> {
- mainViewPager.currentItem = 2
- }
+ mainViewPager.adapter = ViewPagerAdapter(fragmentPages, supportFragmentManager)
+ mainViewPager.offscreenPageLimit = fragmentPages.size //缓存页数
+ mainViewPager.addOnPageChangeListener(object : ViewPager.OnPageChangeListener {
+ override fun onPageScrollStateChanged(state: Int) {
+
+ }
+
+ override fun onPageScrolled(
+ position: Int,
+ positionOffset: Float,
+ positionOffsetPixels: Int
+ ) {
+
+ }
+
+ override fun onPageSelected(position: Int) {
+ if (menuItem != null) {
+ menuItem!!.isChecked = false
+ } else {
+ bottomNavigation.menu.getItem(0).isChecked = false
+ }
+ menuItem = bottomNavigation.menu.getItem(position)
+ menuItem!!.isChecked = true
+ }
+ })
}
- false
}
- mainViewPager.adapter = ViewPagerAdapter(fragmentPages, supportFragmentManager)
- mainViewPager.offscreenPageLimit = fragmentPages.size //缓存页数
- mainViewPager.addOnPageChangeListener(object : ViewPager.OnPageChangeListener {
- override fun onPageScrollStateChanged(state: Int) {
-
- }
-
- override fun onPageScrolled(
- position: Int,
- positionOffset: Float,
- positionOffsetPixels: Int
- ) {
-
- }
-
- override fun onPageSelected(position: Int) {
- if (menuItem != null) {
- menuItem!!.isChecked = false
- } else {
- bottomNavigation.menu.getItem(0).isChecked = false
- }
- menuItem = bottomNavigation.menu.getItem(position)
- menuItem!!.isChecked = true
- }
- })
}
override fun initEvent() {
diff --git a/app/src/main/java/com/casic/xz/meterage/view/search/SearchAllActivity.kt b/app/src/main/java/com/casic/xz/meterage/view/search/SearchAllActivity.kt
new file mode 100644
index 0000000..ecc8fd7
--- /dev/null
+++ b/app/src/main/java/com/casic/xz/meterage/view/search/SearchAllActivity.kt
@@ -0,0 +1,40 @@
+package com.casic.xz.meterage.view.search
+
+import com.casic.xz.meterage.R
+import com.casic.xz.meterage.extensions.initLayoutImmersionBar
+import com.gyf.immersionbar.ImmersionBar
+import com.pengxh.kt.lite.base.KotlinBaseActivity
+import com.pengxh.kt.lite.extensions.navigatePageTo
+import kotlinx.android.synthetic.main.activity_search_all.*
+import kotlinx.android.synthetic.main.include_search_input_title.*
+
+class SearchAllActivity : KotlinBaseActivity() {
+
+ override fun initData() {
+
+ }
+
+ override fun initEvent() {
+ leftBackView.setOnClickListener { finish() }
+ searchTextView.setOnClickListener {
+ navigatePageTo(inputView.text.toString())
+ }
+ }
+
+ override fun initLayoutView(): Int = R.layout.activity_search_all
+
+ override fun observeRequestState() {
+
+ }
+
+ override fun setupTopBarLayout() {
+ ImmersionBar.with(this).statusBarDarkFont(true).init()
+ initLayoutImmersionBar(rootView)
+ inputView.hint = "查询样品、业务"
+ }
+
+ override fun onResume() {
+ super.onResume()
+ //TODO 流式布局显示查询记录Tag?
+ }
+}
\ No newline at end of file
diff --git a/app/src/main/java/com/casic/xz/meterage/view/search/SearchAllResultActivity.kt b/app/src/main/java/com/casic/xz/meterage/view/search/SearchAllResultActivity.kt
new file mode 100644
index 0000000..adbb570
--- /dev/null
+++ b/app/src/main/java/com/casic/xz/meterage/view/search/SearchAllResultActivity.kt
@@ -0,0 +1,34 @@
+package com.casic.xz.meterage.view.search
+
+import com.casic.xz.meterage.R
+import com.casic.xz.meterage.extensions.initLayoutImmersionBar
+import com.gyf.immersionbar.ImmersionBar
+import com.pengxh.kt.lite.base.KotlinBaseActivity
+import com.pengxh.kt.lite.utils.Constant
+import kotlinx.android.synthetic.main.activity_search_all_reasult.*
+import kotlinx.android.synthetic.main.include_search_title.*
+
+class SearchAllResultActivity : KotlinBaseActivity() {
+
+ private lateinit var param: String
+
+ override fun initData() {
+ param = intent.getStringExtra(Constant.INTENT_PARAM)!!
+ }
+
+ override fun initEvent() {
+ leftBackView.setOnClickListener { finish() }
+ }
+
+ override fun initLayoutView(): Int = R.layout.activity_search_all_reasult
+
+ override fun observeRequestState() {
+
+ }
+
+ override fun setupTopBarLayout() {
+ ImmersionBar.with(this).statusBarDarkFont(true).init()
+ initLayoutImmersionBar(rootView)
+ titleView.text = "查询结果"
+ }
+}
\ No newline at end of file
diff --git a/app/src/main/java/com/casic/xz/meterage/view/search/SearchEquipmentActivity.kt b/app/src/main/java/com/casic/xz/meterage/view/search/SearchEquipmentActivity.kt
index f5c98d6..3551790 100644
--- a/app/src/main/java/com/casic/xz/meterage/view/search/SearchEquipmentActivity.kt
+++ b/app/src/main/java/com/casic/xz/meterage/view/search/SearchEquipmentActivity.kt
@@ -1,27 +1,98 @@
package com.casic.xz.meterage.view.search
import com.casic.xz.meterage.R
+import com.casic.xz.meterage.bean.SearchHistoryBean
import com.casic.xz.meterage.extensions.initLayoutImmersionBar
+import com.casic.xz.meterage.utils.DataBaseManager
+import com.casic.xz.meterage.utils.SearchType
import com.gyf.immersionbar.ImmersionBar
+import com.pengxh.kt.lite.adapter.NormalRecyclerAdapter
+import com.pengxh.kt.lite.adapter.ViewHolder
import com.pengxh.kt.lite.base.KotlinBaseActivity
import com.pengxh.kt.lite.extensions.navigatePageTo
+import com.pengxh.kt.lite.utils.WeakReferenceHandler
+import com.pengxh.kt.lite.widget.dialog.AlertControlDialog
import kotlinx.android.synthetic.main.activity_search_equipment.*
import kotlinx.android.synthetic.main.include_search_input_title.*
+
/**
* 搜索仪器设备
* */
class SearchEquipmentActivity : KotlinBaseActivity() {
- override fun initData() {
+ private lateinit var weakReferenceHandler: WeakReferenceHandler
+ private lateinit var historyAdapter: NormalRecyclerAdapter
+ private var dataBeans: MutableList = ArrayList()
+ private var isRefresh = false
+ override fun initData() {
+ weakReferenceHandler = WeakReferenceHandler {
+ if (it.what == 2023031001) {
+ if (isRefresh) {
+ historyAdapter.notifyDataSetChanged()
+ } else {
+ historyAdapter = object :
+ NormalRecyclerAdapter(
+ R.layout.item_search_rv_l, dataBeans
+ ) {
+ override fun convertView(
+ viewHolder: ViewHolder, position: Int, item: SearchHistoryBean
+ ) {
+ viewHolder.setText(R.id.searchTagView, item.keywords)
+ }
+ }
+ historyRecyclerView.adapter = historyAdapter
+ historyAdapter.setOnItemClickedListener(object :
+ NormalRecyclerAdapter.OnItemClickedListener {
+ override fun onItemClicked(position: Int, t: SearchHistoryBean) {
+ navigatePageTo(t.keywords)
+ }
+ })
+ }
+ }
+ true
+ }
+ }
+
+ override fun onResume() {
+ super.onResume()
+ dataBeans = DataBaseManager.get.queryHistoryByType(SearchType.Equipment)
+ weakReferenceHandler.sendEmptyMessage(2023031001)
}
override fun initEvent() {
leftBackView.setOnClickListener { finish() }
searchTextView.setOnClickListener {
+ if (!inputView.text.isNullOrBlank()) {
+ DataBaseManager.get.addSearchHistory(
+ inputView.text.toString(), SearchType.Equipment
+ )
+ }
+
navigatePageTo(inputView.text.toString())
}
+
+ deleteHistoryView.setOnClickListener {
+ AlertControlDialog.Builder()
+ .setContext(this)
+ .setTitle("提示")
+ .setMessage("确定将所有搜索记录删除?")
+ .setNegativeButton("取消")
+ .setPositiveButton("确定")
+ .setOnDialogButtonClickListener(object :
+ AlertControlDialog.OnDialogButtonClickListener {
+ override fun onCancelClick() {
+
+ }
+
+ override fun onConfirmClick() {
+ DataBaseManager.get.deleteHistoryByType(SearchType.Equipment)
+ dataBeans.clear()
+ historyAdapter.notifyDataSetChanged()
+ }
+ }).build().show()
+ }
}
override fun initLayoutView(): Int = R.layout.activity_search_equipment
@@ -35,9 +106,4 @@
initLayoutImmersionBar(rootView)
inputView.hint = "查询设备名称、编号"
}
-
- override fun onResume() {
- super.onResume()
- //TODO 流式布局显示查询记录Tag?
- }
}
\ No newline at end of file
diff --git a/app/src/main/res/drawable/ic_delete.xml b/app/src/main/res/drawable/ic_delete.xml
new file mode 100644
index 0000000..1810342
--- /dev/null
+++ b/app/src/main/res/drawable/ic_delete.xml
@@ -0,0 +1,9 @@
+
+
+
diff --git a/app/src/main/res/layout/activity_search_all.xml b/app/src/main/res/layout/activity_search_all.xml
new file mode 100644
index 0000000..45694fb
--- /dev/null
+++ b/app/src/main/res/layout/activity_search_all.xml
@@ -0,0 +1,17 @@
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/app/src/main/res/layout/activity_search_all_reasult.xml b/app/src/main/res/layout/activity_search_all_reasult.xml
new file mode 100644
index 0000000..7e90433
--- /dev/null
+++ b/app/src/main/res/layout/activity_search_all_reasult.xml
@@ -0,0 +1,51 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/app/src/main/res/layout/activity_search_equipment.xml b/app/src/main/res/layout/activity_search_equipment.xml
index 45694fb..f637b70 100644
--- a/app/src/main/res/layout/activity_search_equipment.xml
+++ b/app/src/main/res/layout/activity_search_equipment.xml
@@ -1,5 +1,6 @@
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/app/src/main/res/layout/fragment_home.xml b/app/src/main/res/layout/fragment_home.xml
index 154d157..e525b93 100644
--- a/app/src/main/res/layout/fragment_home.xml
+++ b/app/src/main/res/layout/fragment_home.xml
@@ -33,12 +33,16 @@
android:layout_marginHorizontal="@dimen/dp_5"
android:src="@drawable/ic_search" />
-
+ android:textSize="@dimen/sp_14" />
+
+
diff --git a/app/src/main/java/com/casic/xz/meterage/base/BaseApplication.kt b/app/src/main/java/com/casic/xz/meterage/base/BaseApplication.kt
index 14a604d..1684c23 100644
--- a/app/src/main/java/com/casic/xz/meterage/base/BaseApplication.kt
+++ b/app/src/main/java/com/casic/xz/meterage/base/BaseApplication.kt
@@ -2,6 +2,8 @@
import android.app.Application
import android.content.Context
+import com.casic.xz.meterage.greendao.DaoMaster
+import com.casic.xz.meterage.greendao.DaoSession
import com.pengxh.kt.lite.utils.SaveKeyValues
import me.weishu.reflection.Reflection
import kotlin.properties.Delegates
@@ -12,12 +14,22 @@
private var application: BaseApplication by Delegates.notNull()
fun get() = application
+
+ private lateinit var daoSession: DaoSession
}
override fun onCreate() {
super.onCreate()
application = this
SaveKeyValues.initSharedPreferences(this)
+
+ val devOpenHelper = DaoMaster.DevOpenHelper(this, "Meterage.db", null)
+ val daoMaster = DaoMaster(devOpenHelper.writableDatabase)
+ daoSession = daoMaster.newSession()
+ }
+
+ fun getDaoSession(): DaoSession {
+ return daoSession
}
//绕过Android 11以上反射限制
diff --git a/app/src/main/java/com/casic/xz/meterage/bean/SearchHistoryBean.java b/app/src/main/java/com/casic/xz/meterage/bean/SearchHistoryBean.java
new file mode 100644
index 0000000..6a46a3a
--- /dev/null
+++ b/app/src/main/java/com/casic/xz/meterage/bean/SearchHistoryBean.java
@@ -0,0 +1,82 @@
+package com.casic.xz.meterage.bean;
+
+import org.greenrobot.greendao.annotation.Entity;
+import org.greenrobot.greendao.annotation.Generated;
+import org.greenrobot.greendao.annotation.Id;
+import org.greenrobot.greendao.annotation.Unique;
+
+@Entity
+public class SearchHistoryBean {
+ @Id(autoincrement = true)
+ private Long id;//主键自增
+
+ @Unique
+ private String uuid;
+ private String keywords;//查询条件-关键字
+ private String searchType;//查询类型
+ private String userId;//用户Id
+ private String searchTime;//查询的时间
+
+ @Generated(hash = 2130561778)
+ public SearchHistoryBean(Long id, String uuid, String keywords,
+ String searchType, String userId, String searchTime) {
+ this.id = id;
+ this.uuid = uuid;
+ this.keywords = keywords;
+ this.searchType = searchType;
+ this.userId = userId;
+ this.searchTime = searchTime;
+ }
+
+ @Generated(hash = 1570282321)
+ public SearchHistoryBean() {
+ }
+
+ public Long getId() {
+ return this.id;
+ }
+
+ public void setId(Long id) {
+ this.id = id;
+ }
+
+ public String getUuid() {
+ return this.uuid;
+ }
+
+ public void setUuid(String uuid) {
+ this.uuid = uuid;
+ }
+
+ public String getKeywords() {
+ return this.keywords;
+ }
+
+ public void setKeywords(String keywords) {
+ this.keywords = keywords;
+ }
+
+ public String getSearchType() {
+ return this.searchType;
+ }
+
+ public void setSearchType(String searchType) {
+ this.searchType = searchType;
+ }
+
+ public String getUserId() {
+ return this.userId;
+ }
+
+ public void setUserId(String userId) {
+ this.userId = userId;
+ }
+
+ public String getSearchTime() {
+ return this.searchTime;
+ }
+
+ public void setSearchTime(String searchTime) {
+ this.searchTime = searchTime;
+ }
+}
diff --git a/app/src/main/java/com/casic/xz/meterage/fragment/HomePageFragment.kt b/app/src/main/java/com/casic/xz/meterage/fragment/HomePageFragment.kt
index 151f951..ae7f5e4 100644
--- a/app/src/main/java/com/casic/xz/meterage/fragment/HomePageFragment.kt
+++ b/app/src/main/java/com/casic/xz/meterage/fragment/HomePageFragment.kt
@@ -15,22 +15,20 @@
import com.casic.xz.meterage.extensions.showEmptyPage
import com.casic.xz.meterage.model.NoticeListModel
import com.casic.xz.meterage.model.RemindListModel
-import com.casic.xz.meterage.model.UserInfoModel
import com.casic.xz.meterage.utils.LoadingDialogHub
import com.casic.xz.meterage.utils.LocaleConstant
import com.casic.xz.meterage.utils.QrConfigCreator
import com.casic.xz.meterage.view.home.*
import com.casic.xz.meterage.view.notice.NoticeListActivity
+import com.casic.xz.meterage.view.search.SearchAllActivity
import com.casic.xz.meterage.vm.MeterageTrainViewModel
import com.casic.xz.meterage.vm.NoticeViewModel
-import com.casic.xz.meterage.vm.UserViewModel
import com.pengxh.kt.lite.adapter.NormalRecyclerAdapter
import com.pengxh.kt.lite.adapter.ViewHolder
import com.pengxh.kt.lite.base.KotlinBaseFragment
import com.pengxh.kt.lite.extensions.convertColor
import com.pengxh.kt.lite.extensions.navigatePageTo
import com.pengxh.kt.lite.extensions.show
-import com.pengxh.kt.lite.utils.SaveKeyValues
import com.pengxh.kt.lite.utils.WeakReferenceHandler
import com.pengxh.kt.lite.vm.LoadState
import com.pengxh.kt.lite.widget.dialog.AlertControlDialog
@@ -39,13 +37,12 @@
import kotlinx.android.synthetic.main.include_empty_view.*
import java.util.*
-class HomePageFragment : KotlinBaseFragment() {
+class HomePageFragment(private val userId: String) : KotlinBaseFragment() {
private val timer = object : Timer() {}
private lateinit var weakReferenceHandler: WeakReferenceHandler
private lateinit var meterageTrainViewModel: MeterageTrainViewModel
private lateinit var noticeViewModel: NoticeViewModel
- private lateinit var userData: UserInfoModel.DataModel
private lateinit var remindAdapter: NormalRecyclerAdapter
private var dataBeans: MutableList = ArrayList()
private var noticeBeans: MutableList = ArrayList()
@@ -170,14 +167,6 @@
true
}
- val userViewModel = ViewModelProvider(this)[UserViewModel::class.java]
- userViewModel.getUserInfo(SaveKeyValues.getValue(LocaleConstant.ACCOUNT, "") as String)
- userViewModel.userInfo.observe(this) {
- if (it.code == 200) {
- userData = it.data
- }
- }
-
meterageTrainViewModel = ViewModelProvider(this)[MeterageTrainViewModel::class.java]
meterageTrainViewModel.signInResult.observe(this) {
if (it.code == 200) {
@@ -296,10 +285,14 @@
}
override fun initEvent() {
+ searchBar.setOnClickListener {
+ requireContext().navigatePageTo()
+ }
+
scanCodeView.setOnClickListener {
qrManager.startScan(requireActivity()) { result ->
if (result.content.isDigitsOnly()) {
- meterageTrainViewModel.signIn(userData.id, result.content)
+ meterageTrainViewModel.signIn(userId, result.content)
} else {
"签到二维码错误,请重新扫描".show(requireContext())
}
diff --git a/app/src/main/java/com/casic/xz/meterage/greendao/DaoMaster.java b/app/src/main/java/com/casic/xz/meterage/greendao/DaoMaster.java
new file mode 100644
index 0000000..d714ce2
--- /dev/null
+++ b/app/src/main/java/com/casic/xz/meterage/greendao/DaoMaster.java
@@ -0,0 +1,96 @@
+package com.casic.xz.meterage.greendao;
+
+import android.content.Context;
+import android.database.sqlite.SQLiteDatabase;
+import android.database.sqlite.SQLiteDatabase.CursorFactory;
+import android.util.Log;
+
+import org.greenrobot.greendao.AbstractDaoMaster;
+import org.greenrobot.greendao.database.Database;
+import org.greenrobot.greendao.database.DatabaseOpenHelper;
+import org.greenrobot.greendao.database.StandardDatabase;
+import org.greenrobot.greendao.identityscope.IdentityScopeType;
+
+
+// THIS CODE IS GENERATED BY greenDAO, DO NOT EDIT.
+/**
+ * Master of DAO (schema version 1): knows all DAOs.
+ */
+public class DaoMaster extends AbstractDaoMaster {
+ public static final int SCHEMA_VERSION = 1;
+
+ /** Creates underlying database table using DAOs. */
+ public static void createAllTables(Database db, boolean ifNotExists) {
+ SearchHistoryBeanDao.createTable(db, ifNotExists);
+ }
+
+ /** Drops underlying database table using DAOs. */
+ public static void dropAllTables(Database db, boolean ifExists) {
+ SearchHistoryBeanDao.dropTable(db, ifExists);
+ }
+
+ /**
+ * WARNING: Drops all table on Upgrade! Use only during development.
+ * Convenience method using a {@link DevOpenHelper}.
+ */
+ public static DaoSession newDevSession(Context context, String name) {
+ Database db = new DevOpenHelper(context, name).getWritableDb();
+ DaoMaster daoMaster = new DaoMaster(db);
+ return daoMaster.newSession();
+ }
+
+ public DaoMaster(SQLiteDatabase db) {
+ this(new StandardDatabase(db));
+ }
+
+ public DaoMaster(Database db) {
+ super(db, SCHEMA_VERSION);
+ registerDaoClass(SearchHistoryBeanDao.class);
+ }
+
+ public DaoSession newSession() {
+ return new DaoSession(db, IdentityScopeType.Session, daoConfigMap);
+ }
+
+ public DaoSession newSession(IdentityScopeType type) {
+ return new DaoSession(db, type, daoConfigMap);
+ }
+
+ /**
+ * Calls {@link #createAllTables(Database, boolean)} in {@link #onCreate(Database)} -
+ */
+ public static abstract class OpenHelper extends DatabaseOpenHelper {
+ public OpenHelper(Context context, String name) {
+ super(context, name, SCHEMA_VERSION);
+ }
+
+ public OpenHelper(Context context, String name, CursorFactory factory) {
+ super(context, name, factory, SCHEMA_VERSION);
+ }
+
+ @Override
+ public void onCreate(Database db) {
+ Log.i("greenDAO", "Creating tables for schema version " + SCHEMA_VERSION);
+ createAllTables(db, false);
+ }
+ }
+
+ /** WARNING: Drops all table on Upgrade! Use only during development. */
+ public static class DevOpenHelper extends OpenHelper {
+ public DevOpenHelper(Context context, String name) {
+ super(context, name);
+ }
+
+ public DevOpenHelper(Context context, String name, CursorFactory factory) {
+ super(context, name, factory);
+ }
+
+ @Override
+ public void onUpgrade(Database db, int oldVersion, int newVersion) {
+ Log.i("greenDAO", "Upgrading schema from version " + oldVersion + " to " + newVersion + " by dropping all tables");
+ dropAllTables(db, true);
+ onCreate(db);
+ }
+ }
+
+}
diff --git a/app/src/main/java/com/casic/xz/meterage/greendao/DaoSession.java b/app/src/main/java/com/casic/xz/meterage/greendao/DaoSession.java
new file mode 100644
index 0000000..0e80024
--- /dev/null
+++ b/app/src/main/java/com/casic/xz/meterage/greendao/DaoSession.java
@@ -0,0 +1,46 @@
+package com.casic.xz.meterage.greendao;
+
+import com.casic.xz.meterage.bean.SearchHistoryBean;
+
+import org.greenrobot.greendao.AbstractDao;
+import org.greenrobot.greendao.AbstractDaoSession;
+import org.greenrobot.greendao.database.Database;
+import org.greenrobot.greendao.identityscope.IdentityScopeType;
+import org.greenrobot.greendao.internal.DaoConfig;
+
+import java.util.Map;
+
+// THIS CODE IS GENERATED BY greenDAO, DO NOT EDIT.
+
+/**
+ * {@inheritDoc}
+ *
+ * @see org.greenrobot.greendao.AbstractDaoSession
+ */
+public class DaoSession extends AbstractDaoSession {
+
+ private final DaoConfig searchHistoryBeanDaoConfig;
+
+ private final SearchHistoryBeanDao searchHistoryBeanDao;
+
+ public DaoSession(Database db, IdentityScopeType type, Map>, DaoConfig>
+ daoConfigMap) {
+ super(db);
+
+ searchHistoryBeanDaoConfig = daoConfigMap.get(SearchHistoryBeanDao.class).clone();
+ searchHistoryBeanDaoConfig.initIdentityScope(type);
+
+ searchHistoryBeanDao = new SearchHistoryBeanDao(searchHistoryBeanDaoConfig, this);
+
+ registerDao(SearchHistoryBean.class, searchHistoryBeanDao);
+ }
+
+ public void clear() {
+ searchHistoryBeanDaoConfig.clearIdentityScope();
+ }
+
+ public SearchHistoryBeanDao getSearchHistoryBeanDao() {
+ return searchHistoryBeanDao;
+ }
+
+}
diff --git a/app/src/main/java/com/casic/xz/meterage/greendao/SearchHistoryBeanDao.java b/app/src/main/java/com/casic/xz/meterage/greendao/SearchHistoryBeanDao.java
new file mode 100644
index 0000000..5923d02
--- /dev/null
+++ b/app/src/main/java/com/casic/xz/meterage/greendao/SearchHistoryBeanDao.java
@@ -0,0 +1,185 @@
+package com.casic.xz.meterage.greendao;
+
+import android.database.Cursor;
+import android.database.sqlite.SQLiteStatement;
+
+import com.casic.xz.meterage.bean.SearchHistoryBean;
+
+import org.greenrobot.greendao.AbstractDao;
+import org.greenrobot.greendao.Property;
+import org.greenrobot.greendao.database.Database;
+import org.greenrobot.greendao.database.DatabaseStatement;
+import org.greenrobot.greendao.internal.DaoConfig;
+
+// THIS CODE IS GENERATED BY greenDAO, DO NOT EDIT.
+/**
+ * DAO for table "SEARCH_HISTORY_BEAN".
+*/
+public class SearchHistoryBeanDao extends AbstractDao {
+
+ public static final String TABLENAME = "SEARCH_HISTORY_BEAN";
+
+ /**
+ * Properties of entity SearchHistoryBean.
+ * Can be used for QueryBuilder and for referencing column names.
+ */
+ public static class Properties {
+ public final static Property Id = new Property(0, Long.class, "id", true, "_id");
+ public final static Property Uuid = new Property(1, String.class, "uuid", false, "UUID");
+ public final static Property Keywords = new Property(2, String.class, "keywords", false, "KEYWORDS");
+ public final static Property SearchType = new Property(3, String.class, "searchType", false, "SEARCH_TYPE");
+ public final static Property UserId = new Property(4, String.class, "userId", false, "USER_ID");
+ public final static Property SearchTime = new Property(5, String.class, "searchTime", false, "SEARCH_TIME");
+ }
+
+
+ public SearchHistoryBeanDao(DaoConfig config) {
+ super(config);
+ }
+
+ public SearchHistoryBeanDao(DaoConfig config, DaoSession daoSession) {
+ super(config, daoSession);
+ }
+
+ /** Creates the underlying database table. */
+ public static void createTable(Database db, boolean ifNotExists) {
+ String constraint = ifNotExists? "IF NOT EXISTS ": "";
+ db.execSQL("CREATE TABLE " + constraint + "\"SEARCH_HISTORY_BEAN\" (" + //
+ "\"_id\" INTEGER PRIMARY KEY AUTOINCREMENT ," + // 0: id
+ "\"UUID\" TEXT UNIQUE ," + // 1: uuid
+ "\"KEYWORDS\" TEXT," + // 2: keywords
+ "\"SEARCH_TYPE\" TEXT," + // 3: searchType
+ "\"USER_ID\" TEXT," + // 4: userId
+ "\"SEARCH_TIME\" TEXT);"); // 5: searchTime
+ }
+
+ /** Drops the underlying database table. */
+ public static void dropTable(Database db, boolean ifExists) {
+ String sql = "DROP TABLE " + (ifExists ? "IF EXISTS " : "") + "\"SEARCH_HISTORY_BEAN\"";
+ db.execSQL(sql);
+ }
+
+ @Override
+ protected final void bindValues(DatabaseStatement stmt, SearchHistoryBean entity) {
+ stmt.clearBindings();
+
+ Long id = entity.getId();
+ if (id != null) {
+ stmt.bindLong(1, id);
+ }
+
+ String uuid = entity.getUuid();
+ if (uuid != null) {
+ stmt.bindString(2, uuid);
+ }
+
+ String keywords = entity.getKeywords();
+ if (keywords != null) {
+ stmt.bindString(3, keywords);
+ }
+
+ String searchType = entity.getSearchType();
+ if (searchType != null) {
+ stmt.bindString(4, searchType);
+ }
+
+ String userId = entity.getUserId();
+ if (userId != null) {
+ stmt.bindString(5, userId);
+ }
+
+ String searchTime = entity.getSearchTime();
+ if (searchTime != null) {
+ stmt.bindString(6, searchTime);
+ }
+ }
+
+ @Override
+ protected final void bindValues(SQLiteStatement stmt, SearchHistoryBean entity) {
+ stmt.clearBindings();
+
+ Long id = entity.getId();
+ if (id != null) {
+ stmt.bindLong(1, id);
+ }
+
+ String uuid = entity.getUuid();
+ if (uuid != null) {
+ stmt.bindString(2, uuid);
+ }
+
+ String keywords = entity.getKeywords();
+ if (keywords != null) {
+ stmt.bindString(3, keywords);
+ }
+
+ String searchType = entity.getSearchType();
+ if (searchType != null) {
+ stmt.bindString(4, searchType);
+ }
+
+ String userId = entity.getUserId();
+ if (userId != null) {
+ stmt.bindString(5, userId);
+ }
+
+ String searchTime = entity.getSearchTime();
+ if (searchTime != null) {
+ stmt.bindString(6, searchTime);
+ }
+ }
+
+ @Override
+ public Long readKey(Cursor cursor, int offset) {
+ return cursor.isNull(offset + 0) ? null : cursor.getLong(offset + 0);
+ }
+
+ @Override
+ public SearchHistoryBean readEntity(Cursor cursor, int offset) {
+ SearchHistoryBean entity = new SearchHistoryBean( //
+ cursor.isNull(offset + 0) ? null : cursor.getLong(offset + 0), // id
+ cursor.isNull(offset + 1) ? null : cursor.getString(offset + 1), // uuid
+ cursor.isNull(offset + 2) ? null : cursor.getString(offset + 2), // keywords
+ cursor.isNull(offset + 3) ? null : cursor.getString(offset + 3), // searchType
+ cursor.isNull(offset + 4) ? null : cursor.getString(offset + 4), // userId
+ cursor.isNull(offset + 5) ? null : cursor.getString(offset + 5) // searchTime
+ );
+ return entity;
+ }
+
+ @Override
+ public void readEntity(Cursor cursor, SearchHistoryBean entity, int offset) {
+ entity.setId(cursor.isNull(offset + 0) ? null : cursor.getLong(offset + 0));
+ entity.setUuid(cursor.isNull(offset + 1) ? null : cursor.getString(offset + 1));
+ entity.setKeywords(cursor.isNull(offset + 2) ? null : cursor.getString(offset + 2));
+ entity.setSearchType(cursor.isNull(offset + 3) ? null : cursor.getString(offset + 3));
+ entity.setUserId(cursor.isNull(offset + 4) ? null : cursor.getString(offset + 4));
+ entity.setSearchTime(cursor.isNull(offset + 5) ? null : cursor.getString(offset + 5));
+ }
+
+ @Override
+ protected final Long updateKeyAfterInsert(SearchHistoryBean entity, long rowId) {
+ entity.setId(rowId);
+ return rowId;
+ }
+
+ @Override
+ public Long getKey(SearchHistoryBean entity) {
+ if(entity != null) {
+ return entity.getId();
+ } else {
+ return null;
+ }
+ }
+
+ @Override
+ public boolean hasKey(SearchHistoryBean entity) {
+ return entity.getId() != null;
+ }
+
+ @Override
+ protected final boolean isEntityUpdateable() {
+ return true;
+ }
+
+}
diff --git a/app/src/main/java/com/casic/xz/meterage/utils/DataBaseManager.kt b/app/src/main/java/com/casic/xz/meterage/utils/DataBaseManager.kt
new file mode 100644
index 0000000..52fe032
--- /dev/null
+++ b/app/src/main/java/com/casic/xz/meterage/utils/DataBaseManager.kt
@@ -0,0 +1,45 @@
+package com.casic.xz.meterage.utils
+
+import com.casic.xz.meterage.base.BaseApplication
+import com.casic.xz.meterage.bean.SearchHistoryBean
+import com.casic.xz.meterage.greendao.SearchHistoryBeanDao
+import com.pengxh.kt.lite.extensions.timestampToCompleteDate
+import com.pengxh.kt.lite.utils.SaveKeyValues
+import java.util.*
+
+class DataBaseManager private constructor() {
+
+ companion object {
+ //Kotlin委托模式双重锁单例
+ val get: DataBaseManager by lazy(mode = LazyThreadSafetyMode.SYNCHRONIZED) {
+ DataBaseManager()
+ }
+ }
+
+ private val searchBeanDao by lazy { BaseApplication.get().getDaoSession().searchHistoryBeanDao }
+ private val userId by lazy { SaveKeyValues.getValue(LocaleConstant.USER_ID, "") }
+
+ fun addSearchHistory(keywords: String, searchType: String) {
+ val bean = SearchHistoryBean()
+ bean.uuid = UUID.randomUUID().toString()
+ bean.keywords = keywords
+ bean.searchType = searchType
+ bean.userId = userId.toString()
+ bean.searchTime = System.currentTimeMillis().timestampToCompleteDate()
+ searchBeanDao.insert(bean)
+ }
+
+ fun queryHistoryByType(searchType: String): MutableList {
+ return searchBeanDao.queryBuilder().where(
+ SearchHistoryBeanDao.Properties.UserId.eq(userId),
+ SearchHistoryBeanDao.Properties.SearchType.eq(searchType)
+ ).list()
+ }
+
+ fun deleteHistoryByType(searchType: String) {
+ val list = queryHistoryByType(searchType)
+ list.forEach {
+ searchBeanDao.delete(it)
+ }
+ }
+}
\ No newline at end of file
diff --git a/app/src/main/java/com/casic/xz/meterage/utils/LocaleConstant.kt b/app/src/main/java/com/casic/xz/meterage/utils/LocaleConstant.kt
index cc2848b..2ea47a0 100644
--- a/app/src/main/java/com/casic/xz/meterage/utils/LocaleConstant.kt
+++ b/app/src/main/java/com/casic/xz/meterage/utils/LocaleConstant.kt
@@ -62,4 +62,5 @@
const val File_SERVER_URL = "http://111.198.10.15:21408"
const val ACCOUNT = "account"
const val PASSWORD = "password"
+ const val USER_ID = "userId"
}
\ No newline at end of file
diff --git a/app/src/main/java/com/casic/xz/meterage/utils/SearchType.kt b/app/src/main/java/com/casic/xz/meterage/utils/SearchType.kt
new file mode 100644
index 0000000..5f5253e
--- /dev/null
+++ b/app/src/main/java/com/casic/xz/meterage/utils/SearchType.kt
@@ -0,0 +1,8 @@
+package com.casic.xz.meterage.utils
+
+object SearchType {
+ /**
+ * 搜索仪器设备
+ * */
+ const val Equipment = "0"
+}
diff --git a/app/src/main/java/com/casic/xz/meterage/view/MainActivity.kt b/app/src/main/java/com/casic/xz/meterage/view/MainActivity.kt
index 28836e0..8fb0793 100644
--- a/app/src/main/java/com/casic/xz/meterage/view/MainActivity.kt
+++ b/app/src/main/java/com/casic/xz/meterage/view/MainActivity.kt
@@ -3,15 +3,19 @@
import android.view.KeyEvent
import android.view.MenuItem
import androidx.fragment.app.Fragment
+import androidx.lifecycle.ViewModelProvider
import androidx.viewpager.widget.ViewPager
import com.casic.xz.meterage.R
import com.casic.xz.meterage.adapter.ViewPagerAdapter
import com.casic.xz.meterage.fragment.HomePageFragment
import com.casic.xz.meterage.fragment.MinePageFragment
import com.casic.xz.meterage.fragment.SamplePageFragment
+import com.casic.xz.meterage.utils.LocaleConstant
+import com.casic.xz.meterage.vm.UserViewModel
import com.gyf.immersionbar.ImmersionBar
import com.pengxh.kt.lite.base.KotlinBaseActivity
import com.pengxh.kt.lite.extensions.show
+import com.pengxh.kt.lite.utils.SaveKeyValues
import kotlinx.android.synthetic.main.activity_main.*
class MainActivity : KotlinBaseActivity() {
@@ -20,53 +24,59 @@
private var fragmentPages: ArrayList = ArrayList()
private var clickTime: Long = 0
- init {
- fragmentPages.add(HomePageFragment())
- fragmentPages.add(SamplePageFragment())
- fragmentPages.add(MinePageFragment())
- }
-
override fun initData() {
- bottomNavigation.itemIconTintList = null
- bottomNavigation.setOnNavigationItemSelectedListener { menuItem ->
- when (menuItem.itemId) {
- R.id.nav_home -> {
- mainViewPager.currentItem = 0
+ val userViewModel = ViewModelProvider(this)[UserViewModel::class.java]
+ userViewModel.getUserInfo(SaveKeyValues.getValue(LocaleConstant.ACCOUNT, "") as String)
+ userViewModel.userInfo.observe(this) {
+ if (it.code == 200) {
+ SaveKeyValues.putValue(LocaleConstant.USER_ID, it.data.id)
+
+ fragmentPages.add(HomePageFragment(it.data.id))
+ fragmentPages.add(SamplePageFragment())
+ fragmentPages.add(MinePageFragment())
+
+ bottomNavigation.itemIconTintList = null
+ bottomNavigation.setOnNavigationItemSelectedListener { menuItem ->
+ when (menuItem.itemId) {
+ R.id.nav_home -> {
+ mainViewPager.currentItem = 0
+ }
+ R.id.nav_sample -> {
+ mainViewPager.currentItem = 1
+ }
+ R.id.nav_mine -> {
+ mainViewPager.currentItem = 2
+ }
+ }
+ false
}
- R.id.nav_sample -> {
- mainViewPager.currentItem = 1
- }
- R.id.nav_mine -> {
- mainViewPager.currentItem = 2
- }
+ mainViewPager.adapter = ViewPagerAdapter(fragmentPages, supportFragmentManager)
+ mainViewPager.offscreenPageLimit = fragmentPages.size //缓存页数
+ mainViewPager.addOnPageChangeListener(object : ViewPager.OnPageChangeListener {
+ override fun onPageScrollStateChanged(state: Int) {
+
+ }
+
+ override fun onPageScrolled(
+ position: Int,
+ positionOffset: Float,
+ positionOffsetPixels: Int
+ ) {
+
+ }
+
+ override fun onPageSelected(position: Int) {
+ if (menuItem != null) {
+ menuItem!!.isChecked = false
+ } else {
+ bottomNavigation.menu.getItem(0).isChecked = false
+ }
+ menuItem = bottomNavigation.menu.getItem(position)
+ menuItem!!.isChecked = true
+ }
+ })
}
- false
}
- mainViewPager.adapter = ViewPagerAdapter(fragmentPages, supportFragmentManager)
- mainViewPager.offscreenPageLimit = fragmentPages.size //缓存页数
- mainViewPager.addOnPageChangeListener(object : ViewPager.OnPageChangeListener {
- override fun onPageScrollStateChanged(state: Int) {
-
- }
-
- override fun onPageScrolled(
- position: Int,
- positionOffset: Float,
- positionOffsetPixels: Int
- ) {
-
- }
-
- override fun onPageSelected(position: Int) {
- if (menuItem != null) {
- menuItem!!.isChecked = false
- } else {
- bottomNavigation.menu.getItem(0).isChecked = false
- }
- menuItem = bottomNavigation.menu.getItem(position)
- menuItem!!.isChecked = true
- }
- })
}
override fun initEvent() {
diff --git a/app/src/main/java/com/casic/xz/meterage/view/search/SearchAllActivity.kt b/app/src/main/java/com/casic/xz/meterage/view/search/SearchAllActivity.kt
new file mode 100644
index 0000000..ecc8fd7
--- /dev/null
+++ b/app/src/main/java/com/casic/xz/meterage/view/search/SearchAllActivity.kt
@@ -0,0 +1,40 @@
+package com.casic.xz.meterage.view.search
+
+import com.casic.xz.meterage.R
+import com.casic.xz.meterage.extensions.initLayoutImmersionBar
+import com.gyf.immersionbar.ImmersionBar
+import com.pengxh.kt.lite.base.KotlinBaseActivity
+import com.pengxh.kt.lite.extensions.navigatePageTo
+import kotlinx.android.synthetic.main.activity_search_all.*
+import kotlinx.android.synthetic.main.include_search_input_title.*
+
+class SearchAllActivity : KotlinBaseActivity() {
+
+ override fun initData() {
+
+ }
+
+ override fun initEvent() {
+ leftBackView.setOnClickListener { finish() }
+ searchTextView.setOnClickListener {
+ navigatePageTo(inputView.text.toString())
+ }
+ }
+
+ override fun initLayoutView(): Int = R.layout.activity_search_all
+
+ override fun observeRequestState() {
+
+ }
+
+ override fun setupTopBarLayout() {
+ ImmersionBar.with(this).statusBarDarkFont(true).init()
+ initLayoutImmersionBar(rootView)
+ inputView.hint = "查询样品、业务"
+ }
+
+ override fun onResume() {
+ super.onResume()
+ //TODO 流式布局显示查询记录Tag?
+ }
+}
\ No newline at end of file
diff --git a/app/src/main/java/com/casic/xz/meterage/view/search/SearchAllResultActivity.kt b/app/src/main/java/com/casic/xz/meterage/view/search/SearchAllResultActivity.kt
new file mode 100644
index 0000000..adbb570
--- /dev/null
+++ b/app/src/main/java/com/casic/xz/meterage/view/search/SearchAllResultActivity.kt
@@ -0,0 +1,34 @@
+package com.casic.xz.meterage.view.search
+
+import com.casic.xz.meterage.R
+import com.casic.xz.meterage.extensions.initLayoutImmersionBar
+import com.gyf.immersionbar.ImmersionBar
+import com.pengxh.kt.lite.base.KotlinBaseActivity
+import com.pengxh.kt.lite.utils.Constant
+import kotlinx.android.synthetic.main.activity_search_all_reasult.*
+import kotlinx.android.synthetic.main.include_search_title.*
+
+class SearchAllResultActivity : KotlinBaseActivity() {
+
+ private lateinit var param: String
+
+ override fun initData() {
+ param = intent.getStringExtra(Constant.INTENT_PARAM)!!
+ }
+
+ override fun initEvent() {
+ leftBackView.setOnClickListener { finish() }
+ }
+
+ override fun initLayoutView(): Int = R.layout.activity_search_all_reasult
+
+ override fun observeRequestState() {
+
+ }
+
+ override fun setupTopBarLayout() {
+ ImmersionBar.with(this).statusBarDarkFont(true).init()
+ initLayoutImmersionBar(rootView)
+ titleView.text = "查询结果"
+ }
+}
\ No newline at end of file
diff --git a/app/src/main/java/com/casic/xz/meterage/view/search/SearchEquipmentActivity.kt b/app/src/main/java/com/casic/xz/meterage/view/search/SearchEquipmentActivity.kt
index f5c98d6..3551790 100644
--- a/app/src/main/java/com/casic/xz/meterage/view/search/SearchEquipmentActivity.kt
+++ b/app/src/main/java/com/casic/xz/meterage/view/search/SearchEquipmentActivity.kt
@@ -1,27 +1,98 @@
package com.casic.xz.meterage.view.search
import com.casic.xz.meterage.R
+import com.casic.xz.meterage.bean.SearchHistoryBean
import com.casic.xz.meterage.extensions.initLayoutImmersionBar
+import com.casic.xz.meterage.utils.DataBaseManager
+import com.casic.xz.meterage.utils.SearchType
import com.gyf.immersionbar.ImmersionBar
+import com.pengxh.kt.lite.adapter.NormalRecyclerAdapter
+import com.pengxh.kt.lite.adapter.ViewHolder
import com.pengxh.kt.lite.base.KotlinBaseActivity
import com.pengxh.kt.lite.extensions.navigatePageTo
+import com.pengxh.kt.lite.utils.WeakReferenceHandler
+import com.pengxh.kt.lite.widget.dialog.AlertControlDialog
import kotlinx.android.synthetic.main.activity_search_equipment.*
import kotlinx.android.synthetic.main.include_search_input_title.*
+
/**
* 搜索仪器设备
* */
class SearchEquipmentActivity : KotlinBaseActivity() {
- override fun initData() {
+ private lateinit var weakReferenceHandler: WeakReferenceHandler
+ private lateinit var historyAdapter: NormalRecyclerAdapter
+ private var dataBeans: MutableList = ArrayList()
+ private var isRefresh = false
+ override fun initData() {
+ weakReferenceHandler = WeakReferenceHandler {
+ if (it.what == 2023031001) {
+ if (isRefresh) {
+ historyAdapter.notifyDataSetChanged()
+ } else {
+ historyAdapter = object :
+ NormalRecyclerAdapter(
+ R.layout.item_search_rv_l, dataBeans
+ ) {
+ override fun convertView(
+ viewHolder: ViewHolder, position: Int, item: SearchHistoryBean
+ ) {
+ viewHolder.setText(R.id.searchTagView, item.keywords)
+ }
+ }
+ historyRecyclerView.adapter = historyAdapter
+ historyAdapter.setOnItemClickedListener(object :
+ NormalRecyclerAdapter.OnItemClickedListener {
+ override fun onItemClicked(position: Int, t: SearchHistoryBean) {
+ navigatePageTo(t.keywords)
+ }
+ })
+ }
+ }
+ true
+ }
+ }
+
+ override fun onResume() {
+ super.onResume()
+ dataBeans = DataBaseManager.get.queryHistoryByType(SearchType.Equipment)
+ weakReferenceHandler.sendEmptyMessage(2023031001)
}
override fun initEvent() {
leftBackView.setOnClickListener { finish() }
searchTextView.setOnClickListener {
+ if (!inputView.text.isNullOrBlank()) {
+ DataBaseManager.get.addSearchHistory(
+ inputView.text.toString(), SearchType.Equipment
+ )
+ }
+
navigatePageTo(inputView.text.toString())
}
+
+ deleteHistoryView.setOnClickListener {
+ AlertControlDialog.Builder()
+ .setContext(this)
+ .setTitle("提示")
+ .setMessage("确定将所有搜索记录删除?")
+ .setNegativeButton("取消")
+ .setPositiveButton("确定")
+ .setOnDialogButtonClickListener(object :
+ AlertControlDialog.OnDialogButtonClickListener {
+ override fun onCancelClick() {
+
+ }
+
+ override fun onConfirmClick() {
+ DataBaseManager.get.deleteHistoryByType(SearchType.Equipment)
+ dataBeans.clear()
+ historyAdapter.notifyDataSetChanged()
+ }
+ }).build().show()
+ }
}
override fun initLayoutView(): Int = R.layout.activity_search_equipment
@@ -35,9 +106,4 @@
initLayoutImmersionBar(rootView)
inputView.hint = "查询设备名称、编号"
}
-
- override fun onResume() {
- super.onResume()
- //TODO 流式布局显示查询记录Tag?
- }
}
\ No newline at end of file
diff --git a/app/src/main/res/drawable/ic_delete.xml b/app/src/main/res/drawable/ic_delete.xml
new file mode 100644
index 0000000..1810342
--- /dev/null
+++ b/app/src/main/res/drawable/ic_delete.xml
@@ -0,0 +1,9 @@
+
+
+
diff --git a/app/src/main/res/layout/activity_search_all.xml b/app/src/main/res/layout/activity_search_all.xml
new file mode 100644
index 0000000..45694fb
--- /dev/null
+++ b/app/src/main/res/layout/activity_search_all.xml
@@ -0,0 +1,17 @@
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/app/src/main/res/layout/activity_search_all_reasult.xml b/app/src/main/res/layout/activity_search_all_reasult.xml
new file mode 100644
index 0000000..7e90433
--- /dev/null
+++ b/app/src/main/res/layout/activity_search_all_reasult.xml
@@ -0,0 +1,51 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/app/src/main/res/layout/activity_search_equipment.xml b/app/src/main/res/layout/activity_search_equipment.xml
index 45694fb..f637b70 100644
--- a/app/src/main/res/layout/activity_search_equipment.xml
+++ b/app/src/main/res/layout/activity_search_equipment.xml
@@ -1,5 +1,6 @@
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/app/src/main/res/layout/fragment_home.xml b/app/src/main/res/layout/fragment_home.xml
index 154d157..e525b93 100644
--- a/app/src/main/res/layout/fragment_home.xml
+++ b/app/src/main/res/layout/fragment_home.xml
@@ -33,12 +33,16 @@
android:layout_marginHorizontal="@dimen/dp_5"
android:src="@drawable/ic_search" />
-
+ android:textSize="@dimen/sp_14" />
+
diff --git a/app/build.gradle b/app/build.gradle
index 298f687..e142ec1 100644
--- a/app/build.gradle
+++ b/app/build.gradle
@@ -3,6 +3,7 @@
apply plugin: 'com.android.application'
apply plugin: 'kotlin-android'
apply plugin: 'kotlin-android-extensions'
+apply plugin: 'org.greenrobot.greendao'
android {
signingConfigs {
@@ -57,6 +58,12 @@
outputFileName = "XZJL_" + getBuildDate() + "_Beta.apk"
}
}
+
+ greendao {
+ schemaVersion 1//数据库版本号
+ targetGenDir 'src/main/java'//设置DaoMaster、DaoSession、Dao目录
+ daoPackage 'com.casic.xz.meterage.greendao'//设置DaoMaster、DaoSession、Dao包名
+ }
}
static def getBuildDate() {
@@ -67,7 +74,7 @@
dependencies {
//基础依赖库
implementation 'com.github.AndroidCoderPeng:Kotlin-lite-lib:1.0.4'
- implementation 'androidx.appcompat:appcompat:1.5.1'
+ implementation 'androidx.appcompat:appcompat:1.6.1'
implementation 'androidx.core:core-ktx:1.9.0'
//Google官方授权框架
implementation 'pub.devrel:easypermissions:3.0.0'
@@ -113,4 +120,6 @@
implementation 'com.github.tiann:FreeReflection:3.1.0'
//单项/数字、二三级联动、日期/时间等滚轮选择器
implementation 'com.github.gzu-liyujiang.AndroidPicker:WheelPicker:4.1.8'
+ //数据库框架
+ implementation 'org.greenrobot:greendao:3.3.0'
}
\ No newline at end of file
diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml
index 972eff9..5b6f9b2 100644
--- a/app/src/main/AndroidManifest.xml
+++ b/app/src/main/AndroidManifest.xml
@@ -69,6 +69,8 @@
+
+
diff --git a/app/src/main/java/com/casic/xz/meterage/base/BaseApplication.kt b/app/src/main/java/com/casic/xz/meterage/base/BaseApplication.kt
index 14a604d..1684c23 100644
--- a/app/src/main/java/com/casic/xz/meterage/base/BaseApplication.kt
+++ b/app/src/main/java/com/casic/xz/meterage/base/BaseApplication.kt
@@ -2,6 +2,8 @@
import android.app.Application
import android.content.Context
+import com.casic.xz.meterage.greendao.DaoMaster
+import com.casic.xz.meterage.greendao.DaoSession
import com.pengxh.kt.lite.utils.SaveKeyValues
import me.weishu.reflection.Reflection
import kotlin.properties.Delegates
@@ -12,12 +14,22 @@
private var application: BaseApplication by Delegates.notNull()
fun get() = application
+
+ private lateinit var daoSession: DaoSession
}
override fun onCreate() {
super.onCreate()
application = this
SaveKeyValues.initSharedPreferences(this)
+
+ val devOpenHelper = DaoMaster.DevOpenHelper(this, "Meterage.db", null)
+ val daoMaster = DaoMaster(devOpenHelper.writableDatabase)
+ daoSession = daoMaster.newSession()
+ }
+
+ fun getDaoSession(): DaoSession {
+ return daoSession
}
//绕过Android 11以上反射限制
diff --git a/app/src/main/java/com/casic/xz/meterage/bean/SearchHistoryBean.java b/app/src/main/java/com/casic/xz/meterage/bean/SearchHistoryBean.java
new file mode 100644
index 0000000..6a46a3a
--- /dev/null
+++ b/app/src/main/java/com/casic/xz/meterage/bean/SearchHistoryBean.java
@@ -0,0 +1,82 @@
+package com.casic.xz.meterage.bean;
+
+import org.greenrobot.greendao.annotation.Entity;
+import org.greenrobot.greendao.annotation.Generated;
+import org.greenrobot.greendao.annotation.Id;
+import org.greenrobot.greendao.annotation.Unique;
+
+@Entity
+public class SearchHistoryBean {
+ @Id(autoincrement = true)
+ private Long id;//主键自增
+
+ @Unique
+ private String uuid;
+ private String keywords;//查询条件-关键字
+ private String searchType;//查询类型
+ private String userId;//用户Id
+ private String searchTime;//查询的时间
+
+ @Generated(hash = 2130561778)
+ public SearchHistoryBean(Long id, String uuid, String keywords,
+ String searchType, String userId, String searchTime) {
+ this.id = id;
+ this.uuid = uuid;
+ this.keywords = keywords;
+ this.searchType = searchType;
+ this.userId = userId;
+ this.searchTime = searchTime;
+ }
+
+ @Generated(hash = 1570282321)
+ public SearchHistoryBean() {
+ }
+
+ public Long getId() {
+ return this.id;
+ }
+
+ public void setId(Long id) {
+ this.id = id;
+ }
+
+ public String getUuid() {
+ return this.uuid;
+ }
+
+ public void setUuid(String uuid) {
+ this.uuid = uuid;
+ }
+
+ public String getKeywords() {
+ return this.keywords;
+ }
+
+ public void setKeywords(String keywords) {
+ this.keywords = keywords;
+ }
+
+ public String getSearchType() {
+ return this.searchType;
+ }
+
+ public void setSearchType(String searchType) {
+ this.searchType = searchType;
+ }
+
+ public String getUserId() {
+ return this.userId;
+ }
+
+ public void setUserId(String userId) {
+ this.userId = userId;
+ }
+
+ public String getSearchTime() {
+ return this.searchTime;
+ }
+
+ public void setSearchTime(String searchTime) {
+ this.searchTime = searchTime;
+ }
+}
diff --git a/app/src/main/java/com/casic/xz/meterage/fragment/HomePageFragment.kt b/app/src/main/java/com/casic/xz/meterage/fragment/HomePageFragment.kt
index 151f951..ae7f5e4 100644
--- a/app/src/main/java/com/casic/xz/meterage/fragment/HomePageFragment.kt
+++ b/app/src/main/java/com/casic/xz/meterage/fragment/HomePageFragment.kt
@@ -15,22 +15,20 @@
import com.casic.xz.meterage.extensions.showEmptyPage
import com.casic.xz.meterage.model.NoticeListModel
import com.casic.xz.meterage.model.RemindListModel
-import com.casic.xz.meterage.model.UserInfoModel
import com.casic.xz.meterage.utils.LoadingDialogHub
import com.casic.xz.meterage.utils.LocaleConstant
import com.casic.xz.meterage.utils.QrConfigCreator
import com.casic.xz.meterage.view.home.*
import com.casic.xz.meterage.view.notice.NoticeListActivity
+import com.casic.xz.meterage.view.search.SearchAllActivity
import com.casic.xz.meterage.vm.MeterageTrainViewModel
import com.casic.xz.meterage.vm.NoticeViewModel
-import com.casic.xz.meterage.vm.UserViewModel
import com.pengxh.kt.lite.adapter.NormalRecyclerAdapter
import com.pengxh.kt.lite.adapter.ViewHolder
import com.pengxh.kt.lite.base.KotlinBaseFragment
import com.pengxh.kt.lite.extensions.convertColor
import com.pengxh.kt.lite.extensions.navigatePageTo
import com.pengxh.kt.lite.extensions.show
-import com.pengxh.kt.lite.utils.SaveKeyValues
import com.pengxh.kt.lite.utils.WeakReferenceHandler
import com.pengxh.kt.lite.vm.LoadState
import com.pengxh.kt.lite.widget.dialog.AlertControlDialog
@@ -39,13 +37,12 @@
import kotlinx.android.synthetic.main.include_empty_view.*
import java.util.*
-class HomePageFragment : KotlinBaseFragment() {
+class HomePageFragment(private val userId: String) : KotlinBaseFragment() {
private val timer = object : Timer() {}
private lateinit var weakReferenceHandler: WeakReferenceHandler
private lateinit var meterageTrainViewModel: MeterageTrainViewModel
private lateinit var noticeViewModel: NoticeViewModel
- private lateinit var userData: UserInfoModel.DataModel
private lateinit var remindAdapter: NormalRecyclerAdapter
private var dataBeans: MutableList = ArrayList()
private var noticeBeans: MutableList = ArrayList()
@@ -170,14 +167,6 @@
true
}
- val userViewModel = ViewModelProvider(this)[UserViewModel::class.java]
- userViewModel.getUserInfo(SaveKeyValues.getValue(LocaleConstant.ACCOUNT, "") as String)
- userViewModel.userInfo.observe(this) {
- if (it.code == 200) {
- userData = it.data
- }
- }
-
meterageTrainViewModel = ViewModelProvider(this)[MeterageTrainViewModel::class.java]
meterageTrainViewModel.signInResult.observe(this) {
if (it.code == 200) {
@@ -296,10 +285,14 @@
}
override fun initEvent() {
+ searchBar.setOnClickListener {
+ requireContext().navigatePageTo()
+ }
+
scanCodeView.setOnClickListener {
qrManager.startScan(requireActivity()) { result ->
if (result.content.isDigitsOnly()) {
- meterageTrainViewModel.signIn(userData.id, result.content)
+ meterageTrainViewModel.signIn(userId, result.content)
} else {
"签到二维码错误,请重新扫描".show(requireContext())
}
diff --git a/app/src/main/java/com/casic/xz/meterage/greendao/DaoMaster.java b/app/src/main/java/com/casic/xz/meterage/greendao/DaoMaster.java
new file mode 100644
index 0000000..d714ce2
--- /dev/null
+++ b/app/src/main/java/com/casic/xz/meterage/greendao/DaoMaster.java
@@ -0,0 +1,96 @@
+package com.casic.xz.meterage.greendao;
+
+import android.content.Context;
+import android.database.sqlite.SQLiteDatabase;
+import android.database.sqlite.SQLiteDatabase.CursorFactory;
+import android.util.Log;
+
+import org.greenrobot.greendao.AbstractDaoMaster;
+import org.greenrobot.greendao.database.Database;
+import org.greenrobot.greendao.database.DatabaseOpenHelper;
+import org.greenrobot.greendao.database.StandardDatabase;
+import org.greenrobot.greendao.identityscope.IdentityScopeType;
+
+
+// THIS CODE IS GENERATED BY greenDAO, DO NOT EDIT.
+/**
+ * Master of DAO (schema version 1): knows all DAOs.
+ */
+public class DaoMaster extends AbstractDaoMaster {
+ public static final int SCHEMA_VERSION = 1;
+
+ /** Creates underlying database table using DAOs. */
+ public static void createAllTables(Database db, boolean ifNotExists) {
+ SearchHistoryBeanDao.createTable(db, ifNotExists);
+ }
+
+ /** Drops underlying database table using DAOs. */
+ public static void dropAllTables(Database db, boolean ifExists) {
+ SearchHistoryBeanDao.dropTable(db, ifExists);
+ }
+
+ /**
+ * WARNING: Drops all table on Upgrade! Use only during development.
+ * Convenience method using a {@link DevOpenHelper}.
+ */
+ public static DaoSession newDevSession(Context context, String name) {
+ Database db = new DevOpenHelper(context, name).getWritableDb();
+ DaoMaster daoMaster = new DaoMaster(db);
+ return daoMaster.newSession();
+ }
+
+ public DaoMaster(SQLiteDatabase db) {
+ this(new StandardDatabase(db));
+ }
+
+ public DaoMaster(Database db) {
+ super(db, SCHEMA_VERSION);
+ registerDaoClass(SearchHistoryBeanDao.class);
+ }
+
+ public DaoSession newSession() {
+ return new DaoSession(db, IdentityScopeType.Session, daoConfigMap);
+ }
+
+ public DaoSession newSession(IdentityScopeType type) {
+ return new DaoSession(db, type, daoConfigMap);
+ }
+
+ /**
+ * Calls {@link #createAllTables(Database, boolean)} in {@link #onCreate(Database)} -
+ */
+ public static abstract class OpenHelper extends DatabaseOpenHelper {
+ public OpenHelper(Context context, String name) {
+ super(context, name, SCHEMA_VERSION);
+ }
+
+ public OpenHelper(Context context, String name, CursorFactory factory) {
+ super(context, name, factory, SCHEMA_VERSION);
+ }
+
+ @Override
+ public void onCreate(Database db) {
+ Log.i("greenDAO", "Creating tables for schema version " + SCHEMA_VERSION);
+ createAllTables(db, false);
+ }
+ }
+
+ /** WARNING: Drops all table on Upgrade! Use only during development. */
+ public static class DevOpenHelper extends OpenHelper {
+ public DevOpenHelper(Context context, String name) {
+ super(context, name);
+ }
+
+ public DevOpenHelper(Context context, String name, CursorFactory factory) {
+ super(context, name, factory);
+ }
+
+ @Override
+ public void onUpgrade(Database db, int oldVersion, int newVersion) {
+ Log.i("greenDAO", "Upgrading schema from version " + oldVersion + " to " + newVersion + " by dropping all tables");
+ dropAllTables(db, true);
+ onCreate(db);
+ }
+ }
+
+}
diff --git a/app/src/main/java/com/casic/xz/meterage/greendao/DaoSession.java b/app/src/main/java/com/casic/xz/meterage/greendao/DaoSession.java
new file mode 100644
index 0000000..0e80024
--- /dev/null
+++ b/app/src/main/java/com/casic/xz/meterage/greendao/DaoSession.java
@@ -0,0 +1,46 @@
+package com.casic.xz.meterage.greendao;
+
+import com.casic.xz.meterage.bean.SearchHistoryBean;
+
+import org.greenrobot.greendao.AbstractDao;
+import org.greenrobot.greendao.AbstractDaoSession;
+import org.greenrobot.greendao.database.Database;
+import org.greenrobot.greendao.identityscope.IdentityScopeType;
+import org.greenrobot.greendao.internal.DaoConfig;
+
+import java.util.Map;
+
+// THIS CODE IS GENERATED BY greenDAO, DO NOT EDIT.
+
+/**
+ * {@inheritDoc}
+ *
+ * @see org.greenrobot.greendao.AbstractDaoSession
+ */
+public class DaoSession extends AbstractDaoSession {
+
+ private final DaoConfig searchHistoryBeanDaoConfig;
+
+ private final SearchHistoryBeanDao searchHistoryBeanDao;
+
+ public DaoSession(Database db, IdentityScopeType type, Map>, DaoConfig>
+ daoConfigMap) {
+ super(db);
+
+ searchHistoryBeanDaoConfig = daoConfigMap.get(SearchHistoryBeanDao.class).clone();
+ searchHistoryBeanDaoConfig.initIdentityScope(type);
+
+ searchHistoryBeanDao = new SearchHistoryBeanDao(searchHistoryBeanDaoConfig, this);
+
+ registerDao(SearchHistoryBean.class, searchHistoryBeanDao);
+ }
+
+ public void clear() {
+ searchHistoryBeanDaoConfig.clearIdentityScope();
+ }
+
+ public SearchHistoryBeanDao getSearchHistoryBeanDao() {
+ return searchHistoryBeanDao;
+ }
+
+}
diff --git a/app/src/main/java/com/casic/xz/meterage/greendao/SearchHistoryBeanDao.java b/app/src/main/java/com/casic/xz/meterage/greendao/SearchHistoryBeanDao.java
new file mode 100644
index 0000000..5923d02
--- /dev/null
+++ b/app/src/main/java/com/casic/xz/meterage/greendao/SearchHistoryBeanDao.java
@@ -0,0 +1,185 @@
+package com.casic.xz.meterage.greendao;
+
+import android.database.Cursor;
+import android.database.sqlite.SQLiteStatement;
+
+import com.casic.xz.meterage.bean.SearchHistoryBean;
+
+import org.greenrobot.greendao.AbstractDao;
+import org.greenrobot.greendao.Property;
+import org.greenrobot.greendao.database.Database;
+import org.greenrobot.greendao.database.DatabaseStatement;
+import org.greenrobot.greendao.internal.DaoConfig;
+
+// THIS CODE IS GENERATED BY greenDAO, DO NOT EDIT.
+/**
+ * DAO for table "SEARCH_HISTORY_BEAN".
+*/
+public class SearchHistoryBeanDao extends AbstractDao {
+
+ public static final String TABLENAME = "SEARCH_HISTORY_BEAN";
+
+ /**
+ * Properties of entity SearchHistoryBean.
+ * Can be used for QueryBuilder and for referencing column names.
+ */
+ public static class Properties {
+ public final static Property Id = new Property(0, Long.class, "id", true, "_id");
+ public final static Property Uuid = new Property(1, String.class, "uuid", false, "UUID");
+ public final static Property Keywords = new Property(2, String.class, "keywords", false, "KEYWORDS");
+ public final static Property SearchType = new Property(3, String.class, "searchType", false, "SEARCH_TYPE");
+ public final static Property UserId = new Property(4, String.class, "userId", false, "USER_ID");
+ public final static Property SearchTime = new Property(5, String.class, "searchTime", false, "SEARCH_TIME");
+ }
+
+
+ public SearchHistoryBeanDao(DaoConfig config) {
+ super(config);
+ }
+
+ public SearchHistoryBeanDao(DaoConfig config, DaoSession daoSession) {
+ super(config, daoSession);
+ }
+
+ /** Creates the underlying database table. */
+ public static void createTable(Database db, boolean ifNotExists) {
+ String constraint = ifNotExists? "IF NOT EXISTS ": "";
+ db.execSQL("CREATE TABLE " + constraint + "\"SEARCH_HISTORY_BEAN\" (" + //
+ "\"_id\" INTEGER PRIMARY KEY AUTOINCREMENT ," + // 0: id
+ "\"UUID\" TEXT UNIQUE ," + // 1: uuid
+ "\"KEYWORDS\" TEXT," + // 2: keywords
+ "\"SEARCH_TYPE\" TEXT," + // 3: searchType
+ "\"USER_ID\" TEXT," + // 4: userId
+ "\"SEARCH_TIME\" TEXT);"); // 5: searchTime
+ }
+
+ /** Drops the underlying database table. */
+ public static void dropTable(Database db, boolean ifExists) {
+ String sql = "DROP TABLE " + (ifExists ? "IF EXISTS " : "") + "\"SEARCH_HISTORY_BEAN\"";
+ db.execSQL(sql);
+ }
+
+ @Override
+ protected final void bindValues(DatabaseStatement stmt, SearchHistoryBean entity) {
+ stmt.clearBindings();
+
+ Long id = entity.getId();
+ if (id != null) {
+ stmt.bindLong(1, id);
+ }
+
+ String uuid = entity.getUuid();
+ if (uuid != null) {
+ stmt.bindString(2, uuid);
+ }
+
+ String keywords = entity.getKeywords();
+ if (keywords != null) {
+ stmt.bindString(3, keywords);
+ }
+
+ String searchType = entity.getSearchType();
+ if (searchType != null) {
+ stmt.bindString(4, searchType);
+ }
+
+ String userId = entity.getUserId();
+ if (userId != null) {
+ stmt.bindString(5, userId);
+ }
+
+ String searchTime = entity.getSearchTime();
+ if (searchTime != null) {
+ stmt.bindString(6, searchTime);
+ }
+ }
+
+ @Override
+ protected final void bindValues(SQLiteStatement stmt, SearchHistoryBean entity) {
+ stmt.clearBindings();
+
+ Long id = entity.getId();
+ if (id != null) {
+ stmt.bindLong(1, id);
+ }
+
+ String uuid = entity.getUuid();
+ if (uuid != null) {
+ stmt.bindString(2, uuid);
+ }
+
+ String keywords = entity.getKeywords();
+ if (keywords != null) {
+ stmt.bindString(3, keywords);
+ }
+
+ String searchType = entity.getSearchType();
+ if (searchType != null) {
+ stmt.bindString(4, searchType);
+ }
+
+ String userId = entity.getUserId();
+ if (userId != null) {
+ stmt.bindString(5, userId);
+ }
+
+ String searchTime = entity.getSearchTime();
+ if (searchTime != null) {
+ stmt.bindString(6, searchTime);
+ }
+ }
+
+ @Override
+ public Long readKey(Cursor cursor, int offset) {
+ return cursor.isNull(offset + 0) ? null : cursor.getLong(offset + 0);
+ }
+
+ @Override
+ public SearchHistoryBean readEntity(Cursor cursor, int offset) {
+ SearchHistoryBean entity = new SearchHistoryBean( //
+ cursor.isNull(offset + 0) ? null : cursor.getLong(offset + 0), // id
+ cursor.isNull(offset + 1) ? null : cursor.getString(offset + 1), // uuid
+ cursor.isNull(offset + 2) ? null : cursor.getString(offset + 2), // keywords
+ cursor.isNull(offset + 3) ? null : cursor.getString(offset + 3), // searchType
+ cursor.isNull(offset + 4) ? null : cursor.getString(offset + 4), // userId
+ cursor.isNull(offset + 5) ? null : cursor.getString(offset + 5) // searchTime
+ );
+ return entity;
+ }
+
+ @Override
+ public void readEntity(Cursor cursor, SearchHistoryBean entity, int offset) {
+ entity.setId(cursor.isNull(offset + 0) ? null : cursor.getLong(offset + 0));
+ entity.setUuid(cursor.isNull(offset + 1) ? null : cursor.getString(offset + 1));
+ entity.setKeywords(cursor.isNull(offset + 2) ? null : cursor.getString(offset + 2));
+ entity.setSearchType(cursor.isNull(offset + 3) ? null : cursor.getString(offset + 3));
+ entity.setUserId(cursor.isNull(offset + 4) ? null : cursor.getString(offset + 4));
+ entity.setSearchTime(cursor.isNull(offset + 5) ? null : cursor.getString(offset + 5));
+ }
+
+ @Override
+ protected final Long updateKeyAfterInsert(SearchHistoryBean entity, long rowId) {
+ entity.setId(rowId);
+ return rowId;
+ }
+
+ @Override
+ public Long getKey(SearchHistoryBean entity) {
+ if(entity != null) {
+ return entity.getId();
+ } else {
+ return null;
+ }
+ }
+
+ @Override
+ public boolean hasKey(SearchHistoryBean entity) {
+ return entity.getId() != null;
+ }
+
+ @Override
+ protected final boolean isEntityUpdateable() {
+ return true;
+ }
+
+}
diff --git a/app/src/main/java/com/casic/xz/meterage/utils/DataBaseManager.kt b/app/src/main/java/com/casic/xz/meterage/utils/DataBaseManager.kt
new file mode 100644
index 0000000..52fe032
--- /dev/null
+++ b/app/src/main/java/com/casic/xz/meterage/utils/DataBaseManager.kt
@@ -0,0 +1,45 @@
+package com.casic.xz.meterage.utils
+
+import com.casic.xz.meterage.base.BaseApplication
+import com.casic.xz.meterage.bean.SearchHistoryBean
+import com.casic.xz.meterage.greendao.SearchHistoryBeanDao
+import com.pengxh.kt.lite.extensions.timestampToCompleteDate
+import com.pengxh.kt.lite.utils.SaveKeyValues
+import java.util.*
+
+class DataBaseManager private constructor() {
+
+ companion object {
+ //Kotlin委托模式双重锁单例
+ val get: DataBaseManager by lazy(mode = LazyThreadSafetyMode.SYNCHRONIZED) {
+ DataBaseManager()
+ }
+ }
+
+ private val searchBeanDao by lazy { BaseApplication.get().getDaoSession().searchHistoryBeanDao }
+ private val userId by lazy { SaveKeyValues.getValue(LocaleConstant.USER_ID, "") }
+
+ fun addSearchHistory(keywords: String, searchType: String) {
+ val bean = SearchHistoryBean()
+ bean.uuid = UUID.randomUUID().toString()
+ bean.keywords = keywords
+ bean.searchType = searchType
+ bean.userId = userId.toString()
+ bean.searchTime = System.currentTimeMillis().timestampToCompleteDate()
+ searchBeanDao.insert(bean)
+ }
+
+ fun queryHistoryByType(searchType: String): MutableList {
+ return searchBeanDao.queryBuilder().where(
+ SearchHistoryBeanDao.Properties.UserId.eq(userId),
+ SearchHistoryBeanDao.Properties.SearchType.eq(searchType)
+ ).list()
+ }
+
+ fun deleteHistoryByType(searchType: String) {
+ val list = queryHistoryByType(searchType)
+ list.forEach {
+ searchBeanDao.delete(it)
+ }
+ }
+}
\ No newline at end of file
diff --git a/app/src/main/java/com/casic/xz/meterage/utils/LocaleConstant.kt b/app/src/main/java/com/casic/xz/meterage/utils/LocaleConstant.kt
index cc2848b..2ea47a0 100644
--- a/app/src/main/java/com/casic/xz/meterage/utils/LocaleConstant.kt
+++ b/app/src/main/java/com/casic/xz/meterage/utils/LocaleConstant.kt
@@ -62,4 +62,5 @@
const val File_SERVER_URL = "http://111.198.10.15:21408"
const val ACCOUNT = "account"
const val PASSWORD = "password"
+ const val USER_ID = "userId"
}
\ No newline at end of file
diff --git a/app/src/main/java/com/casic/xz/meterage/utils/SearchType.kt b/app/src/main/java/com/casic/xz/meterage/utils/SearchType.kt
new file mode 100644
index 0000000..5f5253e
--- /dev/null
+++ b/app/src/main/java/com/casic/xz/meterage/utils/SearchType.kt
@@ -0,0 +1,8 @@
+package com.casic.xz.meterage.utils
+
+object SearchType {
+ /**
+ * 搜索仪器设备
+ * */
+ const val Equipment = "0"
+}
diff --git a/app/src/main/java/com/casic/xz/meterage/view/MainActivity.kt b/app/src/main/java/com/casic/xz/meterage/view/MainActivity.kt
index 28836e0..8fb0793 100644
--- a/app/src/main/java/com/casic/xz/meterage/view/MainActivity.kt
+++ b/app/src/main/java/com/casic/xz/meterage/view/MainActivity.kt
@@ -3,15 +3,19 @@
import android.view.KeyEvent
import android.view.MenuItem
import androidx.fragment.app.Fragment
+import androidx.lifecycle.ViewModelProvider
import androidx.viewpager.widget.ViewPager
import com.casic.xz.meterage.R
import com.casic.xz.meterage.adapter.ViewPagerAdapter
import com.casic.xz.meterage.fragment.HomePageFragment
import com.casic.xz.meterage.fragment.MinePageFragment
import com.casic.xz.meterage.fragment.SamplePageFragment
+import com.casic.xz.meterage.utils.LocaleConstant
+import com.casic.xz.meterage.vm.UserViewModel
import com.gyf.immersionbar.ImmersionBar
import com.pengxh.kt.lite.base.KotlinBaseActivity
import com.pengxh.kt.lite.extensions.show
+import com.pengxh.kt.lite.utils.SaveKeyValues
import kotlinx.android.synthetic.main.activity_main.*
class MainActivity : KotlinBaseActivity() {
@@ -20,53 +24,59 @@
private var fragmentPages: ArrayList = ArrayList()
private var clickTime: Long = 0
- init {
- fragmentPages.add(HomePageFragment())
- fragmentPages.add(SamplePageFragment())
- fragmentPages.add(MinePageFragment())
- }
-
override fun initData() {
- bottomNavigation.itemIconTintList = null
- bottomNavigation.setOnNavigationItemSelectedListener { menuItem ->
- when (menuItem.itemId) {
- R.id.nav_home -> {
- mainViewPager.currentItem = 0
+ val userViewModel = ViewModelProvider(this)[UserViewModel::class.java]
+ userViewModel.getUserInfo(SaveKeyValues.getValue(LocaleConstant.ACCOUNT, "") as String)
+ userViewModel.userInfo.observe(this) {
+ if (it.code == 200) {
+ SaveKeyValues.putValue(LocaleConstant.USER_ID, it.data.id)
+
+ fragmentPages.add(HomePageFragment(it.data.id))
+ fragmentPages.add(SamplePageFragment())
+ fragmentPages.add(MinePageFragment())
+
+ bottomNavigation.itemIconTintList = null
+ bottomNavigation.setOnNavigationItemSelectedListener { menuItem ->
+ when (menuItem.itemId) {
+ R.id.nav_home -> {
+ mainViewPager.currentItem = 0
+ }
+ R.id.nav_sample -> {
+ mainViewPager.currentItem = 1
+ }
+ R.id.nav_mine -> {
+ mainViewPager.currentItem = 2
+ }
+ }
+ false
}
- R.id.nav_sample -> {
- mainViewPager.currentItem = 1
- }
- R.id.nav_mine -> {
- mainViewPager.currentItem = 2
- }
+ mainViewPager.adapter = ViewPagerAdapter(fragmentPages, supportFragmentManager)
+ mainViewPager.offscreenPageLimit = fragmentPages.size //缓存页数
+ mainViewPager.addOnPageChangeListener(object : ViewPager.OnPageChangeListener {
+ override fun onPageScrollStateChanged(state: Int) {
+
+ }
+
+ override fun onPageScrolled(
+ position: Int,
+ positionOffset: Float,
+ positionOffsetPixels: Int
+ ) {
+
+ }
+
+ override fun onPageSelected(position: Int) {
+ if (menuItem != null) {
+ menuItem!!.isChecked = false
+ } else {
+ bottomNavigation.menu.getItem(0).isChecked = false
+ }
+ menuItem = bottomNavigation.menu.getItem(position)
+ menuItem!!.isChecked = true
+ }
+ })
}
- false
}
- mainViewPager.adapter = ViewPagerAdapter(fragmentPages, supportFragmentManager)
- mainViewPager.offscreenPageLimit = fragmentPages.size //缓存页数
- mainViewPager.addOnPageChangeListener(object : ViewPager.OnPageChangeListener {
- override fun onPageScrollStateChanged(state: Int) {
-
- }
-
- override fun onPageScrolled(
- position: Int,
- positionOffset: Float,
- positionOffsetPixels: Int
- ) {
-
- }
-
- override fun onPageSelected(position: Int) {
- if (menuItem != null) {
- menuItem!!.isChecked = false
- } else {
- bottomNavigation.menu.getItem(0).isChecked = false
- }
- menuItem = bottomNavigation.menu.getItem(position)
- menuItem!!.isChecked = true
- }
- })
}
override fun initEvent() {
diff --git a/app/src/main/java/com/casic/xz/meterage/view/search/SearchAllActivity.kt b/app/src/main/java/com/casic/xz/meterage/view/search/SearchAllActivity.kt
new file mode 100644
index 0000000..ecc8fd7
--- /dev/null
+++ b/app/src/main/java/com/casic/xz/meterage/view/search/SearchAllActivity.kt
@@ -0,0 +1,40 @@
+package com.casic.xz.meterage.view.search
+
+import com.casic.xz.meterage.R
+import com.casic.xz.meterage.extensions.initLayoutImmersionBar
+import com.gyf.immersionbar.ImmersionBar
+import com.pengxh.kt.lite.base.KotlinBaseActivity
+import com.pengxh.kt.lite.extensions.navigatePageTo
+import kotlinx.android.synthetic.main.activity_search_all.*
+import kotlinx.android.synthetic.main.include_search_input_title.*
+
+class SearchAllActivity : KotlinBaseActivity() {
+
+ override fun initData() {
+
+ }
+
+ override fun initEvent() {
+ leftBackView.setOnClickListener { finish() }
+ searchTextView.setOnClickListener {
+ navigatePageTo(inputView.text.toString())
+ }
+ }
+
+ override fun initLayoutView(): Int = R.layout.activity_search_all
+
+ override fun observeRequestState() {
+
+ }
+
+ override fun setupTopBarLayout() {
+ ImmersionBar.with(this).statusBarDarkFont(true).init()
+ initLayoutImmersionBar(rootView)
+ inputView.hint = "查询样品、业务"
+ }
+
+ override fun onResume() {
+ super.onResume()
+ //TODO 流式布局显示查询记录Tag?
+ }
+}
\ No newline at end of file
diff --git a/app/src/main/java/com/casic/xz/meterage/view/search/SearchAllResultActivity.kt b/app/src/main/java/com/casic/xz/meterage/view/search/SearchAllResultActivity.kt
new file mode 100644
index 0000000..adbb570
--- /dev/null
+++ b/app/src/main/java/com/casic/xz/meterage/view/search/SearchAllResultActivity.kt
@@ -0,0 +1,34 @@
+package com.casic.xz.meterage.view.search
+
+import com.casic.xz.meterage.R
+import com.casic.xz.meterage.extensions.initLayoutImmersionBar
+import com.gyf.immersionbar.ImmersionBar
+import com.pengxh.kt.lite.base.KotlinBaseActivity
+import com.pengxh.kt.lite.utils.Constant
+import kotlinx.android.synthetic.main.activity_search_all_reasult.*
+import kotlinx.android.synthetic.main.include_search_title.*
+
+class SearchAllResultActivity : KotlinBaseActivity() {
+
+ private lateinit var param: String
+
+ override fun initData() {
+ param = intent.getStringExtra(Constant.INTENT_PARAM)!!
+ }
+
+ override fun initEvent() {
+ leftBackView.setOnClickListener { finish() }
+ }
+
+ override fun initLayoutView(): Int = R.layout.activity_search_all_reasult
+
+ override fun observeRequestState() {
+
+ }
+
+ override fun setupTopBarLayout() {
+ ImmersionBar.with(this).statusBarDarkFont(true).init()
+ initLayoutImmersionBar(rootView)
+ titleView.text = "查询结果"
+ }
+}
\ No newline at end of file
diff --git a/app/src/main/java/com/casic/xz/meterage/view/search/SearchEquipmentActivity.kt b/app/src/main/java/com/casic/xz/meterage/view/search/SearchEquipmentActivity.kt
index f5c98d6..3551790 100644
--- a/app/src/main/java/com/casic/xz/meterage/view/search/SearchEquipmentActivity.kt
+++ b/app/src/main/java/com/casic/xz/meterage/view/search/SearchEquipmentActivity.kt
@@ -1,27 +1,98 @@
package com.casic.xz.meterage.view.search
import com.casic.xz.meterage.R
+import com.casic.xz.meterage.bean.SearchHistoryBean
import com.casic.xz.meterage.extensions.initLayoutImmersionBar
+import com.casic.xz.meterage.utils.DataBaseManager
+import com.casic.xz.meterage.utils.SearchType
import com.gyf.immersionbar.ImmersionBar
+import com.pengxh.kt.lite.adapter.NormalRecyclerAdapter
+import com.pengxh.kt.lite.adapter.ViewHolder
import com.pengxh.kt.lite.base.KotlinBaseActivity
import com.pengxh.kt.lite.extensions.navigatePageTo
+import com.pengxh.kt.lite.utils.WeakReferenceHandler
+import com.pengxh.kt.lite.widget.dialog.AlertControlDialog
import kotlinx.android.synthetic.main.activity_search_equipment.*
import kotlinx.android.synthetic.main.include_search_input_title.*
+
/**
* 搜索仪器设备
* */
class SearchEquipmentActivity : KotlinBaseActivity() {
- override fun initData() {
+ private lateinit var weakReferenceHandler: WeakReferenceHandler
+ private lateinit var historyAdapter: NormalRecyclerAdapter
+ private var dataBeans: MutableList = ArrayList()
+ private var isRefresh = false
+ override fun initData() {
+ weakReferenceHandler = WeakReferenceHandler {
+ if (it.what == 2023031001) {
+ if (isRefresh) {
+ historyAdapter.notifyDataSetChanged()
+ } else {
+ historyAdapter = object :
+ NormalRecyclerAdapter(
+ R.layout.item_search_rv_l, dataBeans
+ ) {
+ override fun convertView(
+ viewHolder: ViewHolder, position: Int, item: SearchHistoryBean
+ ) {
+ viewHolder.setText(R.id.searchTagView, item.keywords)
+ }
+ }
+ historyRecyclerView.adapter = historyAdapter
+ historyAdapter.setOnItemClickedListener(object :
+ NormalRecyclerAdapter.OnItemClickedListener {
+ override fun onItemClicked(position: Int, t: SearchHistoryBean) {
+ navigatePageTo(t.keywords)
+ }
+ })
+ }
+ }
+ true
+ }
+ }
+
+ override fun onResume() {
+ super.onResume()
+ dataBeans = DataBaseManager.get.queryHistoryByType(SearchType.Equipment)
+ weakReferenceHandler.sendEmptyMessage(2023031001)
}
override fun initEvent() {
leftBackView.setOnClickListener { finish() }
searchTextView.setOnClickListener {
+ if (!inputView.text.isNullOrBlank()) {
+ DataBaseManager.get.addSearchHistory(
+ inputView.text.toString(), SearchType.Equipment
+ )
+ }
+
navigatePageTo(inputView.text.toString())
}
+
+ deleteHistoryView.setOnClickListener {
+ AlertControlDialog.Builder()
+ .setContext(this)
+ .setTitle("提示")
+ .setMessage("确定将所有搜索记录删除?")
+ .setNegativeButton("取消")
+ .setPositiveButton("确定")
+ .setOnDialogButtonClickListener(object :
+ AlertControlDialog.OnDialogButtonClickListener {
+ override fun onCancelClick() {
+
+ }
+
+ override fun onConfirmClick() {
+ DataBaseManager.get.deleteHistoryByType(SearchType.Equipment)
+ dataBeans.clear()
+ historyAdapter.notifyDataSetChanged()
+ }
+ }).build().show()
+ }
}
override fun initLayoutView(): Int = R.layout.activity_search_equipment
@@ -35,9 +106,4 @@
initLayoutImmersionBar(rootView)
inputView.hint = "查询设备名称、编号"
}
-
- override fun onResume() {
- super.onResume()
- //TODO 流式布局显示查询记录Tag?
- }
}
\ No newline at end of file
diff --git a/app/src/main/res/drawable/ic_delete.xml b/app/src/main/res/drawable/ic_delete.xml
new file mode 100644
index 0000000..1810342
--- /dev/null
+++ b/app/src/main/res/drawable/ic_delete.xml
@@ -0,0 +1,9 @@
+
+
+
diff --git a/app/src/main/res/layout/activity_search_all.xml b/app/src/main/res/layout/activity_search_all.xml
new file mode 100644
index 0000000..45694fb
--- /dev/null
+++ b/app/src/main/res/layout/activity_search_all.xml
@@ -0,0 +1,17 @@
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/app/src/main/res/layout/activity_search_all_reasult.xml b/app/src/main/res/layout/activity_search_all_reasult.xml
new file mode 100644
index 0000000..7e90433
--- /dev/null
+++ b/app/src/main/res/layout/activity_search_all_reasult.xml
@@ -0,0 +1,51 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/app/src/main/res/layout/activity_search_equipment.xml b/app/src/main/res/layout/activity_search_equipment.xml
index 45694fb..f637b70 100644
--- a/app/src/main/res/layout/activity_search_equipment.xml
+++ b/app/src/main/res/layout/activity_search_equipment.xml
@@ -1,5 +1,6 @@
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/app/src/main/res/layout/fragment_home.xml b/app/src/main/res/layout/fragment_home.xml
index 154d157..e525b93 100644
--- a/app/src/main/res/layout/fragment_home.xml
+++ b/app/src/main/res/layout/fragment_home.xml
@@ -33,12 +33,16 @@
android:layout_marginHorizontal="@dimen/dp_5"
android:src="@drawable/ic_search" />
-
+ android:textSize="@dimen/sp_14" />
+
diff --git a/build.gradle b/build.gradle
index 07470ae..c16163f 100644
--- a/build.gradle
+++ b/build.gradle
@@ -9,6 +9,7 @@
dependencies {
classpath 'com.android.tools.build:gradle:3.6.4'
classpath "org.jetbrains.kotlin:kotlin-gradle-plugin:$kotlin_version"
+ classpath 'org.greenrobot:greendao-gradle-plugin:3.3.0'
// NOTE: Do not place your application dependencies here; they belong
// in the individual module build.gradle files