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 1bf928d..f21feab 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 @@ -6,9 +6,7 @@ import com.casic.smart.town.sanxi.adapter.DeviceRecyclerAdapter import com.casic.smart.town.sanxi.adapter.InfrastructureAdapter import com.casic.smart.town.sanxi.model.DeviceModel -import com.casic.smart.town.sanxi.model.LineChartEntryModel import com.casic.smart.town.sanxi.util.ChartViewHelper -import com.casic.smart.town.sanxi.util.LocaleConstant import com.casic.smart.town.sanxi.view.AllWellActivity import com.casic.smart.town.sanxi.view.BFWellActivity import com.casic.smart.town.sanxi.view.CFWellActivity @@ -16,9 +14,9 @@ import com.casic.smart.town.sanxi.vm.InfrastructureViewModel import com.casic.smart.town.sanxi.vm.PipeViewModel import com.casic.smart.town.sanxi.vm.WellViewModel +import com.github.mikephil.charting.data.BarEntry import com.github.mikephil.charting.data.Entry import com.pengxh.kt.lite.base.KotlinBaseFragment -import com.pengxh.kt.lite.extensions.convertColor import com.pengxh.kt.lite.extensions.navigatePageTo import com.pengxh.kt.lite.extensions.timestampToCompleteDate import com.pengxh.kt.lite.extensions.timestampToLastWeekDate @@ -31,7 +29,6 @@ private lateinit var wellViewModel: WellViewModel private lateinit var infrastructureViewModel: InfrastructureViewModel private lateinit var deviceViewModel: DeviceViewModel - private val entryEntries: MutableList> = ArrayList() override fun initLayoutView(): Int = R.layout.fragment_statistics @@ -50,6 +47,33 @@ infrastructureViewModel = ViewModelProvider(this)[InfrastructureViewModel::class.java] deviceViewModel = ViewModelProvider(this)[DeviceViewModel::class.java] + pipeViewModel.alarmResultModel.observe(this, { + if (it.code == 200) { + var totalAlarm = 0 + + val xAxisLabel: MutableList = ArrayList() + val barEntries: MutableList = ArrayList() + + it.data.forEachIndexed { index, dataModel -> + totalAlarm += dataModel.`_$1`.toInt() + dataModel.`_$2`.toInt() + + if (dataModel.`_$1` != "0" || dataModel.`_$2` != "0") { + xAxisLabel.add(dataModel.deviceType) + barEntries.add( + BarEntry( + index.toFloat(), + dataModel.`_$1`.toFloat() + dataModel.`_$2`.toFloat() + ) + ) + } + } + totalAlarmView.text = totalAlarm.toString() + + //设置柱状图 + ChartViewHelper.setBarChartData(alarmBarChart, xAxisLabel, barEntries) + } + }) + pipeViewModel.resultModel.observe(this, { if (it.code == 200) { val xAxisLabel: MutableList = ArrayList() @@ -76,6 +100,7 @@ ) ) } + val entryEntries: MutableList> = ArrayList() entryEntries.add(firstEntries) entryEntries.add(secondEntries) ChartViewHelper.setLineChartData(healthStatusChart, xAxisLabel, entryEntries) @@ -130,6 +155,7 @@ override fun onResume() { super.onResume() //每次页面切换都需要重新刷新不同状态的闸井数量 + pipeViewModel.getAlarmStatistics() val time = System.currentTimeMillis() pipeViewModel.getPipeHealthStatus( time.timestampToLastWeekDate()!!, 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 1bf928d..f21feab 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 @@ -6,9 +6,7 @@ import com.casic.smart.town.sanxi.adapter.DeviceRecyclerAdapter import com.casic.smart.town.sanxi.adapter.InfrastructureAdapter import com.casic.smart.town.sanxi.model.DeviceModel -import com.casic.smart.town.sanxi.model.LineChartEntryModel import com.casic.smart.town.sanxi.util.ChartViewHelper -import com.casic.smart.town.sanxi.util.LocaleConstant import com.casic.smart.town.sanxi.view.AllWellActivity import com.casic.smart.town.sanxi.view.BFWellActivity import com.casic.smart.town.sanxi.view.CFWellActivity @@ -16,9 +14,9 @@ import com.casic.smart.town.sanxi.vm.InfrastructureViewModel import com.casic.smart.town.sanxi.vm.PipeViewModel import com.casic.smart.town.sanxi.vm.WellViewModel +import com.github.mikephil.charting.data.BarEntry import com.github.mikephil.charting.data.Entry import com.pengxh.kt.lite.base.KotlinBaseFragment -import com.pengxh.kt.lite.extensions.convertColor import com.pengxh.kt.lite.extensions.navigatePageTo import com.pengxh.kt.lite.extensions.timestampToCompleteDate import com.pengxh.kt.lite.extensions.timestampToLastWeekDate @@ -31,7 +29,6 @@ private lateinit var wellViewModel: WellViewModel private lateinit var infrastructureViewModel: InfrastructureViewModel private lateinit var deviceViewModel: DeviceViewModel - private val entryEntries: MutableList> = ArrayList() override fun initLayoutView(): Int = R.layout.fragment_statistics @@ -50,6 +47,33 @@ infrastructureViewModel = ViewModelProvider(this)[InfrastructureViewModel::class.java] deviceViewModel = ViewModelProvider(this)[DeviceViewModel::class.java] + pipeViewModel.alarmResultModel.observe(this, { + if (it.code == 200) { + var totalAlarm = 0 + + val xAxisLabel: MutableList = ArrayList() + val barEntries: MutableList = ArrayList() + + it.data.forEachIndexed { index, dataModel -> + totalAlarm += dataModel.`_$1`.toInt() + dataModel.`_$2`.toInt() + + if (dataModel.`_$1` != "0" || dataModel.`_$2` != "0") { + xAxisLabel.add(dataModel.deviceType) + barEntries.add( + BarEntry( + index.toFloat(), + dataModel.`_$1`.toFloat() + dataModel.`_$2`.toFloat() + ) + ) + } + } + totalAlarmView.text = totalAlarm.toString() + + //设置柱状图 + ChartViewHelper.setBarChartData(alarmBarChart, xAxisLabel, barEntries) + } + }) + pipeViewModel.resultModel.observe(this, { if (it.code == 200) { val xAxisLabel: MutableList = ArrayList() @@ -76,6 +100,7 @@ ) ) } + val entryEntries: MutableList> = ArrayList() entryEntries.add(firstEntries) entryEntries.add(secondEntries) ChartViewHelper.setLineChartData(healthStatusChart, xAxisLabel, entryEntries) @@ -130,6 +155,7 @@ override fun onResume() { super.onResume() //每次页面切换都需要重新刷新不同状态的闸井数量 + pipeViewModel.getAlarmStatistics() val time = System.currentTimeMillis() pipeViewModel.getPipeHealthStatus( time.timestampToLastWeekDate()!!, diff --git a/app/src/main/java/com/casic/smart/town/sanxi/model/AlarmStatisticsModel.java b/app/src/main/java/com/casic/smart/town/sanxi/model/AlarmStatisticsModel.java new file mode 100644 index 0000000..c893dc8 --- /dev/null +++ b/app/src/main/java/com/casic/smart/town/sanxi/model/AlarmStatisticsModel.java @@ -0,0 +1,77 @@ +package com.casic.smart.town.sanxi.model; + +import com.google.gson.annotations.SerializedName; + +import java.util.List; + +public class AlarmStatisticsModel { + + private int code; + private List data; + private String message; + private boolean success; + + public int getCode() { + return code; + } + + public void setCode(int code) { + this.code = code; + } + + public List getData() { + return data; + } + + public void setData(List data) { + this.data = data; + } + + 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; + } + + public static class DataModel { + private String deviceType; + @SerializedName("1") + private String _$1; + @SerializedName("2") + private String _$2; + + public String getDeviceType() { + return deviceType; + } + + public void setDeviceType(String deviceType) { + this.deviceType = deviceType; + } + + public String get_$1() { + return _$1; + } + + public void set_$1(String _$1) { + this._$1 = _$1; + } + + public String get_$2() { + return _$2; + } + + public void set_$2(String _$2) { + this._$2 = _$2; + } + } +} 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 1bf928d..f21feab 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 @@ -6,9 +6,7 @@ import com.casic.smart.town.sanxi.adapter.DeviceRecyclerAdapter import com.casic.smart.town.sanxi.adapter.InfrastructureAdapter import com.casic.smart.town.sanxi.model.DeviceModel -import com.casic.smart.town.sanxi.model.LineChartEntryModel import com.casic.smart.town.sanxi.util.ChartViewHelper -import com.casic.smart.town.sanxi.util.LocaleConstant import com.casic.smart.town.sanxi.view.AllWellActivity import com.casic.smart.town.sanxi.view.BFWellActivity import com.casic.smart.town.sanxi.view.CFWellActivity @@ -16,9 +14,9 @@ import com.casic.smart.town.sanxi.vm.InfrastructureViewModel import com.casic.smart.town.sanxi.vm.PipeViewModel import com.casic.smart.town.sanxi.vm.WellViewModel +import com.github.mikephil.charting.data.BarEntry import com.github.mikephil.charting.data.Entry import com.pengxh.kt.lite.base.KotlinBaseFragment -import com.pengxh.kt.lite.extensions.convertColor import com.pengxh.kt.lite.extensions.navigatePageTo import com.pengxh.kt.lite.extensions.timestampToCompleteDate import com.pengxh.kt.lite.extensions.timestampToLastWeekDate @@ -31,7 +29,6 @@ private lateinit var wellViewModel: WellViewModel private lateinit var infrastructureViewModel: InfrastructureViewModel private lateinit var deviceViewModel: DeviceViewModel - private val entryEntries: MutableList> = ArrayList() override fun initLayoutView(): Int = R.layout.fragment_statistics @@ -50,6 +47,33 @@ infrastructureViewModel = ViewModelProvider(this)[InfrastructureViewModel::class.java] deviceViewModel = ViewModelProvider(this)[DeviceViewModel::class.java] + pipeViewModel.alarmResultModel.observe(this, { + if (it.code == 200) { + var totalAlarm = 0 + + val xAxisLabel: MutableList = ArrayList() + val barEntries: MutableList = ArrayList() + + it.data.forEachIndexed { index, dataModel -> + totalAlarm += dataModel.`_$1`.toInt() + dataModel.`_$2`.toInt() + + if (dataModel.`_$1` != "0" || dataModel.`_$2` != "0") { + xAxisLabel.add(dataModel.deviceType) + barEntries.add( + BarEntry( + index.toFloat(), + dataModel.`_$1`.toFloat() + dataModel.`_$2`.toFloat() + ) + ) + } + } + totalAlarmView.text = totalAlarm.toString() + + //设置柱状图 + ChartViewHelper.setBarChartData(alarmBarChart, xAxisLabel, barEntries) + } + }) + pipeViewModel.resultModel.observe(this, { if (it.code == 200) { val xAxisLabel: MutableList = ArrayList() @@ -76,6 +100,7 @@ ) ) } + val entryEntries: MutableList> = ArrayList() entryEntries.add(firstEntries) entryEntries.add(secondEntries) ChartViewHelper.setLineChartData(healthStatusChart, xAxisLabel, entryEntries) @@ -130,6 +155,7 @@ override fun onResume() { super.onResume() //每次页面切换都需要重新刷新不同状态的闸井数量 + pipeViewModel.getAlarmStatistics() val time = System.currentTimeMillis() pipeViewModel.getPipeHealthStatus( time.timestampToLastWeekDate()!!, diff --git a/app/src/main/java/com/casic/smart/town/sanxi/model/AlarmStatisticsModel.java b/app/src/main/java/com/casic/smart/town/sanxi/model/AlarmStatisticsModel.java new file mode 100644 index 0000000..c893dc8 --- /dev/null +++ b/app/src/main/java/com/casic/smart/town/sanxi/model/AlarmStatisticsModel.java @@ -0,0 +1,77 @@ +package com.casic.smart.town.sanxi.model; + +import com.google.gson.annotations.SerializedName; + +import java.util.List; + +public class AlarmStatisticsModel { + + private int code; + private List data; + private String message; + private boolean success; + + public int getCode() { + return code; + } + + public void setCode(int code) { + this.code = code; + } + + public List getData() { + return data; + } + + public void setData(List data) { + this.data = data; + } + + 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; + } + + public static class DataModel { + private String deviceType; + @SerializedName("1") + private String _$1; + @SerializedName("2") + private String _$2; + + public String getDeviceType() { + return deviceType; + } + + public void setDeviceType(String deviceType) { + this.deviceType = deviceType; + } + + public String get_$1() { + return _$1; + } + + public void set_$1(String _$1) { + this._$1 = _$1; + } + + public String get_$2() { + return _$2; + } + + public void set_$2(String _$2) { + this._$2 = _$2; + } + } +} diff --git a/app/src/main/java/com/casic/smart/town/sanxi/util/ChartViewHelper.kt b/app/src/main/java/com/casic/smart/town/sanxi/util/ChartViewHelper.kt index 4f4a2e2..74ca4ee 100644 --- a/app/src/main/java/com/casic/smart/town/sanxi/util/ChartViewHelper.kt +++ b/app/src/main/java/com/casic/smart/town/sanxi/util/ChartViewHelper.kt @@ -1,16 +1,18 @@ package com.casic.smart.town.sanxi.util import android.util.Log +import com.casic.smart.town.sanxi.R import com.casic.smart.town.sanxi.extensions.init import com.casic.smart.town.sanxi.widgets.LineChartMarkerView +import com.github.mikephil.charting.charts.BarChart import com.github.mikephil.charting.charts.LineChart -import com.github.mikephil.charting.data.Entry -import com.github.mikephil.charting.data.LineData -import com.github.mikephil.charting.data.LineDataSet +import com.github.mikephil.charting.data.* import com.github.mikephil.charting.formatter.ValueFormatter +import com.github.mikephil.charting.interfaces.datasets.IBarDataSet import com.github.mikephil.charting.interfaces.datasets.ILineDataSet import com.pengxh.kt.lite.extensions.convertColor import com.pengxh.kt.lite.extensions.toJson +import java.text.DecimalFormat /** @@ -68,35 +70,31 @@ /** * 竖直柱状图 * */ -// fun setBarChartData( -// chart: BarChart, -// xAxisLabel: MutableList, -// entries: List, -// dateType: String -// ) { -// //每次加载数据都初始化饼图 -// chart.init(chart.context, xAxisLabel) -// val barDataSets: MutableList = ArrayList() -// //绑定数据 -// val dataSet = BarDataSet(entries, "") -// dataSet.color = R.color.color_1.convertColor(chart.context) -// dataSet.valueFormatter = object : ValueFormatter() { -// override fun getFormattedValue(value: Float): String { -// return DecimalFormat("##0").format(value.toDouble()) -// } -// } -// barDataSets.add(dataSet) -// val barData = BarData(barDataSets) -// barData.barWidth = 0.5f -// //添加自定义Marker + fun setBarChartData( + chart: BarChart, xAxisLabel: MutableList, entries: List + ) { + //每次加载数据都初始化饼图 + chart.init(chart.context, xAxisLabel) + val barDataSets: MutableList = ArrayList() + //绑定数据 + val dataSet = BarDataSet(entries, "") + dataSet.color = R.color.color_6.convertColor(chart.context) + dataSet.valueFormatter = object : ValueFormatter() { + override fun getFormattedValue(value: Float): String { + return DecimalFormat("##0").format(value.toDouble()) + } + } + barDataSets.add(dataSet) + val barData = BarData(barDataSets) + barData.barWidth = 0.5f + //添加自定义Marker // val markerView = BarChartMarkerView(chart.context) // markerView.chartView = chart // markerView.setXAxisLabel(xAxisLabel) -// markerView.setBarDataType(dateType) // chart.marker = markerView -// chart.data = barData -// chart.invalidate() -// } + chart.data = barData + chart.invalidate() + } /** * 横向柱状图 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 1bf928d..f21feab 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 @@ -6,9 +6,7 @@ import com.casic.smart.town.sanxi.adapter.DeviceRecyclerAdapter import com.casic.smart.town.sanxi.adapter.InfrastructureAdapter import com.casic.smart.town.sanxi.model.DeviceModel -import com.casic.smart.town.sanxi.model.LineChartEntryModel import com.casic.smart.town.sanxi.util.ChartViewHelper -import com.casic.smart.town.sanxi.util.LocaleConstant import com.casic.smart.town.sanxi.view.AllWellActivity import com.casic.smart.town.sanxi.view.BFWellActivity import com.casic.smart.town.sanxi.view.CFWellActivity @@ -16,9 +14,9 @@ import com.casic.smart.town.sanxi.vm.InfrastructureViewModel import com.casic.smart.town.sanxi.vm.PipeViewModel import com.casic.smart.town.sanxi.vm.WellViewModel +import com.github.mikephil.charting.data.BarEntry import com.github.mikephil.charting.data.Entry import com.pengxh.kt.lite.base.KotlinBaseFragment -import com.pengxh.kt.lite.extensions.convertColor import com.pengxh.kt.lite.extensions.navigatePageTo import com.pengxh.kt.lite.extensions.timestampToCompleteDate import com.pengxh.kt.lite.extensions.timestampToLastWeekDate @@ -31,7 +29,6 @@ private lateinit var wellViewModel: WellViewModel private lateinit var infrastructureViewModel: InfrastructureViewModel private lateinit var deviceViewModel: DeviceViewModel - private val entryEntries: MutableList> = ArrayList() override fun initLayoutView(): Int = R.layout.fragment_statistics @@ -50,6 +47,33 @@ infrastructureViewModel = ViewModelProvider(this)[InfrastructureViewModel::class.java] deviceViewModel = ViewModelProvider(this)[DeviceViewModel::class.java] + pipeViewModel.alarmResultModel.observe(this, { + if (it.code == 200) { + var totalAlarm = 0 + + val xAxisLabel: MutableList = ArrayList() + val barEntries: MutableList = ArrayList() + + it.data.forEachIndexed { index, dataModel -> + totalAlarm += dataModel.`_$1`.toInt() + dataModel.`_$2`.toInt() + + if (dataModel.`_$1` != "0" || dataModel.`_$2` != "0") { + xAxisLabel.add(dataModel.deviceType) + barEntries.add( + BarEntry( + index.toFloat(), + dataModel.`_$1`.toFloat() + dataModel.`_$2`.toFloat() + ) + ) + } + } + totalAlarmView.text = totalAlarm.toString() + + //设置柱状图 + ChartViewHelper.setBarChartData(alarmBarChart, xAxisLabel, barEntries) + } + }) + pipeViewModel.resultModel.observe(this, { if (it.code == 200) { val xAxisLabel: MutableList = ArrayList() @@ -76,6 +100,7 @@ ) ) } + val entryEntries: MutableList> = ArrayList() entryEntries.add(firstEntries) entryEntries.add(secondEntries) ChartViewHelper.setLineChartData(healthStatusChart, xAxisLabel, entryEntries) @@ -130,6 +155,7 @@ override fun onResume() { super.onResume() //每次页面切换都需要重新刷新不同状态的闸井数量 + pipeViewModel.getAlarmStatistics() val time = System.currentTimeMillis() pipeViewModel.getPipeHealthStatus( time.timestampToLastWeekDate()!!, diff --git a/app/src/main/java/com/casic/smart/town/sanxi/model/AlarmStatisticsModel.java b/app/src/main/java/com/casic/smart/town/sanxi/model/AlarmStatisticsModel.java new file mode 100644 index 0000000..c893dc8 --- /dev/null +++ b/app/src/main/java/com/casic/smart/town/sanxi/model/AlarmStatisticsModel.java @@ -0,0 +1,77 @@ +package com.casic.smart.town.sanxi.model; + +import com.google.gson.annotations.SerializedName; + +import java.util.List; + +public class AlarmStatisticsModel { + + private int code; + private List data; + private String message; + private boolean success; + + public int getCode() { + return code; + } + + public void setCode(int code) { + this.code = code; + } + + public List getData() { + return data; + } + + public void setData(List data) { + this.data = data; + } + + 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; + } + + public static class DataModel { + private String deviceType; + @SerializedName("1") + private String _$1; + @SerializedName("2") + private String _$2; + + public String getDeviceType() { + return deviceType; + } + + public void setDeviceType(String deviceType) { + this.deviceType = deviceType; + } + + public String get_$1() { + return _$1; + } + + public void set_$1(String _$1) { + this._$1 = _$1; + } + + public String get_$2() { + return _$2; + } + + public void set_$2(String _$2) { + this._$2 = _$2; + } + } +} diff --git a/app/src/main/java/com/casic/smart/town/sanxi/util/ChartViewHelper.kt b/app/src/main/java/com/casic/smart/town/sanxi/util/ChartViewHelper.kt index 4f4a2e2..74ca4ee 100644 --- a/app/src/main/java/com/casic/smart/town/sanxi/util/ChartViewHelper.kt +++ b/app/src/main/java/com/casic/smart/town/sanxi/util/ChartViewHelper.kt @@ -1,16 +1,18 @@ package com.casic.smart.town.sanxi.util import android.util.Log +import com.casic.smart.town.sanxi.R import com.casic.smart.town.sanxi.extensions.init import com.casic.smart.town.sanxi.widgets.LineChartMarkerView +import com.github.mikephil.charting.charts.BarChart import com.github.mikephil.charting.charts.LineChart -import com.github.mikephil.charting.data.Entry -import com.github.mikephil.charting.data.LineData -import com.github.mikephil.charting.data.LineDataSet +import com.github.mikephil.charting.data.* import com.github.mikephil.charting.formatter.ValueFormatter +import com.github.mikephil.charting.interfaces.datasets.IBarDataSet import com.github.mikephil.charting.interfaces.datasets.ILineDataSet import com.pengxh.kt.lite.extensions.convertColor import com.pengxh.kt.lite.extensions.toJson +import java.text.DecimalFormat /** @@ -68,35 +70,31 @@ /** * 竖直柱状图 * */ -// fun setBarChartData( -// chart: BarChart, -// xAxisLabel: MutableList, -// entries: List, -// dateType: String -// ) { -// //每次加载数据都初始化饼图 -// chart.init(chart.context, xAxisLabel) -// val barDataSets: MutableList = ArrayList() -// //绑定数据 -// val dataSet = BarDataSet(entries, "") -// dataSet.color = R.color.color_1.convertColor(chart.context) -// dataSet.valueFormatter = object : ValueFormatter() { -// override fun getFormattedValue(value: Float): String { -// return DecimalFormat("##0").format(value.toDouble()) -// } -// } -// barDataSets.add(dataSet) -// val barData = BarData(barDataSets) -// barData.barWidth = 0.5f -// //添加自定义Marker + fun setBarChartData( + chart: BarChart, xAxisLabel: MutableList, entries: List + ) { + //每次加载数据都初始化饼图 + chart.init(chart.context, xAxisLabel) + val barDataSets: MutableList = ArrayList() + //绑定数据 + val dataSet = BarDataSet(entries, "") + dataSet.color = R.color.color_6.convertColor(chart.context) + dataSet.valueFormatter = object : ValueFormatter() { + override fun getFormattedValue(value: Float): String { + return DecimalFormat("##0").format(value.toDouble()) + } + } + barDataSets.add(dataSet) + val barData = BarData(barDataSets) + barData.barWidth = 0.5f + //添加自定义Marker // val markerView = BarChartMarkerView(chart.context) // markerView.chartView = chart // markerView.setXAxisLabel(xAxisLabel) -// markerView.setBarDataType(dateType) // chart.marker = markerView -// chart.data = barData -// chart.invalidate() -// } + chart.data = barData + chart.invalidate() + } /** * 横向柱状图 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 index 3c09c39..2b682c2 100644 --- 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 @@ -95,6 +95,9 @@ @GET("/monitor/list") suspend fun queryVideoCameraList(@Header("token") token: String): String + @GET("/statics/runningState") + suspend fun getAlarmStatistics(@Header("token") token: String): String + @GET("/statics/healthStatus") suspend fun getPipeHealthStatus( @Header("token") token: String, 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 1bf928d..f21feab 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 @@ -6,9 +6,7 @@ import com.casic.smart.town.sanxi.adapter.DeviceRecyclerAdapter import com.casic.smart.town.sanxi.adapter.InfrastructureAdapter import com.casic.smart.town.sanxi.model.DeviceModel -import com.casic.smart.town.sanxi.model.LineChartEntryModel import com.casic.smart.town.sanxi.util.ChartViewHelper -import com.casic.smart.town.sanxi.util.LocaleConstant import com.casic.smart.town.sanxi.view.AllWellActivity import com.casic.smart.town.sanxi.view.BFWellActivity import com.casic.smart.town.sanxi.view.CFWellActivity @@ -16,9 +14,9 @@ import com.casic.smart.town.sanxi.vm.InfrastructureViewModel import com.casic.smart.town.sanxi.vm.PipeViewModel import com.casic.smart.town.sanxi.vm.WellViewModel +import com.github.mikephil.charting.data.BarEntry import com.github.mikephil.charting.data.Entry import com.pengxh.kt.lite.base.KotlinBaseFragment -import com.pengxh.kt.lite.extensions.convertColor import com.pengxh.kt.lite.extensions.navigatePageTo import com.pengxh.kt.lite.extensions.timestampToCompleteDate import com.pengxh.kt.lite.extensions.timestampToLastWeekDate @@ -31,7 +29,6 @@ private lateinit var wellViewModel: WellViewModel private lateinit var infrastructureViewModel: InfrastructureViewModel private lateinit var deviceViewModel: DeviceViewModel - private val entryEntries: MutableList> = ArrayList() override fun initLayoutView(): Int = R.layout.fragment_statistics @@ -50,6 +47,33 @@ infrastructureViewModel = ViewModelProvider(this)[InfrastructureViewModel::class.java] deviceViewModel = ViewModelProvider(this)[DeviceViewModel::class.java] + pipeViewModel.alarmResultModel.observe(this, { + if (it.code == 200) { + var totalAlarm = 0 + + val xAxisLabel: MutableList = ArrayList() + val barEntries: MutableList = ArrayList() + + it.data.forEachIndexed { index, dataModel -> + totalAlarm += dataModel.`_$1`.toInt() + dataModel.`_$2`.toInt() + + if (dataModel.`_$1` != "0" || dataModel.`_$2` != "0") { + xAxisLabel.add(dataModel.deviceType) + barEntries.add( + BarEntry( + index.toFloat(), + dataModel.`_$1`.toFloat() + dataModel.`_$2`.toFloat() + ) + ) + } + } + totalAlarmView.text = totalAlarm.toString() + + //设置柱状图 + ChartViewHelper.setBarChartData(alarmBarChart, xAxisLabel, barEntries) + } + }) + pipeViewModel.resultModel.observe(this, { if (it.code == 200) { val xAxisLabel: MutableList = ArrayList() @@ -76,6 +100,7 @@ ) ) } + val entryEntries: MutableList> = ArrayList() entryEntries.add(firstEntries) entryEntries.add(secondEntries) ChartViewHelper.setLineChartData(healthStatusChart, xAxisLabel, entryEntries) @@ -130,6 +155,7 @@ override fun onResume() { super.onResume() //每次页面切换都需要重新刷新不同状态的闸井数量 + pipeViewModel.getAlarmStatistics() val time = System.currentTimeMillis() pipeViewModel.getPipeHealthStatus( time.timestampToLastWeekDate()!!, diff --git a/app/src/main/java/com/casic/smart/town/sanxi/model/AlarmStatisticsModel.java b/app/src/main/java/com/casic/smart/town/sanxi/model/AlarmStatisticsModel.java new file mode 100644 index 0000000..c893dc8 --- /dev/null +++ b/app/src/main/java/com/casic/smart/town/sanxi/model/AlarmStatisticsModel.java @@ -0,0 +1,77 @@ +package com.casic.smart.town.sanxi.model; + +import com.google.gson.annotations.SerializedName; + +import java.util.List; + +public class AlarmStatisticsModel { + + private int code; + private List data; + private String message; + private boolean success; + + public int getCode() { + return code; + } + + public void setCode(int code) { + this.code = code; + } + + public List getData() { + return data; + } + + public void setData(List data) { + this.data = data; + } + + 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; + } + + public static class DataModel { + private String deviceType; + @SerializedName("1") + private String _$1; + @SerializedName("2") + private String _$2; + + public String getDeviceType() { + return deviceType; + } + + public void setDeviceType(String deviceType) { + this.deviceType = deviceType; + } + + public String get_$1() { + return _$1; + } + + public void set_$1(String _$1) { + this._$1 = _$1; + } + + public String get_$2() { + return _$2; + } + + public void set_$2(String _$2) { + this._$2 = _$2; + } + } +} diff --git a/app/src/main/java/com/casic/smart/town/sanxi/util/ChartViewHelper.kt b/app/src/main/java/com/casic/smart/town/sanxi/util/ChartViewHelper.kt index 4f4a2e2..74ca4ee 100644 --- a/app/src/main/java/com/casic/smart/town/sanxi/util/ChartViewHelper.kt +++ b/app/src/main/java/com/casic/smart/town/sanxi/util/ChartViewHelper.kt @@ -1,16 +1,18 @@ package com.casic.smart.town.sanxi.util import android.util.Log +import com.casic.smart.town.sanxi.R import com.casic.smart.town.sanxi.extensions.init import com.casic.smart.town.sanxi.widgets.LineChartMarkerView +import com.github.mikephil.charting.charts.BarChart import com.github.mikephil.charting.charts.LineChart -import com.github.mikephil.charting.data.Entry -import com.github.mikephil.charting.data.LineData -import com.github.mikephil.charting.data.LineDataSet +import com.github.mikephil.charting.data.* import com.github.mikephil.charting.formatter.ValueFormatter +import com.github.mikephil.charting.interfaces.datasets.IBarDataSet import com.github.mikephil.charting.interfaces.datasets.ILineDataSet import com.pengxh.kt.lite.extensions.convertColor import com.pengxh.kt.lite.extensions.toJson +import java.text.DecimalFormat /** @@ -68,35 +70,31 @@ /** * 竖直柱状图 * */ -// fun setBarChartData( -// chart: BarChart, -// xAxisLabel: MutableList, -// entries: List, -// dateType: String -// ) { -// //每次加载数据都初始化饼图 -// chart.init(chart.context, xAxisLabel) -// val barDataSets: MutableList = ArrayList() -// //绑定数据 -// val dataSet = BarDataSet(entries, "") -// dataSet.color = R.color.color_1.convertColor(chart.context) -// dataSet.valueFormatter = object : ValueFormatter() { -// override fun getFormattedValue(value: Float): String { -// return DecimalFormat("##0").format(value.toDouble()) -// } -// } -// barDataSets.add(dataSet) -// val barData = BarData(barDataSets) -// barData.barWidth = 0.5f -// //添加自定义Marker + fun setBarChartData( + chart: BarChart, xAxisLabel: MutableList, entries: List + ) { + //每次加载数据都初始化饼图 + chart.init(chart.context, xAxisLabel) + val barDataSets: MutableList = ArrayList() + //绑定数据 + val dataSet = BarDataSet(entries, "") + dataSet.color = R.color.color_6.convertColor(chart.context) + dataSet.valueFormatter = object : ValueFormatter() { + override fun getFormattedValue(value: Float): String { + return DecimalFormat("##0").format(value.toDouble()) + } + } + barDataSets.add(dataSet) + val barData = BarData(barDataSets) + barData.barWidth = 0.5f + //添加自定义Marker // val markerView = BarChartMarkerView(chart.context) // markerView.chartView = chart // markerView.setXAxisLabel(xAxisLabel) -// markerView.setBarDataType(dateType) // chart.marker = markerView -// chart.data = barData -// chart.invalidate() -// } + chart.data = barData + chart.invalidate() + } /** * 横向柱状图 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 index 3c09c39..2b682c2 100644 --- 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 @@ -95,6 +95,9 @@ @GET("/monitor/list") suspend fun queryVideoCameraList(@Header("token") token: String): String + @GET("/statics/runningState") + suspend fun getAlarmStatistics(@Header("token") token: String): String + @GET("/statics/healthStatus") suspend fun getPipeHealthStatus( @Header("token") token: String, 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 index 6922523..a6d8099 100644 --- 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 @@ -98,6 +98,10 @@ return smartTownApi.queryVideoCameraList(AuthenticationHelper.token!!) } + suspend fun getAlarmStatistics(): String { + return smartTownApi.getAlarmStatistics(AuthenticationHelper.token!!) + } + suspend fun getPipeHealthStatus(beginTime: String, endTime: String, alarmType: String): String { return smartTownApi.getPipeHealthStatus( AuthenticationHelper.token!!, 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 1bf928d..f21feab 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 @@ -6,9 +6,7 @@ import com.casic.smart.town.sanxi.adapter.DeviceRecyclerAdapter import com.casic.smart.town.sanxi.adapter.InfrastructureAdapter import com.casic.smart.town.sanxi.model.DeviceModel -import com.casic.smart.town.sanxi.model.LineChartEntryModel import com.casic.smart.town.sanxi.util.ChartViewHelper -import com.casic.smart.town.sanxi.util.LocaleConstant import com.casic.smart.town.sanxi.view.AllWellActivity import com.casic.smart.town.sanxi.view.BFWellActivity import com.casic.smart.town.sanxi.view.CFWellActivity @@ -16,9 +14,9 @@ import com.casic.smart.town.sanxi.vm.InfrastructureViewModel import com.casic.smart.town.sanxi.vm.PipeViewModel import com.casic.smart.town.sanxi.vm.WellViewModel +import com.github.mikephil.charting.data.BarEntry import com.github.mikephil.charting.data.Entry import com.pengxh.kt.lite.base.KotlinBaseFragment -import com.pengxh.kt.lite.extensions.convertColor import com.pengxh.kt.lite.extensions.navigatePageTo import com.pengxh.kt.lite.extensions.timestampToCompleteDate import com.pengxh.kt.lite.extensions.timestampToLastWeekDate @@ -31,7 +29,6 @@ private lateinit var wellViewModel: WellViewModel private lateinit var infrastructureViewModel: InfrastructureViewModel private lateinit var deviceViewModel: DeviceViewModel - private val entryEntries: MutableList> = ArrayList() override fun initLayoutView(): Int = R.layout.fragment_statistics @@ -50,6 +47,33 @@ infrastructureViewModel = ViewModelProvider(this)[InfrastructureViewModel::class.java] deviceViewModel = ViewModelProvider(this)[DeviceViewModel::class.java] + pipeViewModel.alarmResultModel.observe(this, { + if (it.code == 200) { + var totalAlarm = 0 + + val xAxisLabel: MutableList = ArrayList() + val barEntries: MutableList = ArrayList() + + it.data.forEachIndexed { index, dataModel -> + totalAlarm += dataModel.`_$1`.toInt() + dataModel.`_$2`.toInt() + + if (dataModel.`_$1` != "0" || dataModel.`_$2` != "0") { + xAxisLabel.add(dataModel.deviceType) + barEntries.add( + BarEntry( + index.toFloat(), + dataModel.`_$1`.toFloat() + dataModel.`_$2`.toFloat() + ) + ) + } + } + totalAlarmView.text = totalAlarm.toString() + + //设置柱状图 + ChartViewHelper.setBarChartData(alarmBarChart, xAxisLabel, barEntries) + } + }) + pipeViewModel.resultModel.observe(this, { if (it.code == 200) { val xAxisLabel: MutableList = ArrayList() @@ -76,6 +100,7 @@ ) ) } + val entryEntries: MutableList> = ArrayList() entryEntries.add(firstEntries) entryEntries.add(secondEntries) ChartViewHelper.setLineChartData(healthStatusChart, xAxisLabel, entryEntries) @@ -130,6 +155,7 @@ override fun onResume() { super.onResume() //每次页面切换都需要重新刷新不同状态的闸井数量 + pipeViewModel.getAlarmStatistics() val time = System.currentTimeMillis() pipeViewModel.getPipeHealthStatus( time.timestampToLastWeekDate()!!, diff --git a/app/src/main/java/com/casic/smart/town/sanxi/model/AlarmStatisticsModel.java b/app/src/main/java/com/casic/smart/town/sanxi/model/AlarmStatisticsModel.java new file mode 100644 index 0000000..c893dc8 --- /dev/null +++ b/app/src/main/java/com/casic/smart/town/sanxi/model/AlarmStatisticsModel.java @@ -0,0 +1,77 @@ +package com.casic.smart.town.sanxi.model; + +import com.google.gson.annotations.SerializedName; + +import java.util.List; + +public class AlarmStatisticsModel { + + private int code; + private List data; + private String message; + private boolean success; + + public int getCode() { + return code; + } + + public void setCode(int code) { + this.code = code; + } + + public List getData() { + return data; + } + + public void setData(List data) { + this.data = data; + } + + 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; + } + + public static class DataModel { + private String deviceType; + @SerializedName("1") + private String _$1; + @SerializedName("2") + private String _$2; + + public String getDeviceType() { + return deviceType; + } + + public void setDeviceType(String deviceType) { + this.deviceType = deviceType; + } + + public String get_$1() { + return _$1; + } + + public void set_$1(String _$1) { + this._$1 = _$1; + } + + public String get_$2() { + return _$2; + } + + public void set_$2(String _$2) { + this._$2 = _$2; + } + } +} diff --git a/app/src/main/java/com/casic/smart/town/sanxi/util/ChartViewHelper.kt b/app/src/main/java/com/casic/smart/town/sanxi/util/ChartViewHelper.kt index 4f4a2e2..74ca4ee 100644 --- a/app/src/main/java/com/casic/smart/town/sanxi/util/ChartViewHelper.kt +++ b/app/src/main/java/com/casic/smart/town/sanxi/util/ChartViewHelper.kt @@ -1,16 +1,18 @@ package com.casic.smart.town.sanxi.util import android.util.Log +import com.casic.smart.town.sanxi.R import com.casic.smart.town.sanxi.extensions.init import com.casic.smart.town.sanxi.widgets.LineChartMarkerView +import com.github.mikephil.charting.charts.BarChart import com.github.mikephil.charting.charts.LineChart -import com.github.mikephil.charting.data.Entry -import com.github.mikephil.charting.data.LineData -import com.github.mikephil.charting.data.LineDataSet +import com.github.mikephil.charting.data.* import com.github.mikephil.charting.formatter.ValueFormatter +import com.github.mikephil.charting.interfaces.datasets.IBarDataSet import com.github.mikephil.charting.interfaces.datasets.ILineDataSet import com.pengxh.kt.lite.extensions.convertColor import com.pengxh.kt.lite.extensions.toJson +import java.text.DecimalFormat /** @@ -68,35 +70,31 @@ /** * 竖直柱状图 * */ -// fun setBarChartData( -// chart: BarChart, -// xAxisLabel: MutableList, -// entries: List, -// dateType: String -// ) { -// //每次加载数据都初始化饼图 -// chart.init(chart.context, xAxisLabel) -// val barDataSets: MutableList = ArrayList() -// //绑定数据 -// val dataSet = BarDataSet(entries, "") -// dataSet.color = R.color.color_1.convertColor(chart.context) -// dataSet.valueFormatter = object : ValueFormatter() { -// override fun getFormattedValue(value: Float): String { -// return DecimalFormat("##0").format(value.toDouble()) -// } -// } -// barDataSets.add(dataSet) -// val barData = BarData(barDataSets) -// barData.barWidth = 0.5f -// //添加自定义Marker + fun setBarChartData( + chart: BarChart, xAxisLabel: MutableList, entries: List + ) { + //每次加载数据都初始化饼图 + chart.init(chart.context, xAxisLabel) + val barDataSets: MutableList = ArrayList() + //绑定数据 + val dataSet = BarDataSet(entries, "") + dataSet.color = R.color.color_6.convertColor(chart.context) + dataSet.valueFormatter = object : ValueFormatter() { + override fun getFormattedValue(value: Float): String { + return DecimalFormat("##0").format(value.toDouble()) + } + } + barDataSets.add(dataSet) + val barData = BarData(barDataSets) + barData.barWidth = 0.5f + //添加自定义Marker // val markerView = BarChartMarkerView(chart.context) // markerView.chartView = chart // markerView.setXAxisLabel(xAxisLabel) -// markerView.setBarDataType(dateType) // chart.marker = markerView -// chart.data = barData -// chart.invalidate() -// } + chart.data = barData + chart.invalidate() + } /** * 横向柱状图 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 index 3c09c39..2b682c2 100644 --- 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 @@ -95,6 +95,9 @@ @GET("/monitor/list") suspend fun queryVideoCameraList(@Header("token") token: String): String + @GET("/statics/runningState") + suspend fun getAlarmStatistics(@Header("token") token: String): String + @GET("/statics/healthStatus") suspend fun getPipeHealthStatus( @Header("token") token: String, 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 index 6922523..a6d8099 100644 --- 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 @@ -98,6 +98,10 @@ return smartTownApi.queryVideoCameraList(AuthenticationHelper.token!!) } + suspend fun getAlarmStatistics(): String { + return smartTownApi.getAlarmStatistics(AuthenticationHelper.token!!) + } + suspend fun getPipeHealthStatus(beginTime: String, endTime: String, alarmType: String): String { return smartTownApi.getPipeHealthStatus( AuthenticationHelper.token!!, diff --git a/app/src/main/java/com/casic/smart/town/sanxi/vm/PipeViewModel.kt b/app/src/main/java/com/casic/smart/town/sanxi/vm/PipeViewModel.kt index d08167c..c18c6cf 100644 --- a/app/src/main/java/com/casic/smart/town/sanxi/vm/PipeViewModel.kt +++ b/app/src/main/java/com/casic/smart/town/sanxi/vm/PipeViewModel.kt @@ -4,6 +4,7 @@ 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.model.AlarmStatisticsModel import com.casic.smart.town.sanxi.model.HealthStatusModel import com.casic.smart.town.sanxi.util.retrofit.RetrofitServiceManager import com.google.gson.Gson @@ -14,8 +15,23 @@ class PipeViewModel : BaseViewModel() { private val gson by lazy { Gson() } + val alarmResultModel = MutableLiveData() val resultModel = MutableLiveData() + fun getAlarmStatistics() = launch({ + val response = RetrofitServiceManager.getAlarmStatistics() + val responseCode = response.separateResponseCode() + if (responseCode == 200) { + alarmResultModel.value = gson.fromJson( + response, object : TypeToken() {}.type + ) + } else { + response.toErrorMessage().show(BaseApplication.obtainInstance()) + } + }, { + it.printStackTrace() + }) + fun getPipeHealthStatus(beginTime: String, endTime: String, alarmType: String) = launch({ val response = RetrofitServiceManager.getPipeHealthStatus(beginTime, endTime, alarmType) val responseCode = response.separateResponseCode() 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 1bf928d..f21feab 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 @@ -6,9 +6,7 @@ import com.casic.smart.town.sanxi.adapter.DeviceRecyclerAdapter import com.casic.smart.town.sanxi.adapter.InfrastructureAdapter import com.casic.smart.town.sanxi.model.DeviceModel -import com.casic.smart.town.sanxi.model.LineChartEntryModel import com.casic.smart.town.sanxi.util.ChartViewHelper -import com.casic.smart.town.sanxi.util.LocaleConstant import com.casic.smart.town.sanxi.view.AllWellActivity import com.casic.smart.town.sanxi.view.BFWellActivity import com.casic.smart.town.sanxi.view.CFWellActivity @@ -16,9 +14,9 @@ import com.casic.smart.town.sanxi.vm.InfrastructureViewModel import com.casic.smart.town.sanxi.vm.PipeViewModel import com.casic.smart.town.sanxi.vm.WellViewModel +import com.github.mikephil.charting.data.BarEntry import com.github.mikephil.charting.data.Entry import com.pengxh.kt.lite.base.KotlinBaseFragment -import com.pengxh.kt.lite.extensions.convertColor import com.pengxh.kt.lite.extensions.navigatePageTo import com.pengxh.kt.lite.extensions.timestampToCompleteDate import com.pengxh.kt.lite.extensions.timestampToLastWeekDate @@ -31,7 +29,6 @@ private lateinit var wellViewModel: WellViewModel private lateinit var infrastructureViewModel: InfrastructureViewModel private lateinit var deviceViewModel: DeviceViewModel - private val entryEntries: MutableList> = ArrayList() override fun initLayoutView(): Int = R.layout.fragment_statistics @@ -50,6 +47,33 @@ infrastructureViewModel = ViewModelProvider(this)[InfrastructureViewModel::class.java] deviceViewModel = ViewModelProvider(this)[DeviceViewModel::class.java] + pipeViewModel.alarmResultModel.observe(this, { + if (it.code == 200) { + var totalAlarm = 0 + + val xAxisLabel: MutableList = ArrayList() + val barEntries: MutableList = ArrayList() + + it.data.forEachIndexed { index, dataModel -> + totalAlarm += dataModel.`_$1`.toInt() + dataModel.`_$2`.toInt() + + if (dataModel.`_$1` != "0" || dataModel.`_$2` != "0") { + xAxisLabel.add(dataModel.deviceType) + barEntries.add( + BarEntry( + index.toFloat(), + dataModel.`_$1`.toFloat() + dataModel.`_$2`.toFloat() + ) + ) + } + } + totalAlarmView.text = totalAlarm.toString() + + //设置柱状图 + ChartViewHelper.setBarChartData(alarmBarChart, xAxisLabel, barEntries) + } + }) + pipeViewModel.resultModel.observe(this, { if (it.code == 200) { val xAxisLabel: MutableList = ArrayList() @@ -76,6 +100,7 @@ ) ) } + val entryEntries: MutableList> = ArrayList() entryEntries.add(firstEntries) entryEntries.add(secondEntries) ChartViewHelper.setLineChartData(healthStatusChart, xAxisLabel, entryEntries) @@ -130,6 +155,7 @@ override fun onResume() { super.onResume() //每次页面切换都需要重新刷新不同状态的闸井数量 + pipeViewModel.getAlarmStatistics() val time = System.currentTimeMillis() pipeViewModel.getPipeHealthStatus( time.timestampToLastWeekDate()!!, diff --git a/app/src/main/java/com/casic/smart/town/sanxi/model/AlarmStatisticsModel.java b/app/src/main/java/com/casic/smart/town/sanxi/model/AlarmStatisticsModel.java new file mode 100644 index 0000000..c893dc8 --- /dev/null +++ b/app/src/main/java/com/casic/smart/town/sanxi/model/AlarmStatisticsModel.java @@ -0,0 +1,77 @@ +package com.casic.smart.town.sanxi.model; + +import com.google.gson.annotations.SerializedName; + +import java.util.List; + +public class AlarmStatisticsModel { + + private int code; + private List data; + private String message; + private boolean success; + + public int getCode() { + return code; + } + + public void setCode(int code) { + this.code = code; + } + + public List getData() { + return data; + } + + public void setData(List data) { + this.data = data; + } + + 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; + } + + public static class DataModel { + private String deviceType; + @SerializedName("1") + private String _$1; + @SerializedName("2") + private String _$2; + + public String getDeviceType() { + return deviceType; + } + + public void setDeviceType(String deviceType) { + this.deviceType = deviceType; + } + + public String get_$1() { + return _$1; + } + + public void set_$1(String _$1) { + this._$1 = _$1; + } + + public String get_$2() { + return _$2; + } + + public void set_$2(String _$2) { + this._$2 = _$2; + } + } +} diff --git a/app/src/main/java/com/casic/smart/town/sanxi/util/ChartViewHelper.kt b/app/src/main/java/com/casic/smart/town/sanxi/util/ChartViewHelper.kt index 4f4a2e2..74ca4ee 100644 --- a/app/src/main/java/com/casic/smart/town/sanxi/util/ChartViewHelper.kt +++ b/app/src/main/java/com/casic/smart/town/sanxi/util/ChartViewHelper.kt @@ -1,16 +1,18 @@ package com.casic.smart.town.sanxi.util import android.util.Log +import com.casic.smart.town.sanxi.R import com.casic.smart.town.sanxi.extensions.init import com.casic.smart.town.sanxi.widgets.LineChartMarkerView +import com.github.mikephil.charting.charts.BarChart import com.github.mikephil.charting.charts.LineChart -import com.github.mikephil.charting.data.Entry -import com.github.mikephil.charting.data.LineData -import com.github.mikephil.charting.data.LineDataSet +import com.github.mikephil.charting.data.* import com.github.mikephil.charting.formatter.ValueFormatter +import com.github.mikephil.charting.interfaces.datasets.IBarDataSet import com.github.mikephil.charting.interfaces.datasets.ILineDataSet import com.pengxh.kt.lite.extensions.convertColor import com.pengxh.kt.lite.extensions.toJson +import java.text.DecimalFormat /** @@ -68,35 +70,31 @@ /** * 竖直柱状图 * */ -// fun setBarChartData( -// chart: BarChart, -// xAxisLabel: MutableList, -// entries: List, -// dateType: String -// ) { -// //每次加载数据都初始化饼图 -// chart.init(chart.context, xAxisLabel) -// val barDataSets: MutableList = ArrayList() -// //绑定数据 -// val dataSet = BarDataSet(entries, "") -// dataSet.color = R.color.color_1.convertColor(chart.context) -// dataSet.valueFormatter = object : ValueFormatter() { -// override fun getFormattedValue(value: Float): String { -// return DecimalFormat("##0").format(value.toDouble()) -// } -// } -// barDataSets.add(dataSet) -// val barData = BarData(barDataSets) -// barData.barWidth = 0.5f -// //添加自定义Marker + fun setBarChartData( + chart: BarChart, xAxisLabel: MutableList, entries: List + ) { + //每次加载数据都初始化饼图 + chart.init(chart.context, xAxisLabel) + val barDataSets: MutableList = ArrayList() + //绑定数据 + val dataSet = BarDataSet(entries, "") + dataSet.color = R.color.color_6.convertColor(chart.context) + dataSet.valueFormatter = object : ValueFormatter() { + override fun getFormattedValue(value: Float): String { + return DecimalFormat("##0").format(value.toDouble()) + } + } + barDataSets.add(dataSet) + val barData = BarData(barDataSets) + barData.barWidth = 0.5f + //添加自定义Marker // val markerView = BarChartMarkerView(chart.context) // markerView.chartView = chart // markerView.setXAxisLabel(xAxisLabel) -// markerView.setBarDataType(dateType) // chart.marker = markerView -// chart.data = barData -// chart.invalidate() -// } + chart.data = barData + chart.invalidate() + } /** * 横向柱状图 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 index 3c09c39..2b682c2 100644 --- 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 @@ -95,6 +95,9 @@ @GET("/monitor/list") suspend fun queryVideoCameraList(@Header("token") token: String): String + @GET("/statics/runningState") + suspend fun getAlarmStatistics(@Header("token") token: String): String + @GET("/statics/healthStatus") suspend fun getPipeHealthStatus( @Header("token") token: String, 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 index 6922523..a6d8099 100644 --- 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 @@ -98,6 +98,10 @@ return smartTownApi.queryVideoCameraList(AuthenticationHelper.token!!) } + suspend fun getAlarmStatistics(): String { + return smartTownApi.getAlarmStatistics(AuthenticationHelper.token!!) + } + suspend fun getPipeHealthStatus(beginTime: String, endTime: String, alarmType: String): String { return smartTownApi.getPipeHealthStatus( AuthenticationHelper.token!!, diff --git a/app/src/main/java/com/casic/smart/town/sanxi/vm/PipeViewModel.kt b/app/src/main/java/com/casic/smart/town/sanxi/vm/PipeViewModel.kt index d08167c..c18c6cf 100644 --- a/app/src/main/java/com/casic/smart/town/sanxi/vm/PipeViewModel.kt +++ b/app/src/main/java/com/casic/smart/town/sanxi/vm/PipeViewModel.kt @@ -4,6 +4,7 @@ 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.model.AlarmStatisticsModel import com.casic.smart.town.sanxi.model.HealthStatusModel import com.casic.smart.town.sanxi.util.retrofit.RetrofitServiceManager import com.google.gson.Gson @@ -14,8 +15,23 @@ class PipeViewModel : BaseViewModel() { private val gson by lazy { Gson() } + val alarmResultModel = MutableLiveData() val resultModel = MutableLiveData() + fun getAlarmStatistics() = launch({ + val response = RetrofitServiceManager.getAlarmStatistics() + val responseCode = response.separateResponseCode() + if (responseCode == 200) { + alarmResultModel.value = gson.fromJson( + response, object : TypeToken() {}.type + ) + } else { + response.toErrorMessage().show(BaseApplication.obtainInstance()) + } + }, { + it.printStackTrace() + }) + fun getPipeHealthStatus(beginTime: String, endTime: String, alarmType: String) = launch({ val response = RetrofitServiceManager.getPipeHealthStatus(beginTime, endTime, alarmType) val responseCode = response.separateResponseCode() diff --git a/app/src/main/res/layout/fragment_statistics.xml b/app/src/main/res/layout/fragment_statistics.xml index acaafd1..18de0b1 100644 --- a/app/src/main/res/layout/fragment_statistics.xml +++ b/app/src/main/res/layout/fragment_statistics.xml @@ -32,6 +32,44 @@ android:orientation="vertical" android:paddingHorizontal="@dimen/dp_10"> + + + + + + + + + + + + + + > = ArrayList() override fun initLayoutView(): Int = R.layout.fragment_statistics @@ -50,6 +47,33 @@ infrastructureViewModel = ViewModelProvider(this)[InfrastructureViewModel::class.java] deviceViewModel = ViewModelProvider(this)[DeviceViewModel::class.java] + pipeViewModel.alarmResultModel.observe(this, { + if (it.code == 200) { + var totalAlarm = 0 + + val xAxisLabel: MutableList = ArrayList() + val barEntries: MutableList = ArrayList() + + it.data.forEachIndexed { index, dataModel -> + totalAlarm += dataModel.`_$1`.toInt() + dataModel.`_$2`.toInt() + + if (dataModel.`_$1` != "0" || dataModel.`_$2` != "0") { + xAxisLabel.add(dataModel.deviceType) + barEntries.add( + BarEntry( + index.toFloat(), + dataModel.`_$1`.toFloat() + dataModel.`_$2`.toFloat() + ) + ) + } + } + totalAlarmView.text = totalAlarm.toString() + + //设置柱状图 + ChartViewHelper.setBarChartData(alarmBarChart, xAxisLabel, barEntries) + } + }) + pipeViewModel.resultModel.observe(this, { if (it.code == 200) { val xAxisLabel: MutableList = ArrayList() @@ -76,6 +100,7 @@ ) ) } + val entryEntries: MutableList> = ArrayList() entryEntries.add(firstEntries) entryEntries.add(secondEntries) ChartViewHelper.setLineChartData(healthStatusChart, xAxisLabel, entryEntries) @@ -130,6 +155,7 @@ override fun onResume() { super.onResume() //每次页面切换都需要重新刷新不同状态的闸井数量 + pipeViewModel.getAlarmStatistics() val time = System.currentTimeMillis() pipeViewModel.getPipeHealthStatus( time.timestampToLastWeekDate()!!, diff --git a/app/src/main/java/com/casic/smart/town/sanxi/model/AlarmStatisticsModel.java b/app/src/main/java/com/casic/smart/town/sanxi/model/AlarmStatisticsModel.java new file mode 100644 index 0000000..c893dc8 --- /dev/null +++ b/app/src/main/java/com/casic/smart/town/sanxi/model/AlarmStatisticsModel.java @@ -0,0 +1,77 @@ +package com.casic.smart.town.sanxi.model; + +import com.google.gson.annotations.SerializedName; + +import java.util.List; + +public class AlarmStatisticsModel { + + private int code; + private List data; + private String message; + private boolean success; + + public int getCode() { + return code; + } + + public void setCode(int code) { + this.code = code; + } + + public List getData() { + return data; + } + + public void setData(List data) { + this.data = data; + } + + 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; + } + + public static class DataModel { + private String deviceType; + @SerializedName("1") + private String _$1; + @SerializedName("2") + private String _$2; + + public String getDeviceType() { + return deviceType; + } + + public void setDeviceType(String deviceType) { + this.deviceType = deviceType; + } + + public String get_$1() { + return _$1; + } + + public void set_$1(String _$1) { + this._$1 = _$1; + } + + public String get_$2() { + return _$2; + } + + public void set_$2(String _$2) { + this._$2 = _$2; + } + } +} diff --git a/app/src/main/java/com/casic/smart/town/sanxi/util/ChartViewHelper.kt b/app/src/main/java/com/casic/smart/town/sanxi/util/ChartViewHelper.kt index 4f4a2e2..74ca4ee 100644 --- a/app/src/main/java/com/casic/smart/town/sanxi/util/ChartViewHelper.kt +++ b/app/src/main/java/com/casic/smart/town/sanxi/util/ChartViewHelper.kt @@ -1,16 +1,18 @@ package com.casic.smart.town.sanxi.util import android.util.Log +import com.casic.smart.town.sanxi.R import com.casic.smart.town.sanxi.extensions.init import com.casic.smart.town.sanxi.widgets.LineChartMarkerView +import com.github.mikephil.charting.charts.BarChart import com.github.mikephil.charting.charts.LineChart -import com.github.mikephil.charting.data.Entry -import com.github.mikephil.charting.data.LineData -import com.github.mikephil.charting.data.LineDataSet +import com.github.mikephil.charting.data.* import com.github.mikephil.charting.formatter.ValueFormatter +import com.github.mikephil.charting.interfaces.datasets.IBarDataSet import com.github.mikephil.charting.interfaces.datasets.ILineDataSet import com.pengxh.kt.lite.extensions.convertColor import com.pengxh.kt.lite.extensions.toJson +import java.text.DecimalFormat /** @@ -68,35 +70,31 @@ /** * 竖直柱状图 * */ -// fun setBarChartData( -// chart: BarChart, -// xAxisLabel: MutableList, -// entries: List, -// dateType: String -// ) { -// //每次加载数据都初始化饼图 -// chart.init(chart.context, xAxisLabel) -// val barDataSets: MutableList = ArrayList() -// //绑定数据 -// val dataSet = BarDataSet(entries, "") -// dataSet.color = R.color.color_1.convertColor(chart.context) -// dataSet.valueFormatter = object : ValueFormatter() { -// override fun getFormattedValue(value: Float): String { -// return DecimalFormat("##0").format(value.toDouble()) -// } -// } -// barDataSets.add(dataSet) -// val barData = BarData(barDataSets) -// barData.barWidth = 0.5f -// //添加自定义Marker + fun setBarChartData( + chart: BarChart, xAxisLabel: MutableList, entries: List + ) { + //每次加载数据都初始化饼图 + chart.init(chart.context, xAxisLabel) + val barDataSets: MutableList = ArrayList() + //绑定数据 + val dataSet = BarDataSet(entries, "") + dataSet.color = R.color.color_6.convertColor(chart.context) + dataSet.valueFormatter = object : ValueFormatter() { + override fun getFormattedValue(value: Float): String { + return DecimalFormat("##0").format(value.toDouble()) + } + } + barDataSets.add(dataSet) + val barData = BarData(barDataSets) + barData.barWidth = 0.5f + //添加自定义Marker // val markerView = BarChartMarkerView(chart.context) // markerView.chartView = chart // markerView.setXAxisLabel(xAxisLabel) -// markerView.setBarDataType(dateType) // chart.marker = markerView -// chart.data = barData -// chart.invalidate() -// } + chart.data = barData + chart.invalidate() + } /** * 横向柱状图 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 index 3c09c39..2b682c2 100644 --- 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 @@ -95,6 +95,9 @@ @GET("/monitor/list") suspend fun queryVideoCameraList(@Header("token") token: String): String + @GET("/statics/runningState") + suspend fun getAlarmStatistics(@Header("token") token: String): String + @GET("/statics/healthStatus") suspend fun getPipeHealthStatus( @Header("token") token: String, 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 index 6922523..a6d8099 100644 --- 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 @@ -98,6 +98,10 @@ return smartTownApi.queryVideoCameraList(AuthenticationHelper.token!!) } + suspend fun getAlarmStatistics(): String { + return smartTownApi.getAlarmStatistics(AuthenticationHelper.token!!) + } + suspend fun getPipeHealthStatus(beginTime: String, endTime: String, alarmType: String): String { return smartTownApi.getPipeHealthStatus( AuthenticationHelper.token!!, diff --git a/app/src/main/java/com/casic/smart/town/sanxi/vm/PipeViewModel.kt b/app/src/main/java/com/casic/smart/town/sanxi/vm/PipeViewModel.kt index d08167c..c18c6cf 100644 --- a/app/src/main/java/com/casic/smart/town/sanxi/vm/PipeViewModel.kt +++ b/app/src/main/java/com/casic/smart/town/sanxi/vm/PipeViewModel.kt @@ -4,6 +4,7 @@ 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.model.AlarmStatisticsModel import com.casic.smart.town.sanxi.model.HealthStatusModel import com.casic.smart.town.sanxi.util.retrofit.RetrofitServiceManager import com.google.gson.Gson @@ -14,8 +15,23 @@ class PipeViewModel : BaseViewModel() { private val gson by lazy { Gson() } + val alarmResultModel = MutableLiveData() val resultModel = MutableLiveData() + fun getAlarmStatistics() = launch({ + val response = RetrofitServiceManager.getAlarmStatistics() + val responseCode = response.separateResponseCode() + if (responseCode == 200) { + alarmResultModel.value = gson.fromJson( + response, object : TypeToken() {}.type + ) + } else { + response.toErrorMessage().show(BaseApplication.obtainInstance()) + } + }, { + it.printStackTrace() + }) + fun getPipeHealthStatus(beginTime: String, endTime: String, alarmType: String) = launch({ val response = RetrofitServiceManager.getPipeHealthStatus(beginTime, endTime, alarmType) val responseCode = response.separateResponseCode() diff --git a/app/src/main/res/layout/fragment_statistics.xml b/app/src/main/res/layout/fragment_statistics.xml index acaafd1..18de0b1 100644 --- a/app/src/main/res/layout/fragment_statistics.xml +++ b/app/src/main/res/layout/fragment_statistics.xml @@ -32,6 +32,44 @@ android:orientation="vertical" android:paddingHorizontal="@dimen/dp_10"> + + + + + + + + + + + + + + - + + + + + + + - + + + + + + \ No newline at end of file