diff --git a/app/src/main/java/com/casic/br/ktd/extensions/LineChart.kt b/app/src/main/java/com/casic/br/ktd/extensions/LineChart.kt index 0e4ea5f..f5fcd37 100644 --- a/app/src/main/java/com/casic/br/ktd/extensions/LineChart.kt +++ b/app/src/main/java/com/casic/br/ktd/extensions/LineChart.kt @@ -63,4 +63,35 @@ this.description.isEnabled = false //去掉图例 this.legend.isEnabled = false +} + +fun LineChart.init(labelCount: Int) { + this.setNoDataText("无数据,无法渲染...") + this.setNoDataTextColor(Color.RED) + this.getPaint(Chart.PAINT_INFO).textSize = 12f.dp2px(this.context).toFloat() + this.setDrawGridBackground(false) + this.setDrawBorders(false) + this.animateY(1200, Easing.EaseInOutQuad) + //设置样式 + val rightAxis: YAxis = this.axisRight + //设置图表右边的y轴禁用 + rightAxis.isEnabled = false + val leftAxis: YAxis = this.axisLeft + leftAxis.axisMinimum = 0f + this.isScaleXEnabled = true //X轴可缩放 + this.isScaleYEnabled = false //Y轴不可缩放 + //设置x轴 + val xAxis: XAxis = this.xAxis + xAxis.textSize = 10f + xAxis.labelCount = labelCount //x轴标签数量 + xAxis.setDrawLabels(true) //绘制标签 指x轴上的对应数值 + xAxis.setDrawAxisLine(true) //是否绘制轴线 + xAxis.setDrawGridLines(true) //设置x轴上每个点对应的线 + xAxis.granularity = 1f //禁止放大后x轴标签重绘 + xAxis.position = XAxis.XAxisPosition.BOTTOM + this.extraBottomOffset = 5f //解决X轴显示不完全问题 + //去掉描述 + this.description.isEnabled = false + //去掉图例 + this.legend.isEnabled = false } \ No newline at end of file diff --git a/app/src/main/java/com/casic/br/ktd/extensions/LineChart.kt b/app/src/main/java/com/casic/br/ktd/extensions/LineChart.kt index 0e4ea5f..f5fcd37 100644 --- a/app/src/main/java/com/casic/br/ktd/extensions/LineChart.kt +++ b/app/src/main/java/com/casic/br/ktd/extensions/LineChart.kt @@ -63,4 +63,35 @@ this.description.isEnabled = false //去掉图例 this.legend.isEnabled = false +} + +fun LineChart.init(labelCount: Int) { + this.setNoDataText("无数据,无法渲染...") + this.setNoDataTextColor(Color.RED) + this.getPaint(Chart.PAINT_INFO).textSize = 12f.dp2px(this.context).toFloat() + this.setDrawGridBackground(false) + this.setDrawBorders(false) + this.animateY(1200, Easing.EaseInOutQuad) + //设置样式 + val rightAxis: YAxis = this.axisRight + //设置图表右边的y轴禁用 + rightAxis.isEnabled = false + val leftAxis: YAxis = this.axisLeft + leftAxis.axisMinimum = 0f + this.isScaleXEnabled = true //X轴可缩放 + this.isScaleYEnabled = false //Y轴不可缩放 + //设置x轴 + val xAxis: XAxis = this.xAxis + xAxis.textSize = 10f + xAxis.labelCount = labelCount //x轴标签数量 + xAxis.setDrawLabels(true) //绘制标签 指x轴上的对应数值 + xAxis.setDrawAxisLine(true) //是否绘制轴线 + xAxis.setDrawGridLines(true) //设置x轴上每个点对应的线 + xAxis.granularity = 1f //禁止放大后x轴标签重绘 + xAxis.position = XAxis.XAxisPosition.BOTTOM + this.extraBottomOffset = 5f //解决X轴显示不完全问题 + //去掉描述 + this.description.isEnabled = false + //去掉图例 + this.legend.isEnabled = false } \ No newline at end of file diff --git a/app/src/main/java/com/casic/br/ktd/fragment/HomePageFragment.kt b/app/src/main/java/com/casic/br/ktd/fragment/HomePageFragment.kt index 32c1356..1d1118d 100644 --- a/app/src/main/java/com/casic/br/ktd/fragment/HomePageFragment.kt +++ b/app/src/main/java/com/casic/br/ktd/fragment/HomePageFragment.kt @@ -27,11 +27,13 @@ import com.casic.br.ktd.model.DeviceListModel import com.casic.br.ktd.model.TaskListModel import com.casic.br.ktd.model.VehicleListModel +import com.casic.br.ktd.utils.ChartViewHub import com.casic.br.ktd.utils.DateType import com.casic.br.ktd.utils.LocaleConstant import com.casic.br.ktd.vm.DeviceViewModel import com.casic.br.ktd.vm.TaskViewModel import com.casic.br.ktd.vm.VehicleViewModel +import com.github.mikephil.charting.data.Entry import com.pengxh.kt.lite.base.KotlinBaseFragment import com.pengxh.kt.lite.extensions.timestampToDate import com.pengxh.kt.lite.extensions.timestampToLastMonthDate @@ -119,7 +121,24 @@ binding.dayTaskDistanceView.text = it.data.km.toString() } } + taskViewModel.getTaskTrend("", "", "") + taskViewModel.taskTrendModel.observe(this) { + if (it.code == 200) { + val xAxisLabels: MutableList = ArrayList() + //每个entries都是一条折线 + val strengthEntries: ArrayList = ArrayList() + it.data.forEachIndexed { i, rowsBean -> + // x 轴坐标 + xAxisLabels.add(rowsBean.date) + //任务 + strengthEntries.add( + Entry(i.toFloat(), rowsBean.value.toFloat(), "任务") + ) + } + ChartViewHub.setLineChartData(binding.taskTrendChart, xAxisLabels, strengthEntries) + } + } taskViewModel.getTasksByPage("", "", "", "", 1) taskViewModel.taskList.observe(this) { if (it.code == 200) { diff --git a/app/src/main/java/com/casic/br/ktd/extensions/LineChart.kt b/app/src/main/java/com/casic/br/ktd/extensions/LineChart.kt index 0e4ea5f..f5fcd37 100644 --- a/app/src/main/java/com/casic/br/ktd/extensions/LineChart.kt +++ b/app/src/main/java/com/casic/br/ktd/extensions/LineChart.kt @@ -63,4 +63,35 @@ this.description.isEnabled = false //去掉图例 this.legend.isEnabled = false +} + +fun LineChart.init(labelCount: Int) { + this.setNoDataText("无数据,无法渲染...") + this.setNoDataTextColor(Color.RED) + this.getPaint(Chart.PAINT_INFO).textSize = 12f.dp2px(this.context).toFloat() + this.setDrawGridBackground(false) + this.setDrawBorders(false) + this.animateY(1200, Easing.EaseInOutQuad) + //设置样式 + val rightAxis: YAxis = this.axisRight + //设置图表右边的y轴禁用 + rightAxis.isEnabled = false + val leftAxis: YAxis = this.axisLeft + leftAxis.axisMinimum = 0f + this.isScaleXEnabled = true //X轴可缩放 + this.isScaleYEnabled = false //Y轴不可缩放 + //设置x轴 + val xAxis: XAxis = this.xAxis + xAxis.textSize = 10f + xAxis.labelCount = labelCount //x轴标签数量 + xAxis.setDrawLabels(true) //绘制标签 指x轴上的对应数值 + xAxis.setDrawAxisLine(true) //是否绘制轴线 + xAxis.setDrawGridLines(true) //设置x轴上每个点对应的线 + xAxis.granularity = 1f //禁止放大后x轴标签重绘 + xAxis.position = XAxis.XAxisPosition.BOTTOM + this.extraBottomOffset = 5f //解决X轴显示不完全问题 + //去掉描述 + this.description.isEnabled = false + //去掉图例 + this.legend.isEnabled = false } \ No newline at end of file diff --git a/app/src/main/java/com/casic/br/ktd/fragment/HomePageFragment.kt b/app/src/main/java/com/casic/br/ktd/fragment/HomePageFragment.kt index 32c1356..1d1118d 100644 --- a/app/src/main/java/com/casic/br/ktd/fragment/HomePageFragment.kt +++ b/app/src/main/java/com/casic/br/ktd/fragment/HomePageFragment.kt @@ -27,11 +27,13 @@ import com.casic.br.ktd.model.DeviceListModel import com.casic.br.ktd.model.TaskListModel import com.casic.br.ktd.model.VehicleListModel +import com.casic.br.ktd.utils.ChartViewHub import com.casic.br.ktd.utils.DateType import com.casic.br.ktd.utils.LocaleConstant import com.casic.br.ktd.vm.DeviceViewModel import com.casic.br.ktd.vm.TaskViewModel import com.casic.br.ktd.vm.VehicleViewModel +import com.github.mikephil.charting.data.Entry import com.pengxh.kt.lite.base.KotlinBaseFragment import com.pengxh.kt.lite.extensions.timestampToDate import com.pengxh.kt.lite.extensions.timestampToLastMonthDate @@ -119,7 +121,24 @@ binding.dayTaskDistanceView.text = it.data.km.toString() } } + taskViewModel.getTaskTrend("", "", "") + taskViewModel.taskTrendModel.observe(this) { + if (it.code == 200) { + val xAxisLabels: MutableList = ArrayList() + //每个entries都是一条折线 + val strengthEntries: ArrayList = ArrayList() + it.data.forEachIndexed { i, rowsBean -> + // x 轴坐标 + xAxisLabels.add(rowsBean.date) + //任务 + strengthEntries.add( + Entry(i.toFloat(), rowsBean.value.toFloat(), "任务") + ) + } + ChartViewHub.setLineChartData(binding.taskTrendChart, xAxisLabels, strengthEntries) + } + } taskViewModel.getTasksByPage("", "", "", "", 1) taskViewModel.taskList.observe(this) { if (it.code == 200) { diff --git a/app/src/main/java/com/casic/br/ktd/model/TaskTrendModel.java b/app/src/main/java/com/casic/br/ktd/model/TaskTrendModel.java new file mode 100644 index 0000000..b932496 --- /dev/null +++ b/app/src/main/java/com/casic/br/ktd/model/TaskTrendModel.java @@ -0,0 +1,55 @@ +package com.casic.br.ktd.model; + +import java.util.List; + +public class TaskTrendModel { + + private Integer code; + private List data; + private String message; + + public Integer getCode() { + return code; + } + + public void setCode(Integer 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 static class DataModel { + private String date; + private Integer value; + + public String getDate() { + return date; + } + + public void setDate(String date) { + this.date = date; + } + + public Integer getValue() { + return value; + } + + public void setValue(Integer value) { + this.value = value; + } + } +} diff --git a/app/src/main/java/com/casic/br/ktd/extensions/LineChart.kt b/app/src/main/java/com/casic/br/ktd/extensions/LineChart.kt index 0e4ea5f..f5fcd37 100644 --- a/app/src/main/java/com/casic/br/ktd/extensions/LineChart.kt +++ b/app/src/main/java/com/casic/br/ktd/extensions/LineChart.kt @@ -63,4 +63,35 @@ this.description.isEnabled = false //去掉图例 this.legend.isEnabled = false +} + +fun LineChart.init(labelCount: Int) { + this.setNoDataText("无数据,无法渲染...") + this.setNoDataTextColor(Color.RED) + this.getPaint(Chart.PAINT_INFO).textSize = 12f.dp2px(this.context).toFloat() + this.setDrawGridBackground(false) + this.setDrawBorders(false) + this.animateY(1200, Easing.EaseInOutQuad) + //设置样式 + val rightAxis: YAxis = this.axisRight + //设置图表右边的y轴禁用 + rightAxis.isEnabled = false + val leftAxis: YAxis = this.axisLeft + leftAxis.axisMinimum = 0f + this.isScaleXEnabled = true //X轴可缩放 + this.isScaleYEnabled = false //Y轴不可缩放 + //设置x轴 + val xAxis: XAxis = this.xAxis + xAxis.textSize = 10f + xAxis.labelCount = labelCount //x轴标签数量 + xAxis.setDrawLabels(true) //绘制标签 指x轴上的对应数值 + xAxis.setDrawAxisLine(true) //是否绘制轴线 + xAxis.setDrawGridLines(true) //设置x轴上每个点对应的线 + xAxis.granularity = 1f //禁止放大后x轴标签重绘 + xAxis.position = XAxis.XAxisPosition.BOTTOM + this.extraBottomOffset = 5f //解决X轴显示不完全问题 + //去掉描述 + this.description.isEnabled = false + //去掉图例 + this.legend.isEnabled = false } \ No newline at end of file diff --git a/app/src/main/java/com/casic/br/ktd/fragment/HomePageFragment.kt b/app/src/main/java/com/casic/br/ktd/fragment/HomePageFragment.kt index 32c1356..1d1118d 100644 --- a/app/src/main/java/com/casic/br/ktd/fragment/HomePageFragment.kt +++ b/app/src/main/java/com/casic/br/ktd/fragment/HomePageFragment.kt @@ -27,11 +27,13 @@ import com.casic.br.ktd.model.DeviceListModel import com.casic.br.ktd.model.TaskListModel import com.casic.br.ktd.model.VehicleListModel +import com.casic.br.ktd.utils.ChartViewHub import com.casic.br.ktd.utils.DateType import com.casic.br.ktd.utils.LocaleConstant import com.casic.br.ktd.vm.DeviceViewModel import com.casic.br.ktd.vm.TaskViewModel import com.casic.br.ktd.vm.VehicleViewModel +import com.github.mikephil.charting.data.Entry import com.pengxh.kt.lite.base.KotlinBaseFragment import com.pengxh.kt.lite.extensions.timestampToDate import com.pengxh.kt.lite.extensions.timestampToLastMonthDate @@ -119,7 +121,24 @@ binding.dayTaskDistanceView.text = it.data.km.toString() } } + taskViewModel.getTaskTrend("", "", "") + taskViewModel.taskTrendModel.observe(this) { + if (it.code == 200) { + val xAxisLabels: MutableList = ArrayList() + //每个entries都是一条折线 + val strengthEntries: ArrayList = ArrayList() + it.data.forEachIndexed { i, rowsBean -> + // x 轴坐标 + xAxisLabels.add(rowsBean.date) + //任务 + strengthEntries.add( + Entry(i.toFloat(), rowsBean.value.toFloat(), "任务") + ) + } + ChartViewHub.setLineChartData(binding.taskTrendChart, xAxisLabels, strengthEntries) + } + } taskViewModel.getTasksByPage("", "", "", "", 1) taskViewModel.taskList.observe(this) { if (it.code == 200) { diff --git a/app/src/main/java/com/casic/br/ktd/model/TaskTrendModel.java b/app/src/main/java/com/casic/br/ktd/model/TaskTrendModel.java new file mode 100644 index 0000000..b932496 --- /dev/null +++ b/app/src/main/java/com/casic/br/ktd/model/TaskTrendModel.java @@ -0,0 +1,55 @@ +package com.casic.br.ktd.model; + +import java.util.List; + +public class TaskTrendModel { + + private Integer code; + private List data; + private String message; + + public Integer getCode() { + return code; + } + + public void setCode(Integer 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 static class DataModel { + private String date; + private Integer value; + + public String getDate() { + return date; + } + + public void setDate(String date) { + this.date = date; + } + + public Integer getValue() { + return value; + } + + public void setValue(Integer value) { + this.value = value; + } + } +} diff --git a/app/src/main/java/com/casic/br/ktd/retrofit/RetrofitService.kt b/app/src/main/java/com/casic/br/ktd/retrofit/RetrofitService.kt index 42116fa..f18af0c 100644 --- a/app/src/main/java/com/casic/br/ktd/retrofit/RetrofitService.kt +++ b/app/src/main/java/com/casic/br/ktd/retrofit/RetrofitService.kt @@ -184,4 +184,13 @@ @Header("token") token: String, @Body requestBody: RequestBody ): String + + /** + * 巡检任务趋势 + */ + @POST("/system/busOverView/taskTime") + suspend fun getTaskTrend( + @Header("token") token: String, + @Body requestBody: RequestBody + ): String } \ No newline at end of file diff --git a/app/src/main/java/com/casic/br/ktd/extensions/LineChart.kt b/app/src/main/java/com/casic/br/ktd/extensions/LineChart.kt index 0e4ea5f..f5fcd37 100644 --- a/app/src/main/java/com/casic/br/ktd/extensions/LineChart.kt +++ b/app/src/main/java/com/casic/br/ktd/extensions/LineChart.kt @@ -63,4 +63,35 @@ this.description.isEnabled = false //去掉图例 this.legend.isEnabled = false +} + +fun LineChart.init(labelCount: Int) { + this.setNoDataText("无数据,无法渲染...") + this.setNoDataTextColor(Color.RED) + this.getPaint(Chart.PAINT_INFO).textSize = 12f.dp2px(this.context).toFloat() + this.setDrawGridBackground(false) + this.setDrawBorders(false) + this.animateY(1200, Easing.EaseInOutQuad) + //设置样式 + val rightAxis: YAxis = this.axisRight + //设置图表右边的y轴禁用 + rightAxis.isEnabled = false + val leftAxis: YAxis = this.axisLeft + leftAxis.axisMinimum = 0f + this.isScaleXEnabled = true //X轴可缩放 + this.isScaleYEnabled = false //Y轴不可缩放 + //设置x轴 + val xAxis: XAxis = this.xAxis + xAxis.textSize = 10f + xAxis.labelCount = labelCount //x轴标签数量 + xAxis.setDrawLabels(true) //绘制标签 指x轴上的对应数值 + xAxis.setDrawAxisLine(true) //是否绘制轴线 + xAxis.setDrawGridLines(true) //设置x轴上每个点对应的线 + xAxis.granularity = 1f //禁止放大后x轴标签重绘 + xAxis.position = XAxis.XAxisPosition.BOTTOM + this.extraBottomOffset = 5f //解决X轴显示不完全问题 + //去掉描述 + this.description.isEnabled = false + //去掉图例 + this.legend.isEnabled = false } \ No newline at end of file diff --git a/app/src/main/java/com/casic/br/ktd/fragment/HomePageFragment.kt b/app/src/main/java/com/casic/br/ktd/fragment/HomePageFragment.kt index 32c1356..1d1118d 100644 --- a/app/src/main/java/com/casic/br/ktd/fragment/HomePageFragment.kt +++ b/app/src/main/java/com/casic/br/ktd/fragment/HomePageFragment.kt @@ -27,11 +27,13 @@ import com.casic.br.ktd.model.DeviceListModel import com.casic.br.ktd.model.TaskListModel import com.casic.br.ktd.model.VehicleListModel +import com.casic.br.ktd.utils.ChartViewHub import com.casic.br.ktd.utils.DateType import com.casic.br.ktd.utils.LocaleConstant import com.casic.br.ktd.vm.DeviceViewModel import com.casic.br.ktd.vm.TaskViewModel import com.casic.br.ktd.vm.VehicleViewModel +import com.github.mikephil.charting.data.Entry import com.pengxh.kt.lite.base.KotlinBaseFragment import com.pengxh.kt.lite.extensions.timestampToDate import com.pengxh.kt.lite.extensions.timestampToLastMonthDate @@ -119,7 +121,24 @@ binding.dayTaskDistanceView.text = it.data.km.toString() } } + taskViewModel.getTaskTrend("", "", "") + taskViewModel.taskTrendModel.observe(this) { + if (it.code == 200) { + val xAxisLabels: MutableList = ArrayList() + //每个entries都是一条折线 + val strengthEntries: ArrayList = ArrayList() + it.data.forEachIndexed { i, rowsBean -> + // x 轴坐标 + xAxisLabels.add(rowsBean.date) + //任务 + strengthEntries.add( + Entry(i.toFloat(), rowsBean.value.toFloat(), "任务") + ) + } + ChartViewHub.setLineChartData(binding.taskTrendChart, xAxisLabels, strengthEntries) + } + } taskViewModel.getTasksByPage("", "", "", "", 1) taskViewModel.taskList.observe(this) { if (it.code == 200) { diff --git a/app/src/main/java/com/casic/br/ktd/model/TaskTrendModel.java b/app/src/main/java/com/casic/br/ktd/model/TaskTrendModel.java new file mode 100644 index 0000000..b932496 --- /dev/null +++ b/app/src/main/java/com/casic/br/ktd/model/TaskTrendModel.java @@ -0,0 +1,55 @@ +package com.casic.br.ktd.model; + +import java.util.List; + +public class TaskTrendModel { + + private Integer code; + private List data; + private String message; + + public Integer getCode() { + return code; + } + + public void setCode(Integer 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 static class DataModel { + private String date; + private Integer value; + + public String getDate() { + return date; + } + + public void setDate(String date) { + this.date = date; + } + + public Integer getValue() { + return value; + } + + public void setValue(Integer value) { + this.value = value; + } + } +} diff --git a/app/src/main/java/com/casic/br/ktd/retrofit/RetrofitService.kt b/app/src/main/java/com/casic/br/ktd/retrofit/RetrofitService.kt index 42116fa..f18af0c 100644 --- a/app/src/main/java/com/casic/br/ktd/retrofit/RetrofitService.kt +++ b/app/src/main/java/com/casic/br/ktd/retrofit/RetrofitService.kt @@ -184,4 +184,13 @@ @Header("token") token: String, @Body requestBody: RequestBody ): String + + /** + * 巡检任务趋势 + */ + @POST("/system/busOverView/taskTime") + suspend fun getTaskTrend( + @Header("token") token: String, + @Body requestBody: RequestBody + ): String } \ No newline at end of file diff --git a/app/src/main/java/com/casic/br/ktd/retrofit/RetrofitServiceManager.kt b/app/src/main/java/com/casic/br/ktd/retrofit/RetrofitServiceManager.kt index 7f47552..63732ee 100644 --- a/app/src/main/java/com/casic/br/ktd/retrofit/RetrofitServiceManager.kt +++ b/app/src/main/java/com/casic/br/ktd/retrofit/RetrofitServiceManager.kt @@ -319,7 +319,21 @@ /** * 根据时间获取巡检任务和公里数 */ - suspend fun getTaskCount(beginDate: String, endDate: String, timeType: String): String { + suspend fun getTaskCount(beginDate: String, endDate: String): String { + val param = JsonObject() + param.addProperty("beginDate", beginDate) + param.addProperty("endDate", endDate) + + val requestBody = param.toString().toRequestBody( + "application/json;charset=UTF-8".toMediaType() + ) + return api.getTaskCount(AuthenticationHelper.token, requestBody) + } + + /** + * 巡检任务趋势 + */ + suspend fun getTaskTrend(beginDate: String, endDate: String, timeType: String): String { val param = JsonObject() param.addProperty("beginDate", beginDate) param.addProperty("endDate", endDate) @@ -328,6 +342,6 @@ val requestBody = param.toString().toRequestBody( "application/json;charset=UTF-8".toMediaType() ) - return api.getTaskCount(AuthenticationHelper.token, requestBody) + return api.getTaskTrend(AuthenticationHelper.token, requestBody) } } \ No newline at end of file diff --git a/app/src/main/java/com/casic/br/ktd/extensions/LineChart.kt b/app/src/main/java/com/casic/br/ktd/extensions/LineChart.kt index 0e4ea5f..f5fcd37 100644 --- a/app/src/main/java/com/casic/br/ktd/extensions/LineChart.kt +++ b/app/src/main/java/com/casic/br/ktd/extensions/LineChart.kt @@ -63,4 +63,35 @@ this.description.isEnabled = false //去掉图例 this.legend.isEnabled = false +} + +fun LineChart.init(labelCount: Int) { + this.setNoDataText("无数据,无法渲染...") + this.setNoDataTextColor(Color.RED) + this.getPaint(Chart.PAINT_INFO).textSize = 12f.dp2px(this.context).toFloat() + this.setDrawGridBackground(false) + this.setDrawBorders(false) + this.animateY(1200, Easing.EaseInOutQuad) + //设置样式 + val rightAxis: YAxis = this.axisRight + //设置图表右边的y轴禁用 + rightAxis.isEnabled = false + val leftAxis: YAxis = this.axisLeft + leftAxis.axisMinimum = 0f + this.isScaleXEnabled = true //X轴可缩放 + this.isScaleYEnabled = false //Y轴不可缩放 + //设置x轴 + val xAxis: XAxis = this.xAxis + xAxis.textSize = 10f + xAxis.labelCount = labelCount //x轴标签数量 + xAxis.setDrawLabels(true) //绘制标签 指x轴上的对应数值 + xAxis.setDrawAxisLine(true) //是否绘制轴线 + xAxis.setDrawGridLines(true) //设置x轴上每个点对应的线 + xAxis.granularity = 1f //禁止放大后x轴标签重绘 + xAxis.position = XAxis.XAxisPosition.BOTTOM + this.extraBottomOffset = 5f //解决X轴显示不完全问题 + //去掉描述 + this.description.isEnabled = false + //去掉图例 + this.legend.isEnabled = false } \ No newline at end of file diff --git a/app/src/main/java/com/casic/br/ktd/fragment/HomePageFragment.kt b/app/src/main/java/com/casic/br/ktd/fragment/HomePageFragment.kt index 32c1356..1d1118d 100644 --- a/app/src/main/java/com/casic/br/ktd/fragment/HomePageFragment.kt +++ b/app/src/main/java/com/casic/br/ktd/fragment/HomePageFragment.kt @@ -27,11 +27,13 @@ import com.casic.br.ktd.model.DeviceListModel import com.casic.br.ktd.model.TaskListModel import com.casic.br.ktd.model.VehicleListModel +import com.casic.br.ktd.utils.ChartViewHub import com.casic.br.ktd.utils.DateType import com.casic.br.ktd.utils.LocaleConstant import com.casic.br.ktd.vm.DeviceViewModel import com.casic.br.ktd.vm.TaskViewModel import com.casic.br.ktd.vm.VehicleViewModel +import com.github.mikephil.charting.data.Entry import com.pengxh.kt.lite.base.KotlinBaseFragment import com.pengxh.kt.lite.extensions.timestampToDate import com.pengxh.kt.lite.extensions.timestampToLastMonthDate @@ -119,7 +121,24 @@ binding.dayTaskDistanceView.text = it.data.km.toString() } } + taskViewModel.getTaskTrend("", "", "") + taskViewModel.taskTrendModel.observe(this) { + if (it.code == 200) { + val xAxisLabels: MutableList = ArrayList() + //每个entries都是一条折线 + val strengthEntries: ArrayList = ArrayList() + it.data.forEachIndexed { i, rowsBean -> + // x 轴坐标 + xAxisLabels.add(rowsBean.date) + //任务 + strengthEntries.add( + Entry(i.toFloat(), rowsBean.value.toFloat(), "任务") + ) + } + ChartViewHub.setLineChartData(binding.taskTrendChart, xAxisLabels, strengthEntries) + } + } taskViewModel.getTasksByPage("", "", "", "", 1) taskViewModel.taskList.observe(this) { if (it.code == 200) { diff --git a/app/src/main/java/com/casic/br/ktd/model/TaskTrendModel.java b/app/src/main/java/com/casic/br/ktd/model/TaskTrendModel.java new file mode 100644 index 0000000..b932496 --- /dev/null +++ b/app/src/main/java/com/casic/br/ktd/model/TaskTrendModel.java @@ -0,0 +1,55 @@ +package com.casic.br.ktd.model; + +import java.util.List; + +public class TaskTrendModel { + + private Integer code; + private List data; + private String message; + + public Integer getCode() { + return code; + } + + public void setCode(Integer 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 static class DataModel { + private String date; + private Integer value; + + public String getDate() { + return date; + } + + public void setDate(String date) { + this.date = date; + } + + public Integer getValue() { + return value; + } + + public void setValue(Integer value) { + this.value = value; + } + } +} diff --git a/app/src/main/java/com/casic/br/ktd/retrofit/RetrofitService.kt b/app/src/main/java/com/casic/br/ktd/retrofit/RetrofitService.kt index 42116fa..f18af0c 100644 --- a/app/src/main/java/com/casic/br/ktd/retrofit/RetrofitService.kt +++ b/app/src/main/java/com/casic/br/ktd/retrofit/RetrofitService.kt @@ -184,4 +184,13 @@ @Header("token") token: String, @Body requestBody: RequestBody ): String + + /** + * 巡检任务趋势 + */ + @POST("/system/busOverView/taskTime") + suspend fun getTaskTrend( + @Header("token") token: String, + @Body requestBody: RequestBody + ): String } \ No newline at end of file diff --git a/app/src/main/java/com/casic/br/ktd/retrofit/RetrofitServiceManager.kt b/app/src/main/java/com/casic/br/ktd/retrofit/RetrofitServiceManager.kt index 7f47552..63732ee 100644 --- a/app/src/main/java/com/casic/br/ktd/retrofit/RetrofitServiceManager.kt +++ b/app/src/main/java/com/casic/br/ktd/retrofit/RetrofitServiceManager.kt @@ -319,7 +319,21 @@ /** * 根据时间获取巡检任务和公里数 */ - suspend fun getTaskCount(beginDate: String, endDate: String, timeType: String): String { + suspend fun getTaskCount(beginDate: String, endDate: String): String { + val param = JsonObject() + param.addProperty("beginDate", beginDate) + param.addProperty("endDate", endDate) + + val requestBody = param.toString().toRequestBody( + "application/json;charset=UTF-8".toMediaType() + ) + return api.getTaskCount(AuthenticationHelper.token, requestBody) + } + + /** + * 巡检任务趋势 + */ + suspend fun getTaskTrend(beginDate: String, endDate: String, timeType: String): String { val param = JsonObject() param.addProperty("beginDate", beginDate) param.addProperty("endDate", endDate) @@ -328,6 +342,6 @@ val requestBody = param.toString().toRequestBody( "application/json;charset=UTF-8".toMediaType() ) - return api.getTaskCount(AuthenticationHelper.token, requestBody) + return api.getTaskTrend(AuthenticationHelper.token, requestBody) } } \ No newline at end of file diff --git a/app/src/main/java/com/casic/br/ktd/utils/ChartViewHub.kt b/app/src/main/java/com/casic/br/ktd/utils/ChartViewHub.kt new file mode 100644 index 0000000..b712b82 --- /dev/null +++ b/app/src/main/java/com/casic/br/ktd/utils/ChartViewHub.kt @@ -0,0 +1,56 @@ +package com.casic.br.ktd.utils + +import android.graphics.Color +import com.casic.br.ktd.extensions.init +import com.casic.br.ktd.widgets.LineChartMarkerView +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.formatter.ValueFormatter +import com.github.mikephil.charting.interfaces.datasets.ILineDataSet + +object ChartViewHub { + /** + * 折线图 + * */ + fun setLineChartData( + chart: LineChart, xAxisDate: MutableList, entries: List + ) { + //每次加载数据都初始化折线图 + chart.init(xAxisDate.size) + if (entries.isEmpty()) { + return + } + //绑定数据 + val lineDataSets: MutableList = ArrayList() + //设置数据 + val dataSet = LineDataSet(entries, entries[0].data.toString()) + dataSet.setDrawCircles(true) + //圆点颜色 + dataSet.setCircleColor(Color.parseColor("#61A2FE")) + //线条颜色 + dataSet.color = Color.parseColor("#61A2FE") + dataSet.setDrawFilled(true) + dataSet.fillColor = Color.parseColor("#E4ECFF") + dataSet.mode = LineDataSet.Mode.CUBIC_BEZIER + lineDataSets.add(dataSet) + + val lineData = LineData(lineDataSets) + lineData.setDrawValues(false) + //添加自定义Marker + val markerView = LineChartMarkerView(chart.context) + markerView.chartView = chart + markerView.setXAxisDate(xAxisDate) + chart.marker = markerView + //设置X轴坐标 + val xAxis = chart.xAxis + xAxis.valueFormatter = object : ValueFormatter() { + override fun getFormattedValue(value: Float): String { + return xAxisDate[value.toInt()] + } + } + chart.data = lineData + chart.invalidate() + } +} \ No newline at end of file diff --git a/app/src/main/java/com/casic/br/ktd/extensions/LineChart.kt b/app/src/main/java/com/casic/br/ktd/extensions/LineChart.kt index 0e4ea5f..f5fcd37 100644 --- a/app/src/main/java/com/casic/br/ktd/extensions/LineChart.kt +++ b/app/src/main/java/com/casic/br/ktd/extensions/LineChart.kt @@ -63,4 +63,35 @@ this.description.isEnabled = false //去掉图例 this.legend.isEnabled = false +} + +fun LineChart.init(labelCount: Int) { + this.setNoDataText("无数据,无法渲染...") + this.setNoDataTextColor(Color.RED) + this.getPaint(Chart.PAINT_INFO).textSize = 12f.dp2px(this.context).toFloat() + this.setDrawGridBackground(false) + this.setDrawBorders(false) + this.animateY(1200, Easing.EaseInOutQuad) + //设置样式 + val rightAxis: YAxis = this.axisRight + //设置图表右边的y轴禁用 + rightAxis.isEnabled = false + val leftAxis: YAxis = this.axisLeft + leftAxis.axisMinimum = 0f + this.isScaleXEnabled = true //X轴可缩放 + this.isScaleYEnabled = false //Y轴不可缩放 + //设置x轴 + val xAxis: XAxis = this.xAxis + xAxis.textSize = 10f + xAxis.labelCount = labelCount //x轴标签数量 + xAxis.setDrawLabels(true) //绘制标签 指x轴上的对应数值 + xAxis.setDrawAxisLine(true) //是否绘制轴线 + xAxis.setDrawGridLines(true) //设置x轴上每个点对应的线 + xAxis.granularity = 1f //禁止放大后x轴标签重绘 + xAxis.position = XAxis.XAxisPosition.BOTTOM + this.extraBottomOffset = 5f //解决X轴显示不完全问题 + //去掉描述 + this.description.isEnabled = false + //去掉图例 + this.legend.isEnabled = false } \ No newline at end of file diff --git a/app/src/main/java/com/casic/br/ktd/fragment/HomePageFragment.kt b/app/src/main/java/com/casic/br/ktd/fragment/HomePageFragment.kt index 32c1356..1d1118d 100644 --- a/app/src/main/java/com/casic/br/ktd/fragment/HomePageFragment.kt +++ b/app/src/main/java/com/casic/br/ktd/fragment/HomePageFragment.kt @@ -27,11 +27,13 @@ import com.casic.br.ktd.model.DeviceListModel import com.casic.br.ktd.model.TaskListModel import com.casic.br.ktd.model.VehicleListModel +import com.casic.br.ktd.utils.ChartViewHub import com.casic.br.ktd.utils.DateType import com.casic.br.ktd.utils.LocaleConstant import com.casic.br.ktd.vm.DeviceViewModel import com.casic.br.ktd.vm.TaskViewModel import com.casic.br.ktd.vm.VehicleViewModel +import com.github.mikephil.charting.data.Entry import com.pengxh.kt.lite.base.KotlinBaseFragment import com.pengxh.kt.lite.extensions.timestampToDate import com.pengxh.kt.lite.extensions.timestampToLastMonthDate @@ -119,7 +121,24 @@ binding.dayTaskDistanceView.text = it.data.km.toString() } } + taskViewModel.getTaskTrend("", "", "") + taskViewModel.taskTrendModel.observe(this) { + if (it.code == 200) { + val xAxisLabels: MutableList = ArrayList() + //每个entries都是一条折线 + val strengthEntries: ArrayList = ArrayList() + it.data.forEachIndexed { i, rowsBean -> + // x 轴坐标 + xAxisLabels.add(rowsBean.date) + //任务 + strengthEntries.add( + Entry(i.toFloat(), rowsBean.value.toFloat(), "任务") + ) + } + ChartViewHub.setLineChartData(binding.taskTrendChart, xAxisLabels, strengthEntries) + } + } taskViewModel.getTasksByPage("", "", "", "", 1) taskViewModel.taskList.observe(this) { if (it.code == 200) { diff --git a/app/src/main/java/com/casic/br/ktd/model/TaskTrendModel.java b/app/src/main/java/com/casic/br/ktd/model/TaskTrendModel.java new file mode 100644 index 0000000..b932496 --- /dev/null +++ b/app/src/main/java/com/casic/br/ktd/model/TaskTrendModel.java @@ -0,0 +1,55 @@ +package com.casic.br.ktd.model; + +import java.util.List; + +public class TaskTrendModel { + + private Integer code; + private List data; + private String message; + + public Integer getCode() { + return code; + } + + public void setCode(Integer 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 static class DataModel { + private String date; + private Integer value; + + public String getDate() { + return date; + } + + public void setDate(String date) { + this.date = date; + } + + public Integer getValue() { + return value; + } + + public void setValue(Integer value) { + this.value = value; + } + } +} diff --git a/app/src/main/java/com/casic/br/ktd/retrofit/RetrofitService.kt b/app/src/main/java/com/casic/br/ktd/retrofit/RetrofitService.kt index 42116fa..f18af0c 100644 --- a/app/src/main/java/com/casic/br/ktd/retrofit/RetrofitService.kt +++ b/app/src/main/java/com/casic/br/ktd/retrofit/RetrofitService.kt @@ -184,4 +184,13 @@ @Header("token") token: String, @Body requestBody: RequestBody ): String + + /** + * 巡检任务趋势 + */ + @POST("/system/busOverView/taskTime") + suspend fun getTaskTrend( + @Header("token") token: String, + @Body requestBody: RequestBody + ): String } \ No newline at end of file diff --git a/app/src/main/java/com/casic/br/ktd/retrofit/RetrofitServiceManager.kt b/app/src/main/java/com/casic/br/ktd/retrofit/RetrofitServiceManager.kt index 7f47552..63732ee 100644 --- a/app/src/main/java/com/casic/br/ktd/retrofit/RetrofitServiceManager.kt +++ b/app/src/main/java/com/casic/br/ktd/retrofit/RetrofitServiceManager.kt @@ -319,7 +319,21 @@ /** * 根据时间获取巡检任务和公里数 */ - suspend fun getTaskCount(beginDate: String, endDate: String, timeType: String): String { + suspend fun getTaskCount(beginDate: String, endDate: String): String { + val param = JsonObject() + param.addProperty("beginDate", beginDate) + param.addProperty("endDate", endDate) + + val requestBody = param.toString().toRequestBody( + "application/json;charset=UTF-8".toMediaType() + ) + return api.getTaskCount(AuthenticationHelper.token, requestBody) + } + + /** + * 巡检任务趋势 + */ + suspend fun getTaskTrend(beginDate: String, endDate: String, timeType: String): String { val param = JsonObject() param.addProperty("beginDate", beginDate) param.addProperty("endDate", endDate) @@ -328,6 +342,6 @@ val requestBody = param.toString().toRequestBody( "application/json;charset=UTF-8".toMediaType() ) - return api.getTaskCount(AuthenticationHelper.token, requestBody) + return api.getTaskTrend(AuthenticationHelper.token, requestBody) } } \ No newline at end of file diff --git a/app/src/main/java/com/casic/br/ktd/utils/ChartViewHub.kt b/app/src/main/java/com/casic/br/ktd/utils/ChartViewHub.kt new file mode 100644 index 0000000..b712b82 --- /dev/null +++ b/app/src/main/java/com/casic/br/ktd/utils/ChartViewHub.kt @@ -0,0 +1,56 @@ +package com.casic.br.ktd.utils + +import android.graphics.Color +import com.casic.br.ktd.extensions.init +import com.casic.br.ktd.widgets.LineChartMarkerView +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.formatter.ValueFormatter +import com.github.mikephil.charting.interfaces.datasets.ILineDataSet + +object ChartViewHub { + /** + * 折线图 + * */ + fun setLineChartData( + chart: LineChart, xAxisDate: MutableList, entries: List + ) { + //每次加载数据都初始化折线图 + chart.init(xAxisDate.size) + if (entries.isEmpty()) { + return + } + //绑定数据 + val lineDataSets: MutableList = ArrayList() + //设置数据 + val dataSet = LineDataSet(entries, entries[0].data.toString()) + dataSet.setDrawCircles(true) + //圆点颜色 + dataSet.setCircleColor(Color.parseColor("#61A2FE")) + //线条颜色 + dataSet.color = Color.parseColor("#61A2FE") + dataSet.setDrawFilled(true) + dataSet.fillColor = Color.parseColor("#E4ECFF") + dataSet.mode = LineDataSet.Mode.CUBIC_BEZIER + lineDataSets.add(dataSet) + + val lineData = LineData(lineDataSets) + lineData.setDrawValues(false) + //添加自定义Marker + val markerView = LineChartMarkerView(chart.context) + markerView.chartView = chart + markerView.setXAxisDate(xAxisDate) + chart.marker = markerView + //设置X轴坐标 + val xAxis = chart.xAxis + xAxis.valueFormatter = object : ValueFormatter() { + override fun getFormattedValue(value: Float): String { + return xAxisDate[value.toInt()] + } + } + chart.data = lineData + chart.invalidate() + } +} \ No newline at end of file diff --git a/app/src/main/java/com/casic/br/ktd/vm/TaskViewModel.kt b/app/src/main/java/com/casic/br/ktd/vm/TaskViewModel.kt index 98e687b..b526232 100644 --- a/app/src/main/java/com/casic/br/ktd/vm/TaskViewModel.kt +++ b/app/src/main/java/com/casic/br/ktd/vm/TaskViewModel.kt @@ -8,6 +8,7 @@ import com.casic.br.ktd.model.TaskDetailModel import com.casic.br.ktd.model.TaskListModel import com.casic.br.ktd.model.TaskStatisticsModel +import com.casic.br.ktd.model.TaskTrendModel import com.casic.br.ktd.retrofit.RetrofitServiceManager import com.casic.br.ktd.utils.DateType import com.google.gson.Gson @@ -16,6 +17,7 @@ import com.pengxh.kt.lite.extensions.show import com.pengxh.kt.lite.vm.BaseViewModel import com.pengxh.kt.lite.vm.LoadState +import org.json.JSONObject /** * Task相关 VM @@ -28,6 +30,7 @@ val detailResult = MutableLiveData() val taskCountModel = MutableLiveData() val dayTaskModel = MutableLiveData() + val taskTrendModel = MutableLiveData() fun getTasksByPage( beginDate: String, endDate: String, taskName: String, taskCode: String, offset: Int @@ -99,7 +102,7 @@ }) fun getTaskCount(beginDate: String, endDate: String, type: DateType) = launch({ - val response = RetrofitServiceManager.getTaskCount(beginDate, endDate, "") + val response = RetrofitServiceManager.getTaskCount(beginDate, endDate) val responseCode = response.separateResponseCode() if (responseCode == 200) { if (type == DateType.DAY) { @@ -115,4 +118,37 @@ }, { it.printStackTrace() }) + + fun getTaskTrend(beginDate: String, endDate: String, timeType: String) = launch({ + val response = RetrofitServiceManager.getTaskTrend(beginDate, endDate, timeType) + val responseCode = response.separateResponseCode() + if (responseCode == 200) { + val trendModel = TaskTrendModel() + //手动解析Json + val jsonObject = JSONObject(response) + trendModel.code = jsonObject.getInt("code") + trendModel.message = jsonObject.getString("message") + /** + * data + * */ + val models = ArrayList() + val dataArray = jsonObject.getJSONArray("data") + for (i in 0 until dataArray.length()) { + val childObject = dataArray[i] as JSONObject + + val dataModel = TaskTrendModel.DataModel() + val key = childObject.keys().next() + val value = childObject.getInt(key) + + dataModel.date = key + dataModel.value = value + models.add(dataModel) + } + trendModel.data = models + + taskTrendModel.value = trendModel + } + }, { + it.printStackTrace() + }) } \ No newline at end of file diff --git a/app/src/main/java/com/casic/br/ktd/extensions/LineChart.kt b/app/src/main/java/com/casic/br/ktd/extensions/LineChart.kt index 0e4ea5f..f5fcd37 100644 --- a/app/src/main/java/com/casic/br/ktd/extensions/LineChart.kt +++ b/app/src/main/java/com/casic/br/ktd/extensions/LineChart.kt @@ -63,4 +63,35 @@ this.description.isEnabled = false //去掉图例 this.legend.isEnabled = false +} + +fun LineChart.init(labelCount: Int) { + this.setNoDataText("无数据,无法渲染...") + this.setNoDataTextColor(Color.RED) + this.getPaint(Chart.PAINT_INFO).textSize = 12f.dp2px(this.context).toFloat() + this.setDrawGridBackground(false) + this.setDrawBorders(false) + this.animateY(1200, Easing.EaseInOutQuad) + //设置样式 + val rightAxis: YAxis = this.axisRight + //设置图表右边的y轴禁用 + rightAxis.isEnabled = false + val leftAxis: YAxis = this.axisLeft + leftAxis.axisMinimum = 0f + this.isScaleXEnabled = true //X轴可缩放 + this.isScaleYEnabled = false //Y轴不可缩放 + //设置x轴 + val xAxis: XAxis = this.xAxis + xAxis.textSize = 10f + xAxis.labelCount = labelCount //x轴标签数量 + xAxis.setDrawLabels(true) //绘制标签 指x轴上的对应数值 + xAxis.setDrawAxisLine(true) //是否绘制轴线 + xAxis.setDrawGridLines(true) //设置x轴上每个点对应的线 + xAxis.granularity = 1f //禁止放大后x轴标签重绘 + xAxis.position = XAxis.XAxisPosition.BOTTOM + this.extraBottomOffset = 5f //解决X轴显示不完全问题 + //去掉描述 + this.description.isEnabled = false + //去掉图例 + this.legend.isEnabled = false } \ No newline at end of file diff --git a/app/src/main/java/com/casic/br/ktd/fragment/HomePageFragment.kt b/app/src/main/java/com/casic/br/ktd/fragment/HomePageFragment.kt index 32c1356..1d1118d 100644 --- a/app/src/main/java/com/casic/br/ktd/fragment/HomePageFragment.kt +++ b/app/src/main/java/com/casic/br/ktd/fragment/HomePageFragment.kt @@ -27,11 +27,13 @@ import com.casic.br.ktd.model.DeviceListModel import com.casic.br.ktd.model.TaskListModel import com.casic.br.ktd.model.VehicleListModel +import com.casic.br.ktd.utils.ChartViewHub import com.casic.br.ktd.utils.DateType import com.casic.br.ktd.utils.LocaleConstant import com.casic.br.ktd.vm.DeviceViewModel import com.casic.br.ktd.vm.TaskViewModel import com.casic.br.ktd.vm.VehicleViewModel +import com.github.mikephil.charting.data.Entry import com.pengxh.kt.lite.base.KotlinBaseFragment import com.pengxh.kt.lite.extensions.timestampToDate import com.pengxh.kt.lite.extensions.timestampToLastMonthDate @@ -119,7 +121,24 @@ binding.dayTaskDistanceView.text = it.data.km.toString() } } + taskViewModel.getTaskTrend("", "", "") + taskViewModel.taskTrendModel.observe(this) { + if (it.code == 200) { + val xAxisLabels: MutableList = ArrayList() + //每个entries都是一条折线 + val strengthEntries: ArrayList = ArrayList() + it.data.forEachIndexed { i, rowsBean -> + // x 轴坐标 + xAxisLabels.add(rowsBean.date) + //任务 + strengthEntries.add( + Entry(i.toFloat(), rowsBean.value.toFloat(), "任务") + ) + } + ChartViewHub.setLineChartData(binding.taskTrendChart, xAxisLabels, strengthEntries) + } + } taskViewModel.getTasksByPage("", "", "", "", 1) taskViewModel.taskList.observe(this) { if (it.code == 200) { diff --git a/app/src/main/java/com/casic/br/ktd/model/TaskTrendModel.java b/app/src/main/java/com/casic/br/ktd/model/TaskTrendModel.java new file mode 100644 index 0000000..b932496 --- /dev/null +++ b/app/src/main/java/com/casic/br/ktd/model/TaskTrendModel.java @@ -0,0 +1,55 @@ +package com.casic.br.ktd.model; + +import java.util.List; + +public class TaskTrendModel { + + private Integer code; + private List data; + private String message; + + public Integer getCode() { + return code; + } + + public void setCode(Integer 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 static class DataModel { + private String date; + private Integer value; + + public String getDate() { + return date; + } + + public void setDate(String date) { + this.date = date; + } + + public Integer getValue() { + return value; + } + + public void setValue(Integer value) { + this.value = value; + } + } +} diff --git a/app/src/main/java/com/casic/br/ktd/retrofit/RetrofitService.kt b/app/src/main/java/com/casic/br/ktd/retrofit/RetrofitService.kt index 42116fa..f18af0c 100644 --- a/app/src/main/java/com/casic/br/ktd/retrofit/RetrofitService.kt +++ b/app/src/main/java/com/casic/br/ktd/retrofit/RetrofitService.kt @@ -184,4 +184,13 @@ @Header("token") token: String, @Body requestBody: RequestBody ): String + + /** + * 巡检任务趋势 + */ + @POST("/system/busOverView/taskTime") + suspend fun getTaskTrend( + @Header("token") token: String, + @Body requestBody: RequestBody + ): String } \ No newline at end of file diff --git a/app/src/main/java/com/casic/br/ktd/retrofit/RetrofitServiceManager.kt b/app/src/main/java/com/casic/br/ktd/retrofit/RetrofitServiceManager.kt index 7f47552..63732ee 100644 --- a/app/src/main/java/com/casic/br/ktd/retrofit/RetrofitServiceManager.kt +++ b/app/src/main/java/com/casic/br/ktd/retrofit/RetrofitServiceManager.kt @@ -319,7 +319,21 @@ /** * 根据时间获取巡检任务和公里数 */ - suspend fun getTaskCount(beginDate: String, endDate: String, timeType: String): String { + suspend fun getTaskCount(beginDate: String, endDate: String): String { + val param = JsonObject() + param.addProperty("beginDate", beginDate) + param.addProperty("endDate", endDate) + + val requestBody = param.toString().toRequestBody( + "application/json;charset=UTF-8".toMediaType() + ) + return api.getTaskCount(AuthenticationHelper.token, requestBody) + } + + /** + * 巡检任务趋势 + */ + suspend fun getTaskTrend(beginDate: String, endDate: String, timeType: String): String { val param = JsonObject() param.addProperty("beginDate", beginDate) param.addProperty("endDate", endDate) @@ -328,6 +342,6 @@ val requestBody = param.toString().toRequestBody( "application/json;charset=UTF-8".toMediaType() ) - return api.getTaskCount(AuthenticationHelper.token, requestBody) + return api.getTaskTrend(AuthenticationHelper.token, requestBody) } } \ No newline at end of file diff --git a/app/src/main/java/com/casic/br/ktd/utils/ChartViewHub.kt b/app/src/main/java/com/casic/br/ktd/utils/ChartViewHub.kt new file mode 100644 index 0000000..b712b82 --- /dev/null +++ b/app/src/main/java/com/casic/br/ktd/utils/ChartViewHub.kt @@ -0,0 +1,56 @@ +package com.casic.br.ktd.utils + +import android.graphics.Color +import com.casic.br.ktd.extensions.init +import com.casic.br.ktd.widgets.LineChartMarkerView +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.formatter.ValueFormatter +import com.github.mikephil.charting.interfaces.datasets.ILineDataSet + +object ChartViewHub { + /** + * 折线图 + * */ + fun setLineChartData( + chart: LineChart, xAxisDate: MutableList, entries: List + ) { + //每次加载数据都初始化折线图 + chart.init(xAxisDate.size) + if (entries.isEmpty()) { + return + } + //绑定数据 + val lineDataSets: MutableList = ArrayList() + //设置数据 + val dataSet = LineDataSet(entries, entries[0].data.toString()) + dataSet.setDrawCircles(true) + //圆点颜色 + dataSet.setCircleColor(Color.parseColor("#61A2FE")) + //线条颜色 + dataSet.color = Color.parseColor("#61A2FE") + dataSet.setDrawFilled(true) + dataSet.fillColor = Color.parseColor("#E4ECFF") + dataSet.mode = LineDataSet.Mode.CUBIC_BEZIER + lineDataSets.add(dataSet) + + val lineData = LineData(lineDataSets) + lineData.setDrawValues(false) + //添加自定义Marker + val markerView = LineChartMarkerView(chart.context) + markerView.chartView = chart + markerView.setXAxisDate(xAxisDate) + chart.marker = markerView + //设置X轴坐标 + val xAxis = chart.xAxis + xAxis.valueFormatter = object : ValueFormatter() { + override fun getFormattedValue(value: Float): String { + return xAxisDate[value.toInt()] + } + } + chart.data = lineData + chart.invalidate() + } +} \ No newline at end of file diff --git a/app/src/main/java/com/casic/br/ktd/vm/TaskViewModel.kt b/app/src/main/java/com/casic/br/ktd/vm/TaskViewModel.kt index 98e687b..b526232 100644 --- a/app/src/main/java/com/casic/br/ktd/vm/TaskViewModel.kt +++ b/app/src/main/java/com/casic/br/ktd/vm/TaskViewModel.kt @@ -8,6 +8,7 @@ import com.casic.br.ktd.model.TaskDetailModel import com.casic.br.ktd.model.TaskListModel import com.casic.br.ktd.model.TaskStatisticsModel +import com.casic.br.ktd.model.TaskTrendModel import com.casic.br.ktd.retrofit.RetrofitServiceManager import com.casic.br.ktd.utils.DateType import com.google.gson.Gson @@ -16,6 +17,7 @@ import com.pengxh.kt.lite.extensions.show import com.pengxh.kt.lite.vm.BaseViewModel import com.pengxh.kt.lite.vm.LoadState +import org.json.JSONObject /** * Task相关 VM @@ -28,6 +30,7 @@ val detailResult = MutableLiveData() val taskCountModel = MutableLiveData() val dayTaskModel = MutableLiveData() + val taskTrendModel = MutableLiveData() fun getTasksByPage( beginDate: String, endDate: String, taskName: String, taskCode: String, offset: Int @@ -99,7 +102,7 @@ }) fun getTaskCount(beginDate: String, endDate: String, type: DateType) = launch({ - val response = RetrofitServiceManager.getTaskCount(beginDate, endDate, "") + val response = RetrofitServiceManager.getTaskCount(beginDate, endDate) val responseCode = response.separateResponseCode() if (responseCode == 200) { if (type == DateType.DAY) { @@ -115,4 +118,37 @@ }, { it.printStackTrace() }) + + fun getTaskTrend(beginDate: String, endDate: String, timeType: String) = launch({ + val response = RetrofitServiceManager.getTaskTrend(beginDate, endDate, timeType) + val responseCode = response.separateResponseCode() + if (responseCode == 200) { + val trendModel = TaskTrendModel() + //手动解析Json + val jsonObject = JSONObject(response) + trendModel.code = jsonObject.getInt("code") + trendModel.message = jsonObject.getString("message") + /** + * data + * */ + val models = ArrayList() + val dataArray = jsonObject.getJSONArray("data") + for (i in 0 until dataArray.length()) { + val childObject = dataArray[i] as JSONObject + + val dataModel = TaskTrendModel.DataModel() + val key = childObject.keys().next() + val value = childObject.getInt(key) + + dataModel.date = key + dataModel.value = value + models.add(dataModel) + } + trendModel.data = models + + taskTrendModel.value = trendModel + } + }, { + it.printStackTrace() + }) } \ No newline at end of file diff --git a/app/src/main/java/com/casic/br/ktd/widgets/LineChartMarkerView.kt b/app/src/main/java/com/casic/br/ktd/widgets/LineChartMarkerView.kt index 5017dec..225f83d 100644 --- a/app/src/main/java/com/casic/br/ktd/widgets/LineChartMarkerView.kt +++ b/app/src/main/java/com/casic/br/ktd/widgets/LineChartMarkerView.kt @@ -23,8 +23,13 @@ override fun refreshContent(e: Entry, highlight: Highlight) { super.refreshContent(e, highlight) try { - dataView.text = String.format("浓度:${e.y.toInt()}ppm·m") - dayView.text = xAxisDate[(e.x).toInt()] + if (e.data == "任务") { + dataView.text = String.format("任务数量:${e.y.toInt()}") + dayView.text = xAxisDate[(e.x).toInt()] + } else { + dataView.text = String.format("浓度:${e.y.toInt()}ppm·m") + dayView.text = xAxisDate[(e.x).toInt()] + } } catch (e1: Exception) { e1.printStackTrace() } diff --git a/app/src/main/java/com/casic/br/ktd/extensions/LineChart.kt b/app/src/main/java/com/casic/br/ktd/extensions/LineChart.kt index 0e4ea5f..f5fcd37 100644 --- a/app/src/main/java/com/casic/br/ktd/extensions/LineChart.kt +++ b/app/src/main/java/com/casic/br/ktd/extensions/LineChart.kt @@ -63,4 +63,35 @@ this.description.isEnabled = false //去掉图例 this.legend.isEnabled = false +} + +fun LineChart.init(labelCount: Int) { + this.setNoDataText("无数据,无法渲染...") + this.setNoDataTextColor(Color.RED) + this.getPaint(Chart.PAINT_INFO).textSize = 12f.dp2px(this.context).toFloat() + this.setDrawGridBackground(false) + this.setDrawBorders(false) + this.animateY(1200, Easing.EaseInOutQuad) + //设置样式 + val rightAxis: YAxis = this.axisRight + //设置图表右边的y轴禁用 + rightAxis.isEnabled = false + val leftAxis: YAxis = this.axisLeft + leftAxis.axisMinimum = 0f + this.isScaleXEnabled = true //X轴可缩放 + this.isScaleYEnabled = false //Y轴不可缩放 + //设置x轴 + val xAxis: XAxis = this.xAxis + xAxis.textSize = 10f + xAxis.labelCount = labelCount //x轴标签数量 + xAxis.setDrawLabels(true) //绘制标签 指x轴上的对应数值 + xAxis.setDrawAxisLine(true) //是否绘制轴线 + xAxis.setDrawGridLines(true) //设置x轴上每个点对应的线 + xAxis.granularity = 1f //禁止放大后x轴标签重绘 + xAxis.position = XAxis.XAxisPosition.BOTTOM + this.extraBottomOffset = 5f //解决X轴显示不完全问题 + //去掉描述 + this.description.isEnabled = false + //去掉图例 + this.legend.isEnabled = false } \ No newline at end of file diff --git a/app/src/main/java/com/casic/br/ktd/fragment/HomePageFragment.kt b/app/src/main/java/com/casic/br/ktd/fragment/HomePageFragment.kt index 32c1356..1d1118d 100644 --- a/app/src/main/java/com/casic/br/ktd/fragment/HomePageFragment.kt +++ b/app/src/main/java/com/casic/br/ktd/fragment/HomePageFragment.kt @@ -27,11 +27,13 @@ import com.casic.br.ktd.model.DeviceListModel import com.casic.br.ktd.model.TaskListModel import com.casic.br.ktd.model.VehicleListModel +import com.casic.br.ktd.utils.ChartViewHub import com.casic.br.ktd.utils.DateType import com.casic.br.ktd.utils.LocaleConstant import com.casic.br.ktd.vm.DeviceViewModel import com.casic.br.ktd.vm.TaskViewModel import com.casic.br.ktd.vm.VehicleViewModel +import com.github.mikephil.charting.data.Entry import com.pengxh.kt.lite.base.KotlinBaseFragment import com.pengxh.kt.lite.extensions.timestampToDate import com.pengxh.kt.lite.extensions.timestampToLastMonthDate @@ -119,7 +121,24 @@ binding.dayTaskDistanceView.text = it.data.km.toString() } } + taskViewModel.getTaskTrend("", "", "") + taskViewModel.taskTrendModel.observe(this) { + if (it.code == 200) { + val xAxisLabels: MutableList = ArrayList() + //每个entries都是一条折线 + val strengthEntries: ArrayList = ArrayList() + it.data.forEachIndexed { i, rowsBean -> + // x 轴坐标 + xAxisLabels.add(rowsBean.date) + //任务 + strengthEntries.add( + Entry(i.toFloat(), rowsBean.value.toFloat(), "任务") + ) + } + ChartViewHub.setLineChartData(binding.taskTrendChart, xAxisLabels, strengthEntries) + } + } taskViewModel.getTasksByPage("", "", "", "", 1) taskViewModel.taskList.observe(this) { if (it.code == 200) { diff --git a/app/src/main/java/com/casic/br/ktd/model/TaskTrendModel.java b/app/src/main/java/com/casic/br/ktd/model/TaskTrendModel.java new file mode 100644 index 0000000..b932496 --- /dev/null +++ b/app/src/main/java/com/casic/br/ktd/model/TaskTrendModel.java @@ -0,0 +1,55 @@ +package com.casic.br.ktd.model; + +import java.util.List; + +public class TaskTrendModel { + + private Integer code; + private List data; + private String message; + + public Integer getCode() { + return code; + } + + public void setCode(Integer 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 static class DataModel { + private String date; + private Integer value; + + public String getDate() { + return date; + } + + public void setDate(String date) { + this.date = date; + } + + public Integer getValue() { + return value; + } + + public void setValue(Integer value) { + this.value = value; + } + } +} diff --git a/app/src/main/java/com/casic/br/ktd/retrofit/RetrofitService.kt b/app/src/main/java/com/casic/br/ktd/retrofit/RetrofitService.kt index 42116fa..f18af0c 100644 --- a/app/src/main/java/com/casic/br/ktd/retrofit/RetrofitService.kt +++ b/app/src/main/java/com/casic/br/ktd/retrofit/RetrofitService.kt @@ -184,4 +184,13 @@ @Header("token") token: String, @Body requestBody: RequestBody ): String + + /** + * 巡检任务趋势 + */ + @POST("/system/busOverView/taskTime") + suspend fun getTaskTrend( + @Header("token") token: String, + @Body requestBody: RequestBody + ): String } \ No newline at end of file diff --git a/app/src/main/java/com/casic/br/ktd/retrofit/RetrofitServiceManager.kt b/app/src/main/java/com/casic/br/ktd/retrofit/RetrofitServiceManager.kt index 7f47552..63732ee 100644 --- a/app/src/main/java/com/casic/br/ktd/retrofit/RetrofitServiceManager.kt +++ b/app/src/main/java/com/casic/br/ktd/retrofit/RetrofitServiceManager.kt @@ -319,7 +319,21 @@ /** * 根据时间获取巡检任务和公里数 */ - suspend fun getTaskCount(beginDate: String, endDate: String, timeType: String): String { + suspend fun getTaskCount(beginDate: String, endDate: String): String { + val param = JsonObject() + param.addProperty("beginDate", beginDate) + param.addProperty("endDate", endDate) + + val requestBody = param.toString().toRequestBody( + "application/json;charset=UTF-8".toMediaType() + ) + return api.getTaskCount(AuthenticationHelper.token, requestBody) + } + + /** + * 巡检任务趋势 + */ + suspend fun getTaskTrend(beginDate: String, endDate: String, timeType: String): String { val param = JsonObject() param.addProperty("beginDate", beginDate) param.addProperty("endDate", endDate) @@ -328,6 +342,6 @@ val requestBody = param.toString().toRequestBody( "application/json;charset=UTF-8".toMediaType() ) - return api.getTaskCount(AuthenticationHelper.token, requestBody) + return api.getTaskTrend(AuthenticationHelper.token, requestBody) } } \ No newline at end of file diff --git a/app/src/main/java/com/casic/br/ktd/utils/ChartViewHub.kt b/app/src/main/java/com/casic/br/ktd/utils/ChartViewHub.kt new file mode 100644 index 0000000..b712b82 --- /dev/null +++ b/app/src/main/java/com/casic/br/ktd/utils/ChartViewHub.kt @@ -0,0 +1,56 @@ +package com.casic.br.ktd.utils + +import android.graphics.Color +import com.casic.br.ktd.extensions.init +import com.casic.br.ktd.widgets.LineChartMarkerView +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.formatter.ValueFormatter +import com.github.mikephil.charting.interfaces.datasets.ILineDataSet + +object ChartViewHub { + /** + * 折线图 + * */ + fun setLineChartData( + chart: LineChart, xAxisDate: MutableList, entries: List + ) { + //每次加载数据都初始化折线图 + chart.init(xAxisDate.size) + if (entries.isEmpty()) { + return + } + //绑定数据 + val lineDataSets: MutableList = ArrayList() + //设置数据 + val dataSet = LineDataSet(entries, entries[0].data.toString()) + dataSet.setDrawCircles(true) + //圆点颜色 + dataSet.setCircleColor(Color.parseColor("#61A2FE")) + //线条颜色 + dataSet.color = Color.parseColor("#61A2FE") + dataSet.setDrawFilled(true) + dataSet.fillColor = Color.parseColor("#E4ECFF") + dataSet.mode = LineDataSet.Mode.CUBIC_BEZIER + lineDataSets.add(dataSet) + + val lineData = LineData(lineDataSets) + lineData.setDrawValues(false) + //添加自定义Marker + val markerView = LineChartMarkerView(chart.context) + markerView.chartView = chart + markerView.setXAxisDate(xAxisDate) + chart.marker = markerView + //设置X轴坐标 + val xAxis = chart.xAxis + xAxis.valueFormatter = object : ValueFormatter() { + override fun getFormattedValue(value: Float): String { + return xAxisDate[value.toInt()] + } + } + chart.data = lineData + chart.invalidate() + } +} \ No newline at end of file diff --git a/app/src/main/java/com/casic/br/ktd/vm/TaskViewModel.kt b/app/src/main/java/com/casic/br/ktd/vm/TaskViewModel.kt index 98e687b..b526232 100644 --- a/app/src/main/java/com/casic/br/ktd/vm/TaskViewModel.kt +++ b/app/src/main/java/com/casic/br/ktd/vm/TaskViewModel.kt @@ -8,6 +8,7 @@ import com.casic.br.ktd.model.TaskDetailModel import com.casic.br.ktd.model.TaskListModel import com.casic.br.ktd.model.TaskStatisticsModel +import com.casic.br.ktd.model.TaskTrendModel import com.casic.br.ktd.retrofit.RetrofitServiceManager import com.casic.br.ktd.utils.DateType import com.google.gson.Gson @@ -16,6 +17,7 @@ import com.pengxh.kt.lite.extensions.show import com.pengxh.kt.lite.vm.BaseViewModel import com.pengxh.kt.lite.vm.LoadState +import org.json.JSONObject /** * Task相关 VM @@ -28,6 +30,7 @@ val detailResult = MutableLiveData() val taskCountModel = MutableLiveData() val dayTaskModel = MutableLiveData() + val taskTrendModel = MutableLiveData() fun getTasksByPage( beginDate: String, endDate: String, taskName: String, taskCode: String, offset: Int @@ -99,7 +102,7 @@ }) fun getTaskCount(beginDate: String, endDate: String, type: DateType) = launch({ - val response = RetrofitServiceManager.getTaskCount(beginDate, endDate, "") + val response = RetrofitServiceManager.getTaskCount(beginDate, endDate) val responseCode = response.separateResponseCode() if (responseCode == 200) { if (type == DateType.DAY) { @@ -115,4 +118,37 @@ }, { it.printStackTrace() }) + + fun getTaskTrend(beginDate: String, endDate: String, timeType: String) = launch({ + val response = RetrofitServiceManager.getTaskTrend(beginDate, endDate, timeType) + val responseCode = response.separateResponseCode() + if (responseCode == 200) { + val trendModel = TaskTrendModel() + //手动解析Json + val jsonObject = JSONObject(response) + trendModel.code = jsonObject.getInt("code") + trendModel.message = jsonObject.getString("message") + /** + * data + * */ + val models = ArrayList() + val dataArray = jsonObject.getJSONArray("data") + for (i in 0 until dataArray.length()) { + val childObject = dataArray[i] as JSONObject + + val dataModel = TaskTrendModel.DataModel() + val key = childObject.keys().next() + val value = childObject.getInt(key) + + dataModel.date = key + dataModel.value = value + models.add(dataModel) + } + trendModel.data = models + + taskTrendModel.value = trendModel + } + }, { + it.printStackTrace() + }) } \ No newline at end of file diff --git a/app/src/main/java/com/casic/br/ktd/widgets/LineChartMarkerView.kt b/app/src/main/java/com/casic/br/ktd/widgets/LineChartMarkerView.kt index 5017dec..225f83d 100644 --- a/app/src/main/java/com/casic/br/ktd/widgets/LineChartMarkerView.kt +++ b/app/src/main/java/com/casic/br/ktd/widgets/LineChartMarkerView.kt @@ -23,8 +23,13 @@ override fun refreshContent(e: Entry, highlight: Highlight) { super.refreshContent(e, highlight) try { - dataView.text = String.format("浓度:${e.y.toInt()}ppm·m") - dayView.text = xAxisDate[(e.x).toInt()] + if (e.data == "任务") { + dataView.text = String.format("任务数量:${e.y.toInt()}") + dayView.text = xAxisDate[(e.x).toInt()] + } else { + dataView.text = String.format("浓度:${e.y.toInt()}ppm·m") + dayView.text = xAxisDate[(e.x).toInt()] + } } catch (e1: Exception) { e1.printStackTrace() } diff --git a/app/src/main/res/layout/fragment_home.xml b/app/src/main/res/layout/fragment_home.xml index b1b65d6..fe20298 100644 --- a/app/src/main/res/layout/fragment_home.xml +++ b/app/src/main/res/layout/fragment_home.xml @@ -254,7 +254,7 @@ app:cardUseCompatPadding="true"> diff --git a/app/src/main/java/com/casic/br/ktd/extensions/LineChart.kt b/app/src/main/java/com/casic/br/ktd/extensions/LineChart.kt index 0e4ea5f..f5fcd37 100644 --- a/app/src/main/java/com/casic/br/ktd/extensions/LineChart.kt +++ b/app/src/main/java/com/casic/br/ktd/extensions/LineChart.kt @@ -63,4 +63,35 @@ this.description.isEnabled = false //去掉图例 this.legend.isEnabled = false +} + +fun LineChart.init(labelCount: Int) { + this.setNoDataText("无数据,无法渲染...") + this.setNoDataTextColor(Color.RED) + this.getPaint(Chart.PAINT_INFO).textSize = 12f.dp2px(this.context).toFloat() + this.setDrawGridBackground(false) + this.setDrawBorders(false) + this.animateY(1200, Easing.EaseInOutQuad) + //设置样式 + val rightAxis: YAxis = this.axisRight + //设置图表右边的y轴禁用 + rightAxis.isEnabled = false + val leftAxis: YAxis = this.axisLeft + leftAxis.axisMinimum = 0f + this.isScaleXEnabled = true //X轴可缩放 + this.isScaleYEnabled = false //Y轴不可缩放 + //设置x轴 + val xAxis: XAxis = this.xAxis + xAxis.textSize = 10f + xAxis.labelCount = labelCount //x轴标签数量 + xAxis.setDrawLabels(true) //绘制标签 指x轴上的对应数值 + xAxis.setDrawAxisLine(true) //是否绘制轴线 + xAxis.setDrawGridLines(true) //设置x轴上每个点对应的线 + xAxis.granularity = 1f //禁止放大后x轴标签重绘 + xAxis.position = XAxis.XAxisPosition.BOTTOM + this.extraBottomOffset = 5f //解决X轴显示不完全问题 + //去掉描述 + this.description.isEnabled = false + //去掉图例 + this.legend.isEnabled = false } \ No newline at end of file diff --git a/app/src/main/java/com/casic/br/ktd/fragment/HomePageFragment.kt b/app/src/main/java/com/casic/br/ktd/fragment/HomePageFragment.kt index 32c1356..1d1118d 100644 --- a/app/src/main/java/com/casic/br/ktd/fragment/HomePageFragment.kt +++ b/app/src/main/java/com/casic/br/ktd/fragment/HomePageFragment.kt @@ -27,11 +27,13 @@ import com.casic.br.ktd.model.DeviceListModel import com.casic.br.ktd.model.TaskListModel import com.casic.br.ktd.model.VehicleListModel +import com.casic.br.ktd.utils.ChartViewHub import com.casic.br.ktd.utils.DateType import com.casic.br.ktd.utils.LocaleConstant import com.casic.br.ktd.vm.DeviceViewModel import com.casic.br.ktd.vm.TaskViewModel import com.casic.br.ktd.vm.VehicleViewModel +import com.github.mikephil.charting.data.Entry import com.pengxh.kt.lite.base.KotlinBaseFragment import com.pengxh.kt.lite.extensions.timestampToDate import com.pengxh.kt.lite.extensions.timestampToLastMonthDate @@ -119,7 +121,24 @@ binding.dayTaskDistanceView.text = it.data.km.toString() } } + taskViewModel.getTaskTrend("", "", "") + taskViewModel.taskTrendModel.observe(this) { + if (it.code == 200) { + val xAxisLabels: MutableList = ArrayList() + //每个entries都是一条折线 + val strengthEntries: ArrayList = ArrayList() + it.data.forEachIndexed { i, rowsBean -> + // x 轴坐标 + xAxisLabels.add(rowsBean.date) + //任务 + strengthEntries.add( + Entry(i.toFloat(), rowsBean.value.toFloat(), "任务") + ) + } + ChartViewHub.setLineChartData(binding.taskTrendChart, xAxisLabels, strengthEntries) + } + } taskViewModel.getTasksByPage("", "", "", "", 1) taskViewModel.taskList.observe(this) { if (it.code == 200) { diff --git a/app/src/main/java/com/casic/br/ktd/model/TaskTrendModel.java b/app/src/main/java/com/casic/br/ktd/model/TaskTrendModel.java new file mode 100644 index 0000000..b932496 --- /dev/null +++ b/app/src/main/java/com/casic/br/ktd/model/TaskTrendModel.java @@ -0,0 +1,55 @@ +package com.casic.br.ktd.model; + +import java.util.List; + +public class TaskTrendModel { + + private Integer code; + private List data; + private String message; + + public Integer getCode() { + return code; + } + + public void setCode(Integer 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 static class DataModel { + private String date; + private Integer value; + + public String getDate() { + return date; + } + + public void setDate(String date) { + this.date = date; + } + + public Integer getValue() { + return value; + } + + public void setValue(Integer value) { + this.value = value; + } + } +} diff --git a/app/src/main/java/com/casic/br/ktd/retrofit/RetrofitService.kt b/app/src/main/java/com/casic/br/ktd/retrofit/RetrofitService.kt index 42116fa..f18af0c 100644 --- a/app/src/main/java/com/casic/br/ktd/retrofit/RetrofitService.kt +++ b/app/src/main/java/com/casic/br/ktd/retrofit/RetrofitService.kt @@ -184,4 +184,13 @@ @Header("token") token: String, @Body requestBody: RequestBody ): String + + /** + * 巡检任务趋势 + */ + @POST("/system/busOverView/taskTime") + suspend fun getTaskTrend( + @Header("token") token: String, + @Body requestBody: RequestBody + ): String } \ No newline at end of file diff --git a/app/src/main/java/com/casic/br/ktd/retrofit/RetrofitServiceManager.kt b/app/src/main/java/com/casic/br/ktd/retrofit/RetrofitServiceManager.kt index 7f47552..63732ee 100644 --- a/app/src/main/java/com/casic/br/ktd/retrofit/RetrofitServiceManager.kt +++ b/app/src/main/java/com/casic/br/ktd/retrofit/RetrofitServiceManager.kt @@ -319,7 +319,21 @@ /** * 根据时间获取巡检任务和公里数 */ - suspend fun getTaskCount(beginDate: String, endDate: String, timeType: String): String { + suspend fun getTaskCount(beginDate: String, endDate: String): String { + val param = JsonObject() + param.addProperty("beginDate", beginDate) + param.addProperty("endDate", endDate) + + val requestBody = param.toString().toRequestBody( + "application/json;charset=UTF-8".toMediaType() + ) + return api.getTaskCount(AuthenticationHelper.token, requestBody) + } + + /** + * 巡检任务趋势 + */ + suspend fun getTaskTrend(beginDate: String, endDate: String, timeType: String): String { val param = JsonObject() param.addProperty("beginDate", beginDate) param.addProperty("endDate", endDate) @@ -328,6 +342,6 @@ val requestBody = param.toString().toRequestBody( "application/json;charset=UTF-8".toMediaType() ) - return api.getTaskCount(AuthenticationHelper.token, requestBody) + return api.getTaskTrend(AuthenticationHelper.token, requestBody) } } \ No newline at end of file diff --git a/app/src/main/java/com/casic/br/ktd/utils/ChartViewHub.kt b/app/src/main/java/com/casic/br/ktd/utils/ChartViewHub.kt new file mode 100644 index 0000000..b712b82 --- /dev/null +++ b/app/src/main/java/com/casic/br/ktd/utils/ChartViewHub.kt @@ -0,0 +1,56 @@ +package com.casic.br.ktd.utils + +import android.graphics.Color +import com.casic.br.ktd.extensions.init +import com.casic.br.ktd.widgets.LineChartMarkerView +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.formatter.ValueFormatter +import com.github.mikephil.charting.interfaces.datasets.ILineDataSet + +object ChartViewHub { + /** + * 折线图 + * */ + fun setLineChartData( + chart: LineChart, xAxisDate: MutableList, entries: List + ) { + //每次加载数据都初始化折线图 + chart.init(xAxisDate.size) + if (entries.isEmpty()) { + return + } + //绑定数据 + val lineDataSets: MutableList = ArrayList() + //设置数据 + val dataSet = LineDataSet(entries, entries[0].data.toString()) + dataSet.setDrawCircles(true) + //圆点颜色 + dataSet.setCircleColor(Color.parseColor("#61A2FE")) + //线条颜色 + dataSet.color = Color.parseColor("#61A2FE") + dataSet.setDrawFilled(true) + dataSet.fillColor = Color.parseColor("#E4ECFF") + dataSet.mode = LineDataSet.Mode.CUBIC_BEZIER + lineDataSets.add(dataSet) + + val lineData = LineData(lineDataSets) + lineData.setDrawValues(false) + //添加自定义Marker + val markerView = LineChartMarkerView(chart.context) + markerView.chartView = chart + markerView.setXAxisDate(xAxisDate) + chart.marker = markerView + //设置X轴坐标 + val xAxis = chart.xAxis + xAxis.valueFormatter = object : ValueFormatter() { + override fun getFormattedValue(value: Float): String { + return xAxisDate[value.toInt()] + } + } + chart.data = lineData + chart.invalidate() + } +} \ No newline at end of file diff --git a/app/src/main/java/com/casic/br/ktd/vm/TaskViewModel.kt b/app/src/main/java/com/casic/br/ktd/vm/TaskViewModel.kt index 98e687b..b526232 100644 --- a/app/src/main/java/com/casic/br/ktd/vm/TaskViewModel.kt +++ b/app/src/main/java/com/casic/br/ktd/vm/TaskViewModel.kt @@ -8,6 +8,7 @@ import com.casic.br.ktd.model.TaskDetailModel import com.casic.br.ktd.model.TaskListModel import com.casic.br.ktd.model.TaskStatisticsModel +import com.casic.br.ktd.model.TaskTrendModel import com.casic.br.ktd.retrofit.RetrofitServiceManager import com.casic.br.ktd.utils.DateType import com.google.gson.Gson @@ -16,6 +17,7 @@ import com.pengxh.kt.lite.extensions.show import com.pengxh.kt.lite.vm.BaseViewModel import com.pengxh.kt.lite.vm.LoadState +import org.json.JSONObject /** * Task相关 VM @@ -28,6 +30,7 @@ val detailResult = MutableLiveData() val taskCountModel = MutableLiveData() val dayTaskModel = MutableLiveData() + val taskTrendModel = MutableLiveData() fun getTasksByPage( beginDate: String, endDate: String, taskName: String, taskCode: String, offset: Int @@ -99,7 +102,7 @@ }) fun getTaskCount(beginDate: String, endDate: String, type: DateType) = launch({ - val response = RetrofitServiceManager.getTaskCount(beginDate, endDate, "") + val response = RetrofitServiceManager.getTaskCount(beginDate, endDate) val responseCode = response.separateResponseCode() if (responseCode == 200) { if (type == DateType.DAY) { @@ -115,4 +118,37 @@ }, { it.printStackTrace() }) + + fun getTaskTrend(beginDate: String, endDate: String, timeType: String) = launch({ + val response = RetrofitServiceManager.getTaskTrend(beginDate, endDate, timeType) + val responseCode = response.separateResponseCode() + if (responseCode == 200) { + val trendModel = TaskTrendModel() + //手动解析Json + val jsonObject = JSONObject(response) + trendModel.code = jsonObject.getInt("code") + trendModel.message = jsonObject.getString("message") + /** + * data + * */ + val models = ArrayList() + val dataArray = jsonObject.getJSONArray("data") + for (i in 0 until dataArray.length()) { + val childObject = dataArray[i] as JSONObject + + val dataModel = TaskTrendModel.DataModel() + val key = childObject.keys().next() + val value = childObject.getInt(key) + + dataModel.date = key + dataModel.value = value + models.add(dataModel) + } + trendModel.data = models + + taskTrendModel.value = trendModel + } + }, { + it.printStackTrace() + }) } \ No newline at end of file diff --git a/app/src/main/java/com/casic/br/ktd/widgets/LineChartMarkerView.kt b/app/src/main/java/com/casic/br/ktd/widgets/LineChartMarkerView.kt index 5017dec..225f83d 100644 --- a/app/src/main/java/com/casic/br/ktd/widgets/LineChartMarkerView.kt +++ b/app/src/main/java/com/casic/br/ktd/widgets/LineChartMarkerView.kt @@ -23,8 +23,13 @@ override fun refreshContent(e: Entry, highlight: Highlight) { super.refreshContent(e, highlight) try { - dataView.text = String.format("浓度:${e.y.toInt()}ppm·m") - dayView.text = xAxisDate[(e.x).toInt()] + if (e.data == "任务") { + dataView.text = String.format("任务数量:${e.y.toInt()}") + dayView.text = xAxisDate[(e.x).toInt()] + } else { + dataView.text = String.format("浓度:${e.y.toInt()}ppm·m") + dayView.text = xAxisDate[(e.x).toInt()] + } } catch (e1: Exception) { e1.printStackTrace() } diff --git a/app/src/main/res/layout/fragment_home.xml b/app/src/main/res/layout/fragment_home.xml index b1b65d6..fe20298 100644 --- a/app/src/main/res/layout/fragment_home.xml +++ b/app/src/main/res/layout/fragment_home.xml @@ -254,7 +254,7 @@ app:cardUseCompatPadding="true"> diff --git a/app/src/main/res/layout/popu_line_chart_marker.xml b/app/src/main/res/layout/popu_line_chart_marker.xml index 9fd4485..dbe63e2 100644 --- a/app/src/main/res/layout/popu_line_chart_marker.xml +++ b/app/src/main/res/layout/popu_line_chart_marker.xml @@ -9,7 +9,7 @@