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 7dcbc22..216e7cc 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 @@ -15,10 +15,26 @@ return dateFormat.format(calendar.time) } +fun Long.timestampToLastMonthDate(): 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) - 29) + return dateFormat.format(calendar.time) +} fun Long.timestampToDate(): String = SimpleDateFormat("yyyy-MM-dd", Locale.CHINA).format(Date(this)) +/** + * 获取当前月份所在季度 + * */ +fun Long.getQuarterOfYear(): Int { + val calendar = Calendar.getInstance() + calendar.time = Date(this) + return calendar.get(Calendar.MONTH) / 3 + 1 +} + 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 7dcbc22..216e7cc 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 @@ -15,10 +15,26 @@ return dateFormat.format(calendar.time) } +fun Long.timestampToLastMonthDate(): 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) - 29) + return dateFormat.format(calendar.time) +} fun Long.timestampToDate(): String = SimpleDateFormat("yyyy-MM-dd", Locale.CHINA).format(Date(this)) +/** + * 获取当前月份所在季度 + * */ +fun Long.getQuarterOfYear(): Int { + val calendar = Calendar.getInstance() + calendar.time = Date(this) + return calendar.get(Calendar.MONTH) / 3 + 1 +} + fun Long.isEarlierThanStart(date: String): Boolean { if (date.isBlank()) { return false diff --git a/app/src/main/java/com/casic/qd/smartwell/extensions/String.kt b/app/src/main/java/com/casic/qd/smartwell/extensions/String.kt index 1e5a885..19808ef 100644 --- a/app/src/main/java/com/casic/qd/smartwell/extensions/String.kt +++ b/app/src/main/java/com/casic/qd/smartwell/extensions/String.kt @@ -11,6 +11,9 @@ import com.google.gson.reflect.TypeToken import com.qmuiteam.qmui.util.QMUIDisplayHelper import org.json.JSONObject +import java.text.ParseException +import java.text.SimpleDateFormat +import java.util.* /** * String扩展方法 @@ -58,3 +61,18 @@ val split = this.split("-") return split[1] + "/" + split[2] } + +fun String.differ(endDate: String): Int { + val dateFormat = SimpleDateFormat("yyyy-MM-dd", Locale.CHINA) + try { + val star: Date = dateFormat.parse(this) //开始时间 + val endDay: Date = dateFormat.parse(endDate) //结束时间 + val starTime = star.time + val endTime = endDay.time + val num = endTime - starTime //时间戳相差的毫秒数 + return (num / 24 / 60 / 60 / 1000).toInt() + } catch (e: ParseException) { + e.printStackTrace() + } + return 0 +} 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 7dcbc22..216e7cc 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 @@ -15,10 +15,26 @@ return dateFormat.format(calendar.time) } +fun Long.timestampToLastMonthDate(): 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) - 29) + return dateFormat.format(calendar.time) +} fun Long.timestampToDate(): String = SimpleDateFormat("yyyy-MM-dd", Locale.CHINA).format(Date(this)) +/** + * 获取当前月份所在季度 + * */ +fun Long.getQuarterOfYear(): Int { + val calendar = Calendar.getInstance() + calendar.time = Date(this) + return calendar.get(Calendar.MONTH) / 3 + 1 +} + fun Long.isEarlierThanStart(date: String): Boolean { if (date.isBlank()) { return false diff --git a/app/src/main/java/com/casic/qd/smartwell/extensions/String.kt b/app/src/main/java/com/casic/qd/smartwell/extensions/String.kt index 1e5a885..19808ef 100644 --- a/app/src/main/java/com/casic/qd/smartwell/extensions/String.kt +++ b/app/src/main/java/com/casic/qd/smartwell/extensions/String.kt @@ -11,6 +11,9 @@ import com.google.gson.reflect.TypeToken import com.qmuiteam.qmui.util.QMUIDisplayHelper import org.json.JSONObject +import java.text.ParseException +import java.text.SimpleDateFormat +import java.util.* /** * String扩展方法 @@ -58,3 +61,18 @@ val split = this.split("-") return split[1] + "/" + split[2] } + +fun String.differ(endDate: String): Int { + val dateFormat = SimpleDateFormat("yyyy-MM-dd", Locale.CHINA) + try { + val star: Date = dateFormat.parse(this) //开始时间 + val endDay: Date = dateFormat.parse(endDate) //结束时间 + val starTime = star.time + val endTime = endDay.time + val num = endTime - starTime //时间戳相差的毫秒数 + return (num / 24 / 60 / 60 / 1000).toInt() + } catch (e: ParseException) { + e.printStackTrace() + } + return 0 +} 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 7c6263a..8daf653 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 @@ -30,10 +30,10 @@ * @email 290677893@qq.com */ object ChartViewHelper { - private const val Tag = "ChartViewHelper" + private const val kTag = "ChartViewHelper" private val decimalFormat = DecimalFormat("##0") - fun initLineChart(chart: LineChart, axisMaximum: Float) { + fun initLineChart(chart: LineChart) { chart.setDrawGridBackground(false) chart.setDrawBorders(false) //设置样式 @@ -47,7 +47,6 @@ val xAxis: XAxis = chart.xAxis xAxis.textColor = R.color.mainTextColor.convertColor() xAxis.textSize = 10f - xAxis.axisMaximum = axisMaximum xAxis.setDrawLabels(true) //绘制标签 指x轴上的对应数值 xAxis.setDrawAxisLine(true) //是否绘制轴线 xAxis.setDrawGridLines(false) //设置x轴上每个点对应的线 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 7dcbc22..216e7cc 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 @@ -15,10 +15,26 @@ return dateFormat.format(calendar.time) } +fun Long.timestampToLastMonthDate(): 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) - 29) + return dateFormat.format(calendar.time) +} fun Long.timestampToDate(): String = SimpleDateFormat("yyyy-MM-dd", Locale.CHINA).format(Date(this)) +/** + * 获取当前月份所在季度 + * */ +fun Long.getQuarterOfYear(): Int { + val calendar = Calendar.getInstance() + calendar.time = Date(this) + return calendar.get(Calendar.MONTH) / 3 + 1 +} + fun Long.isEarlierThanStart(date: String): Boolean { if (date.isBlank()) { return false diff --git a/app/src/main/java/com/casic/qd/smartwell/extensions/String.kt b/app/src/main/java/com/casic/qd/smartwell/extensions/String.kt index 1e5a885..19808ef 100644 --- a/app/src/main/java/com/casic/qd/smartwell/extensions/String.kt +++ b/app/src/main/java/com/casic/qd/smartwell/extensions/String.kt @@ -11,6 +11,9 @@ import com.google.gson.reflect.TypeToken import com.qmuiteam.qmui.util.QMUIDisplayHelper import org.json.JSONObject +import java.text.ParseException +import java.text.SimpleDateFormat +import java.util.* /** * String扩展方法 @@ -58,3 +61,18 @@ val split = this.split("-") return split[1] + "/" + split[2] } + +fun String.differ(endDate: String): Int { + val dateFormat = SimpleDateFormat("yyyy-MM-dd", Locale.CHINA) + try { + val star: Date = dateFormat.parse(this) //开始时间 + val endDay: Date = dateFormat.parse(endDate) //结束时间 + val starTime = star.time + val endTime = endDay.time + val num = endTime - starTime //时间戳相差的毫秒数 + return (num / 24 / 60 / 60 / 1000).toInt() + } catch (e: ParseException) { + e.printStackTrace() + } + return 0 +} 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 7c6263a..8daf653 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 @@ -30,10 +30,10 @@ * @email 290677893@qq.com */ object ChartViewHelper { - private const val Tag = "ChartViewHelper" + private const val kTag = "ChartViewHelper" private val decimalFormat = DecimalFormat("##0") - fun initLineChart(chart: LineChart, axisMaximum: Float) { + fun initLineChart(chart: LineChart) { chart.setDrawGridBackground(false) chart.setDrawBorders(false) //设置样式 @@ -47,7 +47,6 @@ val xAxis: XAxis = chart.xAxis xAxis.textColor = R.color.mainTextColor.convertColor() xAxis.textSize = 10f - xAxis.axisMaximum = axisMaximum xAxis.setDrawLabels(true) //绘制标签 指x轴上的对应数值 xAxis.setDrawAxisLine(true) //是否绘制轴线 xAxis.setDrawGridLines(false) //设置x轴上每个点对应的线 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 378a6e0..ecb931e 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 @@ -40,4 +40,5 @@ const val PASSWORD = "password" const val USER_DETAIL_MODEL = "userDetailModel" const val CANCEL_ALARM_ACTION = "cancelAlarm" + const val AREA_ID = "110000" } \ 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 7dcbc22..216e7cc 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 @@ -15,10 +15,26 @@ return dateFormat.format(calendar.time) } +fun Long.timestampToLastMonthDate(): 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) - 29) + return dateFormat.format(calendar.time) +} fun Long.timestampToDate(): String = SimpleDateFormat("yyyy-MM-dd", Locale.CHINA).format(Date(this)) +/** + * 获取当前月份所在季度 + * */ +fun Long.getQuarterOfYear(): Int { + val calendar = Calendar.getInstance() + calendar.time = Date(this) + return calendar.get(Calendar.MONTH) / 3 + 1 +} + fun Long.isEarlierThanStart(date: String): Boolean { if (date.isBlank()) { return false diff --git a/app/src/main/java/com/casic/qd/smartwell/extensions/String.kt b/app/src/main/java/com/casic/qd/smartwell/extensions/String.kt index 1e5a885..19808ef 100644 --- a/app/src/main/java/com/casic/qd/smartwell/extensions/String.kt +++ b/app/src/main/java/com/casic/qd/smartwell/extensions/String.kt @@ -11,6 +11,9 @@ import com.google.gson.reflect.TypeToken import com.qmuiteam.qmui.util.QMUIDisplayHelper import org.json.JSONObject +import java.text.ParseException +import java.text.SimpleDateFormat +import java.util.* /** * String扩展方法 @@ -58,3 +61,18 @@ val split = this.split("-") return split[1] + "/" + split[2] } + +fun String.differ(endDate: String): Int { + val dateFormat = SimpleDateFormat("yyyy-MM-dd", Locale.CHINA) + try { + val star: Date = dateFormat.parse(this) //开始时间 + val endDay: Date = dateFormat.parse(endDate) //结束时间 + val starTime = star.time + val endTime = endDay.time + val num = endTime - starTime //时间戳相差的毫秒数 + return (num / 24 / 60 / 60 / 1000).toInt() + } catch (e: ParseException) { + e.printStackTrace() + } + return 0 +} 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 7c6263a..8daf653 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 @@ -30,10 +30,10 @@ * @email 290677893@qq.com */ object ChartViewHelper { - private const val Tag = "ChartViewHelper" + private const val kTag = "ChartViewHelper" private val decimalFormat = DecimalFormat("##0") - fun initLineChart(chart: LineChart, axisMaximum: Float) { + fun initLineChart(chart: LineChart) { chart.setDrawGridBackground(false) chart.setDrawBorders(false) //设置样式 @@ -47,7 +47,6 @@ val xAxis: XAxis = chart.xAxis xAxis.textColor = R.color.mainTextColor.convertColor() xAxis.textSize = 10f - xAxis.axisMaximum = axisMaximum xAxis.setDrawLabels(true) //绘制标签 指x轴上的对应数值 xAxis.setDrawAxisLine(true) //是否绘制轴线 xAxis.setDrawGridLines(false) //设置x轴上每个点对应的线 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 378a6e0..ecb931e 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 @@ -40,4 +40,5 @@ const val PASSWORD = "password" const val USER_DETAIL_MODEL = "userDetailModel" const val CANCEL_ALARM_ACTION = "cancelAlarm" + const val AREA_ID = "110000" } \ No newline at end of file diff --git a/app/src/main/java/com/casic/qd/smartwell/view/ExpandedActivity.kt b/app/src/main/java/com/casic/qd/smartwell/view/ExpandedActivity.kt index 14763e8..5bd2f91 100644 --- a/app/src/main/java/com/casic/qd/smartwell/view/ExpandedActivity.kt +++ b/app/src/main/java/com/casic/qd/smartwell/view/ExpandedActivity.kt @@ -1,22 +1,29 @@ package com.casic.qd.smartwell.view +import android.view.View +import android.widget.AdapterView import androidx.lifecycle.ViewModelProvider import com.casic.qd.smartwell.R import com.casic.qd.smartwell.base.BaseActivity -import com.casic.qd.smartwell.extensions.convertColor -import com.casic.qd.smartwell.extensions.timestampToDate -import com.casic.qd.smartwell.extensions.timestampToLastWeekDate +import com.casic.qd.smartwell.extensions.* import com.casic.qd.smartwell.model.LineChartEntryModel import com.casic.qd.smartwell.utils.ChartViewHelper import com.casic.qd.smartwell.utils.Constant import com.casic.qd.smartwell.vm.WaterStatisticsViewModel import com.github.mikephil.charting.data.Entry -import kotlinx.android.synthetic.main.activity_main.* +import kotlinx.android.synthetic.main.activity_expanded.* +import kotlinx.android.synthetic.main.activity_main.waterLineChart +import java.util.* +import kotlin.collections.ArrayList + class ExpandedActivity : BaseActivity() { + private val kTag = "ExpandedActivity" private lateinit var waterViewModel: WaterStatisticsViewModel private val entryModels: MutableList = ArrayList() + private var startDate = "" + private var differ = 0 override fun initLayoutView(): Int = R.layout.activity_expanded @@ -26,28 +33,80 @@ override fun initData() { waterViewModel = ViewModelProvider(this).get(WaterStatisticsViewModel::class.java) - //初始化折线图,X轴从0开始 - ChartViewHelper.initLineChart(waterLineChart, (Constant.ONE_WEEK - 1).toFloat()) } override fun initEvent() { - //一周折线图数据 - val currentTime = System.currentTimeMillis() - waterViewModel.waterCountByDay( - "110000", - currentTime.timestampToLastWeekDate(), - currentTime.timestampToDate() - ) + //默认选择近7天的数据 + periodSpinner.setSelection(3) + periodSpinner.onItemSelectedListener = object : AdapterView.OnItemSelectedListener { + override fun onItemSelected( + parent: AdapterView<*>?, view: View?, + position: Int, id: Long + ) { + val time = System.currentTimeMillis() + val calendar = Calendar.getInstance() + val year: Int = calendar.get(Calendar.YEAR) + when (position) { + 0 -> { + //本年度 + startDate = "$year-01-01" + } + 1 -> { + //本季度 + when (time.getQuarterOfYear()) { + 1 -> { + startDate = "$year-01-01" + } + 2 -> { + startDate = "$year-04-01" + } + 3 -> { + startDate = "$year-07-01" + } + 4 -> { + startDate = "$year-10-01" + } + } + } + 2 -> { + //近30日 + startDate = time.timestampToLastMonthDate() + } + 3 -> { + //近7日 + startDate = time.timestampToLastWeekDate() + } + 4 -> { + //今日 + startDate = time.timestampToDate() + } + 5 -> { + + } + } + //初始化折线图,X轴从0开始 + differ = startDate.differ(time.timestampToDate()) + ChartViewHelper.initLineChart(waterLineChart) + waterViewModel.waterCountByDay(Constant.AREA_ID, startDate, time.timestampToDate()) + } + + override fun onNothingSelected(parent: AdapterView<*>?) { + + } + } + waterViewModel.areaDataModel.observe(this, { if (it.code == 200) { it.data?.forEachIndexed { i, dataBean -> val entryModel = LineChartEntryModel() - entryModel.lineColor = Constant.COLORS[i].convertColor() + if (i <= differ) { + entryModel.lineColor = Constant.COLORS[i].convertColor() + } entryModel.entryDate = dataBean.date - //每个entries都是一条折线 +// //每个entries都是一条折线 val entries: ArrayList = ArrayList() - for (j in 0 until Constant.ONE_WEEK) { + for (j in 0..differ) { val areaData = it.data!![j].data!![i] entries.add( Entry(j.toFloat(), areaData.count!!.toFloat(), areaData.areaName) @@ -55,6 +114,23 @@ } entryModel.entryList = entries entryModels.add(entryModel) + + /** + * i的范围是[0,differ] + * */ + //每个entries都是一条折线 +// val entries: ArrayList = ArrayList() +// for (k in dataBean.data!!.indices) { +// /** +// * i的范围是[0,dataBean.data!!.indices] +// * */ +// val areaData = dataBean.data!![k] +// entries.add( +// Entry(k.toFloat(), areaData.count!!.toFloat(), areaData.areaName) +// ) +// } +// entryModel.entryList = entries +// entryModels.add(entryModel) } ChartViewHelper.setLineChartData(waterLineChart, entryModels) } 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 7dcbc22..216e7cc 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 @@ -15,10 +15,26 @@ return dateFormat.format(calendar.time) } +fun Long.timestampToLastMonthDate(): 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) - 29) + return dateFormat.format(calendar.time) +} fun Long.timestampToDate(): String = SimpleDateFormat("yyyy-MM-dd", Locale.CHINA).format(Date(this)) +/** + * 获取当前月份所在季度 + * */ +fun Long.getQuarterOfYear(): Int { + val calendar = Calendar.getInstance() + calendar.time = Date(this) + return calendar.get(Calendar.MONTH) / 3 + 1 +} + fun Long.isEarlierThanStart(date: String): Boolean { if (date.isBlank()) { return false diff --git a/app/src/main/java/com/casic/qd/smartwell/extensions/String.kt b/app/src/main/java/com/casic/qd/smartwell/extensions/String.kt index 1e5a885..19808ef 100644 --- a/app/src/main/java/com/casic/qd/smartwell/extensions/String.kt +++ b/app/src/main/java/com/casic/qd/smartwell/extensions/String.kt @@ -11,6 +11,9 @@ import com.google.gson.reflect.TypeToken import com.qmuiteam.qmui.util.QMUIDisplayHelper import org.json.JSONObject +import java.text.ParseException +import java.text.SimpleDateFormat +import java.util.* /** * String扩展方法 @@ -58,3 +61,18 @@ val split = this.split("-") return split[1] + "/" + split[2] } + +fun String.differ(endDate: String): Int { + val dateFormat = SimpleDateFormat("yyyy-MM-dd", Locale.CHINA) + try { + val star: Date = dateFormat.parse(this) //开始时间 + val endDay: Date = dateFormat.parse(endDate) //结束时间 + val starTime = star.time + val endTime = endDay.time + val num = endTime - starTime //时间戳相差的毫秒数 + return (num / 24 / 60 / 60 / 1000).toInt() + } catch (e: ParseException) { + e.printStackTrace() + } + return 0 +} 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 7c6263a..8daf653 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 @@ -30,10 +30,10 @@ * @email 290677893@qq.com */ object ChartViewHelper { - private const val Tag = "ChartViewHelper" + private const val kTag = "ChartViewHelper" private val decimalFormat = DecimalFormat("##0") - fun initLineChart(chart: LineChart, axisMaximum: Float) { + fun initLineChart(chart: LineChart) { chart.setDrawGridBackground(false) chart.setDrawBorders(false) //设置样式 @@ -47,7 +47,6 @@ val xAxis: XAxis = chart.xAxis xAxis.textColor = R.color.mainTextColor.convertColor() xAxis.textSize = 10f - xAxis.axisMaximum = axisMaximum xAxis.setDrawLabels(true) //绘制标签 指x轴上的对应数值 xAxis.setDrawAxisLine(true) //是否绘制轴线 xAxis.setDrawGridLines(false) //设置x轴上每个点对应的线 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 378a6e0..ecb931e 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 @@ -40,4 +40,5 @@ const val PASSWORD = "password" const val USER_DETAIL_MODEL = "userDetailModel" const val CANCEL_ALARM_ACTION = "cancelAlarm" + const val AREA_ID = "110000" } \ No newline at end of file diff --git a/app/src/main/java/com/casic/qd/smartwell/view/ExpandedActivity.kt b/app/src/main/java/com/casic/qd/smartwell/view/ExpandedActivity.kt index 14763e8..5bd2f91 100644 --- a/app/src/main/java/com/casic/qd/smartwell/view/ExpandedActivity.kt +++ b/app/src/main/java/com/casic/qd/smartwell/view/ExpandedActivity.kt @@ -1,22 +1,29 @@ package com.casic.qd.smartwell.view +import android.view.View +import android.widget.AdapterView import androidx.lifecycle.ViewModelProvider import com.casic.qd.smartwell.R import com.casic.qd.smartwell.base.BaseActivity -import com.casic.qd.smartwell.extensions.convertColor -import com.casic.qd.smartwell.extensions.timestampToDate -import com.casic.qd.smartwell.extensions.timestampToLastWeekDate +import com.casic.qd.smartwell.extensions.* import com.casic.qd.smartwell.model.LineChartEntryModel import com.casic.qd.smartwell.utils.ChartViewHelper import com.casic.qd.smartwell.utils.Constant import com.casic.qd.smartwell.vm.WaterStatisticsViewModel import com.github.mikephil.charting.data.Entry -import kotlinx.android.synthetic.main.activity_main.* +import kotlinx.android.synthetic.main.activity_expanded.* +import kotlinx.android.synthetic.main.activity_main.waterLineChart +import java.util.* +import kotlin.collections.ArrayList + class ExpandedActivity : BaseActivity() { + private val kTag = "ExpandedActivity" private lateinit var waterViewModel: WaterStatisticsViewModel private val entryModels: MutableList = ArrayList() + private var startDate = "" + private var differ = 0 override fun initLayoutView(): Int = R.layout.activity_expanded @@ -26,28 +33,80 @@ override fun initData() { waterViewModel = ViewModelProvider(this).get(WaterStatisticsViewModel::class.java) - //初始化折线图,X轴从0开始 - ChartViewHelper.initLineChart(waterLineChart, (Constant.ONE_WEEK - 1).toFloat()) } override fun initEvent() { - //一周折线图数据 - val currentTime = System.currentTimeMillis() - waterViewModel.waterCountByDay( - "110000", - currentTime.timestampToLastWeekDate(), - currentTime.timestampToDate() - ) + //默认选择近7天的数据 + periodSpinner.setSelection(3) + periodSpinner.onItemSelectedListener = object : AdapterView.OnItemSelectedListener { + override fun onItemSelected( + parent: AdapterView<*>?, view: View?, + position: Int, id: Long + ) { + val time = System.currentTimeMillis() + val calendar = Calendar.getInstance() + val year: Int = calendar.get(Calendar.YEAR) + when (position) { + 0 -> { + //本年度 + startDate = "$year-01-01" + } + 1 -> { + //本季度 + when (time.getQuarterOfYear()) { + 1 -> { + startDate = "$year-01-01" + } + 2 -> { + startDate = "$year-04-01" + } + 3 -> { + startDate = "$year-07-01" + } + 4 -> { + startDate = "$year-10-01" + } + } + } + 2 -> { + //近30日 + startDate = time.timestampToLastMonthDate() + } + 3 -> { + //近7日 + startDate = time.timestampToLastWeekDate() + } + 4 -> { + //今日 + startDate = time.timestampToDate() + } + 5 -> { + + } + } + //初始化折线图,X轴从0开始 + differ = startDate.differ(time.timestampToDate()) + ChartViewHelper.initLineChart(waterLineChart) + waterViewModel.waterCountByDay(Constant.AREA_ID, startDate, time.timestampToDate()) + } + + override fun onNothingSelected(parent: AdapterView<*>?) { + + } + } + waterViewModel.areaDataModel.observe(this, { if (it.code == 200) { it.data?.forEachIndexed { i, dataBean -> val entryModel = LineChartEntryModel() - entryModel.lineColor = Constant.COLORS[i].convertColor() + if (i <= differ) { + entryModel.lineColor = Constant.COLORS[i].convertColor() + } entryModel.entryDate = dataBean.date - //每个entries都是一条折线 +// //每个entries都是一条折线 val entries: ArrayList = ArrayList() - for (j in 0 until Constant.ONE_WEEK) { + for (j in 0..differ) { val areaData = it.data!![j].data!![i] entries.add( Entry(j.toFloat(), areaData.count!!.toFloat(), areaData.areaName) @@ -55,6 +114,23 @@ } entryModel.entryList = entries entryModels.add(entryModel) + + /** + * i的范围是[0,differ] + * */ + //每个entries都是一条折线 +// val entries: ArrayList = ArrayList() +// for (k in dataBean.data!!.indices) { +// /** +// * i的范围是[0,dataBean.data!!.indices] +// * */ +// val areaData = dataBean.data!![k] +// entries.add( +// Entry(k.toFloat(), areaData.count!!.toFloat(), areaData.areaName) +// ) +// } +// entryModel.entryList = entries +// entryModels.add(entryModel) } ChartViewHelper.setLineChartData(waterLineChart, entryModels) } 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 56ea003..570df4e 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 @@ -86,7 +86,7 @@ }) //Banner点击事件 setOnBannerListener { data, _ -> - startActivity(Intent(this@MainActivity, WebsiteActivity::class.java)) + navigatePageTo(WebsiteActivity::class.java) } } @@ -107,9 +107,6 @@ //初始化vm waterViewModel = ViewModelProvider(this).get(WaterStatisticsViewModel::class.java) - - //初始化折线图,X轴从0开始 - ChartViewHelper.initLineChart(waterLineChart, (Constant.ONE_WEEK - 1).toFloat()) weakReferenceHandler = WeakReferenceHandler(this) } @@ -125,23 +122,26 @@ navigatePageTo(AlarmManagementActivity::class.java) } + //初始化折线图,X轴从0开始 + val time = System.currentTimeMillis() + val startDate = time.timestampToLastWeekDate() + val endDate = time.timestampToDate() + val differ = startDate.differ(endDate) + ChartViewHelper.initLineChart(waterLineChart) //一周折线图数据 - val currentTime = System.currentTimeMillis() - waterViewModel.waterCountByDay( - "110000", - currentTime.timestampToLastWeekDate(), - currentTime.timestampToDate() - ) + waterViewModel.waterCountByDay(Constant.AREA_ID, startDate, endDate) waterViewModel.areaDataModel.observe(this, { if (it.code == 200) { it.data?.forEachIndexed { i, dataBean -> val entryModel = LineChartEntryModel() - entryModel.lineColor = Constant.COLORS[i].convertColor() + if (i <= differ) { + entryModel.lineColor = Constant.COLORS[i].convertColor() + } entryModel.entryDate = dataBean.date //每个entries都是一条折线 val entries: ArrayList = ArrayList() - for (j in 0 until Constant.ONE_WEEK) { + for (j in 0..differ) { val areaData = it.data!![j].data!![i] entries.add( Entry(j.toFloat(), areaData.count!!.toFloat(), areaData.areaName) 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 7dcbc22..216e7cc 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 @@ -15,10 +15,26 @@ return dateFormat.format(calendar.time) } +fun Long.timestampToLastMonthDate(): 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) - 29) + return dateFormat.format(calendar.time) +} fun Long.timestampToDate(): String = SimpleDateFormat("yyyy-MM-dd", Locale.CHINA).format(Date(this)) +/** + * 获取当前月份所在季度 + * */ +fun Long.getQuarterOfYear(): Int { + val calendar = Calendar.getInstance() + calendar.time = Date(this) + return calendar.get(Calendar.MONTH) / 3 + 1 +} + fun Long.isEarlierThanStart(date: String): Boolean { if (date.isBlank()) { return false diff --git a/app/src/main/java/com/casic/qd/smartwell/extensions/String.kt b/app/src/main/java/com/casic/qd/smartwell/extensions/String.kt index 1e5a885..19808ef 100644 --- a/app/src/main/java/com/casic/qd/smartwell/extensions/String.kt +++ b/app/src/main/java/com/casic/qd/smartwell/extensions/String.kt @@ -11,6 +11,9 @@ import com.google.gson.reflect.TypeToken import com.qmuiteam.qmui.util.QMUIDisplayHelper import org.json.JSONObject +import java.text.ParseException +import java.text.SimpleDateFormat +import java.util.* /** * String扩展方法 @@ -58,3 +61,18 @@ val split = this.split("-") return split[1] + "/" + split[2] } + +fun String.differ(endDate: String): Int { + val dateFormat = SimpleDateFormat("yyyy-MM-dd", Locale.CHINA) + try { + val star: Date = dateFormat.parse(this) //开始时间 + val endDay: Date = dateFormat.parse(endDate) //结束时间 + val starTime = star.time + val endTime = endDay.time + val num = endTime - starTime //时间戳相差的毫秒数 + return (num / 24 / 60 / 60 / 1000).toInt() + } catch (e: ParseException) { + e.printStackTrace() + } + return 0 +} 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 7c6263a..8daf653 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 @@ -30,10 +30,10 @@ * @email 290677893@qq.com */ object ChartViewHelper { - private const val Tag = "ChartViewHelper" + private const val kTag = "ChartViewHelper" private val decimalFormat = DecimalFormat("##0") - fun initLineChart(chart: LineChart, axisMaximum: Float) { + fun initLineChart(chart: LineChart) { chart.setDrawGridBackground(false) chart.setDrawBorders(false) //设置样式 @@ -47,7 +47,6 @@ val xAxis: XAxis = chart.xAxis xAxis.textColor = R.color.mainTextColor.convertColor() xAxis.textSize = 10f - xAxis.axisMaximum = axisMaximum xAxis.setDrawLabels(true) //绘制标签 指x轴上的对应数值 xAxis.setDrawAxisLine(true) //是否绘制轴线 xAxis.setDrawGridLines(false) //设置x轴上每个点对应的线 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 378a6e0..ecb931e 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 @@ -40,4 +40,5 @@ const val PASSWORD = "password" const val USER_DETAIL_MODEL = "userDetailModel" const val CANCEL_ALARM_ACTION = "cancelAlarm" + const val AREA_ID = "110000" } \ No newline at end of file diff --git a/app/src/main/java/com/casic/qd/smartwell/view/ExpandedActivity.kt b/app/src/main/java/com/casic/qd/smartwell/view/ExpandedActivity.kt index 14763e8..5bd2f91 100644 --- a/app/src/main/java/com/casic/qd/smartwell/view/ExpandedActivity.kt +++ b/app/src/main/java/com/casic/qd/smartwell/view/ExpandedActivity.kt @@ -1,22 +1,29 @@ package com.casic.qd.smartwell.view +import android.view.View +import android.widget.AdapterView import androidx.lifecycle.ViewModelProvider import com.casic.qd.smartwell.R import com.casic.qd.smartwell.base.BaseActivity -import com.casic.qd.smartwell.extensions.convertColor -import com.casic.qd.smartwell.extensions.timestampToDate -import com.casic.qd.smartwell.extensions.timestampToLastWeekDate +import com.casic.qd.smartwell.extensions.* import com.casic.qd.smartwell.model.LineChartEntryModel import com.casic.qd.smartwell.utils.ChartViewHelper import com.casic.qd.smartwell.utils.Constant import com.casic.qd.smartwell.vm.WaterStatisticsViewModel import com.github.mikephil.charting.data.Entry -import kotlinx.android.synthetic.main.activity_main.* +import kotlinx.android.synthetic.main.activity_expanded.* +import kotlinx.android.synthetic.main.activity_main.waterLineChart +import java.util.* +import kotlin.collections.ArrayList + class ExpandedActivity : BaseActivity() { + private val kTag = "ExpandedActivity" private lateinit var waterViewModel: WaterStatisticsViewModel private val entryModels: MutableList = ArrayList() + private var startDate = "" + private var differ = 0 override fun initLayoutView(): Int = R.layout.activity_expanded @@ -26,28 +33,80 @@ override fun initData() { waterViewModel = ViewModelProvider(this).get(WaterStatisticsViewModel::class.java) - //初始化折线图,X轴从0开始 - ChartViewHelper.initLineChart(waterLineChart, (Constant.ONE_WEEK - 1).toFloat()) } override fun initEvent() { - //一周折线图数据 - val currentTime = System.currentTimeMillis() - waterViewModel.waterCountByDay( - "110000", - currentTime.timestampToLastWeekDate(), - currentTime.timestampToDate() - ) + //默认选择近7天的数据 + periodSpinner.setSelection(3) + periodSpinner.onItemSelectedListener = object : AdapterView.OnItemSelectedListener { + override fun onItemSelected( + parent: AdapterView<*>?, view: View?, + position: Int, id: Long + ) { + val time = System.currentTimeMillis() + val calendar = Calendar.getInstance() + val year: Int = calendar.get(Calendar.YEAR) + when (position) { + 0 -> { + //本年度 + startDate = "$year-01-01" + } + 1 -> { + //本季度 + when (time.getQuarterOfYear()) { + 1 -> { + startDate = "$year-01-01" + } + 2 -> { + startDate = "$year-04-01" + } + 3 -> { + startDate = "$year-07-01" + } + 4 -> { + startDate = "$year-10-01" + } + } + } + 2 -> { + //近30日 + startDate = time.timestampToLastMonthDate() + } + 3 -> { + //近7日 + startDate = time.timestampToLastWeekDate() + } + 4 -> { + //今日 + startDate = time.timestampToDate() + } + 5 -> { + + } + } + //初始化折线图,X轴从0开始 + differ = startDate.differ(time.timestampToDate()) + ChartViewHelper.initLineChart(waterLineChart) + waterViewModel.waterCountByDay(Constant.AREA_ID, startDate, time.timestampToDate()) + } + + override fun onNothingSelected(parent: AdapterView<*>?) { + + } + } + waterViewModel.areaDataModel.observe(this, { if (it.code == 200) { it.data?.forEachIndexed { i, dataBean -> val entryModel = LineChartEntryModel() - entryModel.lineColor = Constant.COLORS[i].convertColor() + if (i <= differ) { + entryModel.lineColor = Constant.COLORS[i].convertColor() + } entryModel.entryDate = dataBean.date - //每个entries都是一条折线 +// //每个entries都是一条折线 val entries: ArrayList = ArrayList() - for (j in 0 until Constant.ONE_WEEK) { + for (j in 0..differ) { val areaData = it.data!![j].data!![i] entries.add( Entry(j.toFloat(), areaData.count!!.toFloat(), areaData.areaName) @@ -55,6 +114,23 @@ } entryModel.entryList = entries entryModels.add(entryModel) + + /** + * i的范围是[0,differ] + * */ + //每个entries都是一条折线 +// val entries: ArrayList = ArrayList() +// for (k in dataBean.data!!.indices) { +// /** +// * i的范围是[0,dataBean.data!!.indices] +// * */ +// val areaData = dataBean.data!![k] +// entries.add( +// Entry(k.toFloat(), areaData.count!!.toFloat(), areaData.areaName) +// ) +// } +// entryModel.entryList = entries +// entryModels.add(entryModel) } ChartViewHelper.setLineChartData(waterLineChart, entryModels) } 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 56ea003..570df4e 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 @@ -86,7 +86,7 @@ }) //Banner点击事件 setOnBannerListener { data, _ -> - startActivity(Intent(this@MainActivity, WebsiteActivity::class.java)) + navigatePageTo(WebsiteActivity::class.java) } } @@ -107,9 +107,6 @@ //初始化vm waterViewModel = ViewModelProvider(this).get(WaterStatisticsViewModel::class.java) - - //初始化折线图,X轴从0开始 - ChartViewHelper.initLineChart(waterLineChart, (Constant.ONE_WEEK - 1).toFloat()) weakReferenceHandler = WeakReferenceHandler(this) } @@ -125,23 +122,26 @@ navigatePageTo(AlarmManagementActivity::class.java) } + //初始化折线图,X轴从0开始 + val time = System.currentTimeMillis() + val startDate = time.timestampToLastWeekDate() + val endDate = time.timestampToDate() + val differ = startDate.differ(endDate) + ChartViewHelper.initLineChart(waterLineChart) //一周折线图数据 - val currentTime = System.currentTimeMillis() - waterViewModel.waterCountByDay( - "110000", - currentTime.timestampToLastWeekDate(), - currentTime.timestampToDate() - ) + waterViewModel.waterCountByDay(Constant.AREA_ID, startDate, endDate) waterViewModel.areaDataModel.observe(this, { if (it.code == 200) { it.data?.forEachIndexed { i, dataBean -> val entryModel = LineChartEntryModel() - entryModel.lineColor = Constant.COLORS[i].convertColor() + if (i <= differ) { + entryModel.lineColor = Constant.COLORS[i].convertColor() + } entryModel.entryDate = dataBean.date //每个entries都是一条折线 val entries: ArrayList = ArrayList() - for (j in 0 until Constant.ONE_WEEK) { + for (j in 0..differ) { val areaData = it.data!![j].data!![i] entries.add( Entry(j.toFloat(), areaData.count!!.toFloat(), areaData.areaName) diff --git a/app/src/main/java/com/casic/qd/smartwell/view/StatisticsActivity.kt b/app/src/main/java/com/casic/qd/smartwell/view/StatisticsActivity.kt index f6874f9..d6401c8 100644 --- a/app/src/main/java/com/casic/qd/smartwell/view/StatisticsActivity.kt +++ b/app/src/main/java/com/casic/qd/smartwell/view/StatisticsActivity.kt @@ -45,7 +45,7 @@ ChartViewHelper.setPieChartData(totalPieChart, pieEntries) //初始化折线图 - ChartViewHelper.initLineChart(totalLineChart, Constant.YEARS.last().toFloat()) + ChartViewHelper.initLineChart(totalLineChart) //TODO 这是模拟数据 for (i in Constant.YEARS) { valveEntries.add( 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 7dcbc22..216e7cc 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 @@ -15,10 +15,26 @@ return dateFormat.format(calendar.time) } +fun Long.timestampToLastMonthDate(): 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) - 29) + return dateFormat.format(calendar.time) +} fun Long.timestampToDate(): String = SimpleDateFormat("yyyy-MM-dd", Locale.CHINA).format(Date(this)) +/** + * 获取当前月份所在季度 + * */ +fun Long.getQuarterOfYear(): Int { + val calendar = Calendar.getInstance() + calendar.time = Date(this) + return calendar.get(Calendar.MONTH) / 3 + 1 +} + fun Long.isEarlierThanStart(date: String): Boolean { if (date.isBlank()) { return false diff --git a/app/src/main/java/com/casic/qd/smartwell/extensions/String.kt b/app/src/main/java/com/casic/qd/smartwell/extensions/String.kt index 1e5a885..19808ef 100644 --- a/app/src/main/java/com/casic/qd/smartwell/extensions/String.kt +++ b/app/src/main/java/com/casic/qd/smartwell/extensions/String.kt @@ -11,6 +11,9 @@ import com.google.gson.reflect.TypeToken import com.qmuiteam.qmui.util.QMUIDisplayHelper import org.json.JSONObject +import java.text.ParseException +import java.text.SimpleDateFormat +import java.util.* /** * String扩展方法 @@ -58,3 +61,18 @@ val split = this.split("-") return split[1] + "/" + split[2] } + +fun String.differ(endDate: String): Int { + val dateFormat = SimpleDateFormat("yyyy-MM-dd", Locale.CHINA) + try { + val star: Date = dateFormat.parse(this) //开始时间 + val endDay: Date = dateFormat.parse(endDate) //结束时间 + val starTime = star.time + val endTime = endDay.time + val num = endTime - starTime //时间戳相差的毫秒数 + return (num / 24 / 60 / 60 / 1000).toInt() + } catch (e: ParseException) { + e.printStackTrace() + } + return 0 +} 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 7c6263a..8daf653 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 @@ -30,10 +30,10 @@ * @email 290677893@qq.com */ object ChartViewHelper { - private const val Tag = "ChartViewHelper" + private const val kTag = "ChartViewHelper" private val decimalFormat = DecimalFormat("##0") - fun initLineChart(chart: LineChart, axisMaximum: Float) { + fun initLineChart(chart: LineChart) { chart.setDrawGridBackground(false) chart.setDrawBorders(false) //设置样式 @@ -47,7 +47,6 @@ val xAxis: XAxis = chart.xAxis xAxis.textColor = R.color.mainTextColor.convertColor() xAxis.textSize = 10f - xAxis.axisMaximum = axisMaximum xAxis.setDrawLabels(true) //绘制标签 指x轴上的对应数值 xAxis.setDrawAxisLine(true) //是否绘制轴线 xAxis.setDrawGridLines(false) //设置x轴上每个点对应的线 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 378a6e0..ecb931e 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 @@ -40,4 +40,5 @@ const val PASSWORD = "password" const val USER_DETAIL_MODEL = "userDetailModel" const val CANCEL_ALARM_ACTION = "cancelAlarm" + const val AREA_ID = "110000" } \ No newline at end of file diff --git a/app/src/main/java/com/casic/qd/smartwell/view/ExpandedActivity.kt b/app/src/main/java/com/casic/qd/smartwell/view/ExpandedActivity.kt index 14763e8..5bd2f91 100644 --- a/app/src/main/java/com/casic/qd/smartwell/view/ExpandedActivity.kt +++ b/app/src/main/java/com/casic/qd/smartwell/view/ExpandedActivity.kt @@ -1,22 +1,29 @@ package com.casic.qd.smartwell.view +import android.view.View +import android.widget.AdapterView import androidx.lifecycle.ViewModelProvider import com.casic.qd.smartwell.R import com.casic.qd.smartwell.base.BaseActivity -import com.casic.qd.smartwell.extensions.convertColor -import com.casic.qd.smartwell.extensions.timestampToDate -import com.casic.qd.smartwell.extensions.timestampToLastWeekDate +import com.casic.qd.smartwell.extensions.* import com.casic.qd.smartwell.model.LineChartEntryModel import com.casic.qd.smartwell.utils.ChartViewHelper import com.casic.qd.smartwell.utils.Constant import com.casic.qd.smartwell.vm.WaterStatisticsViewModel import com.github.mikephil.charting.data.Entry -import kotlinx.android.synthetic.main.activity_main.* +import kotlinx.android.synthetic.main.activity_expanded.* +import kotlinx.android.synthetic.main.activity_main.waterLineChart +import java.util.* +import kotlin.collections.ArrayList + class ExpandedActivity : BaseActivity() { + private val kTag = "ExpandedActivity" private lateinit var waterViewModel: WaterStatisticsViewModel private val entryModels: MutableList = ArrayList() + private var startDate = "" + private var differ = 0 override fun initLayoutView(): Int = R.layout.activity_expanded @@ -26,28 +33,80 @@ override fun initData() { waterViewModel = ViewModelProvider(this).get(WaterStatisticsViewModel::class.java) - //初始化折线图,X轴从0开始 - ChartViewHelper.initLineChart(waterLineChart, (Constant.ONE_WEEK - 1).toFloat()) } override fun initEvent() { - //一周折线图数据 - val currentTime = System.currentTimeMillis() - waterViewModel.waterCountByDay( - "110000", - currentTime.timestampToLastWeekDate(), - currentTime.timestampToDate() - ) + //默认选择近7天的数据 + periodSpinner.setSelection(3) + periodSpinner.onItemSelectedListener = object : AdapterView.OnItemSelectedListener { + override fun onItemSelected( + parent: AdapterView<*>?, view: View?, + position: Int, id: Long + ) { + val time = System.currentTimeMillis() + val calendar = Calendar.getInstance() + val year: Int = calendar.get(Calendar.YEAR) + when (position) { + 0 -> { + //本年度 + startDate = "$year-01-01" + } + 1 -> { + //本季度 + when (time.getQuarterOfYear()) { + 1 -> { + startDate = "$year-01-01" + } + 2 -> { + startDate = "$year-04-01" + } + 3 -> { + startDate = "$year-07-01" + } + 4 -> { + startDate = "$year-10-01" + } + } + } + 2 -> { + //近30日 + startDate = time.timestampToLastMonthDate() + } + 3 -> { + //近7日 + startDate = time.timestampToLastWeekDate() + } + 4 -> { + //今日 + startDate = time.timestampToDate() + } + 5 -> { + + } + } + //初始化折线图,X轴从0开始 + differ = startDate.differ(time.timestampToDate()) + ChartViewHelper.initLineChart(waterLineChart) + waterViewModel.waterCountByDay(Constant.AREA_ID, startDate, time.timestampToDate()) + } + + override fun onNothingSelected(parent: AdapterView<*>?) { + + } + } + waterViewModel.areaDataModel.observe(this, { if (it.code == 200) { it.data?.forEachIndexed { i, dataBean -> val entryModel = LineChartEntryModel() - entryModel.lineColor = Constant.COLORS[i].convertColor() + if (i <= differ) { + entryModel.lineColor = Constant.COLORS[i].convertColor() + } entryModel.entryDate = dataBean.date - //每个entries都是一条折线 +// //每个entries都是一条折线 val entries: ArrayList = ArrayList() - for (j in 0 until Constant.ONE_WEEK) { + for (j in 0..differ) { val areaData = it.data!![j].data!![i] entries.add( Entry(j.toFloat(), areaData.count!!.toFloat(), areaData.areaName) @@ -55,6 +114,23 @@ } entryModel.entryList = entries entryModels.add(entryModel) + + /** + * i的范围是[0,differ] + * */ + //每个entries都是一条折线 +// val entries: ArrayList = ArrayList() +// for (k in dataBean.data!!.indices) { +// /** +// * i的范围是[0,dataBean.data!!.indices] +// * */ +// val areaData = dataBean.data!![k] +// entries.add( +// Entry(k.toFloat(), areaData.count!!.toFloat(), areaData.areaName) +// ) +// } +// entryModel.entryList = entries +// entryModels.add(entryModel) } ChartViewHelper.setLineChartData(waterLineChart, entryModels) } 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 56ea003..570df4e 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 @@ -86,7 +86,7 @@ }) //Banner点击事件 setOnBannerListener { data, _ -> - startActivity(Intent(this@MainActivity, WebsiteActivity::class.java)) + navigatePageTo(WebsiteActivity::class.java) } } @@ -107,9 +107,6 @@ //初始化vm waterViewModel = ViewModelProvider(this).get(WaterStatisticsViewModel::class.java) - - //初始化折线图,X轴从0开始 - ChartViewHelper.initLineChart(waterLineChart, (Constant.ONE_WEEK - 1).toFloat()) weakReferenceHandler = WeakReferenceHandler(this) } @@ -125,23 +122,26 @@ navigatePageTo(AlarmManagementActivity::class.java) } + //初始化折线图,X轴从0开始 + val time = System.currentTimeMillis() + val startDate = time.timestampToLastWeekDate() + val endDate = time.timestampToDate() + val differ = startDate.differ(endDate) + ChartViewHelper.initLineChart(waterLineChart) //一周折线图数据 - val currentTime = System.currentTimeMillis() - waterViewModel.waterCountByDay( - "110000", - currentTime.timestampToLastWeekDate(), - currentTime.timestampToDate() - ) + waterViewModel.waterCountByDay(Constant.AREA_ID, startDate, endDate) waterViewModel.areaDataModel.observe(this, { if (it.code == 200) { it.data?.forEachIndexed { i, dataBean -> val entryModel = LineChartEntryModel() - entryModel.lineColor = Constant.COLORS[i].convertColor() + if (i <= differ) { + entryModel.lineColor = Constant.COLORS[i].convertColor() + } entryModel.entryDate = dataBean.date //每个entries都是一条折线 val entries: ArrayList = ArrayList() - for (j in 0 until Constant.ONE_WEEK) { + for (j in 0..differ) { val areaData = it.data!![j].data!![i] entries.add( Entry(j.toFloat(), areaData.count!!.toFloat(), areaData.areaName) diff --git a/app/src/main/java/com/casic/qd/smartwell/view/StatisticsActivity.kt b/app/src/main/java/com/casic/qd/smartwell/view/StatisticsActivity.kt index f6874f9..d6401c8 100644 --- a/app/src/main/java/com/casic/qd/smartwell/view/StatisticsActivity.kt +++ b/app/src/main/java/com/casic/qd/smartwell/view/StatisticsActivity.kt @@ -45,7 +45,7 @@ ChartViewHelper.setPieChartData(totalPieChart, pieEntries) //初始化折线图 - ChartViewHelper.initLineChart(totalLineChart, Constant.YEARS.last().toFloat()) + ChartViewHelper.initLineChart(totalLineChart) //TODO 这是模拟数据 for (i in Constant.YEARS) { valveEntries.add( diff --git a/app/src/main/java/com/casic/qd/smartwell/vm/AlarmContentViewModel.kt b/app/src/main/java/com/casic/qd/smartwell/vm/AlarmContentViewModel.kt index 8c1d4e3..b12b37f 100644 --- a/app/src/main/java/com/casic/qd/smartwell/vm/AlarmContentViewModel.kt +++ b/app/src/main/java/com/casic/qd/smartwell/vm/AlarmContentViewModel.kt @@ -1,5 +1,6 @@ package com.casic.qd.smartwell.vm +import android.util.Log import androidx.lifecycle.MutableLiveData import com.casic.qd.smartwell.base.BaseViewModel import com.casic.qd.smartwell.extensions.launch @@ -13,6 +14,7 @@ class AlarmContentViewModel : BaseViewModel() { + private val kTag = "AlarmContentViewModel" private val gson = Gson() val contentModel = MutableLiveData() @@ -27,6 +29,7 @@ response.toErrorMessage().show() } }, { + Log.e(kTag, it.toString(), it) "服务器异常".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 7dcbc22..216e7cc 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 @@ -15,10 +15,26 @@ return dateFormat.format(calendar.time) } +fun Long.timestampToLastMonthDate(): 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) - 29) + return dateFormat.format(calendar.time) +} fun Long.timestampToDate(): String = SimpleDateFormat("yyyy-MM-dd", Locale.CHINA).format(Date(this)) +/** + * 获取当前月份所在季度 + * */ +fun Long.getQuarterOfYear(): Int { + val calendar = Calendar.getInstance() + calendar.time = Date(this) + return calendar.get(Calendar.MONTH) / 3 + 1 +} + fun Long.isEarlierThanStart(date: String): Boolean { if (date.isBlank()) { return false diff --git a/app/src/main/java/com/casic/qd/smartwell/extensions/String.kt b/app/src/main/java/com/casic/qd/smartwell/extensions/String.kt index 1e5a885..19808ef 100644 --- a/app/src/main/java/com/casic/qd/smartwell/extensions/String.kt +++ b/app/src/main/java/com/casic/qd/smartwell/extensions/String.kt @@ -11,6 +11,9 @@ import com.google.gson.reflect.TypeToken import com.qmuiteam.qmui.util.QMUIDisplayHelper import org.json.JSONObject +import java.text.ParseException +import java.text.SimpleDateFormat +import java.util.* /** * String扩展方法 @@ -58,3 +61,18 @@ val split = this.split("-") return split[1] + "/" + split[2] } + +fun String.differ(endDate: String): Int { + val dateFormat = SimpleDateFormat("yyyy-MM-dd", Locale.CHINA) + try { + val star: Date = dateFormat.parse(this) //开始时间 + val endDay: Date = dateFormat.parse(endDate) //结束时间 + val starTime = star.time + val endTime = endDay.time + val num = endTime - starTime //时间戳相差的毫秒数 + return (num / 24 / 60 / 60 / 1000).toInt() + } catch (e: ParseException) { + e.printStackTrace() + } + return 0 +} 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 7c6263a..8daf653 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 @@ -30,10 +30,10 @@ * @email 290677893@qq.com */ object ChartViewHelper { - private const val Tag = "ChartViewHelper" + private const val kTag = "ChartViewHelper" private val decimalFormat = DecimalFormat("##0") - fun initLineChart(chart: LineChart, axisMaximum: Float) { + fun initLineChart(chart: LineChart) { chart.setDrawGridBackground(false) chart.setDrawBorders(false) //设置样式 @@ -47,7 +47,6 @@ val xAxis: XAxis = chart.xAxis xAxis.textColor = R.color.mainTextColor.convertColor() xAxis.textSize = 10f - xAxis.axisMaximum = axisMaximum xAxis.setDrawLabels(true) //绘制标签 指x轴上的对应数值 xAxis.setDrawAxisLine(true) //是否绘制轴线 xAxis.setDrawGridLines(false) //设置x轴上每个点对应的线 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 378a6e0..ecb931e 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 @@ -40,4 +40,5 @@ const val PASSWORD = "password" const val USER_DETAIL_MODEL = "userDetailModel" const val CANCEL_ALARM_ACTION = "cancelAlarm" + const val AREA_ID = "110000" } \ No newline at end of file diff --git a/app/src/main/java/com/casic/qd/smartwell/view/ExpandedActivity.kt b/app/src/main/java/com/casic/qd/smartwell/view/ExpandedActivity.kt index 14763e8..5bd2f91 100644 --- a/app/src/main/java/com/casic/qd/smartwell/view/ExpandedActivity.kt +++ b/app/src/main/java/com/casic/qd/smartwell/view/ExpandedActivity.kt @@ -1,22 +1,29 @@ package com.casic.qd.smartwell.view +import android.view.View +import android.widget.AdapterView import androidx.lifecycle.ViewModelProvider import com.casic.qd.smartwell.R import com.casic.qd.smartwell.base.BaseActivity -import com.casic.qd.smartwell.extensions.convertColor -import com.casic.qd.smartwell.extensions.timestampToDate -import com.casic.qd.smartwell.extensions.timestampToLastWeekDate +import com.casic.qd.smartwell.extensions.* import com.casic.qd.smartwell.model.LineChartEntryModel import com.casic.qd.smartwell.utils.ChartViewHelper import com.casic.qd.smartwell.utils.Constant import com.casic.qd.smartwell.vm.WaterStatisticsViewModel import com.github.mikephil.charting.data.Entry -import kotlinx.android.synthetic.main.activity_main.* +import kotlinx.android.synthetic.main.activity_expanded.* +import kotlinx.android.synthetic.main.activity_main.waterLineChart +import java.util.* +import kotlin.collections.ArrayList + class ExpandedActivity : BaseActivity() { + private val kTag = "ExpandedActivity" private lateinit var waterViewModel: WaterStatisticsViewModel private val entryModels: MutableList = ArrayList() + private var startDate = "" + private var differ = 0 override fun initLayoutView(): Int = R.layout.activity_expanded @@ -26,28 +33,80 @@ override fun initData() { waterViewModel = ViewModelProvider(this).get(WaterStatisticsViewModel::class.java) - //初始化折线图,X轴从0开始 - ChartViewHelper.initLineChart(waterLineChart, (Constant.ONE_WEEK - 1).toFloat()) } override fun initEvent() { - //一周折线图数据 - val currentTime = System.currentTimeMillis() - waterViewModel.waterCountByDay( - "110000", - currentTime.timestampToLastWeekDate(), - currentTime.timestampToDate() - ) + //默认选择近7天的数据 + periodSpinner.setSelection(3) + periodSpinner.onItemSelectedListener = object : AdapterView.OnItemSelectedListener { + override fun onItemSelected( + parent: AdapterView<*>?, view: View?, + position: Int, id: Long + ) { + val time = System.currentTimeMillis() + val calendar = Calendar.getInstance() + val year: Int = calendar.get(Calendar.YEAR) + when (position) { + 0 -> { + //本年度 + startDate = "$year-01-01" + } + 1 -> { + //本季度 + when (time.getQuarterOfYear()) { + 1 -> { + startDate = "$year-01-01" + } + 2 -> { + startDate = "$year-04-01" + } + 3 -> { + startDate = "$year-07-01" + } + 4 -> { + startDate = "$year-10-01" + } + } + } + 2 -> { + //近30日 + startDate = time.timestampToLastMonthDate() + } + 3 -> { + //近7日 + startDate = time.timestampToLastWeekDate() + } + 4 -> { + //今日 + startDate = time.timestampToDate() + } + 5 -> { + + } + } + //初始化折线图,X轴从0开始 + differ = startDate.differ(time.timestampToDate()) + ChartViewHelper.initLineChart(waterLineChart) + waterViewModel.waterCountByDay(Constant.AREA_ID, startDate, time.timestampToDate()) + } + + override fun onNothingSelected(parent: AdapterView<*>?) { + + } + } + waterViewModel.areaDataModel.observe(this, { if (it.code == 200) { it.data?.forEachIndexed { i, dataBean -> val entryModel = LineChartEntryModel() - entryModel.lineColor = Constant.COLORS[i].convertColor() + if (i <= differ) { + entryModel.lineColor = Constant.COLORS[i].convertColor() + } entryModel.entryDate = dataBean.date - //每个entries都是一条折线 +// //每个entries都是一条折线 val entries: ArrayList = ArrayList() - for (j in 0 until Constant.ONE_WEEK) { + for (j in 0..differ) { val areaData = it.data!![j].data!![i] entries.add( Entry(j.toFloat(), areaData.count!!.toFloat(), areaData.areaName) @@ -55,6 +114,23 @@ } entryModel.entryList = entries entryModels.add(entryModel) + + /** + * i的范围是[0,differ] + * */ + //每个entries都是一条折线 +// val entries: ArrayList = ArrayList() +// for (k in dataBean.data!!.indices) { +// /** +// * i的范围是[0,dataBean.data!!.indices] +// * */ +// val areaData = dataBean.data!![k] +// entries.add( +// Entry(k.toFloat(), areaData.count!!.toFloat(), areaData.areaName) +// ) +// } +// entryModel.entryList = entries +// entryModels.add(entryModel) } ChartViewHelper.setLineChartData(waterLineChart, entryModels) } 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 56ea003..570df4e 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 @@ -86,7 +86,7 @@ }) //Banner点击事件 setOnBannerListener { data, _ -> - startActivity(Intent(this@MainActivity, WebsiteActivity::class.java)) + navigatePageTo(WebsiteActivity::class.java) } } @@ -107,9 +107,6 @@ //初始化vm waterViewModel = ViewModelProvider(this).get(WaterStatisticsViewModel::class.java) - - //初始化折线图,X轴从0开始 - ChartViewHelper.initLineChart(waterLineChart, (Constant.ONE_WEEK - 1).toFloat()) weakReferenceHandler = WeakReferenceHandler(this) } @@ -125,23 +122,26 @@ navigatePageTo(AlarmManagementActivity::class.java) } + //初始化折线图,X轴从0开始 + val time = System.currentTimeMillis() + val startDate = time.timestampToLastWeekDate() + val endDate = time.timestampToDate() + val differ = startDate.differ(endDate) + ChartViewHelper.initLineChart(waterLineChart) //一周折线图数据 - val currentTime = System.currentTimeMillis() - waterViewModel.waterCountByDay( - "110000", - currentTime.timestampToLastWeekDate(), - currentTime.timestampToDate() - ) + waterViewModel.waterCountByDay(Constant.AREA_ID, startDate, endDate) waterViewModel.areaDataModel.observe(this, { if (it.code == 200) { it.data?.forEachIndexed { i, dataBean -> val entryModel = LineChartEntryModel() - entryModel.lineColor = Constant.COLORS[i].convertColor() + if (i <= differ) { + entryModel.lineColor = Constant.COLORS[i].convertColor() + } entryModel.entryDate = dataBean.date //每个entries都是一条折线 val entries: ArrayList = ArrayList() - for (j in 0 until Constant.ONE_WEEK) { + for (j in 0..differ) { val areaData = it.data!![j].data!![i] entries.add( Entry(j.toFloat(), areaData.count!!.toFloat(), areaData.areaName) diff --git a/app/src/main/java/com/casic/qd/smartwell/view/StatisticsActivity.kt b/app/src/main/java/com/casic/qd/smartwell/view/StatisticsActivity.kt index f6874f9..d6401c8 100644 --- a/app/src/main/java/com/casic/qd/smartwell/view/StatisticsActivity.kt +++ b/app/src/main/java/com/casic/qd/smartwell/view/StatisticsActivity.kt @@ -45,7 +45,7 @@ ChartViewHelper.setPieChartData(totalPieChart, pieEntries) //初始化折线图 - ChartViewHelper.initLineChart(totalLineChart, Constant.YEARS.last().toFloat()) + ChartViewHelper.initLineChart(totalLineChart) //TODO 这是模拟数据 for (i in Constant.YEARS) { valveEntries.add( diff --git a/app/src/main/java/com/casic/qd/smartwell/vm/AlarmContentViewModel.kt b/app/src/main/java/com/casic/qd/smartwell/vm/AlarmContentViewModel.kt index 8c1d4e3..b12b37f 100644 --- a/app/src/main/java/com/casic/qd/smartwell/vm/AlarmContentViewModel.kt +++ b/app/src/main/java/com/casic/qd/smartwell/vm/AlarmContentViewModel.kt @@ -1,5 +1,6 @@ package com.casic.qd.smartwell.vm +import android.util.Log import androidx.lifecycle.MutableLiveData import com.casic.qd.smartwell.base.BaseViewModel import com.casic.qd.smartwell.extensions.launch @@ -13,6 +14,7 @@ class AlarmContentViewModel : BaseViewModel() { + private val kTag = "AlarmContentViewModel" private val gson = Gson() val contentModel = MutableLiveData() @@ -27,6 +29,7 @@ response.toErrorMessage().show() } }, { + Log.e(kTag, it.toString(), it) "服务器异常".show() }) } \ No newline at end of file diff --git a/app/src/main/java/com/casic/qd/smartwell/vm/AlarmListViewModel.kt b/app/src/main/java/com/casic/qd/smartwell/vm/AlarmListViewModel.kt index 2f41249..58cecfa 100644 --- a/app/src/main/java/com/casic/qd/smartwell/vm/AlarmListViewModel.kt +++ b/app/src/main/java/com/casic/qd/smartwell/vm/AlarmListViewModel.kt @@ -1,5 +1,6 @@ package com.casic.qd.smartwell.vm +import android.util.Log import androidx.lifecycle.MutableLiveData import com.casic.qd.smartwell.base.BaseViewModel import com.casic.qd.smartwell.extensions.launch @@ -13,6 +14,7 @@ class AlarmListViewModel : BaseViewModel() { + private val kTag = "AlarmListViewModel" private val gson = Gson() val listModel = MutableLiveData() @@ -45,6 +47,7 @@ response.toErrorMessage().show() } }, { + Log.e(kTag, it.toString(), it) "服务器异常".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 7dcbc22..216e7cc 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 @@ -15,10 +15,26 @@ return dateFormat.format(calendar.time) } +fun Long.timestampToLastMonthDate(): 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) - 29) + return dateFormat.format(calendar.time) +} fun Long.timestampToDate(): String = SimpleDateFormat("yyyy-MM-dd", Locale.CHINA).format(Date(this)) +/** + * 获取当前月份所在季度 + * */ +fun Long.getQuarterOfYear(): Int { + val calendar = Calendar.getInstance() + calendar.time = Date(this) + return calendar.get(Calendar.MONTH) / 3 + 1 +} + fun Long.isEarlierThanStart(date: String): Boolean { if (date.isBlank()) { return false diff --git a/app/src/main/java/com/casic/qd/smartwell/extensions/String.kt b/app/src/main/java/com/casic/qd/smartwell/extensions/String.kt index 1e5a885..19808ef 100644 --- a/app/src/main/java/com/casic/qd/smartwell/extensions/String.kt +++ b/app/src/main/java/com/casic/qd/smartwell/extensions/String.kt @@ -11,6 +11,9 @@ import com.google.gson.reflect.TypeToken import com.qmuiteam.qmui.util.QMUIDisplayHelper import org.json.JSONObject +import java.text.ParseException +import java.text.SimpleDateFormat +import java.util.* /** * String扩展方法 @@ -58,3 +61,18 @@ val split = this.split("-") return split[1] + "/" + split[2] } + +fun String.differ(endDate: String): Int { + val dateFormat = SimpleDateFormat("yyyy-MM-dd", Locale.CHINA) + try { + val star: Date = dateFormat.parse(this) //开始时间 + val endDay: Date = dateFormat.parse(endDate) //结束时间 + val starTime = star.time + val endTime = endDay.time + val num = endTime - starTime //时间戳相差的毫秒数 + return (num / 24 / 60 / 60 / 1000).toInt() + } catch (e: ParseException) { + e.printStackTrace() + } + return 0 +} 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 7c6263a..8daf653 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 @@ -30,10 +30,10 @@ * @email 290677893@qq.com */ object ChartViewHelper { - private const val Tag = "ChartViewHelper" + private const val kTag = "ChartViewHelper" private val decimalFormat = DecimalFormat("##0") - fun initLineChart(chart: LineChart, axisMaximum: Float) { + fun initLineChart(chart: LineChart) { chart.setDrawGridBackground(false) chart.setDrawBorders(false) //设置样式 @@ -47,7 +47,6 @@ val xAxis: XAxis = chart.xAxis xAxis.textColor = R.color.mainTextColor.convertColor() xAxis.textSize = 10f - xAxis.axisMaximum = axisMaximum xAxis.setDrawLabels(true) //绘制标签 指x轴上的对应数值 xAxis.setDrawAxisLine(true) //是否绘制轴线 xAxis.setDrawGridLines(false) //设置x轴上每个点对应的线 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 378a6e0..ecb931e 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 @@ -40,4 +40,5 @@ const val PASSWORD = "password" const val USER_DETAIL_MODEL = "userDetailModel" const val CANCEL_ALARM_ACTION = "cancelAlarm" + const val AREA_ID = "110000" } \ No newline at end of file diff --git a/app/src/main/java/com/casic/qd/smartwell/view/ExpandedActivity.kt b/app/src/main/java/com/casic/qd/smartwell/view/ExpandedActivity.kt index 14763e8..5bd2f91 100644 --- a/app/src/main/java/com/casic/qd/smartwell/view/ExpandedActivity.kt +++ b/app/src/main/java/com/casic/qd/smartwell/view/ExpandedActivity.kt @@ -1,22 +1,29 @@ package com.casic.qd.smartwell.view +import android.view.View +import android.widget.AdapterView import androidx.lifecycle.ViewModelProvider import com.casic.qd.smartwell.R import com.casic.qd.smartwell.base.BaseActivity -import com.casic.qd.smartwell.extensions.convertColor -import com.casic.qd.smartwell.extensions.timestampToDate -import com.casic.qd.smartwell.extensions.timestampToLastWeekDate +import com.casic.qd.smartwell.extensions.* import com.casic.qd.smartwell.model.LineChartEntryModel import com.casic.qd.smartwell.utils.ChartViewHelper import com.casic.qd.smartwell.utils.Constant import com.casic.qd.smartwell.vm.WaterStatisticsViewModel import com.github.mikephil.charting.data.Entry -import kotlinx.android.synthetic.main.activity_main.* +import kotlinx.android.synthetic.main.activity_expanded.* +import kotlinx.android.synthetic.main.activity_main.waterLineChart +import java.util.* +import kotlin.collections.ArrayList + class ExpandedActivity : BaseActivity() { + private val kTag = "ExpandedActivity" private lateinit var waterViewModel: WaterStatisticsViewModel private val entryModels: MutableList = ArrayList() + private var startDate = "" + private var differ = 0 override fun initLayoutView(): Int = R.layout.activity_expanded @@ -26,28 +33,80 @@ override fun initData() { waterViewModel = ViewModelProvider(this).get(WaterStatisticsViewModel::class.java) - //初始化折线图,X轴从0开始 - ChartViewHelper.initLineChart(waterLineChart, (Constant.ONE_WEEK - 1).toFloat()) } override fun initEvent() { - //一周折线图数据 - val currentTime = System.currentTimeMillis() - waterViewModel.waterCountByDay( - "110000", - currentTime.timestampToLastWeekDate(), - currentTime.timestampToDate() - ) + //默认选择近7天的数据 + periodSpinner.setSelection(3) + periodSpinner.onItemSelectedListener = object : AdapterView.OnItemSelectedListener { + override fun onItemSelected( + parent: AdapterView<*>?, view: View?, + position: Int, id: Long + ) { + val time = System.currentTimeMillis() + val calendar = Calendar.getInstance() + val year: Int = calendar.get(Calendar.YEAR) + when (position) { + 0 -> { + //本年度 + startDate = "$year-01-01" + } + 1 -> { + //本季度 + when (time.getQuarterOfYear()) { + 1 -> { + startDate = "$year-01-01" + } + 2 -> { + startDate = "$year-04-01" + } + 3 -> { + startDate = "$year-07-01" + } + 4 -> { + startDate = "$year-10-01" + } + } + } + 2 -> { + //近30日 + startDate = time.timestampToLastMonthDate() + } + 3 -> { + //近7日 + startDate = time.timestampToLastWeekDate() + } + 4 -> { + //今日 + startDate = time.timestampToDate() + } + 5 -> { + + } + } + //初始化折线图,X轴从0开始 + differ = startDate.differ(time.timestampToDate()) + ChartViewHelper.initLineChart(waterLineChart) + waterViewModel.waterCountByDay(Constant.AREA_ID, startDate, time.timestampToDate()) + } + + override fun onNothingSelected(parent: AdapterView<*>?) { + + } + } + waterViewModel.areaDataModel.observe(this, { if (it.code == 200) { it.data?.forEachIndexed { i, dataBean -> val entryModel = LineChartEntryModel() - entryModel.lineColor = Constant.COLORS[i].convertColor() + if (i <= differ) { + entryModel.lineColor = Constant.COLORS[i].convertColor() + } entryModel.entryDate = dataBean.date - //每个entries都是一条折线 +// //每个entries都是一条折线 val entries: ArrayList = ArrayList() - for (j in 0 until Constant.ONE_WEEK) { + for (j in 0..differ) { val areaData = it.data!![j].data!![i] entries.add( Entry(j.toFloat(), areaData.count!!.toFloat(), areaData.areaName) @@ -55,6 +114,23 @@ } entryModel.entryList = entries entryModels.add(entryModel) + + /** + * i的范围是[0,differ] + * */ + //每个entries都是一条折线 +// val entries: ArrayList = ArrayList() +// for (k in dataBean.data!!.indices) { +// /** +// * i的范围是[0,dataBean.data!!.indices] +// * */ +// val areaData = dataBean.data!![k] +// entries.add( +// Entry(k.toFloat(), areaData.count!!.toFloat(), areaData.areaName) +// ) +// } +// entryModel.entryList = entries +// entryModels.add(entryModel) } ChartViewHelper.setLineChartData(waterLineChart, entryModels) } 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 56ea003..570df4e 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 @@ -86,7 +86,7 @@ }) //Banner点击事件 setOnBannerListener { data, _ -> - startActivity(Intent(this@MainActivity, WebsiteActivity::class.java)) + navigatePageTo(WebsiteActivity::class.java) } } @@ -107,9 +107,6 @@ //初始化vm waterViewModel = ViewModelProvider(this).get(WaterStatisticsViewModel::class.java) - - //初始化折线图,X轴从0开始 - ChartViewHelper.initLineChart(waterLineChart, (Constant.ONE_WEEK - 1).toFloat()) weakReferenceHandler = WeakReferenceHandler(this) } @@ -125,23 +122,26 @@ navigatePageTo(AlarmManagementActivity::class.java) } + //初始化折线图,X轴从0开始 + val time = System.currentTimeMillis() + val startDate = time.timestampToLastWeekDate() + val endDate = time.timestampToDate() + val differ = startDate.differ(endDate) + ChartViewHelper.initLineChart(waterLineChart) //一周折线图数据 - val currentTime = System.currentTimeMillis() - waterViewModel.waterCountByDay( - "110000", - currentTime.timestampToLastWeekDate(), - currentTime.timestampToDate() - ) + waterViewModel.waterCountByDay(Constant.AREA_ID, startDate, endDate) waterViewModel.areaDataModel.observe(this, { if (it.code == 200) { it.data?.forEachIndexed { i, dataBean -> val entryModel = LineChartEntryModel() - entryModel.lineColor = Constant.COLORS[i].convertColor() + if (i <= differ) { + entryModel.lineColor = Constant.COLORS[i].convertColor() + } entryModel.entryDate = dataBean.date //每个entries都是一条折线 val entries: ArrayList = ArrayList() - for (j in 0 until Constant.ONE_WEEK) { + for (j in 0..differ) { val areaData = it.data!![j].data!![i] entries.add( Entry(j.toFloat(), areaData.count!!.toFloat(), areaData.areaName) diff --git a/app/src/main/java/com/casic/qd/smartwell/view/StatisticsActivity.kt b/app/src/main/java/com/casic/qd/smartwell/view/StatisticsActivity.kt index f6874f9..d6401c8 100644 --- a/app/src/main/java/com/casic/qd/smartwell/view/StatisticsActivity.kt +++ b/app/src/main/java/com/casic/qd/smartwell/view/StatisticsActivity.kt @@ -45,7 +45,7 @@ ChartViewHelper.setPieChartData(totalPieChart, pieEntries) //初始化折线图 - ChartViewHelper.initLineChart(totalLineChart, Constant.YEARS.last().toFloat()) + ChartViewHelper.initLineChart(totalLineChart) //TODO 这是模拟数据 for (i in Constant.YEARS) { valveEntries.add( diff --git a/app/src/main/java/com/casic/qd/smartwell/vm/AlarmContentViewModel.kt b/app/src/main/java/com/casic/qd/smartwell/vm/AlarmContentViewModel.kt index 8c1d4e3..b12b37f 100644 --- a/app/src/main/java/com/casic/qd/smartwell/vm/AlarmContentViewModel.kt +++ b/app/src/main/java/com/casic/qd/smartwell/vm/AlarmContentViewModel.kt @@ -1,5 +1,6 @@ package com.casic.qd.smartwell.vm +import android.util.Log import androidx.lifecycle.MutableLiveData import com.casic.qd.smartwell.base.BaseViewModel import com.casic.qd.smartwell.extensions.launch @@ -13,6 +14,7 @@ class AlarmContentViewModel : BaseViewModel() { + private val kTag = "AlarmContentViewModel" private val gson = Gson() val contentModel = MutableLiveData() @@ -27,6 +29,7 @@ response.toErrorMessage().show() } }, { + Log.e(kTag, it.toString(), it) "服务器异常".show() }) } \ No newline at end of file diff --git a/app/src/main/java/com/casic/qd/smartwell/vm/AlarmListViewModel.kt b/app/src/main/java/com/casic/qd/smartwell/vm/AlarmListViewModel.kt index 2f41249..58cecfa 100644 --- a/app/src/main/java/com/casic/qd/smartwell/vm/AlarmListViewModel.kt +++ b/app/src/main/java/com/casic/qd/smartwell/vm/AlarmListViewModel.kt @@ -1,5 +1,6 @@ package com.casic.qd.smartwell.vm +import android.util.Log import androidx.lifecycle.MutableLiveData import com.casic.qd.smartwell.base.BaseViewModel import com.casic.qd.smartwell.extensions.launch @@ -13,6 +14,7 @@ class AlarmListViewModel : BaseViewModel() { + private val kTag = "AlarmListViewModel" private val gson = Gson() val listModel = MutableLiveData() @@ -45,6 +47,7 @@ response.toErrorMessage().show() } }, { + Log.e(kTag, it.toString(), it) "服务器异常".show() }) } \ No newline at end of file diff --git a/app/src/main/java/com/casic/qd/smartwell/vm/AlarmTypeViewModel.kt b/app/src/main/java/com/casic/qd/smartwell/vm/AlarmTypeViewModel.kt index dcaa579..c98d93c 100644 --- a/app/src/main/java/com/casic/qd/smartwell/vm/AlarmTypeViewModel.kt +++ b/app/src/main/java/com/casic/qd/smartwell/vm/AlarmTypeViewModel.kt @@ -1,5 +1,6 @@ package com.casic.qd.smartwell.vm +import android.util.Log import androidx.lifecycle.MutableLiveData import com.casic.qd.smartwell.base.BaseViewModel import com.casic.qd.smartwell.extensions.launch @@ -13,6 +14,7 @@ class AlarmTypeViewModel : BaseViewModel() { + private val kTag = "AlarmTypeViewModel" private val gson = Gson() val typeModel = MutableLiveData() @@ -27,6 +29,7 @@ response.toErrorMessage().show() } }, { + Log.e(kTag, it.toString(), it) "服务器异常".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 7dcbc22..216e7cc 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 @@ -15,10 +15,26 @@ return dateFormat.format(calendar.time) } +fun Long.timestampToLastMonthDate(): 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) - 29) + return dateFormat.format(calendar.time) +} fun Long.timestampToDate(): String = SimpleDateFormat("yyyy-MM-dd", Locale.CHINA).format(Date(this)) +/** + * 获取当前月份所在季度 + * */ +fun Long.getQuarterOfYear(): Int { + val calendar = Calendar.getInstance() + calendar.time = Date(this) + return calendar.get(Calendar.MONTH) / 3 + 1 +} + fun Long.isEarlierThanStart(date: String): Boolean { if (date.isBlank()) { return false diff --git a/app/src/main/java/com/casic/qd/smartwell/extensions/String.kt b/app/src/main/java/com/casic/qd/smartwell/extensions/String.kt index 1e5a885..19808ef 100644 --- a/app/src/main/java/com/casic/qd/smartwell/extensions/String.kt +++ b/app/src/main/java/com/casic/qd/smartwell/extensions/String.kt @@ -11,6 +11,9 @@ import com.google.gson.reflect.TypeToken import com.qmuiteam.qmui.util.QMUIDisplayHelper import org.json.JSONObject +import java.text.ParseException +import java.text.SimpleDateFormat +import java.util.* /** * String扩展方法 @@ -58,3 +61,18 @@ val split = this.split("-") return split[1] + "/" + split[2] } + +fun String.differ(endDate: String): Int { + val dateFormat = SimpleDateFormat("yyyy-MM-dd", Locale.CHINA) + try { + val star: Date = dateFormat.parse(this) //开始时间 + val endDay: Date = dateFormat.parse(endDate) //结束时间 + val starTime = star.time + val endTime = endDay.time + val num = endTime - starTime //时间戳相差的毫秒数 + return (num / 24 / 60 / 60 / 1000).toInt() + } catch (e: ParseException) { + e.printStackTrace() + } + return 0 +} 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 7c6263a..8daf653 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 @@ -30,10 +30,10 @@ * @email 290677893@qq.com */ object ChartViewHelper { - private const val Tag = "ChartViewHelper" + private const val kTag = "ChartViewHelper" private val decimalFormat = DecimalFormat("##0") - fun initLineChart(chart: LineChart, axisMaximum: Float) { + fun initLineChart(chart: LineChart) { chart.setDrawGridBackground(false) chart.setDrawBorders(false) //设置样式 @@ -47,7 +47,6 @@ val xAxis: XAxis = chart.xAxis xAxis.textColor = R.color.mainTextColor.convertColor() xAxis.textSize = 10f - xAxis.axisMaximum = axisMaximum xAxis.setDrawLabels(true) //绘制标签 指x轴上的对应数值 xAxis.setDrawAxisLine(true) //是否绘制轴线 xAxis.setDrawGridLines(false) //设置x轴上每个点对应的线 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 378a6e0..ecb931e 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 @@ -40,4 +40,5 @@ const val PASSWORD = "password" const val USER_DETAIL_MODEL = "userDetailModel" const val CANCEL_ALARM_ACTION = "cancelAlarm" + const val AREA_ID = "110000" } \ No newline at end of file diff --git a/app/src/main/java/com/casic/qd/smartwell/view/ExpandedActivity.kt b/app/src/main/java/com/casic/qd/smartwell/view/ExpandedActivity.kt index 14763e8..5bd2f91 100644 --- a/app/src/main/java/com/casic/qd/smartwell/view/ExpandedActivity.kt +++ b/app/src/main/java/com/casic/qd/smartwell/view/ExpandedActivity.kt @@ -1,22 +1,29 @@ package com.casic.qd.smartwell.view +import android.view.View +import android.widget.AdapterView import androidx.lifecycle.ViewModelProvider import com.casic.qd.smartwell.R import com.casic.qd.smartwell.base.BaseActivity -import com.casic.qd.smartwell.extensions.convertColor -import com.casic.qd.smartwell.extensions.timestampToDate -import com.casic.qd.smartwell.extensions.timestampToLastWeekDate +import com.casic.qd.smartwell.extensions.* import com.casic.qd.smartwell.model.LineChartEntryModel import com.casic.qd.smartwell.utils.ChartViewHelper import com.casic.qd.smartwell.utils.Constant import com.casic.qd.smartwell.vm.WaterStatisticsViewModel import com.github.mikephil.charting.data.Entry -import kotlinx.android.synthetic.main.activity_main.* +import kotlinx.android.synthetic.main.activity_expanded.* +import kotlinx.android.synthetic.main.activity_main.waterLineChart +import java.util.* +import kotlin.collections.ArrayList + class ExpandedActivity : BaseActivity() { + private val kTag = "ExpandedActivity" private lateinit var waterViewModel: WaterStatisticsViewModel private val entryModels: MutableList = ArrayList() + private var startDate = "" + private var differ = 0 override fun initLayoutView(): Int = R.layout.activity_expanded @@ -26,28 +33,80 @@ override fun initData() { waterViewModel = ViewModelProvider(this).get(WaterStatisticsViewModel::class.java) - //初始化折线图,X轴从0开始 - ChartViewHelper.initLineChart(waterLineChart, (Constant.ONE_WEEK - 1).toFloat()) } override fun initEvent() { - //一周折线图数据 - val currentTime = System.currentTimeMillis() - waterViewModel.waterCountByDay( - "110000", - currentTime.timestampToLastWeekDate(), - currentTime.timestampToDate() - ) + //默认选择近7天的数据 + periodSpinner.setSelection(3) + periodSpinner.onItemSelectedListener = object : AdapterView.OnItemSelectedListener { + override fun onItemSelected( + parent: AdapterView<*>?, view: View?, + position: Int, id: Long + ) { + val time = System.currentTimeMillis() + val calendar = Calendar.getInstance() + val year: Int = calendar.get(Calendar.YEAR) + when (position) { + 0 -> { + //本年度 + startDate = "$year-01-01" + } + 1 -> { + //本季度 + when (time.getQuarterOfYear()) { + 1 -> { + startDate = "$year-01-01" + } + 2 -> { + startDate = "$year-04-01" + } + 3 -> { + startDate = "$year-07-01" + } + 4 -> { + startDate = "$year-10-01" + } + } + } + 2 -> { + //近30日 + startDate = time.timestampToLastMonthDate() + } + 3 -> { + //近7日 + startDate = time.timestampToLastWeekDate() + } + 4 -> { + //今日 + startDate = time.timestampToDate() + } + 5 -> { + + } + } + //初始化折线图,X轴从0开始 + differ = startDate.differ(time.timestampToDate()) + ChartViewHelper.initLineChart(waterLineChart) + waterViewModel.waterCountByDay(Constant.AREA_ID, startDate, time.timestampToDate()) + } + + override fun onNothingSelected(parent: AdapterView<*>?) { + + } + } + waterViewModel.areaDataModel.observe(this, { if (it.code == 200) { it.data?.forEachIndexed { i, dataBean -> val entryModel = LineChartEntryModel() - entryModel.lineColor = Constant.COLORS[i].convertColor() + if (i <= differ) { + entryModel.lineColor = Constant.COLORS[i].convertColor() + } entryModel.entryDate = dataBean.date - //每个entries都是一条折线 +// //每个entries都是一条折线 val entries: ArrayList = ArrayList() - for (j in 0 until Constant.ONE_WEEK) { + for (j in 0..differ) { val areaData = it.data!![j].data!![i] entries.add( Entry(j.toFloat(), areaData.count!!.toFloat(), areaData.areaName) @@ -55,6 +114,23 @@ } entryModel.entryList = entries entryModels.add(entryModel) + + /** + * i的范围是[0,differ] + * */ + //每个entries都是一条折线 +// val entries: ArrayList = ArrayList() +// for (k in dataBean.data!!.indices) { +// /** +// * i的范围是[0,dataBean.data!!.indices] +// * */ +// val areaData = dataBean.data!![k] +// entries.add( +// Entry(k.toFloat(), areaData.count!!.toFloat(), areaData.areaName) +// ) +// } +// entryModel.entryList = entries +// entryModels.add(entryModel) } ChartViewHelper.setLineChartData(waterLineChart, entryModels) } 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 56ea003..570df4e 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 @@ -86,7 +86,7 @@ }) //Banner点击事件 setOnBannerListener { data, _ -> - startActivity(Intent(this@MainActivity, WebsiteActivity::class.java)) + navigatePageTo(WebsiteActivity::class.java) } } @@ -107,9 +107,6 @@ //初始化vm waterViewModel = ViewModelProvider(this).get(WaterStatisticsViewModel::class.java) - - //初始化折线图,X轴从0开始 - ChartViewHelper.initLineChart(waterLineChart, (Constant.ONE_WEEK - 1).toFloat()) weakReferenceHandler = WeakReferenceHandler(this) } @@ -125,23 +122,26 @@ navigatePageTo(AlarmManagementActivity::class.java) } + //初始化折线图,X轴从0开始 + val time = System.currentTimeMillis() + val startDate = time.timestampToLastWeekDate() + val endDate = time.timestampToDate() + val differ = startDate.differ(endDate) + ChartViewHelper.initLineChart(waterLineChart) //一周折线图数据 - val currentTime = System.currentTimeMillis() - waterViewModel.waterCountByDay( - "110000", - currentTime.timestampToLastWeekDate(), - currentTime.timestampToDate() - ) + waterViewModel.waterCountByDay(Constant.AREA_ID, startDate, endDate) waterViewModel.areaDataModel.observe(this, { if (it.code == 200) { it.data?.forEachIndexed { i, dataBean -> val entryModel = LineChartEntryModel() - entryModel.lineColor = Constant.COLORS[i].convertColor() + if (i <= differ) { + entryModel.lineColor = Constant.COLORS[i].convertColor() + } entryModel.entryDate = dataBean.date //每个entries都是一条折线 val entries: ArrayList = ArrayList() - for (j in 0 until Constant.ONE_WEEK) { + for (j in 0..differ) { val areaData = it.data!![j].data!![i] entries.add( Entry(j.toFloat(), areaData.count!!.toFloat(), areaData.areaName) diff --git a/app/src/main/java/com/casic/qd/smartwell/view/StatisticsActivity.kt b/app/src/main/java/com/casic/qd/smartwell/view/StatisticsActivity.kt index f6874f9..d6401c8 100644 --- a/app/src/main/java/com/casic/qd/smartwell/view/StatisticsActivity.kt +++ b/app/src/main/java/com/casic/qd/smartwell/view/StatisticsActivity.kt @@ -45,7 +45,7 @@ ChartViewHelper.setPieChartData(totalPieChart, pieEntries) //初始化折线图 - ChartViewHelper.initLineChart(totalLineChart, Constant.YEARS.last().toFloat()) + ChartViewHelper.initLineChart(totalLineChart) //TODO 这是模拟数据 for (i in Constant.YEARS) { valveEntries.add( diff --git a/app/src/main/java/com/casic/qd/smartwell/vm/AlarmContentViewModel.kt b/app/src/main/java/com/casic/qd/smartwell/vm/AlarmContentViewModel.kt index 8c1d4e3..b12b37f 100644 --- a/app/src/main/java/com/casic/qd/smartwell/vm/AlarmContentViewModel.kt +++ b/app/src/main/java/com/casic/qd/smartwell/vm/AlarmContentViewModel.kt @@ -1,5 +1,6 @@ package com.casic.qd.smartwell.vm +import android.util.Log import androidx.lifecycle.MutableLiveData import com.casic.qd.smartwell.base.BaseViewModel import com.casic.qd.smartwell.extensions.launch @@ -13,6 +14,7 @@ class AlarmContentViewModel : BaseViewModel() { + private val kTag = "AlarmContentViewModel" private val gson = Gson() val contentModel = MutableLiveData() @@ -27,6 +29,7 @@ response.toErrorMessage().show() } }, { + Log.e(kTag, it.toString(), it) "服务器异常".show() }) } \ No newline at end of file diff --git a/app/src/main/java/com/casic/qd/smartwell/vm/AlarmListViewModel.kt b/app/src/main/java/com/casic/qd/smartwell/vm/AlarmListViewModel.kt index 2f41249..58cecfa 100644 --- a/app/src/main/java/com/casic/qd/smartwell/vm/AlarmListViewModel.kt +++ b/app/src/main/java/com/casic/qd/smartwell/vm/AlarmListViewModel.kt @@ -1,5 +1,6 @@ package com.casic.qd.smartwell.vm +import android.util.Log import androidx.lifecycle.MutableLiveData import com.casic.qd.smartwell.base.BaseViewModel import com.casic.qd.smartwell.extensions.launch @@ -13,6 +14,7 @@ class AlarmListViewModel : BaseViewModel() { + private val kTag = "AlarmListViewModel" private val gson = Gson() val listModel = MutableLiveData() @@ -45,6 +47,7 @@ response.toErrorMessage().show() } }, { + Log.e(kTag, it.toString(), it) "服务器异常".show() }) } \ No newline at end of file diff --git a/app/src/main/java/com/casic/qd/smartwell/vm/AlarmTypeViewModel.kt b/app/src/main/java/com/casic/qd/smartwell/vm/AlarmTypeViewModel.kt index dcaa579..c98d93c 100644 --- a/app/src/main/java/com/casic/qd/smartwell/vm/AlarmTypeViewModel.kt +++ b/app/src/main/java/com/casic/qd/smartwell/vm/AlarmTypeViewModel.kt @@ -1,5 +1,6 @@ package com.casic.qd.smartwell.vm +import android.util.Log import androidx.lifecycle.MutableLiveData import com.casic.qd.smartwell.base.BaseViewModel import com.casic.qd.smartwell.extensions.launch @@ -13,6 +14,7 @@ class AlarmTypeViewModel : BaseViewModel() { + private val kTag = "AlarmTypeViewModel" private val gson = Gson() val typeModel = MutableLiveData() @@ -27,6 +29,7 @@ response.toErrorMessage().show() } }, { + Log.e(kTag, it.toString(), it) "服务器异常".show() }) } \ No newline at end of file diff --git a/app/src/main/java/com/casic/qd/smartwell/vm/AreaViewModel.kt b/app/src/main/java/com/casic/qd/smartwell/vm/AreaViewModel.kt index 6d06350..c337e59 100644 --- a/app/src/main/java/com/casic/qd/smartwell/vm/AreaViewModel.kt +++ b/app/src/main/java/com/casic/qd/smartwell/vm/AreaViewModel.kt @@ -1,5 +1,6 @@ package com.casic.qd.smartwell.vm +import android.util.Log import androidx.lifecycle.MutableLiveData import com.casic.qd.smartwell.base.BaseViewModel import com.casic.qd.smartwell.extensions.launch @@ -13,6 +14,7 @@ class AreaViewModel : BaseViewModel() { + private val kTag = "AreaViewModel" private val gson = Gson() val areaModel = MutableLiveData() @@ -27,6 +29,7 @@ response.toErrorMessage().show() } }, { + Log.e(kTag, it.toString(), it) "服务器异常".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 7dcbc22..216e7cc 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 @@ -15,10 +15,26 @@ return dateFormat.format(calendar.time) } +fun Long.timestampToLastMonthDate(): 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) - 29) + return dateFormat.format(calendar.time) +} fun Long.timestampToDate(): String = SimpleDateFormat("yyyy-MM-dd", Locale.CHINA).format(Date(this)) +/** + * 获取当前月份所在季度 + * */ +fun Long.getQuarterOfYear(): Int { + val calendar = Calendar.getInstance() + calendar.time = Date(this) + return calendar.get(Calendar.MONTH) / 3 + 1 +} + fun Long.isEarlierThanStart(date: String): Boolean { if (date.isBlank()) { return false diff --git a/app/src/main/java/com/casic/qd/smartwell/extensions/String.kt b/app/src/main/java/com/casic/qd/smartwell/extensions/String.kt index 1e5a885..19808ef 100644 --- a/app/src/main/java/com/casic/qd/smartwell/extensions/String.kt +++ b/app/src/main/java/com/casic/qd/smartwell/extensions/String.kt @@ -11,6 +11,9 @@ import com.google.gson.reflect.TypeToken import com.qmuiteam.qmui.util.QMUIDisplayHelper import org.json.JSONObject +import java.text.ParseException +import java.text.SimpleDateFormat +import java.util.* /** * String扩展方法 @@ -58,3 +61,18 @@ val split = this.split("-") return split[1] + "/" + split[2] } + +fun String.differ(endDate: String): Int { + val dateFormat = SimpleDateFormat("yyyy-MM-dd", Locale.CHINA) + try { + val star: Date = dateFormat.parse(this) //开始时间 + val endDay: Date = dateFormat.parse(endDate) //结束时间 + val starTime = star.time + val endTime = endDay.time + val num = endTime - starTime //时间戳相差的毫秒数 + return (num / 24 / 60 / 60 / 1000).toInt() + } catch (e: ParseException) { + e.printStackTrace() + } + return 0 +} 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 7c6263a..8daf653 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 @@ -30,10 +30,10 @@ * @email 290677893@qq.com */ object ChartViewHelper { - private const val Tag = "ChartViewHelper" + private const val kTag = "ChartViewHelper" private val decimalFormat = DecimalFormat("##0") - fun initLineChart(chart: LineChart, axisMaximum: Float) { + fun initLineChart(chart: LineChart) { chart.setDrawGridBackground(false) chart.setDrawBorders(false) //设置样式 @@ -47,7 +47,6 @@ val xAxis: XAxis = chart.xAxis xAxis.textColor = R.color.mainTextColor.convertColor() xAxis.textSize = 10f - xAxis.axisMaximum = axisMaximum xAxis.setDrawLabels(true) //绘制标签 指x轴上的对应数值 xAxis.setDrawAxisLine(true) //是否绘制轴线 xAxis.setDrawGridLines(false) //设置x轴上每个点对应的线 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 378a6e0..ecb931e 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 @@ -40,4 +40,5 @@ const val PASSWORD = "password" const val USER_DETAIL_MODEL = "userDetailModel" const val CANCEL_ALARM_ACTION = "cancelAlarm" + const val AREA_ID = "110000" } \ No newline at end of file diff --git a/app/src/main/java/com/casic/qd/smartwell/view/ExpandedActivity.kt b/app/src/main/java/com/casic/qd/smartwell/view/ExpandedActivity.kt index 14763e8..5bd2f91 100644 --- a/app/src/main/java/com/casic/qd/smartwell/view/ExpandedActivity.kt +++ b/app/src/main/java/com/casic/qd/smartwell/view/ExpandedActivity.kt @@ -1,22 +1,29 @@ package com.casic.qd.smartwell.view +import android.view.View +import android.widget.AdapterView import androidx.lifecycle.ViewModelProvider import com.casic.qd.smartwell.R import com.casic.qd.smartwell.base.BaseActivity -import com.casic.qd.smartwell.extensions.convertColor -import com.casic.qd.smartwell.extensions.timestampToDate -import com.casic.qd.smartwell.extensions.timestampToLastWeekDate +import com.casic.qd.smartwell.extensions.* import com.casic.qd.smartwell.model.LineChartEntryModel import com.casic.qd.smartwell.utils.ChartViewHelper import com.casic.qd.smartwell.utils.Constant import com.casic.qd.smartwell.vm.WaterStatisticsViewModel import com.github.mikephil.charting.data.Entry -import kotlinx.android.synthetic.main.activity_main.* +import kotlinx.android.synthetic.main.activity_expanded.* +import kotlinx.android.synthetic.main.activity_main.waterLineChart +import java.util.* +import kotlin.collections.ArrayList + class ExpandedActivity : BaseActivity() { + private val kTag = "ExpandedActivity" private lateinit var waterViewModel: WaterStatisticsViewModel private val entryModels: MutableList = ArrayList() + private var startDate = "" + private var differ = 0 override fun initLayoutView(): Int = R.layout.activity_expanded @@ -26,28 +33,80 @@ override fun initData() { waterViewModel = ViewModelProvider(this).get(WaterStatisticsViewModel::class.java) - //初始化折线图,X轴从0开始 - ChartViewHelper.initLineChart(waterLineChart, (Constant.ONE_WEEK - 1).toFloat()) } override fun initEvent() { - //一周折线图数据 - val currentTime = System.currentTimeMillis() - waterViewModel.waterCountByDay( - "110000", - currentTime.timestampToLastWeekDate(), - currentTime.timestampToDate() - ) + //默认选择近7天的数据 + periodSpinner.setSelection(3) + periodSpinner.onItemSelectedListener = object : AdapterView.OnItemSelectedListener { + override fun onItemSelected( + parent: AdapterView<*>?, view: View?, + position: Int, id: Long + ) { + val time = System.currentTimeMillis() + val calendar = Calendar.getInstance() + val year: Int = calendar.get(Calendar.YEAR) + when (position) { + 0 -> { + //本年度 + startDate = "$year-01-01" + } + 1 -> { + //本季度 + when (time.getQuarterOfYear()) { + 1 -> { + startDate = "$year-01-01" + } + 2 -> { + startDate = "$year-04-01" + } + 3 -> { + startDate = "$year-07-01" + } + 4 -> { + startDate = "$year-10-01" + } + } + } + 2 -> { + //近30日 + startDate = time.timestampToLastMonthDate() + } + 3 -> { + //近7日 + startDate = time.timestampToLastWeekDate() + } + 4 -> { + //今日 + startDate = time.timestampToDate() + } + 5 -> { + + } + } + //初始化折线图,X轴从0开始 + differ = startDate.differ(time.timestampToDate()) + ChartViewHelper.initLineChart(waterLineChart) + waterViewModel.waterCountByDay(Constant.AREA_ID, startDate, time.timestampToDate()) + } + + override fun onNothingSelected(parent: AdapterView<*>?) { + + } + } + waterViewModel.areaDataModel.observe(this, { if (it.code == 200) { it.data?.forEachIndexed { i, dataBean -> val entryModel = LineChartEntryModel() - entryModel.lineColor = Constant.COLORS[i].convertColor() + if (i <= differ) { + entryModel.lineColor = Constant.COLORS[i].convertColor() + } entryModel.entryDate = dataBean.date - //每个entries都是一条折线 +// //每个entries都是一条折线 val entries: ArrayList = ArrayList() - for (j in 0 until Constant.ONE_WEEK) { + for (j in 0..differ) { val areaData = it.data!![j].data!![i] entries.add( Entry(j.toFloat(), areaData.count!!.toFloat(), areaData.areaName) @@ -55,6 +114,23 @@ } entryModel.entryList = entries entryModels.add(entryModel) + + /** + * i的范围是[0,differ] + * */ + //每个entries都是一条折线 +// val entries: ArrayList = ArrayList() +// for (k in dataBean.data!!.indices) { +// /** +// * i的范围是[0,dataBean.data!!.indices] +// * */ +// val areaData = dataBean.data!![k] +// entries.add( +// Entry(k.toFloat(), areaData.count!!.toFloat(), areaData.areaName) +// ) +// } +// entryModel.entryList = entries +// entryModels.add(entryModel) } ChartViewHelper.setLineChartData(waterLineChart, entryModels) } 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 56ea003..570df4e 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 @@ -86,7 +86,7 @@ }) //Banner点击事件 setOnBannerListener { data, _ -> - startActivity(Intent(this@MainActivity, WebsiteActivity::class.java)) + navigatePageTo(WebsiteActivity::class.java) } } @@ -107,9 +107,6 @@ //初始化vm waterViewModel = ViewModelProvider(this).get(WaterStatisticsViewModel::class.java) - - //初始化折线图,X轴从0开始 - ChartViewHelper.initLineChart(waterLineChart, (Constant.ONE_WEEK - 1).toFloat()) weakReferenceHandler = WeakReferenceHandler(this) } @@ -125,23 +122,26 @@ navigatePageTo(AlarmManagementActivity::class.java) } + //初始化折线图,X轴从0开始 + val time = System.currentTimeMillis() + val startDate = time.timestampToLastWeekDate() + val endDate = time.timestampToDate() + val differ = startDate.differ(endDate) + ChartViewHelper.initLineChart(waterLineChart) //一周折线图数据 - val currentTime = System.currentTimeMillis() - waterViewModel.waterCountByDay( - "110000", - currentTime.timestampToLastWeekDate(), - currentTime.timestampToDate() - ) + waterViewModel.waterCountByDay(Constant.AREA_ID, startDate, endDate) waterViewModel.areaDataModel.observe(this, { if (it.code == 200) { it.data?.forEachIndexed { i, dataBean -> val entryModel = LineChartEntryModel() - entryModel.lineColor = Constant.COLORS[i].convertColor() + if (i <= differ) { + entryModel.lineColor = Constant.COLORS[i].convertColor() + } entryModel.entryDate = dataBean.date //每个entries都是一条折线 val entries: ArrayList = ArrayList() - for (j in 0 until Constant.ONE_WEEK) { + for (j in 0..differ) { val areaData = it.data!![j].data!![i] entries.add( Entry(j.toFloat(), areaData.count!!.toFloat(), areaData.areaName) diff --git a/app/src/main/java/com/casic/qd/smartwell/view/StatisticsActivity.kt b/app/src/main/java/com/casic/qd/smartwell/view/StatisticsActivity.kt index f6874f9..d6401c8 100644 --- a/app/src/main/java/com/casic/qd/smartwell/view/StatisticsActivity.kt +++ b/app/src/main/java/com/casic/qd/smartwell/view/StatisticsActivity.kt @@ -45,7 +45,7 @@ ChartViewHelper.setPieChartData(totalPieChart, pieEntries) //初始化折线图 - ChartViewHelper.initLineChart(totalLineChart, Constant.YEARS.last().toFloat()) + ChartViewHelper.initLineChart(totalLineChart) //TODO 这是模拟数据 for (i in Constant.YEARS) { valveEntries.add( diff --git a/app/src/main/java/com/casic/qd/smartwell/vm/AlarmContentViewModel.kt b/app/src/main/java/com/casic/qd/smartwell/vm/AlarmContentViewModel.kt index 8c1d4e3..b12b37f 100644 --- a/app/src/main/java/com/casic/qd/smartwell/vm/AlarmContentViewModel.kt +++ b/app/src/main/java/com/casic/qd/smartwell/vm/AlarmContentViewModel.kt @@ -1,5 +1,6 @@ package com.casic.qd.smartwell.vm +import android.util.Log import androidx.lifecycle.MutableLiveData import com.casic.qd.smartwell.base.BaseViewModel import com.casic.qd.smartwell.extensions.launch @@ -13,6 +14,7 @@ class AlarmContentViewModel : BaseViewModel() { + private val kTag = "AlarmContentViewModel" private val gson = Gson() val contentModel = MutableLiveData() @@ -27,6 +29,7 @@ response.toErrorMessage().show() } }, { + Log.e(kTag, it.toString(), it) "服务器异常".show() }) } \ No newline at end of file diff --git a/app/src/main/java/com/casic/qd/smartwell/vm/AlarmListViewModel.kt b/app/src/main/java/com/casic/qd/smartwell/vm/AlarmListViewModel.kt index 2f41249..58cecfa 100644 --- a/app/src/main/java/com/casic/qd/smartwell/vm/AlarmListViewModel.kt +++ b/app/src/main/java/com/casic/qd/smartwell/vm/AlarmListViewModel.kt @@ -1,5 +1,6 @@ package com.casic.qd.smartwell.vm +import android.util.Log import androidx.lifecycle.MutableLiveData import com.casic.qd.smartwell.base.BaseViewModel import com.casic.qd.smartwell.extensions.launch @@ -13,6 +14,7 @@ class AlarmListViewModel : BaseViewModel() { + private val kTag = "AlarmListViewModel" private val gson = Gson() val listModel = MutableLiveData() @@ -45,6 +47,7 @@ response.toErrorMessage().show() } }, { + Log.e(kTag, it.toString(), it) "服务器异常".show() }) } \ No newline at end of file diff --git a/app/src/main/java/com/casic/qd/smartwell/vm/AlarmTypeViewModel.kt b/app/src/main/java/com/casic/qd/smartwell/vm/AlarmTypeViewModel.kt index dcaa579..c98d93c 100644 --- a/app/src/main/java/com/casic/qd/smartwell/vm/AlarmTypeViewModel.kt +++ b/app/src/main/java/com/casic/qd/smartwell/vm/AlarmTypeViewModel.kt @@ -1,5 +1,6 @@ package com.casic.qd.smartwell.vm +import android.util.Log import androidx.lifecycle.MutableLiveData import com.casic.qd.smartwell.base.BaseViewModel import com.casic.qd.smartwell.extensions.launch @@ -13,6 +14,7 @@ class AlarmTypeViewModel : BaseViewModel() { + private val kTag = "AlarmTypeViewModel" private val gson = Gson() val typeModel = MutableLiveData() @@ -27,6 +29,7 @@ response.toErrorMessage().show() } }, { + Log.e(kTag, it.toString(), it) "服务器异常".show() }) } \ No newline at end of file diff --git a/app/src/main/java/com/casic/qd/smartwell/vm/AreaViewModel.kt b/app/src/main/java/com/casic/qd/smartwell/vm/AreaViewModel.kt index 6d06350..c337e59 100644 --- a/app/src/main/java/com/casic/qd/smartwell/vm/AreaViewModel.kt +++ b/app/src/main/java/com/casic/qd/smartwell/vm/AreaViewModel.kt @@ -1,5 +1,6 @@ package com.casic.qd.smartwell.vm +import android.util.Log import androidx.lifecycle.MutableLiveData import com.casic.qd.smartwell.base.BaseViewModel import com.casic.qd.smartwell.extensions.launch @@ -13,6 +14,7 @@ class AreaViewModel : BaseViewModel() { + private val kTag = "AreaViewModel" private val gson = Gson() val areaModel = MutableLiveData() @@ -27,6 +29,7 @@ response.toErrorMessage().show() } }, { + Log.e(kTag, it.toString(), it) "服务器异常".show() }) } \ No newline at end of file diff --git a/app/src/main/java/com/casic/qd/smartwell/vm/AuthenticateViewModel.kt b/app/src/main/java/com/casic/qd/smartwell/vm/AuthenticateViewModel.kt index 6b1d404..55ccc65 100644 --- a/app/src/main/java/com/casic/qd/smartwell/vm/AuthenticateViewModel.kt +++ b/app/src/main/java/com/casic/qd/smartwell/vm/AuthenticateViewModel.kt @@ -1,5 +1,6 @@ package com.casic.qd.smartwell.vm +import android.util.Log import androidx.lifecycle.MutableLiveData import com.casic.qd.smartwell.base.BaseViewModel import com.casic.qd.smartwell.extensions.launch @@ -10,12 +11,14 @@ class AuthenticateViewModel : BaseViewModel() { + private val kTag = "AuthenticateViewModel" val keyModel = MutableLiveData() fun obtainPublicKey() = launch({ loadState.value = LoadState.Loading keyModel.value = RetrofitServiceManager.authenticate() }, { + Log.e(kTag, it.toString(), it) "服务器异常".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 7dcbc22..216e7cc 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 @@ -15,10 +15,26 @@ return dateFormat.format(calendar.time) } +fun Long.timestampToLastMonthDate(): 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) - 29) + return dateFormat.format(calendar.time) +} fun Long.timestampToDate(): String = SimpleDateFormat("yyyy-MM-dd", Locale.CHINA).format(Date(this)) +/** + * 获取当前月份所在季度 + * */ +fun Long.getQuarterOfYear(): Int { + val calendar = Calendar.getInstance() + calendar.time = Date(this) + return calendar.get(Calendar.MONTH) / 3 + 1 +} + fun Long.isEarlierThanStart(date: String): Boolean { if (date.isBlank()) { return false diff --git a/app/src/main/java/com/casic/qd/smartwell/extensions/String.kt b/app/src/main/java/com/casic/qd/smartwell/extensions/String.kt index 1e5a885..19808ef 100644 --- a/app/src/main/java/com/casic/qd/smartwell/extensions/String.kt +++ b/app/src/main/java/com/casic/qd/smartwell/extensions/String.kt @@ -11,6 +11,9 @@ import com.google.gson.reflect.TypeToken import com.qmuiteam.qmui.util.QMUIDisplayHelper import org.json.JSONObject +import java.text.ParseException +import java.text.SimpleDateFormat +import java.util.* /** * String扩展方法 @@ -58,3 +61,18 @@ val split = this.split("-") return split[1] + "/" + split[2] } + +fun String.differ(endDate: String): Int { + val dateFormat = SimpleDateFormat("yyyy-MM-dd", Locale.CHINA) + try { + val star: Date = dateFormat.parse(this) //开始时间 + val endDay: Date = dateFormat.parse(endDate) //结束时间 + val starTime = star.time + val endTime = endDay.time + val num = endTime - starTime //时间戳相差的毫秒数 + return (num / 24 / 60 / 60 / 1000).toInt() + } catch (e: ParseException) { + e.printStackTrace() + } + return 0 +} 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 7c6263a..8daf653 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 @@ -30,10 +30,10 @@ * @email 290677893@qq.com */ object ChartViewHelper { - private const val Tag = "ChartViewHelper" + private const val kTag = "ChartViewHelper" private val decimalFormat = DecimalFormat("##0") - fun initLineChart(chart: LineChart, axisMaximum: Float) { + fun initLineChart(chart: LineChart) { chart.setDrawGridBackground(false) chart.setDrawBorders(false) //设置样式 @@ -47,7 +47,6 @@ val xAxis: XAxis = chart.xAxis xAxis.textColor = R.color.mainTextColor.convertColor() xAxis.textSize = 10f - xAxis.axisMaximum = axisMaximum xAxis.setDrawLabels(true) //绘制标签 指x轴上的对应数值 xAxis.setDrawAxisLine(true) //是否绘制轴线 xAxis.setDrawGridLines(false) //设置x轴上每个点对应的线 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 378a6e0..ecb931e 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 @@ -40,4 +40,5 @@ const val PASSWORD = "password" const val USER_DETAIL_MODEL = "userDetailModel" const val CANCEL_ALARM_ACTION = "cancelAlarm" + const val AREA_ID = "110000" } \ No newline at end of file diff --git a/app/src/main/java/com/casic/qd/smartwell/view/ExpandedActivity.kt b/app/src/main/java/com/casic/qd/smartwell/view/ExpandedActivity.kt index 14763e8..5bd2f91 100644 --- a/app/src/main/java/com/casic/qd/smartwell/view/ExpandedActivity.kt +++ b/app/src/main/java/com/casic/qd/smartwell/view/ExpandedActivity.kt @@ -1,22 +1,29 @@ package com.casic.qd.smartwell.view +import android.view.View +import android.widget.AdapterView import androidx.lifecycle.ViewModelProvider import com.casic.qd.smartwell.R import com.casic.qd.smartwell.base.BaseActivity -import com.casic.qd.smartwell.extensions.convertColor -import com.casic.qd.smartwell.extensions.timestampToDate -import com.casic.qd.smartwell.extensions.timestampToLastWeekDate +import com.casic.qd.smartwell.extensions.* import com.casic.qd.smartwell.model.LineChartEntryModel import com.casic.qd.smartwell.utils.ChartViewHelper import com.casic.qd.smartwell.utils.Constant import com.casic.qd.smartwell.vm.WaterStatisticsViewModel import com.github.mikephil.charting.data.Entry -import kotlinx.android.synthetic.main.activity_main.* +import kotlinx.android.synthetic.main.activity_expanded.* +import kotlinx.android.synthetic.main.activity_main.waterLineChart +import java.util.* +import kotlin.collections.ArrayList + class ExpandedActivity : BaseActivity() { + private val kTag = "ExpandedActivity" private lateinit var waterViewModel: WaterStatisticsViewModel private val entryModels: MutableList = ArrayList() + private var startDate = "" + private var differ = 0 override fun initLayoutView(): Int = R.layout.activity_expanded @@ -26,28 +33,80 @@ override fun initData() { waterViewModel = ViewModelProvider(this).get(WaterStatisticsViewModel::class.java) - //初始化折线图,X轴从0开始 - ChartViewHelper.initLineChart(waterLineChart, (Constant.ONE_WEEK - 1).toFloat()) } override fun initEvent() { - //一周折线图数据 - val currentTime = System.currentTimeMillis() - waterViewModel.waterCountByDay( - "110000", - currentTime.timestampToLastWeekDate(), - currentTime.timestampToDate() - ) + //默认选择近7天的数据 + periodSpinner.setSelection(3) + periodSpinner.onItemSelectedListener = object : AdapterView.OnItemSelectedListener { + override fun onItemSelected( + parent: AdapterView<*>?, view: View?, + position: Int, id: Long + ) { + val time = System.currentTimeMillis() + val calendar = Calendar.getInstance() + val year: Int = calendar.get(Calendar.YEAR) + when (position) { + 0 -> { + //本年度 + startDate = "$year-01-01" + } + 1 -> { + //本季度 + when (time.getQuarterOfYear()) { + 1 -> { + startDate = "$year-01-01" + } + 2 -> { + startDate = "$year-04-01" + } + 3 -> { + startDate = "$year-07-01" + } + 4 -> { + startDate = "$year-10-01" + } + } + } + 2 -> { + //近30日 + startDate = time.timestampToLastMonthDate() + } + 3 -> { + //近7日 + startDate = time.timestampToLastWeekDate() + } + 4 -> { + //今日 + startDate = time.timestampToDate() + } + 5 -> { + + } + } + //初始化折线图,X轴从0开始 + differ = startDate.differ(time.timestampToDate()) + ChartViewHelper.initLineChart(waterLineChart) + waterViewModel.waterCountByDay(Constant.AREA_ID, startDate, time.timestampToDate()) + } + + override fun onNothingSelected(parent: AdapterView<*>?) { + + } + } + waterViewModel.areaDataModel.observe(this, { if (it.code == 200) { it.data?.forEachIndexed { i, dataBean -> val entryModel = LineChartEntryModel() - entryModel.lineColor = Constant.COLORS[i].convertColor() + if (i <= differ) { + entryModel.lineColor = Constant.COLORS[i].convertColor() + } entryModel.entryDate = dataBean.date - //每个entries都是一条折线 +// //每个entries都是一条折线 val entries: ArrayList = ArrayList() - for (j in 0 until Constant.ONE_WEEK) { + for (j in 0..differ) { val areaData = it.data!![j].data!![i] entries.add( Entry(j.toFloat(), areaData.count!!.toFloat(), areaData.areaName) @@ -55,6 +114,23 @@ } entryModel.entryList = entries entryModels.add(entryModel) + + /** + * i的范围是[0,differ] + * */ + //每个entries都是一条折线 +// val entries: ArrayList = ArrayList() +// for (k in dataBean.data!!.indices) { +// /** +// * i的范围是[0,dataBean.data!!.indices] +// * */ +// val areaData = dataBean.data!![k] +// entries.add( +// Entry(k.toFloat(), areaData.count!!.toFloat(), areaData.areaName) +// ) +// } +// entryModel.entryList = entries +// entryModels.add(entryModel) } ChartViewHelper.setLineChartData(waterLineChart, entryModels) } 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 56ea003..570df4e 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 @@ -86,7 +86,7 @@ }) //Banner点击事件 setOnBannerListener { data, _ -> - startActivity(Intent(this@MainActivity, WebsiteActivity::class.java)) + navigatePageTo(WebsiteActivity::class.java) } } @@ -107,9 +107,6 @@ //初始化vm waterViewModel = ViewModelProvider(this).get(WaterStatisticsViewModel::class.java) - - //初始化折线图,X轴从0开始 - ChartViewHelper.initLineChart(waterLineChart, (Constant.ONE_WEEK - 1).toFloat()) weakReferenceHandler = WeakReferenceHandler(this) } @@ -125,23 +122,26 @@ navigatePageTo(AlarmManagementActivity::class.java) } + //初始化折线图,X轴从0开始 + val time = System.currentTimeMillis() + val startDate = time.timestampToLastWeekDate() + val endDate = time.timestampToDate() + val differ = startDate.differ(endDate) + ChartViewHelper.initLineChart(waterLineChart) //一周折线图数据 - val currentTime = System.currentTimeMillis() - waterViewModel.waterCountByDay( - "110000", - currentTime.timestampToLastWeekDate(), - currentTime.timestampToDate() - ) + waterViewModel.waterCountByDay(Constant.AREA_ID, startDate, endDate) waterViewModel.areaDataModel.observe(this, { if (it.code == 200) { it.data?.forEachIndexed { i, dataBean -> val entryModel = LineChartEntryModel() - entryModel.lineColor = Constant.COLORS[i].convertColor() + if (i <= differ) { + entryModel.lineColor = Constant.COLORS[i].convertColor() + } entryModel.entryDate = dataBean.date //每个entries都是一条折线 val entries: ArrayList = ArrayList() - for (j in 0 until Constant.ONE_WEEK) { + for (j in 0..differ) { val areaData = it.data!![j].data!![i] entries.add( Entry(j.toFloat(), areaData.count!!.toFloat(), areaData.areaName) diff --git a/app/src/main/java/com/casic/qd/smartwell/view/StatisticsActivity.kt b/app/src/main/java/com/casic/qd/smartwell/view/StatisticsActivity.kt index f6874f9..d6401c8 100644 --- a/app/src/main/java/com/casic/qd/smartwell/view/StatisticsActivity.kt +++ b/app/src/main/java/com/casic/qd/smartwell/view/StatisticsActivity.kt @@ -45,7 +45,7 @@ ChartViewHelper.setPieChartData(totalPieChart, pieEntries) //初始化折线图 - ChartViewHelper.initLineChart(totalLineChart, Constant.YEARS.last().toFloat()) + ChartViewHelper.initLineChart(totalLineChart) //TODO 这是模拟数据 for (i in Constant.YEARS) { valveEntries.add( diff --git a/app/src/main/java/com/casic/qd/smartwell/vm/AlarmContentViewModel.kt b/app/src/main/java/com/casic/qd/smartwell/vm/AlarmContentViewModel.kt index 8c1d4e3..b12b37f 100644 --- a/app/src/main/java/com/casic/qd/smartwell/vm/AlarmContentViewModel.kt +++ b/app/src/main/java/com/casic/qd/smartwell/vm/AlarmContentViewModel.kt @@ -1,5 +1,6 @@ package com.casic.qd.smartwell.vm +import android.util.Log import androidx.lifecycle.MutableLiveData import com.casic.qd.smartwell.base.BaseViewModel import com.casic.qd.smartwell.extensions.launch @@ -13,6 +14,7 @@ class AlarmContentViewModel : BaseViewModel() { + private val kTag = "AlarmContentViewModel" private val gson = Gson() val contentModel = MutableLiveData() @@ -27,6 +29,7 @@ response.toErrorMessage().show() } }, { + Log.e(kTag, it.toString(), it) "服务器异常".show() }) } \ No newline at end of file diff --git a/app/src/main/java/com/casic/qd/smartwell/vm/AlarmListViewModel.kt b/app/src/main/java/com/casic/qd/smartwell/vm/AlarmListViewModel.kt index 2f41249..58cecfa 100644 --- a/app/src/main/java/com/casic/qd/smartwell/vm/AlarmListViewModel.kt +++ b/app/src/main/java/com/casic/qd/smartwell/vm/AlarmListViewModel.kt @@ -1,5 +1,6 @@ package com.casic.qd.smartwell.vm +import android.util.Log import androidx.lifecycle.MutableLiveData import com.casic.qd.smartwell.base.BaseViewModel import com.casic.qd.smartwell.extensions.launch @@ -13,6 +14,7 @@ class AlarmListViewModel : BaseViewModel() { + private val kTag = "AlarmListViewModel" private val gson = Gson() val listModel = MutableLiveData() @@ -45,6 +47,7 @@ response.toErrorMessage().show() } }, { + Log.e(kTag, it.toString(), it) "服务器异常".show() }) } \ No newline at end of file diff --git a/app/src/main/java/com/casic/qd/smartwell/vm/AlarmTypeViewModel.kt b/app/src/main/java/com/casic/qd/smartwell/vm/AlarmTypeViewModel.kt index dcaa579..c98d93c 100644 --- a/app/src/main/java/com/casic/qd/smartwell/vm/AlarmTypeViewModel.kt +++ b/app/src/main/java/com/casic/qd/smartwell/vm/AlarmTypeViewModel.kt @@ -1,5 +1,6 @@ package com.casic.qd.smartwell.vm +import android.util.Log import androidx.lifecycle.MutableLiveData import com.casic.qd.smartwell.base.BaseViewModel import com.casic.qd.smartwell.extensions.launch @@ -13,6 +14,7 @@ class AlarmTypeViewModel : BaseViewModel() { + private val kTag = "AlarmTypeViewModel" private val gson = Gson() val typeModel = MutableLiveData() @@ -27,6 +29,7 @@ response.toErrorMessage().show() } }, { + Log.e(kTag, it.toString(), it) "服务器异常".show() }) } \ No newline at end of file diff --git a/app/src/main/java/com/casic/qd/smartwell/vm/AreaViewModel.kt b/app/src/main/java/com/casic/qd/smartwell/vm/AreaViewModel.kt index 6d06350..c337e59 100644 --- a/app/src/main/java/com/casic/qd/smartwell/vm/AreaViewModel.kt +++ b/app/src/main/java/com/casic/qd/smartwell/vm/AreaViewModel.kt @@ -1,5 +1,6 @@ package com.casic.qd.smartwell.vm +import android.util.Log import androidx.lifecycle.MutableLiveData import com.casic.qd.smartwell.base.BaseViewModel import com.casic.qd.smartwell.extensions.launch @@ -13,6 +14,7 @@ class AreaViewModel : BaseViewModel() { + private val kTag = "AreaViewModel" private val gson = Gson() val areaModel = MutableLiveData() @@ -27,6 +29,7 @@ response.toErrorMessage().show() } }, { + Log.e(kTag, it.toString(), it) "服务器异常".show() }) } \ No newline at end of file diff --git a/app/src/main/java/com/casic/qd/smartwell/vm/AuthenticateViewModel.kt b/app/src/main/java/com/casic/qd/smartwell/vm/AuthenticateViewModel.kt index 6b1d404..55ccc65 100644 --- a/app/src/main/java/com/casic/qd/smartwell/vm/AuthenticateViewModel.kt +++ b/app/src/main/java/com/casic/qd/smartwell/vm/AuthenticateViewModel.kt @@ -1,5 +1,6 @@ package com.casic.qd.smartwell.vm +import android.util.Log import androidx.lifecycle.MutableLiveData import com.casic.qd.smartwell.base.BaseViewModel import com.casic.qd.smartwell.extensions.launch @@ -10,12 +11,14 @@ class AuthenticateViewModel : BaseViewModel() { + private val kTag = "AuthenticateViewModel" val keyModel = MutableLiveData() fun obtainPublicKey() = launch({ loadState.value = LoadState.Loading keyModel.value = RetrofitServiceManager.authenticate() }, { + Log.e(kTag, it.toString(), it) "服务器异常".show() }) } \ No newline at end of file diff --git a/app/src/main/java/com/casic/qd/smartwell/vm/CancelAlarmViewModel.kt b/app/src/main/java/com/casic/qd/smartwell/vm/CancelAlarmViewModel.kt index 419447e..d95c207 100644 --- a/app/src/main/java/com/casic/qd/smartwell/vm/CancelAlarmViewModel.kt +++ b/app/src/main/java/com/casic/qd/smartwell/vm/CancelAlarmViewModel.kt @@ -1,5 +1,6 @@ package com.casic.qd.smartwell.vm +import android.util.Log import androidx.lifecycle.MutableLiveData import com.casic.qd.smartwell.base.BaseViewModel import com.casic.qd.smartwell.extensions.launch @@ -14,6 +15,7 @@ class CancelAlarmViewModel : BaseViewModel() { + private val kTag = "CancelAlarmViewModel" private val gson = Gson() val resultModel = MutableLiveData() @@ -37,6 +39,7 @@ } }, { loadState.value = LoadState.Fail + Log.e(kTag, it.toString(), it) "服务器异常".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 7dcbc22..216e7cc 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 @@ -15,10 +15,26 @@ return dateFormat.format(calendar.time) } +fun Long.timestampToLastMonthDate(): 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) - 29) + return dateFormat.format(calendar.time) +} fun Long.timestampToDate(): String = SimpleDateFormat("yyyy-MM-dd", Locale.CHINA).format(Date(this)) +/** + * 获取当前月份所在季度 + * */ +fun Long.getQuarterOfYear(): Int { + val calendar = Calendar.getInstance() + calendar.time = Date(this) + return calendar.get(Calendar.MONTH) / 3 + 1 +} + fun Long.isEarlierThanStart(date: String): Boolean { if (date.isBlank()) { return false diff --git a/app/src/main/java/com/casic/qd/smartwell/extensions/String.kt b/app/src/main/java/com/casic/qd/smartwell/extensions/String.kt index 1e5a885..19808ef 100644 --- a/app/src/main/java/com/casic/qd/smartwell/extensions/String.kt +++ b/app/src/main/java/com/casic/qd/smartwell/extensions/String.kt @@ -11,6 +11,9 @@ import com.google.gson.reflect.TypeToken import com.qmuiteam.qmui.util.QMUIDisplayHelper import org.json.JSONObject +import java.text.ParseException +import java.text.SimpleDateFormat +import java.util.* /** * String扩展方法 @@ -58,3 +61,18 @@ val split = this.split("-") return split[1] + "/" + split[2] } + +fun String.differ(endDate: String): Int { + val dateFormat = SimpleDateFormat("yyyy-MM-dd", Locale.CHINA) + try { + val star: Date = dateFormat.parse(this) //开始时间 + val endDay: Date = dateFormat.parse(endDate) //结束时间 + val starTime = star.time + val endTime = endDay.time + val num = endTime - starTime //时间戳相差的毫秒数 + return (num / 24 / 60 / 60 / 1000).toInt() + } catch (e: ParseException) { + e.printStackTrace() + } + return 0 +} 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 7c6263a..8daf653 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 @@ -30,10 +30,10 @@ * @email 290677893@qq.com */ object ChartViewHelper { - private const val Tag = "ChartViewHelper" + private const val kTag = "ChartViewHelper" private val decimalFormat = DecimalFormat("##0") - fun initLineChart(chart: LineChart, axisMaximum: Float) { + fun initLineChart(chart: LineChart) { chart.setDrawGridBackground(false) chart.setDrawBorders(false) //设置样式 @@ -47,7 +47,6 @@ val xAxis: XAxis = chart.xAxis xAxis.textColor = R.color.mainTextColor.convertColor() xAxis.textSize = 10f - xAxis.axisMaximum = axisMaximum xAxis.setDrawLabels(true) //绘制标签 指x轴上的对应数值 xAxis.setDrawAxisLine(true) //是否绘制轴线 xAxis.setDrawGridLines(false) //设置x轴上每个点对应的线 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 378a6e0..ecb931e 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 @@ -40,4 +40,5 @@ const val PASSWORD = "password" const val USER_DETAIL_MODEL = "userDetailModel" const val CANCEL_ALARM_ACTION = "cancelAlarm" + const val AREA_ID = "110000" } \ No newline at end of file diff --git a/app/src/main/java/com/casic/qd/smartwell/view/ExpandedActivity.kt b/app/src/main/java/com/casic/qd/smartwell/view/ExpandedActivity.kt index 14763e8..5bd2f91 100644 --- a/app/src/main/java/com/casic/qd/smartwell/view/ExpandedActivity.kt +++ b/app/src/main/java/com/casic/qd/smartwell/view/ExpandedActivity.kt @@ -1,22 +1,29 @@ package com.casic.qd.smartwell.view +import android.view.View +import android.widget.AdapterView import androidx.lifecycle.ViewModelProvider import com.casic.qd.smartwell.R import com.casic.qd.smartwell.base.BaseActivity -import com.casic.qd.smartwell.extensions.convertColor -import com.casic.qd.smartwell.extensions.timestampToDate -import com.casic.qd.smartwell.extensions.timestampToLastWeekDate +import com.casic.qd.smartwell.extensions.* import com.casic.qd.smartwell.model.LineChartEntryModel import com.casic.qd.smartwell.utils.ChartViewHelper import com.casic.qd.smartwell.utils.Constant import com.casic.qd.smartwell.vm.WaterStatisticsViewModel import com.github.mikephil.charting.data.Entry -import kotlinx.android.synthetic.main.activity_main.* +import kotlinx.android.synthetic.main.activity_expanded.* +import kotlinx.android.synthetic.main.activity_main.waterLineChart +import java.util.* +import kotlin.collections.ArrayList + class ExpandedActivity : BaseActivity() { + private val kTag = "ExpandedActivity" private lateinit var waterViewModel: WaterStatisticsViewModel private val entryModels: MutableList = ArrayList() + private var startDate = "" + private var differ = 0 override fun initLayoutView(): Int = R.layout.activity_expanded @@ -26,28 +33,80 @@ override fun initData() { waterViewModel = ViewModelProvider(this).get(WaterStatisticsViewModel::class.java) - //初始化折线图,X轴从0开始 - ChartViewHelper.initLineChart(waterLineChart, (Constant.ONE_WEEK - 1).toFloat()) } override fun initEvent() { - //一周折线图数据 - val currentTime = System.currentTimeMillis() - waterViewModel.waterCountByDay( - "110000", - currentTime.timestampToLastWeekDate(), - currentTime.timestampToDate() - ) + //默认选择近7天的数据 + periodSpinner.setSelection(3) + periodSpinner.onItemSelectedListener = object : AdapterView.OnItemSelectedListener { + override fun onItemSelected( + parent: AdapterView<*>?, view: View?, + position: Int, id: Long + ) { + val time = System.currentTimeMillis() + val calendar = Calendar.getInstance() + val year: Int = calendar.get(Calendar.YEAR) + when (position) { + 0 -> { + //本年度 + startDate = "$year-01-01" + } + 1 -> { + //本季度 + when (time.getQuarterOfYear()) { + 1 -> { + startDate = "$year-01-01" + } + 2 -> { + startDate = "$year-04-01" + } + 3 -> { + startDate = "$year-07-01" + } + 4 -> { + startDate = "$year-10-01" + } + } + } + 2 -> { + //近30日 + startDate = time.timestampToLastMonthDate() + } + 3 -> { + //近7日 + startDate = time.timestampToLastWeekDate() + } + 4 -> { + //今日 + startDate = time.timestampToDate() + } + 5 -> { + + } + } + //初始化折线图,X轴从0开始 + differ = startDate.differ(time.timestampToDate()) + ChartViewHelper.initLineChart(waterLineChart) + waterViewModel.waterCountByDay(Constant.AREA_ID, startDate, time.timestampToDate()) + } + + override fun onNothingSelected(parent: AdapterView<*>?) { + + } + } + waterViewModel.areaDataModel.observe(this, { if (it.code == 200) { it.data?.forEachIndexed { i, dataBean -> val entryModel = LineChartEntryModel() - entryModel.lineColor = Constant.COLORS[i].convertColor() + if (i <= differ) { + entryModel.lineColor = Constant.COLORS[i].convertColor() + } entryModel.entryDate = dataBean.date - //每个entries都是一条折线 +// //每个entries都是一条折线 val entries: ArrayList = ArrayList() - for (j in 0 until Constant.ONE_WEEK) { + for (j in 0..differ) { val areaData = it.data!![j].data!![i] entries.add( Entry(j.toFloat(), areaData.count!!.toFloat(), areaData.areaName) @@ -55,6 +114,23 @@ } entryModel.entryList = entries entryModels.add(entryModel) + + /** + * i的范围是[0,differ] + * */ + //每个entries都是一条折线 +// val entries: ArrayList = ArrayList() +// for (k in dataBean.data!!.indices) { +// /** +// * i的范围是[0,dataBean.data!!.indices] +// * */ +// val areaData = dataBean.data!![k] +// entries.add( +// Entry(k.toFloat(), areaData.count!!.toFloat(), areaData.areaName) +// ) +// } +// entryModel.entryList = entries +// entryModels.add(entryModel) } ChartViewHelper.setLineChartData(waterLineChart, entryModels) } 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 56ea003..570df4e 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 @@ -86,7 +86,7 @@ }) //Banner点击事件 setOnBannerListener { data, _ -> - startActivity(Intent(this@MainActivity, WebsiteActivity::class.java)) + navigatePageTo(WebsiteActivity::class.java) } } @@ -107,9 +107,6 @@ //初始化vm waterViewModel = ViewModelProvider(this).get(WaterStatisticsViewModel::class.java) - - //初始化折线图,X轴从0开始 - ChartViewHelper.initLineChart(waterLineChart, (Constant.ONE_WEEK - 1).toFloat()) weakReferenceHandler = WeakReferenceHandler(this) } @@ -125,23 +122,26 @@ navigatePageTo(AlarmManagementActivity::class.java) } + //初始化折线图,X轴从0开始 + val time = System.currentTimeMillis() + val startDate = time.timestampToLastWeekDate() + val endDate = time.timestampToDate() + val differ = startDate.differ(endDate) + ChartViewHelper.initLineChart(waterLineChart) //一周折线图数据 - val currentTime = System.currentTimeMillis() - waterViewModel.waterCountByDay( - "110000", - currentTime.timestampToLastWeekDate(), - currentTime.timestampToDate() - ) + waterViewModel.waterCountByDay(Constant.AREA_ID, startDate, endDate) waterViewModel.areaDataModel.observe(this, { if (it.code == 200) { it.data?.forEachIndexed { i, dataBean -> val entryModel = LineChartEntryModel() - entryModel.lineColor = Constant.COLORS[i].convertColor() + if (i <= differ) { + entryModel.lineColor = Constant.COLORS[i].convertColor() + } entryModel.entryDate = dataBean.date //每个entries都是一条折线 val entries: ArrayList = ArrayList() - for (j in 0 until Constant.ONE_WEEK) { + for (j in 0..differ) { val areaData = it.data!![j].data!![i] entries.add( Entry(j.toFloat(), areaData.count!!.toFloat(), areaData.areaName) diff --git a/app/src/main/java/com/casic/qd/smartwell/view/StatisticsActivity.kt b/app/src/main/java/com/casic/qd/smartwell/view/StatisticsActivity.kt index f6874f9..d6401c8 100644 --- a/app/src/main/java/com/casic/qd/smartwell/view/StatisticsActivity.kt +++ b/app/src/main/java/com/casic/qd/smartwell/view/StatisticsActivity.kt @@ -45,7 +45,7 @@ ChartViewHelper.setPieChartData(totalPieChart, pieEntries) //初始化折线图 - ChartViewHelper.initLineChart(totalLineChart, Constant.YEARS.last().toFloat()) + ChartViewHelper.initLineChart(totalLineChart) //TODO 这是模拟数据 for (i in Constant.YEARS) { valveEntries.add( diff --git a/app/src/main/java/com/casic/qd/smartwell/vm/AlarmContentViewModel.kt b/app/src/main/java/com/casic/qd/smartwell/vm/AlarmContentViewModel.kt index 8c1d4e3..b12b37f 100644 --- a/app/src/main/java/com/casic/qd/smartwell/vm/AlarmContentViewModel.kt +++ b/app/src/main/java/com/casic/qd/smartwell/vm/AlarmContentViewModel.kt @@ -1,5 +1,6 @@ package com.casic.qd.smartwell.vm +import android.util.Log import androidx.lifecycle.MutableLiveData import com.casic.qd.smartwell.base.BaseViewModel import com.casic.qd.smartwell.extensions.launch @@ -13,6 +14,7 @@ class AlarmContentViewModel : BaseViewModel() { + private val kTag = "AlarmContentViewModel" private val gson = Gson() val contentModel = MutableLiveData() @@ -27,6 +29,7 @@ response.toErrorMessage().show() } }, { + Log.e(kTag, it.toString(), it) "服务器异常".show() }) } \ No newline at end of file diff --git a/app/src/main/java/com/casic/qd/smartwell/vm/AlarmListViewModel.kt b/app/src/main/java/com/casic/qd/smartwell/vm/AlarmListViewModel.kt index 2f41249..58cecfa 100644 --- a/app/src/main/java/com/casic/qd/smartwell/vm/AlarmListViewModel.kt +++ b/app/src/main/java/com/casic/qd/smartwell/vm/AlarmListViewModel.kt @@ -1,5 +1,6 @@ package com.casic.qd.smartwell.vm +import android.util.Log import androidx.lifecycle.MutableLiveData import com.casic.qd.smartwell.base.BaseViewModel import com.casic.qd.smartwell.extensions.launch @@ -13,6 +14,7 @@ class AlarmListViewModel : BaseViewModel() { + private val kTag = "AlarmListViewModel" private val gson = Gson() val listModel = MutableLiveData() @@ -45,6 +47,7 @@ response.toErrorMessage().show() } }, { + Log.e(kTag, it.toString(), it) "服务器异常".show() }) } \ No newline at end of file diff --git a/app/src/main/java/com/casic/qd/smartwell/vm/AlarmTypeViewModel.kt b/app/src/main/java/com/casic/qd/smartwell/vm/AlarmTypeViewModel.kt index dcaa579..c98d93c 100644 --- a/app/src/main/java/com/casic/qd/smartwell/vm/AlarmTypeViewModel.kt +++ b/app/src/main/java/com/casic/qd/smartwell/vm/AlarmTypeViewModel.kt @@ -1,5 +1,6 @@ package com.casic.qd.smartwell.vm +import android.util.Log import androidx.lifecycle.MutableLiveData import com.casic.qd.smartwell.base.BaseViewModel import com.casic.qd.smartwell.extensions.launch @@ -13,6 +14,7 @@ class AlarmTypeViewModel : BaseViewModel() { + private val kTag = "AlarmTypeViewModel" private val gson = Gson() val typeModel = MutableLiveData() @@ -27,6 +29,7 @@ response.toErrorMessage().show() } }, { + Log.e(kTag, it.toString(), it) "服务器异常".show() }) } \ No newline at end of file diff --git a/app/src/main/java/com/casic/qd/smartwell/vm/AreaViewModel.kt b/app/src/main/java/com/casic/qd/smartwell/vm/AreaViewModel.kt index 6d06350..c337e59 100644 --- a/app/src/main/java/com/casic/qd/smartwell/vm/AreaViewModel.kt +++ b/app/src/main/java/com/casic/qd/smartwell/vm/AreaViewModel.kt @@ -1,5 +1,6 @@ package com.casic.qd.smartwell.vm +import android.util.Log import androidx.lifecycle.MutableLiveData import com.casic.qd.smartwell.base.BaseViewModel import com.casic.qd.smartwell.extensions.launch @@ -13,6 +14,7 @@ class AreaViewModel : BaseViewModel() { + private val kTag = "AreaViewModel" private val gson = Gson() val areaModel = MutableLiveData() @@ -27,6 +29,7 @@ response.toErrorMessage().show() } }, { + Log.e(kTag, it.toString(), it) "服务器异常".show() }) } \ No newline at end of file diff --git a/app/src/main/java/com/casic/qd/smartwell/vm/AuthenticateViewModel.kt b/app/src/main/java/com/casic/qd/smartwell/vm/AuthenticateViewModel.kt index 6b1d404..55ccc65 100644 --- a/app/src/main/java/com/casic/qd/smartwell/vm/AuthenticateViewModel.kt +++ b/app/src/main/java/com/casic/qd/smartwell/vm/AuthenticateViewModel.kt @@ -1,5 +1,6 @@ package com.casic.qd.smartwell.vm +import android.util.Log import androidx.lifecycle.MutableLiveData import com.casic.qd.smartwell.base.BaseViewModel import com.casic.qd.smartwell.extensions.launch @@ -10,12 +11,14 @@ class AuthenticateViewModel : BaseViewModel() { + private val kTag = "AuthenticateViewModel" val keyModel = MutableLiveData() fun obtainPublicKey() = launch({ loadState.value = LoadState.Loading keyModel.value = RetrofitServiceManager.authenticate() }, { + Log.e(kTag, it.toString(), it) "服务器异常".show() }) } \ No newline at end of file diff --git a/app/src/main/java/com/casic/qd/smartwell/vm/CancelAlarmViewModel.kt b/app/src/main/java/com/casic/qd/smartwell/vm/CancelAlarmViewModel.kt index 419447e..d95c207 100644 --- a/app/src/main/java/com/casic/qd/smartwell/vm/CancelAlarmViewModel.kt +++ b/app/src/main/java/com/casic/qd/smartwell/vm/CancelAlarmViewModel.kt @@ -1,5 +1,6 @@ package com.casic.qd.smartwell.vm +import android.util.Log import androidx.lifecycle.MutableLiveData import com.casic.qd.smartwell.base.BaseViewModel import com.casic.qd.smartwell.extensions.launch @@ -14,6 +15,7 @@ class CancelAlarmViewModel : BaseViewModel() { + private val kTag = "CancelAlarmViewModel" private val gson = Gson() val resultModel = MutableLiveData() @@ -37,6 +39,7 @@ } }, { loadState.value = LoadState.Fail + Log.e(kTag, it.toString(), it) "服务器异常".show() }) } \ No newline at end of file diff --git a/app/src/main/java/com/casic/qd/smartwell/vm/LoginInViewModel.kt b/app/src/main/java/com/casic/qd/smartwell/vm/LoginInViewModel.kt index ec0ac1b..fc2678e 100644 --- a/app/src/main/java/com/casic/qd/smartwell/vm/LoginInViewModel.kt +++ b/app/src/main/java/com/casic/qd/smartwell/vm/LoginInViewModel.kt @@ -1,5 +1,6 @@ package com.casic.qd.smartwell.vm +import android.util.Log import androidx.lifecycle.MutableLiveData import com.casic.qd.smartwell.base.BaseViewModel import com.casic.qd.smartwell.extensions.launch @@ -14,6 +15,7 @@ class LoginInViewModel : BaseViewModel() { + private val kTag = "LoginInViewModel" private val gson = Gson() val resultModel = MutableLiveData() @@ -31,6 +33,7 @@ } }, { loadState.value = LoadState.Fail + Log.e(kTag, it.toString(), it) "服务器异常".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 7dcbc22..216e7cc 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 @@ -15,10 +15,26 @@ return dateFormat.format(calendar.time) } +fun Long.timestampToLastMonthDate(): 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) - 29) + return dateFormat.format(calendar.time) +} fun Long.timestampToDate(): String = SimpleDateFormat("yyyy-MM-dd", Locale.CHINA).format(Date(this)) +/** + * 获取当前月份所在季度 + * */ +fun Long.getQuarterOfYear(): Int { + val calendar = Calendar.getInstance() + calendar.time = Date(this) + return calendar.get(Calendar.MONTH) / 3 + 1 +} + fun Long.isEarlierThanStart(date: String): Boolean { if (date.isBlank()) { return false diff --git a/app/src/main/java/com/casic/qd/smartwell/extensions/String.kt b/app/src/main/java/com/casic/qd/smartwell/extensions/String.kt index 1e5a885..19808ef 100644 --- a/app/src/main/java/com/casic/qd/smartwell/extensions/String.kt +++ b/app/src/main/java/com/casic/qd/smartwell/extensions/String.kt @@ -11,6 +11,9 @@ import com.google.gson.reflect.TypeToken import com.qmuiteam.qmui.util.QMUIDisplayHelper import org.json.JSONObject +import java.text.ParseException +import java.text.SimpleDateFormat +import java.util.* /** * String扩展方法 @@ -58,3 +61,18 @@ val split = this.split("-") return split[1] + "/" + split[2] } + +fun String.differ(endDate: String): Int { + val dateFormat = SimpleDateFormat("yyyy-MM-dd", Locale.CHINA) + try { + val star: Date = dateFormat.parse(this) //开始时间 + val endDay: Date = dateFormat.parse(endDate) //结束时间 + val starTime = star.time + val endTime = endDay.time + val num = endTime - starTime //时间戳相差的毫秒数 + return (num / 24 / 60 / 60 / 1000).toInt() + } catch (e: ParseException) { + e.printStackTrace() + } + return 0 +} 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 7c6263a..8daf653 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 @@ -30,10 +30,10 @@ * @email 290677893@qq.com */ object ChartViewHelper { - private const val Tag = "ChartViewHelper" + private const val kTag = "ChartViewHelper" private val decimalFormat = DecimalFormat("##0") - fun initLineChart(chart: LineChart, axisMaximum: Float) { + fun initLineChart(chart: LineChart) { chart.setDrawGridBackground(false) chart.setDrawBorders(false) //设置样式 @@ -47,7 +47,6 @@ val xAxis: XAxis = chart.xAxis xAxis.textColor = R.color.mainTextColor.convertColor() xAxis.textSize = 10f - xAxis.axisMaximum = axisMaximum xAxis.setDrawLabels(true) //绘制标签 指x轴上的对应数值 xAxis.setDrawAxisLine(true) //是否绘制轴线 xAxis.setDrawGridLines(false) //设置x轴上每个点对应的线 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 378a6e0..ecb931e 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 @@ -40,4 +40,5 @@ const val PASSWORD = "password" const val USER_DETAIL_MODEL = "userDetailModel" const val CANCEL_ALARM_ACTION = "cancelAlarm" + const val AREA_ID = "110000" } \ No newline at end of file diff --git a/app/src/main/java/com/casic/qd/smartwell/view/ExpandedActivity.kt b/app/src/main/java/com/casic/qd/smartwell/view/ExpandedActivity.kt index 14763e8..5bd2f91 100644 --- a/app/src/main/java/com/casic/qd/smartwell/view/ExpandedActivity.kt +++ b/app/src/main/java/com/casic/qd/smartwell/view/ExpandedActivity.kt @@ -1,22 +1,29 @@ package com.casic.qd.smartwell.view +import android.view.View +import android.widget.AdapterView import androidx.lifecycle.ViewModelProvider import com.casic.qd.smartwell.R import com.casic.qd.smartwell.base.BaseActivity -import com.casic.qd.smartwell.extensions.convertColor -import com.casic.qd.smartwell.extensions.timestampToDate -import com.casic.qd.smartwell.extensions.timestampToLastWeekDate +import com.casic.qd.smartwell.extensions.* import com.casic.qd.smartwell.model.LineChartEntryModel import com.casic.qd.smartwell.utils.ChartViewHelper import com.casic.qd.smartwell.utils.Constant import com.casic.qd.smartwell.vm.WaterStatisticsViewModel import com.github.mikephil.charting.data.Entry -import kotlinx.android.synthetic.main.activity_main.* +import kotlinx.android.synthetic.main.activity_expanded.* +import kotlinx.android.synthetic.main.activity_main.waterLineChart +import java.util.* +import kotlin.collections.ArrayList + class ExpandedActivity : BaseActivity() { + private val kTag = "ExpandedActivity" private lateinit var waterViewModel: WaterStatisticsViewModel private val entryModels: MutableList = ArrayList() + private var startDate = "" + private var differ = 0 override fun initLayoutView(): Int = R.layout.activity_expanded @@ -26,28 +33,80 @@ override fun initData() { waterViewModel = ViewModelProvider(this).get(WaterStatisticsViewModel::class.java) - //初始化折线图,X轴从0开始 - ChartViewHelper.initLineChart(waterLineChart, (Constant.ONE_WEEK - 1).toFloat()) } override fun initEvent() { - //一周折线图数据 - val currentTime = System.currentTimeMillis() - waterViewModel.waterCountByDay( - "110000", - currentTime.timestampToLastWeekDate(), - currentTime.timestampToDate() - ) + //默认选择近7天的数据 + periodSpinner.setSelection(3) + periodSpinner.onItemSelectedListener = object : AdapterView.OnItemSelectedListener { + override fun onItemSelected( + parent: AdapterView<*>?, view: View?, + position: Int, id: Long + ) { + val time = System.currentTimeMillis() + val calendar = Calendar.getInstance() + val year: Int = calendar.get(Calendar.YEAR) + when (position) { + 0 -> { + //本年度 + startDate = "$year-01-01" + } + 1 -> { + //本季度 + when (time.getQuarterOfYear()) { + 1 -> { + startDate = "$year-01-01" + } + 2 -> { + startDate = "$year-04-01" + } + 3 -> { + startDate = "$year-07-01" + } + 4 -> { + startDate = "$year-10-01" + } + } + } + 2 -> { + //近30日 + startDate = time.timestampToLastMonthDate() + } + 3 -> { + //近7日 + startDate = time.timestampToLastWeekDate() + } + 4 -> { + //今日 + startDate = time.timestampToDate() + } + 5 -> { + + } + } + //初始化折线图,X轴从0开始 + differ = startDate.differ(time.timestampToDate()) + ChartViewHelper.initLineChart(waterLineChart) + waterViewModel.waterCountByDay(Constant.AREA_ID, startDate, time.timestampToDate()) + } + + override fun onNothingSelected(parent: AdapterView<*>?) { + + } + } + waterViewModel.areaDataModel.observe(this, { if (it.code == 200) { it.data?.forEachIndexed { i, dataBean -> val entryModel = LineChartEntryModel() - entryModel.lineColor = Constant.COLORS[i].convertColor() + if (i <= differ) { + entryModel.lineColor = Constant.COLORS[i].convertColor() + } entryModel.entryDate = dataBean.date - //每个entries都是一条折线 +// //每个entries都是一条折线 val entries: ArrayList = ArrayList() - for (j in 0 until Constant.ONE_WEEK) { + for (j in 0..differ) { val areaData = it.data!![j].data!![i] entries.add( Entry(j.toFloat(), areaData.count!!.toFloat(), areaData.areaName) @@ -55,6 +114,23 @@ } entryModel.entryList = entries entryModels.add(entryModel) + + /** + * i的范围是[0,differ] + * */ + //每个entries都是一条折线 +// val entries: ArrayList = ArrayList() +// for (k in dataBean.data!!.indices) { +// /** +// * i的范围是[0,dataBean.data!!.indices] +// * */ +// val areaData = dataBean.data!![k] +// entries.add( +// Entry(k.toFloat(), areaData.count!!.toFloat(), areaData.areaName) +// ) +// } +// entryModel.entryList = entries +// entryModels.add(entryModel) } ChartViewHelper.setLineChartData(waterLineChart, entryModels) } 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 56ea003..570df4e 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 @@ -86,7 +86,7 @@ }) //Banner点击事件 setOnBannerListener { data, _ -> - startActivity(Intent(this@MainActivity, WebsiteActivity::class.java)) + navigatePageTo(WebsiteActivity::class.java) } } @@ -107,9 +107,6 @@ //初始化vm waterViewModel = ViewModelProvider(this).get(WaterStatisticsViewModel::class.java) - - //初始化折线图,X轴从0开始 - ChartViewHelper.initLineChart(waterLineChart, (Constant.ONE_WEEK - 1).toFloat()) weakReferenceHandler = WeakReferenceHandler(this) } @@ -125,23 +122,26 @@ navigatePageTo(AlarmManagementActivity::class.java) } + //初始化折线图,X轴从0开始 + val time = System.currentTimeMillis() + val startDate = time.timestampToLastWeekDate() + val endDate = time.timestampToDate() + val differ = startDate.differ(endDate) + ChartViewHelper.initLineChart(waterLineChart) //一周折线图数据 - val currentTime = System.currentTimeMillis() - waterViewModel.waterCountByDay( - "110000", - currentTime.timestampToLastWeekDate(), - currentTime.timestampToDate() - ) + waterViewModel.waterCountByDay(Constant.AREA_ID, startDate, endDate) waterViewModel.areaDataModel.observe(this, { if (it.code == 200) { it.data?.forEachIndexed { i, dataBean -> val entryModel = LineChartEntryModel() - entryModel.lineColor = Constant.COLORS[i].convertColor() + if (i <= differ) { + entryModel.lineColor = Constant.COLORS[i].convertColor() + } entryModel.entryDate = dataBean.date //每个entries都是一条折线 val entries: ArrayList = ArrayList() - for (j in 0 until Constant.ONE_WEEK) { + for (j in 0..differ) { val areaData = it.data!![j].data!![i] entries.add( Entry(j.toFloat(), areaData.count!!.toFloat(), areaData.areaName) diff --git a/app/src/main/java/com/casic/qd/smartwell/view/StatisticsActivity.kt b/app/src/main/java/com/casic/qd/smartwell/view/StatisticsActivity.kt index f6874f9..d6401c8 100644 --- a/app/src/main/java/com/casic/qd/smartwell/view/StatisticsActivity.kt +++ b/app/src/main/java/com/casic/qd/smartwell/view/StatisticsActivity.kt @@ -45,7 +45,7 @@ ChartViewHelper.setPieChartData(totalPieChart, pieEntries) //初始化折线图 - ChartViewHelper.initLineChart(totalLineChart, Constant.YEARS.last().toFloat()) + ChartViewHelper.initLineChart(totalLineChart) //TODO 这是模拟数据 for (i in Constant.YEARS) { valveEntries.add( diff --git a/app/src/main/java/com/casic/qd/smartwell/vm/AlarmContentViewModel.kt b/app/src/main/java/com/casic/qd/smartwell/vm/AlarmContentViewModel.kt index 8c1d4e3..b12b37f 100644 --- a/app/src/main/java/com/casic/qd/smartwell/vm/AlarmContentViewModel.kt +++ b/app/src/main/java/com/casic/qd/smartwell/vm/AlarmContentViewModel.kt @@ -1,5 +1,6 @@ package com.casic.qd.smartwell.vm +import android.util.Log import androidx.lifecycle.MutableLiveData import com.casic.qd.smartwell.base.BaseViewModel import com.casic.qd.smartwell.extensions.launch @@ -13,6 +14,7 @@ class AlarmContentViewModel : BaseViewModel() { + private val kTag = "AlarmContentViewModel" private val gson = Gson() val contentModel = MutableLiveData() @@ -27,6 +29,7 @@ response.toErrorMessage().show() } }, { + Log.e(kTag, it.toString(), it) "服务器异常".show() }) } \ No newline at end of file diff --git a/app/src/main/java/com/casic/qd/smartwell/vm/AlarmListViewModel.kt b/app/src/main/java/com/casic/qd/smartwell/vm/AlarmListViewModel.kt index 2f41249..58cecfa 100644 --- a/app/src/main/java/com/casic/qd/smartwell/vm/AlarmListViewModel.kt +++ b/app/src/main/java/com/casic/qd/smartwell/vm/AlarmListViewModel.kt @@ -1,5 +1,6 @@ package com.casic.qd.smartwell.vm +import android.util.Log import androidx.lifecycle.MutableLiveData import com.casic.qd.smartwell.base.BaseViewModel import com.casic.qd.smartwell.extensions.launch @@ -13,6 +14,7 @@ class AlarmListViewModel : BaseViewModel() { + private val kTag = "AlarmListViewModel" private val gson = Gson() val listModel = MutableLiveData() @@ -45,6 +47,7 @@ response.toErrorMessage().show() } }, { + Log.e(kTag, it.toString(), it) "服务器异常".show() }) } \ No newline at end of file diff --git a/app/src/main/java/com/casic/qd/smartwell/vm/AlarmTypeViewModel.kt b/app/src/main/java/com/casic/qd/smartwell/vm/AlarmTypeViewModel.kt index dcaa579..c98d93c 100644 --- a/app/src/main/java/com/casic/qd/smartwell/vm/AlarmTypeViewModel.kt +++ b/app/src/main/java/com/casic/qd/smartwell/vm/AlarmTypeViewModel.kt @@ -1,5 +1,6 @@ package com.casic.qd.smartwell.vm +import android.util.Log import androidx.lifecycle.MutableLiveData import com.casic.qd.smartwell.base.BaseViewModel import com.casic.qd.smartwell.extensions.launch @@ -13,6 +14,7 @@ class AlarmTypeViewModel : BaseViewModel() { + private val kTag = "AlarmTypeViewModel" private val gson = Gson() val typeModel = MutableLiveData() @@ -27,6 +29,7 @@ response.toErrorMessage().show() } }, { + Log.e(kTag, it.toString(), it) "服务器异常".show() }) } \ No newline at end of file diff --git a/app/src/main/java/com/casic/qd/smartwell/vm/AreaViewModel.kt b/app/src/main/java/com/casic/qd/smartwell/vm/AreaViewModel.kt index 6d06350..c337e59 100644 --- a/app/src/main/java/com/casic/qd/smartwell/vm/AreaViewModel.kt +++ b/app/src/main/java/com/casic/qd/smartwell/vm/AreaViewModel.kt @@ -1,5 +1,6 @@ package com.casic.qd.smartwell.vm +import android.util.Log import androidx.lifecycle.MutableLiveData import com.casic.qd.smartwell.base.BaseViewModel import com.casic.qd.smartwell.extensions.launch @@ -13,6 +14,7 @@ class AreaViewModel : BaseViewModel() { + private val kTag = "AreaViewModel" private val gson = Gson() val areaModel = MutableLiveData() @@ -27,6 +29,7 @@ response.toErrorMessage().show() } }, { + Log.e(kTag, it.toString(), it) "服务器异常".show() }) } \ No newline at end of file diff --git a/app/src/main/java/com/casic/qd/smartwell/vm/AuthenticateViewModel.kt b/app/src/main/java/com/casic/qd/smartwell/vm/AuthenticateViewModel.kt index 6b1d404..55ccc65 100644 --- a/app/src/main/java/com/casic/qd/smartwell/vm/AuthenticateViewModel.kt +++ b/app/src/main/java/com/casic/qd/smartwell/vm/AuthenticateViewModel.kt @@ -1,5 +1,6 @@ package com.casic.qd.smartwell.vm +import android.util.Log import androidx.lifecycle.MutableLiveData import com.casic.qd.smartwell.base.BaseViewModel import com.casic.qd.smartwell.extensions.launch @@ -10,12 +11,14 @@ class AuthenticateViewModel : BaseViewModel() { + private val kTag = "AuthenticateViewModel" val keyModel = MutableLiveData() fun obtainPublicKey() = launch({ loadState.value = LoadState.Loading keyModel.value = RetrofitServiceManager.authenticate() }, { + Log.e(kTag, it.toString(), it) "服务器异常".show() }) } \ No newline at end of file diff --git a/app/src/main/java/com/casic/qd/smartwell/vm/CancelAlarmViewModel.kt b/app/src/main/java/com/casic/qd/smartwell/vm/CancelAlarmViewModel.kt index 419447e..d95c207 100644 --- a/app/src/main/java/com/casic/qd/smartwell/vm/CancelAlarmViewModel.kt +++ b/app/src/main/java/com/casic/qd/smartwell/vm/CancelAlarmViewModel.kt @@ -1,5 +1,6 @@ package com.casic.qd.smartwell.vm +import android.util.Log import androidx.lifecycle.MutableLiveData import com.casic.qd.smartwell.base.BaseViewModel import com.casic.qd.smartwell.extensions.launch @@ -14,6 +15,7 @@ class CancelAlarmViewModel : BaseViewModel() { + private val kTag = "CancelAlarmViewModel" private val gson = Gson() val resultModel = MutableLiveData() @@ -37,6 +39,7 @@ } }, { loadState.value = LoadState.Fail + Log.e(kTag, it.toString(), it) "服务器异常".show() }) } \ No newline at end of file diff --git a/app/src/main/java/com/casic/qd/smartwell/vm/LoginInViewModel.kt b/app/src/main/java/com/casic/qd/smartwell/vm/LoginInViewModel.kt index ec0ac1b..fc2678e 100644 --- a/app/src/main/java/com/casic/qd/smartwell/vm/LoginInViewModel.kt +++ b/app/src/main/java/com/casic/qd/smartwell/vm/LoginInViewModel.kt @@ -1,5 +1,6 @@ package com.casic.qd.smartwell.vm +import android.util.Log import androidx.lifecycle.MutableLiveData import com.casic.qd.smartwell.base.BaseViewModel import com.casic.qd.smartwell.extensions.launch @@ -14,6 +15,7 @@ class LoginInViewModel : BaseViewModel() { + private val kTag = "LoginInViewModel" private val gson = Gson() val resultModel = MutableLiveData() @@ -31,6 +33,7 @@ } }, { loadState.value = LoadState.Fail + Log.e(kTag, it.toString(), it) "服务器异常".show() }) } \ No newline at end of file diff --git a/app/src/main/java/com/casic/qd/smartwell/vm/SearchAlarmViewModel.kt b/app/src/main/java/com/casic/qd/smartwell/vm/SearchAlarmViewModel.kt index c3fc1da..1ae3407 100644 --- a/app/src/main/java/com/casic/qd/smartwell/vm/SearchAlarmViewModel.kt +++ b/app/src/main/java/com/casic/qd/smartwell/vm/SearchAlarmViewModel.kt @@ -1,5 +1,6 @@ package com.casic.qd.smartwell.vm +import android.util.Log import androidx.lifecycle.MutableLiveData import com.casic.qd.smartwell.base.BaseViewModel import com.casic.qd.smartwell.extensions.launch @@ -14,6 +15,7 @@ class SearchAlarmViewModel : BaseViewModel() { + private val kTag = "SearchAlarmViewModel" private val gson = Gson() val listModel = MutableLiveData() @@ -43,6 +45,7 @@ } }, { loadState.value = LoadState.Fail + Log.e(kTag, it.toString(), it) "服务器异常".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 7dcbc22..216e7cc 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 @@ -15,10 +15,26 @@ return dateFormat.format(calendar.time) } +fun Long.timestampToLastMonthDate(): 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) - 29) + return dateFormat.format(calendar.time) +} fun Long.timestampToDate(): String = SimpleDateFormat("yyyy-MM-dd", Locale.CHINA).format(Date(this)) +/** + * 获取当前月份所在季度 + * */ +fun Long.getQuarterOfYear(): Int { + val calendar = Calendar.getInstance() + calendar.time = Date(this) + return calendar.get(Calendar.MONTH) / 3 + 1 +} + fun Long.isEarlierThanStart(date: String): Boolean { if (date.isBlank()) { return false diff --git a/app/src/main/java/com/casic/qd/smartwell/extensions/String.kt b/app/src/main/java/com/casic/qd/smartwell/extensions/String.kt index 1e5a885..19808ef 100644 --- a/app/src/main/java/com/casic/qd/smartwell/extensions/String.kt +++ b/app/src/main/java/com/casic/qd/smartwell/extensions/String.kt @@ -11,6 +11,9 @@ import com.google.gson.reflect.TypeToken import com.qmuiteam.qmui.util.QMUIDisplayHelper import org.json.JSONObject +import java.text.ParseException +import java.text.SimpleDateFormat +import java.util.* /** * String扩展方法 @@ -58,3 +61,18 @@ val split = this.split("-") return split[1] + "/" + split[2] } + +fun String.differ(endDate: String): Int { + val dateFormat = SimpleDateFormat("yyyy-MM-dd", Locale.CHINA) + try { + val star: Date = dateFormat.parse(this) //开始时间 + val endDay: Date = dateFormat.parse(endDate) //结束时间 + val starTime = star.time + val endTime = endDay.time + val num = endTime - starTime //时间戳相差的毫秒数 + return (num / 24 / 60 / 60 / 1000).toInt() + } catch (e: ParseException) { + e.printStackTrace() + } + return 0 +} 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 7c6263a..8daf653 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 @@ -30,10 +30,10 @@ * @email 290677893@qq.com */ object ChartViewHelper { - private const val Tag = "ChartViewHelper" + private const val kTag = "ChartViewHelper" private val decimalFormat = DecimalFormat("##0") - fun initLineChart(chart: LineChart, axisMaximum: Float) { + fun initLineChart(chart: LineChart) { chart.setDrawGridBackground(false) chart.setDrawBorders(false) //设置样式 @@ -47,7 +47,6 @@ val xAxis: XAxis = chart.xAxis xAxis.textColor = R.color.mainTextColor.convertColor() xAxis.textSize = 10f - xAxis.axisMaximum = axisMaximum xAxis.setDrawLabels(true) //绘制标签 指x轴上的对应数值 xAxis.setDrawAxisLine(true) //是否绘制轴线 xAxis.setDrawGridLines(false) //设置x轴上每个点对应的线 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 378a6e0..ecb931e 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 @@ -40,4 +40,5 @@ const val PASSWORD = "password" const val USER_DETAIL_MODEL = "userDetailModel" const val CANCEL_ALARM_ACTION = "cancelAlarm" + const val AREA_ID = "110000" } \ No newline at end of file diff --git a/app/src/main/java/com/casic/qd/smartwell/view/ExpandedActivity.kt b/app/src/main/java/com/casic/qd/smartwell/view/ExpandedActivity.kt index 14763e8..5bd2f91 100644 --- a/app/src/main/java/com/casic/qd/smartwell/view/ExpandedActivity.kt +++ b/app/src/main/java/com/casic/qd/smartwell/view/ExpandedActivity.kt @@ -1,22 +1,29 @@ package com.casic.qd.smartwell.view +import android.view.View +import android.widget.AdapterView import androidx.lifecycle.ViewModelProvider import com.casic.qd.smartwell.R import com.casic.qd.smartwell.base.BaseActivity -import com.casic.qd.smartwell.extensions.convertColor -import com.casic.qd.smartwell.extensions.timestampToDate -import com.casic.qd.smartwell.extensions.timestampToLastWeekDate +import com.casic.qd.smartwell.extensions.* import com.casic.qd.smartwell.model.LineChartEntryModel import com.casic.qd.smartwell.utils.ChartViewHelper import com.casic.qd.smartwell.utils.Constant import com.casic.qd.smartwell.vm.WaterStatisticsViewModel import com.github.mikephil.charting.data.Entry -import kotlinx.android.synthetic.main.activity_main.* +import kotlinx.android.synthetic.main.activity_expanded.* +import kotlinx.android.synthetic.main.activity_main.waterLineChart +import java.util.* +import kotlin.collections.ArrayList + class ExpandedActivity : BaseActivity() { + private val kTag = "ExpandedActivity" private lateinit var waterViewModel: WaterStatisticsViewModel private val entryModels: MutableList = ArrayList() + private var startDate = "" + private var differ = 0 override fun initLayoutView(): Int = R.layout.activity_expanded @@ -26,28 +33,80 @@ override fun initData() { waterViewModel = ViewModelProvider(this).get(WaterStatisticsViewModel::class.java) - //初始化折线图,X轴从0开始 - ChartViewHelper.initLineChart(waterLineChart, (Constant.ONE_WEEK - 1).toFloat()) } override fun initEvent() { - //一周折线图数据 - val currentTime = System.currentTimeMillis() - waterViewModel.waterCountByDay( - "110000", - currentTime.timestampToLastWeekDate(), - currentTime.timestampToDate() - ) + //默认选择近7天的数据 + periodSpinner.setSelection(3) + periodSpinner.onItemSelectedListener = object : AdapterView.OnItemSelectedListener { + override fun onItemSelected( + parent: AdapterView<*>?, view: View?, + position: Int, id: Long + ) { + val time = System.currentTimeMillis() + val calendar = Calendar.getInstance() + val year: Int = calendar.get(Calendar.YEAR) + when (position) { + 0 -> { + //本年度 + startDate = "$year-01-01" + } + 1 -> { + //本季度 + when (time.getQuarterOfYear()) { + 1 -> { + startDate = "$year-01-01" + } + 2 -> { + startDate = "$year-04-01" + } + 3 -> { + startDate = "$year-07-01" + } + 4 -> { + startDate = "$year-10-01" + } + } + } + 2 -> { + //近30日 + startDate = time.timestampToLastMonthDate() + } + 3 -> { + //近7日 + startDate = time.timestampToLastWeekDate() + } + 4 -> { + //今日 + startDate = time.timestampToDate() + } + 5 -> { + + } + } + //初始化折线图,X轴从0开始 + differ = startDate.differ(time.timestampToDate()) + ChartViewHelper.initLineChart(waterLineChart) + waterViewModel.waterCountByDay(Constant.AREA_ID, startDate, time.timestampToDate()) + } + + override fun onNothingSelected(parent: AdapterView<*>?) { + + } + } + waterViewModel.areaDataModel.observe(this, { if (it.code == 200) { it.data?.forEachIndexed { i, dataBean -> val entryModel = LineChartEntryModel() - entryModel.lineColor = Constant.COLORS[i].convertColor() + if (i <= differ) { + entryModel.lineColor = Constant.COLORS[i].convertColor() + } entryModel.entryDate = dataBean.date - //每个entries都是一条折线 +// //每个entries都是一条折线 val entries: ArrayList = ArrayList() - for (j in 0 until Constant.ONE_WEEK) { + for (j in 0..differ) { val areaData = it.data!![j].data!![i] entries.add( Entry(j.toFloat(), areaData.count!!.toFloat(), areaData.areaName) @@ -55,6 +114,23 @@ } entryModel.entryList = entries entryModels.add(entryModel) + + /** + * i的范围是[0,differ] + * */ + //每个entries都是一条折线 +// val entries: ArrayList = ArrayList() +// for (k in dataBean.data!!.indices) { +// /** +// * i的范围是[0,dataBean.data!!.indices] +// * */ +// val areaData = dataBean.data!![k] +// entries.add( +// Entry(k.toFloat(), areaData.count!!.toFloat(), areaData.areaName) +// ) +// } +// entryModel.entryList = entries +// entryModels.add(entryModel) } ChartViewHelper.setLineChartData(waterLineChart, entryModels) } 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 56ea003..570df4e 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 @@ -86,7 +86,7 @@ }) //Banner点击事件 setOnBannerListener { data, _ -> - startActivity(Intent(this@MainActivity, WebsiteActivity::class.java)) + navigatePageTo(WebsiteActivity::class.java) } } @@ -107,9 +107,6 @@ //初始化vm waterViewModel = ViewModelProvider(this).get(WaterStatisticsViewModel::class.java) - - //初始化折线图,X轴从0开始 - ChartViewHelper.initLineChart(waterLineChart, (Constant.ONE_WEEK - 1).toFloat()) weakReferenceHandler = WeakReferenceHandler(this) } @@ -125,23 +122,26 @@ navigatePageTo(AlarmManagementActivity::class.java) } + //初始化折线图,X轴从0开始 + val time = System.currentTimeMillis() + val startDate = time.timestampToLastWeekDate() + val endDate = time.timestampToDate() + val differ = startDate.differ(endDate) + ChartViewHelper.initLineChart(waterLineChart) //一周折线图数据 - val currentTime = System.currentTimeMillis() - waterViewModel.waterCountByDay( - "110000", - currentTime.timestampToLastWeekDate(), - currentTime.timestampToDate() - ) + waterViewModel.waterCountByDay(Constant.AREA_ID, startDate, endDate) waterViewModel.areaDataModel.observe(this, { if (it.code == 200) { it.data?.forEachIndexed { i, dataBean -> val entryModel = LineChartEntryModel() - entryModel.lineColor = Constant.COLORS[i].convertColor() + if (i <= differ) { + entryModel.lineColor = Constant.COLORS[i].convertColor() + } entryModel.entryDate = dataBean.date //每个entries都是一条折线 val entries: ArrayList = ArrayList() - for (j in 0 until Constant.ONE_WEEK) { + for (j in 0..differ) { val areaData = it.data!![j].data!![i] entries.add( Entry(j.toFloat(), areaData.count!!.toFloat(), areaData.areaName) diff --git a/app/src/main/java/com/casic/qd/smartwell/view/StatisticsActivity.kt b/app/src/main/java/com/casic/qd/smartwell/view/StatisticsActivity.kt index f6874f9..d6401c8 100644 --- a/app/src/main/java/com/casic/qd/smartwell/view/StatisticsActivity.kt +++ b/app/src/main/java/com/casic/qd/smartwell/view/StatisticsActivity.kt @@ -45,7 +45,7 @@ ChartViewHelper.setPieChartData(totalPieChart, pieEntries) //初始化折线图 - ChartViewHelper.initLineChart(totalLineChart, Constant.YEARS.last().toFloat()) + ChartViewHelper.initLineChart(totalLineChart) //TODO 这是模拟数据 for (i in Constant.YEARS) { valveEntries.add( diff --git a/app/src/main/java/com/casic/qd/smartwell/vm/AlarmContentViewModel.kt b/app/src/main/java/com/casic/qd/smartwell/vm/AlarmContentViewModel.kt index 8c1d4e3..b12b37f 100644 --- a/app/src/main/java/com/casic/qd/smartwell/vm/AlarmContentViewModel.kt +++ b/app/src/main/java/com/casic/qd/smartwell/vm/AlarmContentViewModel.kt @@ -1,5 +1,6 @@ package com.casic.qd.smartwell.vm +import android.util.Log import androidx.lifecycle.MutableLiveData import com.casic.qd.smartwell.base.BaseViewModel import com.casic.qd.smartwell.extensions.launch @@ -13,6 +14,7 @@ class AlarmContentViewModel : BaseViewModel() { + private val kTag = "AlarmContentViewModel" private val gson = Gson() val contentModel = MutableLiveData() @@ -27,6 +29,7 @@ response.toErrorMessage().show() } }, { + Log.e(kTag, it.toString(), it) "服务器异常".show() }) } \ No newline at end of file diff --git a/app/src/main/java/com/casic/qd/smartwell/vm/AlarmListViewModel.kt b/app/src/main/java/com/casic/qd/smartwell/vm/AlarmListViewModel.kt index 2f41249..58cecfa 100644 --- a/app/src/main/java/com/casic/qd/smartwell/vm/AlarmListViewModel.kt +++ b/app/src/main/java/com/casic/qd/smartwell/vm/AlarmListViewModel.kt @@ -1,5 +1,6 @@ package com.casic.qd.smartwell.vm +import android.util.Log import androidx.lifecycle.MutableLiveData import com.casic.qd.smartwell.base.BaseViewModel import com.casic.qd.smartwell.extensions.launch @@ -13,6 +14,7 @@ class AlarmListViewModel : BaseViewModel() { + private val kTag = "AlarmListViewModel" private val gson = Gson() val listModel = MutableLiveData() @@ -45,6 +47,7 @@ response.toErrorMessage().show() } }, { + Log.e(kTag, it.toString(), it) "服务器异常".show() }) } \ No newline at end of file diff --git a/app/src/main/java/com/casic/qd/smartwell/vm/AlarmTypeViewModel.kt b/app/src/main/java/com/casic/qd/smartwell/vm/AlarmTypeViewModel.kt index dcaa579..c98d93c 100644 --- a/app/src/main/java/com/casic/qd/smartwell/vm/AlarmTypeViewModel.kt +++ b/app/src/main/java/com/casic/qd/smartwell/vm/AlarmTypeViewModel.kt @@ -1,5 +1,6 @@ package com.casic.qd.smartwell.vm +import android.util.Log import androidx.lifecycle.MutableLiveData import com.casic.qd.smartwell.base.BaseViewModel import com.casic.qd.smartwell.extensions.launch @@ -13,6 +14,7 @@ class AlarmTypeViewModel : BaseViewModel() { + private val kTag = "AlarmTypeViewModel" private val gson = Gson() val typeModel = MutableLiveData() @@ -27,6 +29,7 @@ response.toErrorMessage().show() } }, { + Log.e(kTag, it.toString(), it) "服务器异常".show() }) } \ No newline at end of file diff --git a/app/src/main/java/com/casic/qd/smartwell/vm/AreaViewModel.kt b/app/src/main/java/com/casic/qd/smartwell/vm/AreaViewModel.kt index 6d06350..c337e59 100644 --- a/app/src/main/java/com/casic/qd/smartwell/vm/AreaViewModel.kt +++ b/app/src/main/java/com/casic/qd/smartwell/vm/AreaViewModel.kt @@ -1,5 +1,6 @@ package com.casic.qd.smartwell.vm +import android.util.Log import androidx.lifecycle.MutableLiveData import com.casic.qd.smartwell.base.BaseViewModel import com.casic.qd.smartwell.extensions.launch @@ -13,6 +14,7 @@ class AreaViewModel : BaseViewModel() { + private val kTag = "AreaViewModel" private val gson = Gson() val areaModel = MutableLiveData() @@ -27,6 +29,7 @@ response.toErrorMessage().show() } }, { + Log.e(kTag, it.toString(), it) "服务器异常".show() }) } \ No newline at end of file diff --git a/app/src/main/java/com/casic/qd/smartwell/vm/AuthenticateViewModel.kt b/app/src/main/java/com/casic/qd/smartwell/vm/AuthenticateViewModel.kt index 6b1d404..55ccc65 100644 --- a/app/src/main/java/com/casic/qd/smartwell/vm/AuthenticateViewModel.kt +++ b/app/src/main/java/com/casic/qd/smartwell/vm/AuthenticateViewModel.kt @@ -1,5 +1,6 @@ package com.casic.qd.smartwell.vm +import android.util.Log import androidx.lifecycle.MutableLiveData import com.casic.qd.smartwell.base.BaseViewModel import com.casic.qd.smartwell.extensions.launch @@ -10,12 +11,14 @@ class AuthenticateViewModel : BaseViewModel() { + private val kTag = "AuthenticateViewModel" val keyModel = MutableLiveData() fun obtainPublicKey() = launch({ loadState.value = LoadState.Loading keyModel.value = RetrofitServiceManager.authenticate() }, { + Log.e(kTag, it.toString(), it) "服务器异常".show() }) } \ No newline at end of file diff --git a/app/src/main/java/com/casic/qd/smartwell/vm/CancelAlarmViewModel.kt b/app/src/main/java/com/casic/qd/smartwell/vm/CancelAlarmViewModel.kt index 419447e..d95c207 100644 --- a/app/src/main/java/com/casic/qd/smartwell/vm/CancelAlarmViewModel.kt +++ b/app/src/main/java/com/casic/qd/smartwell/vm/CancelAlarmViewModel.kt @@ -1,5 +1,6 @@ package com.casic.qd.smartwell.vm +import android.util.Log import androidx.lifecycle.MutableLiveData import com.casic.qd.smartwell.base.BaseViewModel import com.casic.qd.smartwell.extensions.launch @@ -14,6 +15,7 @@ class CancelAlarmViewModel : BaseViewModel() { + private val kTag = "CancelAlarmViewModel" private val gson = Gson() val resultModel = MutableLiveData() @@ -37,6 +39,7 @@ } }, { loadState.value = LoadState.Fail + Log.e(kTag, it.toString(), it) "服务器异常".show() }) } \ No newline at end of file diff --git a/app/src/main/java/com/casic/qd/smartwell/vm/LoginInViewModel.kt b/app/src/main/java/com/casic/qd/smartwell/vm/LoginInViewModel.kt index ec0ac1b..fc2678e 100644 --- a/app/src/main/java/com/casic/qd/smartwell/vm/LoginInViewModel.kt +++ b/app/src/main/java/com/casic/qd/smartwell/vm/LoginInViewModel.kt @@ -1,5 +1,6 @@ package com.casic.qd.smartwell.vm +import android.util.Log import androidx.lifecycle.MutableLiveData import com.casic.qd.smartwell.base.BaseViewModel import com.casic.qd.smartwell.extensions.launch @@ -14,6 +15,7 @@ class LoginInViewModel : BaseViewModel() { + private val kTag = "LoginInViewModel" private val gson = Gson() val resultModel = MutableLiveData() @@ -31,6 +33,7 @@ } }, { loadState.value = LoadState.Fail + Log.e(kTag, it.toString(), it) "服务器异常".show() }) } \ No newline at end of file diff --git a/app/src/main/java/com/casic/qd/smartwell/vm/SearchAlarmViewModel.kt b/app/src/main/java/com/casic/qd/smartwell/vm/SearchAlarmViewModel.kt index c3fc1da..1ae3407 100644 --- a/app/src/main/java/com/casic/qd/smartwell/vm/SearchAlarmViewModel.kt +++ b/app/src/main/java/com/casic/qd/smartwell/vm/SearchAlarmViewModel.kt @@ -1,5 +1,6 @@ package com.casic.qd.smartwell.vm +import android.util.Log import androidx.lifecycle.MutableLiveData import com.casic.qd.smartwell.base.BaseViewModel import com.casic.qd.smartwell.extensions.launch @@ -14,6 +15,7 @@ class SearchAlarmViewModel : BaseViewModel() { + private val kTag = "SearchAlarmViewModel" private val gson = Gson() val listModel = MutableLiveData() @@ -43,6 +45,7 @@ } }, { loadState.value = LoadState.Fail + Log.e(kTag, it.toString(), it) "服务器异常".show() }) } \ No newline at end of file diff --git a/app/src/main/java/com/casic/qd/smartwell/vm/UserDetailViewModel.kt b/app/src/main/java/com/casic/qd/smartwell/vm/UserDetailViewModel.kt index 5bf6c64..91c39d9 100644 --- a/app/src/main/java/com/casic/qd/smartwell/vm/UserDetailViewModel.kt +++ b/app/src/main/java/com/casic/qd/smartwell/vm/UserDetailViewModel.kt @@ -1,5 +1,6 @@ package com.casic.qd.smartwell.vm +import android.util.Log import androidx.lifecycle.MutableLiveData import com.casic.qd.smartwell.base.BaseViewModel import com.casic.qd.smartwell.extensions.launch @@ -14,6 +15,7 @@ class UserDetailViewModel : BaseViewModel() { + private val kTag = "UserDetailViewModel" private val gson = Gson() //用户信息不用现取现用,布尔值标志用户token是否失效 @@ -34,6 +36,7 @@ flag.value = false } }, { + Log.e(kTag, it.toString(), it) "服务器异常".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 7dcbc22..216e7cc 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 @@ -15,10 +15,26 @@ return dateFormat.format(calendar.time) } +fun Long.timestampToLastMonthDate(): 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) - 29) + return dateFormat.format(calendar.time) +} fun Long.timestampToDate(): String = SimpleDateFormat("yyyy-MM-dd", Locale.CHINA).format(Date(this)) +/** + * 获取当前月份所在季度 + * */ +fun Long.getQuarterOfYear(): Int { + val calendar = Calendar.getInstance() + calendar.time = Date(this) + return calendar.get(Calendar.MONTH) / 3 + 1 +} + fun Long.isEarlierThanStart(date: String): Boolean { if (date.isBlank()) { return false diff --git a/app/src/main/java/com/casic/qd/smartwell/extensions/String.kt b/app/src/main/java/com/casic/qd/smartwell/extensions/String.kt index 1e5a885..19808ef 100644 --- a/app/src/main/java/com/casic/qd/smartwell/extensions/String.kt +++ b/app/src/main/java/com/casic/qd/smartwell/extensions/String.kt @@ -11,6 +11,9 @@ import com.google.gson.reflect.TypeToken import com.qmuiteam.qmui.util.QMUIDisplayHelper import org.json.JSONObject +import java.text.ParseException +import java.text.SimpleDateFormat +import java.util.* /** * String扩展方法 @@ -58,3 +61,18 @@ val split = this.split("-") return split[1] + "/" + split[2] } + +fun String.differ(endDate: String): Int { + val dateFormat = SimpleDateFormat("yyyy-MM-dd", Locale.CHINA) + try { + val star: Date = dateFormat.parse(this) //开始时间 + val endDay: Date = dateFormat.parse(endDate) //结束时间 + val starTime = star.time + val endTime = endDay.time + val num = endTime - starTime //时间戳相差的毫秒数 + return (num / 24 / 60 / 60 / 1000).toInt() + } catch (e: ParseException) { + e.printStackTrace() + } + return 0 +} 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 7c6263a..8daf653 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 @@ -30,10 +30,10 @@ * @email 290677893@qq.com */ object ChartViewHelper { - private const val Tag = "ChartViewHelper" + private const val kTag = "ChartViewHelper" private val decimalFormat = DecimalFormat("##0") - fun initLineChart(chart: LineChart, axisMaximum: Float) { + fun initLineChart(chart: LineChart) { chart.setDrawGridBackground(false) chart.setDrawBorders(false) //设置样式 @@ -47,7 +47,6 @@ val xAxis: XAxis = chart.xAxis xAxis.textColor = R.color.mainTextColor.convertColor() xAxis.textSize = 10f - xAxis.axisMaximum = axisMaximum xAxis.setDrawLabels(true) //绘制标签 指x轴上的对应数值 xAxis.setDrawAxisLine(true) //是否绘制轴线 xAxis.setDrawGridLines(false) //设置x轴上每个点对应的线 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 378a6e0..ecb931e 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 @@ -40,4 +40,5 @@ const val PASSWORD = "password" const val USER_DETAIL_MODEL = "userDetailModel" const val CANCEL_ALARM_ACTION = "cancelAlarm" + const val AREA_ID = "110000" } \ No newline at end of file diff --git a/app/src/main/java/com/casic/qd/smartwell/view/ExpandedActivity.kt b/app/src/main/java/com/casic/qd/smartwell/view/ExpandedActivity.kt index 14763e8..5bd2f91 100644 --- a/app/src/main/java/com/casic/qd/smartwell/view/ExpandedActivity.kt +++ b/app/src/main/java/com/casic/qd/smartwell/view/ExpandedActivity.kt @@ -1,22 +1,29 @@ package com.casic.qd.smartwell.view +import android.view.View +import android.widget.AdapterView import androidx.lifecycle.ViewModelProvider import com.casic.qd.smartwell.R import com.casic.qd.smartwell.base.BaseActivity -import com.casic.qd.smartwell.extensions.convertColor -import com.casic.qd.smartwell.extensions.timestampToDate -import com.casic.qd.smartwell.extensions.timestampToLastWeekDate +import com.casic.qd.smartwell.extensions.* import com.casic.qd.smartwell.model.LineChartEntryModel import com.casic.qd.smartwell.utils.ChartViewHelper import com.casic.qd.smartwell.utils.Constant import com.casic.qd.smartwell.vm.WaterStatisticsViewModel import com.github.mikephil.charting.data.Entry -import kotlinx.android.synthetic.main.activity_main.* +import kotlinx.android.synthetic.main.activity_expanded.* +import kotlinx.android.synthetic.main.activity_main.waterLineChart +import java.util.* +import kotlin.collections.ArrayList + class ExpandedActivity : BaseActivity() { + private val kTag = "ExpandedActivity" private lateinit var waterViewModel: WaterStatisticsViewModel private val entryModels: MutableList = ArrayList() + private var startDate = "" + private var differ = 0 override fun initLayoutView(): Int = R.layout.activity_expanded @@ -26,28 +33,80 @@ override fun initData() { waterViewModel = ViewModelProvider(this).get(WaterStatisticsViewModel::class.java) - //初始化折线图,X轴从0开始 - ChartViewHelper.initLineChart(waterLineChart, (Constant.ONE_WEEK - 1).toFloat()) } override fun initEvent() { - //一周折线图数据 - val currentTime = System.currentTimeMillis() - waterViewModel.waterCountByDay( - "110000", - currentTime.timestampToLastWeekDate(), - currentTime.timestampToDate() - ) + //默认选择近7天的数据 + periodSpinner.setSelection(3) + periodSpinner.onItemSelectedListener = object : AdapterView.OnItemSelectedListener { + override fun onItemSelected( + parent: AdapterView<*>?, view: View?, + position: Int, id: Long + ) { + val time = System.currentTimeMillis() + val calendar = Calendar.getInstance() + val year: Int = calendar.get(Calendar.YEAR) + when (position) { + 0 -> { + //本年度 + startDate = "$year-01-01" + } + 1 -> { + //本季度 + when (time.getQuarterOfYear()) { + 1 -> { + startDate = "$year-01-01" + } + 2 -> { + startDate = "$year-04-01" + } + 3 -> { + startDate = "$year-07-01" + } + 4 -> { + startDate = "$year-10-01" + } + } + } + 2 -> { + //近30日 + startDate = time.timestampToLastMonthDate() + } + 3 -> { + //近7日 + startDate = time.timestampToLastWeekDate() + } + 4 -> { + //今日 + startDate = time.timestampToDate() + } + 5 -> { + + } + } + //初始化折线图,X轴从0开始 + differ = startDate.differ(time.timestampToDate()) + ChartViewHelper.initLineChart(waterLineChart) + waterViewModel.waterCountByDay(Constant.AREA_ID, startDate, time.timestampToDate()) + } + + override fun onNothingSelected(parent: AdapterView<*>?) { + + } + } + waterViewModel.areaDataModel.observe(this, { if (it.code == 200) { it.data?.forEachIndexed { i, dataBean -> val entryModel = LineChartEntryModel() - entryModel.lineColor = Constant.COLORS[i].convertColor() + if (i <= differ) { + entryModel.lineColor = Constant.COLORS[i].convertColor() + } entryModel.entryDate = dataBean.date - //每个entries都是一条折线 +// //每个entries都是一条折线 val entries: ArrayList = ArrayList() - for (j in 0 until Constant.ONE_WEEK) { + for (j in 0..differ) { val areaData = it.data!![j].data!![i] entries.add( Entry(j.toFloat(), areaData.count!!.toFloat(), areaData.areaName) @@ -55,6 +114,23 @@ } entryModel.entryList = entries entryModels.add(entryModel) + + /** + * i的范围是[0,differ] + * */ + //每个entries都是一条折线 +// val entries: ArrayList = ArrayList() +// for (k in dataBean.data!!.indices) { +// /** +// * i的范围是[0,dataBean.data!!.indices] +// * */ +// val areaData = dataBean.data!![k] +// entries.add( +// Entry(k.toFloat(), areaData.count!!.toFloat(), areaData.areaName) +// ) +// } +// entryModel.entryList = entries +// entryModels.add(entryModel) } ChartViewHelper.setLineChartData(waterLineChart, entryModels) } 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 56ea003..570df4e 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 @@ -86,7 +86,7 @@ }) //Banner点击事件 setOnBannerListener { data, _ -> - startActivity(Intent(this@MainActivity, WebsiteActivity::class.java)) + navigatePageTo(WebsiteActivity::class.java) } } @@ -107,9 +107,6 @@ //初始化vm waterViewModel = ViewModelProvider(this).get(WaterStatisticsViewModel::class.java) - - //初始化折线图,X轴从0开始 - ChartViewHelper.initLineChart(waterLineChart, (Constant.ONE_WEEK - 1).toFloat()) weakReferenceHandler = WeakReferenceHandler(this) } @@ -125,23 +122,26 @@ navigatePageTo(AlarmManagementActivity::class.java) } + //初始化折线图,X轴从0开始 + val time = System.currentTimeMillis() + val startDate = time.timestampToLastWeekDate() + val endDate = time.timestampToDate() + val differ = startDate.differ(endDate) + ChartViewHelper.initLineChart(waterLineChart) //一周折线图数据 - val currentTime = System.currentTimeMillis() - waterViewModel.waterCountByDay( - "110000", - currentTime.timestampToLastWeekDate(), - currentTime.timestampToDate() - ) + waterViewModel.waterCountByDay(Constant.AREA_ID, startDate, endDate) waterViewModel.areaDataModel.observe(this, { if (it.code == 200) { it.data?.forEachIndexed { i, dataBean -> val entryModel = LineChartEntryModel() - entryModel.lineColor = Constant.COLORS[i].convertColor() + if (i <= differ) { + entryModel.lineColor = Constant.COLORS[i].convertColor() + } entryModel.entryDate = dataBean.date //每个entries都是一条折线 val entries: ArrayList = ArrayList() - for (j in 0 until Constant.ONE_WEEK) { + for (j in 0..differ) { val areaData = it.data!![j].data!![i] entries.add( Entry(j.toFloat(), areaData.count!!.toFloat(), areaData.areaName) diff --git a/app/src/main/java/com/casic/qd/smartwell/view/StatisticsActivity.kt b/app/src/main/java/com/casic/qd/smartwell/view/StatisticsActivity.kt index f6874f9..d6401c8 100644 --- a/app/src/main/java/com/casic/qd/smartwell/view/StatisticsActivity.kt +++ b/app/src/main/java/com/casic/qd/smartwell/view/StatisticsActivity.kt @@ -45,7 +45,7 @@ ChartViewHelper.setPieChartData(totalPieChart, pieEntries) //初始化折线图 - ChartViewHelper.initLineChart(totalLineChart, Constant.YEARS.last().toFloat()) + ChartViewHelper.initLineChart(totalLineChart) //TODO 这是模拟数据 for (i in Constant.YEARS) { valveEntries.add( diff --git a/app/src/main/java/com/casic/qd/smartwell/vm/AlarmContentViewModel.kt b/app/src/main/java/com/casic/qd/smartwell/vm/AlarmContentViewModel.kt index 8c1d4e3..b12b37f 100644 --- a/app/src/main/java/com/casic/qd/smartwell/vm/AlarmContentViewModel.kt +++ b/app/src/main/java/com/casic/qd/smartwell/vm/AlarmContentViewModel.kt @@ -1,5 +1,6 @@ package com.casic.qd.smartwell.vm +import android.util.Log import androidx.lifecycle.MutableLiveData import com.casic.qd.smartwell.base.BaseViewModel import com.casic.qd.smartwell.extensions.launch @@ -13,6 +14,7 @@ class AlarmContentViewModel : BaseViewModel() { + private val kTag = "AlarmContentViewModel" private val gson = Gson() val contentModel = MutableLiveData() @@ -27,6 +29,7 @@ response.toErrorMessage().show() } }, { + Log.e(kTag, it.toString(), it) "服务器异常".show() }) } \ No newline at end of file diff --git a/app/src/main/java/com/casic/qd/smartwell/vm/AlarmListViewModel.kt b/app/src/main/java/com/casic/qd/smartwell/vm/AlarmListViewModel.kt index 2f41249..58cecfa 100644 --- a/app/src/main/java/com/casic/qd/smartwell/vm/AlarmListViewModel.kt +++ b/app/src/main/java/com/casic/qd/smartwell/vm/AlarmListViewModel.kt @@ -1,5 +1,6 @@ package com.casic.qd.smartwell.vm +import android.util.Log import androidx.lifecycle.MutableLiveData import com.casic.qd.smartwell.base.BaseViewModel import com.casic.qd.smartwell.extensions.launch @@ -13,6 +14,7 @@ class AlarmListViewModel : BaseViewModel() { + private val kTag = "AlarmListViewModel" private val gson = Gson() val listModel = MutableLiveData() @@ -45,6 +47,7 @@ response.toErrorMessage().show() } }, { + Log.e(kTag, it.toString(), it) "服务器异常".show() }) } \ No newline at end of file diff --git a/app/src/main/java/com/casic/qd/smartwell/vm/AlarmTypeViewModel.kt b/app/src/main/java/com/casic/qd/smartwell/vm/AlarmTypeViewModel.kt index dcaa579..c98d93c 100644 --- a/app/src/main/java/com/casic/qd/smartwell/vm/AlarmTypeViewModel.kt +++ b/app/src/main/java/com/casic/qd/smartwell/vm/AlarmTypeViewModel.kt @@ -1,5 +1,6 @@ package com.casic.qd.smartwell.vm +import android.util.Log import androidx.lifecycle.MutableLiveData import com.casic.qd.smartwell.base.BaseViewModel import com.casic.qd.smartwell.extensions.launch @@ -13,6 +14,7 @@ class AlarmTypeViewModel : BaseViewModel() { + private val kTag = "AlarmTypeViewModel" private val gson = Gson() val typeModel = MutableLiveData() @@ -27,6 +29,7 @@ response.toErrorMessage().show() } }, { + Log.e(kTag, it.toString(), it) "服务器异常".show() }) } \ No newline at end of file diff --git a/app/src/main/java/com/casic/qd/smartwell/vm/AreaViewModel.kt b/app/src/main/java/com/casic/qd/smartwell/vm/AreaViewModel.kt index 6d06350..c337e59 100644 --- a/app/src/main/java/com/casic/qd/smartwell/vm/AreaViewModel.kt +++ b/app/src/main/java/com/casic/qd/smartwell/vm/AreaViewModel.kt @@ -1,5 +1,6 @@ package com.casic.qd.smartwell.vm +import android.util.Log import androidx.lifecycle.MutableLiveData import com.casic.qd.smartwell.base.BaseViewModel import com.casic.qd.smartwell.extensions.launch @@ -13,6 +14,7 @@ class AreaViewModel : BaseViewModel() { + private val kTag = "AreaViewModel" private val gson = Gson() val areaModel = MutableLiveData() @@ -27,6 +29,7 @@ response.toErrorMessage().show() } }, { + Log.e(kTag, it.toString(), it) "服务器异常".show() }) } \ No newline at end of file diff --git a/app/src/main/java/com/casic/qd/smartwell/vm/AuthenticateViewModel.kt b/app/src/main/java/com/casic/qd/smartwell/vm/AuthenticateViewModel.kt index 6b1d404..55ccc65 100644 --- a/app/src/main/java/com/casic/qd/smartwell/vm/AuthenticateViewModel.kt +++ b/app/src/main/java/com/casic/qd/smartwell/vm/AuthenticateViewModel.kt @@ -1,5 +1,6 @@ package com.casic.qd.smartwell.vm +import android.util.Log import androidx.lifecycle.MutableLiveData import com.casic.qd.smartwell.base.BaseViewModel import com.casic.qd.smartwell.extensions.launch @@ -10,12 +11,14 @@ class AuthenticateViewModel : BaseViewModel() { + private val kTag = "AuthenticateViewModel" val keyModel = MutableLiveData() fun obtainPublicKey() = launch({ loadState.value = LoadState.Loading keyModel.value = RetrofitServiceManager.authenticate() }, { + Log.e(kTag, it.toString(), it) "服务器异常".show() }) } \ No newline at end of file diff --git a/app/src/main/java/com/casic/qd/smartwell/vm/CancelAlarmViewModel.kt b/app/src/main/java/com/casic/qd/smartwell/vm/CancelAlarmViewModel.kt index 419447e..d95c207 100644 --- a/app/src/main/java/com/casic/qd/smartwell/vm/CancelAlarmViewModel.kt +++ b/app/src/main/java/com/casic/qd/smartwell/vm/CancelAlarmViewModel.kt @@ -1,5 +1,6 @@ package com.casic.qd.smartwell.vm +import android.util.Log import androidx.lifecycle.MutableLiveData import com.casic.qd.smartwell.base.BaseViewModel import com.casic.qd.smartwell.extensions.launch @@ -14,6 +15,7 @@ class CancelAlarmViewModel : BaseViewModel() { + private val kTag = "CancelAlarmViewModel" private val gson = Gson() val resultModel = MutableLiveData() @@ -37,6 +39,7 @@ } }, { loadState.value = LoadState.Fail + Log.e(kTag, it.toString(), it) "服务器异常".show() }) } \ No newline at end of file diff --git a/app/src/main/java/com/casic/qd/smartwell/vm/LoginInViewModel.kt b/app/src/main/java/com/casic/qd/smartwell/vm/LoginInViewModel.kt index ec0ac1b..fc2678e 100644 --- a/app/src/main/java/com/casic/qd/smartwell/vm/LoginInViewModel.kt +++ b/app/src/main/java/com/casic/qd/smartwell/vm/LoginInViewModel.kt @@ -1,5 +1,6 @@ package com.casic.qd.smartwell.vm +import android.util.Log import androidx.lifecycle.MutableLiveData import com.casic.qd.smartwell.base.BaseViewModel import com.casic.qd.smartwell.extensions.launch @@ -14,6 +15,7 @@ class LoginInViewModel : BaseViewModel() { + private val kTag = "LoginInViewModel" private val gson = Gson() val resultModel = MutableLiveData() @@ -31,6 +33,7 @@ } }, { loadState.value = LoadState.Fail + Log.e(kTag, it.toString(), it) "服务器异常".show() }) } \ No newline at end of file diff --git a/app/src/main/java/com/casic/qd/smartwell/vm/SearchAlarmViewModel.kt b/app/src/main/java/com/casic/qd/smartwell/vm/SearchAlarmViewModel.kt index c3fc1da..1ae3407 100644 --- a/app/src/main/java/com/casic/qd/smartwell/vm/SearchAlarmViewModel.kt +++ b/app/src/main/java/com/casic/qd/smartwell/vm/SearchAlarmViewModel.kt @@ -1,5 +1,6 @@ package com.casic.qd.smartwell.vm +import android.util.Log import androidx.lifecycle.MutableLiveData import com.casic.qd.smartwell.base.BaseViewModel import com.casic.qd.smartwell.extensions.launch @@ -14,6 +15,7 @@ class SearchAlarmViewModel : BaseViewModel() { + private val kTag = "SearchAlarmViewModel" private val gson = Gson() val listModel = MutableLiveData() @@ -43,6 +45,7 @@ } }, { loadState.value = LoadState.Fail + Log.e(kTag, it.toString(), it) "服务器异常".show() }) } \ No newline at end of file diff --git a/app/src/main/java/com/casic/qd/smartwell/vm/UserDetailViewModel.kt b/app/src/main/java/com/casic/qd/smartwell/vm/UserDetailViewModel.kt index 5bf6c64..91c39d9 100644 --- a/app/src/main/java/com/casic/qd/smartwell/vm/UserDetailViewModel.kt +++ b/app/src/main/java/com/casic/qd/smartwell/vm/UserDetailViewModel.kt @@ -1,5 +1,6 @@ package com.casic.qd.smartwell.vm +import android.util.Log import androidx.lifecycle.MutableLiveData import com.casic.qd.smartwell.base.BaseViewModel import com.casic.qd.smartwell.extensions.launch @@ -14,6 +15,7 @@ class UserDetailViewModel : BaseViewModel() { + private val kTag = "UserDetailViewModel" private val gson = Gson() //用户信息不用现取现用,布尔值标志用户token是否失效 @@ -34,6 +36,7 @@ flag.value = false } }, { + Log.e(kTag, it.toString(), it) "服务器异常".show() }) } \ No newline at end of file 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 76329c8..621b755 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 @@ -1,5 +1,6 @@ package com.casic.qd.smartwell.vm +import android.util.Log import androidx.lifecycle.MutableLiveData import com.casic.qd.smartwell.base.BaseViewModel import com.casic.qd.smartwell.extensions.launch @@ -14,6 +15,7 @@ class WaterStatisticsViewModel : BaseViewModel() { + private val kTag = "WaterStatisticsViewModel" private val gson = Gson() val resultModel = MutableLiveData>() val areaDataModel = MutableLiveData() @@ -50,6 +52,7 @@ response.toErrorMessage().show() } }, { + Log.e(kTag, it.toString(), it) "服务器异常".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 7dcbc22..216e7cc 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 @@ -15,10 +15,26 @@ return dateFormat.format(calendar.time) } +fun Long.timestampToLastMonthDate(): 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) - 29) + return dateFormat.format(calendar.time) +} fun Long.timestampToDate(): String = SimpleDateFormat("yyyy-MM-dd", Locale.CHINA).format(Date(this)) +/** + * 获取当前月份所在季度 + * */ +fun Long.getQuarterOfYear(): Int { + val calendar = Calendar.getInstance() + calendar.time = Date(this) + return calendar.get(Calendar.MONTH) / 3 + 1 +} + fun Long.isEarlierThanStart(date: String): Boolean { if (date.isBlank()) { return false diff --git a/app/src/main/java/com/casic/qd/smartwell/extensions/String.kt b/app/src/main/java/com/casic/qd/smartwell/extensions/String.kt index 1e5a885..19808ef 100644 --- a/app/src/main/java/com/casic/qd/smartwell/extensions/String.kt +++ b/app/src/main/java/com/casic/qd/smartwell/extensions/String.kt @@ -11,6 +11,9 @@ import com.google.gson.reflect.TypeToken import com.qmuiteam.qmui.util.QMUIDisplayHelper import org.json.JSONObject +import java.text.ParseException +import java.text.SimpleDateFormat +import java.util.* /** * String扩展方法 @@ -58,3 +61,18 @@ val split = this.split("-") return split[1] + "/" + split[2] } + +fun String.differ(endDate: String): Int { + val dateFormat = SimpleDateFormat("yyyy-MM-dd", Locale.CHINA) + try { + val star: Date = dateFormat.parse(this) //开始时间 + val endDay: Date = dateFormat.parse(endDate) //结束时间 + val starTime = star.time + val endTime = endDay.time + val num = endTime - starTime //时间戳相差的毫秒数 + return (num / 24 / 60 / 60 / 1000).toInt() + } catch (e: ParseException) { + e.printStackTrace() + } + return 0 +} 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 7c6263a..8daf653 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 @@ -30,10 +30,10 @@ * @email 290677893@qq.com */ object ChartViewHelper { - private const val Tag = "ChartViewHelper" + private const val kTag = "ChartViewHelper" private val decimalFormat = DecimalFormat("##0") - fun initLineChart(chart: LineChart, axisMaximum: Float) { + fun initLineChart(chart: LineChart) { chart.setDrawGridBackground(false) chart.setDrawBorders(false) //设置样式 @@ -47,7 +47,6 @@ val xAxis: XAxis = chart.xAxis xAxis.textColor = R.color.mainTextColor.convertColor() xAxis.textSize = 10f - xAxis.axisMaximum = axisMaximum xAxis.setDrawLabels(true) //绘制标签 指x轴上的对应数值 xAxis.setDrawAxisLine(true) //是否绘制轴线 xAxis.setDrawGridLines(false) //设置x轴上每个点对应的线 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 378a6e0..ecb931e 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 @@ -40,4 +40,5 @@ const val PASSWORD = "password" const val USER_DETAIL_MODEL = "userDetailModel" const val CANCEL_ALARM_ACTION = "cancelAlarm" + const val AREA_ID = "110000" } \ No newline at end of file diff --git a/app/src/main/java/com/casic/qd/smartwell/view/ExpandedActivity.kt b/app/src/main/java/com/casic/qd/smartwell/view/ExpandedActivity.kt index 14763e8..5bd2f91 100644 --- a/app/src/main/java/com/casic/qd/smartwell/view/ExpandedActivity.kt +++ b/app/src/main/java/com/casic/qd/smartwell/view/ExpandedActivity.kt @@ -1,22 +1,29 @@ package com.casic.qd.smartwell.view +import android.view.View +import android.widget.AdapterView import androidx.lifecycle.ViewModelProvider import com.casic.qd.smartwell.R import com.casic.qd.smartwell.base.BaseActivity -import com.casic.qd.smartwell.extensions.convertColor -import com.casic.qd.smartwell.extensions.timestampToDate -import com.casic.qd.smartwell.extensions.timestampToLastWeekDate +import com.casic.qd.smartwell.extensions.* import com.casic.qd.smartwell.model.LineChartEntryModel import com.casic.qd.smartwell.utils.ChartViewHelper import com.casic.qd.smartwell.utils.Constant import com.casic.qd.smartwell.vm.WaterStatisticsViewModel import com.github.mikephil.charting.data.Entry -import kotlinx.android.synthetic.main.activity_main.* +import kotlinx.android.synthetic.main.activity_expanded.* +import kotlinx.android.synthetic.main.activity_main.waterLineChart +import java.util.* +import kotlin.collections.ArrayList + class ExpandedActivity : BaseActivity() { + private val kTag = "ExpandedActivity" private lateinit var waterViewModel: WaterStatisticsViewModel private val entryModels: MutableList = ArrayList() + private var startDate = "" + private var differ = 0 override fun initLayoutView(): Int = R.layout.activity_expanded @@ -26,28 +33,80 @@ override fun initData() { waterViewModel = ViewModelProvider(this).get(WaterStatisticsViewModel::class.java) - //初始化折线图,X轴从0开始 - ChartViewHelper.initLineChart(waterLineChart, (Constant.ONE_WEEK - 1).toFloat()) } override fun initEvent() { - //一周折线图数据 - val currentTime = System.currentTimeMillis() - waterViewModel.waterCountByDay( - "110000", - currentTime.timestampToLastWeekDate(), - currentTime.timestampToDate() - ) + //默认选择近7天的数据 + periodSpinner.setSelection(3) + periodSpinner.onItemSelectedListener = object : AdapterView.OnItemSelectedListener { + override fun onItemSelected( + parent: AdapterView<*>?, view: View?, + position: Int, id: Long + ) { + val time = System.currentTimeMillis() + val calendar = Calendar.getInstance() + val year: Int = calendar.get(Calendar.YEAR) + when (position) { + 0 -> { + //本年度 + startDate = "$year-01-01" + } + 1 -> { + //本季度 + when (time.getQuarterOfYear()) { + 1 -> { + startDate = "$year-01-01" + } + 2 -> { + startDate = "$year-04-01" + } + 3 -> { + startDate = "$year-07-01" + } + 4 -> { + startDate = "$year-10-01" + } + } + } + 2 -> { + //近30日 + startDate = time.timestampToLastMonthDate() + } + 3 -> { + //近7日 + startDate = time.timestampToLastWeekDate() + } + 4 -> { + //今日 + startDate = time.timestampToDate() + } + 5 -> { + + } + } + //初始化折线图,X轴从0开始 + differ = startDate.differ(time.timestampToDate()) + ChartViewHelper.initLineChart(waterLineChart) + waterViewModel.waterCountByDay(Constant.AREA_ID, startDate, time.timestampToDate()) + } + + override fun onNothingSelected(parent: AdapterView<*>?) { + + } + } + waterViewModel.areaDataModel.observe(this, { if (it.code == 200) { it.data?.forEachIndexed { i, dataBean -> val entryModel = LineChartEntryModel() - entryModel.lineColor = Constant.COLORS[i].convertColor() + if (i <= differ) { + entryModel.lineColor = Constant.COLORS[i].convertColor() + } entryModel.entryDate = dataBean.date - //每个entries都是一条折线 +// //每个entries都是一条折线 val entries: ArrayList = ArrayList() - for (j in 0 until Constant.ONE_WEEK) { + for (j in 0..differ) { val areaData = it.data!![j].data!![i] entries.add( Entry(j.toFloat(), areaData.count!!.toFloat(), areaData.areaName) @@ -55,6 +114,23 @@ } entryModel.entryList = entries entryModels.add(entryModel) + + /** + * i的范围是[0,differ] + * */ + //每个entries都是一条折线 +// val entries: ArrayList = ArrayList() +// for (k in dataBean.data!!.indices) { +// /** +// * i的范围是[0,dataBean.data!!.indices] +// * */ +// val areaData = dataBean.data!![k] +// entries.add( +// Entry(k.toFloat(), areaData.count!!.toFloat(), areaData.areaName) +// ) +// } +// entryModel.entryList = entries +// entryModels.add(entryModel) } ChartViewHelper.setLineChartData(waterLineChart, entryModels) } 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 56ea003..570df4e 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 @@ -86,7 +86,7 @@ }) //Banner点击事件 setOnBannerListener { data, _ -> - startActivity(Intent(this@MainActivity, WebsiteActivity::class.java)) + navigatePageTo(WebsiteActivity::class.java) } } @@ -107,9 +107,6 @@ //初始化vm waterViewModel = ViewModelProvider(this).get(WaterStatisticsViewModel::class.java) - - //初始化折线图,X轴从0开始 - ChartViewHelper.initLineChart(waterLineChart, (Constant.ONE_WEEK - 1).toFloat()) weakReferenceHandler = WeakReferenceHandler(this) } @@ -125,23 +122,26 @@ navigatePageTo(AlarmManagementActivity::class.java) } + //初始化折线图,X轴从0开始 + val time = System.currentTimeMillis() + val startDate = time.timestampToLastWeekDate() + val endDate = time.timestampToDate() + val differ = startDate.differ(endDate) + ChartViewHelper.initLineChart(waterLineChart) //一周折线图数据 - val currentTime = System.currentTimeMillis() - waterViewModel.waterCountByDay( - "110000", - currentTime.timestampToLastWeekDate(), - currentTime.timestampToDate() - ) + waterViewModel.waterCountByDay(Constant.AREA_ID, startDate, endDate) waterViewModel.areaDataModel.observe(this, { if (it.code == 200) { it.data?.forEachIndexed { i, dataBean -> val entryModel = LineChartEntryModel() - entryModel.lineColor = Constant.COLORS[i].convertColor() + if (i <= differ) { + entryModel.lineColor = Constant.COLORS[i].convertColor() + } entryModel.entryDate = dataBean.date //每个entries都是一条折线 val entries: ArrayList = ArrayList() - for (j in 0 until Constant.ONE_WEEK) { + for (j in 0..differ) { val areaData = it.data!![j].data!![i] entries.add( Entry(j.toFloat(), areaData.count!!.toFloat(), areaData.areaName) diff --git a/app/src/main/java/com/casic/qd/smartwell/view/StatisticsActivity.kt b/app/src/main/java/com/casic/qd/smartwell/view/StatisticsActivity.kt index f6874f9..d6401c8 100644 --- a/app/src/main/java/com/casic/qd/smartwell/view/StatisticsActivity.kt +++ b/app/src/main/java/com/casic/qd/smartwell/view/StatisticsActivity.kt @@ -45,7 +45,7 @@ ChartViewHelper.setPieChartData(totalPieChart, pieEntries) //初始化折线图 - ChartViewHelper.initLineChart(totalLineChart, Constant.YEARS.last().toFloat()) + ChartViewHelper.initLineChart(totalLineChart) //TODO 这是模拟数据 for (i in Constant.YEARS) { valveEntries.add( diff --git a/app/src/main/java/com/casic/qd/smartwell/vm/AlarmContentViewModel.kt b/app/src/main/java/com/casic/qd/smartwell/vm/AlarmContentViewModel.kt index 8c1d4e3..b12b37f 100644 --- a/app/src/main/java/com/casic/qd/smartwell/vm/AlarmContentViewModel.kt +++ b/app/src/main/java/com/casic/qd/smartwell/vm/AlarmContentViewModel.kt @@ -1,5 +1,6 @@ package com.casic.qd.smartwell.vm +import android.util.Log import androidx.lifecycle.MutableLiveData import com.casic.qd.smartwell.base.BaseViewModel import com.casic.qd.smartwell.extensions.launch @@ -13,6 +14,7 @@ class AlarmContentViewModel : BaseViewModel() { + private val kTag = "AlarmContentViewModel" private val gson = Gson() val contentModel = MutableLiveData() @@ -27,6 +29,7 @@ response.toErrorMessage().show() } }, { + Log.e(kTag, it.toString(), it) "服务器异常".show() }) } \ No newline at end of file diff --git a/app/src/main/java/com/casic/qd/smartwell/vm/AlarmListViewModel.kt b/app/src/main/java/com/casic/qd/smartwell/vm/AlarmListViewModel.kt index 2f41249..58cecfa 100644 --- a/app/src/main/java/com/casic/qd/smartwell/vm/AlarmListViewModel.kt +++ b/app/src/main/java/com/casic/qd/smartwell/vm/AlarmListViewModel.kt @@ -1,5 +1,6 @@ package com.casic.qd.smartwell.vm +import android.util.Log import androidx.lifecycle.MutableLiveData import com.casic.qd.smartwell.base.BaseViewModel import com.casic.qd.smartwell.extensions.launch @@ -13,6 +14,7 @@ class AlarmListViewModel : BaseViewModel() { + private val kTag = "AlarmListViewModel" private val gson = Gson() val listModel = MutableLiveData() @@ -45,6 +47,7 @@ response.toErrorMessage().show() } }, { + Log.e(kTag, it.toString(), it) "服务器异常".show() }) } \ No newline at end of file diff --git a/app/src/main/java/com/casic/qd/smartwell/vm/AlarmTypeViewModel.kt b/app/src/main/java/com/casic/qd/smartwell/vm/AlarmTypeViewModel.kt index dcaa579..c98d93c 100644 --- a/app/src/main/java/com/casic/qd/smartwell/vm/AlarmTypeViewModel.kt +++ b/app/src/main/java/com/casic/qd/smartwell/vm/AlarmTypeViewModel.kt @@ -1,5 +1,6 @@ package com.casic.qd.smartwell.vm +import android.util.Log import androidx.lifecycle.MutableLiveData import com.casic.qd.smartwell.base.BaseViewModel import com.casic.qd.smartwell.extensions.launch @@ -13,6 +14,7 @@ class AlarmTypeViewModel : BaseViewModel() { + private val kTag = "AlarmTypeViewModel" private val gson = Gson() val typeModel = MutableLiveData() @@ -27,6 +29,7 @@ response.toErrorMessage().show() } }, { + Log.e(kTag, it.toString(), it) "服务器异常".show() }) } \ No newline at end of file diff --git a/app/src/main/java/com/casic/qd/smartwell/vm/AreaViewModel.kt b/app/src/main/java/com/casic/qd/smartwell/vm/AreaViewModel.kt index 6d06350..c337e59 100644 --- a/app/src/main/java/com/casic/qd/smartwell/vm/AreaViewModel.kt +++ b/app/src/main/java/com/casic/qd/smartwell/vm/AreaViewModel.kt @@ -1,5 +1,6 @@ package com.casic.qd.smartwell.vm +import android.util.Log import androidx.lifecycle.MutableLiveData import com.casic.qd.smartwell.base.BaseViewModel import com.casic.qd.smartwell.extensions.launch @@ -13,6 +14,7 @@ class AreaViewModel : BaseViewModel() { + private val kTag = "AreaViewModel" private val gson = Gson() val areaModel = MutableLiveData() @@ -27,6 +29,7 @@ response.toErrorMessage().show() } }, { + Log.e(kTag, it.toString(), it) "服务器异常".show() }) } \ No newline at end of file diff --git a/app/src/main/java/com/casic/qd/smartwell/vm/AuthenticateViewModel.kt b/app/src/main/java/com/casic/qd/smartwell/vm/AuthenticateViewModel.kt index 6b1d404..55ccc65 100644 --- a/app/src/main/java/com/casic/qd/smartwell/vm/AuthenticateViewModel.kt +++ b/app/src/main/java/com/casic/qd/smartwell/vm/AuthenticateViewModel.kt @@ -1,5 +1,6 @@ package com.casic.qd.smartwell.vm +import android.util.Log import androidx.lifecycle.MutableLiveData import com.casic.qd.smartwell.base.BaseViewModel import com.casic.qd.smartwell.extensions.launch @@ -10,12 +11,14 @@ class AuthenticateViewModel : BaseViewModel() { + private val kTag = "AuthenticateViewModel" val keyModel = MutableLiveData() fun obtainPublicKey() = launch({ loadState.value = LoadState.Loading keyModel.value = RetrofitServiceManager.authenticate() }, { + Log.e(kTag, it.toString(), it) "服务器异常".show() }) } \ No newline at end of file diff --git a/app/src/main/java/com/casic/qd/smartwell/vm/CancelAlarmViewModel.kt b/app/src/main/java/com/casic/qd/smartwell/vm/CancelAlarmViewModel.kt index 419447e..d95c207 100644 --- a/app/src/main/java/com/casic/qd/smartwell/vm/CancelAlarmViewModel.kt +++ b/app/src/main/java/com/casic/qd/smartwell/vm/CancelAlarmViewModel.kt @@ -1,5 +1,6 @@ package com.casic.qd.smartwell.vm +import android.util.Log import androidx.lifecycle.MutableLiveData import com.casic.qd.smartwell.base.BaseViewModel import com.casic.qd.smartwell.extensions.launch @@ -14,6 +15,7 @@ class CancelAlarmViewModel : BaseViewModel() { + private val kTag = "CancelAlarmViewModel" private val gson = Gson() val resultModel = MutableLiveData() @@ -37,6 +39,7 @@ } }, { loadState.value = LoadState.Fail + Log.e(kTag, it.toString(), it) "服务器异常".show() }) } \ No newline at end of file diff --git a/app/src/main/java/com/casic/qd/smartwell/vm/LoginInViewModel.kt b/app/src/main/java/com/casic/qd/smartwell/vm/LoginInViewModel.kt index ec0ac1b..fc2678e 100644 --- a/app/src/main/java/com/casic/qd/smartwell/vm/LoginInViewModel.kt +++ b/app/src/main/java/com/casic/qd/smartwell/vm/LoginInViewModel.kt @@ -1,5 +1,6 @@ package com.casic.qd.smartwell.vm +import android.util.Log import androidx.lifecycle.MutableLiveData import com.casic.qd.smartwell.base.BaseViewModel import com.casic.qd.smartwell.extensions.launch @@ -14,6 +15,7 @@ class LoginInViewModel : BaseViewModel() { + private val kTag = "LoginInViewModel" private val gson = Gson() val resultModel = MutableLiveData() @@ -31,6 +33,7 @@ } }, { loadState.value = LoadState.Fail + Log.e(kTag, it.toString(), it) "服务器异常".show() }) } \ No newline at end of file diff --git a/app/src/main/java/com/casic/qd/smartwell/vm/SearchAlarmViewModel.kt b/app/src/main/java/com/casic/qd/smartwell/vm/SearchAlarmViewModel.kt index c3fc1da..1ae3407 100644 --- a/app/src/main/java/com/casic/qd/smartwell/vm/SearchAlarmViewModel.kt +++ b/app/src/main/java/com/casic/qd/smartwell/vm/SearchAlarmViewModel.kt @@ -1,5 +1,6 @@ package com.casic.qd.smartwell.vm +import android.util.Log import androidx.lifecycle.MutableLiveData import com.casic.qd.smartwell.base.BaseViewModel import com.casic.qd.smartwell.extensions.launch @@ -14,6 +15,7 @@ class SearchAlarmViewModel : BaseViewModel() { + private val kTag = "SearchAlarmViewModel" private val gson = Gson() val listModel = MutableLiveData() @@ -43,6 +45,7 @@ } }, { loadState.value = LoadState.Fail + Log.e(kTag, it.toString(), it) "服务器异常".show() }) } \ No newline at end of file diff --git a/app/src/main/java/com/casic/qd/smartwell/vm/UserDetailViewModel.kt b/app/src/main/java/com/casic/qd/smartwell/vm/UserDetailViewModel.kt index 5bf6c64..91c39d9 100644 --- a/app/src/main/java/com/casic/qd/smartwell/vm/UserDetailViewModel.kt +++ b/app/src/main/java/com/casic/qd/smartwell/vm/UserDetailViewModel.kt @@ -1,5 +1,6 @@ package com.casic.qd.smartwell.vm +import android.util.Log import androidx.lifecycle.MutableLiveData import com.casic.qd.smartwell.base.BaseViewModel import com.casic.qd.smartwell.extensions.launch @@ -14,6 +15,7 @@ class UserDetailViewModel : BaseViewModel() { + private val kTag = "UserDetailViewModel" private val gson = Gson() //用户信息不用现取现用,布尔值标志用户token是否失效 @@ -34,6 +36,7 @@ flag.value = false } }, { + Log.e(kTag, it.toString(), it) "服务器异常".show() }) } \ No newline at end of file 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 76329c8..621b755 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 @@ -1,5 +1,6 @@ package com.casic.qd.smartwell.vm +import android.util.Log import androidx.lifecycle.MutableLiveData import com.casic.qd.smartwell.base.BaseViewModel import com.casic.qd.smartwell.extensions.launch @@ -14,6 +15,7 @@ class WaterStatisticsViewModel : BaseViewModel() { + private val kTag = "WaterStatisticsViewModel" private val gson = Gson() val resultModel = MutableLiveData>() val areaDataModel = MutableLiveData() @@ -50,6 +52,7 @@ response.toErrorMessage().show() } }, { + Log.e(kTag, it.toString(), it) "服务器异常".show() }) } \ No newline at end of file diff --git a/app/src/main/java/com/casic/qd/smartwell/vm/WellDetailViewModel.kt b/app/src/main/java/com/casic/qd/smartwell/vm/WellDetailViewModel.kt index b2bdaaa..2613466 100644 --- a/app/src/main/java/com/casic/qd/smartwell/vm/WellDetailViewModel.kt +++ b/app/src/main/java/com/casic/qd/smartwell/vm/WellDetailViewModel.kt @@ -1,5 +1,6 @@ package com.casic.qd.smartwell.vm +import android.util.Log import androidx.lifecycle.MutableLiveData import com.casic.qd.smartwell.base.BaseViewModel import com.casic.qd.smartwell.extensions.launch @@ -14,6 +15,7 @@ class WellDetailViewModel : BaseViewModel() { + private val kTag = "WellDetailViewModel" private val gson = Gson() val detailModel = MutableLiveData() @@ -32,6 +34,7 @@ } }, { loadState.value = LoadState.Fail + Log.e(kTag, it.toString(), it) "服务器异常".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 7dcbc22..216e7cc 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 @@ -15,10 +15,26 @@ return dateFormat.format(calendar.time) } +fun Long.timestampToLastMonthDate(): 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) - 29) + return dateFormat.format(calendar.time) +} fun Long.timestampToDate(): String = SimpleDateFormat("yyyy-MM-dd", Locale.CHINA).format(Date(this)) +/** + * 获取当前月份所在季度 + * */ +fun Long.getQuarterOfYear(): Int { + val calendar = Calendar.getInstance() + calendar.time = Date(this) + return calendar.get(Calendar.MONTH) / 3 + 1 +} + fun Long.isEarlierThanStart(date: String): Boolean { if (date.isBlank()) { return false diff --git a/app/src/main/java/com/casic/qd/smartwell/extensions/String.kt b/app/src/main/java/com/casic/qd/smartwell/extensions/String.kt index 1e5a885..19808ef 100644 --- a/app/src/main/java/com/casic/qd/smartwell/extensions/String.kt +++ b/app/src/main/java/com/casic/qd/smartwell/extensions/String.kt @@ -11,6 +11,9 @@ import com.google.gson.reflect.TypeToken import com.qmuiteam.qmui.util.QMUIDisplayHelper import org.json.JSONObject +import java.text.ParseException +import java.text.SimpleDateFormat +import java.util.* /** * String扩展方法 @@ -58,3 +61,18 @@ val split = this.split("-") return split[1] + "/" + split[2] } + +fun String.differ(endDate: String): Int { + val dateFormat = SimpleDateFormat("yyyy-MM-dd", Locale.CHINA) + try { + val star: Date = dateFormat.parse(this) //开始时间 + val endDay: Date = dateFormat.parse(endDate) //结束时间 + val starTime = star.time + val endTime = endDay.time + val num = endTime - starTime //时间戳相差的毫秒数 + return (num / 24 / 60 / 60 / 1000).toInt() + } catch (e: ParseException) { + e.printStackTrace() + } + return 0 +} 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 7c6263a..8daf653 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 @@ -30,10 +30,10 @@ * @email 290677893@qq.com */ object ChartViewHelper { - private const val Tag = "ChartViewHelper" + private const val kTag = "ChartViewHelper" private val decimalFormat = DecimalFormat("##0") - fun initLineChart(chart: LineChart, axisMaximum: Float) { + fun initLineChart(chart: LineChart) { chart.setDrawGridBackground(false) chart.setDrawBorders(false) //设置样式 @@ -47,7 +47,6 @@ val xAxis: XAxis = chart.xAxis xAxis.textColor = R.color.mainTextColor.convertColor() xAxis.textSize = 10f - xAxis.axisMaximum = axisMaximum xAxis.setDrawLabels(true) //绘制标签 指x轴上的对应数值 xAxis.setDrawAxisLine(true) //是否绘制轴线 xAxis.setDrawGridLines(false) //设置x轴上每个点对应的线 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 378a6e0..ecb931e 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 @@ -40,4 +40,5 @@ const val PASSWORD = "password" const val USER_DETAIL_MODEL = "userDetailModel" const val CANCEL_ALARM_ACTION = "cancelAlarm" + const val AREA_ID = "110000" } \ No newline at end of file diff --git a/app/src/main/java/com/casic/qd/smartwell/view/ExpandedActivity.kt b/app/src/main/java/com/casic/qd/smartwell/view/ExpandedActivity.kt index 14763e8..5bd2f91 100644 --- a/app/src/main/java/com/casic/qd/smartwell/view/ExpandedActivity.kt +++ b/app/src/main/java/com/casic/qd/smartwell/view/ExpandedActivity.kt @@ -1,22 +1,29 @@ package com.casic.qd.smartwell.view +import android.view.View +import android.widget.AdapterView import androidx.lifecycle.ViewModelProvider import com.casic.qd.smartwell.R import com.casic.qd.smartwell.base.BaseActivity -import com.casic.qd.smartwell.extensions.convertColor -import com.casic.qd.smartwell.extensions.timestampToDate -import com.casic.qd.smartwell.extensions.timestampToLastWeekDate +import com.casic.qd.smartwell.extensions.* import com.casic.qd.smartwell.model.LineChartEntryModel import com.casic.qd.smartwell.utils.ChartViewHelper import com.casic.qd.smartwell.utils.Constant import com.casic.qd.smartwell.vm.WaterStatisticsViewModel import com.github.mikephil.charting.data.Entry -import kotlinx.android.synthetic.main.activity_main.* +import kotlinx.android.synthetic.main.activity_expanded.* +import kotlinx.android.synthetic.main.activity_main.waterLineChart +import java.util.* +import kotlin.collections.ArrayList + class ExpandedActivity : BaseActivity() { + private val kTag = "ExpandedActivity" private lateinit var waterViewModel: WaterStatisticsViewModel private val entryModels: MutableList = ArrayList() + private var startDate = "" + private var differ = 0 override fun initLayoutView(): Int = R.layout.activity_expanded @@ -26,28 +33,80 @@ override fun initData() { waterViewModel = ViewModelProvider(this).get(WaterStatisticsViewModel::class.java) - //初始化折线图,X轴从0开始 - ChartViewHelper.initLineChart(waterLineChart, (Constant.ONE_WEEK - 1).toFloat()) } override fun initEvent() { - //一周折线图数据 - val currentTime = System.currentTimeMillis() - waterViewModel.waterCountByDay( - "110000", - currentTime.timestampToLastWeekDate(), - currentTime.timestampToDate() - ) + //默认选择近7天的数据 + periodSpinner.setSelection(3) + periodSpinner.onItemSelectedListener = object : AdapterView.OnItemSelectedListener { + override fun onItemSelected( + parent: AdapterView<*>?, view: View?, + position: Int, id: Long + ) { + val time = System.currentTimeMillis() + val calendar = Calendar.getInstance() + val year: Int = calendar.get(Calendar.YEAR) + when (position) { + 0 -> { + //本年度 + startDate = "$year-01-01" + } + 1 -> { + //本季度 + when (time.getQuarterOfYear()) { + 1 -> { + startDate = "$year-01-01" + } + 2 -> { + startDate = "$year-04-01" + } + 3 -> { + startDate = "$year-07-01" + } + 4 -> { + startDate = "$year-10-01" + } + } + } + 2 -> { + //近30日 + startDate = time.timestampToLastMonthDate() + } + 3 -> { + //近7日 + startDate = time.timestampToLastWeekDate() + } + 4 -> { + //今日 + startDate = time.timestampToDate() + } + 5 -> { + + } + } + //初始化折线图,X轴从0开始 + differ = startDate.differ(time.timestampToDate()) + ChartViewHelper.initLineChart(waterLineChart) + waterViewModel.waterCountByDay(Constant.AREA_ID, startDate, time.timestampToDate()) + } + + override fun onNothingSelected(parent: AdapterView<*>?) { + + } + } + waterViewModel.areaDataModel.observe(this, { if (it.code == 200) { it.data?.forEachIndexed { i, dataBean -> val entryModel = LineChartEntryModel() - entryModel.lineColor = Constant.COLORS[i].convertColor() + if (i <= differ) { + entryModel.lineColor = Constant.COLORS[i].convertColor() + } entryModel.entryDate = dataBean.date - //每个entries都是一条折线 +// //每个entries都是一条折线 val entries: ArrayList = ArrayList() - for (j in 0 until Constant.ONE_WEEK) { + for (j in 0..differ) { val areaData = it.data!![j].data!![i] entries.add( Entry(j.toFloat(), areaData.count!!.toFloat(), areaData.areaName) @@ -55,6 +114,23 @@ } entryModel.entryList = entries entryModels.add(entryModel) + + /** + * i的范围是[0,differ] + * */ + //每个entries都是一条折线 +// val entries: ArrayList = ArrayList() +// for (k in dataBean.data!!.indices) { +// /** +// * i的范围是[0,dataBean.data!!.indices] +// * */ +// val areaData = dataBean.data!![k] +// entries.add( +// Entry(k.toFloat(), areaData.count!!.toFloat(), areaData.areaName) +// ) +// } +// entryModel.entryList = entries +// entryModels.add(entryModel) } ChartViewHelper.setLineChartData(waterLineChart, entryModels) } 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 56ea003..570df4e 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 @@ -86,7 +86,7 @@ }) //Banner点击事件 setOnBannerListener { data, _ -> - startActivity(Intent(this@MainActivity, WebsiteActivity::class.java)) + navigatePageTo(WebsiteActivity::class.java) } } @@ -107,9 +107,6 @@ //初始化vm waterViewModel = ViewModelProvider(this).get(WaterStatisticsViewModel::class.java) - - //初始化折线图,X轴从0开始 - ChartViewHelper.initLineChart(waterLineChart, (Constant.ONE_WEEK - 1).toFloat()) weakReferenceHandler = WeakReferenceHandler(this) } @@ -125,23 +122,26 @@ navigatePageTo(AlarmManagementActivity::class.java) } + //初始化折线图,X轴从0开始 + val time = System.currentTimeMillis() + val startDate = time.timestampToLastWeekDate() + val endDate = time.timestampToDate() + val differ = startDate.differ(endDate) + ChartViewHelper.initLineChart(waterLineChart) //一周折线图数据 - val currentTime = System.currentTimeMillis() - waterViewModel.waterCountByDay( - "110000", - currentTime.timestampToLastWeekDate(), - currentTime.timestampToDate() - ) + waterViewModel.waterCountByDay(Constant.AREA_ID, startDate, endDate) waterViewModel.areaDataModel.observe(this, { if (it.code == 200) { it.data?.forEachIndexed { i, dataBean -> val entryModel = LineChartEntryModel() - entryModel.lineColor = Constant.COLORS[i].convertColor() + if (i <= differ) { + entryModel.lineColor = Constant.COLORS[i].convertColor() + } entryModel.entryDate = dataBean.date //每个entries都是一条折线 val entries: ArrayList = ArrayList() - for (j in 0 until Constant.ONE_WEEK) { + for (j in 0..differ) { val areaData = it.data!![j].data!![i] entries.add( Entry(j.toFloat(), areaData.count!!.toFloat(), areaData.areaName) diff --git a/app/src/main/java/com/casic/qd/smartwell/view/StatisticsActivity.kt b/app/src/main/java/com/casic/qd/smartwell/view/StatisticsActivity.kt index f6874f9..d6401c8 100644 --- a/app/src/main/java/com/casic/qd/smartwell/view/StatisticsActivity.kt +++ b/app/src/main/java/com/casic/qd/smartwell/view/StatisticsActivity.kt @@ -45,7 +45,7 @@ ChartViewHelper.setPieChartData(totalPieChart, pieEntries) //初始化折线图 - ChartViewHelper.initLineChart(totalLineChart, Constant.YEARS.last().toFloat()) + ChartViewHelper.initLineChart(totalLineChart) //TODO 这是模拟数据 for (i in Constant.YEARS) { valveEntries.add( diff --git a/app/src/main/java/com/casic/qd/smartwell/vm/AlarmContentViewModel.kt b/app/src/main/java/com/casic/qd/smartwell/vm/AlarmContentViewModel.kt index 8c1d4e3..b12b37f 100644 --- a/app/src/main/java/com/casic/qd/smartwell/vm/AlarmContentViewModel.kt +++ b/app/src/main/java/com/casic/qd/smartwell/vm/AlarmContentViewModel.kt @@ -1,5 +1,6 @@ package com.casic.qd.smartwell.vm +import android.util.Log import androidx.lifecycle.MutableLiveData import com.casic.qd.smartwell.base.BaseViewModel import com.casic.qd.smartwell.extensions.launch @@ -13,6 +14,7 @@ class AlarmContentViewModel : BaseViewModel() { + private val kTag = "AlarmContentViewModel" private val gson = Gson() val contentModel = MutableLiveData() @@ -27,6 +29,7 @@ response.toErrorMessage().show() } }, { + Log.e(kTag, it.toString(), it) "服务器异常".show() }) } \ No newline at end of file diff --git a/app/src/main/java/com/casic/qd/smartwell/vm/AlarmListViewModel.kt b/app/src/main/java/com/casic/qd/smartwell/vm/AlarmListViewModel.kt index 2f41249..58cecfa 100644 --- a/app/src/main/java/com/casic/qd/smartwell/vm/AlarmListViewModel.kt +++ b/app/src/main/java/com/casic/qd/smartwell/vm/AlarmListViewModel.kt @@ -1,5 +1,6 @@ package com.casic.qd.smartwell.vm +import android.util.Log import androidx.lifecycle.MutableLiveData import com.casic.qd.smartwell.base.BaseViewModel import com.casic.qd.smartwell.extensions.launch @@ -13,6 +14,7 @@ class AlarmListViewModel : BaseViewModel() { + private val kTag = "AlarmListViewModel" private val gson = Gson() val listModel = MutableLiveData() @@ -45,6 +47,7 @@ response.toErrorMessage().show() } }, { + Log.e(kTag, it.toString(), it) "服务器异常".show() }) } \ No newline at end of file diff --git a/app/src/main/java/com/casic/qd/smartwell/vm/AlarmTypeViewModel.kt b/app/src/main/java/com/casic/qd/smartwell/vm/AlarmTypeViewModel.kt index dcaa579..c98d93c 100644 --- a/app/src/main/java/com/casic/qd/smartwell/vm/AlarmTypeViewModel.kt +++ b/app/src/main/java/com/casic/qd/smartwell/vm/AlarmTypeViewModel.kt @@ -1,5 +1,6 @@ package com.casic.qd.smartwell.vm +import android.util.Log import androidx.lifecycle.MutableLiveData import com.casic.qd.smartwell.base.BaseViewModel import com.casic.qd.smartwell.extensions.launch @@ -13,6 +14,7 @@ class AlarmTypeViewModel : BaseViewModel() { + private val kTag = "AlarmTypeViewModel" private val gson = Gson() val typeModel = MutableLiveData() @@ -27,6 +29,7 @@ response.toErrorMessage().show() } }, { + Log.e(kTag, it.toString(), it) "服务器异常".show() }) } \ No newline at end of file diff --git a/app/src/main/java/com/casic/qd/smartwell/vm/AreaViewModel.kt b/app/src/main/java/com/casic/qd/smartwell/vm/AreaViewModel.kt index 6d06350..c337e59 100644 --- a/app/src/main/java/com/casic/qd/smartwell/vm/AreaViewModel.kt +++ b/app/src/main/java/com/casic/qd/smartwell/vm/AreaViewModel.kt @@ -1,5 +1,6 @@ package com.casic.qd.smartwell.vm +import android.util.Log import androidx.lifecycle.MutableLiveData import com.casic.qd.smartwell.base.BaseViewModel import com.casic.qd.smartwell.extensions.launch @@ -13,6 +14,7 @@ class AreaViewModel : BaseViewModel() { + private val kTag = "AreaViewModel" private val gson = Gson() val areaModel = MutableLiveData() @@ -27,6 +29,7 @@ response.toErrorMessage().show() } }, { + Log.e(kTag, it.toString(), it) "服务器异常".show() }) } \ No newline at end of file diff --git a/app/src/main/java/com/casic/qd/smartwell/vm/AuthenticateViewModel.kt b/app/src/main/java/com/casic/qd/smartwell/vm/AuthenticateViewModel.kt index 6b1d404..55ccc65 100644 --- a/app/src/main/java/com/casic/qd/smartwell/vm/AuthenticateViewModel.kt +++ b/app/src/main/java/com/casic/qd/smartwell/vm/AuthenticateViewModel.kt @@ -1,5 +1,6 @@ package com.casic.qd.smartwell.vm +import android.util.Log import androidx.lifecycle.MutableLiveData import com.casic.qd.smartwell.base.BaseViewModel import com.casic.qd.smartwell.extensions.launch @@ -10,12 +11,14 @@ class AuthenticateViewModel : BaseViewModel() { + private val kTag = "AuthenticateViewModel" val keyModel = MutableLiveData() fun obtainPublicKey() = launch({ loadState.value = LoadState.Loading keyModel.value = RetrofitServiceManager.authenticate() }, { + Log.e(kTag, it.toString(), it) "服务器异常".show() }) } \ No newline at end of file diff --git a/app/src/main/java/com/casic/qd/smartwell/vm/CancelAlarmViewModel.kt b/app/src/main/java/com/casic/qd/smartwell/vm/CancelAlarmViewModel.kt index 419447e..d95c207 100644 --- a/app/src/main/java/com/casic/qd/smartwell/vm/CancelAlarmViewModel.kt +++ b/app/src/main/java/com/casic/qd/smartwell/vm/CancelAlarmViewModel.kt @@ -1,5 +1,6 @@ package com.casic.qd.smartwell.vm +import android.util.Log import androidx.lifecycle.MutableLiveData import com.casic.qd.smartwell.base.BaseViewModel import com.casic.qd.smartwell.extensions.launch @@ -14,6 +15,7 @@ class CancelAlarmViewModel : BaseViewModel() { + private val kTag = "CancelAlarmViewModel" private val gson = Gson() val resultModel = MutableLiveData() @@ -37,6 +39,7 @@ } }, { loadState.value = LoadState.Fail + Log.e(kTag, it.toString(), it) "服务器异常".show() }) } \ No newline at end of file diff --git a/app/src/main/java/com/casic/qd/smartwell/vm/LoginInViewModel.kt b/app/src/main/java/com/casic/qd/smartwell/vm/LoginInViewModel.kt index ec0ac1b..fc2678e 100644 --- a/app/src/main/java/com/casic/qd/smartwell/vm/LoginInViewModel.kt +++ b/app/src/main/java/com/casic/qd/smartwell/vm/LoginInViewModel.kt @@ -1,5 +1,6 @@ package com.casic.qd.smartwell.vm +import android.util.Log import androidx.lifecycle.MutableLiveData import com.casic.qd.smartwell.base.BaseViewModel import com.casic.qd.smartwell.extensions.launch @@ -14,6 +15,7 @@ class LoginInViewModel : BaseViewModel() { + private val kTag = "LoginInViewModel" private val gson = Gson() val resultModel = MutableLiveData() @@ -31,6 +33,7 @@ } }, { loadState.value = LoadState.Fail + Log.e(kTag, it.toString(), it) "服务器异常".show() }) } \ No newline at end of file diff --git a/app/src/main/java/com/casic/qd/smartwell/vm/SearchAlarmViewModel.kt b/app/src/main/java/com/casic/qd/smartwell/vm/SearchAlarmViewModel.kt index c3fc1da..1ae3407 100644 --- a/app/src/main/java/com/casic/qd/smartwell/vm/SearchAlarmViewModel.kt +++ b/app/src/main/java/com/casic/qd/smartwell/vm/SearchAlarmViewModel.kt @@ -1,5 +1,6 @@ package com.casic.qd.smartwell.vm +import android.util.Log import androidx.lifecycle.MutableLiveData import com.casic.qd.smartwell.base.BaseViewModel import com.casic.qd.smartwell.extensions.launch @@ -14,6 +15,7 @@ class SearchAlarmViewModel : BaseViewModel() { + private val kTag = "SearchAlarmViewModel" private val gson = Gson() val listModel = MutableLiveData() @@ -43,6 +45,7 @@ } }, { loadState.value = LoadState.Fail + Log.e(kTag, it.toString(), it) "服务器异常".show() }) } \ No newline at end of file diff --git a/app/src/main/java/com/casic/qd/smartwell/vm/UserDetailViewModel.kt b/app/src/main/java/com/casic/qd/smartwell/vm/UserDetailViewModel.kt index 5bf6c64..91c39d9 100644 --- a/app/src/main/java/com/casic/qd/smartwell/vm/UserDetailViewModel.kt +++ b/app/src/main/java/com/casic/qd/smartwell/vm/UserDetailViewModel.kt @@ -1,5 +1,6 @@ package com.casic.qd.smartwell.vm +import android.util.Log import androidx.lifecycle.MutableLiveData import com.casic.qd.smartwell.base.BaseViewModel import com.casic.qd.smartwell.extensions.launch @@ -14,6 +15,7 @@ class UserDetailViewModel : BaseViewModel() { + private val kTag = "UserDetailViewModel" private val gson = Gson() //用户信息不用现取现用,布尔值标志用户token是否失效 @@ -34,6 +36,7 @@ flag.value = false } }, { + Log.e(kTag, it.toString(), it) "服务器异常".show() }) } \ No newline at end of file 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 76329c8..621b755 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 @@ -1,5 +1,6 @@ package com.casic.qd.smartwell.vm +import android.util.Log import androidx.lifecycle.MutableLiveData import com.casic.qd.smartwell.base.BaseViewModel import com.casic.qd.smartwell.extensions.launch @@ -14,6 +15,7 @@ class WaterStatisticsViewModel : BaseViewModel() { + private val kTag = "WaterStatisticsViewModel" private val gson = Gson() val resultModel = MutableLiveData>() val areaDataModel = MutableLiveData() @@ -50,6 +52,7 @@ response.toErrorMessage().show() } }, { + Log.e(kTag, it.toString(), it) "服务器异常".show() }) } \ No newline at end of file diff --git a/app/src/main/java/com/casic/qd/smartwell/vm/WellDetailViewModel.kt b/app/src/main/java/com/casic/qd/smartwell/vm/WellDetailViewModel.kt index b2bdaaa..2613466 100644 --- a/app/src/main/java/com/casic/qd/smartwell/vm/WellDetailViewModel.kt +++ b/app/src/main/java/com/casic/qd/smartwell/vm/WellDetailViewModel.kt @@ -1,5 +1,6 @@ package com.casic.qd.smartwell.vm +import android.util.Log import androidx.lifecycle.MutableLiveData import com.casic.qd.smartwell.base.BaseViewModel import com.casic.qd.smartwell.extensions.launch @@ -14,6 +15,7 @@ class WellDetailViewModel : BaseViewModel() { + private val kTag = "WellDetailViewModel" private val gson = Gson() val detailModel = MutableLiveData() @@ -32,6 +34,7 @@ } }, { loadState.value = LoadState.Fail + Log.e(kTag, it.toString(), it) "服务器异常".show() }) } \ No newline at end of file diff --git a/app/src/main/res/layout/activity_expanded.xml b/app/src/main/res/layout/activity_expanded.xml index 1c5d8cf..7a2dce8 100644 --- a/app/src/main/res/layout/activity_expanded.xml +++ b/app/src/main/res/layout/activity_expanded.xml @@ -3,10 +3,37 @@ android:layout_width="match_parent" android:layout_height="match_parent" android:background="@color/white" - android:layout_marginVertical="@dimen/dp_5"> + android:orientation="vertical"> - + android:layout_height="wrap_content" + android:padding="@dimen/dp_10"> + + + + + + + + + + \ 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 7dcbc22..216e7cc 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 @@ -15,10 +15,26 @@ return dateFormat.format(calendar.time) } +fun Long.timestampToLastMonthDate(): 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) - 29) + return dateFormat.format(calendar.time) +} fun Long.timestampToDate(): String = SimpleDateFormat("yyyy-MM-dd", Locale.CHINA).format(Date(this)) +/** + * 获取当前月份所在季度 + * */ +fun Long.getQuarterOfYear(): Int { + val calendar = Calendar.getInstance() + calendar.time = Date(this) + return calendar.get(Calendar.MONTH) / 3 + 1 +} + fun Long.isEarlierThanStart(date: String): Boolean { if (date.isBlank()) { return false diff --git a/app/src/main/java/com/casic/qd/smartwell/extensions/String.kt b/app/src/main/java/com/casic/qd/smartwell/extensions/String.kt index 1e5a885..19808ef 100644 --- a/app/src/main/java/com/casic/qd/smartwell/extensions/String.kt +++ b/app/src/main/java/com/casic/qd/smartwell/extensions/String.kt @@ -11,6 +11,9 @@ import com.google.gson.reflect.TypeToken import com.qmuiteam.qmui.util.QMUIDisplayHelper import org.json.JSONObject +import java.text.ParseException +import java.text.SimpleDateFormat +import java.util.* /** * String扩展方法 @@ -58,3 +61,18 @@ val split = this.split("-") return split[1] + "/" + split[2] } + +fun String.differ(endDate: String): Int { + val dateFormat = SimpleDateFormat("yyyy-MM-dd", Locale.CHINA) + try { + val star: Date = dateFormat.parse(this) //开始时间 + val endDay: Date = dateFormat.parse(endDate) //结束时间 + val starTime = star.time + val endTime = endDay.time + val num = endTime - starTime //时间戳相差的毫秒数 + return (num / 24 / 60 / 60 / 1000).toInt() + } catch (e: ParseException) { + e.printStackTrace() + } + return 0 +} 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 7c6263a..8daf653 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 @@ -30,10 +30,10 @@ * @email 290677893@qq.com */ object ChartViewHelper { - private const val Tag = "ChartViewHelper" + private const val kTag = "ChartViewHelper" private val decimalFormat = DecimalFormat("##0") - fun initLineChart(chart: LineChart, axisMaximum: Float) { + fun initLineChart(chart: LineChart) { chart.setDrawGridBackground(false) chart.setDrawBorders(false) //设置样式 @@ -47,7 +47,6 @@ val xAxis: XAxis = chart.xAxis xAxis.textColor = R.color.mainTextColor.convertColor() xAxis.textSize = 10f - xAxis.axisMaximum = axisMaximum xAxis.setDrawLabels(true) //绘制标签 指x轴上的对应数值 xAxis.setDrawAxisLine(true) //是否绘制轴线 xAxis.setDrawGridLines(false) //设置x轴上每个点对应的线 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 378a6e0..ecb931e 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 @@ -40,4 +40,5 @@ const val PASSWORD = "password" const val USER_DETAIL_MODEL = "userDetailModel" const val CANCEL_ALARM_ACTION = "cancelAlarm" + const val AREA_ID = "110000" } \ No newline at end of file diff --git a/app/src/main/java/com/casic/qd/smartwell/view/ExpandedActivity.kt b/app/src/main/java/com/casic/qd/smartwell/view/ExpandedActivity.kt index 14763e8..5bd2f91 100644 --- a/app/src/main/java/com/casic/qd/smartwell/view/ExpandedActivity.kt +++ b/app/src/main/java/com/casic/qd/smartwell/view/ExpandedActivity.kt @@ -1,22 +1,29 @@ package com.casic.qd.smartwell.view +import android.view.View +import android.widget.AdapterView import androidx.lifecycle.ViewModelProvider import com.casic.qd.smartwell.R import com.casic.qd.smartwell.base.BaseActivity -import com.casic.qd.smartwell.extensions.convertColor -import com.casic.qd.smartwell.extensions.timestampToDate -import com.casic.qd.smartwell.extensions.timestampToLastWeekDate +import com.casic.qd.smartwell.extensions.* import com.casic.qd.smartwell.model.LineChartEntryModel import com.casic.qd.smartwell.utils.ChartViewHelper import com.casic.qd.smartwell.utils.Constant import com.casic.qd.smartwell.vm.WaterStatisticsViewModel import com.github.mikephil.charting.data.Entry -import kotlinx.android.synthetic.main.activity_main.* +import kotlinx.android.synthetic.main.activity_expanded.* +import kotlinx.android.synthetic.main.activity_main.waterLineChart +import java.util.* +import kotlin.collections.ArrayList + class ExpandedActivity : BaseActivity() { + private val kTag = "ExpandedActivity" private lateinit var waterViewModel: WaterStatisticsViewModel private val entryModels: MutableList = ArrayList() + private var startDate = "" + private var differ = 0 override fun initLayoutView(): Int = R.layout.activity_expanded @@ -26,28 +33,80 @@ override fun initData() { waterViewModel = ViewModelProvider(this).get(WaterStatisticsViewModel::class.java) - //初始化折线图,X轴从0开始 - ChartViewHelper.initLineChart(waterLineChart, (Constant.ONE_WEEK - 1).toFloat()) } override fun initEvent() { - //一周折线图数据 - val currentTime = System.currentTimeMillis() - waterViewModel.waterCountByDay( - "110000", - currentTime.timestampToLastWeekDate(), - currentTime.timestampToDate() - ) + //默认选择近7天的数据 + periodSpinner.setSelection(3) + periodSpinner.onItemSelectedListener = object : AdapterView.OnItemSelectedListener { + override fun onItemSelected( + parent: AdapterView<*>?, view: View?, + position: Int, id: Long + ) { + val time = System.currentTimeMillis() + val calendar = Calendar.getInstance() + val year: Int = calendar.get(Calendar.YEAR) + when (position) { + 0 -> { + //本年度 + startDate = "$year-01-01" + } + 1 -> { + //本季度 + when (time.getQuarterOfYear()) { + 1 -> { + startDate = "$year-01-01" + } + 2 -> { + startDate = "$year-04-01" + } + 3 -> { + startDate = "$year-07-01" + } + 4 -> { + startDate = "$year-10-01" + } + } + } + 2 -> { + //近30日 + startDate = time.timestampToLastMonthDate() + } + 3 -> { + //近7日 + startDate = time.timestampToLastWeekDate() + } + 4 -> { + //今日 + startDate = time.timestampToDate() + } + 5 -> { + + } + } + //初始化折线图,X轴从0开始 + differ = startDate.differ(time.timestampToDate()) + ChartViewHelper.initLineChart(waterLineChart) + waterViewModel.waterCountByDay(Constant.AREA_ID, startDate, time.timestampToDate()) + } + + override fun onNothingSelected(parent: AdapterView<*>?) { + + } + } + waterViewModel.areaDataModel.observe(this, { if (it.code == 200) { it.data?.forEachIndexed { i, dataBean -> val entryModel = LineChartEntryModel() - entryModel.lineColor = Constant.COLORS[i].convertColor() + if (i <= differ) { + entryModel.lineColor = Constant.COLORS[i].convertColor() + } entryModel.entryDate = dataBean.date - //每个entries都是一条折线 +// //每个entries都是一条折线 val entries: ArrayList = ArrayList() - for (j in 0 until Constant.ONE_WEEK) { + for (j in 0..differ) { val areaData = it.data!![j].data!![i] entries.add( Entry(j.toFloat(), areaData.count!!.toFloat(), areaData.areaName) @@ -55,6 +114,23 @@ } entryModel.entryList = entries entryModels.add(entryModel) + + /** + * i的范围是[0,differ] + * */ + //每个entries都是一条折线 +// val entries: ArrayList = ArrayList() +// for (k in dataBean.data!!.indices) { +// /** +// * i的范围是[0,dataBean.data!!.indices] +// * */ +// val areaData = dataBean.data!![k] +// entries.add( +// Entry(k.toFloat(), areaData.count!!.toFloat(), areaData.areaName) +// ) +// } +// entryModel.entryList = entries +// entryModels.add(entryModel) } ChartViewHelper.setLineChartData(waterLineChart, entryModels) } 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 56ea003..570df4e 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 @@ -86,7 +86,7 @@ }) //Banner点击事件 setOnBannerListener { data, _ -> - startActivity(Intent(this@MainActivity, WebsiteActivity::class.java)) + navigatePageTo(WebsiteActivity::class.java) } } @@ -107,9 +107,6 @@ //初始化vm waterViewModel = ViewModelProvider(this).get(WaterStatisticsViewModel::class.java) - - //初始化折线图,X轴从0开始 - ChartViewHelper.initLineChart(waterLineChart, (Constant.ONE_WEEK - 1).toFloat()) weakReferenceHandler = WeakReferenceHandler(this) } @@ -125,23 +122,26 @@ navigatePageTo(AlarmManagementActivity::class.java) } + //初始化折线图,X轴从0开始 + val time = System.currentTimeMillis() + val startDate = time.timestampToLastWeekDate() + val endDate = time.timestampToDate() + val differ = startDate.differ(endDate) + ChartViewHelper.initLineChart(waterLineChart) //一周折线图数据 - val currentTime = System.currentTimeMillis() - waterViewModel.waterCountByDay( - "110000", - currentTime.timestampToLastWeekDate(), - currentTime.timestampToDate() - ) + waterViewModel.waterCountByDay(Constant.AREA_ID, startDate, endDate) waterViewModel.areaDataModel.observe(this, { if (it.code == 200) { it.data?.forEachIndexed { i, dataBean -> val entryModel = LineChartEntryModel() - entryModel.lineColor = Constant.COLORS[i].convertColor() + if (i <= differ) { + entryModel.lineColor = Constant.COLORS[i].convertColor() + } entryModel.entryDate = dataBean.date //每个entries都是一条折线 val entries: ArrayList = ArrayList() - for (j in 0 until Constant.ONE_WEEK) { + for (j in 0..differ) { val areaData = it.data!![j].data!![i] entries.add( Entry(j.toFloat(), areaData.count!!.toFloat(), areaData.areaName) diff --git a/app/src/main/java/com/casic/qd/smartwell/view/StatisticsActivity.kt b/app/src/main/java/com/casic/qd/smartwell/view/StatisticsActivity.kt index f6874f9..d6401c8 100644 --- a/app/src/main/java/com/casic/qd/smartwell/view/StatisticsActivity.kt +++ b/app/src/main/java/com/casic/qd/smartwell/view/StatisticsActivity.kt @@ -45,7 +45,7 @@ ChartViewHelper.setPieChartData(totalPieChart, pieEntries) //初始化折线图 - ChartViewHelper.initLineChart(totalLineChart, Constant.YEARS.last().toFloat()) + ChartViewHelper.initLineChart(totalLineChart) //TODO 这是模拟数据 for (i in Constant.YEARS) { valveEntries.add( diff --git a/app/src/main/java/com/casic/qd/smartwell/vm/AlarmContentViewModel.kt b/app/src/main/java/com/casic/qd/smartwell/vm/AlarmContentViewModel.kt index 8c1d4e3..b12b37f 100644 --- a/app/src/main/java/com/casic/qd/smartwell/vm/AlarmContentViewModel.kt +++ b/app/src/main/java/com/casic/qd/smartwell/vm/AlarmContentViewModel.kt @@ -1,5 +1,6 @@ package com.casic.qd.smartwell.vm +import android.util.Log import androidx.lifecycle.MutableLiveData import com.casic.qd.smartwell.base.BaseViewModel import com.casic.qd.smartwell.extensions.launch @@ -13,6 +14,7 @@ class AlarmContentViewModel : BaseViewModel() { + private val kTag = "AlarmContentViewModel" private val gson = Gson() val contentModel = MutableLiveData() @@ -27,6 +29,7 @@ response.toErrorMessage().show() } }, { + Log.e(kTag, it.toString(), it) "服务器异常".show() }) } \ No newline at end of file diff --git a/app/src/main/java/com/casic/qd/smartwell/vm/AlarmListViewModel.kt b/app/src/main/java/com/casic/qd/smartwell/vm/AlarmListViewModel.kt index 2f41249..58cecfa 100644 --- a/app/src/main/java/com/casic/qd/smartwell/vm/AlarmListViewModel.kt +++ b/app/src/main/java/com/casic/qd/smartwell/vm/AlarmListViewModel.kt @@ -1,5 +1,6 @@ package com.casic.qd.smartwell.vm +import android.util.Log import androidx.lifecycle.MutableLiveData import com.casic.qd.smartwell.base.BaseViewModel import com.casic.qd.smartwell.extensions.launch @@ -13,6 +14,7 @@ class AlarmListViewModel : BaseViewModel() { + private val kTag = "AlarmListViewModel" private val gson = Gson() val listModel = MutableLiveData() @@ -45,6 +47,7 @@ response.toErrorMessage().show() } }, { + Log.e(kTag, it.toString(), it) "服务器异常".show() }) } \ No newline at end of file diff --git a/app/src/main/java/com/casic/qd/smartwell/vm/AlarmTypeViewModel.kt b/app/src/main/java/com/casic/qd/smartwell/vm/AlarmTypeViewModel.kt index dcaa579..c98d93c 100644 --- a/app/src/main/java/com/casic/qd/smartwell/vm/AlarmTypeViewModel.kt +++ b/app/src/main/java/com/casic/qd/smartwell/vm/AlarmTypeViewModel.kt @@ -1,5 +1,6 @@ package com.casic.qd.smartwell.vm +import android.util.Log import androidx.lifecycle.MutableLiveData import com.casic.qd.smartwell.base.BaseViewModel import com.casic.qd.smartwell.extensions.launch @@ -13,6 +14,7 @@ class AlarmTypeViewModel : BaseViewModel() { + private val kTag = "AlarmTypeViewModel" private val gson = Gson() val typeModel = MutableLiveData() @@ -27,6 +29,7 @@ response.toErrorMessage().show() } }, { + Log.e(kTag, it.toString(), it) "服务器异常".show() }) } \ No newline at end of file diff --git a/app/src/main/java/com/casic/qd/smartwell/vm/AreaViewModel.kt b/app/src/main/java/com/casic/qd/smartwell/vm/AreaViewModel.kt index 6d06350..c337e59 100644 --- a/app/src/main/java/com/casic/qd/smartwell/vm/AreaViewModel.kt +++ b/app/src/main/java/com/casic/qd/smartwell/vm/AreaViewModel.kt @@ -1,5 +1,6 @@ package com.casic.qd.smartwell.vm +import android.util.Log import androidx.lifecycle.MutableLiveData import com.casic.qd.smartwell.base.BaseViewModel import com.casic.qd.smartwell.extensions.launch @@ -13,6 +14,7 @@ class AreaViewModel : BaseViewModel() { + private val kTag = "AreaViewModel" private val gson = Gson() val areaModel = MutableLiveData() @@ -27,6 +29,7 @@ response.toErrorMessage().show() } }, { + Log.e(kTag, it.toString(), it) "服务器异常".show() }) } \ No newline at end of file diff --git a/app/src/main/java/com/casic/qd/smartwell/vm/AuthenticateViewModel.kt b/app/src/main/java/com/casic/qd/smartwell/vm/AuthenticateViewModel.kt index 6b1d404..55ccc65 100644 --- a/app/src/main/java/com/casic/qd/smartwell/vm/AuthenticateViewModel.kt +++ b/app/src/main/java/com/casic/qd/smartwell/vm/AuthenticateViewModel.kt @@ -1,5 +1,6 @@ package com.casic.qd.smartwell.vm +import android.util.Log import androidx.lifecycle.MutableLiveData import com.casic.qd.smartwell.base.BaseViewModel import com.casic.qd.smartwell.extensions.launch @@ -10,12 +11,14 @@ class AuthenticateViewModel : BaseViewModel() { + private val kTag = "AuthenticateViewModel" val keyModel = MutableLiveData() fun obtainPublicKey() = launch({ loadState.value = LoadState.Loading keyModel.value = RetrofitServiceManager.authenticate() }, { + Log.e(kTag, it.toString(), it) "服务器异常".show() }) } \ No newline at end of file diff --git a/app/src/main/java/com/casic/qd/smartwell/vm/CancelAlarmViewModel.kt b/app/src/main/java/com/casic/qd/smartwell/vm/CancelAlarmViewModel.kt index 419447e..d95c207 100644 --- a/app/src/main/java/com/casic/qd/smartwell/vm/CancelAlarmViewModel.kt +++ b/app/src/main/java/com/casic/qd/smartwell/vm/CancelAlarmViewModel.kt @@ -1,5 +1,6 @@ package com.casic.qd.smartwell.vm +import android.util.Log import androidx.lifecycle.MutableLiveData import com.casic.qd.smartwell.base.BaseViewModel import com.casic.qd.smartwell.extensions.launch @@ -14,6 +15,7 @@ class CancelAlarmViewModel : BaseViewModel() { + private val kTag = "CancelAlarmViewModel" private val gson = Gson() val resultModel = MutableLiveData() @@ -37,6 +39,7 @@ } }, { loadState.value = LoadState.Fail + Log.e(kTag, it.toString(), it) "服务器异常".show() }) } \ No newline at end of file diff --git a/app/src/main/java/com/casic/qd/smartwell/vm/LoginInViewModel.kt b/app/src/main/java/com/casic/qd/smartwell/vm/LoginInViewModel.kt index ec0ac1b..fc2678e 100644 --- a/app/src/main/java/com/casic/qd/smartwell/vm/LoginInViewModel.kt +++ b/app/src/main/java/com/casic/qd/smartwell/vm/LoginInViewModel.kt @@ -1,5 +1,6 @@ package com.casic.qd.smartwell.vm +import android.util.Log import androidx.lifecycle.MutableLiveData import com.casic.qd.smartwell.base.BaseViewModel import com.casic.qd.smartwell.extensions.launch @@ -14,6 +15,7 @@ class LoginInViewModel : BaseViewModel() { + private val kTag = "LoginInViewModel" private val gson = Gson() val resultModel = MutableLiveData() @@ -31,6 +33,7 @@ } }, { loadState.value = LoadState.Fail + Log.e(kTag, it.toString(), it) "服务器异常".show() }) } \ No newline at end of file diff --git a/app/src/main/java/com/casic/qd/smartwell/vm/SearchAlarmViewModel.kt b/app/src/main/java/com/casic/qd/smartwell/vm/SearchAlarmViewModel.kt index c3fc1da..1ae3407 100644 --- a/app/src/main/java/com/casic/qd/smartwell/vm/SearchAlarmViewModel.kt +++ b/app/src/main/java/com/casic/qd/smartwell/vm/SearchAlarmViewModel.kt @@ -1,5 +1,6 @@ package com.casic.qd.smartwell.vm +import android.util.Log import androidx.lifecycle.MutableLiveData import com.casic.qd.smartwell.base.BaseViewModel import com.casic.qd.smartwell.extensions.launch @@ -14,6 +15,7 @@ class SearchAlarmViewModel : BaseViewModel() { + private val kTag = "SearchAlarmViewModel" private val gson = Gson() val listModel = MutableLiveData() @@ -43,6 +45,7 @@ } }, { loadState.value = LoadState.Fail + Log.e(kTag, it.toString(), it) "服务器异常".show() }) } \ No newline at end of file diff --git a/app/src/main/java/com/casic/qd/smartwell/vm/UserDetailViewModel.kt b/app/src/main/java/com/casic/qd/smartwell/vm/UserDetailViewModel.kt index 5bf6c64..91c39d9 100644 --- a/app/src/main/java/com/casic/qd/smartwell/vm/UserDetailViewModel.kt +++ b/app/src/main/java/com/casic/qd/smartwell/vm/UserDetailViewModel.kt @@ -1,5 +1,6 @@ package com.casic.qd.smartwell.vm +import android.util.Log import androidx.lifecycle.MutableLiveData import com.casic.qd.smartwell.base.BaseViewModel import com.casic.qd.smartwell.extensions.launch @@ -14,6 +15,7 @@ class UserDetailViewModel : BaseViewModel() { + private val kTag = "UserDetailViewModel" private val gson = Gson() //用户信息不用现取现用,布尔值标志用户token是否失效 @@ -34,6 +36,7 @@ flag.value = false } }, { + Log.e(kTag, it.toString(), it) "服务器异常".show() }) } \ No newline at end of file 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 76329c8..621b755 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 @@ -1,5 +1,6 @@ package com.casic.qd.smartwell.vm +import android.util.Log import androidx.lifecycle.MutableLiveData import com.casic.qd.smartwell.base.BaseViewModel import com.casic.qd.smartwell.extensions.launch @@ -14,6 +15,7 @@ class WaterStatisticsViewModel : BaseViewModel() { + private val kTag = "WaterStatisticsViewModel" private val gson = Gson() val resultModel = MutableLiveData>() val areaDataModel = MutableLiveData() @@ -50,6 +52,7 @@ response.toErrorMessage().show() } }, { + Log.e(kTag, it.toString(), it) "服务器异常".show() }) } \ No newline at end of file diff --git a/app/src/main/java/com/casic/qd/smartwell/vm/WellDetailViewModel.kt b/app/src/main/java/com/casic/qd/smartwell/vm/WellDetailViewModel.kt index b2bdaaa..2613466 100644 --- a/app/src/main/java/com/casic/qd/smartwell/vm/WellDetailViewModel.kt +++ b/app/src/main/java/com/casic/qd/smartwell/vm/WellDetailViewModel.kt @@ -1,5 +1,6 @@ package com.casic.qd.smartwell.vm +import android.util.Log import androidx.lifecycle.MutableLiveData import com.casic.qd.smartwell.base.BaseViewModel import com.casic.qd.smartwell.extensions.launch @@ -14,6 +15,7 @@ class WellDetailViewModel : BaseViewModel() { + private val kTag = "WellDetailViewModel" private val gson = Gson() val detailModel = MutableLiveData() @@ -32,6 +34,7 @@ } }, { loadState.value = LoadState.Fail + Log.e(kTag, it.toString(), it) "服务器异常".show() }) } \ No newline at end of file diff --git a/app/src/main/res/layout/activity_expanded.xml b/app/src/main/res/layout/activity_expanded.xml index 1c5d8cf..7a2dce8 100644 --- a/app/src/main/res/layout/activity_expanded.xml +++ b/app/src/main/res/layout/activity_expanded.xml @@ -3,10 +3,37 @@ android:layout_width="match_parent" android:layout_height="match_parent" android:background="@color/white" - android:layout_marginVertical="@dimen/dp_5"> + android:orientation="vertical"> - + android:layout_height="wrap_content" + android:padding="@dimen/dp_10"> + + + + + + + + + + \ No newline at end of file diff --git a/app/src/main/res/layout/activity_main.xml b/app/src/main/res/layout/activity_main.xml index d29dc24..2beac41 100644 --- a/app/src/main/res/layout/activity_main.xml +++ b/app/src/main/res/layout/activity_main.xml @@ -66,7 +66,7 @@ android:layout_height="wrap_content" android:paddingVertical="@dimen/dp_10" android:text="统计" - android:textColor="@color/black" + android:textColor="@color/mainTextColor" android:textSize="@dimen/titleFontSize" /> = ArrayList() + private var startDate = "" + private var differ = 0 override fun initLayoutView(): Int = R.layout.activity_expanded @@ -26,28 +33,80 @@ override fun initData() { waterViewModel = ViewModelProvider(this).get(WaterStatisticsViewModel::class.java) - //初始化折线图,X轴从0开始 - ChartViewHelper.initLineChart(waterLineChart, (Constant.ONE_WEEK - 1).toFloat()) } override fun initEvent() { - //一周折线图数据 - val currentTime = System.currentTimeMillis() - waterViewModel.waterCountByDay( - "110000", - currentTime.timestampToLastWeekDate(), - currentTime.timestampToDate() - ) + //默认选择近7天的数据 + periodSpinner.setSelection(3) + periodSpinner.onItemSelectedListener = object : AdapterView.OnItemSelectedListener { + override fun onItemSelected( + parent: AdapterView<*>?, view: View?, + position: Int, id: Long + ) { + val time = System.currentTimeMillis() + val calendar = Calendar.getInstance() + val year: Int = calendar.get(Calendar.YEAR) + when (position) { + 0 -> { + //本年度 + startDate = "$year-01-01" + } + 1 -> { + //本季度 + when (time.getQuarterOfYear()) { + 1 -> { + startDate = "$year-01-01" + } + 2 -> { + startDate = "$year-04-01" + } + 3 -> { + startDate = "$year-07-01" + } + 4 -> { + startDate = "$year-10-01" + } + } + } + 2 -> { + //近30日 + startDate = time.timestampToLastMonthDate() + } + 3 -> { + //近7日 + startDate = time.timestampToLastWeekDate() + } + 4 -> { + //今日 + startDate = time.timestampToDate() + } + 5 -> { + + } + } + //初始化折线图,X轴从0开始 + differ = startDate.differ(time.timestampToDate()) + ChartViewHelper.initLineChart(waterLineChart) + waterViewModel.waterCountByDay(Constant.AREA_ID, startDate, time.timestampToDate()) + } + + override fun onNothingSelected(parent: AdapterView<*>?) { + + } + } + waterViewModel.areaDataModel.observe(this, { if (it.code == 200) { it.data?.forEachIndexed { i, dataBean -> val entryModel = LineChartEntryModel() - entryModel.lineColor = Constant.COLORS[i].convertColor() + if (i <= differ) { + entryModel.lineColor = Constant.COLORS[i].convertColor() + } entryModel.entryDate = dataBean.date - //每个entries都是一条折线 +// //每个entries都是一条折线 val entries: ArrayList = ArrayList() - for (j in 0 until Constant.ONE_WEEK) { + for (j in 0..differ) { val areaData = it.data!![j].data!![i] entries.add( Entry(j.toFloat(), areaData.count!!.toFloat(), areaData.areaName) @@ -55,6 +114,23 @@ } entryModel.entryList = entries entryModels.add(entryModel) + + /** + * i的范围是[0,differ] + * */ + //每个entries都是一条折线 +// val entries: ArrayList = ArrayList() +// for (k in dataBean.data!!.indices) { +// /** +// * i的范围是[0,dataBean.data!!.indices] +// * */ +// val areaData = dataBean.data!![k] +// entries.add( +// Entry(k.toFloat(), areaData.count!!.toFloat(), areaData.areaName) +// ) +// } +// entryModel.entryList = entries +// entryModels.add(entryModel) } ChartViewHelper.setLineChartData(waterLineChart, entryModels) } 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 56ea003..570df4e 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 @@ -86,7 +86,7 @@ }) //Banner点击事件 setOnBannerListener { data, _ -> - startActivity(Intent(this@MainActivity, WebsiteActivity::class.java)) + navigatePageTo(WebsiteActivity::class.java) } } @@ -107,9 +107,6 @@ //初始化vm waterViewModel = ViewModelProvider(this).get(WaterStatisticsViewModel::class.java) - - //初始化折线图,X轴从0开始 - ChartViewHelper.initLineChart(waterLineChart, (Constant.ONE_WEEK - 1).toFloat()) weakReferenceHandler = WeakReferenceHandler(this) } @@ -125,23 +122,26 @@ navigatePageTo(AlarmManagementActivity::class.java) } + //初始化折线图,X轴从0开始 + val time = System.currentTimeMillis() + val startDate = time.timestampToLastWeekDate() + val endDate = time.timestampToDate() + val differ = startDate.differ(endDate) + ChartViewHelper.initLineChart(waterLineChart) //一周折线图数据 - val currentTime = System.currentTimeMillis() - waterViewModel.waterCountByDay( - "110000", - currentTime.timestampToLastWeekDate(), - currentTime.timestampToDate() - ) + waterViewModel.waterCountByDay(Constant.AREA_ID, startDate, endDate) waterViewModel.areaDataModel.observe(this, { if (it.code == 200) { it.data?.forEachIndexed { i, dataBean -> val entryModel = LineChartEntryModel() - entryModel.lineColor = Constant.COLORS[i].convertColor() + if (i <= differ) { + entryModel.lineColor = Constant.COLORS[i].convertColor() + } entryModel.entryDate = dataBean.date //每个entries都是一条折线 val entries: ArrayList = ArrayList() - for (j in 0 until Constant.ONE_WEEK) { + for (j in 0..differ) { val areaData = it.data!![j].data!![i] entries.add( Entry(j.toFloat(), areaData.count!!.toFloat(), areaData.areaName) diff --git a/app/src/main/java/com/casic/qd/smartwell/view/StatisticsActivity.kt b/app/src/main/java/com/casic/qd/smartwell/view/StatisticsActivity.kt index f6874f9..d6401c8 100644 --- a/app/src/main/java/com/casic/qd/smartwell/view/StatisticsActivity.kt +++ b/app/src/main/java/com/casic/qd/smartwell/view/StatisticsActivity.kt @@ -45,7 +45,7 @@ ChartViewHelper.setPieChartData(totalPieChart, pieEntries) //初始化折线图 - ChartViewHelper.initLineChart(totalLineChart, Constant.YEARS.last().toFloat()) + ChartViewHelper.initLineChart(totalLineChart) //TODO 这是模拟数据 for (i in Constant.YEARS) { valveEntries.add( diff --git a/app/src/main/java/com/casic/qd/smartwell/vm/AlarmContentViewModel.kt b/app/src/main/java/com/casic/qd/smartwell/vm/AlarmContentViewModel.kt index 8c1d4e3..b12b37f 100644 --- a/app/src/main/java/com/casic/qd/smartwell/vm/AlarmContentViewModel.kt +++ b/app/src/main/java/com/casic/qd/smartwell/vm/AlarmContentViewModel.kt @@ -1,5 +1,6 @@ package com.casic.qd.smartwell.vm +import android.util.Log import androidx.lifecycle.MutableLiveData import com.casic.qd.smartwell.base.BaseViewModel import com.casic.qd.smartwell.extensions.launch @@ -13,6 +14,7 @@ class AlarmContentViewModel : BaseViewModel() { + private val kTag = "AlarmContentViewModel" private val gson = Gson() val contentModel = MutableLiveData() @@ -27,6 +29,7 @@ response.toErrorMessage().show() } }, { + Log.e(kTag, it.toString(), it) "服务器异常".show() }) } \ No newline at end of file diff --git a/app/src/main/java/com/casic/qd/smartwell/vm/AlarmListViewModel.kt b/app/src/main/java/com/casic/qd/smartwell/vm/AlarmListViewModel.kt index 2f41249..58cecfa 100644 --- a/app/src/main/java/com/casic/qd/smartwell/vm/AlarmListViewModel.kt +++ b/app/src/main/java/com/casic/qd/smartwell/vm/AlarmListViewModel.kt @@ -1,5 +1,6 @@ package com.casic.qd.smartwell.vm +import android.util.Log import androidx.lifecycle.MutableLiveData import com.casic.qd.smartwell.base.BaseViewModel import com.casic.qd.smartwell.extensions.launch @@ -13,6 +14,7 @@ class AlarmListViewModel : BaseViewModel() { + private val kTag = "AlarmListViewModel" private val gson = Gson() val listModel = MutableLiveData() @@ -45,6 +47,7 @@ response.toErrorMessage().show() } }, { + Log.e(kTag, it.toString(), it) "服务器异常".show() }) } \ No newline at end of file diff --git a/app/src/main/java/com/casic/qd/smartwell/vm/AlarmTypeViewModel.kt b/app/src/main/java/com/casic/qd/smartwell/vm/AlarmTypeViewModel.kt index dcaa579..c98d93c 100644 --- a/app/src/main/java/com/casic/qd/smartwell/vm/AlarmTypeViewModel.kt +++ b/app/src/main/java/com/casic/qd/smartwell/vm/AlarmTypeViewModel.kt @@ -1,5 +1,6 @@ package com.casic.qd.smartwell.vm +import android.util.Log import androidx.lifecycle.MutableLiveData import com.casic.qd.smartwell.base.BaseViewModel import com.casic.qd.smartwell.extensions.launch @@ -13,6 +14,7 @@ class AlarmTypeViewModel : BaseViewModel() { + private val kTag = "AlarmTypeViewModel" private val gson = Gson() val typeModel = MutableLiveData() @@ -27,6 +29,7 @@ response.toErrorMessage().show() } }, { + Log.e(kTag, it.toString(), it) "服务器异常".show() }) } \ No newline at end of file diff --git a/app/src/main/java/com/casic/qd/smartwell/vm/AreaViewModel.kt b/app/src/main/java/com/casic/qd/smartwell/vm/AreaViewModel.kt index 6d06350..c337e59 100644 --- a/app/src/main/java/com/casic/qd/smartwell/vm/AreaViewModel.kt +++ b/app/src/main/java/com/casic/qd/smartwell/vm/AreaViewModel.kt @@ -1,5 +1,6 @@ package com.casic.qd.smartwell.vm +import android.util.Log import androidx.lifecycle.MutableLiveData import com.casic.qd.smartwell.base.BaseViewModel import com.casic.qd.smartwell.extensions.launch @@ -13,6 +14,7 @@ class AreaViewModel : BaseViewModel() { + private val kTag = "AreaViewModel" private val gson = Gson() val areaModel = MutableLiveData() @@ -27,6 +29,7 @@ response.toErrorMessage().show() } }, { + Log.e(kTag, it.toString(), it) "服务器异常".show() }) } \ No newline at end of file diff --git a/app/src/main/java/com/casic/qd/smartwell/vm/AuthenticateViewModel.kt b/app/src/main/java/com/casic/qd/smartwell/vm/AuthenticateViewModel.kt index 6b1d404..55ccc65 100644 --- a/app/src/main/java/com/casic/qd/smartwell/vm/AuthenticateViewModel.kt +++ b/app/src/main/java/com/casic/qd/smartwell/vm/AuthenticateViewModel.kt @@ -1,5 +1,6 @@ package com.casic.qd.smartwell.vm +import android.util.Log import androidx.lifecycle.MutableLiveData import com.casic.qd.smartwell.base.BaseViewModel import com.casic.qd.smartwell.extensions.launch @@ -10,12 +11,14 @@ class AuthenticateViewModel : BaseViewModel() { + private val kTag = "AuthenticateViewModel" val keyModel = MutableLiveData() fun obtainPublicKey() = launch({ loadState.value = LoadState.Loading keyModel.value = RetrofitServiceManager.authenticate() }, { + Log.e(kTag, it.toString(), it) "服务器异常".show() }) } \ No newline at end of file diff --git a/app/src/main/java/com/casic/qd/smartwell/vm/CancelAlarmViewModel.kt b/app/src/main/java/com/casic/qd/smartwell/vm/CancelAlarmViewModel.kt index 419447e..d95c207 100644 --- a/app/src/main/java/com/casic/qd/smartwell/vm/CancelAlarmViewModel.kt +++ b/app/src/main/java/com/casic/qd/smartwell/vm/CancelAlarmViewModel.kt @@ -1,5 +1,6 @@ package com.casic.qd.smartwell.vm +import android.util.Log import androidx.lifecycle.MutableLiveData import com.casic.qd.smartwell.base.BaseViewModel import com.casic.qd.smartwell.extensions.launch @@ -14,6 +15,7 @@ class CancelAlarmViewModel : BaseViewModel() { + private val kTag = "CancelAlarmViewModel" private val gson = Gson() val resultModel = MutableLiveData() @@ -37,6 +39,7 @@ } }, { loadState.value = LoadState.Fail + Log.e(kTag, it.toString(), it) "服务器异常".show() }) } \ No newline at end of file diff --git a/app/src/main/java/com/casic/qd/smartwell/vm/LoginInViewModel.kt b/app/src/main/java/com/casic/qd/smartwell/vm/LoginInViewModel.kt index ec0ac1b..fc2678e 100644 --- a/app/src/main/java/com/casic/qd/smartwell/vm/LoginInViewModel.kt +++ b/app/src/main/java/com/casic/qd/smartwell/vm/LoginInViewModel.kt @@ -1,5 +1,6 @@ package com.casic.qd.smartwell.vm +import android.util.Log import androidx.lifecycle.MutableLiveData import com.casic.qd.smartwell.base.BaseViewModel import com.casic.qd.smartwell.extensions.launch @@ -14,6 +15,7 @@ class LoginInViewModel : BaseViewModel() { + private val kTag = "LoginInViewModel" private val gson = Gson() val resultModel = MutableLiveData() @@ -31,6 +33,7 @@ } }, { loadState.value = LoadState.Fail + Log.e(kTag, it.toString(), it) "服务器异常".show() }) } \ No newline at end of file diff --git a/app/src/main/java/com/casic/qd/smartwell/vm/SearchAlarmViewModel.kt b/app/src/main/java/com/casic/qd/smartwell/vm/SearchAlarmViewModel.kt index c3fc1da..1ae3407 100644 --- a/app/src/main/java/com/casic/qd/smartwell/vm/SearchAlarmViewModel.kt +++ b/app/src/main/java/com/casic/qd/smartwell/vm/SearchAlarmViewModel.kt @@ -1,5 +1,6 @@ package com.casic.qd.smartwell.vm +import android.util.Log import androidx.lifecycle.MutableLiveData import com.casic.qd.smartwell.base.BaseViewModel import com.casic.qd.smartwell.extensions.launch @@ -14,6 +15,7 @@ class SearchAlarmViewModel : BaseViewModel() { + private val kTag = "SearchAlarmViewModel" private val gson = Gson() val listModel = MutableLiveData() @@ -43,6 +45,7 @@ } }, { loadState.value = LoadState.Fail + Log.e(kTag, it.toString(), it) "服务器异常".show() }) } \ No newline at end of file diff --git a/app/src/main/java/com/casic/qd/smartwell/vm/UserDetailViewModel.kt b/app/src/main/java/com/casic/qd/smartwell/vm/UserDetailViewModel.kt index 5bf6c64..91c39d9 100644 --- a/app/src/main/java/com/casic/qd/smartwell/vm/UserDetailViewModel.kt +++ b/app/src/main/java/com/casic/qd/smartwell/vm/UserDetailViewModel.kt @@ -1,5 +1,6 @@ package com.casic.qd.smartwell.vm +import android.util.Log import androidx.lifecycle.MutableLiveData import com.casic.qd.smartwell.base.BaseViewModel import com.casic.qd.smartwell.extensions.launch @@ -14,6 +15,7 @@ class UserDetailViewModel : BaseViewModel() { + private val kTag = "UserDetailViewModel" private val gson = Gson() //用户信息不用现取现用,布尔值标志用户token是否失效 @@ -34,6 +36,7 @@ flag.value = false } }, { + Log.e(kTag, it.toString(), it) "服务器异常".show() }) } \ No newline at end of file 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 76329c8..621b755 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 @@ -1,5 +1,6 @@ package com.casic.qd.smartwell.vm +import android.util.Log import androidx.lifecycle.MutableLiveData import com.casic.qd.smartwell.base.BaseViewModel import com.casic.qd.smartwell.extensions.launch @@ -14,6 +15,7 @@ class WaterStatisticsViewModel : BaseViewModel() { + private val kTag = "WaterStatisticsViewModel" private val gson = Gson() val resultModel = MutableLiveData>() val areaDataModel = MutableLiveData() @@ -50,6 +52,7 @@ response.toErrorMessage().show() } }, { + Log.e(kTag, it.toString(), it) "服务器异常".show() }) } \ No newline at end of file diff --git a/app/src/main/java/com/casic/qd/smartwell/vm/WellDetailViewModel.kt b/app/src/main/java/com/casic/qd/smartwell/vm/WellDetailViewModel.kt index b2bdaaa..2613466 100644 --- a/app/src/main/java/com/casic/qd/smartwell/vm/WellDetailViewModel.kt +++ b/app/src/main/java/com/casic/qd/smartwell/vm/WellDetailViewModel.kt @@ -1,5 +1,6 @@ package com.casic.qd.smartwell.vm +import android.util.Log import androidx.lifecycle.MutableLiveData import com.casic.qd.smartwell.base.BaseViewModel import com.casic.qd.smartwell.extensions.launch @@ -14,6 +15,7 @@ class WellDetailViewModel : BaseViewModel() { + private val kTag = "WellDetailViewModel" private val gson = Gson() val detailModel = MutableLiveData() @@ -32,6 +34,7 @@ } }, { loadState.value = LoadState.Fail + Log.e(kTag, it.toString(), it) "服务器异常".show() }) } \ No newline at end of file diff --git a/app/src/main/res/layout/activity_expanded.xml b/app/src/main/res/layout/activity_expanded.xml index 1c5d8cf..7a2dce8 100644 --- a/app/src/main/res/layout/activity_expanded.xml +++ b/app/src/main/res/layout/activity_expanded.xml @@ -3,10 +3,37 @@ android:layout_width="match_parent" android:layout_height="match_parent" android:background="@color/white" - android:layout_marginVertical="@dimen/dp_5"> + android:orientation="vertical"> - + android:layout_height="wrap_content" + android:padding="@dimen/dp_10"> + + + + + + + + + + \ No newline at end of file diff --git a/app/src/main/res/layout/activity_main.xml b/app/src/main/res/layout/activity_main.xml index d29dc24..2beac41 100644 --- a/app/src/main/res/layout/activity_main.xml +++ b/app/src/main/res/layout/activity_main.xml @@ -66,7 +66,7 @@ android:layout_height="wrap_content" android:paddingVertical="@dimen/dp_10" android:text="统计" - android:textColor="@color/black" + android:textColor="@color/mainTextColor" android:textSize="@dimen/titleFontSize" /> 已处理 无需处理 + + + 本年度 + 本季度 + 近30日 + 近7日 + 今日 + 自定义 + \ No newline at end of file