diff --git a/app/src/main/java/com/yinuo/safetywatcher/watcher/bean/GasReqBean.kt b/app/src/main/java/com/yinuo/safetywatcher/watcher/bean/GasReqBean.kt index 2eb580f..1bc0677 100644 --- a/app/src/main/java/com/yinuo/safetywatcher/watcher/bean/GasReqBean.kt +++ b/app/src/main/java/com/yinuo/safetywatcher/watcher/bean/GasReqBean.kt @@ -12,13 +12,13 @@ data class GasReqBean( val status: String = "", val alarmName: String = "" ) { - constructor(gas: Gas) : this( + constructor(gas: Gas, showWarnTxt: String) : this( gasName = gas.gasName, gasValue = gas.gasValue.toString(), gasUnit = gas.unit, reportTime = gas.time.toString(), sensorName = GasCache.getNickname(gas.gasName), status = GasCache.getStatus(gas.gasName), - alarmName = "" + alarmName = showWarnTxt ) } diff --git a/app/src/main/java/com/yinuo/safetywatcher/watcher/net/DevicesApi.kt b/app/src/main/java/com/yinuo/safetywatcher/watcher/net/DevicesApi.kt index 90e9192..ec896d3 100644 --- a/app/src/main/java/com/yinuo/safetywatcher/watcher/net/DevicesApi.kt +++ b/app/src/main/java/com/yinuo/safetywatcher/watcher/net/DevicesApi.kt @@ -1,15 +1,14 @@ package com.yinuo.safetywatcher.watcher.net -import com.common.commonlib.db.entity.Gas import com.common.commonlib.net.BaseObserve import com.common.commonlib.net.bean.BaseResponse import com.common.commonlib.net.callback.RequestNoResultCallBack import com.common.commonlib.net.callback.RequestResultCallBack import com.yinuo.safetywatcher.watcher.bean.GasReqBean -import com.yinuo.safetywatcher.watcher.bean.TrafficReqInfo import com.yinuo.safetywatcher.watcher.bean.GasRequest import com.yinuo.safetywatcher.watcher.bean.GetRtspUrlResponse import com.yinuo.safetywatcher.watcher.bean.LastTimeResponse +import com.yinuo.safetywatcher.watcher.bean.TrafficReqInfo import com.yinuo.safetywatcher.watcher.utils.LztekUtil import io.reactivex.rxjava3.core.Observable import retrofit2.http.Body @@ -43,13 +42,9 @@ class DevicesApi : BaseObserve(Api::class.java) { } suspend fun uploadGasData( - gasList: List = emptyList() + gasList: List = emptyList() ): BaseResponse { - val detections = arrayListOf() - gasList.forEach { - detections.add(GasReqBean(it)) - } - val gasReq = GasRequest(detections = detections) + val gasReq = GasRequest(detections = gasList) return api.uploadGasData(gasReq) } diff --git a/app/src/main/java/com/yinuo/safetywatcher/watcher/port/GasUtilss.kt b/app/src/main/java/com/yinuo/safetywatcher/watcher/port/GasUtilss.kt index 2418aef..82aae63 100644 --- a/app/src/main/java/com/yinuo/safetywatcher/watcher/port/GasUtilss.kt +++ b/app/src/main/java/com/yinuo/safetywatcher/watcher/port/GasUtilss.kt @@ -1,6 +1,7 @@ package com.yinuo.safetywatcher.watcher.port import android.content.Context +import com.common.commonlib.db.entity.Warning import com.common.commonlib.utils.MMKVUtils import com.yinuo.safetywatcher.R import com.yinuo.safetywatcher.watcher.port.cmd.C02 @@ -215,4 +216,41 @@ fun getShowStatus(context: Context?, state: Int): String { else -> R.string.status_offline } ) ?: "" +} + +fun getShowWarnTxt(warn: Warning?): String { + warn?.let { + if (O2 == it.gasName) { + return if (it.overRange) { + "请注意,${it.gasName}浓度过高,已超过传感器量程" + } else { + if (it.gasValue < it.thresholdLow) { + "请注意,${it.gasName}浓度过低:${it.gasValue} ${it.unit},有缺氧风险" + } else { + "请注意,${it.gasName}浓度过高:${it.gasValue} ${it.unit},有醉氧风险" + } + } + } else if (VOCS == it.gasName) { + return if (it.overRange) { + "请注意,可挥发性有机物浓度过高,已超过传感器量程" + } else { + if (it.gasValue > it.thresholdHigh) { + "请注意,可挥发性有机物气体浓度:${it.gasValue} ${it.unit}超过高报值${it.thresholdHigh}" + } else { + "请注意,可挥发性有机物气体浓度:${it.gasValue} ${it.unit}超过高报值${it.thresholdLow}" + } + } + } else { + return if (it.overRange) { + "请注意,${it.gasName}浓度过高,已超过传感器量程" + } else { + if (it.gasValue > it.thresholdHigh) { + "请注意,${it.gasName}气体浓度:${it.gasValue} ${it.unit}超过高报值${it.thresholdHigh}" + } else { + "请注意,${it.gasName}气体浓度:${it.gasValue} ${it.unit}超过高报值${it.thresholdLow}" + } + } + } + } + return "" } \ No newline at end of file diff --git a/app/src/main/java/com/yinuo/safetywatcher/watcher/port/ParseHelper.kt b/app/src/main/java/com/yinuo/safetywatcher/watcher/port/ParseHelper.kt index 5ff876b..e0927d0 100644 --- a/app/src/main/java/com/yinuo/safetywatcher/watcher/port/ParseHelper.kt +++ b/app/src/main/java/com/yinuo/safetywatcher/watcher/port/ParseHelper.kt @@ -9,6 +9,7 @@ import com.common.commonlib.db.entity.GasType import com.common.commonlib.db.entity.Warning import com.common.commonlib.utils.LogUtils import com.common.serialport.utils.HexUtils +import com.yinuo.safetywatcher.watcher.bean.GasReqBean import com.yinuo.safetywatcher.watcher.constant.GAS_CLOUD_UPLOAD_SIZE_ONCE import com.yinuo.safetywatcher.watcher.net.DevicesApi import com.yinuo.safetywatcher.watcher.port.cmd.GasPortStatus @@ -27,7 +28,7 @@ object ParseHelper { private val mPortRunnable = hashMapOf() private val mHandler = Handler(Looper.getMainLooper()) - private val tempGasData = mutableListOf() + private val tempGasData = mutableListOf() private val devicesApi by lazy { DevicesApi() } @@ -159,13 +160,13 @@ object ParseHelper { val gasDao = DBUtils.gasDao() gasDao.insert(gas) - dealWarning(typeEnum, value, min, max, unit, overRange) + val warning = dealWarning(typeEnum, value, min, max, unit, overRange) // 设置水印数据 setOverlayData() // 实时数据上传后台 - uploadGasData(gas) + uploadGasData(gas, getShowWarnTxt(warning)) } } @@ -176,7 +177,7 @@ object ParseHelper { max: Float, unit: String, overRange: Boolean - ) { + ): Warning? { // 告警处理 val warningDao = DBUtils.warningDao() val warning = warningDao.findLatestByName(typeEnum.desc) @@ -184,21 +185,22 @@ object ParseHelper { if (O2 == typeEnum.desc) { if (value < min || value > max) { if (warning == null || warning.endTime > 0) { - warningDao.insert( - Warning( - typeEnum.desc, - value, - unit, - System.currentTimeMillis(), - min, - max, - overRange - ) + val insertWarning = Warning( + typeEnum.desc, + value, + unit, + System.currentTimeMillis(), + min, + max, + overRange ) + warningDao.insert(insertWarning) + return insertWarning } else { warning.gasValue = value warning.overRange = overRange warningDao.update(warning) + return warning } } else { warning?.let { @@ -209,21 +211,22 @@ object ParseHelper { } else { if (value > min) { if (warning == null || warning.endTime > 0) { - warningDao.insert( - Warning( - typeEnum.desc, - value, - unit, - System.currentTimeMillis(), - min, - max, - overRange - ) + val insertWarning = Warning( + typeEnum.desc, + value, + unit, + System.currentTimeMillis(), + min, + max, + overRange ) + warningDao.insert(insertWarning) + return insertWarning } else { warning.gasValue = value warning.overRange = overRange warningDao.update(warning) + return warning } } else { warning?.let { @@ -232,12 +235,13 @@ object ParseHelper { } } } + return null } - private suspend fun uploadGasData(gas: Gas) { + private suspend fun uploadGasData(gas: Gas, showWarnTxt: String) { try { // 上传实时气体数据 - tempGasData.add(gas) + tempGasData.add(GasReqBean(gas, showWarnTxt)) if (tempGasData.size > GAS_CLOUD_UPLOAD_SIZE_ONCE) { devicesApi.uploadGasData(tempGasData) tempGasData.clear() diff --git a/app/src/main/java/com/yinuo/safetywatcher/watcher/ui/HomeActivity.kt b/app/src/main/java/com/yinuo/safetywatcher/watcher/ui/HomeActivity.kt index 0afa8e9..6ad9454 100644 --- a/app/src/main/java/com/yinuo/safetywatcher/watcher/ui/HomeActivity.kt +++ b/app/src/main/java/com/yinuo/safetywatcher/watcher/ui/HomeActivity.kt @@ -18,6 +18,7 @@ import com.yinuo.safetywatcher.watcher.constant.DELAY_TIME_CHECK_CAMERA import com.yinuo.safetywatcher.watcher.constant.DELAY_TIME_CHECK_SENSOR import com.yinuo.safetywatcher.watcher.constant.DELAY_TIME_OPEN_CAMERA import com.yinuo.safetywatcher.watcher.port.GasPortUtils +import com.yinuo.safetywatcher.watcher.port.getShowWarnTxt import com.yinuo.safetywatcher.watcher.services.HeartbeatService import com.yinuo.safetywatcher.watcher.ui.view.ConfirmDialog import com.yinuo.safetywatcher.watcher.utils.BatteryHelper @@ -230,11 +231,7 @@ class HomeActivity : NoOptionsActivity() { val warningList = warningDao.queryWarningsNoEndTime() val builder = StringBuilder() warningList?.forEachIndexed { index, it -> - builder.append(it.gasName).append("浓度异常,") - .append("当前值: ${it.gasValue} ${it.unit}") - if (it.overRange) { - builder.append(",且超过传感器量程") - } + builder.append(getShowWarnTxt(it)) if (index != warningList.size - 1) { builder.append("\n") } diff --git a/app/src/main/java/com/yinuo/safetywatcher/watcher/ui/adapter/WarnDataAdapter.kt b/app/src/main/java/com/yinuo/safetywatcher/watcher/ui/adapter/WarnDataAdapter.kt index 7ec3ab9..42419c0 100644 --- a/app/src/main/java/com/yinuo/safetywatcher/watcher/ui/adapter/WarnDataAdapter.kt +++ b/app/src/main/java/com/yinuo/safetywatcher/watcher/ui/adapter/WarnDataAdapter.kt @@ -5,6 +5,7 @@ import android.view.ViewGroup import com.common.commonlib.db.entity.Warning import com.yinuo.safetywatcher.databinding.LayoutItemWarnBinding import com.yinuo.safetywatcher.watcher.base.BaseRvAdapter +import com.yinuo.safetywatcher.watcher.port.getShowWarnTxt import com.yinuo.safetywatcher.watcher.utils.DateUtils class WarnDataAdapter : @@ -14,10 +15,7 @@ class WarnDataAdapter : BaseRvAdapter.BaseViewHolder(binding) { override fun bindView(data: Warning) { binding.tvTime.text = formatTime(data.startTime) - val standardStr = - if (data.gasValue > data.thresholdHigh) "超过高报警值${data.thresholdHigh}" else "超过低报警值${data.thresholdLow}" - binding.tvSensor.text = - "${data.gasName}浓度异常,${data.gasValue} ${data.unit}$standardStr" + binding.tvSensor.text = getShowWarnTxt(data) } private fun formatTime(time: Long): CharSequence? {