diff --git a/.gitignore b/.gitignore
index 10cfdbf..bf2a5c6 100644
--- a/.gitignore
+++ b/.gitignore
@@ -4,7 +4,8 @@
/.idea
.DS_Store
/build
+/app/build
/captures
.externalNativeBuild
.cxx
-local.properties
+local.properties
\ No newline at end of file
diff --git a/.gitignore b/.gitignore
index 10cfdbf..bf2a5c6 100644
--- a/.gitignore
+++ b/.gitignore
@@ -4,7 +4,8 @@
/.idea
.DS_Store
/build
+/app/build
/captures
.externalNativeBuild
.cxx
-local.properties
+local.properties
\ No newline at end of file
diff --git a/app/build.gradle b/app/build.gradle
index a4cd2ca..6b81499 100644
--- a/app/build.gradle
+++ b/app/build.gradle
@@ -98,4 +98,6 @@
implementation 'org.greenrobot:greendao:3.3.0'
//桌面角标
implementation "me.leolin:ShortcutBadger:1.1.22@aar"
+ //图表
+ implementation 'com.github.PhilJay:MPAndroidChart:v3.1.0'
}
\ No newline at end of file
diff --git a/.gitignore b/.gitignore
index 10cfdbf..bf2a5c6 100644
--- a/.gitignore
+++ b/.gitignore
@@ -4,7 +4,8 @@
/.idea
.DS_Store
/build
+/app/build
/captures
.externalNativeBuild
.cxx
-local.properties
+local.properties
\ No newline at end of file
diff --git a/app/build.gradle b/app/build.gradle
index a4cd2ca..6b81499 100644
--- a/app/build.gradle
+++ b/app/build.gradle
@@ -98,4 +98,6 @@
implementation 'org.greenrobot:greendao:3.3.0'
//桌面角标
implementation "me.leolin:ShortcutBadger:1.1.22@aar"
+ //图表
+ implementation 'com.github.PhilJay:MPAndroidChart:v3.1.0'
}
\ No newline at end of file
diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml
index a83c28a..1df917d 100644
--- a/app/src/main/AndroidManifest.xml
+++ b/app/src/main/AndroidManifest.xml
@@ -33,6 +33,9 @@
+
+
+
diff --git a/.gitignore b/.gitignore
index 10cfdbf..bf2a5c6 100644
--- a/.gitignore
+++ b/.gitignore
@@ -4,7 +4,8 @@
/.idea
.DS_Store
/build
+/app/build
/captures
.externalNativeBuild
.cxx
-local.properties
+local.properties
\ No newline at end of file
diff --git a/app/build.gradle b/app/build.gradle
index a4cd2ca..6b81499 100644
--- a/app/build.gradle
+++ b/app/build.gradle
@@ -98,4 +98,6 @@
implementation 'org.greenrobot:greendao:3.3.0'
//桌面角标
implementation "me.leolin:ShortcutBadger:1.1.22@aar"
+ //图表
+ implementation 'com.github.PhilJay:MPAndroidChart:v3.1.0'
}
\ No newline at end of file
diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml
index a83c28a..1df917d 100644
--- a/app/src/main/AndroidManifest.xml
+++ b/app/src/main/AndroidManifest.xml
@@ -33,6 +33,9 @@
+
+
+
diff --git a/app/src/main/java/com/casic/smart/town/sanxi/extensions/String.kt b/app/src/main/java/com/casic/smart/town/sanxi/extensions/String.kt
new file mode 100644
index 0000000..d730417
--- /dev/null
+++ b/app/src/main/java/com/casic/smart/town/sanxi/extensions/String.kt
@@ -0,0 +1,20 @@
+package com.casic.smart.town.sanxi.extensions
+
+import com.casic.smart.town.sanxi.model.ErrorMessageModel
+import com.google.gson.Gson
+import com.google.gson.reflect.TypeToken
+import org.json.JSONObject
+
+fun String.separateResponseCode(): Int {
+ if (this.isBlank()) {
+ return 404
+ }
+ return JSONObject(this).getInt("code")
+}
+
+fun String.toErrorMessage(): String {
+ val errorModel = Gson().fromJson(
+ this, object : TypeToken() {}.type
+ )
+ return errorModel.message.toString()
+}
\ No newline at end of file
diff --git a/.gitignore b/.gitignore
index 10cfdbf..bf2a5c6 100644
--- a/.gitignore
+++ b/.gitignore
@@ -4,7 +4,8 @@
/.idea
.DS_Store
/build
+/app/build
/captures
.externalNativeBuild
.cxx
-local.properties
+local.properties
\ No newline at end of file
diff --git a/app/build.gradle b/app/build.gradle
index a4cd2ca..6b81499 100644
--- a/app/build.gradle
+++ b/app/build.gradle
@@ -98,4 +98,6 @@
implementation 'org.greenrobot:greendao:3.3.0'
//桌面角标
implementation "me.leolin:ShortcutBadger:1.1.22@aar"
+ //图表
+ implementation 'com.github.PhilJay:MPAndroidChart:v3.1.0'
}
\ No newline at end of file
diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml
index a83c28a..1df917d 100644
--- a/app/src/main/AndroidManifest.xml
+++ b/app/src/main/AndroidManifest.xml
@@ -33,6 +33,9 @@
+
+
+
diff --git a/app/src/main/java/com/casic/smart/town/sanxi/extensions/String.kt b/app/src/main/java/com/casic/smart/town/sanxi/extensions/String.kt
new file mode 100644
index 0000000..d730417
--- /dev/null
+++ b/app/src/main/java/com/casic/smart/town/sanxi/extensions/String.kt
@@ -0,0 +1,20 @@
+package com.casic.smart.town.sanxi.extensions
+
+import com.casic.smart.town.sanxi.model.ErrorMessageModel
+import com.google.gson.Gson
+import com.google.gson.reflect.TypeToken
+import org.json.JSONObject
+
+fun String.separateResponseCode(): Int {
+ if (this.isBlank()) {
+ return 404
+ }
+ return JSONObject(this).getInt("code")
+}
+
+fun String.toErrorMessage(): String {
+ val errorModel = Gson().fromJson(
+ this, object : TypeToken() {}.type
+ )
+ return errorModel.message.toString()
+}
\ No newline at end of file
diff --git a/app/src/main/java/com/casic/smart/town/sanxi/fragment/StatisticsPageFragment.kt b/app/src/main/java/com/casic/smart/town/sanxi/fragment/StatisticsPageFragment.kt
index e84df12..21924de 100644
--- a/app/src/main/java/com/casic/smart/town/sanxi/fragment/StatisticsPageFragment.kt
+++ b/app/src/main/java/com/casic/smart/town/sanxi/fragment/StatisticsPageFragment.kt
@@ -1,10 +1,21 @@
package com.casic.smart.town.sanxi.fragment
+import androidx.lifecycle.ViewModelProvider
import com.casic.smart.town.sanxi.R
+import com.casic.smart.town.sanxi.view.AllWellActivity
+import com.casic.smart.town.sanxi.view.BFWellActivity
+import com.casic.smart.town.sanxi.view.CFWellActivity
+import com.casic.smart.town.sanxi.vm.WellViewModel
+import com.google.android.material.bottomsheet.BottomSheetBehavior
import com.pengxh.kt.lite.base.KotlinBaseFragment
+import com.pengxh.kt.lite.extensions.dp2px
+import com.pengxh.kt.lite.extensions.navigatePageTo
+import kotlinx.android.synthetic.main.fragment_statistics.*
class StatisticsPageFragment : KotlinBaseFragment() {
+ private lateinit var wellViewModel: WellViewModel
+
override fun initLayoutView(): Int = R.layout.fragment_statistics
override fun observeRequestState() {
@@ -16,10 +27,42 @@
}
override fun initData() {
+ //代码设置底部拉升距离
+ val bottomSheetBehavior = BottomSheetBehavior.from(bottomBehaviorLayout)
+ coordinatorLayout.post {
+ bottomSheetBehavior.isFitToContents = false
+ bottomSheetBehavior.halfExpandedRatio = 0.25f
+ bottomSheetBehavior.isHideable = false
+ bottomSheetBehavior.peekHeight = 30f.dp2px(requireContext())
+ }
+ //初始化vm
+ wellViewModel = ViewModelProvider(this)[WellViewModel::class.java]
+ //获取窨井监控数据
+ wellViewModel.countResultModel.observe(this, {
+ cfWellView.text = it["cfWell"]
+ bfWellView.text = it["bfWell"]
+ allWellDataView.text = it["total"]
+ })
}
override fun initEvent() {
+ cfWellView.setOnClickListener {
+ requireContext().navigatePageTo()
+ }
+ bfWellView.setOnClickListener {
+ requireContext().navigatePageTo()
+ }
+
+ allWellDataView.setOnClickListener {
+ requireContext().navigatePageTo()
+ }
+ }
+
+ override fun onResume() {
+ super.onResume()
+ //每次页面切换都需要重新刷新不同状态的窨井数量
+ wellViewModel.countWellByState()
}
}
\ No newline at end of file
diff --git a/.gitignore b/.gitignore
index 10cfdbf..bf2a5c6 100644
--- a/.gitignore
+++ b/.gitignore
@@ -4,7 +4,8 @@
/.idea
.DS_Store
/build
+/app/build
/captures
.externalNativeBuild
.cxx
-local.properties
+local.properties
\ No newline at end of file
diff --git a/app/build.gradle b/app/build.gradle
index a4cd2ca..6b81499 100644
--- a/app/build.gradle
+++ b/app/build.gradle
@@ -98,4 +98,6 @@
implementation 'org.greenrobot:greendao:3.3.0'
//桌面角标
implementation "me.leolin:ShortcutBadger:1.1.22@aar"
+ //图表
+ implementation 'com.github.PhilJay:MPAndroidChart:v3.1.0'
}
\ No newline at end of file
diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml
index a83c28a..1df917d 100644
--- a/app/src/main/AndroidManifest.xml
+++ b/app/src/main/AndroidManifest.xml
@@ -33,6 +33,9 @@
+
+
+
diff --git a/app/src/main/java/com/casic/smart/town/sanxi/extensions/String.kt b/app/src/main/java/com/casic/smart/town/sanxi/extensions/String.kt
new file mode 100644
index 0000000..d730417
--- /dev/null
+++ b/app/src/main/java/com/casic/smart/town/sanxi/extensions/String.kt
@@ -0,0 +1,20 @@
+package com.casic.smart.town.sanxi.extensions
+
+import com.casic.smart.town.sanxi.model.ErrorMessageModel
+import com.google.gson.Gson
+import com.google.gson.reflect.TypeToken
+import org.json.JSONObject
+
+fun String.separateResponseCode(): Int {
+ if (this.isBlank()) {
+ return 404
+ }
+ return JSONObject(this).getInt("code")
+}
+
+fun String.toErrorMessage(): String {
+ val errorModel = Gson().fromJson(
+ this, object : TypeToken() {}.type
+ )
+ return errorModel.message.toString()
+}
\ No newline at end of file
diff --git a/app/src/main/java/com/casic/smart/town/sanxi/fragment/StatisticsPageFragment.kt b/app/src/main/java/com/casic/smart/town/sanxi/fragment/StatisticsPageFragment.kt
index e84df12..21924de 100644
--- a/app/src/main/java/com/casic/smart/town/sanxi/fragment/StatisticsPageFragment.kt
+++ b/app/src/main/java/com/casic/smart/town/sanxi/fragment/StatisticsPageFragment.kt
@@ -1,10 +1,21 @@
package com.casic.smart.town.sanxi.fragment
+import androidx.lifecycle.ViewModelProvider
import com.casic.smart.town.sanxi.R
+import com.casic.smart.town.sanxi.view.AllWellActivity
+import com.casic.smart.town.sanxi.view.BFWellActivity
+import com.casic.smart.town.sanxi.view.CFWellActivity
+import com.casic.smart.town.sanxi.vm.WellViewModel
+import com.google.android.material.bottomsheet.BottomSheetBehavior
import com.pengxh.kt.lite.base.KotlinBaseFragment
+import com.pengxh.kt.lite.extensions.dp2px
+import com.pengxh.kt.lite.extensions.navigatePageTo
+import kotlinx.android.synthetic.main.fragment_statistics.*
class StatisticsPageFragment : KotlinBaseFragment() {
+ private lateinit var wellViewModel: WellViewModel
+
override fun initLayoutView(): Int = R.layout.fragment_statistics
override fun observeRequestState() {
@@ -16,10 +27,42 @@
}
override fun initData() {
+ //代码设置底部拉升距离
+ val bottomSheetBehavior = BottomSheetBehavior.from(bottomBehaviorLayout)
+ coordinatorLayout.post {
+ bottomSheetBehavior.isFitToContents = false
+ bottomSheetBehavior.halfExpandedRatio = 0.25f
+ bottomSheetBehavior.isHideable = false
+ bottomSheetBehavior.peekHeight = 30f.dp2px(requireContext())
+ }
+ //初始化vm
+ wellViewModel = ViewModelProvider(this)[WellViewModel::class.java]
+ //获取窨井监控数据
+ wellViewModel.countResultModel.observe(this, {
+ cfWellView.text = it["cfWell"]
+ bfWellView.text = it["bfWell"]
+ allWellDataView.text = it["total"]
+ })
}
override fun initEvent() {
+ cfWellView.setOnClickListener {
+ requireContext().navigatePageTo()
+ }
+ bfWellView.setOnClickListener {
+ requireContext().navigatePageTo()
+ }
+
+ allWellDataView.setOnClickListener {
+ requireContext().navigatePageTo()
+ }
+ }
+
+ override fun onResume() {
+ super.onResume()
+ //每次页面切换都需要重新刷新不同状态的窨井数量
+ wellViewModel.countWellByState()
}
}
\ No newline at end of file
diff --git a/app/src/main/java/com/casic/smart/town/sanxi/model/ErrorMessageModel.java b/app/src/main/java/com/casic/smart/town/sanxi/model/ErrorMessageModel.java
new file mode 100644
index 0000000..60546a1
--- /dev/null
+++ b/app/src/main/java/com/casic/smart/town/sanxi/model/ErrorMessageModel.java
@@ -0,0 +1,50 @@
+package com.casic.smart.town.sanxi.model;
+
+public class ErrorMessageModel {
+
+ private int code;
+ private String data;
+ private String exceptionClazz;
+ private String message;
+ private boolean success;
+
+ public int getCode() {
+ return code;
+ }
+
+ public void setCode(int code) {
+ this.code = code;
+ }
+
+ public String getData() {
+ return data;
+ }
+
+ public void setData(String data) {
+ this.data = data;
+ }
+
+ public String getExceptionClazz() {
+ return exceptionClazz;
+ }
+
+ public void setExceptionClazz(String exceptionClazz) {
+ this.exceptionClazz = exceptionClazz;
+ }
+
+ public String getMessage() {
+ return message;
+ }
+
+ public void setMessage(String message) {
+ this.message = message;
+ }
+
+ public boolean isSuccess() {
+ return success;
+ }
+
+ public void setSuccess(boolean success) {
+ this.success = success;
+ }
+}
\ No newline at end of file
diff --git a/.gitignore b/.gitignore
index 10cfdbf..bf2a5c6 100644
--- a/.gitignore
+++ b/.gitignore
@@ -4,7 +4,8 @@
/.idea
.DS_Store
/build
+/app/build
/captures
.externalNativeBuild
.cxx
-local.properties
+local.properties
\ No newline at end of file
diff --git a/app/build.gradle b/app/build.gradle
index a4cd2ca..6b81499 100644
--- a/app/build.gradle
+++ b/app/build.gradle
@@ -98,4 +98,6 @@
implementation 'org.greenrobot:greendao:3.3.0'
//桌面角标
implementation "me.leolin:ShortcutBadger:1.1.22@aar"
+ //图表
+ implementation 'com.github.PhilJay:MPAndroidChart:v3.1.0'
}
\ No newline at end of file
diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml
index a83c28a..1df917d 100644
--- a/app/src/main/AndroidManifest.xml
+++ b/app/src/main/AndroidManifest.xml
@@ -33,6 +33,9 @@
+
+
+
diff --git a/app/src/main/java/com/casic/smart/town/sanxi/extensions/String.kt b/app/src/main/java/com/casic/smart/town/sanxi/extensions/String.kt
new file mode 100644
index 0000000..d730417
--- /dev/null
+++ b/app/src/main/java/com/casic/smart/town/sanxi/extensions/String.kt
@@ -0,0 +1,20 @@
+package com.casic.smart.town.sanxi.extensions
+
+import com.casic.smart.town.sanxi.model.ErrorMessageModel
+import com.google.gson.Gson
+import com.google.gson.reflect.TypeToken
+import org.json.JSONObject
+
+fun String.separateResponseCode(): Int {
+ if (this.isBlank()) {
+ return 404
+ }
+ return JSONObject(this).getInt("code")
+}
+
+fun String.toErrorMessage(): String {
+ val errorModel = Gson().fromJson(
+ this, object : TypeToken() {}.type
+ )
+ return errorModel.message.toString()
+}
\ No newline at end of file
diff --git a/app/src/main/java/com/casic/smart/town/sanxi/fragment/StatisticsPageFragment.kt b/app/src/main/java/com/casic/smart/town/sanxi/fragment/StatisticsPageFragment.kt
index e84df12..21924de 100644
--- a/app/src/main/java/com/casic/smart/town/sanxi/fragment/StatisticsPageFragment.kt
+++ b/app/src/main/java/com/casic/smart/town/sanxi/fragment/StatisticsPageFragment.kt
@@ -1,10 +1,21 @@
package com.casic.smart.town.sanxi.fragment
+import androidx.lifecycle.ViewModelProvider
import com.casic.smart.town.sanxi.R
+import com.casic.smart.town.sanxi.view.AllWellActivity
+import com.casic.smart.town.sanxi.view.BFWellActivity
+import com.casic.smart.town.sanxi.view.CFWellActivity
+import com.casic.smart.town.sanxi.vm.WellViewModel
+import com.google.android.material.bottomsheet.BottomSheetBehavior
import com.pengxh.kt.lite.base.KotlinBaseFragment
+import com.pengxh.kt.lite.extensions.dp2px
+import com.pengxh.kt.lite.extensions.navigatePageTo
+import kotlinx.android.synthetic.main.fragment_statistics.*
class StatisticsPageFragment : KotlinBaseFragment() {
+ private lateinit var wellViewModel: WellViewModel
+
override fun initLayoutView(): Int = R.layout.fragment_statistics
override fun observeRequestState() {
@@ -16,10 +27,42 @@
}
override fun initData() {
+ //代码设置底部拉升距离
+ val bottomSheetBehavior = BottomSheetBehavior.from(bottomBehaviorLayout)
+ coordinatorLayout.post {
+ bottomSheetBehavior.isFitToContents = false
+ bottomSheetBehavior.halfExpandedRatio = 0.25f
+ bottomSheetBehavior.isHideable = false
+ bottomSheetBehavior.peekHeight = 30f.dp2px(requireContext())
+ }
+ //初始化vm
+ wellViewModel = ViewModelProvider(this)[WellViewModel::class.java]
+ //获取窨井监控数据
+ wellViewModel.countResultModel.observe(this, {
+ cfWellView.text = it["cfWell"]
+ bfWellView.text = it["bfWell"]
+ allWellDataView.text = it["total"]
+ })
}
override fun initEvent() {
+ cfWellView.setOnClickListener {
+ requireContext().navigatePageTo()
+ }
+ bfWellView.setOnClickListener {
+ requireContext().navigatePageTo()
+ }
+
+ allWellDataView.setOnClickListener {
+ requireContext().navigatePageTo()
+ }
+ }
+
+ override fun onResume() {
+ super.onResume()
+ //每次页面切换都需要重新刷新不同状态的窨井数量
+ wellViewModel.countWellByState()
}
}
\ No newline at end of file
diff --git a/app/src/main/java/com/casic/smart/town/sanxi/model/ErrorMessageModel.java b/app/src/main/java/com/casic/smart/town/sanxi/model/ErrorMessageModel.java
new file mode 100644
index 0000000..60546a1
--- /dev/null
+++ b/app/src/main/java/com/casic/smart/town/sanxi/model/ErrorMessageModel.java
@@ -0,0 +1,50 @@
+package com.casic.smart.town.sanxi.model;
+
+public class ErrorMessageModel {
+
+ private int code;
+ private String data;
+ private String exceptionClazz;
+ private String message;
+ private boolean success;
+
+ public int getCode() {
+ return code;
+ }
+
+ public void setCode(int code) {
+ this.code = code;
+ }
+
+ public String getData() {
+ return data;
+ }
+
+ public void setData(String data) {
+ this.data = data;
+ }
+
+ public String getExceptionClazz() {
+ return exceptionClazz;
+ }
+
+ public void setExceptionClazz(String exceptionClazz) {
+ this.exceptionClazz = exceptionClazz;
+ }
+
+ public String getMessage() {
+ return message;
+ }
+
+ public void setMessage(String message) {
+ this.message = message;
+ }
+
+ public boolean isSuccess() {
+ return success;
+ }
+
+ public void setSuccess(boolean success) {
+ this.success = success;
+ }
+}
\ No newline at end of file
diff --git a/app/src/main/java/com/casic/smart/town/sanxi/util/LocaleConstant.kt b/app/src/main/java/com/casic/smart/town/sanxi/util/LocaleConstant.kt
index de61c9a..ab1a36d 100644
--- a/app/src/main/java/com/casic/smart/town/sanxi/util/LocaleConstant.kt
+++ b/app/src/main/java/com/casic/smart/town/sanxi/util/LocaleConstant.kt
@@ -12,4 +12,7 @@
const val PERMISSIONS_CODE = 999
const val PUSH_REGISTER = 2022100101
const val PAGE_LIMIT = 20
+
+ const val DEFAULT_SERVER_CONFIG = "defaultServerConfig"
+ const val DEFAULT_SERVER = "http://111.198.10.15:11308"
}
\ No newline at end of file
diff --git a/.gitignore b/.gitignore
index 10cfdbf..bf2a5c6 100644
--- a/.gitignore
+++ b/.gitignore
@@ -4,7 +4,8 @@
/.idea
.DS_Store
/build
+/app/build
/captures
.externalNativeBuild
.cxx
-local.properties
+local.properties
\ No newline at end of file
diff --git a/app/build.gradle b/app/build.gradle
index a4cd2ca..6b81499 100644
--- a/app/build.gradle
+++ b/app/build.gradle
@@ -98,4 +98,6 @@
implementation 'org.greenrobot:greendao:3.3.0'
//桌面角标
implementation "me.leolin:ShortcutBadger:1.1.22@aar"
+ //图表
+ implementation 'com.github.PhilJay:MPAndroidChart:v3.1.0'
}
\ No newline at end of file
diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml
index a83c28a..1df917d 100644
--- a/app/src/main/AndroidManifest.xml
+++ b/app/src/main/AndroidManifest.xml
@@ -33,6 +33,9 @@
+
+
+
diff --git a/app/src/main/java/com/casic/smart/town/sanxi/extensions/String.kt b/app/src/main/java/com/casic/smart/town/sanxi/extensions/String.kt
new file mode 100644
index 0000000..d730417
--- /dev/null
+++ b/app/src/main/java/com/casic/smart/town/sanxi/extensions/String.kt
@@ -0,0 +1,20 @@
+package com.casic.smart.town.sanxi.extensions
+
+import com.casic.smart.town.sanxi.model.ErrorMessageModel
+import com.google.gson.Gson
+import com.google.gson.reflect.TypeToken
+import org.json.JSONObject
+
+fun String.separateResponseCode(): Int {
+ if (this.isBlank()) {
+ return 404
+ }
+ return JSONObject(this).getInt("code")
+}
+
+fun String.toErrorMessage(): String {
+ val errorModel = Gson().fromJson(
+ this, object : TypeToken() {}.type
+ )
+ return errorModel.message.toString()
+}
\ No newline at end of file
diff --git a/app/src/main/java/com/casic/smart/town/sanxi/fragment/StatisticsPageFragment.kt b/app/src/main/java/com/casic/smart/town/sanxi/fragment/StatisticsPageFragment.kt
index e84df12..21924de 100644
--- a/app/src/main/java/com/casic/smart/town/sanxi/fragment/StatisticsPageFragment.kt
+++ b/app/src/main/java/com/casic/smart/town/sanxi/fragment/StatisticsPageFragment.kt
@@ -1,10 +1,21 @@
package com.casic.smart.town.sanxi.fragment
+import androidx.lifecycle.ViewModelProvider
import com.casic.smart.town.sanxi.R
+import com.casic.smart.town.sanxi.view.AllWellActivity
+import com.casic.smart.town.sanxi.view.BFWellActivity
+import com.casic.smart.town.sanxi.view.CFWellActivity
+import com.casic.smart.town.sanxi.vm.WellViewModel
+import com.google.android.material.bottomsheet.BottomSheetBehavior
import com.pengxh.kt.lite.base.KotlinBaseFragment
+import com.pengxh.kt.lite.extensions.dp2px
+import com.pengxh.kt.lite.extensions.navigatePageTo
+import kotlinx.android.synthetic.main.fragment_statistics.*
class StatisticsPageFragment : KotlinBaseFragment() {
+ private lateinit var wellViewModel: WellViewModel
+
override fun initLayoutView(): Int = R.layout.fragment_statistics
override fun observeRequestState() {
@@ -16,10 +27,42 @@
}
override fun initData() {
+ //代码设置底部拉升距离
+ val bottomSheetBehavior = BottomSheetBehavior.from(bottomBehaviorLayout)
+ coordinatorLayout.post {
+ bottomSheetBehavior.isFitToContents = false
+ bottomSheetBehavior.halfExpandedRatio = 0.25f
+ bottomSheetBehavior.isHideable = false
+ bottomSheetBehavior.peekHeight = 30f.dp2px(requireContext())
+ }
+ //初始化vm
+ wellViewModel = ViewModelProvider(this)[WellViewModel::class.java]
+ //获取窨井监控数据
+ wellViewModel.countResultModel.observe(this, {
+ cfWellView.text = it["cfWell"]
+ bfWellView.text = it["bfWell"]
+ allWellDataView.text = it["total"]
+ })
}
override fun initEvent() {
+ cfWellView.setOnClickListener {
+ requireContext().navigatePageTo()
+ }
+ bfWellView.setOnClickListener {
+ requireContext().navigatePageTo()
+ }
+
+ allWellDataView.setOnClickListener {
+ requireContext().navigatePageTo()
+ }
+ }
+
+ override fun onResume() {
+ super.onResume()
+ //每次页面切换都需要重新刷新不同状态的窨井数量
+ wellViewModel.countWellByState()
}
}
\ No newline at end of file
diff --git a/app/src/main/java/com/casic/smart/town/sanxi/model/ErrorMessageModel.java b/app/src/main/java/com/casic/smart/town/sanxi/model/ErrorMessageModel.java
new file mode 100644
index 0000000..60546a1
--- /dev/null
+++ b/app/src/main/java/com/casic/smart/town/sanxi/model/ErrorMessageModel.java
@@ -0,0 +1,50 @@
+package com.casic.smart.town.sanxi.model;
+
+public class ErrorMessageModel {
+
+ private int code;
+ private String data;
+ private String exceptionClazz;
+ private String message;
+ private boolean success;
+
+ public int getCode() {
+ return code;
+ }
+
+ public void setCode(int code) {
+ this.code = code;
+ }
+
+ public String getData() {
+ return data;
+ }
+
+ public void setData(String data) {
+ this.data = data;
+ }
+
+ public String getExceptionClazz() {
+ return exceptionClazz;
+ }
+
+ public void setExceptionClazz(String exceptionClazz) {
+ this.exceptionClazz = exceptionClazz;
+ }
+
+ public String getMessage() {
+ return message;
+ }
+
+ public void setMessage(String message) {
+ this.message = message;
+ }
+
+ public boolean isSuccess() {
+ return success;
+ }
+
+ public void setSuccess(boolean success) {
+ this.success = success;
+ }
+}
\ No newline at end of file
diff --git a/app/src/main/java/com/casic/smart/town/sanxi/util/LocaleConstant.kt b/app/src/main/java/com/casic/smart/town/sanxi/util/LocaleConstant.kt
index de61c9a..ab1a36d 100644
--- a/app/src/main/java/com/casic/smart/town/sanxi/util/LocaleConstant.kt
+++ b/app/src/main/java/com/casic/smart/town/sanxi/util/LocaleConstant.kt
@@ -12,4 +12,7 @@
const val PERMISSIONS_CODE = 999
const val PUSH_REGISTER = 2022100101
const val PAGE_LIMIT = 20
+
+ const val DEFAULT_SERVER_CONFIG = "defaultServerConfig"
+ const val DEFAULT_SERVER = "http://111.198.10.15:11308"
}
\ No newline at end of file
diff --git a/app/src/main/java/com/casic/smart/town/sanxi/util/retrofit/RetrofitService.kt b/app/src/main/java/com/casic/smart/town/sanxi/util/retrofit/RetrofitService.kt
new file mode 100644
index 0000000..63db0ec
--- /dev/null
+++ b/app/src/main/java/com/casic/smart/town/sanxi/util/retrofit/RetrofitService.kt
@@ -0,0 +1,12 @@
+package com.casic.smart.town.sanxi.util.retrofit
+
+import retrofit2.http.GET
+
+interface RetrofitService {
+
+ /**
+ * 根据布防状态统计闸井数量接口
+ */
+ @GET("/well/countByBfzt")
+ suspend fun countWellByState(): String
+}
\ No newline at end of file
diff --git a/.gitignore b/.gitignore
index 10cfdbf..bf2a5c6 100644
--- a/.gitignore
+++ b/.gitignore
@@ -4,7 +4,8 @@
/.idea
.DS_Store
/build
+/app/build
/captures
.externalNativeBuild
.cxx
-local.properties
+local.properties
\ No newline at end of file
diff --git a/app/build.gradle b/app/build.gradle
index a4cd2ca..6b81499 100644
--- a/app/build.gradle
+++ b/app/build.gradle
@@ -98,4 +98,6 @@
implementation 'org.greenrobot:greendao:3.3.0'
//桌面角标
implementation "me.leolin:ShortcutBadger:1.1.22@aar"
+ //图表
+ implementation 'com.github.PhilJay:MPAndroidChart:v3.1.0'
}
\ No newline at end of file
diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml
index a83c28a..1df917d 100644
--- a/app/src/main/AndroidManifest.xml
+++ b/app/src/main/AndroidManifest.xml
@@ -33,6 +33,9 @@
+
+
+
diff --git a/app/src/main/java/com/casic/smart/town/sanxi/extensions/String.kt b/app/src/main/java/com/casic/smart/town/sanxi/extensions/String.kt
new file mode 100644
index 0000000..d730417
--- /dev/null
+++ b/app/src/main/java/com/casic/smart/town/sanxi/extensions/String.kt
@@ -0,0 +1,20 @@
+package com.casic.smart.town.sanxi.extensions
+
+import com.casic.smart.town.sanxi.model.ErrorMessageModel
+import com.google.gson.Gson
+import com.google.gson.reflect.TypeToken
+import org.json.JSONObject
+
+fun String.separateResponseCode(): Int {
+ if (this.isBlank()) {
+ return 404
+ }
+ return JSONObject(this).getInt("code")
+}
+
+fun String.toErrorMessage(): String {
+ val errorModel = Gson().fromJson(
+ this, object : TypeToken() {}.type
+ )
+ return errorModel.message.toString()
+}
\ No newline at end of file
diff --git a/app/src/main/java/com/casic/smart/town/sanxi/fragment/StatisticsPageFragment.kt b/app/src/main/java/com/casic/smart/town/sanxi/fragment/StatisticsPageFragment.kt
index e84df12..21924de 100644
--- a/app/src/main/java/com/casic/smart/town/sanxi/fragment/StatisticsPageFragment.kt
+++ b/app/src/main/java/com/casic/smart/town/sanxi/fragment/StatisticsPageFragment.kt
@@ -1,10 +1,21 @@
package com.casic.smart.town.sanxi.fragment
+import androidx.lifecycle.ViewModelProvider
import com.casic.smart.town.sanxi.R
+import com.casic.smart.town.sanxi.view.AllWellActivity
+import com.casic.smart.town.sanxi.view.BFWellActivity
+import com.casic.smart.town.sanxi.view.CFWellActivity
+import com.casic.smart.town.sanxi.vm.WellViewModel
+import com.google.android.material.bottomsheet.BottomSheetBehavior
import com.pengxh.kt.lite.base.KotlinBaseFragment
+import com.pengxh.kt.lite.extensions.dp2px
+import com.pengxh.kt.lite.extensions.navigatePageTo
+import kotlinx.android.synthetic.main.fragment_statistics.*
class StatisticsPageFragment : KotlinBaseFragment() {
+ private lateinit var wellViewModel: WellViewModel
+
override fun initLayoutView(): Int = R.layout.fragment_statistics
override fun observeRequestState() {
@@ -16,10 +27,42 @@
}
override fun initData() {
+ //代码设置底部拉升距离
+ val bottomSheetBehavior = BottomSheetBehavior.from(bottomBehaviorLayout)
+ coordinatorLayout.post {
+ bottomSheetBehavior.isFitToContents = false
+ bottomSheetBehavior.halfExpandedRatio = 0.25f
+ bottomSheetBehavior.isHideable = false
+ bottomSheetBehavior.peekHeight = 30f.dp2px(requireContext())
+ }
+ //初始化vm
+ wellViewModel = ViewModelProvider(this)[WellViewModel::class.java]
+ //获取窨井监控数据
+ wellViewModel.countResultModel.observe(this, {
+ cfWellView.text = it["cfWell"]
+ bfWellView.text = it["bfWell"]
+ allWellDataView.text = it["total"]
+ })
}
override fun initEvent() {
+ cfWellView.setOnClickListener {
+ requireContext().navigatePageTo()
+ }
+ bfWellView.setOnClickListener {
+ requireContext().navigatePageTo()
+ }
+
+ allWellDataView.setOnClickListener {
+ requireContext().navigatePageTo()
+ }
+ }
+
+ override fun onResume() {
+ super.onResume()
+ //每次页面切换都需要重新刷新不同状态的窨井数量
+ wellViewModel.countWellByState()
}
}
\ No newline at end of file
diff --git a/app/src/main/java/com/casic/smart/town/sanxi/model/ErrorMessageModel.java b/app/src/main/java/com/casic/smart/town/sanxi/model/ErrorMessageModel.java
new file mode 100644
index 0000000..60546a1
--- /dev/null
+++ b/app/src/main/java/com/casic/smart/town/sanxi/model/ErrorMessageModel.java
@@ -0,0 +1,50 @@
+package com.casic.smart.town.sanxi.model;
+
+public class ErrorMessageModel {
+
+ private int code;
+ private String data;
+ private String exceptionClazz;
+ private String message;
+ private boolean success;
+
+ public int getCode() {
+ return code;
+ }
+
+ public void setCode(int code) {
+ this.code = code;
+ }
+
+ public String getData() {
+ return data;
+ }
+
+ public void setData(String data) {
+ this.data = data;
+ }
+
+ public String getExceptionClazz() {
+ return exceptionClazz;
+ }
+
+ public void setExceptionClazz(String exceptionClazz) {
+ this.exceptionClazz = exceptionClazz;
+ }
+
+ public String getMessage() {
+ return message;
+ }
+
+ public void setMessage(String message) {
+ this.message = message;
+ }
+
+ public boolean isSuccess() {
+ return success;
+ }
+
+ public void setSuccess(boolean success) {
+ this.success = success;
+ }
+}
\ No newline at end of file
diff --git a/app/src/main/java/com/casic/smart/town/sanxi/util/LocaleConstant.kt b/app/src/main/java/com/casic/smart/town/sanxi/util/LocaleConstant.kt
index de61c9a..ab1a36d 100644
--- a/app/src/main/java/com/casic/smart/town/sanxi/util/LocaleConstant.kt
+++ b/app/src/main/java/com/casic/smart/town/sanxi/util/LocaleConstant.kt
@@ -12,4 +12,7 @@
const val PERMISSIONS_CODE = 999
const val PUSH_REGISTER = 2022100101
const val PAGE_LIMIT = 20
+
+ const val DEFAULT_SERVER_CONFIG = "defaultServerConfig"
+ const val DEFAULT_SERVER = "http://111.198.10.15:11308"
}
\ No newline at end of file
diff --git a/app/src/main/java/com/casic/smart/town/sanxi/util/retrofit/RetrofitService.kt b/app/src/main/java/com/casic/smart/town/sanxi/util/retrofit/RetrofitService.kt
new file mode 100644
index 0000000..63db0ec
--- /dev/null
+++ b/app/src/main/java/com/casic/smart/town/sanxi/util/retrofit/RetrofitService.kt
@@ -0,0 +1,12 @@
+package com.casic.smart.town.sanxi.util.retrofit
+
+import retrofit2.http.GET
+
+interface RetrofitService {
+
+ /**
+ * 根据布防状态统计闸井数量接口
+ */
+ @GET("/well/countByBfzt")
+ suspend fun countWellByState(): String
+}
\ No newline at end of file
diff --git a/app/src/main/java/com/casic/smart/town/sanxi/util/retrofit/RetrofitServiceManager.kt b/app/src/main/java/com/casic/smart/town/sanxi/util/retrofit/RetrofitServiceManager.kt
new file mode 100644
index 0000000..46bbf4b
--- /dev/null
+++ b/app/src/main/java/com/casic/smart/town/sanxi/util/retrofit/RetrofitServiceManager.kt
@@ -0,0 +1,23 @@
+package com.casic.smart.town.sanxi.util.retrofit
+
+import com.casic.smart.town.sanxi.util.LocaleConstant
+import com.pengxh.kt.lite.utils.RetrofitFactory
+import com.pengxh.kt.lite.utils.SaveKeyValues
+
+object RetrofitServiceManager {
+
+ private val api by lazy {
+ val defaultValue = SaveKeyValues.getValue(
+ LocaleConstant.DEFAULT_SERVER_CONFIG,
+ LocaleConstant.DEFAULT_SERVER
+ ) as String
+ RetrofitFactory.createRetrofit(defaultValue)
+ }
+
+ /**
+ * 根据布防状态统计闸井数量接口
+ */
+ suspend fun countWellByState(): String {
+ return api.countWellByState()
+ }
+}
\ No newline at end of file
diff --git a/.gitignore b/.gitignore
index 10cfdbf..bf2a5c6 100644
--- a/.gitignore
+++ b/.gitignore
@@ -4,7 +4,8 @@
/.idea
.DS_Store
/build
+/app/build
/captures
.externalNativeBuild
.cxx
-local.properties
+local.properties
\ No newline at end of file
diff --git a/app/build.gradle b/app/build.gradle
index a4cd2ca..6b81499 100644
--- a/app/build.gradle
+++ b/app/build.gradle
@@ -98,4 +98,6 @@
implementation 'org.greenrobot:greendao:3.3.0'
//桌面角标
implementation "me.leolin:ShortcutBadger:1.1.22@aar"
+ //图表
+ implementation 'com.github.PhilJay:MPAndroidChart:v3.1.0'
}
\ No newline at end of file
diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml
index a83c28a..1df917d 100644
--- a/app/src/main/AndroidManifest.xml
+++ b/app/src/main/AndroidManifest.xml
@@ -33,6 +33,9 @@
+
+
+
diff --git a/app/src/main/java/com/casic/smart/town/sanxi/extensions/String.kt b/app/src/main/java/com/casic/smart/town/sanxi/extensions/String.kt
new file mode 100644
index 0000000..d730417
--- /dev/null
+++ b/app/src/main/java/com/casic/smart/town/sanxi/extensions/String.kt
@@ -0,0 +1,20 @@
+package com.casic.smart.town.sanxi.extensions
+
+import com.casic.smart.town.sanxi.model.ErrorMessageModel
+import com.google.gson.Gson
+import com.google.gson.reflect.TypeToken
+import org.json.JSONObject
+
+fun String.separateResponseCode(): Int {
+ if (this.isBlank()) {
+ return 404
+ }
+ return JSONObject(this).getInt("code")
+}
+
+fun String.toErrorMessage(): String {
+ val errorModel = Gson().fromJson(
+ this, object : TypeToken() {}.type
+ )
+ return errorModel.message.toString()
+}
\ No newline at end of file
diff --git a/app/src/main/java/com/casic/smart/town/sanxi/fragment/StatisticsPageFragment.kt b/app/src/main/java/com/casic/smart/town/sanxi/fragment/StatisticsPageFragment.kt
index e84df12..21924de 100644
--- a/app/src/main/java/com/casic/smart/town/sanxi/fragment/StatisticsPageFragment.kt
+++ b/app/src/main/java/com/casic/smart/town/sanxi/fragment/StatisticsPageFragment.kt
@@ -1,10 +1,21 @@
package com.casic.smart.town.sanxi.fragment
+import androidx.lifecycle.ViewModelProvider
import com.casic.smart.town.sanxi.R
+import com.casic.smart.town.sanxi.view.AllWellActivity
+import com.casic.smart.town.sanxi.view.BFWellActivity
+import com.casic.smart.town.sanxi.view.CFWellActivity
+import com.casic.smart.town.sanxi.vm.WellViewModel
+import com.google.android.material.bottomsheet.BottomSheetBehavior
import com.pengxh.kt.lite.base.KotlinBaseFragment
+import com.pengxh.kt.lite.extensions.dp2px
+import com.pengxh.kt.lite.extensions.navigatePageTo
+import kotlinx.android.synthetic.main.fragment_statistics.*
class StatisticsPageFragment : KotlinBaseFragment() {
+ private lateinit var wellViewModel: WellViewModel
+
override fun initLayoutView(): Int = R.layout.fragment_statistics
override fun observeRequestState() {
@@ -16,10 +27,42 @@
}
override fun initData() {
+ //代码设置底部拉升距离
+ val bottomSheetBehavior = BottomSheetBehavior.from(bottomBehaviorLayout)
+ coordinatorLayout.post {
+ bottomSheetBehavior.isFitToContents = false
+ bottomSheetBehavior.halfExpandedRatio = 0.25f
+ bottomSheetBehavior.isHideable = false
+ bottomSheetBehavior.peekHeight = 30f.dp2px(requireContext())
+ }
+ //初始化vm
+ wellViewModel = ViewModelProvider(this)[WellViewModel::class.java]
+ //获取窨井监控数据
+ wellViewModel.countResultModel.observe(this, {
+ cfWellView.text = it["cfWell"]
+ bfWellView.text = it["bfWell"]
+ allWellDataView.text = it["total"]
+ })
}
override fun initEvent() {
+ cfWellView.setOnClickListener {
+ requireContext().navigatePageTo()
+ }
+ bfWellView.setOnClickListener {
+ requireContext().navigatePageTo()
+ }
+
+ allWellDataView.setOnClickListener {
+ requireContext().navigatePageTo()
+ }
+ }
+
+ override fun onResume() {
+ super.onResume()
+ //每次页面切换都需要重新刷新不同状态的窨井数量
+ wellViewModel.countWellByState()
}
}
\ No newline at end of file
diff --git a/app/src/main/java/com/casic/smart/town/sanxi/model/ErrorMessageModel.java b/app/src/main/java/com/casic/smart/town/sanxi/model/ErrorMessageModel.java
new file mode 100644
index 0000000..60546a1
--- /dev/null
+++ b/app/src/main/java/com/casic/smart/town/sanxi/model/ErrorMessageModel.java
@@ -0,0 +1,50 @@
+package com.casic.smart.town.sanxi.model;
+
+public class ErrorMessageModel {
+
+ private int code;
+ private String data;
+ private String exceptionClazz;
+ private String message;
+ private boolean success;
+
+ public int getCode() {
+ return code;
+ }
+
+ public void setCode(int code) {
+ this.code = code;
+ }
+
+ public String getData() {
+ return data;
+ }
+
+ public void setData(String data) {
+ this.data = data;
+ }
+
+ public String getExceptionClazz() {
+ return exceptionClazz;
+ }
+
+ public void setExceptionClazz(String exceptionClazz) {
+ this.exceptionClazz = exceptionClazz;
+ }
+
+ public String getMessage() {
+ return message;
+ }
+
+ public void setMessage(String message) {
+ this.message = message;
+ }
+
+ public boolean isSuccess() {
+ return success;
+ }
+
+ public void setSuccess(boolean success) {
+ this.success = success;
+ }
+}
\ No newline at end of file
diff --git a/app/src/main/java/com/casic/smart/town/sanxi/util/LocaleConstant.kt b/app/src/main/java/com/casic/smart/town/sanxi/util/LocaleConstant.kt
index de61c9a..ab1a36d 100644
--- a/app/src/main/java/com/casic/smart/town/sanxi/util/LocaleConstant.kt
+++ b/app/src/main/java/com/casic/smart/town/sanxi/util/LocaleConstant.kt
@@ -12,4 +12,7 @@
const val PERMISSIONS_CODE = 999
const val PUSH_REGISTER = 2022100101
const val PAGE_LIMIT = 20
+
+ const val DEFAULT_SERVER_CONFIG = "defaultServerConfig"
+ const val DEFAULT_SERVER = "http://111.198.10.15:11308"
}
\ No newline at end of file
diff --git a/app/src/main/java/com/casic/smart/town/sanxi/util/retrofit/RetrofitService.kt b/app/src/main/java/com/casic/smart/town/sanxi/util/retrofit/RetrofitService.kt
new file mode 100644
index 0000000..63db0ec
--- /dev/null
+++ b/app/src/main/java/com/casic/smart/town/sanxi/util/retrofit/RetrofitService.kt
@@ -0,0 +1,12 @@
+package com.casic.smart.town.sanxi.util.retrofit
+
+import retrofit2.http.GET
+
+interface RetrofitService {
+
+ /**
+ * 根据布防状态统计闸井数量接口
+ */
+ @GET("/well/countByBfzt")
+ suspend fun countWellByState(): String
+}
\ No newline at end of file
diff --git a/app/src/main/java/com/casic/smart/town/sanxi/util/retrofit/RetrofitServiceManager.kt b/app/src/main/java/com/casic/smart/town/sanxi/util/retrofit/RetrofitServiceManager.kt
new file mode 100644
index 0000000..46bbf4b
--- /dev/null
+++ b/app/src/main/java/com/casic/smart/town/sanxi/util/retrofit/RetrofitServiceManager.kt
@@ -0,0 +1,23 @@
+package com.casic.smart.town.sanxi.util.retrofit
+
+import com.casic.smart.town.sanxi.util.LocaleConstant
+import com.pengxh.kt.lite.utils.RetrofitFactory
+import com.pengxh.kt.lite.utils.SaveKeyValues
+
+object RetrofitServiceManager {
+
+ private val api by lazy {
+ val defaultValue = SaveKeyValues.getValue(
+ LocaleConstant.DEFAULT_SERVER_CONFIG,
+ LocaleConstant.DEFAULT_SERVER
+ ) as String
+ RetrofitFactory.createRetrofit(defaultValue)
+ }
+
+ /**
+ * 根据布防状态统计闸井数量接口
+ */
+ suspend fun countWellByState(): String {
+ return api.countWellByState()
+ }
+}
\ No newline at end of file
diff --git a/app/src/main/java/com/casic/smart/town/sanxi/view/AllWellActivity.kt b/app/src/main/java/com/casic/smart/town/sanxi/view/AllWellActivity.kt
new file mode 100644
index 0000000..cb0c9e4
--- /dev/null
+++ b/app/src/main/java/com/casic/smart/town/sanxi/view/AllWellActivity.kt
@@ -0,0 +1,25 @@
+package com.casic.smart.town.sanxi.view
+
+import com.casic.smart.town.sanxi.R
+import com.pengxh.kt.lite.base.KotlinBaseActivity
+
+class AllWellActivity : KotlinBaseActivity() {
+
+ override fun initLayoutView(): Int = R.layout.activity_all_well
+
+ override fun observeRequestState() {
+
+ }
+
+ override fun setupTopBarLayout() {
+
+ }
+
+ override fun initData() {
+
+ }
+
+ override fun initEvent() {
+
+ }
+}
\ No newline at end of file
diff --git a/.gitignore b/.gitignore
index 10cfdbf..bf2a5c6 100644
--- a/.gitignore
+++ b/.gitignore
@@ -4,7 +4,8 @@
/.idea
.DS_Store
/build
+/app/build
/captures
.externalNativeBuild
.cxx
-local.properties
+local.properties
\ No newline at end of file
diff --git a/app/build.gradle b/app/build.gradle
index a4cd2ca..6b81499 100644
--- a/app/build.gradle
+++ b/app/build.gradle
@@ -98,4 +98,6 @@
implementation 'org.greenrobot:greendao:3.3.0'
//桌面角标
implementation "me.leolin:ShortcutBadger:1.1.22@aar"
+ //图表
+ implementation 'com.github.PhilJay:MPAndroidChart:v3.1.0'
}
\ No newline at end of file
diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml
index a83c28a..1df917d 100644
--- a/app/src/main/AndroidManifest.xml
+++ b/app/src/main/AndroidManifest.xml
@@ -33,6 +33,9 @@
+
+
+
diff --git a/app/src/main/java/com/casic/smart/town/sanxi/extensions/String.kt b/app/src/main/java/com/casic/smart/town/sanxi/extensions/String.kt
new file mode 100644
index 0000000..d730417
--- /dev/null
+++ b/app/src/main/java/com/casic/smart/town/sanxi/extensions/String.kt
@@ -0,0 +1,20 @@
+package com.casic.smart.town.sanxi.extensions
+
+import com.casic.smart.town.sanxi.model.ErrorMessageModel
+import com.google.gson.Gson
+import com.google.gson.reflect.TypeToken
+import org.json.JSONObject
+
+fun String.separateResponseCode(): Int {
+ if (this.isBlank()) {
+ return 404
+ }
+ return JSONObject(this).getInt("code")
+}
+
+fun String.toErrorMessage(): String {
+ val errorModel = Gson().fromJson(
+ this, object : TypeToken() {}.type
+ )
+ return errorModel.message.toString()
+}
\ No newline at end of file
diff --git a/app/src/main/java/com/casic/smart/town/sanxi/fragment/StatisticsPageFragment.kt b/app/src/main/java/com/casic/smart/town/sanxi/fragment/StatisticsPageFragment.kt
index e84df12..21924de 100644
--- a/app/src/main/java/com/casic/smart/town/sanxi/fragment/StatisticsPageFragment.kt
+++ b/app/src/main/java/com/casic/smart/town/sanxi/fragment/StatisticsPageFragment.kt
@@ -1,10 +1,21 @@
package com.casic.smart.town.sanxi.fragment
+import androidx.lifecycle.ViewModelProvider
import com.casic.smart.town.sanxi.R
+import com.casic.smart.town.sanxi.view.AllWellActivity
+import com.casic.smart.town.sanxi.view.BFWellActivity
+import com.casic.smart.town.sanxi.view.CFWellActivity
+import com.casic.smart.town.sanxi.vm.WellViewModel
+import com.google.android.material.bottomsheet.BottomSheetBehavior
import com.pengxh.kt.lite.base.KotlinBaseFragment
+import com.pengxh.kt.lite.extensions.dp2px
+import com.pengxh.kt.lite.extensions.navigatePageTo
+import kotlinx.android.synthetic.main.fragment_statistics.*
class StatisticsPageFragment : KotlinBaseFragment() {
+ private lateinit var wellViewModel: WellViewModel
+
override fun initLayoutView(): Int = R.layout.fragment_statistics
override fun observeRequestState() {
@@ -16,10 +27,42 @@
}
override fun initData() {
+ //代码设置底部拉升距离
+ val bottomSheetBehavior = BottomSheetBehavior.from(bottomBehaviorLayout)
+ coordinatorLayout.post {
+ bottomSheetBehavior.isFitToContents = false
+ bottomSheetBehavior.halfExpandedRatio = 0.25f
+ bottomSheetBehavior.isHideable = false
+ bottomSheetBehavior.peekHeight = 30f.dp2px(requireContext())
+ }
+ //初始化vm
+ wellViewModel = ViewModelProvider(this)[WellViewModel::class.java]
+ //获取窨井监控数据
+ wellViewModel.countResultModel.observe(this, {
+ cfWellView.text = it["cfWell"]
+ bfWellView.text = it["bfWell"]
+ allWellDataView.text = it["total"]
+ })
}
override fun initEvent() {
+ cfWellView.setOnClickListener {
+ requireContext().navigatePageTo()
+ }
+ bfWellView.setOnClickListener {
+ requireContext().navigatePageTo()
+ }
+
+ allWellDataView.setOnClickListener {
+ requireContext().navigatePageTo()
+ }
+ }
+
+ override fun onResume() {
+ super.onResume()
+ //每次页面切换都需要重新刷新不同状态的窨井数量
+ wellViewModel.countWellByState()
}
}
\ No newline at end of file
diff --git a/app/src/main/java/com/casic/smart/town/sanxi/model/ErrorMessageModel.java b/app/src/main/java/com/casic/smart/town/sanxi/model/ErrorMessageModel.java
new file mode 100644
index 0000000..60546a1
--- /dev/null
+++ b/app/src/main/java/com/casic/smart/town/sanxi/model/ErrorMessageModel.java
@@ -0,0 +1,50 @@
+package com.casic.smart.town.sanxi.model;
+
+public class ErrorMessageModel {
+
+ private int code;
+ private String data;
+ private String exceptionClazz;
+ private String message;
+ private boolean success;
+
+ public int getCode() {
+ return code;
+ }
+
+ public void setCode(int code) {
+ this.code = code;
+ }
+
+ public String getData() {
+ return data;
+ }
+
+ public void setData(String data) {
+ this.data = data;
+ }
+
+ public String getExceptionClazz() {
+ return exceptionClazz;
+ }
+
+ public void setExceptionClazz(String exceptionClazz) {
+ this.exceptionClazz = exceptionClazz;
+ }
+
+ public String getMessage() {
+ return message;
+ }
+
+ public void setMessage(String message) {
+ this.message = message;
+ }
+
+ public boolean isSuccess() {
+ return success;
+ }
+
+ public void setSuccess(boolean success) {
+ this.success = success;
+ }
+}
\ No newline at end of file
diff --git a/app/src/main/java/com/casic/smart/town/sanxi/util/LocaleConstant.kt b/app/src/main/java/com/casic/smart/town/sanxi/util/LocaleConstant.kt
index de61c9a..ab1a36d 100644
--- a/app/src/main/java/com/casic/smart/town/sanxi/util/LocaleConstant.kt
+++ b/app/src/main/java/com/casic/smart/town/sanxi/util/LocaleConstant.kt
@@ -12,4 +12,7 @@
const val PERMISSIONS_CODE = 999
const val PUSH_REGISTER = 2022100101
const val PAGE_LIMIT = 20
+
+ const val DEFAULT_SERVER_CONFIG = "defaultServerConfig"
+ const val DEFAULT_SERVER = "http://111.198.10.15:11308"
}
\ No newline at end of file
diff --git a/app/src/main/java/com/casic/smart/town/sanxi/util/retrofit/RetrofitService.kt b/app/src/main/java/com/casic/smart/town/sanxi/util/retrofit/RetrofitService.kt
new file mode 100644
index 0000000..63db0ec
--- /dev/null
+++ b/app/src/main/java/com/casic/smart/town/sanxi/util/retrofit/RetrofitService.kt
@@ -0,0 +1,12 @@
+package com.casic.smart.town.sanxi.util.retrofit
+
+import retrofit2.http.GET
+
+interface RetrofitService {
+
+ /**
+ * 根据布防状态统计闸井数量接口
+ */
+ @GET("/well/countByBfzt")
+ suspend fun countWellByState(): String
+}
\ No newline at end of file
diff --git a/app/src/main/java/com/casic/smart/town/sanxi/util/retrofit/RetrofitServiceManager.kt b/app/src/main/java/com/casic/smart/town/sanxi/util/retrofit/RetrofitServiceManager.kt
new file mode 100644
index 0000000..46bbf4b
--- /dev/null
+++ b/app/src/main/java/com/casic/smart/town/sanxi/util/retrofit/RetrofitServiceManager.kt
@@ -0,0 +1,23 @@
+package com.casic.smart.town.sanxi.util.retrofit
+
+import com.casic.smart.town.sanxi.util.LocaleConstant
+import com.pengxh.kt.lite.utils.RetrofitFactory
+import com.pengxh.kt.lite.utils.SaveKeyValues
+
+object RetrofitServiceManager {
+
+ private val api by lazy {
+ val defaultValue = SaveKeyValues.getValue(
+ LocaleConstant.DEFAULT_SERVER_CONFIG,
+ LocaleConstant.DEFAULT_SERVER
+ ) as String
+ RetrofitFactory.createRetrofit(defaultValue)
+ }
+
+ /**
+ * 根据布防状态统计闸井数量接口
+ */
+ suspend fun countWellByState(): String {
+ return api.countWellByState()
+ }
+}
\ No newline at end of file
diff --git a/app/src/main/java/com/casic/smart/town/sanxi/view/AllWellActivity.kt b/app/src/main/java/com/casic/smart/town/sanxi/view/AllWellActivity.kt
new file mode 100644
index 0000000..cb0c9e4
--- /dev/null
+++ b/app/src/main/java/com/casic/smart/town/sanxi/view/AllWellActivity.kt
@@ -0,0 +1,25 @@
+package com.casic.smart.town.sanxi.view
+
+import com.casic.smart.town.sanxi.R
+import com.pengxh.kt.lite.base.KotlinBaseActivity
+
+class AllWellActivity : KotlinBaseActivity() {
+
+ override fun initLayoutView(): Int = R.layout.activity_all_well
+
+ override fun observeRequestState() {
+
+ }
+
+ override fun setupTopBarLayout() {
+
+ }
+
+ override fun initData() {
+
+ }
+
+ override fun initEvent() {
+
+ }
+}
\ No newline at end of file
diff --git a/app/src/main/java/com/casic/smart/town/sanxi/view/BFWellActivity.kt b/app/src/main/java/com/casic/smart/town/sanxi/view/BFWellActivity.kt
new file mode 100644
index 0000000..6a43b9e
--- /dev/null
+++ b/app/src/main/java/com/casic/smart/town/sanxi/view/BFWellActivity.kt
@@ -0,0 +1,25 @@
+package com.casic.smart.town.sanxi.view
+
+import com.casic.smart.town.sanxi.R
+import com.pengxh.kt.lite.base.KotlinBaseActivity
+
+class BFWellActivity : KotlinBaseActivity() {
+
+ override fun initLayoutView(): Int = R.layout.activity_bf_well
+
+ override fun observeRequestState() {
+
+ }
+
+ override fun setupTopBarLayout() {
+
+ }
+
+ override fun initData() {
+
+ }
+
+ override fun initEvent() {
+
+ }
+}
\ No newline at end of file
diff --git a/.gitignore b/.gitignore
index 10cfdbf..bf2a5c6 100644
--- a/.gitignore
+++ b/.gitignore
@@ -4,7 +4,8 @@
/.idea
.DS_Store
/build
+/app/build
/captures
.externalNativeBuild
.cxx
-local.properties
+local.properties
\ No newline at end of file
diff --git a/app/build.gradle b/app/build.gradle
index a4cd2ca..6b81499 100644
--- a/app/build.gradle
+++ b/app/build.gradle
@@ -98,4 +98,6 @@
implementation 'org.greenrobot:greendao:3.3.0'
//桌面角标
implementation "me.leolin:ShortcutBadger:1.1.22@aar"
+ //图表
+ implementation 'com.github.PhilJay:MPAndroidChart:v3.1.0'
}
\ No newline at end of file
diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml
index a83c28a..1df917d 100644
--- a/app/src/main/AndroidManifest.xml
+++ b/app/src/main/AndroidManifest.xml
@@ -33,6 +33,9 @@
+
+
+
diff --git a/app/src/main/java/com/casic/smart/town/sanxi/extensions/String.kt b/app/src/main/java/com/casic/smart/town/sanxi/extensions/String.kt
new file mode 100644
index 0000000..d730417
--- /dev/null
+++ b/app/src/main/java/com/casic/smart/town/sanxi/extensions/String.kt
@@ -0,0 +1,20 @@
+package com.casic.smart.town.sanxi.extensions
+
+import com.casic.smart.town.sanxi.model.ErrorMessageModel
+import com.google.gson.Gson
+import com.google.gson.reflect.TypeToken
+import org.json.JSONObject
+
+fun String.separateResponseCode(): Int {
+ if (this.isBlank()) {
+ return 404
+ }
+ return JSONObject(this).getInt("code")
+}
+
+fun String.toErrorMessage(): String {
+ val errorModel = Gson().fromJson(
+ this, object : TypeToken() {}.type
+ )
+ return errorModel.message.toString()
+}
\ No newline at end of file
diff --git a/app/src/main/java/com/casic/smart/town/sanxi/fragment/StatisticsPageFragment.kt b/app/src/main/java/com/casic/smart/town/sanxi/fragment/StatisticsPageFragment.kt
index e84df12..21924de 100644
--- a/app/src/main/java/com/casic/smart/town/sanxi/fragment/StatisticsPageFragment.kt
+++ b/app/src/main/java/com/casic/smart/town/sanxi/fragment/StatisticsPageFragment.kt
@@ -1,10 +1,21 @@
package com.casic.smart.town.sanxi.fragment
+import androidx.lifecycle.ViewModelProvider
import com.casic.smart.town.sanxi.R
+import com.casic.smart.town.sanxi.view.AllWellActivity
+import com.casic.smart.town.sanxi.view.BFWellActivity
+import com.casic.smart.town.sanxi.view.CFWellActivity
+import com.casic.smart.town.sanxi.vm.WellViewModel
+import com.google.android.material.bottomsheet.BottomSheetBehavior
import com.pengxh.kt.lite.base.KotlinBaseFragment
+import com.pengxh.kt.lite.extensions.dp2px
+import com.pengxh.kt.lite.extensions.navigatePageTo
+import kotlinx.android.synthetic.main.fragment_statistics.*
class StatisticsPageFragment : KotlinBaseFragment() {
+ private lateinit var wellViewModel: WellViewModel
+
override fun initLayoutView(): Int = R.layout.fragment_statistics
override fun observeRequestState() {
@@ -16,10 +27,42 @@
}
override fun initData() {
+ //代码设置底部拉升距离
+ val bottomSheetBehavior = BottomSheetBehavior.from(bottomBehaviorLayout)
+ coordinatorLayout.post {
+ bottomSheetBehavior.isFitToContents = false
+ bottomSheetBehavior.halfExpandedRatio = 0.25f
+ bottomSheetBehavior.isHideable = false
+ bottomSheetBehavior.peekHeight = 30f.dp2px(requireContext())
+ }
+ //初始化vm
+ wellViewModel = ViewModelProvider(this)[WellViewModel::class.java]
+ //获取窨井监控数据
+ wellViewModel.countResultModel.observe(this, {
+ cfWellView.text = it["cfWell"]
+ bfWellView.text = it["bfWell"]
+ allWellDataView.text = it["total"]
+ })
}
override fun initEvent() {
+ cfWellView.setOnClickListener {
+ requireContext().navigatePageTo()
+ }
+ bfWellView.setOnClickListener {
+ requireContext().navigatePageTo()
+ }
+
+ allWellDataView.setOnClickListener {
+ requireContext().navigatePageTo()
+ }
+ }
+
+ override fun onResume() {
+ super.onResume()
+ //每次页面切换都需要重新刷新不同状态的窨井数量
+ wellViewModel.countWellByState()
}
}
\ No newline at end of file
diff --git a/app/src/main/java/com/casic/smart/town/sanxi/model/ErrorMessageModel.java b/app/src/main/java/com/casic/smart/town/sanxi/model/ErrorMessageModel.java
new file mode 100644
index 0000000..60546a1
--- /dev/null
+++ b/app/src/main/java/com/casic/smart/town/sanxi/model/ErrorMessageModel.java
@@ -0,0 +1,50 @@
+package com.casic.smart.town.sanxi.model;
+
+public class ErrorMessageModel {
+
+ private int code;
+ private String data;
+ private String exceptionClazz;
+ private String message;
+ private boolean success;
+
+ public int getCode() {
+ return code;
+ }
+
+ public void setCode(int code) {
+ this.code = code;
+ }
+
+ public String getData() {
+ return data;
+ }
+
+ public void setData(String data) {
+ this.data = data;
+ }
+
+ public String getExceptionClazz() {
+ return exceptionClazz;
+ }
+
+ public void setExceptionClazz(String exceptionClazz) {
+ this.exceptionClazz = exceptionClazz;
+ }
+
+ public String getMessage() {
+ return message;
+ }
+
+ public void setMessage(String message) {
+ this.message = message;
+ }
+
+ public boolean isSuccess() {
+ return success;
+ }
+
+ public void setSuccess(boolean success) {
+ this.success = success;
+ }
+}
\ No newline at end of file
diff --git a/app/src/main/java/com/casic/smart/town/sanxi/util/LocaleConstant.kt b/app/src/main/java/com/casic/smart/town/sanxi/util/LocaleConstant.kt
index de61c9a..ab1a36d 100644
--- a/app/src/main/java/com/casic/smart/town/sanxi/util/LocaleConstant.kt
+++ b/app/src/main/java/com/casic/smart/town/sanxi/util/LocaleConstant.kt
@@ -12,4 +12,7 @@
const val PERMISSIONS_CODE = 999
const val PUSH_REGISTER = 2022100101
const val PAGE_LIMIT = 20
+
+ const val DEFAULT_SERVER_CONFIG = "defaultServerConfig"
+ const val DEFAULT_SERVER = "http://111.198.10.15:11308"
}
\ No newline at end of file
diff --git a/app/src/main/java/com/casic/smart/town/sanxi/util/retrofit/RetrofitService.kt b/app/src/main/java/com/casic/smart/town/sanxi/util/retrofit/RetrofitService.kt
new file mode 100644
index 0000000..63db0ec
--- /dev/null
+++ b/app/src/main/java/com/casic/smart/town/sanxi/util/retrofit/RetrofitService.kt
@@ -0,0 +1,12 @@
+package com.casic.smart.town.sanxi.util.retrofit
+
+import retrofit2.http.GET
+
+interface RetrofitService {
+
+ /**
+ * 根据布防状态统计闸井数量接口
+ */
+ @GET("/well/countByBfzt")
+ suspend fun countWellByState(): String
+}
\ No newline at end of file
diff --git a/app/src/main/java/com/casic/smart/town/sanxi/util/retrofit/RetrofitServiceManager.kt b/app/src/main/java/com/casic/smart/town/sanxi/util/retrofit/RetrofitServiceManager.kt
new file mode 100644
index 0000000..46bbf4b
--- /dev/null
+++ b/app/src/main/java/com/casic/smart/town/sanxi/util/retrofit/RetrofitServiceManager.kt
@@ -0,0 +1,23 @@
+package com.casic.smart.town.sanxi.util.retrofit
+
+import com.casic.smart.town.sanxi.util.LocaleConstant
+import com.pengxh.kt.lite.utils.RetrofitFactory
+import com.pengxh.kt.lite.utils.SaveKeyValues
+
+object RetrofitServiceManager {
+
+ private val api by lazy {
+ val defaultValue = SaveKeyValues.getValue(
+ LocaleConstant.DEFAULT_SERVER_CONFIG,
+ LocaleConstant.DEFAULT_SERVER
+ ) as String
+ RetrofitFactory.createRetrofit(defaultValue)
+ }
+
+ /**
+ * 根据布防状态统计闸井数量接口
+ */
+ suspend fun countWellByState(): String {
+ return api.countWellByState()
+ }
+}
\ No newline at end of file
diff --git a/app/src/main/java/com/casic/smart/town/sanxi/view/AllWellActivity.kt b/app/src/main/java/com/casic/smart/town/sanxi/view/AllWellActivity.kt
new file mode 100644
index 0000000..cb0c9e4
--- /dev/null
+++ b/app/src/main/java/com/casic/smart/town/sanxi/view/AllWellActivity.kt
@@ -0,0 +1,25 @@
+package com.casic.smart.town.sanxi.view
+
+import com.casic.smart.town.sanxi.R
+import com.pengxh.kt.lite.base.KotlinBaseActivity
+
+class AllWellActivity : KotlinBaseActivity() {
+
+ override fun initLayoutView(): Int = R.layout.activity_all_well
+
+ override fun observeRequestState() {
+
+ }
+
+ override fun setupTopBarLayout() {
+
+ }
+
+ override fun initData() {
+
+ }
+
+ override fun initEvent() {
+
+ }
+}
\ No newline at end of file
diff --git a/app/src/main/java/com/casic/smart/town/sanxi/view/BFWellActivity.kt b/app/src/main/java/com/casic/smart/town/sanxi/view/BFWellActivity.kt
new file mode 100644
index 0000000..6a43b9e
--- /dev/null
+++ b/app/src/main/java/com/casic/smart/town/sanxi/view/BFWellActivity.kt
@@ -0,0 +1,25 @@
+package com.casic.smart.town.sanxi.view
+
+import com.casic.smart.town.sanxi.R
+import com.pengxh.kt.lite.base.KotlinBaseActivity
+
+class BFWellActivity : KotlinBaseActivity() {
+
+ override fun initLayoutView(): Int = R.layout.activity_bf_well
+
+ override fun observeRequestState() {
+
+ }
+
+ override fun setupTopBarLayout() {
+
+ }
+
+ override fun initData() {
+
+ }
+
+ override fun initEvent() {
+
+ }
+}
\ No newline at end of file
diff --git a/app/src/main/java/com/casic/smart/town/sanxi/view/CFWellActivity.kt b/app/src/main/java/com/casic/smart/town/sanxi/view/CFWellActivity.kt
new file mode 100644
index 0000000..bc72674
--- /dev/null
+++ b/app/src/main/java/com/casic/smart/town/sanxi/view/CFWellActivity.kt
@@ -0,0 +1,25 @@
+package com.casic.smart.town.sanxi.view
+
+import com.casic.smart.town.sanxi.R
+import com.pengxh.kt.lite.base.KotlinBaseActivity
+
+class CFWellActivity : KotlinBaseActivity() {
+
+ override fun initLayoutView(): Int = R.layout.activity_cf_well
+
+ override fun observeRequestState() {
+
+ }
+
+ override fun setupTopBarLayout() {
+
+ }
+
+ override fun initData() {
+
+ }
+
+ override fun initEvent() {
+
+ }
+}
\ No newline at end of file
diff --git a/.gitignore b/.gitignore
index 10cfdbf..bf2a5c6 100644
--- a/.gitignore
+++ b/.gitignore
@@ -4,7 +4,8 @@
/.idea
.DS_Store
/build
+/app/build
/captures
.externalNativeBuild
.cxx
-local.properties
+local.properties
\ No newline at end of file
diff --git a/app/build.gradle b/app/build.gradle
index a4cd2ca..6b81499 100644
--- a/app/build.gradle
+++ b/app/build.gradle
@@ -98,4 +98,6 @@
implementation 'org.greenrobot:greendao:3.3.0'
//桌面角标
implementation "me.leolin:ShortcutBadger:1.1.22@aar"
+ //图表
+ implementation 'com.github.PhilJay:MPAndroidChart:v3.1.0'
}
\ No newline at end of file
diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml
index a83c28a..1df917d 100644
--- a/app/src/main/AndroidManifest.xml
+++ b/app/src/main/AndroidManifest.xml
@@ -33,6 +33,9 @@
+
+
+
diff --git a/app/src/main/java/com/casic/smart/town/sanxi/extensions/String.kt b/app/src/main/java/com/casic/smart/town/sanxi/extensions/String.kt
new file mode 100644
index 0000000..d730417
--- /dev/null
+++ b/app/src/main/java/com/casic/smart/town/sanxi/extensions/String.kt
@@ -0,0 +1,20 @@
+package com.casic.smart.town.sanxi.extensions
+
+import com.casic.smart.town.sanxi.model.ErrorMessageModel
+import com.google.gson.Gson
+import com.google.gson.reflect.TypeToken
+import org.json.JSONObject
+
+fun String.separateResponseCode(): Int {
+ if (this.isBlank()) {
+ return 404
+ }
+ return JSONObject(this).getInt("code")
+}
+
+fun String.toErrorMessage(): String {
+ val errorModel = Gson().fromJson(
+ this, object : TypeToken() {}.type
+ )
+ return errorModel.message.toString()
+}
\ No newline at end of file
diff --git a/app/src/main/java/com/casic/smart/town/sanxi/fragment/StatisticsPageFragment.kt b/app/src/main/java/com/casic/smart/town/sanxi/fragment/StatisticsPageFragment.kt
index e84df12..21924de 100644
--- a/app/src/main/java/com/casic/smart/town/sanxi/fragment/StatisticsPageFragment.kt
+++ b/app/src/main/java/com/casic/smart/town/sanxi/fragment/StatisticsPageFragment.kt
@@ -1,10 +1,21 @@
package com.casic.smart.town.sanxi.fragment
+import androidx.lifecycle.ViewModelProvider
import com.casic.smart.town.sanxi.R
+import com.casic.smart.town.sanxi.view.AllWellActivity
+import com.casic.smart.town.sanxi.view.BFWellActivity
+import com.casic.smart.town.sanxi.view.CFWellActivity
+import com.casic.smart.town.sanxi.vm.WellViewModel
+import com.google.android.material.bottomsheet.BottomSheetBehavior
import com.pengxh.kt.lite.base.KotlinBaseFragment
+import com.pengxh.kt.lite.extensions.dp2px
+import com.pengxh.kt.lite.extensions.navigatePageTo
+import kotlinx.android.synthetic.main.fragment_statistics.*
class StatisticsPageFragment : KotlinBaseFragment() {
+ private lateinit var wellViewModel: WellViewModel
+
override fun initLayoutView(): Int = R.layout.fragment_statistics
override fun observeRequestState() {
@@ -16,10 +27,42 @@
}
override fun initData() {
+ //代码设置底部拉升距离
+ val bottomSheetBehavior = BottomSheetBehavior.from(bottomBehaviorLayout)
+ coordinatorLayout.post {
+ bottomSheetBehavior.isFitToContents = false
+ bottomSheetBehavior.halfExpandedRatio = 0.25f
+ bottomSheetBehavior.isHideable = false
+ bottomSheetBehavior.peekHeight = 30f.dp2px(requireContext())
+ }
+ //初始化vm
+ wellViewModel = ViewModelProvider(this)[WellViewModel::class.java]
+ //获取窨井监控数据
+ wellViewModel.countResultModel.observe(this, {
+ cfWellView.text = it["cfWell"]
+ bfWellView.text = it["bfWell"]
+ allWellDataView.text = it["total"]
+ })
}
override fun initEvent() {
+ cfWellView.setOnClickListener {
+ requireContext().navigatePageTo()
+ }
+ bfWellView.setOnClickListener {
+ requireContext().navigatePageTo()
+ }
+
+ allWellDataView.setOnClickListener {
+ requireContext().navigatePageTo()
+ }
+ }
+
+ override fun onResume() {
+ super.onResume()
+ //每次页面切换都需要重新刷新不同状态的窨井数量
+ wellViewModel.countWellByState()
}
}
\ No newline at end of file
diff --git a/app/src/main/java/com/casic/smart/town/sanxi/model/ErrorMessageModel.java b/app/src/main/java/com/casic/smart/town/sanxi/model/ErrorMessageModel.java
new file mode 100644
index 0000000..60546a1
--- /dev/null
+++ b/app/src/main/java/com/casic/smart/town/sanxi/model/ErrorMessageModel.java
@@ -0,0 +1,50 @@
+package com.casic.smart.town.sanxi.model;
+
+public class ErrorMessageModel {
+
+ private int code;
+ private String data;
+ private String exceptionClazz;
+ private String message;
+ private boolean success;
+
+ public int getCode() {
+ return code;
+ }
+
+ public void setCode(int code) {
+ this.code = code;
+ }
+
+ public String getData() {
+ return data;
+ }
+
+ public void setData(String data) {
+ this.data = data;
+ }
+
+ public String getExceptionClazz() {
+ return exceptionClazz;
+ }
+
+ public void setExceptionClazz(String exceptionClazz) {
+ this.exceptionClazz = exceptionClazz;
+ }
+
+ public String getMessage() {
+ return message;
+ }
+
+ public void setMessage(String message) {
+ this.message = message;
+ }
+
+ public boolean isSuccess() {
+ return success;
+ }
+
+ public void setSuccess(boolean success) {
+ this.success = success;
+ }
+}
\ No newline at end of file
diff --git a/app/src/main/java/com/casic/smart/town/sanxi/util/LocaleConstant.kt b/app/src/main/java/com/casic/smart/town/sanxi/util/LocaleConstant.kt
index de61c9a..ab1a36d 100644
--- a/app/src/main/java/com/casic/smart/town/sanxi/util/LocaleConstant.kt
+++ b/app/src/main/java/com/casic/smart/town/sanxi/util/LocaleConstant.kt
@@ -12,4 +12,7 @@
const val PERMISSIONS_CODE = 999
const val PUSH_REGISTER = 2022100101
const val PAGE_LIMIT = 20
+
+ const val DEFAULT_SERVER_CONFIG = "defaultServerConfig"
+ const val DEFAULT_SERVER = "http://111.198.10.15:11308"
}
\ No newline at end of file
diff --git a/app/src/main/java/com/casic/smart/town/sanxi/util/retrofit/RetrofitService.kt b/app/src/main/java/com/casic/smart/town/sanxi/util/retrofit/RetrofitService.kt
new file mode 100644
index 0000000..63db0ec
--- /dev/null
+++ b/app/src/main/java/com/casic/smart/town/sanxi/util/retrofit/RetrofitService.kt
@@ -0,0 +1,12 @@
+package com.casic.smart.town.sanxi.util.retrofit
+
+import retrofit2.http.GET
+
+interface RetrofitService {
+
+ /**
+ * 根据布防状态统计闸井数量接口
+ */
+ @GET("/well/countByBfzt")
+ suspend fun countWellByState(): String
+}
\ No newline at end of file
diff --git a/app/src/main/java/com/casic/smart/town/sanxi/util/retrofit/RetrofitServiceManager.kt b/app/src/main/java/com/casic/smart/town/sanxi/util/retrofit/RetrofitServiceManager.kt
new file mode 100644
index 0000000..46bbf4b
--- /dev/null
+++ b/app/src/main/java/com/casic/smart/town/sanxi/util/retrofit/RetrofitServiceManager.kt
@@ -0,0 +1,23 @@
+package com.casic.smart.town.sanxi.util.retrofit
+
+import com.casic.smart.town.sanxi.util.LocaleConstant
+import com.pengxh.kt.lite.utils.RetrofitFactory
+import com.pengxh.kt.lite.utils.SaveKeyValues
+
+object RetrofitServiceManager {
+
+ private val api by lazy {
+ val defaultValue = SaveKeyValues.getValue(
+ LocaleConstant.DEFAULT_SERVER_CONFIG,
+ LocaleConstant.DEFAULT_SERVER
+ ) as String
+ RetrofitFactory.createRetrofit(defaultValue)
+ }
+
+ /**
+ * 根据布防状态统计闸井数量接口
+ */
+ suspend fun countWellByState(): String {
+ return api.countWellByState()
+ }
+}
\ No newline at end of file
diff --git a/app/src/main/java/com/casic/smart/town/sanxi/view/AllWellActivity.kt b/app/src/main/java/com/casic/smart/town/sanxi/view/AllWellActivity.kt
new file mode 100644
index 0000000..cb0c9e4
--- /dev/null
+++ b/app/src/main/java/com/casic/smart/town/sanxi/view/AllWellActivity.kt
@@ -0,0 +1,25 @@
+package com.casic.smart.town.sanxi.view
+
+import com.casic.smart.town.sanxi.R
+import com.pengxh.kt.lite.base.KotlinBaseActivity
+
+class AllWellActivity : KotlinBaseActivity() {
+
+ override fun initLayoutView(): Int = R.layout.activity_all_well
+
+ override fun observeRequestState() {
+
+ }
+
+ override fun setupTopBarLayout() {
+
+ }
+
+ override fun initData() {
+
+ }
+
+ override fun initEvent() {
+
+ }
+}
\ No newline at end of file
diff --git a/app/src/main/java/com/casic/smart/town/sanxi/view/BFWellActivity.kt b/app/src/main/java/com/casic/smart/town/sanxi/view/BFWellActivity.kt
new file mode 100644
index 0000000..6a43b9e
--- /dev/null
+++ b/app/src/main/java/com/casic/smart/town/sanxi/view/BFWellActivity.kt
@@ -0,0 +1,25 @@
+package com.casic.smart.town.sanxi.view
+
+import com.casic.smart.town.sanxi.R
+import com.pengxh.kt.lite.base.KotlinBaseActivity
+
+class BFWellActivity : KotlinBaseActivity() {
+
+ override fun initLayoutView(): Int = R.layout.activity_bf_well
+
+ override fun observeRequestState() {
+
+ }
+
+ override fun setupTopBarLayout() {
+
+ }
+
+ override fun initData() {
+
+ }
+
+ override fun initEvent() {
+
+ }
+}
\ No newline at end of file
diff --git a/app/src/main/java/com/casic/smart/town/sanxi/view/CFWellActivity.kt b/app/src/main/java/com/casic/smart/town/sanxi/view/CFWellActivity.kt
new file mode 100644
index 0000000..bc72674
--- /dev/null
+++ b/app/src/main/java/com/casic/smart/town/sanxi/view/CFWellActivity.kt
@@ -0,0 +1,25 @@
+package com.casic.smart.town.sanxi.view
+
+import com.casic.smart.town.sanxi.R
+import com.pengxh.kt.lite.base.KotlinBaseActivity
+
+class CFWellActivity : KotlinBaseActivity() {
+
+ override fun initLayoutView(): Int = R.layout.activity_cf_well
+
+ override fun observeRequestState() {
+
+ }
+
+ override fun setupTopBarLayout() {
+
+ }
+
+ override fun initData() {
+
+ }
+
+ override fun initEvent() {
+
+ }
+}
\ No newline at end of file
diff --git a/app/src/main/java/com/casic/smart/town/sanxi/vm/WellViewModel.kt b/app/src/main/java/com/casic/smart/town/sanxi/vm/WellViewModel.kt
new file mode 100644
index 0000000..c7d0219
--- /dev/null
+++ b/app/src/main/java/com/casic/smart/town/sanxi/vm/WellViewModel.kt
@@ -0,0 +1,43 @@
+package com.casic.smart.town.sanxi.vm
+
+import androidx.lifecycle.MutableLiveData
+import com.casic.smart.town.sanxi.base.BaseApplication
+import com.casic.smart.town.sanxi.extensions.separateResponseCode
+import com.casic.smart.town.sanxi.extensions.toErrorMessage
+import com.casic.smart.town.sanxi.util.retrofit.RetrofitServiceManager
+import com.pengxh.kt.lite.extensions.launch
+import com.pengxh.kt.lite.extensions.show
+import com.pengxh.kt.lite.vm.BaseViewModel
+import org.json.JSONObject
+
+class WellViewModel : BaseViewModel() {
+
+ val countResultModel = MutableLiveData>()
+
+ fun countWellByState() = launch({
+ val response = RetrofitServiceManager.countWellByState()
+ val responseCode = response.separateResponseCode()
+ if (responseCode == 200) {
+ val map = HashMap(3)
+
+ val jsonObject = JSONObject(response)
+ val data = jsonObject.getJSONObject("data")
+ map["bfWell"] = convertString(data.getString("bfWell"))
+ map["cfWell"] = convertString(data.getString("cfWell"))
+ map["total"] = convertString(data.getString("total"))
+ countResultModel.value = map
+ } else {
+ response.toErrorMessage().show(BaseApplication.obtainInstance())
+ }
+ }, {
+ it.printStackTrace()
+ })
+
+ private fun convertString(value: String): String {
+ return if (value == "") {
+ "0"
+ } else {
+ value
+ }
+ }
+}
\ No newline at end of file
diff --git a/.gitignore b/.gitignore
index 10cfdbf..bf2a5c6 100644
--- a/.gitignore
+++ b/.gitignore
@@ -4,7 +4,8 @@
/.idea
.DS_Store
/build
+/app/build
/captures
.externalNativeBuild
.cxx
-local.properties
+local.properties
\ No newline at end of file
diff --git a/app/build.gradle b/app/build.gradle
index a4cd2ca..6b81499 100644
--- a/app/build.gradle
+++ b/app/build.gradle
@@ -98,4 +98,6 @@
implementation 'org.greenrobot:greendao:3.3.0'
//桌面角标
implementation "me.leolin:ShortcutBadger:1.1.22@aar"
+ //图表
+ implementation 'com.github.PhilJay:MPAndroidChart:v3.1.0'
}
\ No newline at end of file
diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml
index a83c28a..1df917d 100644
--- a/app/src/main/AndroidManifest.xml
+++ b/app/src/main/AndroidManifest.xml
@@ -33,6 +33,9 @@
+
+
+
diff --git a/app/src/main/java/com/casic/smart/town/sanxi/extensions/String.kt b/app/src/main/java/com/casic/smart/town/sanxi/extensions/String.kt
new file mode 100644
index 0000000..d730417
--- /dev/null
+++ b/app/src/main/java/com/casic/smart/town/sanxi/extensions/String.kt
@@ -0,0 +1,20 @@
+package com.casic.smart.town.sanxi.extensions
+
+import com.casic.smart.town.sanxi.model.ErrorMessageModel
+import com.google.gson.Gson
+import com.google.gson.reflect.TypeToken
+import org.json.JSONObject
+
+fun String.separateResponseCode(): Int {
+ if (this.isBlank()) {
+ return 404
+ }
+ return JSONObject(this).getInt("code")
+}
+
+fun String.toErrorMessage(): String {
+ val errorModel = Gson().fromJson(
+ this, object : TypeToken() {}.type
+ )
+ return errorModel.message.toString()
+}
\ No newline at end of file
diff --git a/app/src/main/java/com/casic/smart/town/sanxi/fragment/StatisticsPageFragment.kt b/app/src/main/java/com/casic/smart/town/sanxi/fragment/StatisticsPageFragment.kt
index e84df12..21924de 100644
--- a/app/src/main/java/com/casic/smart/town/sanxi/fragment/StatisticsPageFragment.kt
+++ b/app/src/main/java/com/casic/smart/town/sanxi/fragment/StatisticsPageFragment.kt
@@ -1,10 +1,21 @@
package com.casic.smart.town.sanxi.fragment
+import androidx.lifecycle.ViewModelProvider
import com.casic.smart.town.sanxi.R
+import com.casic.smart.town.sanxi.view.AllWellActivity
+import com.casic.smart.town.sanxi.view.BFWellActivity
+import com.casic.smart.town.sanxi.view.CFWellActivity
+import com.casic.smart.town.sanxi.vm.WellViewModel
+import com.google.android.material.bottomsheet.BottomSheetBehavior
import com.pengxh.kt.lite.base.KotlinBaseFragment
+import com.pengxh.kt.lite.extensions.dp2px
+import com.pengxh.kt.lite.extensions.navigatePageTo
+import kotlinx.android.synthetic.main.fragment_statistics.*
class StatisticsPageFragment : KotlinBaseFragment() {
+ private lateinit var wellViewModel: WellViewModel
+
override fun initLayoutView(): Int = R.layout.fragment_statistics
override fun observeRequestState() {
@@ -16,10 +27,42 @@
}
override fun initData() {
+ //代码设置底部拉升距离
+ val bottomSheetBehavior = BottomSheetBehavior.from(bottomBehaviorLayout)
+ coordinatorLayout.post {
+ bottomSheetBehavior.isFitToContents = false
+ bottomSheetBehavior.halfExpandedRatio = 0.25f
+ bottomSheetBehavior.isHideable = false
+ bottomSheetBehavior.peekHeight = 30f.dp2px(requireContext())
+ }
+ //初始化vm
+ wellViewModel = ViewModelProvider(this)[WellViewModel::class.java]
+ //获取窨井监控数据
+ wellViewModel.countResultModel.observe(this, {
+ cfWellView.text = it["cfWell"]
+ bfWellView.text = it["bfWell"]
+ allWellDataView.text = it["total"]
+ })
}
override fun initEvent() {
+ cfWellView.setOnClickListener {
+ requireContext().navigatePageTo()
+ }
+ bfWellView.setOnClickListener {
+ requireContext().navigatePageTo()
+ }
+
+ allWellDataView.setOnClickListener {
+ requireContext().navigatePageTo()
+ }
+ }
+
+ override fun onResume() {
+ super.onResume()
+ //每次页面切换都需要重新刷新不同状态的窨井数量
+ wellViewModel.countWellByState()
}
}
\ No newline at end of file
diff --git a/app/src/main/java/com/casic/smart/town/sanxi/model/ErrorMessageModel.java b/app/src/main/java/com/casic/smart/town/sanxi/model/ErrorMessageModel.java
new file mode 100644
index 0000000..60546a1
--- /dev/null
+++ b/app/src/main/java/com/casic/smart/town/sanxi/model/ErrorMessageModel.java
@@ -0,0 +1,50 @@
+package com.casic.smart.town.sanxi.model;
+
+public class ErrorMessageModel {
+
+ private int code;
+ private String data;
+ private String exceptionClazz;
+ private String message;
+ private boolean success;
+
+ public int getCode() {
+ return code;
+ }
+
+ public void setCode(int code) {
+ this.code = code;
+ }
+
+ public String getData() {
+ return data;
+ }
+
+ public void setData(String data) {
+ this.data = data;
+ }
+
+ public String getExceptionClazz() {
+ return exceptionClazz;
+ }
+
+ public void setExceptionClazz(String exceptionClazz) {
+ this.exceptionClazz = exceptionClazz;
+ }
+
+ public String getMessage() {
+ return message;
+ }
+
+ public void setMessage(String message) {
+ this.message = message;
+ }
+
+ public boolean isSuccess() {
+ return success;
+ }
+
+ public void setSuccess(boolean success) {
+ this.success = success;
+ }
+}
\ No newline at end of file
diff --git a/app/src/main/java/com/casic/smart/town/sanxi/util/LocaleConstant.kt b/app/src/main/java/com/casic/smart/town/sanxi/util/LocaleConstant.kt
index de61c9a..ab1a36d 100644
--- a/app/src/main/java/com/casic/smart/town/sanxi/util/LocaleConstant.kt
+++ b/app/src/main/java/com/casic/smart/town/sanxi/util/LocaleConstant.kt
@@ -12,4 +12,7 @@
const val PERMISSIONS_CODE = 999
const val PUSH_REGISTER = 2022100101
const val PAGE_LIMIT = 20
+
+ const val DEFAULT_SERVER_CONFIG = "defaultServerConfig"
+ const val DEFAULT_SERVER = "http://111.198.10.15:11308"
}
\ No newline at end of file
diff --git a/app/src/main/java/com/casic/smart/town/sanxi/util/retrofit/RetrofitService.kt b/app/src/main/java/com/casic/smart/town/sanxi/util/retrofit/RetrofitService.kt
new file mode 100644
index 0000000..63db0ec
--- /dev/null
+++ b/app/src/main/java/com/casic/smart/town/sanxi/util/retrofit/RetrofitService.kt
@@ -0,0 +1,12 @@
+package com.casic.smart.town.sanxi.util.retrofit
+
+import retrofit2.http.GET
+
+interface RetrofitService {
+
+ /**
+ * 根据布防状态统计闸井数量接口
+ */
+ @GET("/well/countByBfzt")
+ suspend fun countWellByState(): String
+}
\ No newline at end of file
diff --git a/app/src/main/java/com/casic/smart/town/sanxi/util/retrofit/RetrofitServiceManager.kt b/app/src/main/java/com/casic/smart/town/sanxi/util/retrofit/RetrofitServiceManager.kt
new file mode 100644
index 0000000..46bbf4b
--- /dev/null
+++ b/app/src/main/java/com/casic/smart/town/sanxi/util/retrofit/RetrofitServiceManager.kt
@@ -0,0 +1,23 @@
+package com.casic.smart.town.sanxi.util.retrofit
+
+import com.casic.smart.town.sanxi.util.LocaleConstant
+import com.pengxh.kt.lite.utils.RetrofitFactory
+import com.pengxh.kt.lite.utils.SaveKeyValues
+
+object RetrofitServiceManager {
+
+ private val api by lazy {
+ val defaultValue = SaveKeyValues.getValue(
+ LocaleConstant.DEFAULT_SERVER_CONFIG,
+ LocaleConstant.DEFAULT_SERVER
+ ) as String
+ RetrofitFactory.createRetrofit(defaultValue)
+ }
+
+ /**
+ * 根据布防状态统计闸井数量接口
+ */
+ suspend fun countWellByState(): String {
+ return api.countWellByState()
+ }
+}
\ No newline at end of file
diff --git a/app/src/main/java/com/casic/smart/town/sanxi/view/AllWellActivity.kt b/app/src/main/java/com/casic/smart/town/sanxi/view/AllWellActivity.kt
new file mode 100644
index 0000000..cb0c9e4
--- /dev/null
+++ b/app/src/main/java/com/casic/smart/town/sanxi/view/AllWellActivity.kt
@@ -0,0 +1,25 @@
+package com.casic.smart.town.sanxi.view
+
+import com.casic.smart.town.sanxi.R
+import com.pengxh.kt.lite.base.KotlinBaseActivity
+
+class AllWellActivity : KotlinBaseActivity() {
+
+ override fun initLayoutView(): Int = R.layout.activity_all_well
+
+ override fun observeRequestState() {
+
+ }
+
+ override fun setupTopBarLayout() {
+
+ }
+
+ override fun initData() {
+
+ }
+
+ override fun initEvent() {
+
+ }
+}
\ No newline at end of file
diff --git a/app/src/main/java/com/casic/smart/town/sanxi/view/BFWellActivity.kt b/app/src/main/java/com/casic/smart/town/sanxi/view/BFWellActivity.kt
new file mode 100644
index 0000000..6a43b9e
--- /dev/null
+++ b/app/src/main/java/com/casic/smart/town/sanxi/view/BFWellActivity.kt
@@ -0,0 +1,25 @@
+package com.casic.smart.town.sanxi.view
+
+import com.casic.smart.town.sanxi.R
+import com.pengxh.kt.lite.base.KotlinBaseActivity
+
+class BFWellActivity : KotlinBaseActivity() {
+
+ override fun initLayoutView(): Int = R.layout.activity_bf_well
+
+ override fun observeRequestState() {
+
+ }
+
+ override fun setupTopBarLayout() {
+
+ }
+
+ override fun initData() {
+
+ }
+
+ override fun initEvent() {
+
+ }
+}
\ No newline at end of file
diff --git a/app/src/main/java/com/casic/smart/town/sanxi/view/CFWellActivity.kt b/app/src/main/java/com/casic/smart/town/sanxi/view/CFWellActivity.kt
new file mode 100644
index 0000000..bc72674
--- /dev/null
+++ b/app/src/main/java/com/casic/smart/town/sanxi/view/CFWellActivity.kt
@@ -0,0 +1,25 @@
+package com.casic.smart.town.sanxi.view
+
+import com.casic.smart.town.sanxi.R
+import com.pengxh.kt.lite.base.KotlinBaseActivity
+
+class CFWellActivity : KotlinBaseActivity() {
+
+ override fun initLayoutView(): Int = R.layout.activity_cf_well
+
+ override fun observeRequestState() {
+
+ }
+
+ override fun setupTopBarLayout() {
+
+ }
+
+ override fun initData() {
+
+ }
+
+ override fun initEvent() {
+
+ }
+}
\ No newline at end of file
diff --git a/app/src/main/java/com/casic/smart/town/sanxi/vm/WellViewModel.kt b/app/src/main/java/com/casic/smart/town/sanxi/vm/WellViewModel.kt
new file mode 100644
index 0000000..c7d0219
--- /dev/null
+++ b/app/src/main/java/com/casic/smart/town/sanxi/vm/WellViewModel.kt
@@ -0,0 +1,43 @@
+package com.casic.smart.town.sanxi.vm
+
+import androidx.lifecycle.MutableLiveData
+import com.casic.smart.town.sanxi.base.BaseApplication
+import com.casic.smart.town.sanxi.extensions.separateResponseCode
+import com.casic.smart.town.sanxi.extensions.toErrorMessage
+import com.casic.smart.town.sanxi.util.retrofit.RetrofitServiceManager
+import com.pengxh.kt.lite.extensions.launch
+import com.pengxh.kt.lite.extensions.show
+import com.pengxh.kt.lite.vm.BaseViewModel
+import org.json.JSONObject
+
+class WellViewModel : BaseViewModel() {
+
+ val countResultModel = MutableLiveData>()
+
+ fun countWellByState() = launch({
+ val response = RetrofitServiceManager.countWellByState()
+ val responseCode = response.separateResponseCode()
+ if (responseCode == 200) {
+ val map = HashMap(3)
+
+ val jsonObject = JSONObject(response)
+ val data = jsonObject.getJSONObject("data")
+ map["bfWell"] = convertString(data.getString("bfWell"))
+ map["cfWell"] = convertString(data.getString("cfWell"))
+ map["total"] = convertString(data.getString("total"))
+ countResultModel.value = map
+ } else {
+ response.toErrorMessage().show(BaseApplication.obtainInstance())
+ }
+ }, {
+ it.printStackTrace()
+ })
+
+ private fun convertString(value: String): String {
+ return if (value == "") {
+ "0"
+ } else {
+ value
+ }
+ }
+}
\ No newline at end of file
diff --git a/app/src/main/res/drawable/bg_solid_layout_white_radius_10.xml b/app/src/main/res/drawable/bg_solid_layout_white_radius_10.xml
new file mode 100644
index 0000000..f00d59c
--- /dev/null
+++ b/app/src/main/res/drawable/bg_solid_layout_white_radius_10.xml
@@ -0,0 +1,8 @@
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/.gitignore b/.gitignore
index 10cfdbf..bf2a5c6 100644
--- a/.gitignore
+++ b/.gitignore
@@ -4,7 +4,8 @@
/.idea
.DS_Store
/build
+/app/build
/captures
.externalNativeBuild
.cxx
-local.properties
+local.properties
\ No newline at end of file
diff --git a/app/build.gradle b/app/build.gradle
index a4cd2ca..6b81499 100644
--- a/app/build.gradle
+++ b/app/build.gradle
@@ -98,4 +98,6 @@
implementation 'org.greenrobot:greendao:3.3.0'
//桌面角标
implementation "me.leolin:ShortcutBadger:1.1.22@aar"
+ //图表
+ implementation 'com.github.PhilJay:MPAndroidChart:v3.1.0'
}
\ No newline at end of file
diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml
index a83c28a..1df917d 100644
--- a/app/src/main/AndroidManifest.xml
+++ b/app/src/main/AndroidManifest.xml
@@ -33,6 +33,9 @@
+
+
+
diff --git a/app/src/main/java/com/casic/smart/town/sanxi/extensions/String.kt b/app/src/main/java/com/casic/smart/town/sanxi/extensions/String.kt
new file mode 100644
index 0000000..d730417
--- /dev/null
+++ b/app/src/main/java/com/casic/smart/town/sanxi/extensions/String.kt
@@ -0,0 +1,20 @@
+package com.casic.smart.town.sanxi.extensions
+
+import com.casic.smart.town.sanxi.model.ErrorMessageModel
+import com.google.gson.Gson
+import com.google.gson.reflect.TypeToken
+import org.json.JSONObject
+
+fun String.separateResponseCode(): Int {
+ if (this.isBlank()) {
+ return 404
+ }
+ return JSONObject(this).getInt("code")
+}
+
+fun String.toErrorMessage(): String {
+ val errorModel = Gson().fromJson(
+ this, object : TypeToken() {}.type
+ )
+ return errorModel.message.toString()
+}
\ No newline at end of file
diff --git a/app/src/main/java/com/casic/smart/town/sanxi/fragment/StatisticsPageFragment.kt b/app/src/main/java/com/casic/smart/town/sanxi/fragment/StatisticsPageFragment.kt
index e84df12..21924de 100644
--- a/app/src/main/java/com/casic/smart/town/sanxi/fragment/StatisticsPageFragment.kt
+++ b/app/src/main/java/com/casic/smart/town/sanxi/fragment/StatisticsPageFragment.kt
@@ -1,10 +1,21 @@
package com.casic.smart.town.sanxi.fragment
+import androidx.lifecycle.ViewModelProvider
import com.casic.smart.town.sanxi.R
+import com.casic.smart.town.sanxi.view.AllWellActivity
+import com.casic.smart.town.sanxi.view.BFWellActivity
+import com.casic.smart.town.sanxi.view.CFWellActivity
+import com.casic.smart.town.sanxi.vm.WellViewModel
+import com.google.android.material.bottomsheet.BottomSheetBehavior
import com.pengxh.kt.lite.base.KotlinBaseFragment
+import com.pengxh.kt.lite.extensions.dp2px
+import com.pengxh.kt.lite.extensions.navigatePageTo
+import kotlinx.android.synthetic.main.fragment_statistics.*
class StatisticsPageFragment : KotlinBaseFragment() {
+ private lateinit var wellViewModel: WellViewModel
+
override fun initLayoutView(): Int = R.layout.fragment_statistics
override fun observeRequestState() {
@@ -16,10 +27,42 @@
}
override fun initData() {
+ //代码设置底部拉升距离
+ val bottomSheetBehavior = BottomSheetBehavior.from(bottomBehaviorLayout)
+ coordinatorLayout.post {
+ bottomSheetBehavior.isFitToContents = false
+ bottomSheetBehavior.halfExpandedRatio = 0.25f
+ bottomSheetBehavior.isHideable = false
+ bottomSheetBehavior.peekHeight = 30f.dp2px(requireContext())
+ }
+ //初始化vm
+ wellViewModel = ViewModelProvider(this)[WellViewModel::class.java]
+ //获取窨井监控数据
+ wellViewModel.countResultModel.observe(this, {
+ cfWellView.text = it["cfWell"]
+ bfWellView.text = it["bfWell"]
+ allWellDataView.text = it["total"]
+ })
}
override fun initEvent() {
+ cfWellView.setOnClickListener {
+ requireContext().navigatePageTo()
+ }
+ bfWellView.setOnClickListener {
+ requireContext().navigatePageTo()
+ }
+
+ allWellDataView.setOnClickListener {
+ requireContext().navigatePageTo()
+ }
+ }
+
+ override fun onResume() {
+ super.onResume()
+ //每次页面切换都需要重新刷新不同状态的窨井数量
+ wellViewModel.countWellByState()
}
}
\ No newline at end of file
diff --git a/app/src/main/java/com/casic/smart/town/sanxi/model/ErrorMessageModel.java b/app/src/main/java/com/casic/smart/town/sanxi/model/ErrorMessageModel.java
new file mode 100644
index 0000000..60546a1
--- /dev/null
+++ b/app/src/main/java/com/casic/smart/town/sanxi/model/ErrorMessageModel.java
@@ -0,0 +1,50 @@
+package com.casic.smart.town.sanxi.model;
+
+public class ErrorMessageModel {
+
+ private int code;
+ private String data;
+ private String exceptionClazz;
+ private String message;
+ private boolean success;
+
+ public int getCode() {
+ return code;
+ }
+
+ public void setCode(int code) {
+ this.code = code;
+ }
+
+ public String getData() {
+ return data;
+ }
+
+ public void setData(String data) {
+ this.data = data;
+ }
+
+ public String getExceptionClazz() {
+ return exceptionClazz;
+ }
+
+ public void setExceptionClazz(String exceptionClazz) {
+ this.exceptionClazz = exceptionClazz;
+ }
+
+ public String getMessage() {
+ return message;
+ }
+
+ public void setMessage(String message) {
+ this.message = message;
+ }
+
+ public boolean isSuccess() {
+ return success;
+ }
+
+ public void setSuccess(boolean success) {
+ this.success = success;
+ }
+}
\ No newline at end of file
diff --git a/app/src/main/java/com/casic/smart/town/sanxi/util/LocaleConstant.kt b/app/src/main/java/com/casic/smart/town/sanxi/util/LocaleConstant.kt
index de61c9a..ab1a36d 100644
--- a/app/src/main/java/com/casic/smart/town/sanxi/util/LocaleConstant.kt
+++ b/app/src/main/java/com/casic/smart/town/sanxi/util/LocaleConstant.kt
@@ -12,4 +12,7 @@
const val PERMISSIONS_CODE = 999
const val PUSH_REGISTER = 2022100101
const val PAGE_LIMIT = 20
+
+ const val DEFAULT_SERVER_CONFIG = "defaultServerConfig"
+ const val DEFAULT_SERVER = "http://111.198.10.15:11308"
}
\ No newline at end of file
diff --git a/app/src/main/java/com/casic/smart/town/sanxi/util/retrofit/RetrofitService.kt b/app/src/main/java/com/casic/smart/town/sanxi/util/retrofit/RetrofitService.kt
new file mode 100644
index 0000000..63db0ec
--- /dev/null
+++ b/app/src/main/java/com/casic/smart/town/sanxi/util/retrofit/RetrofitService.kt
@@ -0,0 +1,12 @@
+package com.casic.smart.town.sanxi.util.retrofit
+
+import retrofit2.http.GET
+
+interface RetrofitService {
+
+ /**
+ * 根据布防状态统计闸井数量接口
+ */
+ @GET("/well/countByBfzt")
+ suspend fun countWellByState(): String
+}
\ No newline at end of file
diff --git a/app/src/main/java/com/casic/smart/town/sanxi/util/retrofit/RetrofitServiceManager.kt b/app/src/main/java/com/casic/smart/town/sanxi/util/retrofit/RetrofitServiceManager.kt
new file mode 100644
index 0000000..46bbf4b
--- /dev/null
+++ b/app/src/main/java/com/casic/smart/town/sanxi/util/retrofit/RetrofitServiceManager.kt
@@ -0,0 +1,23 @@
+package com.casic.smart.town.sanxi.util.retrofit
+
+import com.casic.smart.town.sanxi.util.LocaleConstant
+import com.pengxh.kt.lite.utils.RetrofitFactory
+import com.pengxh.kt.lite.utils.SaveKeyValues
+
+object RetrofitServiceManager {
+
+ private val api by lazy {
+ val defaultValue = SaveKeyValues.getValue(
+ LocaleConstant.DEFAULT_SERVER_CONFIG,
+ LocaleConstant.DEFAULT_SERVER
+ ) as String
+ RetrofitFactory.createRetrofit(defaultValue)
+ }
+
+ /**
+ * 根据布防状态统计闸井数量接口
+ */
+ suspend fun countWellByState(): String {
+ return api.countWellByState()
+ }
+}
\ No newline at end of file
diff --git a/app/src/main/java/com/casic/smart/town/sanxi/view/AllWellActivity.kt b/app/src/main/java/com/casic/smart/town/sanxi/view/AllWellActivity.kt
new file mode 100644
index 0000000..cb0c9e4
--- /dev/null
+++ b/app/src/main/java/com/casic/smart/town/sanxi/view/AllWellActivity.kt
@@ -0,0 +1,25 @@
+package com.casic.smart.town.sanxi.view
+
+import com.casic.smart.town.sanxi.R
+import com.pengxh.kt.lite.base.KotlinBaseActivity
+
+class AllWellActivity : KotlinBaseActivity() {
+
+ override fun initLayoutView(): Int = R.layout.activity_all_well
+
+ override fun observeRequestState() {
+
+ }
+
+ override fun setupTopBarLayout() {
+
+ }
+
+ override fun initData() {
+
+ }
+
+ override fun initEvent() {
+
+ }
+}
\ No newline at end of file
diff --git a/app/src/main/java/com/casic/smart/town/sanxi/view/BFWellActivity.kt b/app/src/main/java/com/casic/smart/town/sanxi/view/BFWellActivity.kt
new file mode 100644
index 0000000..6a43b9e
--- /dev/null
+++ b/app/src/main/java/com/casic/smart/town/sanxi/view/BFWellActivity.kt
@@ -0,0 +1,25 @@
+package com.casic.smart.town.sanxi.view
+
+import com.casic.smart.town.sanxi.R
+import com.pengxh.kt.lite.base.KotlinBaseActivity
+
+class BFWellActivity : KotlinBaseActivity() {
+
+ override fun initLayoutView(): Int = R.layout.activity_bf_well
+
+ override fun observeRequestState() {
+
+ }
+
+ override fun setupTopBarLayout() {
+
+ }
+
+ override fun initData() {
+
+ }
+
+ override fun initEvent() {
+
+ }
+}
\ No newline at end of file
diff --git a/app/src/main/java/com/casic/smart/town/sanxi/view/CFWellActivity.kt b/app/src/main/java/com/casic/smart/town/sanxi/view/CFWellActivity.kt
new file mode 100644
index 0000000..bc72674
--- /dev/null
+++ b/app/src/main/java/com/casic/smart/town/sanxi/view/CFWellActivity.kt
@@ -0,0 +1,25 @@
+package com.casic.smart.town.sanxi.view
+
+import com.casic.smart.town.sanxi.R
+import com.pengxh.kt.lite.base.KotlinBaseActivity
+
+class CFWellActivity : KotlinBaseActivity() {
+
+ override fun initLayoutView(): Int = R.layout.activity_cf_well
+
+ override fun observeRequestState() {
+
+ }
+
+ override fun setupTopBarLayout() {
+
+ }
+
+ override fun initData() {
+
+ }
+
+ override fun initEvent() {
+
+ }
+}
\ No newline at end of file
diff --git a/app/src/main/java/com/casic/smart/town/sanxi/vm/WellViewModel.kt b/app/src/main/java/com/casic/smart/town/sanxi/vm/WellViewModel.kt
new file mode 100644
index 0000000..c7d0219
--- /dev/null
+++ b/app/src/main/java/com/casic/smart/town/sanxi/vm/WellViewModel.kt
@@ -0,0 +1,43 @@
+package com.casic.smart.town.sanxi.vm
+
+import androidx.lifecycle.MutableLiveData
+import com.casic.smart.town.sanxi.base.BaseApplication
+import com.casic.smart.town.sanxi.extensions.separateResponseCode
+import com.casic.smart.town.sanxi.extensions.toErrorMessage
+import com.casic.smart.town.sanxi.util.retrofit.RetrofitServiceManager
+import com.pengxh.kt.lite.extensions.launch
+import com.pengxh.kt.lite.extensions.show
+import com.pengxh.kt.lite.vm.BaseViewModel
+import org.json.JSONObject
+
+class WellViewModel : BaseViewModel() {
+
+ val countResultModel = MutableLiveData>()
+
+ fun countWellByState() = launch({
+ val response = RetrofitServiceManager.countWellByState()
+ val responseCode = response.separateResponseCode()
+ if (responseCode == 200) {
+ val map = HashMap(3)
+
+ val jsonObject = JSONObject(response)
+ val data = jsonObject.getJSONObject("data")
+ map["bfWell"] = convertString(data.getString("bfWell"))
+ map["cfWell"] = convertString(data.getString("cfWell"))
+ map["total"] = convertString(data.getString("total"))
+ countResultModel.value = map
+ } else {
+ response.toErrorMessage().show(BaseApplication.obtainInstance())
+ }
+ }, {
+ it.printStackTrace()
+ })
+
+ private fun convertString(value: String): String {
+ return if (value == "") {
+ "0"
+ } else {
+ value
+ }
+ }
+}
\ No newline at end of file
diff --git a/app/src/main/res/drawable/bg_solid_layout_white_radius_10.xml b/app/src/main/res/drawable/bg_solid_layout_white_radius_10.xml
new file mode 100644
index 0000000..f00d59c
--- /dev/null
+++ b/app/src/main/res/drawable/bg_solid_layout_white_radius_10.xml
@@ -0,0 +1,8 @@
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/app/src/main/res/drawable/bg_solid_layout_white_radius_top_20.xml b/app/src/main/res/drawable/bg_solid_layout_white_radius_top_20.xml
new file mode 100644
index 0000000..0c2abfe
--- /dev/null
+++ b/app/src/main/res/drawable/bg_solid_layout_white_radius_top_20.xml
@@ -0,0 +1,10 @@
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/.gitignore b/.gitignore
index 10cfdbf..bf2a5c6 100644
--- a/.gitignore
+++ b/.gitignore
@@ -4,7 +4,8 @@
/.idea
.DS_Store
/build
+/app/build
/captures
.externalNativeBuild
.cxx
-local.properties
+local.properties
\ No newline at end of file
diff --git a/app/build.gradle b/app/build.gradle
index a4cd2ca..6b81499 100644
--- a/app/build.gradle
+++ b/app/build.gradle
@@ -98,4 +98,6 @@
implementation 'org.greenrobot:greendao:3.3.0'
//桌面角标
implementation "me.leolin:ShortcutBadger:1.1.22@aar"
+ //图表
+ implementation 'com.github.PhilJay:MPAndroidChart:v3.1.0'
}
\ No newline at end of file
diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml
index a83c28a..1df917d 100644
--- a/app/src/main/AndroidManifest.xml
+++ b/app/src/main/AndroidManifest.xml
@@ -33,6 +33,9 @@
+
+
+
diff --git a/app/src/main/java/com/casic/smart/town/sanxi/extensions/String.kt b/app/src/main/java/com/casic/smart/town/sanxi/extensions/String.kt
new file mode 100644
index 0000000..d730417
--- /dev/null
+++ b/app/src/main/java/com/casic/smart/town/sanxi/extensions/String.kt
@@ -0,0 +1,20 @@
+package com.casic.smart.town.sanxi.extensions
+
+import com.casic.smart.town.sanxi.model.ErrorMessageModel
+import com.google.gson.Gson
+import com.google.gson.reflect.TypeToken
+import org.json.JSONObject
+
+fun String.separateResponseCode(): Int {
+ if (this.isBlank()) {
+ return 404
+ }
+ return JSONObject(this).getInt("code")
+}
+
+fun String.toErrorMessage(): String {
+ val errorModel = Gson().fromJson(
+ this, object : TypeToken() {}.type
+ )
+ return errorModel.message.toString()
+}
\ No newline at end of file
diff --git a/app/src/main/java/com/casic/smart/town/sanxi/fragment/StatisticsPageFragment.kt b/app/src/main/java/com/casic/smart/town/sanxi/fragment/StatisticsPageFragment.kt
index e84df12..21924de 100644
--- a/app/src/main/java/com/casic/smart/town/sanxi/fragment/StatisticsPageFragment.kt
+++ b/app/src/main/java/com/casic/smart/town/sanxi/fragment/StatisticsPageFragment.kt
@@ -1,10 +1,21 @@
package com.casic.smart.town.sanxi.fragment
+import androidx.lifecycle.ViewModelProvider
import com.casic.smart.town.sanxi.R
+import com.casic.smart.town.sanxi.view.AllWellActivity
+import com.casic.smart.town.sanxi.view.BFWellActivity
+import com.casic.smart.town.sanxi.view.CFWellActivity
+import com.casic.smart.town.sanxi.vm.WellViewModel
+import com.google.android.material.bottomsheet.BottomSheetBehavior
import com.pengxh.kt.lite.base.KotlinBaseFragment
+import com.pengxh.kt.lite.extensions.dp2px
+import com.pengxh.kt.lite.extensions.navigatePageTo
+import kotlinx.android.synthetic.main.fragment_statistics.*
class StatisticsPageFragment : KotlinBaseFragment() {
+ private lateinit var wellViewModel: WellViewModel
+
override fun initLayoutView(): Int = R.layout.fragment_statistics
override fun observeRequestState() {
@@ -16,10 +27,42 @@
}
override fun initData() {
+ //代码设置底部拉升距离
+ val bottomSheetBehavior = BottomSheetBehavior.from(bottomBehaviorLayout)
+ coordinatorLayout.post {
+ bottomSheetBehavior.isFitToContents = false
+ bottomSheetBehavior.halfExpandedRatio = 0.25f
+ bottomSheetBehavior.isHideable = false
+ bottomSheetBehavior.peekHeight = 30f.dp2px(requireContext())
+ }
+ //初始化vm
+ wellViewModel = ViewModelProvider(this)[WellViewModel::class.java]
+ //获取窨井监控数据
+ wellViewModel.countResultModel.observe(this, {
+ cfWellView.text = it["cfWell"]
+ bfWellView.text = it["bfWell"]
+ allWellDataView.text = it["total"]
+ })
}
override fun initEvent() {
+ cfWellView.setOnClickListener {
+ requireContext().navigatePageTo()
+ }
+ bfWellView.setOnClickListener {
+ requireContext().navigatePageTo()
+ }
+
+ allWellDataView.setOnClickListener {
+ requireContext().navigatePageTo()
+ }
+ }
+
+ override fun onResume() {
+ super.onResume()
+ //每次页面切换都需要重新刷新不同状态的窨井数量
+ wellViewModel.countWellByState()
}
}
\ No newline at end of file
diff --git a/app/src/main/java/com/casic/smart/town/sanxi/model/ErrorMessageModel.java b/app/src/main/java/com/casic/smart/town/sanxi/model/ErrorMessageModel.java
new file mode 100644
index 0000000..60546a1
--- /dev/null
+++ b/app/src/main/java/com/casic/smart/town/sanxi/model/ErrorMessageModel.java
@@ -0,0 +1,50 @@
+package com.casic.smart.town.sanxi.model;
+
+public class ErrorMessageModel {
+
+ private int code;
+ private String data;
+ private String exceptionClazz;
+ private String message;
+ private boolean success;
+
+ public int getCode() {
+ return code;
+ }
+
+ public void setCode(int code) {
+ this.code = code;
+ }
+
+ public String getData() {
+ return data;
+ }
+
+ public void setData(String data) {
+ this.data = data;
+ }
+
+ public String getExceptionClazz() {
+ return exceptionClazz;
+ }
+
+ public void setExceptionClazz(String exceptionClazz) {
+ this.exceptionClazz = exceptionClazz;
+ }
+
+ public String getMessage() {
+ return message;
+ }
+
+ public void setMessage(String message) {
+ this.message = message;
+ }
+
+ public boolean isSuccess() {
+ return success;
+ }
+
+ public void setSuccess(boolean success) {
+ this.success = success;
+ }
+}
\ No newline at end of file
diff --git a/app/src/main/java/com/casic/smart/town/sanxi/util/LocaleConstant.kt b/app/src/main/java/com/casic/smart/town/sanxi/util/LocaleConstant.kt
index de61c9a..ab1a36d 100644
--- a/app/src/main/java/com/casic/smart/town/sanxi/util/LocaleConstant.kt
+++ b/app/src/main/java/com/casic/smart/town/sanxi/util/LocaleConstant.kt
@@ -12,4 +12,7 @@
const val PERMISSIONS_CODE = 999
const val PUSH_REGISTER = 2022100101
const val PAGE_LIMIT = 20
+
+ const val DEFAULT_SERVER_CONFIG = "defaultServerConfig"
+ const val DEFAULT_SERVER = "http://111.198.10.15:11308"
}
\ No newline at end of file
diff --git a/app/src/main/java/com/casic/smart/town/sanxi/util/retrofit/RetrofitService.kt b/app/src/main/java/com/casic/smart/town/sanxi/util/retrofit/RetrofitService.kt
new file mode 100644
index 0000000..63db0ec
--- /dev/null
+++ b/app/src/main/java/com/casic/smart/town/sanxi/util/retrofit/RetrofitService.kt
@@ -0,0 +1,12 @@
+package com.casic.smart.town.sanxi.util.retrofit
+
+import retrofit2.http.GET
+
+interface RetrofitService {
+
+ /**
+ * 根据布防状态统计闸井数量接口
+ */
+ @GET("/well/countByBfzt")
+ suspend fun countWellByState(): String
+}
\ No newline at end of file
diff --git a/app/src/main/java/com/casic/smart/town/sanxi/util/retrofit/RetrofitServiceManager.kt b/app/src/main/java/com/casic/smart/town/sanxi/util/retrofit/RetrofitServiceManager.kt
new file mode 100644
index 0000000..46bbf4b
--- /dev/null
+++ b/app/src/main/java/com/casic/smart/town/sanxi/util/retrofit/RetrofitServiceManager.kt
@@ -0,0 +1,23 @@
+package com.casic.smart.town.sanxi.util.retrofit
+
+import com.casic.smart.town.sanxi.util.LocaleConstant
+import com.pengxh.kt.lite.utils.RetrofitFactory
+import com.pengxh.kt.lite.utils.SaveKeyValues
+
+object RetrofitServiceManager {
+
+ private val api by lazy {
+ val defaultValue = SaveKeyValues.getValue(
+ LocaleConstant.DEFAULT_SERVER_CONFIG,
+ LocaleConstant.DEFAULT_SERVER
+ ) as String
+ RetrofitFactory.createRetrofit(defaultValue)
+ }
+
+ /**
+ * 根据布防状态统计闸井数量接口
+ */
+ suspend fun countWellByState(): String {
+ return api.countWellByState()
+ }
+}
\ No newline at end of file
diff --git a/app/src/main/java/com/casic/smart/town/sanxi/view/AllWellActivity.kt b/app/src/main/java/com/casic/smart/town/sanxi/view/AllWellActivity.kt
new file mode 100644
index 0000000..cb0c9e4
--- /dev/null
+++ b/app/src/main/java/com/casic/smart/town/sanxi/view/AllWellActivity.kt
@@ -0,0 +1,25 @@
+package com.casic.smart.town.sanxi.view
+
+import com.casic.smart.town.sanxi.R
+import com.pengxh.kt.lite.base.KotlinBaseActivity
+
+class AllWellActivity : KotlinBaseActivity() {
+
+ override fun initLayoutView(): Int = R.layout.activity_all_well
+
+ override fun observeRequestState() {
+
+ }
+
+ override fun setupTopBarLayout() {
+
+ }
+
+ override fun initData() {
+
+ }
+
+ override fun initEvent() {
+
+ }
+}
\ No newline at end of file
diff --git a/app/src/main/java/com/casic/smart/town/sanxi/view/BFWellActivity.kt b/app/src/main/java/com/casic/smart/town/sanxi/view/BFWellActivity.kt
new file mode 100644
index 0000000..6a43b9e
--- /dev/null
+++ b/app/src/main/java/com/casic/smart/town/sanxi/view/BFWellActivity.kt
@@ -0,0 +1,25 @@
+package com.casic.smart.town.sanxi.view
+
+import com.casic.smart.town.sanxi.R
+import com.pengxh.kt.lite.base.KotlinBaseActivity
+
+class BFWellActivity : KotlinBaseActivity() {
+
+ override fun initLayoutView(): Int = R.layout.activity_bf_well
+
+ override fun observeRequestState() {
+
+ }
+
+ override fun setupTopBarLayout() {
+
+ }
+
+ override fun initData() {
+
+ }
+
+ override fun initEvent() {
+
+ }
+}
\ No newline at end of file
diff --git a/app/src/main/java/com/casic/smart/town/sanxi/view/CFWellActivity.kt b/app/src/main/java/com/casic/smart/town/sanxi/view/CFWellActivity.kt
new file mode 100644
index 0000000..bc72674
--- /dev/null
+++ b/app/src/main/java/com/casic/smart/town/sanxi/view/CFWellActivity.kt
@@ -0,0 +1,25 @@
+package com.casic.smart.town.sanxi.view
+
+import com.casic.smart.town.sanxi.R
+import com.pengxh.kt.lite.base.KotlinBaseActivity
+
+class CFWellActivity : KotlinBaseActivity() {
+
+ override fun initLayoutView(): Int = R.layout.activity_cf_well
+
+ override fun observeRequestState() {
+
+ }
+
+ override fun setupTopBarLayout() {
+
+ }
+
+ override fun initData() {
+
+ }
+
+ override fun initEvent() {
+
+ }
+}
\ No newline at end of file
diff --git a/app/src/main/java/com/casic/smart/town/sanxi/vm/WellViewModel.kt b/app/src/main/java/com/casic/smart/town/sanxi/vm/WellViewModel.kt
new file mode 100644
index 0000000..c7d0219
--- /dev/null
+++ b/app/src/main/java/com/casic/smart/town/sanxi/vm/WellViewModel.kt
@@ -0,0 +1,43 @@
+package com.casic.smart.town.sanxi.vm
+
+import androidx.lifecycle.MutableLiveData
+import com.casic.smart.town.sanxi.base.BaseApplication
+import com.casic.smart.town.sanxi.extensions.separateResponseCode
+import com.casic.smart.town.sanxi.extensions.toErrorMessage
+import com.casic.smart.town.sanxi.util.retrofit.RetrofitServiceManager
+import com.pengxh.kt.lite.extensions.launch
+import com.pengxh.kt.lite.extensions.show
+import com.pengxh.kt.lite.vm.BaseViewModel
+import org.json.JSONObject
+
+class WellViewModel : BaseViewModel() {
+
+ val countResultModel = MutableLiveData>()
+
+ fun countWellByState() = launch({
+ val response = RetrofitServiceManager.countWellByState()
+ val responseCode = response.separateResponseCode()
+ if (responseCode == 200) {
+ val map = HashMap(3)
+
+ val jsonObject = JSONObject(response)
+ val data = jsonObject.getJSONObject("data")
+ map["bfWell"] = convertString(data.getString("bfWell"))
+ map["cfWell"] = convertString(data.getString("cfWell"))
+ map["total"] = convertString(data.getString("total"))
+ countResultModel.value = map
+ } else {
+ response.toErrorMessage().show(BaseApplication.obtainInstance())
+ }
+ }, {
+ it.printStackTrace()
+ })
+
+ private fun convertString(value: String): String {
+ return if (value == "") {
+ "0"
+ } else {
+ value
+ }
+ }
+}
\ No newline at end of file
diff --git a/app/src/main/res/drawable/bg_solid_layout_white_radius_10.xml b/app/src/main/res/drawable/bg_solid_layout_white_radius_10.xml
new file mode 100644
index 0000000..f00d59c
--- /dev/null
+++ b/app/src/main/res/drawable/bg_solid_layout_white_radius_10.xml
@@ -0,0 +1,8 @@
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/app/src/main/res/drawable/bg_solid_layout_white_radius_top_20.xml b/app/src/main/res/drawable/bg_solid_layout_white_radius_top_20.xml
new file mode 100644
index 0000000..0c2abfe
--- /dev/null
+++ b/app/src/main/res/drawable/bg_solid_layout_white_radius_top_20.xml
@@ -0,0 +1,10 @@
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/app/src/main/res/drawable/bottom_short_line.xml b/app/src/main/res/drawable/bottom_short_line.xml
new file mode 100644
index 0000000..10c9062
--- /dev/null
+++ b/app/src/main/res/drawable/bottom_short_line.xml
@@ -0,0 +1,12 @@
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/.gitignore b/.gitignore
index 10cfdbf..bf2a5c6 100644
--- a/.gitignore
+++ b/.gitignore
@@ -4,7 +4,8 @@
/.idea
.DS_Store
/build
+/app/build
/captures
.externalNativeBuild
.cxx
-local.properties
+local.properties
\ No newline at end of file
diff --git a/app/build.gradle b/app/build.gradle
index a4cd2ca..6b81499 100644
--- a/app/build.gradle
+++ b/app/build.gradle
@@ -98,4 +98,6 @@
implementation 'org.greenrobot:greendao:3.3.0'
//桌面角标
implementation "me.leolin:ShortcutBadger:1.1.22@aar"
+ //图表
+ implementation 'com.github.PhilJay:MPAndroidChart:v3.1.0'
}
\ No newline at end of file
diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml
index a83c28a..1df917d 100644
--- a/app/src/main/AndroidManifest.xml
+++ b/app/src/main/AndroidManifest.xml
@@ -33,6 +33,9 @@
+
+
+
diff --git a/app/src/main/java/com/casic/smart/town/sanxi/extensions/String.kt b/app/src/main/java/com/casic/smart/town/sanxi/extensions/String.kt
new file mode 100644
index 0000000..d730417
--- /dev/null
+++ b/app/src/main/java/com/casic/smart/town/sanxi/extensions/String.kt
@@ -0,0 +1,20 @@
+package com.casic.smart.town.sanxi.extensions
+
+import com.casic.smart.town.sanxi.model.ErrorMessageModel
+import com.google.gson.Gson
+import com.google.gson.reflect.TypeToken
+import org.json.JSONObject
+
+fun String.separateResponseCode(): Int {
+ if (this.isBlank()) {
+ return 404
+ }
+ return JSONObject(this).getInt("code")
+}
+
+fun String.toErrorMessage(): String {
+ val errorModel = Gson().fromJson(
+ this, object : TypeToken() {}.type
+ )
+ return errorModel.message.toString()
+}
\ No newline at end of file
diff --git a/app/src/main/java/com/casic/smart/town/sanxi/fragment/StatisticsPageFragment.kt b/app/src/main/java/com/casic/smart/town/sanxi/fragment/StatisticsPageFragment.kt
index e84df12..21924de 100644
--- a/app/src/main/java/com/casic/smart/town/sanxi/fragment/StatisticsPageFragment.kt
+++ b/app/src/main/java/com/casic/smart/town/sanxi/fragment/StatisticsPageFragment.kt
@@ -1,10 +1,21 @@
package com.casic.smart.town.sanxi.fragment
+import androidx.lifecycle.ViewModelProvider
import com.casic.smart.town.sanxi.R
+import com.casic.smart.town.sanxi.view.AllWellActivity
+import com.casic.smart.town.sanxi.view.BFWellActivity
+import com.casic.smart.town.sanxi.view.CFWellActivity
+import com.casic.smart.town.sanxi.vm.WellViewModel
+import com.google.android.material.bottomsheet.BottomSheetBehavior
import com.pengxh.kt.lite.base.KotlinBaseFragment
+import com.pengxh.kt.lite.extensions.dp2px
+import com.pengxh.kt.lite.extensions.navigatePageTo
+import kotlinx.android.synthetic.main.fragment_statistics.*
class StatisticsPageFragment : KotlinBaseFragment() {
+ private lateinit var wellViewModel: WellViewModel
+
override fun initLayoutView(): Int = R.layout.fragment_statistics
override fun observeRequestState() {
@@ -16,10 +27,42 @@
}
override fun initData() {
+ //代码设置底部拉升距离
+ val bottomSheetBehavior = BottomSheetBehavior.from(bottomBehaviorLayout)
+ coordinatorLayout.post {
+ bottomSheetBehavior.isFitToContents = false
+ bottomSheetBehavior.halfExpandedRatio = 0.25f
+ bottomSheetBehavior.isHideable = false
+ bottomSheetBehavior.peekHeight = 30f.dp2px(requireContext())
+ }
+ //初始化vm
+ wellViewModel = ViewModelProvider(this)[WellViewModel::class.java]
+ //获取窨井监控数据
+ wellViewModel.countResultModel.observe(this, {
+ cfWellView.text = it["cfWell"]
+ bfWellView.text = it["bfWell"]
+ allWellDataView.text = it["total"]
+ })
}
override fun initEvent() {
+ cfWellView.setOnClickListener {
+ requireContext().navigatePageTo()
+ }
+ bfWellView.setOnClickListener {
+ requireContext().navigatePageTo()
+ }
+
+ allWellDataView.setOnClickListener {
+ requireContext().navigatePageTo()
+ }
+ }
+
+ override fun onResume() {
+ super.onResume()
+ //每次页面切换都需要重新刷新不同状态的窨井数量
+ wellViewModel.countWellByState()
}
}
\ No newline at end of file
diff --git a/app/src/main/java/com/casic/smart/town/sanxi/model/ErrorMessageModel.java b/app/src/main/java/com/casic/smart/town/sanxi/model/ErrorMessageModel.java
new file mode 100644
index 0000000..60546a1
--- /dev/null
+++ b/app/src/main/java/com/casic/smart/town/sanxi/model/ErrorMessageModel.java
@@ -0,0 +1,50 @@
+package com.casic.smart.town.sanxi.model;
+
+public class ErrorMessageModel {
+
+ private int code;
+ private String data;
+ private String exceptionClazz;
+ private String message;
+ private boolean success;
+
+ public int getCode() {
+ return code;
+ }
+
+ public void setCode(int code) {
+ this.code = code;
+ }
+
+ public String getData() {
+ return data;
+ }
+
+ public void setData(String data) {
+ this.data = data;
+ }
+
+ public String getExceptionClazz() {
+ return exceptionClazz;
+ }
+
+ public void setExceptionClazz(String exceptionClazz) {
+ this.exceptionClazz = exceptionClazz;
+ }
+
+ public String getMessage() {
+ return message;
+ }
+
+ public void setMessage(String message) {
+ this.message = message;
+ }
+
+ public boolean isSuccess() {
+ return success;
+ }
+
+ public void setSuccess(boolean success) {
+ this.success = success;
+ }
+}
\ No newline at end of file
diff --git a/app/src/main/java/com/casic/smart/town/sanxi/util/LocaleConstant.kt b/app/src/main/java/com/casic/smart/town/sanxi/util/LocaleConstant.kt
index de61c9a..ab1a36d 100644
--- a/app/src/main/java/com/casic/smart/town/sanxi/util/LocaleConstant.kt
+++ b/app/src/main/java/com/casic/smart/town/sanxi/util/LocaleConstant.kt
@@ -12,4 +12,7 @@
const val PERMISSIONS_CODE = 999
const val PUSH_REGISTER = 2022100101
const val PAGE_LIMIT = 20
+
+ const val DEFAULT_SERVER_CONFIG = "defaultServerConfig"
+ const val DEFAULT_SERVER = "http://111.198.10.15:11308"
}
\ No newline at end of file
diff --git a/app/src/main/java/com/casic/smart/town/sanxi/util/retrofit/RetrofitService.kt b/app/src/main/java/com/casic/smart/town/sanxi/util/retrofit/RetrofitService.kt
new file mode 100644
index 0000000..63db0ec
--- /dev/null
+++ b/app/src/main/java/com/casic/smart/town/sanxi/util/retrofit/RetrofitService.kt
@@ -0,0 +1,12 @@
+package com.casic.smart.town.sanxi.util.retrofit
+
+import retrofit2.http.GET
+
+interface RetrofitService {
+
+ /**
+ * 根据布防状态统计闸井数量接口
+ */
+ @GET("/well/countByBfzt")
+ suspend fun countWellByState(): String
+}
\ No newline at end of file
diff --git a/app/src/main/java/com/casic/smart/town/sanxi/util/retrofit/RetrofitServiceManager.kt b/app/src/main/java/com/casic/smart/town/sanxi/util/retrofit/RetrofitServiceManager.kt
new file mode 100644
index 0000000..46bbf4b
--- /dev/null
+++ b/app/src/main/java/com/casic/smart/town/sanxi/util/retrofit/RetrofitServiceManager.kt
@@ -0,0 +1,23 @@
+package com.casic.smart.town.sanxi.util.retrofit
+
+import com.casic.smart.town.sanxi.util.LocaleConstant
+import com.pengxh.kt.lite.utils.RetrofitFactory
+import com.pengxh.kt.lite.utils.SaveKeyValues
+
+object RetrofitServiceManager {
+
+ private val api by lazy {
+ val defaultValue = SaveKeyValues.getValue(
+ LocaleConstant.DEFAULT_SERVER_CONFIG,
+ LocaleConstant.DEFAULT_SERVER
+ ) as String
+ RetrofitFactory.createRetrofit(defaultValue)
+ }
+
+ /**
+ * 根据布防状态统计闸井数量接口
+ */
+ suspend fun countWellByState(): String {
+ return api.countWellByState()
+ }
+}
\ No newline at end of file
diff --git a/app/src/main/java/com/casic/smart/town/sanxi/view/AllWellActivity.kt b/app/src/main/java/com/casic/smart/town/sanxi/view/AllWellActivity.kt
new file mode 100644
index 0000000..cb0c9e4
--- /dev/null
+++ b/app/src/main/java/com/casic/smart/town/sanxi/view/AllWellActivity.kt
@@ -0,0 +1,25 @@
+package com.casic.smart.town.sanxi.view
+
+import com.casic.smart.town.sanxi.R
+import com.pengxh.kt.lite.base.KotlinBaseActivity
+
+class AllWellActivity : KotlinBaseActivity() {
+
+ override fun initLayoutView(): Int = R.layout.activity_all_well
+
+ override fun observeRequestState() {
+
+ }
+
+ override fun setupTopBarLayout() {
+
+ }
+
+ override fun initData() {
+
+ }
+
+ override fun initEvent() {
+
+ }
+}
\ No newline at end of file
diff --git a/app/src/main/java/com/casic/smart/town/sanxi/view/BFWellActivity.kt b/app/src/main/java/com/casic/smart/town/sanxi/view/BFWellActivity.kt
new file mode 100644
index 0000000..6a43b9e
--- /dev/null
+++ b/app/src/main/java/com/casic/smart/town/sanxi/view/BFWellActivity.kt
@@ -0,0 +1,25 @@
+package com.casic.smart.town.sanxi.view
+
+import com.casic.smart.town.sanxi.R
+import com.pengxh.kt.lite.base.KotlinBaseActivity
+
+class BFWellActivity : KotlinBaseActivity() {
+
+ override fun initLayoutView(): Int = R.layout.activity_bf_well
+
+ override fun observeRequestState() {
+
+ }
+
+ override fun setupTopBarLayout() {
+
+ }
+
+ override fun initData() {
+
+ }
+
+ override fun initEvent() {
+
+ }
+}
\ No newline at end of file
diff --git a/app/src/main/java/com/casic/smart/town/sanxi/view/CFWellActivity.kt b/app/src/main/java/com/casic/smart/town/sanxi/view/CFWellActivity.kt
new file mode 100644
index 0000000..bc72674
--- /dev/null
+++ b/app/src/main/java/com/casic/smart/town/sanxi/view/CFWellActivity.kt
@@ -0,0 +1,25 @@
+package com.casic.smart.town.sanxi.view
+
+import com.casic.smart.town.sanxi.R
+import com.pengxh.kt.lite.base.KotlinBaseActivity
+
+class CFWellActivity : KotlinBaseActivity() {
+
+ override fun initLayoutView(): Int = R.layout.activity_cf_well
+
+ override fun observeRequestState() {
+
+ }
+
+ override fun setupTopBarLayout() {
+
+ }
+
+ override fun initData() {
+
+ }
+
+ override fun initEvent() {
+
+ }
+}
\ No newline at end of file
diff --git a/app/src/main/java/com/casic/smart/town/sanxi/vm/WellViewModel.kt b/app/src/main/java/com/casic/smart/town/sanxi/vm/WellViewModel.kt
new file mode 100644
index 0000000..c7d0219
--- /dev/null
+++ b/app/src/main/java/com/casic/smart/town/sanxi/vm/WellViewModel.kt
@@ -0,0 +1,43 @@
+package com.casic.smart.town.sanxi.vm
+
+import androidx.lifecycle.MutableLiveData
+import com.casic.smart.town.sanxi.base.BaseApplication
+import com.casic.smart.town.sanxi.extensions.separateResponseCode
+import com.casic.smart.town.sanxi.extensions.toErrorMessage
+import com.casic.smart.town.sanxi.util.retrofit.RetrofitServiceManager
+import com.pengxh.kt.lite.extensions.launch
+import com.pengxh.kt.lite.extensions.show
+import com.pengxh.kt.lite.vm.BaseViewModel
+import org.json.JSONObject
+
+class WellViewModel : BaseViewModel() {
+
+ val countResultModel = MutableLiveData>()
+
+ fun countWellByState() = launch({
+ val response = RetrofitServiceManager.countWellByState()
+ val responseCode = response.separateResponseCode()
+ if (responseCode == 200) {
+ val map = HashMap(3)
+
+ val jsonObject = JSONObject(response)
+ val data = jsonObject.getJSONObject("data")
+ map["bfWell"] = convertString(data.getString("bfWell"))
+ map["cfWell"] = convertString(data.getString("cfWell"))
+ map["total"] = convertString(data.getString("total"))
+ countResultModel.value = map
+ } else {
+ response.toErrorMessage().show(BaseApplication.obtainInstance())
+ }
+ }, {
+ it.printStackTrace()
+ })
+
+ private fun convertString(value: String): String {
+ return if (value == "") {
+ "0"
+ } else {
+ value
+ }
+ }
+}
\ No newline at end of file
diff --git a/app/src/main/res/drawable/bg_solid_layout_white_radius_10.xml b/app/src/main/res/drawable/bg_solid_layout_white_radius_10.xml
new file mode 100644
index 0000000..f00d59c
--- /dev/null
+++ b/app/src/main/res/drawable/bg_solid_layout_white_radius_10.xml
@@ -0,0 +1,8 @@
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/app/src/main/res/drawable/bg_solid_layout_white_radius_top_20.xml b/app/src/main/res/drawable/bg_solid_layout_white_radius_top_20.xml
new file mode 100644
index 0000000..0c2abfe
--- /dev/null
+++ b/app/src/main/res/drawable/bg_solid_layout_white_radius_top_20.xml
@@ -0,0 +1,10 @@
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/app/src/main/res/drawable/bottom_short_line.xml b/app/src/main/res/drawable/bottom_short_line.xml
new file mode 100644
index 0000000..10c9062
--- /dev/null
+++ b/app/src/main/res/drawable/bottom_short_line.xml
@@ -0,0 +1,12 @@
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/app/src/main/res/font/agencyr.ttf b/app/src/main/res/font/agencyr.ttf
new file mode 100644
index 0000000..f0f7e95
--- /dev/null
+++ b/app/src/main/res/font/agencyr.ttf
Binary files differ
diff --git a/.gitignore b/.gitignore
index 10cfdbf..bf2a5c6 100644
--- a/.gitignore
+++ b/.gitignore
@@ -4,7 +4,8 @@
/.idea
.DS_Store
/build
+/app/build
/captures
.externalNativeBuild
.cxx
-local.properties
+local.properties
\ No newline at end of file
diff --git a/app/build.gradle b/app/build.gradle
index a4cd2ca..6b81499 100644
--- a/app/build.gradle
+++ b/app/build.gradle
@@ -98,4 +98,6 @@
implementation 'org.greenrobot:greendao:3.3.0'
//桌面角标
implementation "me.leolin:ShortcutBadger:1.1.22@aar"
+ //图表
+ implementation 'com.github.PhilJay:MPAndroidChart:v3.1.0'
}
\ No newline at end of file
diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml
index a83c28a..1df917d 100644
--- a/app/src/main/AndroidManifest.xml
+++ b/app/src/main/AndroidManifest.xml
@@ -33,6 +33,9 @@
+
+
+
diff --git a/app/src/main/java/com/casic/smart/town/sanxi/extensions/String.kt b/app/src/main/java/com/casic/smart/town/sanxi/extensions/String.kt
new file mode 100644
index 0000000..d730417
--- /dev/null
+++ b/app/src/main/java/com/casic/smart/town/sanxi/extensions/String.kt
@@ -0,0 +1,20 @@
+package com.casic.smart.town.sanxi.extensions
+
+import com.casic.smart.town.sanxi.model.ErrorMessageModel
+import com.google.gson.Gson
+import com.google.gson.reflect.TypeToken
+import org.json.JSONObject
+
+fun String.separateResponseCode(): Int {
+ if (this.isBlank()) {
+ return 404
+ }
+ return JSONObject(this).getInt("code")
+}
+
+fun String.toErrorMessage(): String {
+ val errorModel = Gson().fromJson(
+ this, object : TypeToken() {}.type
+ )
+ return errorModel.message.toString()
+}
\ No newline at end of file
diff --git a/app/src/main/java/com/casic/smart/town/sanxi/fragment/StatisticsPageFragment.kt b/app/src/main/java/com/casic/smart/town/sanxi/fragment/StatisticsPageFragment.kt
index e84df12..21924de 100644
--- a/app/src/main/java/com/casic/smart/town/sanxi/fragment/StatisticsPageFragment.kt
+++ b/app/src/main/java/com/casic/smart/town/sanxi/fragment/StatisticsPageFragment.kt
@@ -1,10 +1,21 @@
package com.casic.smart.town.sanxi.fragment
+import androidx.lifecycle.ViewModelProvider
import com.casic.smart.town.sanxi.R
+import com.casic.smart.town.sanxi.view.AllWellActivity
+import com.casic.smart.town.sanxi.view.BFWellActivity
+import com.casic.smart.town.sanxi.view.CFWellActivity
+import com.casic.smart.town.sanxi.vm.WellViewModel
+import com.google.android.material.bottomsheet.BottomSheetBehavior
import com.pengxh.kt.lite.base.KotlinBaseFragment
+import com.pengxh.kt.lite.extensions.dp2px
+import com.pengxh.kt.lite.extensions.navigatePageTo
+import kotlinx.android.synthetic.main.fragment_statistics.*
class StatisticsPageFragment : KotlinBaseFragment() {
+ private lateinit var wellViewModel: WellViewModel
+
override fun initLayoutView(): Int = R.layout.fragment_statistics
override fun observeRequestState() {
@@ -16,10 +27,42 @@
}
override fun initData() {
+ //代码设置底部拉升距离
+ val bottomSheetBehavior = BottomSheetBehavior.from(bottomBehaviorLayout)
+ coordinatorLayout.post {
+ bottomSheetBehavior.isFitToContents = false
+ bottomSheetBehavior.halfExpandedRatio = 0.25f
+ bottomSheetBehavior.isHideable = false
+ bottomSheetBehavior.peekHeight = 30f.dp2px(requireContext())
+ }
+ //初始化vm
+ wellViewModel = ViewModelProvider(this)[WellViewModel::class.java]
+ //获取窨井监控数据
+ wellViewModel.countResultModel.observe(this, {
+ cfWellView.text = it["cfWell"]
+ bfWellView.text = it["bfWell"]
+ allWellDataView.text = it["total"]
+ })
}
override fun initEvent() {
+ cfWellView.setOnClickListener {
+ requireContext().navigatePageTo()
+ }
+ bfWellView.setOnClickListener {
+ requireContext().navigatePageTo()
+ }
+
+ allWellDataView.setOnClickListener {
+ requireContext().navigatePageTo()
+ }
+ }
+
+ override fun onResume() {
+ super.onResume()
+ //每次页面切换都需要重新刷新不同状态的窨井数量
+ wellViewModel.countWellByState()
}
}
\ No newline at end of file
diff --git a/app/src/main/java/com/casic/smart/town/sanxi/model/ErrorMessageModel.java b/app/src/main/java/com/casic/smart/town/sanxi/model/ErrorMessageModel.java
new file mode 100644
index 0000000..60546a1
--- /dev/null
+++ b/app/src/main/java/com/casic/smart/town/sanxi/model/ErrorMessageModel.java
@@ -0,0 +1,50 @@
+package com.casic.smart.town.sanxi.model;
+
+public class ErrorMessageModel {
+
+ private int code;
+ private String data;
+ private String exceptionClazz;
+ private String message;
+ private boolean success;
+
+ public int getCode() {
+ return code;
+ }
+
+ public void setCode(int code) {
+ this.code = code;
+ }
+
+ public String getData() {
+ return data;
+ }
+
+ public void setData(String data) {
+ this.data = data;
+ }
+
+ public String getExceptionClazz() {
+ return exceptionClazz;
+ }
+
+ public void setExceptionClazz(String exceptionClazz) {
+ this.exceptionClazz = exceptionClazz;
+ }
+
+ public String getMessage() {
+ return message;
+ }
+
+ public void setMessage(String message) {
+ this.message = message;
+ }
+
+ public boolean isSuccess() {
+ return success;
+ }
+
+ public void setSuccess(boolean success) {
+ this.success = success;
+ }
+}
\ No newline at end of file
diff --git a/app/src/main/java/com/casic/smart/town/sanxi/util/LocaleConstant.kt b/app/src/main/java/com/casic/smart/town/sanxi/util/LocaleConstant.kt
index de61c9a..ab1a36d 100644
--- a/app/src/main/java/com/casic/smart/town/sanxi/util/LocaleConstant.kt
+++ b/app/src/main/java/com/casic/smart/town/sanxi/util/LocaleConstant.kt
@@ -12,4 +12,7 @@
const val PERMISSIONS_CODE = 999
const val PUSH_REGISTER = 2022100101
const val PAGE_LIMIT = 20
+
+ const val DEFAULT_SERVER_CONFIG = "defaultServerConfig"
+ const val DEFAULT_SERVER = "http://111.198.10.15:11308"
}
\ No newline at end of file
diff --git a/app/src/main/java/com/casic/smart/town/sanxi/util/retrofit/RetrofitService.kt b/app/src/main/java/com/casic/smart/town/sanxi/util/retrofit/RetrofitService.kt
new file mode 100644
index 0000000..63db0ec
--- /dev/null
+++ b/app/src/main/java/com/casic/smart/town/sanxi/util/retrofit/RetrofitService.kt
@@ -0,0 +1,12 @@
+package com.casic.smart.town.sanxi.util.retrofit
+
+import retrofit2.http.GET
+
+interface RetrofitService {
+
+ /**
+ * 根据布防状态统计闸井数量接口
+ */
+ @GET("/well/countByBfzt")
+ suspend fun countWellByState(): String
+}
\ No newline at end of file
diff --git a/app/src/main/java/com/casic/smart/town/sanxi/util/retrofit/RetrofitServiceManager.kt b/app/src/main/java/com/casic/smart/town/sanxi/util/retrofit/RetrofitServiceManager.kt
new file mode 100644
index 0000000..46bbf4b
--- /dev/null
+++ b/app/src/main/java/com/casic/smart/town/sanxi/util/retrofit/RetrofitServiceManager.kt
@@ -0,0 +1,23 @@
+package com.casic.smart.town.sanxi.util.retrofit
+
+import com.casic.smart.town.sanxi.util.LocaleConstant
+import com.pengxh.kt.lite.utils.RetrofitFactory
+import com.pengxh.kt.lite.utils.SaveKeyValues
+
+object RetrofitServiceManager {
+
+ private val api by lazy {
+ val defaultValue = SaveKeyValues.getValue(
+ LocaleConstant.DEFAULT_SERVER_CONFIG,
+ LocaleConstant.DEFAULT_SERVER
+ ) as String
+ RetrofitFactory.createRetrofit(defaultValue)
+ }
+
+ /**
+ * 根据布防状态统计闸井数量接口
+ */
+ suspend fun countWellByState(): String {
+ return api.countWellByState()
+ }
+}
\ No newline at end of file
diff --git a/app/src/main/java/com/casic/smart/town/sanxi/view/AllWellActivity.kt b/app/src/main/java/com/casic/smart/town/sanxi/view/AllWellActivity.kt
new file mode 100644
index 0000000..cb0c9e4
--- /dev/null
+++ b/app/src/main/java/com/casic/smart/town/sanxi/view/AllWellActivity.kt
@@ -0,0 +1,25 @@
+package com.casic.smart.town.sanxi.view
+
+import com.casic.smart.town.sanxi.R
+import com.pengxh.kt.lite.base.KotlinBaseActivity
+
+class AllWellActivity : KotlinBaseActivity() {
+
+ override fun initLayoutView(): Int = R.layout.activity_all_well
+
+ override fun observeRequestState() {
+
+ }
+
+ override fun setupTopBarLayout() {
+
+ }
+
+ override fun initData() {
+
+ }
+
+ override fun initEvent() {
+
+ }
+}
\ No newline at end of file
diff --git a/app/src/main/java/com/casic/smart/town/sanxi/view/BFWellActivity.kt b/app/src/main/java/com/casic/smart/town/sanxi/view/BFWellActivity.kt
new file mode 100644
index 0000000..6a43b9e
--- /dev/null
+++ b/app/src/main/java/com/casic/smart/town/sanxi/view/BFWellActivity.kt
@@ -0,0 +1,25 @@
+package com.casic.smart.town.sanxi.view
+
+import com.casic.smart.town.sanxi.R
+import com.pengxh.kt.lite.base.KotlinBaseActivity
+
+class BFWellActivity : KotlinBaseActivity() {
+
+ override fun initLayoutView(): Int = R.layout.activity_bf_well
+
+ override fun observeRequestState() {
+
+ }
+
+ override fun setupTopBarLayout() {
+
+ }
+
+ override fun initData() {
+
+ }
+
+ override fun initEvent() {
+
+ }
+}
\ No newline at end of file
diff --git a/app/src/main/java/com/casic/smart/town/sanxi/view/CFWellActivity.kt b/app/src/main/java/com/casic/smart/town/sanxi/view/CFWellActivity.kt
new file mode 100644
index 0000000..bc72674
--- /dev/null
+++ b/app/src/main/java/com/casic/smart/town/sanxi/view/CFWellActivity.kt
@@ -0,0 +1,25 @@
+package com.casic.smart.town.sanxi.view
+
+import com.casic.smart.town.sanxi.R
+import com.pengxh.kt.lite.base.KotlinBaseActivity
+
+class CFWellActivity : KotlinBaseActivity() {
+
+ override fun initLayoutView(): Int = R.layout.activity_cf_well
+
+ override fun observeRequestState() {
+
+ }
+
+ override fun setupTopBarLayout() {
+
+ }
+
+ override fun initData() {
+
+ }
+
+ override fun initEvent() {
+
+ }
+}
\ No newline at end of file
diff --git a/app/src/main/java/com/casic/smart/town/sanxi/vm/WellViewModel.kt b/app/src/main/java/com/casic/smart/town/sanxi/vm/WellViewModel.kt
new file mode 100644
index 0000000..c7d0219
--- /dev/null
+++ b/app/src/main/java/com/casic/smart/town/sanxi/vm/WellViewModel.kt
@@ -0,0 +1,43 @@
+package com.casic.smart.town.sanxi.vm
+
+import androidx.lifecycle.MutableLiveData
+import com.casic.smart.town.sanxi.base.BaseApplication
+import com.casic.smart.town.sanxi.extensions.separateResponseCode
+import com.casic.smart.town.sanxi.extensions.toErrorMessage
+import com.casic.smart.town.sanxi.util.retrofit.RetrofitServiceManager
+import com.pengxh.kt.lite.extensions.launch
+import com.pengxh.kt.lite.extensions.show
+import com.pengxh.kt.lite.vm.BaseViewModel
+import org.json.JSONObject
+
+class WellViewModel : BaseViewModel() {
+
+ val countResultModel = MutableLiveData>()
+
+ fun countWellByState() = launch({
+ val response = RetrofitServiceManager.countWellByState()
+ val responseCode = response.separateResponseCode()
+ if (responseCode == 200) {
+ val map = HashMap(3)
+
+ val jsonObject = JSONObject(response)
+ val data = jsonObject.getJSONObject("data")
+ map["bfWell"] = convertString(data.getString("bfWell"))
+ map["cfWell"] = convertString(data.getString("cfWell"))
+ map["total"] = convertString(data.getString("total"))
+ countResultModel.value = map
+ } else {
+ response.toErrorMessage().show(BaseApplication.obtainInstance())
+ }
+ }, {
+ it.printStackTrace()
+ })
+
+ private fun convertString(value: String): String {
+ return if (value == "") {
+ "0"
+ } else {
+ value
+ }
+ }
+}
\ No newline at end of file
diff --git a/app/src/main/res/drawable/bg_solid_layout_white_radius_10.xml b/app/src/main/res/drawable/bg_solid_layout_white_radius_10.xml
new file mode 100644
index 0000000..f00d59c
--- /dev/null
+++ b/app/src/main/res/drawable/bg_solid_layout_white_radius_10.xml
@@ -0,0 +1,8 @@
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/app/src/main/res/drawable/bg_solid_layout_white_radius_top_20.xml b/app/src/main/res/drawable/bg_solid_layout_white_radius_top_20.xml
new file mode 100644
index 0000000..0c2abfe
--- /dev/null
+++ b/app/src/main/res/drawable/bg_solid_layout_white_radius_top_20.xml
@@ -0,0 +1,10 @@
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/app/src/main/res/drawable/bottom_short_line.xml b/app/src/main/res/drawable/bottom_short_line.xml
new file mode 100644
index 0000000..10c9062
--- /dev/null
+++ b/app/src/main/res/drawable/bottom_short_line.xml
@@ -0,0 +1,12 @@
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/app/src/main/res/font/agencyr.ttf b/app/src/main/res/font/agencyr.ttf
new file mode 100644
index 0000000..f0f7e95
--- /dev/null
+++ b/app/src/main/res/font/agencyr.ttf
Binary files differ
diff --git a/app/src/main/res/layout/activity_all_well.xml b/app/src/main/res/layout/activity_all_well.xml
new file mode 100644
index 0000000..77d9ef6
--- /dev/null
+++ b/app/src/main/res/layout/activity_all_well.xml
@@ -0,0 +1,6 @@
+
+
+
+
\ No newline at end of file
diff --git a/.gitignore b/.gitignore
index 10cfdbf..bf2a5c6 100644
--- a/.gitignore
+++ b/.gitignore
@@ -4,7 +4,8 @@
/.idea
.DS_Store
/build
+/app/build
/captures
.externalNativeBuild
.cxx
-local.properties
+local.properties
\ No newline at end of file
diff --git a/app/build.gradle b/app/build.gradle
index a4cd2ca..6b81499 100644
--- a/app/build.gradle
+++ b/app/build.gradle
@@ -98,4 +98,6 @@
implementation 'org.greenrobot:greendao:3.3.0'
//桌面角标
implementation "me.leolin:ShortcutBadger:1.1.22@aar"
+ //图表
+ implementation 'com.github.PhilJay:MPAndroidChart:v3.1.0'
}
\ No newline at end of file
diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml
index a83c28a..1df917d 100644
--- a/app/src/main/AndroidManifest.xml
+++ b/app/src/main/AndroidManifest.xml
@@ -33,6 +33,9 @@
+
+
+
diff --git a/app/src/main/java/com/casic/smart/town/sanxi/extensions/String.kt b/app/src/main/java/com/casic/smart/town/sanxi/extensions/String.kt
new file mode 100644
index 0000000..d730417
--- /dev/null
+++ b/app/src/main/java/com/casic/smart/town/sanxi/extensions/String.kt
@@ -0,0 +1,20 @@
+package com.casic.smart.town.sanxi.extensions
+
+import com.casic.smart.town.sanxi.model.ErrorMessageModel
+import com.google.gson.Gson
+import com.google.gson.reflect.TypeToken
+import org.json.JSONObject
+
+fun String.separateResponseCode(): Int {
+ if (this.isBlank()) {
+ return 404
+ }
+ return JSONObject(this).getInt("code")
+}
+
+fun String.toErrorMessage(): String {
+ val errorModel = Gson().fromJson(
+ this, object : TypeToken() {}.type
+ )
+ return errorModel.message.toString()
+}
\ No newline at end of file
diff --git a/app/src/main/java/com/casic/smart/town/sanxi/fragment/StatisticsPageFragment.kt b/app/src/main/java/com/casic/smart/town/sanxi/fragment/StatisticsPageFragment.kt
index e84df12..21924de 100644
--- a/app/src/main/java/com/casic/smart/town/sanxi/fragment/StatisticsPageFragment.kt
+++ b/app/src/main/java/com/casic/smart/town/sanxi/fragment/StatisticsPageFragment.kt
@@ -1,10 +1,21 @@
package com.casic.smart.town.sanxi.fragment
+import androidx.lifecycle.ViewModelProvider
import com.casic.smart.town.sanxi.R
+import com.casic.smart.town.sanxi.view.AllWellActivity
+import com.casic.smart.town.sanxi.view.BFWellActivity
+import com.casic.smart.town.sanxi.view.CFWellActivity
+import com.casic.smart.town.sanxi.vm.WellViewModel
+import com.google.android.material.bottomsheet.BottomSheetBehavior
import com.pengxh.kt.lite.base.KotlinBaseFragment
+import com.pengxh.kt.lite.extensions.dp2px
+import com.pengxh.kt.lite.extensions.navigatePageTo
+import kotlinx.android.synthetic.main.fragment_statistics.*
class StatisticsPageFragment : KotlinBaseFragment() {
+ private lateinit var wellViewModel: WellViewModel
+
override fun initLayoutView(): Int = R.layout.fragment_statistics
override fun observeRequestState() {
@@ -16,10 +27,42 @@
}
override fun initData() {
+ //代码设置底部拉升距离
+ val bottomSheetBehavior = BottomSheetBehavior.from(bottomBehaviorLayout)
+ coordinatorLayout.post {
+ bottomSheetBehavior.isFitToContents = false
+ bottomSheetBehavior.halfExpandedRatio = 0.25f
+ bottomSheetBehavior.isHideable = false
+ bottomSheetBehavior.peekHeight = 30f.dp2px(requireContext())
+ }
+ //初始化vm
+ wellViewModel = ViewModelProvider(this)[WellViewModel::class.java]
+ //获取窨井监控数据
+ wellViewModel.countResultModel.observe(this, {
+ cfWellView.text = it["cfWell"]
+ bfWellView.text = it["bfWell"]
+ allWellDataView.text = it["total"]
+ })
}
override fun initEvent() {
+ cfWellView.setOnClickListener {
+ requireContext().navigatePageTo()
+ }
+ bfWellView.setOnClickListener {
+ requireContext().navigatePageTo()
+ }
+
+ allWellDataView.setOnClickListener {
+ requireContext().navigatePageTo()
+ }
+ }
+
+ override fun onResume() {
+ super.onResume()
+ //每次页面切换都需要重新刷新不同状态的窨井数量
+ wellViewModel.countWellByState()
}
}
\ No newline at end of file
diff --git a/app/src/main/java/com/casic/smart/town/sanxi/model/ErrorMessageModel.java b/app/src/main/java/com/casic/smart/town/sanxi/model/ErrorMessageModel.java
new file mode 100644
index 0000000..60546a1
--- /dev/null
+++ b/app/src/main/java/com/casic/smart/town/sanxi/model/ErrorMessageModel.java
@@ -0,0 +1,50 @@
+package com.casic.smart.town.sanxi.model;
+
+public class ErrorMessageModel {
+
+ private int code;
+ private String data;
+ private String exceptionClazz;
+ private String message;
+ private boolean success;
+
+ public int getCode() {
+ return code;
+ }
+
+ public void setCode(int code) {
+ this.code = code;
+ }
+
+ public String getData() {
+ return data;
+ }
+
+ public void setData(String data) {
+ this.data = data;
+ }
+
+ public String getExceptionClazz() {
+ return exceptionClazz;
+ }
+
+ public void setExceptionClazz(String exceptionClazz) {
+ this.exceptionClazz = exceptionClazz;
+ }
+
+ public String getMessage() {
+ return message;
+ }
+
+ public void setMessage(String message) {
+ this.message = message;
+ }
+
+ public boolean isSuccess() {
+ return success;
+ }
+
+ public void setSuccess(boolean success) {
+ this.success = success;
+ }
+}
\ No newline at end of file
diff --git a/app/src/main/java/com/casic/smart/town/sanxi/util/LocaleConstant.kt b/app/src/main/java/com/casic/smart/town/sanxi/util/LocaleConstant.kt
index de61c9a..ab1a36d 100644
--- a/app/src/main/java/com/casic/smart/town/sanxi/util/LocaleConstant.kt
+++ b/app/src/main/java/com/casic/smart/town/sanxi/util/LocaleConstant.kt
@@ -12,4 +12,7 @@
const val PERMISSIONS_CODE = 999
const val PUSH_REGISTER = 2022100101
const val PAGE_LIMIT = 20
+
+ const val DEFAULT_SERVER_CONFIG = "defaultServerConfig"
+ const val DEFAULT_SERVER = "http://111.198.10.15:11308"
}
\ No newline at end of file
diff --git a/app/src/main/java/com/casic/smart/town/sanxi/util/retrofit/RetrofitService.kt b/app/src/main/java/com/casic/smart/town/sanxi/util/retrofit/RetrofitService.kt
new file mode 100644
index 0000000..63db0ec
--- /dev/null
+++ b/app/src/main/java/com/casic/smart/town/sanxi/util/retrofit/RetrofitService.kt
@@ -0,0 +1,12 @@
+package com.casic.smart.town.sanxi.util.retrofit
+
+import retrofit2.http.GET
+
+interface RetrofitService {
+
+ /**
+ * 根据布防状态统计闸井数量接口
+ */
+ @GET("/well/countByBfzt")
+ suspend fun countWellByState(): String
+}
\ No newline at end of file
diff --git a/app/src/main/java/com/casic/smart/town/sanxi/util/retrofit/RetrofitServiceManager.kt b/app/src/main/java/com/casic/smart/town/sanxi/util/retrofit/RetrofitServiceManager.kt
new file mode 100644
index 0000000..46bbf4b
--- /dev/null
+++ b/app/src/main/java/com/casic/smart/town/sanxi/util/retrofit/RetrofitServiceManager.kt
@@ -0,0 +1,23 @@
+package com.casic.smart.town.sanxi.util.retrofit
+
+import com.casic.smart.town.sanxi.util.LocaleConstant
+import com.pengxh.kt.lite.utils.RetrofitFactory
+import com.pengxh.kt.lite.utils.SaveKeyValues
+
+object RetrofitServiceManager {
+
+ private val api by lazy {
+ val defaultValue = SaveKeyValues.getValue(
+ LocaleConstant.DEFAULT_SERVER_CONFIG,
+ LocaleConstant.DEFAULT_SERVER
+ ) as String
+ RetrofitFactory.createRetrofit(defaultValue)
+ }
+
+ /**
+ * 根据布防状态统计闸井数量接口
+ */
+ suspend fun countWellByState(): String {
+ return api.countWellByState()
+ }
+}
\ No newline at end of file
diff --git a/app/src/main/java/com/casic/smart/town/sanxi/view/AllWellActivity.kt b/app/src/main/java/com/casic/smart/town/sanxi/view/AllWellActivity.kt
new file mode 100644
index 0000000..cb0c9e4
--- /dev/null
+++ b/app/src/main/java/com/casic/smart/town/sanxi/view/AllWellActivity.kt
@@ -0,0 +1,25 @@
+package com.casic.smart.town.sanxi.view
+
+import com.casic.smart.town.sanxi.R
+import com.pengxh.kt.lite.base.KotlinBaseActivity
+
+class AllWellActivity : KotlinBaseActivity() {
+
+ override fun initLayoutView(): Int = R.layout.activity_all_well
+
+ override fun observeRequestState() {
+
+ }
+
+ override fun setupTopBarLayout() {
+
+ }
+
+ override fun initData() {
+
+ }
+
+ override fun initEvent() {
+
+ }
+}
\ No newline at end of file
diff --git a/app/src/main/java/com/casic/smart/town/sanxi/view/BFWellActivity.kt b/app/src/main/java/com/casic/smart/town/sanxi/view/BFWellActivity.kt
new file mode 100644
index 0000000..6a43b9e
--- /dev/null
+++ b/app/src/main/java/com/casic/smart/town/sanxi/view/BFWellActivity.kt
@@ -0,0 +1,25 @@
+package com.casic.smart.town.sanxi.view
+
+import com.casic.smart.town.sanxi.R
+import com.pengxh.kt.lite.base.KotlinBaseActivity
+
+class BFWellActivity : KotlinBaseActivity() {
+
+ override fun initLayoutView(): Int = R.layout.activity_bf_well
+
+ override fun observeRequestState() {
+
+ }
+
+ override fun setupTopBarLayout() {
+
+ }
+
+ override fun initData() {
+
+ }
+
+ override fun initEvent() {
+
+ }
+}
\ No newline at end of file
diff --git a/app/src/main/java/com/casic/smart/town/sanxi/view/CFWellActivity.kt b/app/src/main/java/com/casic/smart/town/sanxi/view/CFWellActivity.kt
new file mode 100644
index 0000000..bc72674
--- /dev/null
+++ b/app/src/main/java/com/casic/smart/town/sanxi/view/CFWellActivity.kt
@@ -0,0 +1,25 @@
+package com.casic.smart.town.sanxi.view
+
+import com.casic.smart.town.sanxi.R
+import com.pengxh.kt.lite.base.KotlinBaseActivity
+
+class CFWellActivity : KotlinBaseActivity() {
+
+ override fun initLayoutView(): Int = R.layout.activity_cf_well
+
+ override fun observeRequestState() {
+
+ }
+
+ override fun setupTopBarLayout() {
+
+ }
+
+ override fun initData() {
+
+ }
+
+ override fun initEvent() {
+
+ }
+}
\ No newline at end of file
diff --git a/app/src/main/java/com/casic/smart/town/sanxi/vm/WellViewModel.kt b/app/src/main/java/com/casic/smart/town/sanxi/vm/WellViewModel.kt
new file mode 100644
index 0000000..c7d0219
--- /dev/null
+++ b/app/src/main/java/com/casic/smart/town/sanxi/vm/WellViewModel.kt
@@ -0,0 +1,43 @@
+package com.casic.smart.town.sanxi.vm
+
+import androidx.lifecycle.MutableLiveData
+import com.casic.smart.town.sanxi.base.BaseApplication
+import com.casic.smart.town.sanxi.extensions.separateResponseCode
+import com.casic.smart.town.sanxi.extensions.toErrorMessage
+import com.casic.smart.town.sanxi.util.retrofit.RetrofitServiceManager
+import com.pengxh.kt.lite.extensions.launch
+import com.pengxh.kt.lite.extensions.show
+import com.pengxh.kt.lite.vm.BaseViewModel
+import org.json.JSONObject
+
+class WellViewModel : BaseViewModel() {
+
+ val countResultModel = MutableLiveData>()
+
+ fun countWellByState() = launch({
+ val response = RetrofitServiceManager.countWellByState()
+ val responseCode = response.separateResponseCode()
+ if (responseCode == 200) {
+ val map = HashMap(3)
+
+ val jsonObject = JSONObject(response)
+ val data = jsonObject.getJSONObject("data")
+ map["bfWell"] = convertString(data.getString("bfWell"))
+ map["cfWell"] = convertString(data.getString("cfWell"))
+ map["total"] = convertString(data.getString("total"))
+ countResultModel.value = map
+ } else {
+ response.toErrorMessage().show(BaseApplication.obtainInstance())
+ }
+ }, {
+ it.printStackTrace()
+ })
+
+ private fun convertString(value: String): String {
+ return if (value == "") {
+ "0"
+ } else {
+ value
+ }
+ }
+}
\ No newline at end of file
diff --git a/app/src/main/res/drawable/bg_solid_layout_white_radius_10.xml b/app/src/main/res/drawable/bg_solid_layout_white_radius_10.xml
new file mode 100644
index 0000000..f00d59c
--- /dev/null
+++ b/app/src/main/res/drawable/bg_solid_layout_white_radius_10.xml
@@ -0,0 +1,8 @@
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/app/src/main/res/drawable/bg_solid_layout_white_radius_top_20.xml b/app/src/main/res/drawable/bg_solid_layout_white_radius_top_20.xml
new file mode 100644
index 0000000..0c2abfe
--- /dev/null
+++ b/app/src/main/res/drawable/bg_solid_layout_white_radius_top_20.xml
@@ -0,0 +1,10 @@
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/app/src/main/res/drawable/bottom_short_line.xml b/app/src/main/res/drawable/bottom_short_line.xml
new file mode 100644
index 0000000..10c9062
--- /dev/null
+++ b/app/src/main/res/drawable/bottom_short_line.xml
@@ -0,0 +1,12 @@
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/app/src/main/res/font/agencyr.ttf b/app/src/main/res/font/agencyr.ttf
new file mode 100644
index 0000000..f0f7e95
--- /dev/null
+++ b/app/src/main/res/font/agencyr.ttf
Binary files differ
diff --git a/app/src/main/res/layout/activity_all_well.xml b/app/src/main/res/layout/activity_all_well.xml
new file mode 100644
index 0000000..77d9ef6
--- /dev/null
+++ b/app/src/main/res/layout/activity_all_well.xml
@@ -0,0 +1,6 @@
+
+
+
+
\ No newline at end of file
diff --git a/app/src/main/res/layout/activity_bf_well.xml b/app/src/main/res/layout/activity_bf_well.xml
new file mode 100644
index 0000000..77d9ef6
--- /dev/null
+++ b/app/src/main/res/layout/activity_bf_well.xml
@@ -0,0 +1,6 @@
+
+
+
+
\ No newline at end of file
diff --git a/.gitignore b/.gitignore
index 10cfdbf..bf2a5c6 100644
--- a/.gitignore
+++ b/.gitignore
@@ -4,7 +4,8 @@
/.idea
.DS_Store
/build
+/app/build
/captures
.externalNativeBuild
.cxx
-local.properties
+local.properties
\ No newline at end of file
diff --git a/app/build.gradle b/app/build.gradle
index a4cd2ca..6b81499 100644
--- a/app/build.gradle
+++ b/app/build.gradle
@@ -98,4 +98,6 @@
implementation 'org.greenrobot:greendao:3.3.0'
//桌面角标
implementation "me.leolin:ShortcutBadger:1.1.22@aar"
+ //图表
+ implementation 'com.github.PhilJay:MPAndroidChart:v3.1.0'
}
\ No newline at end of file
diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml
index a83c28a..1df917d 100644
--- a/app/src/main/AndroidManifest.xml
+++ b/app/src/main/AndroidManifest.xml
@@ -33,6 +33,9 @@
+
+
+
diff --git a/app/src/main/java/com/casic/smart/town/sanxi/extensions/String.kt b/app/src/main/java/com/casic/smart/town/sanxi/extensions/String.kt
new file mode 100644
index 0000000..d730417
--- /dev/null
+++ b/app/src/main/java/com/casic/smart/town/sanxi/extensions/String.kt
@@ -0,0 +1,20 @@
+package com.casic.smart.town.sanxi.extensions
+
+import com.casic.smart.town.sanxi.model.ErrorMessageModel
+import com.google.gson.Gson
+import com.google.gson.reflect.TypeToken
+import org.json.JSONObject
+
+fun String.separateResponseCode(): Int {
+ if (this.isBlank()) {
+ return 404
+ }
+ return JSONObject(this).getInt("code")
+}
+
+fun String.toErrorMessage(): String {
+ val errorModel = Gson().fromJson(
+ this, object : TypeToken() {}.type
+ )
+ return errorModel.message.toString()
+}
\ No newline at end of file
diff --git a/app/src/main/java/com/casic/smart/town/sanxi/fragment/StatisticsPageFragment.kt b/app/src/main/java/com/casic/smart/town/sanxi/fragment/StatisticsPageFragment.kt
index e84df12..21924de 100644
--- a/app/src/main/java/com/casic/smart/town/sanxi/fragment/StatisticsPageFragment.kt
+++ b/app/src/main/java/com/casic/smart/town/sanxi/fragment/StatisticsPageFragment.kt
@@ -1,10 +1,21 @@
package com.casic.smart.town.sanxi.fragment
+import androidx.lifecycle.ViewModelProvider
import com.casic.smart.town.sanxi.R
+import com.casic.smart.town.sanxi.view.AllWellActivity
+import com.casic.smart.town.sanxi.view.BFWellActivity
+import com.casic.smart.town.sanxi.view.CFWellActivity
+import com.casic.smart.town.sanxi.vm.WellViewModel
+import com.google.android.material.bottomsheet.BottomSheetBehavior
import com.pengxh.kt.lite.base.KotlinBaseFragment
+import com.pengxh.kt.lite.extensions.dp2px
+import com.pengxh.kt.lite.extensions.navigatePageTo
+import kotlinx.android.synthetic.main.fragment_statistics.*
class StatisticsPageFragment : KotlinBaseFragment() {
+ private lateinit var wellViewModel: WellViewModel
+
override fun initLayoutView(): Int = R.layout.fragment_statistics
override fun observeRequestState() {
@@ -16,10 +27,42 @@
}
override fun initData() {
+ //代码设置底部拉升距离
+ val bottomSheetBehavior = BottomSheetBehavior.from(bottomBehaviorLayout)
+ coordinatorLayout.post {
+ bottomSheetBehavior.isFitToContents = false
+ bottomSheetBehavior.halfExpandedRatio = 0.25f
+ bottomSheetBehavior.isHideable = false
+ bottomSheetBehavior.peekHeight = 30f.dp2px(requireContext())
+ }
+ //初始化vm
+ wellViewModel = ViewModelProvider(this)[WellViewModel::class.java]
+ //获取窨井监控数据
+ wellViewModel.countResultModel.observe(this, {
+ cfWellView.text = it["cfWell"]
+ bfWellView.text = it["bfWell"]
+ allWellDataView.text = it["total"]
+ })
}
override fun initEvent() {
+ cfWellView.setOnClickListener {
+ requireContext().navigatePageTo()
+ }
+ bfWellView.setOnClickListener {
+ requireContext().navigatePageTo()
+ }
+
+ allWellDataView.setOnClickListener {
+ requireContext().navigatePageTo()
+ }
+ }
+
+ override fun onResume() {
+ super.onResume()
+ //每次页面切换都需要重新刷新不同状态的窨井数量
+ wellViewModel.countWellByState()
}
}
\ No newline at end of file
diff --git a/app/src/main/java/com/casic/smart/town/sanxi/model/ErrorMessageModel.java b/app/src/main/java/com/casic/smart/town/sanxi/model/ErrorMessageModel.java
new file mode 100644
index 0000000..60546a1
--- /dev/null
+++ b/app/src/main/java/com/casic/smart/town/sanxi/model/ErrorMessageModel.java
@@ -0,0 +1,50 @@
+package com.casic.smart.town.sanxi.model;
+
+public class ErrorMessageModel {
+
+ private int code;
+ private String data;
+ private String exceptionClazz;
+ private String message;
+ private boolean success;
+
+ public int getCode() {
+ return code;
+ }
+
+ public void setCode(int code) {
+ this.code = code;
+ }
+
+ public String getData() {
+ return data;
+ }
+
+ public void setData(String data) {
+ this.data = data;
+ }
+
+ public String getExceptionClazz() {
+ return exceptionClazz;
+ }
+
+ public void setExceptionClazz(String exceptionClazz) {
+ this.exceptionClazz = exceptionClazz;
+ }
+
+ public String getMessage() {
+ return message;
+ }
+
+ public void setMessage(String message) {
+ this.message = message;
+ }
+
+ public boolean isSuccess() {
+ return success;
+ }
+
+ public void setSuccess(boolean success) {
+ this.success = success;
+ }
+}
\ No newline at end of file
diff --git a/app/src/main/java/com/casic/smart/town/sanxi/util/LocaleConstant.kt b/app/src/main/java/com/casic/smart/town/sanxi/util/LocaleConstant.kt
index de61c9a..ab1a36d 100644
--- a/app/src/main/java/com/casic/smart/town/sanxi/util/LocaleConstant.kt
+++ b/app/src/main/java/com/casic/smart/town/sanxi/util/LocaleConstant.kt
@@ -12,4 +12,7 @@
const val PERMISSIONS_CODE = 999
const val PUSH_REGISTER = 2022100101
const val PAGE_LIMIT = 20
+
+ const val DEFAULT_SERVER_CONFIG = "defaultServerConfig"
+ const val DEFAULT_SERVER = "http://111.198.10.15:11308"
}
\ No newline at end of file
diff --git a/app/src/main/java/com/casic/smart/town/sanxi/util/retrofit/RetrofitService.kt b/app/src/main/java/com/casic/smart/town/sanxi/util/retrofit/RetrofitService.kt
new file mode 100644
index 0000000..63db0ec
--- /dev/null
+++ b/app/src/main/java/com/casic/smart/town/sanxi/util/retrofit/RetrofitService.kt
@@ -0,0 +1,12 @@
+package com.casic.smart.town.sanxi.util.retrofit
+
+import retrofit2.http.GET
+
+interface RetrofitService {
+
+ /**
+ * 根据布防状态统计闸井数量接口
+ */
+ @GET("/well/countByBfzt")
+ suspend fun countWellByState(): String
+}
\ No newline at end of file
diff --git a/app/src/main/java/com/casic/smart/town/sanxi/util/retrofit/RetrofitServiceManager.kt b/app/src/main/java/com/casic/smart/town/sanxi/util/retrofit/RetrofitServiceManager.kt
new file mode 100644
index 0000000..46bbf4b
--- /dev/null
+++ b/app/src/main/java/com/casic/smart/town/sanxi/util/retrofit/RetrofitServiceManager.kt
@@ -0,0 +1,23 @@
+package com.casic.smart.town.sanxi.util.retrofit
+
+import com.casic.smart.town.sanxi.util.LocaleConstant
+import com.pengxh.kt.lite.utils.RetrofitFactory
+import com.pengxh.kt.lite.utils.SaveKeyValues
+
+object RetrofitServiceManager {
+
+ private val api by lazy {
+ val defaultValue = SaveKeyValues.getValue(
+ LocaleConstant.DEFAULT_SERVER_CONFIG,
+ LocaleConstant.DEFAULT_SERVER
+ ) as String
+ RetrofitFactory.createRetrofit(defaultValue)
+ }
+
+ /**
+ * 根据布防状态统计闸井数量接口
+ */
+ suspend fun countWellByState(): String {
+ return api.countWellByState()
+ }
+}
\ No newline at end of file
diff --git a/app/src/main/java/com/casic/smart/town/sanxi/view/AllWellActivity.kt b/app/src/main/java/com/casic/smart/town/sanxi/view/AllWellActivity.kt
new file mode 100644
index 0000000..cb0c9e4
--- /dev/null
+++ b/app/src/main/java/com/casic/smart/town/sanxi/view/AllWellActivity.kt
@@ -0,0 +1,25 @@
+package com.casic.smart.town.sanxi.view
+
+import com.casic.smart.town.sanxi.R
+import com.pengxh.kt.lite.base.KotlinBaseActivity
+
+class AllWellActivity : KotlinBaseActivity() {
+
+ override fun initLayoutView(): Int = R.layout.activity_all_well
+
+ override fun observeRequestState() {
+
+ }
+
+ override fun setupTopBarLayout() {
+
+ }
+
+ override fun initData() {
+
+ }
+
+ override fun initEvent() {
+
+ }
+}
\ No newline at end of file
diff --git a/app/src/main/java/com/casic/smart/town/sanxi/view/BFWellActivity.kt b/app/src/main/java/com/casic/smart/town/sanxi/view/BFWellActivity.kt
new file mode 100644
index 0000000..6a43b9e
--- /dev/null
+++ b/app/src/main/java/com/casic/smart/town/sanxi/view/BFWellActivity.kt
@@ -0,0 +1,25 @@
+package com.casic.smart.town.sanxi.view
+
+import com.casic.smart.town.sanxi.R
+import com.pengxh.kt.lite.base.KotlinBaseActivity
+
+class BFWellActivity : KotlinBaseActivity() {
+
+ override fun initLayoutView(): Int = R.layout.activity_bf_well
+
+ override fun observeRequestState() {
+
+ }
+
+ override fun setupTopBarLayout() {
+
+ }
+
+ override fun initData() {
+
+ }
+
+ override fun initEvent() {
+
+ }
+}
\ No newline at end of file
diff --git a/app/src/main/java/com/casic/smart/town/sanxi/view/CFWellActivity.kt b/app/src/main/java/com/casic/smart/town/sanxi/view/CFWellActivity.kt
new file mode 100644
index 0000000..bc72674
--- /dev/null
+++ b/app/src/main/java/com/casic/smart/town/sanxi/view/CFWellActivity.kt
@@ -0,0 +1,25 @@
+package com.casic.smart.town.sanxi.view
+
+import com.casic.smart.town.sanxi.R
+import com.pengxh.kt.lite.base.KotlinBaseActivity
+
+class CFWellActivity : KotlinBaseActivity() {
+
+ override fun initLayoutView(): Int = R.layout.activity_cf_well
+
+ override fun observeRequestState() {
+
+ }
+
+ override fun setupTopBarLayout() {
+
+ }
+
+ override fun initData() {
+
+ }
+
+ override fun initEvent() {
+
+ }
+}
\ No newline at end of file
diff --git a/app/src/main/java/com/casic/smart/town/sanxi/vm/WellViewModel.kt b/app/src/main/java/com/casic/smart/town/sanxi/vm/WellViewModel.kt
new file mode 100644
index 0000000..c7d0219
--- /dev/null
+++ b/app/src/main/java/com/casic/smart/town/sanxi/vm/WellViewModel.kt
@@ -0,0 +1,43 @@
+package com.casic.smart.town.sanxi.vm
+
+import androidx.lifecycle.MutableLiveData
+import com.casic.smart.town.sanxi.base.BaseApplication
+import com.casic.smart.town.sanxi.extensions.separateResponseCode
+import com.casic.smart.town.sanxi.extensions.toErrorMessage
+import com.casic.smart.town.sanxi.util.retrofit.RetrofitServiceManager
+import com.pengxh.kt.lite.extensions.launch
+import com.pengxh.kt.lite.extensions.show
+import com.pengxh.kt.lite.vm.BaseViewModel
+import org.json.JSONObject
+
+class WellViewModel : BaseViewModel() {
+
+ val countResultModel = MutableLiveData>()
+
+ fun countWellByState() = launch({
+ val response = RetrofitServiceManager.countWellByState()
+ val responseCode = response.separateResponseCode()
+ if (responseCode == 200) {
+ val map = HashMap(3)
+
+ val jsonObject = JSONObject(response)
+ val data = jsonObject.getJSONObject("data")
+ map["bfWell"] = convertString(data.getString("bfWell"))
+ map["cfWell"] = convertString(data.getString("cfWell"))
+ map["total"] = convertString(data.getString("total"))
+ countResultModel.value = map
+ } else {
+ response.toErrorMessage().show(BaseApplication.obtainInstance())
+ }
+ }, {
+ it.printStackTrace()
+ })
+
+ private fun convertString(value: String): String {
+ return if (value == "") {
+ "0"
+ } else {
+ value
+ }
+ }
+}
\ No newline at end of file
diff --git a/app/src/main/res/drawable/bg_solid_layout_white_radius_10.xml b/app/src/main/res/drawable/bg_solid_layout_white_radius_10.xml
new file mode 100644
index 0000000..f00d59c
--- /dev/null
+++ b/app/src/main/res/drawable/bg_solid_layout_white_radius_10.xml
@@ -0,0 +1,8 @@
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/app/src/main/res/drawable/bg_solid_layout_white_radius_top_20.xml b/app/src/main/res/drawable/bg_solid_layout_white_radius_top_20.xml
new file mode 100644
index 0000000..0c2abfe
--- /dev/null
+++ b/app/src/main/res/drawable/bg_solid_layout_white_radius_top_20.xml
@@ -0,0 +1,10 @@
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/app/src/main/res/drawable/bottom_short_line.xml b/app/src/main/res/drawable/bottom_short_line.xml
new file mode 100644
index 0000000..10c9062
--- /dev/null
+++ b/app/src/main/res/drawable/bottom_short_line.xml
@@ -0,0 +1,12 @@
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/app/src/main/res/font/agencyr.ttf b/app/src/main/res/font/agencyr.ttf
new file mode 100644
index 0000000..f0f7e95
--- /dev/null
+++ b/app/src/main/res/font/agencyr.ttf
Binary files differ
diff --git a/app/src/main/res/layout/activity_all_well.xml b/app/src/main/res/layout/activity_all_well.xml
new file mode 100644
index 0000000..77d9ef6
--- /dev/null
+++ b/app/src/main/res/layout/activity_all_well.xml
@@ -0,0 +1,6 @@
+
+
+
+
\ No newline at end of file
diff --git a/app/src/main/res/layout/activity_bf_well.xml b/app/src/main/res/layout/activity_bf_well.xml
new file mode 100644
index 0000000..77d9ef6
--- /dev/null
+++ b/app/src/main/res/layout/activity_bf_well.xml
@@ -0,0 +1,6 @@
+
+
+
+
\ No newline at end of file
diff --git a/app/src/main/res/layout/activity_cf_well.xml b/app/src/main/res/layout/activity_cf_well.xml
new file mode 100644
index 0000000..77d9ef6
--- /dev/null
+++ b/app/src/main/res/layout/activity_cf_well.xml
@@ -0,0 +1,6 @@
+
+
+
+
\ No newline at end of file
diff --git a/.gitignore b/.gitignore
index 10cfdbf..bf2a5c6 100644
--- a/.gitignore
+++ b/.gitignore
@@ -4,7 +4,8 @@
/.idea
.DS_Store
/build
+/app/build
/captures
.externalNativeBuild
.cxx
-local.properties
+local.properties
\ No newline at end of file
diff --git a/app/build.gradle b/app/build.gradle
index a4cd2ca..6b81499 100644
--- a/app/build.gradle
+++ b/app/build.gradle
@@ -98,4 +98,6 @@
implementation 'org.greenrobot:greendao:3.3.0'
//桌面角标
implementation "me.leolin:ShortcutBadger:1.1.22@aar"
+ //图表
+ implementation 'com.github.PhilJay:MPAndroidChart:v3.1.0'
}
\ No newline at end of file
diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml
index a83c28a..1df917d 100644
--- a/app/src/main/AndroidManifest.xml
+++ b/app/src/main/AndroidManifest.xml
@@ -33,6 +33,9 @@
+
+
+
diff --git a/app/src/main/java/com/casic/smart/town/sanxi/extensions/String.kt b/app/src/main/java/com/casic/smart/town/sanxi/extensions/String.kt
new file mode 100644
index 0000000..d730417
--- /dev/null
+++ b/app/src/main/java/com/casic/smart/town/sanxi/extensions/String.kt
@@ -0,0 +1,20 @@
+package com.casic.smart.town.sanxi.extensions
+
+import com.casic.smart.town.sanxi.model.ErrorMessageModel
+import com.google.gson.Gson
+import com.google.gson.reflect.TypeToken
+import org.json.JSONObject
+
+fun String.separateResponseCode(): Int {
+ if (this.isBlank()) {
+ return 404
+ }
+ return JSONObject(this).getInt("code")
+}
+
+fun String.toErrorMessage(): String {
+ val errorModel = Gson().fromJson(
+ this, object : TypeToken() {}.type
+ )
+ return errorModel.message.toString()
+}
\ No newline at end of file
diff --git a/app/src/main/java/com/casic/smart/town/sanxi/fragment/StatisticsPageFragment.kt b/app/src/main/java/com/casic/smart/town/sanxi/fragment/StatisticsPageFragment.kt
index e84df12..21924de 100644
--- a/app/src/main/java/com/casic/smart/town/sanxi/fragment/StatisticsPageFragment.kt
+++ b/app/src/main/java/com/casic/smart/town/sanxi/fragment/StatisticsPageFragment.kt
@@ -1,10 +1,21 @@
package com.casic.smart.town.sanxi.fragment
+import androidx.lifecycle.ViewModelProvider
import com.casic.smart.town.sanxi.R
+import com.casic.smart.town.sanxi.view.AllWellActivity
+import com.casic.smart.town.sanxi.view.BFWellActivity
+import com.casic.smart.town.sanxi.view.CFWellActivity
+import com.casic.smart.town.sanxi.vm.WellViewModel
+import com.google.android.material.bottomsheet.BottomSheetBehavior
import com.pengxh.kt.lite.base.KotlinBaseFragment
+import com.pengxh.kt.lite.extensions.dp2px
+import com.pengxh.kt.lite.extensions.navigatePageTo
+import kotlinx.android.synthetic.main.fragment_statistics.*
class StatisticsPageFragment : KotlinBaseFragment() {
+ private lateinit var wellViewModel: WellViewModel
+
override fun initLayoutView(): Int = R.layout.fragment_statistics
override fun observeRequestState() {
@@ -16,10 +27,42 @@
}
override fun initData() {
+ //代码设置底部拉升距离
+ val bottomSheetBehavior = BottomSheetBehavior.from(bottomBehaviorLayout)
+ coordinatorLayout.post {
+ bottomSheetBehavior.isFitToContents = false
+ bottomSheetBehavior.halfExpandedRatio = 0.25f
+ bottomSheetBehavior.isHideable = false
+ bottomSheetBehavior.peekHeight = 30f.dp2px(requireContext())
+ }
+ //初始化vm
+ wellViewModel = ViewModelProvider(this)[WellViewModel::class.java]
+ //获取窨井监控数据
+ wellViewModel.countResultModel.observe(this, {
+ cfWellView.text = it["cfWell"]
+ bfWellView.text = it["bfWell"]
+ allWellDataView.text = it["total"]
+ })
}
override fun initEvent() {
+ cfWellView.setOnClickListener {
+ requireContext().navigatePageTo()
+ }
+ bfWellView.setOnClickListener {
+ requireContext().navigatePageTo()
+ }
+
+ allWellDataView.setOnClickListener {
+ requireContext().navigatePageTo()
+ }
+ }
+
+ override fun onResume() {
+ super.onResume()
+ //每次页面切换都需要重新刷新不同状态的窨井数量
+ wellViewModel.countWellByState()
}
}
\ No newline at end of file
diff --git a/app/src/main/java/com/casic/smart/town/sanxi/model/ErrorMessageModel.java b/app/src/main/java/com/casic/smart/town/sanxi/model/ErrorMessageModel.java
new file mode 100644
index 0000000..60546a1
--- /dev/null
+++ b/app/src/main/java/com/casic/smart/town/sanxi/model/ErrorMessageModel.java
@@ -0,0 +1,50 @@
+package com.casic.smart.town.sanxi.model;
+
+public class ErrorMessageModel {
+
+ private int code;
+ private String data;
+ private String exceptionClazz;
+ private String message;
+ private boolean success;
+
+ public int getCode() {
+ return code;
+ }
+
+ public void setCode(int code) {
+ this.code = code;
+ }
+
+ public String getData() {
+ return data;
+ }
+
+ public void setData(String data) {
+ this.data = data;
+ }
+
+ public String getExceptionClazz() {
+ return exceptionClazz;
+ }
+
+ public void setExceptionClazz(String exceptionClazz) {
+ this.exceptionClazz = exceptionClazz;
+ }
+
+ public String getMessage() {
+ return message;
+ }
+
+ public void setMessage(String message) {
+ this.message = message;
+ }
+
+ public boolean isSuccess() {
+ return success;
+ }
+
+ public void setSuccess(boolean success) {
+ this.success = success;
+ }
+}
\ No newline at end of file
diff --git a/app/src/main/java/com/casic/smart/town/sanxi/util/LocaleConstant.kt b/app/src/main/java/com/casic/smart/town/sanxi/util/LocaleConstant.kt
index de61c9a..ab1a36d 100644
--- a/app/src/main/java/com/casic/smart/town/sanxi/util/LocaleConstant.kt
+++ b/app/src/main/java/com/casic/smart/town/sanxi/util/LocaleConstant.kt
@@ -12,4 +12,7 @@
const val PERMISSIONS_CODE = 999
const val PUSH_REGISTER = 2022100101
const val PAGE_LIMIT = 20
+
+ const val DEFAULT_SERVER_CONFIG = "defaultServerConfig"
+ const val DEFAULT_SERVER = "http://111.198.10.15:11308"
}
\ No newline at end of file
diff --git a/app/src/main/java/com/casic/smart/town/sanxi/util/retrofit/RetrofitService.kt b/app/src/main/java/com/casic/smart/town/sanxi/util/retrofit/RetrofitService.kt
new file mode 100644
index 0000000..63db0ec
--- /dev/null
+++ b/app/src/main/java/com/casic/smart/town/sanxi/util/retrofit/RetrofitService.kt
@@ -0,0 +1,12 @@
+package com.casic.smart.town.sanxi.util.retrofit
+
+import retrofit2.http.GET
+
+interface RetrofitService {
+
+ /**
+ * 根据布防状态统计闸井数量接口
+ */
+ @GET("/well/countByBfzt")
+ suspend fun countWellByState(): String
+}
\ No newline at end of file
diff --git a/app/src/main/java/com/casic/smart/town/sanxi/util/retrofit/RetrofitServiceManager.kt b/app/src/main/java/com/casic/smart/town/sanxi/util/retrofit/RetrofitServiceManager.kt
new file mode 100644
index 0000000..46bbf4b
--- /dev/null
+++ b/app/src/main/java/com/casic/smart/town/sanxi/util/retrofit/RetrofitServiceManager.kt
@@ -0,0 +1,23 @@
+package com.casic.smart.town.sanxi.util.retrofit
+
+import com.casic.smart.town.sanxi.util.LocaleConstant
+import com.pengxh.kt.lite.utils.RetrofitFactory
+import com.pengxh.kt.lite.utils.SaveKeyValues
+
+object RetrofitServiceManager {
+
+ private val api by lazy {
+ val defaultValue = SaveKeyValues.getValue(
+ LocaleConstant.DEFAULT_SERVER_CONFIG,
+ LocaleConstant.DEFAULT_SERVER
+ ) as String
+ RetrofitFactory.createRetrofit(defaultValue)
+ }
+
+ /**
+ * 根据布防状态统计闸井数量接口
+ */
+ suspend fun countWellByState(): String {
+ return api.countWellByState()
+ }
+}
\ No newline at end of file
diff --git a/app/src/main/java/com/casic/smart/town/sanxi/view/AllWellActivity.kt b/app/src/main/java/com/casic/smart/town/sanxi/view/AllWellActivity.kt
new file mode 100644
index 0000000..cb0c9e4
--- /dev/null
+++ b/app/src/main/java/com/casic/smart/town/sanxi/view/AllWellActivity.kt
@@ -0,0 +1,25 @@
+package com.casic.smart.town.sanxi.view
+
+import com.casic.smart.town.sanxi.R
+import com.pengxh.kt.lite.base.KotlinBaseActivity
+
+class AllWellActivity : KotlinBaseActivity() {
+
+ override fun initLayoutView(): Int = R.layout.activity_all_well
+
+ override fun observeRequestState() {
+
+ }
+
+ override fun setupTopBarLayout() {
+
+ }
+
+ override fun initData() {
+
+ }
+
+ override fun initEvent() {
+
+ }
+}
\ No newline at end of file
diff --git a/app/src/main/java/com/casic/smart/town/sanxi/view/BFWellActivity.kt b/app/src/main/java/com/casic/smart/town/sanxi/view/BFWellActivity.kt
new file mode 100644
index 0000000..6a43b9e
--- /dev/null
+++ b/app/src/main/java/com/casic/smart/town/sanxi/view/BFWellActivity.kt
@@ -0,0 +1,25 @@
+package com.casic.smart.town.sanxi.view
+
+import com.casic.smart.town.sanxi.R
+import com.pengxh.kt.lite.base.KotlinBaseActivity
+
+class BFWellActivity : KotlinBaseActivity() {
+
+ override fun initLayoutView(): Int = R.layout.activity_bf_well
+
+ override fun observeRequestState() {
+
+ }
+
+ override fun setupTopBarLayout() {
+
+ }
+
+ override fun initData() {
+
+ }
+
+ override fun initEvent() {
+
+ }
+}
\ No newline at end of file
diff --git a/app/src/main/java/com/casic/smart/town/sanxi/view/CFWellActivity.kt b/app/src/main/java/com/casic/smart/town/sanxi/view/CFWellActivity.kt
new file mode 100644
index 0000000..bc72674
--- /dev/null
+++ b/app/src/main/java/com/casic/smart/town/sanxi/view/CFWellActivity.kt
@@ -0,0 +1,25 @@
+package com.casic.smart.town.sanxi.view
+
+import com.casic.smart.town.sanxi.R
+import com.pengxh.kt.lite.base.KotlinBaseActivity
+
+class CFWellActivity : KotlinBaseActivity() {
+
+ override fun initLayoutView(): Int = R.layout.activity_cf_well
+
+ override fun observeRequestState() {
+
+ }
+
+ override fun setupTopBarLayout() {
+
+ }
+
+ override fun initData() {
+
+ }
+
+ override fun initEvent() {
+
+ }
+}
\ No newline at end of file
diff --git a/app/src/main/java/com/casic/smart/town/sanxi/vm/WellViewModel.kt b/app/src/main/java/com/casic/smart/town/sanxi/vm/WellViewModel.kt
new file mode 100644
index 0000000..c7d0219
--- /dev/null
+++ b/app/src/main/java/com/casic/smart/town/sanxi/vm/WellViewModel.kt
@@ -0,0 +1,43 @@
+package com.casic.smart.town.sanxi.vm
+
+import androidx.lifecycle.MutableLiveData
+import com.casic.smart.town.sanxi.base.BaseApplication
+import com.casic.smart.town.sanxi.extensions.separateResponseCode
+import com.casic.smart.town.sanxi.extensions.toErrorMessage
+import com.casic.smart.town.sanxi.util.retrofit.RetrofitServiceManager
+import com.pengxh.kt.lite.extensions.launch
+import com.pengxh.kt.lite.extensions.show
+import com.pengxh.kt.lite.vm.BaseViewModel
+import org.json.JSONObject
+
+class WellViewModel : BaseViewModel() {
+
+ val countResultModel = MutableLiveData>()
+
+ fun countWellByState() = launch({
+ val response = RetrofitServiceManager.countWellByState()
+ val responseCode = response.separateResponseCode()
+ if (responseCode == 200) {
+ val map = HashMap(3)
+
+ val jsonObject = JSONObject(response)
+ val data = jsonObject.getJSONObject("data")
+ map["bfWell"] = convertString(data.getString("bfWell"))
+ map["cfWell"] = convertString(data.getString("cfWell"))
+ map["total"] = convertString(data.getString("total"))
+ countResultModel.value = map
+ } else {
+ response.toErrorMessage().show(BaseApplication.obtainInstance())
+ }
+ }, {
+ it.printStackTrace()
+ })
+
+ private fun convertString(value: String): String {
+ return if (value == "") {
+ "0"
+ } else {
+ value
+ }
+ }
+}
\ No newline at end of file
diff --git a/app/src/main/res/drawable/bg_solid_layout_white_radius_10.xml b/app/src/main/res/drawable/bg_solid_layout_white_radius_10.xml
new file mode 100644
index 0000000..f00d59c
--- /dev/null
+++ b/app/src/main/res/drawable/bg_solid_layout_white_radius_10.xml
@@ -0,0 +1,8 @@
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/app/src/main/res/drawable/bg_solid_layout_white_radius_top_20.xml b/app/src/main/res/drawable/bg_solid_layout_white_radius_top_20.xml
new file mode 100644
index 0000000..0c2abfe
--- /dev/null
+++ b/app/src/main/res/drawable/bg_solid_layout_white_radius_top_20.xml
@@ -0,0 +1,10 @@
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/app/src/main/res/drawable/bottom_short_line.xml b/app/src/main/res/drawable/bottom_short_line.xml
new file mode 100644
index 0000000..10c9062
--- /dev/null
+++ b/app/src/main/res/drawable/bottom_short_line.xml
@@ -0,0 +1,12 @@
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/app/src/main/res/font/agencyr.ttf b/app/src/main/res/font/agencyr.ttf
new file mode 100644
index 0000000..f0f7e95
--- /dev/null
+++ b/app/src/main/res/font/agencyr.ttf
Binary files differ
diff --git a/app/src/main/res/layout/activity_all_well.xml b/app/src/main/res/layout/activity_all_well.xml
new file mode 100644
index 0000000..77d9ef6
--- /dev/null
+++ b/app/src/main/res/layout/activity_all_well.xml
@@ -0,0 +1,6 @@
+
+
+
+
\ No newline at end of file
diff --git a/app/src/main/res/layout/activity_bf_well.xml b/app/src/main/res/layout/activity_bf_well.xml
new file mode 100644
index 0000000..77d9ef6
--- /dev/null
+++ b/app/src/main/res/layout/activity_bf_well.xml
@@ -0,0 +1,6 @@
+
+
+
+
\ No newline at end of file
diff --git a/app/src/main/res/layout/activity_cf_well.xml b/app/src/main/res/layout/activity_cf_well.xml
new file mode 100644
index 0000000..77d9ef6
--- /dev/null
+++ b/app/src/main/res/layout/activity_cf_well.xml
@@ -0,0 +1,6 @@
+
+
+
+
\ No newline at end of file
diff --git a/app/src/main/res/layout/fragment_statistics.xml b/app/src/main/res/layout/fragment_statistics.xml
index 77d9ef6..82d54c8 100644
--- a/app/src/main/res/layout/fragment_statistics.xml
+++ b/app/src/main/res/layout/fragment_statistics.xml
@@ -1,6 +1,114 @@
-
+ android:layout_height="match_parent"
+ android:background="@color/white"
+ android:orientation="vertical">
-
\ No newline at end of file
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/.gitignore b/.gitignore
index 10cfdbf..bf2a5c6 100644
--- a/.gitignore
+++ b/.gitignore
@@ -4,7 +4,8 @@
/.idea
.DS_Store
/build
+/app/build
/captures
.externalNativeBuild
.cxx
-local.properties
+local.properties
\ No newline at end of file
diff --git a/app/build.gradle b/app/build.gradle
index a4cd2ca..6b81499 100644
--- a/app/build.gradle
+++ b/app/build.gradle
@@ -98,4 +98,6 @@
implementation 'org.greenrobot:greendao:3.3.0'
//桌面角标
implementation "me.leolin:ShortcutBadger:1.1.22@aar"
+ //图表
+ implementation 'com.github.PhilJay:MPAndroidChart:v3.1.0'
}
\ No newline at end of file
diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml
index a83c28a..1df917d 100644
--- a/app/src/main/AndroidManifest.xml
+++ b/app/src/main/AndroidManifest.xml
@@ -33,6 +33,9 @@
+
+
+
diff --git a/app/src/main/java/com/casic/smart/town/sanxi/extensions/String.kt b/app/src/main/java/com/casic/smart/town/sanxi/extensions/String.kt
new file mode 100644
index 0000000..d730417
--- /dev/null
+++ b/app/src/main/java/com/casic/smart/town/sanxi/extensions/String.kt
@@ -0,0 +1,20 @@
+package com.casic.smart.town.sanxi.extensions
+
+import com.casic.smart.town.sanxi.model.ErrorMessageModel
+import com.google.gson.Gson
+import com.google.gson.reflect.TypeToken
+import org.json.JSONObject
+
+fun String.separateResponseCode(): Int {
+ if (this.isBlank()) {
+ return 404
+ }
+ return JSONObject(this).getInt("code")
+}
+
+fun String.toErrorMessage(): String {
+ val errorModel = Gson().fromJson(
+ this, object : TypeToken() {}.type
+ )
+ return errorModel.message.toString()
+}
\ No newline at end of file
diff --git a/app/src/main/java/com/casic/smart/town/sanxi/fragment/StatisticsPageFragment.kt b/app/src/main/java/com/casic/smart/town/sanxi/fragment/StatisticsPageFragment.kt
index e84df12..21924de 100644
--- a/app/src/main/java/com/casic/smart/town/sanxi/fragment/StatisticsPageFragment.kt
+++ b/app/src/main/java/com/casic/smart/town/sanxi/fragment/StatisticsPageFragment.kt
@@ -1,10 +1,21 @@
package com.casic.smart.town.sanxi.fragment
+import androidx.lifecycle.ViewModelProvider
import com.casic.smart.town.sanxi.R
+import com.casic.smart.town.sanxi.view.AllWellActivity
+import com.casic.smart.town.sanxi.view.BFWellActivity
+import com.casic.smart.town.sanxi.view.CFWellActivity
+import com.casic.smart.town.sanxi.vm.WellViewModel
+import com.google.android.material.bottomsheet.BottomSheetBehavior
import com.pengxh.kt.lite.base.KotlinBaseFragment
+import com.pengxh.kt.lite.extensions.dp2px
+import com.pengxh.kt.lite.extensions.navigatePageTo
+import kotlinx.android.synthetic.main.fragment_statistics.*
class StatisticsPageFragment : KotlinBaseFragment() {
+ private lateinit var wellViewModel: WellViewModel
+
override fun initLayoutView(): Int = R.layout.fragment_statistics
override fun observeRequestState() {
@@ -16,10 +27,42 @@
}
override fun initData() {
+ //代码设置底部拉升距离
+ val bottomSheetBehavior = BottomSheetBehavior.from(bottomBehaviorLayout)
+ coordinatorLayout.post {
+ bottomSheetBehavior.isFitToContents = false
+ bottomSheetBehavior.halfExpandedRatio = 0.25f
+ bottomSheetBehavior.isHideable = false
+ bottomSheetBehavior.peekHeight = 30f.dp2px(requireContext())
+ }
+ //初始化vm
+ wellViewModel = ViewModelProvider(this)[WellViewModel::class.java]
+ //获取窨井监控数据
+ wellViewModel.countResultModel.observe(this, {
+ cfWellView.text = it["cfWell"]
+ bfWellView.text = it["bfWell"]
+ allWellDataView.text = it["total"]
+ })
}
override fun initEvent() {
+ cfWellView.setOnClickListener {
+ requireContext().navigatePageTo()
+ }
+ bfWellView.setOnClickListener {
+ requireContext().navigatePageTo()
+ }
+
+ allWellDataView.setOnClickListener {
+ requireContext().navigatePageTo()
+ }
+ }
+
+ override fun onResume() {
+ super.onResume()
+ //每次页面切换都需要重新刷新不同状态的窨井数量
+ wellViewModel.countWellByState()
}
}
\ No newline at end of file
diff --git a/app/src/main/java/com/casic/smart/town/sanxi/model/ErrorMessageModel.java b/app/src/main/java/com/casic/smart/town/sanxi/model/ErrorMessageModel.java
new file mode 100644
index 0000000..60546a1
--- /dev/null
+++ b/app/src/main/java/com/casic/smart/town/sanxi/model/ErrorMessageModel.java
@@ -0,0 +1,50 @@
+package com.casic.smart.town.sanxi.model;
+
+public class ErrorMessageModel {
+
+ private int code;
+ private String data;
+ private String exceptionClazz;
+ private String message;
+ private boolean success;
+
+ public int getCode() {
+ return code;
+ }
+
+ public void setCode(int code) {
+ this.code = code;
+ }
+
+ public String getData() {
+ return data;
+ }
+
+ public void setData(String data) {
+ this.data = data;
+ }
+
+ public String getExceptionClazz() {
+ return exceptionClazz;
+ }
+
+ public void setExceptionClazz(String exceptionClazz) {
+ this.exceptionClazz = exceptionClazz;
+ }
+
+ public String getMessage() {
+ return message;
+ }
+
+ public void setMessage(String message) {
+ this.message = message;
+ }
+
+ public boolean isSuccess() {
+ return success;
+ }
+
+ public void setSuccess(boolean success) {
+ this.success = success;
+ }
+}
\ No newline at end of file
diff --git a/app/src/main/java/com/casic/smart/town/sanxi/util/LocaleConstant.kt b/app/src/main/java/com/casic/smart/town/sanxi/util/LocaleConstant.kt
index de61c9a..ab1a36d 100644
--- a/app/src/main/java/com/casic/smart/town/sanxi/util/LocaleConstant.kt
+++ b/app/src/main/java/com/casic/smart/town/sanxi/util/LocaleConstant.kt
@@ -12,4 +12,7 @@
const val PERMISSIONS_CODE = 999
const val PUSH_REGISTER = 2022100101
const val PAGE_LIMIT = 20
+
+ const val DEFAULT_SERVER_CONFIG = "defaultServerConfig"
+ const val DEFAULT_SERVER = "http://111.198.10.15:11308"
}
\ No newline at end of file
diff --git a/app/src/main/java/com/casic/smart/town/sanxi/util/retrofit/RetrofitService.kt b/app/src/main/java/com/casic/smart/town/sanxi/util/retrofit/RetrofitService.kt
new file mode 100644
index 0000000..63db0ec
--- /dev/null
+++ b/app/src/main/java/com/casic/smart/town/sanxi/util/retrofit/RetrofitService.kt
@@ -0,0 +1,12 @@
+package com.casic.smart.town.sanxi.util.retrofit
+
+import retrofit2.http.GET
+
+interface RetrofitService {
+
+ /**
+ * 根据布防状态统计闸井数量接口
+ */
+ @GET("/well/countByBfzt")
+ suspend fun countWellByState(): String
+}
\ No newline at end of file
diff --git a/app/src/main/java/com/casic/smart/town/sanxi/util/retrofit/RetrofitServiceManager.kt b/app/src/main/java/com/casic/smart/town/sanxi/util/retrofit/RetrofitServiceManager.kt
new file mode 100644
index 0000000..46bbf4b
--- /dev/null
+++ b/app/src/main/java/com/casic/smart/town/sanxi/util/retrofit/RetrofitServiceManager.kt
@@ -0,0 +1,23 @@
+package com.casic.smart.town.sanxi.util.retrofit
+
+import com.casic.smart.town.sanxi.util.LocaleConstant
+import com.pengxh.kt.lite.utils.RetrofitFactory
+import com.pengxh.kt.lite.utils.SaveKeyValues
+
+object RetrofitServiceManager {
+
+ private val api by lazy {
+ val defaultValue = SaveKeyValues.getValue(
+ LocaleConstant.DEFAULT_SERVER_CONFIG,
+ LocaleConstant.DEFAULT_SERVER
+ ) as String
+ RetrofitFactory.createRetrofit(defaultValue)
+ }
+
+ /**
+ * 根据布防状态统计闸井数量接口
+ */
+ suspend fun countWellByState(): String {
+ return api.countWellByState()
+ }
+}
\ No newline at end of file
diff --git a/app/src/main/java/com/casic/smart/town/sanxi/view/AllWellActivity.kt b/app/src/main/java/com/casic/smart/town/sanxi/view/AllWellActivity.kt
new file mode 100644
index 0000000..cb0c9e4
--- /dev/null
+++ b/app/src/main/java/com/casic/smart/town/sanxi/view/AllWellActivity.kt
@@ -0,0 +1,25 @@
+package com.casic.smart.town.sanxi.view
+
+import com.casic.smart.town.sanxi.R
+import com.pengxh.kt.lite.base.KotlinBaseActivity
+
+class AllWellActivity : KotlinBaseActivity() {
+
+ override fun initLayoutView(): Int = R.layout.activity_all_well
+
+ override fun observeRequestState() {
+
+ }
+
+ override fun setupTopBarLayout() {
+
+ }
+
+ override fun initData() {
+
+ }
+
+ override fun initEvent() {
+
+ }
+}
\ No newline at end of file
diff --git a/app/src/main/java/com/casic/smart/town/sanxi/view/BFWellActivity.kt b/app/src/main/java/com/casic/smart/town/sanxi/view/BFWellActivity.kt
new file mode 100644
index 0000000..6a43b9e
--- /dev/null
+++ b/app/src/main/java/com/casic/smart/town/sanxi/view/BFWellActivity.kt
@@ -0,0 +1,25 @@
+package com.casic.smart.town.sanxi.view
+
+import com.casic.smart.town.sanxi.R
+import com.pengxh.kt.lite.base.KotlinBaseActivity
+
+class BFWellActivity : KotlinBaseActivity() {
+
+ override fun initLayoutView(): Int = R.layout.activity_bf_well
+
+ override fun observeRequestState() {
+
+ }
+
+ override fun setupTopBarLayout() {
+
+ }
+
+ override fun initData() {
+
+ }
+
+ override fun initEvent() {
+
+ }
+}
\ No newline at end of file
diff --git a/app/src/main/java/com/casic/smart/town/sanxi/view/CFWellActivity.kt b/app/src/main/java/com/casic/smart/town/sanxi/view/CFWellActivity.kt
new file mode 100644
index 0000000..bc72674
--- /dev/null
+++ b/app/src/main/java/com/casic/smart/town/sanxi/view/CFWellActivity.kt
@@ -0,0 +1,25 @@
+package com.casic.smart.town.sanxi.view
+
+import com.casic.smart.town.sanxi.R
+import com.pengxh.kt.lite.base.KotlinBaseActivity
+
+class CFWellActivity : KotlinBaseActivity() {
+
+ override fun initLayoutView(): Int = R.layout.activity_cf_well
+
+ override fun observeRequestState() {
+
+ }
+
+ override fun setupTopBarLayout() {
+
+ }
+
+ override fun initData() {
+
+ }
+
+ override fun initEvent() {
+
+ }
+}
\ No newline at end of file
diff --git a/app/src/main/java/com/casic/smart/town/sanxi/vm/WellViewModel.kt b/app/src/main/java/com/casic/smart/town/sanxi/vm/WellViewModel.kt
new file mode 100644
index 0000000..c7d0219
--- /dev/null
+++ b/app/src/main/java/com/casic/smart/town/sanxi/vm/WellViewModel.kt
@@ -0,0 +1,43 @@
+package com.casic.smart.town.sanxi.vm
+
+import androidx.lifecycle.MutableLiveData
+import com.casic.smart.town.sanxi.base.BaseApplication
+import com.casic.smart.town.sanxi.extensions.separateResponseCode
+import com.casic.smart.town.sanxi.extensions.toErrorMessage
+import com.casic.smart.town.sanxi.util.retrofit.RetrofitServiceManager
+import com.pengxh.kt.lite.extensions.launch
+import com.pengxh.kt.lite.extensions.show
+import com.pengxh.kt.lite.vm.BaseViewModel
+import org.json.JSONObject
+
+class WellViewModel : BaseViewModel() {
+
+ val countResultModel = MutableLiveData>()
+
+ fun countWellByState() = launch({
+ val response = RetrofitServiceManager.countWellByState()
+ val responseCode = response.separateResponseCode()
+ if (responseCode == 200) {
+ val map = HashMap(3)
+
+ val jsonObject = JSONObject(response)
+ val data = jsonObject.getJSONObject("data")
+ map["bfWell"] = convertString(data.getString("bfWell"))
+ map["cfWell"] = convertString(data.getString("cfWell"))
+ map["total"] = convertString(data.getString("total"))
+ countResultModel.value = map
+ } else {
+ response.toErrorMessage().show(BaseApplication.obtainInstance())
+ }
+ }, {
+ it.printStackTrace()
+ })
+
+ private fun convertString(value: String): String {
+ return if (value == "") {
+ "0"
+ } else {
+ value
+ }
+ }
+}
\ No newline at end of file
diff --git a/app/src/main/res/drawable/bg_solid_layout_white_radius_10.xml b/app/src/main/res/drawable/bg_solid_layout_white_radius_10.xml
new file mode 100644
index 0000000..f00d59c
--- /dev/null
+++ b/app/src/main/res/drawable/bg_solid_layout_white_radius_10.xml
@@ -0,0 +1,8 @@
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/app/src/main/res/drawable/bg_solid_layout_white_radius_top_20.xml b/app/src/main/res/drawable/bg_solid_layout_white_radius_top_20.xml
new file mode 100644
index 0000000..0c2abfe
--- /dev/null
+++ b/app/src/main/res/drawable/bg_solid_layout_white_radius_top_20.xml
@@ -0,0 +1,10 @@
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/app/src/main/res/drawable/bottom_short_line.xml b/app/src/main/res/drawable/bottom_short_line.xml
new file mode 100644
index 0000000..10c9062
--- /dev/null
+++ b/app/src/main/res/drawable/bottom_short_line.xml
@@ -0,0 +1,12 @@
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/app/src/main/res/font/agencyr.ttf b/app/src/main/res/font/agencyr.ttf
new file mode 100644
index 0000000..f0f7e95
--- /dev/null
+++ b/app/src/main/res/font/agencyr.ttf
Binary files differ
diff --git a/app/src/main/res/layout/activity_all_well.xml b/app/src/main/res/layout/activity_all_well.xml
new file mode 100644
index 0000000..77d9ef6
--- /dev/null
+++ b/app/src/main/res/layout/activity_all_well.xml
@@ -0,0 +1,6 @@
+
+
+
+
\ No newline at end of file
diff --git a/app/src/main/res/layout/activity_bf_well.xml b/app/src/main/res/layout/activity_bf_well.xml
new file mode 100644
index 0000000..77d9ef6
--- /dev/null
+++ b/app/src/main/res/layout/activity_bf_well.xml
@@ -0,0 +1,6 @@
+
+
+
+
\ No newline at end of file
diff --git a/app/src/main/res/layout/activity_cf_well.xml b/app/src/main/res/layout/activity_cf_well.xml
new file mode 100644
index 0000000..77d9ef6
--- /dev/null
+++ b/app/src/main/res/layout/activity_cf_well.xml
@@ -0,0 +1,6 @@
+
+
+
+
\ No newline at end of file
diff --git a/app/src/main/res/layout/fragment_statistics.xml b/app/src/main/res/layout/fragment_statistics.xml
index 77d9ef6..82d54c8 100644
--- a/app/src/main/res/layout/fragment_statistics.xml
+++ b/app/src/main/res/layout/fragment_statistics.xml
@@ -1,6 +1,114 @@
-
+ android:layout_height="match_parent"
+ android:background="@color/white"
+ android:orientation="vertical">
-
\ No newline at end of file
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/app/src/main/res/values/colors.xml b/app/src/main/res/values/colors.xml
index bbce66f..645436a 100644
--- a/app/src/main/res/values/colors.xml
+++ b/app/src/main/res/values/colors.xml
@@ -2,7 +2,12 @@
#1D55C6
#333333
+ #626262
#CCCCCC
+ #F7F7FA
+ #37D4AE
+ #FF0000
+ #FF9100
#FFBB86FC
#FF6200EE
diff --git a/.gitignore b/.gitignore
index 10cfdbf..bf2a5c6 100644
--- a/.gitignore
+++ b/.gitignore
@@ -4,7 +4,8 @@
/.idea
.DS_Store
/build
+/app/build
/captures
.externalNativeBuild
.cxx
-local.properties
+local.properties
\ No newline at end of file
diff --git a/app/build.gradle b/app/build.gradle
index a4cd2ca..6b81499 100644
--- a/app/build.gradle
+++ b/app/build.gradle
@@ -98,4 +98,6 @@
implementation 'org.greenrobot:greendao:3.3.0'
//桌面角标
implementation "me.leolin:ShortcutBadger:1.1.22@aar"
+ //图表
+ implementation 'com.github.PhilJay:MPAndroidChart:v3.1.0'
}
\ No newline at end of file
diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml
index a83c28a..1df917d 100644
--- a/app/src/main/AndroidManifest.xml
+++ b/app/src/main/AndroidManifest.xml
@@ -33,6 +33,9 @@
+
+
+
diff --git a/app/src/main/java/com/casic/smart/town/sanxi/extensions/String.kt b/app/src/main/java/com/casic/smart/town/sanxi/extensions/String.kt
new file mode 100644
index 0000000..d730417
--- /dev/null
+++ b/app/src/main/java/com/casic/smart/town/sanxi/extensions/String.kt
@@ -0,0 +1,20 @@
+package com.casic.smart.town.sanxi.extensions
+
+import com.casic.smart.town.sanxi.model.ErrorMessageModel
+import com.google.gson.Gson
+import com.google.gson.reflect.TypeToken
+import org.json.JSONObject
+
+fun String.separateResponseCode(): Int {
+ if (this.isBlank()) {
+ return 404
+ }
+ return JSONObject(this).getInt("code")
+}
+
+fun String.toErrorMessage(): String {
+ val errorModel = Gson().fromJson(
+ this, object : TypeToken() {}.type
+ )
+ return errorModel.message.toString()
+}
\ No newline at end of file
diff --git a/app/src/main/java/com/casic/smart/town/sanxi/fragment/StatisticsPageFragment.kt b/app/src/main/java/com/casic/smart/town/sanxi/fragment/StatisticsPageFragment.kt
index e84df12..21924de 100644
--- a/app/src/main/java/com/casic/smart/town/sanxi/fragment/StatisticsPageFragment.kt
+++ b/app/src/main/java/com/casic/smart/town/sanxi/fragment/StatisticsPageFragment.kt
@@ -1,10 +1,21 @@
package com.casic.smart.town.sanxi.fragment
+import androidx.lifecycle.ViewModelProvider
import com.casic.smart.town.sanxi.R
+import com.casic.smart.town.sanxi.view.AllWellActivity
+import com.casic.smart.town.sanxi.view.BFWellActivity
+import com.casic.smart.town.sanxi.view.CFWellActivity
+import com.casic.smart.town.sanxi.vm.WellViewModel
+import com.google.android.material.bottomsheet.BottomSheetBehavior
import com.pengxh.kt.lite.base.KotlinBaseFragment
+import com.pengxh.kt.lite.extensions.dp2px
+import com.pengxh.kt.lite.extensions.navigatePageTo
+import kotlinx.android.synthetic.main.fragment_statistics.*
class StatisticsPageFragment : KotlinBaseFragment() {
+ private lateinit var wellViewModel: WellViewModel
+
override fun initLayoutView(): Int = R.layout.fragment_statistics
override fun observeRequestState() {
@@ -16,10 +27,42 @@
}
override fun initData() {
+ //代码设置底部拉升距离
+ val bottomSheetBehavior = BottomSheetBehavior.from(bottomBehaviorLayout)
+ coordinatorLayout.post {
+ bottomSheetBehavior.isFitToContents = false
+ bottomSheetBehavior.halfExpandedRatio = 0.25f
+ bottomSheetBehavior.isHideable = false
+ bottomSheetBehavior.peekHeight = 30f.dp2px(requireContext())
+ }
+ //初始化vm
+ wellViewModel = ViewModelProvider(this)[WellViewModel::class.java]
+ //获取窨井监控数据
+ wellViewModel.countResultModel.observe(this, {
+ cfWellView.text = it["cfWell"]
+ bfWellView.text = it["bfWell"]
+ allWellDataView.text = it["total"]
+ })
}
override fun initEvent() {
+ cfWellView.setOnClickListener {
+ requireContext().navigatePageTo()
+ }
+ bfWellView.setOnClickListener {
+ requireContext().navigatePageTo()
+ }
+
+ allWellDataView.setOnClickListener {
+ requireContext().navigatePageTo()
+ }
+ }
+
+ override fun onResume() {
+ super.onResume()
+ //每次页面切换都需要重新刷新不同状态的窨井数量
+ wellViewModel.countWellByState()
}
}
\ No newline at end of file
diff --git a/app/src/main/java/com/casic/smart/town/sanxi/model/ErrorMessageModel.java b/app/src/main/java/com/casic/smart/town/sanxi/model/ErrorMessageModel.java
new file mode 100644
index 0000000..60546a1
--- /dev/null
+++ b/app/src/main/java/com/casic/smart/town/sanxi/model/ErrorMessageModel.java
@@ -0,0 +1,50 @@
+package com.casic.smart.town.sanxi.model;
+
+public class ErrorMessageModel {
+
+ private int code;
+ private String data;
+ private String exceptionClazz;
+ private String message;
+ private boolean success;
+
+ public int getCode() {
+ return code;
+ }
+
+ public void setCode(int code) {
+ this.code = code;
+ }
+
+ public String getData() {
+ return data;
+ }
+
+ public void setData(String data) {
+ this.data = data;
+ }
+
+ public String getExceptionClazz() {
+ return exceptionClazz;
+ }
+
+ public void setExceptionClazz(String exceptionClazz) {
+ this.exceptionClazz = exceptionClazz;
+ }
+
+ public String getMessage() {
+ return message;
+ }
+
+ public void setMessage(String message) {
+ this.message = message;
+ }
+
+ public boolean isSuccess() {
+ return success;
+ }
+
+ public void setSuccess(boolean success) {
+ this.success = success;
+ }
+}
\ No newline at end of file
diff --git a/app/src/main/java/com/casic/smart/town/sanxi/util/LocaleConstant.kt b/app/src/main/java/com/casic/smart/town/sanxi/util/LocaleConstant.kt
index de61c9a..ab1a36d 100644
--- a/app/src/main/java/com/casic/smart/town/sanxi/util/LocaleConstant.kt
+++ b/app/src/main/java/com/casic/smart/town/sanxi/util/LocaleConstant.kt
@@ -12,4 +12,7 @@
const val PERMISSIONS_CODE = 999
const val PUSH_REGISTER = 2022100101
const val PAGE_LIMIT = 20
+
+ const val DEFAULT_SERVER_CONFIG = "defaultServerConfig"
+ const val DEFAULT_SERVER = "http://111.198.10.15:11308"
}
\ No newline at end of file
diff --git a/app/src/main/java/com/casic/smart/town/sanxi/util/retrofit/RetrofitService.kt b/app/src/main/java/com/casic/smart/town/sanxi/util/retrofit/RetrofitService.kt
new file mode 100644
index 0000000..63db0ec
--- /dev/null
+++ b/app/src/main/java/com/casic/smart/town/sanxi/util/retrofit/RetrofitService.kt
@@ -0,0 +1,12 @@
+package com.casic.smart.town.sanxi.util.retrofit
+
+import retrofit2.http.GET
+
+interface RetrofitService {
+
+ /**
+ * 根据布防状态统计闸井数量接口
+ */
+ @GET("/well/countByBfzt")
+ suspend fun countWellByState(): String
+}
\ No newline at end of file
diff --git a/app/src/main/java/com/casic/smart/town/sanxi/util/retrofit/RetrofitServiceManager.kt b/app/src/main/java/com/casic/smart/town/sanxi/util/retrofit/RetrofitServiceManager.kt
new file mode 100644
index 0000000..46bbf4b
--- /dev/null
+++ b/app/src/main/java/com/casic/smart/town/sanxi/util/retrofit/RetrofitServiceManager.kt
@@ -0,0 +1,23 @@
+package com.casic.smart.town.sanxi.util.retrofit
+
+import com.casic.smart.town.sanxi.util.LocaleConstant
+import com.pengxh.kt.lite.utils.RetrofitFactory
+import com.pengxh.kt.lite.utils.SaveKeyValues
+
+object RetrofitServiceManager {
+
+ private val api by lazy {
+ val defaultValue = SaveKeyValues.getValue(
+ LocaleConstant.DEFAULT_SERVER_CONFIG,
+ LocaleConstant.DEFAULT_SERVER
+ ) as String
+ RetrofitFactory.createRetrofit(defaultValue)
+ }
+
+ /**
+ * 根据布防状态统计闸井数量接口
+ */
+ suspend fun countWellByState(): String {
+ return api.countWellByState()
+ }
+}
\ No newline at end of file
diff --git a/app/src/main/java/com/casic/smart/town/sanxi/view/AllWellActivity.kt b/app/src/main/java/com/casic/smart/town/sanxi/view/AllWellActivity.kt
new file mode 100644
index 0000000..cb0c9e4
--- /dev/null
+++ b/app/src/main/java/com/casic/smart/town/sanxi/view/AllWellActivity.kt
@@ -0,0 +1,25 @@
+package com.casic.smart.town.sanxi.view
+
+import com.casic.smart.town.sanxi.R
+import com.pengxh.kt.lite.base.KotlinBaseActivity
+
+class AllWellActivity : KotlinBaseActivity() {
+
+ override fun initLayoutView(): Int = R.layout.activity_all_well
+
+ override fun observeRequestState() {
+
+ }
+
+ override fun setupTopBarLayout() {
+
+ }
+
+ override fun initData() {
+
+ }
+
+ override fun initEvent() {
+
+ }
+}
\ No newline at end of file
diff --git a/app/src/main/java/com/casic/smart/town/sanxi/view/BFWellActivity.kt b/app/src/main/java/com/casic/smart/town/sanxi/view/BFWellActivity.kt
new file mode 100644
index 0000000..6a43b9e
--- /dev/null
+++ b/app/src/main/java/com/casic/smart/town/sanxi/view/BFWellActivity.kt
@@ -0,0 +1,25 @@
+package com.casic.smart.town.sanxi.view
+
+import com.casic.smart.town.sanxi.R
+import com.pengxh.kt.lite.base.KotlinBaseActivity
+
+class BFWellActivity : KotlinBaseActivity() {
+
+ override fun initLayoutView(): Int = R.layout.activity_bf_well
+
+ override fun observeRequestState() {
+
+ }
+
+ override fun setupTopBarLayout() {
+
+ }
+
+ override fun initData() {
+
+ }
+
+ override fun initEvent() {
+
+ }
+}
\ No newline at end of file
diff --git a/app/src/main/java/com/casic/smart/town/sanxi/view/CFWellActivity.kt b/app/src/main/java/com/casic/smart/town/sanxi/view/CFWellActivity.kt
new file mode 100644
index 0000000..bc72674
--- /dev/null
+++ b/app/src/main/java/com/casic/smart/town/sanxi/view/CFWellActivity.kt
@@ -0,0 +1,25 @@
+package com.casic.smart.town.sanxi.view
+
+import com.casic.smart.town.sanxi.R
+import com.pengxh.kt.lite.base.KotlinBaseActivity
+
+class CFWellActivity : KotlinBaseActivity() {
+
+ override fun initLayoutView(): Int = R.layout.activity_cf_well
+
+ override fun observeRequestState() {
+
+ }
+
+ override fun setupTopBarLayout() {
+
+ }
+
+ override fun initData() {
+
+ }
+
+ override fun initEvent() {
+
+ }
+}
\ No newline at end of file
diff --git a/app/src/main/java/com/casic/smart/town/sanxi/vm/WellViewModel.kt b/app/src/main/java/com/casic/smart/town/sanxi/vm/WellViewModel.kt
new file mode 100644
index 0000000..c7d0219
--- /dev/null
+++ b/app/src/main/java/com/casic/smart/town/sanxi/vm/WellViewModel.kt
@@ -0,0 +1,43 @@
+package com.casic.smart.town.sanxi.vm
+
+import androidx.lifecycle.MutableLiveData
+import com.casic.smart.town.sanxi.base.BaseApplication
+import com.casic.smart.town.sanxi.extensions.separateResponseCode
+import com.casic.smart.town.sanxi.extensions.toErrorMessage
+import com.casic.smart.town.sanxi.util.retrofit.RetrofitServiceManager
+import com.pengxh.kt.lite.extensions.launch
+import com.pengxh.kt.lite.extensions.show
+import com.pengxh.kt.lite.vm.BaseViewModel
+import org.json.JSONObject
+
+class WellViewModel : BaseViewModel() {
+
+ val countResultModel = MutableLiveData>()
+
+ fun countWellByState() = launch({
+ val response = RetrofitServiceManager.countWellByState()
+ val responseCode = response.separateResponseCode()
+ if (responseCode == 200) {
+ val map = HashMap(3)
+
+ val jsonObject = JSONObject(response)
+ val data = jsonObject.getJSONObject("data")
+ map["bfWell"] = convertString(data.getString("bfWell"))
+ map["cfWell"] = convertString(data.getString("cfWell"))
+ map["total"] = convertString(data.getString("total"))
+ countResultModel.value = map
+ } else {
+ response.toErrorMessage().show(BaseApplication.obtainInstance())
+ }
+ }, {
+ it.printStackTrace()
+ })
+
+ private fun convertString(value: String): String {
+ return if (value == "") {
+ "0"
+ } else {
+ value
+ }
+ }
+}
\ No newline at end of file
diff --git a/app/src/main/res/drawable/bg_solid_layout_white_radius_10.xml b/app/src/main/res/drawable/bg_solid_layout_white_radius_10.xml
new file mode 100644
index 0000000..f00d59c
--- /dev/null
+++ b/app/src/main/res/drawable/bg_solid_layout_white_radius_10.xml
@@ -0,0 +1,8 @@
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/app/src/main/res/drawable/bg_solid_layout_white_radius_top_20.xml b/app/src/main/res/drawable/bg_solid_layout_white_radius_top_20.xml
new file mode 100644
index 0000000..0c2abfe
--- /dev/null
+++ b/app/src/main/res/drawable/bg_solid_layout_white_radius_top_20.xml
@@ -0,0 +1,10 @@
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/app/src/main/res/drawable/bottom_short_line.xml b/app/src/main/res/drawable/bottom_short_line.xml
new file mode 100644
index 0000000..10c9062
--- /dev/null
+++ b/app/src/main/res/drawable/bottom_short_line.xml
@@ -0,0 +1,12 @@
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/app/src/main/res/font/agencyr.ttf b/app/src/main/res/font/agencyr.ttf
new file mode 100644
index 0000000..f0f7e95
--- /dev/null
+++ b/app/src/main/res/font/agencyr.ttf
Binary files differ
diff --git a/app/src/main/res/layout/activity_all_well.xml b/app/src/main/res/layout/activity_all_well.xml
new file mode 100644
index 0000000..77d9ef6
--- /dev/null
+++ b/app/src/main/res/layout/activity_all_well.xml
@@ -0,0 +1,6 @@
+
+
+
+
\ No newline at end of file
diff --git a/app/src/main/res/layout/activity_bf_well.xml b/app/src/main/res/layout/activity_bf_well.xml
new file mode 100644
index 0000000..77d9ef6
--- /dev/null
+++ b/app/src/main/res/layout/activity_bf_well.xml
@@ -0,0 +1,6 @@
+
+
+
+
\ No newline at end of file
diff --git a/app/src/main/res/layout/activity_cf_well.xml b/app/src/main/res/layout/activity_cf_well.xml
new file mode 100644
index 0000000..77d9ef6
--- /dev/null
+++ b/app/src/main/res/layout/activity_cf_well.xml
@@ -0,0 +1,6 @@
+
+
+
+
\ No newline at end of file
diff --git a/app/src/main/res/layout/fragment_statistics.xml b/app/src/main/res/layout/fragment_statistics.xml
index 77d9ef6..82d54c8 100644
--- a/app/src/main/res/layout/fragment_statistics.xml
+++ b/app/src/main/res/layout/fragment_statistics.xml
@@ -1,6 +1,114 @@
-
+ android:layout_height="match_parent"
+ android:background="@color/white"
+ android:orientation="vertical">
-
\ No newline at end of file
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/app/src/main/res/values/colors.xml b/app/src/main/res/values/colors.xml
index bbce66f..645436a 100644
--- a/app/src/main/res/values/colors.xml
+++ b/app/src/main/res/values/colors.xml
@@ -2,7 +2,12 @@
#1D55C6
#333333
+ #626262
#CCCCCC
+ #F7F7FA
+ #37D4AE
+ #FF0000
+ #FF9100
#FFBB86FC
#FF6200EE
diff --git a/app/src/main/res/values/styles.xml b/app/src/main/res/values/styles.xml
new file mode 100644
index 0000000..2d3a6f5
--- /dev/null
+++ b/app/src/main/res/values/styles.xml
@@ -0,0 +1,37 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file