diff --git a/app/src/main/java/com/casic/br/app/extensions/String.kt b/app/src/main/java/com/casic/br/app/extensions/String.kt index 9fc9241..1acff17 100644 --- a/app/src/main/java/com/casic/br/app/extensions/String.kt +++ b/app/src/main/java/com/casic/br/app/extensions/String.kt @@ -3,6 +3,7 @@ import android.content.Context import com.casic.br.app.callback.OnImageCompressListener import com.casic.br.app.utils.LocaleConstant +import com.casic.br.app.utils.RuntimeCache import com.google.gson.JsonParser import com.pengxh.kt.lite.extensions.createCompressImageDir import com.pengxh.kt.lite.utils.SaveKeyValues @@ -52,44 +53,32 @@ return "" } -fun String.isInScene(scene: String): Boolean { - when (scene) { - "配电箱" -> return listOf("配电箱", "电路图", "开关/控制设备", "电线", "跨电线").contains( - this - ) - +fun String.isTargetInScene(): Boolean { + when (RuntimeCache.sceneName) { + "配电箱" -> return listOf("开关", "跨电线").contains(this) "有限空间作业" -> return listOf( - "安全帽", - "呼吸器", - "防护服", - "围挡设施", - "安全警示标识", - "送风设备", - "照明设备", - "对讲设备", - "三脚架", - "气体检测报警仪" + "安全告知牌", "作业信息公示牌", "三脚架", "送风设备", + "呼吸器", "照明设备", "气体检测报警仪", "防护服", + "安全帽" ).contains(this) "非居民用户" -> return listOf( - "软管", - "接头", - "喉箍", - "切断阀", - "灶具", - "熄火保护", - "燃气泄漏报警装置" + "燃气计量器具", "可燃气体报警控制器", "燃气探测器", + "燃气管道", "防爆灯", "切断阀", "排烟设施", + "阀门" ).contains(this) - "居民用户" -> return listOf("软管", "接头", "喉箍", "切断阀", "灶具", "熄火保护").contains( - this - ) + "居民用户" -> return listOf("软管", "灶具").contains(this) + "调压站" -> return listOf( + "调压器", + "过滤器", + "阀门", + "压力表", + "流量计", + "安全阀" + ).contains(this) - "调压站" -> return listOf("软管", "接头", "喉箍", "切断阀", "灶具", "熄火保护").contains( - this - ) - - "建筑消防" -> return listOf("消火栓箱", "水枪", "水带", "灭火器").contains(this) + "建筑消防" -> return listOf("消火栓箱", "水枪", "水带", "消火栓", "灭火器").contains(this) } return false } diff --git a/app/src/main/java/com/casic/br/app/extensions/String.kt b/app/src/main/java/com/casic/br/app/extensions/String.kt index 9fc9241..1acff17 100644 --- a/app/src/main/java/com/casic/br/app/extensions/String.kt +++ b/app/src/main/java/com/casic/br/app/extensions/String.kt @@ -3,6 +3,7 @@ import android.content.Context import com.casic.br.app.callback.OnImageCompressListener import com.casic.br.app.utils.LocaleConstant +import com.casic.br.app.utils.RuntimeCache import com.google.gson.JsonParser import com.pengxh.kt.lite.extensions.createCompressImageDir import com.pengxh.kt.lite.utils.SaveKeyValues @@ -52,44 +53,32 @@ return "" } -fun String.isInScene(scene: String): Boolean { - when (scene) { - "配电箱" -> return listOf("配电箱", "电路图", "开关/控制设备", "电线", "跨电线").contains( - this - ) - +fun String.isTargetInScene(): Boolean { + when (RuntimeCache.sceneName) { + "配电箱" -> return listOf("开关", "跨电线").contains(this) "有限空间作业" -> return listOf( - "安全帽", - "呼吸器", - "防护服", - "围挡设施", - "安全警示标识", - "送风设备", - "照明设备", - "对讲设备", - "三脚架", - "气体检测报警仪" + "安全告知牌", "作业信息公示牌", "三脚架", "送风设备", + "呼吸器", "照明设备", "气体检测报警仪", "防护服", + "安全帽" ).contains(this) "非居民用户" -> return listOf( - "软管", - "接头", - "喉箍", - "切断阀", - "灶具", - "熄火保护", - "燃气泄漏报警装置" + "燃气计量器具", "可燃气体报警控制器", "燃气探测器", + "燃气管道", "防爆灯", "切断阀", "排烟设施", + "阀门" ).contains(this) - "居民用户" -> return listOf("软管", "接头", "喉箍", "切断阀", "灶具", "熄火保护").contains( - this - ) + "居民用户" -> return listOf("软管", "灶具").contains(this) + "调压站" -> return listOf( + "调压器", + "过滤器", + "阀门", + "压力表", + "流量计", + "安全阀" + ).contains(this) - "调压站" -> return listOf("软管", "接头", "喉箍", "切断阀", "灶具", "熄火保护").contains( - this - ) - - "建筑消防" -> return listOf("消火栓箱", "水枪", "水带", "灭火器").contains(this) + "建筑消防" -> return listOf("消火栓箱", "水枪", "水带", "消火栓", "灭火器").contains(this) } return false } diff --git a/app/src/main/java/com/casic/br/app/utils/YoloTargetDetectHelper.kt b/app/src/main/java/com/casic/br/app/utils/YoloTargetDetectHelper.kt index 3bd603c..c0ed1e4 100644 --- a/app/src/main/java/com/casic/br/app/utils/YoloTargetDetectHelper.kt +++ b/app/src/main/java/com/casic/br/app/utils/YoloTargetDetectHelper.kt @@ -130,7 +130,7 @@ if (detectResults.isContains(35)) { //包含电线裸露 val result = HiddenTroubleResult() - result.alarmCode = "" + result.alarmCode = "DistributionBoxHasExposedWire" result.warning = "配电箱内部电线裸露" hiddenTroubles.add(result) } @@ -158,7 +158,7 @@ if (!detectResults.isContains(34)) { //不包含熄火保护装置 val result = HiddenTroubleResult() - result.alarmCode = "" + result.alarmCode = "NonResidentUserHasNoFlameoutProtection" result.warning = "未发现熄火保护装置" hiddenTroubles.add(result) } @@ -216,14 +216,14 @@ if (detectResults.isContains(49)) { val result = HiddenTroubleResult() - result.alarmCode = "" + result.alarmCode = "NonStandardHoses" result.warning = "发现非标准软管" hiddenTroubles.add(result) } if (segmentationResults.isContains(5)) { val result = HiddenTroubleResult() - result.alarmCode = "" + result.alarmCode = "HoseCrackedAndAged" result.warning = "软管龟裂老化" hiddenTroubles.add(result) } diff --git a/app/src/main/java/com/casic/br/app/extensions/String.kt b/app/src/main/java/com/casic/br/app/extensions/String.kt index 9fc9241..1acff17 100644 --- a/app/src/main/java/com/casic/br/app/extensions/String.kt +++ b/app/src/main/java/com/casic/br/app/extensions/String.kt @@ -3,6 +3,7 @@ import android.content.Context import com.casic.br.app.callback.OnImageCompressListener import com.casic.br.app.utils.LocaleConstant +import com.casic.br.app.utils.RuntimeCache import com.google.gson.JsonParser import com.pengxh.kt.lite.extensions.createCompressImageDir import com.pengxh.kt.lite.utils.SaveKeyValues @@ -52,44 +53,32 @@ return "" } -fun String.isInScene(scene: String): Boolean { - when (scene) { - "配电箱" -> return listOf("配电箱", "电路图", "开关/控制设备", "电线", "跨电线").contains( - this - ) - +fun String.isTargetInScene(): Boolean { + when (RuntimeCache.sceneName) { + "配电箱" -> return listOf("开关", "跨电线").contains(this) "有限空间作业" -> return listOf( - "安全帽", - "呼吸器", - "防护服", - "围挡设施", - "安全警示标识", - "送风设备", - "照明设备", - "对讲设备", - "三脚架", - "气体检测报警仪" + "安全告知牌", "作业信息公示牌", "三脚架", "送风设备", + "呼吸器", "照明设备", "气体检测报警仪", "防护服", + "安全帽" ).contains(this) "非居民用户" -> return listOf( - "软管", - "接头", - "喉箍", - "切断阀", - "灶具", - "熄火保护", - "燃气泄漏报警装置" + "燃气计量器具", "可燃气体报警控制器", "燃气探测器", + "燃气管道", "防爆灯", "切断阀", "排烟设施", + "阀门" ).contains(this) - "居民用户" -> return listOf("软管", "接头", "喉箍", "切断阀", "灶具", "熄火保护").contains( - this - ) + "居民用户" -> return listOf("软管", "灶具").contains(this) + "调压站" -> return listOf( + "调压器", + "过滤器", + "阀门", + "压力表", + "流量计", + "安全阀" + ).contains(this) - "调压站" -> return listOf("软管", "接头", "喉箍", "切断阀", "灶具", "熄火保护").contains( - this - ) - - "建筑消防" -> return listOf("消火栓箱", "水枪", "水带", "灭火器").contains(this) + "建筑消防" -> return listOf("消火栓箱", "水枪", "水带", "消火栓", "灭火器").contains(this) } return false } diff --git a/app/src/main/java/com/casic/br/app/utils/YoloTargetDetectHelper.kt b/app/src/main/java/com/casic/br/app/utils/YoloTargetDetectHelper.kt index 3bd603c..c0ed1e4 100644 --- a/app/src/main/java/com/casic/br/app/utils/YoloTargetDetectHelper.kt +++ b/app/src/main/java/com/casic/br/app/utils/YoloTargetDetectHelper.kt @@ -130,7 +130,7 @@ if (detectResults.isContains(35)) { //包含电线裸露 val result = HiddenTroubleResult() - result.alarmCode = "" + result.alarmCode = "DistributionBoxHasExposedWire" result.warning = "配电箱内部电线裸露" hiddenTroubles.add(result) } @@ -158,7 +158,7 @@ if (!detectResults.isContains(34)) { //不包含熄火保护装置 val result = HiddenTroubleResult() - result.alarmCode = "" + result.alarmCode = "NonResidentUserHasNoFlameoutProtection" result.warning = "未发现熄火保护装置" hiddenTroubles.add(result) } @@ -216,14 +216,14 @@ if (detectResults.isContains(49)) { val result = HiddenTroubleResult() - result.alarmCode = "" + result.alarmCode = "NonStandardHoses" result.warning = "发现非标准软管" hiddenTroubles.add(result) } if (segmentationResults.isContains(5)) { val result = HiddenTroubleResult() - result.alarmCode = "" + result.alarmCode = "HoseCrackedAndAged" result.warning = "软管龟裂老化" hiddenTroubles.add(result) } diff --git a/app/src/main/java/com/casic/br/app/view/StartCheckByYoloActivity.kt b/app/src/main/java/com/casic/br/app/view/StartCheckByYoloActivity.kt index 4b2bb77..d31ee12 100644 --- a/app/src/main/java/com/casic/br/app/view/StartCheckByYoloActivity.kt +++ b/app/src/main/java/com/casic/br/app/view/StartCheckByYoloActivity.kt @@ -19,6 +19,7 @@ import com.casic.br.app.extensions.convert2YoloResult import com.casic.br.app.extensions.getSceneByTarget import com.casic.br.app.extensions.initImmersionBar +import com.casic.br.app.extensions.isTargetInScene import com.casic.br.app.external.INativeCallback import com.casic.br.app.external.YoloResult import com.casic.br.app.external.Yolov8ncnn @@ -301,8 +302,10 @@ //实时筛选隐患结果 detectHelper.siftHiddenTrouble(segmentationResults, detectResults) detectResults.forEach { - val label = LocaleConstant.TARGET_NAMES_ARRAY[it.type] - targetSet.add(label) + val target = LocaleConstant.TARGET_NAMES_ARRAY[it.type] + if (target.isTargetInScene()) { + targetSet.add(target) + } when (RuntimeCache.sceneName) { "有限空间作业" -> { when (it.type) { @@ -329,8 +332,10 @@ } } runOnUiThread { - binding.tipsTagView.visibility = View.VISIBLE - binding.tipsTagView.text = "${targetSet.size}" + if (targetSet.size > 0) { + binding.tipsTagView.visibility = View.VISIBLE + binding.tipsTagView.text = "${targetSet.size}" + } } } diff --git a/app/src/main/java/com/casic/br/app/extensions/String.kt b/app/src/main/java/com/casic/br/app/extensions/String.kt index 9fc9241..1acff17 100644 --- a/app/src/main/java/com/casic/br/app/extensions/String.kt +++ b/app/src/main/java/com/casic/br/app/extensions/String.kt @@ -3,6 +3,7 @@ import android.content.Context import com.casic.br.app.callback.OnImageCompressListener import com.casic.br.app.utils.LocaleConstant +import com.casic.br.app.utils.RuntimeCache import com.google.gson.JsonParser import com.pengxh.kt.lite.extensions.createCompressImageDir import com.pengxh.kt.lite.utils.SaveKeyValues @@ -52,44 +53,32 @@ return "" } -fun String.isInScene(scene: String): Boolean { - when (scene) { - "配电箱" -> return listOf("配电箱", "电路图", "开关/控制设备", "电线", "跨电线").contains( - this - ) - +fun String.isTargetInScene(): Boolean { + when (RuntimeCache.sceneName) { + "配电箱" -> return listOf("开关", "跨电线").contains(this) "有限空间作业" -> return listOf( - "安全帽", - "呼吸器", - "防护服", - "围挡设施", - "安全警示标识", - "送风设备", - "照明设备", - "对讲设备", - "三脚架", - "气体检测报警仪" + "安全告知牌", "作业信息公示牌", "三脚架", "送风设备", + "呼吸器", "照明设备", "气体检测报警仪", "防护服", + "安全帽" ).contains(this) "非居民用户" -> return listOf( - "软管", - "接头", - "喉箍", - "切断阀", - "灶具", - "熄火保护", - "燃气泄漏报警装置" + "燃气计量器具", "可燃气体报警控制器", "燃气探测器", + "燃气管道", "防爆灯", "切断阀", "排烟设施", + "阀门" ).contains(this) - "居民用户" -> return listOf("软管", "接头", "喉箍", "切断阀", "灶具", "熄火保护").contains( - this - ) + "居民用户" -> return listOf("软管", "灶具").contains(this) + "调压站" -> return listOf( + "调压器", + "过滤器", + "阀门", + "压力表", + "流量计", + "安全阀" + ).contains(this) - "调压站" -> return listOf("软管", "接头", "喉箍", "切断阀", "灶具", "熄火保护").contains( - this - ) - - "建筑消防" -> return listOf("消火栓箱", "水枪", "水带", "灭火器").contains(this) + "建筑消防" -> return listOf("消火栓箱", "水枪", "水带", "消火栓", "灭火器").contains(this) } return false } diff --git a/app/src/main/java/com/casic/br/app/utils/YoloTargetDetectHelper.kt b/app/src/main/java/com/casic/br/app/utils/YoloTargetDetectHelper.kt index 3bd603c..c0ed1e4 100644 --- a/app/src/main/java/com/casic/br/app/utils/YoloTargetDetectHelper.kt +++ b/app/src/main/java/com/casic/br/app/utils/YoloTargetDetectHelper.kt @@ -130,7 +130,7 @@ if (detectResults.isContains(35)) { //包含电线裸露 val result = HiddenTroubleResult() - result.alarmCode = "" + result.alarmCode = "DistributionBoxHasExposedWire" result.warning = "配电箱内部电线裸露" hiddenTroubles.add(result) } @@ -158,7 +158,7 @@ if (!detectResults.isContains(34)) { //不包含熄火保护装置 val result = HiddenTroubleResult() - result.alarmCode = "" + result.alarmCode = "NonResidentUserHasNoFlameoutProtection" result.warning = "未发现熄火保护装置" hiddenTroubles.add(result) } @@ -216,14 +216,14 @@ if (detectResults.isContains(49)) { val result = HiddenTroubleResult() - result.alarmCode = "" + result.alarmCode = "NonStandardHoses" result.warning = "发现非标准软管" hiddenTroubles.add(result) } if (segmentationResults.isContains(5)) { val result = HiddenTroubleResult() - result.alarmCode = "" + result.alarmCode = "HoseCrackedAndAged" result.warning = "软管龟裂老化" hiddenTroubles.add(result) } diff --git a/app/src/main/java/com/casic/br/app/view/StartCheckByYoloActivity.kt b/app/src/main/java/com/casic/br/app/view/StartCheckByYoloActivity.kt index 4b2bb77..d31ee12 100644 --- a/app/src/main/java/com/casic/br/app/view/StartCheckByYoloActivity.kt +++ b/app/src/main/java/com/casic/br/app/view/StartCheckByYoloActivity.kt @@ -19,6 +19,7 @@ import com.casic.br.app.extensions.convert2YoloResult import com.casic.br.app.extensions.getSceneByTarget import com.casic.br.app.extensions.initImmersionBar +import com.casic.br.app.extensions.isTargetInScene import com.casic.br.app.external.INativeCallback import com.casic.br.app.external.YoloResult import com.casic.br.app.external.Yolov8ncnn @@ -301,8 +302,10 @@ //实时筛选隐患结果 detectHelper.siftHiddenTrouble(segmentationResults, detectResults) detectResults.forEach { - val label = LocaleConstant.TARGET_NAMES_ARRAY[it.type] - targetSet.add(label) + val target = LocaleConstant.TARGET_NAMES_ARRAY[it.type] + if (target.isTargetInScene()) { + targetSet.add(target) + } when (RuntimeCache.sceneName) { "有限空间作业" -> { when (it.type) { @@ -329,8 +332,10 @@ } } runOnUiThread { - binding.tipsTagView.visibility = View.VISIBLE - binding.tipsTagView.text = "${targetSet.size}" + if (targetSet.size > 0) { + binding.tipsTagView.visibility = View.VISIBLE + binding.tipsTagView.text = "${targetSet.size}" + } } } diff --git a/app/src/main/java/com/casic/br/app/widgets/DetectResultDialog.kt b/app/src/main/java/com/casic/br/app/widgets/DetectResultDialog.kt index 64c801a..cb787ec 100644 --- a/app/src/main/java/com/casic/br/app/widgets/DetectResultDialog.kt +++ b/app/src/main/java/com/casic/br/app/widgets/DetectResultDialog.kt @@ -4,14 +4,35 @@ import android.content.Context import android.graphics.Bitmap import android.os.Bundle +import android.widget.AdapterView +import android.widget.GridView +import com.casic.br.app.R +import com.casic.br.app.adapter.ImageGridAdapter import com.casic.br.app.callback.OnImageCompressListener import com.casic.br.app.databinding.DialogDetectResultBinding +import com.casic.br.app.extensions.combineFilePath import com.casic.br.app.extensions.compressImage +import com.casic.br.app.extensions.getResponseCode +import com.casic.br.app.extensions.getResponseMessage +import com.casic.br.app.model.HiddenTroubleDetailModel import com.casic.br.app.model.HiddenTroubleResult +import com.casic.br.app.utils.AuthenticationHelper +import com.casic.br.app.utils.LocaleConstant +import com.casic.br.app.view.BigImageActivity +import com.google.gson.Gson +import com.google.gson.JsonParser +import com.google.gson.reflect.TypeToken +import com.pengxh.kt.lite.adapter.NormalRecyclerAdapter +import com.pengxh.kt.lite.adapter.ViewHolder import com.pengxh.kt.lite.extensions.binding import com.pengxh.kt.lite.extensions.createImageFileDir +import com.pengxh.kt.lite.extensions.dp2px +import com.pengxh.kt.lite.extensions.getScreenWidth import com.pengxh.kt.lite.extensions.initDialogLayoutParams +import com.pengxh.kt.lite.extensions.navigatePageTo import com.pengxh.kt.lite.extensions.saveImage +import com.pengxh.kt.lite.extensions.show +import com.pengxh.kt.lite.utils.HttpRequestHub import org.opencv.android.Utils import org.opencv.core.Mat import java.io.File @@ -20,6 +41,7 @@ private val kTag = "DetectResultDialog" private val binding: DialogDetectResultBinding by binding() + private val gson by lazy { Gson() } private lateinit var result: HiddenTroubleResult private lateinit var mat: Mat private lateinit var listener: OnDialogButtonClickListener @@ -58,9 +80,75 @@ this.listener = listener this.result = result binding.messageView.text = result.warning + bindBasisRecyclerView() return this } + private fun bindBasisRecyclerView() { + HttpRequestHub.Builder() + .setAuthentication("token", AuthenticationHelper.token) + .setRequestTarget("${LocaleConstant.SERVER_BASE_URL}/alarm-menu/detailByCode?alarmCode=${result.alarmCode}") + .setOnHttpRequestListener(object : HttpRequestHub.OnHttpRequestListener { + override fun onSuccess(result: String) { + if (result.getResponseCode() != 200) { + result.getResponseMessage().show(context) + return + } + + //判断是否是正常的数据 + val element = JsonParser.parseString(result) + val jsonObject = element.asJsonObject + if (!jsonObject.get("data").isJsonObject) { + return + } + + val detail = gson.fromJson( + result, object : TypeToken() {}.type + ) + val data = detail.data + + binding.checkStandardView.text = data.content + if (data.basisList == null || data.basisList.isEmpty()) { + return + } + val baseAdapter = object : + NormalRecyclerAdapter( + R.layout.item_hidden_trouble_base_rule_l_2, data.basisList + ) { + override fun convertView( + viewHolder: ViewHolder, position: Int, + item: HiddenTroubleDetailModel.DataModel.BasisListModel + ) { + val gridView = viewHolder.getView(R.id.baseRuleGridView) + val images = ArrayList() + item.imageList.forEach { image -> + images.add(image.combineFilePath()) + } + + val viewWidth = (context.getScreenWidth() * 0.8) - 30.dp2px(context) + val imageAdapter = ImageGridAdapter( + context, images, viewWidth.toInt(), 3 + ) + gridView.adapter = imageAdapter + gridView.onItemClickListener = + AdapterView.OnItemClickListener { _, _, index, _ -> + context.navigatePageTo(index, images) + } + + viewHolder.setText(R.id.specificationNameView, item.specificationName) + .setText(R.id.contentView, item.content) + .setText(R.id.chapterView, item.chapter) + } + } + binding.basisRecyclerView.adapter = baseAdapter + } + + override fun onFailure(throwable: Throwable) { + throwable.localizedMessage?.show(context) + } + }).build().start() + } + interface OnDialogButtonClickListener { fun onConfirmClick(file: File, result: HiddenTroubleResult) } diff --git a/app/src/main/java/com/casic/br/app/extensions/String.kt b/app/src/main/java/com/casic/br/app/extensions/String.kt index 9fc9241..1acff17 100644 --- a/app/src/main/java/com/casic/br/app/extensions/String.kt +++ b/app/src/main/java/com/casic/br/app/extensions/String.kt @@ -3,6 +3,7 @@ import android.content.Context import com.casic.br.app.callback.OnImageCompressListener import com.casic.br.app.utils.LocaleConstant +import com.casic.br.app.utils.RuntimeCache import com.google.gson.JsonParser import com.pengxh.kt.lite.extensions.createCompressImageDir import com.pengxh.kt.lite.utils.SaveKeyValues @@ -52,44 +53,32 @@ return "" } -fun String.isInScene(scene: String): Boolean { - when (scene) { - "配电箱" -> return listOf("配电箱", "电路图", "开关/控制设备", "电线", "跨电线").contains( - this - ) - +fun String.isTargetInScene(): Boolean { + when (RuntimeCache.sceneName) { + "配电箱" -> return listOf("开关", "跨电线").contains(this) "有限空间作业" -> return listOf( - "安全帽", - "呼吸器", - "防护服", - "围挡设施", - "安全警示标识", - "送风设备", - "照明设备", - "对讲设备", - "三脚架", - "气体检测报警仪" + "安全告知牌", "作业信息公示牌", "三脚架", "送风设备", + "呼吸器", "照明设备", "气体检测报警仪", "防护服", + "安全帽" ).contains(this) "非居民用户" -> return listOf( - "软管", - "接头", - "喉箍", - "切断阀", - "灶具", - "熄火保护", - "燃气泄漏报警装置" + "燃气计量器具", "可燃气体报警控制器", "燃气探测器", + "燃气管道", "防爆灯", "切断阀", "排烟设施", + "阀门" ).contains(this) - "居民用户" -> return listOf("软管", "接头", "喉箍", "切断阀", "灶具", "熄火保护").contains( - this - ) + "居民用户" -> return listOf("软管", "灶具").contains(this) + "调压站" -> return listOf( + "调压器", + "过滤器", + "阀门", + "压力表", + "流量计", + "安全阀" + ).contains(this) - "调压站" -> return listOf("软管", "接头", "喉箍", "切断阀", "灶具", "熄火保护").contains( - this - ) - - "建筑消防" -> return listOf("消火栓箱", "水枪", "水带", "灭火器").contains(this) + "建筑消防" -> return listOf("消火栓箱", "水枪", "水带", "消火栓", "灭火器").contains(this) } return false } diff --git a/app/src/main/java/com/casic/br/app/utils/YoloTargetDetectHelper.kt b/app/src/main/java/com/casic/br/app/utils/YoloTargetDetectHelper.kt index 3bd603c..c0ed1e4 100644 --- a/app/src/main/java/com/casic/br/app/utils/YoloTargetDetectHelper.kt +++ b/app/src/main/java/com/casic/br/app/utils/YoloTargetDetectHelper.kt @@ -130,7 +130,7 @@ if (detectResults.isContains(35)) { //包含电线裸露 val result = HiddenTroubleResult() - result.alarmCode = "" + result.alarmCode = "DistributionBoxHasExposedWire" result.warning = "配电箱内部电线裸露" hiddenTroubles.add(result) } @@ -158,7 +158,7 @@ if (!detectResults.isContains(34)) { //不包含熄火保护装置 val result = HiddenTroubleResult() - result.alarmCode = "" + result.alarmCode = "NonResidentUserHasNoFlameoutProtection" result.warning = "未发现熄火保护装置" hiddenTroubles.add(result) } @@ -216,14 +216,14 @@ if (detectResults.isContains(49)) { val result = HiddenTroubleResult() - result.alarmCode = "" + result.alarmCode = "NonStandardHoses" result.warning = "发现非标准软管" hiddenTroubles.add(result) } if (segmentationResults.isContains(5)) { val result = HiddenTroubleResult() - result.alarmCode = "" + result.alarmCode = "HoseCrackedAndAged" result.warning = "软管龟裂老化" hiddenTroubles.add(result) } diff --git a/app/src/main/java/com/casic/br/app/view/StartCheckByYoloActivity.kt b/app/src/main/java/com/casic/br/app/view/StartCheckByYoloActivity.kt index 4b2bb77..d31ee12 100644 --- a/app/src/main/java/com/casic/br/app/view/StartCheckByYoloActivity.kt +++ b/app/src/main/java/com/casic/br/app/view/StartCheckByYoloActivity.kt @@ -19,6 +19,7 @@ import com.casic.br.app.extensions.convert2YoloResult import com.casic.br.app.extensions.getSceneByTarget import com.casic.br.app.extensions.initImmersionBar +import com.casic.br.app.extensions.isTargetInScene import com.casic.br.app.external.INativeCallback import com.casic.br.app.external.YoloResult import com.casic.br.app.external.Yolov8ncnn @@ -301,8 +302,10 @@ //实时筛选隐患结果 detectHelper.siftHiddenTrouble(segmentationResults, detectResults) detectResults.forEach { - val label = LocaleConstant.TARGET_NAMES_ARRAY[it.type] - targetSet.add(label) + val target = LocaleConstant.TARGET_NAMES_ARRAY[it.type] + if (target.isTargetInScene()) { + targetSet.add(target) + } when (RuntimeCache.sceneName) { "有限空间作业" -> { when (it.type) { @@ -329,8 +332,10 @@ } } runOnUiThread { - binding.tipsTagView.visibility = View.VISIBLE - binding.tipsTagView.text = "${targetSet.size}" + if (targetSet.size > 0) { + binding.tipsTagView.visibility = View.VISIBLE + binding.tipsTagView.text = "${targetSet.size}" + } } } diff --git a/app/src/main/java/com/casic/br/app/widgets/DetectResultDialog.kt b/app/src/main/java/com/casic/br/app/widgets/DetectResultDialog.kt index 64c801a..cb787ec 100644 --- a/app/src/main/java/com/casic/br/app/widgets/DetectResultDialog.kt +++ b/app/src/main/java/com/casic/br/app/widgets/DetectResultDialog.kt @@ -4,14 +4,35 @@ import android.content.Context import android.graphics.Bitmap import android.os.Bundle +import android.widget.AdapterView +import android.widget.GridView +import com.casic.br.app.R +import com.casic.br.app.adapter.ImageGridAdapter import com.casic.br.app.callback.OnImageCompressListener import com.casic.br.app.databinding.DialogDetectResultBinding +import com.casic.br.app.extensions.combineFilePath import com.casic.br.app.extensions.compressImage +import com.casic.br.app.extensions.getResponseCode +import com.casic.br.app.extensions.getResponseMessage +import com.casic.br.app.model.HiddenTroubleDetailModel import com.casic.br.app.model.HiddenTroubleResult +import com.casic.br.app.utils.AuthenticationHelper +import com.casic.br.app.utils.LocaleConstant +import com.casic.br.app.view.BigImageActivity +import com.google.gson.Gson +import com.google.gson.JsonParser +import com.google.gson.reflect.TypeToken +import com.pengxh.kt.lite.adapter.NormalRecyclerAdapter +import com.pengxh.kt.lite.adapter.ViewHolder import com.pengxh.kt.lite.extensions.binding import com.pengxh.kt.lite.extensions.createImageFileDir +import com.pengxh.kt.lite.extensions.dp2px +import com.pengxh.kt.lite.extensions.getScreenWidth import com.pengxh.kt.lite.extensions.initDialogLayoutParams +import com.pengxh.kt.lite.extensions.navigatePageTo import com.pengxh.kt.lite.extensions.saveImage +import com.pengxh.kt.lite.extensions.show +import com.pengxh.kt.lite.utils.HttpRequestHub import org.opencv.android.Utils import org.opencv.core.Mat import java.io.File @@ -20,6 +41,7 @@ private val kTag = "DetectResultDialog" private val binding: DialogDetectResultBinding by binding() + private val gson by lazy { Gson() } private lateinit var result: HiddenTroubleResult private lateinit var mat: Mat private lateinit var listener: OnDialogButtonClickListener @@ -58,9 +80,75 @@ this.listener = listener this.result = result binding.messageView.text = result.warning + bindBasisRecyclerView() return this } + private fun bindBasisRecyclerView() { + HttpRequestHub.Builder() + .setAuthentication("token", AuthenticationHelper.token) + .setRequestTarget("${LocaleConstant.SERVER_BASE_URL}/alarm-menu/detailByCode?alarmCode=${result.alarmCode}") + .setOnHttpRequestListener(object : HttpRequestHub.OnHttpRequestListener { + override fun onSuccess(result: String) { + if (result.getResponseCode() != 200) { + result.getResponseMessage().show(context) + return + } + + //判断是否是正常的数据 + val element = JsonParser.parseString(result) + val jsonObject = element.asJsonObject + if (!jsonObject.get("data").isJsonObject) { + return + } + + val detail = gson.fromJson( + result, object : TypeToken() {}.type + ) + val data = detail.data + + binding.checkStandardView.text = data.content + if (data.basisList == null || data.basisList.isEmpty()) { + return + } + val baseAdapter = object : + NormalRecyclerAdapter( + R.layout.item_hidden_trouble_base_rule_l_2, data.basisList + ) { + override fun convertView( + viewHolder: ViewHolder, position: Int, + item: HiddenTroubleDetailModel.DataModel.BasisListModel + ) { + val gridView = viewHolder.getView(R.id.baseRuleGridView) + val images = ArrayList() + item.imageList.forEach { image -> + images.add(image.combineFilePath()) + } + + val viewWidth = (context.getScreenWidth() * 0.8) - 30.dp2px(context) + val imageAdapter = ImageGridAdapter( + context, images, viewWidth.toInt(), 3 + ) + gridView.adapter = imageAdapter + gridView.onItemClickListener = + AdapterView.OnItemClickListener { _, _, index, _ -> + context.navigatePageTo(index, images) + } + + viewHolder.setText(R.id.specificationNameView, item.specificationName) + .setText(R.id.contentView, item.content) + .setText(R.id.chapterView, item.chapter) + } + } + binding.basisRecyclerView.adapter = baseAdapter + } + + override fun onFailure(throwable: Throwable) { + throwable.localizedMessage?.show(context) + } + }).build().start() + } + interface OnDialogButtonClickListener { fun onConfirmClick(file: File, result: HiddenTroubleResult) } diff --git a/app/src/main/res/layout/activity_hidden_trouble_detail.xml b/app/src/main/res/layout/activity_hidden_trouble_detail.xml index 7def1d3..9c0a5a4 100644 --- a/app/src/main/res/layout/activity_hidden_trouble_detail.xml +++ b/app/src/main/res/layout/activity_hidden_trouble_detail.xml @@ -112,7 +112,7 @@ diff --git a/app/src/main/java/com/casic/br/app/extensions/String.kt b/app/src/main/java/com/casic/br/app/extensions/String.kt index 9fc9241..1acff17 100644 --- a/app/src/main/java/com/casic/br/app/extensions/String.kt +++ b/app/src/main/java/com/casic/br/app/extensions/String.kt @@ -3,6 +3,7 @@ import android.content.Context import com.casic.br.app.callback.OnImageCompressListener import com.casic.br.app.utils.LocaleConstant +import com.casic.br.app.utils.RuntimeCache import com.google.gson.JsonParser import com.pengxh.kt.lite.extensions.createCompressImageDir import com.pengxh.kt.lite.utils.SaveKeyValues @@ -52,44 +53,32 @@ return "" } -fun String.isInScene(scene: String): Boolean { - when (scene) { - "配电箱" -> return listOf("配电箱", "电路图", "开关/控制设备", "电线", "跨电线").contains( - this - ) - +fun String.isTargetInScene(): Boolean { + when (RuntimeCache.sceneName) { + "配电箱" -> return listOf("开关", "跨电线").contains(this) "有限空间作业" -> return listOf( - "安全帽", - "呼吸器", - "防护服", - "围挡设施", - "安全警示标识", - "送风设备", - "照明设备", - "对讲设备", - "三脚架", - "气体检测报警仪" + "安全告知牌", "作业信息公示牌", "三脚架", "送风设备", + "呼吸器", "照明设备", "气体检测报警仪", "防护服", + "安全帽" ).contains(this) "非居民用户" -> return listOf( - "软管", - "接头", - "喉箍", - "切断阀", - "灶具", - "熄火保护", - "燃气泄漏报警装置" + "燃气计量器具", "可燃气体报警控制器", "燃气探测器", + "燃气管道", "防爆灯", "切断阀", "排烟设施", + "阀门" ).contains(this) - "居民用户" -> return listOf("软管", "接头", "喉箍", "切断阀", "灶具", "熄火保护").contains( - this - ) + "居民用户" -> return listOf("软管", "灶具").contains(this) + "调压站" -> return listOf( + "调压器", + "过滤器", + "阀门", + "压力表", + "流量计", + "安全阀" + ).contains(this) - "调压站" -> return listOf("软管", "接头", "喉箍", "切断阀", "灶具", "熄火保护").contains( - this - ) - - "建筑消防" -> return listOf("消火栓箱", "水枪", "水带", "灭火器").contains(this) + "建筑消防" -> return listOf("消火栓箱", "水枪", "水带", "消火栓", "灭火器").contains(this) } return false } diff --git a/app/src/main/java/com/casic/br/app/utils/YoloTargetDetectHelper.kt b/app/src/main/java/com/casic/br/app/utils/YoloTargetDetectHelper.kt index 3bd603c..c0ed1e4 100644 --- a/app/src/main/java/com/casic/br/app/utils/YoloTargetDetectHelper.kt +++ b/app/src/main/java/com/casic/br/app/utils/YoloTargetDetectHelper.kt @@ -130,7 +130,7 @@ if (detectResults.isContains(35)) { //包含电线裸露 val result = HiddenTroubleResult() - result.alarmCode = "" + result.alarmCode = "DistributionBoxHasExposedWire" result.warning = "配电箱内部电线裸露" hiddenTroubles.add(result) } @@ -158,7 +158,7 @@ if (!detectResults.isContains(34)) { //不包含熄火保护装置 val result = HiddenTroubleResult() - result.alarmCode = "" + result.alarmCode = "NonResidentUserHasNoFlameoutProtection" result.warning = "未发现熄火保护装置" hiddenTroubles.add(result) } @@ -216,14 +216,14 @@ if (detectResults.isContains(49)) { val result = HiddenTroubleResult() - result.alarmCode = "" + result.alarmCode = "NonStandardHoses" result.warning = "发现非标准软管" hiddenTroubles.add(result) } if (segmentationResults.isContains(5)) { val result = HiddenTroubleResult() - result.alarmCode = "" + result.alarmCode = "HoseCrackedAndAged" result.warning = "软管龟裂老化" hiddenTroubles.add(result) } diff --git a/app/src/main/java/com/casic/br/app/view/StartCheckByYoloActivity.kt b/app/src/main/java/com/casic/br/app/view/StartCheckByYoloActivity.kt index 4b2bb77..d31ee12 100644 --- a/app/src/main/java/com/casic/br/app/view/StartCheckByYoloActivity.kt +++ b/app/src/main/java/com/casic/br/app/view/StartCheckByYoloActivity.kt @@ -19,6 +19,7 @@ import com.casic.br.app.extensions.convert2YoloResult import com.casic.br.app.extensions.getSceneByTarget import com.casic.br.app.extensions.initImmersionBar +import com.casic.br.app.extensions.isTargetInScene import com.casic.br.app.external.INativeCallback import com.casic.br.app.external.YoloResult import com.casic.br.app.external.Yolov8ncnn @@ -301,8 +302,10 @@ //实时筛选隐患结果 detectHelper.siftHiddenTrouble(segmentationResults, detectResults) detectResults.forEach { - val label = LocaleConstant.TARGET_NAMES_ARRAY[it.type] - targetSet.add(label) + val target = LocaleConstant.TARGET_NAMES_ARRAY[it.type] + if (target.isTargetInScene()) { + targetSet.add(target) + } when (RuntimeCache.sceneName) { "有限空间作业" -> { when (it.type) { @@ -329,8 +332,10 @@ } } runOnUiThread { - binding.tipsTagView.visibility = View.VISIBLE - binding.tipsTagView.text = "${targetSet.size}" + if (targetSet.size > 0) { + binding.tipsTagView.visibility = View.VISIBLE + binding.tipsTagView.text = "${targetSet.size}" + } } } diff --git a/app/src/main/java/com/casic/br/app/widgets/DetectResultDialog.kt b/app/src/main/java/com/casic/br/app/widgets/DetectResultDialog.kt index 64c801a..cb787ec 100644 --- a/app/src/main/java/com/casic/br/app/widgets/DetectResultDialog.kt +++ b/app/src/main/java/com/casic/br/app/widgets/DetectResultDialog.kt @@ -4,14 +4,35 @@ import android.content.Context import android.graphics.Bitmap import android.os.Bundle +import android.widget.AdapterView +import android.widget.GridView +import com.casic.br.app.R +import com.casic.br.app.adapter.ImageGridAdapter import com.casic.br.app.callback.OnImageCompressListener import com.casic.br.app.databinding.DialogDetectResultBinding +import com.casic.br.app.extensions.combineFilePath import com.casic.br.app.extensions.compressImage +import com.casic.br.app.extensions.getResponseCode +import com.casic.br.app.extensions.getResponseMessage +import com.casic.br.app.model.HiddenTroubleDetailModel import com.casic.br.app.model.HiddenTroubleResult +import com.casic.br.app.utils.AuthenticationHelper +import com.casic.br.app.utils.LocaleConstant +import com.casic.br.app.view.BigImageActivity +import com.google.gson.Gson +import com.google.gson.JsonParser +import com.google.gson.reflect.TypeToken +import com.pengxh.kt.lite.adapter.NormalRecyclerAdapter +import com.pengxh.kt.lite.adapter.ViewHolder import com.pengxh.kt.lite.extensions.binding import com.pengxh.kt.lite.extensions.createImageFileDir +import com.pengxh.kt.lite.extensions.dp2px +import com.pengxh.kt.lite.extensions.getScreenWidth import com.pengxh.kt.lite.extensions.initDialogLayoutParams +import com.pengxh.kt.lite.extensions.navigatePageTo import com.pengxh.kt.lite.extensions.saveImage +import com.pengxh.kt.lite.extensions.show +import com.pengxh.kt.lite.utils.HttpRequestHub import org.opencv.android.Utils import org.opencv.core.Mat import java.io.File @@ -20,6 +41,7 @@ private val kTag = "DetectResultDialog" private val binding: DialogDetectResultBinding by binding() + private val gson by lazy { Gson() } private lateinit var result: HiddenTroubleResult private lateinit var mat: Mat private lateinit var listener: OnDialogButtonClickListener @@ -58,9 +80,75 @@ this.listener = listener this.result = result binding.messageView.text = result.warning + bindBasisRecyclerView() return this } + private fun bindBasisRecyclerView() { + HttpRequestHub.Builder() + .setAuthentication("token", AuthenticationHelper.token) + .setRequestTarget("${LocaleConstant.SERVER_BASE_URL}/alarm-menu/detailByCode?alarmCode=${result.alarmCode}") + .setOnHttpRequestListener(object : HttpRequestHub.OnHttpRequestListener { + override fun onSuccess(result: String) { + if (result.getResponseCode() != 200) { + result.getResponseMessage().show(context) + return + } + + //判断是否是正常的数据 + val element = JsonParser.parseString(result) + val jsonObject = element.asJsonObject + if (!jsonObject.get("data").isJsonObject) { + return + } + + val detail = gson.fromJson( + result, object : TypeToken() {}.type + ) + val data = detail.data + + binding.checkStandardView.text = data.content + if (data.basisList == null || data.basisList.isEmpty()) { + return + } + val baseAdapter = object : + NormalRecyclerAdapter( + R.layout.item_hidden_trouble_base_rule_l_2, data.basisList + ) { + override fun convertView( + viewHolder: ViewHolder, position: Int, + item: HiddenTroubleDetailModel.DataModel.BasisListModel + ) { + val gridView = viewHolder.getView(R.id.baseRuleGridView) + val images = ArrayList() + item.imageList.forEach { image -> + images.add(image.combineFilePath()) + } + + val viewWidth = (context.getScreenWidth() * 0.8) - 30.dp2px(context) + val imageAdapter = ImageGridAdapter( + context, images, viewWidth.toInt(), 3 + ) + gridView.adapter = imageAdapter + gridView.onItemClickListener = + AdapterView.OnItemClickListener { _, _, index, _ -> + context.navigatePageTo(index, images) + } + + viewHolder.setText(R.id.specificationNameView, item.specificationName) + .setText(R.id.contentView, item.content) + .setText(R.id.chapterView, item.chapter) + } + } + binding.basisRecyclerView.adapter = baseAdapter + } + + override fun onFailure(throwable: Throwable) { + throwable.localizedMessage?.show(context) + } + }).build().start() + } + interface OnDialogButtonClickListener { fun onConfirmClick(file: File, result: HiddenTroubleResult) } diff --git a/app/src/main/res/layout/activity_hidden_trouble_detail.xml b/app/src/main/res/layout/activity_hidden_trouble_detail.xml index 7def1d3..9c0a5a4 100644 --- a/app/src/main/res/layout/activity_hidden_trouble_detail.xml +++ b/app/src/main/res/layout/activity_hidden_trouble_detail.xml @@ -112,7 +112,7 @@ diff --git a/app/src/main/res/layout/dialog_detect_result.xml b/app/src/main/res/layout/dialog_detect_result.xml index 8b95a7e..b4810c7 100644 --- a/app/src/main/res/layout/dialog_detect_result.xml +++ b/app/src/main/res/layout/dialog_detect_result.xml @@ -5,53 +5,95 @@ android:layout_height="wrap_content" android:background="#33FF0000" android:gravity="center" - android:orientation="vertical" + android:orientation="horizontal" android:padding="@dimen/dp_15"> - - - + android:layout_gravity="top" + android:src="@drawable/ic_warning" /> + android:layout_height="wrap_content" + android:layout_marginStart="@dimen/dp_10" + android:orientation="vertical"> -