diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml index 82386c9..3832c68 100644 --- a/app/src/main/AndroidManifest.xml +++ b/app/src/main/AndroidManifest.xml @@ -48,7 +48,7 @@ - + diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml index 82386c9..3832c68 100644 --- a/app/src/main/AndroidManifest.xml +++ b/app/src/main/AndroidManifest.xml @@ -48,7 +48,7 @@ - + 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 216e7cc..f53e831 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,6 +15,14 @@ return dateFormat.format(calendar.time) } +fun Long.timestampToLastWeekTime(): String { + val dateFormat = SimpleDateFormat("yyyy-MM-dd HH:mm:ss", Locale.CHINA) + val calendar = Calendar.getInstance() + calendar.time = Date(this) + calendar.set(Calendar.DAY_OF_YEAR, calendar.get(Calendar.DAY_OF_YEAR) - 6) + return dateFormat.format(calendar.time) +} + fun Long.timestampToLastMonthDate(): String { val dateFormat = SimpleDateFormat("yyyy-MM-dd", Locale.CHINA) val calendar = Calendar.getInstance() diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml index 82386c9..3832c68 100644 --- a/app/src/main/AndroidManifest.xml +++ b/app/src/main/AndroidManifest.xml @@ -48,7 +48,7 @@ - + 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 216e7cc..f53e831 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,6 +15,14 @@ return dateFormat.format(calendar.time) } +fun Long.timestampToLastWeekTime(): String { + val dateFormat = SimpleDateFormat("yyyy-MM-dd HH:mm:ss", Locale.CHINA) + val calendar = Calendar.getInstance() + calendar.time = Date(this) + calendar.set(Calendar.DAY_OF_YEAR, calendar.get(Calendar.DAY_OF_YEAR) - 6) + return dateFormat.format(calendar.time) +} + fun Long.timestampToLastMonthDate(): String { val dateFormat = SimpleDateFormat("yyyy-MM-dd", Locale.CHINA) val calendar = Calendar.getInstance() diff --git a/app/src/main/java/com/casic/qd/smartwell/model/DayDataModel.kt b/app/src/main/java/com/casic/qd/smartwell/model/DayDataModel.kt new file mode 100644 index 0000000..18d1399 --- /dev/null +++ b/app/src/main/java/com/casic/qd/smartwell/model/DayDataModel.kt @@ -0,0 +1,13 @@ +package com.casic.qd.smartwell.model + +class DayDataModel { + var code = 0 + var data: List? = null + var message: String? = null + var isSuccess = false + + class DataBean { + var time: String? = null + var value: String? = null + } +} \ No newline at end of file diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml index 82386c9..3832c68 100644 --- a/app/src/main/AndroidManifest.xml +++ b/app/src/main/AndroidManifest.xml @@ -48,7 +48,7 @@ - + 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 216e7cc..f53e831 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,6 +15,14 @@ return dateFormat.format(calendar.time) } +fun Long.timestampToLastWeekTime(): String { + val dateFormat = SimpleDateFormat("yyyy-MM-dd HH:mm:ss", Locale.CHINA) + val calendar = Calendar.getInstance() + calendar.time = Date(this) + calendar.set(Calendar.DAY_OF_YEAR, calendar.get(Calendar.DAY_OF_YEAR) - 6) + return dateFormat.format(calendar.time) +} + fun Long.timestampToLastMonthDate(): String { val dateFormat = SimpleDateFormat("yyyy-MM-dd", Locale.CHINA) val calendar = Calendar.getInstance() diff --git a/app/src/main/java/com/casic/qd/smartwell/model/DayDataModel.kt b/app/src/main/java/com/casic/qd/smartwell/model/DayDataModel.kt new file mode 100644 index 0000000..18d1399 --- /dev/null +++ b/app/src/main/java/com/casic/qd/smartwell/model/DayDataModel.kt @@ -0,0 +1,13 @@ +package com.casic.qd.smartwell.model + +class DayDataModel { + var code = 0 + var data: List? = null + var message: String? = null + var isSuccess = false + + class DataBean { + var time: String? = null + var value: String? = null + } +} \ No newline at end of file diff --git a/app/src/main/java/com/casic/qd/smartwell/model/TotalDataModel.kt b/app/src/main/java/com/casic/qd/smartwell/model/TotalDataModel.kt new file mode 100644 index 0000000..30bf829 --- /dev/null +++ b/app/src/main/java/com/casic/qd/smartwell/model/TotalDataModel.kt @@ -0,0 +1,14 @@ +package com.casic.qd.smartwell.model + +class TotalDataModel { + var code = 0 + var data: List? = null + var message: String? = null + var isSuccess = false + + class DataBean { + var total: String? = null + var deviceState: String? = null + var uptime: String? = null + } +} \ No newline at end of file diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml index 82386c9..3832c68 100644 --- a/app/src/main/AndroidManifest.xml +++ b/app/src/main/AndroidManifest.xml @@ -48,7 +48,7 @@ - + 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 216e7cc..f53e831 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,6 +15,14 @@ return dateFormat.format(calendar.time) } +fun Long.timestampToLastWeekTime(): String { + val dateFormat = SimpleDateFormat("yyyy-MM-dd HH:mm:ss", Locale.CHINA) + val calendar = Calendar.getInstance() + calendar.time = Date(this) + calendar.set(Calendar.DAY_OF_YEAR, calendar.get(Calendar.DAY_OF_YEAR) - 6) + return dateFormat.format(calendar.time) +} + fun Long.timestampToLastMonthDate(): String { val dateFormat = SimpleDateFormat("yyyy-MM-dd", Locale.CHINA) val calendar = Calendar.getInstance() diff --git a/app/src/main/java/com/casic/qd/smartwell/model/DayDataModel.kt b/app/src/main/java/com/casic/qd/smartwell/model/DayDataModel.kt new file mode 100644 index 0000000..18d1399 --- /dev/null +++ b/app/src/main/java/com/casic/qd/smartwell/model/DayDataModel.kt @@ -0,0 +1,13 @@ +package com.casic.qd.smartwell.model + +class DayDataModel { + var code = 0 + var data: List? = null + var message: String? = null + var isSuccess = false + + class DataBean { + var time: String? = null + var value: String? = null + } +} \ No newline at end of file diff --git a/app/src/main/java/com/casic/qd/smartwell/model/TotalDataModel.kt b/app/src/main/java/com/casic/qd/smartwell/model/TotalDataModel.kt new file mode 100644 index 0000000..30bf829 --- /dev/null +++ b/app/src/main/java/com/casic/qd/smartwell/model/TotalDataModel.kt @@ -0,0 +1,14 @@ +package com.casic.qd.smartwell.model + +class TotalDataModel { + var code = 0 + var data: List? = null + var message: String? = null + var isSuccess = false + + class DataBean { + var total: String? = null + var deviceState: String? = null + var uptime: String? = null + } +} \ No newline at end of file diff --git a/app/src/main/java/com/casic/qd/smartwell/utils/retrofit/RetrofitService.kt b/app/src/main/java/com/casic/qd/smartwell/utils/retrofit/RetrofitService.kt index c5bf469..0c80ee9 100644 --- a/app/src/main/java/com/casic/qd/smartwell/utils/retrofit/RetrofitService.kt +++ b/app/src/main/java/com/casic/qd/smartwell/utils/retrofit/RetrofitService.kt @@ -202,4 +202,26 @@ @Query("offset") offset: Int, @Query("limit") limit: Int ): String + + /** + * 获取设备日用水量 + * */ + @GET("/device/sevenDayData") + suspend fun obtainSevenDayData( + @Header("token") token: String, + @Query("devCode") devCode: String?, + @Query("beginTime") beginTime: String?, + @Query("endTime") endTime: String? + ): String + + /** + * 获取设备日用水量 + * */ + @GET("/device/totalData") + suspend fun obtainTotalDayData( + @Header("token") token: String, + @Query("devCode") devCode: String?, + @Query("beginTime") beginTime: String?, + @Query("endTime") endTime: String? + ): String } \ No newline at end of file diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml index 82386c9..3832c68 100644 --- a/app/src/main/AndroidManifest.xml +++ b/app/src/main/AndroidManifest.xml @@ -48,7 +48,7 @@ - + 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 216e7cc..f53e831 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,6 +15,14 @@ return dateFormat.format(calendar.time) } +fun Long.timestampToLastWeekTime(): String { + val dateFormat = SimpleDateFormat("yyyy-MM-dd HH:mm:ss", Locale.CHINA) + val calendar = Calendar.getInstance() + calendar.time = Date(this) + calendar.set(Calendar.DAY_OF_YEAR, calendar.get(Calendar.DAY_OF_YEAR) - 6) + return dateFormat.format(calendar.time) +} + fun Long.timestampToLastMonthDate(): String { val dateFormat = SimpleDateFormat("yyyy-MM-dd", Locale.CHINA) val calendar = Calendar.getInstance() diff --git a/app/src/main/java/com/casic/qd/smartwell/model/DayDataModel.kt b/app/src/main/java/com/casic/qd/smartwell/model/DayDataModel.kt new file mode 100644 index 0000000..18d1399 --- /dev/null +++ b/app/src/main/java/com/casic/qd/smartwell/model/DayDataModel.kt @@ -0,0 +1,13 @@ +package com.casic.qd.smartwell.model + +class DayDataModel { + var code = 0 + var data: List? = null + var message: String? = null + var isSuccess = false + + class DataBean { + var time: String? = null + var value: String? = null + } +} \ No newline at end of file diff --git a/app/src/main/java/com/casic/qd/smartwell/model/TotalDataModel.kt b/app/src/main/java/com/casic/qd/smartwell/model/TotalDataModel.kt new file mode 100644 index 0000000..30bf829 --- /dev/null +++ b/app/src/main/java/com/casic/qd/smartwell/model/TotalDataModel.kt @@ -0,0 +1,14 @@ +package com.casic.qd.smartwell.model + +class TotalDataModel { + var code = 0 + var data: List? = null + var message: String? = null + var isSuccess = false + + class DataBean { + var total: String? = null + var deviceState: String? = null + var uptime: String? = null + } +} \ No newline at end of file diff --git a/app/src/main/java/com/casic/qd/smartwell/utils/retrofit/RetrofitService.kt b/app/src/main/java/com/casic/qd/smartwell/utils/retrofit/RetrofitService.kt index c5bf469..0c80ee9 100644 --- a/app/src/main/java/com/casic/qd/smartwell/utils/retrofit/RetrofitService.kt +++ b/app/src/main/java/com/casic/qd/smartwell/utils/retrofit/RetrofitService.kt @@ -202,4 +202,26 @@ @Query("offset") offset: Int, @Query("limit") limit: Int ): String + + /** + * 获取设备日用水量 + * */ + @GET("/device/sevenDayData") + suspend fun obtainSevenDayData( + @Header("token") token: String, + @Query("devCode") devCode: String?, + @Query("beginTime") beginTime: String?, + @Query("endTime") endTime: String? + ): String + + /** + * 获取设备日用水量 + * */ + @GET("/device/totalData") + suspend fun obtainTotalDayData( + @Header("token") token: String, + @Query("devCode") devCode: String?, + @Query("beginTime") beginTime: String?, + @Query("endTime") endTime: String? + ): String } \ No newline at end of file diff --git a/app/src/main/java/com/casic/qd/smartwell/utils/retrofit/RetrofitServiceManager.kt b/app/src/main/java/com/casic/qd/smartwell/utils/retrofit/RetrofitServiceManager.kt index 6f728e0..a8b320f 100644 --- a/app/src/main/java/com/casic/qd/smartwell/utils/retrofit/RetrofitServiceManager.kt +++ b/app/src/main/java/com/casic/qd/smartwell/utils/retrofit/RetrofitServiceManager.kt @@ -204,4 +204,18 @@ Constant.PAGE_LIMIT ) } + + /** + * 获取设备日用水量 + */ + suspend fun obtainSevenDayData(devCode: String?, beginTime: String?, endTime: String?): String { + return api.obtainSevenDayData(AuthenticationHelper.token!!, devCode, beginTime, endTime) + } + + /** + * 获取设备累计用水量 + */ + suspend fun obtainTotalDayData(devCode: String?, beginTime: String?, endTime: String?): String { + return api.obtainTotalDayData(AuthenticationHelper.token!!, devCode, beginTime, endTime) + } } \ No newline at end of file diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml index 82386c9..3832c68 100644 --- a/app/src/main/AndroidManifest.xml +++ b/app/src/main/AndroidManifest.xml @@ -48,7 +48,7 @@ - + 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 216e7cc..f53e831 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,6 +15,14 @@ return dateFormat.format(calendar.time) } +fun Long.timestampToLastWeekTime(): String { + val dateFormat = SimpleDateFormat("yyyy-MM-dd HH:mm:ss", Locale.CHINA) + val calendar = Calendar.getInstance() + calendar.time = Date(this) + calendar.set(Calendar.DAY_OF_YEAR, calendar.get(Calendar.DAY_OF_YEAR) - 6) + return dateFormat.format(calendar.time) +} + fun Long.timestampToLastMonthDate(): String { val dateFormat = SimpleDateFormat("yyyy-MM-dd", Locale.CHINA) val calendar = Calendar.getInstance() diff --git a/app/src/main/java/com/casic/qd/smartwell/model/DayDataModel.kt b/app/src/main/java/com/casic/qd/smartwell/model/DayDataModel.kt new file mode 100644 index 0000000..18d1399 --- /dev/null +++ b/app/src/main/java/com/casic/qd/smartwell/model/DayDataModel.kt @@ -0,0 +1,13 @@ +package com.casic.qd.smartwell.model + +class DayDataModel { + var code = 0 + var data: List? = null + var message: String? = null + var isSuccess = false + + class DataBean { + var time: String? = null + var value: String? = null + } +} \ No newline at end of file diff --git a/app/src/main/java/com/casic/qd/smartwell/model/TotalDataModel.kt b/app/src/main/java/com/casic/qd/smartwell/model/TotalDataModel.kt new file mode 100644 index 0000000..30bf829 --- /dev/null +++ b/app/src/main/java/com/casic/qd/smartwell/model/TotalDataModel.kt @@ -0,0 +1,14 @@ +package com.casic.qd.smartwell.model + +class TotalDataModel { + var code = 0 + var data: List? = null + var message: String? = null + var isSuccess = false + + class DataBean { + var total: String? = null + var deviceState: String? = null + var uptime: String? = null + } +} \ No newline at end of file diff --git a/app/src/main/java/com/casic/qd/smartwell/utils/retrofit/RetrofitService.kt b/app/src/main/java/com/casic/qd/smartwell/utils/retrofit/RetrofitService.kt index c5bf469..0c80ee9 100644 --- a/app/src/main/java/com/casic/qd/smartwell/utils/retrofit/RetrofitService.kt +++ b/app/src/main/java/com/casic/qd/smartwell/utils/retrofit/RetrofitService.kt @@ -202,4 +202,26 @@ @Query("offset") offset: Int, @Query("limit") limit: Int ): String + + /** + * 获取设备日用水量 + * */ + @GET("/device/sevenDayData") + suspend fun obtainSevenDayData( + @Header("token") token: String, + @Query("devCode") devCode: String?, + @Query("beginTime") beginTime: String?, + @Query("endTime") endTime: String? + ): String + + /** + * 获取设备日用水量 + * */ + @GET("/device/totalData") + suspend fun obtainTotalDayData( + @Header("token") token: String, + @Query("devCode") devCode: String?, + @Query("beginTime") beginTime: String?, + @Query("endTime") endTime: String? + ): String } \ No newline at end of file diff --git a/app/src/main/java/com/casic/qd/smartwell/utils/retrofit/RetrofitServiceManager.kt b/app/src/main/java/com/casic/qd/smartwell/utils/retrofit/RetrofitServiceManager.kt index 6f728e0..a8b320f 100644 --- a/app/src/main/java/com/casic/qd/smartwell/utils/retrofit/RetrofitServiceManager.kt +++ b/app/src/main/java/com/casic/qd/smartwell/utils/retrofit/RetrofitServiceManager.kt @@ -204,4 +204,18 @@ Constant.PAGE_LIMIT ) } + + /** + * 获取设备日用水量 + */ + suspend fun obtainSevenDayData(devCode: String?, beginTime: String?, endTime: String?): String { + return api.obtainSevenDayData(AuthenticationHelper.token!!, devCode, beginTime, endTime) + } + + /** + * 获取设备累计用水量 + */ + suspend fun obtainTotalDayData(devCode: String?, beginTime: String?, endTime: String?): String { + return api.obtainTotalDayData(AuthenticationHelper.token!!, devCode, beginTime, endTime) + } } \ No newline at end of file diff --git a/app/src/main/java/com/casic/qd/smartwell/view/DeviceDataDetailActivity.kt b/app/src/main/java/com/casic/qd/smartwell/view/DeviceDataDetailActivity.kt index 7029d17..a8a2695 100644 --- a/app/src/main/java/com/casic/qd/smartwell/view/DeviceDataDetailActivity.kt +++ b/app/src/main/java/com/casic/qd/smartwell/view/DeviceDataDetailActivity.kt @@ -1,22 +1,109 @@ package com.casic.qd.smartwell.view +import androidx.lifecycle.ViewModelProvider import com.casic.qd.smartwell.R import com.casic.qd.smartwell.base.BaseActivity -import kotlinx.android.synthetic.main.include_base_title.* +import com.casic.qd.smartwell.extensions.convertColor +import com.casic.qd.smartwell.extensions.timestampToLastWeekTime +import com.casic.qd.smartwell.extensions.timestampToTime +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.DeviceViewModel +import com.casic.qd.smartwell.widgets.DateSelectDialog +import com.github.mikephil.charting.data.Entry +import com.jzxiang.pickerview.data.Type +import kotlinx.android.synthetic.main.activity_device_data_detail.* +import kotlinx.android.synthetic.main.activity_main.rightOptionView +import kotlinx.android.synthetic.main.activity_main.titleView class DeviceDataDetailActivity : BaseActivity() { - override fun initLayoutView(): Int = R.layout.activity_device_detail + private val kTag = "DeviceDataDetailActivity" + private lateinit var deviceCode: String + private lateinit var deviceViewModel: DeviceViewModel + + override fun initLayoutView(): Int = R.layout.activity_device_data_detail override fun setupTopBarLayout() { - titleView.text = "历史数据" + deviceCode = intent.getStringExtra(Constant.INTENT_PARAM)!! + titleView.text = String.format("${deviceCode}历史数据") } override fun initData() { - + deviceViewModel = ViewModelProvider(this).get(DeviceViewModel::class.java) } override fun initEvent() { + rightOptionView.setOnClickListener { + DateSelectDialog.Builder() + .setContext(this) + .setTitle("选择日期") + .setNegativeButton("取消") + .setPositiveButton("选好了") + .setOnDialogButtonClickListener(object : + DateSelectDialog.OnDialogButtonClickListener { + override fun onConfirmClick(startDate: String, endDate: String) { + deviceViewModel.obtainSevenDayData(deviceCode, startDate, endDate) + deviceViewModel.obtainTotalDayData(deviceCode, startDate, endDate) + } + override fun onCancelClick() { + //选择取消就默认加载近7天的数据 + val time = System.currentTimeMillis() + val startTime = time.timestampToLastWeekTime() + val endTime = time.timestampToTime() + deviceViewModel.obtainSevenDayData(deviceCode, startTime, endTime) + deviceViewModel.obtainTotalDayData(deviceCode, startTime, endTime) + } + }) + .setFragmentManager(supportFragmentManager) + .setCalendarType(Type.ALL) + .build().show() + } + + //默认加载近一周的数据 + val time = System.currentTimeMillis() + val startTime = time.timestampToLastWeekTime() + val endTime = time.timestampToTime() + deviceViewModel.obtainSevenDayData(deviceCode, startTime, endTime) + deviceViewModel.dayDataModel.observe(this, { + if (it.code == 200) { + val entryModels: MutableList = ArrayList() + val xAxisDate: MutableList = ArrayList() + val entries: ArrayList = ArrayList() + val entryModel = LineChartEntryModel() + + entryModel.lineColor = Constant.COLORS[7].convertColor() + it.data?.forEachIndexed { index, dataBean -> + val split = dataBean.time.toString().split("-") + xAxisDate.add("${split[1]}/${split[2]}") + + entries.add(Entry(index.toFloat(), dataBean.value!!.toFloat(), "日用水量")) + } + entryModel.entryList = entries + entryModels.add(entryModel) + ChartViewHelper.setLineChartData(dayWaterLineChart, xAxisDate, entryModels) + } + }) + + deviceViewModel.obtainTotalDayData(deviceCode, startTime, endTime) + deviceViewModel.totalDataModel.observe(this, { + val entryModels: MutableList = ArrayList() + val xAxisDate: MutableList = ArrayList() + val entries: ArrayList = ArrayList() + val entryModel = LineChartEntryModel() + + entryModel.lineColor = Constant.COLORS[7].convertColor() + it.data?.forEachIndexed { index, dataBean -> + val split = dataBean.uptime.toString().split(" ")[0].split("-") + xAxisDate.add("${split[1]}/${split[2]}") + + entries.add(Entry(index.toFloat(), dataBean.total!!.toFloat(), "总用水量")) + } + entryModel.entryList = entries + entryModels.add(entryModel) + ChartViewHelper.setLineChartData(totalWaterLineChart, xAxisDate, entryModels) + }) } } \ No newline at end of file diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml index 82386c9..3832c68 100644 --- a/app/src/main/AndroidManifest.xml +++ b/app/src/main/AndroidManifest.xml @@ -48,7 +48,7 @@ - + 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 216e7cc..f53e831 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,6 +15,14 @@ return dateFormat.format(calendar.time) } +fun Long.timestampToLastWeekTime(): String { + val dateFormat = SimpleDateFormat("yyyy-MM-dd HH:mm:ss", Locale.CHINA) + val calendar = Calendar.getInstance() + calendar.time = Date(this) + calendar.set(Calendar.DAY_OF_YEAR, calendar.get(Calendar.DAY_OF_YEAR) - 6) + return dateFormat.format(calendar.time) +} + fun Long.timestampToLastMonthDate(): String { val dateFormat = SimpleDateFormat("yyyy-MM-dd", Locale.CHINA) val calendar = Calendar.getInstance() diff --git a/app/src/main/java/com/casic/qd/smartwell/model/DayDataModel.kt b/app/src/main/java/com/casic/qd/smartwell/model/DayDataModel.kt new file mode 100644 index 0000000..18d1399 --- /dev/null +++ b/app/src/main/java/com/casic/qd/smartwell/model/DayDataModel.kt @@ -0,0 +1,13 @@ +package com.casic.qd.smartwell.model + +class DayDataModel { + var code = 0 + var data: List? = null + var message: String? = null + var isSuccess = false + + class DataBean { + var time: String? = null + var value: String? = null + } +} \ No newline at end of file diff --git a/app/src/main/java/com/casic/qd/smartwell/model/TotalDataModel.kt b/app/src/main/java/com/casic/qd/smartwell/model/TotalDataModel.kt new file mode 100644 index 0000000..30bf829 --- /dev/null +++ b/app/src/main/java/com/casic/qd/smartwell/model/TotalDataModel.kt @@ -0,0 +1,14 @@ +package com.casic.qd.smartwell.model + +class TotalDataModel { + var code = 0 + var data: List? = null + var message: String? = null + var isSuccess = false + + class DataBean { + var total: String? = null + var deviceState: String? = null + var uptime: String? = null + } +} \ No newline at end of file diff --git a/app/src/main/java/com/casic/qd/smartwell/utils/retrofit/RetrofitService.kt b/app/src/main/java/com/casic/qd/smartwell/utils/retrofit/RetrofitService.kt index c5bf469..0c80ee9 100644 --- a/app/src/main/java/com/casic/qd/smartwell/utils/retrofit/RetrofitService.kt +++ b/app/src/main/java/com/casic/qd/smartwell/utils/retrofit/RetrofitService.kt @@ -202,4 +202,26 @@ @Query("offset") offset: Int, @Query("limit") limit: Int ): String + + /** + * 获取设备日用水量 + * */ + @GET("/device/sevenDayData") + suspend fun obtainSevenDayData( + @Header("token") token: String, + @Query("devCode") devCode: String?, + @Query("beginTime") beginTime: String?, + @Query("endTime") endTime: String? + ): String + + /** + * 获取设备日用水量 + * */ + @GET("/device/totalData") + suspend fun obtainTotalDayData( + @Header("token") token: String, + @Query("devCode") devCode: String?, + @Query("beginTime") beginTime: String?, + @Query("endTime") endTime: String? + ): String } \ No newline at end of file diff --git a/app/src/main/java/com/casic/qd/smartwell/utils/retrofit/RetrofitServiceManager.kt b/app/src/main/java/com/casic/qd/smartwell/utils/retrofit/RetrofitServiceManager.kt index 6f728e0..a8b320f 100644 --- a/app/src/main/java/com/casic/qd/smartwell/utils/retrofit/RetrofitServiceManager.kt +++ b/app/src/main/java/com/casic/qd/smartwell/utils/retrofit/RetrofitServiceManager.kt @@ -204,4 +204,18 @@ Constant.PAGE_LIMIT ) } + + /** + * 获取设备日用水量 + */ + suspend fun obtainSevenDayData(devCode: String?, beginTime: String?, endTime: String?): String { + return api.obtainSevenDayData(AuthenticationHelper.token!!, devCode, beginTime, endTime) + } + + /** + * 获取设备累计用水量 + */ + suspend fun obtainTotalDayData(devCode: String?, beginTime: String?, endTime: String?): String { + return api.obtainTotalDayData(AuthenticationHelper.token!!, devCode, beginTime, endTime) + } } \ No newline at end of file diff --git a/app/src/main/java/com/casic/qd/smartwell/view/DeviceDataDetailActivity.kt b/app/src/main/java/com/casic/qd/smartwell/view/DeviceDataDetailActivity.kt index 7029d17..a8a2695 100644 --- a/app/src/main/java/com/casic/qd/smartwell/view/DeviceDataDetailActivity.kt +++ b/app/src/main/java/com/casic/qd/smartwell/view/DeviceDataDetailActivity.kt @@ -1,22 +1,109 @@ package com.casic.qd.smartwell.view +import androidx.lifecycle.ViewModelProvider import com.casic.qd.smartwell.R import com.casic.qd.smartwell.base.BaseActivity -import kotlinx.android.synthetic.main.include_base_title.* +import com.casic.qd.smartwell.extensions.convertColor +import com.casic.qd.smartwell.extensions.timestampToLastWeekTime +import com.casic.qd.smartwell.extensions.timestampToTime +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.DeviceViewModel +import com.casic.qd.smartwell.widgets.DateSelectDialog +import com.github.mikephil.charting.data.Entry +import com.jzxiang.pickerview.data.Type +import kotlinx.android.synthetic.main.activity_device_data_detail.* +import kotlinx.android.synthetic.main.activity_main.rightOptionView +import kotlinx.android.synthetic.main.activity_main.titleView class DeviceDataDetailActivity : BaseActivity() { - override fun initLayoutView(): Int = R.layout.activity_device_detail + private val kTag = "DeviceDataDetailActivity" + private lateinit var deviceCode: String + private lateinit var deviceViewModel: DeviceViewModel + + override fun initLayoutView(): Int = R.layout.activity_device_data_detail override fun setupTopBarLayout() { - titleView.text = "历史数据" + deviceCode = intent.getStringExtra(Constant.INTENT_PARAM)!! + titleView.text = String.format("${deviceCode}历史数据") } override fun initData() { - + deviceViewModel = ViewModelProvider(this).get(DeviceViewModel::class.java) } override fun initEvent() { + rightOptionView.setOnClickListener { + DateSelectDialog.Builder() + .setContext(this) + .setTitle("选择日期") + .setNegativeButton("取消") + .setPositiveButton("选好了") + .setOnDialogButtonClickListener(object : + DateSelectDialog.OnDialogButtonClickListener { + override fun onConfirmClick(startDate: String, endDate: String) { + deviceViewModel.obtainSevenDayData(deviceCode, startDate, endDate) + deviceViewModel.obtainTotalDayData(deviceCode, startDate, endDate) + } + override fun onCancelClick() { + //选择取消就默认加载近7天的数据 + val time = System.currentTimeMillis() + val startTime = time.timestampToLastWeekTime() + val endTime = time.timestampToTime() + deviceViewModel.obtainSevenDayData(deviceCode, startTime, endTime) + deviceViewModel.obtainTotalDayData(deviceCode, startTime, endTime) + } + }) + .setFragmentManager(supportFragmentManager) + .setCalendarType(Type.ALL) + .build().show() + } + + //默认加载近一周的数据 + val time = System.currentTimeMillis() + val startTime = time.timestampToLastWeekTime() + val endTime = time.timestampToTime() + deviceViewModel.obtainSevenDayData(deviceCode, startTime, endTime) + deviceViewModel.dayDataModel.observe(this, { + if (it.code == 200) { + val entryModels: MutableList = ArrayList() + val xAxisDate: MutableList = ArrayList() + val entries: ArrayList = ArrayList() + val entryModel = LineChartEntryModel() + + entryModel.lineColor = Constant.COLORS[7].convertColor() + it.data?.forEachIndexed { index, dataBean -> + val split = dataBean.time.toString().split("-") + xAxisDate.add("${split[1]}/${split[2]}") + + entries.add(Entry(index.toFloat(), dataBean.value!!.toFloat(), "日用水量")) + } + entryModel.entryList = entries + entryModels.add(entryModel) + ChartViewHelper.setLineChartData(dayWaterLineChart, xAxisDate, entryModels) + } + }) + + deviceViewModel.obtainTotalDayData(deviceCode, startTime, endTime) + deviceViewModel.totalDataModel.observe(this, { + val entryModels: MutableList = ArrayList() + val xAxisDate: MutableList = ArrayList() + val entries: ArrayList = ArrayList() + val entryModel = LineChartEntryModel() + + entryModel.lineColor = Constant.COLORS[7].convertColor() + it.data?.forEachIndexed { index, dataBean -> + val split = dataBean.uptime.toString().split(" ")[0].split("-") + xAxisDate.add("${split[1]}/${split[2]}") + + entries.add(Entry(index.toFloat(), dataBean.total!!.toFloat(), "总用水量")) + } + entryModel.entryList = entries + entryModels.add(entryModel) + ChartViewHelper.setLineChartData(totalWaterLineChart, xAxisDate, entryModels) + }) } } \ No newline at end of file diff --git a/app/src/main/java/com/casic/qd/smartwell/view/MainActivity.kt b/app/src/main/java/com/casic/qd/smartwell/view/MainActivity.kt index 02435a3..3f4bb3c 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 @@ -1,7 +1,6 @@ package com.casic.qd.smartwell.view import android.content.Context -import android.content.Intent import android.os.Handler import android.os.Looper import android.os.Message @@ -22,6 +21,7 @@ import com.casic.qd.smartwell.vm.WaterStatisticsViewModel import com.github.mikephil.charting.data.Entry import com.pengxh.app.multilib.widget.dialog.AlertControlDialog +import com.pengxh.app.multilib.widget.dialog.BottomActionSheet import com.youth.banner.Banner import com.youth.banner.adapter.BannerImageAdapter import com.youth.banner.holder.BannerImageHolder @@ -100,9 +100,20 @@ HomeRecycleAdapter.OnGridItemClickListener { override fun onClick(position: Int) { when (position) { - 0 -> startActivity(Intent(context, MapActivity::class.java)) - 1 -> startActivity(Intent(context, SearchRecordActivity::class.java)) - 2 -> startActivity(Intent(context, StatisticsActivity::class.java)) + 0 -> context.navigatePageTo(MapActivity::class.java) + 1 -> { + BottomActionSheet.Builder() + .setContext(context) + .setActionItemTitles(arrayOf("设备", "数据")) + .setOnActionSheetListener { index -> + when (index) { + 0 -> context.navigatePageTo(SearchDeviceActivity::class.java) + 1 -> context.navigatePageTo(SearchDataActivity::class.java) + } + }.build().show() + + } + 2 -> context.navigatePageTo(StatisticsActivity::class.java) } } }) diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml index 82386c9..3832c68 100644 --- a/app/src/main/AndroidManifest.xml +++ b/app/src/main/AndroidManifest.xml @@ -48,7 +48,7 @@ - + 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 216e7cc..f53e831 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,6 +15,14 @@ return dateFormat.format(calendar.time) } +fun Long.timestampToLastWeekTime(): String { + val dateFormat = SimpleDateFormat("yyyy-MM-dd HH:mm:ss", Locale.CHINA) + val calendar = Calendar.getInstance() + calendar.time = Date(this) + calendar.set(Calendar.DAY_OF_YEAR, calendar.get(Calendar.DAY_OF_YEAR) - 6) + return dateFormat.format(calendar.time) +} + fun Long.timestampToLastMonthDate(): String { val dateFormat = SimpleDateFormat("yyyy-MM-dd", Locale.CHINA) val calendar = Calendar.getInstance() diff --git a/app/src/main/java/com/casic/qd/smartwell/model/DayDataModel.kt b/app/src/main/java/com/casic/qd/smartwell/model/DayDataModel.kt new file mode 100644 index 0000000..18d1399 --- /dev/null +++ b/app/src/main/java/com/casic/qd/smartwell/model/DayDataModel.kt @@ -0,0 +1,13 @@ +package com.casic.qd.smartwell.model + +class DayDataModel { + var code = 0 + var data: List? = null + var message: String? = null + var isSuccess = false + + class DataBean { + var time: String? = null + var value: String? = null + } +} \ No newline at end of file diff --git a/app/src/main/java/com/casic/qd/smartwell/model/TotalDataModel.kt b/app/src/main/java/com/casic/qd/smartwell/model/TotalDataModel.kt new file mode 100644 index 0000000..30bf829 --- /dev/null +++ b/app/src/main/java/com/casic/qd/smartwell/model/TotalDataModel.kt @@ -0,0 +1,14 @@ +package com.casic.qd.smartwell.model + +class TotalDataModel { + var code = 0 + var data: List? = null + var message: String? = null + var isSuccess = false + + class DataBean { + var total: String? = null + var deviceState: String? = null + var uptime: String? = null + } +} \ No newline at end of file diff --git a/app/src/main/java/com/casic/qd/smartwell/utils/retrofit/RetrofitService.kt b/app/src/main/java/com/casic/qd/smartwell/utils/retrofit/RetrofitService.kt index c5bf469..0c80ee9 100644 --- a/app/src/main/java/com/casic/qd/smartwell/utils/retrofit/RetrofitService.kt +++ b/app/src/main/java/com/casic/qd/smartwell/utils/retrofit/RetrofitService.kt @@ -202,4 +202,26 @@ @Query("offset") offset: Int, @Query("limit") limit: Int ): String + + /** + * 获取设备日用水量 + * */ + @GET("/device/sevenDayData") + suspend fun obtainSevenDayData( + @Header("token") token: String, + @Query("devCode") devCode: String?, + @Query("beginTime") beginTime: String?, + @Query("endTime") endTime: String? + ): String + + /** + * 获取设备日用水量 + * */ + @GET("/device/totalData") + suspend fun obtainTotalDayData( + @Header("token") token: String, + @Query("devCode") devCode: String?, + @Query("beginTime") beginTime: String?, + @Query("endTime") endTime: String? + ): String } \ No newline at end of file diff --git a/app/src/main/java/com/casic/qd/smartwell/utils/retrofit/RetrofitServiceManager.kt b/app/src/main/java/com/casic/qd/smartwell/utils/retrofit/RetrofitServiceManager.kt index 6f728e0..a8b320f 100644 --- a/app/src/main/java/com/casic/qd/smartwell/utils/retrofit/RetrofitServiceManager.kt +++ b/app/src/main/java/com/casic/qd/smartwell/utils/retrofit/RetrofitServiceManager.kt @@ -204,4 +204,18 @@ Constant.PAGE_LIMIT ) } + + /** + * 获取设备日用水量 + */ + suspend fun obtainSevenDayData(devCode: String?, beginTime: String?, endTime: String?): String { + return api.obtainSevenDayData(AuthenticationHelper.token!!, devCode, beginTime, endTime) + } + + /** + * 获取设备累计用水量 + */ + suspend fun obtainTotalDayData(devCode: String?, beginTime: String?, endTime: String?): String { + return api.obtainTotalDayData(AuthenticationHelper.token!!, devCode, beginTime, endTime) + } } \ No newline at end of file diff --git a/app/src/main/java/com/casic/qd/smartwell/view/DeviceDataDetailActivity.kt b/app/src/main/java/com/casic/qd/smartwell/view/DeviceDataDetailActivity.kt index 7029d17..a8a2695 100644 --- a/app/src/main/java/com/casic/qd/smartwell/view/DeviceDataDetailActivity.kt +++ b/app/src/main/java/com/casic/qd/smartwell/view/DeviceDataDetailActivity.kt @@ -1,22 +1,109 @@ package com.casic.qd.smartwell.view +import androidx.lifecycle.ViewModelProvider import com.casic.qd.smartwell.R import com.casic.qd.smartwell.base.BaseActivity -import kotlinx.android.synthetic.main.include_base_title.* +import com.casic.qd.smartwell.extensions.convertColor +import com.casic.qd.smartwell.extensions.timestampToLastWeekTime +import com.casic.qd.smartwell.extensions.timestampToTime +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.DeviceViewModel +import com.casic.qd.smartwell.widgets.DateSelectDialog +import com.github.mikephil.charting.data.Entry +import com.jzxiang.pickerview.data.Type +import kotlinx.android.synthetic.main.activity_device_data_detail.* +import kotlinx.android.synthetic.main.activity_main.rightOptionView +import kotlinx.android.synthetic.main.activity_main.titleView class DeviceDataDetailActivity : BaseActivity() { - override fun initLayoutView(): Int = R.layout.activity_device_detail + private val kTag = "DeviceDataDetailActivity" + private lateinit var deviceCode: String + private lateinit var deviceViewModel: DeviceViewModel + + override fun initLayoutView(): Int = R.layout.activity_device_data_detail override fun setupTopBarLayout() { - titleView.text = "历史数据" + deviceCode = intent.getStringExtra(Constant.INTENT_PARAM)!! + titleView.text = String.format("${deviceCode}历史数据") } override fun initData() { - + deviceViewModel = ViewModelProvider(this).get(DeviceViewModel::class.java) } override fun initEvent() { + rightOptionView.setOnClickListener { + DateSelectDialog.Builder() + .setContext(this) + .setTitle("选择日期") + .setNegativeButton("取消") + .setPositiveButton("选好了") + .setOnDialogButtonClickListener(object : + DateSelectDialog.OnDialogButtonClickListener { + override fun onConfirmClick(startDate: String, endDate: String) { + deviceViewModel.obtainSevenDayData(deviceCode, startDate, endDate) + deviceViewModel.obtainTotalDayData(deviceCode, startDate, endDate) + } + override fun onCancelClick() { + //选择取消就默认加载近7天的数据 + val time = System.currentTimeMillis() + val startTime = time.timestampToLastWeekTime() + val endTime = time.timestampToTime() + deviceViewModel.obtainSevenDayData(deviceCode, startTime, endTime) + deviceViewModel.obtainTotalDayData(deviceCode, startTime, endTime) + } + }) + .setFragmentManager(supportFragmentManager) + .setCalendarType(Type.ALL) + .build().show() + } + + //默认加载近一周的数据 + val time = System.currentTimeMillis() + val startTime = time.timestampToLastWeekTime() + val endTime = time.timestampToTime() + deviceViewModel.obtainSevenDayData(deviceCode, startTime, endTime) + deviceViewModel.dayDataModel.observe(this, { + if (it.code == 200) { + val entryModels: MutableList = ArrayList() + val xAxisDate: MutableList = ArrayList() + val entries: ArrayList = ArrayList() + val entryModel = LineChartEntryModel() + + entryModel.lineColor = Constant.COLORS[7].convertColor() + it.data?.forEachIndexed { index, dataBean -> + val split = dataBean.time.toString().split("-") + xAxisDate.add("${split[1]}/${split[2]}") + + entries.add(Entry(index.toFloat(), dataBean.value!!.toFloat(), "日用水量")) + } + entryModel.entryList = entries + entryModels.add(entryModel) + ChartViewHelper.setLineChartData(dayWaterLineChart, xAxisDate, entryModels) + } + }) + + deviceViewModel.obtainTotalDayData(deviceCode, startTime, endTime) + deviceViewModel.totalDataModel.observe(this, { + val entryModels: MutableList = ArrayList() + val xAxisDate: MutableList = ArrayList() + val entries: ArrayList = ArrayList() + val entryModel = LineChartEntryModel() + + entryModel.lineColor = Constant.COLORS[7].convertColor() + it.data?.forEachIndexed { index, dataBean -> + val split = dataBean.uptime.toString().split(" ")[0].split("-") + xAxisDate.add("${split[1]}/${split[2]}") + + entries.add(Entry(index.toFloat(), dataBean.total!!.toFloat(), "总用水量")) + } + entryModel.entryList = entries + entryModels.add(entryModel) + ChartViewHelper.setLineChartData(totalWaterLineChart, xAxisDate, entryModels) + }) } } \ No newline at end of file diff --git a/app/src/main/java/com/casic/qd/smartwell/view/MainActivity.kt b/app/src/main/java/com/casic/qd/smartwell/view/MainActivity.kt index 02435a3..3f4bb3c 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 @@ -1,7 +1,6 @@ package com.casic.qd.smartwell.view import android.content.Context -import android.content.Intent import android.os.Handler import android.os.Looper import android.os.Message @@ -22,6 +21,7 @@ import com.casic.qd.smartwell.vm.WaterStatisticsViewModel import com.github.mikephil.charting.data.Entry import com.pengxh.app.multilib.widget.dialog.AlertControlDialog +import com.pengxh.app.multilib.widget.dialog.BottomActionSheet import com.youth.banner.Banner import com.youth.banner.adapter.BannerImageAdapter import com.youth.banner.holder.BannerImageHolder @@ -100,9 +100,20 @@ HomeRecycleAdapter.OnGridItemClickListener { override fun onClick(position: Int) { when (position) { - 0 -> startActivity(Intent(context, MapActivity::class.java)) - 1 -> startActivity(Intent(context, SearchRecordActivity::class.java)) - 2 -> startActivity(Intent(context, StatisticsActivity::class.java)) + 0 -> context.navigatePageTo(MapActivity::class.java) + 1 -> { + BottomActionSheet.Builder() + .setContext(context) + .setActionItemTitles(arrayOf("设备", "数据")) + .setOnActionSheetListener { index -> + when (index) { + 0 -> context.navigatePageTo(SearchDeviceActivity::class.java) + 1 -> context.navigatePageTo(SearchDataActivity::class.java) + } + }.build().show() + + } + 2 -> context.navigatePageTo(StatisticsActivity::class.java) } } }) diff --git a/app/src/main/java/com/casic/qd/smartwell/view/SearchAlarmActivity.kt b/app/src/main/java/com/casic/qd/smartwell/view/SearchAlarmActivity.kt index 8f54163..5285a9f 100644 --- a/app/src/main/java/com/casic/qd/smartwell/view/SearchAlarmActivity.kt +++ b/app/src/main/java/com/casic/qd/smartwell/view/SearchAlarmActivity.kt @@ -13,11 +13,6 @@ import com.jzxiang.pickerview.data.Type import com.qmuiteam.qmui.widget.dialog.QMUIBottomSheet.BottomListSheetBuilder import kotlinx.android.synthetic.main.activity_alarm_search.* -import kotlinx.android.synthetic.main.activity_alarm_search.areaView -import kotlinx.android.synthetic.main.activity_alarm_search.clearButton -import kotlinx.android.synthetic.main.activity_alarm_search.searchButton -import kotlinx.android.synthetic.main.activity_alarm_search.wellCodeView -import kotlinx.android.synthetic.main.activity_search_record.* import kotlinx.android.synthetic.main.include_base_title.* class SearchAlarmActivity : BaseActivity() { diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml index 82386c9..3832c68 100644 --- a/app/src/main/AndroidManifest.xml +++ b/app/src/main/AndroidManifest.xml @@ -48,7 +48,7 @@ - + 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 216e7cc..f53e831 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,6 +15,14 @@ return dateFormat.format(calendar.time) } +fun Long.timestampToLastWeekTime(): String { + val dateFormat = SimpleDateFormat("yyyy-MM-dd HH:mm:ss", Locale.CHINA) + val calendar = Calendar.getInstance() + calendar.time = Date(this) + calendar.set(Calendar.DAY_OF_YEAR, calendar.get(Calendar.DAY_OF_YEAR) - 6) + return dateFormat.format(calendar.time) +} + fun Long.timestampToLastMonthDate(): String { val dateFormat = SimpleDateFormat("yyyy-MM-dd", Locale.CHINA) val calendar = Calendar.getInstance() diff --git a/app/src/main/java/com/casic/qd/smartwell/model/DayDataModel.kt b/app/src/main/java/com/casic/qd/smartwell/model/DayDataModel.kt new file mode 100644 index 0000000..18d1399 --- /dev/null +++ b/app/src/main/java/com/casic/qd/smartwell/model/DayDataModel.kt @@ -0,0 +1,13 @@ +package com.casic.qd.smartwell.model + +class DayDataModel { + var code = 0 + var data: List? = null + var message: String? = null + var isSuccess = false + + class DataBean { + var time: String? = null + var value: String? = null + } +} \ No newline at end of file diff --git a/app/src/main/java/com/casic/qd/smartwell/model/TotalDataModel.kt b/app/src/main/java/com/casic/qd/smartwell/model/TotalDataModel.kt new file mode 100644 index 0000000..30bf829 --- /dev/null +++ b/app/src/main/java/com/casic/qd/smartwell/model/TotalDataModel.kt @@ -0,0 +1,14 @@ +package com.casic.qd.smartwell.model + +class TotalDataModel { + var code = 0 + var data: List? = null + var message: String? = null + var isSuccess = false + + class DataBean { + var total: String? = null + var deviceState: String? = null + var uptime: String? = null + } +} \ No newline at end of file diff --git a/app/src/main/java/com/casic/qd/smartwell/utils/retrofit/RetrofitService.kt b/app/src/main/java/com/casic/qd/smartwell/utils/retrofit/RetrofitService.kt index c5bf469..0c80ee9 100644 --- a/app/src/main/java/com/casic/qd/smartwell/utils/retrofit/RetrofitService.kt +++ b/app/src/main/java/com/casic/qd/smartwell/utils/retrofit/RetrofitService.kt @@ -202,4 +202,26 @@ @Query("offset") offset: Int, @Query("limit") limit: Int ): String + + /** + * 获取设备日用水量 + * */ + @GET("/device/sevenDayData") + suspend fun obtainSevenDayData( + @Header("token") token: String, + @Query("devCode") devCode: String?, + @Query("beginTime") beginTime: String?, + @Query("endTime") endTime: String? + ): String + + /** + * 获取设备日用水量 + * */ + @GET("/device/totalData") + suspend fun obtainTotalDayData( + @Header("token") token: String, + @Query("devCode") devCode: String?, + @Query("beginTime") beginTime: String?, + @Query("endTime") endTime: String? + ): String } \ No newline at end of file diff --git a/app/src/main/java/com/casic/qd/smartwell/utils/retrofit/RetrofitServiceManager.kt b/app/src/main/java/com/casic/qd/smartwell/utils/retrofit/RetrofitServiceManager.kt index 6f728e0..a8b320f 100644 --- a/app/src/main/java/com/casic/qd/smartwell/utils/retrofit/RetrofitServiceManager.kt +++ b/app/src/main/java/com/casic/qd/smartwell/utils/retrofit/RetrofitServiceManager.kt @@ -204,4 +204,18 @@ Constant.PAGE_LIMIT ) } + + /** + * 获取设备日用水量 + */ + suspend fun obtainSevenDayData(devCode: String?, beginTime: String?, endTime: String?): String { + return api.obtainSevenDayData(AuthenticationHelper.token!!, devCode, beginTime, endTime) + } + + /** + * 获取设备累计用水量 + */ + suspend fun obtainTotalDayData(devCode: String?, beginTime: String?, endTime: String?): String { + return api.obtainTotalDayData(AuthenticationHelper.token!!, devCode, beginTime, endTime) + } } \ No newline at end of file diff --git a/app/src/main/java/com/casic/qd/smartwell/view/DeviceDataDetailActivity.kt b/app/src/main/java/com/casic/qd/smartwell/view/DeviceDataDetailActivity.kt index 7029d17..a8a2695 100644 --- a/app/src/main/java/com/casic/qd/smartwell/view/DeviceDataDetailActivity.kt +++ b/app/src/main/java/com/casic/qd/smartwell/view/DeviceDataDetailActivity.kt @@ -1,22 +1,109 @@ package com.casic.qd.smartwell.view +import androidx.lifecycle.ViewModelProvider import com.casic.qd.smartwell.R import com.casic.qd.smartwell.base.BaseActivity -import kotlinx.android.synthetic.main.include_base_title.* +import com.casic.qd.smartwell.extensions.convertColor +import com.casic.qd.smartwell.extensions.timestampToLastWeekTime +import com.casic.qd.smartwell.extensions.timestampToTime +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.DeviceViewModel +import com.casic.qd.smartwell.widgets.DateSelectDialog +import com.github.mikephil.charting.data.Entry +import com.jzxiang.pickerview.data.Type +import kotlinx.android.synthetic.main.activity_device_data_detail.* +import kotlinx.android.synthetic.main.activity_main.rightOptionView +import kotlinx.android.synthetic.main.activity_main.titleView class DeviceDataDetailActivity : BaseActivity() { - override fun initLayoutView(): Int = R.layout.activity_device_detail + private val kTag = "DeviceDataDetailActivity" + private lateinit var deviceCode: String + private lateinit var deviceViewModel: DeviceViewModel + + override fun initLayoutView(): Int = R.layout.activity_device_data_detail override fun setupTopBarLayout() { - titleView.text = "历史数据" + deviceCode = intent.getStringExtra(Constant.INTENT_PARAM)!! + titleView.text = String.format("${deviceCode}历史数据") } override fun initData() { - + deviceViewModel = ViewModelProvider(this).get(DeviceViewModel::class.java) } override fun initEvent() { + rightOptionView.setOnClickListener { + DateSelectDialog.Builder() + .setContext(this) + .setTitle("选择日期") + .setNegativeButton("取消") + .setPositiveButton("选好了") + .setOnDialogButtonClickListener(object : + DateSelectDialog.OnDialogButtonClickListener { + override fun onConfirmClick(startDate: String, endDate: String) { + deviceViewModel.obtainSevenDayData(deviceCode, startDate, endDate) + deviceViewModel.obtainTotalDayData(deviceCode, startDate, endDate) + } + override fun onCancelClick() { + //选择取消就默认加载近7天的数据 + val time = System.currentTimeMillis() + val startTime = time.timestampToLastWeekTime() + val endTime = time.timestampToTime() + deviceViewModel.obtainSevenDayData(deviceCode, startTime, endTime) + deviceViewModel.obtainTotalDayData(deviceCode, startTime, endTime) + } + }) + .setFragmentManager(supportFragmentManager) + .setCalendarType(Type.ALL) + .build().show() + } + + //默认加载近一周的数据 + val time = System.currentTimeMillis() + val startTime = time.timestampToLastWeekTime() + val endTime = time.timestampToTime() + deviceViewModel.obtainSevenDayData(deviceCode, startTime, endTime) + deviceViewModel.dayDataModel.observe(this, { + if (it.code == 200) { + val entryModels: MutableList = ArrayList() + val xAxisDate: MutableList = ArrayList() + val entries: ArrayList = ArrayList() + val entryModel = LineChartEntryModel() + + entryModel.lineColor = Constant.COLORS[7].convertColor() + it.data?.forEachIndexed { index, dataBean -> + val split = dataBean.time.toString().split("-") + xAxisDate.add("${split[1]}/${split[2]}") + + entries.add(Entry(index.toFloat(), dataBean.value!!.toFloat(), "日用水量")) + } + entryModel.entryList = entries + entryModels.add(entryModel) + ChartViewHelper.setLineChartData(dayWaterLineChart, xAxisDate, entryModels) + } + }) + + deviceViewModel.obtainTotalDayData(deviceCode, startTime, endTime) + deviceViewModel.totalDataModel.observe(this, { + val entryModels: MutableList = ArrayList() + val xAxisDate: MutableList = ArrayList() + val entries: ArrayList = ArrayList() + val entryModel = LineChartEntryModel() + + entryModel.lineColor = Constant.COLORS[7].convertColor() + it.data?.forEachIndexed { index, dataBean -> + val split = dataBean.uptime.toString().split(" ")[0].split("-") + xAxisDate.add("${split[1]}/${split[2]}") + + entries.add(Entry(index.toFloat(), dataBean.total!!.toFloat(), "总用水量")) + } + entryModel.entryList = entries + entryModels.add(entryModel) + ChartViewHelper.setLineChartData(totalWaterLineChart, xAxisDate, entryModels) + }) } } \ No newline at end of file diff --git a/app/src/main/java/com/casic/qd/smartwell/view/MainActivity.kt b/app/src/main/java/com/casic/qd/smartwell/view/MainActivity.kt index 02435a3..3f4bb3c 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 @@ -1,7 +1,6 @@ package com.casic.qd.smartwell.view import android.content.Context -import android.content.Intent import android.os.Handler import android.os.Looper import android.os.Message @@ -22,6 +21,7 @@ import com.casic.qd.smartwell.vm.WaterStatisticsViewModel import com.github.mikephil.charting.data.Entry import com.pengxh.app.multilib.widget.dialog.AlertControlDialog +import com.pengxh.app.multilib.widget.dialog.BottomActionSheet import com.youth.banner.Banner import com.youth.banner.adapter.BannerImageAdapter import com.youth.banner.holder.BannerImageHolder @@ -100,9 +100,20 @@ HomeRecycleAdapter.OnGridItemClickListener { override fun onClick(position: Int) { when (position) { - 0 -> startActivity(Intent(context, MapActivity::class.java)) - 1 -> startActivity(Intent(context, SearchRecordActivity::class.java)) - 2 -> startActivity(Intent(context, StatisticsActivity::class.java)) + 0 -> context.navigatePageTo(MapActivity::class.java) + 1 -> { + BottomActionSheet.Builder() + .setContext(context) + .setActionItemTitles(arrayOf("设备", "数据")) + .setOnActionSheetListener { index -> + when (index) { + 0 -> context.navigatePageTo(SearchDeviceActivity::class.java) + 1 -> context.navigatePageTo(SearchDataActivity::class.java) + } + }.build().show() + + } + 2 -> context.navigatePageTo(StatisticsActivity::class.java) } } }) diff --git a/app/src/main/java/com/casic/qd/smartwell/view/SearchAlarmActivity.kt b/app/src/main/java/com/casic/qd/smartwell/view/SearchAlarmActivity.kt index 8f54163..5285a9f 100644 --- a/app/src/main/java/com/casic/qd/smartwell/view/SearchAlarmActivity.kt +++ b/app/src/main/java/com/casic/qd/smartwell/view/SearchAlarmActivity.kt @@ -13,11 +13,6 @@ import com.jzxiang.pickerview.data.Type import com.qmuiteam.qmui.widget.dialog.QMUIBottomSheet.BottomListSheetBuilder import kotlinx.android.synthetic.main.activity_alarm_search.* -import kotlinx.android.synthetic.main.activity_alarm_search.areaView -import kotlinx.android.synthetic.main.activity_alarm_search.clearButton -import kotlinx.android.synthetic.main.activity_alarm_search.searchButton -import kotlinx.android.synthetic.main.activity_alarm_search.wellCodeView -import kotlinx.android.synthetic.main.activity_search_record.* import kotlinx.android.synthetic.main.include_base_title.* class SearchAlarmActivity : BaseActivity() { diff --git a/app/src/main/java/com/casic/qd/smartwell/view/SearchDataActivity.kt b/app/src/main/java/com/casic/qd/smartwell/view/SearchDataActivity.kt new file mode 100644 index 0000000..e6a38e4 --- /dev/null +++ b/app/src/main/java/com/casic/qd/smartwell/view/SearchDataActivity.kt @@ -0,0 +1,168 @@ +package com.casic.qd.smartwell.view + +import com.casic.qd.smartwell.R +import com.casic.qd.smartwell.base.BaseActivity +import kotlinx.android.synthetic.main.include_base_title.* + +/** + * @author a203 + * @description 记录查询界面 + * @date 2022/2/17 14:33 + * @email 290677893@qq.com + */ +class SearchDataActivity : BaseActivity() { + +// private lateinit var deviceViewModel: DeviceViewModel +// private lateinit var authenticateViewModel: AuthenticateViewModel +// private lateinit var areaViewModel: AreaViewModel +// private var authenticatedType: MutableList = ArrayList() +// private var deviceTypeValue = "" +// private var deptId = "" +// private var deviceState = "" +// private var areaId = "" + + override fun initLayoutView(): Int = R.layout.activity_data_search + + override fun setupTopBarLayout() { + titleView.text = "数据查询" + } + + override fun initData() { +// val userDeviceJson = SaveKeyValues.getValue(Constant.USER_DEVICE_TYPE, "") as String +// if (userDeviceJson.isNotBlank()) { +// authenticatedType = Gson().fromJson( +// userDeviceJson, object : TypeToken>() {}.type +// ) +// } +// deviceViewModel = ViewModelProvider(this).get(DeviceViewModel::class.java) +// authenticateViewModel = ViewModelProvider(this).get(AuthenticateViewModel::class.java) +// areaViewModel = ViewModelProvider(this).get(AreaViewModel::class.java) + } + + override fun initEvent() { +// deviceTypeView.setOnClickListener { +// /** +// * 获取全部设备类型 +// * */ +// deviceViewModel.obtainDeviceType() +// } +// deviceViewModel.typeModel.observe(this, { +// if (it.code == 200) { +// val authenticatedModel: MutableList = ArrayList() +// it.data?.forEach { deviceModel -> +// if (deviceModel.value in authenticatedType) { +// authenticatedModel.add(deviceModel) +// } +// } +// val sheetBuilder = QMUIBottomSheet.BottomListSheetBuilder(this) +// sheetBuilder.setTitle("设备类型") +// authenticatedModel.forEach { deviceModel -> +// sheetBuilder.addItem(deviceModel.name) +// } +// sheetBuilder.setGravityCenter(true) +// .setOnSheetItemClickListener { dialog, _, position, tag -> +// deviceTypeView.text = tag +// this.deviceTypeValue = authenticatedModel[position].value.toString() +// +// dialog.dismiss() +// }.build().show() +// } +// }) +// +// ownerShipView.setOnClickListener { +// authenticateViewModel.obtainOwnerShip("03") +// } +// authenticateViewModel.resultModel.observe(this, { +// if (it.code == 200) { +// val ownerShipModel: MutableList = ArrayList() +// it.data?.list?.forEach { listBean -> +// ownerShipModel.add(listBean) +// } +// val sheetBuilder = QMUIBottomSheet.BottomListSheetBuilder(this) +// sheetBuilder.setTitle("权属单位") +// ownerShipModel.forEach { model -> +// sheetBuilder.addItem(model.name) +// } +// sheetBuilder.setGravityCenter(true) +// .setOnSheetItemClickListener { dialog, _, position, tag -> +// ownerShipView.text = tag +// this.deptId = ownerShipModel[position].id.toString() +// +// dialog.dismiss() +// }.build().show() +// } +// }) +// +// deviceStateView.setOnClickListener { +// QMUIBottomSheet.BottomListSheetBuilder(this) +// .setTitle("在线情况") +// .addItem("在线") +// .addItem("离线") +// .setGravityCenter(true) +// .setOnSheetItemClickListener { dialog, _, _, tag -> +// deviceStateView.text = tag +// this.deviceState = if (tag == "在线") { +// "1" +// } else { +// "0" +// } +// +// dialog.dismiss() +// }.build().show() +// } +// +// areaView.setOnClickListener { +// areaViewModel.obtainArea() +// } +// areaViewModel.areaModel.observe(this, { +// if (it.code == 200) { +// val firstLevelArea: MutableList = ArrayList() +// val secondLevelArea: MutableList = ArrayList() +// val thirdLevelArea: MutableList = ArrayList() +// it.data?.forEach { dataBean -> +// when (dataBean.level) { +// 2 -> firstLevelArea.add(dataBean) +// 3 -> secondLevelArea.add(dataBean) +// 4 -> thirdLevelArea.add(dataBean) +// } +// } +// +// // 绑定区域 +// BottomAreaSheet.Builder() +// .setContext(this) +// .setFirstAreaData(firstLevelArea) +// .setSecondAreaData(secondLevelArea) +// .setThirdAreaData(thirdLevelArea) +// .setOnActionSheetListener(object : BottomAreaSheet.OnActionSheetListener { +// override fun onAreaSelected(area: String?, id: String?) { +// areaView.text = area +// areaId = id.toString() +// } +// }).build().show() +// } +// }) +// +// searchButton.setChangeAlphaWhenPress(true) +// searchButton.setOnClickListener { +// //页面跳转,将查询参数传过去 +// navigatePageTo( +// DeviceSearchResultActivity::class.java, addAll( +// wellCodeView.text.toString().trim(), +// deviceTypeValue, +// deptId, +// deviceState, +// areaId +// ) +// ) +// } +// +// clearButton.setChangeAlphaWhenPress(true) +// clearButton.setOnClickListener { +// wellCodeView.setText("") +// deviceTypeView.text = "" +// ownerShipView.text = "" +// deviceStateView.text = "" +// areaView.text = "" +// } + } +} \ No newline at end of file diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml index 82386c9..3832c68 100644 --- a/app/src/main/AndroidManifest.xml +++ b/app/src/main/AndroidManifest.xml @@ -48,7 +48,7 @@ - + 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 216e7cc..f53e831 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,6 +15,14 @@ return dateFormat.format(calendar.time) } +fun Long.timestampToLastWeekTime(): String { + val dateFormat = SimpleDateFormat("yyyy-MM-dd HH:mm:ss", Locale.CHINA) + val calendar = Calendar.getInstance() + calendar.time = Date(this) + calendar.set(Calendar.DAY_OF_YEAR, calendar.get(Calendar.DAY_OF_YEAR) - 6) + return dateFormat.format(calendar.time) +} + fun Long.timestampToLastMonthDate(): String { val dateFormat = SimpleDateFormat("yyyy-MM-dd", Locale.CHINA) val calendar = Calendar.getInstance() diff --git a/app/src/main/java/com/casic/qd/smartwell/model/DayDataModel.kt b/app/src/main/java/com/casic/qd/smartwell/model/DayDataModel.kt new file mode 100644 index 0000000..18d1399 --- /dev/null +++ b/app/src/main/java/com/casic/qd/smartwell/model/DayDataModel.kt @@ -0,0 +1,13 @@ +package com.casic.qd.smartwell.model + +class DayDataModel { + var code = 0 + var data: List? = null + var message: String? = null + var isSuccess = false + + class DataBean { + var time: String? = null + var value: String? = null + } +} \ No newline at end of file diff --git a/app/src/main/java/com/casic/qd/smartwell/model/TotalDataModel.kt b/app/src/main/java/com/casic/qd/smartwell/model/TotalDataModel.kt new file mode 100644 index 0000000..30bf829 --- /dev/null +++ b/app/src/main/java/com/casic/qd/smartwell/model/TotalDataModel.kt @@ -0,0 +1,14 @@ +package com.casic.qd.smartwell.model + +class TotalDataModel { + var code = 0 + var data: List? = null + var message: String? = null + var isSuccess = false + + class DataBean { + var total: String? = null + var deviceState: String? = null + var uptime: String? = null + } +} \ No newline at end of file diff --git a/app/src/main/java/com/casic/qd/smartwell/utils/retrofit/RetrofitService.kt b/app/src/main/java/com/casic/qd/smartwell/utils/retrofit/RetrofitService.kt index c5bf469..0c80ee9 100644 --- a/app/src/main/java/com/casic/qd/smartwell/utils/retrofit/RetrofitService.kt +++ b/app/src/main/java/com/casic/qd/smartwell/utils/retrofit/RetrofitService.kt @@ -202,4 +202,26 @@ @Query("offset") offset: Int, @Query("limit") limit: Int ): String + + /** + * 获取设备日用水量 + * */ + @GET("/device/sevenDayData") + suspend fun obtainSevenDayData( + @Header("token") token: String, + @Query("devCode") devCode: String?, + @Query("beginTime") beginTime: String?, + @Query("endTime") endTime: String? + ): String + + /** + * 获取设备日用水量 + * */ + @GET("/device/totalData") + suspend fun obtainTotalDayData( + @Header("token") token: String, + @Query("devCode") devCode: String?, + @Query("beginTime") beginTime: String?, + @Query("endTime") endTime: String? + ): String } \ No newline at end of file diff --git a/app/src/main/java/com/casic/qd/smartwell/utils/retrofit/RetrofitServiceManager.kt b/app/src/main/java/com/casic/qd/smartwell/utils/retrofit/RetrofitServiceManager.kt index 6f728e0..a8b320f 100644 --- a/app/src/main/java/com/casic/qd/smartwell/utils/retrofit/RetrofitServiceManager.kt +++ b/app/src/main/java/com/casic/qd/smartwell/utils/retrofit/RetrofitServiceManager.kt @@ -204,4 +204,18 @@ Constant.PAGE_LIMIT ) } + + /** + * 获取设备日用水量 + */ + suspend fun obtainSevenDayData(devCode: String?, beginTime: String?, endTime: String?): String { + return api.obtainSevenDayData(AuthenticationHelper.token!!, devCode, beginTime, endTime) + } + + /** + * 获取设备累计用水量 + */ + suspend fun obtainTotalDayData(devCode: String?, beginTime: String?, endTime: String?): String { + return api.obtainTotalDayData(AuthenticationHelper.token!!, devCode, beginTime, endTime) + } } \ No newline at end of file diff --git a/app/src/main/java/com/casic/qd/smartwell/view/DeviceDataDetailActivity.kt b/app/src/main/java/com/casic/qd/smartwell/view/DeviceDataDetailActivity.kt index 7029d17..a8a2695 100644 --- a/app/src/main/java/com/casic/qd/smartwell/view/DeviceDataDetailActivity.kt +++ b/app/src/main/java/com/casic/qd/smartwell/view/DeviceDataDetailActivity.kt @@ -1,22 +1,109 @@ package com.casic.qd.smartwell.view +import androidx.lifecycle.ViewModelProvider import com.casic.qd.smartwell.R import com.casic.qd.smartwell.base.BaseActivity -import kotlinx.android.synthetic.main.include_base_title.* +import com.casic.qd.smartwell.extensions.convertColor +import com.casic.qd.smartwell.extensions.timestampToLastWeekTime +import com.casic.qd.smartwell.extensions.timestampToTime +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.DeviceViewModel +import com.casic.qd.smartwell.widgets.DateSelectDialog +import com.github.mikephil.charting.data.Entry +import com.jzxiang.pickerview.data.Type +import kotlinx.android.synthetic.main.activity_device_data_detail.* +import kotlinx.android.synthetic.main.activity_main.rightOptionView +import kotlinx.android.synthetic.main.activity_main.titleView class DeviceDataDetailActivity : BaseActivity() { - override fun initLayoutView(): Int = R.layout.activity_device_detail + private val kTag = "DeviceDataDetailActivity" + private lateinit var deviceCode: String + private lateinit var deviceViewModel: DeviceViewModel + + override fun initLayoutView(): Int = R.layout.activity_device_data_detail override fun setupTopBarLayout() { - titleView.text = "历史数据" + deviceCode = intent.getStringExtra(Constant.INTENT_PARAM)!! + titleView.text = String.format("${deviceCode}历史数据") } override fun initData() { - + deviceViewModel = ViewModelProvider(this).get(DeviceViewModel::class.java) } override fun initEvent() { + rightOptionView.setOnClickListener { + DateSelectDialog.Builder() + .setContext(this) + .setTitle("选择日期") + .setNegativeButton("取消") + .setPositiveButton("选好了") + .setOnDialogButtonClickListener(object : + DateSelectDialog.OnDialogButtonClickListener { + override fun onConfirmClick(startDate: String, endDate: String) { + deviceViewModel.obtainSevenDayData(deviceCode, startDate, endDate) + deviceViewModel.obtainTotalDayData(deviceCode, startDate, endDate) + } + override fun onCancelClick() { + //选择取消就默认加载近7天的数据 + val time = System.currentTimeMillis() + val startTime = time.timestampToLastWeekTime() + val endTime = time.timestampToTime() + deviceViewModel.obtainSevenDayData(deviceCode, startTime, endTime) + deviceViewModel.obtainTotalDayData(deviceCode, startTime, endTime) + } + }) + .setFragmentManager(supportFragmentManager) + .setCalendarType(Type.ALL) + .build().show() + } + + //默认加载近一周的数据 + val time = System.currentTimeMillis() + val startTime = time.timestampToLastWeekTime() + val endTime = time.timestampToTime() + deviceViewModel.obtainSevenDayData(deviceCode, startTime, endTime) + deviceViewModel.dayDataModel.observe(this, { + if (it.code == 200) { + val entryModels: MutableList = ArrayList() + val xAxisDate: MutableList = ArrayList() + val entries: ArrayList = ArrayList() + val entryModel = LineChartEntryModel() + + entryModel.lineColor = Constant.COLORS[7].convertColor() + it.data?.forEachIndexed { index, dataBean -> + val split = dataBean.time.toString().split("-") + xAxisDate.add("${split[1]}/${split[2]}") + + entries.add(Entry(index.toFloat(), dataBean.value!!.toFloat(), "日用水量")) + } + entryModel.entryList = entries + entryModels.add(entryModel) + ChartViewHelper.setLineChartData(dayWaterLineChart, xAxisDate, entryModels) + } + }) + + deviceViewModel.obtainTotalDayData(deviceCode, startTime, endTime) + deviceViewModel.totalDataModel.observe(this, { + val entryModels: MutableList = ArrayList() + val xAxisDate: MutableList = ArrayList() + val entries: ArrayList = ArrayList() + val entryModel = LineChartEntryModel() + + entryModel.lineColor = Constant.COLORS[7].convertColor() + it.data?.forEachIndexed { index, dataBean -> + val split = dataBean.uptime.toString().split(" ")[0].split("-") + xAxisDate.add("${split[1]}/${split[2]}") + + entries.add(Entry(index.toFloat(), dataBean.total!!.toFloat(), "总用水量")) + } + entryModel.entryList = entries + entryModels.add(entryModel) + ChartViewHelper.setLineChartData(totalWaterLineChart, xAxisDate, entryModels) + }) } } \ No newline at end of file diff --git a/app/src/main/java/com/casic/qd/smartwell/view/MainActivity.kt b/app/src/main/java/com/casic/qd/smartwell/view/MainActivity.kt index 02435a3..3f4bb3c 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 @@ -1,7 +1,6 @@ package com.casic.qd.smartwell.view import android.content.Context -import android.content.Intent import android.os.Handler import android.os.Looper import android.os.Message @@ -22,6 +21,7 @@ import com.casic.qd.smartwell.vm.WaterStatisticsViewModel import com.github.mikephil.charting.data.Entry import com.pengxh.app.multilib.widget.dialog.AlertControlDialog +import com.pengxh.app.multilib.widget.dialog.BottomActionSheet import com.youth.banner.Banner import com.youth.banner.adapter.BannerImageAdapter import com.youth.banner.holder.BannerImageHolder @@ -100,9 +100,20 @@ HomeRecycleAdapter.OnGridItemClickListener { override fun onClick(position: Int) { when (position) { - 0 -> startActivity(Intent(context, MapActivity::class.java)) - 1 -> startActivity(Intent(context, SearchRecordActivity::class.java)) - 2 -> startActivity(Intent(context, StatisticsActivity::class.java)) + 0 -> context.navigatePageTo(MapActivity::class.java) + 1 -> { + BottomActionSheet.Builder() + .setContext(context) + .setActionItemTitles(arrayOf("设备", "数据")) + .setOnActionSheetListener { index -> + when (index) { + 0 -> context.navigatePageTo(SearchDeviceActivity::class.java) + 1 -> context.navigatePageTo(SearchDataActivity::class.java) + } + }.build().show() + + } + 2 -> context.navigatePageTo(StatisticsActivity::class.java) } } }) diff --git a/app/src/main/java/com/casic/qd/smartwell/view/SearchAlarmActivity.kt b/app/src/main/java/com/casic/qd/smartwell/view/SearchAlarmActivity.kt index 8f54163..5285a9f 100644 --- a/app/src/main/java/com/casic/qd/smartwell/view/SearchAlarmActivity.kt +++ b/app/src/main/java/com/casic/qd/smartwell/view/SearchAlarmActivity.kt @@ -13,11 +13,6 @@ import com.jzxiang.pickerview.data.Type import com.qmuiteam.qmui.widget.dialog.QMUIBottomSheet.BottomListSheetBuilder import kotlinx.android.synthetic.main.activity_alarm_search.* -import kotlinx.android.synthetic.main.activity_alarm_search.areaView -import kotlinx.android.synthetic.main.activity_alarm_search.clearButton -import kotlinx.android.synthetic.main.activity_alarm_search.searchButton -import kotlinx.android.synthetic.main.activity_alarm_search.wellCodeView -import kotlinx.android.synthetic.main.activity_search_record.* import kotlinx.android.synthetic.main.include_base_title.* class SearchAlarmActivity : BaseActivity() { diff --git a/app/src/main/java/com/casic/qd/smartwell/view/SearchDataActivity.kt b/app/src/main/java/com/casic/qd/smartwell/view/SearchDataActivity.kt new file mode 100644 index 0000000..e6a38e4 --- /dev/null +++ b/app/src/main/java/com/casic/qd/smartwell/view/SearchDataActivity.kt @@ -0,0 +1,168 @@ +package com.casic.qd.smartwell.view + +import com.casic.qd.smartwell.R +import com.casic.qd.smartwell.base.BaseActivity +import kotlinx.android.synthetic.main.include_base_title.* + +/** + * @author a203 + * @description 记录查询界面 + * @date 2022/2/17 14:33 + * @email 290677893@qq.com + */ +class SearchDataActivity : BaseActivity() { + +// private lateinit var deviceViewModel: DeviceViewModel +// private lateinit var authenticateViewModel: AuthenticateViewModel +// private lateinit var areaViewModel: AreaViewModel +// private var authenticatedType: MutableList = ArrayList() +// private var deviceTypeValue = "" +// private var deptId = "" +// private var deviceState = "" +// private var areaId = "" + + override fun initLayoutView(): Int = R.layout.activity_data_search + + override fun setupTopBarLayout() { + titleView.text = "数据查询" + } + + override fun initData() { +// val userDeviceJson = SaveKeyValues.getValue(Constant.USER_DEVICE_TYPE, "") as String +// if (userDeviceJson.isNotBlank()) { +// authenticatedType = Gson().fromJson( +// userDeviceJson, object : TypeToken>() {}.type +// ) +// } +// deviceViewModel = ViewModelProvider(this).get(DeviceViewModel::class.java) +// authenticateViewModel = ViewModelProvider(this).get(AuthenticateViewModel::class.java) +// areaViewModel = ViewModelProvider(this).get(AreaViewModel::class.java) + } + + override fun initEvent() { +// deviceTypeView.setOnClickListener { +// /** +// * 获取全部设备类型 +// * */ +// deviceViewModel.obtainDeviceType() +// } +// deviceViewModel.typeModel.observe(this, { +// if (it.code == 200) { +// val authenticatedModel: MutableList = ArrayList() +// it.data?.forEach { deviceModel -> +// if (deviceModel.value in authenticatedType) { +// authenticatedModel.add(deviceModel) +// } +// } +// val sheetBuilder = QMUIBottomSheet.BottomListSheetBuilder(this) +// sheetBuilder.setTitle("设备类型") +// authenticatedModel.forEach { deviceModel -> +// sheetBuilder.addItem(deviceModel.name) +// } +// sheetBuilder.setGravityCenter(true) +// .setOnSheetItemClickListener { dialog, _, position, tag -> +// deviceTypeView.text = tag +// this.deviceTypeValue = authenticatedModel[position].value.toString() +// +// dialog.dismiss() +// }.build().show() +// } +// }) +// +// ownerShipView.setOnClickListener { +// authenticateViewModel.obtainOwnerShip("03") +// } +// authenticateViewModel.resultModel.observe(this, { +// if (it.code == 200) { +// val ownerShipModel: MutableList = ArrayList() +// it.data?.list?.forEach { listBean -> +// ownerShipModel.add(listBean) +// } +// val sheetBuilder = QMUIBottomSheet.BottomListSheetBuilder(this) +// sheetBuilder.setTitle("权属单位") +// ownerShipModel.forEach { model -> +// sheetBuilder.addItem(model.name) +// } +// sheetBuilder.setGravityCenter(true) +// .setOnSheetItemClickListener { dialog, _, position, tag -> +// ownerShipView.text = tag +// this.deptId = ownerShipModel[position].id.toString() +// +// dialog.dismiss() +// }.build().show() +// } +// }) +// +// deviceStateView.setOnClickListener { +// QMUIBottomSheet.BottomListSheetBuilder(this) +// .setTitle("在线情况") +// .addItem("在线") +// .addItem("离线") +// .setGravityCenter(true) +// .setOnSheetItemClickListener { dialog, _, _, tag -> +// deviceStateView.text = tag +// this.deviceState = if (tag == "在线") { +// "1" +// } else { +// "0" +// } +// +// dialog.dismiss() +// }.build().show() +// } +// +// areaView.setOnClickListener { +// areaViewModel.obtainArea() +// } +// areaViewModel.areaModel.observe(this, { +// if (it.code == 200) { +// val firstLevelArea: MutableList = ArrayList() +// val secondLevelArea: MutableList = ArrayList() +// val thirdLevelArea: MutableList = ArrayList() +// it.data?.forEach { dataBean -> +// when (dataBean.level) { +// 2 -> firstLevelArea.add(dataBean) +// 3 -> secondLevelArea.add(dataBean) +// 4 -> thirdLevelArea.add(dataBean) +// } +// } +// +// // 绑定区域 +// BottomAreaSheet.Builder() +// .setContext(this) +// .setFirstAreaData(firstLevelArea) +// .setSecondAreaData(secondLevelArea) +// .setThirdAreaData(thirdLevelArea) +// .setOnActionSheetListener(object : BottomAreaSheet.OnActionSheetListener { +// override fun onAreaSelected(area: String?, id: String?) { +// areaView.text = area +// areaId = id.toString() +// } +// }).build().show() +// } +// }) +// +// searchButton.setChangeAlphaWhenPress(true) +// searchButton.setOnClickListener { +// //页面跳转,将查询参数传过去 +// navigatePageTo( +// DeviceSearchResultActivity::class.java, addAll( +// wellCodeView.text.toString().trim(), +// deviceTypeValue, +// deptId, +// deviceState, +// areaId +// ) +// ) +// } +// +// clearButton.setChangeAlphaWhenPress(true) +// clearButton.setOnClickListener { +// wellCodeView.setText("") +// deviceTypeView.text = "" +// ownerShipView.text = "" +// deviceStateView.text = "" +// areaView.text = "" +// } + } +} \ No newline at end of file diff --git a/app/src/main/java/com/casic/qd/smartwell/view/SearchDeviceActivity.kt b/app/src/main/java/com/casic/qd/smartwell/view/SearchDeviceActivity.kt new file mode 100644 index 0000000..cf0c05f --- /dev/null +++ b/app/src/main/java/com/casic/qd/smartwell/view/SearchDeviceActivity.kt @@ -0,0 +1,184 @@ +package com.casic.qd.smartwell.view + +import androidx.lifecycle.ViewModelProvider +import com.casic.qd.smartwell.R +import com.casic.qd.smartwell.base.BaseActivity +import com.casic.qd.smartwell.extensions.addAll +import com.casic.qd.smartwell.extensions.navigatePageTo +import com.casic.qd.smartwell.model.AreaModel +import com.casic.qd.smartwell.model.DeviceTypeModel +import com.casic.qd.smartwell.model.OwnerShipModel +import com.casic.qd.smartwell.utils.Constant +import com.casic.qd.smartwell.utils.SaveKeyValues +import com.casic.qd.smartwell.vm.AreaViewModel +import com.casic.qd.smartwell.vm.AuthenticateViewModel +import com.casic.qd.smartwell.vm.DeviceViewModel +import com.casic.qd.smartwell.widgets.BottomAreaSheet +import com.google.gson.Gson +import com.google.gson.reflect.TypeToken +import com.qmuiteam.qmui.widget.dialog.QMUIBottomSheet +import kotlinx.android.synthetic.main.activity_device_search.* +import kotlinx.android.synthetic.main.include_base_title.* + +/** + * @author a203 + * @description 记录查询界面 + * @date 2022/2/17 14:33 + * @email 290677893@qq.com + */ +class SearchDeviceActivity : BaseActivity() { + + private lateinit var deviceViewModel: DeviceViewModel + private lateinit var authenticateViewModel: AuthenticateViewModel + private lateinit var areaViewModel: AreaViewModel + private var authenticatedType: MutableList = ArrayList() + private var deviceTypeValue = "" + private var deptId = "" + private var deviceState = "" + private var areaId = "" + + override fun initLayoutView(): Int = R.layout.activity_device_search + + override fun setupTopBarLayout() { + titleView.text = "设备查询" + } + + override fun initData() { + val userDeviceJson = SaveKeyValues.getValue(Constant.USER_DEVICE_TYPE, "") as String + if (userDeviceJson.isNotBlank()) { + authenticatedType = Gson().fromJson( + userDeviceJson, object : TypeToken>() {}.type + ) + } + deviceViewModel = ViewModelProvider(this).get(DeviceViewModel::class.java) + authenticateViewModel = ViewModelProvider(this).get(AuthenticateViewModel::class.java) + areaViewModel = ViewModelProvider(this).get(AreaViewModel::class.java) + } + + override fun initEvent() { + deviceTypeView.setOnClickListener { + /** + * 获取全部设备类型 + * */ + deviceViewModel.obtainDeviceType() + } + deviceViewModel.typeModel.observe(this, { + if (it.code == 200) { + val authenticatedModel: MutableList = ArrayList() + it.data?.forEach { deviceModel -> + if (deviceModel.value in authenticatedType) { + authenticatedModel.add(deviceModel) + } + } + val sheetBuilder = QMUIBottomSheet.BottomListSheetBuilder(this) + sheetBuilder.setTitle("设备类型") + authenticatedModel.forEach { deviceModel -> + sheetBuilder.addItem(deviceModel.name) + } + sheetBuilder.setGravityCenter(true) + .setOnSheetItemClickListener { dialog, _, position, tag -> + deviceTypeView.text = tag + this.deviceTypeValue = authenticatedModel[position].value.toString() + + dialog.dismiss() + }.build().show() + } + }) + + ownerShipView.setOnClickListener { + authenticateViewModel.obtainOwnerShip("03") + } + authenticateViewModel.resultModel.observe(this, { + if (it.code == 200) { + val ownerShipModel: MutableList = ArrayList() + it.data?.list?.forEach { listBean -> + ownerShipModel.add(listBean) + } + val sheetBuilder = QMUIBottomSheet.BottomListSheetBuilder(this) + sheetBuilder.setTitle("权属单位") + ownerShipModel.forEach { model -> + sheetBuilder.addItem(model.name) + } + sheetBuilder.setGravityCenter(true) + .setOnSheetItemClickListener { dialog, _, position, tag -> + ownerShipView.text = tag + this.deptId = ownerShipModel[position].id.toString() + + dialog.dismiss() + }.build().show() + } + }) + + deviceStateView.setOnClickListener { + QMUIBottomSheet.BottomListSheetBuilder(this) + .setTitle("在线情况") + .addItem("在线") + .addItem("离线") + .setGravityCenter(true) + .setOnSheetItemClickListener { dialog, _, _, tag -> + deviceStateView.text = tag + this.deviceState = if (tag == "在线") { + "1" + } else { + "0" + } + + dialog.dismiss() + }.build().show() + } + + areaView.setOnClickListener { + areaViewModel.obtainArea() + } + areaViewModel.areaModel.observe(this, { + if (it.code == 200) { + val firstLevelArea: MutableList = ArrayList() + val secondLevelArea: MutableList = ArrayList() + val thirdLevelArea: MutableList = ArrayList() + it.data?.forEach { dataBean -> + when (dataBean.level) { + 2 -> firstLevelArea.add(dataBean) + 3 -> secondLevelArea.add(dataBean) + 4 -> thirdLevelArea.add(dataBean) + } + } + + // 绑定区域 + BottomAreaSheet.Builder() + .setContext(this) + .setFirstAreaData(firstLevelArea) + .setSecondAreaData(secondLevelArea) + .setThirdAreaData(thirdLevelArea) + .setOnActionSheetListener(object : BottomAreaSheet.OnActionSheetListener { + override fun onAreaSelected(area: String?, id: String?) { + areaView.text = area + areaId = id.toString() + } + }).build().show() + } + }) + + searchButton.setChangeAlphaWhenPress(true) + searchButton.setOnClickListener { + //页面跳转,将查询参数传过去 + navigatePageTo( + DeviceSearchResultActivity::class.java, addAll( + wellCodeView.text.toString().trim(), + deviceTypeValue, + deptId, + deviceState, + areaId + ) + ) + } + + clearButton.setChangeAlphaWhenPress(true) + clearButton.setOnClickListener { + wellCodeView.setText("") + deviceTypeView.text = "" + ownerShipView.text = "" + deviceStateView.text = "" + areaView.text = "" + } + } +} \ No newline at end of file diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml index 82386c9..3832c68 100644 --- a/app/src/main/AndroidManifest.xml +++ b/app/src/main/AndroidManifest.xml @@ -48,7 +48,7 @@ - + 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 216e7cc..f53e831 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,6 +15,14 @@ return dateFormat.format(calendar.time) } +fun Long.timestampToLastWeekTime(): String { + val dateFormat = SimpleDateFormat("yyyy-MM-dd HH:mm:ss", Locale.CHINA) + val calendar = Calendar.getInstance() + calendar.time = Date(this) + calendar.set(Calendar.DAY_OF_YEAR, calendar.get(Calendar.DAY_OF_YEAR) - 6) + return dateFormat.format(calendar.time) +} + fun Long.timestampToLastMonthDate(): String { val dateFormat = SimpleDateFormat("yyyy-MM-dd", Locale.CHINA) val calendar = Calendar.getInstance() diff --git a/app/src/main/java/com/casic/qd/smartwell/model/DayDataModel.kt b/app/src/main/java/com/casic/qd/smartwell/model/DayDataModel.kt new file mode 100644 index 0000000..18d1399 --- /dev/null +++ b/app/src/main/java/com/casic/qd/smartwell/model/DayDataModel.kt @@ -0,0 +1,13 @@ +package com.casic.qd.smartwell.model + +class DayDataModel { + var code = 0 + var data: List? = null + var message: String? = null + var isSuccess = false + + class DataBean { + var time: String? = null + var value: String? = null + } +} \ No newline at end of file diff --git a/app/src/main/java/com/casic/qd/smartwell/model/TotalDataModel.kt b/app/src/main/java/com/casic/qd/smartwell/model/TotalDataModel.kt new file mode 100644 index 0000000..30bf829 --- /dev/null +++ b/app/src/main/java/com/casic/qd/smartwell/model/TotalDataModel.kt @@ -0,0 +1,14 @@ +package com.casic.qd.smartwell.model + +class TotalDataModel { + var code = 0 + var data: List? = null + var message: String? = null + var isSuccess = false + + class DataBean { + var total: String? = null + var deviceState: String? = null + var uptime: String? = null + } +} \ No newline at end of file diff --git a/app/src/main/java/com/casic/qd/smartwell/utils/retrofit/RetrofitService.kt b/app/src/main/java/com/casic/qd/smartwell/utils/retrofit/RetrofitService.kt index c5bf469..0c80ee9 100644 --- a/app/src/main/java/com/casic/qd/smartwell/utils/retrofit/RetrofitService.kt +++ b/app/src/main/java/com/casic/qd/smartwell/utils/retrofit/RetrofitService.kt @@ -202,4 +202,26 @@ @Query("offset") offset: Int, @Query("limit") limit: Int ): String + + /** + * 获取设备日用水量 + * */ + @GET("/device/sevenDayData") + suspend fun obtainSevenDayData( + @Header("token") token: String, + @Query("devCode") devCode: String?, + @Query("beginTime") beginTime: String?, + @Query("endTime") endTime: String? + ): String + + /** + * 获取设备日用水量 + * */ + @GET("/device/totalData") + suspend fun obtainTotalDayData( + @Header("token") token: String, + @Query("devCode") devCode: String?, + @Query("beginTime") beginTime: String?, + @Query("endTime") endTime: String? + ): String } \ No newline at end of file diff --git a/app/src/main/java/com/casic/qd/smartwell/utils/retrofit/RetrofitServiceManager.kt b/app/src/main/java/com/casic/qd/smartwell/utils/retrofit/RetrofitServiceManager.kt index 6f728e0..a8b320f 100644 --- a/app/src/main/java/com/casic/qd/smartwell/utils/retrofit/RetrofitServiceManager.kt +++ b/app/src/main/java/com/casic/qd/smartwell/utils/retrofit/RetrofitServiceManager.kt @@ -204,4 +204,18 @@ Constant.PAGE_LIMIT ) } + + /** + * 获取设备日用水量 + */ + suspend fun obtainSevenDayData(devCode: String?, beginTime: String?, endTime: String?): String { + return api.obtainSevenDayData(AuthenticationHelper.token!!, devCode, beginTime, endTime) + } + + /** + * 获取设备累计用水量 + */ + suspend fun obtainTotalDayData(devCode: String?, beginTime: String?, endTime: String?): String { + return api.obtainTotalDayData(AuthenticationHelper.token!!, devCode, beginTime, endTime) + } } \ No newline at end of file diff --git a/app/src/main/java/com/casic/qd/smartwell/view/DeviceDataDetailActivity.kt b/app/src/main/java/com/casic/qd/smartwell/view/DeviceDataDetailActivity.kt index 7029d17..a8a2695 100644 --- a/app/src/main/java/com/casic/qd/smartwell/view/DeviceDataDetailActivity.kt +++ b/app/src/main/java/com/casic/qd/smartwell/view/DeviceDataDetailActivity.kt @@ -1,22 +1,109 @@ package com.casic.qd.smartwell.view +import androidx.lifecycle.ViewModelProvider import com.casic.qd.smartwell.R import com.casic.qd.smartwell.base.BaseActivity -import kotlinx.android.synthetic.main.include_base_title.* +import com.casic.qd.smartwell.extensions.convertColor +import com.casic.qd.smartwell.extensions.timestampToLastWeekTime +import com.casic.qd.smartwell.extensions.timestampToTime +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.DeviceViewModel +import com.casic.qd.smartwell.widgets.DateSelectDialog +import com.github.mikephil.charting.data.Entry +import com.jzxiang.pickerview.data.Type +import kotlinx.android.synthetic.main.activity_device_data_detail.* +import kotlinx.android.synthetic.main.activity_main.rightOptionView +import kotlinx.android.synthetic.main.activity_main.titleView class DeviceDataDetailActivity : BaseActivity() { - override fun initLayoutView(): Int = R.layout.activity_device_detail + private val kTag = "DeviceDataDetailActivity" + private lateinit var deviceCode: String + private lateinit var deviceViewModel: DeviceViewModel + + override fun initLayoutView(): Int = R.layout.activity_device_data_detail override fun setupTopBarLayout() { - titleView.text = "历史数据" + deviceCode = intent.getStringExtra(Constant.INTENT_PARAM)!! + titleView.text = String.format("${deviceCode}历史数据") } override fun initData() { - + deviceViewModel = ViewModelProvider(this).get(DeviceViewModel::class.java) } override fun initEvent() { + rightOptionView.setOnClickListener { + DateSelectDialog.Builder() + .setContext(this) + .setTitle("选择日期") + .setNegativeButton("取消") + .setPositiveButton("选好了") + .setOnDialogButtonClickListener(object : + DateSelectDialog.OnDialogButtonClickListener { + override fun onConfirmClick(startDate: String, endDate: String) { + deviceViewModel.obtainSevenDayData(deviceCode, startDate, endDate) + deviceViewModel.obtainTotalDayData(deviceCode, startDate, endDate) + } + override fun onCancelClick() { + //选择取消就默认加载近7天的数据 + val time = System.currentTimeMillis() + val startTime = time.timestampToLastWeekTime() + val endTime = time.timestampToTime() + deviceViewModel.obtainSevenDayData(deviceCode, startTime, endTime) + deviceViewModel.obtainTotalDayData(deviceCode, startTime, endTime) + } + }) + .setFragmentManager(supportFragmentManager) + .setCalendarType(Type.ALL) + .build().show() + } + + //默认加载近一周的数据 + val time = System.currentTimeMillis() + val startTime = time.timestampToLastWeekTime() + val endTime = time.timestampToTime() + deviceViewModel.obtainSevenDayData(deviceCode, startTime, endTime) + deviceViewModel.dayDataModel.observe(this, { + if (it.code == 200) { + val entryModels: MutableList = ArrayList() + val xAxisDate: MutableList = ArrayList() + val entries: ArrayList = ArrayList() + val entryModel = LineChartEntryModel() + + entryModel.lineColor = Constant.COLORS[7].convertColor() + it.data?.forEachIndexed { index, dataBean -> + val split = dataBean.time.toString().split("-") + xAxisDate.add("${split[1]}/${split[2]}") + + entries.add(Entry(index.toFloat(), dataBean.value!!.toFloat(), "日用水量")) + } + entryModel.entryList = entries + entryModels.add(entryModel) + ChartViewHelper.setLineChartData(dayWaterLineChart, xAxisDate, entryModels) + } + }) + + deviceViewModel.obtainTotalDayData(deviceCode, startTime, endTime) + deviceViewModel.totalDataModel.observe(this, { + val entryModels: MutableList = ArrayList() + val xAxisDate: MutableList = ArrayList() + val entries: ArrayList = ArrayList() + val entryModel = LineChartEntryModel() + + entryModel.lineColor = Constant.COLORS[7].convertColor() + it.data?.forEachIndexed { index, dataBean -> + val split = dataBean.uptime.toString().split(" ")[0].split("-") + xAxisDate.add("${split[1]}/${split[2]}") + + entries.add(Entry(index.toFloat(), dataBean.total!!.toFloat(), "总用水量")) + } + entryModel.entryList = entries + entryModels.add(entryModel) + ChartViewHelper.setLineChartData(totalWaterLineChart, xAxisDate, entryModels) + }) } } \ No newline at end of file diff --git a/app/src/main/java/com/casic/qd/smartwell/view/MainActivity.kt b/app/src/main/java/com/casic/qd/smartwell/view/MainActivity.kt index 02435a3..3f4bb3c 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 @@ -1,7 +1,6 @@ package com.casic.qd.smartwell.view import android.content.Context -import android.content.Intent import android.os.Handler import android.os.Looper import android.os.Message @@ -22,6 +21,7 @@ import com.casic.qd.smartwell.vm.WaterStatisticsViewModel import com.github.mikephil.charting.data.Entry import com.pengxh.app.multilib.widget.dialog.AlertControlDialog +import com.pengxh.app.multilib.widget.dialog.BottomActionSheet import com.youth.banner.Banner import com.youth.banner.adapter.BannerImageAdapter import com.youth.banner.holder.BannerImageHolder @@ -100,9 +100,20 @@ HomeRecycleAdapter.OnGridItemClickListener { override fun onClick(position: Int) { when (position) { - 0 -> startActivity(Intent(context, MapActivity::class.java)) - 1 -> startActivity(Intent(context, SearchRecordActivity::class.java)) - 2 -> startActivity(Intent(context, StatisticsActivity::class.java)) + 0 -> context.navigatePageTo(MapActivity::class.java) + 1 -> { + BottomActionSheet.Builder() + .setContext(context) + .setActionItemTitles(arrayOf("设备", "数据")) + .setOnActionSheetListener { index -> + when (index) { + 0 -> context.navigatePageTo(SearchDeviceActivity::class.java) + 1 -> context.navigatePageTo(SearchDataActivity::class.java) + } + }.build().show() + + } + 2 -> context.navigatePageTo(StatisticsActivity::class.java) } } }) diff --git a/app/src/main/java/com/casic/qd/smartwell/view/SearchAlarmActivity.kt b/app/src/main/java/com/casic/qd/smartwell/view/SearchAlarmActivity.kt index 8f54163..5285a9f 100644 --- a/app/src/main/java/com/casic/qd/smartwell/view/SearchAlarmActivity.kt +++ b/app/src/main/java/com/casic/qd/smartwell/view/SearchAlarmActivity.kt @@ -13,11 +13,6 @@ import com.jzxiang.pickerview.data.Type import com.qmuiteam.qmui.widget.dialog.QMUIBottomSheet.BottomListSheetBuilder import kotlinx.android.synthetic.main.activity_alarm_search.* -import kotlinx.android.synthetic.main.activity_alarm_search.areaView -import kotlinx.android.synthetic.main.activity_alarm_search.clearButton -import kotlinx.android.synthetic.main.activity_alarm_search.searchButton -import kotlinx.android.synthetic.main.activity_alarm_search.wellCodeView -import kotlinx.android.synthetic.main.activity_search_record.* import kotlinx.android.synthetic.main.include_base_title.* class SearchAlarmActivity : BaseActivity() { diff --git a/app/src/main/java/com/casic/qd/smartwell/view/SearchDataActivity.kt b/app/src/main/java/com/casic/qd/smartwell/view/SearchDataActivity.kt new file mode 100644 index 0000000..e6a38e4 --- /dev/null +++ b/app/src/main/java/com/casic/qd/smartwell/view/SearchDataActivity.kt @@ -0,0 +1,168 @@ +package com.casic.qd.smartwell.view + +import com.casic.qd.smartwell.R +import com.casic.qd.smartwell.base.BaseActivity +import kotlinx.android.synthetic.main.include_base_title.* + +/** + * @author a203 + * @description 记录查询界面 + * @date 2022/2/17 14:33 + * @email 290677893@qq.com + */ +class SearchDataActivity : BaseActivity() { + +// private lateinit var deviceViewModel: DeviceViewModel +// private lateinit var authenticateViewModel: AuthenticateViewModel +// private lateinit var areaViewModel: AreaViewModel +// private var authenticatedType: MutableList = ArrayList() +// private var deviceTypeValue = "" +// private var deptId = "" +// private var deviceState = "" +// private var areaId = "" + + override fun initLayoutView(): Int = R.layout.activity_data_search + + override fun setupTopBarLayout() { + titleView.text = "数据查询" + } + + override fun initData() { +// val userDeviceJson = SaveKeyValues.getValue(Constant.USER_DEVICE_TYPE, "") as String +// if (userDeviceJson.isNotBlank()) { +// authenticatedType = Gson().fromJson( +// userDeviceJson, object : TypeToken>() {}.type +// ) +// } +// deviceViewModel = ViewModelProvider(this).get(DeviceViewModel::class.java) +// authenticateViewModel = ViewModelProvider(this).get(AuthenticateViewModel::class.java) +// areaViewModel = ViewModelProvider(this).get(AreaViewModel::class.java) + } + + override fun initEvent() { +// deviceTypeView.setOnClickListener { +// /** +// * 获取全部设备类型 +// * */ +// deviceViewModel.obtainDeviceType() +// } +// deviceViewModel.typeModel.observe(this, { +// if (it.code == 200) { +// val authenticatedModel: MutableList = ArrayList() +// it.data?.forEach { deviceModel -> +// if (deviceModel.value in authenticatedType) { +// authenticatedModel.add(deviceModel) +// } +// } +// val sheetBuilder = QMUIBottomSheet.BottomListSheetBuilder(this) +// sheetBuilder.setTitle("设备类型") +// authenticatedModel.forEach { deviceModel -> +// sheetBuilder.addItem(deviceModel.name) +// } +// sheetBuilder.setGravityCenter(true) +// .setOnSheetItemClickListener { dialog, _, position, tag -> +// deviceTypeView.text = tag +// this.deviceTypeValue = authenticatedModel[position].value.toString() +// +// dialog.dismiss() +// }.build().show() +// } +// }) +// +// ownerShipView.setOnClickListener { +// authenticateViewModel.obtainOwnerShip("03") +// } +// authenticateViewModel.resultModel.observe(this, { +// if (it.code == 200) { +// val ownerShipModel: MutableList = ArrayList() +// it.data?.list?.forEach { listBean -> +// ownerShipModel.add(listBean) +// } +// val sheetBuilder = QMUIBottomSheet.BottomListSheetBuilder(this) +// sheetBuilder.setTitle("权属单位") +// ownerShipModel.forEach { model -> +// sheetBuilder.addItem(model.name) +// } +// sheetBuilder.setGravityCenter(true) +// .setOnSheetItemClickListener { dialog, _, position, tag -> +// ownerShipView.text = tag +// this.deptId = ownerShipModel[position].id.toString() +// +// dialog.dismiss() +// }.build().show() +// } +// }) +// +// deviceStateView.setOnClickListener { +// QMUIBottomSheet.BottomListSheetBuilder(this) +// .setTitle("在线情况") +// .addItem("在线") +// .addItem("离线") +// .setGravityCenter(true) +// .setOnSheetItemClickListener { dialog, _, _, tag -> +// deviceStateView.text = tag +// this.deviceState = if (tag == "在线") { +// "1" +// } else { +// "0" +// } +// +// dialog.dismiss() +// }.build().show() +// } +// +// areaView.setOnClickListener { +// areaViewModel.obtainArea() +// } +// areaViewModel.areaModel.observe(this, { +// if (it.code == 200) { +// val firstLevelArea: MutableList = ArrayList() +// val secondLevelArea: MutableList = ArrayList() +// val thirdLevelArea: MutableList = ArrayList() +// it.data?.forEach { dataBean -> +// when (dataBean.level) { +// 2 -> firstLevelArea.add(dataBean) +// 3 -> secondLevelArea.add(dataBean) +// 4 -> thirdLevelArea.add(dataBean) +// } +// } +// +// // 绑定区域 +// BottomAreaSheet.Builder() +// .setContext(this) +// .setFirstAreaData(firstLevelArea) +// .setSecondAreaData(secondLevelArea) +// .setThirdAreaData(thirdLevelArea) +// .setOnActionSheetListener(object : BottomAreaSheet.OnActionSheetListener { +// override fun onAreaSelected(area: String?, id: String?) { +// areaView.text = area +// areaId = id.toString() +// } +// }).build().show() +// } +// }) +// +// searchButton.setChangeAlphaWhenPress(true) +// searchButton.setOnClickListener { +// //页面跳转,将查询参数传过去 +// navigatePageTo( +// DeviceSearchResultActivity::class.java, addAll( +// wellCodeView.text.toString().trim(), +// deviceTypeValue, +// deptId, +// deviceState, +// areaId +// ) +// ) +// } +// +// clearButton.setChangeAlphaWhenPress(true) +// clearButton.setOnClickListener { +// wellCodeView.setText("") +// deviceTypeView.text = "" +// ownerShipView.text = "" +// deviceStateView.text = "" +// areaView.text = "" +// } + } +} \ No newline at end of file diff --git a/app/src/main/java/com/casic/qd/smartwell/view/SearchDeviceActivity.kt b/app/src/main/java/com/casic/qd/smartwell/view/SearchDeviceActivity.kt new file mode 100644 index 0000000..cf0c05f --- /dev/null +++ b/app/src/main/java/com/casic/qd/smartwell/view/SearchDeviceActivity.kt @@ -0,0 +1,184 @@ +package com.casic.qd.smartwell.view + +import androidx.lifecycle.ViewModelProvider +import com.casic.qd.smartwell.R +import com.casic.qd.smartwell.base.BaseActivity +import com.casic.qd.smartwell.extensions.addAll +import com.casic.qd.smartwell.extensions.navigatePageTo +import com.casic.qd.smartwell.model.AreaModel +import com.casic.qd.smartwell.model.DeviceTypeModel +import com.casic.qd.smartwell.model.OwnerShipModel +import com.casic.qd.smartwell.utils.Constant +import com.casic.qd.smartwell.utils.SaveKeyValues +import com.casic.qd.smartwell.vm.AreaViewModel +import com.casic.qd.smartwell.vm.AuthenticateViewModel +import com.casic.qd.smartwell.vm.DeviceViewModel +import com.casic.qd.smartwell.widgets.BottomAreaSheet +import com.google.gson.Gson +import com.google.gson.reflect.TypeToken +import com.qmuiteam.qmui.widget.dialog.QMUIBottomSheet +import kotlinx.android.synthetic.main.activity_device_search.* +import kotlinx.android.synthetic.main.include_base_title.* + +/** + * @author a203 + * @description 记录查询界面 + * @date 2022/2/17 14:33 + * @email 290677893@qq.com + */ +class SearchDeviceActivity : BaseActivity() { + + private lateinit var deviceViewModel: DeviceViewModel + private lateinit var authenticateViewModel: AuthenticateViewModel + private lateinit var areaViewModel: AreaViewModel + private var authenticatedType: MutableList = ArrayList() + private var deviceTypeValue = "" + private var deptId = "" + private var deviceState = "" + private var areaId = "" + + override fun initLayoutView(): Int = R.layout.activity_device_search + + override fun setupTopBarLayout() { + titleView.text = "设备查询" + } + + override fun initData() { + val userDeviceJson = SaveKeyValues.getValue(Constant.USER_DEVICE_TYPE, "") as String + if (userDeviceJson.isNotBlank()) { + authenticatedType = Gson().fromJson( + userDeviceJson, object : TypeToken>() {}.type + ) + } + deviceViewModel = ViewModelProvider(this).get(DeviceViewModel::class.java) + authenticateViewModel = ViewModelProvider(this).get(AuthenticateViewModel::class.java) + areaViewModel = ViewModelProvider(this).get(AreaViewModel::class.java) + } + + override fun initEvent() { + deviceTypeView.setOnClickListener { + /** + * 获取全部设备类型 + * */ + deviceViewModel.obtainDeviceType() + } + deviceViewModel.typeModel.observe(this, { + if (it.code == 200) { + val authenticatedModel: MutableList = ArrayList() + it.data?.forEach { deviceModel -> + if (deviceModel.value in authenticatedType) { + authenticatedModel.add(deviceModel) + } + } + val sheetBuilder = QMUIBottomSheet.BottomListSheetBuilder(this) + sheetBuilder.setTitle("设备类型") + authenticatedModel.forEach { deviceModel -> + sheetBuilder.addItem(deviceModel.name) + } + sheetBuilder.setGravityCenter(true) + .setOnSheetItemClickListener { dialog, _, position, tag -> + deviceTypeView.text = tag + this.deviceTypeValue = authenticatedModel[position].value.toString() + + dialog.dismiss() + }.build().show() + } + }) + + ownerShipView.setOnClickListener { + authenticateViewModel.obtainOwnerShip("03") + } + authenticateViewModel.resultModel.observe(this, { + if (it.code == 200) { + val ownerShipModel: MutableList = ArrayList() + it.data?.list?.forEach { listBean -> + ownerShipModel.add(listBean) + } + val sheetBuilder = QMUIBottomSheet.BottomListSheetBuilder(this) + sheetBuilder.setTitle("权属单位") + ownerShipModel.forEach { model -> + sheetBuilder.addItem(model.name) + } + sheetBuilder.setGravityCenter(true) + .setOnSheetItemClickListener { dialog, _, position, tag -> + ownerShipView.text = tag + this.deptId = ownerShipModel[position].id.toString() + + dialog.dismiss() + }.build().show() + } + }) + + deviceStateView.setOnClickListener { + QMUIBottomSheet.BottomListSheetBuilder(this) + .setTitle("在线情况") + .addItem("在线") + .addItem("离线") + .setGravityCenter(true) + .setOnSheetItemClickListener { dialog, _, _, tag -> + deviceStateView.text = tag + this.deviceState = if (tag == "在线") { + "1" + } else { + "0" + } + + dialog.dismiss() + }.build().show() + } + + areaView.setOnClickListener { + areaViewModel.obtainArea() + } + areaViewModel.areaModel.observe(this, { + if (it.code == 200) { + val firstLevelArea: MutableList = ArrayList() + val secondLevelArea: MutableList = ArrayList() + val thirdLevelArea: MutableList = ArrayList() + it.data?.forEach { dataBean -> + when (dataBean.level) { + 2 -> firstLevelArea.add(dataBean) + 3 -> secondLevelArea.add(dataBean) + 4 -> thirdLevelArea.add(dataBean) + } + } + + // 绑定区域 + BottomAreaSheet.Builder() + .setContext(this) + .setFirstAreaData(firstLevelArea) + .setSecondAreaData(secondLevelArea) + .setThirdAreaData(thirdLevelArea) + .setOnActionSheetListener(object : BottomAreaSheet.OnActionSheetListener { + override fun onAreaSelected(area: String?, id: String?) { + areaView.text = area + areaId = id.toString() + } + }).build().show() + } + }) + + searchButton.setChangeAlphaWhenPress(true) + searchButton.setOnClickListener { + //页面跳转,将查询参数传过去 + navigatePageTo( + DeviceSearchResultActivity::class.java, addAll( + wellCodeView.text.toString().trim(), + deviceTypeValue, + deptId, + deviceState, + areaId + ) + ) + } + + clearButton.setChangeAlphaWhenPress(true) + clearButton.setOnClickListener { + wellCodeView.setText("") + deviceTypeView.text = "" + ownerShipView.text = "" + deviceStateView.text = "" + areaView.text = "" + } + } +} \ No newline at end of file diff --git a/app/src/main/java/com/casic/qd/smartwell/view/SearchRecordActivity.kt b/app/src/main/java/com/casic/qd/smartwell/view/SearchRecordActivity.kt deleted file mode 100644 index 8cab864..0000000 --- a/app/src/main/java/com/casic/qd/smartwell/view/SearchRecordActivity.kt +++ /dev/null @@ -1,184 +0,0 @@ -package com.casic.qd.smartwell.view - -import androidx.lifecycle.ViewModelProvider -import com.casic.qd.smartwell.R -import com.casic.qd.smartwell.base.BaseActivity -import com.casic.qd.smartwell.extensions.addAll -import com.casic.qd.smartwell.extensions.navigatePageTo -import com.casic.qd.smartwell.model.AreaModel -import com.casic.qd.smartwell.model.DeviceTypeModel -import com.casic.qd.smartwell.model.OwnerShipModel -import com.casic.qd.smartwell.utils.Constant -import com.casic.qd.smartwell.utils.SaveKeyValues -import com.casic.qd.smartwell.vm.AreaViewModel -import com.casic.qd.smartwell.vm.AuthenticateViewModel -import com.casic.qd.smartwell.vm.DeviceViewModel -import com.casic.qd.smartwell.widgets.BottomAreaSheet -import com.google.gson.Gson -import com.google.gson.reflect.TypeToken -import com.qmuiteam.qmui.widget.dialog.QMUIBottomSheet -import kotlinx.android.synthetic.main.activity_search_record.* -import kotlinx.android.synthetic.main.include_base_title.* - -/** - * @author a203 - * @description 记录查询界面 - * @date 2022/2/17 14:33 - * @email 290677893@qq.com - */ -class SearchRecordActivity : BaseActivity() { - - private lateinit var deviceViewModel: DeviceViewModel - private lateinit var authenticateViewModel: AuthenticateViewModel - private lateinit var areaViewModel: AreaViewModel - private var authenticatedType: MutableList = ArrayList() - private var deviceTypeValue = "" - private var deptId = "" - private var deviceState = "" - private var areaId = "" - - override fun initLayoutView(): Int = R.layout.activity_search_record - - override fun setupTopBarLayout() { - titleView.text = "记录查询" - } - - override fun initData() { - val userDeviceJson = SaveKeyValues.getValue(Constant.USER_DEVICE_TYPE, "") as String - if (userDeviceJson.isNotBlank()) { - authenticatedType = Gson().fromJson( - userDeviceJson, object : TypeToken>() {}.type - ) - } - deviceViewModel = ViewModelProvider(this).get(DeviceViewModel::class.java) - authenticateViewModel = ViewModelProvider(this).get(AuthenticateViewModel::class.java) - areaViewModel = ViewModelProvider(this).get(AreaViewModel::class.java) - } - - override fun initEvent() { - deviceTypeView.setOnClickListener { - /** - * 获取全部设备类型 - * */ - deviceViewModel.obtainDeviceType() - } - deviceViewModel.typeModel.observe(this, { - if (it.code == 200) { - val authenticatedModel: MutableList = ArrayList() - it.data?.forEach { deviceModel -> - if (deviceModel.value in authenticatedType) { - authenticatedModel.add(deviceModel) - } - } - val sheetBuilder = QMUIBottomSheet.BottomListSheetBuilder(this) - sheetBuilder.setTitle("设备类型") - authenticatedModel.forEach { deviceModel -> - sheetBuilder.addItem(deviceModel.name) - } - sheetBuilder.setGravityCenter(true) - .setOnSheetItemClickListener { dialog, _, position, tag -> - deviceTypeView.text = tag - this.deviceTypeValue = authenticatedModel[position].value.toString() - - dialog.dismiss() - }.build().show() - } - }) - - ownerShipView.setOnClickListener { - authenticateViewModel.obtainOwnerShip("03") - } - authenticateViewModel.resultModel.observe(this, { - if (it.code == 200) { - val ownerShipModel: MutableList = ArrayList() - it.data?.list?.forEach { listBean -> - ownerShipModel.add(listBean) - } - val sheetBuilder = QMUIBottomSheet.BottomListSheetBuilder(this) - sheetBuilder.setTitle("权属单位") - ownerShipModel.forEach { model -> - sheetBuilder.addItem(model.name) - } - sheetBuilder.setGravityCenter(true) - .setOnSheetItemClickListener { dialog, _, position, tag -> - ownerShipView.text = tag - this.deptId = ownerShipModel[position].id.toString() - - dialog.dismiss() - }.build().show() - } - }) - - deviceStateView.setOnClickListener { - QMUIBottomSheet.BottomListSheetBuilder(this) - .setTitle("在线情况") - .addItem("在线") - .addItem("离线") - .setGravityCenter(true) - .setOnSheetItemClickListener { dialog, _, _, tag -> - deviceStateView.text = tag - this.deviceState = if (tag == "在线") { - "1" - } else { - "0" - } - - dialog.dismiss() - }.build().show() - } - - areaView.setOnClickListener { - areaViewModel.obtainArea() - } - areaViewModel.areaModel.observe(this, { - if (it.code == 200) { - val firstLevelArea: MutableList = ArrayList() - val secondLevelArea: MutableList = ArrayList() - val thirdLevelArea: MutableList = ArrayList() - it.data?.forEach { dataBean -> - when (dataBean.level) { - 2 -> firstLevelArea.add(dataBean) - 3 -> secondLevelArea.add(dataBean) - 4 -> thirdLevelArea.add(dataBean) - } - } - - // 绑定区域 - BottomAreaSheet.Builder() - .setContext(this) - .setFirstAreaData(firstLevelArea) - .setSecondAreaData(secondLevelArea) - .setThirdAreaData(thirdLevelArea) - .setOnActionSheetListener(object : BottomAreaSheet.OnActionSheetListener { - override fun onAreaSelected(area: String?, id: String?) { - areaView.text = area - areaId = id.toString() - } - }).build().show() - } - }) - - searchButton.setChangeAlphaWhenPress(true) - searchButton.setOnClickListener { - //页面跳转,将查询参数传过去 - navigatePageTo( - DeviceSearchResultActivity::class.java, addAll( - wellCodeView.text.toString().trim(), - deviceTypeValue, - deptId, - deviceState, - areaId - ) - ) - } - - clearButton.setChangeAlphaWhenPress(true) - clearButton.setOnClickListener { - wellCodeView.setText("") - deviceTypeView.text = "" - ownerShipView.text = "" - deviceStateView.text = "" - areaView.text = "" - } - } -} \ No newline at end of file diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml index 82386c9..3832c68 100644 --- a/app/src/main/AndroidManifest.xml +++ b/app/src/main/AndroidManifest.xml @@ -48,7 +48,7 @@ - + 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 216e7cc..f53e831 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,6 +15,14 @@ return dateFormat.format(calendar.time) } +fun Long.timestampToLastWeekTime(): String { + val dateFormat = SimpleDateFormat("yyyy-MM-dd HH:mm:ss", Locale.CHINA) + val calendar = Calendar.getInstance() + calendar.time = Date(this) + calendar.set(Calendar.DAY_OF_YEAR, calendar.get(Calendar.DAY_OF_YEAR) - 6) + return dateFormat.format(calendar.time) +} + fun Long.timestampToLastMonthDate(): String { val dateFormat = SimpleDateFormat("yyyy-MM-dd", Locale.CHINA) val calendar = Calendar.getInstance() diff --git a/app/src/main/java/com/casic/qd/smartwell/model/DayDataModel.kt b/app/src/main/java/com/casic/qd/smartwell/model/DayDataModel.kt new file mode 100644 index 0000000..18d1399 --- /dev/null +++ b/app/src/main/java/com/casic/qd/smartwell/model/DayDataModel.kt @@ -0,0 +1,13 @@ +package com.casic.qd.smartwell.model + +class DayDataModel { + var code = 0 + var data: List? = null + var message: String? = null + var isSuccess = false + + class DataBean { + var time: String? = null + var value: String? = null + } +} \ No newline at end of file diff --git a/app/src/main/java/com/casic/qd/smartwell/model/TotalDataModel.kt b/app/src/main/java/com/casic/qd/smartwell/model/TotalDataModel.kt new file mode 100644 index 0000000..30bf829 --- /dev/null +++ b/app/src/main/java/com/casic/qd/smartwell/model/TotalDataModel.kt @@ -0,0 +1,14 @@ +package com.casic.qd.smartwell.model + +class TotalDataModel { + var code = 0 + var data: List? = null + var message: String? = null + var isSuccess = false + + class DataBean { + var total: String? = null + var deviceState: String? = null + var uptime: String? = null + } +} \ No newline at end of file diff --git a/app/src/main/java/com/casic/qd/smartwell/utils/retrofit/RetrofitService.kt b/app/src/main/java/com/casic/qd/smartwell/utils/retrofit/RetrofitService.kt index c5bf469..0c80ee9 100644 --- a/app/src/main/java/com/casic/qd/smartwell/utils/retrofit/RetrofitService.kt +++ b/app/src/main/java/com/casic/qd/smartwell/utils/retrofit/RetrofitService.kt @@ -202,4 +202,26 @@ @Query("offset") offset: Int, @Query("limit") limit: Int ): String + + /** + * 获取设备日用水量 + * */ + @GET("/device/sevenDayData") + suspend fun obtainSevenDayData( + @Header("token") token: String, + @Query("devCode") devCode: String?, + @Query("beginTime") beginTime: String?, + @Query("endTime") endTime: String? + ): String + + /** + * 获取设备日用水量 + * */ + @GET("/device/totalData") + suspend fun obtainTotalDayData( + @Header("token") token: String, + @Query("devCode") devCode: String?, + @Query("beginTime") beginTime: String?, + @Query("endTime") endTime: String? + ): String } \ No newline at end of file diff --git a/app/src/main/java/com/casic/qd/smartwell/utils/retrofit/RetrofitServiceManager.kt b/app/src/main/java/com/casic/qd/smartwell/utils/retrofit/RetrofitServiceManager.kt index 6f728e0..a8b320f 100644 --- a/app/src/main/java/com/casic/qd/smartwell/utils/retrofit/RetrofitServiceManager.kt +++ b/app/src/main/java/com/casic/qd/smartwell/utils/retrofit/RetrofitServiceManager.kt @@ -204,4 +204,18 @@ Constant.PAGE_LIMIT ) } + + /** + * 获取设备日用水量 + */ + suspend fun obtainSevenDayData(devCode: String?, beginTime: String?, endTime: String?): String { + return api.obtainSevenDayData(AuthenticationHelper.token!!, devCode, beginTime, endTime) + } + + /** + * 获取设备累计用水量 + */ + suspend fun obtainTotalDayData(devCode: String?, beginTime: String?, endTime: String?): String { + return api.obtainTotalDayData(AuthenticationHelper.token!!, devCode, beginTime, endTime) + } } \ No newline at end of file diff --git a/app/src/main/java/com/casic/qd/smartwell/view/DeviceDataDetailActivity.kt b/app/src/main/java/com/casic/qd/smartwell/view/DeviceDataDetailActivity.kt index 7029d17..a8a2695 100644 --- a/app/src/main/java/com/casic/qd/smartwell/view/DeviceDataDetailActivity.kt +++ b/app/src/main/java/com/casic/qd/smartwell/view/DeviceDataDetailActivity.kt @@ -1,22 +1,109 @@ package com.casic.qd.smartwell.view +import androidx.lifecycle.ViewModelProvider import com.casic.qd.smartwell.R import com.casic.qd.smartwell.base.BaseActivity -import kotlinx.android.synthetic.main.include_base_title.* +import com.casic.qd.smartwell.extensions.convertColor +import com.casic.qd.smartwell.extensions.timestampToLastWeekTime +import com.casic.qd.smartwell.extensions.timestampToTime +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.DeviceViewModel +import com.casic.qd.smartwell.widgets.DateSelectDialog +import com.github.mikephil.charting.data.Entry +import com.jzxiang.pickerview.data.Type +import kotlinx.android.synthetic.main.activity_device_data_detail.* +import kotlinx.android.synthetic.main.activity_main.rightOptionView +import kotlinx.android.synthetic.main.activity_main.titleView class DeviceDataDetailActivity : BaseActivity() { - override fun initLayoutView(): Int = R.layout.activity_device_detail + private val kTag = "DeviceDataDetailActivity" + private lateinit var deviceCode: String + private lateinit var deviceViewModel: DeviceViewModel + + override fun initLayoutView(): Int = R.layout.activity_device_data_detail override fun setupTopBarLayout() { - titleView.text = "历史数据" + deviceCode = intent.getStringExtra(Constant.INTENT_PARAM)!! + titleView.text = String.format("${deviceCode}历史数据") } override fun initData() { - + deviceViewModel = ViewModelProvider(this).get(DeviceViewModel::class.java) } override fun initEvent() { + rightOptionView.setOnClickListener { + DateSelectDialog.Builder() + .setContext(this) + .setTitle("选择日期") + .setNegativeButton("取消") + .setPositiveButton("选好了") + .setOnDialogButtonClickListener(object : + DateSelectDialog.OnDialogButtonClickListener { + override fun onConfirmClick(startDate: String, endDate: String) { + deviceViewModel.obtainSevenDayData(deviceCode, startDate, endDate) + deviceViewModel.obtainTotalDayData(deviceCode, startDate, endDate) + } + override fun onCancelClick() { + //选择取消就默认加载近7天的数据 + val time = System.currentTimeMillis() + val startTime = time.timestampToLastWeekTime() + val endTime = time.timestampToTime() + deviceViewModel.obtainSevenDayData(deviceCode, startTime, endTime) + deviceViewModel.obtainTotalDayData(deviceCode, startTime, endTime) + } + }) + .setFragmentManager(supportFragmentManager) + .setCalendarType(Type.ALL) + .build().show() + } + + //默认加载近一周的数据 + val time = System.currentTimeMillis() + val startTime = time.timestampToLastWeekTime() + val endTime = time.timestampToTime() + deviceViewModel.obtainSevenDayData(deviceCode, startTime, endTime) + deviceViewModel.dayDataModel.observe(this, { + if (it.code == 200) { + val entryModels: MutableList = ArrayList() + val xAxisDate: MutableList = ArrayList() + val entries: ArrayList = ArrayList() + val entryModel = LineChartEntryModel() + + entryModel.lineColor = Constant.COLORS[7].convertColor() + it.data?.forEachIndexed { index, dataBean -> + val split = dataBean.time.toString().split("-") + xAxisDate.add("${split[1]}/${split[2]}") + + entries.add(Entry(index.toFloat(), dataBean.value!!.toFloat(), "日用水量")) + } + entryModel.entryList = entries + entryModels.add(entryModel) + ChartViewHelper.setLineChartData(dayWaterLineChart, xAxisDate, entryModels) + } + }) + + deviceViewModel.obtainTotalDayData(deviceCode, startTime, endTime) + deviceViewModel.totalDataModel.observe(this, { + val entryModels: MutableList = ArrayList() + val xAxisDate: MutableList = ArrayList() + val entries: ArrayList = ArrayList() + val entryModel = LineChartEntryModel() + + entryModel.lineColor = Constant.COLORS[7].convertColor() + it.data?.forEachIndexed { index, dataBean -> + val split = dataBean.uptime.toString().split(" ")[0].split("-") + xAxisDate.add("${split[1]}/${split[2]}") + + entries.add(Entry(index.toFloat(), dataBean.total!!.toFloat(), "总用水量")) + } + entryModel.entryList = entries + entryModels.add(entryModel) + ChartViewHelper.setLineChartData(totalWaterLineChart, xAxisDate, entryModels) + }) } } \ No newline at end of file diff --git a/app/src/main/java/com/casic/qd/smartwell/view/MainActivity.kt b/app/src/main/java/com/casic/qd/smartwell/view/MainActivity.kt index 02435a3..3f4bb3c 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 @@ -1,7 +1,6 @@ package com.casic.qd.smartwell.view import android.content.Context -import android.content.Intent import android.os.Handler import android.os.Looper import android.os.Message @@ -22,6 +21,7 @@ import com.casic.qd.smartwell.vm.WaterStatisticsViewModel import com.github.mikephil.charting.data.Entry import com.pengxh.app.multilib.widget.dialog.AlertControlDialog +import com.pengxh.app.multilib.widget.dialog.BottomActionSheet import com.youth.banner.Banner import com.youth.banner.adapter.BannerImageAdapter import com.youth.banner.holder.BannerImageHolder @@ -100,9 +100,20 @@ HomeRecycleAdapter.OnGridItemClickListener { override fun onClick(position: Int) { when (position) { - 0 -> startActivity(Intent(context, MapActivity::class.java)) - 1 -> startActivity(Intent(context, SearchRecordActivity::class.java)) - 2 -> startActivity(Intent(context, StatisticsActivity::class.java)) + 0 -> context.navigatePageTo(MapActivity::class.java) + 1 -> { + BottomActionSheet.Builder() + .setContext(context) + .setActionItemTitles(arrayOf("设备", "数据")) + .setOnActionSheetListener { index -> + when (index) { + 0 -> context.navigatePageTo(SearchDeviceActivity::class.java) + 1 -> context.navigatePageTo(SearchDataActivity::class.java) + } + }.build().show() + + } + 2 -> context.navigatePageTo(StatisticsActivity::class.java) } } }) diff --git a/app/src/main/java/com/casic/qd/smartwell/view/SearchAlarmActivity.kt b/app/src/main/java/com/casic/qd/smartwell/view/SearchAlarmActivity.kt index 8f54163..5285a9f 100644 --- a/app/src/main/java/com/casic/qd/smartwell/view/SearchAlarmActivity.kt +++ b/app/src/main/java/com/casic/qd/smartwell/view/SearchAlarmActivity.kt @@ -13,11 +13,6 @@ import com.jzxiang.pickerview.data.Type import com.qmuiteam.qmui.widget.dialog.QMUIBottomSheet.BottomListSheetBuilder import kotlinx.android.synthetic.main.activity_alarm_search.* -import kotlinx.android.synthetic.main.activity_alarm_search.areaView -import kotlinx.android.synthetic.main.activity_alarm_search.clearButton -import kotlinx.android.synthetic.main.activity_alarm_search.searchButton -import kotlinx.android.synthetic.main.activity_alarm_search.wellCodeView -import kotlinx.android.synthetic.main.activity_search_record.* import kotlinx.android.synthetic.main.include_base_title.* class SearchAlarmActivity : BaseActivity() { diff --git a/app/src/main/java/com/casic/qd/smartwell/view/SearchDataActivity.kt b/app/src/main/java/com/casic/qd/smartwell/view/SearchDataActivity.kt new file mode 100644 index 0000000..e6a38e4 --- /dev/null +++ b/app/src/main/java/com/casic/qd/smartwell/view/SearchDataActivity.kt @@ -0,0 +1,168 @@ +package com.casic.qd.smartwell.view + +import com.casic.qd.smartwell.R +import com.casic.qd.smartwell.base.BaseActivity +import kotlinx.android.synthetic.main.include_base_title.* + +/** + * @author a203 + * @description 记录查询界面 + * @date 2022/2/17 14:33 + * @email 290677893@qq.com + */ +class SearchDataActivity : BaseActivity() { + +// private lateinit var deviceViewModel: DeviceViewModel +// private lateinit var authenticateViewModel: AuthenticateViewModel +// private lateinit var areaViewModel: AreaViewModel +// private var authenticatedType: MutableList = ArrayList() +// private var deviceTypeValue = "" +// private var deptId = "" +// private var deviceState = "" +// private var areaId = "" + + override fun initLayoutView(): Int = R.layout.activity_data_search + + override fun setupTopBarLayout() { + titleView.text = "数据查询" + } + + override fun initData() { +// val userDeviceJson = SaveKeyValues.getValue(Constant.USER_DEVICE_TYPE, "") as String +// if (userDeviceJson.isNotBlank()) { +// authenticatedType = Gson().fromJson( +// userDeviceJson, object : TypeToken>() {}.type +// ) +// } +// deviceViewModel = ViewModelProvider(this).get(DeviceViewModel::class.java) +// authenticateViewModel = ViewModelProvider(this).get(AuthenticateViewModel::class.java) +// areaViewModel = ViewModelProvider(this).get(AreaViewModel::class.java) + } + + override fun initEvent() { +// deviceTypeView.setOnClickListener { +// /** +// * 获取全部设备类型 +// * */ +// deviceViewModel.obtainDeviceType() +// } +// deviceViewModel.typeModel.observe(this, { +// if (it.code == 200) { +// val authenticatedModel: MutableList = ArrayList() +// it.data?.forEach { deviceModel -> +// if (deviceModel.value in authenticatedType) { +// authenticatedModel.add(deviceModel) +// } +// } +// val sheetBuilder = QMUIBottomSheet.BottomListSheetBuilder(this) +// sheetBuilder.setTitle("设备类型") +// authenticatedModel.forEach { deviceModel -> +// sheetBuilder.addItem(deviceModel.name) +// } +// sheetBuilder.setGravityCenter(true) +// .setOnSheetItemClickListener { dialog, _, position, tag -> +// deviceTypeView.text = tag +// this.deviceTypeValue = authenticatedModel[position].value.toString() +// +// dialog.dismiss() +// }.build().show() +// } +// }) +// +// ownerShipView.setOnClickListener { +// authenticateViewModel.obtainOwnerShip("03") +// } +// authenticateViewModel.resultModel.observe(this, { +// if (it.code == 200) { +// val ownerShipModel: MutableList = ArrayList() +// it.data?.list?.forEach { listBean -> +// ownerShipModel.add(listBean) +// } +// val sheetBuilder = QMUIBottomSheet.BottomListSheetBuilder(this) +// sheetBuilder.setTitle("权属单位") +// ownerShipModel.forEach { model -> +// sheetBuilder.addItem(model.name) +// } +// sheetBuilder.setGravityCenter(true) +// .setOnSheetItemClickListener { dialog, _, position, tag -> +// ownerShipView.text = tag +// this.deptId = ownerShipModel[position].id.toString() +// +// dialog.dismiss() +// }.build().show() +// } +// }) +// +// deviceStateView.setOnClickListener { +// QMUIBottomSheet.BottomListSheetBuilder(this) +// .setTitle("在线情况") +// .addItem("在线") +// .addItem("离线") +// .setGravityCenter(true) +// .setOnSheetItemClickListener { dialog, _, _, tag -> +// deviceStateView.text = tag +// this.deviceState = if (tag == "在线") { +// "1" +// } else { +// "0" +// } +// +// dialog.dismiss() +// }.build().show() +// } +// +// areaView.setOnClickListener { +// areaViewModel.obtainArea() +// } +// areaViewModel.areaModel.observe(this, { +// if (it.code == 200) { +// val firstLevelArea: MutableList = ArrayList() +// val secondLevelArea: MutableList = ArrayList() +// val thirdLevelArea: MutableList = ArrayList() +// it.data?.forEach { dataBean -> +// when (dataBean.level) { +// 2 -> firstLevelArea.add(dataBean) +// 3 -> secondLevelArea.add(dataBean) +// 4 -> thirdLevelArea.add(dataBean) +// } +// } +// +// // 绑定区域 +// BottomAreaSheet.Builder() +// .setContext(this) +// .setFirstAreaData(firstLevelArea) +// .setSecondAreaData(secondLevelArea) +// .setThirdAreaData(thirdLevelArea) +// .setOnActionSheetListener(object : BottomAreaSheet.OnActionSheetListener { +// override fun onAreaSelected(area: String?, id: String?) { +// areaView.text = area +// areaId = id.toString() +// } +// }).build().show() +// } +// }) +// +// searchButton.setChangeAlphaWhenPress(true) +// searchButton.setOnClickListener { +// //页面跳转,将查询参数传过去 +// navigatePageTo( +// DeviceSearchResultActivity::class.java, addAll( +// wellCodeView.text.toString().trim(), +// deviceTypeValue, +// deptId, +// deviceState, +// areaId +// ) +// ) +// } +// +// clearButton.setChangeAlphaWhenPress(true) +// clearButton.setOnClickListener { +// wellCodeView.setText("") +// deviceTypeView.text = "" +// ownerShipView.text = "" +// deviceStateView.text = "" +// areaView.text = "" +// } + } +} \ No newline at end of file diff --git a/app/src/main/java/com/casic/qd/smartwell/view/SearchDeviceActivity.kt b/app/src/main/java/com/casic/qd/smartwell/view/SearchDeviceActivity.kt new file mode 100644 index 0000000..cf0c05f --- /dev/null +++ b/app/src/main/java/com/casic/qd/smartwell/view/SearchDeviceActivity.kt @@ -0,0 +1,184 @@ +package com.casic.qd.smartwell.view + +import androidx.lifecycle.ViewModelProvider +import com.casic.qd.smartwell.R +import com.casic.qd.smartwell.base.BaseActivity +import com.casic.qd.smartwell.extensions.addAll +import com.casic.qd.smartwell.extensions.navigatePageTo +import com.casic.qd.smartwell.model.AreaModel +import com.casic.qd.smartwell.model.DeviceTypeModel +import com.casic.qd.smartwell.model.OwnerShipModel +import com.casic.qd.smartwell.utils.Constant +import com.casic.qd.smartwell.utils.SaveKeyValues +import com.casic.qd.smartwell.vm.AreaViewModel +import com.casic.qd.smartwell.vm.AuthenticateViewModel +import com.casic.qd.smartwell.vm.DeviceViewModel +import com.casic.qd.smartwell.widgets.BottomAreaSheet +import com.google.gson.Gson +import com.google.gson.reflect.TypeToken +import com.qmuiteam.qmui.widget.dialog.QMUIBottomSheet +import kotlinx.android.synthetic.main.activity_device_search.* +import kotlinx.android.synthetic.main.include_base_title.* + +/** + * @author a203 + * @description 记录查询界面 + * @date 2022/2/17 14:33 + * @email 290677893@qq.com + */ +class SearchDeviceActivity : BaseActivity() { + + private lateinit var deviceViewModel: DeviceViewModel + private lateinit var authenticateViewModel: AuthenticateViewModel + private lateinit var areaViewModel: AreaViewModel + private var authenticatedType: MutableList = ArrayList() + private var deviceTypeValue = "" + private var deptId = "" + private var deviceState = "" + private var areaId = "" + + override fun initLayoutView(): Int = R.layout.activity_device_search + + override fun setupTopBarLayout() { + titleView.text = "设备查询" + } + + override fun initData() { + val userDeviceJson = SaveKeyValues.getValue(Constant.USER_DEVICE_TYPE, "") as String + if (userDeviceJson.isNotBlank()) { + authenticatedType = Gson().fromJson( + userDeviceJson, object : TypeToken>() {}.type + ) + } + deviceViewModel = ViewModelProvider(this).get(DeviceViewModel::class.java) + authenticateViewModel = ViewModelProvider(this).get(AuthenticateViewModel::class.java) + areaViewModel = ViewModelProvider(this).get(AreaViewModel::class.java) + } + + override fun initEvent() { + deviceTypeView.setOnClickListener { + /** + * 获取全部设备类型 + * */ + deviceViewModel.obtainDeviceType() + } + deviceViewModel.typeModel.observe(this, { + if (it.code == 200) { + val authenticatedModel: MutableList = ArrayList() + it.data?.forEach { deviceModel -> + if (deviceModel.value in authenticatedType) { + authenticatedModel.add(deviceModel) + } + } + val sheetBuilder = QMUIBottomSheet.BottomListSheetBuilder(this) + sheetBuilder.setTitle("设备类型") + authenticatedModel.forEach { deviceModel -> + sheetBuilder.addItem(deviceModel.name) + } + sheetBuilder.setGravityCenter(true) + .setOnSheetItemClickListener { dialog, _, position, tag -> + deviceTypeView.text = tag + this.deviceTypeValue = authenticatedModel[position].value.toString() + + dialog.dismiss() + }.build().show() + } + }) + + ownerShipView.setOnClickListener { + authenticateViewModel.obtainOwnerShip("03") + } + authenticateViewModel.resultModel.observe(this, { + if (it.code == 200) { + val ownerShipModel: MutableList = ArrayList() + it.data?.list?.forEach { listBean -> + ownerShipModel.add(listBean) + } + val sheetBuilder = QMUIBottomSheet.BottomListSheetBuilder(this) + sheetBuilder.setTitle("权属单位") + ownerShipModel.forEach { model -> + sheetBuilder.addItem(model.name) + } + sheetBuilder.setGravityCenter(true) + .setOnSheetItemClickListener { dialog, _, position, tag -> + ownerShipView.text = tag + this.deptId = ownerShipModel[position].id.toString() + + dialog.dismiss() + }.build().show() + } + }) + + deviceStateView.setOnClickListener { + QMUIBottomSheet.BottomListSheetBuilder(this) + .setTitle("在线情况") + .addItem("在线") + .addItem("离线") + .setGravityCenter(true) + .setOnSheetItemClickListener { dialog, _, _, tag -> + deviceStateView.text = tag + this.deviceState = if (tag == "在线") { + "1" + } else { + "0" + } + + dialog.dismiss() + }.build().show() + } + + areaView.setOnClickListener { + areaViewModel.obtainArea() + } + areaViewModel.areaModel.observe(this, { + if (it.code == 200) { + val firstLevelArea: MutableList = ArrayList() + val secondLevelArea: MutableList = ArrayList() + val thirdLevelArea: MutableList = ArrayList() + it.data?.forEach { dataBean -> + when (dataBean.level) { + 2 -> firstLevelArea.add(dataBean) + 3 -> secondLevelArea.add(dataBean) + 4 -> thirdLevelArea.add(dataBean) + } + } + + // 绑定区域 + BottomAreaSheet.Builder() + .setContext(this) + .setFirstAreaData(firstLevelArea) + .setSecondAreaData(secondLevelArea) + .setThirdAreaData(thirdLevelArea) + .setOnActionSheetListener(object : BottomAreaSheet.OnActionSheetListener { + override fun onAreaSelected(area: String?, id: String?) { + areaView.text = area + areaId = id.toString() + } + }).build().show() + } + }) + + searchButton.setChangeAlphaWhenPress(true) + searchButton.setOnClickListener { + //页面跳转,将查询参数传过去 + navigatePageTo( + DeviceSearchResultActivity::class.java, addAll( + wellCodeView.text.toString().trim(), + deviceTypeValue, + deptId, + deviceState, + areaId + ) + ) + } + + clearButton.setChangeAlphaWhenPress(true) + clearButton.setOnClickListener { + wellCodeView.setText("") + deviceTypeView.text = "" + ownerShipView.text = "" + deviceStateView.text = "" + areaView.text = "" + } + } +} \ No newline at end of file diff --git a/app/src/main/java/com/casic/qd/smartwell/view/SearchRecordActivity.kt b/app/src/main/java/com/casic/qd/smartwell/view/SearchRecordActivity.kt deleted file mode 100644 index 8cab864..0000000 --- a/app/src/main/java/com/casic/qd/smartwell/view/SearchRecordActivity.kt +++ /dev/null @@ -1,184 +0,0 @@ -package com.casic.qd.smartwell.view - -import androidx.lifecycle.ViewModelProvider -import com.casic.qd.smartwell.R -import com.casic.qd.smartwell.base.BaseActivity -import com.casic.qd.smartwell.extensions.addAll -import com.casic.qd.smartwell.extensions.navigatePageTo -import com.casic.qd.smartwell.model.AreaModel -import com.casic.qd.smartwell.model.DeviceTypeModel -import com.casic.qd.smartwell.model.OwnerShipModel -import com.casic.qd.smartwell.utils.Constant -import com.casic.qd.smartwell.utils.SaveKeyValues -import com.casic.qd.smartwell.vm.AreaViewModel -import com.casic.qd.smartwell.vm.AuthenticateViewModel -import com.casic.qd.smartwell.vm.DeviceViewModel -import com.casic.qd.smartwell.widgets.BottomAreaSheet -import com.google.gson.Gson -import com.google.gson.reflect.TypeToken -import com.qmuiteam.qmui.widget.dialog.QMUIBottomSheet -import kotlinx.android.synthetic.main.activity_search_record.* -import kotlinx.android.synthetic.main.include_base_title.* - -/** - * @author a203 - * @description 记录查询界面 - * @date 2022/2/17 14:33 - * @email 290677893@qq.com - */ -class SearchRecordActivity : BaseActivity() { - - private lateinit var deviceViewModel: DeviceViewModel - private lateinit var authenticateViewModel: AuthenticateViewModel - private lateinit var areaViewModel: AreaViewModel - private var authenticatedType: MutableList = ArrayList() - private var deviceTypeValue = "" - private var deptId = "" - private var deviceState = "" - private var areaId = "" - - override fun initLayoutView(): Int = R.layout.activity_search_record - - override fun setupTopBarLayout() { - titleView.text = "记录查询" - } - - override fun initData() { - val userDeviceJson = SaveKeyValues.getValue(Constant.USER_DEVICE_TYPE, "") as String - if (userDeviceJson.isNotBlank()) { - authenticatedType = Gson().fromJson( - userDeviceJson, object : TypeToken>() {}.type - ) - } - deviceViewModel = ViewModelProvider(this).get(DeviceViewModel::class.java) - authenticateViewModel = ViewModelProvider(this).get(AuthenticateViewModel::class.java) - areaViewModel = ViewModelProvider(this).get(AreaViewModel::class.java) - } - - override fun initEvent() { - deviceTypeView.setOnClickListener { - /** - * 获取全部设备类型 - * */ - deviceViewModel.obtainDeviceType() - } - deviceViewModel.typeModel.observe(this, { - if (it.code == 200) { - val authenticatedModel: MutableList = ArrayList() - it.data?.forEach { deviceModel -> - if (deviceModel.value in authenticatedType) { - authenticatedModel.add(deviceModel) - } - } - val sheetBuilder = QMUIBottomSheet.BottomListSheetBuilder(this) - sheetBuilder.setTitle("设备类型") - authenticatedModel.forEach { deviceModel -> - sheetBuilder.addItem(deviceModel.name) - } - sheetBuilder.setGravityCenter(true) - .setOnSheetItemClickListener { dialog, _, position, tag -> - deviceTypeView.text = tag - this.deviceTypeValue = authenticatedModel[position].value.toString() - - dialog.dismiss() - }.build().show() - } - }) - - ownerShipView.setOnClickListener { - authenticateViewModel.obtainOwnerShip("03") - } - authenticateViewModel.resultModel.observe(this, { - if (it.code == 200) { - val ownerShipModel: MutableList = ArrayList() - it.data?.list?.forEach { listBean -> - ownerShipModel.add(listBean) - } - val sheetBuilder = QMUIBottomSheet.BottomListSheetBuilder(this) - sheetBuilder.setTitle("权属单位") - ownerShipModel.forEach { model -> - sheetBuilder.addItem(model.name) - } - sheetBuilder.setGravityCenter(true) - .setOnSheetItemClickListener { dialog, _, position, tag -> - ownerShipView.text = tag - this.deptId = ownerShipModel[position].id.toString() - - dialog.dismiss() - }.build().show() - } - }) - - deviceStateView.setOnClickListener { - QMUIBottomSheet.BottomListSheetBuilder(this) - .setTitle("在线情况") - .addItem("在线") - .addItem("离线") - .setGravityCenter(true) - .setOnSheetItemClickListener { dialog, _, _, tag -> - deviceStateView.text = tag - this.deviceState = if (tag == "在线") { - "1" - } else { - "0" - } - - dialog.dismiss() - }.build().show() - } - - areaView.setOnClickListener { - areaViewModel.obtainArea() - } - areaViewModel.areaModel.observe(this, { - if (it.code == 200) { - val firstLevelArea: MutableList = ArrayList() - val secondLevelArea: MutableList = ArrayList() - val thirdLevelArea: MutableList = ArrayList() - it.data?.forEach { dataBean -> - when (dataBean.level) { - 2 -> firstLevelArea.add(dataBean) - 3 -> secondLevelArea.add(dataBean) - 4 -> thirdLevelArea.add(dataBean) - } - } - - // 绑定区域 - BottomAreaSheet.Builder() - .setContext(this) - .setFirstAreaData(firstLevelArea) - .setSecondAreaData(secondLevelArea) - .setThirdAreaData(thirdLevelArea) - .setOnActionSheetListener(object : BottomAreaSheet.OnActionSheetListener { - override fun onAreaSelected(area: String?, id: String?) { - areaView.text = area - areaId = id.toString() - } - }).build().show() - } - }) - - searchButton.setChangeAlphaWhenPress(true) - searchButton.setOnClickListener { - //页面跳转,将查询参数传过去 - navigatePageTo( - DeviceSearchResultActivity::class.java, addAll( - wellCodeView.text.toString().trim(), - deviceTypeValue, - deptId, - deviceState, - areaId - ) - ) - } - - clearButton.setChangeAlphaWhenPress(true) - clearButton.setOnClickListener { - wellCodeView.setText("") - deviceTypeView.text = "" - ownerShipView.text = "" - deviceStateView.text = "" - areaView.text = "" - } - } -} \ No newline at end of file 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 21c4286..3272cfe 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 @@ -15,6 +15,7 @@ import com.casic.qd.smartwell.widgets.DateSelectDialog import com.github.mikephil.charting.data.BarEntry import com.github.mikephil.charting.data.PieEntry +import com.jzxiang.pickerview.data.Type import kotlinx.android.synthetic.main.activity_statistics.* import kotlinx.android.synthetic.main.include_base_title.* import java.util.* @@ -97,7 +98,6 @@ 5 -> { DateSelectDialog.Builder() .setContext(context) - .setFragmentManager(supportFragmentManager) .setTitle("选择日期") .setNegativeButton("取消") .setPositiveButton("选好了") @@ -113,7 +113,10 @@ //选择取消就默认加载近7天的数据 periodSpinner.setSelection(3) } - }).build().show() + }) + .setFragmentManager(supportFragmentManager) + .setCalendarType(Type.YEAR_MONTH_DAY) + .build().show() } } } @@ -200,7 +203,6 @@ 5 -> { DateSelectDialog.Builder() .setContext(context) - .setFragmentManager(supportFragmentManager) .setTitle("选择日期") .setNegativeButton("取消") .setPositiveButton("选好了") @@ -216,7 +218,10 @@ //选择取消就默认加载近7天的数据 periodSpinner.setSelection(3) } - }).build().show() + }) + .setFragmentManager(supportFragmentManager) + .setCalendarType(Type.YEAR_MONTH_DAY) + .build().show() } } } diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml index 82386c9..3832c68 100644 --- a/app/src/main/AndroidManifest.xml +++ b/app/src/main/AndroidManifest.xml @@ -48,7 +48,7 @@ - + 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 216e7cc..f53e831 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,6 +15,14 @@ return dateFormat.format(calendar.time) } +fun Long.timestampToLastWeekTime(): String { + val dateFormat = SimpleDateFormat("yyyy-MM-dd HH:mm:ss", Locale.CHINA) + val calendar = Calendar.getInstance() + calendar.time = Date(this) + calendar.set(Calendar.DAY_OF_YEAR, calendar.get(Calendar.DAY_OF_YEAR) - 6) + return dateFormat.format(calendar.time) +} + fun Long.timestampToLastMonthDate(): String { val dateFormat = SimpleDateFormat("yyyy-MM-dd", Locale.CHINA) val calendar = Calendar.getInstance() diff --git a/app/src/main/java/com/casic/qd/smartwell/model/DayDataModel.kt b/app/src/main/java/com/casic/qd/smartwell/model/DayDataModel.kt new file mode 100644 index 0000000..18d1399 --- /dev/null +++ b/app/src/main/java/com/casic/qd/smartwell/model/DayDataModel.kt @@ -0,0 +1,13 @@ +package com.casic.qd.smartwell.model + +class DayDataModel { + var code = 0 + var data: List? = null + var message: String? = null + var isSuccess = false + + class DataBean { + var time: String? = null + var value: String? = null + } +} \ No newline at end of file diff --git a/app/src/main/java/com/casic/qd/smartwell/model/TotalDataModel.kt b/app/src/main/java/com/casic/qd/smartwell/model/TotalDataModel.kt new file mode 100644 index 0000000..30bf829 --- /dev/null +++ b/app/src/main/java/com/casic/qd/smartwell/model/TotalDataModel.kt @@ -0,0 +1,14 @@ +package com.casic.qd.smartwell.model + +class TotalDataModel { + var code = 0 + var data: List? = null + var message: String? = null + var isSuccess = false + + class DataBean { + var total: String? = null + var deviceState: String? = null + var uptime: String? = null + } +} \ No newline at end of file diff --git a/app/src/main/java/com/casic/qd/smartwell/utils/retrofit/RetrofitService.kt b/app/src/main/java/com/casic/qd/smartwell/utils/retrofit/RetrofitService.kt index c5bf469..0c80ee9 100644 --- a/app/src/main/java/com/casic/qd/smartwell/utils/retrofit/RetrofitService.kt +++ b/app/src/main/java/com/casic/qd/smartwell/utils/retrofit/RetrofitService.kt @@ -202,4 +202,26 @@ @Query("offset") offset: Int, @Query("limit") limit: Int ): String + + /** + * 获取设备日用水量 + * */ + @GET("/device/sevenDayData") + suspend fun obtainSevenDayData( + @Header("token") token: String, + @Query("devCode") devCode: String?, + @Query("beginTime") beginTime: String?, + @Query("endTime") endTime: String? + ): String + + /** + * 获取设备日用水量 + * */ + @GET("/device/totalData") + suspend fun obtainTotalDayData( + @Header("token") token: String, + @Query("devCode") devCode: String?, + @Query("beginTime") beginTime: String?, + @Query("endTime") endTime: String? + ): String } \ No newline at end of file diff --git a/app/src/main/java/com/casic/qd/smartwell/utils/retrofit/RetrofitServiceManager.kt b/app/src/main/java/com/casic/qd/smartwell/utils/retrofit/RetrofitServiceManager.kt index 6f728e0..a8b320f 100644 --- a/app/src/main/java/com/casic/qd/smartwell/utils/retrofit/RetrofitServiceManager.kt +++ b/app/src/main/java/com/casic/qd/smartwell/utils/retrofit/RetrofitServiceManager.kt @@ -204,4 +204,18 @@ Constant.PAGE_LIMIT ) } + + /** + * 获取设备日用水量 + */ + suspend fun obtainSevenDayData(devCode: String?, beginTime: String?, endTime: String?): String { + return api.obtainSevenDayData(AuthenticationHelper.token!!, devCode, beginTime, endTime) + } + + /** + * 获取设备累计用水量 + */ + suspend fun obtainTotalDayData(devCode: String?, beginTime: String?, endTime: String?): String { + return api.obtainTotalDayData(AuthenticationHelper.token!!, devCode, beginTime, endTime) + } } \ No newline at end of file diff --git a/app/src/main/java/com/casic/qd/smartwell/view/DeviceDataDetailActivity.kt b/app/src/main/java/com/casic/qd/smartwell/view/DeviceDataDetailActivity.kt index 7029d17..a8a2695 100644 --- a/app/src/main/java/com/casic/qd/smartwell/view/DeviceDataDetailActivity.kt +++ b/app/src/main/java/com/casic/qd/smartwell/view/DeviceDataDetailActivity.kt @@ -1,22 +1,109 @@ package com.casic.qd.smartwell.view +import androidx.lifecycle.ViewModelProvider import com.casic.qd.smartwell.R import com.casic.qd.smartwell.base.BaseActivity -import kotlinx.android.synthetic.main.include_base_title.* +import com.casic.qd.smartwell.extensions.convertColor +import com.casic.qd.smartwell.extensions.timestampToLastWeekTime +import com.casic.qd.smartwell.extensions.timestampToTime +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.DeviceViewModel +import com.casic.qd.smartwell.widgets.DateSelectDialog +import com.github.mikephil.charting.data.Entry +import com.jzxiang.pickerview.data.Type +import kotlinx.android.synthetic.main.activity_device_data_detail.* +import kotlinx.android.synthetic.main.activity_main.rightOptionView +import kotlinx.android.synthetic.main.activity_main.titleView class DeviceDataDetailActivity : BaseActivity() { - override fun initLayoutView(): Int = R.layout.activity_device_detail + private val kTag = "DeviceDataDetailActivity" + private lateinit var deviceCode: String + private lateinit var deviceViewModel: DeviceViewModel + + override fun initLayoutView(): Int = R.layout.activity_device_data_detail override fun setupTopBarLayout() { - titleView.text = "历史数据" + deviceCode = intent.getStringExtra(Constant.INTENT_PARAM)!! + titleView.text = String.format("${deviceCode}历史数据") } override fun initData() { - + deviceViewModel = ViewModelProvider(this).get(DeviceViewModel::class.java) } override fun initEvent() { + rightOptionView.setOnClickListener { + DateSelectDialog.Builder() + .setContext(this) + .setTitle("选择日期") + .setNegativeButton("取消") + .setPositiveButton("选好了") + .setOnDialogButtonClickListener(object : + DateSelectDialog.OnDialogButtonClickListener { + override fun onConfirmClick(startDate: String, endDate: String) { + deviceViewModel.obtainSevenDayData(deviceCode, startDate, endDate) + deviceViewModel.obtainTotalDayData(deviceCode, startDate, endDate) + } + override fun onCancelClick() { + //选择取消就默认加载近7天的数据 + val time = System.currentTimeMillis() + val startTime = time.timestampToLastWeekTime() + val endTime = time.timestampToTime() + deviceViewModel.obtainSevenDayData(deviceCode, startTime, endTime) + deviceViewModel.obtainTotalDayData(deviceCode, startTime, endTime) + } + }) + .setFragmentManager(supportFragmentManager) + .setCalendarType(Type.ALL) + .build().show() + } + + //默认加载近一周的数据 + val time = System.currentTimeMillis() + val startTime = time.timestampToLastWeekTime() + val endTime = time.timestampToTime() + deviceViewModel.obtainSevenDayData(deviceCode, startTime, endTime) + deviceViewModel.dayDataModel.observe(this, { + if (it.code == 200) { + val entryModels: MutableList = ArrayList() + val xAxisDate: MutableList = ArrayList() + val entries: ArrayList = ArrayList() + val entryModel = LineChartEntryModel() + + entryModel.lineColor = Constant.COLORS[7].convertColor() + it.data?.forEachIndexed { index, dataBean -> + val split = dataBean.time.toString().split("-") + xAxisDate.add("${split[1]}/${split[2]}") + + entries.add(Entry(index.toFloat(), dataBean.value!!.toFloat(), "日用水量")) + } + entryModel.entryList = entries + entryModels.add(entryModel) + ChartViewHelper.setLineChartData(dayWaterLineChart, xAxisDate, entryModels) + } + }) + + deviceViewModel.obtainTotalDayData(deviceCode, startTime, endTime) + deviceViewModel.totalDataModel.observe(this, { + val entryModels: MutableList = ArrayList() + val xAxisDate: MutableList = ArrayList() + val entries: ArrayList = ArrayList() + val entryModel = LineChartEntryModel() + + entryModel.lineColor = Constant.COLORS[7].convertColor() + it.data?.forEachIndexed { index, dataBean -> + val split = dataBean.uptime.toString().split(" ")[0].split("-") + xAxisDate.add("${split[1]}/${split[2]}") + + entries.add(Entry(index.toFloat(), dataBean.total!!.toFloat(), "总用水量")) + } + entryModel.entryList = entries + entryModels.add(entryModel) + ChartViewHelper.setLineChartData(totalWaterLineChart, xAxisDate, entryModels) + }) } } \ No newline at end of file diff --git a/app/src/main/java/com/casic/qd/smartwell/view/MainActivity.kt b/app/src/main/java/com/casic/qd/smartwell/view/MainActivity.kt index 02435a3..3f4bb3c 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 @@ -1,7 +1,6 @@ package com.casic.qd.smartwell.view import android.content.Context -import android.content.Intent import android.os.Handler import android.os.Looper import android.os.Message @@ -22,6 +21,7 @@ import com.casic.qd.smartwell.vm.WaterStatisticsViewModel import com.github.mikephil.charting.data.Entry import com.pengxh.app.multilib.widget.dialog.AlertControlDialog +import com.pengxh.app.multilib.widget.dialog.BottomActionSheet import com.youth.banner.Banner import com.youth.banner.adapter.BannerImageAdapter import com.youth.banner.holder.BannerImageHolder @@ -100,9 +100,20 @@ HomeRecycleAdapter.OnGridItemClickListener { override fun onClick(position: Int) { when (position) { - 0 -> startActivity(Intent(context, MapActivity::class.java)) - 1 -> startActivity(Intent(context, SearchRecordActivity::class.java)) - 2 -> startActivity(Intent(context, StatisticsActivity::class.java)) + 0 -> context.navigatePageTo(MapActivity::class.java) + 1 -> { + BottomActionSheet.Builder() + .setContext(context) + .setActionItemTitles(arrayOf("设备", "数据")) + .setOnActionSheetListener { index -> + when (index) { + 0 -> context.navigatePageTo(SearchDeviceActivity::class.java) + 1 -> context.navigatePageTo(SearchDataActivity::class.java) + } + }.build().show() + + } + 2 -> context.navigatePageTo(StatisticsActivity::class.java) } } }) diff --git a/app/src/main/java/com/casic/qd/smartwell/view/SearchAlarmActivity.kt b/app/src/main/java/com/casic/qd/smartwell/view/SearchAlarmActivity.kt index 8f54163..5285a9f 100644 --- a/app/src/main/java/com/casic/qd/smartwell/view/SearchAlarmActivity.kt +++ b/app/src/main/java/com/casic/qd/smartwell/view/SearchAlarmActivity.kt @@ -13,11 +13,6 @@ import com.jzxiang.pickerview.data.Type import com.qmuiteam.qmui.widget.dialog.QMUIBottomSheet.BottomListSheetBuilder import kotlinx.android.synthetic.main.activity_alarm_search.* -import kotlinx.android.synthetic.main.activity_alarm_search.areaView -import kotlinx.android.synthetic.main.activity_alarm_search.clearButton -import kotlinx.android.synthetic.main.activity_alarm_search.searchButton -import kotlinx.android.synthetic.main.activity_alarm_search.wellCodeView -import kotlinx.android.synthetic.main.activity_search_record.* import kotlinx.android.synthetic.main.include_base_title.* class SearchAlarmActivity : BaseActivity() { diff --git a/app/src/main/java/com/casic/qd/smartwell/view/SearchDataActivity.kt b/app/src/main/java/com/casic/qd/smartwell/view/SearchDataActivity.kt new file mode 100644 index 0000000..e6a38e4 --- /dev/null +++ b/app/src/main/java/com/casic/qd/smartwell/view/SearchDataActivity.kt @@ -0,0 +1,168 @@ +package com.casic.qd.smartwell.view + +import com.casic.qd.smartwell.R +import com.casic.qd.smartwell.base.BaseActivity +import kotlinx.android.synthetic.main.include_base_title.* + +/** + * @author a203 + * @description 记录查询界面 + * @date 2022/2/17 14:33 + * @email 290677893@qq.com + */ +class SearchDataActivity : BaseActivity() { + +// private lateinit var deviceViewModel: DeviceViewModel +// private lateinit var authenticateViewModel: AuthenticateViewModel +// private lateinit var areaViewModel: AreaViewModel +// private var authenticatedType: MutableList = ArrayList() +// private var deviceTypeValue = "" +// private var deptId = "" +// private var deviceState = "" +// private var areaId = "" + + override fun initLayoutView(): Int = R.layout.activity_data_search + + override fun setupTopBarLayout() { + titleView.text = "数据查询" + } + + override fun initData() { +// val userDeviceJson = SaveKeyValues.getValue(Constant.USER_DEVICE_TYPE, "") as String +// if (userDeviceJson.isNotBlank()) { +// authenticatedType = Gson().fromJson( +// userDeviceJson, object : TypeToken>() {}.type +// ) +// } +// deviceViewModel = ViewModelProvider(this).get(DeviceViewModel::class.java) +// authenticateViewModel = ViewModelProvider(this).get(AuthenticateViewModel::class.java) +// areaViewModel = ViewModelProvider(this).get(AreaViewModel::class.java) + } + + override fun initEvent() { +// deviceTypeView.setOnClickListener { +// /** +// * 获取全部设备类型 +// * */ +// deviceViewModel.obtainDeviceType() +// } +// deviceViewModel.typeModel.observe(this, { +// if (it.code == 200) { +// val authenticatedModel: MutableList = ArrayList() +// it.data?.forEach { deviceModel -> +// if (deviceModel.value in authenticatedType) { +// authenticatedModel.add(deviceModel) +// } +// } +// val sheetBuilder = QMUIBottomSheet.BottomListSheetBuilder(this) +// sheetBuilder.setTitle("设备类型") +// authenticatedModel.forEach { deviceModel -> +// sheetBuilder.addItem(deviceModel.name) +// } +// sheetBuilder.setGravityCenter(true) +// .setOnSheetItemClickListener { dialog, _, position, tag -> +// deviceTypeView.text = tag +// this.deviceTypeValue = authenticatedModel[position].value.toString() +// +// dialog.dismiss() +// }.build().show() +// } +// }) +// +// ownerShipView.setOnClickListener { +// authenticateViewModel.obtainOwnerShip("03") +// } +// authenticateViewModel.resultModel.observe(this, { +// if (it.code == 200) { +// val ownerShipModel: MutableList = ArrayList() +// it.data?.list?.forEach { listBean -> +// ownerShipModel.add(listBean) +// } +// val sheetBuilder = QMUIBottomSheet.BottomListSheetBuilder(this) +// sheetBuilder.setTitle("权属单位") +// ownerShipModel.forEach { model -> +// sheetBuilder.addItem(model.name) +// } +// sheetBuilder.setGravityCenter(true) +// .setOnSheetItemClickListener { dialog, _, position, tag -> +// ownerShipView.text = tag +// this.deptId = ownerShipModel[position].id.toString() +// +// dialog.dismiss() +// }.build().show() +// } +// }) +// +// deviceStateView.setOnClickListener { +// QMUIBottomSheet.BottomListSheetBuilder(this) +// .setTitle("在线情况") +// .addItem("在线") +// .addItem("离线") +// .setGravityCenter(true) +// .setOnSheetItemClickListener { dialog, _, _, tag -> +// deviceStateView.text = tag +// this.deviceState = if (tag == "在线") { +// "1" +// } else { +// "0" +// } +// +// dialog.dismiss() +// }.build().show() +// } +// +// areaView.setOnClickListener { +// areaViewModel.obtainArea() +// } +// areaViewModel.areaModel.observe(this, { +// if (it.code == 200) { +// val firstLevelArea: MutableList = ArrayList() +// val secondLevelArea: MutableList = ArrayList() +// val thirdLevelArea: MutableList = ArrayList() +// it.data?.forEach { dataBean -> +// when (dataBean.level) { +// 2 -> firstLevelArea.add(dataBean) +// 3 -> secondLevelArea.add(dataBean) +// 4 -> thirdLevelArea.add(dataBean) +// } +// } +// +// // 绑定区域 +// BottomAreaSheet.Builder() +// .setContext(this) +// .setFirstAreaData(firstLevelArea) +// .setSecondAreaData(secondLevelArea) +// .setThirdAreaData(thirdLevelArea) +// .setOnActionSheetListener(object : BottomAreaSheet.OnActionSheetListener { +// override fun onAreaSelected(area: String?, id: String?) { +// areaView.text = area +// areaId = id.toString() +// } +// }).build().show() +// } +// }) +// +// searchButton.setChangeAlphaWhenPress(true) +// searchButton.setOnClickListener { +// //页面跳转,将查询参数传过去 +// navigatePageTo( +// DeviceSearchResultActivity::class.java, addAll( +// wellCodeView.text.toString().trim(), +// deviceTypeValue, +// deptId, +// deviceState, +// areaId +// ) +// ) +// } +// +// clearButton.setChangeAlphaWhenPress(true) +// clearButton.setOnClickListener { +// wellCodeView.setText("") +// deviceTypeView.text = "" +// ownerShipView.text = "" +// deviceStateView.text = "" +// areaView.text = "" +// } + } +} \ No newline at end of file diff --git a/app/src/main/java/com/casic/qd/smartwell/view/SearchDeviceActivity.kt b/app/src/main/java/com/casic/qd/smartwell/view/SearchDeviceActivity.kt new file mode 100644 index 0000000..cf0c05f --- /dev/null +++ b/app/src/main/java/com/casic/qd/smartwell/view/SearchDeviceActivity.kt @@ -0,0 +1,184 @@ +package com.casic.qd.smartwell.view + +import androidx.lifecycle.ViewModelProvider +import com.casic.qd.smartwell.R +import com.casic.qd.smartwell.base.BaseActivity +import com.casic.qd.smartwell.extensions.addAll +import com.casic.qd.smartwell.extensions.navigatePageTo +import com.casic.qd.smartwell.model.AreaModel +import com.casic.qd.smartwell.model.DeviceTypeModel +import com.casic.qd.smartwell.model.OwnerShipModel +import com.casic.qd.smartwell.utils.Constant +import com.casic.qd.smartwell.utils.SaveKeyValues +import com.casic.qd.smartwell.vm.AreaViewModel +import com.casic.qd.smartwell.vm.AuthenticateViewModel +import com.casic.qd.smartwell.vm.DeviceViewModel +import com.casic.qd.smartwell.widgets.BottomAreaSheet +import com.google.gson.Gson +import com.google.gson.reflect.TypeToken +import com.qmuiteam.qmui.widget.dialog.QMUIBottomSheet +import kotlinx.android.synthetic.main.activity_device_search.* +import kotlinx.android.synthetic.main.include_base_title.* + +/** + * @author a203 + * @description 记录查询界面 + * @date 2022/2/17 14:33 + * @email 290677893@qq.com + */ +class SearchDeviceActivity : BaseActivity() { + + private lateinit var deviceViewModel: DeviceViewModel + private lateinit var authenticateViewModel: AuthenticateViewModel + private lateinit var areaViewModel: AreaViewModel + private var authenticatedType: MutableList = ArrayList() + private var deviceTypeValue = "" + private var deptId = "" + private var deviceState = "" + private var areaId = "" + + override fun initLayoutView(): Int = R.layout.activity_device_search + + override fun setupTopBarLayout() { + titleView.text = "设备查询" + } + + override fun initData() { + val userDeviceJson = SaveKeyValues.getValue(Constant.USER_DEVICE_TYPE, "") as String + if (userDeviceJson.isNotBlank()) { + authenticatedType = Gson().fromJson( + userDeviceJson, object : TypeToken>() {}.type + ) + } + deviceViewModel = ViewModelProvider(this).get(DeviceViewModel::class.java) + authenticateViewModel = ViewModelProvider(this).get(AuthenticateViewModel::class.java) + areaViewModel = ViewModelProvider(this).get(AreaViewModel::class.java) + } + + override fun initEvent() { + deviceTypeView.setOnClickListener { + /** + * 获取全部设备类型 + * */ + deviceViewModel.obtainDeviceType() + } + deviceViewModel.typeModel.observe(this, { + if (it.code == 200) { + val authenticatedModel: MutableList = ArrayList() + it.data?.forEach { deviceModel -> + if (deviceModel.value in authenticatedType) { + authenticatedModel.add(deviceModel) + } + } + val sheetBuilder = QMUIBottomSheet.BottomListSheetBuilder(this) + sheetBuilder.setTitle("设备类型") + authenticatedModel.forEach { deviceModel -> + sheetBuilder.addItem(deviceModel.name) + } + sheetBuilder.setGravityCenter(true) + .setOnSheetItemClickListener { dialog, _, position, tag -> + deviceTypeView.text = tag + this.deviceTypeValue = authenticatedModel[position].value.toString() + + dialog.dismiss() + }.build().show() + } + }) + + ownerShipView.setOnClickListener { + authenticateViewModel.obtainOwnerShip("03") + } + authenticateViewModel.resultModel.observe(this, { + if (it.code == 200) { + val ownerShipModel: MutableList = ArrayList() + it.data?.list?.forEach { listBean -> + ownerShipModel.add(listBean) + } + val sheetBuilder = QMUIBottomSheet.BottomListSheetBuilder(this) + sheetBuilder.setTitle("权属单位") + ownerShipModel.forEach { model -> + sheetBuilder.addItem(model.name) + } + sheetBuilder.setGravityCenter(true) + .setOnSheetItemClickListener { dialog, _, position, tag -> + ownerShipView.text = tag + this.deptId = ownerShipModel[position].id.toString() + + dialog.dismiss() + }.build().show() + } + }) + + deviceStateView.setOnClickListener { + QMUIBottomSheet.BottomListSheetBuilder(this) + .setTitle("在线情况") + .addItem("在线") + .addItem("离线") + .setGravityCenter(true) + .setOnSheetItemClickListener { dialog, _, _, tag -> + deviceStateView.text = tag + this.deviceState = if (tag == "在线") { + "1" + } else { + "0" + } + + dialog.dismiss() + }.build().show() + } + + areaView.setOnClickListener { + areaViewModel.obtainArea() + } + areaViewModel.areaModel.observe(this, { + if (it.code == 200) { + val firstLevelArea: MutableList = ArrayList() + val secondLevelArea: MutableList = ArrayList() + val thirdLevelArea: MutableList = ArrayList() + it.data?.forEach { dataBean -> + when (dataBean.level) { + 2 -> firstLevelArea.add(dataBean) + 3 -> secondLevelArea.add(dataBean) + 4 -> thirdLevelArea.add(dataBean) + } + } + + // 绑定区域 + BottomAreaSheet.Builder() + .setContext(this) + .setFirstAreaData(firstLevelArea) + .setSecondAreaData(secondLevelArea) + .setThirdAreaData(thirdLevelArea) + .setOnActionSheetListener(object : BottomAreaSheet.OnActionSheetListener { + override fun onAreaSelected(area: String?, id: String?) { + areaView.text = area + areaId = id.toString() + } + }).build().show() + } + }) + + searchButton.setChangeAlphaWhenPress(true) + searchButton.setOnClickListener { + //页面跳转,将查询参数传过去 + navigatePageTo( + DeviceSearchResultActivity::class.java, addAll( + wellCodeView.text.toString().trim(), + deviceTypeValue, + deptId, + deviceState, + areaId + ) + ) + } + + clearButton.setChangeAlphaWhenPress(true) + clearButton.setOnClickListener { + wellCodeView.setText("") + deviceTypeView.text = "" + ownerShipView.text = "" + deviceStateView.text = "" + areaView.text = "" + } + } +} \ No newline at end of file diff --git a/app/src/main/java/com/casic/qd/smartwell/view/SearchRecordActivity.kt b/app/src/main/java/com/casic/qd/smartwell/view/SearchRecordActivity.kt deleted file mode 100644 index 8cab864..0000000 --- a/app/src/main/java/com/casic/qd/smartwell/view/SearchRecordActivity.kt +++ /dev/null @@ -1,184 +0,0 @@ -package com.casic.qd.smartwell.view - -import androidx.lifecycle.ViewModelProvider -import com.casic.qd.smartwell.R -import com.casic.qd.smartwell.base.BaseActivity -import com.casic.qd.smartwell.extensions.addAll -import com.casic.qd.smartwell.extensions.navigatePageTo -import com.casic.qd.smartwell.model.AreaModel -import com.casic.qd.smartwell.model.DeviceTypeModel -import com.casic.qd.smartwell.model.OwnerShipModel -import com.casic.qd.smartwell.utils.Constant -import com.casic.qd.smartwell.utils.SaveKeyValues -import com.casic.qd.smartwell.vm.AreaViewModel -import com.casic.qd.smartwell.vm.AuthenticateViewModel -import com.casic.qd.smartwell.vm.DeviceViewModel -import com.casic.qd.smartwell.widgets.BottomAreaSheet -import com.google.gson.Gson -import com.google.gson.reflect.TypeToken -import com.qmuiteam.qmui.widget.dialog.QMUIBottomSheet -import kotlinx.android.synthetic.main.activity_search_record.* -import kotlinx.android.synthetic.main.include_base_title.* - -/** - * @author a203 - * @description 记录查询界面 - * @date 2022/2/17 14:33 - * @email 290677893@qq.com - */ -class SearchRecordActivity : BaseActivity() { - - private lateinit var deviceViewModel: DeviceViewModel - private lateinit var authenticateViewModel: AuthenticateViewModel - private lateinit var areaViewModel: AreaViewModel - private var authenticatedType: MutableList = ArrayList() - private var deviceTypeValue = "" - private var deptId = "" - private var deviceState = "" - private var areaId = "" - - override fun initLayoutView(): Int = R.layout.activity_search_record - - override fun setupTopBarLayout() { - titleView.text = "记录查询" - } - - override fun initData() { - val userDeviceJson = SaveKeyValues.getValue(Constant.USER_DEVICE_TYPE, "") as String - if (userDeviceJson.isNotBlank()) { - authenticatedType = Gson().fromJson( - userDeviceJson, object : TypeToken>() {}.type - ) - } - deviceViewModel = ViewModelProvider(this).get(DeviceViewModel::class.java) - authenticateViewModel = ViewModelProvider(this).get(AuthenticateViewModel::class.java) - areaViewModel = ViewModelProvider(this).get(AreaViewModel::class.java) - } - - override fun initEvent() { - deviceTypeView.setOnClickListener { - /** - * 获取全部设备类型 - * */ - deviceViewModel.obtainDeviceType() - } - deviceViewModel.typeModel.observe(this, { - if (it.code == 200) { - val authenticatedModel: MutableList = ArrayList() - it.data?.forEach { deviceModel -> - if (deviceModel.value in authenticatedType) { - authenticatedModel.add(deviceModel) - } - } - val sheetBuilder = QMUIBottomSheet.BottomListSheetBuilder(this) - sheetBuilder.setTitle("设备类型") - authenticatedModel.forEach { deviceModel -> - sheetBuilder.addItem(deviceModel.name) - } - sheetBuilder.setGravityCenter(true) - .setOnSheetItemClickListener { dialog, _, position, tag -> - deviceTypeView.text = tag - this.deviceTypeValue = authenticatedModel[position].value.toString() - - dialog.dismiss() - }.build().show() - } - }) - - ownerShipView.setOnClickListener { - authenticateViewModel.obtainOwnerShip("03") - } - authenticateViewModel.resultModel.observe(this, { - if (it.code == 200) { - val ownerShipModel: MutableList = ArrayList() - it.data?.list?.forEach { listBean -> - ownerShipModel.add(listBean) - } - val sheetBuilder = QMUIBottomSheet.BottomListSheetBuilder(this) - sheetBuilder.setTitle("权属单位") - ownerShipModel.forEach { model -> - sheetBuilder.addItem(model.name) - } - sheetBuilder.setGravityCenter(true) - .setOnSheetItemClickListener { dialog, _, position, tag -> - ownerShipView.text = tag - this.deptId = ownerShipModel[position].id.toString() - - dialog.dismiss() - }.build().show() - } - }) - - deviceStateView.setOnClickListener { - QMUIBottomSheet.BottomListSheetBuilder(this) - .setTitle("在线情况") - .addItem("在线") - .addItem("离线") - .setGravityCenter(true) - .setOnSheetItemClickListener { dialog, _, _, tag -> - deviceStateView.text = tag - this.deviceState = if (tag == "在线") { - "1" - } else { - "0" - } - - dialog.dismiss() - }.build().show() - } - - areaView.setOnClickListener { - areaViewModel.obtainArea() - } - areaViewModel.areaModel.observe(this, { - if (it.code == 200) { - val firstLevelArea: MutableList = ArrayList() - val secondLevelArea: MutableList = ArrayList() - val thirdLevelArea: MutableList = ArrayList() - it.data?.forEach { dataBean -> - when (dataBean.level) { - 2 -> firstLevelArea.add(dataBean) - 3 -> secondLevelArea.add(dataBean) - 4 -> thirdLevelArea.add(dataBean) - } - } - - // 绑定区域 - BottomAreaSheet.Builder() - .setContext(this) - .setFirstAreaData(firstLevelArea) - .setSecondAreaData(secondLevelArea) - .setThirdAreaData(thirdLevelArea) - .setOnActionSheetListener(object : BottomAreaSheet.OnActionSheetListener { - override fun onAreaSelected(area: String?, id: String?) { - areaView.text = area - areaId = id.toString() - } - }).build().show() - } - }) - - searchButton.setChangeAlphaWhenPress(true) - searchButton.setOnClickListener { - //页面跳转,将查询参数传过去 - navigatePageTo( - DeviceSearchResultActivity::class.java, addAll( - wellCodeView.text.toString().trim(), - deviceTypeValue, - deptId, - deviceState, - areaId - ) - ) - } - - clearButton.setChangeAlphaWhenPress(true) - clearButton.setOnClickListener { - wellCodeView.setText("") - deviceTypeView.text = "" - ownerShipView.text = "" - deviceStateView.text = "" - areaView.text = "" - } - } -} \ No newline at end of file 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 21c4286..3272cfe 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 @@ -15,6 +15,7 @@ import com.casic.qd.smartwell.widgets.DateSelectDialog import com.github.mikephil.charting.data.BarEntry import com.github.mikephil.charting.data.PieEntry +import com.jzxiang.pickerview.data.Type import kotlinx.android.synthetic.main.activity_statistics.* import kotlinx.android.synthetic.main.include_base_title.* import java.util.* @@ -97,7 +98,6 @@ 5 -> { DateSelectDialog.Builder() .setContext(context) - .setFragmentManager(supportFragmentManager) .setTitle("选择日期") .setNegativeButton("取消") .setPositiveButton("选好了") @@ -113,7 +113,10 @@ //选择取消就默认加载近7天的数据 periodSpinner.setSelection(3) } - }).build().show() + }) + .setFragmentManager(supportFragmentManager) + .setCalendarType(Type.YEAR_MONTH_DAY) + .build().show() } } } @@ -200,7 +203,6 @@ 5 -> { DateSelectDialog.Builder() .setContext(context) - .setFragmentManager(supportFragmentManager) .setTitle("选择日期") .setNegativeButton("取消") .setPositiveButton("选好了") @@ -216,7 +218,10 @@ //选择取消就默认加载近7天的数据 periodSpinner.setSelection(3) } - }).build().show() + }) + .setFragmentManager(supportFragmentManager) + .setCalendarType(Type.YEAR_MONTH_DAY) + .build().show() } } } diff --git a/app/src/main/java/com/casic/qd/smartwell/view/WaterExpandedActivity.kt b/app/src/main/java/com/casic/qd/smartwell/view/WaterExpandedActivity.kt index 251140d..7a63dea 100644 --- a/app/src/main/java/com/casic/qd/smartwell/view/WaterExpandedActivity.kt +++ b/app/src/main/java/com/casic/qd/smartwell/view/WaterExpandedActivity.kt @@ -13,6 +13,7 @@ import com.casic.qd.smartwell.vm.WaterStatisticsViewModel import com.casic.qd.smartwell.widgets.DateSelectDialog import com.github.mikephil.charting.data.Entry +import com.jzxiang.pickerview.data.Type import kotlinx.android.synthetic.main.activity_water_expanded.* import java.util.* import kotlin.collections.ArrayList @@ -86,7 +87,6 @@ 5 -> { DateSelectDialog.Builder() .setContext(context) - .setFragmentManager(supportFragmentManager) .setTitle("选择日期") .setNegativeButton("取消") .setPositiveButton("选好了") @@ -102,7 +102,10 @@ //选择取消就默认加载近7天的数据 periodSpinner.setSelection(3) } - }).build().show() + }) + .setFragmentManager(supportFragmentManager) + .setCalendarType(Type.YEAR_MONTH_DAY) + .build().show() } } } diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml index 82386c9..3832c68 100644 --- a/app/src/main/AndroidManifest.xml +++ b/app/src/main/AndroidManifest.xml @@ -48,7 +48,7 @@ - + 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 216e7cc..f53e831 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,6 +15,14 @@ return dateFormat.format(calendar.time) } +fun Long.timestampToLastWeekTime(): String { + val dateFormat = SimpleDateFormat("yyyy-MM-dd HH:mm:ss", Locale.CHINA) + val calendar = Calendar.getInstance() + calendar.time = Date(this) + calendar.set(Calendar.DAY_OF_YEAR, calendar.get(Calendar.DAY_OF_YEAR) - 6) + return dateFormat.format(calendar.time) +} + fun Long.timestampToLastMonthDate(): String { val dateFormat = SimpleDateFormat("yyyy-MM-dd", Locale.CHINA) val calendar = Calendar.getInstance() diff --git a/app/src/main/java/com/casic/qd/smartwell/model/DayDataModel.kt b/app/src/main/java/com/casic/qd/smartwell/model/DayDataModel.kt new file mode 100644 index 0000000..18d1399 --- /dev/null +++ b/app/src/main/java/com/casic/qd/smartwell/model/DayDataModel.kt @@ -0,0 +1,13 @@ +package com.casic.qd.smartwell.model + +class DayDataModel { + var code = 0 + var data: List? = null + var message: String? = null + var isSuccess = false + + class DataBean { + var time: String? = null + var value: String? = null + } +} \ No newline at end of file diff --git a/app/src/main/java/com/casic/qd/smartwell/model/TotalDataModel.kt b/app/src/main/java/com/casic/qd/smartwell/model/TotalDataModel.kt new file mode 100644 index 0000000..30bf829 --- /dev/null +++ b/app/src/main/java/com/casic/qd/smartwell/model/TotalDataModel.kt @@ -0,0 +1,14 @@ +package com.casic.qd.smartwell.model + +class TotalDataModel { + var code = 0 + var data: List? = null + var message: String? = null + var isSuccess = false + + class DataBean { + var total: String? = null + var deviceState: String? = null + var uptime: String? = null + } +} \ No newline at end of file diff --git a/app/src/main/java/com/casic/qd/smartwell/utils/retrofit/RetrofitService.kt b/app/src/main/java/com/casic/qd/smartwell/utils/retrofit/RetrofitService.kt index c5bf469..0c80ee9 100644 --- a/app/src/main/java/com/casic/qd/smartwell/utils/retrofit/RetrofitService.kt +++ b/app/src/main/java/com/casic/qd/smartwell/utils/retrofit/RetrofitService.kt @@ -202,4 +202,26 @@ @Query("offset") offset: Int, @Query("limit") limit: Int ): String + + /** + * 获取设备日用水量 + * */ + @GET("/device/sevenDayData") + suspend fun obtainSevenDayData( + @Header("token") token: String, + @Query("devCode") devCode: String?, + @Query("beginTime") beginTime: String?, + @Query("endTime") endTime: String? + ): String + + /** + * 获取设备日用水量 + * */ + @GET("/device/totalData") + suspend fun obtainTotalDayData( + @Header("token") token: String, + @Query("devCode") devCode: String?, + @Query("beginTime") beginTime: String?, + @Query("endTime") endTime: String? + ): String } \ No newline at end of file diff --git a/app/src/main/java/com/casic/qd/smartwell/utils/retrofit/RetrofitServiceManager.kt b/app/src/main/java/com/casic/qd/smartwell/utils/retrofit/RetrofitServiceManager.kt index 6f728e0..a8b320f 100644 --- a/app/src/main/java/com/casic/qd/smartwell/utils/retrofit/RetrofitServiceManager.kt +++ b/app/src/main/java/com/casic/qd/smartwell/utils/retrofit/RetrofitServiceManager.kt @@ -204,4 +204,18 @@ Constant.PAGE_LIMIT ) } + + /** + * 获取设备日用水量 + */ + suspend fun obtainSevenDayData(devCode: String?, beginTime: String?, endTime: String?): String { + return api.obtainSevenDayData(AuthenticationHelper.token!!, devCode, beginTime, endTime) + } + + /** + * 获取设备累计用水量 + */ + suspend fun obtainTotalDayData(devCode: String?, beginTime: String?, endTime: String?): String { + return api.obtainTotalDayData(AuthenticationHelper.token!!, devCode, beginTime, endTime) + } } \ No newline at end of file diff --git a/app/src/main/java/com/casic/qd/smartwell/view/DeviceDataDetailActivity.kt b/app/src/main/java/com/casic/qd/smartwell/view/DeviceDataDetailActivity.kt index 7029d17..a8a2695 100644 --- a/app/src/main/java/com/casic/qd/smartwell/view/DeviceDataDetailActivity.kt +++ b/app/src/main/java/com/casic/qd/smartwell/view/DeviceDataDetailActivity.kt @@ -1,22 +1,109 @@ package com.casic.qd.smartwell.view +import androidx.lifecycle.ViewModelProvider import com.casic.qd.smartwell.R import com.casic.qd.smartwell.base.BaseActivity -import kotlinx.android.synthetic.main.include_base_title.* +import com.casic.qd.smartwell.extensions.convertColor +import com.casic.qd.smartwell.extensions.timestampToLastWeekTime +import com.casic.qd.smartwell.extensions.timestampToTime +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.DeviceViewModel +import com.casic.qd.smartwell.widgets.DateSelectDialog +import com.github.mikephil.charting.data.Entry +import com.jzxiang.pickerview.data.Type +import kotlinx.android.synthetic.main.activity_device_data_detail.* +import kotlinx.android.synthetic.main.activity_main.rightOptionView +import kotlinx.android.synthetic.main.activity_main.titleView class DeviceDataDetailActivity : BaseActivity() { - override fun initLayoutView(): Int = R.layout.activity_device_detail + private val kTag = "DeviceDataDetailActivity" + private lateinit var deviceCode: String + private lateinit var deviceViewModel: DeviceViewModel + + override fun initLayoutView(): Int = R.layout.activity_device_data_detail override fun setupTopBarLayout() { - titleView.text = "历史数据" + deviceCode = intent.getStringExtra(Constant.INTENT_PARAM)!! + titleView.text = String.format("${deviceCode}历史数据") } override fun initData() { - + deviceViewModel = ViewModelProvider(this).get(DeviceViewModel::class.java) } override fun initEvent() { + rightOptionView.setOnClickListener { + DateSelectDialog.Builder() + .setContext(this) + .setTitle("选择日期") + .setNegativeButton("取消") + .setPositiveButton("选好了") + .setOnDialogButtonClickListener(object : + DateSelectDialog.OnDialogButtonClickListener { + override fun onConfirmClick(startDate: String, endDate: String) { + deviceViewModel.obtainSevenDayData(deviceCode, startDate, endDate) + deviceViewModel.obtainTotalDayData(deviceCode, startDate, endDate) + } + override fun onCancelClick() { + //选择取消就默认加载近7天的数据 + val time = System.currentTimeMillis() + val startTime = time.timestampToLastWeekTime() + val endTime = time.timestampToTime() + deviceViewModel.obtainSevenDayData(deviceCode, startTime, endTime) + deviceViewModel.obtainTotalDayData(deviceCode, startTime, endTime) + } + }) + .setFragmentManager(supportFragmentManager) + .setCalendarType(Type.ALL) + .build().show() + } + + //默认加载近一周的数据 + val time = System.currentTimeMillis() + val startTime = time.timestampToLastWeekTime() + val endTime = time.timestampToTime() + deviceViewModel.obtainSevenDayData(deviceCode, startTime, endTime) + deviceViewModel.dayDataModel.observe(this, { + if (it.code == 200) { + val entryModels: MutableList = ArrayList() + val xAxisDate: MutableList = ArrayList() + val entries: ArrayList = ArrayList() + val entryModel = LineChartEntryModel() + + entryModel.lineColor = Constant.COLORS[7].convertColor() + it.data?.forEachIndexed { index, dataBean -> + val split = dataBean.time.toString().split("-") + xAxisDate.add("${split[1]}/${split[2]}") + + entries.add(Entry(index.toFloat(), dataBean.value!!.toFloat(), "日用水量")) + } + entryModel.entryList = entries + entryModels.add(entryModel) + ChartViewHelper.setLineChartData(dayWaterLineChart, xAxisDate, entryModels) + } + }) + + deviceViewModel.obtainTotalDayData(deviceCode, startTime, endTime) + deviceViewModel.totalDataModel.observe(this, { + val entryModels: MutableList = ArrayList() + val xAxisDate: MutableList = ArrayList() + val entries: ArrayList = ArrayList() + val entryModel = LineChartEntryModel() + + entryModel.lineColor = Constant.COLORS[7].convertColor() + it.data?.forEachIndexed { index, dataBean -> + val split = dataBean.uptime.toString().split(" ")[0].split("-") + xAxisDate.add("${split[1]}/${split[2]}") + + entries.add(Entry(index.toFloat(), dataBean.total!!.toFloat(), "总用水量")) + } + entryModel.entryList = entries + entryModels.add(entryModel) + ChartViewHelper.setLineChartData(totalWaterLineChart, xAxisDate, entryModels) + }) } } \ No newline at end of file diff --git a/app/src/main/java/com/casic/qd/smartwell/view/MainActivity.kt b/app/src/main/java/com/casic/qd/smartwell/view/MainActivity.kt index 02435a3..3f4bb3c 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 @@ -1,7 +1,6 @@ package com.casic.qd.smartwell.view import android.content.Context -import android.content.Intent import android.os.Handler import android.os.Looper import android.os.Message @@ -22,6 +21,7 @@ import com.casic.qd.smartwell.vm.WaterStatisticsViewModel import com.github.mikephil.charting.data.Entry import com.pengxh.app.multilib.widget.dialog.AlertControlDialog +import com.pengxh.app.multilib.widget.dialog.BottomActionSheet import com.youth.banner.Banner import com.youth.banner.adapter.BannerImageAdapter import com.youth.banner.holder.BannerImageHolder @@ -100,9 +100,20 @@ HomeRecycleAdapter.OnGridItemClickListener { override fun onClick(position: Int) { when (position) { - 0 -> startActivity(Intent(context, MapActivity::class.java)) - 1 -> startActivity(Intent(context, SearchRecordActivity::class.java)) - 2 -> startActivity(Intent(context, StatisticsActivity::class.java)) + 0 -> context.navigatePageTo(MapActivity::class.java) + 1 -> { + BottomActionSheet.Builder() + .setContext(context) + .setActionItemTitles(arrayOf("设备", "数据")) + .setOnActionSheetListener { index -> + when (index) { + 0 -> context.navigatePageTo(SearchDeviceActivity::class.java) + 1 -> context.navigatePageTo(SearchDataActivity::class.java) + } + }.build().show() + + } + 2 -> context.navigatePageTo(StatisticsActivity::class.java) } } }) diff --git a/app/src/main/java/com/casic/qd/smartwell/view/SearchAlarmActivity.kt b/app/src/main/java/com/casic/qd/smartwell/view/SearchAlarmActivity.kt index 8f54163..5285a9f 100644 --- a/app/src/main/java/com/casic/qd/smartwell/view/SearchAlarmActivity.kt +++ b/app/src/main/java/com/casic/qd/smartwell/view/SearchAlarmActivity.kt @@ -13,11 +13,6 @@ import com.jzxiang.pickerview.data.Type import com.qmuiteam.qmui.widget.dialog.QMUIBottomSheet.BottomListSheetBuilder import kotlinx.android.synthetic.main.activity_alarm_search.* -import kotlinx.android.synthetic.main.activity_alarm_search.areaView -import kotlinx.android.synthetic.main.activity_alarm_search.clearButton -import kotlinx.android.synthetic.main.activity_alarm_search.searchButton -import kotlinx.android.synthetic.main.activity_alarm_search.wellCodeView -import kotlinx.android.synthetic.main.activity_search_record.* import kotlinx.android.synthetic.main.include_base_title.* class SearchAlarmActivity : BaseActivity() { diff --git a/app/src/main/java/com/casic/qd/smartwell/view/SearchDataActivity.kt b/app/src/main/java/com/casic/qd/smartwell/view/SearchDataActivity.kt new file mode 100644 index 0000000..e6a38e4 --- /dev/null +++ b/app/src/main/java/com/casic/qd/smartwell/view/SearchDataActivity.kt @@ -0,0 +1,168 @@ +package com.casic.qd.smartwell.view + +import com.casic.qd.smartwell.R +import com.casic.qd.smartwell.base.BaseActivity +import kotlinx.android.synthetic.main.include_base_title.* + +/** + * @author a203 + * @description 记录查询界面 + * @date 2022/2/17 14:33 + * @email 290677893@qq.com + */ +class SearchDataActivity : BaseActivity() { + +// private lateinit var deviceViewModel: DeviceViewModel +// private lateinit var authenticateViewModel: AuthenticateViewModel +// private lateinit var areaViewModel: AreaViewModel +// private var authenticatedType: MutableList = ArrayList() +// private var deviceTypeValue = "" +// private var deptId = "" +// private var deviceState = "" +// private var areaId = "" + + override fun initLayoutView(): Int = R.layout.activity_data_search + + override fun setupTopBarLayout() { + titleView.text = "数据查询" + } + + override fun initData() { +// val userDeviceJson = SaveKeyValues.getValue(Constant.USER_DEVICE_TYPE, "") as String +// if (userDeviceJson.isNotBlank()) { +// authenticatedType = Gson().fromJson( +// userDeviceJson, object : TypeToken>() {}.type +// ) +// } +// deviceViewModel = ViewModelProvider(this).get(DeviceViewModel::class.java) +// authenticateViewModel = ViewModelProvider(this).get(AuthenticateViewModel::class.java) +// areaViewModel = ViewModelProvider(this).get(AreaViewModel::class.java) + } + + override fun initEvent() { +// deviceTypeView.setOnClickListener { +// /** +// * 获取全部设备类型 +// * */ +// deviceViewModel.obtainDeviceType() +// } +// deviceViewModel.typeModel.observe(this, { +// if (it.code == 200) { +// val authenticatedModel: MutableList = ArrayList() +// it.data?.forEach { deviceModel -> +// if (deviceModel.value in authenticatedType) { +// authenticatedModel.add(deviceModel) +// } +// } +// val sheetBuilder = QMUIBottomSheet.BottomListSheetBuilder(this) +// sheetBuilder.setTitle("设备类型") +// authenticatedModel.forEach { deviceModel -> +// sheetBuilder.addItem(deviceModel.name) +// } +// sheetBuilder.setGravityCenter(true) +// .setOnSheetItemClickListener { dialog, _, position, tag -> +// deviceTypeView.text = tag +// this.deviceTypeValue = authenticatedModel[position].value.toString() +// +// dialog.dismiss() +// }.build().show() +// } +// }) +// +// ownerShipView.setOnClickListener { +// authenticateViewModel.obtainOwnerShip("03") +// } +// authenticateViewModel.resultModel.observe(this, { +// if (it.code == 200) { +// val ownerShipModel: MutableList = ArrayList() +// it.data?.list?.forEach { listBean -> +// ownerShipModel.add(listBean) +// } +// val sheetBuilder = QMUIBottomSheet.BottomListSheetBuilder(this) +// sheetBuilder.setTitle("权属单位") +// ownerShipModel.forEach { model -> +// sheetBuilder.addItem(model.name) +// } +// sheetBuilder.setGravityCenter(true) +// .setOnSheetItemClickListener { dialog, _, position, tag -> +// ownerShipView.text = tag +// this.deptId = ownerShipModel[position].id.toString() +// +// dialog.dismiss() +// }.build().show() +// } +// }) +// +// deviceStateView.setOnClickListener { +// QMUIBottomSheet.BottomListSheetBuilder(this) +// .setTitle("在线情况") +// .addItem("在线") +// .addItem("离线") +// .setGravityCenter(true) +// .setOnSheetItemClickListener { dialog, _, _, tag -> +// deviceStateView.text = tag +// this.deviceState = if (tag == "在线") { +// "1" +// } else { +// "0" +// } +// +// dialog.dismiss() +// }.build().show() +// } +// +// areaView.setOnClickListener { +// areaViewModel.obtainArea() +// } +// areaViewModel.areaModel.observe(this, { +// if (it.code == 200) { +// val firstLevelArea: MutableList = ArrayList() +// val secondLevelArea: MutableList = ArrayList() +// val thirdLevelArea: MutableList = ArrayList() +// it.data?.forEach { dataBean -> +// when (dataBean.level) { +// 2 -> firstLevelArea.add(dataBean) +// 3 -> secondLevelArea.add(dataBean) +// 4 -> thirdLevelArea.add(dataBean) +// } +// } +// +// // 绑定区域 +// BottomAreaSheet.Builder() +// .setContext(this) +// .setFirstAreaData(firstLevelArea) +// .setSecondAreaData(secondLevelArea) +// .setThirdAreaData(thirdLevelArea) +// .setOnActionSheetListener(object : BottomAreaSheet.OnActionSheetListener { +// override fun onAreaSelected(area: String?, id: String?) { +// areaView.text = area +// areaId = id.toString() +// } +// }).build().show() +// } +// }) +// +// searchButton.setChangeAlphaWhenPress(true) +// searchButton.setOnClickListener { +// //页面跳转,将查询参数传过去 +// navigatePageTo( +// DeviceSearchResultActivity::class.java, addAll( +// wellCodeView.text.toString().trim(), +// deviceTypeValue, +// deptId, +// deviceState, +// areaId +// ) +// ) +// } +// +// clearButton.setChangeAlphaWhenPress(true) +// clearButton.setOnClickListener { +// wellCodeView.setText("") +// deviceTypeView.text = "" +// ownerShipView.text = "" +// deviceStateView.text = "" +// areaView.text = "" +// } + } +} \ No newline at end of file diff --git a/app/src/main/java/com/casic/qd/smartwell/view/SearchDeviceActivity.kt b/app/src/main/java/com/casic/qd/smartwell/view/SearchDeviceActivity.kt new file mode 100644 index 0000000..cf0c05f --- /dev/null +++ b/app/src/main/java/com/casic/qd/smartwell/view/SearchDeviceActivity.kt @@ -0,0 +1,184 @@ +package com.casic.qd.smartwell.view + +import androidx.lifecycle.ViewModelProvider +import com.casic.qd.smartwell.R +import com.casic.qd.smartwell.base.BaseActivity +import com.casic.qd.smartwell.extensions.addAll +import com.casic.qd.smartwell.extensions.navigatePageTo +import com.casic.qd.smartwell.model.AreaModel +import com.casic.qd.smartwell.model.DeviceTypeModel +import com.casic.qd.smartwell.model.OwnerShipModel +import com.casic.qd.smartwell.utils.Constant +import com.casic.qd.smartwell.utils.SaveKeyValues +import com.casic.qd.smartwell.vm.AreaViewModel +import com.casic.qd.smartwell.vm.AuthenticateViewModel +import com.casic.qd.smartwell.vm.DeviceViewModel +import com.casic.qd.smartwell.widgets.BottomAreaSheet +import com.google.gson.Gson +import com.google.gson.reflect.TypeToken +import com.qmuiteam.qmui.widget.dialog.QMUIBottomSheet +import kotlinx.android.synthetic.main.activity_device_search.* +import kotlinx.android.synthetic.main.include_base_title.* + +/** + * @author a203 + * @description 记录查询界面 + * @date 2022/2/17 14:33 + * @email 290677893@qq.com + */ +class SearchDeviceActivity : BaseActivity() { + + private lateinit var deviceViewModel: DeviceViewModel + private lateinit var authenticateViewModel: AuthenticateViewModel + private lateinit var areaViewModel: AreaViewModel + private var authenticatedType: MutableList = ArrayList() + private var deviceTypeValue = "" + private var deptId = "" + private var deviceState = "" + private var areaId = "" + + override fun initLayoutView(): Int = R.layout.activity_device_search + + override fun setupTopBarLayout() { + titleView.text = "设备查询" + } + + override fun initData() { + val userDeviceJson = SaveKeyValues.getValue(Constant.USER_DEVICE_TYPE, "") as String + if (userDeviceJson.isNotBlank()) { + authenticatedType = Gson().fromJson( + userDeviceJson, object : TypeToken>() {}.type + ) + } + deviceViewModel = ViewModelProvider(this).get(DeviceViewModel::class.java) + authenticateViewModel = ViewModelProvider(this).get(AuthenticateViewModel::class.java) + areaViewModel = ViewModelProvider(this).get(AreaViewModel::class.java) + } + + override fun initEvent() { + deviceTypeView.setOnClickListener { + /** + * 获取全部设备类型 + * */ + deviceViewModel.obtainDeviceType() + } + deviceViewModel.typeModel.observe(this, { + if (it.code == 200) { + val authenticatedModel: MutableList = ArrayList() + it.data?.forEach { deviceModel -> + if (deviceModel.value in authenticatedType) { + authenticatedModel.add(deviceModel) + } + } + val sheetBuilder = QMUIBottomSheet.BottomListSheetBuilder(this) + sheetBuilder.setTitle("设备类型") + authenticatedModel.forEach { deviceModel -> + sheetBuilder.addItem(deviceModel.name) + } + sheetBuilder.setGravityCenter(true) + .setOnSheetItemClickListener { dialog, _, position, tag -> + deviceTypeView.text = tag + this.deviceTypeValue = authenticatedModel[position].value.toString() + + dialog.dismiss() + }.build().show() + } + }) + + ownerShipView.setOnClickListener { + authenticateViewModel.obtainOwnerShip("03") + } + authenticateViewModel.resultModel.observe(this, { + if (it.code == 200) { + val ownerShipModel: MutableList = ArrayList() + it.data?.list?.forEach { listBean -> + ownerShipModel.add(listBean) + } + val sheetBuilder = QMUIBottomSheet.BottomListSheetBuilder(this) + sheetBuilder.setTitle("权属单位") + ownerShipModel.forEach { model -> + sheetBuilder.addItem(model.name) + } + sheetBuilder.setGravityCenter(true) + .setOnSheetItemClickListener { dialog, _, position, tag -> + ownerShipView.text = tag + this.deptId = ownerShipModel[position].id.toString() + + dialog.dismiss() + }.build().show() + } + }) + + deviceStateView.setOnClickListener { + QMUIBottomSheet.BottomListSheetBuilder(this) + .setTitle("在线情况") + .addItem("在线") + .addItem("离线") + .setGravityCenter(true) + .setOnSheetItemClickListener { dialog, _, _, tag -> + deviceStateView.text = tag + this.deviceState = if (tag == "在线") { + "1" + } else { + "0" + } + + dialog.dismiss() + }.build().show() + } + + areaView.setOnClickListener { + areaViewModel.obtainArea() + } + areaViewModel.areaModel.observe(this, { + if (it.code == 200) { + val firstLevelArea: MutableList = ArrayList() + val secondLevelArea: MutableList = ArrayList() + val thirdLevelArea: MutableList = ArrayList() + it.data?.forEach { dataBean -> + when (dataBean.level) { + 2 -> firstLevelArea.add(dataBean) + 3 -> secondLevelArea.add(dataBean) + 4 -> thirdLevelArea.add(dataBean) + } + } + + // 绑定区域 + BottomAreaSheet.Builder() + .setContext(this) + .setFirstAreaData(firstLevelArea) + .setSecondAreaData(secondLevelArea) + .setThirdAreaData(thirdLevelArea) + .setOnActionSheetListener(object : BottomAreaSheet.OnActionSheetListener { + override fun onAreaSelected(area: String?, id: String?) { + areaView.text = area + areaId = id.toString() + } + }).build().show() + } + }) + + searchButton.setChangeAlphaWhenPress(true) + searchButton.setOnClickListener { + //页面跳转,将查询参数传过去 + navigatePageTo( + DeviceSearchResultActivity::class.java, addAll( + wellCodeView.text.toString().trim(), + deviceTypeValue, + deptId, + deviceState, + areaId + ) + ) + } + + clearButton.setChangeAlphaWhenPress(true) + clearButton.setOnClickListener { + wellCodeView.setText("") + deviceTypeView.text = "" + ownerShipView.text = "" + deviceStateView.text = "" + areaView.text = "" + } + } +} \ No newline at end of file diff --git a/app/src/main/java/com/casic/qd/smartwell/view/SearchRecordActivity.kt b/app/src/main/java/com/casic/qd/smartwell/view/SearchRecordActivity.kt deleted file mode 100644 index 8cab864..0000000 --- a/app/src/main/java/com/casic/qd/smartwell/view/SearchRecordActivity.kt +++ /dev/null @@ -1,184 +0,0 @@ -package com.casic.qd.smartwell.view - -import androidx.lifecycle.ViewModelProvider -import com.casic.qd.smartwell.R -import com.casic.qd.smartwell.base.BaseActivity -import com.casic.qd.smartwell.extensions.addAll -import com.casic.qd.smartwell.extensions.navigatePageTo -import com.casic.qd.smartwell.model.AreaModel -import com.casic.qd.smartwell.model.DeviceTypeModel -import com.casic.qd.smartwell.model.OwnerShipModel -import com.casic.qd.smartwell.utils.Constant -import com.casic.qd.smartwell.utils.SaveKeyValues -import com.casic.qd.smartwell.vm.AreaViewModel -import com.casic.qd.smartwell.vm.AuthenticateViewModel -import com.casic.qd.smartwell.vm.DeviceViewModel -import com.casic.qd.smartwell.widgets.BottomAreaSheet -import com.google.gson.Gson -import com.google.gson.reflect.TypeToken -import com.qmuiteam.qmui.widget.dialog.QMUIBottomSheet -import kotlinx.android.synthetic.main.activity_search_record.* -import kotlinx.android.synthetic.main.include_base_title.* - -/** - * @author a203 - * @description 记录查询界面 - * @date 2022/2/17 14:33 - * @email 290677893@qq.com - */ -class SearchRecordActivity : BaseActivity() { - - private lateinit var deviceViewModel: DeviceViewModel - private lateinit var authenticateViewModel: AuthenticateViewModel - private lateinit var areaViewModel: AreaViewModel - private var authenticatedType: MutableList = ArrayList() - private var deviceTypeValue = "" - private var deptId = "" - private var deviceState = "" - private var areaId = "" - - override fun initLayoutView(): Int = R.layout.activity_search_record - - override fun setupTopBarLayout() { - titleView.text = "记录查询" - } - - override fun initData() { - val userDeviceJson = SaveKeyValues.getValue(Constant.USER_DEVICE_TYPE, "") as String - if (userDeviceJson.isNotBlank()) { - authenticatedType = Gson().fromJson( - userDeviceJson, object : TypeToken>() {}.type - ) - } - deviceViewModel = ViewModelProvider(this).get(DeviceViewModel::class.java) - authenticateViewModel = ViewModelProvider(this).get(AuthenticateViewModel::class.java) - areaViewModel = ViewModelProvider(this).get(AreaViewModel::class.java) - } - - override fun initEvent() { - deviceTypeView.setOnClickListener { - /** - * 获取全部设备类型 - * */ - deviceViewModel.obtainDeviceType() - } - deviceViewModel.typeModel.observe(this, { - if (it.code == 200) { - val authenticatedModel: MutableList = ArrayList() - it.data?.forEach { deviceModel -> - if (deviceModel.value in authenticatedType) { - authenticatedModel.add(deviceModel) - } - } - val sheetBuilder = QMUIBottomSheet.BottomListSheetBuilder(this) - sheetBuilder.setTitle("设备类型") - authenticatedModel.forEach { deviceModel -> - sheetBuilder.addItem(deviceModel.name) - } - sheetBuilder.setGravityCenter(true) - .setOnSheetItemClickListener { dialog, _, position, tag -> - deviceTypeView.text = tag - this.deviceTypeValue = authenticatedModel[position].value.toString() - - dialog.dismiss() - }.build().show() - } - }) - - ownerShipView.setOnClickListener { - authenticateViewModel.obtainOwnerShip("03") - } - authenticateViewModel.resultModel.observe(this, { - if (it.code == 200) { - val ownerShipModel: MutableList = ArrayList() - it.data?.list?.forEach { listBean -> - ownerShipModel.add(listBean) - } - val sheetBuilder = QMUIBottomSheet.BottomListSheetBuilder(this) - sheetBuilder.setTitle("权属单位") - ownerShipModel.forEach { model -> - sheetBuilder.addItem(model.name) - } - sheetBuilder.setGravityCenter(true) - .setOnSheetItemClickListener { dialog, _, position, tag -> - ownerShipView.text = tag - this.deptId = ownerShipModel[position].id.toString() - - dialog.dismiss() - }.build().show() - } - }) - - deviceStateView.setOnClickListener { - QMUIBottomSheet.BottomListSheetBuilder(this) - .setTitle("在线情况") - .addItem("在线") - .addItem("离线") - .setGravityCenter(true) - .setOnSheetItemClickListener { dialog, _, _, tag -> - deviceStateView.text = tag - this.deviceState = if (tag == "在线") { - "1" - } else { - "0" - } - - dialog.dismiss() - }.build().show() - } - - areaView.setOnClickListener { - areaViewModel.obtainArea() - } - areaViewModel.areaModel.observe(this, { - if (it.code == 200) { - val firstLevelArea: MutableList = ArrayList() - val secondLevelArea: MutableList = ArrayList() - val thirdLevelArea: MutableList = ArrayList() - it.data?.forEach { dataBean -> - when (dataBean.level) { - 2 -> firstLevelArea.add(dataBean) - 3 -> secondLevelArea.add(dataBean) - 4 -> thirdLevelArea.add(dataBean) - } - } - - // 绑定区域 - BottomAreaSheet.Builder() - .setContext(this) - .setFirstAreaData(firstLevelArea) - .setSecondAreaData(secondLevelArea) - .setThirdAreaData(thirdLevelArea) - .setOnActionSheetListener(object : BottomAreaSheet.OnActionSheetListener { - override fun onAreaSelected(area: String?, id: String?) { - areaView.text = area - areaId = id.toString() - } - }).build().show() - } - }) - - searchButton.setChangeAlphaWhenPress(true) - searchButton.setOnClickListener { - //页面跳转,将查询参数传过去 - navigatePageTo( - DeviceSearchResultActivity::class.java, addAll( - wellCodeView.text.toString().trim(), - deviceTypeValue, - deptId, - deviceState, - areaId - ) - ) - } - - clearButton.setChangeAlphaWhenPress(true) - clearButton.setOnClickListener { - wellCodeView.setText("") - deviceTypeView.text = "" - ownerShipView.text = "" - deviceStateView.text = "" - areaView.text = "" - } - } -} \ No newline at end of file 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 21c4286..3272cfe 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 @@ -15,6 +15,7 @@ import com.casic.qd.smartwell.widgets.DateSelectDialog import com.github.mikephil.charting.data.BarEntry import com.github.mikephil.charting.data.PieEntry +import com.jzxiang.pickerview.data.Type import kotlinx.android.synthetic.main.activity_statistics.* import kotlinx.android.synthetic.main.include_base_title.* import java.util.* @@ -97,7 +98,6 @@ 5 -> { DateSelectDialog.Builder() .setContext(context) - .setFragmentManager(supportFragmentManager) .setTitle("选择日期") .setNegativeButton("取消") .setPositiveButton("选好了") @@ -113,7 +113,10 @@ //选择取消就默认加载近7天的数据 periodSpinner.setSelection(3) } - }).build().show() + }) + .setFragmentManager(supportFragmentManager) + .setCalendarType(Type.YEAR_MONTH_DAY) + .build().show() } } } @@ -200,7 +203,6 @@ 5 -> { DateSelectDialog.Builder() .setContext(context) - .setFragmentManager(supportFragmentManager) .setTitle("选择日期") .setNegativeButton("取消") .setPositiveButton("选好了") @@ -216,7 +218,10 @@ //选择取消就默认加载近7天的数据 periodSpinner.setSelection(3) } - }).build().show() + }) + .setFragmentManager(supportFragmentManager) + .setCalendarType(Type.YEAR_MONTH_DAY) + .build().show() } } } diff --git a/app/src/main/java/com/casic/qd/smartwell/view/WaterExpandedActivity.kt b/app/src/main/java/com/casic/qd/smartwell/view/WaterExpandedActivity.kt index 251140d..7a63dea 100644 --- a/app/src/main/java/com/casic/qd/smartwell/view/WaterExpandedActivity.kt +++ b/app/src/main/java/com/casic/qd/smartwell/view/WaterExpandedActivity.kt @@ -13,6 +13,7 @@ import com.casic.qd.smartwell.vm.WaterStatisticsViewModel import com.casic.qd.smartwell.widgets.DateSelectDialog import com.github.mikephil.charting.data.Entry +import com.jzxiang.pickerview.data.Type import kotlinx.android.synthetic.main.activity_water_expanded.* import java.util.* import kotlin.collections.ArrayList @@ -86,7 +87,6 @@ 5 -> { DateSelectDialog.Builder() .setContext(context) - .setFragmentManager(supportFragmentManager) .setTitle("选择日期") .setNegativeButton("取消") .setPositiveButton("选好了") @@ -102,7 +102,10 @@ //选择取消就默认加载近7天的数据 periodSpinner.setSelection(3) } - }).build().show() + }) + .setFragmentManager(supportFragmentManager) + .setCalendarType(Type.YEAR_MONTH_DAY) + .build().show() } } } diff --git a/app/src/main/java/com/casic/qd/smartwell/vm/DeviceViewModel.kt b/app/src/main/java/com/casic/qd/smartwell/vm/DeviceViewModel.kt index 02aefed..9448ade 100644 --- a/app/src/main/java/com/casic/qd/smartwell/vm/DeviceViewModel.kt +++ b/app/src/main/java/com/casic/qd/smartwell/vm/DeviceViewModel.kt @@ -7,8 +7,10 @@ import com.casic.qd.smartwell.extensions.separateResponseCode import com.casic.qd.smartwell.extensions.show import com.casic.qd.smartwell.extensions.toErrorMessage +import com.casic.qd.smartwell.model.DayDataModel import com.casic.qd.smartwell.model.DeviceStatisticsModel import com.casic.qd.smartwell.model.DeviceTypeModel +import com.casic.qd.smartwell.model.TotalDataModel import com.casic.qd.smartwell.utils.retrofit.RetrofitServiceManager import com.google.gson.Gson import com.google.gson.reflect.TypeToken @@ -19,6 +21,8 @@ private val gson = Gson() val resultModel = MutableLiveData() val typeModel = MutableLiveData() + val dayDataModel = MutableLiveData() + val totalDataModel = MutableLiveData() /** * 管网资产统计 @@ -55,4 +59,40 @@ Log.e(kTag, it.toString(), it) "服务器异常".show() }) + + /** + * 获取设备日用水量 + */ + fun obtainSevenDayData(devCode: String?, beginTime: String?, endTime: String?) = launch({ + val response = RetrofitServiceManager.obtainSevenDayData(devCode, beginTime, endTime) + val responseCode = response.separateResponseCode() + if (responseCode == 200) { + dayDataModel.value = gson.fromJson( + response, object : TypeToken() {}.type + ) + } else { + response.toErrorMessage().show() + } + }, { + Log.e(kTag, it.toString(), it) + "服务器异常".show() + }) + + /** + * 获取设备累计用水量 + */ + fun obtainTotalDayData(devCode: String?, beginTime: String?, endTime: String?) = launch({ + val response = RetrofitServiceManager.obtainTotalDayData(devCode, beginTime, endTime) + val responseCode = response.separateResponseCode() + if (responseCode == 200) { + totalDataModel.value = gson.fromJson( + response, object : TypeToken() {}.type + ) + } else { + response.toErrorMessage().show() + } + }, { + Log.e(kTag, it.toString(), it) + "服务器异常".show() + }) } \ No newline at end of file diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml index 82386c9..3832c68 100644 --- a/app/src/main/AndroidManifest.xml +++ b/app/src/main/AndroidManifest.xml @@ -48,7 +48,7 @@ - + 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 216e7cc..f53e831 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,6 +15,14 @@ return dateFormat.format(calendar.time) } +fun Long.timestampToLastWeekTime(): String { + val dateFormat = SimpleDateFormat("yyyy-MM-dd HH:mm:ss", Locale.CHINA) + val calendar = Calendar.getInstance() + calendar.time = Date(this) + calendar.set(Calendar.DAY_OF_YEAR, calendar.get(Calendar.DAY_OF_YEAR) - 6) + return dateFormat.format(calendar.time) +} + fun Long.timestampToLastMonthDate(): String { val dateFormat = SimpleDateFormat("yyyy-MM-dd", Locale.CHINA) val calendar = Calendar.getInstance() diff --git a/app/src/main/java/com/casic/qd/smartwell/model/DayDataModel.kt b/app/src/main/java/com/casic/qd/smartwell/model/DayDataModel.kt new file mode 100644 index 0000000..18d1399 --- /dev/null +++ b/app/src/main/java/com/casic/qd/smartwell/model/DayDataModel.kt @@ -0,0 +1,13 @@ +package com.casic.qd.smartwell.model + +class DayDataModel { + var code = 0 + var data: List? = null + var message: String? = null + var isSuccess = false + + class DataBean { + var time: String? = null + var value: String? = null + } +} \ No newline at end of file diff --git a/app/src/main/java/com/casic/qd/smartwell/model/TotalDataModel.kt b/app/src/main/java/com/casic/qd/smartwell/model/TotalDataModel.kt new file mode 100644 index 0000000..30bf829 --- /dev/null +++ b/app/src/main/java/com/casic/qd/smartwell/model/TotalDataModel.kt @@ -0,0 +1,14 @@ +package com.casic.qd.smartwell.model + +class TotalDataModel { + var code = 0 + var data: List? = null + var message: String? = null + var isSuccess = false + + class DataBean { + var total: String? = null + var deviceState: String? = null + var uptime: String? = null + } +} \ No newline at end of file diff --git a/app/src/main/java/com/casic/qd/smartwell/utils/retrofit/RetrofitService.kt b/app/src/main/java/com/casic/qd/smartwell/utils/retrofit/RetrofitService.kt index c5bf469..0c80ee9 100644 --- a/app/src/main/java/com/casic/qd/smartwell/utils/retrofit/RetrofitService.kt +++ b/app/src/main/java/com/casic/qd/smartwell/utils/retrofit/RetrofitService.kt @@ -202,4 +202,26 @@ @Query("offset") offset: Int, @Query("limit") limit: Int ): String + + /** + * 获取设备日用水量 + * */ + @GET("/device/sevenDayData") + suspend fun obtainSevenDayData( + @Header("token") token: String, + @Query("devCode") devCode: String?, + @Query("beginTime") beginTime: String?, + @Query("endTime") endTime: String? + ): String + + /** + * 获取设备日用水量 + * */ + @GET("/device/totalData") + suspend fun obtainTotalDayData( + @Header("token") token: String, + @Query("devCode") devCode: String?, + @Query("beginTime") beginTime: String?, + @Query("endTime") endTime: String? + ): String } \ No newline at end of file diff --git a/app/src/main/java/com/casic/qd/smartwell/utils/retrofit/RetrofitServiceManager.kt b/app/src/main/java/com/casic/qd/smartwell/utils/retrofit/RetrofitServiceManager.kt index 6f728e0..a8b320f 100644 --- a/app/src/main/java/com/casic/qd/smartwell/utils/retrofit/RetrofitServiceManager.kt +++ b/app/src/main/java/com/casic/qd/smartwell/utils/retrofit/RetrofitServiceManager.kt @@ -204,4 +204,18 @@ Constant.PAGE_LIMIT ) } + + /** + * 获取设备日用水量 + */ + suspend fun obtainSevenDayData(devCode: String?, beginTime: String?, endTime: String?): String { + return api.obtainSevenDayData(AuthenticationHelper.token!!, devCode, beginTime, endTime) + } + + /** + * 获取设备累计用水量 + */ + suspend fun obtainTotalDayData(devCode: String?, beginTime: String?, endTime: String?): String { + return api.obtainTotalDayData(AuthenticationHelper.token!!, devCode, beginTime, endTime) + } } \ No newline at end of file diff --git a/app/src/main/java/com/casic/qd/smartwell/view/DeviceDataDetailActivity.kt b/app/src/main/java/com/casic/qd/smartwell/view/DeviceDataDetailActivity.kt index 7029d17..a8a2695 100644 --- a/app/src/main/java/com/casic/qd/smartwell/view/DeviceDataDetailActivity.kt +++ b/app/src/main/java/com/casic/qd/smartwell/view/DeviceDataDetailActivity.kt @@ -1,22 +1,109 @@ package com.casic.qd.smartwell.view +import androidx.lifecycle.ViewModelProvider import com.casic.qd.smartwell.R import com.casic.qd.smartwell.base.BaseActivity -import kotlinx.android.synthetic.main.include_base_title.* +import com.casic.qd.smartwell.extensions.convertColor +import com.casic.qd.smartwell.extensions.timestampToLastWeekTime +import com.casic.qd.smartwell.extensions.timestampToTime +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.DeviceViewModel +import com.casic.qd.smartwell.widgets.DateSelectDialog +import com.github.mikephil.charting.data.Entry +import com.jzxiang.pickerview.data.Type +import kotlinx.android.synthetic.main.activity_device_data_detail.* +import kotlinx.android.synthetic.main.activity_main.rightOptionView +import kotlinx.android.synthetic.main.activity_main.titleView class DeviceDataDetailActivity : BaseActivity() { - override fun initLayoutView(): Int = R.layout.activity_device_detail + private val kTag = "DeviceDataDetailActivity" + private lateinit var deviceCode: String + private lateinit var deviceViewModel: DeviceViewModel + + override fun initLayoutView(): Int = R.layout.activity_device_data_detail override fun setupTopBarLayout() { - titleView.text = "历史数据" + deviceCode = intent.getStringExtra(Constant.INTENT_PARAM)!! + titleView.text = String.format("${deviceCode}历史数据") } override fun initData() { - + deviceViewModel = ViewModelProvider(this).get(DeviceViewModel::class.java) } override fun initEvent() { + rightOptionView.setOnClickListener { + DateSelectDialog.Builder() + .setContext(this) + .setTitle("选择日期") + .setNegativeButton("取消") + .setPositiveButton("选好了") + .setOnDialogButtonClickListener(object : + DateSelectDialog.OnDialogButtonClickListener { + override fun onConfirmClick(startDate: String, endDate: String) { + deviceViewModel.obtainSevenDayData(deviceCode, startDate, endDate) + deviceViewModel.obtainTotalDayData(deviceCode, startDate, endDate) + } + override fun onCancelClick() { + //选择取消就默认加载近7天的数据 + val time = System.currentTimeMillis() + val startTime = time.timestampToLastWeekTime() + val endTime = time.timestampToTime() + deviceViewModel.obtainSevenDayData(deviceCode, startTime, endTime) + deviceViewModel.obtainTotalDayData(deviceCode, startTime, endTime) + } + }) + .setFragmentManager(supportFragmentManager) + .setCalendarType(Type.ALL) + .build().show() + } + + //默认加载近一周的数据 + val time = System.currentTimeMillis() + val startTime = time.timestampToLastWeekTime() + val endTime = time.timestampToTime() + deviceViewModel.obtainSevenDayData(deviceCode, startTime, endTime) + deviceViewModel.dayDataModel.observe(this, { + if (it.code == 200) { + val entryModels: MutableList = ArrayList() + val xAxisDate: MutableList = ArrayList() + val entries: ArrayList = ArrayList() + val entryModel = LineChartEntryModel() + + entryModel.lineColor = Constant.COLORS[7].convertColor() + it.data?.forEachIndexed { index, dataBean -> + val split = dataBean.time.toString().split("-") + xAxisDate.add("${split[1]}/${split[2]}") + + entries.add(Entry(index.toFloat(), dataBean.value!!.toFloat(), "日用水量")) + } + entryModel.entryList = entries + entryModels.add(entryModel) + ChartViewHelper.setLineChartData(dayWaterLineChart, xAxisDate, entryModels) + } + }) + + deviceViewModel.obtainTotalDayData(deviceCode, startTime, endTime) + deviceViewModel.totalDataModel.observe(this, { + val entryModels: MutableList = ArrayList() + val xAxisDate: MutableList = ArrayList() + val entries: ArrayList = ArrayList() + val entryModel = LineChartEntryModel() + + entryModel.lineColor = Constant.COLORS[7].convertColor() + it.data?.forEachIndexed { index, dataBean -> + val split = dataBean.uptime.toString().split(" ")[0].split("-") + xAxisDate.add("${split[1]}/${split[2]}") + + entries.add(Entry(index.toFloat(), dataBean.total!!.toFloat(), "总用水量")) + } + entryModel.entryList = entries + entryModels.add(entryModel) + ChartViewHelper.setLineChartData(totalWaterLineChart, xAxisDate, entryModels) + }) } } \ No newline at end of file diff --git a/app/src/main/java/com/casic/qd/smartwell/view/MainActivity.kt b/app/src/main/java/com/casic/qd/smartwell/view/MainActivity.kt index 02435a3..3f4bb3c 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 @@ -1,7 +1,6 @@ package com.casic.qd.smartwell.view import android.content.Context -import android.content.Intent import android.os.Handler import android.os.Looper import android.os.Message @@ -22,6 +21,7 @@ import com.casic.qd.smartwell.vm.WaterStatisticsViewModel import com.github.mikephil.charting.data.Entry import com.pengxh.app.multilib.widget.dialog.AlertControlDialog +import com.pengxh.app.multilib.widget.dialog.BottomActionSheet import com.youth.banner.Banner import com.youth.banner.adapter.BannerImageAdapter import com.youth.banner.holder.BannerImageHolder @@ -100,9 +100,20 @@ HomeRecycleAdapter.OnGridItemClickListener { override fun onClick(position: Int) { when (position) { - 0 -> startActivity(Intent(context, MapActivity::class.java)) - 1 -> startActivity(Intent(context, SearchRecordActivity::class.java)) - 2 -> startActivity(Intent(context, StatisticsActivity::class.java)) + 0 -> context.navigatePageTo(MapActivity::class.java) + 1 -> { + BottomActionSheet.Builder() + .setContext(context) + .setActionItemTitles(arrayOf("设备", "数据")) + .setOnActionSheetListener { index -> + when (index) { + 0 -> context.navigatePageTo(SearchDeviceActivity::class.java) + 1 -> context.navigatePageTo(SearchDataActivity::class.java) + } + }.build().show() + + } + 2 -> context.navigatePageTo(StatisticsActivity::class.java) } } }) diff --git a/app/src/main/java/com/casic/qd/smartwell/view/SearchAlarmActivity.kt b/app/src/main/java/com/casic/qd/smartwell/view/SearchAlarmActivity.kt index 8f54163..5285a9f 100644 --- a/app/src/main/java/com/casic/qd/smartwell/view/SearchAlarmActivity.kt +++ b/app/src/main/java/com/casic/qd/smartwell/view/SearchAlarmActivity.kt @@ -13,11 +13,6 @@ import com.jzxiang.pickerview.data.Type import com.qmuiteam.qmui.widget.dialog.QMUIBottomSheet.BottomListSheetBuilder import kotlinx.android.synthetic.main.activity_alarm_search.* -import kotlinx.android.synthetic.main.activity_alarm_search.areaView -import kotlinx.android.synthetic.main.activity_alarm_search.clearButton -import kotlinx.android.synthetic.main.activity_alarm_search.searchButton -import kotlinx.android.synthetic.main.activity_alarm_search.wellCodeView -import kotlinx.android.synthetic.main.activity_search_record.* import kotlinx.android.synthetic.main.include_base_title.* class SearchAlarmActivity : BaseActivity() { diff --git a/app/src/main/java/com/casic/qd/smartwell/view/SearchDataActivity.kt b/app/src/main/java/com/casic/qd/smartwell/view/SearchDataActivity.kt new file mode 100644 index 0000000..e6a38e4 --- /dev/null +++ b/app/src/main/java/com/casic/qd/smartwell/view/SearchDataActivity.kt @@ -0,0 +1,168 @@ +package com.casic.qd.smartwell.view + +import com.casic.qd.smartwell.R +import com.casic.qd.smartwell.base.BaseActivity +import kotlinx.android.synthetic.main.include_base_title.* + +/** + * @author a203 + * @description 记录查询界面 + * @date 2022/2/17 14:33 + * @email 290677893@qq.com + */ +class SearchDataActivity : BaseActivity() { + +// private lateinit var deviceViewModel: DeviceViewModel +// private lateinit var authenticateViewModel: AuthenticateViewModel +// private lateinit var areaViewModel: AreaViewModel +// private var authenticatedType: MutableList = ArrayList() +// private var deviceTypeValue = "" +// private var deptId = "" +// private var deviceState = "" +// private var areaId = "" + + override fun initLayoutView(): Int = R.layout.activity_data_search + + override fun setupTopBarLayout() { + titleView.text = "数据查询" + } + + override fun initData() { +// val userDeviceJson = SaveKeyValues.getValue(Constant.USER_DEVICE_TYPE, "") as String +// if (userDeviceJson.isNotBlank()) { +// authenticatedType = Gson().fromJson( +// userDeviceJson, object : TypeToken>() {}.type +// ) +// } +// deviceViewModel = ViewModelProvider(this).get(DeviceViewModel::class.java) +// authenticateViewModel = ViewModelProvider(this).get(AuthenticateViewModel::class.java) +// areaViewModel = ViewModelProvider(this).get(AreaViewModel::class.java) + } + + override fun initEvent() { +// deviceTypeView.setOnClickListener { +// /** +// * 获取全部设备类型 +// * */ +// deviceViewModel.obtainDeviceType() +// } +// deviceViewModel.typeModel.observe(this, { +// if (it.code == 200) { +// val authenticatedModel: MutableList = ArrayList() +// it.data?.forEach { deviceModel -> +// if (deviceModel.value in authenticatedType) { +// authenticatedModel.add(deviceModel) +// } +// } +// val sheetBuilder = QMUIBottomSheet.BottomListSheetBuilder(this) +// sheetBuilder.setTitle("设备类型") +// authenticatedModel.forEach { deviceModel -> +// sheetBuilder.addItem(deviceModel.name) +// } +// sheetBuilder.setGravityCenter(true) +// .setOnSheetItemClickListener { dialog, _, position, tag -> +// deviceTypeView.text = tag +// this.deviceTypeValue = authenticatedModel[position].value.toString() +// +// dialog.dismiss() +// }.build().show() +// } +// }) +// +// ownerShipView.setOnClickListener { +// authenticateViewModel.obtainOwnerShip("03") +// } +// authenticateViewModel.resultModel.observe(this, { +// if (it.code == 200) { +// val ownerShipModel: MutableList = ArrayList() +// it.data?.list?.forEach { listBean -> +// ownerShipModel.add(listBean) +// } +// val sheetBuilder = QMUIBottomSheet.BottomListSheetBuilder(this) +// sheetBuilder.setTitle("权属单位") +// ownerShipModel.forEach { model -> +// sheetBuilder.addItem(model.name) +// } +// sheetBuilder.setGravityCenter(true) +// .setOnSheetItemClickListener { dialog, _, position, tag -> +// ownerShipView.text = tag +// this.deptId = ownerShipModel[position].id.toString() +// +// dialog.dismiss() +// }.build().show() +// } +// }) +// +// deviceStateView.setOnClickListener { +// QMUIBottomSheet.BottomListSheetBuilder(this) +// .setTitle("在线情况") +// .addItem("在线") +// .addItem("离线") +// .setGravityCenter(true) +// .setOnSheetItemClickListener { dialog, _, _, tag -> +// deviceStateView.text = tag +// this.deviceState = if (tag == "在线") { +// "1" +// } else { +// "0" +// } +// +// dialog.dismiss() +// }.build().show() +// } +// +// areaView.setOnClickListener { +// areaViewModel.obtainArea() +// } +// areaViewModel.areaModel.observe(this, { +// if (it.code == 200) { +// val firstLevelArea: MutableList = ArrayList() +// val secondLevelArea: MutableList = ArrayList() +// val thirdLevelArea: MutableList = ArrayList() +// it.data?.forEach { dataBean -> +// when (dataBean.level) { +// 2 -> firstLevelArea.add(dataBean) +// 3 -> secondLevelArea.add(dataBean) +// 4 -> thirdLevelArea.add(dataBean) +// } +// } +// +// // 绑定区域 +// BottomAreaSheet.Builder() +// .setContext(this) +// .setFirstAreaData(firstLevelArea) +// .setSecondAreaData(secondLevelArea) +// .setThirdAreaData(thirdLevelArea) +// .setOnActionSheetListener(object : BottomAreaSheet.OnActionSheetListener { +// override fun onAreaSelected(area: String?, id: String?) { +// areaView.text = area +// areaId = id.toString() +// } +// }).build().show() +// } +// }) +// +// searchButton.setChangeAlphaWhenPress(true) +// searchButton.setOnClickListener { +// //页面跳转,将查询参数传过去 +// navigatePageTo( +// DeviceSearchResultActivity::class.java, addAll( +// wellCodeView.text.toString().trim(), +// deviceTypeValue, +// deptId, +// deviceState, +// areaId +// ) +// ) +// } +// +// clearButton.setChangeAlphaWhenPress(true) +// clearButton.setOnClickListener { +// wellCodeView.setText("") +// deviceTypeView.text = "" +// ownerShipView.text = "" +// deviceStateView.text = "" +// areaView.text = "" +// } + } +} \ No newline at end of file diff --git a/app/src/main/java/com/casic/qd/smartwell/view/SearchDeviceActivity.kt b/app/src/main/java/com/casic/qd/smartwell/view/SearchDeviceActivity.kt new file mode 100644 index 0000000..cf0c05f --- /dev/null +++ b/app/src/main/java/com/casic/qd/smartwell/view/SearchDeviceActivity.kt @@ -0,0 +1,184 @@ +package com.casic.qd.smartwell.view + +import androidx.lifecycle.ViewModelProvider +import com.casic.qd.smartwell.R +import com.casic.qd.smartwell.base.BaseActivity +import com.casic.qd.smartwell.extensions.addAll +import com.casic.qd.smartwell.extensions.navigatePageTo +import com.casic.qd.smartwell.model.AreaModel +import com.casic.qd.smartwell.model.DeviceTypeModel +import com.casic.qd.smartwell.model.OwnerShipModel +import com.casic.qd.smartwell.utils.Constant +import com.casic.qd.smartwell.utils.SaveKeyValues +import com.casic.qd.smartwell.vm.AreaViewModel +import com.casic.qd.smartwell.vm.AuthenticateViewModel +import com.casic.qd.smartwell.vm.DeviceViewModel +import com.casic.qd.smartwell.widgets.BottomAreaSheet +import com.google.gson.Gson +import com.google.gson.reflect.TypeToken +import com.qmuiteam.qmui.widget.dialog.QMUIBottomSheet +import kotlinx.android.synthetic.main.activity_device_search.* +import kotlinx.android.synthetic.main.include_base_title.* + +/** + * @author a203 + * @description 记录查询界面 + * @date 2022/2/17 14:33 + * @email 290677893@qq.com + */ +class SearchDeviceActivity : BaseActivity() { + + private lateinit var deviceViewModel: DeviceViewModel + private lateinit var authenticateViewModel: AuthenticateViewModel + private lateinit var areaViewModel: AreaViewModel + private var authenticatedType: MutableList = ArrayList() + private var deviceTypeValue = "" + private var deptId = "" + private var deviceState = "" + private var areaId = "" + + override fun initLayoutView(): Int = R.layout.activity_device_search + + override fun setupTopBarLayout() { + titleView.text = "设备查询" + } + + override fun initData() { + val userDeviceJson = SaveKeyValues.getValue(Constant.USER_DEVICE_TYPE, "") as String + if (userDeviceJson.isNotBlank()) { + authenticatedType = Gson().fromJson( + userDeviceJson, object : TypeToken>() {}.type + ) + } + deviceViewModel = ViewModelProvider(this).get(DeviceViewModel::class.java) + authenticateViewModel = ViewModelProvider(this).get(AuthenticateViewModel::class.java) + areaViewModel = ViewModelProvider(this).get(AreaViewModel::class.java) + } + + override fun initEvent() { + deviceTypeView.setOnClickListener { + /** + * 获取全部设备类型 + * */ + deviceViewModel.obtainDeviceType() + } + deviceViewModel.typeModel.observe(this, { + if (it.code == 200) { + val authenticatedModel: MutableList = ArrayList() + it.data?.forEach { deviceModel -> + if (deviceModel.value in authenticatedType) { + authenticatedModel.add(deviceModel) + } + } + val sheetBuilder = QMUIBottomSheet.BottomListSheetBuilder(this) + sheetBuilder.setTitle("设备类型") + authenticatedModel.forEach { deviceModel -> + sheetBuilder.addItem(deviceModel.name) + } + sheetBuilder.setGravityCenter(true) + .setOnSheetItemClickListener { dialog, _, position, tag -> + deviceTypeView.text = tag + this.deviceTypeValue = authenticatedModel[position].value.toString() + + dialog.dismiss() + }.build().show() + } + }) + + ownerShipView.setOnClickListener { + authenticateViewModel.obtainOwnerShip("03") + } + authenticateViewModel.resultModel.observe(this, { + if (it.code == 200) { + val ownerShipModel: MutableList = ArrayList() + it.data?.list?.forEach { listBean -> + ownerShipModel.add(listBean) + } + val sheetBuilder = QMUIBottomSheet.BottomListSheetBuilder(this) + sheetBuilder.setTitle("权属单位") + ownerShipModel.forEach { model -> + sheetBuilder.addItem(model.name) + } + sheetBuilder.setGravityCenter(true) + .setOnSheetItemClickListener { dialog, _, position, tag -> + ownerShipView.text = tag + this.deptId = ownerShipModel[position].id.toString() + + dialog.dismiss() + }.build().show() + } + }) + + deviceStateView.setOnClickListener { + QMUIBottomSheet.BottomListSheetBuilder(this) + .setTitle("在线情况") + .addItem("在线") + .addItem("离线") + .setGravityCenter(true) + .setOnSheetItemClickListener { dialog, _, _, tag -> + deviceStateView.text = tag + this.deviceState = if (tag == "在线") { + "1" + } else { + "0" + } + + dialog.dismiss() + }.build().show() + } + + areaView.setOnClickListener { + areaViewModel.obtainArea() + } + areaViewModel.areaModel.observe(this, { + if (it.code == 200) { + val firstLevelArea: MutableList = ArrayList() + val secondLevelArea: MutableList = ArrayList() + val thirdLevelArea: MutableList = ArrayList() + it.data?.forEach { dataBean -> + when (dataBean.level) { + 2 -> firstLevelArea.add(dataBean) + 3 -> secondLevelArea.add(dataBean) + 4 -> thirdLevelArea.add(dataBean) + } + } + + // 绑定区域 + BottomAreaSheet.Builder() + .setContext(this) + .setFirstAreaData(firstLevelArea) + .setSecondAreaData(secondLevelArea) + .setThirdAreaData(thirdLevelArea) + .setOnActionSheetListener(object : BottomAreaSheet.OnActionSheetListener { + override fun onAreaSelected(area: String?, id: String?) { + areaView.text = area + areaId = id.toString() + } + }).build().show() + } + }) + + searchButton.setChangeAlphaWhenPress(true) + searchButton.setOnClickListener { + //页面跳转,将查询参数传过去 + navigatePageTo( + DeviceSearchResultActivity::class.java, addAll( + wellCodeView.text.toString().trim(), + deviceTypeValue, + deptId, + deviceState, + areaId + ) + ) + } + + clearButton.setChangeAlphaWhenPress(true) + clearButton.setOnClickListener { + wellCodeView.setText("") + deviceTypeView.text = "" + ownerShipView.text = "" + deviceStateView.text = "" + areaView.text = "" + } + } +} \ No newline at end of file diff --git a/app/src/main/java/com/casic/qd/smartwell/view/SearchRecordActivity.kt b/app/src/main/java/com/casic/qd/smartwell/view/SearchRecordActivity.kt deleted file mode 100644 index 8cab864..0000000 --- a/app/src/main/java/com/casic/qd/smartwell/view/SearchRecordActivity.kt +++ /dev/null @@ -1,184 +0,0 @@ -package com.casic.qd.smartwell.view - -import androidx.lifecycle.ViewModelProvider -import com.casic.qd.smartwell.R -import com.casic.qd.smartwell.base.BaseActivity -import com.casic.qd.smartwell.extensions.addAll -import com.casic.qd.smartwell.extensions.navigatePageTo -import com.casic.qd.smartwell.model.AreaModel -import com.casic.qd.smartwell.model.DeviceTypeModel -import com.casic.qd.smartwell.model.OwnerShipModel -import com.casic.qd.smartwell.utils.Constant -import com.casic.qd.smartwell.utils.SaveKeyValues -import com.casic.qd.smartwell.vm.AreaViewModel -import com.casic.qd.smartwell.vm.AuthenticateViewModel -import com.casic.qd.smartwell.vm.DeviceViewModel -import com.casic.qd.smartwell.widgets.BottomAreaSheet -import com.google.gson.Gson -import com.google.gson.reflect.TypeToken -import com.qmuiteam.qmui.widget.dialog.QMUIBottomSheet -import kotlinx.android.synthetic.main.activity_search_record.* -import kotlinx.android.synthetic.main.include_base_title.* - -/** - * @author a203 - * @description 记录查询界面 - * @date 2022/2/17 14:33 - * @email 290677893@qq.com - */ -class SearchRecordActivity : BaseActivity() { - - private lateinit var deviceViewModel: DeviceViewModel - private lateinit var authenticateViewModel: AuthenticateViewModel - private lateinit var areaViewModel: AreaViewModel - private var authenticatedType: MutableList = ArrayList() - private var deviceTypeValue = "" - private var deptId = "" - private var deviceState = "" - private var areaId = "" - - override fun initLayoutView(): Int = R.layout.activity_search_record - - override fun setupTopBarLayout() { - titleView.text = "记录查询" - } - - override fun initData() { - val userDeviceJson = SaveKeyValues.getValue(Constant.USER_DEVICE_TYPE, "") as String - if (userDeviceJson.isNotBlank()) { - authenticatedType = Gson().fromJson( - userDeviceJson, object : TypeToken>() {}.type - ) - } - deviceViewModel = ViewModelProvider(this).get(DeviceViewModel::class.java) - authenticateViewModel = ViewModelProvider(this).get(AuthenticateViewModel::class.java) - areaViewModel = ViewModelProvider(this).get(AreaViewModel::class.java) - } - - override fun initEvent() { - deviceTypeView.setOnClickListener { - /** - * 获取全部设备类型 - * */ - deviceViewModel.obtainDeviceType() - } - deviceViewModel.typeModel.observe(this, { - if (it.code == 200) { - val authenticatedModel: MutableList = ArrayList() - it.data?.forEach { deviceModel -> - if (deviceModel.value in authenticatedType) { - authenticatedModel.add(deviceModel) - } - } - val sheetBuilder = QMUIBottomSheet.BottomListSheetBuilder(this) - sheetBuilder.setTitle("设备类型") - authenticatedModel.forEach { deviceModel -> - sheetBuilder.addItem(deviceModel.name) - } - sheetBuilder.setGravityCenter(true) - .setOnSheetItemClickListener { dialog, _, position, tag -> - deviceTypeView.text = tag - this.deviceTypeValue = authenticatedModel[position].value.toString() - - dialog.dismiss() - }.build().show() - } - }) - - ownerShipView.setOnClickListener { - authenticateViewModel.obtainOwnerShip("03") - } - authenticateViewModel.resultModel.observe(this, { - if (it.code == 200) { - val ownerShipModel: MutableList = ArrayList() - it.data?.list?.forEach { listBean -> - ownerShipModel.add(listBean) - } - val sheetBuilder = QMUIBottomSheet.BottomListSheetBuilder(this) - sheetBuilder.setTitle("权属单位") - ownerShipModel.forEach { model -> - sheetBuilder.addItem(model.name) - } - sheetBuilder.setGravityCenter(true) - .setOnSheetItemClickListener { dialog, _, position, tag -> - ownerShipView.text = tag - this.deptId = ownerShipModel[position].id.toString() - - dialog.dismiss() - }.build().show() - } - }) - - deviceStateView.setOnClickListener { - QMUIBottomSheet.BottomListSheetBuilder(this) - .setTitle("在线情况") - .addItem("在线") - .addItem("离线") - .setGravityCenter(true) - .setOnSheetItemClickListener { dialog, _, _, tag -> - deviceStateView.text = tag - this.deviceState = if (tag == "在线") { - "1" - } else { - "0" - } - - dialog.dismiss() - }.build().show() - } - - areaView.setOnClickListener { - areaViewModel.obtainArea() - } - areaViewModel.areaModel.observe(this, { - if (it.code == 200) { - val firstLevelArea: MutableList = ArrayList() - val secondLevelArea: MutableList = ArrayList() - val thirdLevelArea: MutableList = ArrayList() - it.data?.forEach { dataBean -> - when (dataBean.level) { - 2 -> firstLevelArea.add(dataBean) - 3 -> secondLevelArea.add(dataBean) - 4 -> thirdLevelArea.add(dataBean) - } - } - - // 绑定区域 - BottomAreaSheet.Builder() - .setContext(this) - .setFirstAreaData(firstLevelArea) - .setSecondAreaData(secondLevelArea) - .setThirdAreaData(thirdLevelArea) - .setOnActionSheetListener(object : BottomAreaSheet.OnActionSheetListener { - override fun onAreaSelected(area: String?, id: String?) { - areaView.text = area - areaId = id.toString() - } - }).build().show() - } - }) - - searchButton.setChangeAlphaWhenPress(true) - searchButton.setOnClickListener { - //页面跳转,将查询参数传过去 - navigatePageTo( - DeviceSearchResultActivity::class.java, addAll( - wellCodeView.text.toString().trim(), - deviceTypeValue, - deptId, - deviceState, - areaId - ) - ) - } - - clearButton.setChangeAlphaWhenPress(true) - clearButton.setOnClickListener { - wellCodeView.setText("") - deviceTypeView.text = "" - ownerShipView.text = "" - deviceStateView.text = "" - areaView.text = "" - } - } -} \ No newline at end of file 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 21c4286..3272cfe 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 @@ -15,6 +15,7 @@ import com.casic.qd.smartwell.widgets.DateSelectDialog import com.github.mikephil.charting.data.BarEntry import com.github.mikephil.charting.data.PieEntry +import com.jzxiang.pickerview.data.Type import kotlinx.android.synthetic.main.activity_statistics.* import kotlinx.android.synthetic.main.include_base_title.* import java.util.* @@ -97,7 +98,6 @@ 5 -> { DateSelectDialog.Builder() .setContext(context) - .setFragmentManager(supportFragmentManager) .setTitle("选择日期") .setNegativeButton("取消") .setPositiveButton("选好了") @@ -113,7 +113,10 @@ //选择取消就默认加载近7天的数据 periodSpinner.setSelection(3) } - }).build().show() + }) + .setFragmentManager(supportFragmentManager) + .setCalendarType(Type.YEAR_MONTH_DAY) + .build().show() } } } @@ -200,7 +203,6 @@ 5 -> { DateSelectDialog.Builder() .setContext(context) - .setFragmentManager(supportFragmentManager) .setTitle("选择日期") .setNegativeButton("取消") .setPositiveButton("选好了") @@ -216,7 +218,10 @@ //选择取消就默认加载近7天的数据 periodSpinner.setSelection(3) } - }).build().show() + }) + .setFragmentManager(supportFragmentManager) + .setCalendarType(Type.YEAR_MONTH_DAY) + .build().show() } } } diff --git a/app/src/main/java/com/casic/qd/smartwell/view/WaterExpandedActivity.kt b/app/src/main/java/com/casic/qd/smartwell/view/WaterExpandedActivity.kt index 251140d..7a63dea 100644 --- a/app/src/main/java/com/casic/qd/smartwell/view/WaterExpandedActivity.kt +++ b/app/src/main/java/com/casic/qd/smartwell/view/WaterExpandedActivity.kt @@ -13,6 +13,7 @@ import com.casic.qd.smartwell.vm.WaterStatisticsViewModel import com.casic.qd.smartwell.widgets.DateSelectDialog import com.github.mikephil.charting.data.Entry +import com.jzxiang.pickerview.data.Type import kotlinx.android.synthetic.main.activity_water_expanded.* import java.util.* import kotlin.collections.ArrayList @@ -86,7 +87,6 @@ 5 -> { DateSelectDialog.Builder() .setContext(context) - .setFragmentManager(supportFragmentManager) .setTitle("选择日期") .setNegativeButton("取消") .setPositiveButton("选好了") @@ -102,7 +102,10 @@ //选择取消就默认加载近7天的数据 periodSpinner.setSelection(3) } - }).build().show() + }) + .setFragmentManager(supportFragmentManager) + .setCalendarType(Type.YEAR_MONTH_DAY) + .build().show() } } } diff --git a/app/src/main/java/com/casic/qd/smartwell/vm/DeviceViewModel.kt b/app/src/main/java/com/casic/qd/smartwell/vm/DeviceViewModel.kt index 02aefed..9448ade 100644 --- a/app/src/main/java/com/casic/qd/smartwell/vm/DeviceViewModel.kt +++ b/app/src/main/java/com/casic/qd/smartwell/vm/DeviceViewModel.kt @@ -7,8 +7,10 @@ import com.casic.qd.smartwell.extensions.separateResponseCode import com.casic.qd.smartwell.extensions.show import com.casic.qd.smartwell.extensions.toErrorMessage +import com.casic.qd.smartwell.model.DayDataModel import com.casic.qd.smartwell.model.DeviceStatisticsModel import com.casic.qd.smartwell.model.DeviceTypeModel +import com.casic.qd.smartwell.model.TotalDataModel import com.casic.qd.smartwell.utils.retrofit.RetrofitServiceManager import com.google.gson.Gson import com.google.gson.reflect.TypeToken @@ -19,6 +21,8 @@ private val gson = Gson() val resultModel = MutableLiveData() val typeModel = MutableLiveData() + val dayDataModel = MutableLiveData() + val totalDataModel = MutableLiveData() /** * 管网资产统计 @@ -55,4 +59,40 @@ Log.e(kTag, it.toString(), it) "服务器异常".show() }) + + /** + * 获取设备日用水量 + */ + fun obtainSevenDayData(devCode: String?, beginTime: String?, endTime: String?) = launch({ + val response = RetrofitServiceManager.obtainSevenDayData(devCode, beginTime, endTime) + val responseCode = response.separateResponseCode() + if (responseCode == 200) { + dayDataModel.value = gson.fromJson( + response, object : TypeToken() {}.type + ) + } else { + response.toErrorMessage().show() + } + }, { + Log.e(kTag, it.toString(), it) + "服务器异常".show() + }) + + /** + * 获取设备累计用水量 + */ + fun obtainTotalDayData(devCode: String?, beginTime: String?, endTime: String?) = launch({ + val response = RetrofitServiceManager.obtainTotalDayData(devCode, beginTime, endTime) + val responseCode = response.separateResponseCode() + if (responseCode == 200) { + totalDataModel.value = gson.fromJson( + response, object : TypeToken() {}.type + ) + } else { + 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/widgets/DateSelectDialog.kt b/app/src/main/java/com/casic/qd/smartwell/widgets/DateSelectDialog.kt index ec403eb..fda3a03 100644 --- a/app/src/main/java/com/casic/qd/smartwell/widgets/DateSelectDialog.kt +++ b/app/src/main/java/com/casic/qd/smartwell/widgets/DateSelectDialog.kt @@ -9,6 +9,7 @@ import com.casic.qd.smartwell.extensions.convertColor import com.casic.qd.smartwell.extensions.initDialogLayoutParams import com.casic.qd.smartwell.extensions.timestampToDate +import com.casic.qd.smartwell.extensions.timestampToTime import com.casic.qd.smartwell.utils.Constant import com.jzxiang.pickerview.TimePickerDialog import com.jzxiang.pickerview.data.Type @@ -18,30 +19,27 @@ builder.context, R.style.UserDefinedDialogStyle ) { - private val fragmentManager: FragmentManager = builder.fragmentManager private val title: String = builder.title private val negativeBtn: String = builder.negativeBtn private val positiveBtn: String = builder.positiveBtn private val listener: OnDialogButtonClickListener = builder.listener + private val fragmentManager: FragmentManager = builder.fragmentManager + private val type: Type = builder.type class Builder { lateinit var context: Context - lateinit var fragmentManager: FragmentManager lateinit var title: String lateinit var negativeBtn: String lateinit var positiveBtn: String lateinit var listener: OnDialogButtonClickListener + lateinit var fragmentManager: FragmentManager + lateinit var type: Type fun setContext(context: Context): Builder { this.context = context return this } - fun setFragmentManager(fragmentManager: FragmentManager): Builder { - this.fragmentManager = fragmentManager - return this - } - fun setTitle(title: String): Builder { this.title = title return this @@ -62,6 +60,16 @@ return this } + fun setFragmentManager(fragmentManager: FragmentManager): Builder { + this.fragmentManager = fragmentManager + return this + } + + fun setCalendarType(calendarType: Type): Builder { + this.type = calendarType + return this + } + fun build(): DateSelectDialog { return DateSelectDialog(this) } @@ -69,7 +77,7 @@ override fun onCreate(savedInstanceState: Bundle?) { super.onCreate(savedInstanceState) - this.initDialogLayoutParams(Gravity.CENTER, R.style.UserDefinedAnimation, 0.8f) + this.initDialogLayoutParams(Gravity.CENTER, R.style.UserDefinedAnimation, 0.85f) setContentView(R.layout.dialog_select_date) setCancelable(false) setCanceledOnTouchOutside(false) @@ -86,10 +94,15 @@ .setCyclic(false) .setMinMillseconds(System.currentTimeMillis() - Constant.FIVE_YEARS) .setMaxMillseconds(System.currentTimeMillis()) - .setType(Type.YEAR_MONTH_DAY) + .setType(type) .setCallBack { _: TimePickerDialog?, millSeconds: Long -> - startDateView.setText(millSeconds.timestampToDate()) - }.build().show(fragmentManager, "YEAR_MONTH_DAY") + val textValue = if (type == Type.ALL) { + millSeconds.timestampToTime() + } else { + millSeconds.timestampToDate() + } + startDateView.setText(textValue) + }.build().show(fragmentManager, "DateSelectDialog") } endDateView.setOnClickListener { @@ -100,10 +113,15 @@ .setCyclic(false) .setMinMillseconds(System.currentTimeMillis() - Constant.FIVE_YEARS) .setMaxMillseconds(System.currentTimeMillis()) - .setType(Type.YEAR_MONTH_DAY) + .setType(type) .setCallBack { _: TimePickerDialog?, millSeconds: Long -> - endDateView.setText(millSeconds.timestampToDate()) - }.build().show(fragmentManager, "YEAR_MONTH_DAY") + val textValue = if (type == Type.ALL) { + millSeconds.timestampToTime() + } else { + millSeconds.timestampToDate() + } + endDateView.setText(textValue) + }.build().show(fragmentManager, "DateSelectDialog") } dialogCancelButton.text = negativeBtn diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml index 82386c9..3832c68 100644 --- a/app/src/main/AndroidManifest.xml +++ b/app/src/main/AndroidManifest.xml @@ -48,7 +48,7 @@ - + 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 216e7cc..f53e831 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,6 +15,14 @@ return dateFormat.format(calendar.time) } +fun Long.timestampToLastWeekTime(): String { + val dateFormat = SimpleDateFormat("yyyy-MM-dd HH:mm:ss", Locale.CHINA) + val calendar = Calendar.getInstance() + calendar.time = Date(this) + calendar.set(Calendar.DAY_OF_YEAR, calendar.get(Calendar.DAY_OF_YEAR) - 6) + return dateFormat.format(calendar.time) +} + fun Long.timestampToLastMonthDate(): String { val dateFormat = SimpleDateFormat("yyyy-MM-dd", Locale.CHINA) val calendar = Calendar.getInstance() diff --git a/app/src/main/java/com/casic/qd/smartwell/model/DayDataModel.kt b/app/src/main/java/com/casic/qd/smartwell/model/DayDataModel.kt new file mode 100644 index 0000000..18d1399 --- /dev/null +++ b/app/src/main/java/com/casic/qd/smartwell/model/DayDataModel.kt @@ -0,0 +1,13 @@ +package com.casic.qd.smartwell.model + +class DayDataModel { + var code = 0 + var data: List? = null + var message: String? = null + var isSuccess = false + + class DataBean { + var time: String? = null + var value: String? = null + } +} \ No newline at end of file diff --git a/app/src/main/java/com/casic/qd/smartwell/model/TotalDataModel.kt b/app/src/main/java/com/casic/qd/smartwell/model/TotalDataModel.kt new file mode 100644 index 0000000..30bf829 --- /dev/null +++ b/app/src/main/java/com/casic/qd/smartwell/model/TotalDataModel.kt @@ -0,0 +1,14 @@ +package com.casic.qd.smartwell.model + +class TotalDataModel { + var code = 0 + var data: List? = null + var message: String? = null + var isSuccess = false + + class DataBean { + var total: String? = null + var deviceState: String? = null + var uptime: String? = null + } +} \ No newline at end of file diff --git a/app/src/main/java/com/casic/qd/smartwell/utils/retrofit/RetrofitService.kt b/app/src/main/java/com/casic/qd/smartwell/utils/retrofit/RetrofitService.kt index c5bf469..0c80ee9 100644 --- a/app/src/main/java/com/casic/qd/smartwell/utils/retrofit/RetrofitService.kt +++ b/app/src/main/java/com/casic/qd/smartwell/utils/retrofit/RetrofitService.kt @@ -202,4 +202,26 @@ @Query("offset") offset: Int, @Query("limit") limit: Int ): String + + /** + * 获取设备日用水量 + * */ + @GET("/device/sevenDayData") + suspend fun obtainSevenDayData( + @Header("token") token: String, + @Query("devCode") devCode: String?, + @Query("beginTime") beginTime: String?, + @Query("endTime") endTime: String? + ): String + + /** + * 获取设备日用水量 + * */ + @GET("/device/totalData") + suspend fun obtainTotalDayData( + @Header("token") token: String, + @Query("devCode") devCode: String?, + @Query("beginTime") beginTime: String?, + @Query("endTime") endTime: String? + ): String } \ No newline at end of file diff --git a/app/src/main/java/com/casic/qd/smartwell/utils/retrofit/RetrofitServiceManager.kt b/app/src/main/java/com/casic/qd/smartwell/utils/retrofit/RetrofitServiceManager.kt index 6f728e0..a8b320f 100644 --- a/app/src/main/java/com/casic/qd/smartwell/utils/retrofit/RetrofitServiceManager.kt +++ b/app/src/main/java/com/casic/qd/smartwell/utils/retrofit/RetrofitServiceManager.kt @@ -204,4 +204,18 @@ Constant.PAGE_LIMIT ) } + + /** + * 获取设备日用水量 + */ + suspend fun obtainSevenDayData(devCode: String?, beginTime: String?, endTime: String?): String { + return api.obtainSevenDayData(AuthenticationHelper.token!!, devCode, beginTime, endTime) + } + + /** + * 获取设备累计用水量 + */ + suspend fun obtainTotalDayData(devCode: String?, beginTime: String?, endTime: String?): String { + return api.obtainTotalDayData(AuthenticationHelper.token!!, devCode, beginTime, endTime) + } } \ No newline at end of file diff --git a/app/src/main/java/com/casic/qd/smartwell/view/DeviceDataDetailActivity.kt b/app/src/main/java/com/casic/qd/smartwell/view/DeviceDataDetailActivity.kt index 7029d17..a8a2695 100644 --- a/app/src/main/java/com/casic/qd/smartwell/view/DeviceDataDetailActivity.kt +++ b/app/src/main/java/com/casic/qd/smartwell/view/DeviceDataDetailActivity.kt @@ -1,22 +1,109 @@ package com.casic.qd.smartwell.view +import androidx.lifecycle.ViewModelProvider import com.casic.qd.smartwell.R import com.casic.qd.smartwell.base.BaseActivity -import kotlinx.android.synthetic.main.include_base_title.* +import com.casic.qd.smartwell.extensions.convertColor +import com.casic.qd.smartwell.extensions.timestampToLastWeekTime +import com.casic.qd.smartwell.extensions.timestampToTime +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.DeviceViewModel +import com.casic.qd.smartwell.widgets.DateSelectDialog +import com.github.mikephil.charting.data.Entry +import com.jzxiang.pickerview.data.Type +import kotlinx.android.synthetic.main.activity_device_data_detail.* +import kotlinx.android.synthetic.main.activity_main.rightOptionView +import kotlinx.android.synthetic.main.activity_main.titleView class DeviceDataDetailActivity : BaseActivity() { - override fun initLayoutView(): Int = R.layout.activity_device_detail + private val kTag = "DeviceDataDetailActivity" + private lateinit var deviceCode: String + private lateinit var deviceViewModel: DeviceViewModel + + override fun initLayoutView(): Int = R.layout.activity_device_data_detail override fun setupTopBarLayout() { - titleView.text = "历史数据" + deviceCode = intent.getStringExtra(Constant.INTENT_PARAM)!! + titleView.text = String.format("${deviceCode}历史数据") } override fun initData() { - + deviceViewModel = ViewModelProvider(this).get(DeviceViewModel::class.java) } override fun initEvent() { + rightOptionView.setOnClickListener { + DateSelectDialog.Builder() + .setContext(this) + .setTitle("选择日期") + .setNegativeButton("取消") + .setPositiveButton("选好了") + .setOnDialogButtonClickListener(object : + DateSelectDialog.OnDialogButtonClickListener { + override fun onConfirmClick(startDate: String, endDate: String) { + deviceViewModel.obtainSevenDayData(deviceCode, startDate, endDate) + deviceViewModel.obtainTotalDayData(deviceCode, startDate, endDate) + } + override fun onCancelClick() { + //选择取消就默认加载近7天的数据 + val time = System.currentTimeMillis() + val startTime = time.timestampToLastWeekTime() + val endTime = time.timestampToTime() + deviceViewModel.obtainSevenDayData(deviceCode, startTime, endTime) + deviceViewModel.obtainTotalDayData(deviceCode, startTime, endTime) + } + }) + .setFragmentManager(supportFragmentManager) + .setCalendarType(Type.ALL) + .build().show() + } + + //默认加载近一周的数据 + val time = System.currentTimeMillis() + val startTime = time.timestampToLastWeekTime() + val endTime = time.timestampToTime() + deviceViewModel.obtainSevenDayData(deviceCode, startTime, endTime) + deviceViewModel.dayDataModel.observe(this, { + if (it.code == 200) { + val entryModels: MutableList = ArrayList() + val xAxisDate: MutableList = ArrayList() + val entries: ArrayList = ArrayList() + val entryModel = LineChartEntryModel() + + entryModel.lineColor = Constant.COLORS[7].convertColor() + it.data?.forEachIndexed { index, dataBean -> + val split = dataBean.time.toString().split("-") + xAxisDate.add("${split[1]}/${split[2]}") + + entries.add(Entry(index.toFloat(), dataBean.value!!.toFloat(), "日用水量")) + } + entryModel.entryList = entries + entryModels.add(entryModel) + ChartViewHelper.setLineChartData(dayWaterLineChart, xAxisDate, entryModels) + } + }) + + deviceViewModel.obtainTotalDayData(deviceCode, startTime, endTime) + deviceViewModel.totalDataModel.observe(this, { + val entryModels: MutableList = ArrayList() + val xAxisDate: MutableList = ArrayList() + val entries: ArrayList = ArrayList() + val entryModel = LineChartEntryModel() + + entryModel.lineColor = Constant.COLORS[7].convertColor() + it.data?.forEachIndexed { index, dataBean -> + val split = dataBean.uptime.toString().split(" ")[0].split("-") + xAxisDate.add("${split[1]}/${split[2]}") + + entries.add(Entry(index.toFloat(), dataBean.total!!.toFloat(), "总用水量")) + } + entryModel.entryList = entries + entryModels.add(entryModel) + ChartViewHelper.setLineChartData(totalWaterLineChart, xAxisDate, entryModels) + }) } } \ No newline at end of file diff --git a/app/src/main/java/com/casic/qd/smartwell/view/MainActivity.kt b/app/src/main/java/com/casic/qd/smartwell/view/MainActivity.kt index 02435a3..3f4bb3c 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 @@ -1,7 +1,6 @@ package com.casic.qd.smartwell.view import android.content.Context -import android.content.Intent import android.os.Handler import android.os.Looper import android.os.Message @@ -22,6 +21,7 @@ import com.casic.qd.smartwell.vm.WaterStatisticsViewModel import com.github.mikephil.charting.data.Entry import com.pengxh.app.multilib.widget.dialog.AlertControlDialog +import com.pengxh.app.multilib.widget.dialog.BottomActionSheet import com.youth.banner.Banner import com.youth.banner.adapter.BannerImageAdapter import com.youth.banner.holder.BannerImageHolder @@ -100,9 +100,20 @@ HomeRecycleAdapter.OnGridItemClickListener { override fun onClick(position: Int) { when (position) { - 0 -> startActivity(Intent(context, MapActivity::class.java)) - 1 -> startActivity(Intent(context, SearchRecordActivity::class.java)) - 2 -> startActivity(Intent(context, StatisticsActivity::class.java)) + 0 -> context.navigatePageTo(MapActivity::class.java) + 1 -> { + BottomActionSheet.Builder() + .setContext(context) + .setActionItemTitles(arrayOf("设备", "数据")) + .setOnActionSheetListener { index -> + when (index) { + 0 -> context.navigatePageTo(SearchDeviceActivity::class.java) + 1 -> context.navigatePageTo(SearchDataActivity::class.java) + } + }.build().show() + + } + 2 -> context.navigatePageTo(StatisticsActivity::class.java) } } }) diff --git a/app/src/main/java/com/casic/qd/smartwell/view/SearchAlarmActivity.kt b/app/src/main/java/com/casic/qd/smartwell/view/SearchAlarmActivity.kt index 8f54163..5285a9f 100644 --- a/app/src/main/java/com/casic/qd/smartwell/view/SearchAlarmActivity.kt +++ b/app/src/main/java/com/casic/qd/smartwell/view/SearchAlarmActivity.kt @@ -13,11 +13,6 @@ import com.jzxiang.pickerview.data.Type import com.qmuiteam.qmui.widget.dialog.QMUIBottomSheet.BottomListSheetBuilder import kotlinx.android.synthetic.main.activity_alarm_search.* -import kotlinx.android.synthetic.main.activity_alarm_search.areaView -import kotlinx.android.synthetic.main.activity_alarm_search.clearButton -import kotlinx.android.synthetic.main.activity_alarm_search.searchButton -import kotlinx.android.synthetic.main.activity_alarm_search.wellCodeView -import kotlinx.android.synthetic.main.activity_search_record.* import kotlinx.android.synthetic.main.include_base_title.* class SearchAlarmActivity : BaseActivity() { diff --git a/app/src/main/java/com/casic/qd/smartwell/view/SearchDataActivity.kt b/app/src/main/java/com/casic/qd/smartwell/view/SearchDataActivity.kt new file mode 100644 index 0000000..e6a38e4 --- /dev/null +++ b/app/src/main/java/com/casic/qd/smartwell/view/SearchDataActivity.kt @@ -0,0 +1,168 @@ +package com.casic.qd.smartwell.view + +import com.casic.qd.smartwell.R +import com.casic.qd.smartwell.base.BaseActivity +import kotlinx.android.synthetic.main.include_base_title.* + +/** + * @author a203 + * @description 记录查询界面 + * @date 2022/2/17 14:33 + * @email 290677893@qq.com + */ +class SearchDataActivity : BaseActivity() { + +// private lateinit var deviceViewModel: DeviceViewModel +// private lateinit var authenticateViewModel: AuthenticateViewModel +// private lateinit var areaViewModel: AreaViewModel +// private var authenticatedType: MutableList = ArrayList() +// private var deviceTypeValue = "" +// private var deptId = "" +// private var deviceState = "" +// private var areaId = "" + + override fun initLayoutView(): Int = R.layout.activity_data_search + + override fun setupTopBarLayout() { + titleView.text = "数据查询" + } + + override fun initData() { +// val userDeviceJson = SaveKeyValues.getValue(Constant.USER_DEVICE_TYPE, "") as String +// if (userDeviceJson.isNotBlank()) { +// authenticatedType = Gson().fromJson( +// userDeviceJson, object : TypeToken>() {}.type +// ) +// } +// deviceViewModel = ViewModelProvider(this).get(DeviceViewModel::class.java) +// authenticateViewModel = ViewModelProvider(this).get(AuthenticateViewModel::class.java) +// areaViewModel = ViewModelProvider(this).get(AreaViewModel::class.java) + } + + override fun initEvent() { +// deviceTypeView.setOnClickListener { +// /** +// * 获取全部设备类型 +// * */ +// deviceViewModel.obtainDeviceType() +// } +// deviceViewModel.typeModel.observe(this, { +// if (it.code == 200) { +// val authenticatedModel: MutableList = ArrayList() +// it.data?.forEach { deviceModel -> +// if (deviceModel.value in authenticatedType) { +// authenticatedModel.add(deviceModel) +// } +// } +// val sheetBuilder = QMUIBottomSheet.BottomListSheetBuilder(this) +// sheetBuilder.setTitle("设备类型") +// authenticatedModel.forEach { deviceModel -> +// sheetBuilder.addItem(deviceModel.name) +// } +// sheetBuilder.setGravityCenter(true) +// .setOnSheetItemClickListener { dialog, _, position, tag -> +// deviceTypeView.text = tag +// this.deviceTypeValue = authenticatedModel[position].value.toString() +// +// dialog.dismiss() +// }.build().show() +// } +// }) +// +// ownerShipView.setOnClickListener { +// authenticateViewModel.obtainOwnerShip("03") +// } +// authenticateViewModel.resultModel.observe(this, { +// if (it.code == 200) { +// val ownerShipModel: MutableList = ArrayList() +// it.data?.list?.forEach { listBean -> +// ownerShipModel.add(listBean) +// } +// val sheetBuilder = QMUIBottomSheet.BottomListSheetBuilder(this) +// sheetBuilder.setTitle("权属单位") +// ownerShipModel.forEach { model -> +// sheetBuilder.addItem(model.name) +// } +// sheetBuilder.setGravityCenter(true) +// .setOnSheetItemClickListener { dialog, _, position, tag -> +// ownerShipView.text = tag +// this.deptId = ownerShipModel[position].id.toString() +// +// dialog.dismiss() +// }.build().show() +// } +// }) +// +// deviceStateView.setOnClickListener { +// QMUIBottomSheet.BottomListSheetBuilder(this) +// .setTitle("在线情况") +// .addItem("在线") +// .addItem("离线") +// .setGravityCenter(true) +// .setOnSheetItemClickListener { dialog, _, _, tag -> +// deviceStateView.text = tag +// this.deviceState = if (tag == "在线") { +// "1" +// } else { +// "0" +// } +// +// dialog.dismiss() +// }.build().show() +// } +// +// areaView.setOnClickListener { +// areaViewModel.obtainArea() +// } +// areaViewModel.areaModel.observe(this, { +// if (it.code == 200) { +// val firstLevelArea: MutableList = ArrayList() +// val secondLevelArea: MutableList = ArrayList() +// val thirdLevelArea: MutableList = ArrayList() +// it.data?.forEach { dataBean -> +// when (dataBean.level) { +// 2 -> firstLevelArea.add(dataBean) +// 3 -> secondLevelArea.add(dataBean) +// 4 -> thirdLevelArea.add(dataBean) +// } +// } +// +// // 绑定区域 +// BottomAreaSheet.Builder() +// .setContext(this) +// .setFirstAreaData(firstLevelArea) +// .setSecondAreaData(secondLevelArea) +// .setThirdAreaData(thirdLevelArea) +// .setOnActionSheetListener(object : BottomAreaSheet.OnActionSheetListener { +// override fun onAreaSelected(area: String?, id: String?) { +// areaView.text = area +// areaId = id.toString() +// } +// }).build().show() +// } +// }) +// +// searchButton.setChangeAlphaWhenPress(true) +// searchButton.setOnClickListener { +// //页面跳转,将查询参数传过去 +// navigatePageTo( +// DeviceSearchResultActivity::class.java, addAll( +// wellCodeView.text.toString().trim(), +// deviceTypeValue, +// deptId, +// deviceState, +// areaId +// ) +// ) +// } +// +// clearButton.setChangeAlphaWhenPress(true) +// clearButton.setOnClickListener { +// wellCodeView.setText("") +// deviceTypeView.text = "" +// ownerShipView.text = "" +// deviceStateView.text = "" +// areaView.text = "" +// } + } +} \ No newline at end of file diff --git a/app/src/main/java/com/casic/qd/smartwell/view/SearchDeviceActivity.kt b/app/src/main/java/com/casic/qd/smartwell/view/SearchDeviceActivity.kt new file mode 100644 index 0000000..cf0c05f --- /dev/null +++ b/app/src/main/java/com/casic/qd/smartwell/view/SearchDeviceActivity.kt @@ -0,0 +1,184 @@ +package com.casic.qd.smartwell.view + +import androidx.lifecycle.ViewModelProvider +import com.casic.qd.smartwell.R +import com.casic.qd.smartwell.base.BaseActivity +import com.casic.qd.smartwell.extensions.addAll +import com.casic.qd.smartwell.extensions.navigatePageTo +import com.casic.qd.smartwell.model.AreaModel +import com.casic.qd.smartwell.model.DeviceTypeModel +import com.casic.qd.smartwell.model.OwnerShipModel +import com.casic.qd.smartwell.utils.Constant +import com.casic.qd.smartwell.utils.SaveKeyValues +import com.casic.qd.smartwell.vm.AreaViewModel +import com.casic.qd.smartwell.vm.AuthenticateViewModel +import com.casic.qd.smartwell.vm.DeviceViewModel +import com.casic.qd.smartwell.widgets.BottomAreaSheet +import com.google.gson.Gson +import com.google.gson.reflect.TypeToken +import com.qmuiteam.qmui.widget.dialog.QMUIBottomSheet +import kotlinx.android.synthetic.main.activity_device_search.* +import kotlinx.android.synthetic.main.include_base_title.* + +/** + * @author a203 + * @description 记录查询界面 + * @date 2022/2/17 14:33 + * @email 290677893@qq.com + */ +class SearchDeviceActivity : BaseActivity() { + + private lateinit var deviceViewModel: DeviceViewModel + private lateinit var authenticateViewModel: AuthenticateViewModel + private lateinit var areaViewModel: AreaViewModel + private var authenticatedType: MutableList = ArrayList() + private var deviceTypeValue = "" + private var deptId = "" + private var deviceState = "" + private var areaId = "" + + override fun initLayoutView(): Int = R.layout.activity_device_search + + override fun setupTopBarLayout() { + titleView.text = "设备查询" + } + + override fun initData() { + val userDeviceJson = SaveKeyValues.getValue(Constant.USER_DEVICE_TYPE, "") as String + if (userDeviceJson.isNotBlank()) { + authenticatedType = Gson().fromJson( + userDeviceJson, object : TypeToken>() {}.type + ) + } + deviceViewModel = ViewModelProvider(this).get(DeviceViewModel::class.java) + authenticateViewModel = ViewModelProvider(this).get(AuthenticateViewModel::class.java) + areaViewModel = ViewModelProvider(this).get(AreaViewModel::class.java) + } + + override fun initEvent() { + deviceTypeView.setOnClickListener { + /** + * 获取全部设备类型 + * */ + deviceViewModel.obtainDeviceType() + } + deviceViewModel.typeModel.observe(this, { + if (it.code == 200) { + val authenticatedModel: MutableList = ArrayList() + it.data?.forEach { deviceModel -> + if (deviceModel.value in authenticatedType) { + authenticatedModel.add(deviceModel) + } + } + val sheetBuilder = QMUIBottomSheet.BottomListSheetBuilder(this) + sheetBuilder.setTitle("设备类型") + authenticatedModel.forEach { deviceModel -> + sheetBuilder.addItem(deviceModel.name) + } + sheetBuilder.setGravityCenter(true) + .setOnSheetItemClickListener { dialog, _, position, tag -> + deviceTypeView.text = tag + this.deviceTypeValue = authenticatedModel[position].value.toString() + + dialog.dismiss() + }.build().show() + } + }) + + ownerShipView.setOnClickListener { + authenticateViewModel.obtainOwnerShip("03") + } + authenticateViewModel.resultModel.observe(this, { + if (it.code == 200) { + val ownerShipModel: MutableList = ArrayList() + it.data?.list?.forEach { listBean -> + ownerShipModel.add(listBean) + } + val sheetBuilder = QMUIBottomSheet.BottomListSheetBuilder(this) + sheetBuilder.setTitle("权属单位") + ownerShipModel.forEach { model -> + sheetBuilder.addItem(model.name) + } + sheetBuilder.setGravityCenter(true) + .setOnSheetItemClickListener { dialog, _, position, tag -> + ownerShipView.text = tag + this.deptId = ownerShipModel[position].id.toString() + + dialog.dismiss() + }.build().show() + } + }) + + deviceStateView.setOnClickListener { + QMUIBottomSheet.BottomListSheetBuilder(this) + .setTitle("在线情况") + .addItem("在线") + .addItem("离线") + .setGravityCenter(true) + .setOnSheetItemClickListener { dialog, _, _, tag -> + deviceStateView.text = tag + this.deviceState = if (tag == "在线") { + "1" + } else { + "0" + } + + dialog.dismiss() + }.build().show() + } + + areaView.setOnClickListener { + areaViewModel.obtainArea() + } + areaViewModel.areaModel.observe(this, { + if (it.code == 200) { + val firstLevelArea: MutableList = ArrayList() + val secondLevelArea: MutableList = ArrayList() + val thirdLevelArea: MutableList = ArrayList() + it.data?.forEach { dataBean -> + when (dataBean.level) { + 2 -> firstLevelArea.add(dataBean) + 3 -> secondLevelArea.add(dataBean) + 4 -> thirdLevelArea.add(dataBean) + } + } + + // 绑定区域 + BottomAreaSheet.Builder() + .setContext(this) + .setFirstAreaData(firstLevelArea) + .setSecondAreaData(secondLevelArea) + .setThirdAreaData(thirdLevelArea) + .setOnActionSheetListener(object : BottomAreaSheet.OnActionSheetListener { + override fun onAreaSelected(area: String?, id: String?) { + areaView.text = area + areaId = id.toString() + } + }).build().show() + } + }) + + searchButton.setChangeAlphaWhenPress(true) + searchButton.setOnClickListener { + //页面跳转,将查询参数传过去 + navigatePageTo( + DeviceSearchResultActivity::class.java, addAll( + wellCodeView.text.toString().trim(), + deviceTypeValue, + deptId, + deviceState, + areaId + ) + ) + } + + clearButton.setChangeAlphaWhenPress(true) + clearButton.setOnClickListener { + wellCodeView.setText("") + deviceTypeView.text = "" + ownerShipView.text = "" + deviceStateView.text = "" + areaView.text = "" + } + } +} \ No newline at end of file diff --git a/app/src/main/java/com/casic/qd/smartwell/view/SearchRecordActivity.kt b/app/src/main/java/com/casic/qd/smartwell/view/SearchRecordActivity.kt deleted file mode 100644 index 8cab864..0000000 --- a/app/src/main/java/com/casic/qd/smartwell/view/SearchRecordActivity.kt +++ /dev/null @@ -1,184 +0,0 @@ -package com.casic.qd.smartwell.view - -import androidx.lifecycle.ViewModelProvider -import com.casic.qd.smartwell.R -import com.casic.qd.smartwell.base.BaseActivity -import com.casic.qd.smartwell.extensions.addAll -import com.casic.qd.smartwell.extensions.navigatePageTo -import com.casic.qd.smartwell.model.AreaModel -import com.casic.qd.smartwell.model.DeviceTypeModel -import com.casic.qd.smartwell.model.OwnerShipModel -import com.casic.qd.smartwell.utils.Constant -import com.casic.qd.smartwell.utils.SaveKeyValues -import com.casic.qd.smartwell.vm.AreaViewModel -import com.casic.qd.smartwell.vm.AuthenticateViewModel -import com.casic.qd.smartwell.vm.DeviceViewModel -import com.casic.qd.smartwell.widgets.BottomAreaSheet -import com.google.gson.Gson -import com.google.gson.reflect.TypeToken -import com.qmuiteam.qmui.widget.dialog.QMUIBottomSheet -import kotlinx.android.synthetic.main.activity_search_record.* -import kotlinx.android.synthetic.main.include_base_title.* - -/** - * @author a203 - * @description 记录查询界面 - * @date 2022/2/17 14:33 - * @email 290677893@qq.com - */ -class SearchRecordActivity : BaseActivity() { - - private lateinit var deviceViewModel: DeviceViewModel - private lateinit var authenticateViewModel: AuthenticateViewModel - private lateinit var areaViewModel: AreaViewModel - private var authenticatedType: MutableList = ArrayList() - private var deviceTypeValue = "" - private var deptId = "" - private var deviceState = "" - private var areaId = "" - - override fun initLayoutView(): Int = R.layout.activity_search_record - - override fun setupTopBarLayout() { - titleView.text = "记录查询" - } - - override fun initData() { - val userDeviceJson = SaveKeyValues.getValue(Constant.USER_DEVICE_TYPE, "") as String - if (userDeviceJson.isNotBlank()) { - authenticatedType = Gson().fromJson( - userDeviceJson, object : TypeToken>() {}.type - ) - } - deviceViewModel = ViewModelProvider(this).get(DeviceViewModel::class.java) - authenticateViewModel = ViewModelProvider(this).get(AuthenticateViewModel::class.java) - areaViewModel = ViewModelProvider(this).get(AreaViewModel::class.java) - } - - override fun initEvent() { - deviceTypeView.setOnClickListener { - /** - * 获取全部设备类型 - * */ - deviceViewModel.obtainDeviceType() - } - deviceViewModel.typeModel.observe(this, { - if (it.code == 200) { - val authenticatedModel: MutableList = ArrayList() - it.data?.forEach { deviceModel -> - if (deviceModel.value in authenticatedType) { - authenticatedModel.add(deviceModel) - } - } - val sheetBuilder = QMUIBottomSheet.BottomListSheetBuilder(this) - sheetBuilder.setTitle("设备类型") - authenticatedModel.forEach { deviceModel -> - sheetBuilder.addItem(deviceModel.name) - } - sheetBuilder.setGravityCenter(true) - .setOnSheetItemClickListener { dialog, _, position, tag -> - deviceTypeView.text = tag - this.deviceTypeValue = authenticatedModel[position].value.toString() - - dialog.dismiss() - }.build().show() - } - }) - - ownerShipView.setOnClickListener { - authenticateViewModel.obtainOwnerShip("03") - } - authenticateViewModel.resultModel.observe(this, { - if (it.code == 200) { - val ownerShipModel: MutableList = ArrayList() - it.data?.list?.forEach { listBean -> - ownerShipModel.add(listBean) - } - val sheetBuilder = QMUIBottomSheet.BottomListSheetBuilder(this) - sheetBuilder.setTitle("权属单位") - ownerShipModel.forEach { model -> - sheetBuilder.addItem(model.name) - } - sheetBuilder.setGravityCenter(true) - .setOnSheetItemClickListener { dialog, _, position, tag -> - ownerShipView.text = tag - this.deptId = ownerShipModel[position].id.toString() - - dialog.dismiss() - }.build().show() - } - }) - - deviceStateView.setOnClickListener { - QMUIBottomSheet.BottomListSheetBuilder(this) - .setTitle("在线情况") - .addItem("在线") - .addItem("离线") - .setGravityCenter(true) - .setOnSheetItemClickListener { dialog, _, _, tag -> - deviceStateView.text = tag - this.deviceState = if (tag == "在线") { - "1" - } else { - "0" - } - - dialog.dismiss() - }.build().show() - } - - areaView.setOnClickListener { - areaViewModel.obtainArea() - } - areaViewModel.areaModel.observe(this, { - if (it.code == 200) { - val firstLevelArea: MutableList = ArrayList() - val secondLevelArea: MutableList = ArrayList() - val thirdLevelArea: MutableList = ArrayList() - it.data?.forEach { dataBean -> - when (dataBean.level) { - 2 -> firstLevelArea.add(dataBean) - 3 -> secondLevelArea.add(dataBean) - 4 -> thirdLevelArea.add(dataBean) - } - } - - // 绑定区域 - BottomAreaSheet.Builder() - .setContext(this) - .setFirstAreaData(firstLevelArea) - .setSecondAreaData(secondLevelArea) - .setThirdAreaData(thirdLevelArea) - .setOnActionSheetListener(object : BottomAreaSheet.OnActionSheetListener { - override fun onAreaSelected(area: String?, id: String?) { - areaView.text = area - areaId = id.toString() - } - }).build().show() - } - }) - - searchButton.setChangeAlphaWhenPress(true) - searchButton.setOnClickListener { - //页面跳转,将查询参数传过去 - navigatePageTo( - DeviceSearchResultActivity::class.java, addAll( - wellCodeView.text.toString().trim(), - deviceTypeValue, - deptId, - deviceState, - areaId - ) - ) - } - - clearButton.setChangeAlphaWhenPress(true) - clearButton.setOnClickListener { - wellCodeView.setText("") - deviceTypeView.text = "" - ownerShipView.text = "" - deviceStateView.text = "" - areaView.text = "" - } - } -} \ No newline at end of file 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 21c4286..3272cfe 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 @@ -15,6 +15,7 @@ import com.casic.qd.smartwell.widgets.DateSelectDialog import com.github.mikephil.charting.data.BarEntry import com.github.mikephil.charting.data.PieEntry +import com.jzxiang.pickerview.data.Type import kotlinx.android.synthetic.main.activity_statistics.* import kotlinx.android.synthetic.main.include_base_title.* import java.util.* @@ -97,7 +98,6 @@ 5 -> { DateSelectDialog.Builder() .setContext(context) - .setFragmentManager(supportFragmentManager) .setTitle("选择日期") .setNegativeButton("取消") .setPositiveButton("选好了") @@ -113,7 +113,10 @@ //选择取消就默认加载近7天的数据 periodSpinner.setSelection(3) } - }).build().show() + }) + .setFragmentManager(supportFragmentManager) + .setCalendarType(Type.YEAR_MONTH_DAY) + .build().show() } } } @@ -200,7 +203,6 @@ 5 -> { DateSelectDialog.Builder() .setContext(context) - .setFragmentManager(supportFragmentManager) .setTitle("选择日期") .setNegativeButton("取消") .setPositiveButton("选好了") @@ -216,7 +218,10 @@ //选择取消就默认加载近7天的数据 periodSpinner.setSelection(3) } - }).build().show() + }) + .setFragmentManager(supportFragmentManager) + .setCalendarType(Type.YEAR_MONTH_DAY) + .build().show() } } } diff --git a/app/src/main/java/com/casic/qd/smartwell/view/WaterExpandedActivity.kt b/app/src/main/java/com/casic/qd/smartwell/view/WaterExpandedActivity.kt index 251140d..7a63dea 100644 --- a/app/src/main/java/com/casic/qd/smartwell/view/WaterExpandedActivity.kt +++ b/app/src/main/java/com/casic/qd/smartwell/view/WaterExpandedActivity.kt @@ -13,6 +13,7 @@ import com.casic.qd.smartwell.vm.WaterStatisticsViewModel import com.casic.qd.smartwell.widgets.DateSelectDialog import com.github.mikephil.charting.data.Entry +import com.jzxiang.pickerview.data.Type import kotlinx.android.synthetic.main.activity_water_expanded.* import java.util.* import kotlin.collections.ArrayList @@ -86,7 +87,6 @@ 5 -> { DateSelectDialog.Builder() .setContext(context) - .setFragmentManager(supportFragmentManager) .setTitle("选择日期") .setNegativeButton("取消") .setPositiveButton("选好了") @@ -102,7 +102,10 @@ //选择取消就默认加载近7天的数据 periodSpinner.setSelection(3) } - }).build().show() + }) + .setFragmentManager(supportFragmentManager) + .setCalendarType(Type.YEAR_MONTH_DAY) + .build().show() } } } diff --git a/app/src/main/java/com/casic/qd/smartwell/vm/DeviceViewModel.kt b/app/src/main/java/com/casic/qd/smartwell/vm/DeviceViewModel.kt index 02aefed..9448ade 100644 --- a/app/src/main/java/com/casic/qd/smartwell/vm/DeviceViewModel.kt +++ b/app/src/main/java/com/casic/qd/smartwell/vm/DeviceViewModel.kt @@ -7,8 +7,10 @@ import com.casic.qd.smartwell.extensions.separateResponseCode import com.casic.qd.smartwell.extensions.show import com.casic.qd.smartwell.extensions.toErrorMessage +import com.casic.qd.smartwell.model.DayDataModel import com.casic.qd.smartwell.model.DeviceStatisticsModel import com.casic.qd.smartwell.model.DeviceTypeModel +import com.casic.qd.smartwell.model.TotalDataModel import com.casic.qd.smartwell.utils.retrofit.RetrofitServiceManager import com.google.gson.Gson import com.google.gson.reflect.TypeToken @@ -19,6 +21,8 @@ private val gson = Gson() val resultModel = MutableLiveData() val typeModel = MutableLiveData() + val dayDataModel = MutableLiveData() + val totalDataModel = MutableLiveData() /** * 管网资产统计 @@ -55,4 +59,40 @@ Log.e(kTag, it.toString(), it) "服务器异常".show() }) + + /** + * 获取设备日用水量 + */ + fun obtainSevenDayData(devCode: String?, beginTime: String?, endTime: String?) = launch({ + val response = RetrofitServiceManager.obtainSevenDayData(devCode, beginTime, endTime) + val responseCode = response.separateResponseCode() + if (responseCode == 200) { + dayDataModel.value = gson.fromJson( + response, object : TypeToken() {}.type + ) + } else { + response.toErrorMessage().show() + } + }, { + Log.e(kTag, it.toString(), it) + "服务器异常".show() + }) + + /** + * 获取设备累计用水量 + */ + fun obtainTotalDayData(devCode: String?, beginTime: String?, endTime: String?) = launch({ + val response = RetrofitServiceManager.obtainTotalDayData(devCode, beginTime, endTime) + val responseCode = response.separateResponseCode() + if (responseCode == 200) { + totalDataModel.value = gson.fromJson( + response, object : TypeToken() {}.type + ) + } else { + 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/widgets/DateSelectDialog.kt b/app/src/main/java/com/casic/qd/smartwell/widgets/DateSelectDialog.kt index ec403eb..fda3a03 100644 --- a/app/src/main/java/com/casic/qd/smartwell/widgets/DateSelectDialog.kt +++ b/app/src/main/java/com/casic/qd/smartwell/widgets/DateSelectDialog.kt @@ -9,6 +9,7 @@ import com.casic.qd.smartwell.extensions.convertColor import com.casic.qd.smartwell.extensions.initDialogLayoutParams import com.casic.qd.smartwell.extensions.timestampToDate +import com.casic.qd.smartwell.extensions.timestampToTime import com.casic.qd.smartwell.utils.Constant import com.jzxiang.pickerview.TimePickerDialog import com.jzxiang.pickerview.data.Type @@ -18,30 +19,27 @@ builder.context, R.style.UserDefinedDialogStyle ) { - private val fragmentManager: FragmentManager = builder.fragmentManager private val title: String = builder.title private val negativeBtn: String = builder.negativeBtn private val positiveBtn: String = builder.positiveBtn private val listener: OnDialogButtonClickListener = builder.listener + private val fragmentManager: FragmentManager = builder.fragmentManager + private val type: Type = builder.type class Builder { lateinit var context: Context - lateinit var fragmentManager: FragmentManager lateinit var title: String lateinit var negativeBtn: String lateinit var positiveBtn: String lateinit var listener: OnDialogButtonClickListener + lateinit var fragmentManager: FragmentManager + lateinit var type: Type fun setContext(context: Context): Builder { this.context = context return this } - fun setFragmentManager(fragmentManager: FragmentManager): Builder { - this.fragmentManager = fragmentManager - return this - } - fun setTitle(title: String): Builder { this.title = title return this @@ -62,6 +60,16 @@ return this } + fun setFragmentManager(fragmentManager: FragmentManager): Builder { + this.fragmentManager = fragmentManager + return this + } + + fun setCalendarType(calendarType: Type): Builder { + this.type = calendarType + return this + } + fun build(): DateSelectDialog { return DateSelectDialog(this) } @@ -69,7 +77,7 @@ override fun onCreate(savedInstanceState: Bundle?) { super.onCreate(savedInstanceState) - this.initDialogLayoutParams(Gravity.CENTER, R.style.UserDefinedAnimation, 0.8f) + this.initDialogLayoutParams(Gravity.CENTER, R.style.UserDefinedAnimation, 0.85f) setContentView(R.layout.dialog_select_date) setCancelable(false) setCanceledOnTouchOutside(false) @@ -86,10 +94,15 @@ .setCyclic(false) .setMinMillseconds(System.currentTimeMillis() - Constant.FIVE_YEARS) .setMaxMillseconds(System.currentTimeMillis()) - .setType(Type.YEAR_MONTH_DAY) + .setType(type) .setCallBack { _: TimePickerDialog?, millSeconds: Long -> - startDateView.setText(millSeconds.timestampToDate()) - }.build().show(fragmentManager, "YEAR_MONTH_DAY") + val textValue = if (type == Type.ALL) { + millSeconds.timestampToTime() + } else { + millSeconds.timestampToDate() + } + startDateView.setText(textValue) + }.build().show(fragmentManager, "DateSelectDialog") } endDateView.setOnClickListener { @@ -100,10 +113,15 @@ .setCyclic(false) .setMinMillseconds(System.currentTimeMillis() - Constant.FIVE_YEARS) .setMaxMillseconds(System.currentTimeMillis()) - .setType(Type.YEAR_MONTH_DAY) + .setType(type) .setCallBack { _: TimePickerDialog?, millSeconds: Long -> - endDateView.setText(millSeconds.timestampToDate()) - }.build().show(fragmentManager, "YEAR_MONTH_DAY") + val textValue = if (type == Type.ALL) { + millSeconds.timestampToTime() + } else { + millSeconds.timestampToDate() + } + endDateView.setText(textValue) + }.build().show(fragmentManager, "DateSelectDialog") } dialogCancelButton.text = negativeBtn diff --git a/app/src/main/res/drawable/ic_calendar.xml b/app/src/main/res/drawable/ic_calendar.xml new file mode 100644 index 0000000..a314f72 --- /dev/null +++ b/app/src/main/res/drawable/ic_calendar.xml @@ -0,0 +1,12 @@ + + + + diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml index 82386c9..3832c68 100644 --- a/app/src/main/AndroidManifest.xml +++ b/app/src/main/AndroidManifest.xml @@ -48,7 +48,7 @@ - + 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 216e7cc..f53e831 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,6 +15,14 @@ return dateFormat.format(calendar.time) } +fun Long.timestampToLastWeekTime(): String { + val dateFormat = SimpleDateFormat("yyyy-MM-dd HH:mm:ss", Locale.CHINA) + val calendar = Calendar.getInstance() + calendar.time = Date(this) + calendar.set(Calendar.DAY_OF_YEAR, calendar.get(Calendar.DAY_OF_YEAR) - 6) + return dateFormat.format(calendar.time) +} + fun Long.timestampToLastMonthDate(): String { val dateFormat = SimpleDateFormat("yyyy-MM-dd", Locale.CHINA) val calendar = Calendar.getInstance() diff --git a/app/src/main/java/com/casic/qd/smartwell/model/DayDataModel.kt b/app/src/main/java/com/casic/qd/smartwell/model/DayDataModel.kt new file mode 100644 index 0000000..18d1399 --- /dev/null +++ b/app/src/main/java/com/casic/qd/smartwell/model/DayDataModel.kt @@ -0,0 +1,13 @@ +package com.casic.qd.smartwell.model + +class DayDataModel { + var code = 0 + var data: List? = null + var message: String? = null + var isSuccess = false + + class DataBean { + var time: String? = null + var value: String? = null + } +} \ No newline at end of file diff --git a/app/src/main/java/com/casic/qd/smartwell/model/TotalDataModel.kt b/app/src/main/java/com/casic/qd/smartwell/model/TotalDataModel.kt new file mode 100644 index 0000000..30bf829 --- /dev/null +++ b/app/src/main/java/com/casic/qd/smartwell/model/TotalDataModel.kt @@ -0,0 +1,14 @@ +package com.casic.qd.smartwell.model + +class TotalDataModel { + var code = 0 + var data: List? = null + var message: String? = null + var isSuccess = false + + class DataBean { + var total: String? = null + var deviceState: String? = null + var uptime: String? = null + } +} \ No newline at end of file diff --git a/app/src/main/java/com/casic/qd/smartwell/utils/retrofit/RetrofitService.kt b/app/src/main/java/com/casic/qd/smartwell/utils/retrofit/RetrofitService.kt index c5bf469..0c80ee9 100644 --- a/app/src/main/java/com/casic/qd/smartwell/utils/retrofit/RetrofitService.kt +++ b/app/src/main/java/com/casic/qd/smartwell/utils/retrofit/RetrofitService.kt @@ -202,4 +202,26 @@ @Query("offset") offset: Int, @Query("limit") limit: Int ): String + + /** + * 获取设备日用水量 + * */ + @GET("/device/sevenDayData") + suspend fun obtainSevenDayData( + @Header("token") token: String, + @Query("devCode") devCode: String?, + @Query("beginTime") beginTime: String?, + @Query("endTime") endTime: String? + ): String + + /** + * 获取设备日用水量 + * */ + @GET("/device/totalData") + suspend fun obtainTotalDayData( + @Header("token") token: String, + @Query("devCode") devCode: String?, + @Query("beginTime") beginTime: String?, + @Query("endTime") endTime: String? + ): String } \ No newline at end of file diff --git a/app/src/main/java/com/casic/qd/smartwell/utils/retrofit/RetrofitServiceManager.kt b/app/src/main/java/com/casic/qd/smartwell/utils/retrofit/RetrofitServiceManager.kt index 6f728e0..a8b320f 100644 --- a/app/src/main/java/com/casic/qd/smartwell/utils/retrofit/RetrofitServiceManager.kt +++ b/app/src/main/java/com/casic/qd/smartwell/utils/retrofit/RetrofitServiceManager.kt @@ -204,4 +204,18 @@ Constant.PAGE_LIMIT ) } + + /** + * 获取设备日用水量 + */ + suspend fun obtainSevenDayData(devCode: String?, beginTime: String?, endTime: String?): String { + return api.obtainSevenDayData(AuthenticationHelper.token!!, devCode, beginTime, endTime) + } + + /** + * 获取设备累计用水量 + */ + suspend fun obtainTotalDayData(devCode: String?, beginTime: String?, endTime: String?): String { + return api.obtainTotalDayData(AuthenticationHelper.token!!, devCode, beginTime, endTime) + } } \ No newline at end of file diff --git a/app/src/main/java/com/casic/qd/smartwell/view/DeviceDataDetailActivity.kt b/app/src/main/java/com/casic/qd/smartwell/view/DeviceDataDetailActivity.kt index 7029d17..a8a2695 100644 --- a/app/src/main/java/com/casic/qd/smartwell/view/DeviceDataDetailActivity.kt +++ b/app/src/main/java/com/casic/qd/smartwell/view/DeviceDataDetailActivity.kt @@ -1,22 +1,109 @@ package com.casic.qd.smartwell.view +import androidx.lifecycle.ViewModelProvider import com.casic.qd.smartwell.R import com.casic.qd.smartwell.base.BaseActivity -import kotlinx.android.synthetic.main.include_base_title.* +import com.casic.qd.smartwell.extensions.convertColor +import com.casic.qd.smartwell.extensions.timestampToLastWeekTime +import com.casic.qd.smartwell.extensions.timestampToTime +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.DeviceViewModel +import com.casic.qd.smartwell.widgets.DateSelectDialog +import com.github.mikephil.charting.data.Entry +import com.jzxiang.pickerview.data.Type +import kotlinx.android.synthetic.main.activity_device_data_detail.* +import kotlinx.android.synthetic.main.activity_main.rightOptionView +import kotlinx.android.synthetic.main.activity_main.titleView class DeviceDataDetailActivity : BaseActivity() { - override fun initLayoutView(): Int = R.layout.activity_device_detail + private val kTag = "DeviceDataDetailActivity" + private lateinit var deviceCode: String + private lateinit var deviceViewModel: DeviceViewModel + + override fun initLayoutView(): Int = R.layout.activity_device_data_detail override fun setupTopBarLayout() { - titleView.text = "历史数据" + deviceCode = intent.getStringExtra(Constant.INTENT_PARAM)!! + titleView.text = String.format("${deviceCode}历史数据") } override fun initData() { - + deviceViewModel = ViewModelProvider(this).get(DeviceViewModel::class.java) } override fun initEvent() { + rightOptionView.setOnClickListener { + DateSelectDialog.Builder() + .setContext(this) + .setTitle("选择日期") + .setNegativeButton("取消") + .setPositiveButton("选好了") + .setOnDialogButtonClickListener(object : + DateSelectDialog.OnDialogButtonClickListener { + override fun onConfirmClick(startDate: String, endDate: String) { + deviceViewModel.obtainSevenDayData(deviceCode, startDate, endDate) + deviceViewModel.obtainTotalDayData(deviceCode, startDate, endDate) + } + override fun onCancelClick() { + //选择取消就默认加载近7天的数据 + val time = System.currentTimeMillis() + val startTime = time.timestampToLastWeekTime() + val endTime = time.timestampToTime() + deviceViewModel.obtainSevenDayData(deviceCode, startTime, endTime) + deviceViewModel.obtainTotalDayData(deviceCode, startTime, endTime) + } + }) + .setFragmentManager(supportFragmentManager) + .setCalendarType(Type.ALL) + .build().show() + } + + //默认加载近一周的数据 + val time = System.currentTimeMillis() + val startTime = time.timestampToLastWeekTime() + val endTime = time.timestampToTime() + deviceViewModel.obtainSevenDayData(deviceCode, startTime, endTime) + deviceViewModel.dayDataModel.observe(this, { + if (it.code == 200) { + val entryModels: MutableList = ArrayList() + val xAxisDate: MutableList = ArrayList() + val entries: ArrayList = ArrayList() + val entryModel = LineChartEntryModel() + + entryModel.lineColor = Constant.COLORS[7].convertColor() + it.data?.forEachIndexed { index, dataBean -> + val split = dataBean.time.toString().split("-") + xAxisDate.add("${split[1]}/${split[2]}") + + entries.add(Entry(index.toFloat(), dataBean.value!!.toFloat(), "日用水量")) + } + entryModel.entryList = entries + entryModels.add(entryModel) + ChartViewHelper.setLineChartData(dayWaterLineChart, xAxisDate, entryModels) + } + }) + + deviceViewModel.obtainTotalDayData(deviceCode, startTime, endTime) + deviceViewModel.totalDataModel.observe(this, { + val entryModels: MutableList = ArrayList() + val xAxisDate: MutableList = ArrayList() + val entries: ArrayList = ArrayList() + val entryModel = LineChartEntryModel() + + entryModel.lineColor = Constant.COLORS[7].convertColor() + it.data?.forEachIndexed { index, dataBean -> + val split = dataBean.uptime.toString().split(" ")[0].split("-") + xAxisDate.add("${split[1]}/${split[2]}") + + entries.add(Entry(index.toFloat(), dataBean.total!!.toFloat(), "总用水量")) + } + entryModel.entryList = entries + entryModels.add(entryModel) + ChartViewHelper.setLineChartData(totalWaterLineChart, xAxisDate, entryModels) + }) } } \ No newline at end of file diff --git a/app/src/main/java/com/casic/qd/smartwell/view/MainActivity.kt b/app/src/main/java/com/casic/qd/smartwell/view/MainActivity.kt index 02435a3..3f4bb3c 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 @@ -1,7 +1,6 @@ package com.casic.qd.smartwell.view import android.content.Context -import android.content.Intent import android.os.Handler import android.os.Looper import android.os.Message @@ -22,6 +21,7 @@ import com.casic.qd.smartwell.vm.WaterStatisticsViewModel import com.github.mikephil.charting.data.Entry import com.pengxh.app.multilib.widget.dialog.AlertControlDialog +import com.pengxh.app.multilib.widget.dialog.BottomActionSheet import com.youth.banner.Banner import com.youth.banner.adapter.BannerImageAdapter import com.youth.banner.holder.BannerImageHolder @@ -100,9 +100,20 @@ HomeRecycleAdapter.OnGridItemClickListener { override fun onClick(position: Int) { when (position) { - 0 -> startActivity(Intent(context, MapActivity::class.java)) - 1 -> startActivity(Intent(context, SearchRecordActivity::class.java)) - 2 -> startActivity(Intent(context, StatisticsActivity::class.java)) + 0 -> context.navigatePageTo(MapActivity::class.java) + 1 -> { + BottomActionSheet.Builder() + .setContext(context) + .setActionItemTitles(arrayOf("设备", "数据")) + .setOnActionSheetListener { index -> + when (index) { + 0 -> context.navigatePageTo(SearchDeviceActivity::class.java) + 1 -> context.navigatePageTo(SearchDataActivity::class.java) + } + }.build().show() + + } + 2 -> context.navigatePageTo(StatisticsActivity::class.java) } } }) diff --git a/app/src/main/java/com/casic/qd/smartwell/view/SearchAlarmActivity.kt b/app/src/main/java/com/casic/qd/smartwell/view/SearchAlarmActivity.kt index 8f54163..5285a9f 100644 --- a/app/src/main/java/com/casic/qd/smartwell/view/SearchAlarmActivity.kt +++ b/app/src/main/java/com/casic/qd/smartwell/view/SearchAlarmActivity.kt @@ -13,11 +13,6 @@ import com.jzxiang.pickerview.data.Type import com.qmuiteam.qmui.widget.dialog.QMUIBottomSheet.BottomListSheetBuilder import kotlinx.android.synthetic.main.activity_alarm_search.* -import kotlinx.android.synthetic.main.activity_alarm_search.areaView -import kotlinx.android.synthetic.main.activity_alarm_search.clearButton -import kotlinx.android.synthetic.main.activity_alarm_search.searchButton -import kotlinx.android.synthetic.main.activity_alarm_search.wellCodeView -import kotlinx.android.synthetic.main.activity_search_record.* import kotlinx.android.synthetic.main.include_base_title.* class SearchAlarmActivity : BaseActivity() { diff --git a/app/src/main/java/com/casic/qd/smartwell/view/SearchDataActivity.kt b/app/src/main/java/com/casic/qd/smartwell/view/SearchDataActivity.kt new file mode 100644 index 0000000..e6a38e4 --- /dev/null +++ b/app/src/main/java/com/casic/qd/smartwell/view/SearchDataActivity.kt @@ -0,0 +1,168 @@ +package com.casic.qd.smartwell.view + +import com.casic.qd.smartwell.R +import com.casic.qd.smartwell.base.BaseActivity +import kotlinx.android.synthetic.main.include_base_title.* + +/** + * @author a203 + * @description 记录查询界面 + * @date 2022/2/17 14:33 + * @email 290677893@qq.com + */ +class SearchDataActivity : BaseActivity() { + +// private lateinit var deviceViewModel: DeviceViewModel +// private lateinit var authenticateViewModel: AuthenticateViewModel +// private lateinit var areaViewModel: AreaViewModel +// private var authenticatedType: MutableList = ArrayList() +// private var deviceTypeValue = "" +// private var deptId = "" +// private var deviceState = "" +// private var areaId = "" + + override fun initLayoutView(): Int = R.layout.activity_data_search + + override fun setupTopBarLayout() { + titleView.text = "数据查询" + } + + override fun initData() { +// val userDeviceJson = SaveKeyValues.getValue(Constant.USER_DEVICE_TYPE, "") as String +// if (userDeviceJson.isNotBlank()) { +// authenticatedType = Gson().fromJson( +// userDeviceJson, object : TypeToken>() {}.type +// ) +// } +// deviceViewModel = ViewModelProvider(this).get(DeviceViewModel::class.java) +// authenticateViewModel = ViewModelProvider(this).get(AuthenticateViewModel::class.java) +// areaViewModel = ViewModelProvider(this).get(AreaViewModel::class.java) + } + + override fun initEvent() { +// deviceTypeView.setOnClickListener { +// /** +// * 获取全部设备类型 +// * */ +// deviceViewModel.obtainDeviceType() +// } +// deviceViewModel.typeModel.observe(this, { +// if (it.code == 200) { +// val authenticatedModel: MutableList = ArrayList() +// it.data?.forEach { deviceModel -> +// if (deviceModel.value in authenticatedType) { +// authenticatedModel.add(deviceModel) +// } +// } +// val sheetBuilder = QMUIBottomSheet.BottomListSheetBuilder(this) +// sheetBuilder.setTitle("设备类型") +// authenticatedModel.forEach { deviceModel -> +// sheetBuilder.addItem(deviceModel.name) +// } +// sheetBuilder.setGravityCenter(true) +// .setOnSheetItemClickListener { dialog, _, position, tag -> +// deviceTypeView.text = tag +// this.deviceTypeValue = authenticatedModel[position].value.toString() +// +// dialog.dismiss() +// }.build().show() +// } +// }) +// +// ownerShipView.setOnClickListener { +// authenticateViewModel.obtainOwnerShip("03") +// } +// authenticateViewModel.resultModel.observe(this, { +// if (it.code == 200) { +// val ownerShipModel: MutableList = ArrayList() +// it.data?.list?.forEach { listBean -> +// ownerShipModel.add(listBean) +// } +// val sheetBuilder = QMUIBottomSheet.BottomListSheetBuilder(this) +// sheetBuilder.setTitle("权属单位") +// ownerShipModel.forEach { model -> +// sheetBuilder.addItem(model.name) +// } +// sheetBuilder.setGravityCenter(true) +// .setOnSheetItemClickListener { dialog, _, position, tag -> +// ownerShipView.text = tag +// this.deptId = ownerShipModel[position].id.toString() +// +// dialog.dismiss() +// }.build().show() +// } +// }) +// +// deviceStateView.setOnClickListener { +// QMUIBottomSheet.BottomListSheetBuilder(this) +// .setTitle("在线情况") +// .addItem("在线") +// .addItem("离线") +// .setGravityCenter(true) +// .setOnSheetItemClickListener { dialog, _, _, tag -> +// deviceStateView.text = tag +// this.deviceState = if (tag == "在线") { +// "1" +// } else { +// "0" +// } +// +// dialog.dismiss() +// }.build().show() +// } +// +// areaView.setOnClickListener { +// areaViewModel.obtainArea() +// } +// areaViewModel.areaModel.observe(this, { +// if (it.code == 200) { +// val firstLevelArea: MutableList = ArrayList() +// val secondLevelArea: MutableList = ArrayList() +// val thirdLevelArea: MutableList = ArrayList() +// it.data?.forEach { dataBean -> +// when (dataBean.level) { +// 2 -> firstLevelArea.add(dataBean) +// 3 -> secondLevelArea.add(dataBean) +// 4 -> thirdLevelArea.add(dataBean) +// } +// } +// +// // 绑定区域 +// BottomAreaSheet.Builder() +// .setContext(this) +// .setFirstAreaData(firstLevelArea) +// .setSecondAreaData(secondLevelArea) +// .setThirdAreaData(thirdLevelArea) +// .setOnActionSheetListener(object : BottomAreaSheet.OnActionSheetListener { +// override fun onAreaSelected(area: String?, id: String?) { +// areaView.text = area +// areaId = id.toString() +// } +// }).build().show() +// } +// }) +// +// searchButton.setChangeAlphaWhenPress(true) +// searchButton.setOnClickListener { +// //页面跳转,将查询参数传过去 +// navigatePageTo( +// DeviceSearchResultActivity::class.java, addAll( +// wellCodeView.text.toString().trim(), +// deviceTypeValue, +// deptId, +// deviceState, +// areaId +// ) +// ) +// } +// +// clearButton.setChangeAlphaWhenPress(true) +// clearButton.setOnClickListener { +// wellCodeView.setText("") +// deviceTypeView.text = "" +// ownerShipView.text = "" +// deviceStateView.text = "" +// areaView.text = "" +// } + } +} \ No newline at end of file diff --git a/app/src/main/java/com/casic/qd/smartwell/view/SearchDeviceActivity.kt b/app/src/main/java/com/casic/qd/smartwell/view/SearchDeviceActivity.kt new file mode 100644 index 0000000..cf0c05f --- /dev/null +++ b/app/src/main/java/com/casic/qd/smartwell/view/SearchDeviceActivity.kt @@ -0,0 +1,184 @@ +package com.casic.qd.smartwell.view + +import androidx.lifecycle.ViewModelProvider +import com.casic.qd.smartwell.R +import com.casic.qd.smartwell.base.BaseActivity +import com.casic.qd.smartwell.extensions.addAll +import com.casic.qd.smartwell.extensions.navigatePageTo +import com.casic.qd.smartwell.model.AreaModel +import com.casic.qd.smartwell.model.DeviceTypeModel +import com.casic.qd.smartwell.model.OwnerShipModel +import com.casic.qd.smartwell.utils.Constant +import com.casic.qd.smartwell.utils.SaveKeyValues +import com.casic.qd.smartwell.vm.AreaViewModel +import com.casic.qd.smartwell.vm.AuthenticateViewModel +import com.casic.qd.smartwell.vm.DeviceViewModel +import com.casic.qd.smartwell.widgets.BottomAreaSheet +import com.google.gson.Gson +import com.google.gson.reflect.TypeToken +import com.qmuiteam.qmui.widget.dialog.QMUIBottomSheet +import kotlinx.android.synthetic.main.activity_device_search.* +import kotlinx.android.synthetic.main.include_base_title.* + +/** + * @author a203 + * @description 记录查询界面 + * @date 2022/2/17 14:33 + * @email 290677893@qq.com + */ +class SearchDeviceActivity : BaseActivity() { + + private lateinit var deviceViewModel: DeviceViewModel + private lateinit var authenticateViewModel: AuthenticateViewModel + private lateinit var areaViewModel: AreaViewModel + private var authenticatedType: MutableList = ArrayList() + private var deviceTypeValue = "" + private var deptId = "" + private var deviceState = "" + private var areaId = "" + + override fun initLayoutView(): Int = R.layout.activity_device_search + + override fun setupTopBarLayout() { + titleView.text = "设备查询" + } + + override fun initData() { + val userDeviceJson = SaveKeyValues.getValue(Constant.USER_DEVICE_TYPE, "") as String + if (userDeviceJson.isNotBlank()) { + authenticatedType = Gson().fromJson( + userDeviceJson, object : TypeToken>() {}.type + ) + } + deviceViewModel = ViewModelProvider(this).get(DeviceViewModel::class.java) + authenticateViewModel = ViewModelProvider(this).get(AuthenticateViewModel::class.java) + areaViewModel = ViewModelProvider(this).get(AreaViewModel::class.java) + } + + override fun initEvent() { + deviceTypeView.setOnClickListener { + /** + * 获取全部设备类型 + * */ + deviceViewModel.obtainDeviceType() + } + deviceViewModel.typeModel.observe(this, { + if (it.code == 200) { + val authenticatedModel: MutableList = ArrayList() + it.data?.forEach { deviceModel -> + if (deviceModel.value in authenticatedType) { + authenticatedModel.add(deviceModel) + } + } + val sheetBuilder = QMUIBottomSheet.BottomListSheetBuilder(this) + sheetBuilder.setTitle("设备类型") + authenticatedModel.forEach { deviceModel -> + sheetBuilder.addItem(deviceModel.name) + } + sheetBuilder.setGravityCenter(true) + .setOnSheetItemClickListener { dialog, _, position, tag -> + deviceTypeView.text = tag + this.deviceTypeValue = authenticatedModel[position].value.toString() + + dialog.dismiss() + }.build().show() + } + }) + + ownerShipView.setOnClickListener { + authenticateViewModel.obtainOwnerShip("03") + } + authenticateViewModel.resultModel.observe(this, { + if (it.code == 200) { + val ownerShipModel: MutableList = ArrayList() + it.data?.list?.forEach { listBean -> + ownerShipModel.add(listBean) + } + val sheetBuilder = QMUIBottomSheet.BottomListSheetBuilder(this) + sheetBuilder.setTitle("权属单位") + ownerShipModel.forEach { model -> + sheetBuilder.addItem(model.name) + } + sheetBuilder.setGravityCenter(true) + .setOnSheetItemClickListener { dialog, _, position, tag -> + ownerShipView.text = tag + this.deptId = ownerShipModel[position].id.toString() + + dialog.dismiss() + }.build().show() + } + }) + + deviceStateView.setOnClickListener { + QMUIBottomSheet.BottomListSheetBuilder(this) + .setTitle("在线情况") + .addItem("在线") + .addItem("离线") + .setGravityCenter(true) + .setOnSheetItemClickListener { dialog, _, _, tag -> + deviceStateView.text = tag + this.deviceState = if (tag == "在线") { + "1" + } else { + "0" + } + + dialog.dismiss() + }.build().show() + } + + areaView.setOnClickListener { + areaViewModel.obtainArea() + } + areaViewModel.areaModel.observe(this, { + if (it.code == 200) { + val firstLevelArea: MutableList = ArrayList() + val secondLevelArea: MutableList = ArrayList() + val thirdLevelArea: MutableList = ArrayList() + it.data?.forEach { dataBean -> + when (dataBean.level) { + 2 -> firstLevelArea.add(dataBean) + 3 -> secondLevelArea.add(dataBean) + 4 -> thirdLevelArea.add(dataBean) + } + } + + // 绑定区域 + BottomAreaSheet.Builder() + .setContext(this) + .setFirstAreaData(firstLevelArea) + .setSecondAreaData(secondLevelArea) + .setThirdAreaData(thirdLevelArea) + .setOnActionSheetListener(object : BottomAreaSheet.OnActionSheetListener { + override fun onAreaSelected(area: String?, id: String?) { + areaView.text = area + areaId = id.toString() + } + }).build().show() + } + }) + + searchButton.setChangeAlphaWhenPress(true) + searchButton.setOnClickListener { + //页面跳转,将查询参数传过去 + navigatePageTo( + DeviceSearchResultActivity::class.java, addAll( + wellCodeView.text.toString().trim(), + deviceTypeValue, + deptId, + deviceState, + areaId + ) + ) + } + + clearButton.setChangeAlphaWhenPress(true) + clearButton.setOnClickListener { + wellCodeView.setText("") + deviceTypeView.text = "" + ownerShipView.text = "" + deviceStateView.text = "" + areaView.text = "" + } + } +} \ No newline at end of file diff --git a/app/src/main/java/com/casic/qd/smartwell/view/SearchRecordActivity.kt b/app/src/main/java/com/casic/qd/smartwell/view/SearchRecordActivity.kt deleted file mode 100644 index 8cab864..0000000 --- a/app/src/main/java/com/casic/qd/smartwell/view/SearchRecordActivity.kt +++ /dev/null @@ -1,184 +0,0 @@ -package com.casic.qd.smartwell.view - -import androidx.lifecycle.ViewModelProvider -import com.casic.qd.smartwell.R -import com.casic.qd.smartwell.base.BaseActivity -import com.casic.qd.smartwell.extensions.addAll -import com.casic.qd.smartwell.extensions.navigatePageTo -import com.casic.qd.smartwell.model.AreaModel -import com.casic.qd.smartwell.model.DeviceTypeModel -import com.casic.qd.smartwell.model.OwnerShipModel -import com.casic.qd.smartwell.utils.Constant -import com.casic.qd.smartwell.utils.SaveKeyValues -import com.casic.qd.smartwell.vm.AreaViewModel -import com.casic.qd.smartwell.vm.AuthenticateViewModel -import com.casic.qd.smartwell.vm.DeviceViewModel -import com.casic.qd.smartwell.widgets.BottomAreaSheet -import com.google.gson.Gson -import com.google.gson.reflect.TypeToken -import com.qmuiteam.qmui.widget.dialog.QMUIBottomSheet -import kotlinx.android.synthetic.main.activity_search_record.* -import kotlinx.android.synthetic.main.include_base_title.* - -/** - * @author a203 - * @description 记录查询界面 - * @date 2022/2/17 14:33 - * @email 290677893@qq.com - */ -class SearchRecordActivity : BaseActivity() { - - private lateinit var deviceViewModel: DeviceViewModel - private lateinit var authenticateViewModel: AuthenticateViewModel - private lateinit var areaViewModel: AreaViewModel - private var authenticatedType: MutableList = ArrayList() - private var deviceTypeValue = "" - private var deptId = "" - private var deviceState = "" - private var areaId = "" - - override fun initLayoutView(): Int = R.layout.activity_search_record - - override fun setupTopBarLayout() { - titleView.text = "记录查询" - } - - override fun initData() { - val userDeviceJson = SaveKeyValues.getValue(Constant.USER_DEVICE_TYPE, "") as String - if (userDeviceJson.isNotBlank()) { - authenticatedType = Gson().fromJson( - userDeviceJson, object : TypeToken>() {}.type - ) - } - deviceViewModel = ViewModelProvider(this).get(DeviceViewModel::class.java) - authenticateViewModel = ViewModelProvider(this).get(AuthenticateViewModel::class.java) - areaViewModel = ViewModelProvider(this).get(AreaViewModel::class.java) - } - - override fun initEvent() { - deviceTypeView.setOnClickListener { - /** - * 获取全部设备类型 - * */ - deviceViewModel.obtainDeviceType() - } - deviceViewModel.typeModel.observe(this, { - if (it.code == 200) { - val authenticatedModel: MutableList = ArrayList() - it.data?.forEach { deviceModel -> - if (deviceModel.value in authenticatedType) { - authenticatedModel.add(deviceModel) - } - } - val sheetBuilder = QMUIBottomSheet.BottomListSheetBuilder(this) - sheetBuilder.setTitle("设备类型") - authenticatedModel.forEach { deviceModel -> - sheetBuilder.addItem(deviceModel.name) - } - sheetBuilder.setGravityCenter(true) - .setOnSheetItemClickListener { dialog, _, position, tag -> - deviceTypeView.text = tag - this.deviceTypeValue = authenticatedModel[position].value.toString() - - dialog.dismiss() - }.build().show() - } - }) - - ownerShipView.setOnClickListener { - authenticateViewModel.obtainOwnerShip("03") - } - authenticateViewModel.resultModel.observe(this, { - if (it.code == 200) { - val ownerShipModel: MutableList = ArrayList() - it.data?.list?.forEach { listBean -> - ownerShipModel.add(listBean) - } - val sheetBuilder = QMUIBottomSheet.BottomListSheetBuilder(this) - sheetBuilder.setTitle("权属单位") - ownerShipModel.forEach { model -> - sheetBuilder.addItem(model.name) - } - sheetBuilder.setGravityCenter(true) - .setOnSheetItemClickListener { dialog, _, position, tag -> - ownerShipView.text = tag - this.deptId = ownerShipModel[position].id.toString() - - dialog.dismiss() - }.build().show() - } - }) - - deviceStateView.setOnClickListener { - QMUIBottomSheet.BottomListSheetBuilder(this) - .setTitle("在线情况") - .addItem("在线") - .addItem("离线") - .setGravityCenter(true) - .setOnSheetItemClickListener { dialog, _, _, tag -> - deviceStateView.text = tag - this.deviceState = if (tag == "在线") { - "1" - } else { - "0" - } - - dialog.dismiss() - }.build().show() - } - - areaView.setOnClickListener { - areaViewModel.obtainArea() - } - areaViewModel.areaModel.observe(this, { - if (it.code == 200) { - val firstLevelArea: MutableList = ArrayList() - val secondLevelArea: MutableList = ArrayList() - val thirdLevelArea: MutableList = ArrayList() - it.data?.forEach { dataBean -> - when (dataBean.level) { - 2 -> firstLevelArea.add(dataBean) - 3 -> secondLevelArea.add(dataBean) - 4 -> thirdLevelArea.add(dataBean) - } - } - - // 绑定区域 - BottomAreaSheet.Builder() - .setContext(this) - .setFirstAreaData(firstLevelArea) - .setSecondAreaData(secondLevelArea) - .setThirdAreaData(thirdLevelArea) - .setOnActionSheetListener(object : BottomAreaSheet.OnActionSheetListener { - override fun onAreaSelected(area: String?, id: String?) { - areaView.text = area - areaId = id.toString() - } - }).build().show() - } - }) - - searchButton.setChangeAlphaWhenPress(true) - searchButton.setOnClickListener { - //页面跳转,将查询参数传过去 - navigatePageTo( - DeviceSearchResultActivity::class.java, addAll( - wellCodeView.text.toString().trim(), - deviceTypeValue, - deptId, - deviceState, - areaId - ) - ) - } - - clearButton.setChangeAlphaWhenPress(true) - clearButton.setOnClickListener { - wellCodeView.setText("") - deviceTypeView.text = "" - ownerShipView.text = "" - deviceStateView.text = "" - areaView.text = "" - } - } -} \ No newline at end of file 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 21c4286..3272cfe 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 @@ -15,6 +15,7 @@ import com.casic.qd.smartwell.widgets.DateSelectDialog import com.github.mikephil.charting.data.BarEntry import com.github.mikephil.charting.data.PieEntry +import com.jzxiang.pickerview.data.Type import kotlinx.android.synthetic.main.activity_statistics.* import kotlinx.android.synthetic.main.include_base_title.* import java.util.* @@ -97,7 +98,6 @@ 5 -> { DateSelectDialog.Builder() .setContext(context) - .setFragmentManager(supportFragmentManager) .setTitle("选择日期") .setNegativeButton("取消") .setPositiveButton("选好了") @@ -113,7 +113,10 @@ //选择取消就默认加载近7天的数据 periodSpinner.setSelection(3) } - }).build().show() + }) + .setFragmentManager(supportFragmentManager) + .setCalendarType(Type.YEAR_MONTH_DAY) + .build().show() } } } @@ -200,7 +203,6 @@ 5 -> { DateSelectDialog.Builder() .setContext(context) - .setFragmentManager(supportFragmentManager) .setTitle("选择日期") .setNegativeButton("取消") .setPositiveButton("选好了") @@ -216,7 +218,10 @@ //选择取消就默认加载近7天的数据 periodSpinner.setSelection(3) } - }).build().show() + }) + .setFragmentManager(supportFragmentManager) + .setCalendarType(Type.YEAR_MONTH_DAY) + .build().show() } } } diff --git a/app/src/main/java/com/casic/qd/smartwell/view/WaterExpandedActivity.kt b/app/src/main/java/com/casic/qd/smartwell/view/WaterExpandedActivity.kt index 251140d..7a63dea 100644 --- a/app/src/main/java/com/casic/qd/smartwell/view/WaterExpandedActivity.kt +++ b/app/src/main/java/com/casic/qd/smartwell/view/WaterExpandedActivity.kt @@ -13,6 +13,7 @@ import com.casic.qd.smartwell.vm.WaterStatisticsViewModel import com.casic.qd.smartwell.widgets.DateSelectDialog import com.github.mikephil.charting.data.Entry +import com.jzxiang.pickerview.data.Type import kotlinx.android.synthetic.main.activity_water_expanded.* import java.util.* import kotlin.collections.ArrayList @@ -86,7 +87,6 @@ 5 -> { DateSelectDialog.Builder() .setContext(context) - .setFragmentManager(supportFragmentManager) .setTitle("选择日期") .setNegativeButton("取消") .setPositiveButton("选好了") @@ -102,7 +102,10 @@ //选择取消就默认加载近7天的数据 periodSpinner.setSelection(3) } - }).build().show() + }) + .setFragmentManager(supportFragmentManager) + .setCalendarType(Type.YEAR_MONTH_DAY) + .build().show() } } } diff --git a/app/src/main/java/com/casic/qd/smartwell/vm/DeviceViewModel.kt b/app/src/main/java/com/casic/qd/smartwell/vm/DeviceViewModel.kt index 02aefed..9448ade 100644 --- a/app/src/main/java/com/casic/qd/smartwell/vm/DeviceViewModel.kt +++ b/app/src/main/java/com/casic/qd/smartwell/vm/DeviceViewModel.kt @@ -7,8 +7,10 @@ import com.casic.qd.smartwell.extensions.separateResponseCode import com.casic.qd.smartwell.extensions.show import com.casic.qd.smartwell.extensions.toErrorMessage +import com.casic.qd.smartwell.model.DayDataModel import com.casic.qd.smartwell.model.DeviceStatisticsModel import com.casic.qd.smartwell.model.DeviceTypeModel +import com.casic.qd.smartwell.model.TotalDataModel import com.casic.qd.smartwell.utils.retrofit.RetrofitServiceManager import com.google.gson.Gson import com.google.gson.reflect.TypeToken @@ -19,6 +21,8 @@ private val gson = Gson() val resultModel = MutableLiveData() val typeModel = MutableLiveData() + val dayDataModel = MutableLiveData() + val totalDataModel = MutableLiveData() /** * 管网资产统计 @@ -55,4 +59,40 @@ Log.e(kTag, it.toString(), it) "服务器异常".show() }) + + /** + * 获取设备日用水量 + */ + fun obtainSevenDayData(devCode: String?, beginTime: String?, endTime: String?) = launch({ + val response = RetrofitServiceManager.obtainSevenDayData(devCode, beginTime, endTime) + val responseCode = response.separateResponseCode() + if (responseCode == 200) { + dayDataModel.value = gson.fromJson( + response, object : TypeToken() {}.type + ) + } else { + response.toErrorMessage().show() + } + }, { + Log.e(kTag, it.toString(), it) + "服务器异常".show() + }) + + /** + * 获取设备累计用水量 + */ + fun obtainTotalDayData(devCode: String?, beginTime: String?, endTime: String?) = launch({ + val response = RetrofitServiceManager.obtainTotalDayData(devCode, beginTime, endTime) + val responseCode = response.separateResponseCode() + if (responseCode == 200) { + totalDataModel.value = gson.fromJson( + response, object : TypeToken() {}.type + ) + } else { + 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/widgets/DateSelectDialog.kt b/app/src/main/java/com/casic/qd/smartwell/widgets/DateSelectDialog.kt index ec403eb..fda3a03 100644 --- a/app/src/main/java/com/casic/qd/smartwell/widgets/DateSelectDialog.kt +++ b/app/src/main/java/com/casic/qd/smartwell/widgets/DateSelectDialog.kt @@ -9,6 +9,7 @@ import com.casic.qd.smartwell.extensions.convertColor import com.casic.qd.smartwell.extensions.initDialogLayoutParams import com.casic.qd.smartwell.extensions.timestampToDate +import com.casic.qd.smartwell.extensions.timestampToTime import com.casic.qd.smartwell.utils.Constant import com.jzxiang.pickerview.TimePickerDialog import com.jzxiang.pickerview.data.Type @@ -18,30 +19,27 @@ builder.context, R.style.UserDefinedDialogStyle ) { - private val fragmentManager: FragmentManager = builder.fragmentManager private val title: String = builder.title private val negativeBtn: String = builder.negativeBtn private val positiveBtn: String = builder.positiveBtn private val listener: OnDialogButtonClickListener = builder.listener + private val fragmentManager: FragmentManager = builder.fragmentManager + private val type: Type = builder.type class Builder { lateinit var context: Context - lateinit var fragmentManager: FragmentManager lateinit var title: String lateinit var negativeBtn: String lateinit var positiveBtn: String lateinit var listener: OnDialogButtonClickListener + lateinit var fragmentManager: FragmentManager + lateinit var type: Type fun setContext(context: Context): Builder { this.context = context return this } - fun setFragmentManager(fragmentManager: FragmentManager): Builder { - this.fragmentManager = fragmentManager - return this - } - fun setTitle(title: String): Builder { this.title = title return this @@ -62,6 +60,16 @@ return this } + fun setFragmentManager(fragmentManager: FragmentManager): Builder { + this.fragmentManager = fragmentManager + return this + } + + fun setCalendarType(calendarType: Type): Builder { + this.type = calendarType + return this + } + fun build(): DateSelectDialog { return DateSelectDialog(this) } @@ -69,7 +77,7 @@ override fun onCreate(savedInstanceState: Bundle?) { super.onCreate(savedInstanceState) - this.initDialogLayoutParams(Gravity.CENTER, R.style.UserDefinedAnimation, 0.8f) + this.initDialogLayoutParams(Gravity.CENTER, R.style.UserDefinedAnimation, 0.85f) setContentView(R.layout.dialog_select_date) setCancelable(false) setCanceledOnTouchOutside(false) @@ -86,10 +94,15 @@ .setCyclic(false) .setMinMillseconds(System.currentTimeMillis() - Constant.FIVE_YEARS) .setMaxMillseconds(System.currentTimeMillis()) - .setType(Type.YEAR_MONTH_DAY) + .setType(type) .setCallBack { _: TimePickerDialog?, millSeconds: Long -> - startDateView.setText(millSeconds.timestampToDate()) - }.build().show(fragmentManager, "YEAR_MONTH_DAY") + val textValue = if (type == Type.ALL) { + millSeconds.timestampToTime() + } else { + millSeconds.timestampToDate() + } + startDateView.setText(textValue) + }.build().show(fragmentManager, "DateSelectDialog") } endDateView.setOnClickListener { @@ -100,10 +113,15 @@ .setCyclic(false) .setMinMillseconds(System.currentTimeMillis() - Constant.FIVE_YEARS) .setMaxMillseconds(System.currentTimeMillis()) - .setType(Type.YEAR_MONTH_DAY) + .setType(type) .setCallBack { _: TimePickerDialog?, millSeconds: Long -> - endDateView.setText(millSeconds.timestampToDate()) - }.build().show(fragmentManager, "YEAR_MONTH_DAY") + val textValue = if (type == Type.ALL) { + millSeconds.timestampToTime() + } else { + millSeconds.timestampToDate() + } + endDateView.setText(textValue) + }.build().show(fragmentManager, "DateSelectDialog") } dialogCancelButton.text = negativeBtn diff --git a/app/src/main/res/drawable/ic_calendar.xml b/app/src/main/res/drawable/ic_calendar.xml new file mode 100644 index 0000000..a314f72 --- /dev/null +++ b/app/src/main/res/drawable/ic_calendar.xml @@ -0,0 +1,12 @@ + + + + diff --git a/app/src/main/res/layout/activity_data_search.xml b/app/src/main/res/layout/activity_data_search.xml new file mode 100644 index 0000000..77d9ef6 --- /dev/null +++ b/app/src/main/res/layout/activity_data_search.xml @@ -0,0 +1,6 @@ + + + + \ No newline at end of file diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml index 82386c9..3832c68 100644 --- a/app/src/main/AndroidManifest.xml +++ b/app/src/main/AndroidManifest.xml @@ -48,7 +48,7 @@ - + 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 216e7cc..f53e831 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,6 +15,14 @@ return dateFormat.format(calendar.time) } +fun Long.timestampToLastWeekTime(): String { + val dateFormat = SimpleDateFormat("yyyy-MM-dd HH:mm:ss", Locale.CHINA) + val calendar = Calendar.getInstance() + calendar.time = Date(this) + calendar.set(Calendar.DAY_OF_YEAR, calendar.get(Calendar.DAY_OF_YEAR) - 6) + return dateFormat.format(calendar.time) +} + fun Long.timestampToLastMonthDate(): String { val dateFormat = SimpleDateFormat("yyyy-MM-dd", Locale.CHINA) val calendar = Calendar.getInstance() diff --git a/app/src/main/java/com/casic/qd/smartwell/model/DayDataModel.kt b/app/src/main/java/com/casic/qd/smartwell/model/DayDataModel.kt new file mode 100644 index 0000000..18d1399 --- /dev/null +++ b/app/src/main/java/com/casic/qd/smartwell/model/DayDataModel.kt @@ -0,0 +1,13 @@ +package com.casic.qd.smartwell.model + +class DayDataModel { + var code = 0 + var data: List? = null + var message: String? = null + var isSuccess = false + + class DataBean { + var time: String? = null + var value: String? = null + } +} \ No newline at end of file diff --git a/app/src/main/java/com/casic/qd/smartwell/model/TotalDataModel.kt b/app/src/main/java/com/casic/qd/smartwell/model/TotalDataModel.kt new file mode 100644 index 0000000..30bf829 --- /dev/null +++ b/app/src/main/java/com/casic/qd/smartwell/model/TotalDataModel.kt @@ -0,0 +1,14 @@ +package com.casic.qd.smartwell.model + +class TotalDataModel { + var code = 0 + var data: List? = null + var message: String? = null + var isSuccess = false + + class DataBean { + var total: String? = null + var deviceState: String? = null + var uptime: String? = null + } +} \ No newline at end of file diff --git a/app/src/main/java/com/casic/qd/smartwell/utils/retrofit/RetrofitService.kt b/app/src/main/java/com/casic/qd/smartwell/utils/retrofit/RetrofitService.kt index c5bf469..0c80ee9 100644 --- a/app/src/main/java/com/casic/qd/smartwell/utils/retrofit/RetrofitService.kt +++ b/app/src/main/java/com/casic/qd/smartwell/utils/retrofit/RetrofitService.kt @@ -202,4 +202,26 @@ @Query("offset") offset: Int, @Query("limit") limit: Int ): String + + /** + * 获取设备日用水量 + * */ + @GET("/device/sevenDayData") + suspend fun obtainSevenDayData( + @Header("token") token: String, + @Query("devCode") devCode: String?, + @Query("beginTime") beginTime: String?, + @Query("endTime") endTime: String? + ): String + + /** + * 获取设备日用水量 + * */ + @GET("/device/totalData") + suspend fun obtainTotalDayData( + @Header("token") token: String, + @Query("devCode") devCode: String?, + @Query("beginTime") beginTime: String?, + @Query("endTime") endTime: String? + ): String } \ No newline at end of file diff --git a/app/src/main/java/com/casic/qd/smartwell/utils/retrofit/RetrofitServiceManager.kt b/app/src/main/java/com/casic/qd/smartwell/utils/retrofit/RetrofitServiceManager.kt index 6f728e0..a8b320f 100644 --- a/app/src/main/java/com/casic/qd/smartwell/utils/retrofit/RetrofitServiceManager.kt +++ b/app/src/main/java/com/casic/qd/smartwell/utils/retrofit/RetrofitServiceManager.kt @@ -204,4 +204,18 @@ Constant.PAGE_LIMIT ) } + + /** + * 获取设备日用水量 + */ + suspend fun obtainSevenDayData(devCode: String?, beginTime: String?, endTime: String?): String { + return api.obtainSevenDayData(AuthenticationHelper.token!!, devCode, beginTime, endTime) + } + + /** + * 获取设备累计用水量 + */ + suspend fun obtainTotalDayData(devCode: String?, beginTime: String?, endTime: String?): String { + return api.obtainTotalDayData(AuthenticationHelper.token!!, devCode, beginTime, endTime) + } } \ No newline at end of file diff --git a/app/src/main/java/com/casic/qd/smartwell/view/DeviceDataDetailActivity.kt b/app/src/main/java/com/casic/qd/smartwell/view/DeviceDataDetailActivity.kt index 7029d17..a8a2695 100644 --- a/app/src/main/java/com/casic/qd/smartwell/view/DeviceDataDetailActivity.kt +++ b/app/src/main/java/com/casic/qd/smartwell/view/DeviceDataDetailActivity.kt @@ -1,22 +1,109 @@ package com.casic.qd.smartwell.view +import androidx.lifecycle.ViewModelProvider import com.casic.qd.smartwell.R import com.casic.qd.smartwell.base.BaseActivity -import kotlinx.android.synthetic.main.include_base_title.* +import com.casic.qd.smartwell.extensions.convertColor +import com.casic.qd.smartwell.extensions.timestampToLastWeekTime +import com.casic.qd.smartwell.extensions.timestampToTime +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.DeviceViewModel +import com.casic.qd.smartwell.widgets.DateSelectDialog +import com.github.mikephil.charting.data.Entry +import com.jzxiang.pickerview.data.Type +import kotlinx.android.synthetic.main.activity_device_data_detail.* +import kotlinx.android.synthetic.main.activity_main.rightOptionView +import kotlinx.android.synthetic.main.activity_main.titleView class DeviceDataDetailActivity : BaseActivity() { - override fun initLayoutView(): Int = R.layout.activity_device_detail + private val kTag = "DeviceDataDetailActivity" + private lateinit var deviceCode: String + private lateinit var deviceViewModel: DeviceViewModel + + override fun initLayoutView(): Int = R.layout.activity_device_data_detail override fun setupTopBarLayout() { - titleView.text = "历史数据" + deviceCode = intent.getStringExtra(Constant.INTENT_PARAM)!! + titleView.text = String.format("${deviceCode}历史数据") } override fun initData() { - + deviceViewModel = ViewModelProvider(this).get(DeviceViewModel::class.java) } override fun initEvent() { + rightOptionView.setOnClickListener { + DateSelectDialog.Builder() + .setContext(this) + .setTitle("选择日期") + .setNegativeButton("取消") + .setPositiveButton("选好了") + .setOnDialogButtonClickListener(object : + DateSelectDialog.OnDialogButtonClickListener { + override fun onConfirmClick(startDate: String, endDate: String) { + deviceViewModel.obtainSevenDayData(deviceCode, startDate, endDate) + deviceViewModel.obtainTotalDayData(deviceCode, startDate, endDate) + } + override fun onCancelClick() { + //选择取消就默认加载近7天的数据 + val time = System.currentTimeMillis() + val startTime = time.timestampToLastWeekTime() + val endTime = time.timestampToTime() + deviceViewModel.obtainSevenDayData(deviceCode, startTime, endTime) + deviceViewModel.obtainTotalDayData(deviceCode, startTime, endTime) + } + }) + .setFragmentManager(supportFragmentManager) + .setCalendarType(Type.ALL) + .build().show() + } + + //默认加载近一周的数据 + val time = System.currentTimeMillis() + val startTime = time.timestampToLastWeekTime() + val endTime = time.timestampToTime() + deviceViewModel.obtainSevenDayData(deviceCode, startTime, endTime) + deviceViewModel.dayDataModel.observe(this, { + if (it.code == 200) { + val entryModels: MutableList = ArrayList() + val xAxisDate: MutableList = ArrayList() + val entries: ArrayList = ArrayList() + val entryModel = LineChartEntryModel() + + entryModel.lineColor = Constant.COLORS[7].convertColor() + it.data?.forEachIndexed { index, dataBean -> + val split = dataBean.time.toString().split("-") + xAxisDate.add("${split[1]}/${split[2]}") + + entries.add(Entry(index.toFloat(), dataBean.value!!.toFloat(), "日用水量")) + } + entryModel.entryList = entries + entryModels.add(entryModel) + ChartViewHelper.setLineChartData(dayWaterLineChart, xAxisDate, entryModels) + } + }) + + deviceViewModel.obtainTotalDayData(deviceCode, startTime, endTime) + deviceViewModel.totalDataModel.observe(this, { + val entryModels: MutableList = ArrayList() + val xAxisDate: MutableList = ArrayList() + val entries: ArrayList = ArrayList() + val entryModel = LineChartEntryModel() + + entryModel.lineColor = Constant.COLORS[7].convertColor() + it.data?.forEachIndexed { index, dataBean -> + val split = dataBean.uptime.toString().split(" ")[0].split("-") + xAxisDate.add("${split[1]}/${split[2]}") + + entries.add(Entry(index.toFloat(), dataBean.total!!.toFloat(), "总用水量")) + } + entryModel.entryList = entries + entryModels.add(entryModel) + ChartViewHelper.setLineChartData(totalWaterLineChart, xAxisDate, entryModels) + }) } } \ No newline at end of file diff --git a/app/src/main/java/com/casic/qd/smartwell/view/MainActivity.kt b/app/src/main/java/com/casic/qd/smartwell/view/MainActivity.kt index 02435a3..3f4bb3c 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 @@ -1,7 +1,6 @@ package com.casic.qd.smartwell.view import android.content.Context -import android.content.Intent import android.os.Handler import android.os.Looper import android.os.Message @@ -22,6 +21,7 @@ import com.casic.qd.smartwell.vm.WaterStatisticsViewModel import com.github.mikephil.charting.data.Entry import com.pengxh.app.multilib.widget.dialog.AlertControlDialog +import com.pengxh.app.multilib.widget.dialog.BottomActionSheet import com.youth.banner.Banner import com.youth.banner.adapter.BannerImageAdapter import com.youth.banner.holder.BannerImageHolder @@ -100,9 +100,20 @@ HomeRecycleAdapter.OnGridItemClickListener { override fun onClick(position: Int) { when (position) { - 0 -> startActivity(Intent(context, MapActivity::class.java)) - 1 -> startActivity(Intent(context, SearchRecordActivity::class.java)) - 2 -> startActivity(Intent(context, StatisticsActivity::class.java)) + 0 -> context.navigatePageTo(MapActivity::class.java) + 1 -> { + BottomActionSheet.Builder() + .setContext(context) + .setActionItemTitles(arrayOf("设备", "数据")) + .setOnActionSheetListener { index -> + when (index) { + 0 -> context.navigatePageTo(SearchDeviceActivity::class.java) + 1 -> context.navigatePageTo(SearchDataActivity::class.java) + } + }.build().show() + + } + 2 -> context.navigatePageTo(StatisticsActivity::class.java) } } }) diff --git a/app/src/main/java/com/casic/qd/smartwell/view/SearchAlarmActivity.kt b/app/src/main/java/com/casic/qd/smartwell/view/SearchAlarmActivity.kt index 8f54163..5285a9f 100644 --- a/app/src/main/java/com/casic/qd/smartwell/view/SearchAlarmActivity.kt +++ b/app/src/main/java/com/casic/qd/smartwell/view/SearchAlarmActivity.kt @@ -13,11 +13,6 @@ import com.jzxiang.pickerview.data.Type import com.qmuiteam.qmui.widget.dialog.QMUIBottomSheet.BottomListSheetBuilder import kotlinx.android.synthetic.main.activity_alarm_search.* -import kotlinx.android.synthetic.main.activity_alarm_search.areaView -import kotlinx.android.synthetic.main.activity_alarm_search.clearButton -import kotlinx.android.synthetic.main.activity_alarm_search.searchButton -import kotlinx.android.synthetic.main.activity_alarm_search.wellCodeView -import kotlinx.android.synthetic.main.activity_search_record.* import kotlinx.android.synthetic.main.include_base_title.* class SearchAlarmActivity : BaseActivity() { diff --git a/app/src/main/java/com/casic/qd/smartwell/view/SearchDataActivity.kt b/app/src/main/java/com/casic/qd/smartwell/view/SearchDataActivity.kt new file mode 100644 index 0000000..e6a38e4 --- /dev/null +++ b/app/src/main/java/com/casic/qd/smartwell/view/SearchDataActivity.kt @@ -0,0 +1,168 @@ +package com.casic.qd.smartwell.view + +import com.casic.qd.smartwell.R +import com.casic.qd.smartwell.base.BaseActivity +import kotlinx.android.synthetic.main.include_base_title.* + +/** + * @author a203 + * @description 记录查询界面 + * @date 2022/2/17 14:33 + * @email 290677893@qq.com + */ +class SearchDataActivity : BaseActivity() { + +// private lateinit var deviceViewModel: DeviceViewModel +// private lateinit var authenticateViewModel: AuthenticateViewModel +// private lateinit var areaViewModel: AreaViewModel +// private var authenticatedType: MutableList = ArrayList() +// private var deviceTypeValue = "" +// private var deptId = "" +// private var deviceState = "" +// private var areaId = "" + + override fun initLayoutView(): Int = R.layout.activity_data_search + + override fun setupTopBarLayout() { + titleView.text = "数据查询" + } + + override fun initData() { +// val userDeviceJson = SaveKeyValues.getValue(Constant.USER_DEVICE_TYPE, "") as String +// if (userDeviceJson.isNotBlank()) { +// authenticatedType = Gson().fromJson( +// userDeviceJson, object : TypeToken>() {}.type +// ) +// } +// deviceViewModel = ViewModelProvider(this).get(DeviceViewModel::class.java) +// authenticateViewModel = ViewModelProvider(this).get(AuthenticateViewModel::class.java) +// areaViewModel = ViewModelProvider(this).get(AreaViewModel::class.java) + } + + override fun initEvent() { +// deviceTypeView.setOnClickListener { +// /** +// * 获取全部设备类型 +// * */ +// deviceViewModel.obtainDeviceType() +// } +// deviceViewModel.typeModel.observe(this, { +// if (it.code == 200) { +// val authenticatedModel: MutableList = ArrayList() +// it.data?.forEach { deviceModel -> +// if (deviceModel.value in authenticatedType) { +// authenticatedModel.add(deviceModel) +// } +// } +// val sheetBuilder = QMUIBottomSheet.BottomListSheetBuilder(this) +// sheetBuilder.setTitle("设备类型") +// authenticatedModel.forEach { deviceModel -> +// sheetBuilder.addItem(deviceModel.name) +// } +// sheetBuilder.setGravityCenter(true) +// .setOnSheetItemClickListener { dialog, _, position, tag -> +// deviceTypeView.text = tag +// this.deviceTypeValue = authenticatedModel[position].value.toString() +// +// dialog.dismiss() +// }.build().show() +// } +// }) +// +// ownerShipView.setOnClickListener { +// authenticateViewModel.obtainOwnerShip("03") +// } +// authenticateViewModel.resultModel.observe(this, { +// if (it.code == 200) { +// val ownerShipModel: MutableList = ArrayList() +// it.data?.list?.forEach { listBean -> +// ownerShipModel.add(listBean) +// } +// val sheetBuilder = QMUIBottomSheet.BottomListSheetBuilder(this) +// sheetBuilder.setTitle("权属单位") +// ownerShipModel.forEach { model -> +// sheetBuilder.addItem(model.name) +// } +// sheetBuilder.setGravityCenter(true) +// .setOnSheetItemClickListener { dialog, _, position, tag -> +// ownerShipView.text = tag +// this.deptId = ownerShipModel[position].id.toString() +// +// dialog.dismiss() +// }.build().show() +// } +// }) +// +// deviceStateView.setOnClickListener { +// QMUIBottomSheet.BottomListSheetBuilder(this) +// .setTitle("在线情况") +// .addItem("在线") +// .addItem("离线") +// .setGravityCenter(true) +// .setOnSheetItemClickListener { dialog, _, _, tag -> +// deviceStateView.text = tag +// this.deviceState = if (tag == "在线") { +// "1" +// } else { +// "0" +// } +// +// dialog.dismiss() +// }.build().show() +// } +// +// areaView.setOnClickListener { +// areaViewModel.obtainArea() +// } +// areaViewModel.areaModel.observe(this, { +// if (it.code == 200) { +// val firstLevelArea: MutableList = ArrayList() +// val secondLevelArea: MutableList = ArrayList() +// val thirdLevelArea: MutableList = ArrayList() +// it.data?.forEach { dataBean -> +// when (dataBean.level) { +// 2 -> firstLevelArea.add(dataBean) +// 3 -> secondLevelArea.add(dataBean) +// 4 -> thirdLevelArea.add(dataBean) +// } +// } +// +// // 绑定区域 +// BottomAreaSheet.Builder() +// .setContext(this) +// .setFirstAreaData(firstLevelArea) +// .setSecondAreaData(secondLevelArea) +// .setThirdAreaData(thirdLevelArea) +// .setOnActionSheetListener(object : BottomAreaSheet.OnActionSheetListener { +// override fun onAreaSelected(area: String?, id: String?) { +// areaView.text = area +// areaId = id.toString() +// } +// }).build().show() +// } +// }) +// +// searchButton.setChangeAlphaWhenPress(true) +// searchButton.setOnClickListener { +// //页面跳转,将查询参数传过去 +// navigatePageTo( +// DeviceSearchResultActivity::class.java, addAll( +// wellCodeView.text.toString().trim(), +// deviceTypeValue, +// deptId, +// deviceState, +// areaId +// ) +// ) +// } +// +// clearButton.setChangeAlphaWhenPress(true) +// clearButton.setOnClickListener { +// wellCodeView.setText("") +// deviceTypeView.text = "" +// ownerShipView.text = "" +// deviceStateView.text = "" +// areaView.text = "" +// } + } +} \ No newline at end of file diff --git a/app/src/main/java/com/casic/qd/smartwell/view/SearchDeviceActivity.kt b/app/src/main/java/com/casic/qd/smartwell/view/SearchDeviceActivity.kt new file mode 100644 index 0000000..cf0c05f --- /dev/null +++ b/app/src/main/java/com/casic/qd/smartwell/view/SearchDeviceActivity.kt @@ -0,0 +1,184 @@ +package com.casic.qd.smartwell.view + +import androidx.lifecycle.ViewModelProvider +import com.casic.qd.smartwell.R +import com.casic.qd.smartwell.base.BaseActivity +import com.casic.qd.smartwell.extensions.addAll +import com.casic.qd.smartwell.extensions.navigatePageTo +import com.casic.qd.smartwell.model.AreaModel +import com.casic.qd.smartwell.model.DeviceTypeModel +import com.casic.qd.smartwell.model.OwnerShipModel +import com.casic.qd.smartwell.utils.Constant +import com.casic.qd.smartwell.utils.SaveKeyValues +import com.casic.qd.smartwell.vm.AreaViewModel +import com.casic.qd.smartwell.vm.AuthenticateViewModel +import com.casic.qd.smartwell.vm.DeviceViewModel +import com.casic.qd.smartwell.widgets.BottomAreaSheet +import com.google.gson.Gson +import com.google.gson.reflect.TypeToken +import com.qmuiteam.qmui.widget.dialog.QMUIBottomSheet +import kotlinx.android.synthetic.main.activity_device_search.* +import kotlinx.android.synthetic.main.include_base_title.* + +/** + * @author a203 + * @description 记录查询界面 + * @date 2022/2/17 14:33 + * @email 290677893@qq.com + */ +class SearchDeviceActivity : BaseActivity() { + + private lateinit var deviceViewModel: DeviceViewModel + private lateinit var authenticateViewModel: AuthenticateViewModel + private lateinit var areaViewModel: AreaViewModel + private var authenticatedType: MutableList = ArrayList() + private var deviceTypeValue = "" + private var deptId = "" + private var deviceState = "" + private var areaId = "" + + override fun initLayoutView(): Int = R.layout.activity_device_search + + override fun setupTopBarLayout() { + titleView.text = "设备查询" + } + + override fun initData() { + val userDeviceJson = SaveKeyValues.getValue(Constant.USER_DEVICE_TYPE, "") as String + if (userDeviceJson.isNotBlank()) { + authenticatedType = Gson().fromJson( + userDeviceJson, object : TypeToken>() {}.type + ) + } + deviceViewModel = ViewModelProvider(this).get(DeviceViewModel::class.java) + authenticateViewModel = ViewModelProvider(this).get(AuthenticateViewModel::class.java) + areaViewModel = ViewModelProvider(this).get(AreaViewModel::class.java) + } + + override fun initEvent() { + deviceTypeView.setOnClickListener { + /** + * 获取全部设备类型 + * */ + deviceViewModel.obtainDeviceType() + } + deviceViewModel.typeModel.observe(this, { + if (it.code == 200) { + val authenticatedModel: MutableList = ArrayList() + it.data?.forEach { deviceModel -> + if (deviceModel.value in authenticatedType) { + authenticatedModel.add(deviceModel) + } + } + val sheetBuilder = QMUIBottomSheet.BottomListSheetBuilder(this) + sheetBuilder.setTitle("设备类型") + authenticatedModel.forEach { deviceModel -> + sheetBuilder.addItem(deviceModel.name) + } + sheetBuilder.setGravityCenter(true) + .setOnSheetItemClickListener { dialog, _, position, tag -> + deviceTypeView.text = tag + this.deviceTypeValue = authenticatedModel[position].value.toString() + + dialog.dismiss() + }.build().show() + } + }) + + ownerShipView.setOnClickListener { + authenticateViewModel.obtainOwnerShip("03") + } + authenticateViewModel.resultModel.observe(this, { + if (it.code == 200) { + val ownerShipModel: MutableList = ArrayList() + it.data?.list?.forEach { listBean -> + ownerShipModel.add(listBean) + } + val sheetBuilder = QMUIBottomSheet.BottomListSheetBuilder(this) + sheetBuilder.setTitle("权属单位") + ownerShipModel.forEach { model -> + sheetBuilder.addItem(model.name) + } + sheetBuilder.setGravityCenter(true) + .setOnSheetItemClickListener { dialog, _, position, tag -> + ownerShipView.text = tag + this.deptId = ownerShipModel[position].id.toString() + + dialog.dismiss() + }.build().show() + } + }) + + deviceStateView.setOnClickListener { + QMUIBottomSheet.BottomListSheetBuilder(this) + .setTitle("在线情况") + .addItem("在线") + .addItem("离线") + .setGravityCenter(true) + .setOnSheetItemClickListener { dialog, _, _, tag -> + deviceStateView.text = tag + this.deviceState = if (tag == "在线") { + "1" + } else { + "0" + } + + dialog.dismiss() + }.build().show() + } + + areaView.setOnClickListener { + areaViewModel.obtainArea() + } + areaViewModel.areaModel.observe(this, { + if (it.code == 200) { + val firstLevelArea: MutableList = ArrayList() + val secondLevelArea: MutableList = ArrayList() + val thirdLevelArea: MutableList = ArrayList() + it.data?.forEach { dataBean -> + when (dataBean.level) { + 2 -> firstLevelArea.add(dataBean) + 3 -> secondLevelArea.add(dataBean) + 4 -> thirdLevelArea.add(dataBean) + } + } + + // 绑定区域 + BottomAreaSheet.Builder() + .setContext(this) + .setFirstAreaData(firstLevelArea) + .setSecondAreaData(secondLevelArea) + .setThirdAreaData(thirdLevelArea) + .setOnActionSheetListener(object : BottomAreaSheet.OnActionSheetListener { + override fun onAreaSelected(area: String?, id: String?) { + areaView.text = area + areaId = id.toString() + } + }).build().show() + } + }) + + searchButton.setChangeAlphaWhenPress(true) + searchButton.setOnClickListener { + //页面跳转,将查询参数传过去 + navigatePageTo( + DeviceSearchResultActivity::class.java, addAll( + wellCodeView.text.toString().trim(), + deviceTypeValue, + deptId, + deviceState, + areaId + ) + ) + } + + clearButton.setChangeAlphaWhenPress(true) + clearButton.setOnClickListener { + wellCodeView.setText("") + deviceTypeView.text = "" + ownerShipView.text = "" + deviceStateView.text = "" + areaView.text = "" + } + } +} \ No newline at end of file diff --git a/app/src/main/java/com/casic/qd/smartwell/view/SearchRecordActivity.kt b/app/src/main/java/com/casic/qd/smartwell/view/SearchRecordActivity.kt deleted file mode 100644 index 8cab864..0000000 --- a/app/src/main/java/com/casic/qd/smartwell/view/SearchRecordActivity.kt +++ /dev/null @@ -1,184 +0,0 @@ -package com.casic.qd.smartwell.view - -import androidx.lifecycle.ViewModelProvider -import com.casic.qd.smartwell.R -import com.casic.qd.smartwell.base.BaseActivity -import com.casic.qd.smartwell.extensions.addAll -import com.casic.qd.smartwell.extensions.navigatePageTo -import com.casic.qd.smartwell.model.AreaModel -import com.casic.qd.smartwell.model.DeviceTypeModel -import com.casic.qd.smartwell.model.OwnerShipModel -import com.casic.qd.smartwell.utils.Constant -import com.casic.qd.smartwell.utils.SaveKeyValues -import com.casic.qd.smartwell.vm.AreaViewModel -import com.casic.qd.smartwell.vm.AuthenticateViewModel -import com.casic.qd.smartwell.vm.DeviceViewModel -import com.casic.qd.smartwell.widgets.BottomAreaSheet -import com.google.gson.Gson -import com.google.gson.reflect.TypeToken -import com.qmuiteam.qmui.widget.dialog.QMUIBottomSheet -import kotlinx.android.synthetic.main.activity_search_record.* -import kotlinx.android.synthetic.main.include_base_title.* - -/** - * @author a203 - * @description 记录查询界面 - * @date 2022/2/17 14:33 - * @email 290677893@qq.com - */ -class SearchRecordActivity : BaseActivity() { - - private lateinit var deviceViewModel: DeviceViewModel - private lateinit var authenticateViewModel: AuthenticateViewModel - private lateinit var areaViewModel: AreaViewModel - private var authenticatedType: MutableList = ArrayList() - private var deviceTypeValue = "" - private var deptId = "" - private var deviceState = "" - private var areaId = "" - - override fun initLayoutView(): Int = R.layout.activity_search_record - - override fun setupTopBarLayout() { - titleView.text = "记录查询" - } - - override fun initData() { - val userDeviceJson = SaveKeyValues.getValue(Constant.USER_DEVICE_TYPE, "") as String - if (userDeviceJson.isNotBlank()) { - authenticatedType = Gson().fromJson( - userDeviceJson, object : TypeToken>() {}.type - ) - } - deviceViewModel = ViewModelProvider(this).get(DeviceViewModel::class.java) - authenticateViewModel = ViewModelProvider(this).get(AuthenticateViewModel::class.java) - areaViewModel = ViewModelProvider(this).get(AreaViewModel::class.java) - } - - override fun initEvent() { - deviceTypeView.setOnClickListener { - /** - * 获取全部设备类型 - * */ - deviceViewModel.obtainDeviceType() - } - deviceViewModel.typeModel.observe(this, { - if (it.code == 200) { - val authenticatedModel: MutableList = ArrayList() - it.data?.forEach { deviceModel -> - if (deviceModel.value in authenticatedType) { - authenticatedModel.add(deviceModel) - } - } - val sheetBuilder = QMUIBottomSheet.BottomListSheetBuilder(this) - sheetBuilder.setTitle("设备类型") - authenticatedModel.forEach { deviceModel -> - sheetBuilder.addItem(deviceModel.name) - } - sheetBuilder.setGravityCenter(true) - .setOnSheetItemClickListener { dialog, _, position, tag -> - deviceTypeView.text = tag - this.deviceTypeValue = authenticatedModel[position].value.toString() - - dialog.dismiss() - }.build().show() - } - }) - - ownerShipView.setOnClickListener { - authenticateViewModel.obtainOwnerShip("03") - } - authenticateViewModel.resultModel.observe(this, { - if (it.code == 200) { - val ownerShipModel: MutableList = ArrayList() - it.data?.list?.forEach { listBean -> - ownerShipModel.add(listBean) - } - val sheetBuilder = QMUIBottomSheet.BottomListSheetBuilder(this) - sheetBuilder.setTitle("权属单位") - ownerShipModel.forEach { model -> - sheetBuilder.addItem(model.name) - } - sheetBuilder.setGravityCenter(true) - .setOnSheetItemClickListener { dialog, _, position, tag -> - ownerShipView.text = tag - this.deptId = ownerShipModel[position].id.toString() - - dialog.dismiss() - }.build().show() - } - }) - - deviceStateView.setOnClickListener { - QMUIBottomSheet.BottomListSheetBuilder(this) - .setTitle("在线情况") - .addItem("在线") - .addItem("离线") - .setGravityCenter(true) - .setOnSheetItemClickListener { dialog, _, _, tag -> - deviceStateView.text = tag - this.deviceState = if (tag == "在线") { - "1" - } else { - "0" - } - - dialog.dismiss() - }.build().show() - } - - areaView.setOnClickListener { - areaViewModel.obtainArea() - } - areaViewModel.areaModel.observe(this, { - if (it.code == 200) { - val firstLevelArea: MutableList = ArrayList() - val secondLevelArea: MutableList = ArrayList() - val thirdLevelArea: MutableList = ArrayList() - it.data?.forEach { dataBean -> - when (dataBean.level) { - 2 -> firstLevelArea.add(dataBean) - 3 -> secondLevelArea.add(dataBean) - 4 -> thirdLevelArea.add(dataBean) - } - } - - // 绑定区域 - BottomAreaSheet.Builder() - .setContext(this) - .setFirstAreaData(firstLevelArea) - .setSecondAreaData(secondLevelArea) - .setThirdAreaData(thirdLevelArea) - .setOnActionSheetListener(object : BottomAreaSheet.OnActionSheetListener { - override fun onAreaSelected(area: String?, id: String?) { - areaView.text = area - areaId = id.toString() - } - }).build().show() - } - }) - - searchButton.setChangeAlphaWhenPress(true) - searchButton.setOnClickListener { - //页面跳转,将查询参数传过去 - navigatePageTo( - DeviceSearchResultActivity::class.java, addAll( - wellCodeView.text.toString().trim(), - deviceTypeValue, - deptId, - deviceState, - areaId - ) - ) - } - - clearButton.setChangeAlphaWhenPress(true) - clearButton.setOnClickListener { - wellCodeView.setText("") - deviceTypeView.text = "" - ownerShipView.text = "" - deviceStateView.text = "" - areaView.text = "" - } - } -} \ No newline at end of file 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 21c4286..3272cfe 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 @@ -15,6 +15,7 @@ import com.casic.qd.smartwell.widgets.DateSelectDialog import com.github.mikephil.charting.data.BarEntry import com.github.mikephil.charting.data.PieEntry +import com.jzxiang.pickerview.data.Type import kotlinx.android.synthetic.main.activity_statistics.* import kotlinx.android.synthetic.main.include_base_title.* import java.util.* @@ -97,7 +98,6 @@ 5 -> { DateSelectDialog.Builder() .setContext(context) - .setFragmentManager(supportFragmentManager) .setTitle("选择日期") .setNegativeButton("取消") .setPositiveButton("选好了") @@ -113,7 +113,10 @@ //选择取消就默认加载近7天的数据 periodSpinner.setSelection(3) } - }).build().show() + }) + .setFragmentManager(supportFragmentManager) + .setCalendarType(Type.YEAR_MONTH_DAY) + .build().show() } } } @@ -200,7 +203,6 @@ 5 -> { DateSelectDialog.Builder() .setContext(context) - .setFragmentManager(supportFragmentManager) .setTitle("选择日期") .setNegativeButton("取消") .setPositiveButton("选好了") @@ -216,7 +218,10 @@ //选择取消就默认加载近7天的数据 periodSpinner.setSelection(3) } - }).build().show() + }) + .setFragmentManager(supportFragmentManager) + .setCalendarType(Type.YEAR_MONTH_DAY) + .build().show() } } } diff --git a/app/src/main/java/com/casic/qd/smartwell/view/WaterExpandedActivity.kt b/app/src/main/java/com/casic/qd/smartwell/view/WaterExpandedActivity.kt index 251140d..7a63dea 100644 --- a/app/src/main/java/com/casic/qd/smartwell/view/WaterExpandedActivity.kt +++ b/app/src/main/java/com/casic/qd/smartwell/view/WaterExpandedActivity.kt @@ -13,6 +13,7 @@ import com.casic.qd.smartwell.vm.WaterStatisticsViewModel import com.casic.qd.smartwell.widgets.DateSelectDialog import com.github.mikephil.charting.data.Entry +import com.jzxiang.pickerview.data.Type import kotlinx.android.synthetic.main.activity_water_expanded.* import java.util.* import kotlin.collections.ArrayList @@ -86,7 +87,6 @@ 5 -> { DateSelectDialog.Builder() .setContext(context) - .setFragmentManager(supportFragmentManager) .setTitle("选择日期") .setNegativeButton("取消") .setPositiveButton("选好了") @@ -102,7 +102,10 @@ //选择取消就默认加载近7天的数据 periodSpinner.setSelection(3) } - }).build().show() + }) + .setFragmentManager(supportFragmentManager) + .setCalendarType(Type.YEAR_MONTH_DAY) + .build().show() } } } diff --git a/app/src/main/java/com/casic/qd/smartwell/vm/DeviceViewModel.kt b/app/src/main/java/com/casic/qd/smartwell/vm/DeviceViewModel.kt index 02aefed..9448ade 100644 --- a/app/src/main/java/com/casic/qd/smartwell/vm/DeviceViewModel.kt +++ b/app/src/main/java/com/casic/qd/smartwell/vm/DeviceViewModel.kt @@ -7,8 +7,10 @@ import com.casic.qd.smartwell.extensions.separateResponseCode import com.casic.qd.smartwell.extensions.show import com.casic.qd.smartwell.extensions.toErrorMessage +import com.casic.qd.smartwell.model.DayDataModel import com.casic.qd.smartwell.model.DeviceStatisticsModel import com.casic.qd.smartwell.model.DeviceTypeModel +import com.casic.qd.smartwell.model.TotalDataModel import com.casic.qd.smartwell.utils.retrofit.RetrofitServiceManager import com.google.gson.Gson import com.google.gson.reflect.TypeToken @@ -19,6 +21,8 @@ private val gson = Gson() val resultModel = MutableLiveData() val typeModel = MutableLiveData() + val dayDataModel = MutableLiveData() + val totalDataModel = MutableLiveData() /** * 管网资产统计 @@ -55,4 +59,40 @@ Log.e(kTag, it.toString(), it) "服务器异常".show() }) + + /** + * 获取设备日用水量 + */ + fun obtainSevenDayData(devCode: String?, beginTime: String?, endTime: String?) = launch({ + val response = RetrofitServiceManager.obtainSevenDayData(devCode, beginTime, endTime) + val responseCode = response.separateResponseCode() + if (responseCode == 200) { + dayDataModel.value = gson.fromJson( + response, object : TypeToken() {}.type + ) + } else { + response.toErrorMessage().show() + } + }, { + Log.e(kTag, it.toString(), it) + "服务器异常".show() + }) + + /** + * 获取设备累计用水量 + */ + fun obtainTotalDayData(devCode: String?, beginTime: String?, endTime: String?) = launch({ + val response = RetrofitServiceManager.obtainTotalDayData(devCode, beginTime, endTime) + val responseCode = response.separateResponseCode() + if (responseCode == 200) { + totalDataModel.value = gson.fromJson( + response, object : TypeToken() {}.type + ) + } else { + 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/widgets/DateSelectDialog.kt b/app/src/main/java/com/casic/qd/smartwell/widgets/DateSelectDialog.kt index ec403eb..fda3a03 100644 --- a/app/src/main/java/com/casic/qd/smartwell/widgets/DateSelectDialog.kt +++ b/app/src/main/java/com/casic/qd/smartwell/widgets/DateSelectDialog.kt @@ -9,6 +9,7 @@ import com.casic.qd.smartwell.extensions.convertColor import com.casic.qd.smartwell.extensions.initDialogLayoutParams import com.casic.qd.smartwell.extensions.timestampToDate +import com.casic.qd.smartwell.extensions.timestampToTime import com.casic.qd.smartwell.utils.Constant import com.jzxiang.pickerview.TimePickerDialog import com.jzxiang.pickerview.data.Type @@ -18,30 +19,27 @@ builder.context, R.style.UserDefinedDialogStyle ) { - private val fragmentManager: FragmentManager = builder.fragmentManager private val title: String = builder.title private val negativeBtn: String = builder.negativeBtn private val positiveBtn: String = builder.positiveBtn private val listener: OnDialogButtonClickListener = builder.listener + private val fragmentManager: FragmentManager = builder.fragmentManager + private val type: Type = builder.type class Builder { lateinit var context: Context - lateinit var fragmentManager: FragmentManager lateinit var title: String lateinit var negativeBtn: String lateinit var positiveBtn: String lateinit var listener: OnDialogButtonClickListener + lateinit var fragmentManager: FragmentManager + lateinit var type: Type fun setContext(context: Context): Builder { this.context = context return this } - fun setFragmentManager(fragmentManager: FragmentManager): Builder { - this.fragmentManager = fragmentManager - return this - } - fun setTitle(title: String): Builder { this.title = title return this @@ -62,6 +60,16 @@ return this } + fun setFragmentManager(fragmentManager: FragmentManager): Builder { + this.fragmentManager = fragmentManager + return this + } + + fun setCalendarType(calendarType: Type): Builder { + this.type = calendarType + return this + } + fun build(): DateSelectDialog { return DateSelectDialog(this) } @@ -69,7 +77,7 @@ override fun onCreate(savedInstanceState: Bundle?) { super.onCreate(savedInstanceState) - this.initDialogLayoutParams(Gravity.CENTER, R.style.UserDefinedAnimation, 0.8f) + this.initDialogLayoutParams(Gravity.CENTER, R.style.UserDefinedAnimation, 0.85f) setContentView(R.layout.dialog_select_date) setCancelable(false) setCanceledOnTouchOutside(false) @@ -86,10 +94,15 @@ .setCyclic(false) .setMinMillseconds(System.currentTimeMillis() - Constant.FIVE_YEARS) .setMaxMillseconds(System.currentTimeMillis()) - .setType(Type.YEAR_MONTH_DAY) + .setType(type) .setCallBack { _: TimePickerDialog?, millSeconds: Long -> - startDateView.setText(millSeconds.timestampToDate()) - }.build().show(fragmentManager, "YEAR_MONTH_DAY") + val textValue = if (type == Type.ALL) { + millSeconds.timestampToTime() + } else { + millSeconds.timestampToDate() + } + startDateView.setText(textValue) + }.build().show(fragmentManager, "DateSelectDialog") } endDateView.setOnClickListener { @@ -100,10 +113,15 @@ .setCyclic(false) .setMinMillseconds(System.currentTimeMillis() - Constant.FIVE_YEARS) .setMaxMillseconds(System.currentTimeMillis()) - .setType(Type.YEAR_MONTH_DAY) + .setType(type) .setCallBack { _: TimePickerDialog?, millSeconds: Long -> - endDateView.setText(millSeconds.timestampToDate()) - }.build().show(fragmentManager, "YEAR_MONTH_DAY") + val textValue = if (type == Type.ALL) { + millSeconds.timestampToTime() + } else { + millSeconds.timestampToDate() + } + endDateView.setText(textValue) + }.build().show(fragmentManager, "DateSelectDialog") } dialogCancelButton.text = negativeBtn diff --git a/app/src/main/res/drawable/ic_calendar.xml b/app/src/main/res/drawable/ic_calendar.xml new file mode 100644 index 0000000..a314f72 --- /dev/null +++ b/app/src/main/res/drawable/ic_calendar.xml @@ -0,0 +1,12 @@ + + + + diff --git a/app/src/main/res/layout/activity_data_search.xml b/app/src/main/res/layout/activity_data_search.xml new file mode 100644 index 0000000..77d9ef6 --- /dev/null +++ b/app/src/main/res/layout/activity_data_search.xml @@ -0,0 +1,6 @@ + + + + \ No newline at end of file diff --git a/app/src/main/res/layout/activity_device_data_detail.xml b/app/src/main/res/layout/activity_device_data_detail.xml new file mode 100644 index 0000000..700b1de --- /dev/null +++ b/app/src/main/res/layout/activity_device_data_detail.xml @@ -0,0 +1,78 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml index 82386c9..3832c68 100644 --- a/app/src/main/AndroidManifest.xml +++ b/app/src/main/AndroidManifest.xml @@ -48,7 +48,7 @@ - + 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 216e7cc..f53e831 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,6 +15,14 @@ return dateFormat.format(calendar.time) } +fun Long.timestampToLastWeekTime(): String { + val dateFormat = SimpleDateFormat("yyyy-MM-dd HH:mm:ss", Locale.CHINA) + val calendar = Calendar.getInstance() + calendar.time = Date(this) + calendar.set(Calendar.DAY_OF_YEAR, calendar.get(Calendar.DAY_OF_YEAR) - 6) + return dateFormat.format(calendar.time) +} + fun Long.timestampToLastMonthDate(): String { val dateFormat = SimpleDateFormat("yyyy-MM-dd", Locale.CHINA) val calendar = Calendar.getInstance() diff --git a/app/src/main/java/com/casic/qd/smartwell/model/DayDataModel.kt b/app/src/main/java/com/casic/qd/smartwell/model/DayDataModel.kt new file mode 100644 index 0000000..18d1399 --- /dev/null +++ b/app/src/main/java/com/casic/qd/smartwell/model/DayDataModel.kt @@ -0,0 +1,13 @@ +package com.casic.qd.smartwell.model + +class DayDataModel { + var code = 0 + var data: List? = null + var message: String? = null + var isSuccess = false + + class DataBean { + var time: String? = null + var value: String? = null + } +} \ No newline at end of file diff --git a/app/src/main/java/com/casic/qd/smartwell/model/TotalDataModel.kt b/app/src/main/java/com/casic/qd/smartwell/model/TotalDataModel.kt new file mode 100644 index 0000000..30bf829 --- /dev/null +++ b/app/src/main/java/com/casic/qd/smartwell/model/TotalDataModel.kt @@ -0,0 +1,14 @@ +package com.casic.qd.smartwell.model + +class TotalDataModel { + var code = 0 + var data: List? = null + var message: String? = null + var isSuccess = false + + class DataBean { + var total: String? = null + var deviceState: String? = null + var uptime: String? = null + } +} \ No newline at end of file diff --git a/app/src/main/java/com/casic/qd/smartwell/utils/retrofit/RetrofitService.kt b/app/src/main/java/com/casic/qd/smartwell/utils/retrofit/RetrofitService.kt index c5bf469..0c80ee9 100644 --- a/app/src/main/java/com/casic/qd/smartwell/utils/retrofit/RetrofitService.kt +++ b/app/src/main/java/com/casic/qd/smartwell/utils/retrofit/RetrofitService.kt @@ -202,4 +202,26 @@ @Query("offset") offset: Int, @Query("limit") limit: Int ): String + + /** + * 获取设备日用水量 + * */ + @GET("/device/sevenDayData") + suspend fun obtainSevenDayData( + @Header("token") token: String, + @Query("devCode") devCode: String?, + @Query("beginTime") beginTime: String?, + @Query("endTime") endTime: String? + ): String + + /** + * 获取设备日用水量 + * */ + @GET("/device/totalData") + suspend fun obtainTotalDayData( + @Header("token") token: String, + @Query("devCode") devCode: String?, + @Query("beginTime") beginTime: String?, + @Query("endTime") endTime: String? + ): String } \ No newline at end of file diff --git a/app/src/main/java/com/casic/qd/smartwell/utils/retrofit/RetrofitServiceManager.kt b/app/src/main/java/com/casic/qd/smartwell/utils/retrofit/RetrofitServiceManager.kt index 6f728e0..a8b320f 100644 --- a/app/src/main/java/com/casic/qd/smartwell/utils/retrofit/RetrofitServiceManager.kt +++ b/app/src/main/java/com/casic/qd/smartwell/utils/retrofit/RetrofitServiceManager.kt @@ -204,4 +204,18 @@ Constant.PAGE_LIMIT ) } + + /** + * 获取设备日用水量 + */ + suspend fun obtainSevenDayData(devCode: String?, beginTime: String?, endTime: String?): String { + return api.obtainSevenDayData(AuthenticationHelper.token!!, devCode, beginTime, endTime) + } + + /** + * 获取设备累计用水量 + */ + suspend fun obtainTotalDayData(devCode: String?, beginTime: String?, endTime: String?): String { + return api.obtainTotalDayData(AuthenticationHelper.token!!, devCode, beginTime, endTime) + } } \ No newline at end of file diff --git a/app/src/main/java/com/casic/qd/smartwell/view/DeviceDataDetailActivity.kt b/app/src/main/java/com/casic/qd/smartwell/view/DeviceDataDetailActivity.kt index 7029d17..a8a2695 100644 --- a/app/src/main/java/com/casic/qd/smartwell/view/DeviceDataDetailActivity.kt +++ b/app/src/main/java/com/casic/qd/smartwell/view/DeviceDataDetailActivity.kt @@ -1,22 +1,109 @@ package com.casic.qd.smartwell.view +import androidx.lifecycle.ViewModelProvider import com.casic.qd.smartwell.R import com.casic.qd.smartwell.base.BaseActivity -import kotlinx.android.synthetic.main.include_base_title.* +import com.casic.qd.smartwell.extensions.convertColor +import com.casic.qd.smartwell.extensions.timestampToLastWeekTime +import com.casic.qd.smartwell.extensions.timestampToTime +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.DeviceViewModel +import com.casic.qd.smartwell.widgets.DateSelectDialog +import com.github.mikephil.charting.data.Entry +import com.jzxiang.pickerview.data.Type +import kotlinx.android.synthetic.main.activity_device_data_detail.* +import kotlinx.android.synthetic.main.activity_main.rightOptionView +import kotlinx.android.synthetic.main.activity_main.titleView class DeviceDataDetailActivity : BaseActivity() { - override fun initLayoutView(): Int = R.layout.activity_device_detail + private val kTag = "DeviceDataDetailActivity" + private lateinit var deviceCode: String + private lateinit var deviceViewModel: DeviceViewModel + + override fun initLayoutView(): Int = R.layout.activity_device_data_detail override fun setupTopBarLayout() { - titleView.text = "历史数据" + deviceCode = intent.getStringExtra(Constant.INTENT_PARAM)!! + titleView.text = String.format("${deviceCode}历史数据") } override fun initData() { - + deviceViewModel = ViewModelProvider(this).get(DeviceViewModel::class.java) } override fun initEvent() { + rightOptionView.setOnClickListener { + DateSelectDialog.Builder() + .setContext(this) + .setTitle("选择日期") + .setNegativeButton("取消") + .setPositiveButton("选好了") + .setOnDialogButtonClickListener(object : + DateSelectDialog.OnDialogButtonClickListener { + override fun onConfirmClick(startDate: String, endDate: String) { + deviceViewModel.obtainSevenDayData(deviceCode, startDate, endDate) + deviceViewModel.obtainTotalDayData(deviceCode, startDate, endDate) + } + override fun onCancelClick() { + //选择取消就默认加载近7天的数据 + val time = System.currentTimeMillis() + val startTime = time.timestampToLastWeekTime() + val endTime = time.timestampToTime() + deviceViewModel.obtainSevenDayData(deviceCode, startTime, endTime) + deviceViewModel.obtainTotalDayData(deviceCode, startTime, endTime) + } + }) + .setFragmentManager(supportFragmentManager) + .setCalendarType(Type.ALL) + .build().show() + } + + //默认加载近一周的数据 + val time = System.currentTimeMillis() + val startTime = time.timestampToLastWeekTime() + val endTime = time.timestampToTime() + deviceViewModel.obtainSevenDayData(deviceCode, startTime, endTime) + deviceViewModel.dayDataModel.observe(this, { + if (it.code == 200) { + val entryModels: MutableList = ArrayList() + val xAxisDate: MutableList = ArrayList() + val entries: ArrayList = ArrayList() + val entryModel = LineChartEntryModel() + + entryModel.lineColor = Constant.COLORS[7].convertColor() + it.data?.forEachIndexed { index, dataBean -> + val split = dataBean.time.toString().split("-") + xAxisDate.add("${split[1]}/${split[2]}") + + entries.add(Entry(index.toFloat(), dataBean.value!!.toFloat(), "日用水量")) + } + entryModel.entryList = entries + entryModels.add(entryModel) + ChartViewHelper.setLineChartData(dayWaterLineChart, xAxisDate, entryModels) + } + }) + + deviceViewModel.obtainTotalDayData(deviceCode, startTime, endTime) + deviceViewModel.totalDataModel.observe(this, { + val entryModels: MutableList = ArrayList() + val xAxisDate: MutableList = ArrayList() + val entries: ArrayList = ArrayList() + val entryModel = LineChartEntryModel() + + entryModel.lineColor = Constant.COLORS[7].convertColor() + it.data?.forEachIndexed { index, dataBean -> + val split = dataBean.uptime.toString().split(" ")[0].split("-") + xAxisDate.add("${split[1]}/${split[2]}") + + entries.add(Entry(index.toFloat(), dataBean.total!!.toFloat(), "总用水量")) + } + entryModel.entryList = entries + entryModels.add(entryModel) + ChartViewHelper.setLineChartData(totalWaterLineChart, xAxisDate, entryModels) + }) } } \ No newline at end of file diff --git a/app/src/main/java/com/casic/qd/smartwell/view/MainActivity.kt b/app/src/main/java/com/casic/qd/smartwell/view/MainActivity.kt index 02435a3..3f4bb3c 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 @@ -1,7 +1,6 @@ package com.casic.qd.smartwell.view import android.content.Context -import android.content.Intent import android.os.Handler import android.os.Looper import android.os.Message @@ -22,6 +21,7 @@ import com.casic.qd.smartwell.vm.WaterStatisticsViewModel import com.github.mikephil.charting.data.Entry import com.pengxh.app.multilib.widget.dialog.AlertControlDialog +import com.pengxh.app.multilib.widget.dialog.BottomActionSheet import com.youth.banner.Banner import com.youth.banner.adapter.BannerImageAdapter import com.youth.banner.holder.BannerImageHolder @@ -100,9 +100,20 @@ HomeRecycleAdapter.OnGridItemClickListener { override fun onClick(position: Int) { when (position) { - 0 -> startActivity(Intent(context, MapActivity::class.java)) - 1 -> startActivity(Intent(context, SearchRecordActivity::class.java)) - 2 -> startActivity(Intent(context, StatisticsActivity::class.java)) + 0 -> context.navigatePageTo(MapActivity::class.java) + 1 -> { + BottomActionSheet.Builder() + .setContext(context) + .setActionItemTitles(arrayOf("设备", "数据")) + .setOnActionSheetListener { index -> + when (index) { + 0 -> context.navigatePageTo(SearchDeviceActivity::class.java) + 1 -> context.navigatePageTo(SearchDataActivity::class.java) + } + }.build().show() + + } + 2 -> context.navigatePageTo(StatisticsActivity::class.java) } } }) diff --git a/app/src/main/java/com/casic/qd/smartwell/view/SearchAlarmActivity.kt b/app/src/main/java/com/casic/qd/smartwell/view/SearchAlarmActivity.kt index 8f54163..5285a9f 100644 --- a/app/src/main/java/com/casic/qd/smartwell/view/SearchAlarmActivity.kt +++ b/app/src/main/java/com/casic/qd/smartwell/view/SearchAlarmActivity.kt @@ -13,11 +13,6 @@ import com.jzxiang.pickerview.data.Type import com.qmuiteam.qmui.widget.dialog.QMUIBottomSheet.BottomListSheetBuilder import kotlinx.android.synthetic.main.activity_alarm_search.* -import kotlinx.android.synthetic.main.activity_alarm_search.areaView -import kotlinx.android.synthetic.main.activity_alarm_search.clearButton -import kotlinx.android.synthetic.main.activity_alarm_search.searchButton -import kotlinx.android.synthetic.main.activity_alarm_search.wellCodeView -import kotlinx.android.synthetic.main.activity_search_record.* import kotlinx.android.synthetic.main.include_base_title.* class SearchAlarmActivity : BaseActivity() { diff --git a/app/src/main/java/com/casic/qd/smartwell/view/SearchDataActivity.kt b/app/src/main/java/com/casic/qd/smartwell/view/SearchDataActivity.kt new file mode 100644 index 0000000..e6a38e4 --- /dev/null +++ b/app/src/main/java/com/casic/qd/smartwell/view/SearchDataActivity.kt @@ -0,0 +1,168 @@ +package com.casic.qd.smartwell.view + +import com.casic.qd.smartwell.R +import com.casic.qd.smartwell.base.BaseActivity +import kotlinx.android.synthetic.main.include_base_title.* + +/** + * @author a203 + * @description 记录查询界面 + * @date 2022/2/17 14:33 + * @email 290677893@qq.com + */ +class SearchDataActivity : BaseActivity() { + +// private lateinit var deviceViewModel: DeviceViewModel +// private lateinit var authenticateViewModel: AuthenticateViewModel +// private lateinit var areaViewModel: AreaViewModel +// private var authenticatedType: MutableList = ArrayList() +// private var deviceTypeValue = "" +// private var deptId = "" +// private var deviceState = "" +// private var areaId = "" + + override fun initLayoutView(): Int = R.layout.activity_data_search + + override fun setupTopBarLayout() { + titleView.text = "数据查询" + } + + override fun initData() { +// val userDeviceJson = SaveKeyValues.getValue(Constant.USER_DEVICE_TYPE, "") as String +// if (userDeviceJson.isNotBlank()) { +// authenticatedType = Gson().fromJson( +// userDeviceJson, object : TypeToken>() {}.type +// ) +// } +// deviceViewModel = ViewModelProvider(this).get(DeviceViewModel::class.java) +// authenticateViewModel = ViewModelProvider(this).get(AuthenticateViewModel::class.java) +// areaViewModel = ViewModelProvider(this).get(AreaViewModel::class.java) + } + + override fun initEvent() { +// deviceTypeView.setOnClickListener { +// /** +// * 获取全部设备类型 +// * */ +// deviceViewModel.obtainDeviceType() +// } +// deviceViewModel.typeModel.observe(this, { +// if (it.code == 200) { +// val authenticatedModel: MutableList = ArrayList() +// it.data?.forEach { deviceModel -> +// if (deviceModel.value in authenticatedType) { +// authenticatedModel.add(deviceModel) +// } +// } +// val sheetBuilder = QMUIBottomSheet.BottomListSheetBuilder(this) +// sheetBuilder.setTitle("设备类型") +// authenticatedModel.forEach { deviceModel -> +// sheetBuilder.addItem(deviceModel.name) +// } +// sheetBuilder.setGravityCenter(true) +// .setOnSheetItemClickListener { dialog, _, position, tag -> +// deviceTypeView.text = tag +// this.deviceTypeValue = authenticatedModel[position].value.toString() +// +// dialog.dismiss() +// }.build().show() +// } +// }) +// +// ownerShipView.setOnClickListener { +// authenticateViewModel.obtainOwnerShip("03") +// } +// authenticateViewModel.resultModel.observe(this, { +// if (it.code == 200) { +// val ownerShipModel: MutableList = ArrayList() +// it.data?.list?.forEach { listBean -> +// ownerShipModel.add(listBean) +// } +// val sheetBuilder = QMUIBottomSheet.BottomListSheetBuilder(this) +// sheetBuilder.setTitle("权属单位") +// ownerShipModel.forEach { model -> +// sheetBuilder.addItem(model.name) +// } +// sheetBuilder.setGravityCenter(true) +// .setOnSheetItemClickListener { dialog, _, position, tag -> +// ownerShipView.text = tag +// this.deptId = ownerShipModel[position].id.toString() +// +// dialog.dismiss() +// }.build().show() +// } +// }) +// +// deviceStateView.setOnClickListener { +// QMUIBottomSheet.BottomListSheetBuilder(this) +// .setTitle("在线情况") +// .addItem("在线") +// .addItem("离线") +// .setGravityCenter(true) +// .setOnSheetItemClickListener { dialog, _, _, tag -> +// deviceStateView.text = tag +// this.deviceState = if (tag == "在线") { +// "1" +// } else { +// "0" +// } +// +// dialog.dismiss() +// }.build().show() +// } +// +// areaView.setOnClickListener { +// areaViewModel.obtainArea() +// } +// areaViewModel.areaModel.observe(this, { +// if (it.code == 200) { +// val firstLevelArea: MutableList = ArrayList() +// val secondLevelArea: MutableList = ArrayList() +// val thirdLevelArea: MutableList = ArrayList() +// it.data?.forEach { dataBean -> +// when (dataBean.level) { +// 2 -> firstLevelArea.add(dataBean) +// 3 -> secondLevelArea.add(dataBean) +// 4 -> thirdLevelArea.add(dataBean) +// } +// } +// +// // 绑定区域 +// BottomAreaSheet.Builder() +// .setContext(this) +// .setFirstAreaData(firstLevelArea) +// .setSecondAreaData(secondLevelArea) +// .setThirdAreaData(thirdLevelArea) +// .setOnActionSheetListener(object : BottomAreaSheet.OnActionSheetListener { +// override fun onAreaSelected(area: String?, id: String?) { +// areaView.text = area +// areaId = id.toString() +// } +// }).build().show() +// } +// }) +// +// searchButton.setChangeAlphaWhenPress(true) +// searchButton.setOnClickListener { +// //页面跳转,将查询参数传过去 +// navigatePageTo( +// DeviceSearchResultActivity::class.java, addAll( +// wellCodeView.text.toString().trim(), +// deviceTypeValue, +// deptId, +// deviceState, +// areaId +// ) +// ) +// } +// +// clearButton.setChangeAlphaWhenPress(true) +// clearButton.setOnClickListener { +// wellCodeView.setText("") +// deviceTypeView.text = "" +// ownerShipView.text = "" +// deviceStateView.text = "" +// areaView.text = "" +// } + } +} \ No newline at end of file diff --git a/app/src/main/java/com/casic/qd/smartwell/view/SearchDeviceActivity.kt b/app/src/main/java/com/casic/qd/smartwell/view/SearchDeviceActivity.kt new file mode 100644 index 0000000..cf0c05f --- /dev/null +++ b/app/src/main/java/com/casic/qd/smartwell/view/SearchDeviceActivity.kt @@ -0,0 +1,184 @@ +package com.casic.qd.smartwell.view + +import androidx.lifecycle.ViewModelProvider +import com.casic.qd.smartwell.R +import com.casic.qd.smartwell.base.BaseActivity +import com.casic.qd.smartwell.extensions.addAll +import com.casic.qd.smartwell.extensions.navigatePageTo +import com.casic.qd.smartwell.model.AreaModel +import com.casic.qd.smartwell.model.DeviceTypeModel +import com.casic.qd.smartwell.model.OwnerShipModel +import com.casic.qd.smartwell.utils.Constant +import com.casic.qd.smartwell.utils.SaveKeyValues +import com.casic.qd.smartwell.vm.AreaViewModel +import com.casic.qd.smartwell.vm.AuthenticateViewModel +import com.casic.qd.smartwell.vm.DeviceViewModel +import com.casic.qd.smartwell.widgets.BottomAreaSheet +import com.google.gson.Gson +import com.google.gson.reflect.TypeToken +import com.qmuiteam.qmui.widget.dialog.QMUIBottomSheet +import kotlinx.android.synthetic.main.activity_device_search.* +import kotlinx.android.synthetic.main.include_base_title.* + +/** + * @author a203 + * @description 记录查询界面 + * @date 2022/2/17 14:33 + * @email 290677893@qq.com + */ +class SearchDeviceActivity : BaseActivity() { + + private lateinit var deviceViewModel: DeviceViewModel + private lateinit var authenticateViewModel: AuthenticateViewModel + private lateinit var areaViewModel: AreaViewModel + private var authenticatedType: MutableList = ArrayList() + private var deviceTypeValue = "" + private var deptId = "" + private var deviceState = "" + private var areaId = "" + + override fun initLayoutView(): Int = R.layout.activity_device_search + + override fun setupTopBarLayout() { + titleView.text = "设备查询" + } + + override fun initData() { + val userDeviceJson = SaveKeyValues.getValue(Constant.USER_DEVICE_TYPE, "") as String + if (userDeviceJson.isNotBlank()) { + authenticatedType = Gson().fromJson( + userDeviceJson, object : TypeToken>() {}.type + ) + } + deviceViewModel = ViewModelProvider(this).get(DeviceViewModel::class.java) + authenticateViewModel = ViewModelProvider(this).get(AuthenticateViewModel::class.java) + areaViewModel = ViewModelProvider(this).get(AreaViewModel::class.java) + } + + override fun initEvent() { + deviceTypeView.setOnClickListener { + /** + * 获取全部设备类型 + * */ + deviceViewModel.obtainDeviceType() + } + deviceViewModel.typeModel.observe(this, { + if (it.code == 200) { + val authenticatedModel: MutableList = ArrayList() + it.data?.forEach { deviceModel -> + if (deviceModel.value in authenticatedType) { + authenticatedModel.add(deviceModel) + } + } + val sheetBuilder = QMUIBottomSheet.BottomListSheetBuilder(this) + sheetBuilder.setTitle("设备类型") + authenticatedModel.forEach { deviceModel -> + sheetBuilder.addItem(deviceModel.name) + } + sheetBuilder.setGravityCenter(true) + .setOnSheetItemClickListener { dialog, _, position, tag -> + deviceTypeView.text = tag + this.deviceTypeValue = authenticatedModel[position].value.toString() + + dialog.dismiss() + }.build().show() + } + }) + + ownerShipView.setOnClickListener { + authenticateViewModel.obtainOwnerShip("03") + } + authenticateViewModel.resultModel.observe(this, { + if (it.code == 200) { + val ownerShipModel: MutableList = ArrayList() + it.data?.list?.forEach { listBean -> + ownerShipModel.add(listBean) + } + val sheetBuilder = QMUIBottomSheet.BottomListSheetBuilder(this) + sheetBuilder.setTitle("权属单位") + ownerShipModel.forEach { model -> + sheetBuilder.addItem(model.name) + } + sheetBuilder.setGravityCenter(true) + .setOnSheetItemClickListener { dialog, _, position, tag -> + ownerShipView.text = tag + this.deptId = ownerShipModel[position].id.toString() + + dialog.dismiss() + }.build().show() + } + }) + + deviceStateView.setOnClickListener { + QMUIBottomSheet.BottomListSheetBuilder(this) + .setTitle("在线情况") + .addItem("在线") + .addItem("离线") + .setGravityCenter(true) + .setOnSheetItemClickListener { dialog, _, _, tag -> + deviceStateView.text = tag + this.deviceState = if (tag == "在线") { + "1" + } else { + "0" + } + + dialog.dismiss() + }.build().show() + } + + areaView.setOnClickListener { + areaViewModel.obtainArea() + } + areaViewModel.areaModel.observe(this, { + if (it.code == 200) { + val firstLevelArea: MutableList = ArrayList() + val secondLevelArea: MutableList = ArrayList() + val thirdLevelArea: MutableList = ArrayList() + it.data?.forEach { dataBean -> + when (dataBean.level) { + 2 -> firstLevelArea.add(dataBean) + 3 -> secondLevelArea.add(dataBean) + 4 -> thirdLevelArea.add(dataBean) + } + } + + // 绑定区域 + BottomAreaSheet.Builder() + .setContext(this) + .setFirstAreaData(firstLevelArea) + .setSecondAreaData(secondLevelArea) + .setThirdAreaData(thirdLevelArea) + .setOnActionSheetListener(object : BottomAreaSheet.OnActionSheetListener { + override fun onAreaSelected(area: String?, id: String?) { + areaView.text = area + areaId = id.toString() + } + }).build().show() + } + }) + + searchButton.setChangeAlphaWhenPress(true) + searchButton.setOnClickListener { + //页面跳转,将查询参数传过去 + navigatePageTo( + DeviceSearchResultActivity::class.java, addAll( + wellCodeView.text.toString().trim(), + deviceTypeValue, + deptId, + deviceState, + areaId + ) + ) + } + + clearButton.setChangeAlphaWhenPress(true) + clearButton.setOnClickListener { + wellCodeView.setText("") + deviceTypeView.text = "" + ownerShipView.text = "" + deviceStateView.text = "" + areaView.text = "" + } + } +} \ No newline at end of file diff --git a/app/src/main/java/com/casic/qd/smartwell/view/SearchRecordActivity.kt b/app/src/main/java/com/casic/qd/smartwell/view/SearchRecordActivity.kt deleted file mode 100644 index 8cab864..0000000 --- a/app/src/main/java/com/casic/qd/smartwell/view/SearchRecordActivity.kt +++ /dev/null @@ -1,184 +0,0 @@ -package com.casic.qd.smartwell.view - -import androidx.lifecycle.ViewModelProvider -import com.casic.qd.smartwell.R -import com.casic.qd.smartwell.base.BaseActivity -import com.casic.qd.smartwell.extensions.addAll -import com.casic.qd.smartwell.extensions.navigatePageTo -import com.casic.qd.smartwell.model.AreaModel -import com.casic.qd.smartwell.model.DeviceTypeModel -import com.casic.qd.smartwell.model.OwnerShipModel -import com.casic.qd.smartwell.utils.Constant -import com.casic.qd.smartwell.utils.SaveKeyValues -import com.casic.qd.smartwell.vm.AreaViewModel -import com.casic.qd.smartwell.vm.AuthenticateViewModel -import com.casic.qd.smartwell.vm.DeviceViewModel -import com.casic.qd.smartwell.widgets.BottomAreaSheet -import com.google.gson.Gson -import com.google.gson.reflect.TypeToken -import com.qmuiteam.qmui.widget.dialog.QMUIBottomSheet -import kotlinx.android.synthetic.main.activity_search_record.* -import kotlinx.android.synthetic.main.include_base_title.* - -/** - * @author a203 - * @description 记录查询界面 - * @date 2022/2/17 14:33 - * @email 290677893@qq.com - */ -class SearchRecordActivity : BaseActivity() { - - private lateinit var deviceViewModel: DeviceViewModel - private lateinit var authenticateViewModel: AuthenticateViewModel - private lateinit var areaViewModel: AreaViewModel - private var authenticatedType: MutableList = ArrayList() - private var deviceTypeValue = "" - private var deptId = "" - private var deviceState = "" - private var areaId = "" - - override fun initLayoutView(): Int = R.layout.activity_search_record - - override fun setupTopBarLayout() { - titleView.text = "记录查询" - } - - override fun initData() { - val userDeviceJson = SaveKeyValues.getValue(Constant.USER_DEVICE_TYPE, "") as String - if (userDeviceJson.isNotBlank()) { - authenticatedType = Gson().fromJson( - userDeviceJson, object : TypeToken>() {}.type - ) - } - deviceViewModel = ViewModelProvider(this).get(DeviceViewModel::class.java) - authenticateViewModel = ViewModelProvider(this).get(AuthenticateViewModel::class.java) - areaViewModel = ViewModelProvider(this).get(AreaViewModel::class.java) - } - - override fun initEvent() { - deviceTypeView.setOnClickListener { - /** - * 获取全部设备类型 - * */ - deviceViewModel.obtainDeviceType() - } - deviceViewModel.typeModel.observe(this, { - if (it.code == 200) { - val authenticatedModel: MutableList = ArrayList() - it.data?.forEach { deviceModel -> - if (deviceModel.value in authenticatedType) { - authenticatedModel.add(deviceModel) - } - } - val sheetBuilder = QMUIBottomSheet.BottomListSheetBuilder(this) - sheetBuilder.setTitle("设备类型") - authenticatedModel.forEach { deviceModel -> - sheetBuilder.addItem(deviceModel.name) - } - sheetBuilder.setGravityCenter(true) - .setOnSheetItemClickListener { dialog, _, position, tag -> - deviceTypeView.text = tag - this.deviceTypeValue = authenticatedModel[position].value.toString() - - dialog.dismiss() - }.build().show() - } - }) - - ownerShipView.setOnClickListener { - authenticateViewModel.obtainOwnerShip("03") - } - authenticateViewModel.resultModel.observe(this, { - if (it.code == 200) { - val ownerShipModel: MutableList = ArrayList() - it.data?.list?.forEach { listBean -> - ownerShipModel.add(listBean) - } - val sheetBuilder = QMUIBottomSheet.BottomListSheetBuilder(this) - sheetBuilder.setTitle("权属单位") - ownerShipModel.forEach { model -> - sheetBuilder.addItem(model.name) - } - sheetBuilder.setGravityCenter(true) - .setOnSheetItemClickListener { dialog, _, position, tag -> - ownerShipView.text = tag - this.deptId = ownerShipModel[position].id.toString() - - dialog.dismiss() - }.build().show() - } - }) - - deviceStateView.setOnClickListener { - QMUIBottomSheet.BottomListSheetBuilder(this) - .setTitle("在线情况") - .addItem("在线") - .addItem("离线") - .setGravityCenter(true) - .setOnSheetItemClickListener { dialog, _, _, tag -> - deviceStateView.text = tag - this.deviceState = if (tag == "在线") { - "1" - } else { - "0" - } - - dialog.dismiss() - }.build().show() - } - - areaView.setOnClickListener { - areaViewModel.obtainArea() - } - areaViewModel.areaModel.observe(this, { - if (it.code == 200) { - val firstLevelArea: MutableList = ArrayList() - val secondLevelArea: MutableList = ArrayList() - val thirdLevelArea: MutableList = ArrayList() - it.data?.forEach { dataBean -> - when (dataBean.level) { - 2 -> firstLevelArea.add(dataBean) - 3 -> secondLevelArea.add(dataBean) - 4 -> thirdLevelArea.add(dataBean) - } - } - - // 绑定区域 - BottomAreaSheet.Builder() - .setContext(this) - .setFirstAreaData(firstLevelArea) - .setSecondAreaData(secondLevelArea) - .setThirdAreaData(thirdLevelArea) - .setOnActionSheetListener(object : BottomAreaSheet.OnActionSheetListener { - override fun onAreaSelected(area: String?, id: String?) { - areaView.text = area - areaId = id.toString() - } - }).build().show() - } - }) - - searchButton.setChangeAlphaWhenPress(true) - searchButton.setOnClickListener { - //页面跳转,将查询参数传过去 - navigatePageTo( - DeviceSearchResultActivity::class.java, addAll( - wellCodeView.text.toString().trim(), - deviceTypeValue, - deptId, - deviceState, - areaId - ) - ) - } - - clearButton.setChangeAlphaWhenPress(true) - clearButton.setOnClickListener { - wellCodeView.setText("") - deviceTypeView.text = "" - ownerShipView.text = "" - deviceStateView.text = "" - areaView.text = "" - } - } -} \ No newline at end of file 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 21c4286..3272cfe 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 @@ -15,6 +15,7 @@ import com.casic.qd.smartwell.widgets.DateSelectDialog import com.github.mikephil.charting.data.BarEntry import com.github.mikephil.charting.data.PieEntry +import com.jzxiang.pickerview.data.Type import kotlinx.android.synthetic.main.activity_statistics.* import kotlinx.android.synthetic.main.include_base_title.* import java.util.* @@ -97,7 +98,6 @@ 5 -> { DateSelectDialog.Builder() .setContext(context) - .setFragmentManager(supportFragmentManager) .setTitle("选择日期") .setNegativeButton("取消") .setPositiveButton("选好了") @@ -113,7 +113,10 @@ //选择取消就默认加载近7天的数据 periodSpinner.setSelection(3) } - }).build().show() + }) + .setFragmentManager(supportFragmentManager) + .setCalendarType(Type.YEAR_MONTH_DAY) + .build().show() } } } @@ -200,7 +203,6 @@ 5 -> { DateSelectDialog.Builder() .setContext(context) - .setFragmentManager(supportFragmentManager) .setTitle("选择日期") .setNegativeButton("取消") .setPositiveButton("选好了") @@ -216,7 +218,10 @@ //选择取消就默认加载近7天的数据 periodSpinner.setSelection(3) } - }).build().show() + }) + .setFragmentManager(supportFragmentManager) + .setCalendarType(Type.YEAR_MONTH_DAY) + .build().show() } } } diff --git a/app/src/main/java/com/casic/qd/smartwell/view/WaterExpandedActivity.kt b/app/src/main/java/com/casic/qd/smartwell/view/WaterExpandedActivity.kt index 251140d..7a63dea 100644 --- a/app/src/main/java/com/casic/qd/smartwell/view/WaterExpandedActivity.kt +++ b/app/src/main/java/com/casic/qd/smartwell/view/WaterExpandedActivity.kt @@ -13,6 +13,7 @@ import com.casic.qd.smartwell.vm.WaterStatisticsViewModel import com.casic.qd.smartwell.widgets.DateSelectDialog import com.github.mikephil.charting.data.Entry +import com.jzxiang.pickerview.data.Type import kotlinx.android.synthetic.main.activity_water_expanded.* import java.util.* import kotlin.collections.ArrayList @@ -86,7 +87,6 @@ 5 -> { DateSelectDialog.Builder() .setContext(context) - .setFragmentManager(supportFragmentManager) .setTitle("选择日期") .setNegativeButton("取消") .setPositiveButton("选好了") @@ -102,7 +102,10 @@ //选择取消就默认加载近7天的数据 periodSpinner.setSelection(3) } - }).build().show() + }) + .setFragmentManager(supportFragmentManager) + .setCalendarType(Type.YEAR_MONTH_DAY) + .build().show() } } } diff --git a/app/src/main/java/com/casic/qd/smartwell/vm/DeviceViewModel.kt b/app/src/main/java/com/casic/qd/smartwell/vm/DeviceViewModel.kt index 02aefed..9448ade 100644 --- a/app/src/main/java/com/casic/qd/smartwell/vm/DeviceViewModel.kt +++ b/app/src/main/java/com/casic/qd/smartwell/vm/DeviceViewModel.kt @@ -7,8 +7,10 @@ import com.casic.qd.smartwell.extensions.separateResponseCode import com.casic.qd.smartwell.extensions.show import com.casic.qd.smartwell.extensions.toErrorMessage +import com.casic.qd.smartwell.model.DayDataModel import com.casic.qd.smartwell.model.DeviceStatisticsModel import com.casic.qd.smartwell.model.DeviceTypeModel +import com.casic.qd.smartwell.model.TotalDataModel import com.casic.qd.smartwell.utils.retrofit.RetrofitServiceManager import com.google.gson.Gson import com.google.gson.reflect.TypeToken @@ -19,6 +21,8 @@ private val gson = Gson() val resultModel = MutableLiveData() val typeModel = MutableLiveData() + val dayDataModel = MutableLiveData() + val totalDataModel = MutableLiveData() /** * 管网资产统计 @@ -55,4 +59,40 @@ Log.e(kTag, it.toString(), it) "服务器异常".show() }) + + /** + * 获取设备日用水量 + */ + fun obtainSevenDayData(devCode: String?, beginTime: String?, endTime: String?) = launch({ + val response = RetrofitServiceManager.obtainSevenDayData(devCode, beginTime, endTime) + val responseCode = response.separateResponseCode() + if (responseCode == 200) { + dayDataModel.value = gson.fromJson( + response, object : TypeToken() {}.type + ) + } else { + response.toErrorMessage().show() + } + }, { + Log.e(kTag, it.toString(), it) + "服务器异常".show() + }) + + /** + * 获取设备累计用水量 + */ + fun obtainTotalDayData(devCode: String?, beginTime: String?, endTime: String?) = launch({ + val response = RetrofitServiceManager.obtainTotalDayData(devCode, beginTime, endTime) + val responseCode = response.separateResponseCode() + if (responseCode == 200) { + totalDataModel.value = gson.fromJson( + response, object : TypeToken() {}.type + ) + } else { + 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/widgets/DateSelectDialog.kt b/app/src/main/java/com/casic/qd/smartwell/widgets/DateSelectDialog.kt index ec403eb..fda3a03 100644 --- a/app/src/main/java/com/casic/qd/smartwell/widgets/DateSelectDialog.kt +++ b/app/src/main/java/com/casic/qd/smartwell/widgets/DateSelectDialog.kt @@ -9,6 +9,7 @@ import com.casic.qd.smartwell.extensions.convertColor import com.casic.qd.smartwell.extensions.initDialogLayoutParams import com.casic.qd.smartwell.extensions.timestampToDate +import com.casic.qd.smartwell.extensions.timestampToTime import com.casic.qd.smartwell.utils.Constant import com.jzxiang.pickerview.TimePickerDialog import com.jzxiang.pickerview.data.Type @@ -18,30 +19,27 @@ builder.context, R.style.UserDefinedDialogStyle ) { - private val fragmentManager: FragmentManager = builder.fragmentManager private val title: String = builder.title private val negativeBtn: String = builder.negativeBtn private val positiveBtn: String = builder.positiveBtn private val listener: OnDialogButtonClickListener = builder.listener + private val fragmentManager: FragmentManager = builder.fragmentManager + private val type: Type = builder.type class Builder { lateinit var context: Context - lateinit var fragmentManager: FragmentManager lateinit var title: String lateinit var negativeBtn: String lateinit var positiveBtn: String lateinit var listener: OnDialogButtonClickListener + lateinit var fragmentManager: FragmentManager + lateinit var type: Type fun setContext(context: Context): Builder { this.context = context return this } - fun setFragmentManager(fragmentManager: FragmentManager): Builder { - this.fragmentManager = fragmentManager - return this - } - fun setTitle(title: String): Builder { this.title = title return this @@ -62,6 +60,16 @@ return this } + fun setFragmentManager(fragmentManager: FragmentManager): Builder { + this.fragmentManager = fragmentManager + return this + } + + fun setCalendarType(calendarType: Type): Builder { + this.type = calendarType + return this + } + fun build(): DateSelectDialog { return DateSelectDialog(this) } @@ -69,7 +77,7 @@ override fun onCreate(savedInstanceState: Bundle?) { super.onCreate(savedInstanceState) - this.initDialogLayoutParams(Gravity.CENTER, R.style.UserDefinedAnimation, 0.8f) + this.initDialogLayoutParams(Gravity.CENTER, R.style.UserDefinedAnimation, 0.85f) setContentView(R.layout.dialog_select_date) setCancelable(false) setCanceledOnTouchOutside(false) @@ -86,10 +94,15 @@ .setCyclic(false) .setMinMillseconds(System.currentTimeMillis() - Constant.FIVE_YEARS) .setMaxMillseconds(System.currentTimeMillis()) - .setType(Type.YEAR_MONTH_DAY) + .setType(type) .setCallBack { _: TimePickerDialog?, millSeconds: Long -> - startDateView.setText(millSeconds.timestampToDate()) - }.build().show(fragmentManager, "YEAR_MONTH_DAY") + val textValue = if (type == Type.ALL) { + millSeconds.timestampToTime() + } else { + millSeconds.timestampToDate() + } + startDateView.setText(textValue) + }.build().show(fragmentManager, "DateSelectDialog") } endDateView.setOnClickListener { @@ -100,10 +113,15 @@ .setCyclic(false) .setMinMillseconds(System.currentTimeMillis() - Constant.FIVE_YEARS) .setMaxMillseconds(System.currentTimeMillis()) - .setType(Type.YEAR_MONTH_DAY) + .setType(type) .setCallBack { _: TimePickerDialog?, millSeconds: Long -> - endDateView.setText(millSeconds.timestampToDate()) - }.build().show(fragmentManager, "YEAR_MONTH_DAY") + val textValue = if (type == Type.ALL) { + millSeconds.timestampToTime() + } else { + millSeconds.timestampToDate() + } + endDateView.setText(textValue) + }.build().show(fragmentManager, "DateSelectDialog") } dialogCancelButton.text = negativeBtn diff --git a/app/src/main/res/drawable/ic_calendar.xml b/app/src/main/res/drawable/ic_calendar.xml new file mode 100644 index 0000000..a314f72 --- /dev/null +++ b/app/src/main/res/drawable/ic_calendar.xml @@ -0,0 +1,12 @@ + + + + diff --git a/app/src/main/res/layout/activity_data_search.xml b/app/src/main/res/layout/activity_data_search.xml new file mode 100644 index 0000000..77d9ef6 --- /dev/null +++ b/app/src/main/res/layout/activity_data_search.xml @@ -0,0 +1,6 @@ + + + + \ No newline at end of file diff --git a/app/src/main/res/layout/activity_device_data_detail.xml b/app/src/main/res/layout/activity_device_data_detail.xml new file mode 100644 index 0000000..700b1de --- /dev/null +++ b/app/src/main/res/layout/activity_device_data_detail.xml @@ -0,0 +1,78 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/app/src/main/res/layout/activity_device_detail.xml b/app/src/main/res/layout/activity_device_detail.xml deleted file mode 100644 index 7ead47b..0000000 --- a/app/src/main/res/layout/activity_device_detail.xml +++ /dev/null @@ -1,32 +0,0 @@ - - - - - - - - - - - - - - - \ No newline at end of file diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml index 82386c9..3832c68 100644 --- a/app/src/main/AndroidManifest.xml +++ b/app/src/main/AndroidManifest.xml @@ -48,7 +48,7 @@ - + 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 216e7cc..f53e831 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,6 +15,14 @@ return dateFormat.format(calendar.time) } +fun Long.timestampToLastWeekTime(): String { + val dateFormat = SimpleDateFormat("yyyy-MM-dd HH:mm:ss", Locale.CHINA) + val calendar = Calendar.getInstance() + calendar.time = Date(this) + calendar.set(Calendar.DAY_OF_YEAR, calendar.get(Calendar.DAY_OF_YEAR) - 6) + return dateFormat.format(calendar.time) +} + fun Long.timestampToLastMonthDate(): String { val dateFormat = SimpleDateFormat("yyyy-MM-dd", Locale.CHINA) val calendar = Calendar.getInstance() diff --git a/app/src/main/java/com/casic/qd/smartwell/model/DayDataModel.kt b/app/src/main/java/com/casic/qd/smartwell/model/DayDataModel.kt new file mode 100644 index 0000000..18d1399 --- /dev/null +++ b/app/src/main/java/com/casic/qd/smartwell/model/DayDataModel.kt @@ -0,0 +1,13 @@ +package com.casic.qd.smartwell.model + +class DayDataModel { + var code = 0 + var data: List? = null + var message: String? = null + var isSuccess = false + + class DataBean { + var time: String? = null + var value: String? = null + } +} \ No newline at end of file diff --git a/app/src/main/java/com/casic/qd/smartwell/model/TotalDataModel.kt b/app/src/main/java/com/casic/qd/smartwell/model/TotalDataModel.kt new file mode 100644 index 0000000..30bf829 --- /dev/null +++ b/app/src/main/java/com/casic/qd/smartwell/model/TotalDataModel.kt @@ -0,0 +1,14 @@ +package com.casic.qd.smartwell.model + +class TotalDataModel { + var code = 0 + var data: List? = null + var message: String? = null + var isSuccess = false + + class DataBean { + var total: String? = null + var deviceState: String? = null + var uptime: String? = null + } +} \ No newline at end of file diff --git a/app/src/main/java/com/casic/qd/smartwell/utils/retrofit/RetrofitService.kt b/app/src/main/java/com/casic/qd/smartwell/utils/retrofit/RetrofitService.kt index c5bf469..0c80ee9 100644 --- a/app/src/main/java/com/casic/qd/smartwell/utils/retrofit/RetrofitService.kt +++ b/app/src/main/java/com/casic/qd/smartwell/utils/retrofit/RetrofitService.kt @@ -202,4 +202,26 @@ @Query("offset") offset: Int, @Query("limit") limit: Int ): String + + /** + * 获取设备日用水量 + * */ + @GET("/device/sevenDayData") + suspend fun obtainSevenDayData( + @Header("token") token: String, + @Query("devCode") devCode: String?, + @Query("beginTime") beginTime: String?, + @Query("endTime") endTime: String? + ): String + + /** + * 获取设备日用水量 + * */ + @GET("/device/totalData") + suspend fun obtainTotalDayData( + @Header("token") token: String, + @Query("devCode") devCode: String?, + @Query("beginTime") beginTime: String?, + @Query("endTime") endTime: String? + ): String } \ No newline at end of file diff --git a/app/src/main/java/com/casic/qd/smartwell/utils/retrofit/RetrofitServiceManager.kt b/app/src/main/java/com/casic/qd/smartwell/utils/retrofit/RetrofitServiceManager.kt index 6f728e0..a8b320f 100644 --- a/app/src/main/java/com/casic/qd/smartwell/utils/retrofit/RetrofitServiceManager.kt +++ b/app/src/main/java/com/casic/qd/smartwell/utils/retrofit/RetrofitServiceManager.kt @@ -204,4 +204,18 @@ Constant.PAGE_LIMIT ) } + + /** + * 获取设备日用水量 + */ + suspend fun obtainSevenDayData(devCode: String?, beginTime: String?, endTime: String?): String { + return api.obtainSevenDayData(AuthenticationHelper.token!!, devCode, beginTime, endTime) + } + + /** + * 获取设备累计用水量 + */ + suspend fun obtainTotalDayData(devCode: String?, beginTime: String?, endTime: String?): String { + return api.obtainTotalDayData(AuthenticationHelper.token!!, devCode, beginTime, endTime) + } } \ No newline at end of file diff --git a/app/src/main/java/com/casic/qd/smartwell/view/DeviceDataDetailActivity.kt b/app/src/main/java/com/casic/qd/smartwell/view/DeviceDataDetailActivity.kt index 7029d17..a8a2695 100644 --- a/app/src/main/java/com/casic/qd/smartwell/view/DeviceDataDetailActivity.kt +++ b/app/src/main/java/com/casic/qd/smartwell/view/DeviceDataDetailActivity.kt @@ -1,22 +1,109 @@ package com.casic.qd.smartwell.view +import androidx.lifecycle.ViewModelProvider import com.casic.qd.smartwell.R import com.casic.qd.smartwell.base.BaseActivity -import kotlinx.android.synthetic.main.include_base_title.* +import com.casic.qd.smartwell.extensions.convertColor +import com.casic.qd.smartwell.extensions.timestampToLastWeekTime +import com.casic.qd.smartwell.extensions.timestampToTime +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.DeviceViewModel +import com.casic.qd.smartwell.widgets.DateSelectDialog +import com.github.mikephil.charting.data.Entry +import com.jzxiang.pickerview.data.Type +import kotlinx.android.synthetic.main.activity_device_data_detail.* +import kotlinx.android.synthetic.main.activity_main.rightOptionView +import kotlinx.android.synthetic.main.activity_main.titleView class DeviceDataDetailActivity : BaseActivity() { - override fun initLayoutView(): Int = R.layout.activity_device_detail + private val kTag = "DeviceDataDetailActivity" + private lateinit var deviceCode: String + private lateinit var deviceViewModel: DeviceViewModel + + override fun initLayoutView(): Int = R.layout.activity_device_data_detail override fun setupTopBarLayout() { - titleView.text = "历史数据" + deviceCode = intent.getStringExtra(Constant.INTENT_PARAM)!! + titleView.text = String.format("${deviceCode}历史数据") } override fun initData() { - + deviceViewModel = ViewModelProvider(this).get(DeviceViewModel::class.java) } override fun initEvent() { + rightOptionView.setOnClickListener { + DateSelectDialog.Builder() + .setContext(this) + .setTitle("选择日期") + .setNegativeButton("取消") + .setPositiveButton("选好了") + .setOnDialogButtonClickListener(object : + DateSelectDialog.OnDialogButtonClickListener { + override fun onConfirmClick(startDate: String, endDate: String) { + deviceViewModel.obtainSevenDayData(deviceCode, startDate, endDate) + deviceViewModel.obtainTotalDayData(deviceCode, startDate, endDate) + } + override fun onCancelClick() { + //选择取消就默认加载近7天的数据 + val time = System.currentTimeMillis() + val startTime = time.timestampToLastWeekTime() + val endTime = time.timestampToTime() + deviceViewModel.obtainSevenDayData(deviceCode, startTime, endTime) + deviceViewModel.obtainTotalDayData(deviceCode, startTime, endTime) + } + }) + .setFragmentManager(supportFragmentManager) + .setCalendarType(Type.ALL) + .build().show() + } + + //默认加载近一周的数据 + val time = System.currentTimeMillis() + val startTime = time.timestampToLastWeekTime() + val endTime = time.timestampToTime() + deviceViewModel.obtainSevenDayData(deviceCode, startTime, endTime) + deviceViewModel.dayDataModel.observe(this, { + if (it.code == 200) { + val entryModels: MutableList = ArrayList() + val xAxisDate: MutableList = ArrayList() + val entries: ArrayList = ArrayList() + val entryModel = LineChartEntryModel() + + entryModel.lineColor = Constant.COLORS[7].convertColor() + it.data?.forEachIndexed { index, dataBean -> + val split = dataBean.time.toString().split("-") + xAxisDate.add("${split[1]}/${split[2]}") + + entries.add(Entry(index.toFloat(), dataBean.value!!.toFloat(), "日用水量")) + } + entryModel.entryList = entries + entryModels.add(entryModel) + ChartViewHelper.setLineChartData(dayWaterLineChart, xAxisDate, entryModels) + } + }) + + deviceViewModel.obtainTotalDayData(deviceCode, startTime, endTime) + deviceViewModel.totalDataModel.observe(this, { + val entryModels: MutableList = ArrayList() + val xAxisDate: MutableList = ArrayList() + val entries: ArrayList = ArrayList() + val entryModel = LineChartEntryModel() + + entryModel.lineColor = Constant.COLORS[7].convertColor() + it.data?.forEachIndexed { index, dataBean -> + val split = dataBean.uptime.toString().split(" ")[0].split("-") + xAxisDate.add("${split[1]}/${split[2]}") + + entries.add(Entry(index.toFloat(), dataBean.total!!.toFloat(), "总用水量")) + } + entryModel.entryList = entries + entryModels.add(entryModel) + ChartViewHelper.setLineChartData(totalWaterLineChart, xAxisDate, entryModels) + }) } } \ No newline at end of file diff --git a/app/src/main/java/com/casic/qd/smartwell/view/MainActivity.kt b/app/src/main/java/com/casic/qd/smartwell/view/MainActivity.kt index 02435a3..3f4bb3c 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 @@ -1,7 +1,6 @@ package com.casic.qd.smartwell.view import android.content.Context -import android.content.Intent import android.os.Handler import android.os.Looper import android.os.Message @@ -22,6 +21,7 @@ import com.casic.qd.smartwell.vm.WaterStatisticsViewModel import com.github.mikephil.charting.data.Entry import com.pengxh.app.multilib.widget.dialog.AlertControlDialog +import com.pengxh.app.multilib.widget.dialog.BottomActionSheet import com.youth.banner.Banner import com.youth.banner.adapter.BannerImageAdapter import com.youth.banner.holder.BannerImageHolder @@ -100,9 +100,20 @@ HomeRecycleAdapter.OnGridItemClickListener { override fun onClick(position: Int) { when (position) { - 0 -> startActivity(Intent(context, MapActivity::class.java)) - 1 -> startActivity(Intent(context, SearchRecordActivity::class.java)) - 2 -> startActivity(Intent(context, StatisticsActivity::class.java)) + 0 -> context.navigatePageTo(MapActivity::class.java) + 1 -> { + BottomActionSheet.Builder() + .setContext(context) + .setActionItemTitles(arrayOf("设备", "数据")) + .setOnActionSheetListener { index -> + when (index) { + 0 -> context.navigatePageTo(SearchDeviceActivity::class.java) + 1 -> context.navigatePageTo(SearchDataActivity::class.java) + } + }.build().show() + + } + 2 -> context.navigatePageTo(StatisticsActivity::class.java) } } }) diff --git a/app/src/main/java/com/casic/qd/smartwell/view/SearchAlarmActivity.kt b/app/src/main/java/com/casic/qd/smartwell/view/SearchAlarmActivity.kt index 8f54163..5285a9f 100644 --- a/app/src/main/java/com/casic/qd/smartwell/view/SearchAlarmActivity.kt +++ b/app/src/main/java/com/casic/qd/smartwell/view/SearchAlarmActivity.kt @@ -13,11 +13,6 @@ import com.jzxiang.pickerview.data.Type import com.qmuiteam.qmui.widget.dialog.QMUIBottomSheet.BottomListSheetBuilder import kotlinx.android.synthetic.main.activity_alarm_search.* -import kotlinx.android.synthetic.main.activity_alarm_search.areaView -import kotlinx.android.synthetic.main.activity_alarm_search.clearButton -import kotlinx.android.synthetic.main.activity_alarm_search.searchButton -import kotlinx.android.synthetic.main.activity_alarm_search.wellCodeView -import kotlinx.android.synthetic.main.activity_search_record.* import kotlinx.android.synthetic.main.include_base_title.* class SearchAlarmActivity : BaseActivity() { diff --git a/app/src/main/java/com/casic/qd/smartwell/view/SearchDataActivity.kt b/app/src/main/java/com/casic/qd/smartwell/view/SearchDataActivity.kt new file mode 100644 index 0000000..e6a38e4 --- /dev/null +++ b/app/src/main/java/com/casic/qd/smartwell/view/SearchDataActivity.kt @@ -0,0 +1,168 @@ +package com.casic.qd.smartwell.view + +import com.casic.qd.smartwell.R +import com.casic.qd.smartwell.base.BaseActivity +import kotlinx.android.synthetic.main.include_base_title.* + +/** + * @author a203 + * @description 记录查询界面 + * @date 2022/2/17 14:33 + * @email 290677893@qq.com + */ +class SearchDataActivity : BaseActivity() { + +// private lateinit var deviceViewModel: DeviceViewModel +// private lateinit var authenticateViewModel: AuthenticateViewModel +// private lateinit var areaViewModel: AreaViewModel +// private var authenticatedType: MutableList = ArrayList() +// private var deviceTypeValue = "" +// private var deptId = "" +// private var deviceState = "" +// private var areaId = "" + + override fun initLayoutView(): Int = R.layout.activity_data_search + + override fun setupTopBarLayout() { + titleView.text = "数据查询" + } + + override fun initData() { +// val userDeviceJson = SaveKeyValues.getValue(Constant.USER_DEVICE_TYPE, "") as String +// if (userDeviceJson.isNotBlank()) { +// authenticatedType = Gson().fromJson( +// userDeviceJson, object : TypeToken>() {}.type +// ) +// } +// deviceViewModel = ViewModelProvider(this).get(DeviceViewModel::class.java) +// authenticateViewModel = ViewModelProvider(this).get(AuthenticateViewModel::class.java) +// areaViewModel = ViewModelProvider(this).get(AreaViewModel::class.java) + } + + override fun initEvent() { +// deviceTypeView.setOnClickListener { +// /** +// * 获取全部设备类型 +// * */ +// deviceViewModel.obtainDeviceType() +// } +// deviceViewModel.typeModel.observe(this, { +// if (it.code == 200) { +// val authenticatedModel: MutableList = ArrayList() +// it.data?.forEach { deviceModel -> +// if (deviceModel.value in authenticatedType) { +// authenticatedModel.add(deviceModel) +// } +// } +// val sheetBuilder = QMUIBottomSheet.BottomListSheetBuilder(this) +// sheetBuilder.setTitle("设备类型") +// authenticatedModel.forEach { deviceModel -> +// sheetBuilder.addItem(deviceModel.name) +// } +// sheetBuilder.setGravityCenter(true) +// .setOnSheetItemClickListener { dialog, _, position, tag -> +// deviceTypeView.text = tag +// this.deviceTypeValue = authenticatedModel[position].value.toString() +// +// dialog.dismiss() +// }.build().show() +// } +// }) +// +// ownerShipView.setOnClickListener { +// authenticateViewModel.obtainOwnerShip("03") +// } +// authenticateViewModel.resultModel.observe(this, { +// if (it.code == 200) { +// val ownerShipModel: MutableList = ArrayList() +// it.data?.list?.forEach { listBean -> +// ownerShipModel.add(listBean) +// } +// val sheetBuilder = QMUIBottomSheet.BottomListSheetBuilder(this) +// sheetBuilder.setTitle("权属单位") +// ownerShipModel.forEach { model -> +// sheetBuilder.addItem(model.name) +// } +// sheetBuilder.setGravityCenter(true) +// .setOnSheetItemClickListener { dialog, _, position, tag -> +// ownerShipView.text = tag +// this.deptId = ownerShipModel[position].id.toString() +// +// dialog.dismiss() +// }.build().show() +// } +// }) +// +// deviceStateView.setOnClickListener { +// QMUIBottomSheet.BottomListSheetBuilder(this) +// .setTitle("在线情况") +// .addItem("在线") +// .addItem("离线") +// .setGravityCenter(true) +// .setOnSheetItemClickListener { dialog, _, _, tag -> +// deviceStateView.text = tag +// this.deviceState = if (tag == "在线") { +// "1" +// } else { +// "0" +// } +// +// dialog.dismiss() +// }.build().show() +// } +// +// areaView.setOnClickListener { +// areaViewModel.obtainArea() +// } +// areaViewModel.areaModel.observe(this, { +// if (it.code == 200) { +// val firstLevelArea: MutableList = ArrayList() +// val secondLevelArea: MutableList = ArrayList() +// val thirdLevelArea: MutableList = ArrayList() +// it.data?.forEach { dataBean -> +// when (dataBean.level) { +// 2 -> firstLevelArea.add(dataBean) +// 3 -> secondLevelArea.add(dataBean) +// 4 -> thirdLevelArea.add(dataBean) +// } +// } +// +// // 绑定区域 +// BottomAreaSheet.Builder() +// .setContext(this) +// .setFirstAreaData(firstLevelArea) +// .setSecondAreaData(secondLevelArea) +// .setThirdAreaData(thirdLevelArea) +// .setOnActionSheetListener(object : BottomAreaSheet.OnActionSheetListener { +// override fun onAreaSelected(area: String?, id: String?) { +// areaView.text = area +// areaId = id.toString() +// } +// }).build().show() +// } +// }) +// +// searchButton.setChangeAlphaWhenPress(true) +// searchButton.setOnClickListener { +// //页面跳转,将查询参数传过去 +// navigatePageTo( +// DeviceSearchResultActivity::class.java, addAll( +// wellCodeView.text.toString().trim(), +// deviceTypeValue, +// deptId, +// deviceState, +// areaId +// ) +// ) +// } +// +// clearButton.setChangeAlphaWhenPress(true) +// clearButton.setOnClickListener { +// wellCodeView.setText("") +// deviceTypeView.text = "" +// ownerShipView.text = "" +// deviceStateView.text = "" +// areaView.text = "" +// } + } +} \ No newline at end of file diff --git a/app/src/main/java/com/casic/qd/smartwell/view/SearchDeviceActivity.kt b/app/src/main/java/com/casic/qd/smartwell/view/SearchDeviceActivity.kt new file mode 100644 index 0000000..cf0c05f --- /dev/null +++ b/app/src/main/java/com/casic/qd/smartwell/view/SearchDeviceActivity.kt @@ -0,0 +1,184 @@ +package com.casic.qd.smartwell.view + +import androidx.lifecycle.ViewModelProvider +import com.casic.qd.smartwell.R +import com.casic.qd.smartwell.base.BaseActivity +import com.casic.qd.smartwell.extensions.addAll +import com.casic.qd.smartwell.extensions.navigatePageTo +import com.casic.qd.smartwell.model.AreaModel +import com.casic.qd.smartwell.model.DeviceTypeModel +import com.casic.qd.smartwell.model.OwnerShipModel +import com.casic.qd.smartwell.utils.Constant +import com.casic.qd.smartwell.utils.SaveKeyValues +import com.casic.qd.smartwell.vm.AreaViewModel +import com.casic.qd.smartwell.vm.AuthenticateViewModel +import com.casic.qd.smartwell.vm.DeviceViewModel +import com.casic.qd.smartwell.widgets.BottomAreaSheet +import com.google.gson.Gson +import com.google.gson.reflect.TypeToken +import com.qmuiteam.qmui.widget.dialog.QMUIBottomSheet +import kotlinx.android.synthetic.main.activity_device_search.* +import kotlinx.android.synthetic.main.include_base_title.* + +/** + * @author a203 + * @description 记录查询界面 + * @date 2022/2/17 14:33 + * @email 290677893@qq.com + */ +class SearchDeviceActivity : BaseActivity() { + + private lateinit var deviceViewModel: DeviceViewModel + private lateinit var authenticateViewModel: AuthenticateViewModel + private lateinit var areaViewModel: AreaViewModel + private var authenticatedType: MutableList = ArrayList() + private var deviceTypeValue = "" + private var deptId = "" + private var deviceState = "" + private var areaId = "" + + override fun initLayoutView(): Int = R.layout.activity_device_search + + override fun setupTopBarLayout() { + titleView.text = "设备查询" + } + + override fun initData() { + val userDeviceJson = SaveKeyValues.getValue(Constant.USER_DEVICE_TYPE, "") as String + if (userDeviceJson.isNotBlank()) { + authenticatedType = Gson().fromJson( + userDeviceJson, object : TypeToken>() {}.type + ) + } + deviceViewModel = ViewModelProvider(this).get(DeviceViewModel::class.java) + authenticateViewModel = ViewModelProvider(this).get(AuthenticateViewModel::class.java) + areaViewModel = ViewModelProvider(this).get(AreaViewModel::class.java) + } + + override fun initEvent() { + deviceTypeView.setOnClickListener { + /** + * 获取全部设备类型 + * */ + deviceViewModel.obtainDeviceType() + } + deviceViewModel.typeModel.observe(this, { + if (it.code == 200) { + val authenticatedModel: MutableList = ArrayList() + it.data?.forEach { deviceModel -> + if (deviceModel.value in authenticatedType) { + authenticatedModel.add(deviceModel) + } + } + val sheetBuilder = QMUIBottomSheet.BottomListSheetBuilder(this) + sheetBuilder.setTitle("设备类型") + authenticatedModel.forEach { deviceModel -> + sheetBuilder.addItem(deviceModel.name) + } + sheetBuilder.setGravityCenter(true) + .setOnSheetItemClickListener { dialog, _, position, tag -> + deviceTypeView.text = tag + this.deviceTypeValue = authenticatedModel[position].value.toString() + + dialog.dismiss() + }.build().show() + } + }) + + ownerShipView.setOnClickListener { + authenticateViewModel.obtainOwnerShip("03") + } + authenticateViewModel.resultModel.observe(this, { + if (it.code == 200) { + val ownerShipModel: MutableList = ArrayList() + it.data?.list?.forEach { listBean -> + ownerShipModel.add(listBean) + } + val sheetBuilder = QMUIBottomSheet.BottomListSheetBuilder(this) + sheetBuilder.setTitle("权属单位") + ownerShipModel.forEach { model -> + sheetBuilder.addItem(model.name) + } + sheetBuilder.setGravityCenter(true) + .setOnSheetItemClickListener { dialog, _, position, tag -> + ownerShipView.text = tag + this.deptId = ownerShipModel[position].id.toString() + + dialog.dismiss() + }.build().show() + } + }) + + deviceStateView.setOnClickListener { + QMUIBottomSheet.BottomListSheetBuilder(this) + .setTitle("在线情况") + .addItem("在线") + .addItem("离线") + .setGravityCenter(true) + .setOnSheetItemClickListener { dialog, _, _, tag -> + deviceStateView.text = tag + this.deviceState = if (tag == "在线") { + "1" + } else { + "0" + } + + dialog.dismiss() + }.build().show() + } + + areaView.setOnClickListener { + areaViewModel.obtainArea() + } + areaViewModel.areaModel.observe(this, { + if (it.code == 200) { + val firstLevelArea: MutableList = ArrayList() + val secondLevelArea: MutableList = ArrayList() + val thirdLevelArea: MutableList = ArrayList() + it.data?.forEach { dataBean -> + when (dataBean.level) { + 2 -> firstLevelArea.add(dataBean) + 3 -> secondLevelArea.add(dataBean) + 4 -> thirdLevelArea.add(dataBean) + } + } + + // 绑定区域 + BottomAreaSheet.Builder() + .setContext(this) + .setFirstAreaData(firstLevelArea) + .setSecondAreaData(secondLevelArea) + .setThirdAreaData(thirdLevelArea) + .setOnActionSheetListener(object : BottomAreaSheet.OnActionSheetListener { + override fun onAreaSelected(area: String?, id: String?) { + areaView.text = area + areaId = id.toString() + } + }).build().show() + } + }) + + searchButton.setChangeAlphaWhenPress(true) + searchButton.setOnClickListener { + //页面跳转,将查询参数传过去 + navigatePageTo( + DeviceSearchResultActivity::class.java, addAll( + wellCodeView.text.toString().trim(), + deviceTypeValue, + deptId, + deviceState, + areaId + ) + ) + } + + clearButton.setChangeAlphaWhenPress(true) + clearButton.setOnClickListener { + wellCodeView.setText("") + deviceTypeView.text = "" + ownerShipView.text = "" + deviceStateView.text = "" + areaView.text = "" + } + } +} \ No newline at end of file diff --git a/app/src/main/java/com/casic/qd/smartwell/view/SearchRecordActivity.kt b/app/src/main/java/com/casic/qd/smartwell/view/SearchRecordActivity.kt deleted file mode 100644 index 8cab864..0000000 --- a/app/src/main/java/com/casic/qd/smartwell/view/SearchRecordActivity.kt +++ /dev/null @@ -1,184 +0,0 @@ -package com.casic.qd.smartwell.view - -import androidx.lifecycle.ViewModelProvider -import com.casic.qd.smartwell.R -import com.casic.qd.smartwell.base.BaseActivity -import com.casic.qd.smartwell.extensions.addAll -import com.casic.qd.smartwell.extensions.navigatePageTo -import com.casic.qd.smartwell.model.AreaModel -import com.casic.qd.smartwell.model.DeviceTypeModel -import com.casic.qd.smartwell.model.OwnerShipModel -import com.casic.qd.smartwell.utils.Constant -import com.casic.qd.smartwell.utils.SaveKeyValues -import com.casic.qd.smartwell.vm.AreaViewModel -import com.casic.qd.smartwell.vm.AuthenticateViewModel -import com.casic.qd.smartwell.vm.DeviceViewModel -import com.casic.qd.smartwell.widgets.BottomAreaSheet -import com.google.gson.Gson -import com.google.gson.reflect.TypeToken -import com.qmuiteam.qmui.widget.dialog.QMUIBottomSheet -import kotlinx.android.synthetic.main.activity_search_record.* -import kotlinx.android.synthetic.main.include_base_title.* - -/** - * @author a203 - * @description 记录查询界面 - * @date 2022/2/17 14:33 - * @email 290677893@qq.com - */ -class SearchRecordActivity : BaseActivity() { - - private lateinit var deviceViewModel: DeviceViewModel - private lateinit var authenticateViewModel: AuthenticateViewModel - private lateinit var areaViewModel: AreaViewModel - private var authenticatedType: MutableList = ArrayList() - private var deviceTypeValue = "" - private var deptId = "" - private var deviceState = "" - private var areaId = "" - - override fun initLayoutView(): Int = R.layout.activity_search_record - - override fun setupTopBarLayout() { - titleView.text = "记录查询" - } - - override fun initData() { - val userDeviceJson = SaveKeyValues.getValue(Constant.USER_DEVICE_TYPE, "") as String - if (userDeviceJson.isNotBlank()) { - authenticatedType = Gson().fromJson( - userDeviceJson, object : TypeToken>() {}.type - ) - } - deviceViewModel = ViewModelProvider(this).get(DeviceViewModel::class.java) - authenticateViewModel = ViewModelProvider(this).get(AuthenticateViewModel::class.java) - areaViewModel = ViewModelProvider(this).get(AreaViewModel::class.java) - } - - override fun initEvent() { - deviceTypeView.setOnClickListener { - /** - * 获取全部设备类型 - * */ - deviceViewModel.obtainDeviceType() - } - deviceViewModel.typeModel.observe(this, { - if (it.code == 200) { - val authenticatedModel: MutableList = ArrayList() - it.data?.forEach { deviceModel -> - if (deviceModel.value in authenticatedType) { - authenticatedModel.add(deviceModel) - } - } - val sheetBuilder = QMUIBottomSheet.BottomListSheetBuilder(this) - sheetBuilder.setTitle("设备类型") - authenticatedModel.forEach { deviceModel -> - sheetBuilder.addItem(deviceModel.name) - } - sheetBuilder.setGravityCenter(true) - .setOnSheetItemClickListener { dialog, _, position, tag -> - deviceTypeView.text = tag - this.deviceTypeValue = authenticatedModel[position].value.toString() - - dialog.dismiss() - }.build().show() - } - }) - - ownerShipView.setOnClickListener { - authenticateViewModel.obtainOwnerShip("03") - } - authenticateViewModel.resultModel.observe(this, { - if (it.code == 200) { - val ownerShipModel: MutableList = ArrayList() - it.data?.list?.forEach { listBean -> - ownerShipModel.add(listBean) - } - val sheetBuilder = QMUIBottomSheet.BottomListSheetBuilder(this) - sheetBuilder.setTitle("权属单位") - ownerShipModel.forEach { model -> - sheetBuilder.addItem(model.name) - } - sheetBuilder.setGravityCenter(true) - .setOnSheetItemClickListener { dialog, _, position, tag -> - ownerShipView.text = tag - this.deptId = ownerShipModel[position].id.toString() - - dialog.dismiss() - }.build().show() - } - }) - - deviceStateView.setOnClickListener { - QMUIBottomSheet.BottomListSheetBuilder(this) - .setTitle("在线情况") - .addItem("在线") - .addItem("离线") - .setGravityCenter(true) - .setOnSheetItemClickListener { dialog, _, _, tag -> - deviceStateView.text = tag - this.deviceState = if (tag == "在线") { - "1" - } else { - "0" - } - - dialog.dismiss() - }.build().show() - } - - areaView.setOnClickListener { - areaViewModel.obtainArea() - } - areaViewModel.areaModel.observe(this, { - if (it.code == 200) { - val firstLevelArea: MutableList = ArrayList() - val secondLevelArea: MutableList = ArrayList() - val thirdLevelArea: MutableList = ArrayList() - it.data?.forEach { dataBean -> - when (dataBean.level) { - 2 -> firstLevelArea.add(dataBean) - 3 -> secondLevelArea.add(dataBean) - 4 -> thirdLevelArea.add(dataBean) - } - } - - // 绑定区域 - BottomAreaSheet.Builder() - .setContext(this) - .setFirstAreaData(firstLevelArea) - .setSecondAreaData(secondLevelArea) - .setThirdAreaData(thirdLevelArea) - .setOnActionSheetListener(object : BottomAreaSheet.OnActionSheetListener { - override fun onAreaSelected(area: String?, id: String?) { - areaView.text = area - areaId = id.toString() - } - }).build().show() - } - }) - - searchButton.setChangeAlphaWhenPress(true) - searchButton.setOnClickListener { - //页面跳转,将查询参数传过去 - navigatePageTo( - DeviceSearchResultActivity::class.java, addAll( - wellCodeView.text.toString().trim(), - deviceTypeValue, - deptId, - deviceState, - areaId - ) - ) - } - - clearButton.setChangeAlphaWhenPress(true) - clearButton.setOnClickListener { - wellCodeView.setText("") - deviceTypeView.text = "" - ownerShipView.text = "" - deviceStateView.text = "" - areaView.text = "" - } - } -} \ No newline at end of file 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 21c4286..3272cfe 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 @@ -15,6 +15,7 @@ import com.casic.qd.smartwell.widgets.DateSelectDialog import com.github.mikephil.charting.data.BarEntry import com.github.mikephil.charting.data.PieEntry +import com.jzxiang.pickerview.data.Type import kotlinx.android.synthetic.main.activity_statistics.* import kotlinx.android.synthetic.main.include_base_title.* import java.util.* @@ -97,7 +98,6 @@ 5 -> { DateSelectDialog.Builder() .setContext(context) - .setFragmentManager(supportFragmentManager) .setTitle("选择日期") .setNegativeButton("取消") .setPositiveButton("选好了") @@ -113,7 +113,10 @@ //选择取消就默认加载近7天的数据 periodSpinner.setSelection(3) } - }).build().show() + }) + .setFragmentManager(supportFragmentManager) + .setCalendarType(Type.YEAR_MONTH_DAY) + .build().show() } } } @@ -200,7 +203,6 @@ 5 -> { DateSelectDialog.Builder() .setContext(context) - .setFragmentManager(supportFragmentManager) .setTitle("选择日期") .setNegativeButton("取消") .setPositiveButton("选好了") @@ -216,7 +218,10 @@ //选择取消就默认加载近7天的数据 periodSpinner.setSelection(3) } - }).build().show() + }) + .setFragmentManager(supportFragmentManager) + .setCalendarType(Type.YEAR_MONTH_DAY) + .build().show() } } } diff --git a/app/src/main/java/com/casic/qd/smartwell/view/WaterExpandedActivity.kt b/app/src/main/java/com/casic/qd/smartwell/view/WaterExpandedActivity.kt index 251140d..7a63dea 100644 --- a/app/src/main/java/com/casic/qd/smartwell/view/WaterExpandedActivity.kt +++ b/app/src/main/java/com/casic/qd/smartwell/view/WaterExpandedActivity.kt @@ -13,6 +13,7 @@ import com.casic.qd.smartwell.vm.WaterStatisticsViewModel import com.casic.qd.smartwell.widgets.DateSelectDialog import com.github.mikephil.charting.data.Entry +import com.jzxiang.pickerview.data.Type import kotlinx.android.synthetic.main.activity_water_expanded.* import java.util.* import kotlin.collections.ArrayList @@ -86,7 +87,6 @@ 5 -> { DateSelectDialog.Builder() .setContext(context) - .setFragmentManager(supportFragmentManager) .setTitle("选择日期") .setNegativeButton("取消") .setPositiveButton("选好了") @@ -102,7 +102,10 @@ //选择取消就默认加载近7天的数据 periodSpinner.setSelection(3) } - }).build().show() + }) + .setFragmentManager(supportFragmentManager) + .setCalendarType(Type.YEAR_MONTH_DAY) + .build().show() } } } diff --git a/app/src/main/java/com/casic/qd/smartwell/vm/DeviceViewModel.kt b/app/src/main/java/com/casic/qd/smartwell/vm/DeviceViewModel.kt index 02aefed..9448ade 100644 --- a/app/src/main/java/com/casic/qd/smartwell/vm/DeviceViewModel.kt +++ b/app/src/main/java/com/casic/qd/smartwell/vm/DeviceViewModel.kt @@ -7,8 +7,10 @@ import com.casic.qd.smartwell.extensions.separateResponseCode import com.casic.qd.smartwell.extensions.show import com.casic.qd.smartwell.extensions.toErrorMessage +import com.casic.qd.smartwell.model.DayDataModel import com.casic.qd.smartwell.model.DeviceStatisticsModel import com.casic.qd.smartwell.model.DeviceTypeModel +import com.casic.qd.smartwell.model.TotalDataModel import com.casic.qd.smartwell.utils.retrofit.RetrofitServiceManager import com.google.gson.Gson import com.google.gson.reflect.TypeToken @@ -19,6 +21,8 @@ private val gson = Gson() val resultModel = MutableLiveData() val typeModel = MutableLiveData() + val dayDataModel = MutableLiveData() + val totalDataModel = MutableLiveData() /** * 管网资产统计 @@ -55,4 +59,40 @@ Log.e(kTag, it.toString(), it) "服务器异常".show() }) + + /** + * 获取设备日用水量 + */ + fun obtainSevenDayData(devCode: String?, beginTime: String?, endTime: String?) = launch({ + val response = RetrofitServiceManager.obtainSevenDayData(devCode, beginTime, endTime) + val responseCode = response.separateResponseCode() + if (responseCode == 200) { + dayDataModel.value = gson.fromJson( + response, object : TypeToken() {}.type + ) + } else { + response.toErrorMessage().show() + } + }, { + Log.e(kTag, it.toString(), it) + "服务器异常".show() + }) + + /** + * 获取设备累计用水量 + */ + fun obtainTotalDayData(devCode: String?, beginTime: String?, endTime: String?) = launch({ + val response = RetrofitServiceManager.obtainTotalDayData(devCode, beginTime, endTime) + val responseCode = response.separateResponseCode() + if (responseCode == 200) { + totalDataModel.value = gson.fromJson( + response, object : TypeToken() {}.type + ) + } else { + 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/widgets/DateSelectDialog.kt b/app/src/main/java/com/casic/qd/smartwell/widgets/DateSelectDialog.kt index ec403eb..fda3a03 100644 --- a/app/src/main/java/com/casic/qd/smartwell/widgets/DateSelectDialog.kt +++ b/app/src/main/java/com/casic/qd/smartwell/widgets/DateSelectDialog.kt @@ -9,6 +9,7 @@ import com.casic.qd.smartwell.extensions.convertColor import com.casic.qd.smartwell.extensions.initDialogLayoutParams import com.casic.qd.smartwell.extensions.timestampToDate +import com.casic.qd.smartwell.extensions.timestampToTime import com.casic.qd.smartwell.utils.Constant import com.jzxiang.pickerview.TimePickerDialog import com.jzxiang.pickerview.data.Type @@ -18,30 +19,27 @@ builder.context, R.style.UserDefinedDialogStyle ) { - private val fragmentManager: FragmentManager = builder.fragmentManager private val title: String = builder.title private val negativeBtn: String = builder.negativeBtn private val positiveBtn: String = builder.positiveBtn private val listener: OnDialogButtonClickListener = builder.listener + private val fragmentManager: FragmentManager = builder.fragmentManager + private val type: Type = builder.type class Builder { lateinit var context: Context - lateinit var fragmentManager: FragmentManager lateinit var title: String lateinit var negativeBtn: String lateinit var positiveBtn: String lateinit var listener: OnDialogButtonClickListener + lateinit var fragmentManager: FragmentManager + lateinit var type: Type fun setContext(context: Context): Builder { this.context = context return this } - fun setFragmentManager(fragmentManager: FragmentManager): Builder { - this.fragmentManager = fragmentManager - return this - } - fun setTitle(title: String): Builder { this.title = title return this @@ -62,6 +60,16 @@ return this } + fun setFragmentManager(fragmentManager: FragmentManager): Builder { + this.fragmentManager = fragmentManager + return this + } + + fun setCalendarType(calendarType: Type): Builder { + this.type = calendarType + return this + } + fun build(): DateSelectDialog { return DateSelectDialog(this) } @@ -69,7 +77,7 @@ override fun onCreate(savedInstanceState: Bundle?) { super.onCreate(savedInstanceState) - this.initDialogLayoutParams(Gravity.CENTER, R.style.UserDefinedAnimation, 0.8f) + this.initDialogLayoutParams(Gravity.CENTER, R.style.UserDefinedAnimation, 0.85f) setContentView(R.layout.dialog_select_date) setCancelable(false) setCanceledOnTouchOutside(false) @@ -86,10 +94,15 @@ .setCyclic(false) .setMinMillseconds(System.currentTimeMillis() - Constant.FIVE_YEARS) .setMaxMillseconds(System.currentTimeMillis()) - .setType(Type.YEAR_MONTH_DAY) + .setType(type) .setCallBack { _: TimePickerDialog?, millSeconds: Long -> - startDateView.setText(millSeconds.timestampToDate()) - }.build().show(fragmentManager, "YEAR_MONTH_DAY") + val textValue = if (type == Type.ALL) { + millSeconds.timestampToTime() + } else { + millSeconds.timestampToDate() + } + startDateView.setText(textValue) + }.build().show(fragmentManager, "DateSelectDialog") } endDateView.setOnClickListener { @@ -100,10 +113,15 @@ .setCyclic(false) .setMinMillseconds(System.currentTimeMillis() - Constant.FIVE_YEARS) .setMaxMillseconds(System.currentTimeMillis()) - .setType(Type.YEAR_MONTH_DAY) + .setType(type) .setCallBack { _: TimePickerDialog?, millSeconds: Long -> - endDateView.setText(millSeconds.timestampToDate()) - }.build().show(fragmentManager, "YEAR_MONTH_DAY") + val textValue = if (type == Type.ALL) { + millSeconds.timestampToTime() + } else { + millSeconds.timestampToDate() + } + endDateView.setText(textValue) + }.build().show(fragmentManager, "DateSelectDialog") } dialogCancelButton.text = negativeBtn diff --git a/app/src/main/res/drawable/ic_calendar.xml b/app/src/main/res/drawable/ic_calendar.xml new file mode 100644 index 0000000..a314f72 --- /dev/null +++ b/app/src/main/res/drawable/ic_calendar.xml @@ -0,0 +1,12 @@ + + + + diff --git a/app/src/main/res/layout/activity_data_search.xml b/app/src/main/res/layout/activity_data_search.xml new file mode 100644 index 0000000..77d9ef6 --- /dev/null +++ b/app/src/main/res/layout/activity_data_search.xml @@ -0,0 +1,6 @@ + + + + \ No newline at end of file diff --git a/app/src/main/res/layout/activity_device_data_detail.xml b/app/src/main/res/layout/activity_device_data_detail.xml new file mode 100644 index 0000000..700b1de --- /dev/null +++ b/app/src/main/res/layout/activity_device_data_detail.xml @@ -0,0 +1,78 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/app/src/main/res/layout/activity_device_detail.xml b/app/src/main/res/layout/activity_device_detail.xml deleted file mode 100644 index 7ead47b..0000000 --- a/app/src/main/res/layout/activity_device_detail.xml +++ /dev/null @@ -1,32 +0,0 @@ - - - - - - - - - - - - - - - \ No newline at end of file diff --git a/app/src/main/res/layout/activity_device_search.xml b/app/src/main/res/layout/activity_device_search.xml new file mode 100644 index 0000000..ff2d746 --- /dev/null +++ b/app/src/main/res/layout/activity_device_search.xml @@ -0,0 +1,160 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml index 82386c9..3832c68 100644 --- a/app/src/main/AndroidManifest.xml +++ b/app/src/main/AndroidManifest.xml @@ -48,7 +48,7 @@ - + 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 216e7cc..f53e831 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,6 +15,14 @@ return dateFormat.format(calendar.time) } +fun Long.timestampToLastWeekTime(): String { + val dateFormat = SimpleDateFormat("yyyy-MM-dd HH:mm:ss", Locale.CHINA) + val calendar = Calendar.getInstance() + calendar.time = Date(this) + calendar.set(Calendar.DAY_OF_YEAR, calendar.get(Calendar.DAY_OF_YEAR) - 6) + return dateFormat.format(calendar.time) +} + fun Long.timestampToLastMonthDate(): String { val dateFormat = SimpleDateFormat("yyyy-MM-dd", Locale.CHINA) val calendar = Calendar.getInstance() diff --git a/app/src/main/java/com/casic/qd/smartwell/model/DayDataModel.kt b/app/src/main/java/com/casic/qd/smartwell/model/DayDataModel.kt new file mode 100644 index 0000000..18d1399 --- /dev/null +++ b/app/src/main/java/com/casic/qd/smartwell/model/DayDataModel.kt @@ -0,0 +1,13 @@ +package com.casic.qd.smartwell.model + +class DayDataModel { + var code = 0 + var data: List? = null + var message: String? = null + var isSuccess = false + + class DataBean { + var time: String? = null + var value: String? = null + } +} \ No newline at end of file diff --git a/app/src/main/java/com/casic/qd/smartwell/model/TotalDataModel.kt b/app/src/main/java/com/casic/qd/smartwell/model/TotalDataModel.kt new file mode 100644 index 0000000..30bf829 --- /dev/null +++ b/app/src/main/java/com/casic/qd/smartwell/model/TotalDataModel.kt @@ -0,0 +1,14 @@ +package com.casic.qd.smartwell.model + +class TotalDataModel { + var code = 0 + var data: List? = null + var message: String? = null + var isSuccess = false + + class DataBean { + var total: String? = null + var deviceState: String? = null + var uptime: String? = null + } +} \ No newline at end of file diff --git a/app/src/main/java/com/casic/qd/smartwell/utils/retrofit/RetrofitService.kt b/app/src/main/java/com/casic/qd/smartwell/utils/retrofit/RetrofitService.kt index c5bf469..0c80ee9 100644 --- a/app/src/main/java/com/casic/qd/smartwell/utils/retrofit/RetrofitService.kt +++ b/app/src/main/java/com/casic/qd/smartwell/utils/retrofit/RetrofitService.kt @@ -202,4 +202,26 @@ @Query("offset") offset: Int, @Query("limit") limit: Int ): String + + /** + * 获取设备日用水量 + * */ + @GET("/device/sevenDayData") + suspend fun obtainSevenDayData( + @Header("token") token: String, + @Query("devCode") devCode: String?, + @Query("beginTime") beginTime: String?, + @Query("endTime") endTime: String? + ): String + + /** + * 获取设备日用水量 + * */ + @GET("/device/totalData") + suspend fun obtainTotalDayData( + @Header("token") token: String, + @Query("devCode") devCode: String?, + @Query("beginTime") beginTime: String?, + @Query("endTime") endTime: String? + ): String } \ No newline at end of file diff --git a/app/src/main/java/com/casic/qd/smartwell/utils/retrofit/RetrofitServiceManager.kt b/app/src/main/java/com/casic/qd/smartwell/utils/retrofit/RetrofitServiceManager.kt index 6f728e0..a8b320f 100644 --- a/app/src/main/java/com/casic/qd/smartwell/utils/retrofit/RetrofitServiceManager.kt +++ b/app/src/main/java/com/casic/qd/smartwell/utils/retrofit/RetrofitServiceManager.kt @@ -204,4 +204,18 @@ Constant.PAGE_LIMIT ) } + + /** + * 获取设备日用水量 + */ + suspend fun obtainSevenDayData(devCode: String?, beginTime: String?, endTime: String?): String { + return api.obtainSevenDayData(AuthenticationHelper.token!!, devCode, beginTime, endTime) + } + + /** + * 获取设备累计用水量 + */ + suspend fun obtainTotalDayData(devCode: String?, beginTime: String?, endTime: String?): String { + return api.obtainTotalDayData(AuthenticationHelper.token!!, devCode, beginTime, endTime) + } } \ No newline at end of file diff --git a/app/src/main/java/com/casic/qd/smartwell/view/DeviceDataDetailActivity.kt b/app/src/main/java/com/casic/qd/smartwell/view/DeviceDataDetailActivity.kt index 7029d17..a8a2695 100644 --- a/app/src/main/java/com/casic/qd/smartwell/view/DeviceDataDetailActivity.kt +++ b/app/src/main/java/com/casic/qd/smartwell/view/DeviceDataDetailActivity.kt @@ -1,22 +1,109 @@ package com.casic.qd.smartwell.view +import androidx.lifecycle.ViewModelProvider import com.casic.qd.smartwell.R import com.casic.qd.smartwell.base.BaseActivity -import kotlinx.android.synthetic.main.include_base_title.* +import com.casic.qd.smartwell.extensions.convertColor +import com.casic.qd.smartwell.extensions.timestampToLastWeekTime +import com.casic.qd.smartwell.extensions.timestampToTime +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.DeviceViewModel +import com.casic.qd.smartwell.widgets.DateSelectDialog +import com.github.mikephil.charting.data.Entry +import com.jzxiang.pickerview.data.Type +import kotlinx.android.synthetic.main.activity_device_data_detail.* +import kotlinx.android.synthetic.main.activity_main.rightOptionView +import kotlinx.android.synthetic.main.activity_main.titleView class DeviceDataDetailActivity : BaseActivity() { - override fun initLayoutView(): Int = R.layout.activity_device_detail + private val kTag = "DeviceDataDetailActivity" + private lateinit var deviceCode: String + private lateinit var deviceViewModel: DeviceViewModel + + override fun initLayoutView(): Int = R.layout.activity_device_data_detail override fun setupTopBarLayout() { - titleView.text = "历史数据" + deviceCode = intent.getStringExtra(Constant.INTENT_PARAM)!! + titleView.text = String.format("${deviceCode}历史数据") } override fun initData() { - + deviceViewModel = ViewModelProvider(this).get(DeviceViewModel::class.java) } override fun initEvent() { + rightOptionView.setOnClickListener { + DateSelectDialog.Builder() + .setContext(this) + .setTitle("选择日期") + .setNegativeButton("取消") + .setPositiveButton("选好了") + .setOnDialogButtonClickListener(object : + DateSelectDialog.OnDialogButtonClickListener { + override fun onConfirmClick(startDate: String, endDate: String) { + deviceViewModel.obtainSevenDayData(deviceCode, startDate, endDate) + deviceViewModel.obtainTotalDayData(deviceCode, startDate, endDate) + } + override fun onCancelClick() { + //选择取消就默认加载近7天的数据 + val time = System.currentTimeMillis() + val startTime = time.timestampToLastWeekTime() + val endTime = time.timestampToTime() + deviceViewModel.obtainSevenDayData(deviceCode, startTime, endTime) + deviceViewModel.obtainTotalDayData(deviceCode, startTime, endTime) + } + }) + .setFragmentManager(supportFragmentManager) + .setCalendarType(Type.ALL) + .build().show() + } + + //默认加载近一周的数据 + val time = System.currentTimeMillis() + val startTime = time.timestampToLastWeekTime() + val endTime = time.timestampToTime() + deviceViewModel.obtainSevenDayData(deviceCode, startTime, endTime) + deviceViewModel.dayDataModel.observe(this, { + if (it.code == 200) { + val entryModels: MutableList = ArrayList() + val xAxisDate: MutableList = ArrayList() + val entries: ArrayList = ArrayList() + val entryModel = LineChartEntryModel() + + entryModel.lineColor = Constant.COLORS[7].convertColor() + it.data?.forEachIndexed { index, dataBean -> + val split = dataBean.time.toString().split("-") + xAxisDate.add("${split[1]}/${split[2]}") + + entries.add(Entry(index.toFloat(), dataBean.value!!.toFloat(), "日用水量")) + } + entryModel.entryList = entries + entryModels.add(entryModel) + ChartViewHelper.setLineChartData(dayWaterLineChart, xAxisDate, entryModels) + } + }) + + deviceViewModel.obtainTotalDayData(deviceCode, startTime, endTime) + deviceViewModel.totalDataModel.observe(this, { + val entryModels: MutableList = ArrayList() + val xAxisDate: MutableList = ArrayList() + val entries: ArrayList = ArrayList() + val entryModel = LineChartEntryModel() + + entryModel.lineColor = Constant.COLORS[7].convertColor() + it.data?.forEachIndexed { index, dataBean -> + val split = dataBean.uptime.toString().split(" ")[0].split("-") + xAxisDate.add("${split[1]}/${split[2]}") + + entries.add(Entry(index.toFloat(), dataBean.total!!.toFloat(), "总用水量")) + } + entryModel.entryList = entries + entryModels.add(entryModel) + ChartViewHelper.setLineChartData(totalWaterLineChart, xAxisDate, entryModels) + }) } } \ No newline at end of file diff --git a/app/src/main/java/com/casic/qd/smartwell/view/MainActivity.kt b/app/src/main/java/com/casic/qd/smartwell/view/MainActivity.kt index 02435a3..3f4bb3c 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 @@ -1,7 +1,6 @@ package com.casic.qd.smartwell.view import android.content.Context -import android.content.Intent import android.os.Handler import android.os.Looper import android.os.Message @@ -22,6 +21,7 @@ import com.casic.qd.smartwell.vm.WaterStatisticsViewModel import com.github.mikephil.charting.data.Entry import com.pengxh.app.multilib.widget.dialog.AlertControlDialog +import com.pengxh.app.multilib.widget.dialog.BottomActionSheet import com.youth.banner.Banner import com.youth.banner.adapter.BannerImageAdapter import com.youth.banner.holder.BannerImageHolder @@ -100,9 +100,20 @@ HomeRecycleAdapter.OnGridItemClickListener { override fun onClick(position: Int) { when (position) { - 0 -> startActivity(Intent(context, MapActivity::class.java)) - 1 -> startActivity(Intent(context, SearchRecordActivity::class.java)) - 2 -> startActivity(Intent(context, StatisticsActivity::class.java)) + 0 -> context.navigatePageTo(MapActivity::class.java) + 1 -> { + BottomActionSheet.Builder() + .setContext(context) + .setActionItemTitles(arrayOf("设备", "数据")) + .setOnActionSheetListener { index -> + when (index) { + 0 -> context.navigatePageTo(SearchDeviceActivity::class.java) + 1 -> context.navigatePageTo(SearchDataActivity::class.java) + } + }.build().show() + + } + 2 -> context.navigatePageTo(StatisticsActivity::class.java) } } }) diff --git a/app/src/main/java/com/casic/qd/smartwell/view/SearchAlarmActivity.kt b/app/src/main/java/com/casic/qd/smartwell/view/SearchAlarmActivity.kt index 8f54163..5285a9f 100644 --- a/app/src/main/java/com/casic/qd/smartwell/view/SearchAlarmActivity.kt +++ b/app/src/main/java/com/casic/qd/smartwell/view/SearchAlarmActivity.kt @@ -13,11 +13,6 @@ import com.jzxiang.pickerview.data.Type import com.qmuiteam.qmui.widget.dialog.QMUIBottomSheet.BottomListSheetBuilder import kotlinx.android.synthetic.main.activity_alarm_search.* -import kotlinx.android.synthetic.main.activity_alarm_search.areaView -import kotlinx.android.synthetic.main.activity_alarm_search.clearButton -import kotlinx.android.synthetic.main.activity_alarm_search.searchButton -import kotlinx.android.synthetic.main.activity_alarm_search.wellCodeView -import kotlinx.android.synthetic.main.activity_search_record.* import kotlinx.android.synthetic.main.include_base_title.* class SearchAlarmActivity : BaseActivity() { diff --git a/app/src/main/java/com/casic/qd/smartwell/view/SearchDataActivity.kt b/app/src/main/java/com/casic/qd/smartwell/view/SearchDataActivity.kt new file mode 100644 index 0000000..e6a38e4 --- /dev/null +++ b/app/src/main/java/com/casic/qd/smartwell/view/SearchDataActivity.kt @@ -0,0 +1,168 @@ +package com.casic.qd.smartwell.view + +import com.casic.qd.smartwell.R +import com.casic.qd.smartwell.base.BaseActivity +import kotlinx.android.synthetic.main.include_base_title.* + +/** + * @author a203 + * @description 记录查询界面 + * @date 2022/2/17 14:33 + * @email 290677893@qq.com + */ +class SearchDataActivity : BaseActivity() { + +// private lateinit var deviceViewModel: DeviceViewModel +// private lateinit var authenticateViewModel: AuthenticateViewModel +// private lateinit var areaViewModel: AreaViewModel +// private var authenticatedType: MutableList = ArrayList() +// private var deviceTypeValue = "" +// private var deptId = "" +// private var deviceState = "" +// private var areaId = "" + + override fun initLayoutView(): Int = R.layout.activity_data_search + + override fun setupTopBarLayout() { + titleView.text = "数据查询" + } + + override fun initData() { +// val userDeviceJson = SaveKeyValues.getValue(Constant.USER_DEVICE_TYPE, "") as String +// if (userDeviceJson.isNotBlank()) { +// authenticatedType = Gson().fromJson( +// userDeviceJson, object : TypeToken>() {}.type +// ) +// } +// deviceViewModel = ViewModelProvider(this).get(DeviceViewModel::class.java) +// authenticateViewModel = ViewModelProvider(this).get(AuthenticateViewModel::class.java) +// areaViewModel = ViewModelProvider(this).get(AreaViewModel::class.java) + } + + override fun initEvent() { +// deviceTypeView.setOnClickListener { +// /** +// * 获取全部设备类型 +// * */ +// deviceViewModel.obtainDeviceType() +// } +// deviceViewModel.typeModel.observe(this, { +// if (it.code == 200) { +// val authenticatedModel: MutableList = ArrayList() +// it.data?.forEach { deviceModel -> +// if (deviceModel.value in authenticatedType) { +// authenticatedModel.add(deviceModel) +// } +// } +// val sheetBuilder = QMUIBottomSheet.BottomListSheetBuilder(this) +// sheetBuilder.setTitle("设备类型") +// authenticatedModel.forEach { deviceModel -> +// sheetBuilder.addItem(deviceModel.name) +// } +// sheetBuilder.setGravityCenter(true) +// .setOnSheetItemClickListener { dialog, _, position, tag -> +// deviceTypeView.text = tag +// this.deviceTypeValue = authenticatedModel[position].value.toString() +// +// dialog.dismiss() +// }.build().show() +// } +// }) +// +// ownerShipView.setOnClickListener { +// authenticateViewModel.obtainOwnerShip("03") +// } +// authenticateViewModel.resultModel.observe(this, { +// if (it.code == 200) { +// val ownerShipModel: MutableList = ArrayList() +// it.data?.list?.forEach { listBean -> +// ownerShipModel.add(listBean) +// } +// val sheetBuilder = QMUIBottomSheet.BottomListSheetBuilder(this) +// sheetBuilder.setTitle("权属单位") +// ownerShipModel.forEach { model -> +// sheetBuilder.addItem(model.name) +// } +// sheetBuilder.setGravityCenter(true) +// .setOnSheetItemClickListener { dialog, _, position, tag -> +// ownerShipView.text = tag +// this.deptId = ownerShipModel[position].id.toString() +// +// dialog.dismiss() +// }.build().show() +// } +// }) +// +// deviceStateView.setOnClickListener { +// QMUIBottomSheet.BottomListSheetBuilder(this) +// .setTitle("在线情况") +// .addItem("在线") +// .addItem("离线") +// .setGravityCenter(true) +// .setOnSheetItemClickListener { dialog, _, _, tag -> +// deviceStateView.text = tag +// this.deviceState = if (tag == "在线") { +// "1" +// } else { +// "0" +// } +// +// dialog.dismiss() +// }.build().show() +// } +// +// areaView.setOnClickListener { +// areaViewModel.obtainArea() +// } +// areaViewModel.areaModel.observe(this, { +// if (it.code == 200) { +// val firstLevelArea: MutableList = ArrayList() +// val secondLevelArea: MutableList = ArrayList() +// val thirdLevelArea: MutableList = ArrayList() +// it.data?.forEach { dataBean -> +// when (dataBean.level) { +// 2 -> firstLevelArea.add(dataBean) +// 3 -> secondLevelArea.add(dataBean) +// 4 -> thirdLevelArea.add(dataBean) +// } +// } +// +// // 绑定区域 +// BottomAreaSheet.Builder() +// .setContext(this) +// .setFirstAreaData(firstLevelArea) +// .setSecondAreaData(secondLevelArea) +// .setThirdAreaData(thirdLevelArea) +// .setOnActionSheetListener(object : BottomAreaSheet.OnActionSheetListener { +// override fun onAreaSelected(area: String?, id: String?) { +// areaView.text = area +// areaId = id.toString() +// } +// }).build().show() +// } +// }) +// +// searchButton.setChangeAlphaWhenPress(true) +// searchButton.setOnClickListener { +// //页面跳转,将查询参数传过去 +// navigatePageTo( +// DeviceSearchResultActivity::class.java, addAll( +// wellCodeView.text.toString().trim(), +// deviceTypeValue, +// deptId, +// deviceState, +// areaId +// ) +// ) +// } +// +// clearButton.setChangeAlphaWhenPress(true) +// clearButton.setOnClickListener { +// wellCodeView.setText("") +// deviceTypeView.text = "" +// ownerShipView.text = "" +// deviceStateView.text = "" +// areaView.text = "" +// } + } +} \ No newline at end of file diff --git a/app/src/main/java/com/casic/qd/smartwell/view/SearchDeviceActivity.kt b/app/src/main/java/com/casic/qd/smartwell/view/SearchDeviceActivity.kt new file mode 100644 index 0000000..cf0c05f --- /dev/null +++ b/app/src/main/java/com/casic/qd/smartwell/view/SearchDeviceActivity.kt @@ -0,0 +1,184 @@ +package com.casic.qd.smartwell.view + +import androidx.lifecycle.ViewModelProvider +import com.casic.qd.smartwell.R +import com.casic.qd.smartwell.base.BaseActivity +import com.casic.qd.smartwell.extensions.addAll +import com.casic.qd.smartwell.extensions.navigatePageTo +import com.casic.qd.smartwell.model.AreaModel +import com.casic.qd.smartwell.model.DeviceTypeModel +import com.casic.qd.smartwell.model.OwnerShipModel +import com.casic.qd.smartwell.utils.Constant +import com.casic.qd.smartwell.utils.SaveKeyValues +import com.casic.qd.smartwell.vm.AreaViewModel +import com.casic.qd.smartwell.vm.AuthenticateViewModel +import com.casic.qd.smartwell.vm.DeviceViewModel +import com.casic.qd.smartwell.widgets.BottomAreaSheet +import com.google.gson.Gson +import com.google.gson.reflect.TypeToken +import com.qmuiteam.qmui.widget.dialog.QMUIBottomSheet +import kotlinx.android.synthetic.main.activity_device_search.* +import kotlinx.android.synthetic.main.include_base_title.* + +/** + * @author a203 + * @description 记录查询界面 + * @date 2022/2/17 14:33 + * @email 290677893@qq.com + */ +class SearchDeviceActivity : BaseActivity() { + + private lateinit var deviceViewModel: DeviceViewModel + private lateinit var authenticateViewModel: AuthenticateViewModel + private lateinit var areaViewModel: AreaViewModel + private var authenticatedType: MutableList = ArrayList() + private var deviceTypeValue = "" + private var deptId = "" + private var deviceState = "" + private var areaId = "" + + override fun initLayoutView(): Int = R.layout.activity_device_search + + override fun setupTopBarLayout() { + titleView.text = "设备查询" + } + + override fun initData() { + val userDeviceJson = SaveKeyValues.getValue(Constant.USER_DEVICE_TYPE, "") as String + if (userDeviceJson.isNotBlank()) { + authenticatedType = Gson().fromJson( + userDeviceJson, object : TypeToken>() {}.type + ) + } + deviceViewModel = ViewModelProvider(this).get(DeviceViewModel::class.java) + authenticateViewModel = ViewModelProvider(this).get(AuthenticateViewModel::class.java) + areaViewModel = ViewModelProvider(this).get(AreaViewModel::class.java) + } + + override fun initEvent() { + deviceTypeView.setOnClickListener { + /** + * 获取全部设备类型 + * */ + deviceViewModel.obtainDeviceType() + } + deviceViewModel.typeModel.observe(this, { + if (it.code == 200) { + val authenticatedModel: MutableList = ArrayList() + it.data?.forEach { deviceModel -> + if (deviceModel.value in authenticatedType) { + authenticatedModel.add(deviceModel) + } + } + val sheetBuilder = QMUIBottomSheet.BottomListSheetBuilder(this) + sheetBuilder.setTitle("设备类型") + authenticatedModel.forEach { deviceModel -> + sheetBuilder.addItem(deviceModel.name) + } + sheetBuilder.setGravityCenter(true) + .setOnSheetItemClickListener { dialog, _, position, tag -> + deviceTypeView.text = tag + this.deviceTypeValue = authenticatedModel[position].value.toString() + + dialog.dismiss() + }.build().show() + } + }) + + ownerShipView.setOnClickListener { + authenticateViewModel.obtainOwnerShip("03") + } + authenticateViewModel.resultModel.observe(this, { + if (it.code == 200) { + val ownerShipModel: MutableList = ArrayList() + it.data?.list?.forEach { listBean -> + ownerShipModel.add(listBean) + } + val sheetBuilder = QMUIBottomSheet.BottomListSheetBuilder(this) + sheetBuilder.setTitle("权属单位") + ownerShipModel.forEach { model -> + sheetBuilder.addItem(model.name) + } + sheetBuilder.setGravityCenter(true) + .setOnSheetItemClickListener { dialog, _, position, tag -> + ownerShipView.text = tag + this.deptId = ownerShipModel[position].id.toString() + + dialog.dismiss() + }.build().show() + } + }) + + deviceStateView.setOnClickListener { + QMUIBottomSheet.BottomListSheetBuilder(this) + .setTitle("在线情况") + .addItem("在线") + .addItem("离线") + .setGravityCenter(true) + .setOnSheetItemClickListener { dialog, _, _, tag -> + deviceStateView.text = tag + this.deviceState = if (tag == "在线") { + "1" + } else { + "0" + } + + dialog.dismiss() + }.build().show() + } + + areaView.setOnClickListener { + areaViewModel.obtainArea() + } + areaViewModel.areaModel.observe(this, { + if (it.code == 200) { + val firstLevelArea: MutableList = ArrayList() + val secondLevelArea: MutableList = ArrayList() + val thirdLevelArea: MutableList = ArrayList() + it.data?.forEach { dataBean -> + when (dataBean.level) { + 2 -> firstLevelArea.add(dataBean) + 3 -> secondLevelArea.add(dataBean) + 4 -> thirdLevelArea.add(dataBean) + } + } + + // 绑定区域 + BottomAreaSheet.Builder() + .setContext(this) + .setFirstAreaData(firstLevelArea) + .setSecondAreaData(secondLevelArea) + .setThirdAreaData(thirdLevelArea) + .setOnActionSheetListener(object : BottomAreaSheet.OnActionSheetListener { + override fun onAreaSelected(area: String?, id: String?) { + areaView.text = area + areaId = id.toString() + } + }).build().show() + } + }) + + searchButton.setChangeAlphaWhenPress(true) + searchButton.setOnClickListener { + //页面跳转,将查询参数传过去 + navigatePageTo( + DeviceSearchResultActivity::class.java, addAll( + wellCodeView.text.toString().trim(), + deviceTypeValue, + deptId, + deviceState, + areaId + ) + ) + } + + clearButton.setChangeAlphaWhenPress(true) + clearButton.setOnClickListener { + wellCodeView.setText("") + deviceTypeView.text = "" + ownerShipView.text = "" + deviceStateView.text = "" + areaView.text = "" + } + } +} \ No newline at end of file diff --git a/app/src/main/java/com/casic/qd/smartwell/view/SearchRecordActivity.kt b/app/src/main/java/com/casic/qd/smartwell/view/SearchRecordActivity.kt deleted file mode 100644 index 8cab864..0000000 --- a/app/src/main/java/com/casic/qd/smartwell/view/SearchRecordActivity.kt +++ /dev/null @@ -1,184 +0,0 @@ -package com.casic.qd.smartwell.view - -import androidx.lifecycle.ViewModelProvider -import com.casic.qd.smartwell.R -import com.casic.qd.smartwell.base.BaseActivity -import com.casic.qd.smartwell.extensions.addAll -import com.casic.qd.smartwell.extensions.navigatePageTo -import com.casic.qd.smartwell.model.AreaModel -import com.casic.qd.smartwell.model.DeviceTypeModel -import com.casic.qd.smartwell.model.OwnerShipModel -import com.casic.qd.smartwell.utils.Constant -import com.casic.qd.smartwell.utils.SaveKeyValues -import com.casic.qd.smartwell.vm.AreaViewModel -import com.casic.qd.smartwell.vm.AuthenticateViewModel -import com.casic.qd.smartwell.vm.DeviceViewModel -import com.casic.qd.smartwell.widgets.BottomAreaSheet -import com.google.gson.Gson -import com.google.gson.reflect.TypeToken -import com.qmuiteam.qmui.widget.dialog.QMUIBottomSheet -import kotlinx.android.synthetic.main.activity_search_record.* -import kotlinx.android.synthetic.main.include_base_title.* - -/** - * @author a203 - * @description 记录查询界面 - * @date 2022/2/17 14:33 - * @email 290677893@qq.com - */ -class SearchRecordActivity : BaseActivity() { - - private lateinit var deviceViewModel: DeviceViewModel - private lateinit var authenticateViewModel: AuthenticateViewModel - private lateinit var areaViewModel: AreaViewModel - private var authenticatedType: MutableList = ArrayList() - private var deviceTypeValue = "" - private var deptId = "" - private var deviceState = "" - private var areaId = "" - - override fun initLayoutView(): Int = R.layout.activity_search_record - - override fun setupTopBarLayout() { - titleView.text = "记录查询" - } - - override fun initData() { - val userDeviceJson = SaveKeyValues.getValue(Constant.USER_DEVICE_TYPE, "") as String - if (userDeviceJson.isNotBlank()) { - authenticatedType = Gson().fromJson( - userDeviceJson, object : TypeToken>() {}.type - ) - } - deviceViewModel = ViewModelProvider(this).get(DeviceViewModel::class.java) - authenticateViewModel = ViewModelProvider(this).get(AuthenticateViewModel::class.java) - areaViewModel = ViewModelProvider(this).get(AreaViewModel::class.java) - } - - override fun initEvent() { - deviceTypeView.setOnClickListener { - /** - * 获取全部设备类型 - * */ - deviceViewModel.obtainDeviceType() - } - deviceViewModel.typeModel.observe(this, { - if (it.code == 200) { - val authenticatedModel: MutableList = ArrayList() - it.data?.forEach { deviceModel -> - if (deviceModel.value in authenticatedType) { - authenticatedModel.add(deviceModel) - } - } - val sheetBuilder = QMUIBottomSheet.BottomListSheetBuilder(this) - sheetBuilder.setTitle("设备类型") - authenticatedModel.forEach { deviceModel -> - sheetBuilder.addItem(deviceModel.name) - } - sheetBuilder.setGravityCenter(true) - .setOnSheetItemClickListener { dialog, _, position, tag -> - deviceTypeView.text = tag - this.deviceTypeValue = authenticatedModel[position].value.toString() - - dialog.dismiss() - }.build().show() - } - }) - - ownerShipView.setOnClickListener { - authenticateViewModel.obtainOwnerShip("03") - } - authenticateViewModel.resultModel.observe(this, { - if (it.code == 200) { - val ownerShipModel: MutableList = ArrayList() - it.data?.list?.forEach { listBean -> - ownerShipModel.add(listBean) - } - val sheetBuilder = QMUIBottomSheet.BottomListSheetBuilder(this) - sheetBuilder.setTitle("权属单位") - ownerShipModel.forEach { model -> - sheetBuilder.addItem(model.name) - } - sheetBuilder.setGravityCenter(true) - .setOnSheetItemClickListener { dialog, _, position, tag -> - ownerShipView.text = tag - this.deptId = ownerShipModel[position].id.toString() - - dialog.dismiss() - }.build().show() - } - }) - - deviceStateView.setOnClickListener { - QMUIBottomSheet.BottomListSheetBuilder(this) - .setTitle("在线情况") - .addItem("在线") - .addItem("离线") - .setGravityCenter(true) - .setOnSheetItemClickListener { dialog, _, _, tag -> - deviceStateView.text = tag - this.deviceState = if (tag == "在线") { - "1" - } else { - "0" - } - - dialog.dismiss() - }.build().show() - } - - areaView.setOnClickListener { - areaViewModel.obtainArea() - } - areaViewModel.areaModel.observe(this, { - if (it.code == 200) { - val firstLevelArea: MutableList = ArrayList() - val secondLevelArea: MutableList = ArrayList() - val thirdLevelArea: MutableList = ArrayList() - it.data?.forEach { dataBean -> - when (dataBean.level) { - 2 -> firstLevelArea.add(dataBean) - 3 -> secondLevelArea.add(dataBean) - 4 -> thirdLevelArea.add(dataBean) - } - } - - // 绑定区域 - BottomAreaSheet.Builder() - .setContext(this) - .setFirstAreaData(firstLevelArea) - .setSecondAreaData(secondLevelArea) - .setThirdAreaData(thirdLevelArea) - .setOnActionSheetListener(object : BottomAreaSheet.OnActionSheetListener { - override fun onAreaSelected(area: String?, id: String?) { - areaView.text = area - areaId = id.toString() - } - }).build().show() - } - }) - - searchButton.setChangeAlphaWhenPress(true) - searchButton.setOnClickListener { - //页面跳转,将查询参数传过去 - navigatePageTo( - DeviceSearchResultActivity::class.java, addAll( - wellCodeView.text.toString().trim(), - deviceTypeValue, - deptId, - deviceState, - areaId - ) - ) - } - - clearButton.setChangeAlphaWhenPress(true) - clearButton.setOnClickListener { - wellCodeView.setText("") - deviceTypeView.text = "" - ownerShipView.text = "" - deviceStateView.text = "" - areaView.text = "" - } - } -} \ No newline at end of file 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 21c4286..3272cfe 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 @@ -15,6 +15,7 @@ import com.casic.qd.smartwell.widgets.DateSelectDialog import com.github.mikephil.charting.data.BarEntry import com.github.mikephil.charting.data.PieEntry +import com.jzxiang.pickerview.data.Type import kotlinx.android.synthetic.main.activity_statistics.* import kotlinx.android.synthetic.main.include_base_title.* import java.util.* @@ -97,7 +98,6 @@ 5 -> { DateSelectDialog.Builder() .setContext(context) - .setFragmentManager(supportFragmentManager) .setTitle("选择日期") .setNegativeButton("取消") .setPositiveButton("选好了") @@ -113,7 +113,10 @@ //选择取消就默认加载近7天的数据 periodSpinner.setSelection(3) } - }).build().show() + }) + .setFragmentManager(supportFragmentManager) + .setCalendarType(Type.YEAR_MONTH_DAY) + .build().show() } } } @@ -200,7 +203,6 @@ 5 -> { DateSelectDialog.Builder() .setContext(context) - .setFragmentManager(supportFragmentManager) .setTitle("选择日期") .setNegativeButton("取消") .setPositiveButton("选好了") @@ -216,7 +218,10 @@ //选择取消就默认加载近7天的数据 periodSpinner.setSelection(3) } - }).build().show() + }) + .setFragmentManager(supportFragmentManager) + .setCalendarType(Type.YEAR_MONTH_DAY) + .build().show() } } } diff --git a/app/src/main/java/com/casic/qd/smartwell/view/WaterExpandedActivity.kt b/app/src/main/java/com/casic/qd/smartwell/view/WaterExpandedActivity.kt index 251140d..7a63dea 100644 --- a/app/src/main/java/com/casic/qd/smartwell/view/WaterExpandedActivity.kt +++ b/app/src/main/java/com/casic/qd/smartwell/view/WaterExpandedActivity.kt @@ -13,6 +13,7 @@ import com.casic.qd.smartwell.vm.WaterStatisticsViewModel import com.casic.qd.smartwell.widgets.DateSelectDialog import com.github.mikephil.charting.data.Entry +import com.jzxiang.pickerview.data.Type import kotlinx.android.synthetic.main.activity_water_expanded.* import java.util.* import kotlin.collections.ArrayList @@ -86,7 +87,6 @@ 5 -> { DateSelectDialog.Builder() .setContext(context) - .setFragmentManager(supportFragmentManager) .setTitle("选择日期") .setNegativeButton("取消") .setPositiveButton("选好了") @@ -102,7 +102,10 @@ //选择取消就默认加载近7天的数据 periodSpinner.setSelection(3) } - }).build().show() + }) + .setFragmentManager(supportFragmentManager) + .setCalendarType(Type.YEAR_MONTH_DAY) + .build().show() } } } diff --git a/app/src/main/java/com/casic/qd/smartwell/vm/DeviceViewModel.kt b/app/src/main/java/com/casic/qd/smartwell/vm/DeviceViewModel.kt index 02aefed..9448ade 100644 --- a/app/src/main/java/com/casic/qd/smartwell/vm/DeviceViewModel.kt +++ b/app/src/main/java/com/casic/qd/smartwell/vm/DeviceViewModel.kt @@ -7,8 +7,10 @@ import com.casic.qd.smartwell.extensions.separateResponseCode import com.casic.qd.smartwell.extensions.show import com.casic.qd.smartwell.extensions.toErrorMessage +import com.casic.qd.smartwell.model.DayDataModel import com.casic.qd.smartwell.model.DeviceStatisticsModel import com.casic.qd.smartwell.model.DeviceTypeModel +import com.casic.qd.smartwell.model.TotalDataModel import com.casic.qd.smartwell.utils.retrofit.RetrofitServiceManager import com.google.gson.Gson import com.google.gson.reflect.TypeToken @@ -19,6 +21,8 @@ private val gson = Gson() val resultModel = MutableLiveData() val typeModel = MutableLiveData() + val dayDataModel = MutableLiveData() + val totalDataModel = MutableLiveData() /** * 管网资产统计 @@ -55,4 +59,40 @@ Log.e(kTag, it.toString(), it) "服务器异常".show() }) + + /** + * 获取设备日用水量 + */ + fun obtainSevenDayData(devCode: String?, beginTime: String?, endTime: String?) = launch({ + val response = RetrofitServiceManager.obtainSevenDayData(devCode, beginTime, endTime) + val responseCode = response.separateResponseCode() + if (responseCode == 200) { + dayDataModel.value = gson.fromJson( + response, object : TypeToken() {}.type + ) + } else { + response.toErrorMessage().show() + } + }, { + Log.e(kTag, it.toString(), it) + "服务器异常".show() + }) + + /** + * 获取设备累计用水量 + */ + fun obtainTotalDayData(devCode: String?, beginTime: String?, endTime: String?) = launch({ + val response = RetrofitServiceManager.obtainTotalDayData(devCode, beginTime, endTime) + val responseCode = response.separateResponseCode() + if (responseCode == 200) { + totalDataModel.value = gson.fromJson( + response, object : TypeToken() {}.type + ) + } else { + 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/widgets/DateSelectDialog.kt b/app/src/main/java/com/casic/qd/smartwell/widgets/DateSelectDialog.kt index ec403eb..fda3a03 100644 --- a/app/src/main/java/com/casic/qd/smartwell/widgets/DateSelectDialog.kt +++ b/app/src/main/java/com/casic/qd/smartwell/widgets/DateSelectDialog.kt @@ -9,6 +9,7 @@ import com.casic.qd.smartwell.extensions.convertColor import com.casic.qd.smartwell.extensions.initDialogLayoutParams import com.casic.qd.smartwell.extensions.timestampToDate +import com.casic.qd.smartwell.extensions.timestampToTime import com.casic.qd.smartwell.utils.Constant import com.jzxiang.pickerview.TimePickerDialog import com.jzxiang.pickerview.data.Type @@ -18,30 +19,27 @@ builder.context, R.style.UserDefinedDialogStyle ) { - private val fragmentManager: FragmentManager = builder.fragmentManager private val title: String = builder.title private val negativeBtn: String = builder.negativeBtn private val positiveBtn: String = builder.positiveBtn private val listener: OnDialogButtonClickListener = builder.listener + private val fragmentManager: FragmentManager = builder.fragmentManager + private val type: Type = builder.type class Builder { lateinit var context: Context - lateinit var fragmentManager: FragmentManager lateinit var title: String lateinit var negativeBtn: String lateinit var positiveBtn: String lateinit var listener: OnDialogButtonClickListener + lateinit var fragmentManager: FragmentManager + lateinit var type: Type fun setContext(context: Context): Builder { this.context = context return this } - fun setFragmentManager(fragmentManager: FragmentManager): Builder { - this.fragmentManager = fragmentManager - return this - } - fun setTitle(title: String): Builder { this.title = title return this @@ -62,6 +60,16 @@ return this } + fun setFragmentManager(fragmentManager: FragmentManager): Builder { + this.fragmentManager = fragmentManager + return this + } + + fun setCalendarType(calendarType: Type): Builder { + this.type = calendarType + return this + } + fun build(): DateSelectDialog { return DateSelectDialog(this) } @@ -69,7 +77,7 @@ override fun onCreate(savedInstanceState: Bundle?) { super.onCreate(savedInstanceState) - this.initDialogLayoutParams(Gravity.CENTER, R.style.UserDefinedAnimation, 0.8f) + this.initDialogLayoutParams(Gravity.CENTER, R.style.UserDefinedAnimation, 0.85f) setContentView(R.layout.dialog_select_date) setCancelable(false) setCanceledOnTouchOutside(false) @@ -86,10 +94,15 @@ .setCyclic(false) .setMinMillseconds(System.currentTimeMillis() - Constant.FIVE_YEARS) .setMaxMillseconds(System.currentTimeMillis()) - .setType(Type.YEAR_MONTH_DAY) + .setType(type) .setCallBack { _: TimePickerDialog?, millSeconds: Long -> - startDateView.setText(millSeconds.timestampToDate()) - }.build().show(fragmentManager, "YEAR_MONTH_DAY") + val textValue = if (type == Type.ALL) { + millSeconds.timestampToTime() + } else { + millSeconds.timestampToDate() + } + startDateView.setText(textValue) + }.build().show(fragmentManager, "DateSelectDialog") } endDateView.setOnClickListener { @@ -100,10 +113,15 @@ .setCyclic(false) .setMinMillseconds(System.currentTimeMillis() - Constant.FIVE_YEARS) .setMaxMillseconds(System.currentTimeMillis()) - .setType(Type.YEAR_MONTH_DAY) + .setType(type) .setCallBack { _: TimePickerDialog?, millSeconds: Long -> - endDateView.setText(millSeconds.timestampToDate()) - }.build().show(fragmentManager, "YEAR_MONTH_DAY") + val textValue = if (type == Type.ALL) { + millSeconds.timestampToTime() + } else { + millSeconds.timestampToDate() + } + endDateView.setText(textValue) + }.build().show(fragmentManager, "DateSelectDialog") } dialogCancelButton.text = negativeBtn diff --git a/app/src/main/res/drawable/ic_calendar.xml b/app/src/main/res/drawable/ic_calendar.xml new file mode 100644 index 0000000..a314f72 --- /dev/null +++ b/app/src/main/res/drawable/ic_calendar.xml @@ -0,0 +1,12 @@ + + + + diff --git a/app/src/main/res/layout/activity_data_search.xml b/app/src/main/res/layout/activity_data_search.xml new file mode 100644 index 0000000..77d9ef6 --- /dev/null +++ b/app/src/main/res/layout/activity_data_search.xml @@ -0,0 +1,6 @@ + + + + \ No newline at end of file diff --git a/app/src/main/res/layout/activity_device_data_detail.xml b/app/src/main/res/layout/activity_device_data_detail.xml new file mode 100644 index 0000000..700b1de --- /dev/null +++ b/app/src/main/res/layout/activity_device_data_detail.xml @@ -0,0 +1,78 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/app/src/main/res/layout/activity_device_detail.xml b/app/src/main/res/layout/activity_device_detail.xml deleted file mode 100644 index 7ead47b..0000000 --- a/app/src/main/res/layout/activity_device_detail.xml +++ /dev/null @@ -1,32 +0,0 @@ - - - - - - - - - - - - - - - \ No newline at end of file diff --git a/app/src/main/res/layout/activity_device_search.xml b/app/src/main/res/layout/activity_device_search.xml new file mode 100644 index 0000000..ff2d746 --- /dev/null +++ b/app/src/main/res/layout/activity_device_search.xml @@ -0,0 +1,160 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/app/src/main/res/layout/activity_search_record.xml b/app/src/main/res/layout/activity_search_record.xml deleted file mode 100644 index 7ab2795..0000000 --- a/app/src/main/res/layout/activity_search_record.xml +++ /dev/null @@ -1,160 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - \ No newline at end of file diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml index 82386c9..3832c68 100644 --- a/app/src/main/AndroidManifest.xml +++ b/app/src/main/AndroidManifest.xml @@ -48,7 +48,7 @@ - + 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 216e7cc..f53e831 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,6 +15,14 @@ return dateFormat.format(calendar.time) } +fun Long.timestampToLastWeekTime(): String { + val dateFormat = SimpleDateFormat("yyyy-MM-dd HH:mm:ss", Locale.CHINA) + val calendar = Calendar.getInstance() + calendar.time = Date(this) + calendar.set(Calendar.DAY_OF_YEAR, calendar.get(Calendar.DAY_OF_YEAR) - 6) + return dateFormat.format(calendar.time) +} + fun Long.timestampToLastMonthDate(): String { val dateFormat = SimpleDateFormat("yyyy-MM-dd", Locale.CHINA) val calendar = Calendar.getInstance() diff --git a/app/src/main/java/com/casic/qd/smartwell/model/DayDataModel.kt b/app/src/main/java/com/casic/qd/smartwell/model/DayDataModel.kt new file mode 100644 index 0000000..18d1399 --- /dev/null +++ b/app/src/main/java/com/casic/qd/smartwell/model/DayDataModel.kt @@ -0,0 +1,13 @@ +package com.casic.qd.smartwell.model + +class DayDataModel { + var code = 0 + var data: List? = null + var message: String? = null + var isSuccess = false + + class DataBean { + var time: String? = null + var value: String? = null + } +} \ No newline at end of file diff --git a/app/src/main/java/com/casic/qd/smartwell/model/TotalDataModel.kt b/app/src/main/java/com/casic/qd/smartwell/model/TotalDataModel.kt new file mode 100644 index 0000000..30bf829 --- /dev/null +++ b/app/src/main/java/com/casic/qd/smartwell/model/TotalDataModel.kt @@ -0,0 +1,14 @@ +package com.casic.qd.smartwell.model + +class TotalDataModel { + var code = 0 + var data: List? = null + var message: String? = null + var isSuccess = false + + class DataBean { + var total: String? = null + var deviceState: String? = null + var uptime: String? = null + } +} \ No newline at end of file diff --git a/app/src/main/java/com/casic/qd/smartwell/utils/retrofit/RetrofitService.kt b/app/src/main/java/com/casic/qd/smartwell/utils/retrofit/RetrofitService.kt index c5bf469..0c80ee9 100644 --- a/app/src/main/java/com/casic/qd/smartwell/utils/retrofit/RetrofitService.kt +++ b/app/src/main/java/com/casic/qd/smartwell/utils/retrofit/RetrofitService.kt @@ -202,4 +202,26 @@ @Query("offset") offset: Int, @Query("limit") limit: Int ): String + + /** + * 获取设备日用水量 + * */ + @GET("/device/sevenDayData") + suspend fun obtainSevenDayData( + @Header("token") token: String, + @Query("devCode") devCode: String?, + @Query("beginTime") beginTime: String?, + @Query("endTime") endTime: String? + ): String + + /** + * 获取设备日用水量 + * */ + @GET("/device/totalData") + suspend fun obtainTotalDayData( + @Header("token") token: String, + @Query("devCode") devCode: String?, + @Query("beginTime") beginTime: String?, + @Query("endTime") endTime: String? + ): String } \ No newline at end of file diff --git a/app/src/main/java/com/casic/qd/smartwell/utils/retrofit/RetrofitServiceManager.kt b/app/src/main/java/com/casic/qd/smartwell/utils/retrofit/RetrofitServiceManager.kt index 6f728e0..a8b320f 100644 --- a/app/src/main/java/com/casic/qd/smartwell/utils/retrofit/RetrofitServiceManager.kt +++ b/app/src/main/java/com/casic/qd/smartwell/utils/retrofit/RetrofitServiceManager.kt @@ -204,4 +204,18 @@ Constant.PAGE_LIMIT ) } + + /** + * 获取设备日用水量 + */ + suspend fun obtainSevenDayData(devCode: String?, beginTime: String?, endTime: String?): String { + return api.obtainSevenDayData(AuthenticationHelper.token!!, devCode, beginTime, endTime) + } + + /** + * 获取设备累计用水量 + */ + suspend fun obtainTotalDayData(devCode: String?, beginTime: String?, endTime: String?): String { + return api.obtainTotalDayData(AuthenticationHelper.token!!, devCode, beginTime, endTime) + } } \ No newline at end of file diff --git a/app/src/main/java/com/casic/qd/smartwell/view/DeviceDataDetailActivity.kt b/app/src/main/java/com/casic/qd/smartwell/view/DeviceDataDetailActivity.kt index 7029d17..a8a2695 100644 --- a/app/src/main/java/com/casic/qd/smartwell/view/DeviceDataDetailActivity.kt +++ b/app/src/main/java/com/casic/qd/smartwell/view/DeviceDataDetailActivity.kt @@ -1,22 +1,109 @@ package com.casic.qd.smartwell.view +import androidx.lifecycle.ViewModelProvider import com.casic.qd.smartwell.R import com.casic.qd.smartwell.base.BaseActivity -import kotlinx.android.synthetic.main.include_base_title.* +import com.casic.qd.smartwell.extensions.convertColor +import com.casic.qd.smartwell.extensions.timestampToLastWeekTime +import com.casic.qd.smartwell.extensions.timestampToTime +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.DeviceViewModel +import com.casic.qd.smartwell.widgets.DateSelectDialog +import com.github.mikephil.charting.data.Entry +import com.jzxiang.pickerview.data.Type +import kotlinx.android.synthetic.main.activity_device_data_detail.* +import kotlinx.android.synthetic.main.activity_main.rightOptionView +import kotlinx.android.synthetic.main.activity_main.titleView class DeviceDataDetailActivity : BaseActivity() { - override fun initLayoutView(): Int = R.layout.activity_device_detail + private val kTag = "DeviceDataDetailActivity" + private lateinit var deviceCode: String + private lateinit var deviceViewModel: DeviceViewModel + + override fun initLayoutView(): Int = R.layout.activity_device_data_detail override fun setupTopBarLayout() { - titleView.text = "历史数据" + deviceCode = intent.getStringExtra(Constant.INTENT_PARAM)!! + titleView.text = String.format("${deviceCode}历史数据") } override fun initData() { - + deviceViewModel = ViewModelProvider(this).get(DeviceViewModel::class.java) } override fun initEvent() { + rightOptionView.setOnClickListener { + DateSelectDialog.Builder() + .setContext(this) + .setTitle("选择日期") + .setNegativeButton("取消") + .setPositiveButton("选好了") + .setOnDialogButtonClickListener(object : + DateSelectDialog.OnDialogButtonClickListener { + override fun onConfirmClick(startDate: String, endDate: String) { + deviceViewModel.obtainSevenDayData(deviceCode, startDate, endDate) + deviceViewModel.obtainTotalDayData(deviceCode, startDate, endDate) + } + override fun onCancelClick() { + //选择取消就默认加载近7天的数据 + val time = System.currentTimeMillis() + val startTime = time.timestampToLastWeekTime() + val endTime = time.timestampToTime() + deviceViewModel.obtainSevenDayData(deviceCode, startTime, endTime) + deviceViewModel.obtainTotalDayData(deviceCode, startTime, endTime) + } + }) + .setFragmentManager(supportFragmentManager) + .setCalendarType(Type.ALL) + .build().show() + } + + //默认加载近一周的数据 + val time = System.currentTimeMillis() + val startTime = time.timestampToLastWeekTime() + val endTime = time.timestampToTime() + deviceViewModel.obtainSevenDayData(deviceCode, startTime, endTime) + deviceViewModel.dayDataModel.observe(this, { + if (it.code == 200) { + val entryModels: MutableList = ArrayList() + val xAxisDate: MutableList = ArrayList() + val entries: ArrayList = ArrayList() + val entryModel = LineChartEntryModel() + + entryModel.lineColor = Constant.COLORS[7].convertColor() + it.data?.forEachIndexed { index, dataBean -> + val split = dataBean.time.toString().split("-") + xAxisDate.add("${split[1]}/${split[2]}") + + entries.add(Entry(index.toFloat(), dataBean.value!!.toFloat(), "日用水量")) + } + entryModel.entryList = entries + entryModels.add(entryModel) + ChartViewHelper.setLineChartData(dayWaterLineChart, xAxisDate, entryModels) + } + }) + + deviceViewModel.obtainTotalDayData(deviceCode, startTime, endTime) + deviceViewModel.totalDataModel.observe(this, { + val entryModels: MutableList = ArrayList() + val xAxisDate: MutableList = ArrayList() + val entries: ArrayList = ArrayList() + val entryModel = LineChartEntryModel() + + entryModel.lineColor = Constant.COLORS[7].convertColor() + it.data?.forEachIndexed { index, dataBean -> + val split = dataBean.uptime.toString().split(" ")[0].split("-") + xAxisDate.add("${split[1]}/${split[2]}") + + entries.add(Entry(index.toFloat(), dataBean.total!!.toFloat(), "总用水量")) + } + entryModel.entryList = entries + entryModels.add(entryModel) + ChartViewHelper.setLineChartData(totalWaterLineChart, xAxisDate, entryModels) + }) } } \ No newline at end of file diff --git a/app/src/main/java/com/casic/qd/smartwell/view/MainActivity.kt b/app/src/main/java/com/casic/qd/smartwell/view/MainActivity.kt index 02435a3..3f4bb3c 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 @@ -1,7 +1,6 @@ package com.casic.qd.smartwell.view import android.content.Context -import android.content.Intent import android.os.Handler import android.os.Looper import android.os.Message @@ -22,6 +21,7 @@ import com.casic.qd.smartwell.vm.WaterStatisticsViewModel import com.github.mikephil.charting.data.Entry import com.pengxh.app.multilib.widget.dialog.AlertControlDialog +import com.pengxh.app.multilib.widget.dialog.BottomActionSheet import com.youth.banner.Banner import com.youth.banner.adapter.BannerImageAdapter import com.youth.banner.holder.BannerImageHolder @@ -100,9 +100,20 @@ HomeRecycleAdapter.OnGridItemClickListener { override fun onClick(position: Int) { when (position) { - 0 -> startActivity(Intent(context, MapActivity::class.java)) - 1 -> startActivity(Intent(context, SearchRecordActivity::class.java)) - 2 -> startActivity(Intent(context, StatisticsActivity::class.java)) + 0 -> context.navigatePageTo(MapActivity::class.java) + 1 -> { + BottomActionSheet.Builder() + .setContext(context) + .setActionItemTitles(arrayOf("设备", "数据")) + .setOnActionSheetListener { index -> + when (index) { + 0 -> context.navigatePageTo(SearchDeviceActivity::class.java) + 1 -> context.navigatePageTo(SearchDataActivity::class.java) + } + }.build().show() + + } + 2 -> context.navigatePageTo(StatisticsActivity::class.java) } } }) diff --git a/app/src/main/java/com/casic/qd/smartwell/view/SearchAlarmActivity.kt b/app/src/main/java/com/casic/qd/smartwell/view/SearchAlarmActivity.kt index 8f54163..5285a9f 100644 --- a/app/src/main/java/com/casic/qd/smartwell/view/SearchAlarmActivity.kt +++ b/app/src/main/java/com/casic/qd/smartwell/view/SearchAlarmActivity.kt @@ -13,11 +13,6 @@ import com.jzxiang.pickerview.data.Type import com.qmuiteam.qmui.widget.dialog.QMUIBottomSheet.BottomListSheetBuilder import kotlinx.android.synthetic.main.activity_alarm_search.* -import kotlinx.android.synthetic.main.activity_alarm_search.areaView -import kotlinx.android.synthetic.main.activity_alarm_search.clearButton -import kotlinx.android.synthetic.main.activity_alarm_search.searchButton -import kotlinx.android.synthetic.main.activity_alarm_search.wellCodeView -import kotlinx.android.synthetic.main.activity_search_record.* import kotlinx.android.synthetic.main.include_base_title.* class SearchAlarmActivity : BaseActivity() { diff --git a/app/src/main/java/com/casic/qd/smartwell/view/SearchDataActivity.kt b/app/src/main/java/com/casic/qd/smartwell/view/SearchDataActivity.kt new file mode 100644 index 0000000..e6a38e4 --- /dev/null +++ b/app/src/main/java/com/casic/qd/smartwell/view/SearchDataActivity.kt @@ -0,0 +1,168 @@ +package com.casic.qd.smartwell.view + +import com.casic.qd.smartwell.R +import com.casic.qd.smartwell.base.BaseActivity +import kotlinx.android.synthetic.main.include_base_title.* + +/** + * @author a203 + * @description 记录查询界面 + * @date 2022/2/17 14:33 + * @email 290677893@qq.com + */ +class SearchDataActivity : BaseActivity() { + +// private lateinit var deviceViewModel: DeviceViewModel +// private lateinit var authenticateViewModel: AuthenticateViewModel +// private lateinit var areaViewModel: AreaViewModel +// private var authenticatedType: MutableList = ArrayList() +// private var deviceTypeValue = "" +// private var deptId = "" +// private var deviceState = "" +// private var areaId = "" + + override fun initLayoutView(): Int = R.layout.activity_data_search + + override fun setupTopBarLayout() { + titleView.text = "数据查询" + } + + override fun initData() { +// val userDeviceJson = SaveKeyValues.getValue(Constant.USER_DEVICE_TYPE, "") as String +// if (userDeviceJson.isNotBlank()) { +// authenticatedType = Gson().fromJson( +// userDeviceJson, object : TypeToken>() {}.type +// ) +// } +// deviceViewModel = ViewModelProvider(this).get(DeviceViewModel::class.java) +// authenticateViewModel = ViewModelProvider(this).get(AuthenticateViewModel::class.java) +// areaViewModel = ViewModelProvider(this).get(AreaViewModel::class.java) + } + + override fun initEvent() { +// deviceTypeView.setOnClickListener { +// /** +// * 获取全部设备类型 +// * */ +// deviceViewModel.obtainDeviceType() +// } +// deviceViewModel.typeModel.observe(this, { +// if (it.code == 200) { +// val authenticatedModel: MutableList = ArrayList() +// it.data?.forEach { deviceModel -> +// if (deviceModel.value in authenticatedType) { +// authenticatedModel.add(deviceModel) +// } +// } +// val sheetBuilder = QMUIBottomSheet.BottomListSheetBuilder(this) +// sheetBuilder.setTitle("设备类型") +// authenticatedModel.forEach { deviceModel -> +// sheetBuilder.addItem(deviceModel.name) +// } +// sheetBuilder.setGravityCenter(true) +// .setOnSheetItemClickListener { dialog, _, position, tag -> +// deviceTypeView.text = tag +// this.deviceTypeValue = authenticatedModel[position].value.toString() +// +// dialog.dismiss() +// }.build().show() +// } +// }) +// +// ownerShipView.setOnClickListener { +// authenticateViewModel.obtainOwnerShip("03") +// } +// authenticateViewModel.resultModel.observe(this, { +// if (it.code == 200) { +// val ownerShipModel: MutableList = ArrayList() +// it.data?.list?.forEach { listBean -> +// ownerShipModel.add(listBean) +// } +// val sheetBuilder = QMUIBottomSheet.BottomListSheetBuilder(this) +// sheetBuilder.setTitle("权属单位") +// ownerShipModel.forEach { model -> +// sheetBuilder.addItem(model.name) +// } +// sheetBuilder.setGravityCenter(true) +// .setOnSheetItemClickListener { dialog, _, position, tag -> +// ownerShipView.text = tag +// this.deptId = ownerShipModel[position].id.toString() +// +// dialog.dismiss() +// }.build().show() +// } +// }) +// +// deviceStateView.setOnClickListener { +// QMUIBottomSheet.BottomListSheetBuilder(this) +// .setTitle("在线情况") +// .addItem("在线") +// .addItem("离线") +// .setGravityCenter(true) +// .setOnSheetItemClickListener { dialog, _, _, tag -> +// deviceStateView.text = tag +// this.deviceState = if (tag == "在线") { +// "1" +// } else { +// "0" +// } +// +// dialog.dismiss() +// }.build().show() +// } +// +// areaView.setOnClickListener { +// areaViewModel.obtainArea() +// } +// areaViewModel.areaModel.observe(this, { +// if (it.code == 200) { +// val firstLevelArea: MutableList = ArrayList() +// val secondLevelArea: MutableList = ArrayList() +// val thirdLevelArea: MutableList = ArrayList() +// it.data?.forEach { dataBean -> +// when (dataBean.level) { +// 2 -> firstLevelArea.add(dataBean) +// 3 -> secondLevelArea.add(dataBean) +// 4 -> thirdLevelArea.add(dataBean) +// } +// } +// +// // 绑定区域 +// BottomAreaSheet.Builder() +// .setContext(this) +// .setFirstAreaData(firstLevelArea) +// .setSecondAreaData(secondLevelArea) +// .setThirdAreaData(thirdLevelArea) +// .setOnActionSheetListener(object : BottomAreaSheet.OnActionSheetListener { +// override fun onAreaSelected(area: String?, id: String?) { +// areaView.text = area +// areaId = id.toString() +// } +// }).build().show() +// } +// }) +// +// searchButton.setChangeAlphaWhenPress(true) +// searchButton.setOnClickListener { +// //页面跳转,将查询参数传过去 +// navigatePageTo( +// DeviceSearchResultActivity::class.java, addAll( +// wellCodeView.text.toString().trim(), +// deviceTypeValue, +// deptId, +// deviceState, +// areaId +// ) +// ) +// } +// +// clearButton.setChangeAlphaWhenPress(true) +// clearButton.setOnClickListener { +// wellCodeView.setText("") +// deviceTypeView.text = "" +// ownerShipView.text = "" +// deviceStateView.text = "" +// areaView.text = "" +// } + } +} \ No newline at end of file diff --git a/app/src/main/java/com/casic/qd/smartwell/view/SearchDeviceActivity.kt b/app/src/main/java/com/casic/qd/smartwell/view/SearchDeviceActivity.kt new file mode 100644 index 0000000..cf0c05f --- /dev/null +++ b/app/src/main/java/com/casic/qd/smartwell/view/SearchDeviceActivity.kt @@ -0,0 +1,184 @@ +package com.casic.qd.smartwell.view + +import androidx.lifecycle.ViewModelProvider +import com.casic.qd.smartwell.R +import com.casic.qd.smartwell.base.BaseActivity +import com.casic.qd.smartwell.extensions.addAll +import com.casic.qd.smartwell.extensions.navigatePageTo +import com.casic.qd.smartwell.model.AreaModel +import com.casic.qd.smartwell.model.DeviceTypeModel +import com.casic.qd.smartwell.model.OwnerShipModel +import com.casic.qd.smartwell.utils.Constant +import com.casic.qd.smartwell.utils.SaveKeyValues +import com.casic.qd.smartwell.vm.AreaViewModel +import com.casic.qd.smartwell.vm.AuthenticateViewModel +import com.casic.qd.smartwell.vm.DeviceViewModel +import com.casic.qd.smartwell.widgets.BottomAreaSheet +import com.google.gson.Gson +import com.google.gson.reflect.TypeToken +import com.qmuiteam.qmui.widget.dialog.QMUIBottomSheet +import kotlinx.android.synthetic.main.activity_device_search.* +import kotlinx.android.synthetic.main.include_base_title.* + +/** + * @author a203 + * @description 记录查询界面 + * @date 2022/2/17 14:33 + * @email 290677893@qq.com + */ +class SearchDeviceActivity : BaseActivity() { + + private lateinit var deviceViewModel: DeviceViewModel + private lateinit var authenticateViewModel: AuthenticateViewModel + private lateinit var areaViewModel: AreaViewModel + private var authenticatedType: MutableList = ArrayList() + private var deviceTypeValue = "" + private var deptId = "" + private var deviceState = "" + private var areaId = "" + + override fun initLayoutView(): Int = R.layout.activity_device_search + + override fun setupTopBarLayout() { + titleView.text = "设备查询" + } + + override fun initData() { + val userDeviceJson = SaveKeyValues.getValue(Constant.USER_DEVICE_TYPE, "") as String + if (userDeviceJson.isNotBlank()) { + authenticatedType = Gson().fromJson( + userDeviceJson, object : TypeToken>() {}.type + ) + } + deviceViewModel = ViewModelProvider(this).get(DeviceViewModel::class.java) + authenticateViewModel = ViewModelProvider(this).get(AuthenticateViewModel::class.java) + areaViewModel = ViewModelProvider(this).get(AreaViewModel::class.java) + } + + override fun initEvent() { + deviceTypeView.setOnClickListener { + /** + * 获取全部设备类型 + * */ + deviceViewModel.obtainDeviceType() + } + deviceViewModel.typeModel.observe(this, { + if (it.code == 200) { + val authenticatedModel: MutableList = ArrayList() + it.data?.forEach { deviceModel -> + if (deviceModel.value in authenticatedType) { + authenticatedModel.add(deviceModel) + } + } + val sheetBuilder = QMUIBottomSheet.BottomListSheetBuilder(this) + sheetBuilder.setTitle("设备类型") + authenticatedModel.forEach { deviceModel -> + sheetBuilder.addItem(deviceModel.name) + } + sheetBuilder.setGravityCenter(true) + .setOnSheetItemClickListener { dialog, _, position, tag -> + deviceTypeView.text = tag + this.deviceTypeValue = authenticatedModel[position].value.toString() + + dialog.dismiss() + }.build().show() + } + }) + + ownerShipView.setOnClickListener { + authenticateViewModel.obtainOwnerShip("03") + } + authenticateViewModel.resultModel.observe(this, { + if (it.code == 200) { + val ownerShipModel: MutableList = ArrayList() + it.data?.list?.forEach { listBean -> + ownerShipModel.add(listBean) + } + val sheetBuilder = QMUIBottomSheet.BottomListSheetBuilder(this) + sheetBuilder.setTitle("权属单位") + ownerShipModel.forEach { model -> + sheetBuilder.addItem(model.name) + } + sheetBuilder.setGravityCenter(true) + .setOnSheetItemClickListener { dialog, _, position, tag -> + ownerShipView.text = tag + this.deptId = ownerShipModel[position].id.toString() + + dialog.dismiss() + }.build().show() + } + }) + + deviceStateView.setOnClickListener { + QMUIBottomSheet.BottomListSheetBuilder(this) + .setTitle("在线情况") + .addItem("在线") + .addItem("离线") + .setGravityCenter(true) + .setOnSheetItemClickListener { dialog, _, _, tag -> + deviceStateView.text = tag + this.deviceState = if (tag == "在线") { + "1" + } else { + "0" + } + + dialog.dismiss() + }.build().show() + } + + areaView.setOnClickListener { + areaViewModel.obtainArea() + } + areaViewModel.areaModel.observe(this, { + if (it.code == 200) { + val firstLevelArea: MutableList = ArrayList() + val secondLevelArea: MutableList = ArrayList() + val thirdLevelArea: MutableList = ArrayList() + it.data?.forEach { dataBean -> + when (dataBean.level) { + 2 -> firstLevelArea.add(dataBean) + 3 -> secondLevelArea.add(dataBean) + 4 -> thirdLevelArea.add(dataBean) + } + } + + // 绑定区域 + BottomAreaSheet.Builder() + .setContext(this) + .setFirstAreaData(firstLevelArea) + .setSecondAreaData(secondLevelArea) + .setThirdAreaData(thirdLevelArea) + .setOnActionSheetListener(object : BottomAreaSheet.OnActionSheetListener { + override fun onAreaSelected(area: String?, id: String?) { + areaView.text = area + areaId = id.toString() + } + }).build().show() + } + }) + + searchButton.setChangeAlphaWhenPress(true) + searchButton.setOnClickListener { + //页面跳转,将查询参数传过去 + navigatePageTo( + DeviceSearchResultActivity::class.java, addAll( + wellCodeView.text.toString().trim(), + deviceTypeValue, + deptId, + deviceState, + areaId + ) + ) + } + + clearButton.setChangeAlphaWhenPress(true) + clearButton.setOnClickListener { + wellCodeView.setText("") + deviceTypeView.text = "" + ownerShipView.text = "" + deviceStateView.text = "" + areaView.text = "" + } + } +} \ No newline at end of file diff --git a/app/src/main/java/com/casic/qd/smartwell/view/SearchRecordActivity.kt b/app/src/main/java/com/casic/qd/smartwell/view/SearchRecordActivity.kt deleted file mode 100644 index 8cab864..0000000 --- a/app/src/main/java/com/casic/qd/smartwell/view/SearchRecordActivity.kt +++ /dev/null @@ -1,184 +0,0 @@ -package com.casic.qd.smartwell.view - -import androidx.lifecycle.ViewModelProvider -import com.casic.qd.smartwell.R -import com.casic.qd.smartwell.base.BaseActivity -import com.casic.qd.smartwell.extensions.addAll -import com.casic.qd.smartwell.extensions.navigatePageTo -import com.casic.qd.smartwell.model.AreaModel -import com.casic.qd.smartwell.model.DeviceTypeModel -import com.casic.qd.smartwell.model.OwnerShipModel -import com.casic.qd.smartwell.utils.Constant -import com.casic.qd.smartwell.utils.SaveKeyValues -import com.casic.qd.smartwell.vm.AreaViewModel -import com.casic.qd.smartwell.vm.AuthenticateViewModel -import com.casic.qd.smartwell.vm.DeviceViewModel -import com.casic.qd.smartwell.widgets.BottomAreaSheet -import com.google.gson.Gson -import com.google.gson.reflect.TypeToken -import com.qmuiteam.qmui.widget.dialog.QMUIBottomSheet -import kotlinx.android.synthetic.main.activity_search_record.* -import kotlinx.android.synthetic.main.include_base_title.* - -/** - * @author a203 - * @description 记录查询界面 - * @date 2022/2/17 14:33 - * @email 290677893@qq.com - */ -class SearchRecordActivity : BaseActivity() { - - private lateinit var deviceViewModel: DeviceViewModel - private lateinit var authenticateViewModel: AuthenticateViewModel - private lateinit var areaViewModel: AreaViewModel - private var authenticatedType: MutableList = ArrayList() - private var deviceTypeValue = "" - private var deptId = "" - private var deviceState = "" - private var areaId = "" - - override fun initLayoutView(): Int = R.layout.activity_search_record - - override fun setupTopBarLayout() { - titleView.text = "记录查询" - } - - override fun initData() { - val userDeviceJson = SaveKeyValues.getValue(Constant.USER_DEVICE_TYPE, "") as String - if (userDeviceJson.isNotBlank()) { - authenticatedType = Gson().fromJson( - userDeviceJson, object : TypeToken>() {}.type - ) - } - deviceViewModel = ViewModelProvider(this).get(DeviceViewModel::class.java) - authenticateViewModel = ViewModelProvider(this).get(AuthenticateViewModel::class.java) - areaViewModel = ViewModelProvider(this).get(AreaViewModel::class.java) - } - - override fun initEvent() { - deviceTypeView.setOnClickListener { - /** - * 获取全部设备类型 - * */ - deviceViewModel.obtainDeviceType() - } - deviceViewModel.typeModel.observe(this, { - if (it.code == 200) { - val authenticatedModel: MutableList = ArrayList() - it.data?.forEach { deviceModel -> - if (deviceModel.value in authenticatedType) { - authenticatedModel.add(deviceModel) - } - } - val sheetBuilder = QMUIBottomSheet.BottomListSheetBuilder(this) - sheetBuilder.setTitle("设备类型") - authenticatedModel.forEach { deviceModel -> - sheetBuilder.addItem(deviceModel.name) - } - sheetBuilder.setGravityCenter(true) - .setOnSheetItemClickListener { dialog, _, position, tag -> - deviceTypeView.text = tag - this.deviceTypeValue = authenticatedModel[position].value.toString() - - dialog.dismiss() - }.build().show() - } - }) - - ownerShipView.setOnClickListener { - authenticateViewModel.obtainOwnerShip("03") - } - authenticateViewModel.resultModel.observe(this, { - if (it.code == 200) { - val ownerShipModel: MutableList = ArrayList() - it.data?.list?.forEach { listBean -> - ownerShipModel.add(listBean) - } - val sheetBuilder = QMUIBottomSheet.BottomListSheetBuilder(this) - sheetBuilder.setTitle("权属单位") - ownerShipModel.forEach { model -> - sheetBuilder.addItem(model.name) - } - sheetBuilder.setGravityCenter(true) - .setOnSheetItemClickListener { dialog, _, position, tag -> - ownerShipView.text = tag - this.deptId = ownerShipModel[position].id.toString() - - dialog.dismiss() - }.build().show() - } - }) - - deviceStateView.setOnClickListener { - QMUIBottomSheet.BottomListSheetBuilder(this) - .setTitle("在线情况") - .addItem("在线") - .addItem("离线") - .setGravityCenter(true) - .setOnSheetItemClickListener { dialog, _, _, tag -> - deviceStateView.text = tag - this.deviceState = if (tag == "在线") { - "1" - } else { - "0" - } - - dialog.dismiss() - }.build().show() - } - - areaView.setOnClickListener { - areaViewModel.obtainArea() - } - areaViewModel.areaModel.observe(this, { - if (it.code == 200) { - val firstLevelArea: MutableList = ArrayList() - val secondLevelArea: MutableList = ArrayList() - val thirdLevelArea: MutableList = ArrayList() - it.data?.forEach { dataBean -> - when (dataBean.level) { - 2 -> firstLevelArea.add(dataBean) - 3 -> secondLevelArea.add(dataBean) - 4 -> thirdLevelArea.add(dataBean) - } - } - - // 绑定区域 - BottomAreaSheet.Builder() - .setContext(this) - .setFirstAreaData(firstLevelArea) - .setSecondAreaData(secondLevelArea) - .setThirdAreaData(thirdLevelArea) - .setOnActionSheetListener(object : BottomAreaSheet.OnActionSheetListener { - override fun onAreaSelected(area: String?, id: String?) { - areaView.text = area - areaId = id.toString() - } - }).build().show() - } - }) - - searchButton.setChangeAlphaWhenPress(true) - searchButton.setOnClickListener { - //页面跳转,将查询参数传过去 - navigatePageTo( - DeviceSearchResultActivity::class.java, addAll( - wellCodeView.text.toString().trim(), - deviceTypeValue, - deptId, - deviceState, - areaId - ) - ) - } - - clearButton.setChangeAlphaWhenPress(true) - clearButton.setOnClickListener { - wellCodeView.setText("") - deviceTypeView.text = "" - ownerShipView.text = "" - deviceStateView.text = "" - areaView.text = "" - } - } -} \ No newline at end of file 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 21c4286..3272cfe 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 @@ -15,6 +15,7 @@ import com.casic.qd.smartwell.widgets.DateSelectDialog import com.github.mikephil.charting.data.BarEntry import com.github.mikephil.charting.data.PieEntry +import com.jzxiang.pickerview.data.Type import kotlinx.android.synthetic.main.activity_statistics.* import kotlinx.android.synthetic.main.include_base_title.* import java.util.* @@ -97,7 +98,6 @@ 5 -> { DateSelectDialog.Builder() .setContext(context) - .setFragmentManager(supportFragmentManager) .setTitle("选择日期") .setNegativeButton("取消") .setPositiveButton("选好了") @@ -113,7 +113,10 @@ //选择取消就默认加载近7天的数据 periodSpinner.setSelection(3) } - }).build().show() + }) + .setFragmentManager(supportFragmentManager) + .setCalendarType(Type.YEAR_MONTH_DAY) + .build().show() } } } @@ -200,7 +203,6 @@ 5 -> { DateSelectDialog.Builder() .setContext(context) - .setFragmentManager(supportFragmentManager) .setTitle("选择日期") .setNegativeButton("取消") .setPositiveButton("选好了") @@ -216,7 +218,10 @@ //选择取消就默认加载近7天的数据 periodSpinner.setSelection(3) } - }).build().show() + }) + .setFragmentManager(supportFragmentManager) + .setCalendarType(Type.YEAR_MONTH_DAY) + .build().show() } } } diff --git a/app/src/main/java/com/casic/qd/smartwell/view/WaterExpandedActivity.kt b/app/src/main/java/com/casic/qd/smartwell/view/WaterExpandedActivity.kt index 251140d..7a63dea 100644 --- a/app/src/main/java/com/casic/qd/smartwell/view/WaterExpandedActivity.kt +++ b/app/src/main/java/com/casic/qd/smartwell/view/WaterExpandedActivity.kt @@ -13,6 +13,7 @@ import com.casic.qd.smartwell.vm.WaterStatisticsViewModel import com.casic.qd.smartwell.widgets.DateSelectDialog import com.github.mikephil.charting.data.Entry +import com.jzxiang.pickerview.data.Type import kotlinx.android.synthetic.main.activity_water_expanded.* import java.util.* import kotlin.collections.ArrayList @@ -86,7 +87,6 @@ 5 -> { DateSelectDialog.Builder() .setContext(context) - .setFragmentManager(supportFragmentManager) .setTitle("选择日期") .setNegativeButton("取消") .setPositiveButton("选好了") @@ -102,7 +102,10 @@ //选择取消就默认加载近7天的数据 periodSpinner.setSelection(3) } - }).build().show() + }) + .setFragmentManager(supportFragmentManager) + .setCalendarType(Type.YEAR_MONTH_DAY) + .build().show() } } } diff --git a/app/src/main/java/com/casic/qd/smartwell/vm/DeviceViewModel.kt b/app/src/main/java/com/casic/qd/smartwell/vm/DeviceViewModel.kt index 02aefed..9448ade 100644 --- a/app/src/main/java/com/casic/qd/smartwell/vm/DeviceViewModel.kt +++ b/app/src/main/java/com/casic/qd/smartwell/vm/DeviceViewModel.kt @@ -7,8 +7,10 @@ import com.casic.qd.smartwell.extensions.separateResponseCode import com.casic.qd.smartwell.extensions.show import com.casic.qd.smartwell.extensions.toErrorMessage +import com.casic.qd.smartwell.model.DayDataModel import com.casic.qd.smartwell.model.DeviceStatisticsModel import com.casic.qd.smartwell.model.DeviceTypeModel +import com.casic.qd.smartwell.model.TotalDataModel import com.casic.qd.smartwell.utils.retrofit.RetrofitServiceManager import com.google.gson.Gson import com.google.gson.reflect.TypeToken @@ -19,6 +21,8 @@ private val gson = Gson() val resultModel = MutableLiveData() val typeModel = MutableLiveData() + val dayDataModel = MutableLiveData() + val totalDataModel = MutableLiveData() /** * 管网资产统计 @@ -55,4 +59,40 @@ Log.e(kTag, it.toString(), it) "服务器异常".show() }) + + /** + * 获取设备日用水量 + */ + fun obtainSevenDayData(devCode: String?, beginTime: String?, endTime: String?) = launch({ + val response = RetrofitServiceManager.obtainSevenDayData(devCode, beginTime, endTime) + val responseCode = response.separateResponseCode() + if (responseCode == 200) { + dayDataModel.value = gson.fromJson( + response, object : TypeToken() {}.type + ) + } else { + response.toErrorMessage().show() + } + }, { + Log.e(kTag, it.toString(), it) + "服务器异常".show() + }) + + /** + * 获取设备累计用水量 + */ + fun obtainTotalDayData(devCode: String?, beginTime: String?, endTime: String?) = launch({ + val response = RetrofitServiceManager.obtainTotalDayData(devCode, beginTime, endTime) + val responseCode = response.separateResponseCode() + if (responseCode == 200) { + totalDataModel.value = gson.fromJson( + response, object : TypeToken() {}.type + ) + } else { + 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/widgets/DateSelectDialog.kt b/app/src/main/java/com/casic/qd/smartwell/widgets/DateSelectDialog.kt index ec403eb..fda3a03 100644 --- a/app/src/main/java/com/casic/qd/smartwell/widgets/DateSelectDialog.kt +++ b/app/src/main/java/com/casic/qd/smartwell/widgets/DateSelectDialog.kt @@ -9,6 +9,7 @@ import com.casic.qd.smartwell.extensions.convertColor import com.casic.qd.smartwell.extensions.initDialogLayoutParams import com.casic.qd.smartwell.extensions.timestampToDate +import com.casic.qd.smartwell.extensions.timestampToTime import com.casic.qd.smartwell.utils.Constant import com.jzxiang.pickerview.TimePickerDialog import com.jzxiang.pickerview.data.Type @@ -18,30 +19,27 @@ builder.context, R.style.UserDefinedDialogStyle ) { - private val fragmentManager: FragmentManager = builder.fragmentManager private val title: String = builder.title private val negativeBtn: String = builder.negativeBtn private val positiveBtn: String = builder.positiveBtn private val listener: OnDialogButtonClickListener = builder.listener + private val fragmentManager: FragmentManager = builder.fragmentManager + private val type: Type = builder.type class Builder { lateinit var context: Context - lateinit var fragmentManager: FragmentManager lateinit var title: String lateinit var negativeBtn: String lateinit var positiveBtn: String lateinit var listener: OnDialogButtonClickListener + lateinit var fragmentManager: FragmentManager + lateinit var type: Type fun setContext(context: Context): Builder { this.context = context return this } - fun setFragmentManager(fragmentManager: FragmentManager): Builder { - this.fragmentManager = fragmentManager - return this - } - fun setTitle(title: String): Builder { this.title = title return this @@ -62,6 +60,16 @@ return this } + fun setFragmentManager(fragmentManager: FragmentManager): Builder { + this.fragmentManager = fragmentManager + return this + } + + fun setCalendarType(calendarType: Type): Builder { + this.type = calendarType + return this + } + fun build(): DateSelectDialog { return DateSelectDialog(this) } @@ -69,7 +77,7 @@ override fun onCreate(savedInstanceState: Bundle?) { super.onCreate(savedInstanceState) - this.initDialogLayoutParams(Gravity.CENTER, R.style.UserDefinedAnimation, 0.8f) + this.initDialogLayoutParams(Gravity.CENTER, R.style.UserDefinedAnimation, 0.85f) setContentView(R.layout.dialog_select_date) setCancelable(false) setCanceledOnTouchOutside(false) @@ -86,10 +94,15 @@ .setCyclic(false) .setMinMillseconds(System.currentTimeMillis() - Constant.FIVE_YEARS) .setMaxMillseconds(System.currentTimeMillis()) - .setType(Type.YEAR_MONTH_DAY) + .setType(type) .setCallBack { _: TimePickerDialog?, millSeconds: Long -> - startDateView.setText(millSeconds.timestampToDate()) - }.build().show(fragmentManager, "YEAR_MONTH_DAY") + val textValue = if (type == Type.ALL) { + millSeconds.timestampToTime() + } else { + millSeconds.timestampToDate() + } + startDateView.setText(textValue) + }.build().show(fragmentManager, "DateSelectDialog") } endDateView.setOnClickListener { @@ -100,10 +113,15 @@ .setCyclic(false) .setMinMillseconds(System.currentTimeMillis() - Constant.FIVE_YEARS) .setMaxMillseconds(System.currentTimeMillis()) - .setType(Type.YEAR_MONTH_DAY) + .setType(type) .setCallBack { _: TimePickerDialog?, millSeconds: Long -> - endDateView.setText(millSeconds.timestampToDate()) - }.build().show(fragmentManager, "YEAR_MONTH_DAY") + val textValue = if (type == Type.ALL) { + millSeconds.timestampToTime() + } else { + millSeconds.timestampToDate() + } + endDateView.setText(textValue) + }.build().show(fragmentManager, "DateSelectDialog") } dialogCancelButton.text = negativeBtn diff --git a/app/src/main/res/drawable/ic_calendar.xml b/app/src/main/res/drawable/ic_calendar.xml new file mode 100644 index 0000000..a314f72 --- /dev/null +++ b/app/src/main/res/drawable/ic_calendar.xml @@ -0,0 +1,12 @@ + + + + diff --git a/app/src/main/res/layout/activity_data_search.xml b/app/src/main/res/layout/activity_data_search.xml new file mode 100644 index 0000000..77d9ef6 --- /dev/null +++ b/app/src/main/res/layout/activity_data_search.xml @@ -0,0 +1,6 @@ + + + + \ No newline at end of file diff --git a/app/src/main/res/layout/activity_device_data_detail.xml b/app/src/main/res/layout/activity_device_data_detail.xml new file mode 100644 index 0000000..700b1de --- /dev/null +++ b/app/src/main/res/layout/activity_device_data_detail.xml @@ -0,0 +1,78 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/app/src/main/res/layout/activity_device_detail.xml b/app/src/main/res/layout/activity_device_detail.xml deleted file mode 100644 index 7ead47b..0000000 --- a/app/src/main/res/layout/activity_device_detail.xml +++ /dev/null @@ -1,32 +0,0 @@ - - - - - - - - - - - - - - - \ No newline at end of file diff --git a/app/src/main/res/layout/activity_device_search.xml b/app/src/main/res/layout/activity_device_search.xml new file mode 100644 index 0000000..ff2d746 --- /dev/null +++ b/app/src/main/res/layout/activity_device_search.xml @@ -0,0 +1,160 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/app/src/main/res/layout/activity_search_record.xml b/app/src/main/res/layout/activity_search_record.xml deleted file mode 100644 index 7ab2795..0000000 --- a/app/src/main/res/layout/activity_search_record.xml +++ /dev/null @@ -1,160 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - \ No newline at end of file diff --git a/app/src/main/res/layout/dialog_select_date.xml b/app/src/main/res/layout/dialog_select_date.xml index 0fc81c5..bd0f9fc 100644 --- a/app/src/main/res/layout/dialog_select_date.xml +++ b/app/src/main/res/layout/dialog_select_date.xml @@ -33,10 +33,10 @@ android:layout_height="wrap_content" android:gravity="center_vertical" android:orientation="horizontal" - android:paddingHorizontal="@dimen/dp_20" + android:paddingHorizontal="@dimen/dp_10" android:paddingVertical="@dimen/dp_30"> - @@ -44,11 +44,10 @@ -