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