|
|
@ -3,6 +3,7 @@ package com.yinuo.safetywatcher.watcher.ui
|
|
|
|
import android.annotation.SuppressLint
|
|
|
|
import android.annotation.SuppressLint
|
|
|
|
import android.view.View
|
|
|
|
import android.view.View
|
|
|
|
import androidx.activity.result.contract.ActivityResultContracts
|
|
|
|
import androidx.activity.result.contract.ActivityResultContracts
|
|
|
|
|
|
|
|
import androidx.lifecycle.lifecycleScope
|
|
|
|
import androidx.recyclerview.widget.LinearLayoutManager
|
|
|
|
import androidx.recyclerview.widget.LinearLayoutManager
|
|
|
|
import com.yinuo.safetywatcher.R
|
|
|
|
import com.yinuo.safetywatcher.R
|
|
|
|
import com.yinuo.safetywatcher.databinding.ActivityQueryDataBinding
|
|
|
|
import com.yinuo.safetywatcher.databinding.ActivityQueryDataBinding
|
|
|
@ -10,8 +11,14 @@ import com.yinuo.safetywatcher.watcher.adapter.HistoryDataAdapter
|
|
|
|
import com.yinuo.safetywatcher.watcher.base.BaseActivity
|
|
|
|
import com.yinuo.safetywatcher.watcher.base.BaseActivity
|
|
|
|
import com.yinuo.safetywatcher.watcher.bean.HistoryData
|
|
|
|
import com.yinuo.safetywatcher.watcher.bean.HistoryData
|
|
|
|
import com.yinuo.safetywatcher.watcher.constant.TimeStep
|
|
|
|
import com.yinuo.safetywatcher.watcher.constant.TimeStep
|
|
|
|
|
|
|
|
import com.yinuo.safetywatcher.watcher.db.DBUtils
|
|
|
|
|
|
|
|
import com.yinuo.safetywatcher.watcher.db.entity.Gas
|
|
|
|
|
|
|
|
import com.yinuo.safetywatcher.watcher.db.entity.GasType
|
|
|
|
import com.yinuo.safetywatcher.watcher.utils.DateUtils
|
|
|
|
import com.yinuo.safetywatcher.watcher.utils.DateUtils
|
|
|
|
import com.yinuo.safetywatcher.watcher.view.CommonTopBar
|
|
|
|
import com.yinuo.safetywatcher.watcher.view.CommonTopBar
|
|
|
|
|
|
|
|
import kotlinx.coroutines.Dispatchers
|
|
|
|
|
|
|
|
import kotlinx.coroutines.launch
|
|
|
|
|
|
|
|
import java.util.Collections
|
|
|
|
|
|
|
|
|
|
|
|
class QueryDataActivity : BaseActivity() {
|
|
|
|
class QueryDataActivity : BaseActivity() {
|
|
|
|
|
|
|
|
|
|
|
@ -103,9 +110,76 @@ class QueryDataActivity : BaseActivity() {
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
private fun queryData() {
|
|
|
|
private fun queryData() {
|
|
|
|
val datas = mutableListOf<HistoryData>()
|
|
|
|
lifecycleScope.launch {
|
|
|
|
datas.add(HistoryData(0, "气体传感器"))
|
|
|
|
// 根据步长,多个数据合一。合一步长
|
|
|
|
datas.add(HistoryData(0, "温度传感器"))
|
|
|
|
val step = when (timeStep) {
|
|
|
|
mAdapter.setData(datas)
|
|
|
|
TimeStep.SECOND_30 -> 1
|
|
|
|
|
|
|
|
TimeStep.MINUTE_1 -> 2
|
|
|
|
|
|
|
|
TimeStep.MINUTE_3 -> 6
|
|
|
|
|
|
|
|
TimeStep.MINUTE_5 -> 10
|
|
|
|
|
|
|
|
else -> 1
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
// 全量数据
|
|
|
|
|
|
|
|
val gasDao = DBUtils.gasDao()
|
|
|
|
|
|
|
|
val gasList = gasDao.getAllByTime(startTime, endTime)
|
|
|
|
|
|
|
|
if (step == 1) {
|
|
|
|
|
|
|
|
launch(Dispatchers.Main) {
|
|
|
|
|
|
|
|
mAdapter.setData(gasList)
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
} else {
|
|
|
|
|
|
|
|
// 多气体,分开创建list,存储之后。 再分步
|
|
|
|
|
|
|
|
val gasTypeDao = DBUtils.gasTypeDao()
|
|
|
|
|
|
|
|
val gasTypes = gasTypeDao.getAll()
|
|
|
|
|
|
|
|
// 每种气体建立一个list
|
|
|
|
|
|
|
|
val gasMap = HashMap<String, MutableList<Gas>>()
|
|
|
|
|
|
|
|
// 预先创建分步合一之后的list
|
|
|
|
|
|
|
|
val gasNewMap = HashMap<String, MutableList<Gas>>()
|
|
|
|
|
|
|
|
gasTypes.forEach {
|
|
|
|
|
|
|
|
gasMap[it.type] = mutableListOf()
|
|
|
|
|
|
|
|
gasNewMap[it.type] = mutableListOf()
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
// 分开各个气体的数据
|
|
|
|
|
|
|
|
gasList.forEach {
|
|
|
|
|
|
|
|
val list = gasMap[it.gasName]
|
|
|
|
|
|
|
|
list?.add(it)
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
//根据步长分割数据填充新的列表
|
|
|
|
|
|
|
|
gasMap.forEach { (type, list) ->
|
|
|
|
|
|
|
|
val newMapList = gasNewMap[type]
|
|
|
|
|
|
|
|
var gasValue = 0.0
|
|
|
|
|
|
|
|
var startGas: Gas? = null
|
|
|
|
|
|
|
|
list.forEachIndexed { index, gas ->
|
|
|
|
|
|
|
|
// 不能整除的时候,最后一个特殊处理
|
|
|
|
|
|
|
|
if (list.size - 1 == index) {
|
|
|
|
|
|
|
|
if (gasValue != 0.0) {
|
|
|
|
|
|
|
|
startGas!!.gasValue = gasValue / (list.size % step)
|
|
|
|
|
|
|
|
newMapList?.add(startGas!!)
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
if (index % step == 0) {
|
|
|
|
|
|
|
|
if (gasValue != 0.0) {
|
|
|
|
|
|
|
|
startGas!!.gasValue = gasValue / step
|
|
|
|
|
|
|
|
newMapList?.add(startGas!!)
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
startGas = gas
|
|
|
|
|
|
|
|
gasValue = gas.gasValue
|
|
|
|
|
|
|
|
} else {
|
|
|
|
|
|
|
|
gasValue += gas.gasValue
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
var newList = mutableListOf<Gas>()
|
|
|
|
|
|
|
|
gasNewMap.forEach { t, u ->
|
|
|
|
|
|
|
|
newList.addAll(u)
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
newList.sortWith { o1, o2 ->
|
|
|
|
|
|
|
|
(o1.time - o2.time).toInt()
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
launch(Dispatchers.Main) {
|
|
|
|
|
|
|
|
mAdapter.setData(newList)
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|