diff --git a/app/src/main/java/com/casic/qd/smartwell/extensions/Long.kt b/app/src/main/java/com/casic/qd/smartwell/extensions/Long.kt index 7f68e3b..7dcbc22 100644 --- a/app/src/main/java/com/casic/qd/smartwell/extensions/Long.kt +++ b/app/src/main/java/com/casic/qd/smartwell/extensions/Long.kt @@ -7,6 +7,18 @@ fun Long.timestampToTime(): String = SimpleDateFormat("yyyy-MM-dd HH:mm:ss", Locale.CHINA).format(Date(this)) +fun Long.timestampToLastWeekDate(): String { + val dateFormat = SimpleDateFormat("yyyy-MM-dd", Locale.CHINA) + val calendar = Calendar.getInstance() + calendar.time = Date(this) + calendar.set(Calendar.DAY_OF_YEAR, calendar.get(Calendar.DAY_OF_YEAR) - 6) + return dateFormat.format(calendar.time) +} + + +fun Long.timestampToDate(): String = + SimpleDateFormat("yyyy-MM-dd", Locale.CHINA).format(Date(this)) + fun Long.isEarlierThanStart(date: String): Boolean { if (date.isBlank()) { return false diff --git a/app/src/main/java/com/casic/qd/smartwell/extensions/Long.kt b/app/src/main/java/com/casic/qd/smartwell/extensions/Long.kt index 7f68e3b..7dcbc22 100644 --- a/app/src/main/java/com/casic/qd/smartwell/extensions/Long.kt +++ b/app/src/main/java/com/casic/qd/smartwell/extensions/Long.kt @@ -7,6 +7,18 @@ fun Long.timestampToTime(): String = SimpleDateFormat("yyyy-MM-dd HH:mm:ss", Locale.CHINA).format(Date(this)) +fun Long.timestampToLastWeekDate(): String { + val dateFormat = SimpleDateFormat("yyyy-MM-dd", Locale.CHINA) + val calendar = Calendar.getInstance() + calendar.time = Date(this) + calendar.set(Calendar.DAY_OF_YEAR, calendar.get(Calendar.DAY_OF_YEAR) - 6) + return dateFormat.format(calendar.time) +} + + +fun Long.timestampToDate(): String = + SimpleDateFormat("yyyy-MM-dd", Locale.CHINA).format(Date(this)) + fun Long.isEarlierThanStart(date: String): Boolean { if (date.isBlank()) { return false diff --git a/app/src/main/java/com/casic/qd/smartwell/model/LineChartEntryModel.kt b/app/src/main/java/com/casic/qd/smartwell/model/LineChartEntryModel.kt new file mode 100644 index 0000000..8da82d8 --- /dev/null +++ b/app/src/main/java/com/casic/qd/smartwell/model/LineChartEntryModel.kt @@ -0,0 +1,16 @@ +package com.casic.qd.smartwell.model + +import com.casic.qd.smartwell.R +import com.casic.qd.smartwell.extensions.convertColor +import com.github.mikephil.charting.data.Entry + +class LineChartEntryModel { + //折线数据 + var entryList: List? = null + + //折线颜色 + var lineColor = R.color.mainThemeColor.convertColor() + + //点日期 + var entryDate: String? = null +} \ No newline at end of file diff --git a/app/src/main/java/com/casic/qd/smartwell/extensions/Long.kt b/app/src/main/java/com/casic/qd/smartwell/extensions/Long.kt index 7f68e3b..7dcbc22 100644 --- a/app/src/main/java/com/casic/qd/smartwell/extensions/Long.kt +++ b/app/src/main/java/com/casic/qd/smartwell/extensions/Long.kt @@ -7,6 +7,18 @@ fun Long.timestampToTime(): String = SimpleDateFormat("yyyy-MM-dd HH:mm:ss", Locale.CHINA).format(Date(this)) +fun Long.timestampToLastWeekDate(): String { + val dateFormat = SimpleDateFormat("yyyy-MM-dd", Locale.CHINA) + val calendar = Calendar.getInstance() + calendar.time = Date(this) + calendar.set(Calendar.DAY_OF_YEAR, calendar.get(Calendar.DAY_OF_YEAR) - 6) + return dateFormat.format(calendar.time) +} + + +fun Long.timestampToDate(): String = + SimpleDateFormat("yyyy-MM-dd", Locale.CHINA).format(Date(this)) + fun Long.isEarlierThanStart(date: String): Boolean { if (date.isBlank()) { return false diff --git a/app/src/main/java/com/casic/qd/smartwell/model/LineChartEntryModel.kt b/app/src/main/java/com/casic/qd/smartwell/model/LineChartEntryModel.kt new file mode 100644 index 0000000..8da82d8 --- /dev/null +++ b/app/src/main/java/com/casic/qd/smartwell/model/LineChartEntryModel.kt @@ -0,0 +1,16 @@ +package com.casic.qd.smartwell.model + +import com.casic.qd.smartwell.R +import com.casic.qd.smartwell.extensions.convertColor +import com.github.mikephil.charting.data.Entry + +class LineChartEntryModel { + //折线数据 + var entryList: List? = null + + //折线颜色 + var lineColor = R.color.mainThemeColor.convertColor() + + //点日期 + var entryDate: String? = null +} \ No newline at end of file diff --git a/app/src/main/java/com/casic/qd/smartwell/model/WaterSevenDayModel.kt b/app/src/main/java/com/casic/qd/smartwell/model/WaterSevenDayModel.kt new file mode 100644 index 0000000..6cda9f2 --- /dev/null +++ b/app/src/main/java/com/casic/qd/smartwell/model/WaterSevenDayModel.kt @@ -0,0 +1,18 @@ +package com.casic.qd.smartwell.model + +class WaterSevenDayModel { + var code = 0 + var data: List? = null + var message: String? = null + var isSuccess = false + + class DataBean { + var date: String? = null + var data: List? = null + + class AreaDataBean { + var areaName: String? = null + var count: String? = null + } + } +} \ No newline at end of file diff --git a/app/src/main/java/com/casic/qd/smartwell/extensions/Long.kt b/app/src/main/java/com/casic/qd/smartwell/extensions/Long.kt index 7f68e3b..7dcbc22 100644 --- a/app/src/main/java/com/casic/qd/smartwell/extensions/Long.kt +++ b/app/src/main/java/com/casic/qd/smartwell/extensions/Long.kt @@ -7,6 +7,18 @@ fun Long.timestampToTime(): String = SimpleDateFormat("yyyy-MM-dd HH:mm:ss", Locale.CHINA).format(Date(this)) +fun Long.timestampToLastWeekDate(): String { + val dateFormat = SimpleDateFormat("yyyy-MM-dd", Locale.CHINA) + val calendar = Calendar.getInstance() + calendar.time = Date(this) + calendar.set(Calendar.DAY_OF_YEAR, calendar.get(Calendar.DAY_OF_YEAR) - 6) + return dateFormat.format(calendar.time) +} + + +fun Long.timestampToDate(): String = + SimpleDateFormat("yyyy-MM-dd", Locale.CHINA).format(Date(this)) + fun Long.isEarlierThanStart(date: String): Boolean { if (date.isBlank()) { return false diff --git a/app/src/main/java/com/casic/qd/smartwell/model/LineChartEntryModel.kt b/app/src/main/java/com/casic/qd/smartwell/model/LineChartEntryModel.kt new file mode 100644 index 0000000..8da82d8 --- /dev/null +++ b/app/src/main/java/com/casic/qd/smartwell/model/LineChartEntryModel.kt @@ -0,0 +1,16 @@ +package com.casic.qd.smartwell.model + +import com.casic.qd.smartwell.R +import com.casic.qd.smartwell.extensions.convertColor +import com.github.mikephil.charting.data.Entry + +class LineChartEntryModel { + //折线数据 + var entryList: List? = null + + //折线颜色 + var lineColor = R.color.mainThemeColor.convertColor() + + //点日期 + var entryDate: String? = null +} \ No newline at end of file diff --git a/app/src/main/java/com/casic/qd/smartwell/model/WaterSevenDayModel.kt b/app/src/main/java/com/casic/qd/smartwell/model/WaterSevenDayModel.kt new file mode 100644 index 0000000..6cda9f2 --- /dev/null +++ b/app/src/main/java/com/casic/qd/smartwell/model/WaterSevenDayModel.kt @@ -0,0 +1,18 @@ +package com.casic.qd.smartwell.model + +class WaterSevenDayModel { + var code = 0 + var data: List? = null + var message: String? = null + var isSuccess = false + + class DataBean { + var date: String? = null + var data: List? = null + + class AreaDataBean { + var areaName: String? = null + var count: String? = null + } + } +} \ No newline at end of file diff --git a/app/src/main/java/com/casic/qd/smartwell/utils/ChartViewHelper.kt b/app/src/main/java/com/casic/qd/smartwell/utils/ChartViewHelper.kt index 396877c..91b13e9 100644 --- a/app/src/main/java/com/casic/qd/smartwell/utils/ChartViewHelper.kt +++ b/app/src/main/java/com/casic/qd/smartwell/utils/ChartViewHelper.kt @@ -4,6 +4,7 @@ import com.casic.qd.smartwell.R import com.casic.qd.smartwell.base.BaseApplication import com.casic.qd.smartwell.extensions.convertColor +import com.casic.qd.smartwell.model.LineChartEntryModel import com.casic.qd.smartwell.widgets.DetailsMarkerView import com.github.mikephil.charting.animation.Easing import com.github.mikephil.charting.charts.BarChart @@ -67,33 +68,20 @@ chart.marker = detailsMarkerView } - fun setLineChartData( - chart: LineChart, - data1Entries: List?, - data2Entries: List? - ) { - val lineDataSets: MutableList = ArrayList() - //设置数据 - val valveDataSet = LineDataSet(data1Entries, "数据1") - valveDataSet.color = - R.color.mainThemeColor.convertColor() //线条颜色 - valveDataSet.setCircleColor(R.color.mainThemeColor.convertColor()) //圆点颜色 - valveDataSet.setDrawFilled(true) - valveDataSet.fillColor = - R.color.mainThemeColor.convertColor() - valveDataSet.mode = LineDataSet.Mode.CUBIC_BEZIER - lineDataSets.add(valveDataSet) - - val meterDataSet = LineDataSet(data2Entries, "数据2") - meterDataSet.color = - R.color.onLineColor.convertColor() //线条颜色 - meterDataSet.setCircleColor(R.color.onLineColor.convertColor()) //圆点颜色 - meterDataSet.setDrawFilled(true) - meterDataSet.fillColor = - R.color.onLineColor.convertColor() - meterDataSet.mode = LineDataSet.Mode.CUBIC_BEZIER - lineDataSets.add(meterDataSet) - + fun setLineChartData(chart: LineChart, entryModels: List) { + val lineDataSets: MutableList = ArrayList() + entryModels.forEachIndexed { index, it -> + //设置数据 + val dataSet = LineDataSet(it.entryList, it.entryList?.get(index)?.data.toString()) + //线条颜色 + dataSet.color = it.lineColor + //圆点颜色 + dataSet.setCircleColor(it.lineColor) + dataSet.setDrawFilled(true) + dataSet.fillColor = it.lineColor + dataSet.mode = LineDataSet.Mode.CUBIC_BEZIER + lineDataSets.add(dataSet) + } val lineData = LineData(lineDataSets) lineData.setDrawValues(false) chart.data = lineData @@ -301,7 +289,7 @@ val colors: MutableList = ArrayList() for (i in entries.indices) { colors.add( - Constant.PIE_COLORS[i].convertColor() + Constant.COLORS[i].convertColor() ) } dataSet.colors = colors diff --git a/app/src/main/java/com/casic/qd/smartwell/extensions/Long.kt b/app/src/main/java/com/casic/qd/smartwell/extensions/Long.kt index 7f68e3b..7dcbc22 100644 --- a/app/src/main/java/com/casic/qd/smartwell/extensions/Long.kt +++ b/app/src/main/java/com/casic/qd/smartwell/extensions/Long.kt @@ -7,6 +7,18 @@ fun Long.timestampToTime(): String = SimpleDateFormat("yyyy-MM-dd HH:mm:ss", Locale.CHINA).format(Date(this)) +fun Long.timestampToLastWeekDate(): String { + val dateFormat = SimpleDateFormat("yyyy-MM-dd", Locale.CHINA) + val calendar = Calendar.getInstance() + calendar.time = Date(this) + calendar.set(Calendar.DAY_OF_YEAR, calendar.get(Calendar.DAY_OF_YEAR) - 6) + return dateFormat.format(calendar.time) +} + + +fun Long.timestampToDate(): String = + SimpleDateFormat("yyyy-MM-dd", Locale.CHINA).format(Date(this)) + fun Long.isEarlierThanStart(date: String): Boolean { if (date.isBlank()) { return false diff --git a/app/src/main/java/com/casic/qd/smartwell/model/LineChartEntryModel.kt b/app/src/main/java/com/casic/qd/smartwell/model/LineChartEntryModel.kt new file mode 100644 index 0000000..8da82d8 --- /dev/null +++ b/app/src/main/java/com/casic/qd/smartwell/model/LineChartEntryModel.kt @@ -0,0 +1,16 @@ +package com.casic.qd.smartwell.model + +import com.casic.qd.smartwell.R +import com.casic.qd.smartwell.extensions.convertColor +import com.github.mikephil.charting.data.Entry + +class LineChartEntryModel { + //折线数据 + var entryList: List? = null + + //折线颜色 + var lineColor = R.color.mainThemeColor.convertColor() + + //点日期 + var entryDate: String? = null +} \ No newline at end of file diff --git a/app/src/main/java/com/casic/qd/smartwell/model/WaterSevenDayModel.kt b/app/src/main/java/com/casic/qd/smartwell/model/WaterSevenDayModel.kt new file mode 100644 index 0000000..6cda9f2 --- /dev/null +++ b/app/src/main/java/com/casic/qd/smartwell/model/WaterSevenDayModel.kt @@ -0,0 +1,18 @@ +package com.casic.qd.smartwell.model + +class WaterSevenDayModel { + var code = 0 + var data: List? = null + var message: String? = null + var isSuccess = false + + class DataBean { + var date: String? = null + var data: List? = null + + class AreaDataBean { + var areaName: String? = null + var count: String? = null + } + } +} \ No newline at end of file diff --git a/app/src/main/java/com/casic/qd/smartwell/utils/ChartViewHelper.kt b/app/src/main/java/com/casic/qd/smartwell/utils/ChartViewHelper.kt index 396877c..91b13e9 100644 --- a/app/src/main/java/com/casic/qd/smartwell/utils/ChartViewHelper.kt +++ b/app/src/main/java/com/casic/qd/smartwell/utils/ChartViewHelper.kt @@ -4,6 +4,7 @@ import com.casic.qd.smartwell.R import com.casic.qd.smartwell.base.BaseApplication import com.casic.qd.smartwell.extensions.convertColor +import com.casic.qd.smartwell.model.LineChartEntryModel import com.casic.qd.smartwell.widgets.DetailsMarkerView import com.github.mikephil.charting.animation.Easing import com.github.mikephil.charting.charts.BarChart @@ -67,33 +68,20 @@ chart.marker = detailsMarkerView } - fun setLineChartData( - chart: LineChart, - data1Entries: List?, - data2Entries: List? - ) { - val lineDataSets: MutableList = ArrayList() - //设置数据 - val valveDataSet = LineDataSet(data1Entries, "数据1") - valveDataSet.color = - R.color.mainThemeColor.convertColor() //线条颜色 - valveDataSet.setCircleColor(R.color.mainThemeColor.convertColor()) //圆点颜色 - valveDataSet.setDrawFilled(true) - valveDataSet.fillColor = - R.color.mainThemeColor.convertColor() - valveDataSet.mode = LineDataSet.Mode.CUBIC_BEZIER - lineDataSets.add(valveDataSet) - - val meterDataSet = LineDataSet(data2Entries, "数据2") - meterDataSet.color = - R.color.onLineColor.convertColor() //线条颜色 - meterDataSet.setCircleColor(R.color.onLineColor.convertColor()) //圆点颜色 - meterDataSet.setDrawFilled(true) - meterDataSet.fillColor = - R.color.onLineColor.convertColor() - meterDataSet.mode = LineDataSet.Mode.CUBIC_BEZIER - lineDataSets.add(meterDataSet) - + fun setLineChartData(chart: LineChart, entryModels: List) { + val lineDataSets: MutableList = ArrayList() + entryModels.forEachIndexed { index, it -> + //设置数据 + val dataSet = LineDataSet(it.entryList, it.entryList?.get(index)?.data.toString()) + //线条颜色 + dataSet.color = it.lineColor + //圆点颜色 + dataSet.setCircleColor(it.lineColor) + dataSet.setDrawFilled(true) + dataSet.fillColor = it.lineColor + dataSet.mode = LineDataSet.Mode.CUBIC_BEZIER + lineDataSets.add(dataSet) + } val lineData = LineData(lineDataSets) lineData.setDrawValues(false) chart.data = lineData @@ -301,7 +289,7 @@ val colors: MutableList = ArrayList() for (i in entries.indices) { colors.add( - Constant.PIE_COLORS[i].convertColor() + Constant.COLORS[i].convertColor() ) } dataSet.colors = colors diff --git a/app/src/main/java/com/casic/qd/smartwell/utils/Constant.kt b/app/src/main/java/com/casic/qd/smartwell/utils/Constant.kt index ec902a8..378a6e0 100644 --- a/app/src/main/java/com/casic/qd/smartwell/utils/Constant.kt +++ b/app/src/main/java/com/casic/qd/smartwell/utils/Constant.kt @@ -13,14 +13,15 @@ const val PERMISSIONS_CODE = 999 const val PAGE_LIMIT = 20 const val FIVE_YEARS = 5L * 365 * 60 * 60 * 24 * 1000L + const val ONE_WEEK = 7 val HOME_ICONS = arrayOf( R.drawable.ic_home_map, R.drawable.ic_home_record, R.drawable.ic_home_statistics, ) val HOME_ITEMS = arrayOf("地图展示", "记录查询", "汇总统计") - //饼图预置颜色,前三种作为街道统计饼图颜色 - val PIE_COLORS = arrayOf( + //预置颜色 + val COLORS = arrayOf( R.color.pieColor3, R.color.onLineColor, R.color.pieColor1, R.color.barChartColor, R.color.punishColor, R.color.colorAccent, R.color.persuadeColor, R.color.pieColor2, R.color.pieColor5, diff --git a/app/src/main/java/com/casic/qd/smartwell/extensions/Long.kt b/app/src/main/java/com/casic/qd/smartwell/extensions/Long.kt index 7f68e3b..7dcbc22 100644 --- a/app/src/main/java/com/casic/qd/smartwell/extensions/Long.kt +++ b/app/src/main/java/com/casic/qd/smartwell/extensions/Long.kt @@ -7,6 +7,18 @@ fun Long.timestampToTime(): String = SimpleDateFormat("yyyy-MM-dd HH:mm:ss", Locale.CHINA).format(Date(this)) +fun Long.timestampToLastWeekDate(): String { + val dateFormat = SimpleDateFormat("yyyy-MM-dd", Locale.CHINA) + val calendar = Calendar.getInstance() + calendar.time = Date(this) + calendar.set(Calendar.DAY_OF_YEAR, calendar.get(Calendar.DAY_OF_YEAR) - 6) + return dateFormat.format(calendar.time) +} + + +fun Long.timestampToDate(): String = + SimpleDateFormat("yyyy-MM-dd", Locale.CHINA).format(Date(this)) + fun Long.isEarlierThanStart(date: String): Boolean { if (date.isBlank()) { return false diff --git a/app/src/main/java/com/casic/qd/smartwell/model/LineChartEntryModel.kt b/app/src/main/java/com/casic/qd/smartwell/model/LineChartEntryModel.kt new file mode 100644 index 0000000..8da82d8 --- /dev/null +++ b/app/src/main/java/com/casic/qd/smartwell/model/LineChartEntryModel.kt @@ -0,0 +1,16 @@ +package com.casic.qd.smartwell.model + +import com.casic.qd.smartwell.R +import com.casic.qd.smartwell.extensions.convertColor +import com.github.mikephil.charting.data.Entry + +class LineChartEntryModel { + //折线数据 + var entryList: List? = null + + //折线颜色 + var lineColor = R.color.mainThemeColor.convertColor() + + //点日期 + var entryDate: String? = null +} \ No newline at end of file diff --git a/app/src/main/java/com/casic/qd/smartwell/model/WaterSevenDayModel.kt b/app/src/main/java/com/casic/qd/smartwell/model/WaterSevenDayModel.kt new file mode 100644 index 0000000..6cda9f2 --- /dev/null +++ b/app/src/main/java/com/casic/qd/smartwell/model/WaterSevenDayModel.kt @@ -0,0 +1,18 @@ +package com.casic.qd.smartwell.model + +class WaterSevenDayModel { + var code = 0 + var data: List? = null + var message: String? = null + var isSuccess = false + + class DataBean { + var date: String? = null + var data: List? = null + + class AreaDataBean { + var areaName: String? = null + var count: String? = null + } + } +} \ No newline at end of file diff --git a/app/src/main/java/com/casic/qd/smartwell/utils/ChartViewHelper.kt b/app/src/main/java/com/casic/qd/smartwell/utils/ChartViewHelper.kt index 396877c..91b13e9 100644 --- a/app/src/main/java/com/casic/qd/smartwell/utils/ChartViewHelper.kt +++ b/app/src/main/java/com/casic/qd/smartwell/utils/ChartViewHelper.kt @@ -4,6 +4,7 @@ import com.casic.qd.smartwell.R import com.casic.qd.smartwell.base.BaseApplication import com.casic.qd.smartwell.extensions.convertColor +import com.casic.qd.smartwell.model.LineChartEntryModel import com.casic.qd.smartwell.widgets.DetailsMarkerView import com.github.mikephil.charting.animation.Easing import com.github.mikephil.charting.charts.BarChart @@ -67,33 +68,20 @@ chart.marker = detailsMarkerView } - fun setLineChartData( - chart: LineChart, - data1Entries: List?, - data2Entries: List? - ) { - val lineDataSets: MutableList = ArrayList() - //设置数据 - val valveDataSet = LineDataSet(data1Entries, "数据1") - valveDataSet.color = - R.color.mainThemeColor.convertColor() //线条颜色 - valveDataSet.setCircleColor(R.color.mainThemeColor.convertColor()) //圆点颜色 - valveDataSet.setDrawFilled(true) - valveDataSet.fillColor = - R.color.mainThemeColor.convertColor() - valveDataSet.mode = LineDataSet.Mode.CUBIC_BEZIER - lineDataSets.add(valveDataSet) - - val meterDataSet = LineDataSet(data2Entries, "数据2") - meterDataSet.color = - R.color.onLineColor.convertColor() //线条颜色 - meterDataSet.setCircleColor(R.color.onLineColor.convertColor()) //圆点颜色 - meterDataSet.setDrawFilled(true) - meterDataSet.fillColor = - R.color.onLineColor.convertColor() - meterDataSet.mode = LineDataSet.Mode.CUBIC_BEZIER - lineDataSets.add(meterDataSet) - + fun setLineChartData(chart: LineChart, entryModels: List) { + val lineDataSets: MutableList = ArrayList() + entryModels.forEachIndexed { index, it -> + //设置数据 + val dataSet = LineDataSet(it.entryList, it.entryList?.get(index)?.data.toString()) + //线条颜色 + dataSet.color = it.lineColor + //圆点颜色 + dataSet.setCircleColor(it.lineColor) + dataSet.setDrawFilled(true) + dataSet.fillColor = it.lineColor + dataSet.mode = LineDataSet.Mode.CUBIC_BEZIER + lineDataSets.add(dataSet) + } val lineData = LineData(lineDataSets) lineData.setDrawValues(false) chart.data = lineData @@ -301,7 +289,7 @@ val colors: MutableList = ArrayList() for (i in entries.indices) { colors.add( - Constant.PIE_COLORS[i].convertColor() + Constant.COLORS[i].convertColor() ) } dataSet.colors = colors diff --git a/app/src/main/java/com/casic/qd/smartwell/utils/Constant.kt b/app/src/main/java/com/casic/qd/smartwell/utils/Constant.kt index ec902a8..378a6e0 100644 --- a/app/src/main/java/com/casic/qd/smartwell/utils/Constant.kt +++ b/app/src/main/java/com/casic/qd/smartwell/utils/Constant.kt @@ -13,14 +13,15 @@ const val PERMISSIONS_CODE = 999 const val PAGE_LIMIT = 20 const val FIVE_YEARS = 5L * 365 * 60 * 60 * 24 * 1000L + const val ONE_WEEK = 7 val HOME_ICONS = arrayOf( R.drawable.ic_home_map, R.drawable.ic_home_record, R.drawable.ic_home_statistics, ) val HOME_ITEMS = arrayOf("地图展示", "记录查询", "汇总统计") - //饼图预置颜色,前三种作为街道统计饼图颜色 - val PIE_COLORS = arrayOf( + //预置颜色 + val COLORS = arrayOf( R.color.pieColor3, R.color.onLineColor, R.color.pieColor1, R.color.barChartColor, R.color.punishColor, R.color.colorAccent, R.color.persuadeColor, R.color.pieColor2, R.color.pieColor5, diff --git a/app/src/main/java/com/casic/qd/smartwell/utils/retrofit/RetrofitService.kt b/app/src/main/java/com/casic/qd/smartwell/utils/retrofit/RetrofitService.kt index 7081e2c..e31a353 100644 --- a/app/src/main/java/com/casic/qd/smartwell/utils/retrofit/RetrofitService.kt +++ b/app/src/main/java/com/casic/qd/smartwell/utils/retrofit/RetrofitService.kt @@ -123,4 +123,15 @@ @Query("offset") offset: Int, @Query("limit") limit: Int ): String + + /** + * 获取7日内用水量 + */ + @GET("/waterStatistic/countByDay") + suspend fun waterCountByDay( + @Header("token") token: String, + @Query("areaId") areaId: String, + @Query("startTime") startTime: String, + @Query("endTime") endTime: String + ): String } \ No newline at end of file diff --git a/app/src/main/java/com/casic/qd/smartwell/extensions/Long.kt b/app/src/main/java/com/casic/qd/smartwell/extensions/Long.kt index 7f68e3b..7dcbc22 100644 --- a/app/src/main/java/com/casic/qd/smartwell/extensions/Long.kt +++ b/app/src/main/java/com/casic/qd/smartwell/extensions/Long.kt @@ -7,6 +7,18 @@ fun Long.timestampToTime(): String = SimpleDateFormat("yyyy-MM-dd HH:mm:ss", Locale.CHINA).format(Date(this)) +fun Long.timestampToLastWeekDate(): String { + val dateFormat = SimpleDateFormat("yyyy-MM-dd", Locale.CHINA) + val calendar = Calendar.getInstance() + calendar.time = Date(this) + calendar.set(Calendar.DAY_OF_YEAR, calendar.get(Calendar.DAY_OF_YEAR) - 6) + return dateFormat.format(calendar.time) +} + + +fun Long.timestampToDate(): String = + SimpleDateFormat("yyyy-MM-dd", Locale.CHINA).format(Date(this)) + fun Long.isEarlierThanStart(date: String): Boolean { if (date.isBlank()) { return false diff --git a/app/src/main/java/com/casic/qd/smartwell/model/LineChartEntryModel.kt b/app/src/main/java/com/casic/qd/smartwell/model/LineChartEntryModel.kt new file mode 100644 index 0000000..8da82d8 --- /dev/null +++ b/app/src/main/java/com/casic/qd/smartwell/model/LineChartEntryModel.kt @@ -0,0 +1,16 @@ +package com.casic.qd.smartwell.model + +import com.casic.qd.smartwell.R +import com.casic.qd.smartwell.extensions.convertColor +import com.github.mikephil.charting.data.Entry + +class LineChartEntryModel { + //折线数据 + var entryList: List? = null + + //折线颜色 + var lineColor = R.color.mainThemeColor.convertColor() + + //点日期 + var entryDate: String? = null +} \ No newline at end of file diff --git a/app/src/main/java/com/casic/qd/smartwell/model/WaterSevenDayModel.kt b/app/src/main/java/com/casic/qd/smartwell/model/WaterSevenDayModel.kt new file mode 100644 index 0000000..6cda9f2 --- /dev/null +++ b/app/src/main/java/com/casic/qd/smartwell/model/WaterSevenDayModel.kt @@ -0,0 +1,18 @@ +package com.casic.qd.smartwell.model + +class WaterSevenDayModel { + var code = 0 + var data: List? = null + var message: String? = null + var isSuccess = false + + class DataBean { + var date: String? = null + var data: List? = null + + class AreaDataBean { + var areaName: String? = null + var count: String? = null + } + } +} \ No newline at end of file diff --git a/app/src/main/java/com/casic/qd/smartwell/utils/ChartViewHelper.kt b/app/src/main/java/com/casic/qd/smartwell/utils/ChartViewHelper.kt index 396877c..91b13e9 100644 --- a/app/src/main/java/com/casic/qd/smartwell/utils/ChartViewHelper.kt +++ b/app/src/main/java/com/casic/qd/smartwell/utils/ChartViewHelper.kt @@ -4,6 +4,7 @@ import com.casic.qd.smartwell.R import com.casic.qd.smartwell.base.BaseApplication import com.casic.qd.smartwell.extensions.convertColor +import com.casic.qd.smartwell.model.LineChartEntryModel import com.casic.qd.smartwell.widgets.DetailsMarkerView import com.github.mikephil.charting.animation.Easing import com.github.mikephil.charting.charts.BarChart @@ -67,33 +68,20 @@ chart.marker = detailsMarkerView } - fun setLineChartData( - chart: LineChart, - data1Entries: List?, - data2Entries: List? - ) { - val lineDataSets: MutableList = ArrayList() - //设置数据 - val valveDataSet = LineDataSet(data1Entries, "数据1") - valveDataSet.color = - R.color.mainThemeColor.convertColor() //线条颜色 - valveDataSet.setCircleColor(R.color.mainThemeColor.convertColor()) //圆点颜色 - valveDataSet.setDrawFilled(true) - valveDataSet.fillColor = - R.color.mainThemeColor.convertColor() - valveDataSet.mode = LineDataSet.Mode.CUBIC_BEZIER - lineDataSets.add(valveDataSet) - - val meterDataSet = LineDataSet(data2Entries, "数据2") - meterDataSet.color = - R.color.onLineColor.convertColor() //线条颜色 - meterDataSet.setCircleColor(R.color.onLineColor.convertColor()) //圆点颜色 - meterDataSet.setDrawFilled(true) - meterDataSet.fillColor = - R.color.onLineColor.convertColor() - meterDataSet.mode = LineDataSet.Mode.CUBIC_BEZIER - lineDataSets.add(meterDataSet) - + fun setLineChartData(chart: LineChart, entryModels: List) { + val lineDataSets: MutableList = ArrayList() + entryModels.forEachIndexed { index, it -> + //设置数据 + val dataSet = LineDataSet(it.entryList, it.entryList?.get(index)?.data.toString()) + //线条颜色 + dataSet.color = it.lineColor + //圆点颜色 + dataSet.setCircleColor(it.lineColor) + dataSet.setDrawFilled(true) + dataSet.fillColor = it.lineColor + dataSet.mode = LineDataSet.Mode.CUBIC_BEZIER + lineDataSets.add(dataSet) + } val lineData = LineData(lineDataSets) lineData.setDrawValues(false) chart.data = lineData @@ -301,7 +289,7 @@ val colors: MutableList = ArrayList() for (i in entries.indices) { colors.add( - Constant.PIE_COLORS[i].convertColor() + Constant.COLORS[i].convertColor() ) } dataSet.colors = colors diff --git a/app/src/main/java/com/casic/qd/smartwell/utils/Constant.kt b/app/src/main/java/com/casic/qd/smartwell/utils/Constant.kt index ec902a8..378a6e0 100644 --- a/app/src/main/java/com/casic/qd/smartwell/utils/Constant.kt +++ b/app/src/main/java/com/casic/qd/smartwell/utils/Constant.kt @@ -13,14 +13,15 @@ const val PERMISSIONS_CODE = 999 const val PAGE_LIMIT = 20 const val FIVE_YEARS = 5L * 365 * 60 * 60 * 24 * 1000L + const val ONE_WEEK = 7 val HOME_ICONS = arrayOf( R.drawable.ic_home_map, R.drawable.ic_home_record, R.drawable.ic_home_statistics, ) val HOME_ITEMS = arrayOf("地图展示", "记录查询", "汇总统计") - //饼图预置颜色,前三种作为街道统计饼图颜色 - val PIE_COLORS = arrayOf( + //预置颜色 + val COLORS = arrayOf( R.color.pieColor3, R.color.onLineColor, R.color.pieColor1, R.color.barChartColor, R.color.punishColor, R.color.colorAccent, R.color.persuadeColor, R.color.pieColor2, R.color.pieColor5, diff --git a/app/src/main/java/com/casic/qd/smartwell/utils/retrofit/RetrofitService.kt b/app/src/main/java/com/casic/qd/smartwell/utils/retrofit/RetrofitService.kt index 7081e2c..e31a353 100644 --- a/app/src/main/java/com/casic/qd/smartwell/utils/retrofit/RetrofitService.kt +++ b/app/src/main/java/com/casic/qd/smartwell/utils/retrofit/RetrofitService.kt @@ -123,4 +123,15 @@ @Query("offset") offset: Int, @Query("limit") limit: Int ): String + + /** + * 获取7日内用水量 + */ + @GET("/waterStatistic/countByDay") + suspend fun waterCountByDay( + @Header("token") token: String, + @Query("areaId") areaId: String, + @Query("startTime") startTime: String, + @Query("endTime") endTime: String + ): String } \ No newline at end of file diff --git a/app/src/main/java/com/casic/qd/smartwell/utils/retrofit/RetrofitServiceManager.kt b/app/src/main/java/com/casic/qd/smartwell/utils/retrofit/RetrofitServiceManager.kt index 9190ef1..6942990 100644 --- a/app/src/main/java/com/casic/qd/smartwell/utils/retrofit/RetrofitServiceManager.kt +++ b/app/src/main/java/com/casic/qd/smartwell/utils/retrofit/RetrofitServiceManager.kt @@ -129,4 +129,11 @@ Constant.PAGE_LIMIT ) } + + /** + * 获取近7日内用水量 + */ + suspend fun waterCountByDay(areaId: String, startTime: String, endTime: String): String { + return api.waterCountByDay(AuthenticationHelper.token!!, areaId, startTime, endTime) + } } \ No newline at end of file diff --git a/app/src/main/java/com/casic/qd/smartwell/extensions/Long.kt b/app/src/main/java/com/casic/qd/smartwell/extensions/Long.kt index 7f68e3b..7dcbc22 100644 --- a/app/src/main/java/com/casic/qd/smartwell/extensions/Long.kt +++ b/app/src/main/java/com/casic/qd/smartwell/extensions/Long.kt @@ -7,6 +7,18 @@ fun Long.timestampToTime(): String = SimpleDateFormat("yyyy-MM-dd HH:mm:ss", Locale.CHINA).format(Date(this)) +fun Long.timestampToLastWeekDate(): String { + val dateFormat = SimpleDateFormat("yyyy-MM-dd", Locale.CHINA) + val calendar = Calendar.getInstance() + calendar.time = Date(this) + calendar.set(Calendar.DAY_OF_YEAR, calendar.get(Calendar.DAY_OF_YEAR) - 6) + return dateFormat.format(calendar.time) +} + + +fun Long.timestampToDate(): String = + SimpleDateFormat("yyyy-MM-dd", Locale.CHINA).format(Date(this)) + fun Long.isEarlierThanStart(date: String): Boolean { if (date.isBlank()) { return false diff --git a/app/src/main/java/com/casic/qd/smartwell/model/LineChartEntryModel.kt b/app/src/main/java/com/casic/qd/smartwell/model/LineChartEntryModel.kt new file mode 100644 index 0000000..8da82d8 --- /dev/null +++ b/app/src/main/java/com/casic/qd/smartwell/model/LineChartEntryModel.kt @@ -0,0 +1,16 @@ +package com.casic.qd.smartwell.model + +import com.casic.qd.smartwell.R +import com.casic.qd.smartwell.extensions.convertColor +import com.github.mikephil.charting.data.Entry + +class LineChartEntryModel { + //折线数据 + var entryList: List? = null + + //折线颜色 + var lineColor = R.color.mainThemeColor.convertColor() + + //点日期 + var entryDate: String? = null +} \ No newline at end of file diff --git a/app/src/main/java/com/casic/qd/smartwell/model/WaterSevenDayModel.kt b/app/src/main/java/com/casic/qd/smartwell/model/WaterSevenDayModel.kt new file mode 100644 index 0000000..6cda9f2 --- /dev/null +++ b/app/src/main/java/com/casic/qd/smartwell/model/WaterSevenDayModel.kt @@ -0,0 +1,18 @@ +package com.casic.qd.smartwell.model + +class WaterSevenDayModel { + var code = 0 + var data: List? = null + var message: String? = null + var isSuccess = false + + class DataBean { + var date: String? = null + var data: List? = null + + class AreaDataBean { + var areaName: String? = null + var count: String? = null + } + } +} \ No newline at end of file diff --git a/app/src/main/java/com/casic/qd/smartwell/utils/ChartViewHelper.kt b/app/src/main/java/com/casic/qd/smartwell/utils/ChartViewHelper.kt index 396877c..91b13e9 100644 --- a/app/src/main/java/com/casic/qd/smartwell/utils/ChartViewHelper.kt +++ b/app/src/main/java/com/casic/qd/smartwell/utils/ChartViewHelper.kt @@ -4,6 +4,7 @@ import com.casic.qd.smartwell.R import com.casic.qd.smartwell.base.BaseApplication import com.casic.qd.smartwell.extensions.convertColor +import com.casic.qd.smartwell.model.LineChartEntryModel import com.casic.qd.smartwell.widgets.DetailsMarkerView import com.github.mikephil.charting.animation.Easing import com.github.mikephil.charting.charts.BarChart @@ -67,33 +68,20 @@ chart.marker = detailsMarkerView } - fun setLineChartData( - chart: LineChart, - data1Entries: List?, - data2Entries: List? - ) { - val lineDataSets: MutableList = ArrayList() - //设置数据 - val valveDataSet = LineDataSet(data1Entries, "数据1") - valveDataSet.color = - R.color.mainThemeColor.convertColor() //线条颜色 - valveDataSet.setCircleColor(R.color.mainThemeColor.convertColor()) //圆点颜色 - valveDataSet.setDrawFilled(true) - valveDataSet.fillColor = - R.color.mainThemeColor.convertColor() - valveDataSet.mode = LineDataSet.Mode.CUBIC_BEZIER - lineDataSets.add(valveDataSet) - - val meterDataSet = LineDataSet(data2Entries, "数据2") - meterDataSet.color = - R.color.onLineColor.convertColor() //线条颜色 - meterDataSet.setCircleColor(R.color.onLineColor.convertColor()) //圆点颜色 - meterDataSet.setDrawFilled(true) - meterDataSet.fillColor = - R.color.onLineColor.convertColor() - meterDataSet.mode = LineDataSet.Mode.CUBIC_BEZIER - lineDataSets.add(meterDataSet) - + fun setLineChartData(chart: LineChart, entryModels: List) { + val lineDataSets: MutableList = ArrayList() + entryModels.forEachIndexed { index, it -> + //设置数据 + val dataSet = LineDataSet(it.entryList, it.entryList?.get(index)?.data.toString()) + //线条颜色 + dataSet.color = it.lineColor + //圆点颜色 + dataSet.setCircleColor(it.lineColor) + dataSet.setDrawFilled(true) + dataSet.fillColor = it.lineColor + dataSet.mode = LineDataSet.Mode.CUBIC_BEZIER + lineDataSets.add(dataSet) + } val lineData = LineData(lineDataSets) lineData.setDrawValues(false) chart.data = lineData @@ -301,7 +289,7 @@ val colors: MutableList = ArrayList() for (i in entries.indices) { colors.add( - Constant.PIE_COLORS[i].convertColor() + Constant.COLORS[i].convertColor() ) } dataSet.colors = colors diff --git a/app/src/main/java/com/casic/qd/smartwell/utils/Constant.kt b/app/src/main/java/com/casic/qd/smartwell/utils/Constant.kt index ec902a8..378a6e0 100644 --- a/app/src/main/java/com/casic/qd/smartwell/utils/Constant.kt +++ b/app/src/main/java/com/casic/qd/smartwell/utils/Constant.kt @@ -13,14 +13,15 @@ const val PERMISSIONS_CODE = 999 const val PAGE_LIMIT = 20 const val FIVE_YEARS = 5L * 365 * 60 * 60 * 24 * 1000L + const val ONE_WEEK = 7 val HOME_ICONS = arrayOf( R.drawable.ic_home_map, R.drawable.ic_home_record, R.drawable.ic_home_statistics, ) val HOME_ITEMS = arrayOf("地图展示", "记录查询", "汇总统计") - //饼图预置颜色,前三种作为街道统计饼图颜色 - val PIE_COLORS = arrayOf( + //预置颜色 + val COLORS = arrayOf( R.color.pieColor3, R.color.onLineColor, R.color.pieColor1, R.color.barChartColor, R.color.punishColor, R.color.colorAccent, R.color.persuadeColor, R.color.pieColor2, R.color.pieColor5, diff --git a/app/src/main/java/com/casic/qd/smartwell/utils/retrofit/RetrofitService.kt b/app/src/main/java/com/casic/qd/smartwell/utils/retrofit/RetrofitService.kt index 7081e2c..e31a353 100644 --- a/app/src/main/java/com/casic/qd/smartwell/utils/retrofit/RetrofitService.kt +++ b/app/src/main/java/com/casic/qd/smartwell/utils/retrofit/RetrofitService.kt @@ -123,4 +123,15 @@ @Query("offset") offset: Int, @Query("limit") limit: Int ): String + + /** + * 获取7日内用水量 + */ + @GET("/waterStatistic/countByDay") + suspend fun waterCountByDay( + @Header("token") token: String, + @Query("areaId") areaId: String, + @Query("startTime") startTime: String, + @Query("endTime") endTime: String + ): String } \ No newline at end of file diff --git a/app/src/main/java/com/casic/qd/smartwell/utils/retrofit/RetrofitServiceManager.kt b/app/src/main/java/com/casic/qd/smartwell/utils/retrofit/RetrofitServiceManager.kt index 9190ef1..6942990 100644 --- a/app/src/main/java/com/casic/qd/smartwell/utils/retrofit/RetrofitServiceManager.kt +++ b/app/src/main/java/com/casic/qd/smartwell/utils/retrofit/RetrofitServiceManager.kt @@ -129,4 +129,11 @@ Constant.PAGE_LIMIT ) } + + /** + * 获取近7日内用水量 + */ + suspend fun waterCountByDay(areaId: String, startTime: String, endTime: String): String { + return api.waterCountByDay(AuthenticationHelper.token!!, areaId, startTime, endTime) + } } \ No newline at end of file diff --git a/app/src/main/java/com/casic/qd/smartwell/view/MainActivity.kt b/app/src/main/java/com/casic/qd/smartwell/view/MainActivity.kt index 217dd2b..80be752 100644 --- a/app/src/main/java/com/casic/qd/smartwell/view/MainActivity.kt +++ b/app/src/main/java/com/casic/qd/smartwell/view/MainActivity.kt @@ -14,11 +14,11 @@ import com.casic.qd.smartwell.R import com.casic.qd.smartwell.adapter.HomeRecycleAdapter import com.casic.qd.smartwell.base.BaseActivity -import com.casic.qd.smartwell.extensions.navigatePageTo -import com.casic.qd.smartwell.extensions.show +import com.casic.qd.smartwell.extensions.* import com.casic.qd.smartwell.model.BannerImageModel +import com.casic.qd.smartwell.model.LineChartEntryModel import com.casic.qd.smartwell.utils.ChartViewHelper -import com.casic.qd.smartwell.utils.TimeOrDateUtil +import com.casic.qd.smartwell.utils.Constant import com.casic.qd.smartwell.vm.WaterStatisticsViewModel import com.github.mikephil.charting.data.Entry import com.youth.banner.Banner @@ -28,6 +28,7 @@ import kotlinx.android.synthetic.main.activity_main.* import java.lang.ref.WeakReference import java.util.* +import kotlin.collections.ArrayList class MainActivity : BaseActivity() { @@ -35,9 +36,7 @@ private val context: Context = this@MainActivity private var clickTime: Long = 0 private lateinit var waterViewModel: WaterStatisticsViewModel - - private val data1Entries: ArrayList = ArrayList() - private val data2Entries: ArrayList = ArrayList() + private val entryModels: MutableList = ArrayList() private val imageUrls = listOf( "https://images.pexels.com/photos/1036808/pexels-photo-1036808.jpeg?auto=compress&cs=tinysrgb&dpr=1&w=500", "https://images.pexels.com/photos/796602/pexels-photo-796602.jpeg?auto=compress&cs=tinysrgb&dpr=1&w=500", @@ -109,32 +108,8 @@ //初始化vm waterViewModel = ViewModelProvider(this).get(WaterStatisticsViewModel::class.java) - //初始化折线图 - val date = TimeOrDateUtil.timestampToMonth(System.currentTimeMillis()) - val currentDay = date[1].split("-")[2].toInt() - ChartViewHelper.initLineChart(waterLineChart, currentDay.toFloat()) - //TODO 这是模拟数据 - for (i in 1..currentDay) { - data1Entries.add( - Entry( - i.toFloat(), - Random().nextInt(15).toFloat(), "data1" - ) - ) - } - for (i in 1..currentDay) { - data2Entries.add( - Entry( - i.toFloat(), - Random().nextInt(20).toFloat(), "data2" - ) - ) - } - ChartViewHelper.setLineChartData( - waterLineChart, - data1Entries, - data2Entries - ) + //初始化折线图,X轴从0开始 + ChartViewHelper.initLineChart(waterLineChart, (Constant.ONE_WEEK - 1).toFloat()) weakReferenceHandler = WeakReferenceHandler(this) } @@ -149,6 +124,35 @@ rightOptionView.setOnClickListener { navigatePageTo(AlarmManagementActivity::class.java) } + + //一周折线图数据 + val currentTime = System.currentTimeMillis() + waterViewModel.waterCountByDay( + "110000", + currentTime.timestampToLastWeekDate(), + currentTime.timestampToDate() + ) + waterViewModel.areaDataModel.observe(this, { + if (it.code == 200) { + it.data?.forEachIndexed { i, dataBean -> + val entryModel = LineChartEntryModel() + entryModel.lineColor = Constant.COLORS[i].convertColor() + entryModel.entryDate = dataBean.date + + //每个entries都是一条折线 + val entries: ArrayList = ArrayList() + for (j in 0 until Constant.ONE_WEEK) { + val areaData = it.data!![j].data!![i] + entries.add( + Entry(j.toFloat(), areaData.count!!.toFloat(), areaData.areaName) + ) + } + entryModel.entryList = entries + entryModels.add(entryModel) + } + ChartViewHelper.setLineChartData(waterLineChart, entryModels) + } + }) } private class WeakReferenceHandler(activity: MainActivity) : Handler(Looper.getMainLooper()) { diff --git a/app/src/main/java/com/casic/qd/smartwell/extensions/Long.kt b/app/src/main/java/com/casic/qd/smartwell/extensions/Long.kt index 7f68e3b..7dcbc22 100644 --- a/app/src/main/java/com/casic/qd/smartwell/extensions/Long.kt +++ b/app/src/main/java/com/casic/qd/smartwell/extensions/Long.kt @@ -7,6 +7,18 @@ fun Long.timestampToTime(): String = SimpleDateFormat("yyyy-MM-dd HH:mm:ss", Locale.CHINA).format(Date(this)) +fun Long.timestampToLastWeekDate(): String { + val dateFormat = SimpleDateFormat("yyyy-MM-dd", Locale.CHINA) + val calendar = Calendar.getInstance() + calendar.time = Date(this) + calendar.set(Calendar.DAY_OF_YEAR, calendar.get(Calendar.DAY_OF_YEAR) - 6) + return dateFormat.format(calendar.time) +} + + +fun Long.timestampToDate(): String = + SimpleDateFormat("yyyy-MM-dd", Locale.CHINA).format(Date(this)) + fun Long.isEarlierThanStart(date: String): Boolean { if (date.isBlank()) { return false diff --git a/app/src/main/java/com/casic/qd/smartwell/model/LineChartEntryModel.kt b/app/src/main/java/com/casic/qd/smartwell/model/LineChartEntryModel.kt new file mode 100644 index 0000000..8da82d8 --- /dev/null +++ b/app/src/main/java/com/casic/qd/smartwell/model/LineChartEntryModel.kt @@ -0,0 +1,16 @@ +package com.casic.qd.smartwell.model + +import com.casic.qd.smartwell.R +import com.casic.qd.smartwell.extensions.convertColor +import com.github.mikephil.charting.data.Entry + +class LineChartEntryModel { + //折线数据 + var entryList: List? = null + + //折线颜色 + var lineColor = R.color.mainThemeColor.convertColor() + + //点日期 + var entryDate: String? = null +} \ No newline at end of file diff --git a/app/src/main/java/com/casic/qd/smartwell/model/WaterSevenDayModel.kt b/app/src/main/java/com/casic/qd/smartwell/model/WaterSevenDayModel.kt new file mode 100644 index 0000000..6cda9f2 --- /dev/null +++ b/app/src/main/java/com/casic/qd/smartwell/model/WaterSevenDayModel.kt @@ -0,0 +1,18 @@ +package com.casic.qd.smartwell.model + +class WaterSevenDayModel { + var code = 0 + var data: List? = null + var message: String? = null + var isSuccess = false + + class DataBean { + var date: String? = null + var data: List? = null + + class AreaDataBean { + var areaName: String? = null + var count: String? = null + } + } +} \ No newline at end of file diff --git a/app/src/main/java/com/casic/qd/smartwell/utils/ChartViewHelper.kt b/app/src/main/java/com/casic/qd/smartwell/utils/ChartViewHelper.kt index 396877c..91b13e9 100644 --- a/app/src/main/java/com/casic/qd/smartwell/utils/ChartViewHelper.kt +++ b/app/src/main/java/com/casic/qd/smartwell/utils/ChartViewHelper.kt @@ -4,6 +4,7 @@ import com.casic.qd.smartwell.R import com.casic.qd.smartwell.base.BaseApplication import com.casic.qd.smartwell.extensions.convertColor +import com.casic.qd.smartwell.model.LineChartEntryModel import com.casic.qd.smartwell.widgets.DetailsMarkerView import com.github.mikephil.charting.animation.Easing import com.github.mikephil.charting.charts.BarChart @@ -67,33 +68,20 @@ chart.marker = detailsMarkerView } - fun setLineChartData( - chart: LineChart, - data1Entries: List?, - data2Entries: List? - ) { - val lineDataSets: MutableList = ArrayList() - //设置数据 - val valveDataSet = LineDataSet(data1Entries, "数据1") - valveDataSet.color = - R.color.mainThemeColor.convertColor() //线条颜色 - valveDataSet.setCircleColor(R.color.mainThemeColor.convertColor()) //圆点颜色 - valveDataSet.setDrawFilled(true) - valveDataSet.fillColor = - R.color.mainThemeColor.convertColor() - valveDataSet.mode = LineDataSet.Mode.CUBIC_BEZIER - lineDataSets.add(valveDataSet) - - val meterDataSet = LineDataSet(data2Entries, "数据2") - meterDataSet.color = - R.color.onLineColor.convertColor() //线条颜色 - meterDataSet.setCircleColor(R.color.onLineColor.convertColor()) //圆点颜色 - meterDataSet.setDrawFilled(true) - meterDataSet.fillColor = - R.color.onLineColor.convertColor() - meterDataSet.mode = LineDataSet.Mode.CUBIC_BEZIER - lineDataSets.add(meterDataSet) - + fun setLineChartData(chart: LineChart, entryModels: List) { + val lineDataSets: MutableList = ArrayList() + entryModels.forEachIndexed { index, it -> + //设置数据 + val dataSet = LineDataSet(it.entryList, it.entryList?.get(index)?.data.toString()) + //线条颜色 + dataSet.color = it.lineColor + //圆点颜色 + dataSet.setCircleColor(it.lineColor) + dataSet.setDrawFilled(true) + dataSet.fillColor = it.lineColor + dataSet.mode = LineDataSet.Mode.CUBIC_BEZIER + lineDataSets.add(dataSet) + } val lineData = LineData(lineDataSets) lineData.setDrawValues(false) chart.data = lineData @@ -301,7 +289,7 @@ val colors: MutableList = ArrayList() for (i in entries.indices) { colors.add( - Constant.PIE_COLORS[i].convertColor() + Constant.COLORS[i].convertColor() ) } dataSet.colors = colors diff --git a/app/src/main/java/com/casic/qd/smartwell/utils/Constant.kt b/app/src/main/java/com/casic/qd/smartwell/utils/Constant.kt index ec902a8..378a6e0 100644 --- a/app/src/main/java/com/casic/qd/smartwell/utils/Constant.kt +++ b/app/src/main/java/com/casic/qd/smartwell/utils/Constant.kt @@ -13,14 +13,15 @@ const val PERMISSIONS_CODE = 999 const val PAGE_LIMIT = 20 const val FIVE_YEARS = 5L * 365 * 60 * 60 * 24 * 1000L + const val ONE_WEEK = 7 val HOME_ICONS = arrayOf( R.drawable.ic_home_map, R.drawable.ic_home_record, R.drawable.ic_home_statistics, ) val HOME_ITEMS = arrayOf("地图展示", "记录查询", "汇总统计") - //饼图预置颜色,前三种作为街道统计饼图颜色 - val PIE_COLORS = arrayOf( + //预置颜色 + val COLORS = arrayOf( R.color.pieColor3, R.color.onLineColor, R.color.pieColor1, R.color.barChartColor, R.color.punishColor, R.color.colorAccent, R.color.persuadeColor, R.color.pieColor2, R.color.pieColor5, diff --git a/app/src/main/java/com/casic/qd/smartwell/utils/retrofit/RetrofitService.kt b/app/src/main/java/com/casic/qd/smartwell/utils/retrofit/RetrofitService.kt index 7081e2c..e31a353 100644 --- a/app/src/main/java/com/casic/qd/smartwell/utils/retrofit/RetrofitService.kt +++ b/app/src/main/java/com/casic/qd/smartwell/utils/retrofit/RetrofitService.kt @@ -123,4 +123,15 @@ @Query("offset") offset: Int, @Query("limit") limit: Int ): String + + /** + * 获取7日内用水量 + */ + @GET("/waterStatistic/countByDay") + suspend fun waterCountByDay( + @Header("token") token: String, + @Query("areaId") areaId: String, + @Query("startTime") startTime: String, + @Query("endTime") endTime: String + ): String } \ No newline at end of file diff --git a/app/src/main/java/com/casic/qd/smartwell/utils/retrofit/RetrofitServiceManager.kt b/app/src/main/java/com/casic/qd/smartwell/utils/retrofit/RetrofitServiceManager.kt index 9190ef1..6942990 100644 --- a/app/src/main/java/com/casic/qd/smartwell/utils/retrofit/RetrofitServiceManager.kt +++ b/app/src/main/java/com/casic/qd/smartwell/utils/retrofit/RetrofitServiceManager.kt @@ -129,4 +129,11 @@ Constant.PAGE_LIMIT ) } + + /** + * 获取近7日内用水量 + */ + suspend fun waterCountByDay(areaId: String, startTime: String, endTime: String): String { + return api.waterCountByDay(AuthenticationHelper.token!!, areaId, startTime, endTime) + } } \ No newline at end of file diff --git a/app/src/main/java/com/casic/qd/smartwell/view/MainActivity.kt b/app/src/main/java/com/casic/qd/smartwell/view/MainActivity.kt index 217dd2b..80be752 100644 --- a/app/src/main/java/com/casic/qd/smartwell/view/MainActivity.kt +++ b/app/src/main/java/com/casic/qd/smartwell/view/MainActivity.kt @@ -14,11 +14,11 @@ import com.casic.qd.smartwell.R import com.casic.qd.smartwell.adapter.HomeRecycleAdapter import com.casic.qd.smartwell.base.BaseActivity -import com.casic.qd.smartwell.extensions.navigatePageTo -import com.casic.qd.smartwell.extensions.show +import com.casic.qd.smartwell.extensions.* import com.casic.qd.smartwell.model.BannerImageModel +import com.casic.qd.smartwell.model.LineChartEntryModel import com.casic.qd.smartwell.utils.ChartViewHelper -import com.casic.qd.smartwell.utils.TimeOrDateUtil +import com.casic.qd.smartwell.utils.Constant import com.casic.qd.smartwell.vm.WaterStatisticsViewModel import com.github.mikephil.charting.data.Entry import com.youth.banner.Banner @@ -28,6 +28,7 @@ import kotlinx.android.synthetic.main.activity_main.* import java.lang.ref.WeakReference import java.util.* +import kotlin.collections.ArrayList class MainActivity : BaseActivity() { @@ -35,9 +36,7 @@ private val context: Context = this@MainActivity private var clickTime: Long = 0 private lateinit var waterViewModel: WaterStatisticsViewModel - - private val data1Entries: ArrayList = ArrayList() - private val data2Entries: ArrayList = ArrayList() + private val entryModels: MutableList = ArrayList() private val imageUrls = listOf( "https://images.pexels.com/photos/1036808/pexels-photo-1036808.jpeg?auto=compress&cs=tinysrgb&dpr=1&w=500", "https://images.pexels.com/photos/796602/pexels-photo-796602.jpeg?auto=compress&cs=tinysrgb&dpr=1&w=500", @@ -109,32 +108,8 @@ //初始化vm waterViewModel = ViewModelProvider(this).get(WaterStatisticsViewModel::class.java) - //初始化折线图 - val date = TimeOrDateUtil.timestampToMonth(System.currentTimeMillis()) - val currentDay = date[1].split("-")[2].toInt() - ChartViewHelper.initLineChart(waterLineChart, currentDay.toFloat()) - //TODO 这是模拟数据 - for (i in 1..currentDay) { - data1Entries.add( - Entry( - i.toFloat(), - Random().nextInt(15).toFloat(), "data1" - ) - ) - } - for (i in 1..currentDay) { - data2Entries.add( - Entry( - i.toFloat(), - Random().nextInt(20).toFloat(), "data2" - ) - ) - } - ChartViewHelper.setLineChartData( - waterLineChart, - data1Entries, - data2Entries - ) + //初始化折线图,X轴从0开始 + ChartViewHelper.initLineChart(waterLineChart, (Constant.ONE_WEEK - 1).toFloat()) weakReferenceHandler = WeakReferenceHandler(this) } @@ -149,6 +124,35 @@ rightOptionView.setOnClickListener { navigatePageTo(AlarmManagementActivity::class.java) } + + //一周折线图数据 + val currentTime = System.currentTimeMillis() + waterViewModel.waterCountByDay( + "110000", + currentTime.timestampToLastWeekDate(), + currentTime.timestampToDate() + ) + waterViewModel.areaDataModel.observe(this, { + if (it.code == 200) { + it.data?.forEachIndexed { i, dataBean -> + val entryModel = LineChartEntryModel() + entryModel.lineColor = Constant.COLORS[i].convertColor() + entryModel.entryDate = dataBean.date + + //每个entries都是一条折线 + val entries: ArrayList = ArrayList() + for (j in 0 until Constant.ONE_WEEK) { + val areaData = it.data!![j].data!![i] + entries.add( + Entry(j.toFloat(), areaData.count!!.toFloat(), areaData.areaName) + ) + } + entryModel.entryList = entries + entryModels.add(entryModel) + } + ChartViewHelper.setLineChartData(waterLineChart, entryModels) + } + }) } private class WeakReferenceHandler(activity: MainActivity) : Handler(Looper.getMainLooper()) { diff --git a/app/src/main/java/com/casic/qd/smartwell/vm/WaterStatisticsViewModel.kt b/app/src/main/java/com/casic/qd/smartwell/vm/WaterStatisticsViewModel.kt index 7c8ded9..76329c8 100644 --- a/app/src/main/java/com/casic/qd/smartwell/vm/WaterStatisticsViewModel.kt +++ b/app/src/main/java/com/casic/qd/smartwell/vm/WaterStatisticsViewModel.kt @@ -6,12 +6,17 @@ import com.casic.qd.smartwell.extensions.separateResponseCode import com.casic.qd.smartwell.extensions.show import com.casic.qd.smartwell.extensions.toErrorMessage +import com.casic.qd.smartwell.model.WaterSevenDayModel import com.casic.qd.smartwell.utils.retrofit.RetrofitServiceManager +import com.google.gson.Gson +import com.google.gson.reflect.TypeToken import org.json.JSONObject class WaterStatisticsViewModel : BaseViewModel() { + private val gson = Gson() val resultModel = MutableLiveData>() + val areaDataModel = MutableLiveData() fun waterStatistics() = launch({ val response = RetrofitServiceManager.waterStatistics() @@ -33,4 +38,18 @@ }, { "服务器异常".show() }) + + fun waterCountByDay(areaId: String, startTime: String, endTime: String) = launch({ + val response = RetrofitServiceManager.waterCountByDay(areaId, startTime, endTime) + val responseCode = response.separateResponseCode() + if (responseCode == 200) { + areaDataModel.value = gson.fromJson( + response, object : TypeToken() {}.type + ) + } else { + response.toErrorMessage().show() + } + }, { + "服务器异常".show() + }) } \ No newline at end of file diff --git a/app/src/main/java/com/casic/qd/smartwell/extensions/Long.kt b/app/src/main/java/com/casic/qd/smartwell/extensions/Long.kt index 7f68e3b..7dcbc22 100644 --- a/app/src/main/java/com/casic/qd/smartwell/extensions/Long.kt +++ b/app/src/main/java/com/casic/qd/smartwell/extensions/Long.kt @@ -7,6 +7,18 @@ fun Long.timestampToTime(): String = SimpleDateFormat("yyyy-MM-dd HH:mm:ss", Locale.CHINA).format(Date(this)) +fun Long.timestampToLastWeekDate(): String { + val dateFormat = SimpleDateFormat("yyyy-MM-dd", Locale.CHINA) + val calendar = Calendar.getInstance() + calendar.time = Date(this) + calendar.set(Calendar.DAY_OF_YEAR, calendar.get(Calendar.DAY_OF_YEAR) - 6) + return dateFormat.format(calendar.time) +} + + +fun Long.timestampToDate(): String = + SimpleDateFormat("yyyy-MM-dd", Locale.CHINA).format(Date(this)) + fun Long.isEarlierThanStart(date: String): Boolean { if (date.isBlank()) { return false diff --git a/app/src/main/java/com/casic/qd/smartwell/model/LineChartEntryModel.kt b/app/src/main/java/com/casic/qd/smartwell/model/LineChartEntryModel.kt new file mode 100644 index 0000000..8da82d8 --- /dev/null +++ b/app/src/main/java/com/casic/qd/smartwell/model/LineChartEntryModel.kt @@ -0,0 +1,16 @@ +package com.casic.qd.smartwell.model + +import com.casic.qd.smartwell.R +import com.casic.qd.smartwell.extensions.convertColor +import com.github.mikephil.charting.data.Entry + +class LineChartEntryModel { + //折线数据 + var entryList: List? = null + + //折线颜色 + var lineColor = R.color.mainThemeColor.convertColor() + + //点日期 + var entryDate: String? = null +} \ No newline at end of file diff --git a/app/src/main/java/com/casic/qd/smartwell/model/WaterSevenDayModel.kt b/app/src/main/java/com/casic/qd/smartwell/model/WaterSevenDayModel.kt new file mode 100644 index 0000000..6cda9f2 --- /dev/null +++ b/app/src/main/java/com/casic/qd/smartwell/model/WaterSevenDayModel.kt @@ -0,0 +1,18 @@ +package com.casic.qd.smartwell.model + +class WaterSevenDayModel { + var code = 0 + var data: List? = null + var message: String? = null + var isSuccess = false + + class DataBean { + var date: String? = null + var data: List? = null + + class AreaDataBean { + var areaName: String? = null + var count: String? = null + } + } +} \ No newline at end of file diff --git a/app/src/main/java/com/casic/qd/smartwell/utils/ChartViewHelper.kt b/app/src/main/java/com/casic/qd/smartwell/utils/ChartViewHelper.kt index 396877c..91b13e9 100644 --- a/app/src/main/java/com/casic/qd/smartwell/utils/ChartViewHelper.kt +++ b/app/src/main/java/com/casic/qd/smartwell/utils/ChartViewHelper.kt @@ -4,6 +4,7 @@ import com.casic.qd.smartwell.R import com.casic.qd.smartwell.base.BaseApplication import com.casic.qd.smartwell.extensions.convertColor +import com.casic.qd.smartwell.model.LineChartEntryModel import com.casic.qd.smartwell.widgets.DetailsMarkerView import com.github.mikephil.charting.animation.Easing import com.github.mikephil.charting.charts.BarChart @@ -67,33 +68,20 @@ chart.marker = detailsMarkerView } - fun setLineChartData( - chart: LineChart, - data1Entries: List?, - data2Entries: List? - ) { - val lineDataSets: MutableList = ArrayList() - //设置数据 - val valveDataSet = LineDataSet(data1Entries, "数据1") - valveDataSet.color = - R.color.mainThemeColor.convertColor() //线条颜色 - valveDataSet.setCircleColor(R.color.mainThemeColor.convertColor()) //圆点颜色 - valveDataSet.setDrawFilled(true) - valveDataSet.fillColor = - R.color.mainThemeColor.convertColor() - valveDataSet.mode = LineDataSet.Mode.CUBIC_BEZIER - lineDataSets.add(valveDataSet) - - val meterDataSet = LineDataSet(data2Entries, "数据2") - meterDataSet.color = - R.color.onLineColor.convertColor() //线条颜色 - meterDataSet.setCircleColor(R.color.onLineColor.convertColor()) //圆点颜色 - meterDataSet.setDrawFilled(true) - meterDataSet.fillColor = - R.color.onLineColor.convertColor() - meterDataSet.mode = LineDataSet.Mode.CUBIC_BEZIER - lineDataSets.add(meterDataSet) - + fun setLineChartData(chart: LineChart, entryModels: List) { + val lineDataSets: MutableList = ArrayList() + entryModels.forEachIndexed { index, it -> + //设置数据 + val dataSet = LineDataSet(it.entryList, it.entryList?.get(index)?.data.toString()) + //线条颜色 + dataSet.color = it.lineColor + //圆点颜色 + dataSet.setCircleColor(it.lineColor) + dataSet.setDrawFilled(true) + dataSet.fillColor = it.lineColor + dataSet.mode = LineDataSet.Mode.CUBIC_BEZIER + lineDataSets.add(dataSet) + } val lineData = LineData(lineDataSets) lineData.setDrawValues(false) chart.data = lineData @@ -301,7 +289,7 @@ val colors: MutableList = ArrayList() for (i in entries.indices) { colors.add( - Constant.PIE_COLORS[i].convertColor() + Constant.COLORS[i].convertColor() ) } dataSet.colors = colors diff --git a/app/src/main/java/com/casic/qd/smartwell/utils/Constant.kt b/app/src/main/java/com/casic/qd/smartwell/utils/Constant.kt index ec902a8..378a6e0 100644 --- a/app/src/main/java/com/casic/qd/smartwell/utils/Constant.kt +++ b/app/src/main/java/com/casic/qd/smartwell/utils/Constant.kt @@ -13,14 +13,15 @@ const val PERMISSIONS_CODE = 999 const val PAGE_LIMIT = 20 const val FIVE_YEARS = 5L * 365 * 60 * 60 * 24 * 1000L + const val ONE_WEEK = 7 val HOME_ICONS = arrayOf( R.drawable.ic_home_map, R.drawable.ic_home_record, R.drawable.ic_home_statistics, ) val HOME_ITEMS = arrayOf("地图展示", "记录查询", "汇总统计") - //饼图预置颜色,前三种作为街道统计饼图颜色 - val PIE_COLORS = arrayOf( + //预置颜色 + val COLORS = arrayOf( R.color.pieColor3, R.color.onLineColor, R.color.pieColor1, R.color.barChartColor, R.color.punishColor, R.color.colorAccent, R.color.persuadeColor, R.color.pieColor2, R.color.pieColor5, diff --git a/app/src/main/java/com/casic/qd/smartwell/utils/retrofit/RetrofitService.kt b/app/src/main/java/com/casic/qd/smartwell/utils/retrofit/RetrofitService.kt index 7081e2c..e31a353 100644 --- a/app/src/main/java/com/casic/qd/smartwell/utils/retrofit/RetrofitService.kt +++ b/app/src/main/java/com/casic/qd/smartwell/utils/retrofit/RetrofitService.kt @@ -123,4 +123,15 @@ @Query("offset") offset: Int, @Query("limit") limit: Int ): String + + /** + * 获取7日内用水量 + */ + @GET("/waterStatistic/countByDay") + suspend fun waterCountByDay( + @Header("token") token: String, + @Query("areaId") areaId: String, + @Query("startTime") startTime: String, + @Query("endTime") endTime: String + ): String } \ No newline at end of file diff --git a/app/src/main/java/com/casic/qd/smartwell/utils/retrofit/RetrofitServiceManager.kt b/app/src/main/java/com/casic/qd/smartwell/utils/retrofit/RetrofitServiceManager.kt index 9190ef1..6942990 100644 --- a/app/src/main/java/com/casic/qd/smartwell/utils/retrofit/RetrofitServiceManager.kt +++ b/app/src/main/java/com/casic/qd/smartwell/utils/retrofit/RetrofitServiceManager.kt @@ -129,4 +129,11 @@ Constant.PAGE_LIMIT ) } + + /** + * 获取近7日内用水量 + */ + suspend fun waterCountByDay(areaId: String, startTime: String, endTime: String): String { + return api.waterCountByDay(AuthenticationHelper.token!!, areaId, startTime, endTime) + } } \ No newline at end of file diff --git a/app/src/main/java/com/casic/qd/smartwell/view/MainActivity.kt b/app/src/main/java/com/casic/qd/smartwell/view/MainActivity.kt index 217dd2b..80be752 100644 --- a/app/src/main/java/com/casic/qd/smartwell/view/MainActivity.kt +++ b/app/src/main/java/com/casic/qd/smartwell/view/MainActivity.kt @@ -14,11 +14,11 @@ import com.casic.qd.smartwell.R import com.casic.qd.smartwell.adapter.HomeRecycleAdapter import com.casic.qd.smartwell.base.BaseActivity -import com.casic.qd.smartwell.extensions.navigatePageTo -import com.casic.qd.smartwell.extensions.show +import com.casic.qd.smartwell.extensions.* import com.casic.qd.smartwell.model.BannerImageModel +import com.casic.qd.smartwell.model.LineChartEntryModel import com.casic.qd.smartwell.utils.ChartViewHelper -import com.casic.qd.smartwell.utils.TimeOrDateUtil +import com.casic.qd.smartwell.utils.Constant import com.casic.qd.smartwell.vm.WaterStatisticsViewModel import com.github.mikephil.charting.data.Entry import com.youth.banner.Banner @@ -28,6 +28,7 @@ import kotlinx.android.synthetic.main.activity_main.* import java.lang.ref.WeakReference import java.util.* +import kotlin.collections.ArrayList class MainActivity : BaseActivity() { @@ -35,9 +36,7 @@ private val context: Context = this@MainActivity private var clickTime: Long = 0 private lateinit var waterViewModel: WaterStatisticsViewModel - - private val data1Entries: ArrayList = ArrayList() - private val data2Entries: ArrayList = ArrayList() + private val entryModels: MutableList = ArrayList() private val imageUrls = listOf( "https://images.pexels.com/photos/1036808/pexels-photo-1036808.jpeg?auto=compress&cs=tinysrgb&dpr=1&w=500", "https://images.pexels.com/photos/796602/pexels-photo-796602.jpeg?auto=compress&cs=tinysrgb&dpr=1&w=500", @@ -109,32 +108,8 @@ //初始化vm waterViewModel = ViewModelProvider(this).get(WaterStatisticsViewModel::class.java) - //初始化折线图 - val date = TimeOrDateUtil.timestampToMonth(System.currentTimeMillis()) - val currentDay = date[1].split("-")[2].toInt() - ChartViewHelper.initLineChart(waterLineChart, currentDay.toFloat()) - //TODO 这是模拟数据 - for (i in 1..currentDay) { - data1Entries.add( - Entry( - i.toFloat(), - Random().nextInt(15).toFloat(), "data1" - ) - ) - } - for (i in 1..currentDay) { - data2Entries.add( - Entry( - i.toFloat(), - Random().nextInt(20).toFloat(), "data2" - ) - ) - } - ChartViewHelper.setLineChartData( - waterLineChart, - data1Entries, - data2Entries - ) + //初始化折线图,X轴从0开始 + ChartViewHelper.initLineChart(waterLineChart, (Constant.ONE_WEEK - 1).toFloat()) weakReferenceHandler = WeakReferenceHandler(this) } @@ -149,6 +124,35 @@ rightOptionView.setOnClickListener { navigatePageTo(AlarmManagementActivity::class.java) } + + //一周折线图数据 + val currentTime = System.currentTimeMillis() + waterViewModel.waterCountByDay( + "110000", + currentTime.timestampToLastWeekDate(), + currentTime.timestampToDate() + ) + waterViewModel.areaDataModel.observe(this, { + if (it.code == 200) { + it.data?.forEachIndexed { i, dataBean -> + val entryModel = LineChartEntryModel() + entryModel.lineColor = Constant.COLORS[i].convertColor() + entryModel.entryDate = dataBean.date + + //每个entries都是一条折线 + val entries: ArrayList = ArrayList() + for (j in 0 until Constant.ONE_WEEK) { + val areaData = it.data!![j].data!![i] + entries.add( + Entry(j.toFloat(), areaData.count!!.toFloat(), areaData.areaName) + ) + } + entryModel.entryList = entries + entryModels.add(entryModel) + } + ChartViewHelper.setLineChartData(waterLineChart, entryModels) + } + }) } private class WeakReferenceHandler(activity: MainActivity) : Handler(Looper.getMainLooper()) { diff --git a/app/src/main/java/com/casic/qd/smartwell/vm/WaterStatisticsViewModel.kt b/app/src/main/java/com/casic/qd/smartwell/vm/WaterStatisticsViewModel.kt index 7c8ded9..76329c8 100644 --- a/app/src/main/java/com/casic/qd/smartwell/vm/WaterStatisticsViewModel.kt +++ b/app/src/main/java/com/casic/qd/smartwell/vm/WaterStatisticsViewModel.kt @@ -6,12 +6,17 @@ import com.casic.qd.smartwell.extensions.separateResponseCode import com.casic.qd.smartwell.extensions.show import com.casic.qd.smartwell.extensions.toErrorMessage +import com.casic.qd.smartwell.model.WaterSevenDayModel import com.casic.qd.smartwell.utils.retrofit.RetrofitServiceManager +import com.google.gson.Gson +import com.google.gson.reflect.TypeToken import org.json.JSONObject class WaterStatisticsViewModel : BaseViewModel() { + private val gson = Gson() val resultModel = MutableLiveData>() + val areaDataModel = MutableLiveData() fun waterStatistics() = launch({ val response = RetrofitServiceManager.waterStatistics() @@ -33,4 +38,18 @@ }, { "服务器异常".show() }) + + fun waterCountByDay(areaId: String, startTime: String, endTime: String) = launch({ + val response = RetrofitServiceManager.waterCountByDay(areaId, startTime, endTime) + val responseCode = response.separateResponseCode() + if (responseCode == 200) { + areaDataModel.value = gson.fromJson( + response, object : TypeToken() {}.type + ) + } else { + response.toErrorMessage().show() + } + }, { + "服务器异常".show() + }) } \ No newline at end of file diff --git a/app/src/main/java/com/casic/qd/smartwell/widgets/DetailsMarkerView.kt b/app/src/main/java/com/casic/qd/smartwell/widgets/DetailsMarkerView.kt index a0c59d8..8f42737 100644 --- a/app/src/main/java/com/casic/qd/smartwell/widgets/DetailsMarkerView.kt +++ b/app/src/main/java/com/casic/qd/smartwell/widgets/DetailsMarkerView.kt @@ -20,16 +20,12 @@ super.refreshContent(e, highlight) val data = e.data as String try { - if (e.y == 0f) { - dataView.text = "暂无数据" - } else { - dataView.text = String.format( - Locale.CHINA, - "%s:%s件", - data, - decimalFormat.format(e.y.toDouble()) - ) - } + dataView.text = String.format( + Locale.CHINA, + "%s:%st", + data, + decimalFormat.format(e.y.toString().toDouble()) + ) if (data == "阀门" || data == "水表" || data == "管线" || data == "噪声仪") { dayView.text = String.format(Locale.CHINA, "%s年", decimalFormat.format(e.x)) } else { diff --git a/app/src/main/java/com/casic/qd/smartwell/extensions/Long.kt b/app/src/main/java/com/casic/qd/smartwell/extensions/Long.kt index 7f68e3b..7dcbc22 100644 --- a/app/src/main/java/com/casic/qd/smartwell/extensions/Long.kt +++ b/app/src/main/java/com/casic/qd/smartwell/extensions/Long.kt @@ -7,6 +7,18 @@ fun Long.timestampToTime(): String = SimpleDateFormat("yyyy-MM-dd HH:mm:ss", Locale.CHINA).format(Date(this)) +fun Long.timestampToLastWeekDate(): String { + val dateFormat = SimpleDateFormat("yyyy-MM-dd", Locale.CHINA) + val calendar = Calendar.getInstance() + calendar.time = Date(this) + calendar.set(Calendar.DAY_OF_YEAR, calendar.get(Calendar.DAY_OF_YEAR) - 6) + return dateFormat.format(calendar.time) +} + + +fun Long.timestampToDate(): String = + SimpleDateFormat("yyyy-MM-dd", Locale.CHINA).format(Date(this)) + fun Long.isEarlierThanStart(date: String): Boolean { if (date.isBlank()) { return false diff --git a/app/src/main/java/com/casic/qd/smartwell/model/LineChartEntryModel.kt b/app/src/main/java/com/casic/qd/smartwell/model/LineChartEntryModel.kt new file mode 100644 index 0000000..8da82d8 --- /dev/null +++ b/app/src/main/java/com/casic/qd/smartwell/model/LineChartEntryModel.kt @@ -0,0 +1,16 @@ +package com.casic.qd.smartwell.model + +import com.casic.qd.smartwell.R +import com.casic.qd.smartwell.extensions.convertColor +import com.github.mikephil.charting.data.Entry + +class LineChartEntryModel { + //折线数据 + var entryList: List? = null + + //折线颜色 + var lineColor = R.color.mainThemeColor.convertColor() + + //点日期 + var entryDate: String? = null +} \ No newline at end of file diff --git a/app/src/main/java/com/casic/qd/smartwell/model/WaterSevenDayModel.kt b/app/src/main/java/com/casic/qd/smartwell/model/WaterSevenDayModel.kt new file mode 100644 index 0000000..6cda9f2 --- /dev/null +++ b/app/src/main/java/com/casic/qd/smartwell/model/WaterSevenDayModel.kt @@ -0,0 +1,18 @@ +package com.casic.qd.smartwell.model + +class WaterSevenDayModel { + var code = 0 + var data: List? = null + var message: String? = null + var isSuccess = false + + class DataBean { + var date: String? = null + var data: List? = null + + class AreaDataBean { + var areaName: String? = null + var count: String? = null + } + } +} \ No newline at end of file diff --git a/app/src/main/java/com/casic/qd/smartwell/utils/ChartViewHelper.kt b/app/src/main/java/com/casic/qd/smartwell/utils/ChartViewHelper.kt index 396877c..91b13e9 100644 --- a/app/src/main/java/com/casic/qd/smartwell/utils/ChartViewHelper.kt +++ b/app/src/main/java/com/casic/qd/smartwell/utils/ChartViewHelper.kt @@ -4,6 +4,7 @@ import com.casic.qd.smartwell.R import com.casic.qd.smartwell.base.BaseApplication import com.casic.qd.smartwell.extensions.convertColor +import com.casic.qd.smartwell.model.LineChartEntryModel import com.casic.qd.smartwell.widgets.DetailsMarkerView import com.github.mikephil.charting.animation.Easing import com.github.mikephil.charting.charts.BarChart @@ -67,33 +68,20 @@ chart.marker = detailsMarkerView } - fun setLineChartData( - chart: LineChart, - data1Entries: List?, - data2Entries: List? - ) { - val lineDataSets: MutableList = ArrayList() - //设置数据 - val valveDataSet = LineDataSet(data1Entries, "数据1") - valveDataSet.color = - R.color.mainThemeColor.convertColor() //线条颜色 - valveDataSet.setCircleColor(R.color.mainThemeColor.convertColor()) //圆点颜色 - valveDataSet.setDrawFilled(true) - valveDataSet.fillColor = - R.color.mainThemeColor.convertColor() - valveDataSet.mode = LineDataSet.Mode.CUBIC_BEZIER - lineDataSets.add(valveDataSet) - - val meterDataSet = LineDataSet(data2Entries, "数据2") - meterDataSet.color = - R.color.onLineColor.convertColor() //线条颜色 - meterDataSet.setCircleColor(R.color.onLineColor.convertColor()) //圆点颜色 - meterDataSet.setDrawFilled(true) - meterDataSet.fillColor = - R.color.onLineColor.convertColor() - meterDataSet.mode = LineDataSet.Mode.CUBIC_BEZIER - lineDataSets.add(meterDataSet) - + fun setLineChartData(chart: LineChart, entryModels: List) { + val lineDataSets: MutableList = ArrayList() + entryModels.forEachIndexed { index, it -> + //设置数据 + val dataSet = LineDataSet(it.entryList, it.entryList?.get(index)?.data.toString()) + //线条颜色 + dataSet.color = it.lineColor + //圆点颜色 + dataSet.setCircleColor(it.lineColor) + dataSet.setDrawFilled(true) + dataSet.fillColor = it.lineColor + dataSet.mode = LineDataSet.Mode.CUBIC_BEZIER + lineDataSets.add(dataSet) + } val lineData = LineData(lineDataSets) lineData.setDrawValues(false) chart.data = lineData @@ -301,7 +289,7 @@ val colors: MutableList = ArrayList() for (i in entries.indices) { colors.add( - Constant.PIE_COLORS[i].convertColor() + Constant.COLORS[i].convertColor() ) } dataSet.colors = colors diff --git a/app/src/main/java/com/casic/qd/smartwell/utils/Constant.kt b/app/src/main/java/com/casic/qd/smartwell/utils/Constant.kt index ec902a8..378a6e0 100644 --- a/app/src/main/java/com/casic/qd/smartwell/utils/Constant.kt +++ b/app/src/main/java/com/casic/qd/smartwell/utils/Constant.kt @@ -13,14 +13,15 @@ const val PERMISSIONS_CODE = 999 const val PAGE_LIMIT = 20 const val FIVE_YEARS = 5L * 365 * 60 * 60 * 24 * 1000L + const val ONE_WEEK = 7 val HOME_ICONS = arrayOf( R.drawable.ic_home_map, R.drawable.ic_home_record, R.drawable.ic_home_statistics, ) val HOME_ITEMS = arrayOf("地图展示", "记录查询", "汇总统计") - //饼图预置颜色,前三种作为街道统计饼图颜色 - val PIE_COLORS = arrayOf( + //预置颜色 + val COLORS = arrayOf( R.color.pieColor3, R.color.onLineColor, R.color.pieColor1, R.color.barChartColor, R.color.punishColor, R.color.colorAccent, R.color.persuadeColor, R.color.pieColor2, R.color.pieColor5, diff --git a/app/src/main/java/com/casic/qd/smartwell/utils/retrofit/RetrofitService.kt b/app/src/main/java/com/casic/qd/smartwell/utils/retrofit/RetrofitService.kt index 7081e2c..e31a353 100644 --- a/app/src/main/java/com/casic/qd/smartwell/utils/retrofit/RetrofitService.kt +++ b/app/src/main/java/com/casic/qd/smartwell/utils/retrofit/RetrofitService.kt @@ -123,4 +123,15 @@ @Query("offset") offset: Int, @Query("limit") limit: Int ): String + + /** + * 获取7日内用水量 + */ + @GET("/waterStatistic/countByDay") + suspend fun waterCountByDay( + @Header("token") token: String, + @Query("areaId") areaId: String, + @Query("startTime") startTime: String, + @Query("endTime") endTime: String + ): String } \ No newline at end of file diff --git a/app/src/main/java/com/casic/qd/smartwell/utils/retrofit/RetrofitServiceManager.kt b/app/src/main/java/com/casic/qd/smartwell/utils/retrofit/RetrofitServiceManager.kt index 9190ef1..6942990 100644 --- a/app/src/main/java/com/casic/qd/smartwell/utils/retrofit/RetrofitServiceManager.kt +++ b/app/src/main/java/com/casic/qd/smartwell/utils/retrofit/RetrofitServiceManager.kt @@ -129,4 +129,11 @@ Constant.PAGE_LIMIT ) } + + /** + * 获取近7日内用水量 + */ + suspend fun waterCountByDay(areaId: String, startTime: String, endTime: String): String { + return api.waterCountByDay(AuthenticationHelper.token!!, areaId, startTime, endTime) + } } \ No newline at end of file diff --git a/app/src/main/java/com/casic/qd/smartwell/view/MainActivity.kt b/app/src/main/java/com/casic/qd/smartwell/view/MainActivity.kt index 217dd2b..80be752 100644 --- a/app/src/main/java/com/casic/qd/smartwell/view/MainActivity.kt +++ b/app/src/main/java/com/casic/qd/smartwell/view/MainActivity.kt @@ -14,11 +14,11 @@ import com.casic.qd.smartwell.R import com.casic.qd.smartwell.adapter.HomeRecycleAdapter import com.casic.qd.smartwell.base.BaseActivity -import com.casic.qd.smartwell.extensions.navigatePageTo -import com.casic.qd.smartwell.extensions.show +import com.casic.qd.smartwell.extensions.* import com.casic.qd.smartwell.model.BannerImageModel +import com.casic.qd.smartwell.model.LineChartEntryModel import com.casic.qd.smartwell.utils.ChartViewHelper -import com.casic.qd.smartwell.utils.TimeOrDateUtil +import com.casic.qd.smartwell.utils.Constant import com.casic.qd.smartwell.vm.WaterStatisticsViewModel import com.github.mikephil.charting.data.Entry import com.youth.banner.Banner @@ -28,6 +28,7 @@ import kotlinx.android.synthetic.main.activity_main.* import java.lang.ref.WeakReference import java.util.* +import kotlin.collections.ArrayList class MainActivity : BaseActivity() { @@ -35,9 +36,7 @@ private val context: Context = this@MainActivity private var clickTime: Long = 0 private lateinit var waterViewModel: WaterStatisticsViewModel - - private val data1Entries: ArrayList = ArrayList() - private val data2Entries: ArrayList = ArrayList() + private val entryModels: MutableList = ArrayList() private val imageUrls = listOf( "https://images.pexels.com/photos/1036808/pexels-photo-1036808.jpeg?auto=compress&cs=tinysrgb&dpr=1&w=500", "https://images.pexels.com/photos/796602/pexels-photo-796602.jpeg?auto=compress&cs=tinysrgb&dpr=1&w=500", @@ -109,32 +108,8 @@ //初始化vm waterViewModel = ViewModelProvider(this).get(WaterStatisticsViewModel::class.java) - //初始化折线图 - val date = TimeOrDateUtil.timestampToMonth(System.currentTimeMillis()) - val currentDay = date[1].split("-")[2].toInt() - ChartViewHelper.initLineChart(waterLineChart, currentDay.toFloat()) - //TODO 这是模拟数据 - for (i in 1..currentDay) { - data1Entries.add( - Entry( - i.toFloat(), - Random().nextInt(15).toFloat(), "data1" - ) - ) - } - for (i in 1..currentDay) { - data2Entries.add( - Entry( - i.toFloat(), - Random().nextInt(20).toFloat(), "data2" - ) - ) - } - ChartViewHelper.setLineChartData( - waterLineChart, - data1Entries, - data2Entries - ) + //初始化折线图,X轴从0开始 + ChartViewHelper.initLineChart(waterLineChart, (Constant.ONE_WEEK - 1).toFloat()) weakReferenceHandler = WeakReferenceHandler(this) } @@ -149,6 +124,35 @@ rightOptionView.setOnClickListener { navigatePageTo(AlarmManagementActivity::class.java) } + + //一周折线图数据 + val currentTime = System.currentTimeMillis() + waterViewModel.waterCountByDay( + "110000", + currentTime.timestampToLastWeekDate(), + currentTime.timestampToDate() + ) + waterViewModel.areaDataModel.observe(this, { + if (it.code == 200) { + it.data?.forEachIndexed { i, dataBean -> + val entryModel = LineChartEntryModel() + entryModel.lineColor = Constant.COLORS[i].convertColor() + entryModel.entryDate = dataBean.date + + //每个entries都是一条折线 + val entries: ArrayList = ArrayList() + for (j in 0 until Constant.ONE_WEEK) { + val areaData = it.data!![j].data!![i] + entries.add( + Entry(j.toFloat(), areaData.count!!.toFloat(), areaData.areaName) + ) + } + entryModel.entryList = entries + entryModels.add(entryModel) + } + ChartViewHelper.setLineChartData(waterLineChart, entryModels) + } + }) } private class WeakReferenceHandler(activity: MainActivity) : Handler(Looper.getMainLooper()) { diff --git a/app/src/main/java/com/casic/qd/smartwell/vm/WaterStatisticsViewModel.kt b/app/src/main/java/com/casic/qd/smartwell/vm/WaterStatisticsViewModel.kt index 7c8ded9..76329c8 100644 --- a/app/src/main/java/com/casic/qd/smartwell/vm/WaterStatisticsViewModel.kt +++ b/app/src/main/java/com/casic/qd/smartwell/vm/WaterStatisticsViewModel.kt @@ -6,12 +6,17 @@ import com.casic.qd.smartwell.extensions.separateResponseCode import com.casic.qd.smartwell.extensions.show import com.casic.qd.smartwell.extensions.toErrorMessage +import com.casic.qd.smartwell.model.WaterSevenDayModel import com.casic.qd.smartwell.utils.retrofit.RetrofitServiceManager +import com.google.gson.Gson +import com.google.gson.reflect.TypeToken import org.json.JSONObject class WaterStatisticsViewModel : BaseViewModel() { + private val gson = Gson() val resultModel = MutableLiveData>() + val areaDataModel = MutableLiveData() fun waterStatistics() = launch({ val response = RetrofitServiceManager.waterStatistics() @@ -33,4 +38,18 @@ }, { "服务器异常".show() }) + + fun waterCountByDay(areaId: String, startTime: String, endTime: String) = launch({ + val response = RetrofitServiceManager.waterCountByDay(areaId, startTime, endTime) + val responseCode = response.separateResponseCode() + if (responseCode == 200) { + areaDataModel.value = gson.fromJson( + response, object : TypeToken() {}.type + ) + } else { + response.toErrorMessage().show() + } + }, { + "服务器异常".show() + }) } \ No newline at end of file diff --git a/app/src/main/java/com/casic/qd/smartwell/widgets/DetailsMarkerView.kt b/app/src/main/java/com/casic/qd/smartwell/widgets/DetailsMarkerView.kt index a0c59d8..8f42737 100644 --- a/app/src/main/java/com/casic/qd/smartwell/widgets/DetailsMarkerView.kt +++ b/app/src/main/java/com/casic/qd/smartwell/widgets/DetailsMarkerView.kt @@ -20,16 +20,12 @@ super.refreshContent(e, highlight) val data = e.data as String try { - if (e.y == 0f) { - dataView.text = "暂无数据" - } else { - dataView.text = String.format( - Locale.CHINA, - "%s:%s件", - data, - decimalFormat.format(e.y.toDouble()) - ) - } + dataView.text = String.format( + Locale.CHINA, + "%s:%st", + data, + decimalFormat.format(e.y.toString().toDouble()) + ) if (data == "阀门" || data == "水表" || data == "管线" || data == "噪声仪") { dayView.text = String.format(Locale.CHINA, "%s年", decimalFormat.format(e.x)) } else { diff --git a/app/src/main/res/layout/activity_main.xml b/app/src/main/res/layout/activity_main.xml index 4a9b841..b9a1554 100644 --- a/app/src/main/res/layout/activity_main.xml +++ b/app/src/main/res/layout/activity_main.xml @@ -54,7 +54,7 @@ + android:background="@color/mainBackColor" /> + +