diff --git a/app/src/main/java/com/casic/br/app/fragment/CheckManifestFragment.kt b/app/src/main/java/com/casic/br/app/fragment/CheckManifestFragment.kt index 8ef6703..301007d 100644 --- a/app/src/main/java/com/casic/br/app/fragment/CheckManifestFragment.kt +++ b/app/src/main/java/com/casic/br/app/fragment/CheckManifestFragment.kt @@ -7,6 +7,7 @@ import com.casic.br.app.R import com.casic.br.app.databinding.FragmentCheckManifestBinding import com.casic.br.app.model.SceneCheckManifestModel +import com.casic.br.app.utils.RuntimeCache import com.casic.br.app.vm.CheckManifestViewModel import com.casic.br.app.vm.ConfigViewModel import com.casic.br.app.widgets.CheckStandardSheet @@ -14,8 +15,7 @@ import com.pengxh.kt.lite.adapter.ViewHolder import com.pengxh.kt.lite.base.KotlinBaseFragment -class CheckManifestFragment(private val detectedScene: String) : - KotlinBaseFragment() { +class CheckManifestFragment : KotlinBaseFragment() { private val kTag = "CheckManifestFragment" private lateinit var configViewModel: ConfigViewModel @@ -32,7 +32,7 @@ configViewModel.dictionary.observe(this) { if (it.code == 200) { for (dic in it.data) { - if (dic.name == detectedScene) { + if (dic.name == RuntimeCache.sceneName) { checkManifestViewModel.getCheckManifestByScene(requireContext(), dic.value) return@observe } diff --git a/app/src/main/java/com/casic/br/app/fragment/CheckManifestFragment.kt b/app/src/main/java/com/casic/br/app/fragment/CheckManifestFragment.kt index 8ef6703..301007d 100644 --- a/app/src/main/java/com/casic/br/app/fragment/CheckManifestFragment.kt +++ b/app/src/main/java/com/casic/br/app/fragment/CheckManifestFragment.kt @@ -7,6 +7,7 @@ import com.casic.br.app.R import com.casic.br.app.databinding.FragmentCheckManifestBinding import com.casic.br.app.model.SceneCheckManifestModel +import com.casic.br.app.utils.RuntimeCache import com.casic.br.app.vm.CheckManifestViewModel import com.casic.br.app.vm.ConfigViewModel import com.casic.br.app.widgets.CheckStandardSheet @@ -14,8 +15,7 @@ import com.pengxh.kt.lite.adapter.ViewHolder import com.pengxh.kt.lite.base.KotlinBaseFragment -class CheckManifestFragment(private val detectedScene: String) : - KotlinBaseFragment() { +class CheckManifestFragment : KotlinBaseFragment() { private val kTag = "CheckManifestFragment" private lateinit var configViewModel: ConfigViewModel @@ -32,7 +32,7 @@ configViewModel.dictionary.observe(this) { if (it.code == 200) { for (dic in it.data) { - if (dic.name == detectedScene) { + if (dic.name == RuntimeCache.sceneName) { checkManifestViewModel.getCheckManifestByScene(requireContext(), dic.value) return@observe } diff --git a/app/src/main/java/com/casic/br/app/fragment/HiddenTroubleFragment.kt b/app/src/main/java/com/casic/br/app/fragment/HiddenTroubleFragment.kt index 4d66ee0..62fcc4a 100644 --- a/app/src/main/java/com/casic/br/app/fragment/HiddenTroubleFragment.kt +++ b/app/src/main/java/com/casic/br/app/fragment/HiddenTroubleFragment.kt @@ -9,6 +9,7 @@ import com.casic.br.app.databinding.FragmentHiddenTroubleBinding import com.casic.br.app.extensions.combineFilePath import com.casic.br.app.model.HiddenTroubleListResultModel +import com.casic.br.app.utils.RuntimeCache import com.casic.br.app.view.BigImageActivity import com.casic.br.app.vm.InspectionViewModel import com.pengxh.kt.lite.adapter.NormalRecyclerAdapter @@ -17,8 +18,7 @@ import com.pengxh.kt.lite.extensions.navigatePageTo import com.pengxh.kt.lite.extensions.show -class HiddenTroubleFragment(private val inspectionId: String) : - KotlinBaseFragment() { +class HiddenTroubleFragment : KotlinBaseFragment() { private lateinit var inspectionViewModel: InspectionViewModel @@ -28,7 +28,9 @@ override fun initOnCreate(savedInstanceState: Bundle?) { inspectionViewModel = ViewModelProvider(this)[InspectionViewModel::class.java] - inspectionViewModel.getHiddenTroublesByInspectionId(requireContext(), inspectionId) + inspectionViewModel.getHiddenTroublesByInspectionId( + requireContext(), RuntimeCache.inspectionId + ) inspectionViewModel.troublesResultModel.observe(this) { if (it.code == 200) { if (it.data.isEmpty()) { diff --git a/app/src/main/java/com/casic/br/app/fragment/CheckManifestFragment.kt b/app/src/main/java/com/casic/br/app/fragment/CheckManifestFragment.kt index 8ef6703..301007d 100644 --- a/app/src/main/java/com/casic/br/app/fragment/CheckManifestFragment.kt +++ b/app/src/main/java/com/casic/br/app/fragment/CheckManifestFragment.kt @@ -7,6 +7,7 @@ import com.casic.br.app.R import com.casic.br.app.databinding.FragmentCheckManifestBinding import com.casic.br.app.model.SceneCheckManifestModel +import com.casic.br.app.utils.RuntimeCache import com.casic.br.app.vm.CheckManifestViewModel import com.casic.br.app.vm.ConfigViewModel import com.casic.br.app.widgets.CheckStandardSheet @@ -14,8 +15,7 @@ import com.pengxh.kt.lite.adapter.ViewHolder import com.pengxh.kt.lite.base.KotlinBaseFragment -class CheckManifestFragment(private val detectedScene: String) : - KotlinBaseFragment() { +class CheckManifestFragment : KotlinBaseFragment() { private val kTag = "CheckManifestFragment" private lateinit var configViewModel: ConfigViewModel @@ -32,7 +32,7 @@ configViewModel.dictionary.observe(this) { if (it.code == 200) { for (dic in it.data) { - if (dic.name == detectedScene) { + if (dic.name == RuntimeCache.sceneName) { checkManifestViewModel.getCheckManifestByScene(requireContext(), dic.value) return@observe } diff --git a/app/src/main/java/com/casic/br/app/fragment/HiddenTroubleFragment.kt b/app/src/main/java/com/casic/br/app/fragment/HiddenTroubleFragment.kt index 4d66ee0..62fcc4a 100644 --- a/app/src/main/java/com/casic/br/app/fragment/HiddenTroubleFragment.kt +++ b/app/src/main/java/com/casic/br/app/fragment/HiddenTroubleFragment.kt @@ -9,6 +9,7 @@ import com.casic.br.app.databinding.FragmentHiddenTroubleBinding import com.casic.br.app.extensions.combineFilePath import com.casic.br.app.model.HiddenTroubleListResultModel +import com.casic.br.app.utils.RuntimeCache import com.casic.br.app.view.BigImageActivity import com.casic.br.app.vm.InspectionViewModel import com.pengxh.kt.lite.adapter.NormalRecyclerAdapter @@ -17,8 +18,7 @@ import com.pengxh.kt.lite.extensions.navigatePageTo import com.pengxh.kt.lite.extensions.show -class HiddenTroubleFragment(private val inspectionId: String) : - KotlinBaseFragment() { +class HiddenTroubleFragment : KotlinBaseFragment() { private lateinit var inspectionViewModel: InspectionViewModel @@ -28,7 +28,9 @@ override fun initOnCreate(savedInstanceState: Bundle?) { inspectionViewModel = ViewModelProvider(this)[InspectionViewModel::class.java] - inspectionViewModel.getHiddenTroublesByInspectionId(requireContext(), inspectionId) + inspectionViewModel.getHiddenTroublesByInspectionId( + requireContext(), RuntimeCache.inspectionId + ) inspectionViewModel.troublesResultModel.observe(this) { if (it.code == 200) { if (it.data.isEmpty()) { diff --git a/app/src/main/java/com/casic/br/app/retrofit/RetrofitServiceManager.kt b/app/src/main/java/com/casic/br/app/retrofit/RetrofitServiceManager.kt index 79a5386..c4edbee 100644 --- a/app/src/main/java/com/casic/br/app/retrofit/RetrofitServiceManager.kt +++ b/app/src/main/java/com/casic/br/app/retrofit/RetrofitServiceManager.kt @@ -2,6 +2,7 @@ import com.casic.br.app.utils.AuthenticationHelper import com.casic.br.app.utils.LocaleConstant +import com.casic.br.app.utils.RuntimeCache import com.google.gson.Gson import com.google.gson.JsonObject import com.google.gson.reflect.TypeToken @@ -134,22 +135,38 @@ * 添加隐患 */ suspend fun addHiddenTrouble( - mainType: String, - subType: String, - hiddenTroubleName: String, - hiddenTroubleContent: String, - hiddenTroubleImageArray: Array> + mainClass: String, + subClass: String, + sceneName: String, + subClassName: String, + basis: String, + alarmMenuId: String, + content: String, + scene: String, + inspectionId: String, + name: String, + mainClassName: String, + id: String, + imageList: Array> ): String { val param = JsonObject() - param.addProperty("mainClass", mainType) - param.addProperty("subClass", subType) - param.addProperty("name", hiddenTroubleName) - param.addProperty("content", hiddenTroubleContent) - param.add("imageList", gson.toJsonTree(hiddenTroubleImageArray, typeToken).asJsonArray) - + param.addProperty("mainClass", mainClass) + param.addProperty("subClass", subClass) + param.addProperty("sceneName", sceneName) + param.addProperty("subClassName", subClassName) + param.addProperty("basis", basis) + param.addProperty("alarmMenuId", alarmMenuId) + param.addProperty("content", content) + param.addProperty("scene", scene) + param.addProperty("inspectionId", inspectionId) + param.addProperty("name", name) + param.addProperty("mainClassName", mainClassName) + param.addProperty("id", id) + param.add("imageList", gson.toJsonTree(imageList, typeToken).asJsonArray) val requestBody = param.toString().toRequestBody( "application/json;charset=UTF-8".toMediaType() ) + return api.addHiddenTrouble(AuthenticationHelper.token, requestBody) } @@ -251,17 +268,12 @@ /** * 推送报警信息 * */ - suspend fun uploadDetectTargetAlarm( - alarmCode: String, - alarmImgPath: String, - inspectionId: String, - scene: String - ): String { + suspend fun uploadDetectTargetAlarm(alarmCode: String, alarmImgPath: String): String { val param = JsonObject() param.addProperty("alarmCode", alarmCode) param.addProperty("alarmImgPath", alarmImgPath) - param.addProperty("inspectionId", inspectionId) - param.addProperty("scene", scene) + param.addProperty("inspectionId", RuntimeCache.inspectionId) + param.addProperty("scene", RuntimeCache.sceneName) val requestBody = param.toString().toRequestBody( "application/json;charset=UTF-8".toMediaType() diff --git a/app/src/main/java/com/casic/br/app/fragment/CheckManifestFragment.kt b/app/src/main/java/com/casic/br/app/fragment/CheckManifestFragment.kt index 8ef6703..301007d 100644 --- a/app/src/main/java/com/casic/br/app/fragment/CheckManifestFragment.kt +++ b/app/src/main/java/com/casic/br/app/fragment/CheckManifestFragment.kt @@ -7,6 +7,7 @@ import com.casic.br.app.R import com.casic.br.app.databinding.FragmentCheckManifestBinding import com.casic.br.app.model.SceneCheckManifestModel +import com.casic.br.app.utils.RuntimeCache import com.casic.br.app.vm.CheckManifestViewModel import com.casic.br.app.vm.ConfigViewModel import com.casic.br.app.widgets.CheckStandardSheet @@ -14,8 +15,7 @@ import com.pengxh.kt.lite.adapter.ViewHolder import com.pengxh.kt.lite.base.KotlinBaseFragment -class CheckManifestFragment(private val detectedScene: String) : - KotlinBaseFragment() { +class CheckManifestFragment : KotlinBaseFragment() { private val kTag = "CheckManifestFragment" private lateinit var configViewModel: ConfigViewModel @@ -32,7 +32,7 @@ configViewModel.dictionary.observe(this) { if (it.code == 200) { for (dic in it.data) { - if (dic.name == detectedScene) { + if (dic.name == RuntimeCache.sceneName) { checkManifestViewModel.getCheckManifestByScene(requireContext(), dic.value) return@observe } diff --git a/app/src/main/java/com/casic/br/app/fragment/HiddenTroubleFragment.kt b/app/src/main/java/com/casic/br/app/fragment/HiddenTroubleFragment.kt index 4d66ee0..62fcc4a 100644 --- a/app/src/main/java/com/casic/br/app/fragment/HiddenTroubleFragment.kt +++ b/app/src/main/java/com/casic/br/app/fragment/HiddenTroubleFragment.kt @@ -9,6 +9,7 @@ import com.casic.br.app.databinding.FragmentHiddenTroubleBinding import com.casic.br.app.extensions.combineFilePath import com.casic.br.app.model.HiddenTroubleListResultModel +import com.casic.br.app.utils.RuntimeCache import com.casic.br.app.view.BigImageActivity import com.casic.br.app.vm.InspectionViewModel import com.pengxh.kt.lite.adapter.NormalRecyclerAdapter @@ -17,8 +18,7 @@ import com.pengxh.kt.lite.extensions.navigatePageTo import com.pengxh.kt.lite.extensions.show -class HiddenTroubleFragment(private val inspectionId: String) : - KotlinBaseFragment() { +class HiddenTroubleFragment : KotlinBaseFragment() { private lateinit var inspectionViewModel: InspectionViewModel @@ -28,7 +28,9 @@ override fun initOnCreate(savedInstanceState: Bundle?) { inspectionViewModel = ViewModelProvider(this)[InspectionViewModel::class.java] - inspectionViewModel.getHiddenTroublesByInspectionId(requireContext(), inspectionId) + inspectionViewModel.getHiddenTroublesByInspectionId( + requireContext(), RuntimeCache.inspectionId + ) inspectionViewModel.troublesResultModel.observe(this) { if (it.code == 200) { if (it.data.isEmpty()) { diff --git a/app/src/main/java/com/casic/br/app/retrofit/RetrofitServiceManager.kt b/app/src/main/java/com/casic/br/app/retrofit/RetrofitServiceManager.kt index 79a5386..c4edbee 100644 --- a/app/src/main/java/com/casic/br/app/retrofit/RetrofitServiceManager.kt +++ b/app/src/main/java/com/casic/br/app/retrofit/RetrofitServiceManager.kt @@ -2,6 +2,7 @@ import com.casic.br.app.utils.AuthenticationHelper import com.casic.br.app.utils.LocaleConstant +import com.casic.br.app.utils.RuntimeCache import com.google.gson.Gson import com.google.gson.JsonObject import com.google.gson.reflect.TypeToken @@ -134,22 +135,38 @@ * 添加隐患 */ suspend fun addHiddenTrouble( - mainType: String, - subType: String, - hiddenTroubleName: String, - hiddenTroubleContent: String, - hiddenTroubleImageArray: Array> + mainClass: String, + subClass: String, + sceneName: String, + subClassName: String, + basis: String, + alarmMenuId: String, + content: String, + scene: String, + inspectionId: String, + name: String, + mainClassName: String, + id: String, + imageList: Array> ): String { val param = JsonObject() - param.addProperty("mainClass", mainType) - param.addProperty("subClass", subType) - param.addProperty("name", hiddenTroubleName) - param.addProperty("content", hiddenTroubleContent) - param.add("imageList", gson.toJsonTree(hiddenTroubleImageArray, typeToken).asJsonArray) - + param.addProperty("mainClass", mainClass) + param.addProperty("subClass", subClass) + param.addProperty("sceneName", sceneName) + param.addProperty("subClassName", subClassName) + param.addProperty("basis", basis) + param.addProperty("alarmMenuId", alarmMenuId) + param.addProperty("content", content) + param.addProperty("scene", scene) + param.addProperty("inspectionId", inspectionId) + param.addProperty("name", name) + param.addProperty("mainClassName", mainClassName) + param.addProperty("id", id) + param.add("imageList", gson.toJsonTree(imageList, typeToken).asJsonArray) val requestBody = param.toString().toRequestBody( "application/json;charset=UTF-8".toMediaType() ) + return api.addHiddenTrouble(AuthenticationHelper.token, requestBody) } @@ -251,17 +268,12 @@ /** * 推送报警信息 * */ - suspend fun uploadDetectTargetAlarm( - alarmCode: String, - alarmImgPath: String, - inspectionId: String, - scene: String - ): String { + suspend fun uploadDetectTargetAlarm(alarmCode: String, alarmImgPath: String): String { val param = JsonObject() param.addProperty("alarmCode", alarmCode) param.addProperty("alarmImgPath", alarmImgPath) - param.addProperty("inspectionId", inspectionId) - param.addProperty("scene", scene) + param.addProperty("inspectionId", RuntimeCache.inspectionId) + param.addProperty("scene", RuntimeCache.sceneName) val requestBody = param.toString().toRequestBody( "application/json;charset=UTF-8".toMediaType() diff --git a/app/src/main/java/com/casic/br/app/utils/RuntimeCache.kt b/app/src/main/java/com/casic/br/app/utils/RuntimeCache.kt new file mode 100644 index 0000000..fc87dd1 --- /dev/null +++ b/app/src/main/java/com/casic/br/app/utils/RuntimeCache.kt @@ -0,0 +1,12 @@ +package com.casic.br.app.utils + +import com.casic.br.app.model.DictionaryModel +import org.opencv.core.Mat + +object RuntimeCache { + var scene = "" + var sceneName = "" + var inspectionId = "" + var mainDicModels: MutableList = ArrayList() + lateinit var mat: Mat +} \ No newline at end of file diff --git a/app/src/main/java/com/casic/br/app/fragment/CheckManifestFragment.kt b/app/src/main/java/com/casic/br/app/fragment/CheckManifestFragment.kt index 8ef6703..301007d 100644 --- a/app/src/main/java/com/casic/br/app/fragment/CheckManifestFragment.kt +++ b/app/src/main/java/com/casic/br/app/fragment/CheckManifestFragment.kt @@ -7,6 +7,7 @@ import com.casic.br.app.R import com.casic.br.app.databinding.FragmentCheckManifestBinding import com.casic.br.app.model.SceneCheckManifestModel +import com.casic.br.app.utils.RuntimeCache import com.casic.br.app.vm.CheckManifestViewModel import com.casic.br.app.vm.ConfigViewModel import com.casic.br.app.widgets.CheckStandardSheet @@ -14,8 +15,7 @@ import com.pengxh.kt.lite.adapter.ViewHolder import com.pengxh.kt.lite.base.KotlinBaseFragment -class CheckManifestFragment(private val detectedScene: String) : - KotlinBaseFragment() { +class CheckManifestFragment : KotlinBaseFragment() { private val kTag = "CheckManifestFragment" private lateinit var configViewModel: ConfigViewModel @@ -32,7 +32,7 @@ configViewModel.dictionary.observe(this) { if (it.code == 200) { for (dic in it.data) { - if (dic.name == detectedScene) { + if (dic.name == RuntimeCache.sceneName) { checkManifestViewModel.getCheckManifestByScene(requireContext(), dic.value) return@observe } diff --git a/app/src/main/java/com/casic/br/app/fragment/HiddenTroubleFragment.kt b/app/src/main/java/com/casic/br/app/fragment/HiddenTroubleFragment.kt index 4d66ee0..62fcc4a 100644 --- a/app/src/main/java/com/casic/br/app/fragment/HiddenTroubleFragment.kt +++ b/app/src/main/java/com/casic/br/app/fragment/HiddenTroubleFragment.kt @@ -9,6 +9,7 @@ import com.casic.br.app.databinding.FragmentHiddenTroubleBinding import com.casic.br.app.extensions.combineFilePath import com.casic.br.app.model.HiddenTroubleListResultModel +import com.casic.br.app.utils.RuntimeCache import com.casic.br.app.view.BigImageActivity import com.casic.br.app.vm.InspectionViewModel import com.pengxh.kt.lite.adapter.NormalRecyclerAdapter @@ -17,8 +18,7 @@ import com.pengxh.kt.lite.extensions.navigatePageTo import com.pengxh.kt.lite.extensions.show -class HiddenTroubleFragment(private val inspectionId: String) : - KotlinBaseFragment() { +class HiddenTroubleFragment : KotlinBaseFragment() { private lateinit var inspectionViewModel: InspectionViewModel @@ -28,7 +28,9 @@ override fun initOnCreate(savedInstanceState: Bundle?) { inspectionViewModel = ViewModelProvider(this)[InspectionViewModel::class.java] - inspectionViewModel.getHiddenTroublesByInspectionId(requireContext(), inspectionId) + inspectionViewModel.getHiddenTroublesByInspectionId( + requireContext(), RuntimeCache.inspectionId + ) inspectionViewModel.troublesResultModel.observe(this) { if (it.code == 200) { if (it.data.isEmpty()) { diff --git a/app/src/main/java/com/casic/br/app/retrofit/RetrofitServiceManager.kt b/app/src/main/java/com/casic/br/app/retrofit/RetrofitServiceManager.kt index 79a5386..c4edbee 100644 --- a/app/src/main/java/com/casic/br/app/retrofit/RetrofitServiceManager.kt +++ b/app/src/main/java/com/casic/br/app/retrofit/RetrofitServiceManager.kt @@ -2,6 +2,7 @@ import com.casic.br.app.utils.AuthenticationHelper import com.casic.br.app.utils.LocaleConstant +import com.casic.br.app.utils.RuntimeCache import com.google.gson.Gson import com.google.gson.JsonObject import com.google.gson.reflect.TypeToken @@ -134,22 +135,38 @@ * 添加隐患 */ suspend fun addHiddenTrouble( - mainType: String, - subType: String, - hiddenTroubleName: String, - hiddenTroubleContent: String, - hiddenTroubleImageArray: Array> + mainClass: String, + subClass: String, + sceneName: String, + subClassName: String, + basis: String, + alarmMenuId: String, + content: String, + scene: String, + inspectionId: String, + name: String, + mainClassName: String, + id: String, + imageList: Array> ): String { val param = JsonObject() - param.addProperty("mainClass", mainType) - param.addProperty("subClass", subType) - param.addProperty("name", hiddenTroubleName) - param.addProperty("content", hiddenTroubleContent) - param.add("imageList", gson.toJsonTree(hiddenTroubleImageArray, typeToken).asJsonArray) - + param.addProperty("mainClass", mainClass) + param.addProperty("subClass", subClass) + param.addProperty("sceneName", sceneName) + param.addProperty("subClassName", subClassName) + param.addProperty("basis", basis) + param.addProperty("alarmMenuId", alarmMenuId) + param.addProperty("content", content) + param.addProperty("scene", scene) + param.addProperty("inspectionId", inspectionId) + param.addProperty("name", name) + param.addProperty("mainClassName", mainClassName) + param.addProperty("id", id) + param.add("imageList", gson.toJsonTree(imageList, typeToken).asJsonArray) val requestBody = param.toString().toRequestBody( "application/json;charset=UTF-8".toMediaType() ) + return api.addHiddenTrouble(AuthenticationHelper.token, requestBody) } @@ -251,17 +268,12 @@ /** * 推送报警信息 * */ - suspend fun uploadDetectTargetAlarm( - alarmCode: String, - alarmImgPath: String, - inspectionId: String, - scene: String - ): String { + suspend fun uploadDetectTargetAlarm(alarmCode: String, alarmImgPath: String): String { val param = JsonObject() param.addProperty("alarmCode", alarmCode) param.addProperty("alarmImgPath", alarmImgPath) - param.addProperty("inspectionId", inspectionId) - param.addProperty("scene", scene) + param.addProperty("inspectionId", RuntimeCache.inspectionId) + param.addProperty("scene", RuntimeCache.sceneName) val requestBody = param.toString().toRequestBody( "application/json;charset=UTF-8".toMediaType() diff --git a/app/src/main/java/com/casic/br/app/utils/RuntimeCache.kt b/app/src/main/java/com/casic/br/app/utils/RuntimeCache.kt new file mode 100644 index 0000000..fc87dd1 --- /dev/null +++ b/app/src/main/java/com/casic/br/app/utils/RuntimeCache.kt @@ -0,0 +1,12 @@ +package com.casic.br.app.utils + +import com.casic.br.app.model.DictionaryModel +import org.opencv.core.Mat + +object RuntimeCache { + var scene = "" + var sceneName = "" + var inspectionId = "" + var mainDicModels: MutableList = ArrayList() + lateinit var mat: Mat +} \ No newline at end of file diff --git a/app/src/main/java/com/casic/br/app/view/AddHiddenTroubleActivity.kt b/app/src/main/java/com/casic/br/app/view/AddHiddenTroubleActivity.kt index 0876851..e4f25df 100644 --- a/app/src/main/java/com/casic/br/app/view/AddHiddenTroubleActivity.kt +++ b/app/src/main/java/com/casic/br/app/view/AddHiddenTroubleActivity.kt @@ -1,51 +1,41 @@ package com.casic.br.app.view +import android.graphics.Bitmap import android.os.Bundle import android.util.Log import android.view.View import android.widget.AdapterView import android.widget.ArrayAdapter import androidx.lifecycle.ViewModelProvider -import androidx.lifecycle.lifecycleScope import com.casic.br.app.databinding.ActivityAddHiddenTroubleBinding import com.casic.br.app.extensions.combineFilePath import com.casic.br.app.extensions.compressImage import com.casic.br.app.model.DictionaryModel -import com.casic.br.app.utils.GlideLoadEngine +import com.casic.br.app.utils.RuntimeCache import com.casic.br.app.vm.ConfigViewModel import com.casic.br.app.vm.HiddenTroubleViewModel import com.casic.br.app.vm.ImageFileViewModel import com.casic.br.operationsite.test.callback.OnImageCompressListener -import com.google.gson.Gson -import com.google.gson.reflect.TypeToken -import com.luck.picture.lib.basic.PictureSelector -import com.luck.picture.lib.config.SelectMimeType -import com.luck.picture.lib.entity.LocalMedia -import com.luck.picture.lib.interfaces.OnResultCallbackListener import com.pengxh.kt.lite.adapter.EditableImageAdapter import com.pengxh.kt.lite.base.KotlinBaseActivity import com.pengxh.kt.lite.divider.RecyclerViewItemOffsets +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.saveImage import com.pengxh.kt.lite.extensions.show -import com.pengxh.kt.lite.utils.Constant import com.pengxh.kt.lite.utils.LoadState import com.pengxh.kt.lite.utils.LoadingDialogHub -import kotlinx.coroutines.delay -import kotlinx.coroutines.flow.flow -import kotlinx.coroutines.launch +import org.opencv.android.Utils import java.io.File - class AddHiddenTroubleActivity : KotlinBaseActivity() { private val kTag = "AddHiddenTroubleActivity" private val context = this - private val selectedImages = ArrayList() private val imagePaths = ArrayList>() private val recyclerViewImages = ArrayList() private val marginOffset by lazy { 1.dp2px(this) } - private val gson by lazy { Gson() } private lateinit var imageAdapter: EditableImageAdapter private lateinit var imageFileViewModel: ImageFileViewModel private lateinit var configViewModel: ConfigViewModel @@ -82,11 +72,8 @@ } override fun initOnCreate(savedInstanceState: Bundle?) { - val mainDicJsonValue = intent.getStringExtra(Constant.INTENT_PARAM) //转为实体类 - mainDicModels = gson.fromJson>( - mainDicJsonValue, object : TypeToken>() {}.type - ) + mainDicModels = RuntimeCache.mainDicModels val mainTypeArray = ArrayList() mainDicModels.forEach { mainTypeArray.add(it.name) @@ -124,6 +111,8 @@ val url = it.data.toString() val map = HashMap() map["alarmImage"] = url + map["id"] = "" + map["inspectionAlarmId"] = "" imagePaths.add(map) recyclerViewImages.add(url.combineFilePath()) imageAdapter.notifyDataSetChanged() @@ -169,7 +158,7 @@ imageAdapter.setOnItemClickListener(object : EditableImageAdapter.OnItemClickListener { override fun onAddImageClick() { - selectPicture() + addImage() } override fun onItemClick(position: Int) { @@ -177,7 +166,6 @@ } override fun onItemLongClick(view: View?, position: Int) { - selectedImages.removeAt(position) imagePaths.removeAt(position) recyclerViewImages.removeAt(position) imageAdapter.notifyDataSetChanged() @@ -189,8 +177,16 @@ this, selectedMainTypePosition.toString(), selectedSubTypePosition.toString(), - binding.hiddenTroubleNameView.text.toString(), + RuntimeCache.sceneName, + subDicModels[selectedMainTypePosition].name, + "", + "", binding.hiddenTroubleContentView.text.toString(), + RuntimeCache.scene, + RuntimeCache.inspectionId, + binding.hiddenTroubleNameView.text.toString(), + mainDicModels[selectedMainTypePosition].name, + "", imagePaths.toTypedArray() ) } @@ -198,45 +194,20 @@ binding.cancelButton.setOnClickListener { finish() } } - private fun selectPicture() { - PictureSelector.create(this).openGallery(SelectMimeType.ofImage()).isGif(false) - .isMaxSelectEnabledMask(true).setFilterMinFileSize(100).setMaxSelectNum(3) - .isDisplayCamera(true).setImageEngine(GlideLoadEngine.get) - .setSelectedData(selectedImages) - .forResult(object : OnResultCallbackListener { - override fun onResult(result: ArrayList) { - //重置已选的图片 - selectedImages.clear() - //因为result会带着之前的数据,所以需要清空之前已经add的数据 - recyclerViewImages.clear() - imagePaths.clear() - // 如果设置了setSelectedData,它会将之前的结果作为最新的返回值,要注意重复问题 - // 数据链控制图片压缩上传过程,防止速度过快导致压缩失败 - lifecycleScope.launch { - flow { - result.forEach { - emit(it) - delay(1000) - } - }.collect { - selectedImages.add(it) - //压缩图片并上传 - it.realPath.compressImage(context, object : OnImageCompressListener { - override fun onSuccess(file: File) { - Log.d(kTag, "absolutePath: ${file.absolutePath}") - //上传图片 - imageFileViewModel.uploadImage(file) - } + private fun addImage() { + //mat转图片 + val bitmap = Bitmap.createBitmap(RuntimeCache.mat.width(), RuntimeCache.mat.height(), Bitmap.Config.ARGB_8888) + Utils.matToBitmap(RuntimeCache.mat, bitmap, true) + val imagePath = "${createImageFileDir()}/${System.currentTimeMillis()}.png" + bitmap.saveImage(imagePath) + imagePath.compressImage(this, object : OnImageCompressListener { + override fun onSuccess(file: File) { + imageFileViewModel.uploadImage(file) + } - override fun onError(e: Throwable) { - e.printStackTrace() - } - }) - } - } - } - - override fun onCancel() {} - }) + override fun onError(e: Throwable) { + e.printStackTrace() + } + }) } } \ No newline at end of file diff --git a/app/src/main/java/com/casic/br/app/fragment/CheckManifestFragment.kt b/app/src/main/java/com/casic/br/app/fragment/CheckManifestFragment.kt index 8ef6703..301007d 100644 --- a/app/src/main/java/com/casic/br/app/fragment/CheckManifestFragment.kt +++ b/app/src/main/java/com/casic/br/app/fragment/CheckManifestFragment.kt @@ -7,6 +7,7 @@ import com.casic.br.app.R import com.casic.br.app.databinding.FragmentCheckManifestBinding import com.casic.br.app.model.SceneCheckManifestModel +import com.casic.br.app.utils.RuntimeCache import com.casic.br.app.vm.CheckManifestViewModel import com.casic.br.app.vm.ConfigViewModel import com.casic.br.app.widgets.CheckStandardSheet @@ -14,8 +15,7 @@ import com.pengxh.kt.lite.adapter.ViewHolder import com.pengxh.kt.lite.base.KotlinBaseFragment -class CheckManifestFragment(private val detectedScene: String) : - KotlinBaseFragment() { +class CheckManifestFragment : KotlinBaseFragment() { private val kTag = "CheckManifestFragment" private lateinit var configViewModel: ConfigViewModel @@ -32,7 +32,7 @@ configViewModel.dictionary.observe(this) { if (it.code == 200) { for (dic in it.data) { - if (dic.name == detectedScene) { + if (dic.name == RuntimeCache.sceneName) { checkManifestViewModel.getCheckManifestByScene(requireContext(), dic.value) return@observe } diff --git a/app/src/main/java/com/casic/br/app/fragment/HiddenTroubleFragment.kt b/app/src/main/java/com/casic/br/app/fragment/HiddenTroubleFragment.kt index 4d66ee0..62fcc4a 100644 --- a/app/src/main/java/com/casic/br/app/fragment/HiddenTroubleFragment.kt +++ b/app/src/main/java/com/casic/br/app/fragment/HiddenTroubleFragment.kt @@ -9,6 +9,7 @@ import com.casic.br.app.databinding.FragmentHiddenTroubleBinding import com.casic.br.app.extensions.combineFilePath import com.casic.br.app.model.HiddenTroubleListResultModel +import com.casic.br.app.utils.RuntimeCache import com.casic.br.app.view.BigImageActivity import com.casic.br.app.vm.InspectionViewModel import com.pengxh.kt.lite.adapter.NormalRecyclerAdapter @@ -17,8 +18,7 @@ import com.pengxh.kt.lite.extensions.navigatePageTo import com.pengxh.kt.lite.extensions.show -class HiddenTroubleFragment(private val inspectionId: String) : - KotlinBaseFragment() { +class HiddenTroubleFragment : KotlinBaseFragment() { private lateinit var inspectionViewModel: InspectionViewModel @@ -28,7 +28,9 @@ override fun initOnCreate(savedInstanceState: Bundle?) { inspectionViewModel = ViewModelProvider(this)[InspectionViewModel::class.java] - inspectionViewModel.getHiddenTroublesByInspectionId(requireContext(), inspectionId) + inspectionViewModel.getHiddenTroublesByInspectionId( + requireContext(), RuntimeCache.inspectionId + ) inspectionViewModel.troublesResultModel.observe(this) { if (it.code == 200) { if (it.data.isEmpty()) { diff --git a/app/src/main/java/com/casic/br/app/retrofit/RetrofitServiceManager.kt b/app/src/main/java/com/casic/br/app/retrofit/RetrofitServiceManager.kt index 79a5386..c4edbee 100644 --- a/app/src/main/java/com/casic/br/app/retrofit/RetrofitServiceManager.kt +++ b/app/src/main/java/com/casic/br/app/retrofit/RetrofitServiceManager.kt @@ -2,6 +2,7 @@ import com.casic.br.app.utils.AuthenticationHelper import com.casic.br.app.utils.LocaleConstant +import com.casic.br.app.utils.RuntimeCache import com.google.gson.Gson import com.google.gson.JsonObject import com.google.gson.reflect.TypeToken @@ -134,22 +135,38 @@ * 添加隐患 */ suspend fun addHiddenTrouble( - mainType: String, - subType: String, - hiddenTroubleName: String, - hiddenTroubleContent: String, - hiddenTroubleImageArray: Array> + mainClass: String, + subClass: String, + sceneName: String, + subClassName: String, + basis: String, + alarmMenuId: String, + content: String, + scene: String, + inspectionId: String, + name: String, + mainClassName: String, + id: String, + imageList: Array> ): String { val param = JsonObject() - param.addProperty("mainClass", mainType) - param.addProperty("subClass", subType) - param.addProperty("name", hiddenTroubleName) - param.addProperty("content", hiddenTroubleContent) - param.add("imageList", gson.toJsonTree(hiddenTroubleImageArray, typeToken).asJsonArray) - + param.addProperty("mainClass", mainClass) + param.addProperty("subClass", subClass) + param.addProperty("sceneName", sceneName) + param.addProperty("subClassName", subClassName) + param.addProperty("basis", basis) + param.addProperty("alarmMenuId", alarmMenuId) + param.addProperty("content", content) + param.addProperty("scene", scene) + param.addProperty("inspectionId", inspectionId) + param.addProperty("name", name) + param.addProperty("mainClassName", mainClassName) + param.addProperty("id", id) + param.add("imageList", gson.toJsonTree(imageList, typeToken).asJsonArray) val requestBody = param.toString().toRequestBody( "application/json;charset=UTF-8".toMediaType() ) + return api.addHiddenTrouble(AuthenticationHelper.token, requestBody) } @@ -251,17 +268,12 @@ /** * 推送报警信息 * */ - suspend fun uploadDetectTargetAlarm( - alarmCode: String, - alarmImgPath: String, - inspectionId: String, - scene: String - ): String { + suspend fun uploadDetectTargetAlarm(alarmCode: String, alarmImgPath: String): String { val param = JsonObject() param.addProperty("alarmCode", alarmCode) param.addProperty("alarmImgPath", alarmImgPath) - param.addProperty("inspectionId", inspectionId) - param.addProperty("scene", scene) + param.addProperty("inspectionId", RuntimeCache.inspectionId) + param.addProperty("scene", RuntimeCache.sceneName) val requestBody = param.toString().toRequestBody( "application/json;charset=UTF-8".toMediaType() diff --git a/app/src/main/java/com/casic/br/app/utils/RuntimeCache.kt b/app/src/main/java/com/casic/br/app/utils/RuntimeCache.kt new file mode 100644 index 0000000..fc87dd1 --- /dev/null +++ b/app/src/main/java/com/casic/br/app/utils/RuntimeCache.kt @@ -0,0 +1,12 @@ +package com.casic.br.app.utils + +import com.casic.br.app.model.DictionaryModel +import org.opencv.core.Mat + +object RuntimeCache { + var scene = "" + var sceneName = "" + var inspectionId = "" + var mainDicModels: MutableList = ArrayList() + lateinit var mat: Mat +} \ No newline at end of file diff --git a/app/src/main/java/com/casic/br/app/view/AddHiddenTroubleActivity.kt b/app/src/main/java/com/casic/br/app/view/AddHiddenTroubleActivity.kt index 0876851..e4f25df 100644 --- a/app/src/main/java/com/casic/br/app/view/AddHiddenTroubleActivity.kt +++ b/app/src/main/java/com/casic/br/app/view/AddHiddenTroubleActivity.kt @@ -1,51 +1,41 @@ package com.casic.br.app.view +import android.graphics.Bitmap import android.os.Bundle import android.util.Log import android.view.View import android.widget.AdapterView import android.widget.ArrayAdapter import androidx.lifecycle.ViewModelProvider -import androidx.lifecycle.lifecycleScope import com.casic.br.app.databinding.ActivityAddHiddenTroubleBinding import com.casic.br.app.extensions.combineFilePath import com.casic.br.app.extensions.compressImage import com.casic.br.app.model.DictionaryModel -import com.casic.br.app.utils.GlideLoadEngine +import com.casic.br.app.utils.RuntimeCache import com.casic.br.app.vm.ConfigViewModel import com.casic.br.app.vm.HiddenTroubleViewModel import com.casic.br.app.vm.ImageFileViewModel import com.casic.br.operationsite.test.callback.OnImageCompressListener -import com.google.gson.Gson -import com.google.gson.reflect.TypeToken -import com.luck.picture.lib.basic.PictureSelector -import com.luck.picture.lib.config.SelectMimeType -import com.luck.picture.lib.entity.LocalMedia -import com.luck.picture.lib.interfaces.OnResultCallbackListener import com.pengxh.kt.lite.adapter.EditableImageAdapter import com.pengxh.kt.lite.base.KotlinBaseActivity import com.pengxh.kt.lite.divider.RecyclerViewItemOffsets +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.saveImage import com.pengxh.kt.lite.extensions.show -import com.pengxh.kt.lite.utils.Constant import com.pengxh.kt.lite.utils.LoadState import com.pengxh.kt.lite.utils.LoadingDialogHub -import kotlinx.coroutines.delay -import kotlinx.coroutines.flow.flow -import kotlinx.coroutines.launch +import org.opencv.android.Utils import java.io.File - class AddHiddenTroubleActivity : KotlinBaseActivity() { private val kTag = "AddHiddenTroubleActivity" private val context = this - private val selectedImages = ArrayList() private val imagePaths = ArrayList>() private val recyclerViewImages = ArrayList() private val marginOffset by lazy { 1.dp2px(this) } - private val gson by lazy { Gson() } private lateinit var imageAdapter: EditableImageAdapter private lateinit var imageFileViewModel: ImageFileViewModel private lateinit var configViewModel: ConfigViewModel @@ -82,11 +72,8 @@ } override fun initOnCreate(savedInstanceState: Bundle?) { - val mainDicJsonValue = intent.getStringExtra(Constant.INTENT_PARAM) //转为实体类 - mainDicModels = gson.fromJson>( - mainDicJsonValue, object : TypeToken>() {}.type - ) + mainDicModels = RuntimeCache.mainDicModels val mainTypeArray = ArrayList() mainDicModels.forEach { mainTypeArray.add(it.name) @@ -124,6 +111,8 @@ val url = it.data.toString() val map = HashMap() map["alarmImage"] = url + map["id"] = "" + map["inspectionAlarmId"] = "" imagePaths.add(map) recyclerViewImages.add(url.combineFilePath()) imageAdapter.notifyDataSetChanged() @@ -169,7 +158,7 @@ imageAdapter.setOnItemClickListener(object : EditableImageAdapter.OnItemClickListener { override fun onAddImageClick() { - selectPicture() + addImage() } override fun onItemClick(position: Int) { @@ -177,7 +166,6 @@ } override fun onItemLongClick(view: View?, position: Int) { - selectedImages.removeAt(position) imagePaths.removeAt(position) recyclerViewImages.removeAt(position) imageAdapter.notifyDataSetChanged() @@ -189,8 +177,16 @@ this, selectedMainTypePosition.toString(), selectedSubTypePosition.toString(), - binding.hiddenTroubleNameView.text.toString(), + RuntimeCache.sceneName, + subDicModels[selectedMainTypePosition].name, + "", + "", binding.hiddenTroubleContentView.text.toString(), + RuntimeCache.scene, + RuntimeCache.inspectionId, + binding.hiddenTroubleNameView.text.toString(), + mainDicModels[selectedMainTypePosition].name, + "", imagePaths.toTypedArray() ) } @@ -198,45 +194,20 @@ binding.cancelButton.setOnClickListener { finish() } } - private fun selectPicture() { - PictureSelector.create(this).openGallery(SelectMimeType.ofImage()).isGif(false) - .isMaxSelectEnabledMask(true).setFilterMinFileSize(100).setMaxSelectNum(3) - .isDisplayCamera(true).setImageEngine(GlideLoadEngine.get) - .setSelectedData(selectedImages) - .forResult(object : OnResultCallbackListener { - override fun onResult(result: ArrayList) { - //重置已选的图片 - selectedImages.clear() - //因为result会带着之前的数据,所以需要清空之前已经add的数据 - recyclerViewImages.clear() - imagePaths.clear() - // 如果设置了setSelectedData,它会将之前的结果作为最新的返回值,要注意重复问题 - // 数据链控制图片压缩上传过程,防止速度过快导致压缩失败 - lifecycleScope.launch { - flow { - result.forEach { - emit(it) - delay(1000) - } - }.collect { - selectedImages.add(it) - //压缩图片并上传 - it.realPath.compressImage(context, object : OnImageCompressListener { - override fun onSuccess(file: File) { - Log.d(kTag, "absolutePath: ${file.absolutePath}") - //上传图片 - imageFileViewModel.uploadImage(file) - } + private fun addImage() { + //mat转图片 + val bitmap = Bitmap.createBitmap(RuntimeCache.mat.width(), RuntimeCache.mat.height(), Bitmap.Config.ARGB_8888) + Utils.matToBitmap(RuntimeCache.mat, bitmap, true) + val imagePath = "${createImageFileDir()}/${System.currentTimeMillis()}.png" + bitmap.saveImage(imagePath) + imagePath.compressImage(this, object : OnImageCompressListener { + override fun onSuccess(file: File) { + imageFileViewModel.uploadImage(file) + } - override fun onError(e: Throwable) { - e.printStackTrace() - } - }) - } - } - } - - override fun onCancel() {} - }) + override fun onError(e: Throwable) { + e.printStackTrace() + } + }) } } \ No newline at end of file diff --git a/app/src/main/java/com/casic/br/app/view/CheckManifestBySceneActivity.kt b/app/src/main/java/com/casic/br/app/view/CheckManifestBySceneActivity.kt index ac49cae..668a576 100644 --- a/app/src/main/java/com/casic/br/app/view/CheckManifestBySceneActivity.kt +++ b/app/src/main/java/com/casic/br/app/view/CheckManifestBySceneActivity.kt @@ -6,8 +6,8 @@ import com.casic.br.app.databinding.ActivityCheckManifestBySceneBinding import com.casic.br.app.fragment.CheckManifestFragment import com.casic.br.app.fragment.HiddenTroubleFragment +import com.casic.br.app.utils.RuntimeCache import com.pengxh.kt.lite.base.KotlinBaseActivity -import com.pengxh.kt.lite.utils.Constant class CheckManifestBySceneActivity : KotlinBaseActivity() { @@ -18,11 +18,9 @@ } override fun initOnCreate(savedInstanceState: Bundle?) { - val args = intent.getStringArrayListExtra(Constant.INTENT_PARAM) as ArrayList - - val subPageTitles = arrayOf("${args[0]}检查清单", "隐患列表") - fragmentPages.add(CheckManifestFragment(args[0])) - fragmentPages.add(HiddenTroubleFragment(args[1])) + val subPageTitles = arrayOf("${RuntimeCache.sceneName}检查清单", "隐患列表") + fragmentPages.add(CheckManifestFragment()) + fragmentPages.add(HiddenTroubleFragment()) val topViewPagerAdapter = TopViewPagerAdapter( supportFragmentManager, subPageTitles, fragmentPages diff --git a/app/src/main/java/com/casic/br/app/fragment/CheckManifestFragment.kt b/app/src/main/java/com/casic/br/app/fragment/CheckManifestFragment.kt index 8ef6703..301007d 100644 --- a/app/src/main/java/com/casic/br/app/fragment/CheckManifestFragment.kt +++ b/app/src/main/java/com/casic/br/app/fragment/CheckManifestFragment.kt @@ -7,6 +7,7 @@ import com.casic.br.app.R import com.casic.br.app.databinding.FragmentCheckManifestBinding import com.casic.br.app.model.SceneCheckManifestModel +import com.casic.br.app.utils.RuntimeCache import com.casic.br.app.vm.CheckManifestViewModel import com.casic.br.app.vm.ConfigViewModel import com.casic.br.app.widgets.CheckStandardSheet @@ -14,8 +15,7 @@ import com.pengxh.kt.lite.adapter.ViewHolder import com.pengxh.kt.lite.base.KotlinBaseFragment -class CheckManifestFragment(private val detectedScene: String) : - KotlinBaseFragment() { +class CheckManifestFragment : KotlinBaseFragment() { private val kTag = "CheckManifestFragment" private lateinit var configViewModel: ConfigViewModel @@ -32,7 +32,7 @@ configViewModel.dictionary.observe(this) { if (it.code == 200) { for (dic in it.data) { - if (dic.name == detectedScene) { + if (dic.name == RuntimeCache.sceneName) { checkManifestViewModel.getCheckManifestByScene(requireContext(), dic.value) return@observe } diff --git a/app/src/main/java/com/casic/br/app/fragment/HiddenTroubleFragment.kt b/app/src/main/java/com/casic/br/app/fragment/HiddenTroubleFragment.kt index 4d66ee0..62fcc4a 100644 --- a/app/src/main/java/com/casic/br/app/fragment/HiddenTroubleFragment.kt +++ b/app/src/main/java/com/casic/br/app/fragment/HiddenTroubleFragment.kt @@ -9,6 +9,7 @@ import com.casic.br.app.databinding.FragmentHiddenTroubleBinding import com.casic.br.app.extensions.combineFilePath import com.casic.br.app.model.HiddenTroubleListResultModel +import com.casic.br.app.utils.RuntimeCache import com.casic.br.app.view.BigImageActivity import com.casic.br.app.vm.InspectionViewModel import com.pengxh.kt.lite.adapter.NormalRecyclerAdapter @@ -17,8 +18,7 @@ import com.pengxh.kt.lite.extensions.navigatePageTo import com.pengxh.kt.lite.extensions.show -class HiddenTroubleFragment(private val inspectionId: String) : - KotlinBaseFragment() { +class HiddenTroubleFragment : KotlinBaseFragment() { private lateinit var inspectionViewModel: InspectionViewModel @@ -28,7 +28,9 @@ override fun initOnCreate(savedInstanceState: Bundle?) { inspectionViewModel = ViewModelProvider(this)[InspectionViewModel::class.java] - inspectionViewModel.getHiddenTroublesByInspectionId(requireContext(), inspectionId) + inspectionViewModel.getHiddenTroublesByInspectionId( + requireContext(), RuntimeCache.inspectionId + ) inspectionViewModel.troublesResultModel.observe(this) { if (it.code == 200) { if (it.data.isEmpty()) { diff --git a/app/src/main/java/com/casic/br/app/retrofit/RetrofitServiceManager.kt b/app/src/main/java/com/casic/br/app/retrofit/RetrofitServiceManager.kt index 79a5386..c4edbee 100644 --- a/app/src/main/java/com/casic/br/app/retrofit/RetrofitServiceManager.kt +++ b/app/src/main/java/com/casic/br/app/retrofit/RetrofitServiceManager.kt @@ -2,6 +2,7 @@ import com.casic.br.app.utils.AuthenticationHelper import com.casic.br.app.utils.LocaleConstant +import com.casic.br.app.utils.RuntimeCache import com.google.gson.Gson import com.google.gson.JsonObject import com.google.gson.reflect.TypeToken @@ -134,22 +135,38 @@ * 添加隐患 */ suspend fun addHiddenTrouble( - mainType: String, - subType: String, - hiddenTroubleName: String, - hiddenTroubleContent: String, - hiddenTroubleImageArray: Array> + mainClass: String, + subClass: String, + sceneName: String, + subClassName: String, + basis: String, + alarmMenuId: String, + content: String, + scene: String, + inspectionId: String, + name: String, + mainClassName: String, + id: String, + imageList: Array> ): String { val param = JsonObject() - param.addProperty("mainClass", mainType) - param.addProperty("subClass", subType) - param.addProperty("name", hiddenTroubleName) - param.addProperty("content", hiddenTroubleContent) - param.add("imageList", gson.toJsonTree(hiddenTroubleImageArray, typeToken).asJsonArray) - + param.addProperty("mainClass", mainClass) + param.addProperty("subClass", subClass) + param.addProperty("sceneName", sceneName) + param.addProperty("subClassName", subClassName) + param.addProperty("basis", basis) + param.addProperty("alarmMenuId", alarmMenuId) + param.addProperty("content", content) + param.addProperty("scene", scene) + param.addProperty("inspectionId", inspectionId) + param.addProperty("name", name) + param.addProperty("mainClassName", mainClassName) + param.addProperty("id", id) + param.add("imageList", gson.toJsonTree(imageList, typeToken).asJsonArray) val requestBody = param.toString().toRequestBody( "application/json;charset=UTF-8".toMediaType() ) + return api.addHiddenTrouble(AuthenticationHelper.token, requestBody) } @@ -251,17 +268,12 @@ /** * 推送报警信息 * */ - suspend fun uploadDetectTargetAlarm( - alarmCode: String, - alarmImgPath: String, - inspectionId: String, - scene: String - ): String { + suspend fun uploadDetectTargetAlarm(alarmCode: String, alarmImgPath: String): String { val param = JsonObject() param.addProperty("alarmCode", alarmCode) param.addProperty("alarmImgPath", alarmImgPath) - param.addProperty("inspectionId", inspectionId) - param.addProperty("scene", scene) + param.addProperty("inspectionId", RuntimeCache.inspectionId) + param.addProperty("scene", RuntimeCache.sceneName) val requestBody = param.toString().toRequestBody( "application/json;charset=UTF-8".toMediaType() diff --git a/app/src/main/java/com/casic/br/app/utils/RuntimeCache.kt b/app/src/main/java/com/casic/br/app/utils/RuntimeCache.kt new file mode 100644 index 0000000..fc87dd1 --- /dev/null +++ b/app/src/main/java/com/casic/br/app/utils/RuntimeCache.kt @@ -0,0 +1,12 @@ +package com.casic.br.app.utils + +import com.casic.br.app.model.DictionaryModel +import org.opencv.core.Mat + +object RuntimeCache { + var scene = "" + var sceneName = "" + var inspectionId = "" + var mainDicModels: MutableList = ArrayList() + lateinit var mat: Mat +} \ No newline at end of file diff --git a/app/src/main/java/com/casic/br/app/view/AddHiddenTroubleActivity.kt b/app/src/main/java/com/casic/br/app/view/AddHiddenTroubleActivity.kt index 0876851..e4f25df 100644 --- a/app/src/main/java/com/casic/br/app/view/AddHiddenTroubleActivity.kt +++ b/app/src/main/java/com/casic/br/app/view/AddHiddenTroubleActivity.kt @@ -1,51 +1,41 @@ package com.casic.br.app.view +import android.graphics.Bitmap import android.os.Bundle import android.util.Log import android.view.View import android.widget.AdapterView import android.widget.ArrayAdapter import androidx.lifecycle.ViewModelProvider -import androidx.lifecycle.lifecycleScope import com.casic.br.app.databinding.ActivityAddHiddenTroubleBinding import com.casic.br.app.extensions.combineFilePath import com.casic.br.app.extensions.compressImage import com.casic.br.app.model.DictionaryModel -import com.casic.br.app.utils.GlideLoadEngine +import com.casic.br.app.utils.RuntimeCache import com.casic.br.app.vm.ConfigViewModel import com.casic.br.app.vm.HiddenTroubleViewModel import com.casic.br.app.vm.ImageFileViewModel import com.casic.br.operationsite.test.callback.OnImageCompressListener -import com.google.gson.Gson -import com.google.gson.reflect.TypeToken -import com.luck.picture.lib.basic.PictureSelector -import com.luck.picture.lib.config.SelectMimeType -import com.luck.picture.lib.entity.LocalMedia -import com.luck.picture.lib.interfaces.OnResultCallbackListener import com.pengxh.kt.lite.adapter.EditableImageAdapter import com.pengxh.kt.lite.base.KotlinBaseActivity import com.pengxh.kt.lite.divider.RecyclerViewItemOffsets +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.saveImage import com.pengxh.kt.lite.extensions.show -import com.pengxh.kt.lite.utils.Constant import com.pengxh.kt.lite.utils.LoadState import com.pengxh.kt.lite.utils.LoadingDialogHub -import kotlinx.coroutines.delay -import kotlinx.coroutines.flow.flow -import kotlinx.coroutines.launch +import org.opencv.android.Utils import java.io.File - class AddHiddenTroubleActivity : KotlinBaseActivity() { private val kTag = "AddHiddenTroubleActivity" private val context = this - private val selectedImages = ArrayList() private val imagePaths = ArrayList>() private val recyclerViewImages = ArrayList() private val marginOffset by lazy { 1.dp2px(this) } - private val gson by lazy { Gson() } private lateinit var imageAdapter: EditableImageAdapter private lateinit var imageFileViewModel: ImageFileViewModel private lateinit var configViewModel: ConfigViewModel @@ -82,11 +72,8 @@ } override fun initOnCreate(savedInstanceState: Bundle?) { - val mainDicJsonValue = intent.getStringExtra(Constant.INTENT_PARAM) //转为实体类 - mainDicModels = gson.fromJson>( - mainDicJsonValue, object : TypeToken>() {}.type - ) + mainDicModels = RuntimeCache.mainDicModels val mainTypeArray = ArrayList() mainDicModels.forEach { mainTypeArray.add(it.name) @@ -124,6 +111,8 @@ val url = it.data.toString() val map = HashMap() map["alarmImage"] = url + map["id"] = "" + map["inspectionAlarmId"] = "" imagePaths.add(map) recyclerViewImages.add(url.combineFilePath()) imageAdapter.notifyDataSetChanged() @@ -169,7 +158,7 @@ imageAdapter.setOnItemClickListener(object : EditableImageAdapter.OnItemClickListener { override fun onAddImageClick() { - selectPicture() + addImage() } override fun onItemClick(position: Int) { @@ -177,7 +166,6 @@ } override fun onItemLongClick(view: View?, position: Int) { - selectedImages.removeAt(position) imagePaths.removeAt(position) recyclerViewImages.removeAt(position) imageAdapter.notifyDataSetChanged() @@ -189,8 +177,16 @@ this, selectedMainTypePosition.toString(), selectedSubTypePosition.toString(), - binding.hiddenTroubleNameView.text.toString(), + RuntimeCache.sceneName, + subDicModels[selectedMainTypePosition].name, + "", + "", binding.hiddenTroubleContentView.text.toString(), + RuntimeCache.scene, + RuntimeCache.inspectionId, + binding.hiddenTroubleNameView.text.toString(), + mainDicModels[selectedMainTypePosition].name, + "", imagePaths.toTypedArray() ) } @@ -198,45 +194,20 @@ binding.cancelButton.setOnClickListener { finish() } } - private fun selectPicture() { - PictureSelector.create(this).openGallery(SelectMimeType.ofImage()).isGif(false) - .isMaxSelectEnabledMask(true).setFilterMinFileSize(100).setMaxSelectNum(3) - .isDisplayCamera(true).setImageEngine(GlideLoadEngine.get) - .setSelectedData(selectedImages) - .forResult(object : OnResultCallbackListener { - override fun onResult(result: ArrayList) { - //重置已选的图片 - selectedImages.clear() - //因为result会带着之前的数据,所以需要清空之前已经add的数据 - recyclerViewImages.clear() - imagePaths.clear() - // 如果设置了setSelectedData,它会将之前的结果作为最新的返回值,要注意重复问题 - // 数据链控制图片压缩上传过程,防止速度过快导致压缩失败 - lifecycleScope.launch { - flow { - result.forEach { - emit(it) - delay(1000) - } - }.collect { - selectedImages.add(it) - //压缩图片并上传 - it.realPath.compressImage(context, object : OnImageCompressListener { - override fun onSuccess(file: File) { - Log.d(kTag, "absolutePath: ${file.absolutePath}") - //上传图片 - imageFileViewModel.uploadImage(file) - } + private fun addImage() { + //mat转图片 + val bitmap = Bitmap.createBitmap(RuntimeCache.mat.width(), RuntimeCache.mat.height(), Bitmap.Config.ARGB_8888) + Utils.matToBitmap(RuntimeCache.mat, bitmap, true) + val imagePath = "${createImageFileDir()}/${System.currentTimeMillis()}.png" + bitmap.saveImage(imagePath) + imagePath.compressImage(this, object : OnImageCompressListener { + override fun onSuccess(file: File) { + imageFileViewModel.uploadImage(file) + } - override fun onError(e: Throwable) { - e.printStackTrace() - } - }) - } - } - } - - override fun onCancel() {} - }) + override fun onError(e: Throwable) { + e.printStackTrace() + } + }) } } \ No newline at end of file diff --git a/app/src/main/java/com/casic/br/app/view/CheckManifestBySceneActivity.kt b/app/src/main/java/com/casic/br/app/view/CheckManifestBySceneActivity.kt index ac49cae..668a576 100644 --- a/app/src/main/java/com/casic/br/app/view/CheckManifestBySceneActivity.kt +++ b/app/src/main/java/com/casic/br/app/view/CheckManifestBySceneActivity.kt @@ -6,8 +6,8 @@ import com.casic.br.app.databinding.ActivityCheckManifestBySceneBinding import com.casic.br.app.fragment.CheckManifestFragment import com.casic.br.app.fragment.HiddenTroubleFragment +import com.casic.br.app.utils.RuntimeCache import com.pengxh.kt.lite.base.KotlinBaseActivity -import com.pengxh.kt.lite.utils.Constant class CheckManifestBySceneActivity : KotlinBaseActivity() { @@ -18,11 +18,9 @@ } override fun initOnCreate(savedInstanceState: Bundle?) { - val args = intent.getStringArrayListExtra(Constant.INTENT_PARAM) as ArrayList - - val subPageTitles = arrayOf("${args[0]}检查清单", "隐患列表") - fragmentPages.add(CheckManifestFragment(args[0])) - fragmentPages.add(HiddenTroubleFragment(args[1])) + val subPageTitles = arrayOf("${RuntimeCache.sceneName}检查清单", "隐患列表") + fragmentPages.add(CheckManifestFragment()) + fragmentPages.add(HiddenTroubleFragment()) val topViewPagerAdapter = TopViewPagerAdapter( supportFragmentManager, subPageTitles, fragmentPages diff --git a/app/src/main/java/com/casic/br/app/view/CheckManifestByTargetActivity.kt b/app/src/main/java/com/casic/br/app/view/CheckManifestByTargetActivity.kt index db1201d..68ed48a 100644 --- a/app/src/main/java/com/casic/br/app/view/CheckManifestByTargetActivity.kt +++ b/app/src/main/java/com/casic/br/app/view/CheckManifestByTargetActivity.kt @@ -6,6 +6,7 @@ import com.casic.br.app.adapter.TopViewPagerAdapter import com.casic.br.app.databinding.ActivityCheckManifestByTargetBinding import com.casic.br.app.fragment.TargetCheckManifestFragment +import com.casic.br.app.utils.RuntimeCache import com.casic.br.app.vm.ConfigViewModel import com.google.gson.Gson import com.google.gson.reflect.TypeToken @@ -24,18 +25,16 @@ } override fun initOnCreate(savedInstanceState: Bundle?) { - val args = intent.getStringArrayListExtra(Constant.INTENT_PARAM) as ArrayList - - val detectedScene = args[0] + val targetJsonValue = intent.getStringExtra(Constant.INTENT_PARAM) as String //场景需要转为字典值 configViewModel = ViewModelProvider(this)[ConfigViewModel::class.java] configViewModel.getDictionaryByCode(this, "securityScene") configViewModel.dictionary.observe(this) { if (it.code == 200) { for (dic in it.data) { - if (dic.name == detectedScene) { + if (dic.name == RuntimeCache.sceneName) { val targetSet = gson.fromJson>( - args[1], object : TypeToken>() {}.type + targetJsonValue, object : TypeToken>() {}.type ) val subPageTitles = ArrayList() targetSet.forEach { target -> diff --git a/app/src/main/java/com/casic/br/app/fragment/CheckManifestFragment.kt b/app/src/main/java/com/casic/br/app/fragment/CheckManifestFragment.kt index 8ef6703..301007d 100644 --- a/app/src/main/java/com/casic/br/app/fragment/CheckManifestFragment.kt +++ b/app/src/main/java/com/casic/br/app/fragment/CheckManifestFragment.kt @@ -7,6 +7,7 @@ import com.casic.br.app.R import com.casic.br.app.databinding.FragmentCheckManifestBinding import com.casic.br.app.model.SceneCheckManifestModel +import com.casic.br.app.utils.RuntimeCache import com.casic.br.app.vm.CheckManifestViewModel import com.casic.br.app.vm.ConfigViewModel import com.casic.br.app.widgets.CheckStandardSheet @@ -14,8 +15,7 @@ import com.pengxh.kt.lite.adapter.ViewHolder import com.pengxh.kt.lite.base.KotlinBaseFragment -class CheckManifestFragment(private val detectedScene: String) : - KotlinBaseFragment() { +class CheckManifestFragment : KotlinBaseFragment() { private val kTag = "CheckManifestFragment" private lateinit var configViewModel: ConfigViewModel @@ -32,7 +32,7 @@ configViewModel.dictionary.observe(this) { if (it.code == 200) { for (dic in it.data) { - if (dic.name == detectedScene) { + if (dic.name == RuntimeCache.sceneName) { checkManifestViewModel.getCheckManifestByScene(requireContext(), dic.value) return@observe } diff --git a/app/src/main/java/com/casic/br/app/fragment/HiddenTroubleFragment.kt b/app/src/main/java/com/casic/br/app/fragment/HiddenTroubleFragment.kt index 4d66ee0..62fcc4a 100644 --- a/app/src/main/java/com/casic/br/app/fragment/HiddenTroubleFragment.kt +++ b/app/src/main/java/com/casic/br/app/fragment/HiddenTroubleFragment.kt @@ -9,6 +9,7 @@ import com.casic.br.app.databinding.FragmentHiddenTroubleBinding import com.casic.br.app.extensions.combineFilePath import com.casic.br.app.model.HiddenTroubleListResultModel +import com.casic.br.app.utils.RuntimeCache import com.casic.br.app.view.BigImageActivity import com.casic.br.app.vm.InspectionViewModel import com.pengxh.kt.lite.adapter.NormalRecyclerAdapter @@ -17,8 +18,7 @@ import com.pengxh.kt.lite.extensions.navigatePageTo import com.pengxh.kt.lite.extensions.show -class HiddenTroubleFragment(private val inspectionId: String) : - KotlinBaseFragment() { +class HiddenTroubleFragment : KotlinBaseFragment() { private lateinit var inspectionViewModel: InspectionViewModel @@ -28,7 +28,9 @@ override fun initOnCreate(savedInstanceState: Bundle?) { inspectionViewModel = ViewModelProvider(this)[InspectionViewModel::class.java] - inspectionViewModel.getHiddenTroublesByInspectionId(requireContext(), inspectionId) + inspectionViewModel.getHiddenTroublesByInspectionId( + requireContext(), RuntimeCache.inspectionId + ) inspectionViewModel.troublesResultModel.observe(this) { if (it.code == 200) { if (it.data.isEmpty()) { diff --git a/app/src/main/java/com/casic/br/app/retrofit/RetrofitServiceManager.kt b/app/src/main/java/com/casic/br/app/retrofit/RetrofitServiceManager.kt index 79a5386..c4edbee 100644 --- a/app/src/main/java/com/casic/br/app/retrofit/RetrofitServiceManager.kt +++ b/app/src/main/java/com/casic/br/app/retrofit/RetrofitServiceManager.kt @@ -2,6 +2,7 @@ import com.casic.br.app.utils.AuthenticationHelper import com.casic.br.app.utils.LocaleConstant +import com.casic.br.app.utils.RuntimeCache import com.google.gson.Gson import com.google.gson.JsonObject import com.google.gson.reflect.TypeToken @@ -134,22 +135,38 @@ * 添加隐患 */ suspend fun addHiddenTrouble( - mainType: String, - subType: String, - hiddenTroubleName: String, - hiddenTroubleContent: String, - hiddenTroubleImageArray: Array> + mainClass: String, + subClass: String, + sceneName: String, + subClassName: String, + basis: String, + alarmMenuId: String, + content: String, + scene: String, + inspectionId: String, + name: String, + mainClassName: String, + id: String, + imageList: Array> ): String { val param = JsonObject() - param.addProperty("mainClass", mainType) - param.addProperty("subClass", subType) - param.addProperty("name", hiddenTroubleName) - param.addProperty("content", hiddenTroubleContent) - param.add("imageList", gson.toJsonTree(hiddenTroubleImageArray, typeToken).asJsonArray) - + param.addProperty("mainClass", mainClass) + param.addProperty("subClass", subClass) + param.addProperty("sceneName", sceneName) + param.addProperty("subClassName", subClassName) + param.addProperty("basis", basis) + param.addProperty("alarmMenuId", alarmMenuId) + param.addProperty("content", content) + param.addProperty("scene", scene) + param.addProperty("inspectionId", inspectionId) + param.addProperty("name", name) + param.addProperty("mainClassName", mainClassName) + param.addProperty("id", id) + param.add("imageList", gson.toJsonTree(imageList, typeToken).asJsonArray) val requestBody = param.toString().toRequestBody( "application/json;charset=UTF-8".toMediaType() ) + return api.addHiddenTrouble(AuthenticationHelper.token, requestBody) } @@ -251,17 +268,12 @@ /** * 推送报警信息 * */ - suspend fun uploadDetectTargetAlarm( - alarmCode: String, - alarmImgPath: String, - inspectionId: String, - scene: String - ): String { + suspend fun uploadDetectTargetAlarm(alarmCode: String, alarmImgPath: String): String { val param = JsonObject() param.addProperty("alarmCode", alarmCode) param.addProperty("alarmImgPath", alarmImgPath) - param.addProperty("inspectionId", inspectionId) - param.addProperty("scene", scene) + param.addProperty("inspectionId", RuntimeCache.inspectionId) + param.addProperty("scene", RuntimeCache.sceneName) val requestBody = param.toString().toRequestBody( "application/json;charset=UTF-8".toMediaType() diff --git a/app/src/main/java/com/casic/br/app/utils/RuntimeCache.kt b/app/src/main/java/com/casic/br/app/utils/RuntimeCache.kt new file mode 100644 index 0000000..fc87dd1 --- /dev/null +++ b/app/src/main/java/com/casic/br/app/utils/RuntimeCache.kt @@ -0,0 +1,12 @@ +package com.casic.br.app.utils + +import com.casic.br.app.model.DictionaryModel +import org.opencv.core.Mat + +object RuntimeCache { + var scene = "" + var sceneName = "" + var inspectionId = "" + var mainDicModels: MutableList = ArrayList() + lateinit var mat: Mat +} \ No newline at end of file diff --git a/app/src/main/java/com/casic/br/app/view/AddHiddenTroubleActivity.kt b/app/src/main/java/com/casic/br/app/view/AddHiddenTroubleActivity.kt index 0876851..e4f25df 100644 --- a/app/src/main/java/com/casic/br/app/view/AddHiddenTroubleActivity.kt +++ b/app/src/main/java/com/casic/br/app/view/AddHiddenTroubleActivity.kt @@ -1,51 +1,41 @@ package com.casic.br.app.view +import android.graphics.Bitmap import android.os.Bundle import android.util.Log import android.view.View import android.widget.AdapterView import android.widget.ArrayAdapter import androidx.lifecycle.ViewModelProvider -import androidx.lifecycle.lifecycleScope import com.casic.br.app.databinding.ActivityAddHiddenTroubleBinding import com.casic.br.app.extensions.combineFilePath import com.casic.br.app.extensions.compressImage import com.casic.br.app.model.DictionaryModel -import com.casic.br.app.utils.GlideLoadEngine +import com.casic.br.app.utils.RuntimeCache import com.casic.br.app.vm.ConfigViewModel import com.casic.br.app.vm.HiddenTroubleViewModel import com.casic.br.app.vm.ImageFileViewModel import com.casic.br.operationsite.test.callback.OnImageCompressListener -import com.google.gson.Gson -import com.google.gson.reflect.TypeToken -import com.luck.picture.lib.basic.PictureSelector -import com.luck.picture.lib.config.SelectMimeType -import com.luck.picture.lib.entity.LocalMedia -import com.luck.picture.lib.interfaces.OnResultCallbackListener import com.pengxh.kt.lite.adapter.EditableImageAdapter import com.pengxh.kt.lite.base.KotlinBaseActivity import com.pengxh.kt.lite.divider.RecyclerViewItemOffsets +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.saveImage import com.pengxh.kt.lite.extensions.show -import com.pengxh.kt.lite.utils.Constant import com.pengxh.kt.lite.utils.LoadState import com.pengxh.kt.lite.utils.LoadingDialogHub -import kotlinx.coroutines.delay -import kotlinx.coroutines.flow.flow -import kotlinx.coroutines.launch +import org.opencv.android.Utils import java.io.File - class AddHiddenTroubleActivity : KotlinBaseActivity() { private val kTag = "AddHiddenTroubleActivity" private val context = this - private val selectedImages = ArrayList() private val imagePaths = ArrayList>() private val recyclerViewImages = ArrayList() private val marginOffset by lazy { 1.dp2px(this) } - private val gson by lazy { Gson() } private lateinit var imageAdapter: EditableImageAdapter private lateinit var imageFileViewModel: ImageFileViewModel private lateinit var configViewModel: ConfigViewModel @@ -82,11 +72,8 @@ } override fun initOnCreate(savedInstanceState: Bundle?) { - val mainDicJsonValue = intent.getStringExtra(Constant.INTENT_PARAM) //转为实体类 - mainDicModels = gson.fromJson>( - mainDicJsonValue, object : TypeToken>() {}.type - ) + mainDicModels = RuntimeCache.mainDicModels val mainTypeArray = ArrayList() mainDicModels.forEach { mainTypeArray.add(it.name) @@ -124,6 +111,8 @@ val url = it.data.toString() val map = HashMap() map["alarmImage"] = url + map["id"] = "" + map["inspectionAlarmId"] = "" imagePaths.add(map) recyclerViewImages.add(url.combineFilePath()) imageAdapter.notifyDataSetChanged() @@ -169,7 +158,7 @@ imageAdapter.setOnItemClickListener(object : EditableImageAdapter.OnItemClickListener { override fun onAddImageClick() { - selectPicture() + addImage() } override fun onItemClick(position: Int) { @@ -177,7 +166,6 @@ } override fun onItemLongClick(view: View?, position: Int) { - selectedImages.removeAt(position) imagePaths.removeAt(position) recyclerViewImages.removeAt(position) imageAdapter.notifyDataSetChanged() @@ -189,8 +177,16 @@ this, selectedMainTypePosition.toString(), selectedSubTypePosition.toString(), - binding.hiddenTroubleNameView.text.toString(), + RuntimeCache.sceneName, + subDicModels[selectedMainTypePosition].name, + "", + "", binding.hiddenTroubleContentView.text.toString(), + RuntimeCache.scene, + RuntimeCache.inspectionId, + binding.hiddenTroubleNameView.text.toString(), + mainDicModels[selectedMainTypePosition].name, + "", imagePaths.toTypedArray() ) } @@ -198,45 +194,20 @@ binding.cancelButton.setOnClickListener { finish() } } - private fun selectPicture() { - PictureSelector.create(this).openGallery(SelectMimeType.ofImage()).isGif(false) - .isMaxSelectEnabledMask(true).setFilterMinFileSize(100).setMaxSelectNum(3) - .isDisplayCamera(true).setImageEngine(GlideLoadEngine.get) - .setSelectedData(selectedImages) - .forResult(object : OnResultCallbackListener { - override fun onResult(result: ArrayList) { - //重置已选的图片 - selectedImages.clear() - //因为result会带着之前的数据,所以需要清空之前已经add的数据 - recyclerViewImages.clear() - imagePaths.clear() - // 如果设置了setSelectedData,它会将之前的结果作为最新的返回值,要注意重复问题 - // 数据链控制图片压缩上传过程,防止速度过快导致压缩失败 - lifecycleScope.launch { - flow { - result.forEach { - emit(it) - delay(1000) - } - }.collect { - selectedImages.add(it) - //压缩图片并上传 - it.realPath.compressImage(context, object : OnImageCompressListener { - override fun onSuccess(file: File) { - Log.d(kTag, "absolutePath: ${file.absolutePath}") - //上传图片 - imageFileViewModel.uploadImage(file) - } + private fun addImage() { + //mat转图片 + val bitmap = Bitmap.createBitmap(RuntimeCache.mat.width(), RuntimeCache.mat.height(), Bitmap.Config.ARGB_8888) + Utils.matToBitmap(RuntimeCache.mat, bitmap, true) + val imagePath = "${createImageFileDir()}/${System.currentTimeMillis()}.png" + bitmap.saveImage(imagePath) + imagePath.compressImage(this, object : OnImageCompressListener { + override fun onSuccess(file: File) { + imageFileViewModel.uploadImage(file) + } - override fun onError(e: Throwable) { - e.printStackTrace() - } - }) - } - } - } - - override fun onCancel() {} - }) + override fun onError(e: Throwable) { + e.printStackTrace() + } + }) } } \ No newline at end of file diff --git a/app/src/main/java/com/casic/br/app/view/CheckManifestBySceneActivity.kt b/app/src/main/java/com/casic/br/app/view/CheckManifestBySceneActivity.kt index ac49cae..668a576 100644 --- a/app/src/main/java/com/casic/br/app/view/CheckManifestBySceneActivity.kt +++ b/app/src/main/java/com/casic/br/app/view/CheckManifestBySceneActivity.kt @@ -6,8 +6,8 @@ import com.casic.br.app.databinding.ActivityCheckManifestBySceneBinding import com.casic.br.app.fragment.CheckManifestFragment import com.casic.br.app.fragment.HiddenTroubleFragment +import com.casic.br.app.utils.RuntimeCache import com.pengxh.kt.lite.base.KotlinBaseActivity -import com.pengxh.kt.lite.utils.Constant class CheckManifestBySceneActivity : KotlinBaseActivity() { @@ -18,11 +18,9 @@ } override fun initOnCreate(savedInstanceState: Bundle?) { - val args = intent.getStringArrayListExtra(Constant.INTENT_PARAM) as ArrayList - - val subPageTitles = arrayOf("${args[0]}检查清单", "隐患列表") - fragmentPages.add(CheckManifestFragment(args[0])) - fragmentPages.add(HiddenTroubleFragment(args[1])) + val subPageTitles = arrayOf("${RuntimeCache.sceneName}检查清单", "隐患列表") + fragmentPages.add(CheckManifestFragment()) + fragmentPages.add(HiddenTroubleFragment()) val topViewPagerAdapter = TopViewPagerAdapter( supportFragmentManager, subPageTitles, fragmentPages diff --git a/app/src/main/java/com/casic/br/app/view/CheckManifestByTargetActivity.kt b/app/src/main/java/com/casic/br/app/view/CheckManifestByTargetActivity.kt index db1201d..68ed48a 100644 --- a/app/src/main/java/com/casic/br/app/view/CheckManifestByTargetActivity.kt +++ b/app/src/main/java/com/casic/br/app/view/CheckManifestByTargetActivity.kt @@ -6,6 +6,7 @@ import com.casic.br.app.adapter.TopViewPagerAdapter import com.casic.br.app.databinding.ActivityCheckManifestByTargetBinding import com.casic.br.app.fragment.TargetCheckManifestFragment +import com.casic.br.app.utils.RuntimeCache import com.casic.br.app.vm.ConfigViewModel import com.google.gson.Gson import com.google.gson.reflect.TypeToken @@ -24,18 +25,16 @@ } override fun initOnCreate(savedInstanceState: Bundle?) { - val args = intent.getStringArrayListExtra(Constant.INTENT_PARAM) as ArrayList - - val detectedScene = args[0] + val targetJsonValue = intent.getStringExtra(Constant.INTENT_PARAM) as String //场景需要转为字典值 configViewModel = ViewModelProvider(this)[ConfigViewModel::class.java] configViewModel.getDictionaryByCode(this, "securityScene") configViewModel.dictionary.observe(this) { if (it.code == 200) { for (dic in it.data) { - if (dic.name == detectedScene) { + if (dic.name == RuntimeCache.sceneName) { val targetSet = gson.fromJson>( - args[1], object : TypeToken>() {}.type + targetJsonValue, object : TypeToken>() {}.type ) val subPageTitles = ArrayList() targetSet.forEach { target -> diff --git a/app/src/main/java/com/casic/br/app/view/CheckResultActivity.kt b/app/src/main/java/com/casic/br/app/view/CheckResultActivity.kt index 3feb7e3..490bd95 100644 --- a/app/src/main/java/com/casic/br/app/view/CheckResultActivity.kt +++ b/app/src/main/java/com/casic/br/app/view/CheckResultActivity.kt @@ -7,6 +7,7 @@ import com.casic.br.app.databinding.ActivityCheckResultBinding import com.casic.br.app.extensions.combineFilePath import com.casic.br.app.model.HiddenTroubleListResultModel +import com.casic.br.app.utils.RuntimeCache import com.casic.br.app.vm.InspectionViewModel import com.pengxh.kt.lite.adapter.NormalRecyclerAdapter import com.pengxh.kt.lite.adapter.ViewHolder @@ -14,7 +15,6 @@ import com.pengxh.kt.lite.extensions.navigatePageTo import com.pengxh.kt.lite.extensions.show import com.pengxh.kt.lite.extensions.timestampToCompleteDate -import com.pengxh.kt.lite.utils.Constant import com.pengxh.kt.lite.utils.LoadState class CheckResultActivity : KotlinBaseActivity() { @@ -22,13 +22,11 @@ private val kTag = "CheckResultActivity" private val context = this private lateinit var inspectionViewModel: InspectionViewModel - private lateinit var inspectionId: String override fun initEvent() { binding.confirmButton.setOnClickListener { inspectionViewModel.stopInspection( - this, - inspectionId, + this, RuntimeCache.inspectionId, System.currentTimeMillis().timestampToCompleteDate(), binding.inputSiteView.text.toString() ) @@ -38,9 +36,8 @@ } override fun initOnCreate(savedInstanceState: Bundle?) { - inspectionId = intent.getStringExtra(Constant.INTENT_PARAM) as String inspectionViewModel = ViewModelProvider(this)[InspectionViewModel::class.java] - inspectionViewModel.getHiddenTroublesByInspectionId(this, inspectionId) + inspectionViewModel.getHiddenTroublesByInspectionId(this, RuntimeCache.inspectionId) inspectionViewModel.troublesResultModel.observe(this) { if (it.code == 200) { val troublesAdapter = object : diff --git a/app/src/main/java/com/casic/br/app/fragment/CheckManifestFragment.kt b/app/src/main/java/com/casic/br/app/fragment/CheckManifestFragment.kt index 8ef6703..301007d 100644 --- a/app/src/main/java/com/casic/br/app/fragment/CheckManifestFragment.kt +++ b/app/src/main/java/com/casic/br/app/fragment/CheckManifestFragment.kt @@ -7,6 +7,7 @@ import com.casic.br.app.R import com.casic.br.app.databinding.FragmentCheckManifestBinding import com.casic.br.app.model.SceneCheckManifestModel +import com.casic.br.app.utils.RuntimeCache import com.casic.br.app.vm.CheckManifestViewModel import com.casic.br.app.vm.ConfigViewModel import com.casic.br.app.widgets.CheckStandardSheet @@ -14,8 +15,7 @@ import com.pengxh.kt.lite.adapter.ViewHolder import com.pengxh.kt.lite.base.KotlinBaseFragment -class CheckManifestFragment(private val detectedScene: String) : - KotlinBaseFragment() { +class CheckManifestFragment : KotlinBaseFragment() { private val kTag = "CheckManifestFragment" private lateinit var configViewModel: ConfigViewModel @@ -32,7 +32,7 @@ configViewModel.dictionary.observe(this) { if (it.code == 200) { for (dic in it.data) { - if (dic.name == detectedScene) { + if (dic.name == RuntimeCache.sceneName) { checkManifestViewModel.getCheckManifestByScene(requireContext(), dic.value) return@observe } diff --git a/app/src/main/java/com/casic/br/app/fragment/HiddenTroubleFragment.kt b/app/src/main/java/com/casic/br/app/fragment/HiddenTroubleFragment.kt index 4d66ee0..62fcc4a 100644 --- a/app/src/main/java/com/casic/br/app/fragment/HiddenTroubleFragment.kt +++ b/app/src/main/java/com/casic/br/app/fragment/HiddenTroubleFragment.kt @@ -9,6 +9,7 @@ import com.casic.br.app.databinding.FragmentHiddenTroubleBinding import com.casic.br.app.extensions.combineFilePath import com.casic.br.app.model.HiddenTroubleListResultModel +import com.casic.br.app.utils.RuntimeCache import com.casic.br.app.view.BigImageActivity import com.casic.br.app.vm.InspectionViewModel import com.pengxh.kt.lite.adapter.NormalRecyclerAdapter @@ -17,8 +18,7 @@ import com.pengxh.kt.lite.extensions.navigatePageTo import com.pengxh.kt.lite.extensions.show -class HiddenTroubleFragment(private val inspectionId: String) : - KotlinBaseFragment() { +class HiddenTroubleFragment : KotlinBaseFragment() { private lateinit var inspectionViewModel: InspectionViewModel @@ -28,7 +28,9 @@ override fun initOnCreate(savedInstanceState: Bundle?) { inspectionViewModel = ViewModelProvider(this)[InspectionViewModel::class.java] - inspectionViewModel.getHiddenTroublesByInspectionId(requireContext(), inspectionId) + inspectionViewModel.getHiddenTroublesByInspectionId( + requireContext(), RuntimeCache.inspectionId + ) inspectionViewModel.troublesResultModel.observe(this) { if (it.code == 200) { if (it.data.isEmpty()) { diff --git a/app/src/main/java/com/casic/br/app/retrofit/RetrofitServiceManager.kt b/app/src/main/java/com/casic/br/app/retrofit/RetrofitServiceManager.kt index 79a5386..c4edbee 100644 --- a/app/src/main/java/com/casic/br/app/retrofit/RetrofitServiceManager.kt +++ b/app/src/main/java/com/casic/br/app/retrofit/RetrofitServiceManager.kt @@ -2,6 +2,7 @@ import com.casic.br.app.utils.AuthenticationHelper import com.casic.br.app.utils.LocaleConstant +import com.casic.br.app.utils.RuntimeCache import com.google.gson.Gson import com.google.gson.JsonObject import com.google.gson.reflect.TypeToken @@ -134,22 +135,38 @@ * 添加隐患 */ suspend fun addHiddenTrouble( - mainType: String, - subType: String, - hiddenTroubleName: String, - hiddenTroubleContent: String, - hiddenTroubleImageArray: Array> + mainClass: String, + subClass: String, + sceneName: String, + subClassName: String, + basis: String, + alarmMenuId: String, + content: String, + scene: String, + inspectionId: String, + name: String, + mainClassName: String, + id: String, + imageList: Array> ): String { val param = JsonObject() - param.addProperty("mainClass", mainType) - param.addProperty("subClass", subType) - param.addProperty("name", hiddenTroubleName) - param.addProperty("content", hiddenTroubleContent) - param.add("imageList", gson.toJsonTree(hiddenTroubleImageArray, typeToken).asJsonArray) - + param.addProperty("mainClass", mainClass) + param.addProperty("subClass", subClass) + param.addProperty("sceneName", sceneName) + param.addProperty("subClassName", subClassName) + param.addProperty("basis", basis) + param.addProperty("alarmMenuId", alarmMenuId) + param.addProperty("content", content) + param.addProperty("scene", scene) + param.addProperty("inspectionId", inspectionId) + param.addProperty("name", name) + param.addProperty("mainClassName", mainClassName) + param.addProperty("id", id) + param.add("imageList", gson.toJsonTree(imageList, typeToken).asJsonArray) val requestBody = param.toString().toRequestBody( "application/json;charset=UTF-8".toMediaType() ) + return api.addHiddenTrouble(AuthenticationHelper.token, requestBody) } @@ -251,17 +268,12 @@ /** * 推送报警信息 * */ - suspend fun uploadDetectTargetAlarm( - alarmCode: String, - alarmImgPath: String, - inspectionId: String, - scene: String - ): String { + suspend fun uploadDetectTargetAlarm(alarmCode: String, alarmImgPath: String): String { val param = JsonObject() param.addProperty("alarmCode", alarmCode) param.addProperty("alarmImgPath", alarmImgPath) - param.addProperty("inspectionId", inspectionId) - param.addProperty("scene", scene) + param.addProperty("inspectionId", RuntimeCache.inspectionId) + param.addProperty("scene", RuntimeCache.sceneName) val requestBody = param.toString().toRequestBody( "application/json;charset=UTF-8".toMediaType() diff --git a/app/src/main/java/com/casic/br/app/utils/RuntimeCache.kt b/app/src/main/java/com/casic/br/app/utils/RuntimeCache.kt new file mode 100644 index 0000000..fc87dd1 --- /dev/null +++ b/app/src/main/java/com/casic/br/app/utils/RuntimeCache.kt @@ -0,0 +1,12 @@ +package com.casic.br.app.utils + +import com.casic.br.app.model.DictionaryModel +import org.opencv.core.Mat + +object RuntimeCache { + var scene = "" + var sceneName = "" + var inspectionId = "" + var mainDicModels: MutableList = ArrayList() + lateinit var mat: Mat +} \ No newline at end of file diff --git a/app/src/main/java/com/casic/br/app/view/AddHiddenTroubleActivity.kt b/app/src/main/java/com/casic/br/app/view/AddHiddenTroubleActivity.kt index 0876851..e4f25df 100644 --- a/app/src/main/java/com/casic/br/app/view/AddHiddenTroubleActivity.kt +++ b/app/src/main/java/com/casic/br/app/view/AddHiddenTroubleActivity.kt @@ -1,51 +1,41 @@ package com.casic.br.app.view +import android.graphics.Bitmap import android.os.Bundle import android.util.Log import android.view.View import android.widget.AdapterView import android.widget.ArrayAdapter import androidx.lifecycle.ViewModelProvider -import androidx.lifecycle.lifecycleScope import com.casic.br.app.databinding.ActivityAddHiddenTroubleBinding import com.casic.br.app.extensions.combineFilePath import com.casic.br.app.extensions.compressImage import com.casic.br.app.model.DictionaryModel -import com.casic.br.app.utils.GlideLoadEngine +import com.casic.br.app.utils.RuntimeCache import com.casic.br.app.vm.ConfigViewModel import com.casic.br.app.vm.HiddenTroubleViewModel import com.casic.br.app.vm.ImageFileViewModel import com.casic.br.operationsite.test.callback.OnImageCompressListener -import com.google.gson.Gson -import com.google.gson.reflect.TypeToken -import com.luck.picture.lib.basic.PictureSelector -import com.luck.picture.lib.config.SelectMimeType -import com.luck.picture.lib.entity.LocalMedia -import com.luck.picture.lib.interfaces.OnResultCallbackListener import com.pengxh.kt.lite.adapter.EditableImageAdapter import com.pengxh.kt.lite.base.KotlinBaseActivity import com.pengxh.kt.lite.divider.RecyclerViewItemOffsets +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.saveImage import com.pengxh.kt.lite.extensions.show -import com.pengxh.kt.lite.utils.Constant import com.pengxh.kt.lite.utils.LoadState import com.pengxh.kt.lite.utils.LoadingDialogHub -import kotlinx.coroutines.delay -import kotlinx.coroutines.flow.flow -import kotlinx.coroutines.launch +import org.opencv.android.Utils import java.io.File - class AddHiddenTroubleActivity : KotlinBaseActivity() { private val kTag = "AddHiddenTroubleActivity" private val context = this - private val selectedImages = ArrayList() private val imagePaths = ArrayList>() private val recyclerViewImages = ArrayList() private val marginOffset by lazy { 1.dp2px(this) } - private val gson by lazy { Gson() } private lateinit var imageAdapter: EditableImageAdapter private lateinit var imageFileViewModel: ImageFileViewModel private lateinit var configViewModel: ConfigViewModel @@ -82,11 +72,8 @@ } override fun initOnCreate(savedInstanceState: Bundle?) { - val mainDicJsonValue = intent.getStringExtra(Constant.INTENT_PARAM) //转为实体类 - mainDicModels = gson.fromJson>( - mainDicJsonValue, object : TypeToken>() {}.type - ) + mainDicModels = RuntimeCache.mainDicModels val mainTypeArray = ArrayList() mainDicModels.forEach { mainTypeArray.add(it.name) @@ -124,6 +111,8 @@ val url = it.data.toString() val map = HashMap() map["alarmImage"] = url + map["id"] = "" + map["inspectionAlarmId"] = "" imagePaths.add(map) recyclerViewImages.add(url.combineFilePath()) imageAdapter.notifyDataSetChanged() @@ -169,7 +158,7 @@ imageAdapter.setOnItemClickListener(object : EditableImageAdapter.OnItemClickListener { override fun onAddImageClick() { - selectPicture() + addImage() } override fun onItemClick(position: Int) { @@ -177,7 +166,6 @@ } override fun onItemLongClick(view: View?, position: Int) { - selectedImages.removeAt(position) imagePaths.removeAt(position) recyclerViewImages.removeAt(position) imageAdapter.notifyDataSetChanged() @@ -189,8 +177,16 @@ this, selectedMainTypePosition.toString(), selectedSubTypePosition.toString(), - binding.hiddenTroubleNameView.text.toString(), + RuntimeCache.sceneName, + subDicModels[selectedMainTypePosition].name, + "", + "", binding.hiddenTroubleContentView.text.toString(), + RuntimeCache.scene, + RuntimeCache.inspectionId, + binding.hiddenTroubleNameView.text.toString(), + mainDicModels[selectedMainTypePosition].name, + "", imagePaths.toTypedArray() ) } @@ -198,45 +194,20 @@ binding.cancelButton.setOnClickListener { finish() } } - private fun selectPicture() { - PictureSelector.create(this).openGallery(SelectMimeType.ofImage()).isGif(false) - .isMaxSelectEnabledMask(true).setFilterMinFileSize(100).setMaxSelectNum(3) - .isDisplayCamera(true).setImageEngine(GlideLoadEngine.get) - .setSelectedData(selectedImages) - .forResult(object : OnResultCallbackListener { - override fun onResult(result: ArrayList) { - //重置已选的图片 - selectedImages.clear() - //因为result会带着之前的数据,所以需要清空之前已经add的数据 - recyclerViewImages.clear() - imagePaths.clear() - // 如果设置了setSelectedData,它会将之前的结果作为最新的返回值,要注意重复问题 - // 数据链控制图片压缩上传过程,防止速度过快导致压缩失败 - lifecycleScope.launch { - flow { - result.forEach { - emit(it) - delay(1000) - } - }.collect { - selectedImages.add(it) - //压缩图片并上传 - it.realPath.compressImage(context, object : OnImageCompressListener { - override fun onSuccess(file: File) { - Log.d(kTag, "absolutePath: ${file.absolutePath}") - //上传图片 - imageFileViewModel.uploadImage(file) - } + private fun addImage() { + //mat转图片 + val bitmap = Bitmap.createBitmap(RuntimeCache.mat.width(), RuntimeCache.mat.height(), Bitmap.Config.ARGB_8888) + Utils.matToBitmap(RuntimeCache.mat, bitmap, true) + val imagePath = "${createImageFileDir()}/${System.currentTimeMillis()}.png" + bitmap.saveImage(imagePath) + imagePath.compressImage(this, object : OnImageCompressListener { + override fun onSuccess(file: File) { + imageFileViewModel.uploadImage(file) + } - override fun onError(e: Throwable) { - e.printStackTrace() - } - }) - } - } - } - - override fun onCancel() {} - }) + override fun onError(e: Throwable) { + e.printStackTrace() + } + }) } } \ No newline at end of file diff --git a/app/src/main/java/com/casic/br/app/view/CheckManifestBySceneActivity.kt b/app/src/main/java/com/casic/br/app/view/CheckManifestBySceneActivity.kt index ac49cae..668a576 100644 --- a/app/src/main/java/com/casic/br/app/view/CheckManifestBySceneActivity.kt +++ b/app/src/main/java/com/casic/br/app/view/CheckManifestBySceneActivity.kt @@ -6,8 +6,8 @@ import com.casic.br.app.databinding.ActivityCheckManifestBySceneBinding import com.casic.br.app.fragment.CheckManifestFragment import com.casic.br.app.fragment.HiddenTroubleFragment +import com.casic.br.app.utils.RuntimeCache import com.pengxh.kt.lite.base.KotlinBaseActivity -import com.pengxh.kt.lite.utils.Constant class CheckManifestBySceneActivity : KotlinBaseActivity() { @@ -18,11 +18,9 @@ } override fun initOnCreate(savedInstanceState: Bundle?) { - val args = intent.getStringArrayListExtra(Constant.INTENT_PARAM) as ArrayList - - val subPageTitles = arrayOf("${args[0]}检查清单", "隐患列表") - fragmentPages.add(CheckManifestFragment(args[0])) - fragmentPages.add(HiddenTroubleFragment(args[1])) + val subPageTitles = arrayOf("${RuntimeCache.sceneName}检查清单", "隐患列表") + fragmentPages.add(CheckManifestFragment()) + fragmentPages.add(HiddenTroubleFragment()) val topViewPagerAdapter = TopViewPagerAdapter( supportFragmentManager, subPageTitles, fragmentPages diff --git a/app/src/main/java/com/casic/br/app/view/CheckManifestByTargetActivity.kt b/app/src/main/java/com/casic/br/app/view/CheckManifestByTargetActivity.kt index db1201d..68ed48a 100644 --- a/app/src/main/java/com/casic/br/app/view/CheckManifestByTargetActivity.kt +++ b/app/src/main/java/com/casic/br/app/view/CheckManifestByTargetActivity.kt @@ -6,6 +6,7 @@ import com.casic.br.app.adapter.TopViewPagerAdapter import com.casic.br.app.databinding.ActivityCheckManifestByTargetBinding import com.casic.br.app.fragment.TargetCheckManifestFragment +import com.casic.br.app.utils.RuntimeCache import com.casic.br.app.vm.ConfigViewModel import com.google.gson.Gson import com.google.gson.reflect.TypeToken @@ -24,18 +25,16 @@ } override fun initOnCreate(savedInstanceState: Bundle?) { - val args = intent.getStringArrayListExtra(Constant.INTENT_PARAM) as ArrayList - - val detectedScene = args[0] + val targetJsonValue = intent.getStringExtra(Constant.INTENT_PARAM) as String //场景需要转为字典值 configViewModel = ViewModelProvider(this)[ConfigViewModel::class.java] configViewModel.getDictionaryByCode(this, "securityScene") configViewModel.dictionary.observe(this) { if (it.code == 200) { for (dic in it.data) { - if (dic.name == detectedScene) { + if (dic.name == RuntimeCache.sceneName) { val targetSet = gson.fromJson>( - args[1], object : TypeToken>() {}.type + targetJsonValue, object : TypeToken>() {}.type ) val subPageTitles = ArrayList() targetSet.forEach { target -> diff --git a/app/src/main/java/com/casic/br/app/view/CheckResultActivity.kt b/app/src/main/java/com/casic/br/app/view/CheckResultActivity.kt index 3feb7e3..490bd95 100644 --- a/app/src/main/java/com/casic/br/app/view/CheckResultActivity.kt +++ b/app/src/main/java/com/casic/br/app/view/CheckResultActivity.kt @@ -7,6 +7,7 @@ import com.casic.br.app.databinding.ActivityCheckResultBinding import com.casic.br.app.extensions.combineFilePath import com.casic.br.app.model.HiddenTroubleListResultModel +import com.casic.br.app.utils.RuntimeCache import com.casic.br.app.vm.InspectionViewModel import com.pengxh.kt.lite.adapter.NormalRecyclerAdapter import com.pengxh.kt.lite.adapter.ViewHolder @@ -14,7 +15,6 @@ import com.pengxh.kt.lite.extensions.navigatePageTo import com.pengxh.kt.lite.extensions.show import com.pengxh.kt.lite.extensions.timestampToCompleteDate -import com.pengxh.kt.lite.utils.Constant import com.pengxh.kt.lite.utils.LoadState class CheckResultActivity : KotlinBaseActivity() { @@ -22,13 +22,11 @@ private val kTag = "CheckResultActivity" private val context = this private lateinit var inspectionViewModel: InspectionViewModel - private lateinit var inspectionId: String override fun initEvent() { binding.confirmButton.setOnClickListener { inspectionViewModel.stopInspection( - this, - inspectionId, + this, RuntimeCache.inspectionId, System.currentTimeMillis().timestampToCompleteDate(), binding.inputSiteView.text.toString() ) @@ -38,9 +36,8 @@ } override fun initOnCreate(savedInstanceState: Bundle?) { - inspectionId = intent.getStringExtra(Constant.INTENT_PARAM) as String inspectionViewModel = ViewModelProvider(this)[InspectionViewModel::class.java] - inspectionViewModel.getHiddenTroublesByInspectionId(this, inspectionId) + inspectionViewModel.getHiddenTroublesByInspectionId(this, RuntimeCache.inspectionId) inspectionViewModel.troublesResultModel.observe(this) { if (it.code == 200) { val troublesAdapter = object : diff --git a/app/src/main/java/com/casic/br/app/view/SelectSceneActivity.kt b/app/src/main/java/com/casic/br/app/view/SelectSceneActivity.kt index ce3a88b..d06d6f8 100644 --- a/app/src/main/java/com/casic/br/app/view/SelectSceneActivity.kt +++ b/app/src/main/java/com/casic/br/app/view/SelectSceneActivity.kt @@ -8,6 +8,7 @@ import androidx.lifecycle.ViewModelProvider import com.casic.br.app.databinding.ActivitySelectSceneBinding import com.casic.br.app.model.DictionaryModel +import com.casic.br.app.utils.RuntimeCache import com.casic.br.app.vm.ConfigViewModel import com.pengxh.kt.lite.base.KotlinBaseActivity import com.pengxh.kt.lite.extensions.show @@ -43,7 +44,10 @@ override fun onItemSelected( parent: AdapterView<*>?, view: View?, position: Int, id: Long ) { - selectedValue = sceneDicModels[position].name + val dataModel = sceneDicModels[position] + selectedValue = dataModel.name + RuntimeCache.scene = dataModel.value + RuntimeCache.sceneName = dataModel.name } override fun onNothingSelected(parent: AdapterView<*>?) { diff --git a/app/src/main/java/com/casic/br/app/fragment/CheckManifestFragment.kt b/app/src/main/java/com/casic/br/app/fragment/CheckManifestFragment.kt index 8ef6703..301007d 100644 --- a/app/src/main/java/com/casic/br/app/fragment/CheckManifestFragment.kt +++ b/app/src/main/java/com/casic/br/app/fragment/CheckManifestFragment.kt @@ -7,6 +7,7 @@ import com.casic.br.app.R import com.casic.br.app.databinding.FragmentCheckManifestBinding import com.casic.br.app.model.SceneCheckManifestModel +import com.casic.br.app.utils.RuntimeCache import com.casic.br.app.vm.CheckManifestViewModel import com.casic.br.app.vm.ConfigViewModel import com.casic.br.app.widgets.CheckStandardSheet @@ -14,8 +15,7 @@ import com.pengxh.kt.lite.adapter.ViewHolder import com.pengxh.kt.lite.base.KotlinBaseFragment -class CheckManifestFragment(private val detectedScene: String) : - KotlinBaseFragment() { +class CheckManifestFragment : KotlinBaseFragment() { private val kTag = "CheckManifestFragment" private lateinit var configViewModel: ConfigViewModel @@ -32,7 +32,7 @@ configViewModel.dictionary.observe(this) { if (it.code == 200) { for (dic in it.data) { - if (dic.name == detectedScene) { + if (dic.name == RuntimeCache.sceneName) { checkManifestViewModel.getCheckManifestByScene(requireContext(), dic.value) return@observe } diff --git a/app/src/main/java/com/casic/br/app/fragment/HiddenTroubleFragment.kt b/app/src/main/java/com/casic/br/app/fragment/HiddenTroubleFragment.kt index 4d66ee0..62fcc4a 100644 --- a/app/src/main/java/com/casic/br/app/fragment/HiddenTroubleFragment.kt +++ b/app/src/main/java/com/casic/br/app/fragment/HiddenTroubleFragment.kt @@ -9,6 +9,7 @@ import com.casic.br.app.databinding.FragmentHiddenTroubleBinding import com.casic.br.app.extensions.combineFilePath import com.casic.br.app.model.HiddenTroubleListResultModel +import com.casic.br.app.utils.RuntimeCache import com.casic.br.app.view.BigImageActivity import com.casic.br.app.vm.InspectionViewModel import com.pengxh.kt.lite.adapter.NormalRecyclerAdapter @@ -17,8 +18,7 @@ import com.pengxh.kt.lite.extensions.navigatePageTo import com.pengxh.kt.lite.extensions.show -class HiddenTroubleFragment(private val inspectionId: String) : - KotlinBaseFragment() { +class HiddenTroubleFragment : KotlinBaseFragment() { private lateinit var inspectionViewModel: InspectionViewModel @@ -28,7 +28,9 @@ override fun initOnCreate(savedInstanceState: Bundle?) { inspectionViewModel = ViewModelProvider(this)[InspectionViewModel::class.java] - inspectionViewModel.getHiddenTroublesByInspectionId(requireContext(), inspectionId) + inspectionViewModel.getHiddenTroublesByInspectionId( + requireContext(), RuntimeCache.inspectionId + ) inspectionViewModel.troublesResultModel.observe(this) { if (it.code == 200) { if (it.data.isEmpty()) { diff --git a/app/src/main/java/com/casic/br/app/retrofit/RetrofitServiceManager.kt b/app/src/main/java/com/casic/br/app/retrofit/RetrofitServiceManager.kt index 79a5386..c4edbee 100644 --- a/app/src/main/java/com/casic/br/app/retrofit/RetrofitServiceManager.kt +++ b/app/src/main/java/com/casic/br/app/retrofit/RetrofitServiceManager.kt @@ -2,6 +2,7 @@ import com.casic.br.app.utils.AuthenticationHelper import com.casic.br.app.utils.LocaleConstant +import com.casic.br.app.utils.RuntimeCache import com.google.gson.Gson import com.google.gson.JsonObject import com.google.gson.reflect.TypeToken @@ -134,22 +135,38 @@ * 添加隐患 */ suspend fun addHiddenTrouble( - mainType: String, - subType: String, - hiddenTroubleName: String, - hiddenTroubleContent: String, - hiddenTroubleImageArray: Array> + mainClass: String, + subClass: String, + sceneName: String, + subClassName: String, + basis: String, + alarmMenuId: String, + content: String, + scene: String, + inspectionId: String, + name: String, + mainClassName: String, + id: String, + imageList: Array> ): String { val param = JsonObject() - param.addProperty("mainClass", mainType) - param.addProperty("subClass", subType) - param.addProperty("name", hiddenTroubleName) - param.addProperty("content", hiddenTroubleContent) - param.add("imageList", gson.toJsonTree(hiddenTroubleImageArray, typeToken).asJsonArray) - + param.addProperty("mainClass", mainClass) + param.addProperty("subClass", subClass) + param.addProperty("sceneName", sceneName) + param.addProperty("subClassName", subClassName) + param.addProperty("basis", basis) + param.addProperty("alarmMenuId", alarmMenuId) + param.addProperty("content", content) + param.addProperty("scene", scene) + param.addProperty("inspectionId", inspectionId) + param.addProperty("name", name) + param.addProperty("mainClassName", mainClassName) + param.addProperty("id", id) + param.add("imageList", gson.toJsonTree(imageList, typeToken).asJsonArray) val requestBody = param.toString().toRequestBody( "application/json;charset=UTF-8".toMediaType() ) + return api.addHiddenTrouble(AuthenticationHelper.token, requestBody) } @@ -251,17 +268,12 @@ /** * 推送报警信息 * */ - suspend fun uploadDetectTargetAlarm( - alarmCode: String, - alarmImgPath: String, - inspectionId: String, - scene: String - ): String { + suspend fun uploadDetectTargetAlarm(alarmCode: String, alarmImgPath: String): String { val param = JsonObject() param.addProperty("alarmCode", alarmCode) param.addProperty("alarmImgPath", alarmImgPath) - param.addProperty("inspectionId", inspectionId) - param.addProperty("scene", scene) + param.addProperty("inspectionId", RuntimeCache.inspectionId) + param.addProperty("scene", RuntimeCache.sceneName) val requestBody = param.toString().toRequestBody( "application/json;charset=UTF-8".toMediaType() diff --git a/app/src/main/java/com/casic/br/app/utils/RuntimeCache.kt b/app/src/main/java/com/casic/br/app/utils/RuntimeCache.kt new file mode 100644 index 0000000..fc87dd1 --- /dev/null +++ b/app/src/main/java/com/casic/br/app/utils/RuntimeCache.kt @@ -0,0 +1,12 @@ +package com.casic.br.app.utils + +import com.casic.br.app.model.DictionaryModel +import org.opencv.core.Mat + +object RuntimeCache { + var scene = "" + var sceneName = "" + var inspectionId = "" + var mainDicModels: MutableList = ArrayList() + lateinit var mat: Mat +} \ No newline at end of file diff --git a/app/src/main/java/com/casic/br/app/view/AddHiddenTroubleActivity.kt b/app/src/main/java/com/casic/br/app/view/AddHiddenTroubleActivity.kt index 0876851..e4f25df 100644 --- a/app/src/main/java/com/casic/br/app/view/AddHiddenTroubleActivity.kt +++ b/app/src/main/java/com/casic/br/app/view/AddHiddenTroubleActivity.kt @@ -1,51 +1,41 @@ package com.casic.br.app.view +import android.graphics.Bitmap import android.os.Bundle import android.util.Log import android.view.View import android.widget.AdapterView import android.widget.ArrayAdapter import androidx.lifecycle.ViewModelProvider -import androidx.lifecycle.lifecycleScope import com.casic.br.app.databinding.ActivityAddHiddenTroubleBinding import com.casic.br.app.extensions.combineFilePath import com.casic.br.app.extensions.compressImage import com.casic.br.app.model.DictionaryModel -import com.casic.br.app.utils.GlideLoadEngine +import com.casic.br.app.utils.RuntimeCache import com.casic.br.app.vm.ConfigViewModel import com.casic.br.app.vm.HiddenTroubleViewModel import com.casic.br.app.vm.ImageFileViewModel import com.casic.br.operationsite.test.callback.OnImageCompressListener -import com.google.gson.Gson -import com.google.gson.reflect.TypeToken -import com.luck.picture.lib.basic.PictureSelector -import com.luck.picture.lib.config.SelectMimeType -import com.luck.picture.lib.entity.LocalMedia -import com.luck.picture.lib.interfaces.OnResultCallbackListener import com.pengxh.kt.lite.adapter.EditableImageAdapter import com.pengxh.kt.lite.base.KotlinBaseActivity import com.pengxh.kt.lite.divider.RecyclerViewItemOffsets +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.saveImage import com.pengxh.kt.lite.extensions.show -import com.pengxh.kt.lite.utils.Constant import com.pengxh.kt.lite.utils.LoadState import com.pengxh.kt.lite.utils.LoadingDialogHub -import kotlinx.coroutines.delay -import kotlinx.coroutines.flow.flow -import kotlinx.coroutines.launch +import org.opencv.android.Utils import java.io.File - class AddHiddenTroubleActivity : KotlinBaseActivity() { private val kTag = "AddHiddenTroubleActivity" private val context = this - private val selectedImages = ArrayList() private val imagePaths = ArrayList>() private val recyclerViewImages = ArrayList() private val marginOffset by lazy { 1.dp2px(this) } - private val gson by lazy { Gson() } private lateinit var imageAdapter: EditableImageAdapter private lateinit var imageFileViewModel: ImageFileViewModel private lateinit var configViewModel: ConfigViewModel @@ -82,11 +72,8 @@ } override fun initOnCreate(savedInstanceState: Bundle?) { - val mainDicJsonValue = intent.getStringExtra(Constant.INTENT_PARAM) //转为实体类 - mainDicModels = gson.fromJson>( - mainDicJsonValue, object : TypeToken>() {}.type - ) + mainDicModels = RuntimeCache.mainDicModels val mainTypeArray = ArrayList() mainDicModels.forEach { mainTypeArray.add(it.name) @@ -124,6 +111,8 @@ val url = it.data.toString() val map = HashMap() map["alarmImage"] = url + map["id"] = "" + map["inspectionAlarmId"] = "" imagePaths.add(map) recyclerViewImages.add(url.combineFilePath()) imageAdapter.notifyDataSetChanged() @@ -169,7 +158,7 @@ imageAdapter.setOnItemClickListener(object : EditableImageAdapter.OnItemClickListener { override fun onAddImageClick() { - selectPicture() + addImage() } override fun onItemClick(position: Int) { @@ -177,7 +166,6 @@ } override fun onItemLongClick(view: View?, position: Int) { - selectedImages.removeAt(position) imagePaths.removeAt(position) recyclerViewImages.removeAt(position) imageAdapter.notifyDataSetChanged() @@ -189,8 +177,16 @@ this, selectedMainTypePosition.toString(), selectedSubTypePosition.toString(), - binding.hiddenTroubleNameView.text.toString(), + RuntimeCache.sceneName, + subDicModels[selectedMainTypePosition].name, + "", + "", binding.hiddenTroubleContentView.text.toString(), + RuntimeCache.scene, + RuntimeCache.inspectionId, + binding.hiddenTroubleNameView.text.toString(), + mainDicModels[selectedMainTypePosition].name, + "", imagePaths.toTypedArray() ) } @@ -198,45 +194,20 @@ binding.cancelButton.setOnClickListener { finish() } } - private fun selectPicture() { - PictureSelector.create(this).openGallery(SelectMimeType.ofImage()).isGif(false) - .isMaxSelectEnabledMask(true).setFilterMinFileSize(100).setMaxSelectNum(3) - .isDisplayCamera(true).setImageEngine(GlideLoadEngine.get) - .setSelectedData(selectedImages) - .forResult(object : OnResultCallbackListener { - override fun onResult(result: ArrayList) { - //重置已选的图片 - selectedImages.clear() - //因为result会带着之前的数据,所以需要清空之前已经add的数据 - recyclerViewImages.clear() - imagePaths.clear() - // 如果设置了setSelectedData,它会将之前的结果作为最新的返回值,要注意重复问题 - // 数据链控制图片压缩上传过程,防止速度过快导致压缩失败 - lifecycleScope.launch { - flow { - result.forEach { - emit(it) - delay(1000) - } - }.collect { - selectedImages.add(it) - //压缩图片并上传 - it.realPath.compressImage(context, object : OnImageCompressListener { - override fun onSuccess(file: File) { - Log.d(kTag, "absolutePath: ${file.absolutePath}") - //上传图片 - imageFileViewModel.uploadImage(file) - } + private fun addImage() { + //mat转图片 + val bitmap = Bitmap.createBitmap(RuntimeCache.mat.width(), RuntimeCache.mat.height(), Bitmap.Config.ARGB_8888) + Utils.matToBitmap(RuntimeCache.mat, bitmap, true) + val imagePath = "${createImageFileDir()}/${System.currentTimeMillis()}.png" + bitmap.saveImage(imagePath) + imagePath.compressImage(this, object : OnImageCompressListener { + override fun onSuccess(file: File) { + imageFileViewModel.uploadImage(file) + } - override fun onError(e: Throwable) { - e.printStackTrace() - } - }) - } - } - } - - override fun onCancel() {} - }) + override fun onError(e: Throwable) { + e.printStackTrace() + } + }) } } \ No newline at end of file diff --git a/app/src/main/java/com/casic/br/app/view/CheckManifestBySceneActivity.kt b/app/src/main/java/com/casic/br/app/view/CheckManifestBySceneActivity.kt index ac49cae..668a576 100644 --- a/app/src/main/java/com/casic/br/app/view/CheckManifestBySceneActivity.kt +++ b/app/src/main/java/com/casic/br/app/view/CheckManifestBySceneActivity.kt @@ -6,8 +6,8 @@ import com.casic.br.app.databinding.ActivityCheckManifestBySceneBinding import com.casic.br.app.fragment.CheckManifestFragment import com.casic.br.app.fragment.HiddenTroubleFragment +import com.casic.br.app.utils.RuntimeCache import com.pengxh.kt.lite.base.KotlinBaseActivity -import com.pengxh.kt.lite.utils.Constant class CheckManifestBySceneActivity : KotlinBaseActivity() { @@ -18,11 +18,9 @@ } override fun initOnCreate(savedInstanceState: Bundle?) { - val args = intent.getStringArrayListExtra(Constant.INTENT_PARAM) as ArrayList - - val subPageTitles = arrayOf("${args[0]}检查清单", "隐患列表") - fragmentPages.add(CheckManifestFragment(args[0])) - fragmentPages.add(HiddenTroubleFragment(args[1])) + val subPageTitles = arrayOf("${RuntimeCache.sceneName}检查清单", "隐患列表") + fragmentPages.add(CheckManifestFragment()) + fragmentPages.add(HiddenTroubleFragment()) val topViewPagerAdapter = TopViewPagerAdapter( supportFragmentManager, subPageTitles, fragmentPages diff --git a/app/src/main/java/com/casic/br/app/view/CheckManifestByTargetActivity.kt b/app/src/main/java/com/casic/br/app/view/CheckManifestByTargetActivity.kt index db1201d..68ed48a 100644 --- a/app/src/main/java/com/casic/br/app/view/CheckManifestByTargetActivity.kt +++ b/app/src/main/java/com/casic/br/app/view/CheckManifestByTargetActivity.kt @@ -6,6 +6,7 @@ import com.casic.br.app.adapter.TopViewPagerAdapter import com.casic.br.app.databinding.ActivityCheckManifestByTargetBinding import com.casic.br.app.fragment.TargetCheckManifestFragment +import com.casic.br.app.utils.RuntimeCache import com.casic.br.app.vm.ConfigViewModel import com.google.gson.Gson import com.google.gson.reflect.TypeToken @@ -24,18 +25,16 @@ } override fun initOnCreate(savedInstanceState: Bundle?) { - val args = intent.getStringArrayListExtra(Constant.INTENT_PARAM) as ArrayList - - val detectedScene = args[0] + val targetJsonValue = intent.getStringExtra(Constant.INTENT_PARAM) as String //场景需要转为字典值 configViewModel = ViewModelProvider(this)[ConfigViewModel::class.java] configViewModel.getDictionaryByCode(this, "securityScene") configViewModel.dictionary.observe(this) { if (it.code == 200) { for (dic in it.data) { - if (dic.name == detectedScene) { + if (dic.name == RuntimeCache.sceneName) { val targetSet = gson.fromJson>( - args[1], object : TypeToken>() {}.type + targetJsonValue, object : TypeToken>() {}.type ) val subPageTitles = ArrayList() targetSet.forEach { target -> diff --git a/app/src/main/java/com/casic/br/app/view/CheckResultActivity.kt b/app/src/main/java/com/casic/br/app/view/CheckResultActivity.kt index 3feb7e3..490bd95 100644 --- a/app/src/main/java/com/casic/br/app/view/CheckResultActivity.kt +++ b/app/src/main/java/com/casic/br/app/view/CheckResultActivity.kt @@ -7,6 +7,7 @@ import com.casic.br.app.databinding.ActivityCheckResultBinding import com.casic.br.app.extensions.combineFilePath import com.casic.br.app.model.HiddenTroubleListResultModel +import com.casic.br.app.utils.RuntimeCache import com.casic.br.app.vm.InspectionViewModel import com.pengxh.kt.lite.adapter.NormalRecyclerAdapter import com.pengxh.kt.lite.adapter.ViewHolder @@ -14,7 +15,6 @@ import com.pengxh.kt.lite.extensions.navigatePageTo import com.pengxh.kt.lite.extensions.show import com.pengxh.kt.lite.extensions.timestampToCompleteDate -import com.pengxh.kt.lite.utils.Constant import com.pengxh.kt.lite.utils.LoadState class CheckResultActivity : KotlinBaseActivity() { @@ -22,13 +22,11 @@ private val kTag = "CheckResultActivity" private val context = this private lateinit var inspectionViewModel: InspectionViewModel - private lateinit var inspectionId: String override fun initEvent() { binding.confirmButton.setOnClickListener { inspectionViewModel.stopInspection( - this, - inspectionId, + this, RuntimeCache.inspectionId, System.currentTimeMillis().timestampToCompleteDate(), binding.inputSiteView.text.toString() ) @@ -38,9 +36,8 @@ } override fun initOnCreate(savedInstanceState: Bundle?) { - inspectionId = intent.getStringExtra(Constant.INTENT_PARAM) as String inspectionViewModel = ViewModelProvider(this)[InspectionViewModel::class.java] - inspectionViewModel.getHiddenTroublesByInspectionId(this, inspectionId) + inspectionViewModel.getHiddenTroublesByInspectionId(this, RuntimeCache.inspectionId) inspectionViewModel.troublesResultModel.observe(this) { if (it.code == 200) { val troublesAdapter = object : diff --git a/app/src/main/java/com/casic/br/app/view/SelectSceneActivity.kt b/app/src/main/java/com/casic/br/app/view/SelectSceneActivity.kt index ce3a88b..d06d6f8 100644 --- a/app/src/main/java/com/casic/br/app/view/SelectSceneActivity.kt +++ b/app/src/main/java/com/casic/br/app/view/SelectSceneActivity.kt @@ -8,6 +8,7 @@ import androidx.lifecycle.ViewModelProvider import com.casic.br.app.databinding.ActivitySelectSceneBinding import com.casic.br.app.model.DictionaryModel +import com.casic.br.app.utils.RuntimeCache import com.casic.br.app.vm.ConfigViewModel import com.pengxh.kt.lite.base.KotlinBaseActivity import com.pengxh.kt.lite.extensions.show @@ -43,7 +44,10 @@ override fun onItemSelected( parent: AdapterView<*>?, view: View?, position: Int, id: Long ) { - selectedValue = sceneDicModels[position].name + val dataModel = sceneDicModels[position] + selectedValue = dataModel.name + RuntimeCache.scene = dataModel.value + RuntimeCache.sceneName = dataModel.name } override fun onNothingSelected(parent: AdapterView<*>?) { diff --git a/app/src/main/java/com/casic/br/app/vm/AlarmViewModel.kt b/app/src/main/java/com/casic/br/app/vm/AlarmViewModel.kt index afca9cd..84d8d0a 100644 --- a/app/src/main/java/com/casic/br/app/vm/AlarmViewModel.kt +++ b/app/src/main/java/com/casic/br/app/vm/AlarmViewModel.kt @@ -10,15 +10,9 @@ class AlarmViewModel : BaseViewModel() { fun uploadDetectTargetAlarm( - context: Context, - alarmCode: String, - alarmImgPath: String, - inspectionId: String, - scene: String + context: Context, alarmCode: String, alarmImgPath: String ) = launch({ - val response = RetrofitServiceManager.uploadDetectTargetAlarm( - alarmCode, alarmImgPath, inspectionId, scene - ) + val response = RetrofitServiceManager.uploadDetectTargetAlarm(alarmCode, alarmImgPath) val responseCode = response.getResponseCode() if (responseCode == 200) { "提交成功".show(context) diff --git a/app/src/main/java/com/casic/br/app/fragment/CheckManifestFragment.kt b/app/src/main/java/com/casic/br/app/fragment/CheckManifestFragment.kt index 8ef6703..301007d 100644 --- a/app/src/main/java/com/casic/br/app/fragment/CheckManifestFragment.kt +++ b/app/src/main/java/com/casic/br/app/fragment/CheckManifestFragment.kt @@ -7,6 +7,7 @@ import com.casic.br.app.R import com.casic.br.app.databinding.FragmentCheckManifestBinding import com.casic.br.app.model.SceneCheckManifestModel +import com.casic.br.app.utils.RuntimeCache import com.casic.br.app.vm.CheckManifestViewModel import com.casic.br.app.vm.ConfigViewModel import com.casic.br.app.widgets.CheckStandardSheet @@ -14,8 +15,7 @@ import com.pengxh.kt.lite.adapter.ViewHolder import com.pengxh.kt.lite.base.KotlinBaseFragment -class CheckManifestFragment(private val detectedScene: String) : - KotlinBaseFragment() { +class CheckManifestFragment : KotlinBaseFragment() { private val kTag = "CheckManifestFragment" private lateinit var configViewModel: ConfigViewModel @@ -32,7 +32,7 @@ configViewModel.dictionary.observe(this) { if (it.code == 200) { for (dic in it.data) { - if (dic.name == detectedScene) { + if (dic.name == RuntimeCache.sceneName) { checkManifestViewModel.getCheckManifestByScene(requireContext(), dic.value) return@observe } diff --git a/app/src/main/java/com/casic/br/app/fragment/HiddenTroubleFragment.kt b/app/src/main/java/com/casic/br/app/fragment/HiddenTroubleFragment.kt index 4d66ee0..62fcc4a 100644 --- a/app/src/main/java/com/casic/br/app/fragment/HiddenTroubleFragment.kt +++ b/app/src/main/java/com/casic/br/app/fragment/HiddenTroubleFragment.kt @@ -9,6 +9,7 @@ import com.casic.br.app.databinding.FragmentHiddenTroubleBinding import com.casic.br.app.extensions.combineFilePath import com.casic.br.app.model.HiddenTroubleListResultModel +import com.casic.br.app.utils.RuntimeCache import com.casic.br.app.view.BigImageActivity import com.casic.br.app.vm.InspectionViewModel import com.pengxh.kt.lite.adapter.NormalRecyclerAdapter @@ -17,8 +18,7 @@ import com.pengxh.kt.lite.extensions.navigatePageTo import com.pengxh.kt.lite.extensions.show -class HiddenTroubleFragment(private val inspectionId: String) : - KotlinBaseFragment() { +class HiddenTroubleFragment : KotlinBaseFragment() { private lateinit var inspectionViewModel: InspectionViewModel @@ -28,7 +28,9 @@ override fun initOnCreate(savedInstanceState: Bundle?) { inspectionViewModel = ViewModelProvider(this)[InspectionViewModel::class.java] - inspectionViewModel.getHiddenTroublesByInspectionId(requireContext(), inspectionId) + inspectionViewModel.getHiddenTroublesByInspectionId( + requireContext(), RuntimeCache.inspectionId + ) inspectionViewModel.troublesResultModel.observe(this) { if (it.code == 200) { if (it.data.isEmpty()) { diff --git a/app/src/main/java/com/casic/br/app/retrofit/RetrofitServiceManager.kt b/app/src/main/java/com/casic/br/app/retrofit/RetrofitServiceManager.kt index 79a5386..c4edbee 100644 --- a/app/src/main/java/com/casic/br/app/retrofit/RetrofitServiceManager.kt +++ b/app/src/main/java/com/casic/br/app/retrofit/RetrofitServiceManager.kt @@ -2,6 +2,7 @@ import com.casic.br.app.utils.AuthenticationHelper import com.casic.br.app.utils.LocaleConstant +import com.casic.br.app.utils.RuntimeCache import com.google.gson.Gson import com.google.gson.JsonObject import com.google.gson.reflect.TypeToken @@ -134,22 +135,38 @@ * 添加隐患 */ suspend fun addHiddenTrouble( - mainType: String, - subType: String, - hiddenTroubleName: String, - hiddenTroubleContent: String, - hiddenTroubleImageArray: Array> + mainClass: String, + subClass: String, + sceneName: String, + subClassName: String, + basis: String, + alarmMenuId: String, + content: String, + scene: String, + inspectionId: String, + name: String, + mainClassName: String, + id: String, + imageList: Array> ): String { val param = JsonObject() - param.addProperty("mainClass", mainType) - param.addProperty("subClass", subType) - param.addProperty("name", hiddenTroubleName) - param.addProperty("content", hiddenTroubleContent) - param.add("imageList", gson.toJsonTree(hiddenTroubleImageArray, typeToken).asJsonArray) - + param.addProperty("mainClass", mainClass) + param.addProperty("subClass", subClass) + param.addProperty("sceneName", sceneName) + param.addProperty("subClassName", subClassName) + param.addProperty("basis", basis) + param.addProperty("alarmMenuId", alarmMenuId) + param.addProperty("content", content) + param.addProperty("scene", scene) + param.addProperty("inspectionId", inspectionId) + param.addProperty("name", name) + param.addProperty("mainClassName", mainClassName) + param.addProperty("id", id) + param.add("imageList", gson.toJsonTree(imageList, typeToken).asJsonArray) val requestBody = param.toString().toRequestBody( "application/json;charset=UTF-8".toMediaType() ) + return api.addHiddenTrouble(AuthenticationHelper.token, requestBody) } @@ -251,17 +268,12 @@ /** * 推送报警信息 * */ - suspend fun uploadDetectTargetAlarm( - alarmCode: String, - alarmImgPath: String, - inspectionId: String, - scene: String - ): String { + suspend fun uploadDetectTargetAlarm(alarmCode: String, alarmImgPath: String): String { val param = JsonObject() param.addProperty("alarmCode", alarmCode) param.addProperty("alarmImgPath", alarmImgPath) - param.addProperty("inspectionId", inspectionId) - param.addProperty("scene", scene) + param.addProperty("inspectionId", RuntimeCache.inspectionId) + param.addProperty("scene", RuntimeCache.sceneName) val requestBody = param.toString().toRequestBody( "application/json;charset=UTF-8".toMediaType() diff --git a/app/src/main/java/com/casic/br/app/utils/RuntimeCache.kt b/app/src/main/java/com/casic/br/app/utils/RuntimeCache.kt new file mode 100644 index 0000000..fc87dd1 --- /dev/null +++ b/app/src/main/java/com/casic/br/app/utils/RuntimeCache.kt @@ -0,0 +1,12 @@ +package com.casic.br.app.utils + +import com.casic.br.app.model.DictionaryModel +import org.opencv.core.Mat + +object RuntimeCache { + var scene = "" + var sceneName = "" + var inspectionId = "" + var mainDicModels: MutableList = ArrayList() + lateinit var mat: Mat +} \ No newline at end of file diff --git a/app/src/main/java/com/casic/br/app/view/AddHiddenTroubleActivity.kt b/app/src/main/java/com/casic/br/app/view/AddHiddenTroubleActivity.kt index 0876851..e4f25df 100644 --- a/app/src/main/java/com/casic/br/app/view/AddHiddenTroubleActivity.kt +++ b/app/src/main/java/com/casic/br/app/view/AddHiddenTroubleActivity.kt @@ -1,51 +1,41 @@ package com.casic.br.app.view +import android.graphics.Bitmap import android.os.Bundle import android.util.Log import android.view.View import android.widget.AdapterView import android.widget.ArrayAdapter import androidx.lifecycle.ViewModelProvider -import androidx.lifecycle.lifecycleScope import com.casic.br.app.databinding.ActivityAddHiddenTroubleBinding import com.casic.br.app.extensions.combineFilePath import com.casic.br.app.extensions.compressImage import com.casic.br.app.model.DictionaryModel -import com.casic.br.app.utils.GlideLoadEngine +import com.casic.br.app.utils.RuntimeCache import com.casic.br.app.vm.ConfigViewModel import com.casic.br.app.vm.HiddenTroubleViewModel import com.casic.br.app.vm.ImageFileViewModel import com.casic.br.operationsite.test.callback.OnImageCompressListener -import com.google.gson.Gson -import com.google.gson.reflect.TypeToken -import com.luck.picture.lib.basic.PictureSelector -import com.luck.picture.lib.config.SelectMimeType -import com.luck.picture.lib.entity.LocalMedia -import com.luck.picture.lib.interfaces.OnResultCallbackListener import com.pengxh.kt.lite.adapter.EditableImageAdapter import com.pengxh.kt.lite.base.KotlinBaseActivity import com.pengxh.kt.lite.divider.RecyclerViewItemOffsets +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.saveImage import com.pengxh.kt.lite.extensions.show -import com.pengxh.kt.lite.utils.Constant import com.pengxh.kt.lite.utils.LoadState import com.pengxh.kt.lite.utils.LoadingDialogHub -import kotlinx.coroutines.delay -import kotlinx.coroutines.flow.flow -import kotlinx.coroutines.launch +import org.opencv.android.Utils import java.io.File - class AddHiddenTroubleActivity : KotlinBaseActivity() { private val kTag = "AddHiddenTroubleActivity" private val context = this - private val selectedImages = ArrayList() private val imagePaths = ArrayList>() private val recyclerViewImages = ArrayList() private val marginOffset by lazy { 1.dp2px(this) } - private val gson by lazy { Gson() } private lateinit var imageAdapter: EditableImageAdapter private lateinit var imageFileViewModel: ImageFileViewModel private lateinit var configViewModel: ConfigViewModel @@ -82,11 +72,8 @@ } override fun initOnCreate(savedInstanceState: Bundle?) { - val mainDicJsonValue = intent.getStringExtra(Constant.INTENT_PARAM) //转为实体类 - mainDicModels = gson.fromJson>( - mainDicJsonValue, object : TypeToken>() {}.type - ) + mainDicModels = RuntimeCache.mainDicModels val mainTypeArray = ArrayList() mainDicModels.forEach { mainTypeArray.add(it.name) @@ -124,6 +111,8 @@ val url = it.data.toString() val map = HashMap() map["alarmImage"] = url + map["id"] = "" + map["inspectionAlarmId"] = "" imagePaths.add(map) recyclerViewImages.add(url.combineFilePath()) imageAdapter.notifyDataSetChanged() @@ -169,7 +158,7 @@ imageAdapter.setOnItemClickListener(object : EditableImageAdapter.OnItemClickListener { override fun onAddImageClick() { - selectPicture() + addImage() } override fun onItemClick(position: Int) { @@ -177,7 +166,6 @@ } override fun onItemLongClick(view: View?, position: Int) { - selectedImages.removeAt(position) imagePaths.removeAt(position) recyclerViewImages.removeAt(position) imageAdapter.notifyDataSetChanged() @@ -189,8 +177,16 @@ this, selectedMainTypePosition.toString(), selectedSubTypePosition.toString(), - binding.hiddenTroubleNameView.text.toString(), + RuntimeCache.sceneName, + subDicModels[selectedMainTypePosition].name, + "", + "", binding.hiddenTroubleContentView.text.toString(), + RuntimeCache.scene, + RuntimeCache.inspectionId, + binding.hiddenTroubleNameView.text.toString(), + mainDicModels[selectedMainTypePosition].name, + "", imagePaths.toTypedArray() ) } @@ -198,45 +194,20 @@ binding.cancelButton.setOnClickListener { finish() } } - private fun selectPicture() { - PictureSelector.create(this).openGallery(SelectMimeType.ofImage()).isGif(false) - .isMaxSelectEnabledMask(true).setFilterMinFileSize(100).setMaxSelectNum(3) - .isDisplayCamera(true).setImageEngine(GlideLoadEngine.get) - .setSelectedData(selectedImages) - .forResult(object : OnResultCallbackListener { - override fun onResult(result: ArrayList) { - //重置已选的图片 - selectedImages.clear() - //因为result会带着之前的数据,所以需要清空之前已经add的数据 - recyclerViewImages.clear() - imagePaths.clear() - // 如果设置了setSelectedData,它会将之前的结果作为最新的返回值,要注意重复问题 - // 数据链控制图片压缩上传过程,防止速度过快导致压缩失败 - lifecycleScope.launch { - flow { - result.forEach { - emit(it) - delay(1000) - } - }.collect { - selectedImages.add(it) - //压缩图片并上传 - it.realPath.compressImage(context, object : OnImageCompressListener { - override fun onSuccess(file: File) { - Log.d(kTag, "absolutePath: ${file.absolutePath}") - //上传图片 - imageFileViewModel.uploadImage(file) - } + private fun addImage() { + //mat转图片 + val bitmap = Bitmap.createBitmap(RuntimeCache.mat.width(), RuntimeCache.mat.height(), Bitmap.Config.ARGB_8888) + Utils.matToBitmap(RuntimeCache.mat, bitmap, true) + val imagePath = "${createImageFileDir()}/${System.currentTimeMillis()}.png" + bitmap.saveImage(imagePath) + imagePath.compressImage(this, object : OnImageCompressListener { + override fun onSuccess(file: File) { + imageFileViewModel.uploadImage(file) + } - override fun onError(e: Throwable) { - e.printStackTrace() - } - }) - } - } - } - - override fun onCancel() {} - }) + override fun onError(e: Throwable) { + e.printStackTrace() + } + }) } } \ No newline at end of file diff --git a/app/src/main/java/com/casic/br/app/view/CheckManifestBySceneActivity.kt b/app/src/main/java/com/casic/br/app/view/CheckManifestBySceneActivity.kt index ac49cae..668a576 100644 --- a/app/src/main/java/com/casic/br/app/view/CheckManifestBySceneActivity.kt +++ b/app/src/main/java/com/casic/br/app/view/CheckManifestBySceneActivity.kt @@ -6,8 +6,8 @@ import com.casic.br.app.databinding.ActivityCheckManifestBySceneBinding import com.casic.br.app.fragment.CheckManifestFragment import com.casic.br.app.fragment.HiddenTroubleFragment +import com.casic.br.app.utils.RuntimeCache import com.pengxh.kt.lite.base.KotlinBaseActivity -import com.pengxh.kt.lite.utils.Constant class CheckManifestBySceneActivity : KotlinBaseActivity() { @@ -18,11 +18,9 @@ } override fun initOnCreate(savedInstanceState: Bundle?) { - val args = intent.getStringArrayListExtra(Constant.INTENT_PARAM) as ArrayList - - val subPageTitles = arrayOf("${args[0]}检查清单", "隐患列表") - fragmentPages.add(CheckManifestFragment(args[0])) - fragmentPages.add(HiddenTroubleFragment(args[1])) + val subPageTitles = arrayOf("${RuntimeCache.sceneName}检查清单", "隐患列表") + fragmentPages.add(CheckManifestFragment()) + fragmentPages.add(HiddenTroubleFragment()) val topViewPagerAdapter = TopViewPagerAdapter( supportFragmentManager, subPageTitles, fragmentPages diff --git a/app/src/main/java/com/casic/br/app/view/CheckManifestByTargetActivity.kt b/app/src/main/java/com/casic/br/app/view/CheckManifestByTargetActivity.kt index db1201d..68ed48a 100644 --- a/app/src/main/java/com/casic/br/app/view/CheckManifestByTargetActivity.kt +++ b/app/src/main/java/com/casic/br/app/view/CheckManifestByTargetActivity.kt @@ -6,6 +6,7 @@ import com.casic.br.app.adapter.TopViewPagerAdapter import com.casic.br.app.databinding.ActivityCheckManifestByTargetBinding import com.casic.br.app.fragment.TargetCheckManifestFragment +import com.casic.br.app.utils.RuntimeCache import com.casic.br.app.vm.ConfigViewModel import com.google.gson.Gson import com.google.gson.reflect.TypeToken @@ -24,18 +25,16 @@ } override fun initOnCreate(savedInstanceState: Bundle?) { - val args = intent.getStringArrayListExtra(Constant.INTENT_PARAM) as ArrayList - - val detectedScene = args[0] + val targetJsonValue = intent.getStringExtra(Constant.INTENT_PARAM) as String //场景需要转为字典值 configViewModel = ViewModelProvider(this)[ConfigViewModel::class.java] configViewModel.getDictionaryByCode(this, "securityScene") configViewModel.dictionary.observe(this) { if (it.code == 200) { for (dic in it.data) { - if (dic.name == detectedScene) { + if (dic.name == RuntimeCache.sceneName) { val targetSet = gson.fromJson>( - args[1], object : TypeToken>() {}.type + targetJsonValue, object : TypeToken>() {}.type ) val subPageTitles = ArrayList() targetSet.forEach { target -> diff --git a/app/src/main/java/com/casic/br/app/view/CheckResultActivity.kt b/app/src/main/java/com/casic/br/app/view/CheckResultActivity.kt index 3feb7e3..490bd95 100644 --- a/app/src/main/java/com/casic/br/app/view/CheckResultActivity.kt +++ b/app/src/main/java/com/casic/br/app/view/CheckResultActivity.kt @@ -7,6 +7,7 @@ import com.casic.br.app.databinding.ActivityCheckResultBinding import com.casic.br.app.extensions.combineFilePath import com.casic.br.app.model.HiddenTroubleListResultModel +import com.casic.br.app.utils.RuntimeCache import com.casic.br.app.vm.InspectionViewModel import com.pengxh.kt.lite.adapter.NormalRecyclerAdapter import com.pengxh.kt.lite.adapter.ViewHolder @@ -14,7 +15,6 @@ import com.pengxh.kt.lite.extensions.navigatePageTo import com.pengxh.kt.lite.extensions.show import com.pengxh.kt.lite.extensions.timestampToCompleteDate -import com.pengxh.kt.lite.utils.Constant import com.pengxh.kt.lite.utils.LoadState class CheckResultActivity : KotlinBaseActivity() { @@ -22,13 +22,11 @@ private val kTag = "CheckResultActivity" private val context = this private lateinit var inspectionViewModel: InspectionViewModel - private lateinit var inspectionId: String override fun initEvent() { binding.confirmButton.setOnClickListener { inspectionViewModel.stopInspection( - this, - inspectionId, + this, RuntimeCache.inspectionId, System.currentTimeMillis().timestampToCompleteDate(), binding.inputSiteView.text.toString() ) @@ -38,9 +36,8 @@ } override fun initOnCreate(savedInstanceState: Bundle?) { - inspectionId = intent.getStringExtra(Constant.INTENT_PARAM) as String inspectionViewModel = ViewModelProvider(this)[InspectionViewModel::class.java] - inspectionViewModel.getHiddenTroublesByInspectionId(this, inspectionId) + inspectionViewModel.getHiddenTroublesByInspectionId(this, RuntimeCache.inspectionId) inspectionViewModel.troublesResultModel.observe(this) { if (it.code == 200) { val troublesAdapter = object : diff --git a/app/src/main/java/com/casic/br/app/view/SelectSceneActivity.kt b/app/src/main/java/com/casic/br/app/view/SelectSceneActivity.kt index ce3a88b..d06d6f8 100644 --- a/app/src/main/java/com/casic/br/app/view/SelectSceneActivity.kt +++ b/app/src/main/java/com/casic/br/app/view/SelectSceneActivity.kt @@ -8,6 +8,7 @@ import androidx.lifecycle.ViewModelProvider import com.casic.br.app.databinding.ActivitySelectSceneBinding import com.casic.br.app.model.DictionaryModel +import com.casic.br.app.utils.RuntimeCache import com.casic.br.app.vm.ConfigViewModel import com.pengxh.kt.lite.base.KotlinBaseActivity import com.pengxh.kt.lite.extensions.show @@ -43,7 +44,10 @@ override fun onItemSelected( parent: AdapterView<*>?, view: View?, position: Int, id: Long ) { - selectedValue = sceneDicModels[position].name + val dataModel = sceneDicModels[position] + selectedValue = dataModel.name + RuntimeCache.scene = dataModel.value + RuntimeCache.sceneName = dataModel.name } override fun onNothingSelected(parent: AdapterView<*>?) { diff --git a/app/src/main/java/com/casic/br/app/vm/AlarmViewModel.kt b/app/src/main/java/com/casic/br/app/vm/AlarmViewModel.kt index afca9cd..84d8d0a 100644 --- a/app/src/main/java/com/casic/br/app/vm/AlarmViewModel.kt +++ b/app/src/main/java/com/casic/br/app/vm/AlarmViewModel.kt @@ -10,15 +10,9 @@ class AlarmViewModel : BaseViewModel() { fun uploadDetectTargetAlarm( - context: Context, - alarmCode: String, - alarmImgPath: String, - inspectionId: String, - scene: String + context: Context, alarmCode: String, alarmImgPath: String ) = launch({ - val response = RetrofitServiceManager.uploadDetectTargetAlarm( - alarmCode, alarmImgPath, inspectionId, scene - ) + val response = RetrofitServiceManager.uploadDetectTargetAlarm(alarmCode, alarmImgPath) val responseCode = response.getResponseCode() if (responseCode == 200) { "提交成功".show(context) diff --git a/app/src/main/java/com/casic/br/app/vm/HiddenTroubleViewModel.kt b/app/src/main/java/com/casic/br/app/vm/HiddenTroubleViewModel.kt index 3b9160f..0319453 100644 --- a/app/src/main/java/com/casic/br/app/vm/HiddenTroubleViewModel.kt +++ b/app/src/main/java/com/casic/br/app/vm/HiddenTroubleViewModel.kt @@ -24,15 +24,35 @@ fun addHiddenTrouble( context: Context, - mainType: String, - subType: String, - hiddenTroubleName: String, - hiddenTroubleContent: String, - hiddenTroubleImageArray: Array> + mainClass: String, + subClass: String, + sceneName: String, + subClassName: String, + basis: String, + alarmMenuId: String, + content: String, + scene: String, + inspectionId: String, + name: String, + mainClassName: String, + id: String, + imageList: Array> ) = launch({ loadState.value = LoadState.Loading val response = RetrofitServiceManager.addHiddenTrouble( - mainType, subType, hiddenTroubleName, hiddenTroubleContent, hiddenTroubleImageArray + mainClass, + subClass, + sceneName, + subClassName, + basis, + alarmMenuId, + content, + scene, + inspectionId, + name, + mainClassName, + id, + imageList ) when (response.getResponseCode()) { 200 -> { diff --git a/app/src/main/java/com/casic/br/app/fragment/CheckManifestFragment.kt b/app/src/main/java/com/casic/br/app/fragment/CheckManifestFragment.kt index 8ef6703..301007d 100644 --- a/app/src/main/java/com/casic/br/app/fragment/CheckManifestFragment.kt +++ b/app/src/main/java/com/casic/br/app/fragment/CheckManifestFragment.kt @@ -7,6 +7,7 @@ import com.casic.br.app.R import com.casic.br.app.databinding.FragmentCheckManifestBinding import com.casic.br.app.model.SceneCheckManifestModel +import com.casic.br.app.utils.RuntimeCache import com.casic.br.app.vm.CheckManifestViewModel import com.casic.br.app.vm.ConfigViewModel import com.casic.br.app.widgets.CheckStandardSheet @@ -14,8 +15,7 @@ import com.pengxh.kt.lite.adapter.ViewHolder import com.pengxh.kt.lite.base.KotlinBaseFragment -class CheckManifestFragment(private val detectedScene: String) : - KotlinBaseFragment() { +class CheckManifestFragment : KotlinBaseFragment() { private val kTag = "CheckManifestFragment" private lateinit var configViewModel: ConfigViewModel @@ -32,7 +32,7 @@ configViewModel.dictionary.observe(this) { if (it.code == 200) { for (dic in it.data) { - if (dic.name == detectedScene) { + if (dic.name == RuntimeCache.sceneName) { checkManifestViewModel.getCheckManifestByScene(requireContext(), dic.value) return@observe } diff --git a/app/src/main/java/com/casic/br/app/fragment/HiddenTroubleFragment.kt b/app/src/main/java/com/casic/br/app/fragment/HiddenTroubleFragment.kt index 4d66ee0..62fcc4a 100644 --- a/app/src/main/java/com/casic/br/app/fragment/HiddenTroubleFragment.kt +++ b/app/src/main/java/com/casic/br/app/fragment/HiddenTroubleFragment.kt @@ -9,6 +9,7 @@ import com.casic.br.app.databinding.FragmentHiddenTroubleBinding import com.casic.br.app.extensions.combineFilePath import com.casic.br.app.model.HiddenTroubleListResultModel +import com.casic.br.app.utils.RuntimeCache import com.casic.br.app.view.BigImageActivity import com.casic.br.app.vm.InspectionViewModel import com.pengxh.kt.lite.adapter.NormalRecyclerAdapter @@ -17,8 +18,7 @@ import com.pengxh.kt.lite.extensions.navigatePageTo import com.pengxh.kt.lite.extensions.show -class HiddenTroubleFragment(private val inspectionId: String) : - KotlinBaseFragment() { +class HiddenTroubleFragment : KotlinBaseFragment() { private lateinit var inspectionViewModel: InspectionViewModel @@ -28,7 +28,9 @@ override fun initOnCreate(savedInstanceState: Bundle?) { inspectionViewModel = ViewModelProvider(this)[InspectionViewModel::class.java] - inspectionViewModel.getHiddenTroublesByInspectionId(requireContext(), inspectionId) + inspectionViewModel.getHiddenTroublesByInspectionId( + requireContext(), RuntimeCache.inspectionId + ) inspectionViewModel.troublesResultModel.observe(this) { if (it.code == 200) { if (it.data.isEmpty()) { diff --git a/app/src/main/java/com/casic/br/app/retrofit/RetrofitServiceManager.kt b/app/src/main/java/com/casic/br/app/retrofit/RetrofitServiceManager.kt index 79a5386..c4edbee 100644 --- a/app/src/main/java/com/casic/br/app/retrofit/RetrofitServiceManager.kt +++ b/app/src/main/java/com/casic/br/app/retrofit/RetrofitServiceManager.kt @@ -2,6 +2,7 @@ import com.casic.br.app.utils.AuthenticationHelper import com.casic.br.app.utils.LocaleConstant +import com.casic.br.app.utils.RuntimeCache import com.google.gson.Gson import com.google.gson.JsonObject import com.google.gson.reflect.TypeToken @@ -134,22 +135,38 @@ * 添加隐患 */ suspend fun addHiddenTrouble( - mainType: String, - subType: String, - hiddenTroubleName: String, - hiddenTroubleContent: String, - hiddenTroubleImageArray: Array> + mainClass: String, + subClass: String, + sceneName: String, + subClassName: String, + basis: String, + alarmMenuId: String, + content: String, + scene: String, + inspectionId: String, + name: String, + mainClassName: String, + id: String, + imageList: Array> ): String { val param = JsonObject() - param.addProperty("mainClass", mainType) - param.addProperty("subClass", subType) - param.addProperty("name", hiddenTroubleName) - param.addProperty("content", hiddenTroubleContent) - param.add("imageList", gson.toJsonTree(hiddenTroubleImageArray, typeToken).asJsonArray) - + param.addProperty("mainClass", mainClass) + param.addProperty("subClass", subClass) + param.addProperty("sceneName", sceneName) + param.addProperty("subClassName", subClassName) + param.addProperty("basis", basis) + param.addProperty("alarmMenuId", alarmMenuId) + param.addProperty("content", content) + param.addProperty("scene", scene) + param.addProperty("inspectionId", inspectionId) + param.addProperty("name", name) + param.addProperty("mainClassName", mainClassName) + param.addProperty("id", id) + param.add("imageList", gson.toJsonTree(imageList, typeToken).asJsonArray) val requestBody = param.toString().toRequestBody( "application/json;charset=UTF-8".toMediaType() ) + return api.addHiddenTrouble(AuthenticationHelper.token, requestBody) } @@ -251,17 +268,12 @@ /** * 推送报警信息 * */ - suspend fun uploadDetectTargetAlarm( - alarmCode: String, - alarmImgPath: String, - inspectionId: String, - scene: String - ): String { + suspend fun uploadDetectTargetAlarm(alarmCode: String, alarmImgPath: String): String { val param = JsonObject() param.addProperty("alarmCode", alarmCode) param.addProperty("alarmImgPath", alarmImgPath) - param.addProperty("inspectionId", inspectionId) - param.addProperty("scene", scene) + param.addProperty("inspectionId", RuntimeCache.inspectionId) + param.addProperty("scene", RuntimeCache.sceneName) val requestBody = param.toString().toRequestBody( "application/json;charset=UTF-8".toMediaType() diff --git a/app/src/main/java/com/casic/br/app/utils/RuntimeCache.kt b/app/src/main/java/com/casic/br/app/utils/RuntimeCache.kt new file mode 100644 index 0000000..fc87dd1 --- /dev/null +++ b/app/src/main/java/com/casic/br/app/utils/RuntimeCache.kt @@ -0,0 +1,12 @@ +package com.casic.br.app.utils + +import com.casic.br.app.model.DictionaryModel +import org.opencv.core.Mat + +object RuntimeCache { + var scene = "" + var sceneName = "" + var inspectionId = "" + var mainDicModels: MutableList = ArrayList() + lateinit var mat: Mat +} \ No newline at end of file diff --git a/app/src/main/java/com/casic/br/app/view/AddHiddenTroubleActivity.kt b/app/src/main/java/com/casic/br/app/view/AddHiddenTroubleActivity.kt index 0876851..e4f25df 100644 --- a/app/src/main/java/com/casic/br/app/view/AddHiddenTroubleActivity.kt +++ b/app/src/main/java/com/casic/br/app/view/AddHiddenTroubleActivity.kt @@ -1,51 +1,41 @@ package com.casic.br.app.view +import android.graphics.Bitmap import android.os.Bundle import android.util.Log import android.view.View import android.widget.AdapterView import android.widget.ArrayAdapter import androidx.lifecycle.ViewModelProvider -import androidx.lifecycle.lifecycleScope import com.casic.br.app.databinding.ActivityAddHiddenTroubleBinding import com.casic.br.app.extensions.combineFilePath import com.casic.br.app.extensions.compressImage import com.casic.br.app.model.DictionaryModel -import com.casic.br.app.utils.GlideLoadEngine +import com.casic.br.app.utils.RuntimeCache import com.casic.br.app.vm.ConfigViewModel import com.casic.br.app.vm.HiddenTroubleViewModel import com.casic.br.app.vm.ImageFileViewModel import com.casic.br.operationsite.test.callback.OnImageCompressListener -import com.google.gson.Gson -import com.google.gson.reflect.TypeToken -import com.luck.picture.lib.basic.PictureSelector -import com.luck.picture.lib.config.SelectMimeType -import com.luck.picture.lib.entity.LocalMedia -import com.luck.picture.lib.interfaces.OnResultCallbackListener import com.pengxh.kt.lite.adapter.EditableImageAdapter import com.pengxh.kt.lite.base.KotlinBaseActivity import com.pengxh.kt.lite.divider.RecyclerViewItemOffsets +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.saveImage import com.pengxh.kt.lite.extensions.show -import com.pengxh.kt.lite.utils.Constant import com.pengxh.kt.lite.utils.LoadState import com.pengxh.kt.lite.utils.LoadingDialogHub -import kotlinx.coroutines.delay -import kotlinx.coroutines.flow.flow -import kotlinx.coroutines.launch +import org.opencv.android.Utils import java.io.File - class AddHiddenTroubleActivity : KotlinBaseActivity() { private val kTag = "AddHiddenTroubleActivity" private val context = this - private val selectedImages = ArrayList() private val imagePaths = ArrayList>() private val recyclerViewImages = ArrayList() private val marginOffset by lazy { 1.dp2px(this) } - private val gson by lazy { Gson() } private lateinit var imageAdapter: EditableImageAdapter private lateinit var imageFileViewModel: ImageFileViewModel private lateinit var configViewModel: ConfigViewModel @@ -82,11 +72,8 @@ } override fun initOnCreate(savedInstanceState: Bundle?) { - val mainDicJsonValue = intent.getStringExtra(Constant.INTENT_PARAM) //转为实体类 - mainDicModels = gson.fromJson>( - mainDicJsonValue, object : TypeToken>() {}.type - ) + mainDicModels = RuntimeCache.mainDicModels val mainTypeArray = ArrayList() mainDicModels.forEach { mainTypeArray.add(it.name) @@ -124,6 +111,8 @@ val url = it.data.toString() val map = HashMap() map["alarmImage"] = url + map["id"] = "" + map["inspectionAlarmId"] = "" imagePaths.add(map) recyclerViewImages.add(url.combineFilePath()) imageAdapter.notifyDataSetChanged() @@ -169,7 +158,7 @@ imageAdapter.setOnItemClickListener(object : EditableImageAdapter.OnItemClickListener { override fun onAddImageClick() { - selectPicture() + addImage() } override fun onItemClick(position: Int) { @@ -177,7 +166,6 @@ } override fun onItemLongClick(view: View?, position: Int) { - selectedImages.removeAt(position) imagePaths.removeAt(position) recyclerViewImages.removeAt(position) imageAdapter.notifyDataSetChanged() @@ -189,8 +177,16 @@ this, selectedMainTypePosition.toString(), selectedSubTypePosition.toString(), - binding.hiddenTroubleNameView.text.toString(), + RuntimeCache.sceneName, + subDicModels[selectedMainTypePosition].name, + "", + "", binding.hiddenTroubleContentView.text.toString(), + RuntimeCache.scene, + RuntimeCache.inspectionId, + binding.hiddenTroubleNameView.text.toString(), + mainDicModels[selectedMainTypePosition].name, + "", imagePaths.toTypedArray() ) } @@ -198,45 +194,20 @@ binding.cancelButton.setOnClickListener { finish() } } - private fun selectPicture() { - PictureSelector.create(this).openGallery(SelectMimeType.ofImage()).isGif(false) - .isMaxSelectEnabledMask(true).setFilterMinFileSize(100).setMaxSelectNum(3) - .isDisplayCamera(true).setImageEngine(GlideLoadEngine.get) - .setSelectedData(selectedImages) - .forResult(object : OnResultCallbackListener { - override fun onResult(result: ArrayList) { - //重置已选的图片 - selectedImages.clear() - //因为result会带着之前的数据,所以需要清空之前已经add的数据 - recyclerViewImages.clear() - imagePaths.clear() - // 如果设置了setSelectedData,它会将之前的结果作为最新的返回值,要注意重复问题 - // 数据链控制图片压缩上传过程,防止速度过快导致压缩失败 - lifecycleScope.launch { - flow { - result.forEach { - emit(it) - delay(1000) - } - }.collect { - selectedImages.add(it) - //压缩图片并上传 - it.realPath.compressImage(context, object : OnImageCompressListener { - override fun onSuccess(file: File) { - Log.d(kTag, "absolutePath: ${file.absolutePath}") - //上传图片 - imageFileViewModel.uploadImage(file) - } + private fun addImage() { + //mat转图片 + val bitmap = Bitmap.createBitmap(RuntimeCache.mat.width(), RuntimeCache.mat.height(), Bitmap.Config.ARGB_8888) + Utils.matToBitmap(RuntimeCache.mat, bitmap, true) + val imagePath = "${createImageFileDir()}/${System.currentTimeMillis()}.png" + bitmap.saveImage(imagePath) + imagePath.compressImage(this, object : OnImageCompressListener { + override fun onSuccess(file: File) { + imageFileViewModel.uploadImage(file) + } - override fun onError(e: Throwable) { - e.printStackTrace() - } - }) - } - } - } - - override fun onCancel() {} - }) + override fun onError(e: Throwable) { + e.printStackTrace() + } + }) } } \ No newline at end of file diff --git a/app/src/main/java/com/casic/br/app/view/CheckManifestBySceneActivity.kt b/app/src/main/java/com/casic/br/app/view/CheckManifestBySceneActivity.kt index ac49cae..668a576 100644 --- a/app/src/main/java/com/casic/br/app/view/CheckManifestBySceneActivity.kt +++ b/app/src/main/java/com/casic/br/app/view/CheckManifestBySceneActivity.kt @@ -6,8 +6,8 @@ import com.casic.br.app.databinding.ActivityCheckManifestBySceneBinding import com.casic.br.app.fragment.CheckManifestFragment import com.casic.br.app.fragment.HiddenTroubleFragment +import com.casic.br.app.utils.RuntimeCache import com.pengxh.kt.lite.base.KotlinBaseActivity -import com.pengxh.kt.lite.utils.Constant class CheckManifestBySceneActivity : KotlinBaseActivity() { @@ -18,11 +18,9 @@ } override fun initOnCreate(savedInstanceState: Bundle?) { - val args = intent.getStringArrayListExtra(Constant.INTENT_PARAM) as ArrayList - - val subPageTitles = arrayOf("${args[0]}检查清单", "隐患列表") - fragmentPages.add(CheckManifestFragment(args[0])) - fragmentPages.add(HiddenTroubleFragment(args[1])) + val subPageTitles = arrayOf("${RuntimeCache.sceneName}检查清单", "隐患列表") + fragmentPages.add(CheckManifestFragment()) + fragmentPages.add(HiddenTroubleFragment()) val topViewPagerAdapter = TopViewPagerAdapter( supportFragmentManager, subPageTitles, fragmentPages diff --git a/app/src/main/java/com/casic/br/app/view/CheckManifestByTargetActivity.kt b/app/src/main/java/com/casic/br/app/view/CheckManifestByTargetActivity.kt index db1201d..68ed48a 100644 --- a/app/src/main/java/com/casic/br/app/view/CheckManifestByTargetActivity.kt +++ b/app/src/main/java/com/casic/br/app/view/CheckManifestByTargetActivity.kt @@ -6,6 +6,7 @@ import com.casic.br.app.adapter.TopViewPagerAdapter import com.casic.br.app.databinding.ActivityCheckManifestByTargetBinding import com.casic.br.app.fragment.TargetCheckManifestFragment +import com.casic.br.app.utils.RuntimeCache import com.casic.br.app.vm.ConfigViewModel import com.google.gson.Gson import com.google.gson.reflect.TypeToken @@ -24,18 +25,16 @@ } override fun initOnCreate(savedInstanceState: Bundle?) { - val args = intent.getStringArrayListExtra(Constant.INTENT_PARAM) as ArrayList - - val detectedScene = args[0] + val targetJsonValue = intent.getStringExtra(Constant.INTENT_PARAM) as String //场景需要转为字典值 configViewModel = ViewModelProvider(this)[ConfigViewModel::class.java] configViewModel.getDictionaryByCode(this, "securityScene") configViewModel.dictionary.observe(this) { if (it.code == 200) { for (dic in it.data) { - if (dic.name == detectedScene) { + if (dic.name == RuntimeCache.sceneName) { val targetSet = gson.fromJson>( - args[1], object : TypeToken>() {}.type + targetJsonValue, object : TypeToken>() {}.type ) val subPageTitles = ArrayList() targetSet.forEach { target -> diff --git a/app/src/main/java/com/casic/br/app/view/CheckResultActivity.kt b/app/src/main/java/com/casic/br/app/view/CheckResultActivity.kt index 3feb7e3..490bd95 100644 --- a/app/src/main/java/com/casic/br/app/view/CheckResultActivity.kt +++ b/app/src/main/java/com/casic/br/app/view/CheckResultActivity.kt @@ -7,6 +7,7 @@ import com.casic.br.app.databinding.ActivityCheckResultBinding import com.casic.br.app.extensions.combineFilePath import com.casic.br.app.model.HiddenTroubleListResultModel +import com.casic.br.app.utils.RuntimeCache import com.casic.br.app.vm.InspectionViewModel import com.pengxh.kt.lite.adapter.NormalRecyclerAdapter import com.pengxh.kt.lite.adapter.ViewHolder @@ -14,7 +15,6 @@ import com.pengxh.kt.lite.extensions.navigatePageTo import com.pengxh.kt.lite.extensions.show import com.pengxh.kt.lite.extensions.timestampToCompleteDate -import com.pengxh.kt.lite.utils.Constant import com.pengxh.kt.lite.utils.LoadState class CheckResultActivity : KotlinBaseActivity() { @@ -22,13 +22,11 @@ private val kTag = "CheckResultActivity" private val context = this private lateinit var inspectionViewModel: InspectionViewModel - private lateinit var inspectionId: String override fun initEvent() { binding.confirmButton.setOnClickListener { inspectionViewModel.stopInspection( - this, - inspectionId, + this, RuntimeCache.inspectionId, System.currentTimeMillis().timestampToCompleteDate(), binding.inputSiteView.text.toString() ) @@ -38,9 +36,8 @@ } override fun initOnCreate(savedInstanceState: Bundle?) { - inspectionId = intent.getStringExtra(Constant.INTENT_PARAM) as String inspectionViewModel = ViewModelProvider(this)[InspectionViewModel::class.java] - inspectionViewModel.getHiddenTroublesByInspectionId(this, inspectionId) + inspectionViewModel.getHiddenTroublesByInspectionId(this, RuntimeCache.inspectionId) inspectionViewModel.troublesResultModel.observe(this) { if (it.code == 200) { val troublesAdapter = object : diff --git a/app/src/main/java/com/casic/br/app/view/SelectSceneActivity.kt b/app/src/main/java/com/casic/br/app/view/SelectSceneActivity.kt index ce3a88b..d06d6f8 100644 --- a/app/src/main/java/com/casic/br/app/view/SelectSceneActivity.kt +++ b/app/src/main/java/com/casic/br/app/view/SelectSceneActivity.kt @@ -8,6 +8,7 @@ import androidx.lifecycle.ViewModelProvider import com.casic.br.app.databinding.ActivitySelectSceneBinding import com.casic.br.app.model.DictionaryModel +import com.casic.br.app.utils.RuntimeCache import com.casic.br.app.vm.ConfigViewModel import com.pengxh.kt.lite.base.KotlinBaseActivity import com.pengxh.kt.lite.extensions.show @@ -43,7 +44,10 @@ override fun onItemSelected( parent: AdapterView<*>?, view: View?, position: Int, id: Long ) { - selectedValue = sceneDicModels[position].name + val dataModel = sceneDicModels[position] + selectedValue = dataModel.name + RuntimeCache.scene = dataModel.value + RuntimeCache.sceneName = dataModel.name } override fun onNothingSelected(parent: AdapterView<*>?) { diff --git a/app/src/main/java/com/casic/br/app/vm/AlarmViewModel.kt b/app/src/main/java/com/casic/br/app/vm/AlarmViewModel.kt index afca9cd..84d8d0a 100644 --- a/app/src/main/java/com/casic/br/app/vm/AlarmViewModel.kt +++ b/app/src/main/java/com/casic/br/app/vm/AlarmViewModel.kt @@ -10,15 +10,9 @@ class AlarmViewModel : BaseViewModel() { fun uploadDetectTargetAlarm( - context: Context, - alarmCode: String, - alarmImgPath: String, - inspectionId: String, - scene: String + context: Context, alarmCode: String, alarmImgPath: String ) = launch({ - val response = RetrofitServiceManager.uploadDetectTargetAlarm( - alarmCode, alarmImgPath, inspectionId, scene - ) + val response = RetrofitServiceManager.uploadDetectTargetAlarm(alarmCode, alarmImgPath) val responseCode = response.getResponseCode() if (responseCode == 200) { "提交成功".show(context) diff --git a/app/src/main/java/com/casic/br/app/vm/HiddenTroubleViewModel.kt b/app/src/main/java/com/casic/br/app/vm/HiddenTroubleViewModel.kt index 3b9160f..0319453 100644 --- a/app/src/main/java/com/casic/br/app/vm/HiddenTroubleViewModel.kt +++ b/app/src/main/java/com/casic/br/app/vm/HiddenTroubleViewModel.kt @@ -24,15 +24,35 @@ fun addHiddenTrouble( context: Context, - mainType: String, - subType: String, - hiddenTroubleName: String, - hiddenTroubleContent: String, - hiddenTroubleImageArray: Array> + mainClass: String, + subClass: String, + sceneName: String, + subClassName: String, + basis: String, + alarmMenuId: String, + content: String, + scene: String, + inspectionId: String, + name: String, + mainClassName: String, + id: String, + imageList: Array> ) = launch({ loadState.value = LoadState.Loading val response = RetrofitServiceManager.addHiddenTrouble( - mainType, subType, hiddenTroubleName, hiddenTroubleContent, hiddenTroubleImageArray + mainClass, + subClass, + sceneName, + subClassName, + basis, + alarmMenuId, + content, + scene, + inspectionId, + name, + mainClassName, + id, + imageList ) when (response.getResponseCode()) { 200 -> { diff --git a/app/src/main/res/layout/activity_add_hidden_trouble.xml b/app/src/main/res/layout/activity_add_hidden_trouble.xml index ade51ac..b3b27ac 100644 --- a/app/src/main/res/layout/activity_add_hidden_trouble.xml +++ b/app/src/main/res/layout/activity_add_hidden_trouble.xml @@ -107,12 +107,13 @@